{"version":3,"file":"static/js/main.20e8c560.js","mappings":"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AA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,KAAAA,GAAAA,GAAA,WAAAA,GAAA,MAAAA,GAAA,KAAAA,GAAAA,GAAA,WAAAA,GAAA,MAAAA,GAAA,KAAAA,GAAAA,GAAA,UAAAA,GAAAA,GAAA,UAAAA,GAAAA,GAAA,UAAAA,GAAAA,GAAA,UAAAA,GAAAA,GAAA,YAAAA,GAAA,MAAAA,GAAAA,GAAA,aAAAA,GAAA,OAAAA,GAAA,MAAAA,GAAAA,GAAA,YAAAA,GAAAA,GAAA,YAAAA,GAAAA,GAAA,YAAAA,GAAAA,GAAA,YAAAA,GAAAA,GAAA,aAAAA,GAAA,MAAAA,GAAAA,GAAA,aAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,MAAAA,GAAAA,GAAA,aAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,MAAAA,GAAAA,GAAA,aAAAA,GAAA,OAAAA,GAAA,MAAAA,GAAAA,GAAA,YAAAA,GAAAA,GAAA,YAAAA,GAAAA,GAAA,YAAAA,GAAAA,GAAA,aAAAA,GAAA,MAAAA,GAAAA,GAAA,YAAAA,GAAAA,GAAA,aAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,MAAAA,GAAAA,GAAA,YAAAA,GAAAA,GAAA,aAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,MAAAA,GAAAA,GAAA,aAAAA,GAAA,OAAAA,GAAA,MAAAA,GAAAA,GAAA,aAAAA,GAAA,MAAAA,GAAAA,GAAA,YAAAA,GAAAA,GAAA,aAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,MAAAA,GAAAA,GAAA,YAAAA,GAAAA,GAAA,YAAAA,GAAAA,GAAA,YAAAA,GAAAA,GAAA,YAAAA,GAAAA,GAAA,YAAAA,GAAAA,GAAA,aAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,MAAAA,GAAAA,GAAA,YAAAA,GAAAA,GAAA,YAAAA,GAAAA,G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IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACvE,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACvE,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACvE,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACvE,SAAU,IAAM,SAAU,IAC1B,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACvE,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACvE,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACtF,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACtF,SAAU,IAAM,SAAU,IAC1B,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,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","sources":["constants/toast.constants.js","constants/common.constant.js","constants/channel.constants.js","context/Status/reducer.js","context/Status/index.js","helpers/history.js","helpers/utils.js","helpers/api.js","../node_modules/@douyinfe/semi-foundation/lib/es/base/env.js","../node_modules/@douyinfe/semi-foundation/lib/es/base/foundation.js","../node_modules/@douyinfe/semi-foundation/lib/es/popover/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/tooltip/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/typography/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/Event.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/a11y.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/dom.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/function.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/getDataAttr.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/isElement.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/isEnterPress.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/isNullOrUndefined.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/keyCode.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/log.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/uuid.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/warning.js","../node_modules/@douyinfe/semi-icons/lib/es/env.js","../node_modules/@douyinfe/semi-icons/lib/es/components/Icon.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconCalendarClock.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconHelpCircle.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconTick.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconTreeTriangleDown.js","../node_modules/@douyinfe/semi-ui/lib/es/_base/baseComponent.js","../node_modules/@douyinfe/semi-ui/lib/es/_cssAnimation/index.js","../node_modules/@douyinfe/semi-ui/lib/es/_portal/index.js","../node_modules/@douyinfe/semi-ui/lib/es/_utils/semi-global.js","../node_modules/@douyinfe/semi-ui/lib/es/_utils/index.js","../node_modules/@douyinfe/semi-ui/lib/es/configProvider/context.js","../node_modules/@douyinfe/semi-foundation/lib/es/base/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/autoComplete/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/autoComplete/foundation.js","../node_modules/@douyinfe/semi-foundation/lib/es/spin/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/spin/foundation.js","../node_modules/@douyinfe/semi-ui/lib/es/spin/icon.js","../node_modules/@douyinfe/semi-ui/lib/es/spin/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/input/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/input/util/truncateValue.js","../node_modules/@douyinfe/semi-foundation/lib/es/input/foundation.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconClear.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconEyeClosedSolid.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconEyeOpened.js","../node_modules/@douyinfe/semi-ui/lib/es/input/index.js","../node_modules/@douyinfe/semi-ui/lib/es/trigger/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/highlight/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/highlight/foundation.js","../node_modules/@douyinfe/semi-ui/lib/es/highlight/index.js","../node_modules/@douyinfe/semi-ui/lib/es/autoComplete/option.js","../node_modules/@douyinfe/semi-ui/lib/es/autoComplete/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/avatar/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/avatar/foundation.js","../node_modules/@douyinfe/semi-ui/lib/es/avatar/TopSlotSvg.js","../node_modules/@douyinfe/semi-ui/lib/es/avatar/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/button/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/icons/constants.js","../node_modules/@douyinfe/semi-ui/lib/es/button/Button.js","../node_modules/@douyinfe/semi-ui/lib/es/iconButton/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/banner/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/banner/foundation.js","../node_modules/@douyinfe/semi-foundation/lib/es/typography/formatNumeral.js","../node_modules/@douyinfe/semi-ui/lib/es/typography/numeral.js","../node_modules/@douyinfe/semi-ui/lib/es/typography/index.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconClose.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconAlertTriangle.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconTickCircle.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconInfoCircle.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconAlertCircle.js","../node_modules/@douyinfe/semi-ui/lib/es/banner/index.js","../node_modules/@douyinfe/semi-ui/lib/es/button/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/card/constants.js","../node_modules/@douyinfe/semi-ui/lib/es/card/meta.js","../node_modules/@douyinfe/semi-foundation/lib/es/skeleton/constants.js","../node_modules/@douyinfe/semi-ui/lib/es/skeleton/item.js","../node_modules/@douyinfe/semi-ui/lib/es/skeleton/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/space/constants.js","../node_modules/@douyinfe/semi-ui/lib/es/space/utils.js","../node_modules/@douyinfe/semi-ui/lib/es/space/index.js","../node_modules/@douyinfe/semi-ui/lib/es/card/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/checkbox/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/checkbox/checkboxFoundation.js","../node_modules/@douyinfe/semi-ui/lib/es/checkbox/context.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconCheckboxTick.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconCheckboxIndeterminate.js","../node_modules/@douyinfe/semi-ui/lib/es/checkbox/checkboxInner.js","../node_modules/@douyinfe/semi-ui/lib/es/checkbox/checkbox.js","../node_modules/@douyinfe/semi-foundation/lib/es/checkbox/checkboxGroupFoundation.js","../node_modules/@douyinfe/semi-ui/lib/es/checkbox/checkboxGroup.js","../node_modules/@douyinfe/semi-ui/lib/es/checkbox/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/object.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/constants.js","../node_modules/date-fns/esm/isDate/index.js","../node_modules/date-fns/esm/isValid/index.js","../node_modules/date-fns/esm/startOfSecond/index.js","../node_modules/date-fns/esm/isSameSecond/index.js","../node_modules/date-fns/esm/isEqual/index.js","../node_modules/date-fns/esm/subMilliseconds/index.js","../node_modules/date-fns/esm/addMilliseconds/index.js","../node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js","../node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js","../node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js","../node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js","../node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js","../node_modules/date-fns/esm/_lib/getUTCWeek/index.js","../node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js","../node_modules/date-fns/esm/_lib/addLeadingZeros/index.js","../node_modules/date-fns/esm/_lib/format/lightFormatters/index.js","../node_modules/date-fns/esm/_lib/format/formatters/index.js","../node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js","../node_modules/date-fns/esm/_lib/format/longFormatters/index.js","../node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","../node_modules/date-fns/esm/_lib/protectedTokens/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","../node_modules/date-fns/esm/locale/en-US/index.js","../node_modules/date-fns/esm/_lib/defaultLocale/index.js","../node_modules/date-fns/esm/format/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/_utils/isValidDate.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/_utils/isTimestamp.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/isNumber.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/date-fns-extra.js","../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/date-fns/esm/_lib/assign/index.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/date-fns/esm/parse/_lib/Setter.js","../node_modules/date-fns/esm/parse/_lib/Parser.js","../node_modules/date-fns/esm/parse/_lib/parsers/EraParser.js","../node_modules/date-fns/esm/constants/index.js","../node_modules/date-fns/esm/parse/_lib/constants.js","../node_modules/date-fns/esm/parse/_lib/utils.js","../node_modules/date-fns/esm/parse/_lib/parsers/YearParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekYearParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekYearParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/ExtendedYearParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/QuarterParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/StandAloneQuarterParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/MonthParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/StandAloneMonthParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekParser.js","../node_modules/date-fns/esm/_lib/setUTCWeek/index.js","../node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekParser.js","../node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js","../node_modules/date-fns/esm/parse/_lib/parsers/DateParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/DayOfYearParser.js","../node_modules/date-fns/esm/_lib/setUTCDay/index.js","../node_modules/date-fns/esm/parse/_lib/parsers/DayParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/LocalDayParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/StandAloneLocalDayParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/ISODayParser.js","../node_modules/date-fns/esm/_lib/setUTCISODay/index.js","../node_modules/date-fns/esm/parse/_lib/parsers/AMPMParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/AMPMMidnightParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/DayPeriodParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/Hour1to12Parser.js","../node_modules/date-fns/esm/parse/_lib/parsers/Hour0to23Parser.js","../node_modules/date-fns/esm/parse/_lib/parsers/Hour0To11Parser.js","../node_modules/date-fns/esm/parse/_lib/parsers/Hour1To24Parser.js","../node_modules/date-fns/esm/parse/_lib/parsers/MinuteParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/SecondParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/FractionOfSecondParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneWithZParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/TimestampSecondsParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/TimestampMillisecondsParser.js","../node_modules/date-fns/esm/parse/_lib/parsers/index.js","../node_modules/date-fns/esm/parse/index.js","../node_modules/date-fns/esm/parseISO/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/_utils/parser.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/_utils/getDefaultFormatToken.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/_utils/getInsetInputFormatToken.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/_utils/getInsetInputValueFromInsetInputStr.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/_utils/isValidTimeZone.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/foundation.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/_utils/formatter.js","../node_modules/date-fns/esm/addMonths/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/_utils/getDefaultPickerDate.js","utils.ts","copier.ts","index.ts","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/inputFoundation.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconCalendar.js","../node_modules/@douyinfe/semi-ui/lib/es/datePicker/insetInput.js","../node_modules/@douyinfe/semi-ui/lib/es/datePicker/dateInput.js","../node_modules/date-fns/esm/startOfDay/index.js","../node_modules/date-fns/esm/isSameDay/index.js","../node_modules/date-fns/esm/differenceInCalendarMonths/index.js","../node_modules/date-fns/esm/addYears/index.js","../node_modules/date-fns/esm/getDaysInMonth/index.js","../node_modules/date-fns/esm/setMonth/index.js","../node_modules/date-fns/esm/set/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/_utils/getFullDateOffset.js","../node_modules/date-fns/esm/isBefore/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/isString.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/_utils/isBefore.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/_utils/getMonthTable.js","../node_modules/date-fns/esm/lastDayOfMonth/index.js","../node_modules/date-fns/esm/startOfMonth/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/monthsGridFoundation.js","../node_modules/date-fns/esm/differenceInCalendarYears/index.js","../node_modules/date-fns/esm/subMonths/index.js","../node_modules/date-fns/esm/subYears/index.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconDoubleChevronLeft.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconChevronLeft.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconChevronRight.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconDoubleChevronRight.js","../node_modules/@douyinfe/semi-ui/lib/es/datePicker/navigation.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/_utils/getDayOfWeek.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/monthFoundation.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/_utils/isAfter.js","../node_modules/date-fns/esm/isAfter/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/_utils/isSameDay.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/_utils/isBetween.js","../node_modules/date-fns/esm/isWithinInterval/index.js","../node_modules/@douyinfe/semi-ui/lib/es/datePicker/month.js","../node_modules/@douyinfe/semi-foundation/lib/es/timePicker/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/scrollList/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/scrollList/itemFoundation.js","../node_modules/@douyinfe/semi-animation/lib/es/src/getEasing.js","../node_modules/@douyinfe/semi-animation/lib/es/src/utils/Event.js","../node_modules/@douyinfe/semi-animation/lib/es/src/shouldUseBezier.js","../node_modules/@douyinfe/semi-animation/lib/es/src/stripStyle.js","../node_modules/@douyinfe/semi-animation/lib/es/src/stepper.js","../node_modules/@douyinfe/semi-animation/lib/es/src/presets.js","../node_modules/@douyinfe/semi-animation/lib/es/src/wrapValue.js","../node_modules/@douyinfe/semi-animation/lib/es/src/Animation.js","../node_modules/@douyinfe/semi-animation/lib/es/src/mapToZero.js","../node_modules/@douyinfe/semi-animation/lib/es/src/shouldStopAnimation.js","../node_modules/@douyinfe/semi-foundation/lib/es/scrollList/scrollTo.js","../node_modules/@douyinfe/semi-ui/lib/es/scrollList/scrollItem.js","../node_modules/@douyinfe/semi-foundation/lib/es/scrollList/foundation.js","../node_modules/@douyinfe/semi-ui/lib/es/scrollList/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/timePicker/ComboxFoundation.js","../node_modules/@douyinfe/semi-ui/lib/es/timePicker/Combobox.js","../node_modules/date-fns/esm/setYear/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/yearAndMonthFoundation.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/_utils/getYearAndMonth.js","../node_modules/@douyinfe/semi-foundation/lib/es/datePicker/_utils/getYears.js","../node_modules/@douyinfe/semi-ui/lib/es/datePicker/yearAndMonth.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconClock.js","../node_modules/@douyinfe/semi-ui/lib/es/datePicker/monthsGrid.js","../node_modules/@douyinfe/semi-ui/lib/es/datePicker/quickControl.js","../node_modules/@douyinfe/semi-ui/lib/es/datePicker/footer.js","../node_modules/@douyinfe/semi-ui/lib/es/datePicker/datePicker.js","../node_modules/@douyinfe/semi-ui/lib/es/datePicker/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/descriptions/constants.js","../node_modules/@douyinfe/semi-ui/lib/es/descriptions/descriptions-context.js","../node_modules/@douyinfe/semi-ui/lib/es/descriptions/item.js","../node_modules/@douyinfe/semi-foundation/lib/es/descriptions/foundation.js","../node_modules/@douyinfe/semi-ui/lib/es/descriptions/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/divider/constants.js","../node_modules/@douyinfe/semi-ui/lib/es/divider/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/modal/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/isPromise.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/isObject.js","../node_modules/@douyinfe/semi-foundation/lib/es/modal/modalFoundation.js","../node_modules/@douyinfe/semi-foundation/lib/es/modal/modalContentFoundation.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/FocusHandle.js","../node_modules/@douyinfe/semi-ui/lib/es/modal/ModalContent.js","../node_modules/@douyinfe/semi-ui/lib/es/modal/ConfirmModal.js","../node_modules/@douyinfe/semi-ui/lib/es/modal/confirm.js","../node_modules/@douyinfe/semi-ui/lib/es/modal/useModal/HookModal.js","../node_modules/@douyinfe/semi-ui/lib/es/modal/useModal/index.js","../node_modules/@douyinfe/semi-ui/lib/es/modal/Modal.js","../node_modules/@douyinfe/semi-ui/lib/es/modal/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/dropdown/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/dropdown/foundation.js","../node_modules/@douyinfe/semi-foundation/lib/es/dropdown/menuFoundation.js","../node_modules/@douyinfe/semi-ui/lib/es/dropdown/context.js","../node_modules/@douyinfe/semi-ui/lib/es/dropdown/dropdownMenu.js","../node_modules/@douyinfe/semi-ui/lib/es/dropdown/dropdownItem.js","../node_modules/@douyinfe/semi-ui/lib/es/dropdown/dropdownDivider.js","../node_modules/@douyinfe/semi-ui/lib/es/dropdown/dropdownTitle.js","../node_modules/@douyinfe/semi-ui/lib/es/dropdown/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/grid/constants.js","../node_modules/@douyinfe/semi-ui/lib/es/grid/row.js","../node_modules/@douyinfe/semi-ui/lib/es/grid/col.js","../node_modules/@douyinfe/semi-foundation/lib/es/layout/constants.js","../node_modules/@douyinfe/semi-ui/lib/es/layout/layout-context.js","../node_modules/@douyinfe/semi-ui/lib/es/layout/Sider.js","../node_modules/@douyinfe/semi-ui/lib/es/layout/index.js","../node_modules/@douyinfe/semi-ui/lib/es/icons/index.js","../node_modules/@douyinfe/semi-icons/lib/es/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/input/util/calculateNodeHeight.js","../node_modules/@douyinfe/semi-foundation/lib/es/input/util/getSizingData.js","../node_modules/@douyinfe/semi-foundation/lib/es/input/textareaFoundation.js","../node_modules/@douyinfe/semi-ui/lib/es/input/textarea.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/isBothNaN.js","../node_modules/@douyinfe/semi-foundation/lib/es/inputNumber/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/number.js","../node_modules/@douyinfe/semi-foundation/lib/es/inputNumber/foundation.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconChevronUp.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconChevronDown.js","../node_modules/@douyinfe/semi-ui/lib/es/inputNumber/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/navigation/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/navigation/NavItem.js","../node_modules/@douyinfe/semi-foundation/lib/es/navigation/foundation.js","../node_modules/@douyinfe/semi-foundation/lib/es/navigation/subNavFoundation.js","../node_modules/@douyinfe/semi-foundation/lib/es/navigation/itemFoundation.js","../node_modules/@douyinfe/semi-ui/lib/es/navigation/nav-context.js","../node_modules/@douyinfe/semi-ui/lib/es/navigation/Item.js","../node_modules/@douyinfe/semi-foundation/lib/es/collapsible/foundation.js","../node_modules/@douyinfe/semi-foundation/lib/es/collapsible/constants.js","../node_modules/@douyinfe/semi-ui/lib/es/collapsible/index.js","../node_modules/@douyinfe/semi-ui/lib/es/navigation/SubNav.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconSidebar.js","../node_modules/@douyinfe/semi-ui/lib/es/navigation/CollapseButton.js","../node_modules/@douyinfe/semi-ui/lib/es/navigation/Footer.js","../node_modules/@douyinfe/semi-ui/lib/es/navigation/Header.js","../node_modules/@douyinfe/semi-ui/lib/es/navigation/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/popconfirm/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/popconfirm/popconfirmFoundation.js","../node_modules/@douyinfe/semi-ui/lib/es/popconfirm/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/progress/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/progress/generates.js","../node_modules/@douyinfe/semi-ui/lib/es/progress/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/select/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/select/foundation.js","../node_modules/@douyinfe/semi-foundation/lib/es/tag/constants.js","../node_modules/@douyinfe/semi-ui/lib/es/tag/index.js","../node_modules/@douyinfe/semi-ui/lib/es/tag/group.js","../node_modules/@douyinfe/semi-foundation/lib/es/overflowList/constants.js","../node_modules/@douyinfe/semi-ui/lib/es/overflowList/intersectionObserver.js","../node_modules/@douyinfe/semi-foundation/lib/es/overflowList/foundation.js","../node_modules/@douyinfe/semi-ui/lib/es/overflowList/index.js","../node_modules/memoize-one/dist/memoize-one.esm.js","../node_modules/react-window/src/timer.js","../node_modules/react-window/src/domHelpers.js","../node_modules/react-window/src/createGridComponent.js","../node_modules/react-window/src/createListComponent.js","../node_modules/react-window/src/VariableSizeList.js","../node_modules/react-window/src/FixedSizeList.js","../node_modules/@douyinfe/semi-ui/lib/es/select/utils.js","../node_modules/@douyinfe/semi-ui/lib/es/select/virtualRow.js","../node_modules/@douyinfe/semi-ui/lib/es/select/option.js","../node_modules/@douyinfe/semi-ui/lib/es/select/optionGroup.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconSearch.js","../node_modules/@douyinfe/semi-ui/lib/es/select/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/sideSheet/constants.js","../node_modules/@douyinfe/semi-ui/lib/es/sideSheet/SideSheetContent.js","../node_modules/@douyinfe/semi-foundation/lib/es/sideSheet/sideSheetFoundation.js","../node_modules/@douyinfe/semi-ui/lib/es/sideSheet/index.js","../node_modules/@douyinfe/semi-ui/lib/es/button/splitButtonGroup.js","../node_modules/@douyinfe/semi-foundation/lib/es/switch/foundation.js","../node_modules/@douyinfe/semi-foundation/lib/es/switch/constants.js","../node_modules/@douyinfe/semi-ui/lib/es/switch/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/table/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/Logger.js","../node_modules/@douyinfe/semi-foundation/lib/es/table/utils.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/Store.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/set.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/array.js","../node_modules/@douyinfe/semi-foundation/lib/es/table/foundation.js","../node_modules/@douyinfe/semi-ui/lib/es/table/ColumnShape.js","../node_modules/@douyinfe/semi-ui/lib/es/table/Column.js","../node_modules/@douyinfe/semi-ui/lib/es/table/getColumns.js","../node_modules/@douyinfe/semi-ui/lib/es/table/table-context.js","../node_modules/@douyinfe/semi-ui/lib/es/table/TableContextProvider.js","../node_modules/@douyinfe/semi-foundation/lib/es/table/tableSelectionCellFoundation.js","../node_modules/@douyinfe/semi-ui/lib/es/table/ColumnSelection.js","../node_modules/@douyinfe/semi-foundation/lib/es/pagination/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/pagination/foundation.js","../node_modules/@douyinfe/semi-ui/lib/es/pagination/index.js","../node_modules/@douyinfe/semi-ui/lib/es/table/TablePagination.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconFilter.js","../node_modules/@douyinfe/semi-foundation/lib/es/radio/radioFoundation.js","../node_modules/@douyinfe/semi-foundation/lib/es/radio/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/radio/radioInnerFoundation.js","../node_modules/@douyinfe/semi-ui/lib/es/radio/context.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconRadio.js","../node_modules/@douyinfe/semi-ui/lib/es/radio/radioInner.js","../node_modules/@douyinfe/semi-ui/lib/es/radio/radio.js","../node_modules/@douyinfe/semi-ui/lib/es/table/ColumnFilter.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconCaretup.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconCaretdown.js","../node_modules/@douyinfe/semi-ui/lib/es/table/utils.js","../node_modules/@douyinfe/semi-ui/lib/es/table/ColumnSorter.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconTreeTriangleRight.js","../node_modules/@douyinfe/semi-ui/lib/es/table/CustomExpandIcon.js","../node_modules/@douyinfe/semi-ui/lib/es/table/ColGroup.js","../node_modules/@douyinfe/semi-ui/lib/es/table/TableHeaderRow.js","../node_modules/@douyinfe/semi-ui/lib/es/table/TableHeader.js","../node_modules/@douyinfe/semi-ui/lib/es/table/HeadTable.js","../node_modules/@douyinfe/semi-foundation/lib/es/table/bodyFoundation.js","../node_modules/@douyinfe/semi-foundation/lib/es/table/tableRowFoundation.js","../node_modules/@douyinfe/semi-foundation/lib/es/table/cellFoundation.js","../node_modules/@douyinfe/semi-ui/lib/es/table/TableCell.js","../node_modules/@douyinfe/semi-ui/lib/es/table/Body/BaseRow.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/shallowEqualObjects.js","../node_modules/@douyinfe/semi-ui/lib/es/table/Body/ExpandedRow.js","../node_modules/@douyinfe/semi-ui/lib/es/table/Body/SectionRow.js","../node_modules/@douyinfe/semi-ui/lib/es/table/Body/index.js","../node_modules/@douyinfe/semi-ui/lib/es/table/Table.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/classnames.js","../node_modules/@douyinfe/semi-ui/lib/es/table/ResizableHeaderCell.js","../node_modules/@douyinfe/semi-ui/lib/es/table/ResizableTable.js","../node_modules/@douyinfe/semi-ui/lib/es/table/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/tabs/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/tabs/foundation.js","../node_modules/@douyinfe/semi-ui/lib/es/tabs/TabItem.js","../node_modules/@douyinfe/semi-ui/lib/es/tabs/TabBar.js","../node_modules/@douyinfe/semi-ui/lib/es/tabs/tabs-context.js","../node_modules/@douyinfe/semi-ui/lib/es/tabs/TabPane.js","../node_modules/@douyinfe/semi-ui/lib/es/tabs/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/toast/toastListFoundation.js","../node_modules/@douyinfe/semi-foundation/lib/es/toast/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/toast/toastFoundation.js","../node_modules/@douyinfe/semi-ui/lib/es/toast/toast.js","../node_modules/@douyinfe/semi-ui/lib/es/toast/useToast/HookToast.js","../node_modules/@douyinfe/semi-ui/lib/es/toast/useToast/index.js","../node_modules/@douyinfe/semi-ui/lib/es/toast/index.js","../node_modules/src/util.js","../node_modules/src/rule/required.js","../node_modules/src/rule/type.js","../node_modules/src/rule/enum.js","../node_modules/src/rule/index.js","../node_modules/src/rule/whitespace.js","../node_modules/src/rule/range.js","../node_modules/src/rule/pattern.js","../node_modules/src/validator/type.js","../node_modules/src/validator/index.js","../node_modules/src/validator/string.js","../node_modules/src/validator/method.js","../node_modules/src/validator/number.js","../node_modules/src/validator/boolean.js","../node_modules/src/validator/regexp.js","../node_modules/src/validator/integer.js","../node_modules/src/validator/float.js","../node_modules/src/validator/array.js","../node_modules/src/validator/object.js","../node_modules/src/validator/enum.js","../node_modules/src/validator/pattern.js","../node_modules/src/validator/date.js","../node_modules/src/validator/required.js","../node_modules/src/validator/any.js","../node_modules/src/messages.js","../node_modules/src/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/form/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/form/utils.js","../node_modules/compute-scroll-into-view/src/index.ts","../node_modules/scroll-into-view-if-needed/es/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/form/foundation.js","../node_modules/@douyinfe/semi-ui/lib/es/form/context.js","../node_modules/@douyinfe/semi-ui/lib/es/_base/reactUtils.js","../node_modules/@douyinfe/semi-ui/lib/es/form/label.js","../node_modules/@douyinfe/semi-ui/lib/es/form/errorMessage.js","../node_modules/@douyinfe/semi-ui/lib/es/form/slot.js","../node_modules/@douyinfe/semi-ui/lib/es/form/section.js","../node_modules/@douyinfe/semi-ui/lib/es/form/hooks/useFormState.js","../node_modules/@douyinfe/semi-ui/lib/es/input/inputGroup.js","../node_modules/@douyinfe/semi-ui/lib/es/form/group.js","../node_modules/@douyinfe/semi-ui/lib/es/form/hooks/useArrayFieldState.js","../node_modules/@douyinfe/semi-ui/lib/es/form/hooks/useStateWithGetter.js","../node_modules/@douyinfe/semi-ui/lib/es/form/hoc/withField.js","../node_modules/@douyinfe/semi-ui/lib/es/form/hooks/useFormUpdater.js","../node_modules/@douyinfe/semi-foundation/lib/es/radio/radioGroupFoundation.js","../node_modules/@douyinfe/semi-ui/lib/es/radio/radioGroup.js","../node_modules/@douyinfe/semi-foundation/lib/es/slider/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/touchPolyfill.js","../node_modules/@douyinfe/semi-foundation/lib/es/slider/foundation.js","../node_modules/@douyinfe/semi-ui/lib/es/slider/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/timePicker/utils/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/timePicker/foundation.js","../node_modules/date-fns/esm/getHours/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/timePicker/inputFoundation.js","../node_modules/@douyinfe/semi-ui/lib/es/timePicker/TimeInput.js","../node_modules/@douyinfe/semi-ui/lib/es/timePicker/PanelShape.js","../node_modules/@douyinfe/semi-ui/lib/es/timePicker/TimeShape.js","../node_modules/@douyinfe/semi-ui/lib/es/timePicker/TimePicker.js","../node_modules/@douyinfe/semi-ui/lib/es/timePicker/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/treeSelect/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/tree/treeUtil.js","../node_modules/@douyinfe/semi-foundation/lib/es/treeSelect/foundation.js","../node_modules/@douyinfe/semi-foundation/lib/es/tree/constants.js","../node_modules/@douyinfe/semi-ui/lib/es/tree/autoSizer.js","../node_modules/@douyinfe/semi-ui/lib/es/tree/treeContext.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconFile.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconFolderOpen.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconFolder.js","../node_modules/@douyinfe/semi-ui/lib/es/tree/indent.js","../node_modules/@douyinfe/semi-ui/lib/es/tree/treeNode.js","../node_modules/@douyinfe/semi-ui/lib/es/tree/nodeCollapsible.js","../node_modules/@douyinfe/semi-ui/lib/es/tree/nodeList.js","../node_modules/@douyinfe/semi-ui/lib/es/tree/treeUtil.js","../node_modules/@douyinfe/semi-foundation/lib/es/tagInput/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/tagInput/utils/getSplitedArray.js","../node_modules/@douyinfe/semi-foundation/lib/es/tagInput/foundation.js","../node_modules/@douyinfe/semi-foundation/lib/es/utils/arrayMove.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconHandle.js","../node_modules/@dnd-kit/utilities/src/execution-context/canUseDOM.ts","../node_modules/@dnd-kit/utilities/src/type-guards/isWindow.ts","../node_modules/@dnd-kit/utilities/src/type-guards/isNode.ts","../node_modules/@dnd-kit/utilities/src/execution-context/getWindow.ts","../node_modules/@dnd-kit/utilities/src/type-guards/isDocument.ts","../node_modules/@dnd-kit/utilities/src/type-guards/isHTMLElement.ts","../node_modules/@dnd-kit/utilities/src/type-guards/isSVGElement.ts","../node_modules/@dnd-kit/utilities/src/execution-context/getOwnerDocument.ts","../node_modules/@dnd-kit/utilities/src/hooks/useIsomorphicLayoutEffect.ts","../node_modules/@dnd-kit/utilities/src/hooks/useEvent.ts","../node_modules/@dnd-kit/utilities/src/hooks/useLatestValue.ts","../node_modules/@dnd-kit/utilities/src/hooks/useLazyMemo.ts","../node_modules/@dnd-kit/utilities/src/hooks/useNodeRef.ts","../node_modules/@dnd-kit/utilities/src/hooks/usePrevious.ts","../node_modules/@dnd-kit/utilities/src/hooks/useUniqueId.ts","../node_modules/@dnd-kit/utilities/src/adjustment.ts","../node_modules/@dnd-kit/utilities/src/event/isKeyboardEvent.ts","../node_modules/@dnd-kit/utilities/src/coordinates/getEventCoordinates.ts","../node_modules/@dnd-kit/utilities/src/event/isTouchEvent.ts","../node_modules/@dnd-kit/utilities/src/event/hasViewportRelativeCoordinates.ts","../node_modules/@dnd-kit/utilities/src/css.ts","../node_modules/@dnd-kit/utilities/src/focus/findFirstFocusableNode.ts","../node_modules/@dnd-kit/accessibility/src/components/HiddenText/HiddenText.tsx","../node_modules/@dnd-kit/accessibility/src/components/LiveRegion/LiveRegion.tsx","../node_modules/@dnd-kit/core/src/components/DndMonitor/context.ts","../node_modules/@dnd-kit/core/src/components/Accessibility/defaults.ts","../node_modules/@dnd-kit/core/src/components/Accessibility/Accessibility.tsx","../node_modules/@dnd-kit/accessibility/src/hooks/useAnnouncement.ts","../node_modules/@dnd-kit/core/src/components/DndMonitor/useDndMonitor.ts","../node_modules/@dnd-kit/core/src/store/actions.ts","../node_modules/@dnd-kit/core/src/utilities/other/noop.ts","../node_modules/@dnd-kit/core/src/sensors/useSensor.ts","../node_modules/@dnd-kit/core/src/utilities/coordinates/constants.ts","../node_modules/@dnd-kit/core/src/utilities/coordinates/distanceBetweenPoints.ts","../node_modules/@dnd-kit/core/src/utilities/coordinates/getRelativeTransformOrigin.ts","../node_modules/@dnd-kit/core/src/utilities/algorithms/helpers.ts","../node_modules/@dnd-kit/core/src/utilities/algorithms/closestCenter.ts","../node_modules/@dnd-kit/core/src/utilities/algorithms/rectIntersection.ts","../node_modules/@dnd-kit/core/src/utilities/rect/getRectDelta.ts","../node_modules/@dnd-kit/core/src/utilities/rect/rectAdjustment.ts","../node_modules/@dnd-kit/core/src/utilities/transform/parseTransform.ts","../node_modules/@dnd-kit/core/src/utilities/rect/getRect.ts","../node_modules/@dnd-kit/core/src/utilities/transform/inverseTransform.ts","../node_modules/@dnd-kit/core/src/utilities/scroll/getScrollableAncestors.ts","../node_modules/@dnd-kit/core/src/utilities/scroll/isScrollable.ts","../node_modules/@dnd-kit/core/src/utilities/scroll/isFixed.ts","../node_modules/@dnd-kit/core/src/utilities/scroll/getScrollableElement.ts","../node_modules/@dnd-kit/core/src/utilities/scroll/getScrollCoordinates.ts","../node_modules/@dnd-kit/core/src/types/direction.ts","../node_modules/@dnd-kit/core/src/utilities/scroll/documentScrollingElement.ts","../node_modules/@dnd-kit/core/src/utilities/scroll/getScrollPosition.ts","../node_modules/@dnd-kit/core/src/utilities/scroll/getScrollDirectionAndSpeed.ts","../node_modules/@dnd-kit/core/src/utilities/scroll/getScrollElementRect.ts","../node_modules/@dnd-kit/core/src/utilities/scroll/getScrollOffsets.ts","../node_modules/@dnd-kit/core/src/utilities/scroll/scrollIntoViewIfNeeded.ts","../node_modules/@dnd-kit/core/src/utilities/rect/Rect.ts","../node_modules/@dnd-kit/core/src/sensors/utilities/Listeners.ts","../node_modules/@dnd-kit/core/src/sensors/utilities/hasExceededDistance.ts","../node_modules/@dnd-kit/core/src/sensors/events.ts","../node_modules/@dnd-kit/core/src/sensors/keyboard/types.ts","../node_modules/@dnd-kit/core/src/sensors/keyboard/defaults.ts","../node_modules/@dnd-kit/core/src/sensors/keyboard/KeyboardSensor.ts","../node_modules/@dnd-kit/core/src/sensors/pointer/AbstractPointerSensor.ts","../node_modules/@dnd-kit/core/src/sensors/utilities/getEventListenerTarget.ts","../node_modules/@dnd-kit/core/src/sensors/pointer/PointerSensor.ts","../node_modules/@dnd-kit/core/src/sensors/mouse/MouseSensor.ts","../node_modules/@dnd-kit/core/src/sensors/touch/TouchSensor.ts","../node_modules/@dnd-kit/core/src/hooks/utilities/useAutoScroller.ts","../node_modules/@dnd-kit/utilities/src/hooks/useInterval.ts","../node_modules/@dnd-kit/core/src/hooks/utilities/useDroppableMeasuring.ts","../node_modules/@dnd-kit/core/src/hooks/utilities/useInitialValue.ts","../node_modules/@dnd-kit/core/src/hooks/utilities/useResizeObserver.ts","../node_modules/@dnd-kit/core/src/hooks/utilities/useRect.ts","../node_modules/@dnd-kit/core/src/hooks/utilities/useMutationObserver.ts","../node_modules/@dnd-kit/core/src/hooks/utilities/useScrollableAncestors.ts","../node_modules/@dnd-kit/core/src/hooks/utilities/useScrollOffsetsDelta.ts","../node_modules/@dnd-kit/core/src/hooks/utilities/useWindowRect.ts","../node_modules/@dnd-kit/core/src/utilities/rect/getWindowClientRect.ts","../node_modules/@dnd-kit/core/src/hooks/utilities/useRects.ts","../node_modules/@dnd-kit/core/src/utilities/nodes/getMeasurableNode.ts","../node_modules/@dnd-kit/core/src/components/DndContext/defaults.ts","../node_modules/@dnd-kit/core/src/store/constructors.ts","../node_modules/@dnd-kit/core/src/store/context.ts","../node_modules/@dnd-kit/core/src/store/reducer.ts","../node_modules/@dnd-kit/core/src/components/Accessibility/components/RestoreFocus.tsx","../node_modules/@dnd-kit/core/src/modifiers/applyModifiers.ts","../node_modules/@dnd-kit/core/src/components/DndContext/DndContext.tsx","../node_modules/@dnd-kit/core/src/components/DndMonitor/useDndMonitorProvider.tsx","../node_modules/@dnd-kit/core/src/components/DndContext/hooks/useMeasuringConfiguration.ts","../node_modules/@dnd-kit/core/src/hooks/utilities/useCachedNode.ts","../node_modules/@dnd-kit/core/src/hooks/utilities/useInitialRect.ts","../node_modules/@dnd-kit/core/src/components/DndContext/hooks/useLayoutShiftScrollCompensation.ts","../node_modules/@dnd-kit/core/src/hooks/utilities/useDragOverlayMeasuring.ts","../node_modules/@dnd-kit/core/src/hooks/utilities/useRectDelta.ts","../node_modules/@dnd-kit/core/src/hooks/utilities/useScrollOffsets.ts","../node_modules/@dnd-kit/core/src/utilities/rect/adjustScale.ts","../node_modules/@dnd-kit/core/src/hooks/utilities/useCombineActivators.ts","../node_modules/@dnd-kit/core/src/hooks/utilities/useSensorSetup.ts","../node_modules/@dnd-kit/core/src/hooks/useDraggable.ts","../node_modules/@dnd-kit/core/src/hooks/utilities/useSyntheticListeners.ts","../node_modules/@dnd-kit/core/src/hooks/useDndContext.ts","../node_modules/@dnd-kit/core/src/hooks/useDroppable.ts","../node_modules/@dnd-kit/core/src/components/DragOverlay/components/AnimationManager/AnimationManager.tsx","../node_modules/@dnd-kit/core/src/components/DragOverlay/components/NullifiedContextProvider/NullifiedContextProvider.tsx","../node_modules/@dnd-kit/core/src/components/DragOverlay/components/PositionedOverlay/PositionedOverlay.tsx","../node_modules/@dnd-kit/core/src/components/DragOverlay/hooks/useDropAnimation.ts","../node_modules/@dnd-kit/core/src/components/DragOverlay/hooks/useKey.ts","../node_modules/@dnd-kit/core/src/components/DragOverlay/DragOverlay.tsx","../node_modules/@dnd-kit/sortable/src/utilities/arrayMove.ts","../node_modules/@dnd-kit/sortable/src/utilities/getSortedRects.ts","../node_modules/@dnd-kit/sortable/src/utilities/isValidIndex.ts","../node_modules/@dnd-kit/sortable/src/strategies/rectSorting.ts","../node_modules/@dnd-kit/sortable/src/components/SortableContext.tsx","../node_modules/@dnd-kit/sortable/src/utilities/itemsEqual.ts","../node_modules/@dnd-kit/sortable/src/utilities/normalizeDisabled.ts","../node_modules/@dnd-kit/sortable/src/hooks/defaults.ts","../node_modules/@dnd-kit/sortable/src/hooks/useSortable.ts","../node_modules/@dnd-kit/utilities/src/hooks/useCombinedRefs.ts","../node_modules/@dnd-kit/sortable/src/hooks/utilities/useDerivedTransform.ts","../node_modules/@dnd-kit/sortable/src/types/type-guard.ts","../node_modules/@dnd-kit/sortable/src/sensors/keyboard/sortableKeyboardCoordinates.ts","../node_modules/@douyinfe/semi-ui/lib/es/_sortable/index.js","../node_modules/@dnd-kit/core/src/utilities/algorithms/closestCorners.ts","../node_modules/@dnd-kit/core/src/sensors/useSensors.ts","../node_modules/@douyinfe/semi-ui/lib/es/tagInput/index.js","../node_modules/@douyinfe/semi-ui/lib/es/treeSelect/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/cascader/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/cascader/util.js","../node_modules/@douyinfe/semi-foundation/lib/es/cascader/foundation.js","../node_modules/@douyinfe/semi-ui/lib/es/cascader/virtualRow.js","../node_modules/@douyinfe/semi-ui/lib/es/cascader/item.js","../node_modules/@douyinfe/semi-ui/lib/es/cascader/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/rating/constants.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconStar.js","../node_modules/@douyinfe/semi-foundation/lib/es/rating/foundation.js","../node_modules/@douyinfe/semi-ui/lib/es/rating/item.js","../node_modules/@douyinfe/semi-ui/lib/es/rating/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/upload/constants.js","../node_modules/@douyinfe/semi-foundation/lib/es/upload/utils.js","../node_modules/@douyinfe/semi-foundation/lib/es/upload/foundation.js","../node_modules/@douyinfe/semi-foundation/lib/es/upload/fileCardFoundation.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconRefresh.js","../node_modules/@douyinfe/semi-ui/lib/es/upload/fileCard.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconUpload.js","../node_modules/@douyinfe/semi-ui/lib/es/upload/index.js","../node_modules/@douyinfe/semi-ui/lib/es/form/field.js","../node_modules/@douyinfe/semi-ui/lib/es/form/baseForm.js","../node_modules/@douyinfe/semi-foundation/lib/es/image/constants.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconUploadError.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconArrowLeft.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconArrowRight.js","../node_modules/@douyinfe/semi-ui/lib/es/image/previewContext.js","../node_modules/@douyinfe/semi-ui/lib/es/image/previewHeader.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconMinus.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconPlus.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconRealSizeStroked.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconWindowAdaptionStroked.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconRotate.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconDownload.js","../node_modules/@douyinfe/semi-foundation/lib/es/image/previewFooterFoundation.js","../node_modules/@douyinfe/semi-ui/lib/es/image/previewFooter.js","../node_modules/@douyinfe/semi-foundation/lib/es/image/previewImageFoundation.js","../node_modules/@douyinfe/semi-ui/lib/es/image/previewImage.js","../node_modules/@douyinfe/semi-foundation/lib/es/image/utils.js","../node_modules/@douyinfe/semi-foundation/lib/es/image/previewInnerFoundation.js","../node_modules/@douyinfe/semi-ui/lib/es/image/previewInner.js","../node_modules/@douyinfe/semi-foundation/lib/es/image/imageFoundation.js","../node_modules/@douyinfe/semi-ui/lib/es/image/image.js","../node_modules/@douyinfe/semi-ui/lib/es/image/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/image/previewFoundation.js","../node_modules/@douyinfe/semi-ui/lib/es/image/preview.js","../node_modules/@douyinfe/semi-ui/lib/es/locale/context.js","../node_modules/@douyinfe/semi-ui/lib/es/locale/source/zh_CN.js","../node_modules/@douyinfe/semi-ui/lib/es/locale/localeConsumer.js","../node_modules/@douyinfe/semi-ui/lib/es/popover/Arrow.js","../node_modules/@douyinfe/semi-ui/lib/es/popover/index.js","../node_modules/@douyinfe/semi-ui/lib/es/resizeObserver/index.js","../node_modules/@douyinfe/semi-foundation/lib/es/tooltip/foundation.js","../node_modules/@douyinfe/semi-ui/lib/es/tooltip/TriangleArrow.js","../node_modules/@douyinfe/semi-ui/lib/es/tooltip/TriangleArrowVertical.js","../node_modules/@douyinfe/semi-ui/lib/es/tooltip/ArrowBoundingShape.js","../node_modules/@douyinfe/semi-ui/lib/es/tooltip/index.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconCopy.js","../node_modules/@douyinfe/semi-ui/lib/es/typography/copyable.js","../node_modules/@douyinfe/semi-ui/lib/es/typography/util.js","../node_modules/@douyinfe/semi-ui/lib/es/typography/context.js","../node_modules/@douyinfe/semi-ui/lib/es/typography/base.js","../node_modules/@douyinfe/semi-ui/lib/es/typography/paragraph.js","../node_modules/@douyinfe/semi-ui/lib/es/typography/text.js","../node_modules/@douyinfe/semi-ui/lib/es/typography/title.js","../node_modules/@douyinfe/semi-ui/lib/es/typography/typography.js","../node_modules/@fluentui/react-component-ref/dist/es/RefFindNode.tsx","../node_modules/@fluentui/react-component-ref/dist/es/RefForward.tsx","../node_modules/@fluentui/react-component-ref/dist/es/Ref.tsx","../node_modules/@fluentui/react-component-ref/dist/es/utils.ts","../node_modules/@fluentui/react-component-ref/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/@fluentui/react-component-ref/node_modules/react-is/index.js","../node_modules/@semantic-ui-react/event-stack/lib/cjs/event-stack.production.js","../node_modules/@semantic-ui-react/event-stack/lib/index.js","../node_modules/axios/index.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/normalizeHeaderName.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/utils.js","../node_modules/bezier-easing/src/index.js","../node_modules/clsx/dist/clsx.m.js","../node_modules/copy-text-to-clipboard/index.js","../node_modules/date-fns/_lib/addLeadingZeros/index.js","../node_modules/date-fns/_lib/assign/index.js","../node_modules/date-fns/_lib/cloneObject/index.js","../node_modules/date-fns/_lib/defaultLocale/index.js","../node_modules/date-fns/_lib/defaultOptions/index.js","../node_modules/date-fns/_lib/format/formatters/index.js","../node_modules/date-fns/_lib/format/lightFormatters/index.js","../node_modules/date-fns/_lib/format/longFormatters/index.js","../node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds/index.js","../node_modules/date-fns/_lib/getUTCDayOfYear/index.js","../node_modules/date-fns/_lib/getUTCISOWeek/index.js","../node_modules/date-fns/_lib/getUTCISOWeekYear/index.js","../node_modules/date-fns/_lib/getUTCWeek/index.js","../node_modules/date-fns/_lib/getUTCWeekYear/index.js","../node_modules/date-fns/_lib/protectedTokens/index.js","../node_modules/date-fns/_lib/requiredArgs/index.js","../node_modules/date-fns/_lib/startOfUTCISOWeek/index.js","../node_modules/date-fns/_lib/startOfUTCISOWeekYear/index.js","../node_modules/date-fns/_lib/startOfUTCWeek/index.js","../node_modules/date-fns/_lib/startOfUTCWeekYear/index.js","../node_modules/date-fns/_lib/toInteger/index.js","../node_modules/date-fns/addMilliseconds/index.js","../node_modules/date-fns/esm/_lib/defaultOptions/index.js","../node_modules/date-fns/esm/_lib/requiredArgs/index.js","../node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js","../node_modules/date-fns/esm/_lib/toInteger/index.js","../node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","../node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","../node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","../node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","../node_modules/date-fns/esm/locale/zh-CN/_lib/formatDistance/index.js","../node_modules/date-fns/esm/locale/zh-CN/_lib/formatLong/index.js","../node_modules/date-fns/esm/locale/zh-CN/_lib/formatRelative/index.js","../node_modules/date-fns/esm/_lib/isSameUTCWeek/index.js","../node_modules/date-fns/esm/locale/zh-CN/_lib/localize/index.js","../node_modules/date-fns/esm/locale/zh-CN/index.js","../node_modules/date-fns/esm/locale/zh-CN/_lib/match/index.js","../node_modules/date-fns/esm/toDate/index.js","../node_modules/date-fns/format/index.js","../node_modules/date-fns/isDate/index.js","../node_modules/date-fns/isValid/index.js","../node_modules/date-fns/locale/_lib/buildFormatLongFn/index.js","../node_modules/date-fns/locale/_lib/buildLocalizeFn/index.js","../node_modules/date-fns/locale/_lib/buildMatchFn/index.js","../node_modules/date-fns/locale/_lib/buildMatchPatternFn/index.js","../node_modules/date-fns/locale/en-US/_lib/formatDistance/index.js","../node_modules/date-fns/locale/en-US/_lib/formatLong/index.js","../node_modules/date-fns/locale/en-US/_lib/formatRelative/index.js","../node_modules/date-fns/locale/en-US/_lib/localize/index.js","../node_modules/date-fns/locale/en-US/_lib/match/index.js","../node_modules/date-fns/locale/en-US/index.js","../node_modules/date-fns/subMilliseconds/index.js","../node_modules/date-fns/toDate/index.js","../node_modules/eventemitter3/index.js","../node_modules/exenv/index.js","../node_modules/keyboard-key/src/keyboardKey.js","../node_modules/lodash/_DataView.js","../node_modules/lodash/_Hash.js","../node_modules/lodash/_ListCache.js","../node_modules/lodash/_Map.js","../node_modules/lodash/_MapCache.js","../node_modules/lodash/_Promise.js","../node_modules/lodash/_Set.js","../node_modules/lodash/_SetCache.js","../node_modules/lodash/_Stack.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_Uint8Array.js","../node_modules/lodash/_WeakMap.js","../node_modules/lodash/_apply.js","../node_modules/lodash/_arrayEach.js","../node_modules/lodash/_arrayFilter.js","../node_modules/lodash/_arrayIncludes.js","../node_modules/lodash/_arrayIncludesWith.js","../node_modules/lodash/_arrayLikeKeys.js","../node_modules/lodash/_arrayMap.js","../node_modules/lodash/_arrayPush.js","../node_modules/lodash/_arraySome.js","../node_modules/lodash/_asciiSize.js","../node_modules/lodash/_asciiToArray.js","../node_modules/lodash/_assignMergeValue.js","../node_modules/lodash/_assignValue.js","../node_modules/lodash/_assocIndexOf.js","../node_modules/lodash/_baseAssign.js","../node_modules/lodash/_baseAssignIn.js","../node_modules/lodash/_baseAssignValue.js","../node_modules/lodash/_baseClone.js","../node_modules/lodash/_baseCreate.js","../node_modules/lodash/_baseDifference.js","../node_modules/lodash/_baseEach.js","../node_modules/lodash/_baseExtremum.js","../node_modules/lodash/_baseFilter.js","../node_modules/lodash/_baseFindIndex.js","../node_modules/lodash/_baseFlatten.js","../node_modules/lodash/_baseFor.js","../node_modules/lodash/_baseForOwn.js","../node_modules/lodash/_baseGet.js","../node_modules/lodash/_baseGetAllKeys.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/_baseGt.js","../node_modules/lodash/_baseHas.js","../node_modules/lodash/_baseHasIn.js","../node_modules/lodash/_baseIndexOf.js","../node_modules/lodash/_baseIndexOfWith.js","../node_modules/lodash/_baseIsArguments.js","../node_modules/lodash/_baseIsDate.js","../node_modules/lodash/_baseIsEqual.js","../node_modules/lodash/_baseIsEqualDeep.js","../node_modules/lodash/_baseIsMap.js","../node_modules/lodash/_baseIsMatch.js","../node_modules/lodash/_baseIsNaN.js","../node_modules/lodash/_baseIsNative.js","../node_modules/lodash/_baseIsRegExp.js","../node_modules/lodash/_baseIsSet.js","../node_modules/lodash/_baseIsTypedArray.js","../node_modules/lodash/_baseIteratee.js","../node_modules/lodash/_baseKeys.js","../node_modules/lodash/_baseKeysIn.js","../node_modules/lodash/_baseMap.js","../node_modules/lodash/_baseMatches.js","../node_modules/lodash/_baseMatchesProperty.js","../node_modules/lodash/_baseMerge.js","../node_modules/lodash/_baseMergeDeep.js","../node_modules/lodash/_basePick.js","../node_modules/lodash/_basePickBy.js","../node_modules/lodash/_baseProperty.js","../node_modules/lodash/_basePropertyDeep.js","../node_modules/lodash/_basePullAll.js","../node_modules/lodash/_baseRest.js","../node_modules/lodash/_baseSet.js","../node_modules/lodash/_baseSetToString.js","../node_modules/lodash/_baseSlice.js","../node_modules/lodash/_baseSome.js","../node_modules/lodash/_baseTimes.js","../node_modules/lodash/_baseToString.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_baseUnary.js","../node_modules/lodash/_baseUniq.js","../node_modules/lodash/_baseUnset.js","../node_modules/lodash/_baseValues.js","../node_modules/lodash/_cacheHas.js","../node_modules/lodash/_castFunction.js","../node_modules/lodash/_castPath.js","../node_modules/lodash/_castSlice.js","../node_modules/lodash/_cloneArrayBuffer.js","../node_modules/lodash/_cloneBuffer.js","../node_modules/lodash/_cloneDataView.js","../node_modules/lodash/_cloneRegExp.js","../node_modules/lodash/_cloneSymbol.js","../node_modules/lodash/_cloneTypedArray.js","../node_modules/lodash/_copyArray.js","../node_modules/lodash/_copyObject.js","../node_modules/lodash/_copySymbols.js","../node_modules/lodash/_copySymbolsIn.js","../node_modules/lodash/_coreJsData.js","../node_modules/lodash/_createAssigner.js","../node_modules/lodash/_createBaseEach.js","../node_modules/lodash/_createBaseFor.js","../node_modules/lodash/_createFind.js","../node_modules/lodash/_createSet.js","../node_modules/lodash/_customOmitClone.js","../node_modules/lodash/_defineProperty.js","../node_modules/lodash/_equalArrays.js","../node_modules/lodash/_equalByTag.js","../node_modules/lodash/_equalObjects.js","../node_modules/lodash/_flatRest.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_getAllKeys.js","../node_modules/lodash/_getAllKeysIn.js","../node_modules/lodash/_getMapData.js","../node_modules/lodash/_getMatchData.js","../node_modules/lodash/_getNative.js","../node_modules/lodash/_getPrototype.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_getSymbols.js","../node_modules/lodash/_getSymbolsIn.js","../node_modules/lodash/_getTag.js","../node_modules/lodash/_getValue.js","../node_modules/lodash/_hasPath.js","../node_modules/lodash/_hasUnicode.js","../node_modules/lodash/_hashClear.js","../node_modules/lodash/_hashDelete.js","../node_modules/lodash/_hashGet.js","../node_modules/lodash/_hashHas.js","../node_modules/lodash/_hashSet.js","../node_modules/lodash/_initCloneArray.js","../node_modules/lodash/_initCloneByTag.js","../node_modules/lodash/_initCloneObject.js","../node_modules/lodash/_isFlattenable.js","../node_modules/lodash/_isIndex.js","../node_modules/lodash/_isIterateeCall.js","../node_modules/lodash/_isKey.js","../node_modules/lodash/_isKeyable.js","../node_modules/lodash/_isMasked.js","../node_modules/lodash/_isPrototype.js","../node_modules/lodash/_isStrictComparable.js","../node_modules/lodash/_listCacheClear.js","../node_modules/lodash/_listCacheDelete.js","../node_modules/lodash/_listCacheGet.js","../node_modules/lodash/_listCacheHas.js","../node_modules/lodash/_listCacheSet.js","../node_modules/lodash/_mapCacheClear.js","../node_modules/lodash/_mapCacheDelete.js","../node_modules/lodash/_mapCacheGet.js","../node_modules/lodash/_mapCacheHas.js","../node_modules/lodash/_mapCacheSet.js","../node_modules/lodash/_mapToArray.js","../node_modules/lodash/_matchesStrictComparable.js","../node_modules/lodash/_memoizeCapped.js","../node_modules/lodash/_nativeCreate.js","../node_modules/lodash/_nativeKeys.js","../node_modules/lodash/_nativeKeysIn.js","../node_modules/lodash/_nodeUtil.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_overArg.js","../node_modules/lodash/_overRest.js","../node_modules/lodash/_parent.js","../node_modules/lodash/_root.js","../node_modules/lodash/_safeGet.js","../node_modules/lodash/_setCacheAdd.js","../node_modules/lodash/_setCacheHas.js","../node_modules/lodash/_setToArray.js","../node_modules/lodash/_setToString.js","../node_modules/lodash/_shortOut.js","../node_modules/lodash/_stackClear.js","../node_modules/lodash/_stackDelete.js","../node_modules/lodash/_stackGet.js","../node_modules/lodash/_stackHas.js","../node_modules/lodash/_stackSet.js","../node_modules/lodash/_strictIndexOf.js","../node_modules/lodash/_stringSize.js","../node_modules/lodash/_stringToArray.js","../node_modules/lodash/_stringToPath.js","../node_modules/lodash/_toKey.js","../node_modules/lodash/_toSource.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_unicodeSize.js","../node_modules/lodash/_unicodeToArray.js","../node_modules/lodash/assign.js","../node_modules/lodash/clone.js","../node_modules/lodash/cloneDeepWith.js","../node_modules/lodash/constant.js","../node_modules/lodash/debounce.js","../node_modules/lodash/difference.js","../node_modules/lodash/each.js","../node_modules/lodash/eq.js","../node_modules/lodash/filter.js","../node_modules/lodash/find.js","../node_modules/lodash/findIndex.js","../node_modules/lodash/findLastIndex.js","../node_modules/lodash/flatten.js","../node_modules/lodash/flattenDeep.js","../node_modules/lodash/forEach.js","../node_modules/lodash/get.js","../node_modules/lodash/has.js","../node_modules/lodash/hasIn.js","../node_modules/lodash/identity.js","../node_modules/lodash/includes.js","../node_modules/lodash/isArguments.js","../node_modules/lodash/isArray.js","../node_modules/lodash/isArrayLike.js","../node_modules/lodash/isArrayLikeObject.js","../node_modules/lodash/isBoolean.js","../node_modules/lodash/isBuffer.js","../node_modules/lodash/isDate.js","../node_modules/lodash/isEmpty.js","../node_modules/lodash/isEqual.js","../node_modules/lodash/isEqualWith.js","../node_modules/lodash/isFunction.js","../node_modules/lodash/isLength.js","../node_modules/lodash/isMap.js","../node_modules/lodash/isNaN.js","../node_modules/lodash/isNull.js","../node_modules/lodash/isNumber.js","../node_modules/lodash/isObject.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isPlainObject.js","../node_modules/lodash/isRegExp.js","../node_modules/lodash/isSet.js","../node_modules/lodash/isString.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/isTypedArray.js","../node_modules/lodash/isUndefined.js","../node_modules/lodash/keys.js","../node_modules/lodash/keysIn.js","../node_modules/lodash/last.js","../node_modules/lodash/map.js","../node_modules/lodash/max.js","../node_modules/lodash/memoize.js","../node_modules/lodash/merge.js","../node_modules/lodash/noop.js","../node_modules/lodash/now.js","../node_modules/lodash/omit.js","../node_modules/lodash/pick.js","../node_modules/lodash/property.js","../node_modules/lodash/pull.js","../node_modules/lodash/pullAll.js","../node_modules/lodash/set.js","../node_modules/lodash/size.js","../node_modules/lodash/slice.js","../node_modules/lodash/some.js","../node_modules/lodash/split.js","../node_modules/lodash/stubArray.js","../node_modules/lodash/stubFalse.js","../node_modules/lodash/stubTrue.js","../node_modules/lodash/throttle.js","../node_modules/lodash/times.js","../node_modules/lodash/toFinite.js","../node_modules/lodash/toInteger.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/toPath.js","../node_modules/lodash/toPlainObject.js","../node_modules/lodash/toString.js","../node_modules/lodash/uniq.js","../node_modules/lodash/unset.js","../node_modules/lodash/values.js","../node_modules/lodash/without.js","../node_modules/object-assign/index.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/client.js","../node_modules/react-dom/index.js","../node_modules/react-resizable/build/Resizable.js","../node_modules/react-resizable/build/ResizableBox.js","../node_modules/react-resizable/build/propTypes.js","../node_modules/react-resizable/build/utils.js","../node_modules/react-resizable/index.js","../node_modules/react-resizable/node_modules/react-draggable/build/cjs/Draggable.js","../node_modules/react-resizable/node_modules/react-draggable/build/cjs/DraggableCore.js","../node_modules/react-resizable/node_modules/react-draggable/build/cjs/cjs.js","../node_modules/react-resizable/node_modules/react-draggable/build/cjs/utils/domFns.js","../node_modules/react-resizable/node_modules/react-draggable/build/cjs/utils/getPrefix.js","../node_modules/react-resizable/node_modules/react-draggable/build/cjs/utils/log.js","../node_modules/react-resizable/node_modules/react-draggable/build/cjs/utils/positionFns.js","../node_modules/react-resizable/node_modules/react-draggable/build/cjs/utils/shims.js","../node_modules/react-telegram-login/build/index.js","../node_modules/react-telegram-login/node_modules/react/cjs/react.production.min.js","../node_modules/react-telegram-login/node_modules/react/index.js","../node_modules/react-turnstile/src/index.tsx","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../node_modules/semantic-ui-react/dist/es/addons/Portal/PortalInner.js","../node_modules/semantic-ui-react/dist/es/addons/Portal/Portal.js","../node_modules/semantic-ui-react/dist/es/elements/Header/HeaderSubheader.js","../node_modules/semantic-ui-react/dist/es/elements/Header/HeaderContent.js","../node_modules/semantic-ui-react/dist/es/elements/Header/Header.js","../node_modules/semantic-ui-react/dist/es/elements/Icon/IconGroup.js","../node_modules/semantic-ui-react/dist/es/elements/Icon/Icon.js","../node_modules/semantic-ui-react/dist/es/elements/Image/ImageGroup.js","../node_modules/semantic-ui-react/dist/es/elements/Image/Image.js","../node_modules/semantic-ui-react/dist/es/elements/Label/LabelDetail.js","../node_modules/semantic-ui-react/dist/es/elements/Label/LabelGroup.js","../node_modules/semantic-ui-react/dist/es/elements/Label/Label.js","../node_modules/semantic-ui-react/dist/es/elements/Segment/SegmentGroup.js","../node_modules/semantic-ui-react/dist/es/elements/Segment/SegmentInline.js","../node_modules/semantic-ui-react/dist/es/elements/Segment/Segment.js","../node_modules/semantic-ui-react/dist/es/lib/ModernAutoControlledComponent.js","../node_modules/semantic-ui-react/dist/es/lib/childrenUtils.js","../node_modules/semantic-ui-react/dist/es/lib/numberToWord.js","../node_modules/semantic-ui-react/dist/es/lib/classNameBuilders.js","../node_modules/lodash-es/_baseInRange.js","../node_modules/lodash-es/inRange.js","../node_modules/lodash-es/head.js","../node_modules/semantic-ui-react/dist/es/lib/doesNodeContainClick.js","../node_modules/lodash-es/uniq.js","../node_modules/lodash-es/isNumber.js","../node_modules/lodash-es/isBoolean.js","../node_modules/semantic-ui-react/dist/es/lib/factories.js","../node_modules/semantic-ui-react/dist/es/lib/getElementType.js","../node_modules/semantic-ui-react/dist/es/lib/getUnhandledProps.js","../node_modules/lodash-es/_arrayEach.js","../node_modules/lodash-es/_castFunction.js","../node_modules/lodash-es/forEach.js","../node_modules/semantic-ui-react/dist/es/lib/htmlPropsUtils.js","../node_modules/semantic-ui-react/dist/es/lib/isBrowser.js","../node_modules/semantic-ui-react/dist/es/modules/Dimmer/DimmerDimmable.js","../node_modules/semantic-ui-react/dist/es/modules/Dimmer/DimmerInner.js","../node_modules/semantic-ui-react/dist/es/modules/Dimmer/Dimmer.js","../node_modules/shallowequal/index.js","../node_modules/simplify-geojson/index.js","../node_modules/simplify-geometry/lib/index.js","../node_modules/simplify-geometry/lib/line.js","../node_modules/@babel/runtime/helpers/defineProperty.js","../node_modules/@babel/runtime/helpers/interopRequireDefault.js","../node_modules/@babel/runtime/helpers/objectSpread2.js","../node_modules/@babel/runtime/helpers/objectWithoutProperties.js","../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/toPrimitive.js","../node_modules/@babel/runtime/helpers/toPropertyKey.js","../node_modules/@babel/runtime/helpers/typeof.js","../node_modules/classnames/index.js","../node_modules/date-fns-tz/_lib/newDateUTC/index.js","../node_modules/date-fns-tz/_lib/tzIntlTimeZoneName/index.js","../node_modules/date-fns-tz/_lib/tzParseTimezone/index.js","../node_modules/date-fns-tz/_lib/tzPattern/index.js","../node_modules/date-fns-tz/_lib/tzTokenizeDate/index.js","../node_modules/date-fns-tz/format/formatters/index.js","../node_modules/date-fns-tz/format/index.js","../node_modules/date-fns-tz/formatInTimeZone/index.js","../node_modules/date-fns-tz/getTimezoneOffset/index.js","../node_modules/date-fns-tz/index.js","../node_modules/date-fns-tz/toDate/index.js","../node_modules/date-fns-tz/utcToZonedTime/index.js","../node_modules/date-fns-tz/zonedTimeToUtc/index.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/lodash-es/_listCacheClear.js","../node_modules/lodash-es/_assocIndexOf.js","../node_modules/lodash-es/_listCacheDelete.js","../node_modules/lodash-es/_listCacheGet.js","../node_modules/lodash-es/_listCacheHas.js","../node_modules/lodash-es/_listCacheSet.js","../node_modules/lodash-es/_ListCache.js","../node_modules/lodash-es/_Map.js","../node_modules/lodash-es/_nativeCreate.js","../node_modules/lodash-es/_hashClear.js","../node_modules/lodash-es/_hashDelete.js","../node_modules/lodash-es/_hashGet.js","../node_modules/lodash-es/_hashHas.js","../node_modules/lodash-es/_hashSet.js","../node_modules/lodash-es/_Hash.js","../node_modules/lodash-es/_mapCacheClear.js","../node_modules/lodash-es/_isKeyable.js","../node_modules/lodash-es/_getMapData.js","../node_modules/lodash-es/_mapCacheDelete.js","../node_modules/lodash-es/_mapCacheGet.js","../node_modules/lodash-es/_mapCacheHas.js","../node_modules/lodash-es/_mapCacheSet.js","../node_modules/lodash-es/_MapCache.js","../node_modules/lodash-es/_Set.js","../node_modules/lodash-es/_setCacheAdd.js","../node_modules/lodash-es/_setCacheHas.js","../node_modules/lodash-es/_SetCache.js","../node_modules/lodash-es/_stackClear.js","../node_modules/lodash-es/_stackDelete.js","../node_modules/lodash-es/_stackGet.js","../node_modules/lodash-es/_stackHas.js","../node_modules/lodash-es/_stackSet.js","../node_modules/lodash-es/_Stack.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_apply.js","../node_modules/lodash-es/_arrayFilter.js","../node_modules/lodash-es/_arrayIncludes.js","../node_modules/lodash-es/_arrayIncludesWith.js","../node_modules/lodash-es/_arrayMap.js","../node_modules/lodash-es/_arrayPush.js","../node_modules/lodash-es/_arraySome.js","../node_modules/lodash-es/_baseFor.js","../node_modules/lodash-es/_createBaseFor.js","../node_modules/lodash-es/_baseForOwn.js","../node_modules/lodash-es/_baseEach.js","../node_modules/lodash-es/_createBaseEach.js","../node_modules/lodash-es/_baseFindIndex.js","../node_modules/lodash-es/_baseGet.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/_baseIsNaN.js","../node_modules/lodash-es/_strictIndexOf.js","../node_modules/lodash-es/_baseIndexOf.js","../node_modules/lodash-es/_equalArrays.js","../node_modules/lodash-es/_Uint8Array.js","../node_modules/lodash-es/_mapToArray.js","../node_modules/lodash-es/_equalByTag.js","../node_modules/lodash-es/_baseGetAllKeys.js","../node_modules/lodash-es/stubArray.js","../node_modules/lodash-es/_getSymbols.js","../node_modules/lodash-es/_getAllKeys.js","../node_modules/lodash-es/_equalObjects.js","../node_modules/lodash-es/_baseIsEqualDeep.js","../node_modules/lodash-es/_baseIsEqual.js","../node_modules/lodash-es/_baseIsMatch.js","../node_modules/lodash-es/_isStrictComparable.js","../node_modules/lodash-es/_getMatchData.js","../node_modules/lodash-es/_matchesStrictComparable.js","../node_modules/lodash-es/_baseMatches.js","../node_modules/lodash-es/_baseMatchesProperty.js","../node_modules/lodash-es/_basePropertyDeep.js","../node_modules/lodash-es/property.js","../node_modules/lodash-es/_baseIteratee.js","../node_modules/lodash-es/_nativeKeys.js","../node_modules/lodash-es/_baseKeys.js","../node_modules/lodash-es/_baseProperty.js","../node_modules/lodash-es/_baseRest.js","../node_modules/lodash-es/_baseSlice.js","../node_modules/lodash-es/_baseUnary.js","../node_modules/lodash-es/_createSet.js","../node_modules/lodash-es/_baseUniq.js","../node_modules/lodash-es/_cacheHas.js","../node_modules/lodash-es/memoize.js","../node_modules/lodash-es/_stringToPath.js","../node_modules/lodash-es/_memoizeCapped.js","../node_modules/lodash-es/_castPath.js","../node_modules/lodash-es/_defineProperty.js","../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_coreJsData.js","../node_modules/lodash-es/_isMasked.js","../node_modules/lodash-es/_baseIsNative.js","../node_modules/lodash-es/_getValue.js","../node_modules/lodash-es/_getNative.js","../node_modules/lodash-es/_DataView.js","../node_modules/lodash-es/_Promise.js","../node_modules/lodash-es/_WeakMap.js","../node_modules/lodash-es/_getTag.js","../node_modules/lodash-es/_isIndex.js","../node_modules/lodash-es/_isIterateeCall.js","../node_modules/lodash-es/_isKey.js","../node_modules/lodash-es/_isPrototype.js","../node_modules/lodash-es/_overArg.js","../node_modules/lodash-es/_overRest.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_setToArray.js","../node_modules/lodash-es/constant.js","../node_modules/lodash-es/_baseSetToString.js","../node_modules/lodash-es/_shortOut.js","../node_modules/lodash-es/_setToString.js","../node_modules/lodash-es/_toKey.js","../node_modules/lodash-es/_toSource.js","../node_modules/lodash-es/eq.js","../node_modules/lodash-es/get.js","../node_modules/lodash-es/_baseHasIn.js","../node_modules/lodash-es/_hasPath.js","../node_modules/lodash-es/hasIn.js","../node_modules/lodash-es/identity.js","../node_modules/lodash-es/_baseValues.js","../node_modules/lodash-es/values.js","../node_modules/lodash-es/includes.js","../node_modules/lodash-es/last.js","../node_modules/lodash-es/_parent.js","../node_modules/lodash-es/_baseInvoke.js","../node_modules/lodash-es/invoke.js","../node_modules/lodash-es/_baseIsArguments.js","../node_modules/lodash-es/isArguments.js","../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/isArrayLike.js","../node_modules/lodash-es/stubFalse.js","../node_modules/lodash-es/isBuffer.js","../node_modules/lodash-es/isFunction.js","../node_modules/lodash-es/isLength.js","../node_modules/lodash-es/isNil.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/_getPrototype.js","../node_modules/lodash-es/isPlainObject.js","../node_modules/lodash-es/isString.js","../node_modules/lodash-es/isSymbol.js","../node_modules/lodash-es/_baseIsTypedArray.js","../node_modules/lodash-es/_nodeUtil.js","../node_modules/lodash-es/isTypedArray.js","../node_modules/lodash-es/isUndefined.js","../node_modules/lodash-es/_baseTimes.js","../node_modules/lodash-es/_arrayLikeKeys.js","../node_modules/lodash-es/keys.js","../node_modules/lodash-es/noop.js","../node_modules/lodash-es/_baseSome.js","../node_modules/lodash-es/some.js","../node_modules/lodash-es/toFinite.js","../node_modules/lodash-es/toInteger.js","../node_modules/lodash-es/_trimmedEndIndex.js","../node_modules/lodash-es/_baseTrim.js","../node_modules/lodash-es/toNumber.js","../node_modules/lodash-es/_baseToString.js","../node_modules/lodash-es/toString.js","../node_modules/marked/lib/marked.esm.js","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/node module decorator","../webpack/runtime/publicPath","../webpack/runtime/jsonp chunk loading","../node_modules/@visactor/vchart/esm/data/src/data/parser/array.ts","../node_modules/@visactor/vchart/esm/typings/src/typings/spec/common.ts","../node_modules/@visactor/vchart/esm/component/src/component/interface/type.ts","../node_modules/@visactor/vutils/es/src/common/isType.ts","../node_modules/@visactor/vutils/es/src/common/isNumber.ts","../node_modules/@visactor/vutils/src/logger.ts","../node_modules/@visactor/vdataset/es/src/utils/uuid.ts","../node_modules/@visactor/vdataset/src/data-set.ts","../node_modules/@visactor/vutils/es/src/common/isBoolean.ts","../node_modules/@visactor/vutils/es/src/common/isArray.ts","../node_modules/@visactor/vdataset/es/src/parser/data-view.ts","../node_modules/@visactor/vutils/es/src/common/isDate.ts","../node_modules/@visactor/vutils/es/src/common/isString.ts","../node_modules/@visactor/vutils/es/src/common/isValid.ts","../node_modules/@visactor/vutils/es/src/common/cloneDeep.ts","../node_modules/@visactor/vutils/es/src/common/isArrayLike.ts","../node_modules/@visactor/vutils/es/src/common/isObjectLike.ts","../node_modules/@visactor/vutils/es/src/common/isPlainObject.ts","../node_modules/@visactor/vutils/es/src/common/merge.ts","../node_modules/@visactor/vutils/es/src/common/isNil.ts","../node_modules/@visactor/vdataset/es/src/transform/fields.ts","../node_modules/@visactor/vdataset/src/data-view.ts","../node_modules/@visactor/vutils/es/common/isObject.js","../node_modules/@visactor/vutils/es/src/common/isValidNumber.ts","../node_modules/@visactor/vutils/es/src/common/debounce.ts","../node_modules/@visactor/vchart/esm/util/src/util/spec/transform.ts","../node_modules/@visactor/vutils/es/src/common/array.ts","../node_modules/@visactor/vchart/esm/src/util/id.ts","../node_modules/@visactor/vchart/esm/src/util/type.ts","../node_modules/@visactor/vutils/es/src/common/isFunction.ts","../node_modules/@visactor/vchart/esm/src/util/space.ts","../node_modules/@visactor/vrender-core/es/application.js","../node_modules/@visactor/vrender-core/src/env-check.ts","../node_modules/@visactor/vchart/esm/src/util/env.ts","../node_modules/@visactor/vchart/esm/src/util/debug.ts","../node_modules/@visactor/vchart/esm/util/src/util/spec/merge-spec.ts","../node_modules/@visactor/vchart/esm/theme/color-scheme/src/theme/color-scheme/builtin/default.ts","../node_modules/@visactor/vchart/esm/theme/builtin/src/theme/builtin/light/color-scheme.ts","../node_modules/@visactor/vchart/esm/theme/builtin/src/theme/builtin/common/constants.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/dot.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/funnel.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/funnel3d.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/gauge-pointer.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/map.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/waterfall.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/treemap.ts","../node_modules/@visactor/vchart/esm/src/constant/base.ts","../node_modules/@visactor/vchart/esm/src/constant/polar.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/index.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/scatter.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/line.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/area.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/bar.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/bar3d.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/pie.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/pie3d.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/radar.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/link.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/word-cloud.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/word-cloud3d.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/linear-progress.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/circular-progress.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/gauge.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/sunburst.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/rangeColumn.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/circle-packing.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/heatmap.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/sankey.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/rose.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/box-plot.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/series/correlation.ts","../node_modules/@visactor/vchart/esm/theme/builtin/src/theme/builtin/common/mark.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/component/src/theme/builtin/common/component/axis/cartesian-axis.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/component/src/theme/builtin/common/component/axis/common-axis.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/component/crosshair.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/component/data-zoom.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/component/indicator.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/component/src/theme/builtin/common/component/legend/continuous.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/component/src/theme/builtin/common/component/legend/color-legend.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/component/src/theme/builtin/common/component/legend/discrete-legend.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/component/src/theme/builtin/common/component/legend/size-legend.ts","../node_modules/@visactor/vchart/esm/theme/builtin/src/theme/builtin/light/index.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/component/index.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/component/src/theme/builtin/common/component/axis/band-axis.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/component/src/theme/builtin/common/component/axis/linear-axis.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/component/src/theme/builtin/common/component/axis/polar-axis.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/component/mark-line.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/component/mark-area.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/component/mark-point.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/component/tooltip.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/component/player.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/component/brush.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/component/title.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/component/map-label.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/component/poptip.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/component/total-label.ts","../node_modules/@visactor/vchart/esm/theme/builtin/common/src/theme/builtin/common/component/scroll-bar.ts","../node_modules/@visactor/vutils/es/src/common/clamp.ts","../node_modules/@visactor/vutils/es/src/color/hslToRgb.ts","../node_modules/@visactor/vutils/es/src/color/rgbToHsl.ts","../node_modules/@visactor/vutils/es/src/color/Color.ts","../node_modules/@visactor/vchart/esm/series/src/series/interface/type.ts","../node_modules/@visactor/vchart/esm/series/src/series/util/spec.ts","../node_modules/@visactor/vchart/esm/theme/src/theme/color-scheme/legacy.ts","../node_modules/@visactor/vchart/esm/theme/src/theme/color-scheme/util.ts","../node_modules/@visactor/vchart/esm/series/src/series/base/constant.ts","../node_modules/@visactor/vchart/esm/series/src/series/bar/constant.ts","../node_modules/@visactor/vchart/esm/series/src/series/mixin/constant.ts","../node_modules/@visactor/vchart/esm/series/src/series/pie/constant.ts","../node_modules/@visactor/vchart/esm/series/src/series/funnel/constant.ts","../node_modules/@visactor/vchart/esm/series/src/series/range-column/constant.ts","../node_modules/@visactor/vchart/esm/series/src/series/interface/theme.ts","../node_modules/@visactor/vchart/esm/util/src/util/spec/merge-theme.ts","../node_modules/@visactor/vchart/esm/util/src/util/spec/preprocess.ts","../node_modules/@visactor/vchart/esm/theme/src/theme/builtin/index.ts","../node_modules/@visactor/vchart/esm/src/core/instance-manager.ts","../node_modules/@visactor/vchart/esm/src/theme/theme-manager.ts","../node_modules/@visactor/vchart/esm/util/src/util/spec/common.ts","../node_modules/@visactor/vdataset/es/src/utils/js.ts","../node_modules/@visactor/vdataset/es/transform/src/transform/geo/simplify.ts","../node_modules/d3-dsv/src/dsv.js","../node_modules/d3-dsv/src/csv.js","../node_modules/@visactor/vdataset/es/constants.js","../node_modules/d3-dsv/src/tsv.js","../node_modules/@visactor/vdataset/es/src/parser/dsv.ts","../node_modules/@visactor/vchart/esm/src/core/factory.ts","../node_modules/@visactor/vchart/esm/event/events/src/event/events/dimension/interface.ts","../node_modules/@visactor/vscale/src/type.ts","../node_modules/@visactor/vdataset/es/src/transform/filter.ts","../node_modules/@visactor/vdataset/es/src/transform/fold.ts","../node_modules/@visactor/vchart/esm/event/events/dimension/src/event/events/dimension/util/common.ts","../node_modules/@visactor/vgrammar-util/src/regression-linear.ts","../node_modules/@visactor/vutils/es/src/common/ascending.ts","../node_modules/@visactor/vutils/es/src/common/toNumber.ts","../node_modules/@visactor/vutils/es/src/common/median.ts","../node_modules/@visactor/vutils/es/src/common/quantileSorted.ts","../node_modules/@visactor/vutils/src/math.ts","../node_modules/@visactor/vutils/es/src/data-structure/point.ts","../node_modules/@visactor/vutils-extension/es/src/utils/polar.ts","../node_modules/@visactor/vchart/esm/src/util/math.ts","../node_modules/@visactor/vchart/esm/src/util/model.ts","../node_modules/@visactor/vchart/esm/event/events/dimension/src/event/events/dimension/util/polar.ts","../node_modules/@visactor/vchart/esm/component/axis/cartesian/src/component/axis/cartesian/util/common.ts","../node_modules/@visactor/vchart/esm/event/events/dimension/src/event/events/dimension/util/cartesian.ts","../node_modules/@visactor/vchart/esm/event/events/src/event/events/dimension/base.ts","../node_modules/@visactor/vchart/esm/src/constant/event.ts","../node_modules/@visactor/vchart/esm/event/src/event/events/index.ts","../node_modules/@visactor/vchart/esm/event/events/src/event/events/dimension/dimension-hover.ts","../node_modules/@visactor/vchart/esm/event/events/src/event/events/dimension/dimension-click.ts","../node_modules/@visactor/vchart/esm/src/event/event.ts","../node_modules/@visactor/vchart/esm/src/event/bubble.ts","../node_modules/@visactor/vutils/es/src/common/get.ts","../node_modules/@visactor/vutils/es/src/common/throttle.ts","../node_modules/@visactor/vgrammar-core/es/src/graph/enums.ts","../node_modules/@visactor/vchart/esm/event/event-dispatcher.js","../node_modules/d3-geo/src/identity.js","../node_modules/d3-geo/src/stream.js","../node_modules/d3-geo/src/adder.js","../node_modules/d3-geo/src/math.js","../node_modules/d3-geo/src/noop.js","../node_modules/d3-geo/src/path/area.js","../node_modules/d3-geo/src/path/bounds.js","../node_modules/d3-geo/src/path/centroid.js","../node_modules/d3-geo/src/path/context.js","../node_modules/d3-geo/src/path/measure.js","../node_modules/d3-geo/src/path/string.js","../node_modules/d3-geo/src/path/index.js","../node_modules/@turf/clone/dist/es/index.js","../node_modules/@turf/helpers/dist/es/index.js","../node_modules/@turf/invariant/dist/es/index.js","../node_modules/@turf/boolean-clockwise/dist/es/index.js","../node_modules/@turf/meta/dist/es/index.js","../node_modules/@turf/rewind/dist/es/index.js","../node_modules/@turf/flatten/dist/es/index.js","../node_modules/@visactor/vdataset/es/parser/src/parser/geo/geojson.ts","../node_modules/topojson-client/src/identity.js","../node_modules/topojson-client/src/feature.js","../node_modules/topojson-client/src/transform.js","../node_modules/topojson-client/src/reverse.js","../node_modules/@visactor/vdataset/es/parser/src/parser/geo/topojson.ts","../node_modules/@visactor/vchart/esm/src/data/register.ts","../node_modules/@visactor/vchart/esm/series/src/series/map/geo-source.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/copy-data-view.ts","../node_modules/@visactor/vchart/esm/src/data/initialize.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/stack-split.ts","../node_modules/@visactor/vchart/esm/src/animation/interface.ts","../node_modules/@visactor/vutils/src/dom.ts","../node_modules/@visactor/vrender-core/es/src/common/generator.ts","../node_modules/@visactor/vrender-core/es/common/src/common/inversify/cotainer-module.ts","../node_modules/@visactor/vrender-core/es/common/src/common/inversify/metadata_keys.ts","../node_modules/@visactor/vrender-core/es/common/Reflect-metadata.js","../node_modules/@visactor/vrender-core/es/common/inversify/src/common/inversify/annotation/injectable.ts","../node_modules/@visactor/vrender-core/es/common/src/common/inversify/meta-data.ts","../node_modules/@visactor/vrender-core/es/common/inversify/src/common/inversify/annotation/inject_base.ts","../node_modules/@visactor/vrender-core/es/src/common/contribution-provider.ts","../node_modules/@visactor/vrender-core/es/src/tapable/Hook.ts","../node_modules/@visactor/vrender-core/es/src/tapable/SyncHook.ts","../node_modules/@visactor/vrender-core/src/constants.ts","../node_modules/@visactor/vrender-core/es/src/core/global.ts","../node_modules/@visactor/vutils/es/angle.js","../node_modules/@visactor/vutils/es/src/data-structure/matrix.ts","../node_modules/@visactor/vrender-core/es/src/common/bounds-context.ts","../node_modules/@visactor/vutils/es/src/data-structure/bounds.ts","../node_modules/@visactor/vrender-core/es/common/segment/src/common/segment/curve/path.ts","../node_modules/@visactor/vrender-core/es/src/common/path-svg.ts","../node_modules/@visactor/vrender-core/es/src/common/enums.ts","../node_modules/@visactor/vrender-core/es/common/src/common/shape/arc.ts","../node_modules/@visactor/vrender-core/es/src/common/render-command-list.ts","../node_modules/@visactor/vrender-core/es/common/segment/src/common/segment/curve/base.ts","../node_modules/@visactor/vrender-core/es/src/common/bezier-utils.ts","../node_modules/@visactor/vrender-core/es/common/segment/src/common/segment/curve/cubic-bezier.ts","../node_modules/@visactor/vrender-core/es/common/segment/src/common/segment/curve/line.ts","../node_modules/@visactor/vrender-core/es/src/common/seg-context.ts","../node_modules/@visactor/vrender-core/es/common/src/common/segment/common.ts","../node_modules/@visactor/vrender-core/es/common/src/common/segment/linear.ts","../node_modules/@visactor/vrender-core/es/common/src/common/segment/basis.ts","../node_modules/@visactor/vrender-core/es/common/src/common/segment/monotone.ts","../node_modules/@visactor/vrender-core/es/common/src/common/segment/step.ts","../node_modules/@visactor/vrender-core/es/common/src/common/segment/linear-closed.ts","../node_modules/@visactor/vrender-core/es/common/src/common/segment/index.ts","../node_modules/@visactor/vrender-core/es/src/common/custom-path2d.ts","../node_modules/@visactor/vrender-core/es/src/graphic/config.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/richtext/utils.ts","../node_modules/@visactor/vrender-core/es/core/contributions/src/core/contributions/textMeasure/AtextMeasure.ts","../node_modules/@visactor/vrender-core/es/core/contributions/src/core/contributions/textMeasure/textMeasure-contribution.ts","../node_modules/@visactor/vutils/es/graphics/src/graphics/text/stringWidth.ts","../node_modules/@visactor/vutils/es/graphics/text/src/graphics/text/measure/textMeasure.ts","../node_modules/@visactor/vutils/es/graphics/text/src/graphics/text/measure/util.ts","../node_modules/@visactor/vrender-core/es/common/src/common/inversify/literal_types.ts","../node_modules/@visactor/vrender-core/es/common/src/common/inversify/binding.ts","../node_modules/@visactor/vrender-core/es/common/src/common/inversify/metadata_reader.ts","../node_modules/@visactor/vrender-core/es/common/inversify/src/common/inversify/syntax/constraint_helpers.ts","../node_modules/@visactor/vrender-core/es/common/inversify/src/common/inversify/syntax/binding_in_syntax.ts","../node_modules/@visactor/vrender-core/es/common/inversify/src/common/inversify/syntax/binding_to_syntax.ts","../node_modules/@visactor/vrender-core/es/common/src/common/inversify/container.ts","../node_modules/@visactor/vrender-core/es/src/canvas/constants.ts","../node_modules/@visactor/vrender-core/es/src/canvas/util.ts","../node_modules/@visactor/vrender-core/es/src/allocator/canvas-allocate.ts","../node_modules/@visactor/vrender-core/es/src/core/window.ts","../node_modules/@visactor/vrender-core/es/src/core/graphic-utils.ts","../node_modules/@visactor/vrender-core/es/src/graphic/theme.ts","../node_modules/@visactor/vutils/es/src/common/has.ts","../node_modules/@visactor/vutils/es/src/common/isValidUrl.ts","../node_modules/@visactor/vutils/es/src/common/isBase64.ts","../node_modules/@visactor/vrender-core/es/src/graphic/node-tree.ts","../node_modules/@visactor/vrender-core/es/event/src/event/federated-event/base-event.ts","../node_modules/@visactor/vrender-core/es/event/src/event/federated-event/custom-event.ts","../node_modules/@visactor/vrender-core/es/src/event/event-target.ts","../node_modules/@visactor/vrender-core/es/src/animate/easing.ts","../node_modules/@visactor/vrender-core/es/src/animate/timeline.ts","../node_modules/@visactor/vrender-core/es/src/animate/animate.ts","../node_modules/@visactor/vrender-core/es/animate/config.js","../node_modules/@visactor/vrender-core/es/src/color-string/store.ts","../node_modules/@visactor/vrender-core/es/src/color-string/interpolate.ts","../node_modules/@visactor/vrender-core/es/src/resource-loader/loader.ts","../node_modules/@visactor/vrender-core/es/src/graphic/graphic.ts","../node_modules/@visactor/vrender-core/es/src/common/utils.ts","../node_modules/@visactor/vrender-core/es/src/graphic/tools.ts","../node_modules/@visactor/vrender-core/es/src/graphic/constants.ts","../node_modules/@visactor/vrender-core/es/src/graphic/group.ts","../node_modules/@visactor/vrender-core/es/src/core/layer.ts","../node_modules/@visactor/vrender-core/es/src/core/constants.ts","../node_modules/@visactor/vrender-core/es/src/core/layer-service.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/symbol.ts","../node_modules/@visactor/vrender-core/es/src/render/render-service.ts","../node_modules/@visactor/vrender-core/es/src/render/render-modules.ts","../node_modules/@visactor/vrender-core/es/src/picker/constants.ts","../node_modules/@visactor/vrender-core/es/src/allocator/matrix-allocate.ts","../node_modules/@visactor/vrender-core/es/src/picker/pick-interceptor.ts","../node_modules/@visactor/vrender-core/es/src/picker/pick-modules.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/graphic-service/common-contribution.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/graphic-service/symbol-contribution.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/graphic-service/graphic-service.ts","../node_modules/@visactor/vrender-core/es/src/graphic/graphic-creator.ts","../node_modules/@visactor/vrender-core/es/src/plugins/constants.ts","../node_modules/@visactor/vrender-core/es/src/plugins/plugin-service.ts","../node_modules/@visactor/vrender-core/es/core/contributions/src/core/contributions/textMeasure/modules.ts","../node_modules/@visactor/vrender-core/es/core/contributions/src/core/contributions/layerHandler/canvas2d-contribution.ts","../node_modules/@visactor/vrender-core/es/core/contributions/src/core/contributions/layerHandler/empty-contribution.ts","../node_modules/@visactor/vrender-core/es/core/contributions/src/core/contributions/layerHandler/offscreen2d-contribution.ts","../node_modules/@visactor/vrender-core/es/core/contributions/src/core/contributions/layerHandler/modules.ts","../node_modules/@visactor/vrender-core/es/src/common/sort.ts","../node_modules/@visactor/vutils/es/graphics/src/graphics/algorithm/intersect.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/draw-interceptor.ts","../node_modules/@visactor/vrender-core/es/src/common/color-utils.ts","../node_modules/@visactor/vrender-core/es/src/common/canvas-utils.ts","../node_modules/@visactor/vrender-core/es/src/allocator/bounds-allocate.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/draw-contribution.ts","../node_modules/@visactor/vrender-core/es/common/src/common/shape/rect.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/utils.ts","../node_modules/@visactor/vrender-core/es/render/contributions/render/src/render/contributions/render/contributions/constants.ts","../node_modules/@visactor/vrender-core/es/render/contributions/render/src/render/contributions/render/contributions/base-contribution-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/render/src/render/contributions/render/contributions/group-contribution-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/group-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/base-render.ts","../node_modules/@visactor/vrender-core/es/src/common/render-utils.ts","../node_modules/@visactor/vrender-core/es/common/render-curve.js","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/line-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/incremental-line-render.ts","../node_modules/@visactor/vrender-core/es/src/common/render-area.ts","../node_modules/@visactor/vrender-core/es/render/contributions/render/src/render/contributions/render/contributions/base-texture-contribution-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/render/src/render/contributions/render/contributions/area-texture-contribution-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/area-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/incremental-area-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/incremental-draw-contribution.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/module.ts","../node_modules/@visactor/vrender-core/src/modules.ts","../node_modules/@visactor/vrender-core/es/core/src/core/contributions/modules.ts","../node_modules/@visactor/vrender-core/es/render/src/render/contributions/modules.ts","../node_modules/@visactor/vgrammar-core/es/src/parse/util.ts","../node_modules/@visactor/vgrammar-core/es/src/parse/option.ts","../node_modules/@visactor/vgrammar-core/es/src/view/grammar-base.ts","../node_modules/@visactor/vgrammar-core/es/src/view/glyph-meta.ts","../node_modules/@visactor/vgrammar-core/es/src/core/factory.ts","../node_modules/@visactor/vgrammar-core/es/src/parse/transform.ts","../node_modules/@visactor/vgrammar-core/es/src/util/data.ts","../node_modules/@visactor/vgrammar-core/es/src/view/data.ts","../node_modules/@visactor/vgrammar-core/es/src/view/constants.ts","../node_modules/@visactor/vgrammar-core/es/src/util/grammar-heap.ts","../node_modules/@visactor/vgrammar-util/es/accessor.js","../node_modules/@visactor/vgrammar-util/src/getter.ts","../node_modules/@visactor/vgrammar-util/src/error.ts","../node_modules/@visactor/vgrammar-util/src/field.ts","../node_modules/@visactor/vgrammar-util/src/splitAccessPath.ts","../node_modules/@visactor/vgrammar-util/src/accessors.ts","../node_modules/@visactor/vgrammar-core/es/src/util/unique-list.ts","../node_modules/@visactor/vgrammar-core/es/src/view/dataflow.ts","../node_modules/@visactor/vgrammar-core/es/src/graph/mark-tree.ts","../node_modules/@visactor/vgrammar-core/es/src/graph/constants.ts","../node_modules/@visactor/vutils/es/src/common/isUndefined.ts","../node_modules/@visactor/vrender-core/es/event/src/event/federated-event/mouse-event.ts","../node_modules/@visactor/vrender-core/es/event/src/event/federated-event/pointer-event.ts","../node_modules/@visactor/vrender-core/es/event/src/event/federated-event/wheel-event.ts","../node_modules/@visactor/vrender-core/es/src/event/constant.ts","../node_modules/@visactor/vrender-core/es/src/event/util.ts","../node_modules/@visactor/vrender-core/es/src/event/event-manager.ts","../node_modules/@visactor/vrender-core/es/src/event/event-system.ts","../node_modules/@visactor/vrender-core/es/plugins/src/plugins/builtin-plugin/auto-render-plugin.ts","../node_modules/@visactor/vrender-core/es/plugins/src/plugins/builtin-plugin/3dview-transform-plugin.ts","../node_modules/@visactor/vrender-core/es/plugins/src/plugins/builtin-plugin/incremental-auto-render-plugin.ts","../node_modules/@visactor/vrender-core/es/plugins/src/plugins/builtin-plugin/html-attribute-plugin.ts","../node_modules/@visactor/vrender-core/es/plugins/src/plugins/builtin-plugin/dirty-bounds-plugin.ts","../node_modules/@visactor/vrender-core/es/plugins/src/plugins/builtin-plugin/flex-layout-plugin.ts","../node_modules/@visactor/vrender-core/es/animate/src/animate/Ticker/default-ticker.ts","../node_modules/@visactor/vrender-core/es/src/animate/default-ticker.ts","../node_modules/@visactor/vrender-core/es/src/core/light.ts","../node_modules/@visactor/vrender-core/es/src/common/matrix.ts","../node_modules/@visactor/vrender-core/es/src/core/camera.ts","../node_modules/@visactor/vrender-core/es/src/core/stage.ts","../node_modules/@visactor/vrender-kits/es/event/extension/drag.js","../node_modules/@visactor/vrender-kits/es/event/src/event/extension/gesture.ts","../node_modules/@visactor/vgrammar-core/es/src/graph/canvas-renderer.ts","../node_modules/@visactor/vrender-core/src/create.ts","../node_modules/@visactor/vgrammar-core/es/graph/src/graph/util/point.ts","../node_modules/@visactor/vgrammar-core/es/graph/src/graph/util/events-extend.ts","../node_modules/@visactor/vgrammar-core/es/src/view/signal.ts","../node_modules/@visactor/vgrammar-core/es/src/parse/view.ts","../node_modules/@visactor/vgrammar-core/es/graph/src/graph/util/graphic.ts","../node_modules/@visactor/vgrammar-core/es/graph/src/graph/attributes/helpers.ts","../node_modules/@visactor/vgrammar-core/es/graph/src/graph/attributes/common.ts","../node_modules/@visactor/vgrammar-core/es/graph/src/graph/attributes/transform.ts","../node_modules/@visactor/vutils/es/src/common/isEqual.ts","../node_modules/@visactor/vutils/es/common/getType.js","../node_modules/@visactor/vutils/es/src/common/isPrototype.ts","../node_modules/@visactor/vutils/es/src/common/isEmpty.ts","../node_modules/@visactor/vgrammar-util/src/isEqual.ts","../node_modules/@visactor/vgrammar-core/es/src/parse/mark.ts","../node_modules/@visactor/vgrammar-core/es/graph/src/graph/mark/encode.ts","../node_modules/@visactor/vgrammar-core/es/graph/src/graph/attributes/line.ts","../node_modules/@visactor/vgrammar-core/es/src/graph/element.ts","../node_modules/@visactor/vgrammar-core/es/src/graph/glyph-element.ts","../node_modules/@visactor/vgrammar-core/es/graph/src/graph/util/element.ts","../node_modules/@visactor/vgrammar-core/es/graph/src/graph/mark/differ.ts","../node_modules/@visactor/vrender-core/es/src/animate/custom-animate.ts","../node_modules/@visactor/vgrammar-core/es/graph/src/graph/animation/attribute.ts","../node_modules/@visactor/vgrammar-core/es/graph/src/graph/animation/animator.ts","../node_modules/@visactor/vgrammar-core/es/graph/src/graph/animation/config.ts","../node_modules/@visactor/vgrammar-core/es/graph/src/graph/animation/arranger.ts","../node_modules/@visactor/vgrammar-core/es/graph/src/graph/animation/animate.ts","../node_modules/@visactor/vgrammar-core/es/src/view/mark.ts","../node_modules/@visactor/vgrammar-core/es/src/view/group.ts","../node_modules/@visactor/vgrammar-core/es/graph/src/graph/layout/grid.ts","../node_modules/@visactor/vgrammar-util/src/toPercent.ts","../node_modules/@visactor/vgrammar-core/es/graph/src/graph/layout/relative.ts","../node_modules/@visactor/vgrammar-core/es/graph/src/graph/layout/layout.ts","../node_modules/@visactor/vgrammar-core/es/src/view/glyph.ts","../node_modules/@visactor/vutils/es/src/common/number.ts","../node_modules/@visactor/vrender-core/es/src/common/morphing-utils.ts","../node_modules/@visactor/vrender-core/es/src/common/rect-utils.ts","../node_modules/@visactor/vrender-core/es/src/common/split-path.ts","../node_modules/@visactor/vrender-core/es/src/animate/morphing.ts","../node_modules/@visactor/vgrammar-core/es/graph/src/graph/animation/morph.ts","../node_modules/@visactor/vgrammar-core/es/src/view/grammar-record.ts","../node_modules/@visactor/vgrammar-core/es/src/view/animate.ts","../node_modules/@visactor/vgrammar-core/es/src/semantic-marks/text.ts","../node_modules/@visactor/vgrammar-core/es/theme/src/theme/common/component.ts","../node_modules/@visactor/vgrammar-core/es/theme/src/theme/common/mark.ts","../node_modules/@visactor/vgrammar-core/es/src/theme/dark.ts","../node_modules/@visactor/vgrammar-core/es/theme/src/theme/common/constants.ts","../node_modules/@visactor/vgrammar-core/es/src/theme/default.ts","../node_modules/@visactor/vgrammar-core/es/src/theme/theme-manager.ts","../node_modules/@visactor/vgrammar-core/es/src/view/component.ts","../node_modules/@visactor/vchart/esm/compile/src/compile/interface/compilable-item.ts","../node_modules/@visactor/vgrammar-core/es/src/view/View.ts","../node_modules/@visactor/vgrammar-core/es/src/parse/event.ts","../node_modules/@visactor/vgrammar-core/es/src/view/events.ts","../node_modules/@visactor/vgrammar-core/es/graph/src/graph/util/env.ts","../node_modules/@visactor/vchart/esm/src/compile/util.ts","../node_modules/@visactor/vchart/esm/src/compile/compiler.ts","../node_modules/@visactor/vchart/esm/src/util/image.ts","../node_modules/@visactor/vrender-components/es/src/poptip/theme.ts","../node_modules/@visactor/vrender-kits/es/src/register/register-group.ts","../node_modules/@visactor/vrender-core/es/core/contributions/src/core/contributions/textMeasure/layout.ts","../node_modules/@visactor/vrender-core/es/src/common/text.ts","../node_modules/@visactor/vrender-core/es/src/graphic/text.ts","../node_modules/@visactor/vrender-core/es/src/graphic/wrap-text.ts","../node_modules/@visactor/vrender-kits/es/src/register/register-wraptext.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/base.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/circle.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/cross.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/diamond.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/square.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/triangle-up.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/triangle.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/star.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/arrow.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/wedge.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/stroke.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/wye.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/triangle-left.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/triangle-right.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/triangle-down.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/thin-triangle.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/arrow2-left.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/arrow2-right.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/arrow2-up.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/arrow2-down.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/line-v.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/line-h.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/close.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/rect.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/index.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/builtin-symbol/utils.ts","../node_modules/@visactor/vrender-core/es/common/src/common/xml/OrderedObjParser.ts","../node_modules/@visactor/vrender-core/es/common/src/common/xml/utils.ts","../node_modules/@visactor/vrender-core/es/common/src/common/xml/node2json.ts","../node_modules/@visactor/vrender-core/es/common/src/common/xml/parser.ts","../node_modules/@visactor/vrender-core/es/src/graphic/symbol.ts","../node_modules/@visactor/vrender-core/es/render/contributions/render/src/render/contributions/render/contributions/symbol-contribution-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/symbol-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/symbol-module.ts","../node_modules/@visactor/vrender-kits/es/picker/src/picker/contributions/constants.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/base-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/symbol-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/symbol-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/symbol-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/symbol-module.ts","../node_modules/@visactor/vrender-kits/es/src/register/register-symbol.ts","../node_modules/@visactor/vrender-core/es/src/graphic/rect.ts","../node_modules/@visactor/vrender-core/es/render/contributions/render/src/render/contributions/render/contributions/rect-contribution-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/rect-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/rect-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/rect-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/rect-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/rect-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/rect-module.ts","../node_modules/@visactor/vrender-kits/es/register/register-rect.js","../node_modules/@visactor/vchart/esm/src/chart/util.ts","../node_modules/@visactor/vchart/esm/compile/src/compile/mark/interface.ts","../node_modules/@visactor/vchart/esm/mark/src/mark/mark-set/index.ts","../node_modules/@visactor/vchart/esm/src/interaction/dimension-trigger.ts","../node_modules/@visactor/vchart/esm/compile/src/compile/mark/util.ts","../node_modules/@visactor/vchart/esm/src/interaction/interaction.ts","../node_modules/@visactor/vchart/esm/src/constant/index.ts","../node_modules/@visactor/vchart/esm/src/compile/compilable-base.ts","../node_modules/@visactor/vchart/esm/compile/grammar-item.js","../node_modules/@visactor/vchart/esm/compile/src/compile/signal/compilable-signal.ts","../node_modules/@visactor/vchart/esm/compile/src/compile/signal/signal-manager.ts","../node_modules/@visactor/vchart/esm/compile/src/compile/signal/state-manager.ts","../node_modules/@visactor/vchart/esm/src/animation/animate-manager.ts","../node_modules/@visactor/vchart/esm/src/model/base-model-transformer.ts","../node_modules/@visactor/vutils-extension/es/src/utils/object.ts","../node_modules/@visactor/vchart/esm/src/model/base-model.ts","../node_modules/@visactor/vchart/esm/src/layout/layout-item.ts","../node_modules/@visactor/vchart/esm/src/constant/layout.ts","../node_modules/@visactor/vchart/esm/src/model/layout-model.ts","../node_modules/@visactor/vchart/esm/src/region/region-transformer.ts","../node_modules/@visactor/vchart/esm/src/region/region.ts","../node_modules/@visactor/vchart/esm/src/layout/util.ts","../node_modules/@visactor/vchart/esm/src/layout/base-layout.ts","../node_modules/@visactor/vutils/es/src/common/range.ts","../node_modules/@visactor/vutils/es/src/common/memoize.ts","../node_modules/@visactor/vutils/es/src/common/bisect.ts","../node_modules/@visactor/vscale/es/src/utils/utils.ts","../node_modules/@visactor/vscale/es/src/utils/tick-sample.ts","../node_modules/@visactor/vscale/src/base-scale.ts","../node_modules/@visactor/vutils/es/src/color/interpolate.ts","../node_modules/@visactor/vutils/es/src/common/interpolate.ts","../node_modules/@visactor/vscale/es/src/utils/interpolate.ts","../node_modules/@visactor/vutils/es/src/common/clamper.ts","../node_modules/@visactor/vscale/src/continuous-scale.ts","../node_modules/@visactor/vscale/src/linear-scale.ts","../node_modules/@visactor/vscale/src/ordinal-scale.ts","../node_modules/@visactor/vscale/es/src/utils/tick-sample-int.ts","../node_modules/@visactor/vscale/es/band-scale.js","../node_modules/@visactor/vscale/src/threshold-scale.ts","../node_modules/@visactor/vchart/esm/src/scale/color-ordinal-scale.ts","../node_modules/@visactor/vchart/esm/src/util/scale.ts","../node_modules/@visactor/vscale/src/point-scale.ts","../node_modules/@visactor/vchart/esm/mark/src/mark/utils/common.ts","../node_modules/@visactor/vchart/esm/compile/src/compile/mark/mark-state-manager.ts","../node_modules/@visactor/vchart/esm/compile/src/compile/data/compilable-data.ts","../node_modules/@visactor/vchart/esm/compile/src/compile/mark/mark-data.ts","../node_modules/@visactor/vchart/esm/compile/src/compile/mark/compilable-mark.ts","../node_modules/@visactor/vchart/esm/mark/src/mark/base/base-mark.ts","../node_modules/@visactor/vrender-core/es/src/graphic/shadow-root.ts","../node_modules/@visactor/vrender-kits/es/src/register/register-shadowRoot.ts","../node_modules/@visactor/vrender-core/es/src/graphic/arc.ts","../node_modules/@visactor/vutils/src/lru.ts","../node_modules/@visactor/vrender-core/es/src/canvas/conical-gradient.ts","../node_modules/@visactor/vrender-core/es/render/contributions/render/src/render/contributions/render/contributions/arc-contribution-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/arc-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/arc-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/arc-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/arc-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/arc-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/arc-module.ts","../node_modules/@visactor/vrender-kits/es/src/register/register-arc.ts","../node_modules/@visactor/vrender-core/es/src/graphic/arc3d.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/arc3d-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/arc3d-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/arc3d-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/arc3d-module.ts","../node_modules/@visactor/vrender-kits/es/src/register/register-arc3d.ts","../node_modules/@visactor/vrender-core/es/src/graphic/polygon.ts","../node_modules/@visactor/vrender-core/es/src/graphic/pyramid3d.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/pyramid3d-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/pyramid3d-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/pyramid3d-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/pyramid3d-module.ts","../node_modules/@visactor/vrender-kits/es/src/register/register-pyramid3d.ts","../node_modules/@visactor/vrender-core/es/src/graphic/area.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/area-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/area-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/area-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/area-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/area-module.ts","../node_modules/@visactor/vrender-kits/es/src/register/register-area.ts","../node_modules/@visactor/vrender-core/es/src/graphic/image.ts","../node_modules/@visactor/vrender-core/es/render/contributions/render/src/render/contributions/render/contributions/image-contribution-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/image-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/image-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/image-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/image-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/image-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/image-module.ts","../node_modules/@visactor/vrender-kits/es/src/register/register-image.ts","../node_modules/@visactor/vrender-core/es/src/graphic/line.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/line-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/line-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/line-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/line-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/line-module.ts","../node_modules/@visactor/vrender-kits/es/src/register/register-line.ts","../node_modules/@visactor/vrender-core/es/src/graphic/path.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/path-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/path-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/path-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/path-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/path-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/path-module.ts","../node_modules/@visactor/vrender-kits/es/src/register/register-path.ts","../node_modules/@visactor/vrender-core/es/src/graphic/rect3d.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/rect3d-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/rect3d-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/rect3d-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/rect3d-module.ts","../node_modules/@visactor/vrender-kits/es/src/register/register-rect3d.ts","../node_modules/@visactor/vrender-core/es/render/contributions/render/src/render/contributions/render/contributions/text-contribution-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/text-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/text-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/text-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/text-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/text-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/text-module.ts","../node_modules/@visactor/vrender-kits/es/src/register/register-text.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/richtext/frame.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/richtext/paragraph.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/richtext/icon.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/richtext/line.ts","../node_modules/@visactor/vrender-core/es/graphic/src/graphic/richtext/wrapper.ts","../node_modules/@visactor/vrender-core/es/src/graphic/richtext.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/richtext-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/richtext-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/richtext-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/richtext-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/richtext-module.ts","../node_modules/@visactor/vrender-kits/es/src/register/register-richtext.ts","../node_modules/@visactor/vrender-core/es/src/common/polygon.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/polygon-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/polygon-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/polygon-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/polygon-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/polygon-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/polygon-module.ts","../node_modules/@visactor/vrender-kits/es/src/register/register-polygon.ts","../node_modules/@visactor/vrender-core/es/src/graphic/glyph.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/glyph-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/glyph-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/glyph-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/glyph-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/glyph-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/glyph-module.ts","../node_modules/@visactor/vrender-kits/es/src/register/register-glyph.ts","../node_modules/@visactor/vgrammar-core/es/graph/src/graph/mark/graphic.ts","../node_modules/@visactor/vchart/esm/src/mark/group.ts","../node_modules/@visactor/vchart/esm/series/src/series/line/animation.ts","../node_modules/@visactor/vgrammar-core/es/graph/animation/src/graph/animation/animation/clip.ts","../node_modules/@visactor/vgrammar-core/es/graph/animation/src/graph/animation/animation/fade.ts","../node_modules/@visactor/vgrammar-core/es/graph/animation/src/graph/animation/animation/grow-cartesian.ts","../node_modules/@visactor/vgrammar-core/es/graph/animation/src/graph/animation/animation/grow-polar.ts","../node_modules/@visactor/vgrammar-core/es/graph/animation/src/graph/animation/animation/grow-points.ts","../node_modules/@visactor/vgrammar-core/es/graph/animation/src/graph/animation/animation/move.ts","../node_modules/@visactor/vgrammar-core/es/graph/animation/src/graph/animation/animation/scale.ts","../node_modules/@visactor/vgrammar-core/es/graph/animation/src/graph/animation/animation/update.ts","../node_modules/@visactor/vgrammar-core/es/graph/animation/src/graph/animation/animation/rotate.ts","../node_modules/@visactor/vgrammar-core/es/graph/animation/src/graph/animation/animation/index.ts","../node_modules/@visactor/vchart/esm/src/animation/config.ts","../node_modules/@visactor/vgrammar-core/es/transforms/src/transforms/data/filter.ts","../node_modules/@visactor/vgrammar-core/es/transforms/src/transforms/data/map.ts","../node_modules/@visactor/vgrammar-core/es/transforms/src/transforms/util/util.ts","../node_modules/@visactor/vgrammar-core/es/transforms/src/transforms/data/sampling.ts","../node_modules/@visactor/vgrammar-core/es/transforms/src/transforms/mark/mark-overlap.ts","../node_modules/@visactor/vrender-core/es/src/graphic/bounds.ts","../node_modules/@visactor/vutils-extension/es/src/utils/text.ts","../node_modules/@visactor/vchart/esm/src/core/util.ts","../node_modules/@visactor/vchart/esm/src/util/text.ts","../node_modules/@visactor/vchart/esm/src/core/expression-function.ts","../node_modules/@visactor/vrender-core/es/canvas/src/canvas/contributions/base-canvas.ts","../node_modules/@visactor/vrender-kits/es/canvas/contributions/src/canvas/contributions/browser/context.ts","../node_modules/@visactor/vrender-kits/es/canvas/contributions/src/canvas/contributions/browser/canvas.ts","../node_modules/@visactor/vrender-kits/es/canvas/src/canvas/contributions/create-canvas-module.ts","../node_modules/@visactor/vrender-core/es/src/picker/picker-service.ts","../node_modules/@visactor/vrender-kits/es/picker/canvas-picker-service.js","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/group-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/module.ts","../node_modules/@visactor/vrender-kits/es/src/picker/canvas-module.ts","../node_modules/@visactor/vrender-core/es/core/contributions/src/core/contributions/window/base-contribution.ts","../node_modules/@visactor/vrender-kits/es/window/src/window/contributions/browser-contribution.ts","../node_modules/@visactor/vrender-core/es/core/contributions/src/core/contributions/env/base-contribution.ts","../node_modules/@visactor/vrender-kits/es/env/src/env/contributions/browser-contribution.ts","../node_modules/@visactor/vrender-kits/es/src/env/browser.ts","../node_modules/@visactor/vrender-kits/es/canvas/contributions/src/canvas/contributions/node/context.ts","../node_modules/@visactor/vrender-kits/es/canvas/contributions/src/canvas/contributions/node/canvas.ts","../node_modules/@visactor/vrender-kits/es/window/src/window/contributions/node-contribution.ts","../node_modules/@visactor/vrender-kits/es/env/src/env/contributions/node-contribution.ts","../node_modules/@visactor/vrender-kits/es/src/env/node.ts","../node_modules/@visactor/vchart/esm/src/env/env.ts","../node_modules/@visactor/vchart/esm/theme/builtin/src/theme/builtin/dark/index.ts","../node_modules/@visactor/vchart/esm/theme/builtin/src/theme/builtin/dark/color-scheme.ts","../node_modules/@visactor/vchart/esm/plugin/src/plugin/base/base-plugin-service.ts","../node_modules/@visactor/vchart/esm/plugin/src/plugin/chart/plugin-service.ts","../node_modules/@visactor/vchart/esm/src/core/vchart.ts","../node_modules/@visactor/vrender-components/es/src/poptip/register.ts","../node_modules/@visactor/vchart/esm/src/util/data.ts","../node_modules/@visactor/vgrammar-core/es/src/transforms/index.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/add-property.ts","../node_modules/@visactor/vchart/esm/src/interaction/trigger.ts","../node_modules/@visactor/vchart/esm/src/interaction/config.ts","../node_modules/@visactor/vchart/esm/src/model/tooltip-helper.ts","../node_modules/@visactor/vchart/esm/component/tooltip/src/component/tooltip/utils/common.ts","../node_modules/@visactor/vchart/esm/series/src/series/base/tooltip-helper.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/dimension-statistics.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/invalid-travel.ts","../node_modules/@visactor/vchart/esm/series/src/series/base/series-data.ts","../node_modules/@visactor/vchart/esm/constant/hierarchy.js","../node_modules/@visactor/vchart/esm/data/src/data/transforms/data-key.ts","../node_modules/@visactor/vchart/esm/src/animation/utils.ts","../node_modules/@visactor/vchart/esm/series/src/series/base/base-series-transformer.ts","../node_modules/@visactor/vchart/esm/series/src/series/base/base-series.ts","../node_modules/@visactor/vchart/esm/series/src/series/util/utils.ts","../node_modules/@visactor/vchart/esm/series/src/series/cartesian/cartesian.ts","../node_modules/@visactor/vchart/esm/src/typings/interpolate.ts","../node_modules/@visactor/vchart/esm/series/src/series/mixin/line-mixin.ts","../node_modules/@visactor/vchart/esm/src/typings/line-stroke.ts","../node_modules/@visactor/vutils/es/src/common/mixin.ts","../node_modules/@visactor/vchart/esm/mark/src/mark/base/base-line.ts","../node_modules/@visactor/vchart/esm/src/mark/line.ts","../node_modules/@visactor/vchart/esm/src/mark/symbol.ts","../node_modules/@visactor/vchart/esm/series/src/series/mixin/line-mixin-transformer.ts","../node_modules/@visactor/vchart/esm/series/src/series/line/line.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/base/base-chart-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/cartesian/cartesian-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/line/line-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/chart-meta/data.ts","../node_modules/@visactor/vchart/esm/src/scale/global-scale.ts","../node_modules/@visactor/vutils/es/src/common/pickWithout.ts","../node_modules/@visactor/vchart/esm/src/chart/stack.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/base/base-chart.ts","../node_modules/@visactor/vchart/esm/util/src/util/spec/background.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/line/line.ts","../node_modules/@visactor/vchart/esm/src/mark/area.ts","../node_modules/@visactor/vchart/esm/series/src/series/area/tooltip-helpter.ts","../node_modules/@visactor/vchart/esm/series/src/series/area/animation.ts","../node_modules/@visactor/vchart/esm/series/src/series/area/area-transformer.ts","../node_modules/@visactor/vchart/esm/series/src/series/area/area.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/area/area-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/area/area.ts","../node_modules/@visactor/vchart/esm/series/src/series/bar/animation.ts","../node_modules/@visactor/vchart/esm/src/mark/rect.ts","../node_modules/@visactor/vchart/esm/series/src/series/util/stack.ts","../node_modules/@visactor/vchart/esm/series/src/series/bar/bar-transformer.ts","../node_modules/@visactor/vchart/esm/series/src/series/bar/bar.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/bar/bar-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/bar/bar.ts","../node_modules/@visactor/vchart/esm/src/mark/rect-3d.ts","../node_modules/@visactor/vchart/esm/series/src/series/bar/bar-3d.ts","../node_modules/@visactor/vchart/esm/chart/bar/src/chart/bar/3d/bar-3d-transformer.ts","../node_modules/@visactor/vchart/esm/chart/bar/src/chart/bar/3d/bar-3d.ts","../node_modules/@visactor/vutils/es/src/common/isNumeric.ts","../node_modules/@visactor/vchart/esm/src/constant/scatter.ts","../node_modules/@visactor/vchart/esm/series/src/series/scatter/animation.ts","../node_modules/@visactor/vchart/esm/series/src/series/scatter/scatter-transformer.ts","../node_modules/@visactor/vchart/esm/series/src/series/scatter/scatter.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/scatter/scatter-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/scatter/scatter.ts","../node_modules/d3-geo/src/clip/buffer.js","../node_modules/d3-geo/src/pointEqual.js","../node_modules/d3-geo/src/clip/rejoin.js","../node_modules/d3-geo/src/cartesian.js","../node_modules/d3-geo/src/polygonContains.js","../node_modules/d3-array/src/ascending.js","../node_modules/d3-array/src/bisect.js","../node_modules/d3-array/src/bisector.js","../node_modules/d3-array/src/array.js","../node_modules/d3-array/src/ticks.js","../node_modules/d3-array/src/merge.js","../node_modules/d3-geo/src/clip/index.js","../node_modules/d3-geo/src/clip/antimeridian.js","../node_modules/d3-geo/src/circle.js","../node_modules/d3-geo/src/clip/rectangle.js","../node_modules/d3-geo/src/clip/line.js","../node_modules/d3-geo/src/compose.js","../node_modules/d3-geo/src/rotation.js","../node_modules/d3-geo/src/transform.js","../node_modules/d3-geo/src/projection/fit.js","../node_modules/d3-geo/src/projection/resample.js","../node_modules/d3-geo/src/projection/index.js","../node_modules/d3-geo/src/clip/circle.js","../node_modules/d3-geo/src/projection/conic.js","../node_modules/d3-geo/src/projection/conicEqualArea.js","../node_modules/d3-geo/src/projection/cylindricalEqualArea.js","../node_modules/d3-geo/src/projection/albers.js","../node_modules/d3-geo/src/projection/azimuthal.js","../node_modules/d3-geo/src/projection/azimuthalEqualArea.js","../node_modules/d3-geo/src/projection/azimuthalEquidistant.js","../node_modules/d3-geo/src/projection/mercator.js","../node_modules/d3-geo/src/projection/conicConformal.js","../node_modules/d3-geo/src/projection/equirectangular.js","../node_modules/d3-geo/src/projection/conicEquidistant.js","../node_modules/d3-geo/src/projection/equalEarth.js","../node_modules/d3-geo/src/projection/gnomonic.js","../node_modules/d3-geo/src/projection/naturalEarth1.js","../node_modules/d3-geo/src/projection/orthographic.js","../node_modules/d3-geo/src/projection/stereographic.js","../node_modules/d3-geo/src/projection/transverseMercator.js","../node_modules/@visactor/vgrammar-projection/src/projections.ts","../node_modules/d3-geo/src/projection/albersUsa.js","../node_modules/d3-geo/src/projection/identity.js","../node_modules/@visactor/vgrammar-projection/src/projection.ts","../node_modules/@visactor/vgrammar-projection/src/index.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/lookup.ts","../node_modules/@visactor/vchart/esm/series/src/series/geo/geo.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/map.ts","../node_modules/@visactor/vchart/esm/series/src/series/map/tooltip-helper.ts","../node_modules/@visactor/vchart/esm/src/mark/path.ts","../node_modules/@visactor/vchart/esm/component/src/component/geo/projection.ts","../node_modules/@visactor/vchart/esm/plugin/src/plugin/components/plugin-service.ts","../node_modules/@visactor/vchart/esm/src/util/style.ts","../node_modules/@visactor/vchart/esm/src/component/util.ts","../node_modules/@visactor/vchart/esm/component/src/component/axis/util.ts","../node_modules/@visactor/vchart/esm/component/src/component/crosshair/util.ts","../node_modules/@visactor/vchart/esm/component/src/component/data-zoom/util.ts","../node_modules/@visactor/vchart/esm/component/src/component/legend/util.ts","../node_modules/@visactor/vchart/esm/component/src/component/base/util.ts","../node_modules/@visactor/vchart/esm/component/src/component/base/base-component-transformer.ts","../node_modules/@visactor/vchart/esm/component/src/component/base/base-component.ts","../node_modules/@visactor/vchart/esm/component/common/src/component/common/trigger/desktop.ts","../node_modules/@visactor/vchart/esm/component/common/src/component/common/trigger/mobile.ts","../node_modules/@visactor/vchart/esm/component/common/src/component/common/trigger/config.ts","../node_modules/@visactor/vchart/esm/interaction/src/interaction/zoom/zoomable.ts","../node_modules/@visactor/vchart/esm/component/src/component/geo/geo-coordinate.ts","../node_modules/@visactor/vchart/esm/series/src/series/map/map-transformer.ts","../node_modules/@visactor/vchart/esm/series/src/series/map/map.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/map/map-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/map/map.ts","../node_modules/@visactor/vchart/esm/src/constant/label.ts","../node_modules/@visactor/vchart/esm/src/util/object.ts","../node_modules/@visactor/vchart/esm/series/src/series/polar/polar.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/pie.ts","../node_modules/@visactor/vchart/esm/series/pie/src/series/pie/animation/animation.ts","../node_modules/@visactor/vchart/esm/src/mark/arc.ts","../node_modules/@visactor/vchart/esm/series/src/series/pie/pie-transformer.ts","../node_modules/@visactor/vchart/esm/series/src/series/pie/pie.ts","../node_modules/@visactor/vchart/esm/series/pie/src/series/pie/animation/centerOffset.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/polar/polar-transformer.ts","../node_modules/@visactor/vchart/esm/chart/pie/src/chart/pie/base/pie-transformer.ts","../node_modules/@visactor/vchart/esm/chart/pie/src/chart/pie/base/base.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/pie/pie.ts","../node_modules/@visactor/vchart/esm/src/mark/arc-3d.ts","../node_modules/@visactor/vchart/esm/series/pie/src/series/pie/3d/pie-3d-transformer.ts","../node_modules/@visactor/vchart/esm/series/pie/src/series/pie/3d/pie-3d.ts","../node_modules/@visactor/vchart/esm/chart/pie/src/chart/pie/3d/pie-3d.ts","../node_modules/@visactor/vchart/esm/series/src/series/rose/animation.ts","../node_modules/@visactor/vchart/esm/series/polar/src/series/polar/rose-like/rose-like.ts","../node_modules/@visactor/vchart/esm/series/src/series/rose/rose-transformer.ts","../node_modules/@visactor/vchart/esm/series/src/series/rose/rose.ts","../node_modules/@visactor/vchart/esm/chart/polar/src/chart/polar/rose-like/rose-like-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/rose/rose-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/rose/rose.ts","../node_modules/@visactor/vchart/esm/series/src/series/polar/animation.ts","../node_modules/@visactor/vchart/esm/series/src/series/radar/animation.ts","../node_modules/@visactor/vchart/esm/series/src/series/radar/radar.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/radar/radar-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/radar/radar.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/common/common-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/common/common.ts","../node_modules/@visactor/vchart/esm/component/axis/cartesian/src/component/axis/cartesian/util/time.ts","../node_modules/@visactor/vchart/esm/series/src/series/link/tooltip-helper.ts","../node_modules/@visactor/vchart/esm/src/mark/rule.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/link-dot-info.ts","../node_modules/@visactor/vchart/esm/series/src/series/link/link.ts","../node_modules/@visactor/vchart/esm/series/src/series/dot/tooltip-helper.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/obj-flat.ts","../node_modules/@visactor/vchart/esm/series/src/series/dot/config.ts","../node_modules/@visactor/vchart/esm/src/mark/text.ts","../node_modules/@visactor/vchart/esm/series/src/series/dot/dot.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/sequence/sequence-transformer.ts","../node_modules/@visactor/vchart/esm/src/constant/scroll-bar.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/sequence/sequence.ts","../node_modules/@visactor/vchart/esm/chart/histogram/src/chart/histogram/base/histogram-base-transformer.ts","../node_modules/@visactor/vchart/esm/chart/histogram/src/chart/histogram/base/base.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/histogram/histogram-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/histogram/histogram.ts","../node_modules/@visactor/vchart/esm/chart/histogram/src/chart/histogram/3d/histogram-3d.ts","../node_modules/@visactor/vutils-extension/es/src/algorithm/binary-search.ts","../node_modules/@visactor/vchart/esm/series/polar/src/series/polar/progress-like/progress-like.ts","../node_modules/@visactor/vchart/esm/src/mark/progress-arc.ts","../node_modules/@visactor/vchart/esm/series/polar/src/series/polar/progress-like/animation.ts","../node_modules/@visactor/vchart/esm/series/progress/src/series/progress/circular/circular.ts","../node_modules/@visactor/vchart/esm/chart/polar/src/chart/polar/progress-like/progress-like-transformer.ts","../node_modules/@visactor/vchart/esm/chart/progress/src/chart/progress/circular/circular-progress-transformer.ts","../node_modules/@visactor/vchart/esm/chart/progress/src/chart/progress/circular/circular.ts","../node_modules/@visactor/vchart/esm/series/src/series/gauge/animation.ts","../node_modules/@visactor/vchart/esm/series/src/series/gauge/gauge-pointer.ts","../node_modules/@visactor/vchart/esm/series/src/series/gauge/gauge-transformer.ts","../node_modules/@visactor/vchart/esm/series/src/series/gauge/gauge.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/gauge/gauge-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/gauge/gauge.ts","../node_modules/@visactor/vchart/esm/chart/word-cloud/src/chart/word-cloud/base/word-cloud-base-transformer.ts","../node_modules/@visactor/vchart/esm/chart/word-cloud/src/chart/word-cloud/base/base.ts","../node_modules/@visactor/vchart/esm/series/src/series/word-cloud/config.ts","../node_modules/@visactor/vgrammar-util/src/extent.ts","../node_modules/@visactor/vchart/esm/src/constant/word-cloud.ts","../node_modules/@visactor/vchart/esm/series/src/series/word-cloud/base.ts","../node_modules/@visactor/vchart/esm/series/src/series/word-cloud/animation.ts","../node_modules/@visactor/vgrammar-wordcloud/src/shapes.ts","../node_modules/@visactor/vgrammar-wordcloud/src/util.ts","../node_modules/@visactor/vgrammar-wordcloud/es/base.js","../node_modules/@visactor/vgrammar-wordcloud/src/spirals.ts","../node_modules/@visactor/vgrammar-wordcloud/src/cloud-layout.ts","../node_modules/@visactor/vgrammar-wordcloud/src/grid-layout.ts","../node_modules/@visactor/vgrammar-wordcloud/src/fast-layout.ts","../node_modules/@visactor/vgrammar-wordcloud/src/wordcloud.ts","../node_modules/@visactor/vgrammar-wordcloud/src/index.ts","../node_modules/@visactor/vgrammar-wordcloud-shape/src/util.ts","../node_modules/@visactor/vgrammar-wordcloud-shape/src/segmentation.ts","../node_modules/@visactor/vscale/src/sqrt-scale.ts","../node_modules/@visactor/vgrammar-wordcloud-shape/src/wordle.ts","../node_modules/@visactor/vgrammar-wordcloud-shape/es/cloud-shape-layout.js","../node_modules/@visactor/vgrammar-wordcloud-shape/src/filling.ts","../node_modules/@visactor/vgrammar-wordcloud-shape/src/wordcloud-shape.ts","../node_modules/@visactor/vchart/esm/series/src/series/word-cloud/word-cloud.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/word-cloud/word-cloud-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/word-cloud/word-cloud.ts","../node_modules/@visactor/vchart/esm/series/src/series/word-cloud/word-cloud-3d.ts","../node_modules/@visactor/vchart/esm/chart/word-cloud/src/chart/word-cloud/3d/word-cloud-3d-transformer.ts","../node_modules/@visactor/vchart/esm/chart/word-cloud/src/chart/word-cloud/3d/word-cloud-3d.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/funnel.ts","../node_modules/@visactor/vchart/esm/src/constant/funnel.ts","../node_modules/@visactor/vchart/esm/series/src/series/funnel/tooltip-helper.ts","../node_modules/@visactor/vchart/esm/mark/src/mark/polygon/base-polygon.ts","../node_modules/@visactor/vchart/esm/mark/src/mark/polygon/polygon.ts","../node_modules/@visactor/vchart/esm/series/src/series/funnel/funnel-transformer.ts","../node_modules/@visactor/vchart/esm/series/src/series/funnel/funnel.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/funnel/funnel-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/funnel/funnel.ts","../node_modules/@visactor/vchart/esm/mark/src/mark/polygon/pyramid-3d.ts","../node_modules/@visactor/vchart/esm/series/funnel/src/series/funnel/3d/funnel-3d-transformer.ts","../node_modules/@visactor/vchart/esm/series/funnel/src/series/funnel/3d/funnel-3d.ts","../node_modules/@visactor/vchart/esm/chart/funnel/src/chart/funnel/3d/funnel-3d.ts","../node_modules/@visactor/vchart/esm/series/progress/src/series/progress/linear/animation.ts","../node_modules/@visactor/vchart/esm/series/progress/src/series/progress/linear/tooltip-helper.ts","../node_modules/@visactor/vchart/esm/series/progress/src/series/progress/linear/linear.ts","../node_modules/@visactor/vchart/esm/chart/progress/src/chart/progress/linear/linear-progress-transformer.ts","../node_modules/@visactor/vchart/esm/chart/progress/src/chart/progress/linear/linear.ts","../node_modules/@visactor/vchart/esm/series/src/series/util/label-mark.ts","../node_modules/@visactor/vchart/esm/series/src/series/range-column/tooltip-helper.ts","../node_modules/@visactor/vchart/esm/series/src/series/range-column/animation.ts","../node_modules/@visactor/vchart/esm/series/src/series/range-column/range-column-transformer.ts","../node_modules/@visactor/vchart/esm/series/src/series/range-column/range-column.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/range-column/range-column-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/range-column/range-column.ts","../node_modules/@visactor/vchart/esm/series/range-column/src/series/range-column/3d/range-column-3d.ts","../node_modules/@visactor/vchart/esm/chart/range-column/src/chart/range-column/3d/range-column-3d-transformer.ts","../node_modules/@visactor/vchart/esm/chart/range-column/src/chart/range-column/3d/range-column-3d.ts","../node_modules/@visactor/vchart/esm/series/sunburst/src/series/sunburst/animation/utils.ts","../node_modules/@visactor/vchart/esm/series/sunburst/src/series/sunburst/animation/enter.ts","../node_modules/@visactor/vchart/esm/series/sunburst/src/series/sunburst/animation/exit.ts","../node_modules/@visactor/vchart/esm/series/sunburst/src/series/sunburst/animation/preset.ts","../node_modules/@visactor/vgrammar-hierarchy/es/format.js","../node_modules/@visactor/vchart/esm/data/src/data/transforms/flatten.ts","../node_modules/@visactor/vgrammar-hierarchy/es/treemap/dice.js","../node_modules/@visactor/vgrammar-hierarchy/src/utils.ts","../node_modules/@visactor/vgrammar-hierarchy/es/src/sunburst/layout.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/sunburst.ts","../node_modules/@visactor/vchart/esm/series/src/series/sunburst/tooltip-helper.ts","../node_modules/@visactor/vchart/esm/src/util/hierarchy.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/drill.ts","../node_modules/@visactor/vchart/esm/interaction/src/interaction/drill/drillable.ts","../node_modules/@visactor/vchart/esm/series/src/series/sunburst/sunburst.ts","../node_modules/@visactor/vchart/esm/src/constant/sunburst.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/sunburst/sunburst-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/sunburst/sunburst.ts","../node_modules/@visactor/vgrammar-hierarchy/src/lcg.ts","../node_modules/@visactor/vgrammar-hierarchy/es/src/circle-packing/enclose.ts","../node_modules/@visactor/vgrammar-hierarchy/es/src/circle-packing/siblings.ts","../node_modules/@visactor/vgrammar-hierarchy/es/src/circle-packing/layout.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/circle-packing.ts","../node_modules/@visactor/vchart/esm/series/src/series/circle-packing/tooltip-helper.ts","../node_modules/@visactor/vchart/esm/series/src/series/circle-packing/animation.ts","../node_modules/@visactor/vchart/esm/series/src/series/circle-packing/circle-packing.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/circle-packing/circle-packing-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/circle-packing/circle-packing.ts","../node_modules/@visactor/vgrammar-hierarchy/es/src/treemap/slice.ts","../node_modules/@visactor/vgrammar-hierarchy/es/src/treemap/squarify.ts","../node_modules/@visactor/vgrammar-hierarchy/es/src/treemap/layout.ts","../node_modules/@visactor/vgrammar-hierarchy/es/src/treemap/binary.ts","../node_modules/@visactor/vgrammar-hierarchy/es/src/treemap/sliceDice.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/treemap.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/hierarchy-dimension-statistics.ts","../node_modules/@visactor/vchart/esm/series/src/series/treemap/tooltip-helper.ts","../node_modules/@visactor/vchart/esm/series/src/series/treemap/animation.ts","../node_modules/@visactor/vchart/esm/series/src/series/treemap/treemap-transform.ts","../node_modules/@visactor/vchart/esm/series/src/series/treemap/treemap.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/treemap/treemap-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/treemap/treemap.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/waterfall.ts","../node_modules/@visactor/vchart/esm/series/src/series/waterfall/animation.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/dimension-data.ts","../node_modules/@visactor/vchart/esm/series/src/series/base/group.ts","../node_modules/@visactor/vchart/esm/series/src/series/waterfall/waterfall-transformer.ts","../node_modules/@visactor/vchart/esm/series/src/series/waterfall/waterfall.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/waterfall/waterfall-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/waterfall/waterfall.ts","../node_modules/@visactor/vchart/esm/src/constant/box-plot.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/box-plot.ts","../node_modules/@visactor/vchart/esm/series/src/series/box-plot/tooltip-helper.ts","../node_modules/@visactor/vgrammar-util/src/direction.ts","../node_modules/@visactor/vgrammar-core/es/src/glyph/boxplot.ts","../node_modules/@visactor/vchart/esm/src/mark/box-plot.ts","../node_modules/@visactor/vchart/esm/series/src/series/box-plot/box-plot.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/box-plot/box-plot-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/box-plot/box-plot.ts","../node_modules/@visactor/vgrammar-sankey/src/hierarchy.ts","../node_modules/@visactor/vgrammar-sankey/src/layout.ts","../node_modules/@visactor/vgrammar-sankey/src/transform.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/sankey.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/sankey-nodes.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/sankey-links.ts","../node_modules/@visactor/vchart/esm/series/src/series/sankey/tooltip-helper.ts","../node_modules/@visactor/vchart/esm/series/src/series/sankey/animation.ts","../node_modules/@visactor/vgrammar-core/es/glyph/link-path.js","../node_modules/@visactor/vchart/esm/src/mark/link-path.ts","../node_modules/@visactor/vchart/esm/series/src/series/sankey/sankey.ts","../node_modules/@visactor/vgrammar-sankey/src/index.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/sankey/sankey-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/sankey/sankey.ts","../node_modules/@visactor/vchart/esm/series/src/series/range-area/tooltip-helper.ts","../node_modules/@visactor/vchart/esm/series/src/series/range-area/range-area.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/range-area/range-area-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/range-area/range-area.ts","../node_modules/@visactor/vgrammar-core/es/src/util/scale.ts","../node_modules/@visactor/vgrammar-core/es/src/semantic-marks/cell.ts","../node_modules/@visactor/vchart/esm/src/mark/cell.ts","../node_modules/@visactor/vchart/esm/series/src/series/heatmap/animation.ts","../node_modules/@visactor/vutils/src/padding.ts","../node_modules/@visactor/vchart/esm/series/src/series/heatmap/tooltip-helper.ts","../node_modules/@visactor/vchart/esm/series/src/series/heatmap/heatmap-transformer.ts","../node_modules/@visactor/vchart/esm/series/src/series/heatmap/heatmap.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/heatmap/heatmap-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/heatmap/heatmap.ts","../node_modules/@visactor/vchart/esm/src/constant/correlation.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/correlation.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/correlation-center.ts","../node_modules/@visactor/vchart/esm/src/mark/ripple.ts","../node_modules/@visactor/vgrammar-core/es/src/glyph/ripple.ts","../node_modules/@visactor/vchart/esm/series/src/series/correlation/animation.ts","../node_modules/@visactor/vchart/esm/series/src/series/correlation/correlation-transformer.ts","../node_modules/@visactor/vchart/esm/series/src/series/correlation/correlation.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/correlation/correlation-transformer.ts","../node_modules/@visactor/vchart/esm/chart/src/chart/correlation/correlation.ts","../node_modules/@visactor/vchart/esm/plugin/components/src/plugin/components/axis-sync-plugin/zero-align-transform.ts","../node_modules/@visactor/vutils-extension/es/transform/src/transform/tick-data/util.ts","../node_modules/@visactor/vchart/esm/plugin/components/src/plugin/components/axis-sync-plugin/tick-align-transform.ts","../node_modules/@visactor/vchart/esm/plugin/src/plugin/base/base-plugin.ts","../node_modules/@visactor/vchart/esm/plugin/components/src/plugin/components/axis-sync-plugin/axis-sync.ts","../node_modules/@visactor/vchart/esm/plugin/src/plugin/components/index.ts","../node_modules/@visactor/vutils-extension/es/transform/src/transform/tick-data/continuous.ts","../node_modules/@visactor/vutils-extension/es/transform/tick-data/src/transform/tick-data/discrete/linear.ts","../node_modules/@visactor/vutils-extension/es/transform/tick-data/src/transform/tick-data/discrete/polar-angle.ts","../node_modules/@visactor/vutils-extension/es/transform/src/transform/tick-data/index.ts","../node_modules/@visactor/vutils-extension/es/transform/src/transform/tick-data/config.ts","../node_modules/@visactor/vrender-components/es/src/core/base.ts","../node_modules/@visactor/vrender-components/es/src/segment/register.ts","../node_modules/@visactor/vrender-components/es/src/segment/segment.ts","../node_modules/@visactor/vrender-components/es/src/util/matrix.ts","../node_modules/@visactor/vrender-components/es/src/util/common.ts","../node_modules/@visactor/vrender-components/es/constant.js","../node_modules/@visactor/vrender-components/es/src/axis/constant.ts","../node_modules/@visactor/vrender-components/es/src/axis/config.ts","../node_modules/@visactor/vrender-components/es/src/util/text.ts","../node_modules/@visactor/vrender-components/es/src/tag/register.ts","../node_modules/@visactor/vrender-components/es/src/tag/tag.ts","../node_modules/@visactor/vrender-components/es/src/axis/base.ts","../node_modules/@visactor/vrender-components/es/axis/src/axis/overlap/util.ts","../node_modules/@visactor/vrender-components/es/axis/src/axis/overlap/auto-hide.ts","../node_modules/@visactor/vrender-components/es/axis/src/axis/overlap/auto-rotate.ts","../node_modules/@visactor/vrender-components/es/axis/src/axis/mixin/line.ts","../node_modules/@visactor/vrender-core/es/src/graphic/circle.ts","../node_modules/@visactor/vrender-core/es/render/contributions/render/src/render/contributions/render/contributions/circle-contribution-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/circle-render.ts","../node_modules/@visactor/vrender-core/es/render/contributions/src/render/contributions/render/circle-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/circle-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/canvas-picker/circle-module.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/circle-picker.ts","../node_modules/@visactor/vrender-kits/es/picker/contributions/src/picker/contributions/math-picker/circle-module.ts","../node_modules/@visactor/vrender-kits/es/src/register/register-circle.ts","../node_modules/@visactor/vrender-components/es/src/axis/register.ts","../node_modules/@visactor/vrender-components/es/src/axis/line.ts","../node_modules/@visactor/vrender-components/es/axis/src/axis/overlap/auto-limit.ts","../node_modules/@visactor/vrender-components/es/src/util/align.ts","../node_modules/@visactor/vrender-components/es/axis/src/axis/mixin/circle.ts","../node_modules/@visactor/vrender-components/es/src/axis/util.ts","../node_modules/@visactor/vrender-components/es/src/axis/circle.ts","../node_modules/@visactor/vgrammar-core/es/src/component/scale.ts","../node_modules/@visactor/vgrammar-core/es/src/component/axis.ts","../node_modules/@visactor/vrender-components/es/axis/src/axis/grid/base.ts","../node_modules/@visactor/vrender-components/es/axis/src/axis/grid/line.ts","../node_modules/@visactor/vrender-components/es/axis/src/axis/grid/circle.ts","../node_modules/@visactor/vgrammar-core/es/src/component/grid.ts","../node_modules/@visactor/vchart/esm/src/mark/component.ts","../node_modules/@visactor/vrender-components/es/axis/src/axis/animate/group-fade.ts","../node_modules/@visactor/vrender-components/es/axis/src/axis/animate/group-transition.ts","../node_modules/@visactor/vchart/esm/data/src/data/parser/scale.ts","../node_modules/@visactor/vchart/esm/component/src/component/axis/base-axis.ts","../node_modules/@visactor/vchart/esm/component/axis/src/component/axis/cartesian/axis.ts","../node_modules/@visactor/vchart/esm/component/axis/src/component/axis/mixin/linear-axis-mixin.ts","../node_modules/@visactor/vchart/esm/component/axis/src/component/axis/cartesian/linear-axis.ts","../node_modules/@visactor/vchart/esm/component/axis/src/component/axis/mixin/band-axis-mixin.ts","../node_modules/@visactor/vchart/esm/component/axis/src/component/axis/cartesian/band-axis.ts","../node_modules/@visactor/vchart/esm/component/axis/src/component/axis/cartesian/time-axis.ts","../node_modules/@visactor/vscale/src/log-scale.ts","../node_modules/@visactor/vchart/esm/component/axis/src/component/axis/cartesian/log-axis.ts","../node_modules/@visactor/vscale/src/symlog-scale.ts","../node_modules/@visactor/vchart/esm/component/axis/src/component/axis/cartesian/symlog-axis.ts","../node_modules/@visactor/vchart/esm/component/axis/polar/src/component/axis/polar/util/common.ts","../node_modules/@visactor/vchart/esm/component/axis/src/component/axis/polar/axis.ts","../node_modules/@visactor/vchart/esm/component/axis/src/component/axis/polar/band-axis.ts","../node_modules/@visactor/vchart/esm/component/axis/src/component/axis/polar/linear-axis.ts","../node_modules/@visactor/vrender-components/es/src/legend/constant.ts","../node_modules/@visactor/vrender-components/es/src/legend/base.ts","../node_modules/@visactor/vrender-components/es/src/pager/register.ts","../node_modules/@visactor/vrender-components/es/src/pager/pager.ts","../node_modules/@visactor/vrender-components/es/src/slider/register.ts","../node_modules/@visactor/vrender-components/es/src/legend/register.ts","../node_modules/@visactor/vrender-components/es/legend/src/legend/discrete/discrete.ts","../node_modules/@visactor/vchart/esm/data/transforms/legend-data/src/data/transforms/legend-data/discrete/discrete.ts","../node_modules/@visactor/vchart/esm/component/src/component/legend/base-legend.ts","../node_modules/@visactor/vchart/esm/component/legend/src/component/legend/discrete/legend.ts","../node_modules/@visactor/vchart/esm/component/legend/src/component/legend/discrete/util.ts","../node_modules/@visactor/vchart/esm/data/transforms/legend-data/src/data/transforms/legend-data/continuous/continuous.ts","../node_modules/@visactor/vutils/es/src/common/clampRange.ts","../node_modules/@visactor/vrender-components/es/src/slider/constant.ts","../node_modules/@visactor/vrender-components/es/src/slider/slider.ts","../node_modules/@visactor/vrender-components/es/legend/src/legend/color/color.ts","../node_modules/@visactor/vrender-components/es/src/legend/util.ts","../node_modules/@visactor/vrender-components/es/legend/src/legend/size/size.ts","../node_modules/@visactor/vchart/esm/component/legend/src/component/legend/continuous/util.ts","../node_modules/@visactor/vchart/esm/component/legend/src/component/legend/continuous/legend.ts","../node_modules/@visactor/vchart/esm/component/tooltip/handler/src/component/tooltip/handler/utils/common.ts","../node_modules/@visactor/vchart/esm/component/tooltip/src/component/tooltip/handler/constants.ts","../node_modules/@visactor/vchart/esm/component/tooltip/handler/src/component/tooltip/handler/utils/position.ts","../node_modules/@visactor/vchart/esm/component/tooltip/handler/src/component/tooltip/handler/utils/compose.ts","../node_modules/@visactor/vchart/esm/component/tooltip/handler/src/component/tooltip/handler/utils/pattern.ts","../node_modules/@visactor/vchart/esm/component/tooltip/handler/src/component/tooltip/handler/utils/get-spec.ts","../node_modules/@visactor/vchart/esm/component/tooltip/src/component/tooltip/interface/common.ts","../node_modules/@visactor/vutils/es/src/graphics/polygon.ts","../node_modules/@visactor/vchart/esm/component/tooltip/handler/src/component/tooltip/handler/utils/attribute.ts","../node_modules/@visactor/vchart/esm/component/tooltip/src/component/tooltip/handler/base.ts","../node_modules/@visactor/vchart/esm/component/tooltip/handler/src/component/tooltip/handler/dom/util.ts","../node_modules/@visactor/vchart/esm/component/tooltip/handler/dom/src/component/tooltip/handler/dom/model/base-tooltip-model.ts","../node_modules/@visactor/vchart/esm/component/tooltip/handler/dom/src/component/tooltip/handler/dom/model/style-constants.ts","../node_modules/@visactor/vchart/esm/component/tooltip/handler/dom/src/component/tooltip/handler/dom/model/shape-model.ts","../node_modules/@visactor/vchart/esm/component/tooltip/handler/dom/src/component/tooltip/handler/dom/model/text-model.ts","../node_modules/@visactor/vchart/esm/component/tooltip/handler/dom/src/component/tooltip/handler/dom/model/content-column-model.ts","../node_modules/@visactor/vchart/esm/component/tooltip/handler/dom/src/component/tooltip/handler/dom/model/content-model.ts","../node_modules/@visactor/vchart/esm/component/tooltip/handler/dom/src/component/tooltip/handler/dom/model/title-model.ts","../node_modules/@visactor/vchart/esm/component/tooltip/handler/dom/src/component/tooltip/handler/dom/model/tooltip-model.ts","../node_modules/@visactor/vchart/esm/component/tooltip/handler/src/component/tooltip/handler/dom/dom-tooltip-handler.ts","../node_modules/@visactor/vrender-components/es/src/tooltip/util.ts","../node_modules/@visactor/vrender-components/es/src/tooltip/config.ts","../node_modules/@visactor/vrender-components/es/src/tooltip/register.ts","../node_modules/@visactor/vrender-components/es/src/tooltip/tooltip.ts","../node_modules/@visactor/vchart/esm/component/tooltip/handler/src/component/tooltip/handler/canvas/canvas-tooltip-handler.ts","../node_modules/@visactor/vchart/esm/component/tooltip/src/component/tooltip/utils/show-tooltip.ts","../node_modules/@visactor/vchart/esm/component/tooltip/src/component/tooltip/processor/base.ts","../node_modules/@visactor/vchart/esm/component/tooltip/src/component/tooltip/processor/dimension-tooltip.ts","../node_modules/@visactor/vchart/esm/component/tooltip/src/component/tooltip/processor/util.ts","../node_modules/@visactor/vchart/esm/component/tooltip/src/component/tooltip/processor/mark-tooltip.ts","../node_modules/@visactor/vchart/esm/component/src/component/tooltip/tooltip-transformer.ts","../node_modules/@visactor/vchart/esm/component/src/component/tooltip/tooltip.ts","../node_modules/@visactor/vrender-components/es/src/crosshair/base.ts","../node_modules/@visactor/vrender-components/es/src/crosshair/register.ts","../node_modules/@visactor/vrender-components/es/src/crosshair/line.ts","../node_modules/@visactor/vrender-components/es/src/crosshair/rect.ts","../node_modules/@visactor/vchart/esm/component/src/component/crosshair/config.ts","../node_modules/@visactor/vchart/esm/component/src/component/crosshair/base.ts","../node_modules/@visactor/vchart/esm/component/src/component/crosshair/cartesian.ts","../node_modules/@visactor/vrender-components/es/src/crosshair/sector.ts","../node_modules/@visactor/vrender-components/es/src/crosshair/polygon.ts","../node_modules/@visactor/vrender-components/es/src/crosshair/circle.ts","../node_modules/@visactor/vchart/esm/component/src/component/crosshair/polar.ts","../node_modules/@visactor/vchart/esm/component/src/component/data-zoom/data-filter-base-component.ts","../node_modules/@visactor/vrender-components/es/data-zoom/config.js","../node_modules/@visactor/vrender-components/es/src/data-zoom/type.ts","../node_modules/@visactor/vrender-components/es/src/data-zoom/data-zoom.ts","../node_modules/@visactor/vrender-components/es/src/data-zoom/register.ts","../node_modules/@visactor/vchart/esm/component/data-zoom/src/component/data-zoom/data-zoom/data-zoom-transformer.ts","../node_modules/@visactor/vchart/esm/component/data-zoom/src/component/data-zoom/data-zoom/data-zoom.ts","../node_modules/@visactor/vrender-components/es/src/scrollbar/scrollbar.ts","../node_modules/@visactor/vrender-components/es/src/scrollbar/register.ts","../node_modules/@visactor/vchart/esm/component/data-zoom/src/component/data-zoom/scroll-bar/scroll-bar.ts","../node_modules/@visactor/vchart/esm/component/src/component/indicator/util.ts","../node_modules/@visactor/vrender-components/es/src/indicator/config.ts","../node_modules/@visactor/vrender-components/es/src/indicator/register.ts","../node_modules/@visactor/vrender-components/es/src/indicator/indicator.ts","../node_modules/@visactor/vchart/esm/component/src/component/indicator/indicator.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/aggregation.ts","../node_modules/@visactor/vchart/esm/src/constant/marker.ts","../node_modules/@visactor/vrender-components/es/src/marker/type.ts","../node_modules/@visactor/vchart/esm/component/src/component/marker/utils.ts","../node_modules/@visactor/vrender-components/es/src/marker/base.ts","../node_modules/@visactor/vrender-components/es/src/marker/config.ts","../node_modules/@visactor/vrender-components/es/src/util/limit-shape.ts","../node_modules/@visactor/vrender-components/es/src/marker/register.ts","../node_modules/@visactor/vrender-components/es/src/marker/line.ts","../node_modules/@visactor/vchart/esm/component/src/component/marker/base-marker.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/regression.ts","../node_modules/@visactor/vchart/esm/data/src/data/transforms/marker-filter.ts","../node_modules/@visactor/vchart/esm/component/marker/src/component/marker/mark-line/mark-line.ts","../node_modules/@visactor/vchart/esm/component/marker/src/component/marker/mark-line/util.ts","../node_modules/@visactor/vrender-components/es/src/title/register.ts","../node_modules/@visactor/vrender-components/es/src/title/title.ts","../node_modules/@visactor/vchart/esm/component/src/component/title/title.ts","../node_modules/@visactor/vrender-components/es/src/marker/area.ts","../node_modules/@visactor/vchart/esm/component/marker/src/component/marker/mark-area/mark-area.ts","../node_modules/@visactor/vrender-components/es/player/controller/src/player/controller/icon/icon.ts","../node_modules/@visactor/vrender-components/es/player/src/player/controller/constant.ts","../node_modules/@visactor/vrender-components/es/player/src/player/controller/controller.ts","../node_modules/@visactor/vrender-components/es/player/controller/src/player/controller/assets/index.ts","../node_modules/@visactor/vrender-components/es/src/player/constant.ts","../node_modules/@visactor/vrender-components/es/player/src/player/type/direction.ts","../node_modules/@visactor/vrender-components/es/src/player/utils.ts","../node_modules/@visactor/vrender-components/es/src/player/base-player.ts","../node_modules/@visactor/vrender-components/es/player/src/player/type/event.ts","../node_modules/@visactor/vrender-components/es/src/player/register.ts","../node_modules/@visactor/vrender-components/es/src/player/discrete-player.ts","../node_modules/@visactor/vrender-components/es/src/player/continuous-player.ts","../node_modules/@visactor/vchart/esm/component/player/src/component/player/utils/transform.ts","../node_modules/@visactor/vchart/esm/component/player/src/component/player/utils/orient.ts","../node_modules/@visactor/vchart/esm/component/src/component/player/player.ts","../node_modules/@visactor/vrender-components/es/label/src/label/overlap/bitmap.ts","../node_modules/@visactor/vrender-components/es/label/src/label/overlap/scaler.ts","../node_modules/@visactor/vrender-components/es/src/util/label-smartInvert.ts","../node_modules/@visactor/vutils/es/src/color/hexToRgb.ts","../node_modules/@visactor/vrender-components/es/label/src/label/overlap/place.ts","../node_modules/@visactor/vrender-components/es/label/src/label/animate/animate.ts","../node_modules/@visactor/vrender-components/es/src/label/util.ts","../node_modules/@visactor/vrender-components/es/src/label/register.ts","../node_modules/@visactor/vrender-components/es/src/label/base.ts","../node_modules/@visactor/vrender-components/es/src/label/rect.ts","../node_modules/@visactor/vrender-components/es/src/label/symbol.ts","../node_modules/@visactor/vrender-components/es/src/label/arc.ts","../node_modules/@visactor/vrender-components/es/src/label/line-data.ts","../node_modules/@visactor/vrender-components/es/src/label/line.ts","../node_modules/@visactor/vrender-components/es/src/label/area.ts","../node_modules/@visactor/vrender-components/es/src/label/dataLabel.ts","../node_modules/@visactor/vgrammar-core/es/src/component/label.ts","../node_modules/@visactor/vchart/esm/component/src/component/label/util.ts","../node_modules/@visactor/vutils/es/src/common/substitute.ts","../node_modules/@visactor/vchart/esm/component/src/component/label/base-label.ts","../node_modules/@visactor/vchart/esm/src/mark/label.ts","../node_modules/@visactor/vchart/esm/component/src/component/label/label-transformer.ts","../node_modules/@visactor/vchart/esm/component/src/component/label/label.ts","../node_modules/@visactor/vchart/esm/component/src/component/label/total-label.ts","../node_modules/@visactor/vrender-components/es/src/marker/point.ts","../node_modules/@visactor/vchart/esm/component/marker/src/component/marker/mark-point/mark-point.ts","../node_modules/@visactor/vrender-components/es/brush/type.js","../node_modules/@visactor/vrender-components/es/src/brush/config.ts","../node_modules/@visactor/vrender-components/es/src/brush/brush.ts","../node_modules/@visactor/vrender-components/es/src/brush/register.ts","../node_modules/@visactor/vchart/esm/component/src/component/brush/brush.ts","../node_modules/@visactor/vchart/esm/src/mark/image.ts","../node_modules/@visactor/vchart/esm/component/src/component/custom-mark/custom-mark.ts","../node_modules/@visactor/vutils/es/graphics/src/graphics/algorithm/aabb.ts","../node_modules/@visactor/vutils/es/src/geo/invariant.ts","../node_modules/@visactor/vchart/esm/component/src/component/map-label/layout.ts","../node_modules/@visactor/vchart/esm/component/src/component/map-label/component.ts","../node_modules/@visactor/vchart/esm/layout/src/layout/grid-layout/grid-layout.ts","../node_modules/@visactor/vchart/esm/layout/src/layout/layout3d/index.ts","../node_modules/@visactor/vrender-components/es/src/poptip/poptip.ts","../node_modules/@visactor/vrender-components/es/src/poptip/contribution.ts","../node_modules/@visactor/vrender-components/es/src/poptip/poptip-plugin.ts","../node_modules/@visactor/vrender-components/es/src/poptip/module.ts","../node_modules/@visactor/vchart/src/vchart-all.ts","../node_modules/@visactor/vchart/esm/component/src/component/poptip/index.ts","../node_modules/@visactor/vchart/esm/src/core/index.ts","../node_modules/@visactor/vchart/src/index.ts","../node_modules/@visactor/vchart-semi-theme/esm/src/common/constants.ts","../node_modules/@visactor/vchart-semi-theme/src/util.ts","../node_modules/@visactor/vchart-semi-theme/esm/src/dark/index.ts","../node_modules/@visactor/vchart-semi-theme/esm/src/dark/color-scheme.ts","../node_modules/@visactor/vchart-semi-theme/esm/src/light/color-scheme.ts","../node_modules/@visactor/vchart-semi-theme/esm/src/common/token-map.ts","../node_modules/@visactor/vchart-theme-utils/esm/src/utils/get-token-value.ts","../node_modules/@visactor/vchart-theme-utils/esm/generator.js","../node_modules/@visactor/vchart-semi-theme/esm/generator.js","../node_modules/@visactor/vchart-semi-theme/esm/src/light/index.ts","../node_modules/@visactor/vchart-semi-theme/src/index.ts","../node_modules/@remix-run/router/history.ts","../node_modules/@remix-run/router/utils.ts","../node_modules/@remix-run/router/router.ts","../node_modules/react-router/lib/context.ts","../node_modules/react-router/lib/hooks.tsx","../node_modules/react-router/lib/deprecations.ts","../node_modules/react-router/lib/components.tsx","../node_modules/react-router-dom/dom.ts","../node_modules/react-router-dom/index.tsx","../node_modules/semantic-ui-react/dist/es/elements/Loader/Loader.js","components/Loading.js","helpers/render.js","pages/User/AddUser.js","pages/User/EditUser.js","components/UsersTable.js","pages/User/index.js","components/PrivateRoute.js","../node_modules/semantic-ui-react/dist/es/collections/Grid/GridColumn.js","../node_modules/semantic-ui-react/dist/es/collections/Grid/GridRow.js","../node_modules/semantic-ui-react/dist/es/collections/Grid/Grid.js","../node_modules/semantic-ui-react/dist/es/elements/Button/ButtonContent.js","../node_modules/lodash-es/_baseMap.js","../node_modules/lodash-es/map.js","../node_modules/semantic-ui-react/dist/es/elements/Button/ButtonGroup.js","../node_modules/semantic-ui-react/dist/es/elements/Button/ButtonOr.js","../node_modules/semantic-ui-react/dist/es/elements/Button/Button.js","../node_modules/lodash-es/_baseAssignValue.js","../node_modules/lodash-es/_assignValue.js","../node_modules/lodash-es/_baseSet.js","../node_modules/lodash-es/set.js","../node_modules/semantic-ui-react/dist/es/modules/Checkbox/Checkbox.js","../node_modules/semantic-ui-react/dist/es/addons/Radio/Radio.js","../node_modules/semantic-ui-react/dist/es/collections/Form/FormField.js","../node_modules/semantic-ui-react/dist/es/collections/Form/FormButton.js","../node_modules/semantic-ui-react/dist/es/collections/Form/FormCheckbox.js","../node_modules/lodash-es/compact.js","../node_modules/lodash-es/_arrayEvery.js","../node_modules/lodash-es/_baseEvery.js","../node_modules/lodash-es/every.js","../node_modules/lodash-es/_baseDifference.js","../node_modules/lodash-es/isArrayLikeObject.js","../node_modules/lodash-es/without.js","../node_modules/lodash-es/_createFind.js","../node_modules/lodash-es/findIndex.js","../node_modules/lodash-es/find.js","../node_modules/lodash-es/dropRight.js","../node_modules/lodash-es/isEmpty.js","../node_modules/lodash-es/_asciiSize.js","../node_modules/lodash-es/_hasUnicode.js","../node_modules/lodash-es/_unicodeSize.js","../node_modules/lodash-es/_stringSize.js","../node_modules/lodash-es/size.js","../node_modules/lodash-es/_isFlattenable.js","../node_modules/lodash-es/_baseFlatten.js","../node_modules/lodash-es/difference.js","../node_modules/lodash-es/union.js","../node_modules/lodash-es/isEqual.js","../node_modules/lodash-es/_basePickBy.js","../node_modules/lodash-es/_basePick.js","../node_modules/lodash-es/flatten.js","../node_modules/lodash-es/pick.js","../node_modules/lodash-es/_flatRest.js","../node_modules/semantic-ui-react/dist/es/elements/Flag/Flag.js","../node_modules/semantic-ui-react/dist/es/modules/Dropdown/DropdownDivider.js","../node_modules/semantic-ui-react/dist/es/modules/Dropdown/DropdownItem.js","../node_modules/semantic-ui-react/dist/es/modules/Dropdown/DropdownHeader.js","../node_modules/semantic-ui-react/dist/es/modules/Dropdown/DropdownMenu.js","../node_modules/semantic-ui-react/dist/es/modules/Dropdown/DropdownSearchInput.js","../node_modules/semantic-ui-react/dist/es/modules/Dropdown/DropdownText.js","../node_modules/lodash-es/escapeRegExp.js","../node_modules/lodash-es/_basePropertyOf.js","../node_modules/lodash-es/_deburrLetter.js","../node_modules/lodash-es/deburr.js","../node_modules/lodash-es/_baseFilter.js","../node_modules/lodash-es/filter.js","../node_modules/semantic-ui-react/dist/es/modules/Dropdown/utils/getMenuOptions.js","../node_modules/lodash-es/_arrayReduce.js","../node_modules/lodash-es/_baseReduce.js","../node_modules/lodash-es/reduce.js","../node_modules/semantic-ui-react/dist/es/modules/Dropdown/utils/getSelectedIndex.js","../node_modules/semantic-ui-react/dist/es/modules/Dropdown/Dropdown.js","../node_modules/semantic-ui-react/dist/es/collections/Form/FormDropdown.js","../node_modules/semantic-ui-react/dist/es/collections/Form/FormGroup.js","../node_modules/semantic-ui-react/dist/es/elements/Input/Input.js","../node_modules/semantic-ui-react/dist/es/collections/Form/FormInput.js","../node_modules/semantic-ui-react/dist/es/collections/Form/FormRadio.js","../node_modules/semantic-ui-react/dist/es/addons/Select/Select.js","../node_modules/semantic-ui-react/dist/es/collections/Form/FormSelect.js","../node_modules/semantic-ui-react/dist/es/addons/TextArea/TextArea.js","../node_modules/semantic-ui-react/dist/es/collections/Form/FormTextArea.js","../node_modules/semantic-ui-react/dist/es/collections/Form/Form.js","../node_modules/semantic-ui-react/dist/es/collections/Message/MessageContent.js","../node_modules/semantic-ui-react/dist/es/collections/Message/MessageHeader.js","../node_modules/semantic-ui-react/dist/es/collections/Message/MessageItem.js","../node_modules/semantic-ui-react/dist/es/collections/Message/MessageList.js","../node_modules/semantic-ui-react/dist/es/collections/Message/Message.js","components/RegisterForm.js","context/User/reducer.js","context/User/index.js","components/utils.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconGithubLogo.js","components/WeChatIcon.js","components/LoginForm.js","pages/NotFound/index.js","../node_modules/semantic-ui-react/dist/es/elements/Divider/Divider.js","../node_modules/semantic-ui-react/dist/es/lib/eventStack/index.js","../node_modules/semantic-ui-react/dist/es/modules/Modal/ModalActions.js","../node_modules/semantic-ui-react/dist/es/modules/Modal/ModalContent.js","../node_modules/semantic-ui-react/dist/es/modules/Modal/ModalDescription.js","../node_modules/semantic-ui-react/dist/es/lib/hooks/useIsomorphicLayoutEffect.js","../node_modules/semantic-ui-react/dist/es/lib/hooks/useClassNamesOnNode.js","../node_modules/semantic-ui-react/dist/es/modules/Modal/ModalDimmer.js","../node_modules/semantic-ui-react/dist/es/modules/Modal/ModalHeader.js","../node_modules/semantic-ui-react/dist/es/modules/Modal/utils/index.js","../node_modules/semantic-ui-react/dist/es/modules/Modal/Modal.js","components/SystemSetting.js","components/OtherSetting.js","components/PersonalSetting.js","components/OperationSetting.js","pages/Setting/index.js","components/PasswordResetForm.js","components/GitHubOAuth.js","components/PasswordResetConfirm.js","pages/Channel/EditChannel.js","components/ChannelsTable.js","pages/Channel/index.js","pages/Token/EditToken.js","components/TokensTable.js","pages/Token/index.js","pages/Redemption/EditRedemption.js","components/RedemptionsTable.js","pages/Redemption/index.js","pages/TopUp/index.js","components/LogsTable.js","pages/Log/index.js","pages/Chat/index.js","components/MjLogsTable.js","pages/Midjourney/index.js","pages/Detail/index.js","App.js","../node_modules/react-fireworks/react-fireworks.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconKey.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconUser.js","components/HeaderBar.js","../node_modules/semantic-ui-react/dist/es/elements/Container/Container.js","components/Footer.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconHome.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconLayers.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconComment.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconGift.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconCreditCard.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconHistogram.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconImage.js","../node_modules/@douyinfe/semi-icons/lib/es/icons/IconSetting.js","components/SiderBar.js","../node_modules/@visactor/vchart-theme-utils/esm/src/utils/observe-attribute.ts","index.js"],"sourcesContent":["export const toastConstants = {\n SUCCESS_TIMEOUT: 1500,\n INFO_TIMEOUT: 3000,\n ERROR_TIMEOUT: 5000,\n WARNING_TIMEOUT: 10000,\n NOTICE_TIMEOUT: 20000\n};\n","export const ITEMS_PER_PAGE = 10; // this value must keep same as the one defined in backend!\n","export const CHANNEL_OPTIONS = [\n { key: 1, text: 'OpenAI', value: 1, color: 'green' },\n { key: 14, text: 'Anthropic Claude', value: 14, color: 'black' },\n { key: 33, text: 'AWS', value: 33, color: 'black' },\n { key: 3, text: 'Azure OpenAI', value: 3, color: 'olive' },\n { key: 11, text: 'Google PaLM2', value: 11, color: 'orange' },\n { key: 24, text: 'Google Gemini', value: 24, color: 'orange' },\n { key: 28, text: 'Mistral AI', value: 28, color: 'orange' },\n { key: 41, text: 'Novita', value: 41, color: 'purple' },\n { key: 40, text: '字节跳动豆包', value: 40, color: 'blue' },\n { key: 15, text: '百度文心千帆', value: 15, color: 'blue' },\n { key: 17, text: '阿里通义千问', value: 17, color: 'orange' },\n { key: 18, text: '讯飞星火认知', value: 18, color: 'blue' },\n { key: 16, text: '智谱 ChatGLM', value: 16, color: 'violet' },\n { key: 19, text: '360 智脑', value: 19, color: 'blue' },\n { key: 25, text: 'Moonshot AI', value: 25, color: 'black' },\n { key: 23, text: '腾讯混元', value: 23, color: 'teal' },\n { key: 26, text: '百川大模型', value: 26, color: 'orange' },\n { key: 27, text: 'MiniMax', value: 27, color: 'red' },\n { key: 29, text: 'Groq', value: 29, color: 'orange' },\n { key: 30, text: 'Ollama', value: 30, color: 'black' },\n { key: 31, text: '零一万物', value: 31, color: 'green' },\n { key: 32, text: '阶跃星辰', value: 32, color: 'blue' },\n { key: 34, text: 'Coze', value: 34, color: 'blue' },\n { key: 35, text: 'Cohere', value: 35, color: 'blue' },\n { key: 36, text: 'DeepSeek', value: 36, color: 'black' },\n { key: 37, text: 'Cloudflare', value: 37, color: 'orange' },\n { key: 38, text: 'DeepL', value: 38, color: 'black' },\n { key: 39, text: 'together.ai', value: 39, color: 'blue' },\n { key: 42, text: 'VertexAI', value: 42, color: 'blue' },\n { key: 43, text: 'Proxy', value: 43, color: 'blue' },\n { key: 44, text: 'SiliconFlow', value: 44, color: 'blue' },\n { key: 45, text: 'xAI', value: 45, color: 'blue' },\n { key: 46, text: 'Replicate', value: 46, color: 'blue' },\n { key: 8, text: '自定义渠道', value: 8, color: 'pink' },\n { key: 22, text: '知识库:FastGPT', value: 22, color: 'blue' },\n { key: 21, text: '知识库:AI Proxy', value: 21, color: 'purple' },\n { key: 20, text: '代理:OpenRouter', value: 20, color: 'black' },\n { key: 2, text: '代理:API2D', value: 2, color: 'blue' },\n { key: 5, text: '代理:OpenAI-SB', value: 5, color: 'brown' },\n { key: 7, text: '代理:OhMyGPT', value: 7, color: 'purple' },\n { key: 10, text: '代理:AI Proxy', value: 10, color: 'purple' },\n { key: 4, text: '代理:CloseAI', value: 4, color: 'teal' },\n { key: 6, text: '代理:OpenAI Max', value: 6, color: 'violet' },\n { key: 9, text: '代理:AI.LS', value: 9, color: 'yellow' },\n { key: 12, text: '代理:API2GPT', value: 12, color: 'blue' },\n { key: 13, text: '代理:AIGC2D', value: 13, color: 'purple' }\n];\n\nfor (let i = 0; i < CHANNEL_OPTIONS.length; i++) {\n CHANNEL_OPTIONS[i].label = CHANNEL_OPTIONS[i].text;\n}\n","export const reducer = (state, action) => {\n switch (action.type) {\n case 'set':\n return {\n ...state,\n status: action.payload,\n };\n case 'unset':\n return {\n ...state,\n status: undefined,\n };\n default:\n return state;\n }\n};\n\nexport const initialState = {\n status: undefined,\n};\n","// contexts/User/index.jsx\n\nimport React from 'react';\nimport { initialState, reducer } from './reducer';\n\nexport const StatusContext = React.createContext({\n state: initialState,\n dispatch: () => null,\n});\n\nexport const StatusProvider = ({ children }) => {\n const [state, dispatch] = React.useReducer(reducer, initialState);\n\n return (\n \n {children}\n \n );\n};","import { createBrowserHistory } from 'history';\n\nexport const history = createBrowserHistory();","import { Toast } from '@douyinfe/semi-ui';\nimport { toastConstants } from '../constants';\nimport React from 'react';\nimport {toast} from \"react-toastify\";\n\nconst HTMLToastContent = ({ htmlContent }) => {\n return
;\n};\nexport default HTMLToastContent;\nexport function isAdmin() {\n let user = localStorage.getItem('user');\n if (!user) return false;\n user = JSON.parse(user);\n return user.role >= 10;\n}\n\nexport function isRoot() {\n let user = localStorage.getItem('user');\n if (!user) return false;\n user = JSON.parse(user);\n return user.role >= 100;\n}\n\nexport function getSystemName() {\n let system_name = localStorage.getItem('system_name');\n if (!system_name) return 'One API';\n return system_name;\n}\n\nexport function getLogo() {\n let logo = localStorage.getItem('logo');\n if (!logo) return '/logo.png';\n return logo\n}\n\nexport function getFooterHTML() {\n return localStorage.getItem('footer_html');\n}\n\nexport async function copy(text) {\n let okay = true;\n try {\n await navigator.clipboard.writeText(text);\n } catch (e) {\n okay = false;\n console.error(e);\n }\n return okay;\n}\n\nexport function isMobile() {\n return window.innerWidth <= 600;\n}\n\nlet showErrorOptions = { autoClose: toastConstants.ERROR_TIMEOUT };\nlet showWarningOptions = { autoClose: toastConstants.WARNING_TIMEOUT };\nlet showSuccessOptions = { autoClose: toastConstants.SUCCESS_TIMEOUT };\nlet showInfoOptions = { autoClose: toastConstants.INFO_TIMEOUT };\nlet showNoticeOptions = { autoClose: false };\n\nif (isMobile()) {\n showErrorOptions.position = 'top-center';\n // showErrorOptions.transition = 'flip';\n\n showSuccessOptions.position = 'top-center';\n // showSuccessOptions.transition = 'flip';\n\n showInfoOptions.position = 'top-center';\n // showInfoOptions.transition = 'flip';\n\n showNoticeOptions.position = 'top-center';\n // showNoticeOptions.transition = 'flip';\n}\n\nexport function showError(error) {\n console.error(error);\n if (error.message) {\n if (error.name === 'AxiosError') {\n switch (error.response.status) {\n case 401:\n // toast.error('错误:未登录或登录已过期,请重新登录!', showErrorOptions);\n window.location.href = '/login?expired=true';\n break;\n case 429:\n Toast.error('错误:请求次数过多,请稍后再试!');\n break;\n case 500:\n Toast.error('错误:服务器内部错误,请联系管理员!');\n break;\n case 405:\n Toast.info('本站仅作演示之用,无服务端!');\n break;\n default:\n Toast.error('错误:' + error.message);\n }\n return;\n }\n Toast.error('错误:' + error.message);\n } else {\n Toast.error('错误:' + error);\n }\n}\n\nexport function showWarning(message) {\n Toast.warning(message);\n}\n\nexport function showSuccess(message) {\n Toast.success(message);\n}\n\nexport function showInfo(message) {\n Toast.info(message);\n}\n\nexport function showNotice(message, isHTML = false) {\n if (isHTML) {\n toast(, showNoticeOptions);\n } else {\n Toast.info(message);\n }\n}\n\nexport function openPage(url) {\n window.open(url);\n}\n\nexport function removeTrailingSlash(url) {\n if (url.endsWith('/')) {\n return url.slice(0, -1);\n } else {\n return url;\n }\n}\n\nexport function timestamp2string(timestamp) {\n let date = new Date(timestamp * 1000);\n let year = date.getFullYear().toString();\n let month = (date.getMonth() + 1).toString();\n let day = date.getDate().toString();\n let hour = date.getHours().toString();\n let minute = date.getMinutes().toString();\n let second = date.getSeconds().toString();\n if (month.length === 1) {\n month = '0' + month;\n }\n if (day.length === 1) {\n day = '0' + day;\n }\n if (hour.length === 1) {\n hour = '0' + hour;\n }\n if (minute.length === 1) {\n minute = '0' + minute;\n }\n if (second.length === 1) {\n second = '0' + second;\n }\n return (\n year +\n '-' +\n month +\n '-' +\n day +\n ' ' +\n hour +\n ':' +\n minute +\n ':' +\n second\n );\n}\n\nexport function timestamp2string1(timestamp, dataExportDefaultTime = 'hour') {\n let date = new Date(timestamp * 1000);\n // let year = date.getFullYear().toString();\n let month = (date.getMonth() + 1).toString();\n let day = date.getDate().toString();\n let hour = date.getHours().toString();\n if (month.length === 1) {\n month = '0' + month;\n }\n if (day.length === 1) {\n day = '0' + day;\n }\n if (hour.length === 1) {\n hour = '0' + hour;\n }\n let str = month + '-' + day\n if (dataExportDefaultTime === 'hour') {\n str += ' ' + hour + \":00\"\n } else if (dataExportDefaultTime === 'week') {\n let nextWeek = new Date(timestamp * 1000 + 6 * 24 * 60 * 60 * 1000);\n let nextMonth = (nextWeek.getMonth() + 1).toString();\n let nextDay = nextWeek.getDate().toString();\n if (nextMonth.length === 1) {\n nextMonth = '0' + nextMonth;\n }\n if (nextDay.length === 1) {\n nextDay = '0' + nextDay;\n }\n str += ' - ' + nextMonth + '-' + nextDay\n }\n return str;\n}\n\nexport function downloadTextAsFile(text, filename) {\n let blob = new Blob([text], { type: 'text/plain;charset=utf-8' });\n let url = URL.createObjectURL(blob);\n let a = document.createElement('a');\n a.href = url;\n a.download = filename;\n a.click();\n}\n\nexport const verifyJSON = (str) => {\n try {\n JSON.parse(str);\n } catch (e) {\n return false;\n }\n return true;\n};\n\nexport function shouldShowPrompt(id) {\n let prompt = localStorage.getItem(`prompt-${id}`);\n return !prompt;\n\n}\n\nexport function setPromptShown(id) {\n localStorage.setItem(`prompt-${id}`, 'true');\n}","import { showError } from './utils';\nimport axios from 'axios';\n\nexport const API = axios.create({\n baseURL: process.env.REACT_APP_SERVER ? process.env.REACT_APP_SERVER : '',\n});\n\nAPI.interceptors.response.use(\n (response) => response,\n (error) => {\n showError(error);\n }\n);\n","export const BASE_CLASS_PREFIX = 'semi';","import _noop from \"lodash/noop\";\n/**\n * The Semi Foundation / Adapter architecture split was inspired by Material Component For Web. (https://github.com/material-components/material-components-web)\n * We re-implemented our own code based on the principle and added more functions we need according to actual needs.\n *\n */\nimport log from '../utils/log';\nclass BaseFoundation {\n /** @return enum{css className} */\n /* istanbul ignore next */\n static get cssClasses() {\n // Classes extending Foundation should implement this method to return an object which exports every\n // CSS class the foundation class needs as a property. e.g. {ACTIVE: 'component--active'}\n return {};\n }\n /** @return enum{strings} */\n /* istanbul ignore next */\n static get strings() {\n // Classes extending Foundation should implement this method to return an object which exports all\n // semantic strings as constants. e.g. {ARIA_ROLE: 'tablist'}\n return {};\n }\n /** @return enum{numbers} */\n /* istanbul ignore next */\n static get numbers() {\n // Classes extending Foundation should implement this method to return an object which exports all\n // of its semantic numbers as constants. e.g. {ANIMATION_DELAY_MS: 350}\n return {};\n }\n static get defaultAdapter() {\n return {\n getProp: _noop,\n getProps: _noop,\n getState: _noop,\n getStates: _noop,\n setState: _noop,\n getContext: _noop,\n getContexts: _noop,\n getCache: _noop,\n setCache: _noop,\n getCaches: _noop,\n stopPropagation: _noop,\n persistEvent: _noop\n };\n }\n constructor(adapter) {\n this._adapter = Object.assign(Object.assign({}, BaseFoundation.defaultAdapter), adapter);\n }\n getProp(key) {\n return this._adapter.getProp(key);\n }\n getProps() {\n return this._adapter.getProps();\n }\n getState(key) {\n return this._adapter.getState(key);\n }\n getStates() {\n return this._adapter.getStates();\n }\n setState(states, cb) {\n return this._adapter.setState(Object.assign({}, states), cb);\n }\n getContext(key) {\n return this._adapter.getContext(key);\n }\n /* istanbul ignore next */\n getContexts() {\n return this._adapter.getContexts();\n }\n /* istanbul ignore next */\n getCaches() {\n return this._adapter.getCaches();\n }\n getCache(key) {\n return this._adapter.getCache(key);\n }\n setCache(key, value) {\n return key && this._adapter.setCache(key, value);\n }\n stopPropagation(e) {\n this._adapter.stopPropagation(e);\n }\n // Determine whether a controlled component\n _isControlledComponent() {\n let key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'value';\n const props = this.getProps();\n const isControlComponent = key in props;\n return isControlComponent;\n }\n // Does the user have incoming props, eg: _isInProps (value)\n _isInProps(key) {\n const props = this.getProps();\n return key in props;\n }\n init(lifecycle) {\n // Subclasses should override this method to perform initialization routines (registering events, etc.)\n }\n destroy() {\n // Subclasses should override this method to perform de-initialization routines (de-registering events, etc.)\n }\n /* istanbul ignore next */\n log(text) {\n for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n rest[_key - 1] = arguments[_key];\n }\n log(text, ...rest);\n }\n _persistEvent(e) {\n // only work for react adapter for now\n this._adapter.persistEvent(e);\n }\n}\nexport default BaseFoundation;","import { numbers as tooltipNumbers } from '../tooltip/constants';\nimport { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-popover`,\n ARROW: `${BASE_CLASS_PREFIX}-popover-icon-arrow`\n};\nconst strings = {\n POSITION_SET: ['top', 'topLeft', 'topRight', 'left', 'leftTop', 'leftBottom', 'right', 'rightTop', 'rightBottom', 'bottom', 'bottomLeft', 'bottomRight', 'leftTopOver', 'rightTopOver'],\n TRIGGER_SET: ['hover', 'focus', 'click', 'custom', 'contextMenu'],\n DEFAULT_ARROW_STYLE: {\n borderOpacity: '1',\n backgroundColor: 'var(--semi-color-bg-3)',\n // borderColor: 'var(--semi-color-shadow)',\n borderColor: 'var(--semi-color-border)'\n }\n};\nconst numbers = {\n ARROW_BOUNDING: Object.assign(Object.assign({}, tooltipNumbers.ARROW_BOUNDING), {\n offsetY: 6,\n offsetX: 0,\n height: 8\n }),\n SPACING: 4,\n SPACING_WITH_ARROW: 10,\n DEFAULT_Z_INDEX: 1030\n};\nexport { cssClasses, strings, numbers };","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-tooltip`\n};\nconst strings = {\n POSITION_SET: ['top', 'topLeft', 'topRight', 'left', 'leftTop', 'leftBottom', 'right', 'rightTop', 'rightBottom', 'bottom', 'bottomLeft', 'bottomRight', 'leftTopOver', 'rightTopOver', 'leftBottomOver', 'rightBottomOver'],\n TRIGGER_SET: ['hover', 'focus', 'click', 'custom', 'contextMenu'],\n STATUS_DISABLED: 'disabled',\n STATUS_LOADING: 'loading'\n};\nconst numbers = {\n ARROW_BOUNDING: {\n offsetX: 0,\n offsetY: 2,\n width: 24,\n height: 7\n },\n DEFAULT_Z_INDEX: 1060,\n MOUSE_ENTER_DELAY: 50,\n MOUSE_LEAVE_DELAY: 50,\n SPACING: 8,\n MARGIN: 0\n};\nexport { cssClasses, strings, numbers };","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-typography`\n};\nconst strings = {\n WEIGHT: ['light', 'regular', 'medium', 'semibold', 'bold', \"default\"],\n TYPE: ['primary', 'secondary', 'danger', 'warning', 'success', 'tertiary', 'quaternary'],\n SIZE: ['normal', 'small', \"inherit\"],\n SPACING: ['normal', 'extended'],\n HEADING: [1, 2, 3, 4, 5, 6],\n RULE: ['text', 'numbers', 'bytes-decimal', 'bytes-binary', 'percentages', 'exponential'],\n TRUNCATE: ['ceil', 'floor', 'round']\n};\nexport { cssClasses, strings };","import isNullOrUndefined from \"./isNullOrUndefined\";\nexport default class Event {\n constructor() {\n this._eventMap = new Map();\n }\n on(event, callback) {\n if (event && typeof callback === 'function') {\n this._eventMap.has(event) || this._eventMap.set(event, []);\n this._eventMap.get(event).push(callback);\n }\n return this;\n }\n once(event, callback) {\n var _this = this;\n if (event && typeof callback === 'function') {\n const fn = function () {\n callback(...arguments);\n _this.off(event, fn);\n };\n this.on(event, fn);\n }\n }\n off(event, callback) {\n if (event) {\n if (typeof callback === 'function') {\n const callbacks = this._eventMap.get(event);\n if (Array.isArray(callbacks) && callbacks.length) {\n let index = -1;\n while ((index = callbacks.findIndex(cb => cb === callback)) > -1) {\n callbacks.splice(index, 1);\n }\n }\n } else if (isNullOrUndefined(callback)) {\n this._eventMap.delete(event);\n }\n }\n return this;\n }\n emit(event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (!this._eventMap.has(event)) {\n return false;\n }\n const callbacks = [...this._eventMap.get(event)];\n // clone to avoid someone writing the logic of deleting callback in callbacks into his or her callback code, for example the once func above\n callbacks.forEach(callback => callback(...args));\n return true;\n }\n}","import _get from \"lodash/get\";\nexport function handlePrevent(event) {\n event.stopPropagation();\n event.preventDefault();\n}\nexport function isPrintableCharacter(string) {\n return string.length === 1 && string.match(/\\S/);\n}\n// set focus to the target item in item list\nexport function setFocusToItem(itemNodes, targetItem) {\n for (let i = 0; i < itemNodes.length; i++) {\n if (itemNodes[i] === targetItem) {\n itemNodes[i].tabIndex = 0;\n itemNodes[i].focus();\n } else {\n itemNodes[i].tabIndex = -1;\n }\n }\n}\n// set focus to the first item in item list\nexport function setFocusToFirstItem(itemNodes) {\n itemNodes.length > 0 && setFocusToItem(itemNodes, itemNodes[0]);\n}\n// set focus to the last item in item list\nexport function setFocusToLastItem(itemNodes) {\n itemNodes.length > 0 && setFocusToItem(itemNodes, itemNodes[itemNodes.length - 1]);\n}\n// set focus to the previous item in item list\nexport function setFocusToPreviousMenuItem(itemNodes, currentItem) {\n let newMenuItem, index;\n if (itemNodes.length > 0) {\n if (currentItem === itemNodes[0]) {\n newMenuItem = itemNodes[itemNodes.length - 1];\n } else {\n index = itemNodes.indexOf(currentItem);\n newMenuItem = itemNodes[index - 1];\n }\n setFocusToItem(itemNodes, newMenuItem);\n }\n}\n// set focus to the next item in item list\nexport function setFocusToNextMenuitem(itemNodes, currentItem) {\n let newMenuItem, index;\n if (itemNodes.length > 0) {\n if (currentItem === itemNodes[itemNodes.length - 1]) {\n newMenuItem = itemNodes[0];\n } else {\n index = itemNodes.indexOf(currentItem);\n newMenuItem = itemNodes[index + 1];\n }\n setFocusToItem(itemNodes, newMenuItem);\n }\n}\nexport function findIndexByCharacter(itemList, curItem, firstCharList, char) {\n let start, index;\n if (!itemList || !firstCharList || !char || char.length > 1) {\n return -1;\n }\n char = char.toLowerCase();\n // Get start index for search based on position of currentItem\n start = itemList.indexOf(curItem) + 1;\n if (start >= itemList.length) {\n start = 0;\n }\n // Check remaining menu items in the menu\n index = firstCharList.indexOf(char, start);\n // If not found in remaining menu items, check from beginning\n if (index === -1) {\n index = firstCharList.indexOf(char, 0);\n }\n return index >= 0 ? index : -1;\n}\nexport function getAncestorNodeByRole(curElement, role) {\n if (!curElement) {\n return null;\n }\n while (curElement.parentElement && _get(curElement.parentElement, 'attributes.role.value', '') !== role) {\n curElement = curElement.parentElement;\n }\n return curElement.parentElement;\n}\n// According to the Id, find the corresponding data-popupid element\nexport function getMenuButton(focusableEle, Id) {\n for (let i = 0; i < focusableEle.length; i++) {\n const curAriDescribedby = focusableEle[i].attributes['data-popupid'];\n if (curAriDescribedby && curAriDescribedby.value === Id) {\n return focusableEle[i];\n }\n }\n return null;\n}","import isHTMLElement from './isElement';\n/**\n *\n * @param {HTMLElement} parentNode\n * @param {...HTMLElement} nodes\n *\n * @param {HTMLElement}\n */\nexport function append(parentNode) {\n for (var _len = arguments.length, nodes = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n nodes[_key - 1] = arguments[_key];\n }\n for (const node of nodes) {\n parentNode.appendChild(node);\n }\n return parentNode;\n}\n/**\n *\n * @param {HTMLElement} parentNode\n * @param {...HTMLElement} nodes\n *\n * @param {HTMLElement}\n */\nexport function prepend(parentNode) {\n for (var _len2 = arguments.length, nodes = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n nodes[_key2 - 1] = arguments[_key2];\n }\n if (parentNode.children && parentNode.children.length) {\n const firstNode = parentNode.children[0];\n for (const node of nodes) {\n parentNode.insertBefore(node, firstNode);\n }\n } else {\n append(parentNode, ...nodes);\n }\n return parentNode;\n}\n/**\n *\n * @param {DOMRect} domRect\n * @returns {object|undefined}\n */\nexport function convertDOMRectToObject(domRect) {\n if (domRect && typeof domRect === 'object') {\n if (typeof domRect.toJSON === 'function') {\n return domRect.toJSON();\n } else {\n const keys = ['left', 'top', 'right', 'bottom', 'width', 'height'];\n return keys.reduce((obj, key) => {\n obj[key] = domRect[key];\n return obj;\n }, {});\n }\n }\n return undefined;\n}\nexport { isHTMLElement };","/**\n * no operation\n */\nexport function noop() {}","export default function getDataAttr(props) {\n return Object.keys(props).reduce((prev, key) => {\n if (key.substr(0, 5) === 'data-') {\n prev[key] = props[key];\n }\n return prev;\n }, {});\n}","/* istanbul ignore next */\nexport default function isElement(obj) {\n try {\n // Using W3 DOM2 (works for FF, Opera and Chrome)\n return obj instanceof HTMLElement;\n } catch (e) {\n // Browsers not supporting W3 DOM2 don't have HTMLElement and\n // an exception is thrown and we end up here. Testing some\n // properties that all elements have (works on IE7)\n return typeof obj === 'object' && obj.nodeType === 1 && typeof obj.style === 'object' && typeof obj.ownerDocument === 'object';\n }\n}","import _get from \"lodash/get\";\nimport { ENTER_KEY } from './keyCode';\nfunction isEnterPress(e) {\n return _get(e, 'key') === ENTER_KEY ? true : false;\n}\nexport default isEnterPress;","/**\n * Whether null or undefined\n * @param {*} value\n * @returns {boolean}\n */\nexport default function isNullOrUndefined(value) {\n return value === null || value === undefined;\n}","/**\n * @ignore\n * some key-codes definition and utils from closure-library\n */\nconst keyCode = {\n /**\n * MAC_ENTER\n */\n MAC_ENTER: 3,\n /**\n * BACKSPACE\n */\n BACKSPACE: 8,\n /**\n * TAB\n */\n TAB: 9,\n /**\n * NUMLOCK on FF/Safari Mac\n */\n NUM_CENTER: 12,\n /**\n * ENTER\n */\n ENTER: 13,\n /**\n * SHIFT\n */\n SHIFT: 16,\n /**\n * CTRL\n */\n CTRL: 17,\n /**\n * ALT\n */\n ALT: 18,\n /**\n * PAUSE\n */\n PAUSE: 19,\n /**\n * CAPS_LOCK\n */\n CAPS_LOCK: 20,\n /**\n * ESC\n */\n ESC: 27,\n /**\n * SPACE\n */\n SPACE: 32,\n /**\n * PAGE_UP\n */\n PAGE_UP: 33,\n /**\n * PAGE_DOWN\n */\n PAGE_DOWN: 34,\n /**\n * END\n */\n END: 35,\n /**\n * HOME\n */\n HOME: 36,\n /**\n * LEFT\n */\n LEFT: 37,\n /**\n * UP\n */\n UP: 38,\n /**\n * RIGHT\n */\n RIGHT: 39,\n /**\n * DOWN\n */\n DOWN: 40,\n /**\n * PRINT_SCREEN\n */\n PRINT_SCREEN: 44,\n /**\n * INSERT\n */\n INSERT: 45,\n /**\n * DELETE\n */\n DELETE: 46,\n /**\n * ZERO\n */\n ZERO: 48,\n /**\n * ONE\n */\n ONE: 49,\n /**\n * TWO\n */\n TWO: 50,\n /**\n * THREE\n */\n THREE: 51,\n /**\n * FOUR\n */\n FOUR: 52,\n /**\n * FIVE\n */\n FIVE: 53,\n /**\n * SIX\n */\n SIX: 54,\n /**\n * SEVEN\n */\n SEVEN: 55,\n /**\n * EIGHT\n */\n EIGHT: 56,\n /**\n * NINE\n */\n NINE: 57,\n /**\n * QUESTION_MARK\n */\n QUESTION_MARK: 63,\n /**\n * A\n */\n A: 65,\n /**\n * B\n */\n B: 66,\n /**\n * C\n */\n C: 67,\n /**\n * D\n */\n D: 68,\n /**\n * E\n */\n E: 69,\n /**\n * F\n */\n F: 70,\n /**\n * G\n */\n G: 71,\n /**\n * H\n */\n H: 72,\n /**\n * I\n */\n I: 73,\n /**\n * J\n */\n J: 74,\n /**\n * K\n */\n K: 75,\n /**\n * L\n */\n L: 76,\n /**\n * M\n */\n M: 77,\n /**\n * N\n */\n N: 78,\n /**\n * O\n */\n O: 79,\n /**\n * P\n */\n P: 80,\n /**\n * Q\n */\n Q: 81,\n /**\n * R\n */\n R: 82,\n /**\n * S\n */\n S: 83,\n /**\n * T\n */\n T: 84,\n /**\n * U\n */\n U: 85,\n /**\n * V\n */\n V: 86,\n /**\n * W\n */\n W: 87,\n /**\n * X\n */\n X: 88,\n /**\n * Y\n */\n Y: 89,\n /**\n * Z\n */\n Z: 90,\n /**\n * META\n */\n META: 91,\n /**\n * WIN_KEY_RIGHT\n */\n WIN_KEY_RIGHT: 92,\n /**\n * CONTEXT_MENU\n */\n CONTEXT_MENU: 93,\n /**\n * NUM_ZERO\n */\n NUM_ZERO: 96,\n /**\n * NUM_ONE\n */\n NUM_ONE: 97,\n /**\n * NUM_TWO\n */\n NUM_TWO: 98,\n /**\n * NUM_THREE\n */\n NUM_THREE: 99,\n /**\n * NUM_FOUR\n */\n NUM_FOUR: 100,\n /**\n * NUM_FIVE\n */\n NUM_FIVE: 101,\n /**\n * NUM_SIX\n */\n NUM_SIX: 102,\n /**\n * NUM_SEVEN\n */\n NUM_SEVEN: 103,\n /**\n * NUM_EIGHT\n */\n NUM_EIGHT: 104,\n /**\n * NUM_NINE\n */\n NUM_NINE: 105,\n /**\n * NUM_MULTIPLY\n */\n NUM_MULTIPLY: 106,\n /**\n * NUM_PLUS\n */\n NUM_PLUS: 107,\n /**\n * NUM_MINUS\n */\n NUM_MINUS: 109,\n /**\n * NUM_PERIOD\n */\n NUM_PERIOD: 110,\n /**\n * NUM_DIVISION\n */\n NUM_DIVISION: 111,\n /**\n * F1\n */\n F1: 112,\n /**\n * F2\n */\n F2: 113,\n /**\n * F3\n */\n F3: 114,\n /**\n * F4\n */\n F4: 115,\n /**\n * F5\n */\n F5: 116,\n /**\n * F6\n */\n F6: 117,\n /**\n * F7\n */\n F7: 118,\n /**\n * F8\n */\n F8: 119,\n /**\n * F9\n */\n F9: 120,\n /**\n * F10\n */\n F10: 121,\n /**\n * F11\n */\n F11: 122,\n /**\n * F12\n */\n F12: 123,\n /**\n * NUMLOCK\n */\n NUMLOCK: 144,\n /**\n * SEMICOLON\n */\n SEMICOLON: 186,\n /**\n * DASH\n */\n DASH: 189,\n /**\n * EQUALS\n */\n EQUALS: 187,\n /**\n * COMMA\n */\n COMMA: 188,\n /**\n * PERIOD\n */\n PERIOD: 190,\n /**\n * SLASH\n */\n SLASH: 191,\n /**\n * APOSTROPHE\n */\n APOSTROPHE: 192,\n /**\n * SINGLE_QUOTE\n */\n SINGLE_QUOTE: 222,\n /**\n * OPEN_SQUARE_BRACKET\n */\n OPEN_SQUARE_BRACKET: 219,\n /**\n * BACKSLASH\n */\n BACKSLASH: 220,\n /**\n * CLOSE_SQUARE_BRACKET\n */\n CLOSE_SQUARE_BRACKET: 221,\n /**\n * WIN_KEY\n */\n WIN_KEY: 224,\n /**\n * MAC_FF_META\n */\n MAC_FF_META: 224,\n /**\n * WIN_IME\n */\n WIN_IME: 229\n};\nexport const ENTER_KEY = 'Enter';\nexport const TAB_KEY = 'Tab';\nexport const ESC_KEY = 'Escape';\nexport default keyCode;","import _get from \"lodash/get\";\nconst log = function (text) {\n if (_get(process, 'env.NODE_ENV') === 'development') {\n for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n rest[_key - 1] = arguments[_key];\n }\n console.log(text, ...rest);\n }\n};\nexport default log;","export default function getUuid(prefix) {\n return `${prefix}-${new Date().getTime()}-${Math.random()}`;\n}\n// https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\nfunction getUuidv4() {\n var _a, _b;\n try {\n // @ts-ignore\n return (_b = (_a = crypto === null || crypto === void 0 ? void 0 : crypto.randomUUID) === null || _a === void 0 ? void 0 : _a.call(crypto)) !== null && _b !== void 0 ? _b : String(1e7 + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c => (Number(c) ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> Number(c) / 4).toString(16));\n } catch (err) {\n return getUuid('semi');\n }\n}\n/**\n * Get a random id with prefix, it not strictly guarantee id uniqueness\n *\n * Note: the return value of getUuid is too long, we need a short one\n *\n * @example\n * getUuidShort({ prefix: 'semi' }) => 'semi-46dinzc'\n * getUuidShort({ prefix: '' }) => '0eer2i0'\n * getUuidShort({ prefix: 'semi', length: 4 }) => 'semi-8jts'\n */\nfunction getUuidShort() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n prefix = '',\n length = 7\n } = options;\n const characters = '0123456789abcdefghijklmnopqrstuvwxyz';\n const total = characters.length;\n let randomId = '';\n for (let i = 0; i < length; i++) {\n const random = Math.floor(Math.random() * total);\n randomId += characters.charAt(random);\n }\n return prefix ? `${prefix}-${randomId}` : randomId;\n}\nexport { getUuid, getUuidv4, getUuidShort };","export default function warning(flag, info) {\n if (flag) {\n console.warn(`Warning: ${info}`);\n }\n}","export const BASE_CLASS_PREFIX = 'semi';","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport { BASE_CLASS_PREFIX } from '../env';\nimport cls from 'classnames';\nimport '../styles/icons.css';\nconst Icon = /*#__PURE__*/React.forwardRef((props, ref) => {\n const {\n svg,\n spin = false,\n rotate,\n style,\n className,\n prefixCls = BASE_CLASS_PREFIX,\n type,\n size = 'default'\n } = props,\n restProps = __rest(props, [\"svg\", \"spin\", \"rotate\", \"style\", \"className\", \"prefixCls\", \"type\", \"size\"]);\n const classes = cls(`${prefixCls}-icon`, {\n [`${prefixCls}-icon-extra-small`]: size === 'extra-small',\n [`${prefixCls}-icon-small`]: size === 'small',\n [`${prefixCls}-icon-default`]: size === 'default',\n [`${prefixCls}-icon-large`]: size === 'large',\n [`${prefixCls}-icon-extra-large`]: size === 'extra-large',\n [`${prefixCls}-icon-spinning`]: spin === true,\n [`${prefixCls}-icon-${type}`]: Boolean(type)\n }, className);\n const outerStyle = {};\n if (Number.isSafeInteger(rotate)) {\n outerStyle.transform = `rotate(${rotate}deg)`;\n }\n Object.assign(outerStyle, style);\n return /*#__PURE__*/React.createElement(\"span\", Object.assign({\n role: \"img\",\n ref: ref,\n \"aria-label\": type,\n className: classes,\n style: outerStyle\n }, restProps), svg);\n});\n// @ts-ignore used to judge whether it is a semi-icon in semi-ui\n// custom icon case\nIcon.elementType = 'Icon';\nconst convertIcon = (Svg, iconType) => {\n const InnerIcon = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(Icon, Object.assign({\n svg: /*#__PURE__*/React.createElement(Svg),\n type: iconType,\n ref: ref\n }, props)));\n // @ts-ignore used to judge whether it is a semi-icon in semi-ui \n // builtin icon case\n InnerIcon.elementType = 'Icon';\n return InnerIcon;\n};\nexport { convertIcon };\nexport default Icon;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2 5v14a3 3 0 0 0 3 3h7.1a7.02 7.02 0 0 1-1.43-2H6a2 2 0 0 1-2-2V8a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2.67c.75.36 1.43.85 2 1.43V5a3 3 0 0 0-3-3H5a3 3 0 0 0-3 3Z\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 10h1c-.54 0-1.06.06-1.57.18A1 1 0 0 1 16 10Z\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.5 10.94a1 1 0 0 0-1-.94h-1a1 1 0 0 0-1 1v1a1 1 0 0 0 .77.97 7.03 7.03 0 0 1 2.23-2.03Z\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7 10a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h1a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1H7Z\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6 16a1 1 0 0 1 1-1h1a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1v-1Z\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M22 17a5 5 0 1 1-10 0 5 5 0 0 1 10 0Zm-4-2a1 1 0 1 0-2 0v2c0 .27.1.52.3.7l1.5 1.5a1 1 0 0 0 1.4-1.4L18 16.58V15Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'calendar_clock');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M12 23a11 11 0 1 0 0-22 11 11 0 0 0 0 22Zm-.17-8.4c-.86 0-1.3-.53-1.3-1.23 0-1.05.53-1.72 1.74-2.64l.06-.05c.83-.62 1.4-1.06 1.4-1.85 0-.9-.83-1.4-1.76-1.4-.76 0-1.34.28-1.8.87-.33.34-.6.53-1.05.53C8.38 8.83 8 8.3 8 7.7c0-.6.34-1.22.88-1.68A5.15 5.15 0 0 1 12.28 5c2.71 0 4.62 1.34 4.62 3.64 0 1.68-1 2.5-2.2 3.31-.8.59-1.17.93-1.48 1.62-.33.6-.58 1.04-1.4 1.04Zm-.02 4.17c-.94 0-1.71-.6-1.71-1.54 0-.94.77-1.55 1.7-1.55.95 0 1.7.6 1.7 1.55 0 .93-.75 1.54-1.7 1.54Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'help_circle');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M21.35 4.27c.68.47.86 1.4.38 2.08l-10 14.5a1.5 1.5 0 0 1-2.33.17l-6.5-7a1.5 1.5 0 0 1 2.2-2.04l5.23 5.63 8.94-12.96a1.5 1.5 0 0 1 2.08-.38Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'tick');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m20.56 9.66-7.8 8.97a1 1 0 0 1-1.51 0L3.44 9.66A1 1 0 0 1 4.19 8h15.62a1 1 0 0 1 .75 1.66Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'tree_triangle_down');\nexport default IconComponent;","/**\n * The Semi Foundation / Adapter architecture split was inspired by Material Component For Web. (https://github.com/material-components/material-components-web)\n * We re-implemented our own code based on the principle and added more functions we need according to actual needs.\n */\nimport { Component } from 'react';\nimport log from '@douyinfe/semi-foundation/lib/es/utils/log';\nimport getDataAttr from '@douyinfe/semi-foundation/lib/es/utils/getDataAttr';\nconst {\n hasOwnProperty\n} = Object.prototype;\n// eslint-disable-next-line\nexport default class BaseComponent extends Component {\n constructor(props) {\n super(props);\n // eslint-disable-next-line\n this.isControlled = key => Boolean(key && this.props && typeof this.props === 'object' && hasOwnProperty.call(this.props, key));\n this.setStateAsync = state => {\n return new Promise(resolve => {\n this.setState(state, resolve);\n });\n };\n this.cache = {};\n this.foundation = null;\n }\n componentDidMount() {\n this.foundation && typeof this.foundation.init === 'function' && this.foundation.init();\n }\n componentWillUnmount() {\n this.foundation && typeof this.foundation.destroy === 'function' && this.foundation.destroy();\n this.cache = {};\n }\n get adapter() {\n return {\n getContext: key => {\n if (this.context && key) {\n return this.context[key];\n }\n },\n getContexts: () => this.context,\n getProp: key => this.props[key],\n // return all props\n getProps: () => this.props,\n getState: key => this.state[key],\n getStates: () => this.state,\n setState: (states, cb) => this.setState(Object.assign({}, states), cb),\n getCache: key => key && this.cache[key],\n getCaches: () => this.cache,\n setCache: (key, value) => key && (this.cache[key] = value),\n stopPropagation: e => {\n try {\n e.stopPropagation();\n e.nativeEvent && e.nativeEvent.stopImmediatePropagation();\n } catch (error) {}\n },\n persistEvent: e => {\n e && e.persist && typeof e.persist === 'function' ? e.persist() : null;\n }\n };\n }\n log(text) {\n for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n rest[_key - 1] = arguments[_key];\n }\n return log(text, ...rest);\n }\n getDataAttr() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n return getDataAttr(props);\n }\n}\nBaseComponent.propTypes = {};\nBaseComponent.defaultProps = {};","import _isEqual from \"lodash/isEqual\";\nimport React from 'react';\nclass CSSAnimation extends React.Component {\n constructor(props) {\n super(props);\n this.handleAnimationStart = () => {\n var _a, _b;\n (_b = (_a = this.props).onAnimationStart) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n this.handleAnimationEnd = () => {\n this.setState({\n currentClassName: this.props.endClassName,\n extraStyle: {\n animationFillMode: this.props.fillMode\n },\n isAnimating: false\n }, () => {\n var _a, _b;\n (_b = (_a = this.props).onAnimationEnd) === null || _b === void 0 ? void 0 : _b.call(_a, false);\n });\n };\n this.state = {\n currentClassName: this.props.startClassName,\n extraStyle: {\n animationFillMode: this.props.fillMode\n },\n isAnimating: true\n };\n }\n componentDidMount() {\n var _a, _b, _c, _d;\n // The purpose is to shield the impact of the presence or absence of animation on the other semi component life cycle.\n // In order to make the component side do not need to manually call the next life cycle function when there is no animation,\n // so when there is no animation , it is logically (and only logically) regarded as an animation with a duration of 0.\n (_b = (_a = this.props).onAnimationStart) === null || _b === void 0 ? void 0 : _b.call(_a);\n if (!this.props.motion) {\n (_d = (_c = this.props).onAnimationEnd) === null || _d === void 0 ? void 0 : _d.call(_c, false);\n this.setState({\n isAnimating: false\n });\n }\n }\n componentDidUpdate(prevProps, prevState, snapshot) {\n const changedKeys = Object.keys(this.props).filter(key => !_isEqual(this.props[key], prevProps[key]));\n if (changedKeys.includes(\"animationState\")) {}\n if (changedKeys.includes(\"startClassName\") || changedKeys.includes('replayKey') || changedKeys.includes(\"motion\")) {\n this.setState({\n currentClassName: this.props.startClassName,\n extraStyle: {\n animationFillMode: this.props.fillMode\n },\n isAnimating: true\n }, () => {\n var _a, _b, _c, _d;\n (_b = (_a = this.props).onAnimationStart) === null || _b === void 0 ? void 0 : _b.call(_a);\n if (!this.props.motion) {\n (_d = (_c = this.props).onAnimationEnd) === null || _d === void 0 ? void 0 : _d.call(_c, this.state.isAnimating);\n this.setState({\n isAnimating: false\n });\n }\n });\n }\n }\n render() {\n var _a;\n if (this.props.motion) {\n return this.props.children({\n animationClassName: (_a = this.state.currentClassName) !== null && _a !== void 0 ? _a : \"\",\n animationStyle: this.state.extraStyle,\n animationEventsNeedBind: {\n onAnimationStart: this.handleAnimationStart,\n onAnimationEnd: this.handleAnimationEnd\n },\n isAnimating: this.state.isAnimating\n });\n } else {\n return this.props.children({\n animationClassName: \"\",\n animationStyle: {},\n animationEventsNeedBind: {},\n isAnimating: this.state.isAnimating\n });\n }\n }\n}\nCSSAnimation.defaultProps = {\n motion: true,\n replayKey: \"\"\n};\n// const mergeAnimationFunction = (eventHandleFunctions: AnimationEventsNeedBind[]) => {\n// //merge function in objects\n// const mergedFunction = {};\n// eventHandleFunctions.forEach(eventHandleFunction => {\n// Object.keys(eventHandleFunction).forEach(key => {\n// if (mergedFunction[key]) {\n// const oldFunction = mergedFunction[key];\n// mergedFunction[key] = (e) => {\n// eventHandleFunction[key](e);\n// oldFunction(e);\n// };\n// } else {\n// mergedFunction[key] = eventHandleFunction[key];\n// }\n// });\n// });\n// return mergedFunction;\n// };\n// export { mergeAnimationFunction };\nexport default CSSAnimation;","import { PureComponent } from 'react';\nimport { createPortal } from 'react-dom';\nimport { BASE_CLASS_PREFIX } from '@douyinfe/semi-foundation/lib/es/base/constants';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport ConfigContext from '../configProvider/context';\nimport '@douyinfe/semi-foundation/lib/es/_portal/portal.css';\nconst defaultGetContainer = () => document.body;\nclass Portal extends PureComponent {\n constructor(props, context) {\n var _this;\n super(props);\n _this = this;\n this.initContainer = function (context) {\n let catchError = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var _a, _b;\n try {\n let container = undefined;\n if (!_this.el || !((_a = _this.state) === null || _a === void 0 ? void 0 : _a.container) || !Array.from(_this.state.container.childNodes).includes(_this.el)) {\n _this.el = document.createElement('div');\n const getContainer = _this.props.getPopupContainer || context.getPopupContainer || defaultGetContainer;\n const portalContainer = getContainer();\n portalContainer.appendChild(_this.el);\n _this.addStyle(_this.props.style);\n _this.addClass(_this.props.prefixCls, context, _this.props.className);\n container = portalContainer;\n return container;\n }\n } catch (e) {\n if (!catchError) {\n throw e;\n }\n }\n return (_b = _this.state) === null || _b === void 0 ? void 0 : _b.container;\n };\n this.addStyle = function () {\n let style = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (_this.el) {\n for (const key of Object.keys(style)) {\n _this.el.style[key] = style[key];\n }\n }\n };\n this.addClass = function (prefixCls) {\n let context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _this.context;\n const {\n direction\n } = context;\n for (var _len = arguments.length, classNames = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n classNames[_key - 2] = arguments[_key];\n }\n const cls = classnames(prefixCls, ...classNames, {\n [`${prefixCls}-rtl`]: direction === 'rtl'\n });\n if (_this.el) {\n _this.el.className = cls;\n }\n };\n this.state = {\n container: this.initContainer(context, true)\n };\n }\n componentDidMount() {\n const container = this.initContainer(this.context);\n if (container !== this.state.container) {\n this.setState({\n container\n });\n }\n }\n componentDidUpdate(prevProps) {\n // visible callback\n const {\n didUpdate\n } = this.props;\n if (didUpdate) {\n didUpdate(prevProps);\n }\n }\n componentWillUnmount() {\n const {\n container\n } = this.state;\n if (container) {\n container.removeChild(this.el);\n }\n }\n render() {\n const {\n state,\n props\n } = this;\n if (state.container) {\n return /*#__PURE__*/createPortal(props.children, this.el);\n }\n return null;\n }\n}\nPortal.contextType = ConfigContext;\nPortal.defaultProps = {\n // getPopupContainer: () => document.body,\n prefixCls: `${BASE_CLASS_PREFIX}-portal`\n};\nPortal.propTypes = {\n children: PropTypes.node,\n prefixCls: PropTypes.string,\n getPopupContainer: PropTypes.func,\n className: PropTypes.string,\n didUpdate: PropTypes.func\n};\nexport default Portal;","class SemiGlobal {\n constructor() {\n this.config = {};\n }\n}\nexport default new SemiGlobal();","import _get from \"lodash/get\";\nimport _set from \"lodash/set\";\nimport _cloneDeepWith from \"lodash/cloneDeepWith\";\nvar __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport React from 'react';\nimport warning from '@douyinfe/semi-foundation/lib/es/utils/warning';\nimport { isHTMLElement } from '@douyinfe/semi-foundation/lib/es/utils/dom';\nimport semiGlobal from \"./semi-global\";\n/**\n * stop propagation\n *\n * @param {React.MouseEvent} e React mouse event object\n * @param {boolean} noImmediate Skip stopping immediate propagation\n */\nexport function stopPropagation(e, noImmediate) {\n if (e && typeof e.stopPropagation === 'function') {\n e.stopPropagation();\n }\n if (!noImmediate && e.nativeEvent && typeof e.nativeEvent.stopImmediatePropagation === 'function') {\n e.nativeEvent.stopImmediatePropagation();\n }\n}\nexport function cloneDeep(value, customizer) {\n return _cloneDeepWith(value, v => {\n if (typeof customizer === 'function') {\n return customizer(v);\n }\n if (typeof v === 'function' || /*#__PURE__*/React.isValidElement(v)) {\n return v;\n }\n if (Object.prototype.toString.call(v) === '[object Error]') {\n return v;\n }\n // it is tricky\n // when array length beyond max length, array.length will be 0\n if (Array.isArray(v) && v.length === 0) {\n const keys = Object.keys(v);\n if (keys.length) {\n const newArray = [];\n keys.forEach(key => {\n _set(newArray, key, v[key]);\n });\n // internal-issues:887\n try {\n warning(_get(process, 'env.NODE_ENV') !== 'production', `[Semi] You may use an out-of-bounds array. In some cases, your program may not behave as expected.\n The maximum length of an array is 4294967295.\n Please check whether the array subscript in your data exceeds the maximum value of the JS array subscript`);\n } catch (e) {}\n return newArray;\n } else {\n return undefined;\n }\n }\n return undefined;\n });\n}\n/**\n * register matchFn and unMatchFn callback while media query\n * @param {string} media media string\n * @param {object} param param object\n * @returns function\n */\nexport const registerMediaQuery = (media, _ref) => {\n let {\n match,\n unmatch,\n callInInit = true\n } = _ref;\n if (typeof window !== 'undefined') {\n const mediaQueryList = window.matchMedia(media);\n function handlerMediaChange(e) {\n if (e.matches) {\n match && match(e);\n } else {\n unmatch && unmatch(e);\n }\n }\n callInInit && handlerMediaChange(mediaQueryList);\n if (Object.prototype.hasOwnProperty.call(mediaQueryList, 'addEventListener')) {\n mediaQueryList.addEventListener('change', handlerMediaChange);\n return () => mediaQueryList.removeEventListener('change', handlerMediaChange);\n }\n mediaQueryList.addListener(handlerMediaChange);\n return () => mediaQueryList.removeListener(handlerMediaChange);\n }\n return () => undefined;\n};\n/**\n * Determine whether the incoming element is a built-in icon\n * @param icon 元素\n * @returns boolean\n */\nexport const isSemiIcon = icon => /*#__PURE__*/React.isValidElement(icon) && _get(icon.type, 'elementType') === 'Icon';\nexport function getActiveElement() {\n return document ? document.activeElement : null;\n}\nexport function isNodeContainsFocus(node) {\n const activeElement = getActiveElement();\n return activeElement === node || node.contains(activeElement);\n}\nexport function getFocusableElements(node) {\n if (!isHTMLElement(node)) {\n return [];\n }\n const focusableSelectorsList = [\"input:not([disabled]):not([tabindex='-1'])\", \"textarea:not([disabled]):not([tabindex='-1'])\", \"button:not([disabled]):not([tabindex='-1'])\", \"a[href]:not([tabindex='-1'])\", \"select:not([disabled]):not([tabindex='-1'])\", \"area[href]:not([tabindex='-1'])\", \"iframe:not([tabindex='-1'])\", \"object:not([tabindex='-1'])\", \"*[tabindex]:not([tabindex='-1'])\", \"*[contenteditable]:not([tabindex='-1'])\"];\n const focusableSelectorsStr = focusableSelectorsList.join(',');\n // we are not filtered elements which are invisible\n const focusableElements = Array.from(node.querySelectorAll(focusableSelectorsStr));\n return focusableElements;\n}\nexport function runAfterTicks(func, numberOfTicks) {\n return __awaiter(this, void 0, void 0, function* () {\n if (numberOfTicks === 0) {\n yield func();\n return;\n } else {\n yield new Promise(resolve => {\n setTimeout(() => __awaiter(this, void 0, void 0, function* () {\n yield runAfterTicks(func, numberOfTicks - 1);\n resolve();\n }), 0);\n });\n return;\n }\n });\n}\nexport function getScrollbarWidth() {\n if (globalThis && Object.prototype.toString.call(globalThis) === '[object Window]') {\n return window.innerWidth - document.documentElement.clientWidth;\n }\n return 0;\n}\nexport function getDefaultPropsFromGlobalConfig(componentName) {\n let semiDefaultProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const getFromGlobalConfig = () => {\n var _a, _b;\n return ((_b = (_a = semiGlobal === null || semiGlobal === void 0 ? void 0 : semiGlobal.config) === null || _a === void 0 ? void 0 : _a.overrideDefaultProps) === null || _b === void 0 ? void 0 : _b[componentName]) || {};\n };\n return new Proxy(Object.assign({}, semiDefaultProps), {\n get(target, key, receiver) {\n const defaultPropsFromGlobal = getFromGlobalConfig();\n if (key in defaultPropsFromGlobal) {\n return defaultPropsFromGlobal[key];\n }\n return Reflect.get(target, key, receiver);\n },\n set(target, key, value, receiver) {\n return Reflect.set(target, key, value, receiver);\n },\n ownKeys() {\n const defaultPropsFromGlobal = getFromGlobalConfig();\n return Array.from(new Set([...Reflect.ownKeys(semiDefaultProps), ...Object.keys(defaultPropsFromGlobal)]));\n },\n getOwnPropertyDescriptor(target, key) {\n const defaultPropsFromGlobal = getFromGlobalConfig();\n if (key in defaultPropsFromGlobal) {\n return Reflect.getOwnPropertyDescriptor(defaultPropsFromGlobal, key);\n } else {\n return Reflect.getOwnPropertyDescriptor(target, key);\n }\n }\n });\n}","import React from 'react';\nconst ConfigContext = /*#__PURE__*/React.createContext({});\nexport default ConfigContext;","import { BASE_CLASS_PREFIX } from './env';\nconst VALIDATE_STATUS = ['default', 'error', 'warning', 'success'];\n// const VALIDATE_STATUS = ['default', 'error', 'warning', 'success', 'validating'] as const;\nexport { BASE_CLASS_PREFIX, VALIDATE_STATUS };","import { strings as tooltipStrings } from '../tooltip/constants';\nimport { BASE_CLASS_PREFIX, VALIDATE_STATUS } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-autocomplete`,\n PREFIX_OPTION: `${BASE_CLASS_PREFIX}-autocomplete-option`,\n PREFIX_GROUP: `${BASE_CLASS_PREFIX}-autocomplete-group`\n};\nconst strings = {\n SIZE: ['small', 'large', 'default'],\n POSITION: tooltipStrings.POSITION_SET,\n OPTIONS: ['children', 'value'],\n STATUS: VALIDATE_STATUS\n};\nexport { cssClasses, strings };","import _isObject from \"lodash/isObject\";\nimport _isUndefined from \"lodash/isUndefined\";\nimport _isNumber from \"lodash/isNumber\";\nimport _isString from \"lodash/isString\";\nimport BaseFoundation from '../base/foundation';\nimport warning from '../utils/warning';\nimport KeyCode from '../utils/keyCode';\nclass AutoCompleteFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n this.isPanelOpen = false;\n }\n init() {\n this._setDropdownWidth();\n const {\n defaultOpen,\n data,\n defaultValue,\n value\n } = this.getProps();\n if (data && data.length) {\n const initOptions = this._generateList(data);\n this._adapter.updateOptionList(initOptions);\n }\n if (defaultOpen) {\n this.openDropdown();\n }\n // When both defaultValue and value exist, finally the value of value will be taken as initValue\n let initValue;\n if (typeof defaultValue !== 'undefined') {\n initValue = defaultValue;\n }\n if (typeof value !== 'undefined') {\n initValue = value;\n }\n if (typeof initValue !== 'undefined') {\n this.handleValueChange(initValue);\n }\n }\n destroy() {\n this._adapter.unregisterClickOutsideHandler();\n // this.unBindKeyBoardEvent();\n }\n _setDropdownWidth() {\n const {\n style,\n dropdownMatchSelectWidth\n } = this.getProps();\n let width;\n if (dropdownMatchSelectWidth) {\n if (style && _isNumber(style.width)) {\n width = style.width;\n } else if (style && _isString(style.width) && !style.width.includes('%')) {\n width = style.width;\n } else {\n width = this._adapter.getTriggerWidth();\n }\n this._adapter.setOptionWrapperWidth(width);\n }\n }\n handleInputClick(e) {\n const {\n options\n } = this.getStates();\n const {\n disabled\n } = this.getProps();\n if (!disabled) {\n if (this.isPanelOpen) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n }\n openDropdown() {\n this.isPanelOpen = true;\n this._adapter.toggleListVisible(true);\n this._setDropdownWidth();\n this._adapter.registerClickOutsideHandler(e => this.closeDropdown(e));\n this._adapter.notifyDropdownVisibleChange(true);\n this._modifyFocusIndexOnPanelOpen();\n }\n closeDropdown(e) {\n this.isPanelOpen = false;\n this._adapter.toggleListVisible(false);\n this._adapter.unregisterClickOutsideHandler();\n this._adapter.notifyDropdownVisibleChange(false);\n // After closing the panel, you can still open the panel by pressing the enter key\n // this.unBindKeyBoardEvent();\n }\n // props.data => optionList\n _generateList(data) {\n const {\n renderItem\n } = this.getProps();\n const options = [];\n if (data && data.length) {\n data.forEach((item, i) => {\n const key = String(new Date().getTime()) + i;\n let option = {};\n if (_isString(item) || _isNumber(item)) {\n option = {\n value: item,\n key,\n label: item,\n show: true\n };\n } else if (_isObject(item) && !_isUndefined(item.value)) {\n option = Object.assign({\n show: true\n }, item);\n }\n if (renderItem && typeof renderItem === 'function') {\n option.label = renderItem(item);\n }\n options.push(option);\n });\n }\n return options;\n }\n handleSearch(inputValue) {\n this._adapter.updateInputValue(inputValue);\n this._adapter.notifySearch(inputValue);\n this._adapter.notifyChange(inputValue);\n this._modifyFocusIndex(inputValue);\n if (!this.isPanelOpen) {\n this.openDropdown();\n }\n }\n handleSelect(option, optionIndex) {\n const {\n renderSelectedItem\n } = this.getProps();\n let newInputValue = '';\n if (renderSelectedItem && typeof renderSelectedItem === 'function') {\n newInputValue = renderSelectedItem(option);\n warning(typeof newInputValue !== 'string', 'Warning: [Semi AutoComplete] renderSelectedItem must return string, please check your function return');\n } else {\n newInputValue = option.value;\n }\n // 1. trigger onSelect\n // 2. close Dropdown\n if (this._isControlledComponent()) {\n this.closeDropdown();\n this.notifySelect(option);\n } else {\n // 1. update Input\n // 2. update Selection\n // 3. trigger onSelect\n // 4. close Dropdown\n this._adapter.updateInputValue(newInputValue);\n this.updateSelection(option);\n this.notifySelect(option);\n this.closeDropdown();\n }\n this._adapter.notifyChange(newInputValue);\n this._adapter.updateFocusIndex(optionIndex);\n }\n updateSelection(option) {\n const selection = new Map();\n if (option) {\n selection.set(option.label, option);\n }\n this._adapter.updateSelection(selection);\n }\n notifySelect(option) {\n if (this._backwardLabelInValue()) {\n this._adapter.notifySelect(option);\n } else {\n this._adapter.notifySelect(option.value);\n }\n }\n _backwardLabelInValue() {\n const props = this.getProps();\n let {\n onSelectWithObject\n } = props;\n return onSelectWithObject;\n }\n handleDataChange(newData) {\n const options = this._generateList(newData);\n this._adapter.updateOptionList(options);\n this._adapter.rePositionDropdown();\n }\n handleValueChange(propValue) {\n let {\n data,\n defaultActiveFirstOption\n } = this.getProps();\n let selectedValue = '';\n if (this._backwardLabelInValue() && Object.prototype.toString.call(propValue) === '[object Object]') {\n selectedValue = propValue.value;\n } else {\n selectedValue = propValue;\n }\n let renderSelectedItem = this._getRenderSelectedItem();\n const options = this._generateList(data);\n // Get the option whose value match from options\n let selectedOption = options.length ? options.filter(option => renderSelectedItem(option) === selectedValue) : [];\n const canMatchInData = selectedOption.length;\n const selectedOptionIndex = options.findIndex(option => renderSelectedItem(option) === selectedValue);\n let inputValue = '';\n if (canMatchInData) {\n selectedOption = selectedOption[0];\n inputValue = renderSelectedItem(selectedOption);\n } else {\n const cbItem = this._backwardLabelInValue() ? propValue : {\n label: selectedValue,\n value: selectedValue\n };\n inputValue = renderSelectedItem(cbItem);\n }\n this._adapter.updateInputValue(inputValue);\n this.updateSelection(canMatchInData ? selectedOption : null);\n if (selectedOptionIndex === -1 && defaultActiveFirstOption) {\n this._adapter.updateFocusIndex(0);\n } else {\n this._adapter.updateFocusIndex(selectedOptionIndex);\n }\n }\n _modifyFocusIndex(searchValue) {\n let {\n focusIndex\n } = this.getStates();\n let {\n data,\n defaultActiveFirstOption\n } = this.getProps();\n let selectedOptionIndex = -1;\n if (searchValue) {\n let renderSelectedItem = this._getRenderSelectedItem();\n const options = this._generateList(data);\n selectedOptionIndex = options.findIndex(option => renderSelectedItem(option) === searchValue);\n }\n if (selectedOptionIndex === -1 && defaultActiveFirstOption) {\n if (focusIndex !== 0) {\n this._adapter.updateFocusIndex(0);\n }\n } else {\n if (selectedOptionIndex !== focusIndex) {\n this._adapter.updateFocusIndex(selectedOptionIndex);\n }\n }\n }\n _modifyFocusIndexOnPanelOpen() {\n let {\n inputValue\n } = this.getStates();\n this._modifyFocusIndex(inputValue);\n }\n _getRenderSelectedItem() {\n let {\n renderSelectedItem\n } = this.getProps();\n if (typeof renderSelectedItem === 'undefined') {\n renderSelectedItem = option => {\n return option === null || option === void 0 ? void 0 : option.value;\n };\n } else if (renderSelectedItem && typeof renderSelectedItem === 'function') {\n // do nothing\n }\n return renderSelectedItem;\n }\n handleClear() {\n this._adapter.notifyClear();\n }\n bindKeyBoardEvent() {\n this._keydownHandler = event => {\n this._handleKeyDown(event);\n };\n this._adapter.registerKeyDown(this._keydownHandler);\n }\n // unBindKeyBoardEvent() {\n // if (this._keydownHandler) {\n // this._adapter.unregisterKeyDown(this._keydownHandler);\n // }\n // }\n _handleKeyDown(event) {\n const key = event.keyCode;\n const {\n visible\n } = this.getStates();\n switch (key) {\n case KeyCode.UP:\n // Prevent Input's cursor from following the movement\n event.preventDefault();\n this._handleArrowKeyDown(-1);\n break;\n case KeyCode.DOWN:\n // Prevent Input's cursor from following the movement\n event.preventDefault();\n this._handleArrowKeyDown(1);\n break;\n case KeyCode.ENTER:\n // when custom trigger, prevent outer open panel again\n event.preventDefault();\n this._handleEnterKeyDown();\n break;\n case KeyCode.ESC:\n this.closeDropdown();\n break;\n case KeyCode.TAB:\n this.closeDropdown();\n break;\n default:\n break;\n }\n this._adapter.notifyKeyDown(event);\n }\n _getEnableFocusIndex(offset) {\n const {\n focusIndex,\n options\n } = this.getStates();\n const visibleOptions = options.filter(item => item.show);\n const optionsLength = visibleOptions.length;\n let index = focusIndex + offset;\n if (index < 0) {\n index = optionsLength - 1;\n }\n if (index >= optionsLength) {\n index = 0;\n }\n // avoid newIndex option is disabled\n if (offset > 0) {\n let nearestActiveOption = -1;\n for (let i = 0; i < visibleOptions.length; i++) {\n const optionIsActive = !visibleOptions[i].disabled;\n if (optionIsActive) {\n nearestActiveOption = i;\n }\n if (nearestActiveOption >= index) {\n break;\n }\n }\n index = nearestActiveOption;\n } else {\n let nearestActiveOption = visibleOptions.length;\n for (let i = optionsLength - 1; i >= 0; i--) {\n const optionIsActive = !visibleOptions[i].disabled;\n if (optionIsActive) {\n nearestActiveOption = i;\n }\n if (nearestActiveOption <= index) {\n break;\n }\n }\n index = nearestActiveOption;\n }\n this._adapter.updateFocusIndex(index);\n this._adapter.updateScrollTop(index);\n }\n _handleArrowKeyDown(offset) {\n const {\n visible\n } = this.getStates();\n if (!visible) {\n this.openDropdown();\n } else {\n this._getEnableFocusIndex(offset);\n }\n }\n _handleEnterKeyDown() {\n const {\n visible,\n options,\n focusIndex\n } = this.getStates();\n if (!visible) {\n this.openDropdown();\n } else {\n if (focusIndex !== undefined && focusIndex !== -1 && options.length !== 0) {\n const visibleOptions = options.filter(item => item.show);\n const selectedOption = visibleOptions[focusIndex];\n this.handleSelect(selectedOption, focusIndex);\n } else {\n this.closeDropdown();\n }\n }\n }\n handleOptionMouseEnter(optionIndex) {\n this._adapter.updateFocusIndex(optionIndex);\n }\n handleFocus(e) {\n // If you get the focus through the tab key, you need to manually bind keyboard events\n // Then you can open the panel by pressing the enter key\n this.bindKeyBoardEvent();\n this._adapter.notifyFocus(e);\n }\n handleBlur(e) {\n // only need persist on react adapter\n // https://reactjs.org/docs/legacy-event-pooling.html\n this._persistEvent(e);\n this._adapter.notifyBlur(e);\n }\n}\nexport default AutoCompleteFoundation;","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst PREFIX = `${BASE_CLASS_PREFIX}-spin`;\nconst cssClasses = {\n PREFIX\n};\nconst strings = {\n SIZE: ['small', 'middle', 'large']\n};\nconst numbers = {};\nexport { cssClasses, strings, numbers };","import BaseFoundation from '../base/foundation';\nclass SpinFoundation extends BaseFoundation {\n static get spinDefaultAdapter() {\n return {\n getProp: () => undefined,\n setLoading: val => undefined\n };\n }\n constructor(adapter) {\n super(Object.assign(Object.assign({}, SpinFoundation.spinDefaultAdapter), adapter));\n }\n updateLoadingIfNeedDelay() {\n const {\n spinning: propsSpinning,\n delay: propsDelay\n } = this._adapter.getProps();\n const {\n delay\n } = this._adapter.getStates();\n if (delay) {\n const self = this;\n this._timer = setTimeout(() => {\n self._adapter.setState({\n loading: propsSpinning,\n delay: 0\n });\n }, propsDelay);\n }\n }\n destroy() {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n }\n}\nexport default SpinFoundation;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport isNullOrUndefined from '@douyinfe/semi-foundation/lib/es/utils/isNullOrUndefined';\nlet _id = -1;\nfunction Icon() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n id: propsId,\n className\n } = props,\n rest = __rest(props, [\"id\", \"className\"]);\n let _propsId = propsId;\n if (isNullOrUndefined(_propsId)) {\n _id++;\n _propsId = _id;\n }\n const id = `linearGradient-${_propsId}`;\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({}, rest, {\n className: className,\n width: \"48\",\n height: \"48\",\n viewBox: \"0 0 36 36\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-hidden\": true,\n \"data-icon\": \"spin\"\n }), /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n x1: \"0%\",\n y1: \"100%\",\n x2: \"100%\",\n y2: \"100%\",\n id: id\n }, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"currentColor\",\n stopOpacity: \"0\",\n offset: \"0%\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"currentColor\",\n stopOpacity: \"0.50\",\n offset: \"39.9430698%\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"currentColor\",\n offset: \"100%\"\n }))), /*#__PURE__*/React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n fillOpacity: \"0.01\",\n fill: \"none\",\n x: \"0\",\n y: \"0\",\n width: \"36\",\n height: \"36\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M34,18 C34,9.163444 26.836556,2 18,2 C11.6597233,2 6.18078805,5.68784135 3.59122325,11.0354951\",\n stroke: `url(#${id})`,\n strokeWidth: \"4\",\n strokeLinecap: \"round\"\n })));\n}\nexport default Icon;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport cls from 'classnames';\nimport BaseComponent from '../_base/baseComponent';\nimport { cssClasses as css, strings } from '@douyinfe/semi-foundation/lib/es/spin/constants';\nimport SpinFoundation from '@douyinfe/semi-foundation/lib/es/spin/foundation';\nimport SpinIcon from './icon';\nimport '@douyinfe/semi-foundation/lib/es/spin/spin.css';\nconst prefixCls = css.PREFIX;\nclass Spin extends BaseComponent {\n constructor(props) {\n super(props);\n this.foundation = new SpinFoundation(this.adapter);\n this.state = {\n delay: props.delay,\n loading: true\n };\n }\n static getDerivedStateFromProps(props) {\n if (!props.delay) {\n return {\n loading: props.spinning\n };\n }\n if (props.spinning === false) {\n return {\n delay: 0,\n loading: false\n };\n }\n return {\n delay: props.delay\n };\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n setLoading: value => {\n this.setState({\n loading: value\n });\n }\n });\n }\n componentWillUnmount() {\n this.foundation.destroy();\n }\n renderSpin() {\n const {\n indicator,\n tip\n } = this.props;\n const {\n loading\n } = this.state;\n return loading ? /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-wrapper`\n }, indicator ? (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-animate`,\n \"x-semi-prop\": \"indicator\"\n }, indicator)) : (/*#__PURE__*/React.createElement(SpinIcon, null)), tip ? /*#__PURE__*/React.createElement(\"div\", {\n \"x-semi-prop\": \"tip\"\n }, tip) : null) : null;\n }\n render() {\n this.foundation.updateLoadingIfNeedDelay();\n const _a = this.props,\n {\n children,\n style,\n wrapperClassName,\n childStyle,\n size\n } = _a,\n rest = __rest(_a, [\"children\", \"style\", \"wrapperClassName\", \"childStyle\", \"size\"]);\n const {\n loading\n } = this.state;\n const spinCls = cls(prefixCls, wrapperClassName, {\n [`${prefixCls}-${size}`]: size,\n [`${prefixCls}-block`]: children,\n [`${prefixCls}-hidden`]: !loading\n });\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n className: spinCls,\n style: style\n }, this.getDataAttr(rest)), this.renderSpin(), /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-children`,\n style: childStyle,\n \"x-semi-prop\": \"children\"\n }, children));\n }\n}\nSpin.propTypes = {\n size: PropTypes.oneOf(strings.SIZE),\n spinning: PropTypes.bool,\n children: PropTypes.node,\n indicator: PropTypes.node,\n delay: PropTypes.number,\n tip: PropTypes.node,\n wrapperClassName: PropTypes.string,\n childStyle: PropTypes.object,\n style: PropTypes.object\n};\nSpin.defaultProps = {\n size: 'middle',\n spinning: true,\n children: null,\n indicator: null,\n delay: 0\n};\nexport default Spin;","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-input`\n};\nconst strings = {\n SIZE: ['small', 'large', 'default'],\n DEFAULT_SIZE: 'default',\n STATUS: ['default', 'error', 'warning', 'success'],\n CLEARBTN_CLICKED_EVENT_FLAG: '__fromClearBtn',\n MODE: ['password']\n};\nconst numbers = {};\nexport { cssClasses, strings, numbers };","import _isFunction from \"lodash/isFunction\";\nexport default function truncateValue(options) {\n const {\n value,\n maxLength,\n getValueLength\n } = options;\n if (_isFunction(getValueLength)) {\n let left = 0;\n let right = value.length;\n while (left < right) {\n const mid = left + Math.floor((right - left) / 2);\n const currentValue = value.slice(0, mid + 1);\n if (getValueLength(currentValue) > maxLength) {\n right = mid;\n } else {\n left = mid + 1;\n }\n }\n return value.slice(0, left);\n } else {\n return value.slice(0, maxLength);\n }\n}","import _isFunction from \"lodash/isFunction\";\nimport _isString from \"lodash/isString\";\nimport _isNumber from \"lodash/isNumber\";\nimport _set from \"lodash/set\";\nimport _noop from \"lodash/noop\";\nimport BaseFoundation from '../base/foundation';\nimport { strings } from './constants';\nimport { ENTER_KEY } from './../utils/keyCode';\nimport truncateValue from './util/truncateValue';\nclass InputFoundation extends BaseFoundation {\n static get inputDefaultAdapter() {\n return {\n notifyChange: _noop,\n setValue: _noop\n // toggleAllowClear: noop,\n };\n }\n constructor(adapter) {\n super(Object.assign(Object.assign({}, InputFoundation.inputDefaultAdapter), adapter));\n }\n destroy() {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n }\n setDisable() {}\n setValue(value) {\n this._adapter.setValue(value);\n }\n handleChange(value, e) {\n const {\n maxLength,\n minLength,\n getValueLength\n } = this._adapter.getProps();\n let nextValue = value;\n if (maxLength && _isFunction(getValueLength)) {\n nextValue = this.handleVisibleMaxLength(value);\n }\n if (minLength && _isFunction(getValueLength)) {\n this.handleVisibleMinLength(nextValue);\n }\n if (this._isControlledComponent()) {\n /**\n * If it is a controlled component, directly notify the caller of the modified value.\n * Truncate the input value from the input box if the input value exceeds the maximum length limit.\n * Even in controlled components, characters that exceed the length limit cannot be entered through the input box.\n */\n this._adapter.notifyChange(nextValue, e);\n } else {\n this._adapter.setValue(nextValue);\n this._adapter.notifyChange(nextValue, e);\n // this.checkAllowClear(value);\n }\n }\n /**\n * Modify minLength to trigger browser check for minimum length\n * Controlled mode is not checked\n * @param {String} value\n */\n handleVisibleMinLength(value) {\n const {\n minLength,\n getValueLength\n } = this._adapter.getProps();\n const {\n minLength: stateMinLength\n } = this._adapter.getStates();\n if (_isNumber(minLength) && minLength >= 0 && _isFunction(getValueLength) && _isString(value)) {\n const valueLength = getValueLength(value);\n if (valueLength < minLength) {\n const newMinLength = value.length + (minLength - valueLength);\n newMinLength !== stateMinLength && this._adapter.setMinLength(newMinLength);\n } else {\n stateMinLength !== minLength && this._adapter.setMinLength(minLength);\n }\n }\n }\n /**\n * Handle input emoji characters beyond maxLength\n * Controlled mode is not checked\n * @param {String} value\n */\n handleVisibleMaxLength(value) {\n const {\n maxLength,\n getValueLength\n } = this._adapter.getProps();\n if (_isNumber(maxLength) && maxLength >= 0 && _isFunction(getValueLength) && _isString(value)) {\n const valueLength = getValueLength(value);\n if (valueLength > maxLength) {\n console.warn('[Semi Input] The input character is truncated because the input length exceeds the maximum length limit');\n const truncatedValue = this.handleTruncateValue(value, maxLength);\n return truncatedValue;\n } else {\n return value;\n }\n }\n return value;\n }\n /**\n * Truncate input values based on maximum length\n * @param {String} value\n * @param {Number} maxLength\n * @returns {String}\n */\n handleTruncateValue(value, maxLength) {\n const {\n getValueLength\n } = this._adapter.getProps();\n return truncateValue({\n value,\n maxLength,\n getValueLength\n });\n }\n handleClear(e) {\n let eventObj = e;\n const value = '';\n // let input = this._adapter.getInput();\n if (this._isControlledComponent('value')) {\n this._adapter.setState({\n isFocus: false\n });\n } else {\n this._adapter.setState({\n value: '',\n isFocus: false\n });\n }\n if (!eventObj || typeof eventObj !== 'object') {\n eventObj = {};\n }\n _set(eventObj, strings.CLEARBTN_CLICKED_EVENT_FLAG, true); // this is useful for DateInput\n this._adapter.notifyChange(value, eventObj);\n this._adapter.notifyClear(eventObj);\n if (eventObj) {\n // When input is in popover and popover needs to judge clickOutSide, such as TreeSelect\n // If the click event bubbles up, it will mistakenly trigger clickOutSide's judgment.\n // At the same time, because the clear icon is not in the dom tree after clicking, and clickOutSide uses dom.contain (e.target), it will be considered as clicking on the outside, which will cause the floating layer to fold\n // So we need to stop the incident from bubbling up\n this.stopPropagation(eventObj);\n }\n }\n /**\n * trigger when click input wrapper\n * @param {Event} e\n */\n handleClick(e) {\n const {\n disabled\n } = this._adapter.getProps();\n const {\n isFocus\n } = this._adapter.getStates();\n if (disabled || isFocus) {\n return;\n }\n // do not handle bubbling up events\n if (this._adapter.isEventTarget(e)) {\n this._adapter.focusInput();\n this._adapter.toggleFocusing(true);\n }\n }\n handleModeChange(mode) {\n if (mode === 'password') {\n this._adapter.setEyeClosed(true);\n } else {\n this._adapter.setEyeClosed(false);\n }\n }\n handleClickEye(e) {\n const eyeClosed = this._adapter.getState('eyeClosed');\n this._adapter.focusInput();\n this._adapter.toggleFocusing(true);\n this._adapter.setEyeClosed(!eyeClosed);\n }\n handleInputType(type) {\n const mode = this._adapter.getProp('mode');\n const eyeClosed = this._adapter.getState('eyeClosed');\n if (mode === 'password') {\n return eyeClosed ? 'password' : 'text';\n }\n return type;\n }\n handleMouseDown(e) {\n e.preventDefault();\n }\n handleMouseUp(e) {\n e.preventDefault();\n }\n handleBlur(e) {\n const {\n value\n } = this.getStates();\n this._adapter.toggleFocusing(false);\n this._adapter.notifyBlur(value, e);\n }\n handleFocus(e) {\n const {\n value\n } = this.getStates();\n this._adapter.toggleFocusing(true);\n // this.checkAllowClear(this.getState('value'), true);\n this._adapter.notifyFocus(value, e);\n }\n handleInput(e) {\n this._adapter.notifyInput(e);\n }\n handleKeyDown(e) {\n this._adapter.notifyKeyDown(e);\n }\n handleKeyUp(e) {\n this._adapter.notifyKeyUp(e);\n }\n handleKeyPress(e) {\n this._adapter.notifyKeyPress(e);\n if (e.key === ENTER_KEY) {\n this._adapter.notifyEnterPress(e);\n }\n }\n isAllowClear() {\n const {\n value,\n isFocus,\n isHovering\n } = this._adapter.getStates();\n const {\n showClear,\n disabled,\n showClearIgnoreDisabled\n } = this._adapter.getProps();\n const allowClear = value && showClear && (!disabled || showClearIgnoreDisabled) && (isFocus || isHovering);\n return allowClear;\n }\n handleClickPrefixOrSuffix(e) {\n const {\n disabled\n } = this._adapter.getProps();\n const {\n isFocus\n } = this._adapter.getStates();\n if (!disabled && !isFocus) {\n this._adapter.focusInput();\n this._adapter.toggleFocusing(true);\n }\n }\n /**\n * Blocking mousedown events prevents input from losing focus\n * @param {Event} e\n */\n handlePreventMouseDown(e) {\n if (e && _isFunction(e.preventDefault)) {\n e.preventDefault();\n }\n }\n /**\n * A11y: simulate password button click\n */\n handleModeEnterPress(e) {\n // trigger by Enter or Space key\n if (['Enter', ' '].includes(e === null || e === void 0 ? void 0 : e.key)) {\n this.handlePreventMouseDown(e);\n this.handleClickEye(e);\n }\n }\n}\nexport default InputFoundation;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M12 23a11 11 0 1 0 0-22 11 11 0 0 0 0 22Zm5.04-6.14a1.5 1.5 0 0 1-2.13.04l-2.87-2.78L9.26 17A1.5 1.5 0 0 1 7.1 14.9l2.78-2.87L7 9.26A1.5 1.5 0 1 1 9.1 7.1l2.87 2.78L14.74 7A1.5 1.5 0 0 1 16.9 9.1l-2.78 2.87L17 14.74c.6.58.61 1.53.04 2.12Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'clear');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M21.7 3.7a1 1 0 0 0-1.4-1.4L17.3 5.26A11.59 11.59 0 0 0 12 4C5 4 1 10 1 12c0 1.18 1.38 3.73 3.94 5.64L2.3 20.3a1 1 0 1 0 1.42 1.42l18-18ZM7.84 14.77l1.46-1.47a3 3 0 0 1 4-4l1.47-1.46a5 5 0 0 0-6.93 6.93Z\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 20c-1.22 0-2.35-.18-3.38-.5l2.57-2.57a5 5 0 0 0 5.75-5.75l3.56-3.56C22.13 9.27 23 11.07 23 12c0 2-4 8-11 8Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'eye_closed_solid');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M12 4C5 4 1 10 1 12s4 8 11 8 11-6 11-8-4-8-11-8Zm5 8a5 5 0 1 1-10 0 5 5 0 0 1 10 0Zm-5 3a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'eye_opened');\nexport default IconComponent;","import _isUndefined from \"lodash/isUndefined\";\nimport _isFunction from \"lodash/isFunction\";\nimport _noop from \"lodash/noop\";\nimport _isString from \"lodash/isString\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport InputFoundation from '@douyinfe/semi-foundation/lib/es/input/foundation';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/input/constants';\nimport { isSemiIcon } from '../_utils';\nimport BaseComponent from '../_base/baseComponent';\nimport '@douyinfe/semi-foundation/lib/es/input/input.css';\nimport { IconClear, IconEyeOpened, IconEyeClosedSolid } from '@douyinfe/semi-icons';\nconst prefixCls = cssClasses.PREFIX;\nconst sizeSet = strings.SIZE;\nconst statusSet = strings.STATUS;\nconst modeSet = strings.MODE;\nclass Input extends BaseComponent {\n constructor(props) {\n super(props);\n this.handleClear = e => {\n this.foundation.handleClear(e);\n };\n this.handleClick = e => {\n this.foundation.handleClick(e);\n };\n this.handleMouseOver = e => {\n this.setState({\n isHovering: true\n });\n };\n this.handleMouseLeave = e => {\n this.setState({\n isHovering: false\n });\n };\n this.handleModeChange = mode => {\n this.foundation.handleModeChange(mode);\n };\n this.handleClickEye = e => {\n this.foundation.handleClickEye(e);\n };\n this.handleMouseDown = e => {\n this.foundation.handleMouseDown(e);\n };\n this.handleMouseUp = e => {\n this.foundation.handleMouseUp(e);\n };\n this.handleModeEnterPress = e => {\n this.foundation.handleModeEnterPress(e);\n };\n this.handleClickPrefixOrSuffix = e => {\n this.foundation.handleClickPrefixOrSuffix(e);\n };\n this.handlePreventMouseDown = e => {\n this.foundation.handlePreventMouseDown(e);\n };\n const initValue = 'value' in props ? props.value : props.defaultValue;\n this.state = {\n value: initValue,\n cachedValue: props.value,\n disabled: false,\n props: {},\n isFocus: false,\n isHovering: false,\n eyeClosed: props.mode === 'password',\n minLength: props.minLength\n };\n this.inputRef = /*#__PURE__*/React.createRef();\n this.prefixRef = /*#__PURE__*/React.createRef();\n this.suffixRef = /*#__PURE__*/React.createRef();\n this.foundation = new InputFoundation(this.adapter);\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n setValue: value => this.setState({\n value\n }),\n setEyeClosed: value => this.setState({\n eyeClosed: value\n }),\n toggleFocusing: isFocus => {\n this.setState({\n isFocus\n });\n },\n focusInput: () => {\n const {\n preventScroll\n } = this.props;\n const input = this.inputRef && this.inputRef.current;\n input && input.focus({\n preventScroll\n });\n },\n toggleHovering: isHovering => this.setState({\n isHovering\n }),\n getIfFocusing: () => this.state.isFocus,\n notifyChange: (cbValue, e) => this.props.onChange(cbValue, e),\n notifyBlur: (val, e) => this.props.onBlur(e),\n notifyFocus: (val, e) => this.props.onFocus(e),\n notifyInput: e => this.props.onInput(e),\n notifyKeyPress: e => this.props.onKeyPress(e),\n notifyKeyDown: e => this.props.onKeyDown(e),\n notifyKeyUp: e => this.props.onKeyUp(e),\n notifyEnterPress: e => this.props.onEnterPress(e),\n notifyClear: e => this.props.onClear(e),\n setMinLength: minLength => this.setState({\n minLength\n }),\n isEventTarget: e => e && e.target === e.currentTarget\n });\n }\n static getDerivedStateFromProps(props, state) {\n const willUpdateStates = {};\n if (props.value !== state.cachedValue) {\n willUpdateStates.value = props.value;\n willUpdateStates.cachedValue = props.value;\n }\n return willUpdateStates;\n }\n componentDidUpdate(prevProps) {\n const {\n mode\n } = this.props;\n if (prevProps.mode !== mode) {\n this.handleModeChange(mode);\n }\n }\n componentDidMount() {\n // autofocus is changed from the original support of input to the support of manually calling the focus method,\n // so that preventScroll can still take effect under the setting of autofocus\n const {\n disabled,\n autoFocus,\n preventScroll\n } = this.props;\n if (!disabled && (autoFocus || this.props['autofocus'])) {\n this.inputRef.current.focus({\n preventScroll\n });\n }\n }\n renderPrepend() {\n const {\n addonBefore\n } = this.props;\n if (addonBefore) {\n const prefixWrapperCls = cls({\n [`${prefixCls}-prepend`]: true,\n [`${prefixCls}-prepend-text`]: addonBefore && _isString(addonBefore),\n [`${prefixCls}-prepend-icon`]: isSemiIcon(addonBefore)\n });\n return /*#__PURE__*/React.createElement(\"div\", {\n className: prefixWrapperCls,\n \"x-semi-prop\": \"addonBefore\"\n }, addonBefore);\n }\n return null;\n }\n renderAppend() {\n const {\n addonAfter\n } = this.props;\n if (addonAfter) {\n const prefixWrapperCls = cls({\n [`${prefixCls}-append`]: true,\n [`${prefixCls}-append-text`]: addonAfter && _isString(addonAfter),\n [`${prefixCls}-append-icon`]: isSemiIcon(addonAfter)\n });\n return /*#__PURE__*/React.createElement(\"div\", {\n className: prefixWrapperCls,\n \"x-semi-prop\": \"addonAfter\"\n }, addonAfter);\n }\n return null;\n }\n renderClearBtn() {\n const clearCls = cls(`${prefixCls}-clearbtn`);\n const {\n clearIcon\n } = this.props;\n const allowClear = this.foundation.isAllowClear();\n // use onMouseDown to fix issue 1203\n if (allowClear) {\n return (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions\n React.createElement(\"div\", {\n className: clearCls,\n onMouseDown: this.handleClear\n }, clearIcon ? clearIcon : /*#__PURE__*/React.createElement(IconClear, null))\n );\n }\n return null;\n }\n renderModeBtn() {\n const {\n eyeClosed\n } = this.state;\n const {\n mode,\n disabled\n } = this.props;\n const modeCls = cls(`${prefixCls}-modebtn`);\n const modeIcon = eyeClosed ? /*#__PURE__*/React.createElement(IconEyeClosedSolid, null) : /*#__PURE__*/React.createElement(IconEyeOpened, null);\n // alway show password button for a11y\n const showModeBtn = mode === 'password' && !disabled;\n const ariaLabel = eyeClosed ? 'Show password' : 'Hidden password';\n if (showModeBtn) {\n return /*#__PURE__*/React.createElement(\"div\", {\n role: \"button\",\n tabIndex: 0,\n \"aria-label\": ariaLabel,\n className: modeCls,\n onClick: this.handleClickEye,\n onMouseDown: this.handleMouseDown,\n onMouseUp: this.handleMouseUp,\n onKeyPress: this.handleModeEnterPress\n }, modeIcon);\n }\n return null;\n }\n renderPrefix() {\n const {\n prefix,\n insetLabel,\n insetLabelId\n } = this.props;\n const labelNode = prefix || insetLabel;\n if (!labelNode) {\n return null;\n }\n const prefixWrapperCls = cls({\n [`${prefixCls}-prefix`]: true,\n [`${prefixCls}-inset-label`]: insetLabel,\n [`${prefixCls}-prefix-text`]: labelNode && _isString(labelNode),\n [`${prefixCls}-prefix-icon`]: isSemiIcon(labelNode)\n });\n return (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions\n React.createElement(\"div\", {\n className: prefixWrapperCls,\n onMouseDown: this.handlePreventMouseDown,\n onClick: this.handleClickPrefixOrSuffix,\n id: insetLabelId,\n \"x-semi-prop\": \"prefix,insetLabel\"\n }, labelNode)\n );\n }\n renderSuffix(suffixAllowClear) {\n const {\n suffix,\n hideSuffix\n } = this.props;\n if (!suffix) {\n return null;\n }\n const suffixWrapperCls = cls({\n [`${prefixCls}-suffix`]: true,\n [`${prefixCls}-suffix-text`]: suffix && _isString(suffix),\n [`${prefixCls}-suffix-icon`]: isSemiIcon(suffix),\n [`${prefixCls}-suffix-hidden`]: suffixAllowClear && Boolean(hideSuffix)\n });\n return (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions\n React.createElement(\"div\", {\n className: suffixWrapperCls,\n onMouseDown: this.handlePreventMouseDown,\n onClick: this.handleClickPrefixOrSuffix,\n \"x-semi-prop\": \"suffix\"\n }, suffix)\n );\n }\n getInputRef() {\n const {\n forwardRef\n } = this.props;\n if (!_isUndefined(forwardRef)) {\n if (typeof forwardRef === 'function') {\n return node => {\n forwardRef(node);\n this.inputRef = {\n current: node\n };\n };\n } else if (Object.prototype.toString.call(forwardRef) === '[object Object]') {\n this.inputRef = forwardRef;\n return forwardRef;\n }\n }\n return this.inputRef;\n }\n render() {\n const _a = this.props,\n {\n addonAfter,\n addonBefore,\n autoFocus,\n clearIcon,\n className,\n disabled,\n defaultValue,\n placeholder,\n prefix,\n mode,\n insetLabel,\n insetLabelId,\n validateStatus,\n type,\n readonly,\n size,\n suffix,\n style,\n showClear,\n onEnterPress,\n onClear,\n hideSuffix,\n inputStyle,\n forwardRef,\n maxLength,\n getValueLength,\n preventScroll,\n borderless,\n showClearIgnoreDisabled,\n onlyBorder\n } = _a,\n rest = __rest(_a, [\"addonAfter\", \"addonBefore\", \"autoFocus\", \"clearIcon\", \"className\", \"disabled\", \"defaultValue\", \"placeholder\", \"prefix\", \"mode\", \"insetLabel\", \"insetLabelId\", \"validateStatus\", \"type\", \"readonly\", \"size\", \"suffix\", \"style\", \"showClear\", \"onEnterPress\", \"onClear\", \"hideSuffix\", \"inputStyle\", \"forwardRef\", \"maxLength\", \"getValueLength\", \"preventScroll\", \"borderless\", \"showClearIgnoreDisabled\", \"onlyBorder\"]);\n const {\n value,\n isFocus,\n minLength: stateMinLength\n } = this.state;\n const suffixAllowClear = this.foundation.isAllowClear();\n const suffixIsIcon = isSemiIcon(suffix);\n const ref = this.getInputRef();\n const wrapperPrefix = `${prefixCls}-wrapper`;\n const wrapperCls = cls(wrapperPrefix, className, {\n [`${prefixCls}-wrapper__with-prefix`]: prefix || insetLabel,\n [`${prefixCls}-wrapper__with-suffix`]: suffix,\n [`${prefixCls}-wrapper__with-suffix-hidden`]: suffixAllowClear && Boolean(hideSuffix),\n [`${prefixCls}-wrapper__with-suffix-icon`]: suffixIsIcon,\n [`${prefixCls}-wrapper__with-append`]: addonBefore,\n [`${prefixCls}-wrapper__with-prepend`]: addonAfter,\n [`${prefixCls}-wrapper__with-append-only`]: addonBefore && !addonAfter,\n [`${prefixCls}-wrapper__with-prepend-only`]: !addonBefore && addonAfter,\n [`${wrapperPrefix}-readonly`]: readonly,\n [`${wrapperPrefix}-disabled`]: disabled,\n [`${wrapperPrefix}-warning`]: validateStatus === 'warning',\n [`${wrapperPrefix}-error`]: validateStatus === 'error',\n [`${wrapperPrefix}-focus`]: isFocus,\n [`${wrapperPrefix}-clearable`]: showClear,\n [`${wrapperPrefix}-modebtn`]: mode === 'password',\n [`${wrapperPrefix}-hidden`]: type === 'hidden',\n [`${wrapperPrefix}-${size}`]: size,\n [`${prefixCls}-borderless`]: borderless,\n [`${prefixCls}-only_border`]: onlyBorder !== undefined && onlyBorder !== null\n });\n const inputCls = cls(prefixCls, {\n [`${prefixCls}-${size}`]: size,\n [`${prefixCls}-disabled`]: disabled,\n [`${prefixCls}-sibling-clearbtn`]: this.foundation.isAllowClear(),\n [`${prefixCls}-sibling-modebtn`]: mode === 'password'\n });\n const inputValue = value === null || value === undefined ? '' : value;\n const inputProps = Object.assign(Object.assign({}, rest), {\n style: inputStyle,\n className: inputCls,\n disabled,\n readOnly: readonly,\n type: this.foundation.handleInputType(type),\n placeholder: placeholder,\n onInput: e => this.foundation.handleInput(e),\n onChange: e => this.foundation.handleChange(e.target.value, e),\n onFocus: e => this.foundation.handleFocus(e),\n onBlur: e => this.foundation.handleBlur(e),\n onKeyUp: e => this.foundation.handleKeyUp(e),\n onKeyDown: e => this.foundation.handleKeyDown(e),\n onKeyPress: e => this.foundation.handleKeyPress(e),\n value: inputValue\n });\n if (!_isFunction(getValueLength)) {\n inputProps.maxLength = maxLength;\n }\n if (stateMinLength) {\n inputProps.minLength = stateMinLength;\n }\n if (validateStatus === 'error') {\n inputProps['aria-invalid'] = 'true';\n }\n let wrapperStyle = Object.assign({}, style);\n if (onlyBorder !== undefined) {\n wrapperStyle = Object.assign({\n borderWidth: onlyBorder\n }, style);\n }\n return (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions\n React.createElement(\"div\", {\n className: wrapperCls,\n style: wrapperStyle,\n onMouseEnter: e => this.handleMouseOver(e),\n onMouseLeave: e => this.handleMouseLeave(e),\n onClick: e => this.handleClick(e)\n }, this.renderPrepend(), this.renderPrefix(), /*#__PURE__*/React.createElement(\"input\", Object.assign({}, inputProps, {\n ref: ref\n })), this.renderClearBtn(), this.renderSuffix(suffixAllowClear), this.renderModeBtn(), this.renderAppend())\n );\n }\n}\nInput.propTypes = {\n 'aria-label': PropTypes.string,\n 'aria-labelledby': PropTypes.string,\n 'aria-invalid': PropTypes.bool,\n 'aria-errormessage': PropTypes.string,\n 'aria-describedby': PropTypes.string,\n 'aria-required': PropTypes.bool,\n addonBefore: PropTypes.node,\n addonAfter: PropTypes.node,\n clearIcon: PropTypes.node,\n prefix: PropTypes.node,\n suffix: PropTypes.node,\n mode: PropTypes.oneOf(modeSet),\n value: PropTypes.any,\n defaultValue: PropTypes.any,\n disabled: PropTypes.bool,\n readonly: PropTypes.bool,\n autoFocus: PropTypes.bool,\n type: PropTypes.string,\n showClear: PropTypes.bool,\n hideSuffix: PropTypes.bool,\n placeholder: PropTypes.any,\n size: PropTypes.oneOf(sizeSet),\n className: PropTypes.string,\n style: PropTypes.object,\n validateStatus: PropTypes.oneOf(statusSet),\n onClear: PropTypes.func,\n onChange: PropTypes.func,\n onBlur: PropTypes.func,\n onFocus: PropTypes.func,\n onInput: PropTypes.func,\n onKeyDown: PropTypes.func,\n onKeyUp: PropTypes.func,\n onKeyPress: PropTypes.func,\n onEnterPress: PropTypes.func,\n insetLabel: PropTypes.node,\n insetLabelId: PropTypes.string,\n inputStyle: PropTypes.object,\n getValueLength: PropTypes.func,\n preventScroll: PropTypes.bool,\n borderless: PropTypes.bool\n};\nInput.defaultProps = {\n addonBefore: '',\n addonAfter: '',\n prefix: '',\n suffix: '',\n readonly: false,\n type: 'text',\n showClear: false,\n hideSuffix: false,\n placeholder: '',\n size: 'default',\n className: '',\n onClear: _noop,\n onChange: _noop,\n onBlur: _noop,\n onFocus: _noop,\n onInput: _noop,\n onKeyDown: _noop,\n onKeyUp: _noop,\n onKeyPress: _noop,\n onEnterPress: _noop,\n validateStatus: 'default',\n borderless: false\n};\nconst ForwardInput = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(Input, Object.assign({}, props, {\n forwardRef: ref\n})));\nexport default ForwardInput;\nexport { Input };","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport PropTypes from 'prop-types';\n/**\n * `Trigger` is a HOC that will cover the inner of components which have popups\n */\nclass Trigger extends React.PureComponent {\n render() {\n const _a = this.props,\n {\n triggerRender,\n componentName\n } = _a,\n rest = __rest(_a, [\"triggerRender\", \"componentName\"]);\n return triggerRender(Object.assign({}, rest));\n }\n}\nTrigger.propTypes = {\n /**\n * ({ value?: any, className?: string, style?: React.CSSProperties, ... }) => React.ReactNode\n */\n triggerRender: PropTypes.func.isRequired,\n /**\n * e.g. \"AutoComplete\", \"DatePicker\", ...\n */\n componentName: PropTypes.string,\n componentProps: PropTypes.object,\n value: PropTypes.any,\n inputValue: PropTypes.string,\n placeholder: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n className: PropTypes.string,\n style: PropTypes.object\n};\nexport default Trigger;","import { BASE_CLASS_PREFIX } from \"../base/constants\";\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-highlight`\n};\nexport { cssClasses };","import _isString from \"lodash/isString\"; // Modified version based on 'highlight-words-core'\nimport BaseFoundation from '../base/foundation';\nconst escapeRegExpFn = string => string.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\nexport default class HighlightFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n /**\n * Creates an array of chunk objects representing both higlightable and non highlightable pieces of text that match each search word.\n *\n findAll ['z'], 'aaazaaazaaa'\n result #=> [\n { start: 0, end: 3, highlight: false }\n { start: 3, end: 4, highlight: true }\n { start: 4, end: 7, highlight: false }\n { start: 7, end: 8, highlight: true }\n { start: 8, end: 11, highlight: false }\n ]\n findAll ['do', 'dollar'], 'aaa do dollar aaa'\n #=> chunks: [\n { start: 4, end: 6 },\n { start: 7, end: 9 },\n { start: 7, end: 13 },\n ]\n #=> chunksToHight: [\n { start: 4, end: 6 },\n { start: 7, end: 13 },\n ]\n #=> result: [\n { start: 0, end: 4, highlight: false },\n { start: 4, end: 6, highlight: true },\n { start: 6, end: 7, highlight: false },\n { start: 7, end: 13, highlight: true },\n { start: 13, end: 17, highlight: false },\n ]\n * @return Array of \"chunks\" (where a Chunk is { start:number, end:number, highlight:boolean })\n */\n this.findAll = _ref => {\n let {\n autoEscape = true,\n caseSensitive = false,\n searchWords,\n sourceString\n } = _ref;\n if (_isString(searchWords)) {\n searchWords = [searchWords];\n }\n const chunks = this.findChunks({\n autoEscape,\n caseSensitive,\n searchWords,\n sourceString\n });\n const chunksToHighlight = this.combineChunks({\n chunks\n });\n const result = this.fillInChunks({\n chunksToHighlight,\n totalLength: sourceString ? sourceString.length : 0\n });\n return result;\n };\n /**\n * Examine text for any matches.\n * If we find matches, add them to the returned array as a \"chunk\" object ({start:number, end:number}).\n * @return { start:number, end:number }[]\n */\n this.findChunks = _ref2 => {\n let {\n autoEscape,\n caseSensitive,\n searchWords,\n sourceString\n } = _ref2;\n return searchWords.map(searchWord => typeof searchWord === 'string' ? {\n text: searchWord\n } : searchWord).filter(searchWord => searchWord.text) // Remove empty words\n .reduce((chunks, searchWord) => {\n let searchText = searchWord.text;\n if (autoEscape) {\n searchText = escapeRegExpFn(searchText);\n }\n const regex = new RegExp(searchText, caseSensitive ? 'g' : 'gi');\n let match;\n while (match = regex.exec(sourceString)) {\n const start = match.index;\n const end = regex.lastIndex;\n if (end > start) {\n chunks.push({\n highlight: true,\n start,\n end,\n className: searchWord.className,\n style: searchWord.style\n });\n }\n if (match.index === regex.lastIndex) {\n regex.lastIndex++;\n }\n }\n return chunks;\n }, []);\n };\n /**\n * Takes an array of {start:number, end:number} objects and combines chunks that overlap into single chunks.\n * @return {start:number, end:number}[]\n */\n this.combineChunks = _ref3 => {\n let {\n chunks\n } = _ref3;\n return chunks.sort((first, second) => first.start - second.start).reduce((processedChunks, nextChunk) => {\n // First chunk just goes straight in the array...\n if (processedChunks.length === 0) {\n return [nextChunk];\n } else {\n // ... subsequent chunks get checked to see if they overlap...\n const prevChunk = processedChunks.pop();\n if (nextChunk.start <= prevChunk.end) {\n // It may be the case that prevChunk completely surrounds nextChunk, so take the\n // largest of the end indeces.\n const endIndex = Math.max(prevChunk.end, nextChunk.end);\n processedChunks.push({\n highlight: true,\n start: prevChunk.start,\n end: endIndex,\n className: prevChunk.className || nextChunk.className,\n style: Object.assign(Object.assign({}, prevChunk.style), nextChunk.style)\n });\n } else {\n processedChunks.push(prevChunk, nextChunk);\n }\n return processedChunks;\n }\n }, []);\n };\n /**\n * Given a set of chunks to highlight, create an additional set of chunks\n * to represent the bits of text between the highlighted text.\n * @param chunksToHighlight {start:number, end:number}[]\n * @param totalLength number\n * @return {start:number, end:number, highlight:boolean}[]\n */\n this.fillInChunks = _ref4 => {\n let {\n chunksToHighlight,\n totalLength\n } = _ref4;\n const allChunks = [];\n const append = (start, end, highlight, className, style) => {\n if (end - start > 0) {\n allChunks.push({\n start,\n end,\n highlight,\n className,\n style\n });\n }\n };\n if (chunksToHighlight.length === 0) {\n append(0, totalLength, false);\n } else {\n let lastIndex = 0;\n chunksToHighlight.forEach(chunk => {\n append(lastIndex, chunk.start, false);\n append(chunk.start, chunk.end, true, chunk.className, chunk.style);\n lastIndex = chunk.end;\n });\n append(lastIndex, totalLength, false);\n }\n return allChunks;\n };\n }\n}","import React, { PureComponent } from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/highlight/constants';\nimport HighlightFoundation from '@douyinfe/semi-foundation/lib/es/highlight/foundation';\nimport '@douyinfe/semi-foundation/lib/es/highlight/highlight.css';\nconst prefixCls = cssClasses.PREFIX;\nclass Highlight extends PureComponent {\n constructor() {\n super(...arguments);\n this.getHighLightTextHTML = _ref => {\n let {\n sourceString = '',\n searchWords = [],\n option = {\n autoEscape: true,\n caseSensitive: false\n }\n } = _ref;\n const chunks = new HighlightFoundation().findAll(Object.assign({\n sourceString,\n searchWords\n }, option));\n const markEle = option.highlightTag || 'mark';\n const highlightClassName = option.highlightClassName || '';\n const highlightStyle = option.highlightStyle || {};\n return chunks.map((chunk, index) => {\n const {\n end,\n start,\n highlight,\n style,\n className\n } = chunk;\n const text = sourceString.substr(start, end - start);\n if (highlight) {\n return /*#__PURE__*/React.createElement(markEle, {\n style: Object.assign(Object.assign({}, highlightStyle), style),\n className: `${highlightClassName} ${className || ''}`.trim(),\n key: text + index\n }, text);\n } else {\n return text;\n }\n });\n };\n }\n render() {\n const {\n searchWords,\n sourceString,\n component,\n highlightClassName,\n highlightStyle,\n caseSensitive,\n autoEscape\n } = this.props;\n const tagCls = cls({\n [`${prefixCls}-tag`]: true\n }, highlightClassName);\n const option = {\n highlightTag: component,\n highlightClassName: tagCls,\n highlightStyle,\n caseSensitive,\n autoEscape\n };\n return this.getHighLightTextHTML({\n sourceString,\n searchWords,\n option\n });\n }\n}\nHighlight.propTypes = {\n style: PropTypes.object,\n className: PropTypes.string,\n autoEscape: PropTypes.bool,\n caseSensitive: PropTypes.bool,\n sourceString: PropTypes.string,\n searchWords: PropTypes.arrayOf(PropTypes.string),\n highlightStyle: PropTypes.object,\n highlightClassName: PropTypes.string,\n component: PropTypes.string\n};\nHighlight.defaultProps = {\n component: 'mark',\n autoEscape: true,\n caseSensitive: false,\n sourceString: ''\n};\nexport default Highlight;","import _isString from \"lodash/isString\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/autoComplete/constants';\nimport LocaleConsumer from '../locale/localeConsumer';\nimport { IconTick } from '@douyinfe/semi-icons';\nimport Highlight from '../highlight';\nclass Option extends PureComponent {\n onClick(_a, event) {\n var {\n value,\n label,\n children\n } = _a,\n rest = __rest(_a, [\"value\", \"label\", \"children\"]);\n const {\n props\n } = this;\n const isDisabled = props.disabled;\n if (!isDisabled) {\n props.onSelect(Object.assign(Object.assign({}, rest), {\n value,\n label: label || children\n }), event);\n }\n }\n renderOptionContent(_ref) {\n let {\n children,\n inputValue,\n prefixCls\n } = _ref;\n if (_isString(children) && inputValue) {\n return /*#__PURE__*/React.createElement(Highlight, {\n searchWords: [inputValue],\n sourceString: children,\n highlightClassName: `${prefixCls}-keyword`\n });\n }\n return children;\n }\n render() {\n const _a = this.props,\n {\n children,\n disabled,\n value,\n selected,\n label,\n empty,\n emptyContent,\n onSelect,\n focused,\n showTick,\n className,\n style,\n onMouseEnter,\n prefixCls,\n renderOptionItem,\n inputValue\n } = _a,\n rest = __rest(_a, [\"children\", \"disabled\", \"value\", \"selected\", \"label\", \"empty\", \"emptyContent\", \"onSelect\", \"focused\", \"showTick\", \"className\", \"style\", \"onMouseEnter\", \"prefixCls\", \"renderOptionItem\", \"inputValue\"]);\n const optionClassName = classNames(prefixCls, {\n [`${prefixCls}-disabled`]: disabled,\n [`${prefixCls}-selected`]: selected,\n [`${prefixCls}-focused`]: focused,\n [`${prefixCls}-empty`]: empty,\n [className]: className\n });\n const selectedIconClassName = classNames([`${prefixCls}-icon`]);\n if (empty) {\n if (emptyContent === null) {\n return null;\n }\n return /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Select\"\n }, locale => (/*#__PURE__*/React.createElement(\"div\", {\n className: optionClassName,\n \"x-semi-prop\": \"emptyContent\"\n }, emptyContent || locale.emptyText)));\n }\n // Since there are empty, locale and other logic, the custom renderOptionItem is directly converged to the internal option instead of being placed in Select/index\n if (typeof renderOptionItem === 'function') {\n return renderOptionItem(Object.assign({\n disabled,\n focused,\n selected,\n style,\n label,\n value,\n inputValue,\n onMouseEnter: e => onMouseEnter(e),\n onClick: e => this.onClick(Object.assign({\n value,\n label,\n children\n }, rest), e)\n }, rest));\n }\n return (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/interactive-supports-focus,jsx-a11y/click-events-have-key-events\n React.createElement(\"div\", {\n className: optionClassName,\n onClick: e => {\n this.onClick(Object.assign({\n value,\n label,\n children\n }, rest), e);\n },\n onMouseEnter: e => onMouseEnter && onMouseEnter(e),\n role: \"option\",\n \"aria-selected\": selected ? \"true\" : \"false\",\n \"aria-disabled\": disabled ? \"true\" : \"false\",\n style: style\n }, showTick ? (/*#__PURE__*/React.createElement(\"div\", {\n className: selectedIconClassName\n }, /*#__PURE__*/React.createElement(IconTick, null))) : null, _isString(children) ? /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-text`\n }, this.renderOptionContent({\n children,\n inputValue,\n prefixCls\n })) : children)\n );\n }\n}\nOption.isSelectOption = true;\nOption.propTypes = {\n children: PropTypes.node,\n disabled: PropTypes.bool,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n selected: PropTypes.bool,\n label: PropTypes.node,\n empty: PropTypes.bool,\n emptyContent: PropTypes.node,\n onSelect: PropTypes.func,\n focused: PropTypes.bool,\n showTick: PropTypes.bool,\n className: PropTypes.string,\n style: PropTypes.object,\n onMouseEnter: PropTypes.func,\n prefixCls: PropTypes.string,\n renderOptionItem: PropTypes.func,\n inputValue: PropTypes.string\n};\nOption.defaultProps = {\n prefixCls: cssClasses.PREFIX_OPTION\n};\nexport default Option;","import _noop from \"lodash/noop\";\nimport _isEqual from \"lodash/isEqual\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport cls from 'classnames';\nimport { strings, cssClasses } from '@douyinfe/semi-foundation/lib/es/autoComplete/constants';\nimport AutoCompleteFoundation from '@douyinfe/semi-foundation/lib/es/autoComplete/foundation';\nimport { numbers as popoverNumbers } from '@douyinfe/semi-foundation/lib/es/popover/constants';\nimport { getUuidShort } from '@douyinfe/semi-foundation/lib/es/utils/uuid';\nimport BaseComponent from '../_base/baseComponent';\nimport Spin from '../spin';\nimport Popover from '../popover';\nimport Input from '../input';\nimport Trigger from '../trigger';\nimport Option from './option';\nimport warning from '@douyinfe/semi-foundation/lib/es/utils/warning';\nimport '@douyinfe/semi-foundation/lib/es/autoComplete/autoComplete.css';\nimport ReactDOM from 'react-dom';\nimport { getDefaultPropsFromGlobalConfig } from \"../_utils\";\nconst prefixCls = cssClasses.PREFIX;\nconst sizeSet = strings.SIZE;\nconst positionSet = strings.POSITION;\nconst statusSet = strings.STATUS;\nclass AutoComplete extends BaseComponent {\n constructor(props) {\n super(props);\n this.onSelect = (option, optionIndex, e) => {\n this.foundation.handleSelect(option, optionIndex);\n };\n this.onSearch = value => {\n this.foundation.handleSearch(value);\n };\n this.onBlur = e => this.foundation.handleBlur(e);\n this.onFocus = e => this.foundation.handleFocus(e);\n this.onInputClear = () => this.foundation.handleClear();\n this.handleInputClick = e => this.foundation.handleInputClick(e);\n this.foundation = new AutoCompleteFoundation(this.adapter);\n const initRePosKey = 1;\n this.state = {\n dropdownMinWidth: null,\n inputValue: '',\n // option list\n options: [],\n // popover visible\n visible: false,\n // current focus option index\n focusIndex: props.defaultActiveFirstOption ? 0 : -1,\n // current selected options\n selection: new Map(),\n rePosKey: initRePosKey\n };\n this.triggerRef = /*#__PURE__*/React.createRef();\n this.optionsRef = /*#__PURE__*/React.createRef();\n this.clickOutsideHandler = null;\n this.optionListId = '';\n warning('triggerRender' in this.props && typeof this.props.triggerRender === 'function', `[Semi AutoComplete]\n - If you are using the following props: 'suffix', 'prefix', 'showClear', 'validateStatus', and 'size',\n please notice that they will be removed in the next major version.\n Please use 'componentProps' to retrieve these props instead.\n - If you are using 'onBlur', 'onFocus', please try to avoid using them and look for changes in the future.`);\n }\n get adapter() {\n const keyboardAdapter = {\n registerKeyDown: cb => {\n const keyboardEventSet = {\n onKeyDown: cb\n };\n this.setState({\n keyboardEventSet\n });\n },\n unregisterKeyDown: cb => {\n this.setState({\n keyboardEventSet: {}\n });\n },\n updateFocusIndex: focusIndex => {\n this.setState({\n focusIndex\n });\n },\n updateScrollTop: index => {\n let optionClassName;\n /**\n * Unlike Select which needs to process renderOptionItem separately, when renderItem is enabled in autocomplete\n * the content passed by the user is still wrapped in the selector of .semi-autocomplete-option\n * so the selector does not need to be judged separately.\n */\n optionClassName = `.${prefixCls}-option-selected`;\n if (index !== undefined) {\n optionClassName = `.${prefixCls}-option:nth-child(${index + 1})`;\n }\n let destNode = document.querySelector(`#${prefixCls}-${this.optionListId} ${optionClassName}`);\n if (Array.isArray(destNode)) {\n destNode = destNode[0];\n }\n if (destNode) {\n const destParent = destNode.parentNode;\n destParent.scrollTop = destNode.offsetTop - destParent.offsetTop - destParent.clientHeight / 2 + destNode.clientHeight / 2;\n }\n }\n };\n return Object.assign(Object.assign(Object.assign({}, super.adapter), keyboardAdapter), {\n getTriggerWidth: () => {\n const el = this.triggerRef.current;\n return el && el.getBoundingClientRect().width;\n },\n setOptionWrapperWidth: width => {\n this.setState({\n dropdownMinWidth: width\n });\n },\n updateInputValue: inputValue => {\n this.setState({\n inputValue\n });\n },\n toggleListVisible: isShow => {\n this.setState({\n visible: isShow\n });\n },\n updateOptionList: optionList => {\n this.setState({\n options: optionList\n });\n },\n updateSelection: selection => {\n this.setState({\n selection\n });\n },\n notifySearch: inputValue => {\n this.props.onSearch(inputValue);\n },\n notifyChange: value => {\n this.props.onChange(value);\n },\n notifySelect: option => {\n this.props.onSelect(option);\n },\n notifyDropdownVisibleChange: isVisible => {\n this.props.onDropdownVisibleChange(isVisible);\n },\n notifyClear: () => {\n this.props.onClear();\n },\n notifyFocus: event => {\n this.props.onFocus(event);\n },\n notifyBlur: event => {\n this.props.onBlur(event);\n },\n notifyKeyDown: e => {\n this.props.onKeyDown(e);\n },\n rePositionDropdown: () => {\n let {\n rePosKey\n } = this.state;\n rePosKey = rePosKey + 1;\n this.setState({\n rePosKey\n });\n },\n registerClickOutsideHandler: cb => {\n const clickOutsideHandler = e => {\n const optionInstance = this.optionsRef && this.optionsRef.current;\n const triggerDom = this.triggerRef && this.triggerRef.current;\n const optionsDom = ReactDOM.findDOMNode(optionInstance);\n const target = e.target;\n const path = e.composedPath && e.composedPath() || [target];\n if (optionsDom && (!optionsDom.contains(target) || !optionsDom.contains(target.parentNode)) && triggerDom && !triggerDom.contains(target) && !(path.includes(triggerDom) || path.includes(optionsDom))) {\n cb(e);\n }\n };\n this.clickOutsideHandler = clickOutsideHandler;\n document.addEventListener('mousedown', clickOutsideHandler, false);\n },\n unregisterClickOutsideHandler: () => {\n if (this.clickOutsideHandler) {\n document.removeEventListener('mousedown', this.clickOutsideHandler, false);\n }\n }\n });\n }\n componentDidMount() {\n this.foundation.init();\n this.optionListId = getUuidShort();\n }\n componentWillUnmount() {\n this.foundation.destroy();\n }\n componentDidUpdate(prevProps, prevState) {\n if (!_isEqual(this.props.data, prevProps.data)) {\n this.foundation.handleDataChange(this.props.data);\n }\n if (this.props.value !== prevProps.value) {\n this.foundation.handleValueChange(this.props.value);\n }\n }\n renderInput() {\n const {\n size,\n prefix,\n insetLabel,\n insetLabelId,\n suffix,\n placeholder,\n style,\n className,\n showClear,\n disabled,\n triggerRender,\n validateStatus,\n autoFocus,\n value,\n id,\n clearIcon\n } = this.props;\n const {\n inputValue,\n keyboardEventSet,\n selection\n } = this.state;\n const useCustomTrigger = typeof triggerRender === 'function';\n const outerProps = Object.assign(Object.assign(Object.assign({\n style,\n className: useCustomTrigger ? cls(className) : cls({\n [prefixCls]: true,\n [`${prefixCls}-disabled`]: disabled\n }, className),\n onClick: this.handleInputClick,\n ref: this.triggerRef,\n id\n }, keyboardEventSet), {\n // tooltip give tabindex 0 to children by default, autoComplete just need the input get focus, so outer div's tabindex set to -1\n tabIndex: -1\n }), this.getDataAttr(this.props));\n const innerProps = {\n disabled,\n placeholder,\n autoFocus: autoFocus,\n onChange: this.onSearch,\n onClear: this.onInputClear,\n 'aria-label': this.props['aria-label'],\n 'aria-labelledby': this.props['aria-labelledby'],\n 'aria-invalid': this.props['aria-invalid'],\n 'aria-errormessage': this.props['aria-errormessage'],\n 'aria-describedby': this.props['aria-describedby'],\n 'aria-required': this.props['aria-required'],\n // TODO: remove in next major version\n suffix,\n prefix: prefix || insetLabel,\n insetLabelId,\n showClear,\n validateStatus,\n size,\n onBlur: this.onBlur,\n onFocus: this.onFocus,\n clearIcon\n };\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({}, outerProps), typeof triggerRender === 'function' ? (/*#__PURE__*/React.createElement(Trigger, Object.assign({}, innerProps, {\n inputValue: typeof value !== 'undefined' ? value : inputValue,\n value: Array.from(selection.values()),\n triggerRender: triggerRender,\n componentName: \"AutoComplete\",\n componentProps: Object.assign({}, this.props)\n }))) : (/*#__PURE__*/React.createElement(Input, Object.assign({}, innerProps, {\n value: typeof value !== 'undefined' ? value : inputValue\n }))));\n }\n renderLoading() {\n const loadingWrapperCls = `${prefixCls}-loading-wrapper`;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: loadingWrapperCls\n }, /*#__PURE__*/React.createElement(Spin, null));\n }\n renderOption(option, optionIndex) {\n const {\n focusIndex\n } = this.state;\n const isFocused = optionIndex === focusIndex;\n return /*#__PURE__*/React.createElement(Option, Object.assign({\n showTick: false,\n onSelect: (v, e) => this.onSelect(v, optionIndex, e),\n // selected={selection.has(option.label)}\n focused: isFocused,\n onMouseEnter: () => this.foundation.handleOptionMouseEnter(optionIndex),\n key: option.key || option.label + option.value + optionIndex\n }, option), option.label);\n }\n renderOptionList() {\n const {\n maxHeight,\n dropdownStyle,\n dropdownClassName,\n loading,\n emptyContent\n } = this.props;\n const {\n options,\n dropdownMinWidth\n } = this.state;\n const listCls = cls({\n [`${prefixCls}-option-list`]: true\n }, dropdownClassName);\n let optionsNode;\n if (options.length === 0) {\n optionsNode = emptyContent;\n } else {\n optionsNode = options.filter(option => option.show).map((option, i) => this.renderOption(option, i));\n }\n const style = Object.assign({\n maxHeight: maxHeight,\n minWidth: dropdownMinWidth\n }, dropdownStyle);\n return /*#__PURE__*/React.createElement(\"div\", {\n className: listCls,\n role: \"listbox\",\n style: style,\n id: `${prefixCls}-${this.optionListId}`\n }, !loading ? optionsNode : this.renderLoading());\n }\n render() {\n const {\n position,\n motion,\n zIndex,\n mouseEnterDelay,\n mouseLeaveDelay,\n autoAdjustOverflow,\n stopPropagation,\n getPopupContainer\n } = this.props;\n const {\n visible,\n rePosKey\n } = this.state;\n const input = this.renderInput();\n const optionList = this.renderOptionList();\n return /*#__PURE__*/React.createElement(Popover, {\n mouseEnterDelay: mouseEnterDelay,\n mouseLeaveDelay: mouseLeaveDelay,\n autoAdjustOverflow: autoAdjustOverflow,\n trigger: \"custom\",\n motion: motion,\n visible: visible,\n content: optionList,\n position: position,\n ref: this.optionsRef,\n // TransformFromCenter TODO: need to confirm\n zIndex: zIndex,\n stopPropagation: stopPropagation,\n getPopupContainer: getPopupContainer,\n rePosKey: rePosKey\n }, input);\n }\n}\nAutoComplete.propTypes = {\n 'aria-label': PropTypes.string,\n 'aria-labelledby': PropTypes.string,\n 'aria-invalid': PropTypes.bool,\n 'aria-errormessage': PropTypes.string,\n 'aria-describedby': PropTypes.string,\n 'aria-required': PropTypes.bool,\n autoFocus: PropTypes.bool,\n autoAdjustOverflow: PropTypes.bool,\n className: PropTypes.string,\n clearIcon: PropTypes.node,\n children: PropTypes.node,\n data: PropTypes.array,\n defaultOpen: PropTypes.bool,\n defaultValue: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n defaultActiveFirstOption: PropTypes.bool,\n disabled: PropTypes.bool,\n dropdownMatchSelectWidth: PropTypes.bool,\n dropdownClassName: PropTypes.string,\n dropdownStyle: PropTypes.object,\n emptyContent: PropTypes.node,\n id: PropTypes.string,\n insetLabel: PropTypes.node,\n insetLabelId: PropTypes.string,\n onSearch: PropTypes.func,\n onSelect: PropTypes.func,\n onClear: PropTypes.func,\n onBlur: PropTypes.func,\n onFocus: PropTypes.func,\n onChange: PropTypes.func,\n onKeyDown: PropTypes.func,\n position: PropTypes.oneOf(positionSet),\n placeholder: PropTypes.string,\n prefix: PropTypes.node,\n onChangeWithObject: PropTypes.bool,\n onSelectWithObject: PropTypes.bool,\n renderItem: PropTypes.func,\n renderSelectedItem: PropTypes.func,\n suffix: PropTypes.node,\n showClear: PropTypes.bool,\n size: PropTypes.oneOf(sizeSet),\n style: PropTypes.object,\n stopPropagation: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n mouseEnterDelay: PropTypes.number,\n mouseLeaveDelay: PropTypes.number,\n motion: PropTypes.oneOfType([PropTypes.bool, PropTypes.func, PropTypes.object]),\n getPopupContainer: PropTypes.func,\n triggerRender: PropTypes.func,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n validateStatus: PropTypes.oneOf(statusSet),\n zIndex: PropTypes.number\n};\nAutoComplete.Option = Option;\nAutoComplete.__SemiComponentName__ = \"AutoComplete\";\nAutoComplete.defaultProps = getDefaultPropsFromGlobalConfig(AutoComplete.__SemiComponentName__, {\n stopPropagation: true,\n motion: true,\n zIndex: popoverNumbers.DEFAULT_Z_INDEX,\n position: 'bottomLeft',\n data: [],\n showClear: false,\n size: 'default',\n onFocus: _noop,\n onSearch: _noop,\n onClear: _noop,\n onBlur: _noop,\n onSelect: _noop,\n onChange: _noop,\n onSelectWithObject: false,\n onDropdownVisibleChange: _noop,\n defaultActiveFirstOption: false,\n dropdownMatchSelectWidth: true,\n loading: false,\n maxHeight: 300,\n validateStatus: 'default',\n autoFocus: false,\n emptyContent: null,\n onKeyDown: _noop\n // onPressEnter: () => undefined,\n // defaultOpen: false,\n});\nexport default AutoComplete;","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-avatar`\n};\nconst strings = {\n SHAPE: ['circle', 'square'],\n SIZE: ['extra-extra-small', 'extra-small', 'small', 'default', 'medium', 'large', 'extra-large'],\n COLOR: ['grey', 'red', 'pink', 'purple', 'violet', 'indigo', 'blue', 'light-blue', 'cyan', 'teal', 'green', 'light-green', 'lime', 'yellow', 'amber', 'orange', 'white'],\n OVERLAP_FROM: ['start', 'end']\n};\nexport { cssClasses, strings };","import BaseFoundation from '../base/foundation';\nimport warning from '../utils/warning';\nexport default class AvatarFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n this.handleFocusVisible = event => {\n const {\n target\n } = event;\n try {\n if (target.matches(':focus-visible')) {\n this._adapter.setFocusVisible(true);\n }\n } catch (error) {\n warning(true, 'Warning: [Semi Avatar] The current browser does not support the focus-visible');\n }\n };\n this.handleBlur = () => {\n this._adapter.setFocusVisible(false);\n };\n this.changeScale = () => {\n const {\n gap\n } = this.getProps();\n const node = this._adapter.getAvatarNode();\n const stringNode = node === null || node === void 0 ? void 0 : node.firstChild;\n const [nodeWidth, stringNodeWidth] = [(node === null || node === void 0 ? void 0 : node.offsetWidth) || 0, (stringNode === null || stringNode === void 0 ? void 0 : stringNode.offsetWidth) || 0];\n if (nodeWidth !== 0 && stringNodeWidth !== 0 && gap * 2 < nodeWidth) {\n const scale = nodeWidth - gap * 2 > stringNodeWidth ? 1 : (nodeWidth - gap * 2) / stringNodeWidth;\n this._adapter.setScale(scale);\n }\n };\n }\n init() {\n const {\n children\n } = this.getProps();\n if (typeof children === \"string\") {\n this.changeScale();\n }\n }\n destroy() {}\n handleImgLoadError() {\n const {\n onError\n } = this.getProps();\n const errorFlag = onError ? onError() : undefined;\n if (errorFlag !== false) {\n this._adapter.notifyImgState(false);\n }\n }\n handleEnter(e) {\n this._adapter.notifyEnter(e);\n }\n handleLeave(e) {\n this._adapter.notifyLeave(e);\n }\n}","import { getUuidShort } from '@douyinfe/semi-foundation/lib/es/utils/uuid';\nimport React from 'react';\nconst TopSlotSvg = _ref => {\n let {\n gradientStart,\n gradientEnd\n } = _ref;\n const id = getUuidShort();\n return /*#__PURE__*/React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"51\",\n height: \"52\",\n viewBox: \"0 0 51 52\",\n fill: \"none\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n filter: \"url(#filter0_d_6_2)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M40.4918 46.5592C44.6795 43.176 46.261 34.1333 47.5301 25.6141C49.5854 11.8168 39.6662 1 25.8097 1C11.2857 1 3 11.4279 3 25.3518C3 33.7866 6.29361 43.8947 10.4602 46.5592C12.5868 47.9192 12.5868 47.9051 25.8097 47.9192C38.3651 47.9282 38.5352 48.14 40.4918 46.5592Z\",\n fill: `url(#${id})`\n })), /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n id: \"filter0_d_6_2\",\n x: \"0.789215\",\n y: \"0.447304\",\n width: \"49.2216\",\n height: \"51.3549\",\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n }, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: \"0\",\n result: \"BackgroundImageFix\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n }), /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: \"1.65809\"\n }), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"1.10539\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_6_2\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow_6_2\",\n result: \"shape\"\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: id,\n x1: \"17.671\",\n y1: \"31.7392\",\n x2: \"17.671\",\n y2: \"47.9333\",\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: gradientStart\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: \"1\",\n stopColor: gradientEnd\n }))));\n};\nexport default TopSlotSvg;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/avatar/constants';\nimport AvatarFoundation from '@douyinfe/semi-foundation/lib/es/avatar/foundation';\nimport '@douyinfe/semi-foundation/lib/es/avatar/avatar.css';\nimport { noop } from '@douyinfe/semi-foundation/lib/es/utils/function';\nimport BaseComponent from '../_base/baseComponent';\nimport { handlePrevent } from '@douyinfe/semi-foundation/lib/es/utils/a11y';\nimport { getDefaultPropsFromGlobalConfig } from \"../_utils\";\nimport TopSlotSvg from \"./TopSlotSvg\";\nconst sizeSet = strings.SIZE;\nconst shapeSet = strings.SHAPE;\nconst colorSet = strings.COLOR;\nconst prefixCls = cssClasses.PREFIX;\nexport * from './interface';\nexport default class Avatar extends BaseComponent {\n constructor(props) {\n super(props);\n this.handleFocusVisible = event => {\n this.foundation.handleFocusVisible(event);\n };\n this.handleBlur = event => {\n this.foundation.handleBlur();\n };\n this.getContent = () => {\n const {\n children,\n onClick,\n imgAttr,\n src,\n srcSet,\n alt\n } = this.props;\n const {\n isImgExist\n } = this.state;\n let content = children;\n const clickable = onClick !== noop;\n const isImg = src && isImgExist;\n const a11yFocusProps = {\n tabIndex: 0,\n onKeyDown: this.handleKeyDown,\n onFocus: this.handleFocusVisible,\n onBlur: this.handleBlur\n };\n if (isImg) {\n const finalAlt = clickable ? `clickable Avatar: ${alt}` : alt;\n const imgBasicProps = Object.assign(Object.assign({\n src,\n srcSet,\n onError: this.handleError\n }, imgAttr), {\n className: cls({\n [`${prefixCls}-no-focus-visible`]: clickable\n })\n });\n const imgProps = clickable ? Object.assign(Object.assign({}, imgBasicProps), a11yFocusProps) : imgBasicProps;\n content = /*#__PURE__*/React.createElement(\"img\", Object.assign({\n alt: finalAlt\n }, imgProps));\n } else if (typeof children === 'string') {\n const tempAlt = alt !== null && alt !== void 0 ? alt : children;\n const finalAlt = clickable ? `clickable Avatar: ${tempAlt}` : tempAlt;\n const props = {\n role: 'img',\n 'aria-label': finalAlt,\n className: cls(`${prefixCls}-label`, {\n [`${prefixCls}-no-focus-visible`]: clickable\n })\n };\n const finalProps = clickable ? Object.assign(Object.assign({}, props), a11yFocusProps) : props;\n const stringStyle = {\n transform: `scale(${this.state.scale})`\n };\n content = /*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixCls}-content`,\n style: stringStyle\n }, /*#__PURE__*/React.createElement(\"span\", Object.assign({}, finalProps, {\n \"x-semi-prop\": \"children\"\n }), children));\n }\n return content;\n };\n this.renderBottomSlot = () => {\n var _a, _b;\n if (!this.props.bottomSlot) {\n return null;\n }\n if (this.props.bottomSlot.render) {\n return this.props.bottomSlot.render();\n }\n const renderContent = (_a = this.props.bottomSlot.render) !== null && _a !== void 0 ? _a : () => {\n var _a;\n const style = {};\n if (this.props.bottomSlot.bgColor) {\n style['backgroundColor'] = this.props.bottomSlot.bgColor;\n }\n if (this.props.bottomSlot.textColor) {\n style['color'] = this.props.bottomSlot.textColor;\n }\n return /*#__PURE__*/React.createElement(\"span\", {\n style: style,\n className: cls(`${prefixCls}-bottom_slot-shape_${this.props.bottomSlot.shape}`, `${prefixCls}-bottom_slot-shape_${this.props.bottomSlot.shape}-${this.props.size}`, (_a = this.props.bottomSlot.className) !== null && _a !== void 0 ? _a : \"\")\n }, this.props.bottomSlot.text);\n };\n return /*#__PURE__*/React.createElement(\"div\", {\n className: cls([`${prefixCls}-bottom_slot`]),\n style: (_b = this.props.bottomSlot.style) !== null && _b !== void 0 ? _b : {}\n }, renderContent());\n };\n this.renderTopSlot = () => {\n var _a, _b, _c, _d;\n if (!this.props.topSlot) {\n return null;\n }\n if (this.props.topSlot.render) {\n return this.props.topSlot.render();\n }\n const textStyle = {};\n if (this.props.topSlot.textColor) {\n textStyle['color'] = this.props.topSlot.textColor;\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n style: (_a = this.props.topSlot.style) !== null && _a !== void 0 ? _a : {},\n className: cls([`${prefixCls}-top_slot-wrapper`, (_b = this.props.topSlot.className) !== null && _b !== void 0 ? _b : \"\", {\n [`${prefixCls}-animated`]: this.props.contentMotion\n }])\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: cls([`${prefixCls}-top_slot-bg`, `${prefixCls}-top_slot-bg-${this.props.size}`])\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: cls([`${prefixCls}-top_slot-bg-svg`, `${prefixCls}-top_slot-bg-svg-${this.props.size}`])\n }, /*#__PURE__*/React.createElement(TopSlotSvg, {\n gradientStart: (_c = this.props.topSlot.gradientStart) !== null && _c !== void 0 ? _c : \"var(--semi-color-primary)\",\n gradientEnd: (_d = this.props.topSlot.gradientEnd) !== null && _d !== void 0 ? _d : \"var(--semi-color-primary)\"\n }))), /*#__PURE__*/React.createElement(\"div\", {\n className: cls([`${prefixCls}-top_slot`])\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: textStyle,\n className: cls([`${prefixCls}-top_slot-content`, `${prefixCls}-top_slot-content-${this.props.size}`])\n }, this.props.topSlot.text)));\n };\n this.state = {\n isImgExist: true,\n hoverContent: '',\n focusVisible: false,\n scale: 1\n };\n this.onEnter = this.onEnter.bind(this);\n this.onLeave = this.onLeave.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.getContent = this.getContent.bind(this);\n this.avatarRef = /*#__PURE__*/React.createRef();\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n notifyImgState: isImgExist => {\n this.setState({\n isImgExist\n });\n },\n notifyEnter: e => {\n const {\n hoverMask\n } = this.props;\n const hoverContent = hoverMask;\n this.setState({\n hoverContent\n }, () => {\n const {\n onMouseEnter\n } = this.props;\n onMouseEnter && onMouseEnter(e);\n });\n },\n notifyLeave: e => {\n this.setState({\n hoverContent: ''\n }, () => {\n const {\n onMouseLeave\n } = this.props;\n onMouseLeave && onMouseLeave(e);\n });\n },\n setFocusVisible: focusVisible => {\n this.setState({\n focusVisible\n });\n },\n setScale: scale => {\n this.setState({\n scale\n });\n },\n getAvatarNode: () => {\n var _a;\n return (_a = this.avatarRef) === null || _a === void 0 ? void 0 : _a.current;\n }\n });\n }\n componentDidMount() {\n this.foundation = new AvatarFoundation(this.adapter);\n this.foundation.init();\n }\n componentDidUpdate(prevProps) {\n if (this.props.src && this.props.src !== prevProps.src) {\n const image = new Image(0, 0);\n image.src = this.props.src;\n image.onload = () => {\n this.setState({\n isImgExist: true\n });\n };\n image.onerror = () => {\n this.setState({\n isImgExist: false\n });\n };\n image.onabort = () => {\n this.setState({\n isImgExist: false\n });\n };\n }\n if (typeof this.props.children === \"string\" && this.props.children !== prevProps.children) {\n this.foundation.changeScale();\n }\n }\n componentWillUnmount() {\n this.foundation.destroy();\n }\n onEnter(e) {\n this.foundation.handleEnter(e);\n }\n onLeave(e) {\n this.foundation.handleLeave(e);\n }\n handleError() {\n this.foundation.handleImgLoadError();\n }\n handleKeyDown(event) {\n const {\n onClick\n } = this.props;\n switch (event.key) {\n case \"Enter\":\n onClick(event);\n handlePrevent(event);\n break;\n case 'Escape':\n event.target.blur();\n break;\n default:\n break;\n }\n }\n render() {\n var _a;\n const _b = this.props,\n {\n shape,\n children,\n size,\n color,\n className,\n hoverMask,\n onClick,\n imgAttr,\n src,\n srcSet,\n style,\n alt,\n gap,\n bottomSlot,\n topSlot,\n border,\n contentMotion\n } = _b,\n others = __rest(_b, [\"shape\", \"children\", \"size\", \"color\", \"className\", \"hoverMask\", \"onClick\", \"imgAttr\", \"src\", \"srcSet\", \"style\", \"alt\", \"gap\", \"bottomSlot\", \"topSlot\", \"border\", \"contentMotion\"]);\n const {\n isImgExist,\n hoverContent,\n focusVisible\n } = this.state;\n let customStyle = {};\n if (!strings.SIZE.includes(size)) {\n customStyle = {\n width: size,\n height: size\n };\n }\n customStyle = Object.assign(Object.assign({}, customStyle), style);\n const shouldWrap = bottomSlot || topSlot || border;\n const mouseEvent = {\n onClick: onClick,\n onMouseEnter: this.onEnter,\n onMouseLeave: this.onLeave\n };\n const isImg = src && isImgExist;\n const avatarCls = cls(prefixCls, {\n [`${prefixCls}-${shape}`]: shape,\n [`${prefixCls}-${size}`]: size,\n [`${prefixCls}-${color}`]: color && !isImg,\n [`${prefixCls}-img`]: isImg,\n [`${prefixCls}-focus`]: focusVisible,\n [`${prefixCls}-animated`]: contentMotion\n }, className);\n const hoverRender = hoverContent ? (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-hover`,\n \"x-semi-prop\": \"hoverContent\"\n }, hoverContent)) : null;\n let avatar = /*#__PURE__*/React.createElement(\"span\", Object.assign({}, others, {\n style: shouldWrap ? {} : customStyle,\n className: avatarCls\n }, shouldWrap ? {} : mouseEvent, {\n role: 'listitem',\n ref: this.avatarRef\n }), this.getContent(), hoverRender);\n if (border) {\n const borderStyle = {};\n if (typeof border === 'object' && (border === null || border === void 0 ? void 0 : border.color)) {\n borderStyle['borderColor'] = border === null || border === void 0 ? void 0 : border.color;\n }\n avatar = /*#__PURE__*/React.createElement(\"div\", {\n style: Object.assign({\n position: \"relative\"\n }, customStyle)\n }, avatar, /*#__PURE__*/React.createElement(\"span\", {\n style: borderStyle,\n className: cls([`${prefixCls}-additionalBorder`, `${prefixCls}-additionalBorder-${size}`, {\n [`${prefixCls}-${shape}`]: shape\n }])\n }), typeof this.props.border === 'object' && this.props.border.motion && /*#__PURE__*/React.createElement(\"span\", {\n style: borderStyle,\n className: cls([`${prefixCls}-additionalBorder`, `${prefixCls}-additionalBorder-${size}`, {\n [`${prefixCls}-${shape}`]: shape,\n [`${prefixCls}-additionalBorder-animated`]: typeof this.props.border === 'object' && ((_a = this.props.border) === null || _a === void 0 ? void 0 : _a.motion)\n }])\n }));\n }\n if (shouldWrap) {\n return /*#__PURE__*/React.createElement(\"span\", Object.assign({\n className: cls([`${prefixCls}-wrapper`]),\n style: customStyle\n }, mouseEvent), avatar, topSlot && [\"extra-small\", \"small\", \"default\", \"medium\", \"large\", \"extra-large\"].includes(size) && shape === \"circle\" && this.renderTopSlot(), bottomSlot && [\"extra-small\", \"small\", \"default\", \"medium\", \"large\", \"extra-large\"].includes(size) && this.renderBottomSlot());\n } else {\n return avatar;\n }\n }\n}\nAvatar.__SemiComponentName__ = \"Avatar\";\nAvatar.defaultProps = getDefaultPropsFromGlobalConfig(Avatar.__SemiComponentName__, {\n size: 'medium',\n color: 'grey',\n shape: 'circle',\n gap: 3,\n onClick: noop,\n onMouseEnter: noop,\n onMouseLeave: noop\n});\nAvatar.propTypes = {\n children: PropTypes.node,\n color: PropTypes.oneOf(colorSet),\n shape: PropTypes.oneOf(shapeSet),\n size: PropTypes.oneOf(sizeSet),\n hoverMask: PropTypes.node,\n className: PropTypes.string,\n style: PropTypes.object,\n gap: PropTypes.number,\n imgAttr: PropTypes.object,\n src: PropTypes.string,\n srcSet: PropTypes.string,\n alt: PropTypes.string,\n onError: PropTypes.func,\n onClick: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n bottomSlot: PropTypes.shape({\n render: PropTypes.func,\n shape: PropTypes.oneOf(['circle', 'square']),\n text: PropTypes.node,\n bgColor: PropTypes.string,\n textColor: PropTypes.string,\n className: PropTypes.string,\n style: PropTypes.object\n }),\n topSlot: PropTypes.shape({\n render: PropTypes.func,\n gradientStart: PropTypes.string,\n gradientEnd: PropTypes.string,\n text: PropTypes.node,\n textColor: PropTypes.string,\n className: PropTypes.string,\n style: PropTypes.object\n }),\n border: PropTypes.oneOfType([PropTypes.shape({\n color: PropTypes.string,\n motion: PropTypes.bool\n }), PropTypes.bool]),\n contentMotion: PropTypes.bool\n};\nAvatar.elementType = 'Avatar';","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-button`\n};\nconst strings = {\n sizes: ['default', 'small', 'large'],\n iconPositions: ['left', 'right'],\n htmlTypes: ['button', 'reset', 'submit'],\n btnTypes: ['primary', 'secondary', 'tertiary', 'warning', 'danger'],\n themes: ['solid', 'borderless', 'light', 'outline'],\n DEFAULT_ICON_SIZE: 'default',\n DEFAULT_ICON_POSITION: 'left'\n};\nconst numbers = {};\nexport { cssClasses, strings, numbers };","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-icon`\n};\nconst strings = {\n SIZE: ['extra-small', 'small', 'default', 'large', 'extra-large', 'custom'],\n // use in svg xhref. No need to respond to the change of prefixCls, always constant\n ICON_PREFIX: 'semi-icon-'\n};\nconst numbers = {};\nexport { cssClasses, strings, numbers };","import _omit from \"lodash/omit\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/button/constants';\nimport '@douyinfe/semi-foundation/lib/es/button/button.css';\nimport { noop } from '@douyinfe/semi-foundation/lib/es/utils/function';\nimport cls from \"classnames\";\nconst btnSizes = strings.sizes;\nconst {\n htmlTypes,\n btnTypes\n} = strings;\n// TODO: icon configuration\nexport default class Button extends PureComponent {\n render() {\n const _a = this.props,\n {\n children,\n block,\n htmlType,\n loading,\n circle,\n className,\n style,\n disabled,\n size,\n theme,\n type,\n prefixCls,\n iconPosition\n } = _a,\n attr = __rest(_a, [\"children\", \"block\", \"htmlType\", \"loading\", \"circle\", \"className\", \"style\", \"disabled\", \"size\", \"theme\", \"type\", \"prefixCls\", \"iconPosition\"]);\n const baseProps = Object.assign(Object.assign({\n disabled\n }, _omit(attr, ['x-semi-children-alias'])), {\n className: classNames(prefixCls, {\n [`${prefixCls}-${type}`]: !disabled && type,\n [`${prefixCls}-disabled`]: disabled,\n [`${prefixCls}-size-large`]: size === 'large',\n [`${prefixCls}-size-small`]: size === 'small',\n // [`${prefixCls}-loading`]: loading,\n [`${prefixCls}-light`]: theme === 'light',\n [`${prefixCls}-block`]: block,\n [`${prefixCls}-circle`]: circle,\n [`${prefixCls}-borderless`]: theme === 'borderless',\n [`${prefixCls}-outline`]: theme === \"outline\",\n [`${prefixCls}-${type}-disabled`]: disabled && type\n }, className),\n type: htmlType,\n 'aria-disabled': disabled\n });\n const xSemiProps = {};\n if (!(className && className.includes('-with-icon'))) {\n xSemiProps['x-semi-prop'] = this.props['x-semi-children-alias'] || 'children';\n }\n return /*#__PURE__*/React.createElement(\"button\", Object.assign({}, baseProps, {\n onClick: this.props.onClick,\n onMouseDown: this.props.onMouseDown,\n style: style\n }), /*#__PURE__*/React.createElement(\"span\", Object.assign({\n className: cls(`${prefixCls}-content`, this.props.contentClassName),\n onClick: e => disabled && e.stopPropagation()\n }, xSemiProps), children));\n }\n}\nButton.defaultProps = {\n disabled: false,\n size: 'default',\n type: 'primary',\n theme: 'light',\n block: false,\n htmlType: 'button',\n onMouseDown: noop,\n onClick: noop,\n onMouseEnter: noop,\n onMouseLeave: noop,\n prefixCls: cssClasses.PREFIX\n};\nButton.propTypes = {\n children: PropTypes.node,\n disabled: PropTypes.bool,\n prefixCls: PropTypes.string,\n style: PropTypes.object,\n size: PropTypes.oneOf(btnSizes),\n type: PropTypes.oneOf(btnTypes),\n block: PropTypes.bool,\n onClick: PropTypes.func,\n onMouseDown: PropTypes.func,\n circle: PropTypes.bool,\n loading: PropTypes.bool,\n htmlType: PropTypes.oneOf(htmlTypes),\n theme: PropTypes.oneOf(strings.themes),\n className: PropTypes.string,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n 'aria-label': PropTypes.string,\n contentClassName: PropTypes.string\n};","import _noop from \"lodash/noop\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/button/constants';\nimport { strings as iconStrings } from '@douyinfe/semi-foundation/lib/es/icons/constants';\nimport Button from '../button/Button';\nimport SpinIcon from '../spin/icon';\nimport '@douyinfe/semi-foundation/lib/es/button/iconButton.css';\nconst iconSizes = iconStrings.SIZE;\n// TODO: add a buttonGroup component\n// TODO: icon configuration\nclass IconButton extends PureComponent {\n render() {\n const _a = this.props,\n {\n children: originChildren,\n iconPosition,\n iconSize,\n iconStyle,\n style: originStyle,\n icon,\n noHorizontalPadding,\n theme,\n className,\n prefixCls,\n loading\n } = _a,\n otherProps = __rest(_a, [\"children\", \"iconPosition\", \"iconSize\", \"iconStyle\", \"style\", \"icon\", \"noHorizontalPadding\", \"theme\", \"className\", \"prefixCls\", \"loading\"]);\n const style = Object.assign({}, originStyle);\n // TODO: review check\n if (Array.isArray(noHorizontalPadding)) {\n noHorizontalPadding.includes('left') && (style.paddingLeft = 0);\n noHorizontalPadding.includes('right') && (style.paddingRight = 0);\n } else if (noHorizontalPadding === true) {\n style.paddingLeft = 0;\n style.paddingRight = 0;\n } else if (typeof noHorizontalPadding === 'string') {\n noHorizontalPadding === 'left' && (style.paddingLeft = 0);\n noHorizontalPadding === 'right' && (style.paddingRight = 0);\n }\n let finalChildren = null;\n let IconElem = null;\n if (loading && !otherProps.disabled) {\n IconElem = /*#__PURE__*/React.createElement(SpinIcon, null);\n } else if (/*#__PURE__*/React.isValidElement(icon)) {\n IconElem = icon;\n }\n const btnTextCls = classNames({\n [`${prefixCls}-content-left`]: iconPosition === 'right',\n [`${prefixCls}-content-right`]: iconPosition === 'left'\n });\n const xSemiProp = this.props['x-semi-children-alias'] || 'children';\n const children = originChildren != null ? /*#__PURE__*/React.createElement(\"span\", {\n className: btnTextCls,\n \"x-semi-prop\": xSemiProp\n }, originChildren) : null;\n if (iconPosition === 'left') {\n finalChildren = /*#__PURE__*/React.createElement(React.Fragment, null, IconElem, children);\n } else {\n finalChildren = /*#__PURE__*/React.createElement(React.Fragment, null, children, IconElem);\n }\n const iconBtnCls = classNames(className, `${prefixCls}-with-icon`, {\n [`${prefixCls}-with-icon-only`]: children == null || children === '',\n [`${prefixCls}-loading`]: loading\n });\n return /*#__PURE__*/React.createElement(Button, Object.assign({}, otherProps, {\n className: iconBtnCls,\n theme: theme,\n style: style\n }), finalChildren);\n }\n}\nIconButton.defaultProps = {\n iconPosition: strings.DEFAULT_ICON_POSITION,\n prefixCls: cssClasses.PREFIX,\n loading: false,\n noHorizontalPadding: false,\n onMouseEnter: _noop,\n onMouseLeave: _noop\n};\nIconButton.elementType = \"IconButton\";\nIconButton.propTypes = {\n iconStyle: PropTypes.object,\n style: PropTypes.object,\n loading: PropTypes.bool,\n prefixCls: PropTypes.string,\n icon: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.node]),\n iconSize: PropTypes.oneOf(iconSizes),\n noHorizontalPadding: PropTypes.oneOfType([PropTypes.bool, PropTypes.string, PropTypes.array]),\n children: PropTypes.node,\n theme: PropTypes.string,\n iconPosition: PropTypes.oneOf(strings.iconPositions),\n className: PropTypes.string,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func\n};\nexport default IconButton;","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-banner`\n};\nconst strings = {\n TYPE: ['info', 'success', 'danger', 'warning']\n};\nexport { cssClasses, strings };","import BaseFoundation from '../base/foundation';\nexport default class BannerFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign(Object.assign({}, BannerFoundation.defaultAdapter), adapter));\n }\n removeBanner(e) {\n this._adapter.notifyClose(e);\n this._adapter.setVisible();\n }\n}","export default class FormatNumeral {\n constructor(content, rule, precision, truncate, parser) {\n // A collection of methods for formatting numbers; Methods key: Rule (strings.RULE); Not included: 'text' & 'numbers'\n this.ruleMethods = {\n 'bytes-decimal': value => {\n const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let i = 0;\n while (value >= 1000) {\n value /= 1000;\n i++;\n }\n return `${this.truncatePrecision(value)} ${units[i]}`;\n },\n 'bytes-binary': value => {\n const units = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];\n let i = 0;\n while (value >= 1024) {\n value /= 1024;\n i++;\n }\n return `${this.truncatePrecision(value)} ${units[i]}`;\n },\n percentages: value => {\n // The rules here have been modified in version v2.30.0\n return `${this.truncatePrecision(value * 100)}%`;\n },\n exponential: value => {\n const vExponential = value.toExponential(this.precision + 2);\n const vArr = vExponential.split('e');\n return `${this.truncatePrecision(Number(vArr[0]))}e${vArr[1]}`;\n }\n };\n // A collection of methods for truncating numbers; Methods key: Truncate (strings.Truncate);\n this.truncateMethods = {\n ceil: Math.ceil,\n floor: Math.floor,\n round: Math.round\n };\n this.isDiyParser = typeof parser !== 'undefined';\n this.content = content;\n this.rule = rule;\n this.precision = precision;\n this.truncate = truncate;\n this.parser = parser;\n }\n // Formatting numbers within a string.\n format() {\n // Executed when a custom method exists\n if (this.isDiyParser) {\n return this.parser(this.content);\n }\n // When the `rule` is `text`, only the `truncatePrecision` method is executed for numeric processing.\n if (this.rule === 'text') {\n return extractNumbers(this.content).map(item => checkIsNumeral(item) ? this.truncatePrecision(item) : item).join('');\n }\n // Separate extraction of numbers when `rule` is `numbers`.\n if (this.rule === 'numbers') {\n return extractNumbers(this.content).filter(item => checkIsNumeral(item)).map(item => this.truncatePrecision(item)).join(',');\n }\n // Run formatting methods that exist.\n return extractNumbers(this.content).map(item => checkIsNumeral(item) ? this.ruleMethods[this.rule](Number(item)) : item).join('');\n }\n truncatePrecision(content) {\n // Truncation and selection of rounding methods for processing. function from: truncateMethods\n const cTruncated = this.truncateMethods[this.truncate](Number(content) * Math.pow(10, this.precision)) / Math.pow(10, this.precision);\n const cArr = cTruncated.toString().split('.');\n // is an integer then the end number is normalised\n if (cArr.length === 1) {\n return cTruncated.toFixed(this.precision);\n }\n const cTLength = cArr[1].length;\n // Fill in any missing `0` at the end.\n if (cTLength < this.precision) {\n return `${cArr[0]}.${cArr[1]}${'0'.repeat(this.precision - cTLength)}`;\n }\n return cTruncated.toString();\n }\n}\n// Separate numbers from strings, the `-` symbol is a numeric prefix not allowed on its own.\nfunction extractNumbers(content) {\n const reg = /(-?[0-9]*\\.?[0-9]+([eE]-?[0-9]+)?)|([^-\\d\\.]+)/g;\n return content.match(reg) || [];\n}\nfunction checkIsNumeral(str) {\n return !(isNaN(Number(str)) || str.replace(/\\s+/g, '') === '');\n}","import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { strings } from '@douyinfe/semi-foundation/lib/es/typography/constants';\nimport Base from './base';\nimport FormatNumeral from '@douyinfe/semi-foundation/lib/es/typography/formatNumeral';\nexport default class Numeral extends PureComponent {\n // Traverse the entire virtual DOM using a depth-first traversal algorithm, then format each piece. (in react)\n formatNodeDFS(node) {\n if (!Array.isArray(node)) {\n node = [node];\n }\n // Because the property is read-only, an object is returned for overwriting rather than directly modifying the object's contents.\n node = node.map(item => {\n if (typeof item === 'string' || typeof item === 'number') {\n // Formatting the digital content of nodes.\n return new FormatNumeral(String(item), this.props.rule, this.props.precision, this.props.truncate, this.props.parser).format();\n }\n if (typeof item === 'function') {\n return this.formatNodeDFS(item());\n }\n if (typeof item === 'object' && 'children' in item['props']) {\n return Object.assign(Object.assign({}, item), {\n props: Object.assign(Object.assign({}, item['props']), {\n children: this.formatNodeDFS(item['props']['children'])\n })\n });\n }\n return item;\n });\n return node.length === 1 ? node[0] : node;\n }\n render() {\n // Deep copy and remove props that are not needed by the Base component.\n const baseProps = Object.assign({}, this.props);\n delete baseProps.rule;\n delete baseProps.parser;\n // Each piece of content in the virtual DOM is formatted by the `formatNumeral` function.\n baseProps.children = this.formatNodeDFS(this.props.children);\n return /*#__PURE__*/React.createElement(Base, Object.assign({\n component: 'span'\n }, baseProps));\n }\n}\nNumeral.propTypes = {\n rule: PropTypes.oneOf(strings.RULE),\n precision: PropTypes.number,\n truncate: PropTypes.oneOf(strings.TRUNCATE),\n parser: PropTypes.func,\n copyable: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n delete: PropTypes.bool,\n disabled: PropTypes.bool,\n icon: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),\n mark: PropTypes.bool,\n underline: PropTypes.bool,\n link: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n strong: PropTypes.bool,\n type: PropTypes.oneOf(strings.TYPE),\n size: PropTypes.oneOf(strings.SIZE),\n style: PropTypes.object,\n className: PropTypes.string,\n code: PropTypes.bool,\n component: PropTypes.string\n};\nNumeral.defaultProps = {\n rule: 'text',\n precision: 0,\n truncate: 'round',\n parser: undefined,\n copyable: false,\n delete: false,\n icon: '',\n mark: false,\n underline: false,\n strong: false,\n link: false,\n type: 'primary',\n style: {},\n size: 'normal',\n className: ''\n};","import BaseTypography from './typography';\nimport Text from './text';\nimport Title from './title';\nimport Paragraph from './paragraph';\nimport Numeral from './numeral';\nconst Typography = BaseTypography;\nTypography.Text = Text;\nTypography.Title = Title;\nTypography.Paragraph = Paragraph;\nTypography.Numeral = Numeral;\nexport * from './interface';\nexport default Typography;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.66 19.78a1.5 1.5 0 0 0 2.12-2.12L14.12 12l5.66-5.66a1.5 1.5 0 0 0-2.12-2.12L12 9.88 6.34 4.22a1.5 1.5 0 1 0-2.12 2.12L9.88 12l-5.66 5.66a1.5 1.5 0 0 0 2.12 2.12L12 14.12l5.66 5.66Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'close');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"m10.23 2.4-8.7 16.67A2 2 0 0 0 3.3 22h17.4a2 2 0 0 0 1.77-2.93L13.77 2.4a2 2 0 0 0-3.54 0ZM13.14 14a1.15 1.15 0 0 1-2.28 0l-.58-4.03a1.73 1.73 0 1 1 3.44 0l-.58 4.03Zm.36 4.49a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'alert_triangle');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M12 23a11 11 0 1 0 0-22 11 11 0 0 0 0 22Zm5.88-13.18-6.2 7.6a1.5 1.5 0 0 1-2.37 0l-3.5-4a1.5 1.5 0 1 1 2.37-1.84l2.3 2.46L15.5 8a1.5 1.5 0 1 1 2.38 1.82Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'tick_circle');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M12 23a11 11 0 1 0 0-22 11 11 0 0 0 0 22Zm2-16a2 2 0 1 1-4 0 2 2 0 0 1 4 0Zm-5 3.75c0-.41.34-.75.75-.75h2.75a1 1 0 0 1 1 1v5.5h.75a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5h.75v-5h-.75a.75.75 0 0 1-.75-.75Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'info_circle');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M23 12a11 11 0 1 1-22 0 11 11 0 0 1 22 0Zm-9.5 5.5a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0ZM12 5a1.9 1.9 0 0 0-1.89 2l.3 5.5a1.59 1.59 0 0 0 3.17 0l.3-5.5c.07-1.09-.8-2-1.88-2Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'alert_circle');\nexport default IconComponent;","import React from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport Button from '../iconButton';\nimport { strings, cssClasses } from '@douyinfe/semi-foundation/lib/es/banner/constants';\nimport BannerFoundation from '@douyinfe/semi-foundation/lib/es/banner/foundation';\nimport '@douyinfe/semi-foundation/lib/es/banner/banner.css';\nimport Typography from '../typography';\nimport { IconClose, IconAlertTriangle, IconInfoCircle, IconTickCircle, IconAlertCircle } from '@douyinfe/semi-icons';\nimport warning from '@douyinfe/semi-foundation/lib/es/utils/warning';\nimport BaseComponent from '../_base/baseComponent';\nconst prefixCls = cssClasses.PREFIX;\nconst types = strings.TYPE;\nexport default class Banner extends BaseComponent {\n constructor(props) {\n super(props);\n this.remove = e => {\n e && e.stopPropagation();\n this.foundation.removeBanner(e);\n };\n this.state = {\n visible: true\n };\n warning('target' in this.props, '[Semi Banner] \\'target\\' has been deprecated, please write JSX directly instead.');\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n setVisible: () => {\n this.setState({\n visible: false\n });\n },\n notifyClose: e => {\n const {\n onClose\n } = this.props;\n onClose(e);\n }\n });\n }\n componentDidMount() {\n this.foundation = new BannerFoundation(this.adapter);\n this.foundation.init();\n }\n componentWillUnmount() {\n this.foundation.destroy();\n }\n renderCloser() {\n const {\n closeIcon\n } = this.props;\n if (closeIcon === null) {\n return closeIcon;\n }\n const closer = /*#__PURE__*/React.createElement(Button, {\n className: `${prefixCls}-close`,\n onClick: this.remove,\n icon: closeIcon || /*#__PURE__*/React.createElement(IconClose, {\n \"x-semi-prop\": \"closeIcon\",\n \"aria-hidden\": true\n }),\n theme: \"borderless\",\n size: \"small\",\n type: \"tertiary\",\n \"aria-label\": 'Close'\n });\n return closer;\n }\n renderIcon() {\n const {\n type,\n icon\n } = this.props;\n const iconMap = {\n warning: /*#__PURE__*/React.createElement(IconAlertTriangle, {\n size: \"large\",\n \"aria-label\": 'warning'\n }),\n success: /*#__PURE__*/React.createElement(IconTickCircle, {\n size: \"large\",\n \"aria-label\": 'success'\n }),\n info: /*#__PURE__*/React.createElement(IconInfoCircle, {\n size: \"large\",\n \"aria-label\": 'info'\n }),\n danger: /*#__PURE__*/React.createElement(IconAlertCircle, {\n size: \"large\",\n \"aria-label\": 'danger'\n })\n };\n let iconType = iconMap[type];\n const iconCls = cls({\n [`${prefixCls}-icon`]: true\n // [prefixCls + '-' + type]: true,\n });\n if (typeof icon !== 'undefined') {\n iconType = icon;\n }\n if (iconType) {\n return /*#__PURE__*/React.createElement(\"div\", {\n className: iconCls,\n \"x-semi-prop\": \"icon\"\n }, iconType);\n }\n return null;\n }\n render() {\n const {\n children,\n type,\n className,\n style,\n bordered,\n title,\n description,\n fullMode\n } = this.props;\n const {\n visible\n } = this.state;\n const wrapper = cls(prefixCls, className, {\n [`${prefixCls}-${type}`]: type,\n [`${prefixCls}-full`]: fullMode,\n [`${prefixCls}-in-container`]: !fullMode,\n [`${prefixCls}-bordered`]: !fullMode && bordered\n });\n const banner = visible ? (/*#__PURE__*/React.createElement(\"div\", Object.assign({\n className: wrapper,\n style: style,\n role: \"alert\"\n }, this.getDataAttr(this.props)), /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-content-wrapper`\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-content`\n }, this.renderIcon(), /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-content-body`\n }, title ? /*#__PURE__*/React.createElement(Typography.Title, {\n heading: 5,\n className: `${prefixCls}-title`,\n component: \"div\",\n \"x-semi-prop\": \"title\"\n }, title) : null, description ? /*#__PURE__*/React.createElement(Typography.Paragraph, {\n className: `${prefixCls}-description`,\n component: \"div\",\n \"x-semi-prop\": \"description\"\n }, description) : null)), this.renderCloser()), children ? /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-extra`,\n \"x-semi-prop\": \"children\"\n }, children) : null)) : null;\n return banner;\n }\n}\nBanner.propTypes = {\n // target: PropTypes.func,\n fullMode: PropTypes.bool,\n // insertAfter: PropTypes.func,\n type: PropTypes.oneOf(types),\n title: PropTypes.node,\n description: PropTypes.node,\n icon: PropTypes.node,\n closeIcon: PropTypes.node,\n children: PropTypes.node,\n style: PropTypes.object,\n className: PropTypes.string,\n onClose: PropTypes.func,\n bordered: PropTypes.bool\n};\nBanner.defaultProps = {\n onClose: () => {},\n type: 'info',\n fullMode: true\n};","import React from 'react';\nimport BaseButton from './Button';\nimport IconButton from '../iconButton';\nimport { getDefaultPropsFromGlobalConfig } from \"../_utils\";\nclass Button extends React.PureComponent {\n constructor() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n super(props);\n }\n render() {\n const props = Object.assign({}, this.props);\n const hasIcon = Boolean(props.icon);\n const isLoading = Boolean(props.loading);\n const isDisabled = Boolean(props.disabled);\n if (hasIcon || isLoading && !isDisabled) {\n return /*#__PURE__*/React.createElement(IconButton, Object.assign({}, props));\n } else {\n return /*#__PURE__*/React.createElement(BaseButton, Object.assign({}, props));\n }\n }\n}\nButton.__SemiComponentName__ = \"Button\";\nButton.propTypes = Object.assign(Object.assign({}, BaseButton.propTypes), IconButton.propTypes);\nButton.defaultProps = getDefaultPropsFromGlobalConfig(Button.__SemiComponentName__);\nButton.elementType = 'Button';\nexport default Button;","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-card`\n};\nconst strings = {\n SHADOWS: ['hover', 'always'],\n TYPE: ['grid']\n};\nexport { cssClasses, strings };","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/card/constants';\nimport cls from 'classnames';\nconst prefixcls = cssClasses.PREFIX;\nclass Meta extends PureComponent {\n render() {\n const _a = this.props,\n {\n avatar,\n className,\n description,\n style,\n title\n } = _a,\n others = __rest(_a, [\"avatar\", \"className\", \"description\", \"style\", \"title\"]);\n const metaCls = cls(`${prefixcls}-meta`, className);\n const avatarNode = avatar && (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixcls}-meta-avatar`\n }, avatar));\n const titleNode = title && (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixcls}-meta-wrapper-title`\n }, title));\n const descriptionNode = description && (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixcls}-meta-wrapper-description`\n }, description));\n const wrapper = title || description ? (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixcls}-meta-wrapper`\n }, titleNode, descriptionNode)) : null;\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({}, others, {\n className: metaCls,\n style: style\n }), avatarNode, wrapper);\n }\n}\nMeta.propTypes = {\n avatar: PropTypes.node,\n className: PropTypes.string,\n description: PropTypes.node,\n style: PropTypes.object,\n title: PropTypes.node\n};\nexport default Meta;","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-skeleton`\n};\nconst strings = {};\nexport { cssClasses, strings };","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { PureComponent } from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/skeleton/constants';\nimport { strings } from '@douyinfe/semi-foundation/lib/es/avatar/constants';\nimport '@douyinfe/semi-foundation/lib/es/skeleton/skeleton.css';\nconst sizeSet = strings.SIZE;\nconst shapeSet = strings.SHAPE;\nconst generator = type => BasicComponent => props => /*#__PURE__*/React.createElement(BasicComponent, Object.assign({\n type: type\n}, props));\nclass Generic extends PureComponent {\n render() {\n const _a = this.props,\n {\n prefixCls,\n className,\n type,\n size,\n shape\n } = _a,\n others = __rest(_a, [\"prefixCls\", \"className\", \"type\", \"size\", \"shape\"]);\n const classString = cls(className, `${prefixCls}-${type}`, {\n [`${prefixCls}-${type}-${size}`]: type.toUpperCase() === 'AVATAR'\n }, {\n [`${prefixCls}-${type}-${shape}`]: type.toUpperCase() === 'AVATAR'\n });\n return /*#__PURE__*/React.createElement('div', Object.assign({\n className: classString\n }, others));\n }\n}\nGeneric.propTypes = {\n type: PropTypes.string,\n prefixCls: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n size: PropTypes.oneOf(sizeSet),\n shape: PropTypes.oneOf(shapeSet)\n};\nGeneric.defaultProps = {\n prefixCls: cssClasses.PREFIX,\n size: 'medium',\n shape: 'circle'\n};\nexport const Avatar = generator('avatar')(Generic);\nexport const Image = generator('image')(Generic);\nexport const Title = generator('title')(Generic);\nexport const Button = generator('button')(Generic);\nexport class Paragraph extends PureComponent {\n render() {\n const {\n prefixCls,\n className,\n style,\n rows\n } = this.props;\n const classString = cls(className, `${prefixCls}-paragraph`);\n return /*#__PURE__*/React.createElement(\"ul\", {\n className: classString,\n style: style\n }, [...Array(rows)].map((e, i) => (/*#__PURE__*/React.createElement(\"li\", {\n key: i\n }))));\n }\n}\nParagraph.propTypes = {\n rows: PropTypes.number,\n prefixCls: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string\n};\nParagraph.defaultProps = {\n prefixCls: cssClasses.PREFIX,\n rows: 4\n};","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { PureComponent } from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/skeleton/constants';\nimport '@douyinfe/semi-foundation/lib/es/skeleton/skeleton.css';\nimport { Avatar, Image, Title, Button, Paragraph } from './item';\nconst prefixCls = cssClasses.PREFIX;\nclass Skeleton extends PureComponent {\n render() {\n const _a = this.props,\n {\n placeholder,\n active,\n children,\n className,\n loading,\n style\n } = _a,\n others = __rest(_a, [\"placeholder\", \"active\", \"children\", \"className\", \"loading\", \"style\"]);\n const skCls = cls(prefixCls, {\n [`${prefixCls}-active`]: Boolean(active)\n }, className);\n let content;\n if (loading) {\n content = /*#__PURE__*/React.createElement(\"div\", Object.assign({\n className: skCls,\n style: style\n }, others, {\n \"x-semi-prop\": \"placeholder\"\n }), placeholder);\n } else {\n content = children;\n }\n return content;\n }\n}\nSkeleton.Avatar = Avatar;\nSkeleton.Title = Title;\nSkeleton.Button = Button;\nSkeleton.Paragraph = Paragraph;\nSkeleton.Image = Image;\nSkeleton.defaultProps = {\n loading: true\n};\nSkeleton.propTypes = {\n active: PropTypes.bool,\n placeholder: PropTypes.node,\n style: PropTypes.object,\n className: PropTypes.string,\n loading: PropTypes.bool,\n children: PropTypes.node\n};\nexport default Skeleton;","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-space`\n};\nconst strings = {\n ALIGN_SET: ['start', 'end', 'center', 'baseline'],\n SPACING_LOOSE: 'loose',\n SPACING_MEDIUM: 'medium',\n SPACING_TIGHT: 'tight'\n};\nexport { cssClasses, strings };","import React, { isValidElement } from 'react';\nconst REACT_FRAGMENT_TYPE = 'Symbol(react.fragment)';\n/**\n * Flatten the children and return the processed data\n */\nexport const flatten = children => {\n let res = [];\n React.Children.forEach(children, child => {\n if (child === undefined || child === null) {\n return;\n }\n if (Array.isArray(child)) {\n res = res.concat(flatten(child));\n } else if (/*#__PURE__*/isValidElement(child) && child.type && child.type.toString() === REACT_FRAGMENT_TYPE && child.props) {\n res = res.concat(flatten(child.props.children));\n } else {\n res.push(child);\n }\n });\n return res;\n};","import _isNumber from \"lodash/isNumber\";\nimport _isArray from \"lodash/isArray\";\nimport _isString from \"lodash/isString\";\nimport React, { PureComponent } from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport { strings, cssClasses } from '@douyinfe/semi-foundation/lib/es/space/constants';\nimport '@douyinfe/semi-foundation/lib/es/space/space.css';\nimport { flatten } from './utils';\nimport getDataAttr from '@douyinfe/semi-foundation/lib/es/utils/getDataAttr';\nconst prefixCls = cssClasses.PREFIX;\nclass Space extends PureComponent {\n render() {\n const {\n children = null,\n style,\n className,\n spacing,\n wrap,\n align,\n vertical\n } = this.props;\n const isWrap = wrap && vertical ? false : wrap;\n const realStyle = Object.assign({}, style);\n let spacingHorizontalType = '';\n let spacingVerticalType = '';\n if (_isString(spacing)) {\n spacingHorizontalType = spacing;\n spacingVerticalType = spacing;\n } else if (_isNumber(spacing)) {\n realStyle.rowGap = spacing;\n realStyle.columnGap = spacing;\n } else if (_isArray(spacing)) {\n if (_isString(spacing[0])) {\n spacingHorizontalType = spacing[0];\n } else if (_isNumber(spacing[0])) {\n realStyle.columnGap = `${spacing[0]}px`;\n }\n if (_isString(spacing[1])) {\n spacingVerticalType = spacing[1];\n } else if (_isNumber(spacing[1])) {\n realStyle.rowGap = `${spacing[1]}px`;\n }\n }\n const classNames = cls(prefixCls, className, {\n [`${prefixCls}-align-${align}`]: align,\n [`${prefixCls}-vertical`]: vertical,\n [`${prefixCls}-horizontal`]: !vertical,\n [`${prefixCls}-wrap`]: isWrap,\n [`${prefixCls}-tight-horizontal`]: spacingHorizontalType === strings.SPACING_TIGHT,\n [`${prefixCls}-tight-vertical`]: spacingVerticalType === strings.SPACING_TIGHT,\n [`${prefixCls}-medium-horizontal`]: spacingHorizontalType === strings.SPACING_MEDIUM,\n [`${prefixCls}-medium-vertical`]: spacingVerticalType === strings.SPACING_MEDIUM,\n [`${prefixCls}-loose-horizontal`]: spacingHorizontalType === strings.SPACING_LOOSE,\n [`${prefixCls}-loose-vertical`]: spacingVerticalType === strings.SPACING_LOOSE\n });\n const childrenNodes = flatten(children);\n const dataAttributes = getDataAttr(this.props);\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({}, dataAttributes, {\n className: classNames,\n style: realStyle,\n \"x-semi-prop\": \"children\"\n }), childrenNodes);\n }\n}\nSpace.propTypes = {\n wrap: PropTypes.bool,\n align: PropTypes.oneOf(strings.ALIGN_SET),\n vertical: PropTypes.bool,\n spacing: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.array]),\n children: PropTypes.node,\n style: PropTypes.object,\n className: PropTypes.string\n};\nSpace.defaultProps = {\n vertical: false,\n wrap: false,\n spacing: 'tight',\n align: 'center'\n};\nexport default Space;","import _isString from \"lodash/isString\";\nimport _omit from \"lodash/omit\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/card/constants';\nimport '@douyinfe/semi-foundation/lib/es/card/card.css';\nimport Meta from './meta';\nimport cls from 'classnames';\nimport Skeleton from '../skeleton';\nimport Typography from '../typography';\nimport Space from '../space';\nconst prefixcls = cssClasses.PREFIX;\nclass Card extends PureComponent {\n constructor() {\n super(...arguments);\n this.renderHeader = () => {\n const {\n title,\n headerExtraContent,\n header,\n headerLine,\n headerStyle\n } = this.props;\n const headerCls = cls(`${prefixcls}-header`, {\n [`${prefixcls}-header-bordered`]: Boolean(headerLine)\n });\n const headerWrapperCls = cls(`${prefixcls}-header-wrapper`);\n const titleCls = cls(`${prefixcls}-header-wrapper-title`, {\n [`${prefixcls}-header-wrapper-spacing`]: Boolean(headerExtraContent)\n });\n if (header || headerExtraContent || title) {\n return /*#__PURE__*/React.createElement(\"div\", {\n style: headerStyle,\n className: headerCls\n }, header || (\n /*#__PURE__*/\n // Priority of header over title and headerExtraContent\n React.createElement(\"div\", {\n className: headerWrapperCls\n }, headerExtraContent && (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixcls}-header-wrapper-extra`,\n \"x-semi-prop\": \"headerExtraContent\"\n }, headerExtraContent)), title && (/*#__PURE__*/React.createElement(\"div\", {\n className: titleCls\n }, _isString(title) ? (/*#__PURE__*/React.createElement(Typography.Title, {\n heading: 6,\n ellipsis: {\n showTooltip: true,\n rows: 1\n },\n \"x-semi-prop\": \"title\"\n }, title)) : title)))));\n }\n return null;\n };\n this.renderCover = () => {\n const {\n cover\n } = this.props;\n const coverCls = cls(`${prefixcls}-cover`);\n return cover && (/*#__PURE__*/React.createElement(\"div\", {\n className: coverCls,\n \"x-semi-prop\": \"cover\"\n }, cover));\n };\n this.renderBody = () => {\n const {\n bodyStyle,\n children,\n actions,\n loading\n } = this.props;\n const bodyCls = cls(`${prefixcls}-body`);\n const actionsCls = cls(`${prefixcls}-body-actions`);\n const actionsItemCls = cls(`${prefixcls}-body-actions-item`);\n const placeholder = /*#__PURE__*/React.createElement(\"div\", null, /*#__PURE__*/React.createElement(Skeleton.Title, null), /*#__PURE__*/React.createElement(\"br\", null), /*#__PURE__*/React.createElement(Skeleton.Paragraph, {\n rows: 3\n }));\n return /*#__PURE__*/React.createElement(\"div\", {\n style: bodyStyle,\n className: bodyCls\n }, children && (/*#__PURE__*/React.createElement(Skeleton, {\n placeholder: placeholder,\n loading: loading,\n active: true\n }, children)), Array.isArray(actions) && (/*#__PURE__*/React.createElement(\"div\", {\n className: actionsCls\n }, /*#__PURE__*/React.createElement(Space, {\n spacing: 12\n }, actions.map((item, idx) => (/*#__PURE__*/React.createElement(\"div\", {\n key: idx,\n className: actionsItemCls,\n \"x-semi-prop\": `actions.${idx}`\n }, item)))))));\n };\n this.renderFooter = () => {\n const {\n footer,\n footerLine,\n footerStyle\n } = this.props;\n const footerCls = cls(`${prefixcls}-footer`, {\n [`${prefixcls}-footer-bordered`]: footerLine\n });\n return footer && (/*#__PURE__*/React.createElement(\"div\", {\n style: footerStyle,\n className: footerCls,\n \"x-semi-prop\": \"footer\"\n }, footer));\n };\n }\n render() {\n const _a = this.props,\n {\n bordered,\n shadows,\n style,\n className\n } = _a,\n otherProps = __rest(_a, [\"bordered\", \"shadows\", \"style\", \"className\"]);\n const others = _omit(otherProps, ['actions', 'bodyStyle', 'cover', 'headerExtraContent', 'footer', 'footerLine', 'footerStyle', 'header', 'headerLine', 'headerStyle', 'loading', 'title']);\n const cardCls = cls(prefixcls, className, {\n [`${prefixcls}-bordered`]: bordered,\n [`${prefixcls}-shadows`]: shadows,\n [`${prefixcls}-shadows-${shadows}`]: shadows\n });\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({}, others, {\n \"aria-busy\": this.props.loading,\n className: cardCls,\n style: style\n }), this.renderHeader(), this.renderCover(), this.renderBody(), this.renderFooter());\n }\n}\nCard.Meta = Meta;\nCard.propTypes = {\n actions: PropTypes.array,\n bodyStyle: PropTypes.object,\n bordered: PropTypes.bool,\n children: PropTypes.node,\n className: PropTypes.string,\n cover: PropTypes.node,\n footer: PropTypes.node,\n footerLine: PropTypes.bool,\n footerStyle: PropTypes.object,\n header: PropTypes.node,\n headerExtraContent: PropTypes.node,\n headerLine: PropTypes.bool,\n headerStyle: PropTypes.object,\n loading: PropTypes.bool,\n shadows: PropTypes.oneOf(strings.SHADOWS),\n style: PropTypes.object,\n title: PropTypes.node,\n 'aria-label': PropTypes.string\n};\nCard.defaultProps = {\n bordered: true,\n footerLine: false,\n headerLine: true,\n loading: false\n};\nexport default Card;","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst checkboxClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-checkbox`,\n INNER: `${BASE_CLASS_PREFIX}-checkbox-inner`,\n TEXT: `${BASE_CLASS_PREFIX}-checkbox-text`,\n INPUT: `${BASE_CLASS_PREFIX}-checkbox-input`,\n CHECKED: `${BASE_CLASS_PREFIX}-checkbox-checked`,\n DISABLED: `${BASE_CLASS_PREFIX}-checkbox-disabled`,\n BUTTON: `${BASE_CLASS_PREFIX}-checkbox-button`,\n WRAPPER: ''\n};\nconst checkboxGroupClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-checkboxGroup`,\n INNER: `${BASE_CLASS_PREFIX}-checkboxGroup-inner`,\n TEXT: `${BASE_CLASS_PREFIX}-checkboxGroup-text`,\n INPUT: `${BASE_CLASS_PREFIX}-checkboxGroup-input`,\n CHECKED: `${BASE_CLASS_PREFIX}-checkboxGroup-checked`,\n DISABLED: `${BASE_CLASS_PREFIX}-checkboxGroup-disabled`\n};\nconst strings = {\n DIRECTION_SET: ['horizontal', 'vertical'],\n TYPE_DEFAULT: 'default',\n TYPE_CARD: 'card',\n TYPE_PURECARD: 'pureCard',\n DEFAULT_DIRECTION: 'vertical'\n};\nconst numbers = {};\nexport { checkboxClasses, checkboxGroupClasses, strings, numbers };","import BaseFoundation from '../base/foundation';\nimport isEnterPress from '../utils/isEnterPress';\nimport warning from '../utils/warning';\nclass CheckboxFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n this.clickState = false;\n this.handleFocusVisible = event => {\n const {\n target\n } = event;\n try {\n if (this.clickState) {\n this.clickState = false;\n return;\n }\n if (target.matches(':focus-visible')) {\n this._adapter.setFocusVisible(true);\n }\n } catch (error) {\n warning(true, 'Warning: [Semi Checkbox] The current browser does not support the focus-visible');\n }\n };\n this.handleBlur = () => {\n this.clickState = false;\n this._adapter.setFocusVisible(false);\n };\n }\n init() {\n const {\n children,\n extra,\n extraId,\n addonId\n } = this.getProps();\n if (children && !addonId) {\n this._adapter.setAddonId();\n }\n if (extra && !extraId) {\n this._adapter.setExtraId();\n }\n }\n notifyChange(checked, e) {\n const cbValue = this._adapter.generateEvent(checked, e);\n this._adapter.notifyChange(cbValue);\n }\n handleChange(e) {\n const disabled = this.getProp('disabled');\n if (disabled) {\n return;\n }\n if ((e === null || e === void 0 ? void 0 : e.type) === 'click') {\n this.clickState = true;\n }\n this._adapter.focusCheckboxEntity();\n const isInGroup = this._adapter.getIsInGroup();\n if (isInGroup) {\n const groupDisabled = this._adapter.getGroupDisabled();\n if (!groupDisabled) {\n this.handleChangeInGroup(e);\n }\n return;\n }\n const checked = this.getState('checked');\n const newChecked = !checked;\n if (this._isControlledComponent('checked')) {\n this.notifyChange(newChecked, e);\n } else {\n this.setChecked(newChecked);\n this.notifyChange(newChecked, e);\n }\n }\n handleChangeInGroup(e) {\n const {\n value\n } = this.getProps();\n const groupValue = this._adapter.getGroupValue();\n const checked = groupValue.includes(value);\n const newChecked = !checked;\n const event = this._adapter.generateEvent(newChecked, e);\n this._adapter.notifyChange(event);\n this._adapter.notifyGroupChange(event);\n }\n handleEnterPress(e) {\n if (isEnterPress(e)) {\n this.handleChange(e);\n }\n }\n setChecked(checked) {\n this._adapter.setNativeControlChecked(checked);\n }\n destroy() {}\n}\nexport default CheckboxFoundation;","import React from 'react';\nconst Context = /*#__PURE__*/React.createContext({});\nexport { Context };","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.41 7.3c.66.51.78 1.45.28 2.11l-6.5 8.5a1.5 1.5 0 0 1-2.37.01l-3.5-4.5a1.5 1.5 0 1 1 2.36-1.84L10 14.54l5.32-6.95a1.5 1.5 0 0 1 2.1-.28Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'checkbox_tick');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5 12.5c0-.83.67-1.5 1.5-1.5h11a1.5 1.5 0 0 1 0 3h-11A1.5 1.5 0 0 1 5 12.5Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'checkbox_indeterminate');\nexport default IconComponent;","import _noop from \"lodash/noop\";\nimport React, { PureComponent } from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { checkboxClasses as css } from '@douyinfe/semi-foundation/lib/es/checkbox/constants';\nimport { Context } from './context';\nimport { IconCheckboxTick, IconCheckboxIndeterminate } from '@douyinfe/semi-icons';\nclass CheckboxInner extends PureComponent {\n blur() {\n this.inputEntity.blur();\n }\n focus() {\n const {\n preventScroll\n } = this.props;\n this.inputEntity.focus({\n preventScroll\n });\n }\n render() {\n const {\n indeterminate,\n checked,\n disabled,\n prefixCls,\n name,\n isPureCardType,\n addonId,\n extraId,\n focusInner,\n onInputFocus,\n onInputBlur\n } = this.props;\n const prefix = prefixCls || css.PREFIX;\n const wrapper = classnames({\n [`${prefix}-inner`]: true,\n [`${prefix}-inner-checked`]: Boolean(checked),\n [`${prefix}-inner-pureCardType`]: isPureCardType\n }, css.WRAPPER);\n const inner = classnames({\n [`${prefix}-inner-display`]: true,\n [`${prefix}-focus`]: focusInner,\n [`${prefix}-focus-border`]: focusInner && !checked\n });\n const icon = checked ? (/*#__PURE__*/React.createElement(IconCheckboxTick, null)) : indeterminate ? (/*#__PURE__*/React.createElement(IconCheckboxIndeterminate, null)) : null;\n const inputProps = {\n type: \"checkbox\",\n 'aria-label': this.props['aria-label'],\n 'aria-disabled': disabled,\n 'aria-checked': checked,\n 'aria-labelledby': addonId,\n 'aria-describedby': extraId || this.props['aria-describedby'],\n 'aria-invalid': this.props['aria-invalid'],\n 'aria-errormessage': this.props['aria-errormessage'],\n 'aria-required': this.props['aria-required'],\n className: css.INPUT,\n onChange: _noop,\n checked: checked,\n disabled: disabled,\n onFocus: onInputFocus,\n onBlur: onInputBlur\n };\n name && (inputProps['name'] = name);\n return /*#__PURE__*/React.createElement(\"span\", {\n className: wrapper\n }, /*#__PURE__*/React.createElement(\"input\", Object.assign({}, inputProps, {\n ref: ref => {\n this.inputEntity = ref;\n }\n })), /*#__PURE__*/React.createElement(\"span\", {\n className: inner\n }, icon));\n }\n}\nCheckboxInner.contextType = Context;\nCheckboxInner.propTypes = {\n 'aria-describedby': PropTypes.string,\n 'aria-errormessage': PropTypes.string,\n 'aria-invalid': PropTypes.bool,\n 'aria-labelledby': PropTypes.string,\n 'aria-required': PropTypes.bool,\n checked: PropTypes.bool,\n disabled: PropTypes.bool,\n onChange: PropTypes.func,\n children: PropTypes.node,\n grouped: PropTypes.bool,\n value: PropTypes.any,\n isPureCardType: PropTypes.bool,\n addonId: PropTypes.string,\n extraId: PropTypes.string,\n focusInner: PropTypes.bool,\n onInputFocus: PropTypes.func,\n onInputBlur: PropTypes.func,\n preventScroll: PropTypes.bool\n};\nCheckboxInner.defaultProps = {\n onChange: _noop\n};\nexport default CheckboxInner;","import _noop from \"lodash/noop\";\nimport _isBoolean from \"lodash/isBoolean\";\nimport _isUndefined from \"lodash/isUndefined\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { checkboxClasses as css, strings } from '@douyinfe/semi-foundation/lib/es/checkbox/constants';\nimport CheckboxFoundation from '@douyinfe/semi-foundation/lib/es/checkbox/checkboxFoundation';\nimport CheckboxInner from './checkboxInner';\nimport BaseComponent from '../_base/baseComponent';\nimport '@douyinfe/semi-foundation/lib/es/checkbox/checkbox.css';\nimport { Context } from './context';\nimport { getUuidShort } from '@douyinfe/semi-foundation/lib/es/utils/uuid';\nclass Checkbox extends BaseComponent {\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n setNativeControlChecked: checked => {\n this.setState({\n checked\n });\n },\n notifyChange: cbContent => {\n const {\n onChange\n } = this.props;\n onChange && onChange(cbContent);\n },\n generateEvent: (checked, e) => {\n const {\n props\n } = this;\n const cbValue = {\n target: Object.assign(Object.assign({}, props), {\n checked\n }),\n stopPropagation: () => {\n e.stopPropagation();\n },\n preventDefault: () => {\n e.preventDefault();\n },\n nativeEvent: {\n stopImmediatePropagation: () => {\n if (e.nativeEvent && typeof e.nativeEvent.stopImmediatePropagation === 'function') {\n e.nativeEvent.stopImmediatePropagation();\n }\n }\n }\n };\n return cbValue;\n },\n getIsInGroup: () => this.isInGroup(),\n getGroupValue: () => this.context && this.context.checkboxGroup.value || [],\n notifyGroupChange: cbContent => {\n this.context.checkboxGroup.onChange(cbContent);\n },\n getGroupDisabled: () => this.context && this.context.checkboxGroup.disabled,\n setAddonId: () => {\n this.setState({\n addonId: getUuidShort({\n prefix: 'addon'\n })\n });\n },\n setExtraId: () => {\n this.setState({\n extraId: getUuidShort({\n prefix: 'extra'\n })\n });\n },\n setFocusVisible: focusVisible => {\n this.setState({\n focusVisible\n });\n },\n focusCheckboxEntity: () => {\n this.focus();\n }\n });\n }\n constructor(props) {\n super(props);\n this.handleChange = e => this.foundation.handleChange(e);\n this.handleEnterPress = e => this.foundation.handleEnterPress(e);\n this.handleFocusVisible = event => {\n this.foundation.handleFocusVisible(event);\n };\n this.handleBlur = event => {\n this.foundation.handleBlur();\n };\n const checked = false;\n this.state = {\n checked: props.checked || props.defaultChecked || checked,\n addonId: props.addonId,\n extraId: props.extraId,\n focusVisible: false\n };\n this.checkboxEntity = null;\n this.foundation = new CheckboxFoundation(this.adapter);\n }\n componentDidUpdate(prevProps) {\n if (this.props.checked !== prevProps.checked) {\n if (_isUndefined(this.props.checked)) {\n this.foundation.setChecked(false);\n } else if (_isBoolean(this.props.checked)) {\n this.foundation.setChecked(this.props.checked);\n }\n }\n }\n isInGroup() {\n // Why do we need to determine whether there is a value in props?\n // If there is no value in the props of the checkbox in the context of the checkboxGroup, \n // it will be considered not to belong to the checkboxGroup。\n return Boolean(this.context && this.context.checkboxGroup && 'value' in this.props);\n }\n focus() {\n this.checkboxEntity && this.checkboxEntity.focus();\n }\n blur() {\n this.checkboxEntity && this.checkboxEntity.blur();\n }\n render() {\n const {\n disabled,\n style,\n prefixCls,\n className,\n indeterminate,\n children,\n onMouseEnter,\n onMouseLeave,\n extra,\n value,\n role,\n tabIndex,\n id,\n type\n } = this.props;\n const {\n checked,\n addonId,\n extraId,\n focusVisible\n } = this.state;\n const props = {\n checked,\n disabled\n };\n const inGroup = this.isInGroup();\n if (inGroup) {\n if (this.context.checkboxGroup.value) {\n const realChecked = (this.context.checkboxGroup.value || []).includes(value);\n props.checked = realChecked;\n }\n if (this.context.checkboxGroup.disabled) {\n props.disabled = this.context.checkboxGroup.disabled || this.props.disabled;\n }\n const {\n isCardType,\n isPureCardType\n } = this.context.checkboxGroup;\n props.isCardType = isCardType;\n props.isPureCardType = isPureCardType;\n props['name'] = this.context.checkboxGroup.name;\n } else {\n props.isPureCardType = type === strings.TYPE_PURECARD;\n props.isCardType = type === strings.TYPE_CARD || props.isPureCardType;\n }\n const prefix = prefixCls || css.PREFIX;\n const focusOuter = props.isCardType || props.isPureCardType;\n const wrapper = classnames(prefix, {\n [`${prefix}-disabled`]: props.disabled,\n [`${prefix}-indeterminate`]: indeterminate,\n [`${prefix}-checked`]: props.checked,\n [`${prefix}-unChecked`]: !props.checked,\n [`${prefix}-cardType`]: props.isCardType,\n [`${prefix}-cardType_disabled`]: props.disabled && props.isCardType,\n [`${prefix}-cardType_enable`]: !(props.disabled && props.isCardType),\n [`${prefix}-cardType_checked`]: props.isCardType && props.checked && !props.disabled,\n [`${prefix}-cardType_checked_disabled`]: props.isCardType && props.checked && props.disabled,\n [className]: Boolean(className),\n [`${prefix}-focus`]: focusVisible && focusOuter\n });\n const extraCls = classnames(`${prefix}-extra`, {\n [`${prefix}-cardType_extra_noChildren`]: props.isCardType && !children\n });\n const name = inGroup && this.context.checkboxGroup.name;\n const xSemiPropChildren = this.props['x-semi-children-alias'] || 'children';\n const renderContent = () => {\n if (!children && !extra) {\n return null;\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefix}-content`\n }, children ? (/*#__PURE__*/React.createElement(\"span\", {\n id: addonId,\n className: `${prefix}-addon`,\n \"x-semi-prop\": xSemiPropChildren\n }, children)) : null, extra ? (/*#__PURE__*/React.createElement(\"div\", {\n id: extraId,\n className: extraCls,\n \"x-semi-prop\": \"extra\"\n }, extra)) : null);\n };\n return (\n /*#__PURE__*/\n // label is better than span, however span is here which is to solve gitlab issue #364\n React.createElement(\"span\", Object.assign({\n role: role,\n tabIndex: tabIndex,\n style: style,\n className: wrapper,\n id: id,\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave,\n onClick: this.handleChange,\n onKeyPress: this.handleEnterPress,\n \"aria-labelledby\": this.props['aria-labelledby']\n }, this.getDataAttr(this.props)), /*#__PURE__*/React.createElement(CheckboxInner, Object.assign({}, this.props, props, {\n addonId: children && addonId,\n extraId: extra && extraId,\n isPureCardType: props.isPureCardType,\n ref: ref => {\n this.checkboxEntity = ref;\n },\n focusInner: focusVisible && !focusOuter,\n onInputFocus: this.handleFocusVisible,\n onInputBlur: this.handleBlur\n })), renderContent())\n );\n }\n}\nCheckbox.contextType = Context;\nCheckbox.propTypes = {\n 'aria-describedby': PropTypes.string,\n 'aria-errormessage': PropTypes.string,\n 'aria-invalid': PropTypes.bool,\n 'aria-labelledby': PropTypes.string,\n 'aria-required': PropTypes.bool,\n // Specifies whether it is currently selected\n checked: PropTypes.bool,\n // Initial check\n defaultChecked: PropTypes.bool,\n // Failure state\n disabled: PropTypes.bool,\n // Set indeterminate state, only responsible for style control\n indeterminate: PropTypes.bool,\n // Callback function when changing\n onChange: PropTypes.func,\n value: PropTypes.any,\n style: PropTypes.object,\n className: PropTypes.string,\n prefixCls: PropTypes.string,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n extra: PropTypes.node,\n index: PropTypes.number,\n 'aria-label': PropTypes.string,\n tabIndex: PropTypes.number,\n preventScroll: PropTypes.bool,\n type: PropTypes.string\n};\nCheckbox.defaultProps = {\n defaultChecked: false,\n indeterminate: false,\n onChange: _noop,\n onMouseEnter: _noop,\n onMouseLeave: _noop,\n type: 'default'\n};\nCheckbox.elementType = 'Checkbox';\nexport default Checkbox;","import BaseFoundation from '../base/foundation';\nimport warning from '../utils/warning';\nclass CheckboxGroupFoundation extends BaseFoundation {\n static get checkboxGroupDefaultAdapter() {\n return {};\n }\n constructor(adapter) {\n super(Object.assign(Object.assign({}, CheckboxGroupFoundation.checkboxGroupDefaultAdapter), adapter));\n }\n init() {\n const {\n defaultValue,\n value\n } = this.getProps();\n if (typeof defaultValue !== 'undefined' && !Array.isArray(defaultValue)) {\n warning(true, 'Warning: [Semi CheckboxGroup] defaultValue should be an Array');\n }\n if (typeof value !== 'undefined' && !Array.isArray(value)) {\n warning(true, 'Warning: [Semi CheckboxGroup] value should be an Array');\n }\n }\n notifyChange(value) {\n this._adapter.notifyChange(value);\n }\n handleChange(evt) {\n const prevValue = this.getState('value');\n let newValue = [];\n if (!Array.isArray(prevValue)) {\n newValue = [prevValue];\n }\n if (evt.target.checked) {\n newValue = [...prevValue, evt.target.value];\n } else {\n newValue = prevValue.filter((itm, idx) => itm !== evt.target.value);\n }\n const isControlledMode = 'value' in this.getProps();\n if (isControlledMode) {\n // Controlled mode only needs to notify\n this.notifyChange(newValue);\n } else {\n // In uncontrolled mode, update the value in the state, and then notify\n this._adapter.updateGroupValue(newValue);\n this.notifyChange(newValue);\n }\n }\n getFormatName() {\n const propName = this.getProp('name');\n const defaultName = 'default';\n return propName || defaultName;\n }\n handlePropValueChange(newPropValue) {\n if (Array.isArray(newPropValue)) {\n this._adapter.updateGroupValue(newPropValue);\n } else {\n // to adjust reset in Form.CheckboxGroup\n if (typeof newPropValue === 'undefined') {\n this._adapter.updateGroupValue([]);\n }\n warning(true, 'Warning: [Semi CheckboxGroup] value should be an Array');\n }\n }\n destroy() {}\n}\nexport default CheckboxGroupFoundation;","import _isEqual from \"lodash/isEqual\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { checkboxGroupClasses as css, strings } from '@douyinfe/semi-foundation/lib/es/checkbox/constants';\nimport CheckboxGroupFoundation from '@douyinfe/semi-foundation/lib/es/checkbox/checkboxGroupFoundation';\nimport BaseComponent from '../_base/baseComponent';\nimport { Context } from './context';\nimport Checkbox from './checkbox';\nclass CheckboxGroup extends BaseComponent {\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n updateGroupValue: value => {\n this.setState({\n value\n });\n },\n notifyChange: value => {\n this.props.onChange && this.props.onChange(value);\n }\n });\n }\n constructor(props) {\n super(props);\n this.state = {\n value: props.value || props.defaultValue\n };\n this.foundation = new CheckboxGroupFoundation(this.adapter);\n this.onChange = this.onChange.bind(this);\n }\n componentDidMount() {\n this.foundation.init();\n }\n componentDidUpdate(prevProps) {\n if (!_isEqual(prevProps.value, this.props.value)) {\n this.foundation.handlePropValueChange(this.props.value);\n }\n }\n componentWillUnmount() {\n this.foundation.destroy();\n }\n onChange(evt) {\n this.foundation.handleChange(evt);\n }\n render() {\n const {\n children,\n options,\n prefixCls,\n direction,\n className,\n id,\n style,\n type,\n disabled\n } = this.props;\n const isPureCardType = type === strings.TYPE_PURECARD;\n const isCardType = type === strings.TYPE_CARD || isPureCardType;\n const prefix = prefixCls || css.PREFIX;\n const prefixClsDisplay = classnames({\n [prefix]: true,\n [`${prefix}-wrapper`]: true,\n [`${prefix}-${direction}`]: direction,\n [`${prefix}-${direction}-cardType`]: direction && isCardType,\n [`${prefix}-${direction}-pureCardType`]: direction && isPureCardType\n }, className);\n const realValue = this.state.value.slice();\n let inner;\n if (options) {\n inner = (options || []).map((option, index) => {\n if (typeof option === 'string') {\n return /*#__PURE__*/React.createElement(Checkbox, {\n role: \"listitem\",\n key: index,\n disabled: this.props.disabled,\n value: option,\n prefixCls: prefixCls\n }, option);\n } else {\n return /*#__PURE__*/React.createElement(Checkbox, {\n role: \"listitem\",\n key: index,\n disabled: option.disabled || this.props.disabled,\n value: option.value,\n prefixCls: prefixCls,\n extra: option.extra,\n className: option.className,\n style: option.style,\n onChange: option.onChange\n }, option.label);\n }\n });\n } else if (children) {\n inner = React.Children.toArray(children).map((itm, index) => /*#__PURE__*/React.cloneElement(itm, {\n key: index,\n role: 'listitem'\n }));\n }\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n id: id,\n role: \"list\",\n \"aria-label\": this.props['aria-label'],\n className: prefixClsDisplay,\n style: style,\n \"aria-labelledby\": this.props['aria-labelledby'],\n \"aria-describedby\": this.props['aria-describedby']\n }, this.getDataAttr(this.props)), /*#__PURE__*/React.createElement(Context.Provider, {\n value: {\n checkboxGroup: {\n onChange: this.onChange,\n value: realValue,\n disabled: this.props.disabled,\n name: this.foundation.getFormatName(),\n isCardType,\n isPureCardType\n }\n }\n }, inner));\n }\n}\nCheckboxGroup.propTypes = {\n 'aria-describedby': PropTypes.string,\n 'aria-errormessage': PropTypes.string,\n 'aria-invalid': PropTypes.bool,\n 'aria-labelledby': PropTypes.string,\n 'aria-required': PropTypes.bool,\n defaultValue: PropTypes.array,\n disabled: PropTypes.bool,\n name: PropTypes.string,\n options: PropTypes.array,\n value: PropTypes.array,\n onChange: PropTypes.func,\n children: PropTypes.node,\n prefixCls: PropTypes.string,\n direction: PropTypes.oneOf(strings.DIRECTION_SET),\n className: PropTypes.string,\n type: PropTypes.oneOf([strings.TYPE_DEFAULT, strings.TYPE_CARD, strings.TYPE_PURECARD]),\n style: PropTypes.object\n};\nCheckboxGroup.defaultProps = {\n disabled: false,\n onChange: () => {},\n type: strings.TYPE_DEFAULT,\n defaultValue: [],\n direction: strings.DEFAULT_DIRECTION\n};\nexport default CheckboxGroup;","import Checkbox from './checkbox';\nimport Group from './checkboxGroup';\nclass CheckboxWithGroup extends Checkbox {}\nCheckboxWithGroup.Group = Group;\nexport { CheckboxWithGroup, Checkbox };\nexport default CheckboxWithGroup;","import _isObject from \"lodash/isObject\";\nimport _isNumber from \"lodash/isNumber\";\nimport _values from \"lodash/values\";\nimport _unset from \"lodash/unset\";\nimport _toPath from \"lodash/toPath\";\nimport _has from \"lodash/has\";\nimport _set from \"lodash/set\";\nimport _get from \"lodash/get\";\nconst pathToArrayElem = path => {\n const pathArray = _toPath(path);\n // internal-issues:673\n const justNumber = _isNumber(path) && pathArray.length === 1;\n return justNumber ? false : Number.isInteger(+pathArray[pathArray.length - 1]);\n};\nfunction isEmptyObject(target) {\n /**\n * var a = {};\n * var b = { c: undefined }\n * var d = {\n * e: function(){},\n * f: Symbol(''),\n * }\n * the result of JSON.stringify(a/b/d) are same: '{}'\n * We can use the above features to remove keys with empty values in Form\n * But we cannot use JSON.stringify() directly, because if the input parameter of JSON.stringify includes fiberNode, it will cause an TypeError: 'Converting circular structure to JSON'\n * So we have to mock it's behavior, also, the form value cannot have Symbol or function type, it can be ignored\n */\n if (!_isObject(target)) {\n return false;\n } else {\n const valuesOfTarget = _values(target);\n // values(a) -> []\n // values(b) -> [undefined]\n if (!valuesOfTarget.length) {\n return true; // like target: {}\n } else {\n return valuesOfTarget.every(item => typeof item === 'undefined');\n }\n }\n}\nfunction cleanup(obj, path) {\n let pull = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n if (path.length === 0) {\n return;\n }\n const target = _get(obj, path);\n // remove undefined from array\n // if (Array.isArray(target) && pull) {\n // // only remove undefined form array from right to left\n // // Remove undefined from right to left\n // let lastIndex = findLastIndex(target, item => !isUndefined(item));\n // lodashRemove(target, (value, index, array) => index > lastIndex);\n // }\n // Delete object if its empty\n if (Array.isArray(target) && target.every(e => e == null)) {\n _unset(obj, path);\n } else if (isEmptyObject(target)) {\n _unset(obj, path);\n }\n // Recur\n cleanup(obj, path.slice(0, path.length - 1), pull);\n}\nexport function empty(object) {\n return _values(object).length === 0;\n}\nexport function get(object, path) {\n return _get(object, path);\n}\nexport function remove(object, path) {\n _unset(object, path);\n // a.b => [a, b]\n // arr[11].a => [arr, 11, a]\n let pathArray = _toPath(path);\n pathArray = pathArray.slice(0, pathArray.length - 1);\n cleanup(object, pathArray, false);\n}\nexport function set(object, path, value, allowEmpty) {\n if (allowEmpty) {\n return _set(object, path, value);\n }\n if (value !== undefined) {\n return _set(object, path, value);\n } else {\n // If the path is to an array leaf then we want to set to undefined\n // 将数组的叶子节点置为undefined时,例如 a.b[0] a.b[1] a.b[99]\n if (pathToArrayElem(path) && get(object, path) !== undefined) {\n _set(object, path, undefined);\n let pathArray = _toPath(path);\n pathArray = pathArray.slice(0, pathArray.length - 1);\n cleanup(object, pathArray, false);\n } else if (!pathToArrayElem(path) && get(object, path) !== undefined) {\n // Only delete the field if it needs to be deleted and its not a path to an array ( array leaf )\n // eg:\n /*\n When the non-array leaf node is set to undefined\n for example: a.b.c\n */\n remove(object, path);\n }\n }\n}\nexport function has(object, path) {\n return _has(object, path);\n}\n/**\n * set static properties from `srcObj` to `obj`\n * @param {object|Function} obj\n * @param {object|Function} srcObj\n * @returns {object|Function}\n */\nexport function forwardStatics(obj, srcObj) {\n if (obj && (typeof obj === 'function' || typeof obj === 'object') && srcObj && (typeof srcObj === 'function' || typeof srcObj === 'object')) {\n Object.entries(srcObj).forEach(_ref => {\n let [key, value] = _ref;\n obj[key] = value;\n });\n }\n return obj;\n}","import { VALIDATE_STATUS, BASE_CLASS_PREFIX } from '../base/constants';\nimport { numbers as popoverNumber, strings as POPOVER_STRINGS } from '../popover/constants';\nconst dayItemClasses = {\n DAY_TODAY: `${BASE_CLASS_PREFIX}-datepicker-day-today`,\n DAY_IN_RANGE: `${BASE_CLASS_PREFIX}-datepicker-day-inrange`,\n DAY_HOVER: `${BASE_CLASS_PREFIX}-datepicker-day-inhover`,\n DAY_SELECTED: `${BASE_CLASS_PREFIX}-datepicker-day-selected`,\n DAY_SELECTED_START: `${BASE_CLASS_PREFIX}-datepicker-day-selected-start`,\n DAY_SELECTED_END: `${BASE_CLASS_PREFIX}-datepicker-day-selected-end`,\n DAY_DISABLED: `${BASE_CLASS_PREFIX}-datepicker-day-disabled`,\n DAY_HOVER_DAY: `${BASE_CLASS_PREFIX}-datepicker-day-hoverday`,\n DAY_HOVER_DAY_OFFSET: `${BASE_CLASS_PREFIX}-datepicker-day-hoverday-offset`,\n DAY_IN_OFFSET_RANGE: `${BASE_CLASS_PREFIX}-datepicker-day-inoffsetrange`,\n DAY_SELECTED_RANGE_HOVER: `${BASE_CLASS_PREFIX}-datepicker-day-selectedrange-hover`,\n DAY_OFFSET_RANGE_START: `${BASE_CLASS_PREFIX}-datepicker-day-offsetrange-start`,\n DAY_OFFSET_RANGE_END: `${BASE_CLASS_PREFIX}-datepicker-day-offsetrange-end`,\n DAY_SELECTED_START_AFTER_HOVER: `${BASE_CLASS_PREFIX}-datepicker-day-selected-start-afterhover`,\n DAY_SELECTED_END_BEFORE_HOVER: `${BASE_CLASS_PREFIX}-datepicker-day-selected-end-beforehover`,\n DAY_HOVER_DAY_BEFORE_RANGE: `${BASE_CLASS_PREFIX}-datepicker-day-hoverday-beforerange`,\n DAY_HOVER_DAY_AFTER_RANGE: `${BASE_CLASS_PREFIX}-datepicker-day-hoverday-afterrange`,\n DAY_HOVER_DAY_IN_RANGE: `${BASE_CLASS_PREFIX}-datepicker-day-hoverday-inrange`,\n DAY_HOVER_DAY_AROUND_SINGLE_SELECTED: `${BASE_CLASS_PREFIX}-datepicker-day-hoverday-around-singleselected`\n};\nconst cssClasses = Object.assign({\n PREFIX: `${BASE_CLASS_PREFIX}-datepicker`,\n NAVIGATION: `${BASE_CLASS_PREFIX}-datepicker-navigation`,\n PANEL_YAM: `${BASE_CLASS_PREFIX}-datepicker-panel-yam`,\n MONTH: `${BASE_CLASS_PREFIX}-datepicker-month`,\n WEEKDAY: `${BASE_CLASS_PREFIX}-datepicker-weekday`,\n WEEKS: `${BASE_CLASS_PREFIX}-datepicker-weeks`,\n WEEK: `${BASE_CLASS_PREFIX}-datepicker-week`,\n DAY: `${BASE_CLASS_PREFIX}-datepicker-day`\n}, dayItemClasses);\nconst formatToken = {\n FORMAT_FULL_DATE: 'yyyy-MM-dd',\n FORMAT_TIME_PICKER: 'HH:mm:ss',\n FORMAT_DATE_TIME: 'yyyy-MM-dd HH:mm:ss',\n FORMAT_YEAR_MONTH: 'yyyy-MM'\n};\nconst strings = Object.assign({\n DEFAULT_SEPARATOR_MULTIPLE: ',',\n DEFAULT_SEPARATOR_RANGE: ' ~ ',\n SIZE_SET: ['small', 'default', 'large'],\n TYPE_SET: ['date', 'dateRange', 'year', 'month', 'monthRange', 'dateTime', 'dateTimeRange'],\n PRESET_POSITION_SET: ['left', 'right', 'top', 'bottom'],\n DENSITY_SET: ['default', 'compact'],\n PANEL_TYPE_LEFT: 'left',\n PANEL_TYPE_RIGHT: 'right',\n STATUS: VALIDATE_STATUS,\n POSITION_SET: POPOVER_STRINGS.POSITION_SET,\n POSITION_INLINE_INPUT: 'leftTopOver'\n}, formatToken);\nconst numbers = {\n WEEK_START_ON: 0,\n WEEK_HEIGHT: 36,\n SPACING: popoverNumber.SPACING,\n SPACING_INSET_INPUT: 1\n};\nexport { cssClasses, strings, numbers };","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param {*} value - the value to check\n * @returns {boolean} true if the given value is a date\n * @throws {TypeError} 1 arguments required\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport default function isDate(value) {\n requiredArgs(1, arguments);\n return value instanceof Date || _typeof(value) === 'object' && Object.prototype.toString.call(value) === '[object Date]';\n}","import isDate from \"../isDate/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport default function isValid(dirtyDate) {\n requiredArgs(1, arguments);\n if (!isDate(dirtyDate) && typeof dirtyDate !== 'number') {\n return false;\n }\n var date = toDate(dirtyDate);\n return !isNaN(Number(date));\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfSecond\n * @category Second Helpers\n * @summary Return the start of a second for the given date.\n *\n * @description\n * Return the start of a second for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a second\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a second for 1 December 2014 22:15:45.400:\n * const result = startOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.000\n */\nexport default function startOfSecond(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setMilliseconds(0);\n return date;\n}","import startOfSecond from \"../startOfSecond/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameSecond\n * @category Second Helpers\n * @summary Are the given dates in the same second (and hour and day)?\n *\n * @description\n * Are the given dates in the same second (and hour and day)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same second (and hour and day)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:30:15.000 and 4 September 2014 06:30.15.500 in the same second?\n * const result = isSameSecond(\n * new Date(2014, 8, 4, 6, 30, 15),\n * new Date(2014, 8, 4, 6, 30, 15, 500)\n * )\n * //=> true\n *\n * @example\n * // Are 4 September 2014 06:00:15.000 and 4 September 2014 06:01.15.000 in the same second?\n * const result = isSameSecond(\n * new Date(2014, 8, 4, 6, 0, 15),\n * new Date(2014, 8, 4, 6, 1, 15)\n * )\n * //=> false\n *\n * @example\n * // Are 4 September 2014 06:00:15.000 and 5 September 2014 06:00.15.000 in the same second?\n * const result = isSameSecond(\n * new Date(2014, 8, 4, 6, 0, 15),\n * new Date(2014, 8, 5, 6, 0, 15)\n * )\n * //=> false\n */\nexport default function isSameSecond(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeftStartOfSecond = startOfSecond(dirtyDateLeft);\n var dateRightStartOfSecond = startOfSecond(dirtyDateRight);\n return dateLeftStartOfSecond.getTime() === dateRightStartOfSecond.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isEqual\n * @category Common Helpers\n * @summary Are the given dates equal?\n *\n * @description\n * Are the given dates equal?\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Boolean} the dates are equal\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 July 2014 06:30:45.000 and 2 July 2014 06:30:45.500 equal?\n * const result = isEqual(\n * new Date(2014, 6, 2, 6, 30, 45, 0),\n * new Date(2014, 6, 2, 6, 30, 45, 500)\n * )\n * //=> false\n */\nexport default function isEqual(dirtyLeftDate, dirtyRightDate) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyLeftDate);\n var dateRight = toDate(dirtyRightDate);\n return dateLeft.getTime() === dateRight.getTime();\n}","import addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\nexport default function subMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMilliseconds(dirtyDate, -amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\nexport default function addMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var timestamp = toDate(dirtyDate).getTime();\n var amount = toInteger(dirtyAmount);\n return new Date(timestamp + amount);\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function startOfUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nexport default function getUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getUTCFullYear();\n var fourthOfJanuaryOfNextYear = new Date(0);\n fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear);\n var fourthOfJanuaryOfThisYear = new Date(0);\n fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear);\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport startOfUTCISOWeekYear from \"../startOfUTCISOWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\nexport default function getUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime();\n\n // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import getUTCISOWeekYear from \"../getUTCISOWeekYear/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function startOfUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var year = getUTCISOWeekYear(dirtyDate);\n var fourthOfJanuary = new Date(0);\n fourthOfJanuary.setUTCFullYear(year, 0, 4);\n fourthOfJanuary.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCISOWeek(fourthOfJanuary);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function getUTCWeekYear(dirtyDate, options) {\n var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getUTCFullYear();\n var defaultOptions = getDefaultOptions();\n var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n\n // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n var firstWeekOfNextYear = new Date(0);\n firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, options);\n var firstWeekOfThisYear = new Date(0);\n firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, options);\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport startOfUTCWeekYear from \"../startOfUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\nexport default function getUTCWeek(dirtyDate, options) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime();\n\n // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import getUTCWeekYear from \"../getUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function startOfUTCWeekYear(dirtyDate, options) {\n var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n requiredArgs(1, arguments);\n var defaultOptions = getDefaultOptions();\n var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n var year = getUTCWeekYear(dirtyDate, options);\n var firstWeek = new Date(0);\n firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCWeek(firstWeek, options);\n return date;\n}","export default function addLeadingZeros(number, targetLength) {\n var sign = number < 0 ? '-' : '';\n var output = Math.abs(number).toString();\n while (output.length < targetLength) {\n output = '0' + output;\n }\n return sign + output;\n}","import addLeadingZeros from \"../../addLeadingZeros/index.js\";\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\nvar formatters = {\n // Year\n y: function y(date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n var signedYear = date.getUTCFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length);\n },\n // Month\n M: function M(date, token) {\n var month = date.getUTCMonth();\n return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n // Day of the month\n d: function d(date, token) {\n return addLeadingZeros(date.getUTCDate(), token.length);\n },\n // AM or PM\n a: function a(date, token) {\n var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am';\n switch (token) {\n case 'a':\n case 'aa':\n return dayPeriodEnumValue.toUpperCase();\n case 'aaa':\n return dayPeriodEnumValue;\n case 'aaaaa':\n return dayPeriodEnumValue[0];\n case 'aaaa':\n default:\n return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.';\n }\n },\n // Hour [1-12]\n h: function h(date, token) {\n return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length);\n },\n // Hour [0-23]\n H: function H(date, token) {\n return addLeadingZeros(date.getUTCHours(), token.length);\n },\n // Minute\n m: function m(date, token) {\n return addLeadingZeros(date.getUTCMinutes(), token.length);\n },\n // Second\n s: function s(date, token) {\n return addLeadingZeros(date.getUTCSeconds(), token.length);\n },\n // Fraction of second\n S: function S(date, token) {\n var numberOfDigits = token.length;\n var milliseconds = date.getUTCMilliseconds();\n var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3));\n return addLeadingZeros(fractionalSeconds, token.length);\n }\n};\nexport default formatters;","import getUTCDayOfYear from \"../../../_lib/getUTCDayOfYear/index.js\";\nimport getUTCISOWeek from \"../../../_lib/getUTCISOWeek/index.js\";\nimport getUTCISOWeekYear from \"../../../_lib/getUTCISOWeekYear/index.js\";\nimport getUTCWeek from \"../../../_lib/getUTCWeek/index.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport addLeadingZeros from \"../../addLeadingZeros/index.js\";\nimport lightFormatters from \"../lightFormatters/index.js\";\nvar dayPeriodEnum = {\n am: 'am',\n pm: 'pm',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n};\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nvar formatters = {\n // Era\n G: function G(date, token, localize) {\n var era = date.getUTCFullYear() > 0 ? 1 : 0;\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return localize.era(era, {\n width: 'abbreviated'\n });\n // A, B\n case 'GGGGG':\n return localize.era(era, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n case 'GGGG':\n default:\n return localize.era(era, {\n width: 'wide'\n });\n }\n },\n // Year\n y: function y(date, token, localize) {\n // Ordinal number\n if (token === 'yo') {\n var signedYear = date.getUTCFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, {\n unit: 'year'\n });\n }\n return lightFormatters.y(date, token);\n },\n // Local week-numbering year\n Y: function Y(date, token, localize, options) {\n var signedWeekYear = getUTCWeekYear(date, options);\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n // Two digit year\n if (token === 'YY') {\n var twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n }\n\n // Ordinal number\n if (token === 'Yo') {\n return localize.ordinalNumber(weekYear, {\n unit: 'year'\n });\n }\n\n // Padding\n return addLeadingZeros(weekYear, token.length);\n },\n // ISO week-numbering year\n R: function R(date, token) {\n var isoWeekYear = getUTCISOWeekYear(date);\n\n // Padding\n return addLeadingZeros(isoWeekYear, token.length);\n },\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function u(date, token) {\n var year = date.getUTCFullYear();\n return addLeadingZeros(year, token.length);\n },\n // Quarter\n Q: function Q(date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n return String(quarter);\n // 01, 02, 03, 04\n case 'QQ':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case 'Qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n case 'QQQ':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case 'QQQQQ':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n case 'QQQQ':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone quarter\n q: function q(date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n return String(quarter);\n // 01, 02, 03, 04\n case 'qq':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case 'qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n case 'qqq':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case 'qqqqq':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n case 'qqqq':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Month\n M: function M(date, token, localize) {\n var month = date.getUTCMonth();\n switch (token) {\n case 'M':\n case 'MM':\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n case 'Mo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n case 'MMM':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // J, F, ..., D\n case 'MMMMM':\n return localize.month(month, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n case 'MMMM':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone month\n L: function L(date, token, localize) {\n var month = date.getUTCMonth();\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return String(month + 1);\n // 01, 02, ..., 12\n case 'LL':\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n case 'Lo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n case 'LLL':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // J, F, ..., D\n case 'LLLLL':\n return localize.month(month, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n case 'LLLL':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Local week of year\n w: function w(date, token, localize, options) {\n var week = getUTCWeek(date, options);\n if (token === 'wo') {\n return localize.ordinalNumber(week, {\n unit: 'week'\n });\n }\n return addLeadingZeros(week, token.length);\n },\n // ISO week of year\n I: function I(date, token, localize) {\n var isoWeek = getUTCISOWeek(date);\n if (token === 'Io') {\n return localize.ordinalNumber(isoWeek, {\n unit: 'week'\n });\n }\n return addLeadingZeros(isoWeek, token.length);\n },\n // Day of the month\n d: function d(date, token, localize) {\n if (token === 'do') {\n return localize.ordinalNumber(date.getUTCDate(), {\n unit: 'date'\n });\n }\n return lightFormatters.d(date, token);\n },\n // Day of year\n D: function D(date, token, localize) {\n var dayOfYear = getUTCDayOfYear(date);\n if (token === 'Do') {\n return localize.ordinalNumber(dayOfYear, {\n unit: 'dayOfYear'\n });\n }\n return addLeadingZeros(dayOfYear, token.length);\n },\n // Day of week\n E: function E(date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n case 'EEEEE':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n case 'EEEEEE':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n case 'EEEE':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Local day of week\n e: function e(date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case 'e':\n return String(localDayOfWeek);\n // Padded numerical value\n case 'ee':\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n case 'eo':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n case 'eee':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n case 'eeeee':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n case 'eeeeee':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n case 'eeee':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone local day of week\n c: function c(date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (same as in `e`)\n case 'c':\n return String(localDayOfWeek);\n // Padded numerical value\n case 'cc':\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n case 'co':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n case 'ccc':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // T\n case 'ccccc':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n case 'cccccc':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'standalone'\n });\n // Tuesday\n case 'cccc':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // ISO day of week\n i: function i(date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n switch (token) {\n // 2\n case 'i':\n return String(isoDayOfWeek);\n // 02\n case 'ii':\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n case 'io':\n return localize.ordinalNumber(isoDayOfWeek, {\n unit: 'day'\n });\n // Tue\n case 'iii':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n case 'iiiii':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n case 'iiiiii':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n case 'iiii':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM or PM\n a: function a(date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n switch (token) {\n case 'a':\n case 'aa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n case 'aaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n case 'aaaaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n case 'aaaa':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM, PM, midnight, noon\n b: function b(date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n }\n switch (token) {\n case 'b':\n case 'bb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n case 'bbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n case 'bbbbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n case 'bbbb':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // in the morning, in the afternoon, in the evening, at night\n B: function B(date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n case 'BBBBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n case 'BBBB':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Hour [1-12]\n h: function h(date, token, localize) {\n if (token === 'ho') {\n var hours = date.getUTCHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n return lightFormatters.h(date, token);\n },\n // Hour [0-23]\n H: function H(date, token, localize) {\n if (token === 'Ho') {\n return localize.ordinalNumber(date.getUTCHours(), {\n unit: 'hour'\n });\n }\n return lightFormatters.H(date, token);\n },\n // Hour [0-11]\n K: function K(date, token, localize) {\n var hours = date.getUTCHours() % 12;\n if (token === 'Ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n return addLeadingZeros(hours, token.length);\n },\n // Hour [1-24]\n k: function k(date, token, localize) {\n var hours = date.getUTCHours();\n if (hours === 0) hours = 24;\n if (token === 'ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n return addLeadingZeros(hours, token.length);\n },\n // Minute\n m: function m(date, token, localize) {\n if (token === 'mo') {\n return localize.ordinalNumber(date.getUTCMinutes(), {\n unit: 'minute'\n });\n }\n return lightFormatters.m(date, token);\n },\n // Second\n s: function s(date, token, localize) {\n if (token === 'so') {\n return localize.ordinalNumber(date.getUTCSeconds(), {\n unit: 'second'\n });\n }\n return lightFormatters.s(date, token);\n },\n // Fraction of second\n S: function S(date, token) {\n return lightFormatters.S(date, token);\n },\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function X(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n if (timezoneOffset === 0) {\n return 'Z';\n }\n switch (token) {\n // Hours and optional minutes\n case 'X':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n case 'XXXX':\n case 'XX':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n case 'XXXXX':\n case 'XXX': // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function x(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n switch (token) {\n // Hours and optional minutes\n case 'x':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n case 'xxxx':\n case 'xx':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n case 'xxxxx':\n case 'xxx': // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (GMT)\n O: function O(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n switch (token) {\n // Short\n case 'O':\n case 'OO':\n case 'OOO':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n case 'OOOO':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (specific non-location)\n z: function z(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n switch (token) {\n // Short\n case 'z':\n case 'zz':\n case 'zzz':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n case 'zzzz':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Seconds timestamp\n t: function t(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = Math.floor(originalDate.getTime() / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n // Milliseconds timestamp\n T: function T(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = originalDate.getTime();\n return addLeadingZeros(timestamp, token.length);\n }\n};\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = Math.floor(absOffset / 60);\n var minutes = absOffset % 60;\n if (minutes === 0) {\n return sign + String(hours);\n }\n var delimiter = dirtyDelimiter || '';\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {\n if (offset % 60 === 0) {\n var sign = offset > 0 ? '-' : '+';\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n return formatTimezone(offset, dirtyDelimiter);\n}\nfunction formatTimezone(offset, dirtyDelimiter) {\n var delimiter = dirtyDelimiter || '';\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = addLeadingZeros(Math.floor(absOffset / 60), 2);\n var minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\nexport default formatters;","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000;\nexport default function getUTCDayOfYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var timestamp = date.getTime();\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n var startOfYearTimestamp = date.getTime();\n var difference = timestamp - startOfYearTimestamp;\n return Math.floor(difference / MILLISECONDS_IN_DAY) + 1;\n}","var dateLongFormatter = function dateLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'P':\n return formatLong.date({\n width: 'short'\n });\n case 'PP':\n return formatLong.date({\n width: 'medium'\n });\n case 'PPP':\n return formatLong.date({\n width: 'long'\n });\n case 'PPPP':\n default:\n return formatLong.date({\n width: 'full'\n });\n }\n};\nvar timeLongFormatter = function timeLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'p':\n return formatLong.time({\n width: 'short'\n });\n case 'pp':\n return formatLong.time({\n width: 'medium'\n });\n case 'ppp':\n return formatLong.time({\n width: 'long'\n });\n case 'pppp':\n default:\n return formatLong.time({\n width: 'full'\n });\n }\n};\nvar dateTimeLongFormatter = function dateTimeLongFormatter(pattern, formatLong) {\n var matchResult = pattern.match(/(P+)(p+)?/) || [];\n var datePattern = matchResult[1];\n var timePattern = matchResult[2];\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n var dateTimeFormat;\n switch (datePattern) {\n case 'P':\n dateTimeFormat = formatLong.dateTime({\n width: 'short'\n });\n break;\n case 'PP':\n dateTimeFormat = formatLong.dateTime({\n width: 'medium'\n });\n break;\n case 'PPP':\n dateTimeFormat = formatLong.dateTime({\n width: 'long'\n });\n break;\n case 'PPPP':\n default:\n dateTimeFormat = formatLong.dateTime({\n width: 'full'\n });\n break;\n }\n return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));\n};\nvar longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter\n};\nexport default longFormatters;","/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport default function getTimezoneOffsetInMilliseconds(date) {\n var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n utcDate.setUTCFullYear(date.getFullYear());\n return date.getTime() - utcDate.getTime();\n}","var protectedDayOfYearTokens = ['D', 'DD'];\nvar protectedWeekYearTokens = ['YY', 'YYYY'];\nexport function isProtectedDayOfYearToken(token) {\n return protectedDayOfYearTokens.indexOf(token) !== -1;\n}\nexport function isProtectedWeekYearToken(token) {\n return protectedWeekYearTokens.indexOf(token) !== -1;\n}\nexport function throwProtectedError(token, format, input) {\n if (token === 'YYYY') {\n throw new RangeError(\"Use `yyyy` instead of `YYYY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n } else if (token === 'YY') {\n throw new RangeError(\"Use `yy` instead of `YY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n } else if (token === 'D') {\n throw new RangeError(\"Use `d` instead of `D` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n } else if (token === 'DD') {\n throw new RangeError(\"Use `dd` instead of `DD` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n }\n}","var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'less than a second',\n other: 'less than {{count}} seconds'\n },\n xSeconds: {\n one: '1 second',\n other: '{{count}} seconds'\n },\n halfAMinute: 'half a minute',\n lessThanXMinutes: {\n one: 'less than a minute',\n other: 'less than {{count}} minutes'\n },\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n aboutXHours: {\n one: 'about 1 hour',\n other: 'about {{count}} hours'\n },\n xHours: {\n one: '1 hour',\n other: '{{count}} hours'\n },\n xDays: {\n one: '1 day',\n other: '{{count}} days'\n },\n aboutXWeeks: {\n one: 'about 1 week',\n other: 'about {{count}} weeks'\n },\n xWeeks: {\n one: '1 week',\n other: '{{count}} weeks'\n },\n aboutXMonths: {\n one: 'about 1 month',\n other: 'about {{count}} months'\n },\n xMonths: {\n one: '1 month',\n other: '{{count}} months'\n },\n aboutXYears: {\n one: 'about 1 year',\n other: 'about {{count}} years'\n },\n xYears: {\n one: '1 year',\n other: '{{count}} years'\n },\n overXYears: {\n one: 'over 1 year',\n other: 'over {{count}} years'\n },\n almostXYears: {\n one: 'almost 1 year',\n other: 'almost {{count}} years'\n }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === 'string') {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace('{{count}}', count.toString());\n }\n if (options !== null && options !== void 0 && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return 'in ' + result;\n } else {\n return result + ' ago';\n }\n }\n return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE, MMMM do, y',\n long: 'MMMM do, y',\n medium: 'MMM d, y',\n short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n full: 'h:mm:ss a zzzz',\n long: 'h:mm:ss a z',\n medium: 'h:mm:ss a',\n short: 'h:mm a'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: '{{date}}, {{time}}',\n short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: 'full'\n }),\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: 'full'\n }),\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: 'full'\n })\n};\nexport default formatLong;","var formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\nexport default formatRelative;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['B', 'A'],\n abbreviated: ['BC', 'AD'],\n wide: ['Before Christ', 'Anno Domini']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar dayValues = {\n narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n var number = Number(dirtyNumber);\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n var rem100 = number % 100;\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + 'st';\n case 2:\n return number + 'nd';\n case 3:\n return number + 'rd';\n }\n }\n return number + 'th';\n};\nvar localize = {\n ordinalNumber: ordinalNumber,\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: 'wide'\n }),\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: 'wide',\n argumentCallback: function argumentCallback(quarter) {\n return quarter - 1;\n }\n }),\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: 'wide'\n }),\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: 'wide'\n }),\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: 'wide',\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: 'wide'\n })\n};\nexport default localize;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i\n};\nvar parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n};\nvar parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value, 10);\n }\n }),\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseEraPatterns,\n defaultParseWidth: 'any'\n }),\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: 'any',\n valueCallback: function valueCallback(index) {\n return index + 1;\n }\n }),\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: 'any'\n }),\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseDayPatterns,\n defaultParseWidth: 'any'\n }),\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: 'any',\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: 'any'\n })\n};\nexport default match;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n code: 'en-US',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1\n }\n};\nexport default locale;","import defaultLocale from \"../../locale/en-US/index.js\";\nexport default defaultLocale;","import isValid from \"../isValid/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport formatters from \"../_lib/format/formatters/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\"; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\n\nexport default function format(dirtyDate, dirtyFormatStr, options) {\n var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4;\n requiredArgs(2, arguments);\n var formatStr = String(dirtyFormatStr);\n var defaultOptions = getDefaultOptions();\n var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n var firstWeekContainsDate = toInteger((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1);\n\n // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n var weekStartsOn = toInteger((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0);\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n if (!locale.localize) {\n throw new RangeError('locale must contain localize property');\n }\n if (!locale.formatLong) {\n throw new RangeError('locale must contain formatLong property');\n }\n var originalDate = toDate(dirtyDate);\n if (!isValid(originalDate)) {\n throw new RangeError('Invalid time value');\n }\n\n // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate);\n var utcDate = subMilliseconds(originalDate, timezoneOffset);\n var formatterOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale,\n _originalDate: originalDate\n };\n var result = formatStr.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n if (firstCharacter === 'p' || firstCharacter === 'P') {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n }).join('').match(formattingTokensRegExp).map(function (substring) {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return \"'\";\n }\n var firstCharacter = substring[0];\n if (firstCharacter === \"'\") {\n return cleanEscapedString(substring);\n }\n var formatter = formatters[firstCharacter];\n if (formatter) {\n if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, String(dirtyDate));\n }\n if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, String(dirtyDate));\n }\n return formatter(utcDate, substring, locale.localize, formatterOptions);\n }\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n }\n return substring;\n }).join('');\n return result;\n}\nfunction cleanEscapedString(input) {\n var matched = input.match(escapedStringRegExp);\n if (!matched) {\n return input;\n }\n return matched[1].replace(doubleQuoteRegExp, \"'\");\n}","export default function isValidDate(date) {\n return date && Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date);\n}","import isValidDate from './isValidDate';\nimport isNumber from '../../utils/isNumber';\nexport default function isTimestamp(ts) {\n return isNumber(ts) && isValidDate(new Date(ts));\n}","export default function isNumber(value) {\n return typeof value === 'number' || Object.prototype.toString.call(value) === '[object Number]';\n}","import { toDate, format as dateFnsFormat, utcToZonedTime as dateFnsUtcToZonedTime, zonedTimeToUtc as dateFnsZonedTimeToUtc } from 'date-fns-tz';\nimport { parse as dateFnsParse } from 'date-fns';\n/**\n * Need to be IANA logo without daylight saving time\n */\nexport const IANAOffsetMap = [[-11, ['Pacific/Midway']], [-10, ['Pacific/Honolulu']], [-9.5, ['Pacific/Marquesas']], [-9, ['Pacific/Gambier']], [-8, ['Pacific/Pitcairn']], [-7, ['America/Phoenix']], [-6, ['America/Tegucigalpa']], [-5, ['America/Bogota']], [-4, ['America/Puerto_Rico']], [-3.5, ['America/St_Johns']], [-3, ['America/Montevideo']], [-2, ['Atlantic/South_Georgia']], [-1, ['Atlantic/Cape_Verde']], [0, ['Africa/Accra']], [1, ['Africa/Bangui']], [2, ['Africa/Cairo']], [3, ['Asia/Bahrain', 'Indian/Antananarivo']], [3.5, ['Asia/Tehran']], [4, ['Asia/Dubai', 'Asia/Muscat']], [4.5, ['Asia/Kabul']], [5, ['Asia/Samarkand', 'Asia/Karachi']], [5.5, ['Asia/Kolkata']], [5.75, ['Asia/Kathmandu']], [6, ['Asia/Dhaka']], [6.5, ['Asia/Rangoon', 'Asia/Rangoon']], [7, ['Asia/Jakarta', 'Asia/Phnom_Penh', 'Asia/Bangkok']], [8, ['Asia/Shanghai', 'Asia/Singapore']], [8.75, ['Australia/Eucla']], [9, ['Asia/Tokyo', 'Asia/Seoul', 'Asia/Pyongyang']], [9.5, ['Australia/Darwin']], [10, ['Pacific/Guam']], [10.5, ['Australia/Adelaide']], [11, ['Pacific/Guadalcanal']], [12, ['Pacific/Funafuti']], [13, ['Pacific/Enderbury']], [13.75, ['Pacific/Chatham']], [14, ['Pacific/Kiritimati']]];\n/**\n * Etc/GMT* no DST\n * @see https://data.iana.org/time-zones/tzdb/etcetera\n */\nconst IANAEtcGMTOffsetMap = {\n '0': 'Etc/GMT',\n '1': 'Etc/GMT-1',\n '2': 'Etc/GMT-2',\n '3': 'Etc/GMT-3',\n '4': 'Etc/GMT-4',\n '5': 'Etc/GMT-5',\n '6': 'Etc/GMT-6',\n '7': 'Etc/GMT-7',\n '8': 'Etc/GMT-8',\n '9': 'Etc/GMT-9',\n '10': 'Etc/GMT-10',\n '11': 'Etc/GMT-11',\n '12': 'Etc/GMT-12',\n '13': 'Etc/GMT-13',\n '14': 'Etc/GMT-14',\n '-1': 'Etc/GMT+1',\n '-2': 'Etc/GMT+2',\n '-3': 'Etc/GMT+3',\n '-4': 'Etc/GMT+4',\n '-5': 'Etc/GMT+5',\n '-6': 'Etc/GMT+6',\n '-7': 'Etc/GMT+7',\n '-8': 'Etc/GMT+8',\n '-9': 'Etc/GMT+9',\n '-10': 'Etc/GMT+10',\n '-11': 'Etc/GMT+11',\n '-12': 'Etc/GMT+12'\n};\nconst GMTStringReg = /([\\-\\+]{1})(\\d{2})\\:(\\d{2})/;\n/**\n *\n * @param {string|number} tz\n * @returns {number|undefined}\n */\nexport const toIANA = tz => {\n let matches = null;\n if (typeof tz === 'string') {\n matches = tz.match(GMTStringReg);\n if (!matches) {\n return tz;\n }\n const symbol = parseInt(matches[1] + 1, 10); // => -1 or 1\n const hourOffset = parseInt(matches[2], 10);\n const minuteOffset = parseInt(matches[3], 10);\n tz = symbol * (hourOffset + minuteOffset / 60);\n }\n if (typeof tz === 'number') {\n // if tz can be transformed to a Etc/GMT* and browser supports it\n if (tz in IANAEtcGMTOffsetMap) {\n const etcGMTtimeZone = IANAEtcGMTOffsetMap[tz];\n if (isValidTimezoneIANAString(etcGMTtimeZone)) {\n return etcGMTtimeZone;\n }\n }\n const found = IANAOffsetMap.find(item => item[0] === tz);\n return found && found[1][0];\n }\n};\nconst validIANATimezoneCache = {};\n/**\n * @see https://github.com/marnusw/date-fns-tz/blob/a92e0ad017d101a0c50e39a63ef5d322b4d849f6/src/_lib/tzParseTimezone/index.js#L137\n */\nexport function isValidTimezoneIANAString(timeZoneString) {\n if (validIANATimezoneCache[timeZoneString]) return true;\n try {\n new Intl.DateTimeFormat(undefined, {\n timeZone: timeZoneString\n });\n validIANATimezoneCache[timeZoneString] = true;\n return true;\n } catch (error) {\n return false;\n }\n}\n/**\n *\n * @param {string | number | Date} date\n * @param {string} formatToken\n * @param {object} [options]\n * @param {string} [options.timeZone]\n * @returns {Date}\n */\n/* istanbul ignore next */\nconst parse = (date, formatToken, options) => {\n if (typeof date === 'string') {\n date = dateFnsParse(date, formatToken, new Date(), options);\n }\n if (options && options.timeZone != null && options.timeZone !== '') {\n const timeZone = toIANA(options.timeZone);\n options = Object.assign(Object.assign({}, options), {\n timeZone\n });\n }\n return toDate(date, options);\n};\n/* istanbul ignore next */\nconst format = (date, formatToken, options) => {\n if (options && options.timeZone != null && options.timeZone !== '') {\n const timeZone = toIANA(options.timeZone);\n options = Object.assign(Object.assign({}, options), {\n timeZone\n });\n date = dateFnsUtcToZonedTime(date, timeZone, options);\n }\n return dateFnsFormat(date, formatToken, options);\n};\n/**\n * Returns a Date which will format as the local time of any time zone from a specific UTC time\n *\n * @example\n * ```javascript\n * import { utcToZonedTime } from 'date-fns-tz'\n * const { isoDate, timeZone } = fetchInitialValues() // 2014-06-25T10:00:00.000Z, America/New_York\n * const date = utcToZonedTime(isoDate, timeZone) // In June 10am UTC is 6am in New York (-04:00)\n * renderDatePicker(date) // 2014-06-25 06:00:00 (in the system time zone)\n * renderTimeZoneSelect(timeZone) // America/New_York\n * ```\n *\n * @see https://github.com/marnusw/date-fns-tz#utctozonedtime\n */\nconst utcToZonedTime = (date, timeZone, options) => dateFnsUtcToZonedTime(date, toIANA(timeZone), options);\n/**\n * Given a date and any time zone, returns a Date with the equivalent UTC time\n *\n * @example\n * ```\n * import { zonedTimeToUtc } from 'date-fns-tz'\n * const date = getDatePickerValue() // e.g. 2014-06-25 10:00:00 (picked in any time zone)\n * const timeZone = getTimeZoneValue() // e.g. America/Los_Angeles\n * const utcDate = zonedTimeToUtc(date, timeZone) // In June 10am in Los Angeles is 5pm UTC\n * postToServer(utcDate.toISOString(), timeZone) // post 2014-06-25T17:00:00.000Z, America/Los_Angeles\n * ```\n *\n * @see https://github.com/marnusw/date-fns-tz#zonedtimetoutc\n */\nconst zonedTimeToUtc = (date, timeZone, options) => dateFnsZonedTimeToUtc(date, toIANA(timeZone), options);\n/**\n * return current system hour offset based on utc:\n *\n * ```\n * 8 => \"GMT+08:00\"\n * -9.5 => \"GMT-09:30\"\n * -8 => \"GMT-08:00\"\n * ```\n */\nconst getCurrentTimeZone = () => new Date().getTimezoneOffset() / 60;\nexport { format, parse, utcToZonedTime, zonedTimeToUtc, getCurrentTimeZone };","function _arrayLikeToArray(r, a) {\n (null == a || a > r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\nexport { _arrayLikeToArray as default };","import unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nfunction _createForOfIteratorHelper(r, e) {\n var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (!t) {\n if (Array.isArray(r) || (t = unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) {\n t && (r = t);\n var _n = 0,\n F = function F() {};\n return {\n s: F,\n n: function n() {\n return _n >= r.length ? {\n done: !0\n } : {\n done: !1,\n value: r[_n++]\n };\n },\n e: function e(r) {\n throw r;\n },\n f: F\n };\n }\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n var o,\n a = !0,\n u = !1;\n return {\n s: function s() {\n t = t.call(r);\n },\n n: function n() {\n var r = t.next();\n return a = r.done, r;\n },\n e: function e(r) {\n u = !0, o = r;\n },\n f: function f() {\n try {\n a || null == t[\"return\"] || t[\"return\"]();\n } finally {\n if (u) throw o;\n }\n }\n };\n}\nexport { _createForOfIteratorHelper as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _unsupportedIterableToArray(r, a) {\n if (r) {\n if (\"string\" == typeof r) return arrayLikeToArray(r, a);\n var t = {}.toString.call(r).slice(8, -1);\n return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;\n }\n}\nexport { _unsupportedIterableToArray as default };","export default function assign(target, object) {\n if (target == null) {\n throw new TypeError('assign requires that input parameter not be null or undefined');\n }\n for (var property in object) {\n if (Object.prototype.hasOwnProperty.call(object, property)) {\n ;\n target[property] = object[property];\n }\n }\n return target;\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inherits(t, e) {\n if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n t.prototype = Object.create(e && e.prototype, {\n constructor: {\n value: t,\n writable: !0,\n configurable: !0\n }\n }), Object.defineProperty(t, \"prototype\", {\n writable: !1\n }), e && setPrototypeOf(t, e);\n}\nexport { _inherits as default };","function _getPrototypeOf(t) {\n return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n return t.__proto__ || Object.getPrototypeOf(t);\n }, _getPrototypeOf(t);\n}\nexport { _getPrototypeOf as default };","function _isNativeReflectConstruct() {\n try {\n var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n } catch (t) {}\n return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {\n return !!t;\n })();\n}\nexport { _isNativeReflectConstruct as default };","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nfunction _createSuper(t) {\n var r = isNativeReflectConstruct();\n return function () {\n var e,\n o = getPrototypeOf(t);\n if (r) {\n var s = getPrototypeOf(this).constructor;\n e = Reflect.construct(o, arguments, s);\n } else e = o.apply(this, arguments);\n return possibleConstructorReturn(this, e);\n };\n}\nexport { _createSuper as default };","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nfunction _possibleConstructorReturn(t, e) {\n if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e;\n if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n return assertThisInitialized(t);\n}\nexport { _possibleConstructorReturn as default };","function _classCallCheck(a, n) {\n if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nexport { _classCallCheck as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(e, r) {\n for (var t = 0; t < r.length; t++) {\n var o = r[t];\n o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n }\n}\nfunction _createClass(e, r, t) {\n return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n writable: !1\n }), e;\n}\nexport { _createClass as default };","import _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nvar TIMEZONE_UNIT_PRIORITY = 10;\nexport var Setter = /*#__PURE__*/function () {\n function Setter() {\n _classCallCheck(this, Setter);\n _defineProperty(this, \"priority\", void 0);\n _defineProperty(this, \"subPriority\", 0);\n }\n _createClass(Setter, [{\n key: \"validate\",\n value: function validate(_utcDate, _options) {\n return true;\n }\n }]);\n return Setter;\n}();\nexport var ValueSetter = /*#__PURE__*/function (_Setter) {\n _inherits(ValueSetter, _Setter);\n var _super = _createSuper(ValueSetter);\n function ValueSetter(value, validateValue, setValue, priority, subPriority) {\n var _this;\n _classCallCheck(this, ValueSetter);\n _this = _super.call(this);\n _this.value = value;\n _this.validateValue = validateValue;\n _this.setValue = setValue;\n _this.priority = priority;\n if (subPriority) {\n _this.subPriority = subPriority;\n }\n return _this;\n }\n _createClass(ValueSetter, [{\n key: \"validate\",\n value: function validate(utcDate, options) {\n return this.validateValue(utcDate, this.value, options);\n }\n }, {\n key: \"set\",\n value: function set(utcDate, flags, options) {\n return this.setValue(utcDate, flags, this.value, options);\n }\n }]);\n return ValueSetter;\n}(Setter);\nexport var DateToSystemTimezoneSetter = /*#__PURE__*/function (_Setter2) {\n _inherits(DateToSystemTimezoneSetter, _Setter2);\n var _super2 = _createSuper(DateToSystemTimezoneSetter);\n function DateToSystemTimezoneSetter() {\n var _this2;\n _classCallCheck(this, DateToSystemTimezoneSetter);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this2 = _super2.call.apply(_super2, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this2), \"priority\", TIMEZONE_UNIT_PRIORITY);\n _defineProperty(_assertThisInitialized(_this2), \"subPriority\", -1);\n return _this2;\n }\n _createClass(DateToSystemTimezoneSetter, [{\n key: \"set\",\n value: function set(date, flags) {\n if (flags.timestampIsSet) {\n return date;\n }\n var convertedDate = new Date(0);\n convertedDate.setFullYear(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n convertedDate.setHours(date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n return convertedDate;\n }\n }]);\n return DateToSystemTimezoneSetter;\n}(Setter);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { ValueSetter } from \"./Setter.js\";\nexport var Parser = /*#__PURE__*/function () {\n function Parser() {\n _classCallCheck(this, Parser);\n _defineProperty(this, \"incompatibleTokens\", void 0);\n _defineProperty(this, \"priority\", void 0);\n _defineProperty(this, \"subPriority\", void 0);\n }\n _createClass(Parser, [{\n key: \"run\",\n value: function run(dateString, token, match, options) {\n var result = this.parse(dateString, token, match, options);\n if (!result) {\n return null;\n }\n return {\n setter: new ValueSetter(result.value, this.validate, this.set, this.priority, this.subPriority),\n rest: result.rest\n };\n }\n }, {\n key: \"validate\",\n value: function validate(_utcDate, _value, _options) {\n return true;\n }\n }]);\n return Parser;\n}();","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nexport var EraParser = /*#__PURE__*/function (_Parser) {\n _inherits(EraParser, _Parser);\n var _super = _createSuper(EraParser);\n function EraParser() {\n var _this;\n _classCallCheck(this, EraParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 140);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['R', 'u', 't', 'T']);\n return _this;\n }\n _createClass(EraParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return match.era(dateString, {\n width: 'abbreviated'\n }) || match.era(dateString, {\n width: 'narrow'\n });\n // A, B\n case 'GGGGG':\n return match.era(dateString, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n case 'GGGG':\n default:\n return match.era(dateString, {\n width: 'wide'\n }) || match.era(dateString, {\n width: 'abbreviated'\n }) || match.era(dateString, {\n width: 'narrow'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n flags.era = value;\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n return EraParser;\n}(Parser);","/**\n * Days in 1 week.\n *\n * @name daysInWeek\n * @constant\n * @type {number}\n * @default\n */\nexport var daysInWeek = 7;\n\n/**\n * Days in 1 year\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n *\n * @name daysInYear\n * @constant\n * @type {number}\n * @default\n */\nexport var daysInYear = 365.2425;\n\n/**\n * Maximum allowed time.\n *\n * @name maxTime\n * @constant\n * @type {number}\n * @default\n */\nexport var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * Milliseconds in 1 minute\n *\n * @name millisecondsInMinute\n * @constant\n * @type {number}\n * @default\n */\nexport var millisecondsInMinute = 60000;\n\n/**\n * Milliseconds in 1 hour\n *\n * @name millisecondsInHour\n * @constant\n * @type {number}\n * @default\n */\nexport var millisecondsInHour = 3600000;\n\n/**\n * Milliseconds in 1 second\n *\n * @name millisecondsInSecond\n * @constant\n * @type {number}\n * @default\n */\nexport var millisecondsInSecond = 1000;\n\n/**\n * Minimum allowed time.\n *\n * @name minTime\n * @constant\n * @type {number}\n * @default\n */\nexport var minTime = -maxTime;\n\n/**\n * Minutes in 1 hour\n *\n * @name minutesInHour\n * @constant\n * @type {number}\n * @default\n */\nexport var minutesInHour = 60;\n\n/**\n * Months in 1 quarter\n *\n * @name monthsInQuarter\n * @constant\n * @type {number}\n * @default\n */\nexport var monthsInQuarter = 3;\n\n/**\n * Months in 1 year\n *\n * @name monthsInYear\n * @constant\n * @type {number}\n * @default\n */\nexport var monthsInYear = 12;\n\n/**\n * Quarters in 1 year\n *\n * @name quartersInYear\n * @constant\n * @type {number}\n * @default\n */\nexport var quartersInYear = 4;\n\n/**\n * Seconds in 1 hour\n *\n * @name secondsInHour\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInHour = 3600;\n\n/**\n * Seconds in 1 minute\n *\n * @name secondsInMinute\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInMinute = 60;\n\n/**\n * Seconds in 1 day\n *\n * @name secondsInDay\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInDay = secondsInHour * 24;\n\n/**\n * Seconds in 1 week\n *\n * @name secondsInWeek\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInWeek = secondsInDay * 7;\n\n/**\n * Seconds in 1 year\n *\n * @name secondsInYear\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInYear = secondsInDay * daysInYear;\n\n/**\n * Seconds in 1 month\n *\n * @name secondsInMonth\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInMonth = secondsInYear / 12;\n\n/**\n * Seconds in 1 quarter\n *\n * @name secondsInQuarter\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInQuarter = secondsInMonth * 3;","export var numericPatterns = {\n month: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/,\n // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/,\n // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/,\n // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/,\n // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/,\n // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/,\n // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n minute: /^[0-5]?\\d/,\n // 0 to 59\n second: /^[0-5]?\\d/,\n // 0 to 59\n\n singleDigit: /^\\d/,\n // 0 to 9\n twoDigits: /^\\d{1,2}/,\n // 0 to 99\n threeDigits: /^\\d{1,3}/,\n // 0 to 999\n fourDigits: /^\\d{1,4}/,\n // 0 to 9999\n\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/,\n // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/,\n // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/,\n // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n};\n\nexport var timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n};","import { millisecondsInHour, millisecondsInMinute, millisecondsInSecond } from \"../../constants/index.js\";\nimport { numericPatterns } from \"./constants.js\";\nexport function mapValue(parseFnResult, mapFn) {\n if (!parseFnResult) {\n return parseFnResult;\n }\n return {\n value: mapFn(parseFnResult.value),\n rest: parseFnResult.rest\n };\n}\nexport function parseNumericPattern(pattern, dateString) {\n var matchResult = dateString.match(pattern);\n if (!matchResult) {\n return null;\n }\n return {\n value: parseInt(matchResult[0], 10),\n rest: dateString.slice(matchResult[0].length)\n };\n}\nexport function parseTimezonePattern(pattern, dateString) {\n var matchResult = dateString.match(pattern);\n if (!matchResult) {\n return null;\n }\n\n // Input is 'Z'\n if (matchResult[0] === 'Z') {\n return {\n value: 0,\n rest: dateString.slice(1)\n };\n }\n var sign = matchResult[1] === '+' ? 1 : -1;\n var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n return {\n value: sign * (hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * millisecondsInSecond),\n rest: dateString.slice(matchResult[0].length)\n };\n}\nexport function parseAnyDigitsSigned(dateString) {\n return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\nexport function parseNDigits(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigit, dateString);\n case 2:\n return parseNumericPattern(numericPatterns.twoDigits, dateString);\n case 3:\n return parseNumericPattern(numericPatterns.threeDigits, dateString);\n case 4:\n return parseNumericPattern(numericPatterns.fourDigits, dateString);\n default:\n return parseNumericPattern(new RegExp('^\\\\d{1,' + n + '}'), dateString);\n }\n}\nexport function parseNDigitsSigned(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n case 2:\n return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n case 3:\n return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n case 4:\n return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n default:\n return parseNumericPattern(new RegExp('^-?\\\\d{1,' + n + '}'), dateString);\n }\n}\nexport function dayPeriodEnumToHours(dayPeriod) {\n switch (dayPeriod) {\n case 'morning':\n return 4;\n case 'evening':\n return 17;\n case 'pm':\n case 'noon':\n case 'afternoon':\n return 12;\n case 'am':\n case 'midnight':\n case 'night':\n default:\n return 0;\n }\n}\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n var isCommonEra = currentYear > 0;\n // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n var result;\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100;\n } else {\n var rangeEnd = absCurrentYear + 50;\n var rangeEndCentury = Math.floor(rangeEnd / 100) * 100;\n var isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n }\n return isCommonEra ? result : 1 - result;\n}\nexport function isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n// | Year | y | yy | yyy | yyyy | yyyyy |\n// |----------|-------|----|-------|-------|-------|\n// | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n// | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n// | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n// | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n// | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\nexport var YearParser = /*#__PURE__*/function (_Parser) {\n _inherits(YearParser, _Parser);\n var _super = _createSuper(YearParser);\n function YearParser() {\n var _this;\n _classCallCheck(this, YearParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n return _this;\n }\n _createClass(YearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'yy'\n };\n };\n switch (token) {\n case 'y':\n return mapValue(parseNDigits(4, dateString), valueCallback);\n case 'yo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'year'\n }), valueCallback);\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n var currentYear = date.getUTCFullYear();\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n return YearParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits, normalizeTwoDigitYear, mapValue } from \"../utils.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\";\n// Local week-numbering year\nexport var LocalWeekYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalWeekYearParser, _Parser);\n var _super = _createSuper(LocalWeekYearParser);\n function LocalWeekYearParser() {\n var _this;\n _classCallCheck(this, LocalWeekYearParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n return _this;\n }\n _createClass(LocalWeekYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'YY'\n };\n };\n switch (token) {\n case 'Y':\n return mapValue(parseNDigits(4, dateString), valueCallback);\n case 'Yo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'year'\n }), valueCallback);\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value, options) {\n var currentYear = getUTCWeekYear(date, options);\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n }]);\n return LocalWeekYearParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week-numbering year\nexport var ISOWeekYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOWeekYearParser, _Parser);\n var _super = _createSuper(ISOWeekYearParser);\n function ISOWeekYearParser() {\n var _this;\n _classCallCheck(this, ISOWeekYearParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n return _this;\n }\n _createClass(ISOWeekYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n if (token === 'R') {\n return parseNDigitsSigned(4, dateString);\n }\n return parseNDigitsSigned(token.length, dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n var firstWeekOfYear = new Date(0);\n firstWeekOfYear.setUTCFullYear(value, 0, 4);\n firstWeekOfYear.setUTCHours(0, 0, 0, 0);\n return startOfUTCISOWeek(firstWeekOfYear);\n }\n }]);\n return ISOWeekYearParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nexport var ExtendedYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(ExtendedYearParser, _Parser);\n var _super = _createSuper(ExtendedYearParser);\n function ExtendedYearParser() {\n var _this;\n _classCallCheck(this, ExtendedYearParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n return _this;\n }\n _createClass(ExtendedYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n if (token === 'u') {\n return parseNDigitsSigned(4, dateString);\n }\n return parseNDigitsSigned(token.length, dateString);\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n return ExtendedYearParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var QuarterParser = /*#__PURE__*/function (_Parser) {\n _inherits(QuarterParser, _Parser);\n var _super = _createSuper(QuarterParser);\n function QuarterParser() {\n var _this;\n _classCallCheck(this, QuarterParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 120);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n return _this;\n }\n _createClass(QuarterParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n case 'QQ':\n // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n case 'Qo':\n return match.ordinalNumber(dateString, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n case 'QQQ':\n return match.quarter(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case 'QQQQQ':\n return match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n case 'QQQQ':\n default:\n return match.quarter(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n return QuarterParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var StandAloneQuarterParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneQuarterParser, _Parser);\n var _super = _createSuper(StandAloneQuarterParser);\n function StandAloneQuarterParser() {\n var _this;\n _classCallCheck(this, StandAloneQuarterParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 120);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n return _this;\n }\n _createClass(StandAloneQuarterParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n case 'qq':\n // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n case 'qo':\n return match.ordinalNumber(dateString, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n case 'qqq':\n return match.quarter(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case 'qqqqq':\n return match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n case 'qqqq':\n default:\n return match.quarter(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n return StandAloneQuarterParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nexport var MonthParser = /*#__PURE__*/function (_Parser) {\n _inherits(MonthParser, _Parser);\n var _super = _createSuper(MonthParser);\n function MonthParser() {\n var _this;\n _classCallCheck(this, MonthParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n _defineProperty(_assertThisInitialized(_this), \"priority\", 110);\n return _this;\n }\n _createClass(MonthParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n return value - 1;\n };\n switch (token) {\n // 1, 2, ..., 12\n case 'M':\n return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n // 01, 02, ..., 12\n case 'MM':\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n case 'Mo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'month'\n }), valueCallback);\n // Jan, Feb, ..., Dec\n case 'MMM':\n return match.month(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // J, F, ..., D\n case 'MMMMM':\n return match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n case 'MMMM':\n default:\n return match.month(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n return MonthParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, mapValue } from \"../utils.js\";\nexport var StandAloneMonthParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneMonthParser, _Parser);\n var _super = _createSuper(StandAloneMonthParser);\n function StandAloneMonthParser() {\n var _this;\n _classCallCheck(this, StandAloneMonthParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 110);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n return _this;\n }\n _createClass(StandAloneMonthParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n return value - 1;\n };\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n // 01, 02, ..., 12\n case 'LL':\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n case 'Lo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'month'\n }), valueCallback);\n // Jan, Feb, ..., Dec\n case 'LLL':\n return match.month(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // J, F, ..., D\n case 'LLLLL':\n return match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n case 'LLLL':\n default:\n return match.month(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n return StandAloneMonthParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCWeek from \"../../../_lib/setUTCWeek/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\"; // Local week of year\nexport var LocalWeekParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalWeekParser, _Parser);\n var _super = _createSuper(LocalWeekParser);\n function LocalWeekParser() {\n var _this;\n _classCallCheck(this, LocalWeekParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 100);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n return _this;\n }\n _createClass(LocalWeekParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'w':\n return parseNumericPattern(numericPatterns.week, dateString);\n case 'wo':\n return match.ordinalNumber(dateString, {\n unit: 'week'\n });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n return startOfUTCWeek(setUTCWeek(date, value, options), options);\n }\n }]);\n return LocalWeekParser;\n}(Parser);","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCWeek from \"../getUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCWeek(dirtyDate, dirtyWeek, options) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var week = toInteger(dirtyWeek);\n var diff = getUTCWeek(date, options) - week;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\n}","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCISOWeek from \"../../../_lib/setUTCISOWeek/index.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week of year\nexport var ISOWeekParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOWeekParser, _Parser);\n var _super = _createSuper(ISOWeekParser);\n function ISOWeekParser() {\n var _this;\n _classCallCheck(this, ISOWeekParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 100);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n return _this;\n }\n _createClass(ISOWeekParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'I':\n return parseNumericPattern(numericPatterns.week, dateString);\n case 'Io':\n return match.ordinalNumber(dateString, {\n unit: 'week'\n });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n return startOfUTCISOWeek(setUTCISOWeek(date, value));\n }\n }]);\n return ISOWeekParser;\n}(Parser);","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCISOWeek from \"../getUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var isoWeek = toInteger(dirtyISOWeek);\n var diff = getUTCISOWeek(date) - isoWeek;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\n}","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { isLeapYearIndex, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\n// Day of the month\nexport var DateParser = /*#__PURE__*/function (_Parser) {\n _inherits(DateParser, _Parser);\n var _super = _createSuper(DateParser);\n function DateParser() {\n var _this;\n _classCallCheck(this, DateParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n _defineProperty(_assertThisInitialized(_this), \"subPriority\", 1);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n return _this;\n }\n _createClass(DateParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'd':\n return parseNumericPattern(numericPatterns.date, dateString);\n case 'do':\n return match.ordinalNumber(dateString, {\n unit: 'date'\n });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(date, value) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n var month = date.getUTCMonth();\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month];\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCDate(value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n return DateParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, isLeapYearIndex } from \"../utils.js\";\nexport var DayOfYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayOfYearParser, _Parser);\n var _super = _createSuper(DayOfYearParser);\n function DayOfYearParser() {\n var _this;\n _classCallCheck(this, DayOfYearParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n _defineProperty(_assertThisInitialized(_this), \"subpriority\", 1);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T']);\n return _this;\n }\n _createClass(DayOfYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'D':\n case 'DD':\n return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n case 'Do':\n return match.ordinalNumber(dateString, {\n unit: 'date'\n });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(date, value) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n if (isLeapYear) {\n return value >= 1 && value <= 366;\n } else {\n return value >= 1 && value <= 365;\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(0, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n return DayOfYearParser;\n}(Parser);","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function setUTCDay(dirtyDate, dirtyDay, options) {\n var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n requiredArgs(2, arguments);\n var defaultOptions = getDefaultOptions();\n var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n var date = toDate(dirtyDate);\n var day = toInteger(dirtyDay);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Day of week\nexport var DayParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayParser, _Parser);\n var _super = _createSuper(DayParser);\n function DayParser() {\n var _this;\n _classCallCheck(this, DayParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['D', 'i', 'e', 'c', 't', 'T']);\n return _this;\n }\n _createClass(DayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n case 'EEEEE':\n return match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n case 'EEEEEE':\n return match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n case 'EEEE':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n return DayParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Local day of week\nexport var LocalDayParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalDayParser, _Parser);\n var _super = _createSuper(LocalDayParser);\n function LocalDayParser() {\n var _this;\n _classCallCheck(this, LocalDayParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T']);\n return _this;\n }\n _createClass(LocalDayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match, options) {\n var valueCallback = function valueCallback(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n switch (token) {\n // 3\n case 'e':\n case 'ee':\n // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n case 'eo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'day'\n }), valueCallback);\n // Tue\n case 'eee':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n case 'eeeee':\n return match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n case 'eeeeee':\n return match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n case 'eeee':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n return LocalDayParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Stand-alone local day of week\nexport var StandAloneLocalDayParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneLocalDayParser, _Parser);\n var _super = _createSuper(StandAloneLocalDayParser);\n function StandAloneLocalDayParser() {\n var _this;\n _classCallCheck(this, StandAloneLocalDayParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T']);\n return _this;\n }\n _createClass(StandAloneLocalDayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match, options) {\n var valueCallback = function valueCallback(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n switch (token) {\n // 3\n case 'c':\n case 'cc':\n // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n case 'co':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'day'\n }), valueCallback);\n // Tue\n case 'ccc':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // T\n case 'ccccc':\n return match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n case 'cccccc':\n return match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tuesday\n case 'cccc':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n return StandAloneLocalDayParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCISODay from \"../../../_lib/setUTCISODay/index.js\"; // ISO day of week\nexport var ISODayParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISODayParser, _Parser);\n var _super = _createSuper(ISODayParser);\n function ISODayParser() {\n var _this;\n _classCallCheck(this, ISODayParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T']);\n return _this;\n }\n _createClass(ISODayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n if (value === 0) {\n return 7;\n }\n return value;\n };\n switch (token) {\n // 2\n case 'i':\n case 'ii':\n // 02\n return parseNDigits(token.length, dateString);\n // 2nd\n case 'io':\n return match.ordinalNumber(dateString, {\n unit: 'day'\n });\n // Tue\n case 'iii':\n return mapValue(match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // T\n case 'iiiii':\n return mapValue(match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // Tu\n case 'iiiiii':\n return mapValue(match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // Tuesday\n case 'iiii':\n default:\n return mapValue(match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 7;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date = setUTCISODay(date, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n return ISODayParser;\n}(Parser);","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nexport default function setUTCISODay(dirtyDate, dirtyDay) {\n requiredArgs(2, arguments);\n var day = toInteger(dirtyDay);\n if (day % 7 === 0) {\n day = day - 7;\n }\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMParser = /*#__PURE__*/function (_Parser) {\n _inherits(AMPMParser, _Parser);\n var _super = _createSuper(AMPMParser);\n function AMPMParser() {\n var _this;\n _classCallCheck(this, AMPMParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['b', 'B', 'H', 'k', 't', 'T']);\n return _this;\n }\n _createClass(AMPMParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'a':\n case 'aa':\n case 'aaa':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n case 'aaaaa':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n case 'aaaa':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n return AMPMParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMMidnightParser = /*#__PURE__*/function (_Parser) {\n _inherits(AMPMMidnightParser, _Parser);\n var _super = _createSuper(AMPMMidnightParser);\n function AMPMMidnightParser() {\n var _this;\n _classCallCheck(this, AMPMMidnightParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'B', 'H', 'k', 't', 'T']);\n return _this;\n }\n _createClass(AMPMMidnightParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'b':\n case 'bb':\n case 'bbb':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n case 'bbbbb':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n case 'bbbb':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n return AMPMMidnightParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\"; // in the morning, in the afternoon, in the evening, at night\nexport var DayPeriodParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayPeriodParser, _Parser);\n var _super = _createSuper(DayPeriodParser);\n function DayPeriodParser() {\n var _this;\n _classCallCheck(this, DayPeriodParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 't', 'T']);\n return _this;\n }\n _createClass(DayPeriodParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n case 'BBBBB':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n case 'BBBB':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n return DayPeriodParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour1to12Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour1to12Parser, _Parser);\n var _super = _createSuper(Hour1to12Parser);\n function Hour1to12Parser() {\n var _this;\n _classCallCheck(this, Hour1to12Parser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['H', 'K', 'k', 't', 'T']);\n return _this;\n }\n _createClass(Hour1to12Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'h':\n return parseNumericPattern(numericPatterns.hour12h, dateString);\n case 'ho':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 12;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var isPM = date.getUTCHours() >= 12;\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else if (!isPM && value === 12) {\n date.setUTCHours(0, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n return date;\n }\n }]);\n return Hour1to12Parser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour0to23Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour0to23Parser, _Parser);\n var _super = _createSuper(Hour0to23Parser);\n function Hour0to23Parser() {\n var _this;\n _classCallCheck(this, Hour0to23Parser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 'h', 'K', 'k', 't', 'T']);\n return _this;\n }\n _createClass(Hour0to23Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'H':\n return parseNumericPattern(numericPatterns.hour23h, dateString);\n case 'Ho':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 23;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(value, 0, 0, 0);\n return date;\n }\n }]);\n return Hour0to23Parser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour0To11Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour0To11Parser, _Parser);\n var _super = _createSuper(Hour0To11Parser);\n function Hour0To11Parser() {\n var _this;\n _classCallCheck(this, Hour0To11Parser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['h', 'H', 'k', 't', 'T']);\n return _this;\n }\n _createClass(Hour0To11Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'K':\n return parseNumericPattern(numericPatterns.hour11h, dateString);\n case 'Ko':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var isPM = date.getUTCHours() >= 12;\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n return date;\n }\n }]);\n return Hour0To11Parser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour1To24Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour1To24Parser, _Parser);\n var _super = _createSuper(Hour1To24Parser);\n function Hour1To24Parser() {\n var _this;\n _classCallCheck(this, Hour1To24Parser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 'h', 'H', 'K', 't', 'T']);\n return _this;\n }\n _createClass(Hour1To24Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'k':\n return parseNumericPattern(numericPatterns.hour24h, dateString);\n case 'ko':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 24;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var hours = value <= 24 ? value % 24 : value;\n date.setUTCHours(hours, 0, 0, 0);\n return date;\n }\n }]);\n return Hour1To24Parser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var MinuteParser = /*#__PURE__*/function (_Parser) {\n _inherits(MinuteParser, _Parser);\n var _super = _createSuper(MinuteParser);\n function MinuteParser() {\n var _this;\n _classCallCheck(this, MinuteParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 60);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n return _this;\n }\n _createClass(MinuteParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'm':\n return parseNumericPattern(numericPatterns.minute, dateString);\n case 'mo':\n return match.ordinalNumber(dateString, {\n unit: 'minute'\n });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMinutes(value, 0, 0);\n return date;\n }\n }]);\n return MinuteParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var SecondParser = /*#__PURE__*/function (_Parser) {\n _inherits(SecondParser, _Parser);\n var _super = _createSuper(SecondParser);\n function SecondParser() {\n var _this;\n _classCallCheck(this, SecondParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 50);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n return _this;\n }\n _createClass(SecondParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 's':\n return parseNumericPattern(numericPatterns.second, dateString);\n case 'so':\n return match.ordinalNumber(dateString, {\n unit: 'second'\n });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCSeconds(value, 0);\n return date;\n }\n }]);\n return SecondParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nexport var FractionOfSecondParser = /*#__PURE__*/function (_Parser) {\n _inherits(FractionOfSecondParser, _Parser);\n var _super = _createSuper(FractionOfSecondParser);\n function FractionOfSecondParser() {\n var _this;\n _classCallCheck(this, FractionOfSecondParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 30);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n return _this;\n }\n _createClass(FractionOfSecondParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n var valueCallback = function valueCallback(value) {\n return Math.floor(value * Math.pow(10, -token.length + 3));\n };\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMilliseconds(value);\n return date;\n }\n }]);\n return FractionOfSecondParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601. +00:00 is `'Z'`)\nexport var ISOTimezoneWithZParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOTimezoneWithZParser, _Parser);\n var _super = _createSuper(ISOTimezoneWithZParser);\n function ISOTimezoneWithZParser() {\n var _this;\n _classCallCheck(this, ISOTimezoneWithZParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 10);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T', 'x']);\n return _this;\n }\n _createClass(ISOTimezoneWithZParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n switch (token) {\n case 'X':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n case 'XX':\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n case 'XXXX':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n case 'XXXXX':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n case 'XXX':\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n if (flags.timestampIsSet) {\n return date;\n }\n return new Date(date.getTime() - value);\n }\n }]);\n return ISOTimezoneWithZParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601)\nexport var ISOTimezoneParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOTimezoneParser, _Parser);\n var _super = _createSuper(ISOTimezoneParser);\n function ISOTimezoneParser() {\n var _this;\n _classCallCheck(this, ISOTimezoneParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 10);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T', 'X']);\n return _this;\n }\n _createClass(ISOTimezoneParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n switch (token) {\n case 'x':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n case 'xx':\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n case 'xxxx':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n case 'xxxxx':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n case 'xxx':\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n if (flags.timestampIsSet) {\n return date;\n }\n return new Date(date.getTime() - value);\n }\n }]);\n return ISOTimezoneParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampSecondsParser = /*#__PURE__*/function (_Parser) {\n _inherits(TimestampSecondsParser, _Parser);\n var _super = _createSuper(TimestampSecondsParser);\n function TimestampSecondsParser() {\n var _this;\n _classCallCheck(this, TimestampSecondsParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 40);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", '*');\n return _this;\n }\n _createClass(TimestampSecondsParser, [{\n key: \"parse\",\n value: function parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n return [new Date(value * 1000), {\n timestampIsSet: true\n }];\n }\n }]);\n return TimestampSecondsParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampMillisecondsParser = /*#__PURE__*/function (_Parser) {\n _inherits(TimestampMillisecondsParser, _Parser);\n var _super = _createSuper(TimestampMillisecondsParser);\n function TimestampMillisecondsParser() {\n var _this;\n _classCallCheck(this, TimestampMillisecondsParser);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"priority\", 20);\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", '*');\n return _this;\n }\n _createClass(TimestampMillisecondsParser, [{\n key: \"parse\",\n value: function parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n return [new Date(value), {\n timestampIsSet: true\n }];\n }\n }]);\n return TimestampMillisecondsParser;\n}(Parser);","import { EraParser } from \"./EraParser.js\";\nimport { YearParser } from \"./YearParser.js\";\nimport { LocalWeekYearParser } from \"./LocalWeekYearParser.js\";\nimport { ISOWeekYearParser } from \"./ISOWeekYearParser.js\";\nimport { ExtendedYearParser } from \"./ExtendedYearParser.js\";\nimport { QuarterParser } from \"./QuarterParser.js\";\nimport { StandAloneQuarterParser } from \"./StandAloneQuarterParser.js\";\nimport { MonthParser } from \"./MonthParser.js\";\nimport { StandAloneMonthParser } from \"./StandAloneMonthParser.js\";\nimport { LocalWeekParser } from \"./LocalWeekParser.js\";\nimport { ISOWeekParser } from \"./ISOWeekParser.js\";\nimport { DateParser } from \"./DateParser.js\";\nimport { DayOfYearParser } from \"./DayOfYearParser.js\";\nimport { DayParser } from \"./DayParser.js\";\nimport { LocalDayParser } from \"./LocalDayParser.js\";\nimport { StandAloneLocalDayParser } from \"./StandAloneLocalDayParser.js\";\nimport { ISODayParser } from \"./ISODayParser.js\";\nimport { AMPMParser } from \"./AMPMParser.js\";\nimport { AMPMMidnightParser } from \"./AMPMMidnightParser.js\";\nimport { DayPeriodParser } from \"./DayPeriodParser.js\";\nimport { Hour1to12Parser } from \"./Hour1to12Parser.js\";\nimport { Hour0to23Parser } from \"./Hour0to23Parser.js\";\nimport { Hour0To11Parser } from \"./Hour0To11Parser.js\";\nimport { Hour1To24Parser } from \"./Hour1To24Parser.js\";\nimport { MinuteParser } from \"./MinuteParser.js\";\nimport { SecondParser } from \"./SecondParser.js\";\nimport { FractionOfSecondParser } from \"./FractionOfSecondParser.js\";\nimport { ISOTimezoneWithZParser } from \"./ISOTimezoneWithZParser.js\";\nimport { ISOTimezoneParser } from \"./ISOTimezoneParser.js\";\nimport { TimestampSecondsParser } from \"./TimestampSecondsParser.js\";\nimport { TimestampMillisecondsParser } from \"./TimestampMillisecondsParser.js\";\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O* | Timezone (GMT) |\n * | p | | P | |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n */\nexport var parsers = {\n G: new EraParser(),\n y: new YearParser(),\n Y: new LocalWeekYearParser(),\n R: new ISOWeekYearParser(),\n u: new ExtendedYearParser(),\n Q: new QuarterParser(),\n q: new StandAloneQuarterParser(),\n M: new MonthParser(),\n L: new StandAloneMonthParser(),\n w: new LocalWeekParser(),\n I: new ISOWeekParser(),\n d: new DateParser(),\n D: new DayOfYearParser(),\n E: new DayParser(),\n e: new LocalDayParser(),\n c: new StandAloneLocalDayParser(),\n i: new ISODayParser(),\n a: new AMPMParser(),\n b: new AMPMMidnightParser(),\n B: new DayPeriodParser(),\n h: new Hour1to12Parser(),\n H: new Hour0to23Parser(),\n K: new Hour0To11Parser(),\n k: new Hour1To24Parser(),\n m: new MinuteParser(),\n s: new SecondParser(),\n S: new FractionOfSecondParser(),\n X: new ISOTimezoneWithZParser(),\n x: new ISOTimezoneParser(),\n t: new TimestampSecondsParser(),\n T: new TimestampMillisecondsParser()\n};","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _createForOfIteratorHelper from \"@babel/runtime/helpers/esm/createForOfIteratorHelper\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport assign from \"../_lib/assign/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { DateToSystemTimezoneSetter } from \"./_lib/Setter.js\";\nimport { parsers } from \"./_lib/parsers/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\"; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar notWhitespaceRegExp = /\\S/;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | QQ | 01, 02, 03, 04 | |\n * | | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | qq | 01, 02, 03, 04 | |\n * | | | qqq | Q1, Q2, Q3, Q4 | |\n * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | | qqqqq | 1, 2, 3, 4 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\n * | | | MM | 01, 02, ..., 12 | |\n * | | | MMM | Jan, Feb, ..., Dec | |\n * | | | MMMM | January, February, ..., December | 2 |\n * | | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\n * | | | LL | 01, 02, ..., 12 | |\n * | | | LLL | Jan, Feb, ..., Dec | |\n * | | | LLLL | January, February, ..., December | 2 |\n * | | | LLLLL | J, F, ..., D | |\n * | Local week of year | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | | EEEEE | M, T, W, T, F, S, S | |\n * | | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\n * | | | ee | 02, 03, ..., 01 | |\n * | | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | | eeeee | M, T, W, T, F, S, S | |\n * | | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\n * | | | cc | 02, 03, ..., 01 | |\n * | | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | | ccccc | M, T, W, T, F, S, S | |\n * | | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | |\n * | | | BBBB | at night, in the morning, ... | 2 |\n * | | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | |\n * | | | XX | -0800, +0530, Z | |\n * | | | XXX | -08:00, +05:30, Z | |\n * | | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | |\n * | | | xx | -0800, +0530, +0000 | |\n * | | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular.\n * In `format` function, they will produce different result:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * `parse` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n * and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} referenceDate - defines values missing from the parsed dateString\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @returns {Date} the parsed date\n * @throws {TypeError} 3 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.locale` must contain `match` property\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\nexport default function parse(dirtyDateString, dirtyFormatString, dirtyReferenceDate, options) {\n var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4;\n requiredArgs(3, arguments);\n var dateString = String(dirtyDateString);\n var formatString = String(dirtyFormatString);\n var defaultOptions = getDefaultOptions();\n var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n if (!locale.match) {\n throw new RangeError('locale must contain match property');\n }\n var firstWeekContainsDate = toInteger((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1);\n\n // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n var weekStartsOn = toInteger((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0);\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n if (formatString === '') {\n if (dateString === '') {\n return toDate(dirtyReferenceDate);\n } else {\n return new Date(NaN);\n }\n }\n var subFnOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale\n };\n\n // If timezone isn't specified, it will be set to the system timezone\n var setters = [new DateToSystemTimezoneSetter()];\n var tokens = formatString.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n if (firstCharacter in longFormatters) {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n }).join('').match(formattingTokensRegExp);\n var usedTokens = [];\n var _iterator = _createForOfIteratorHelper(tokens),\n _step;\n try {\n var _loop = function _loop() {\n var token = _step.value;\n if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n var firstCharacter = token[0];\n var parser = parsers[firstCharacter];\n if (parser) {\n var incompatibleTokens = parser.incompatibleTokens;\n if (Array.isArray(incompatibleTokens)) {\n var incompatibleToken = usedTokens.find(function (usedToken) {\n return incompatibleTokens.includes(usedToken.token) || usedToken.token === firstCharacter;\n });\n if (incompatibleToken) {\n throw new RangeError(\"The format string mustn't contain `\".concat(incompatibleToken.fullToken, \"` and `\").concat(token, \"` at the same time\"));\n }\n } else if (parser.incompatibleTokens === '*' && usedTokens.length > 0) {\n throw new RangeError(\"The format string mustn't contain `\".concat(token, \"` and any other token at the same time\"));\n }\n usedTokens.push({\n token: firstCharacter,\n fullToken: token\n });\n var parseResult = parser.run(dateString, token, locale.match, subFnOptions);\n if (!parseResult) {\n return {\n v: new Date(NaN)\n };\n }\n setters.push(parseResult.setter);\n dateString = parseResult.rest;\n } else {\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n }\n\n // Replace two single quote characters with one single quote character\n if (token === \"''\") {\n token = \"'\";\n } else if (firstCharacter === \"'\") {\n token = cleanEscapedString(token);\n }\n\n // Cut token from string, or, if string doesn't match the token, return Invalid Date\n if (dateString.indexOf(token) === 0) {\n dateString = dateString.slice(token.length);\n } else {\n return {\n v: new Date(NaN)\n };\n }\n }\n };\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _ret = _loop();\n if (_typeof(_ret) === \"object\") return _ret.v;\n }\n\n // Check if the remaining input contains something other than whitespace\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {\n return new Date(NaN);\n }\n var uniquePrioritySetters = setters.map(function (setter) {\n return setter.priority;\n }).sort(function (a, b) {\n return b - a;\n }).filter(function (priority, index, array) {\n return array.indexOf(priority) === index;\n }).map(function (priority) {\n return setters.filter(function (setter) {\n return setter.priority === priority;\n }).sort(function (a, b) {\n return b.subPriority - a.subPriority;\n });\n }).map(function (setterArray) {\n return setterArray[0];\n });\n var date = toDate(dirtyReferenceDate);\n if (isNaN(date.getTime())) {\n return new Date(NaN);\n }\n\n // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date));\n var flags = {};\n var _iterator2 = _createForOfIteratorHelper(uniquePrioritySetters),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var setter = _step2.value;\n if (!setter.validate(utcDate, subFnOptions)) {\n return new Date(NaN);\n }\n var result = setter.set(utcDate, flags, subFnOptions);\n // Result is tuple (date, flags)\n if (Array.isArray(result)) {\n utcDate = result[0];\n assign(flags, result[1]);\n // Result is date\n } else {\n utcDate = result;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n return utcDate;\n}\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}","import { millisecondsInHour, millisecondsInMinute } from \"../constants/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @param {String} argument - the value to convert\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport default function parseISO(argument, options) {\n var _options$additionalDi;\n requiredArgs(1, arguments);\n var additionalDigits = toInteger((_options$additionalDi = options === null || options === void 0 ? void 0 : options.additionalDigits) !== null && _options$additionalDi !== void 0 ? _options$additionalDi : 2);\n if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {\n throw new RangeError('additionalDigits must be 0, 1 or 2');\n }\n if (!(typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]')) {\n return new Date(NaN);\n }\n var dateStrings = splitDateString(argument);\n var date;\n if (dateStrings.date) {\n var parseYearResult = parseYear(dateStrings.date, additionalDigits);\n date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n }\n if (!date || isNaN(date.getTime())) {\n return new Date(NaN);\n }\n var timestamp = date.getTime();\n var time = 0;\n var offset;\n if (dateStrings.time) {\n time = parseTime(dateStrings.time);\n if (isNaN(time)) {\n return new Date(NaN);\n }\n }\n if (dateStrings.timezone) {\n offset = parseTimezone(dateStrings.timezone);\n if (isNaN(offset)) {\n return new Date(NaN);\n }\n } else {\n var dirtyDate = new Date(timestamp + time);\n // js parsed string assuming it's in UTC timezone\n // but we need it to be parsed in our timezone\n // so we use utc values to build date in our timezone.\n // Year values from 0 to 99 map to the years 1900 to 1999\n // so set year explicitly with setFullYear.\n var result = new Date(0);\n result.setFullYear(dirtyDate.getUTCFullYear(), dirtyDate.getUTCMonth(), dirtyDate.getUTCDate());\n result.setHours(dirtyDate.getUTCHours(), dirtyDate.getUTCMinutes(), dirtyDate.getUTCSeconds(), dirtyDate.getUTCMilliseconds());\n return result;\n }\n return new Date(timestamp + time + offset);\n}\nvar patterns = {\n dateTimeDelimiter: /[T ]/,\n timeZoneDelimiter: /[Z ]/i,\n timezone: /([Z+-].*)$/\n};\nvar dateRegex = /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nvar timeRegex = /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nvar timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\nfunction splitDateString(dateString) {\n var dateStrings = {};\n var array = dateString.split(patterns.dateTimeDelimiter);\n var timeString;\n\n // The regex match should only return at maximum two array elements.\n // [date], [time], or [date, time].\n if (array.length > 2) {\n return dateStrings;\n }\n if (/:/.test(array[0])) {\n timeString = array[0];\n } else {\n dateStrings.date = array[0];\n timeString = array[1];\n if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n timeString = dateString.substr(dateStrings.date.length, dateString.length);\n }\n }\n if (timeString) {\n var token = patterns.timezone.exec(timeString);\n if (token) {\n dateStrings.time = timeString.replace(token[1], '');\n dateStrings.timezone = token[1];\n } else {\n dateStrings.time = timeString;\n }\n }\n return dateStrings;\n}\nfunction parseYear(dateString, additionalDigits) {\n var regex = new RegExp('^(?:(\\\\d{4}|[+-]\\\\d{' + (4 + additionalDigits) + '})|(\\\\d{2}|[+-]\\\\d{' + (2 + additionalDigits) + '})$)');\n var captures = dateString.match(regex);\n // Invalid ISO-formatted year\n if (!captures) return {\n year: NaN,\n restDateString: ''\n };\n var year = captures[1] ? parseInt(captures[1]) : null;\n var century = captures[2] ? parseInt(captures[2]) : null;\n\n // either year or century is null, not both\n return {\n year: century === null ? year : century * 100,\n restDateString: dateString.slice((captures[1] || captures[2]).length)\n };\n}\nfunction parseDate(dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) return new Date(NaN);\n var captures = dateString.match(dateRegex);\n // Invalid ISO-formatted string\n if (!captures) return new Date(NaN);\n var isWeekDate = !!captures[4];\n var dayOfYear = parseDateUnit(captures[1]);\n var month = parseDateUnit(captures[2]) - 1;\n var day = parseDateUnit(captures[3]);\n var week = parseDateUnit(captures[4]);\n var dayOfWeek = parseDateUnit(captures[5]) - 1;\n if (isWeekDate) {\n if (!validateWeekDate(year, week, dayOfWeek)) {\n return new Date(NaN);\n }\n return dayOfISOWeekYear(year, week, dayOfWeek);\n } else {\n var date = new Date(0);\n if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) {\n return new Date(NaN);\n }\n date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n return date;\n }\n}\nfunction parseDateUnit(value) {\n return value ? parseInt(value) : 1;\n}\nfunction parseTime(timeString) {\n var captures = timeString.match(timeRegex);\n if (!captures) return NaN; // Invalid ISO-formatted time\n\n var hours = parseTimeUnit(captures[1]);\n var minutes = parseTimeUnit(captures[2]);\n var seconds = parseTimeUnit(captures[3]);\n if (!validateTime(hours, minutes, seconds)) {\n return NaN;\n }\n return hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000;\n}\nfunction parseTimeUnit(value) {\n return value && parseFloat(value.replace(',', '.')) || 0;\n}\nfunction parseTimezone(timezoneString) {\n if (timezoneString === 'Z') return 0;\n var captures = timezoneString.match(timezoneRegex);\n if (!captures) return 0;\n var sign = captures[1] === '+' ? -1 : 1;\n var hours = parseInt(captures[2]);\n var minutes = captures[3] && parseInt(captures[3]) || 0;\n if (!validateTimezone(hours, minutes)) {\n return NaN;\n }\n return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n var date = new Date(0);\n date.setUTCFullYear(isoWeekYear, 0, 4);\n var fourthOfJanuaryDay = date.getUTCDay() || 7;\n var diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nvar daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}\nfunction validateDate(year, month, date) {\n return month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28));\n}\nfunction validateDayOfYearDate(year, dayOfYear) {\n return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\nfunction validateWeekDate(_year, week, day) {\n return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\nfunction validateTime(hours, minutes, seconds) {\n if (hours === 24) {\n return minutes === 0 && seconds === 0;\n }\n return seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25;\n}\nfunction validateTimezone(_hours, minutes) {\n return minutes >= 0 && minutes <= 59;\n}","/**\n * @file\n * Various date-related analysis methods\n */\nimport { isValid, parseISO, parse } from 'date-fns';\n/**\n * Parsing value to Date object\n */\nexport function compatibleParse(value, formatToken, baseDate, locale) {\n let result = null;\n if (value) {\n if (formatToken) {\n baseDate = baseDate || new Date();\n result = parse(value, formatToken, baseDate, {\n locale\n });\n }\n if (!isValid(result)) {\n result = parseISO(value);\n }\n if (!isValid(result)) {\n result = new Date(Date.parse(value));\n }\n const yearInvalid = isValid(result) && String(result.getFullYear()).length > 4;\n if (!isValid(result) || yearInvalid) {\n result = null;\n }\n }\n return result;\n}\n/**\n * whether value can be parsed with date-fns `parse`\n *\n * @example\n * isValueParseValid({ value: '2021-01-01', formatToken: 'yyyy-MM-dd' }); // true\n * isValueParseValid({ value: '2021-01-0', formatToken: 'yyyy-MM-dd' }); // false\n * isValueParseValid({ value: '2021-01', formatToken: 'yyyy-MM-dd' }); // false\n */\nexport function isValueParseValid(options) {\n const {\n value,\n locale,\n formatToken\n } = options;\n const baseDate = options.baseDate || new Date();\n const result = parse(value, formatToken, baseDate, {\n locale\n });\n return isValid(result);\n}","import { strings } from '../constants';\nconst defaultFormatTokens = {\n date: strings.FORMAT_FULL_DATE,\n dateTime: strings.FORMAT_DATE_TIME,\n dateRange: strings.FORMAT_FULL_DATE,\n dateTimeRange: strings.FORMAT_DATE_TIME,\n month: strings.FORMAT_YEAR_MONTH,\n monthRange: strings.FORMAT_YEAR_MONTH\n};\nconst getDefaultFormatToken = type => defaultFormatTokens;\nexport function getDefaultFormatTokenByType(type) {\n return type && defaultFormatTokens[type];\n}\nexport default getDefaultFormatToken;","import { getDefaultFormatTokenByType } from './getDefaultFormatToken';\n/**\n * 获取 insetInput 输入框的 placeholder\n * Get the placeholder of the insetInput input\n *\n * If type is time related, we only recognize the format like `dateFormat timeFormat`\n * - 'yyyy-MM-dd HH:mm:ss' // ok\n * - 'yyyy-MM-dd HH:mm:ss' // bad format\n *\n * @example\n * 'yyyy-MM-dd' => 'yyyy-MM-dd'\n * 'yyyy-MM' => 'yyyy-MM'\n * 'yyyy-MM-dd HH:mm:ss' => 'yyyy-MM-dd HH:mm:ss'\n * 'yyyy-MM-dd HH:mm' => 'yyyy-MM-dd HH:mm'\n * 'Pp' => 'yyyy-MM-dd'\n */\nexport default function getInsetInputFormatToken(options) {\n const {\n format,\n type\n } = options;\n const dateReg = /([yMd]{0,4}[^a-z\\s]*[yMd]{0,4}[^a-z\\s]*[yMd]{0,4})/i;\n const dateTimeReg = /([yMd]{0,4}[^a-z\\s]*[yMd]{0,4}[^a-z\\s]*[yMd]{0,4}) (H{0,2}[^a-z\\s]*m{0,2}[^a-z\\s]*s{0,2})/i;\n const defaultToken = getDefaultFormatTokenByType(type);\n let insetInputFormat;\n switch (type) {\n case 'dateTime':\n case 'dateTimeRange':\n const dateTimeResult = dateTimeReg.exec(format);\n insetInputFormat = dateTimeResult && dateTimeResult[1] && dateTimeResult[2] ? `${dateTimeResult[1]} ${dateTimeResult[2]}` : defaultToken;\n break;\n case 'date':\n case 'month':\n case 'monthRange':\n case 'dateRange':\n default:\n const dateResult = dateReg.exec(format);\n insetInputFormat = dateResult && dateResult[1] || defaultToken;\n break;\n }\n return insetInputFormat;\n}","/**\n * 从 insetInputStr 字符串解析出 insetInputValue 对象\n * Parse the insetInputValue object from the insetInputStr string\n *\n * @example\n * ```\n * '2022-02-01' => { monthLeft: { dateInput: '2022-02-01' } }\n * '2022-02-01 00:00:00' => { monthLeft: { dateInput: '2022-02-01', timeInput: '00:00:00' } }\n * '2022-02-01 00:00:00 ~ 2022-02-15 00:00:00' => { monthLeft: { dateInput: '2022-02-01', timeInput: '00:00:00'}, monthRight: { dateInput: '2022-02-15', timeInput: '00:00:00' } }\n *\n * '2022-0' => { monthLeft: { dateInput: '2022-0' } }\n * '2022-02-01 00:00:' => { monthLeft: { dateInput: '2022-02-01', timeInput: '00:00:' } }\n * '2022-02-01 00:00:00 ~ ' => { monthLeft: { dateInput: '2022-02-01', timeInput: '00:00:00'}, monthRight: { dateInput: '', timeInput: '' } }\n * ' ~ 2022-02-15 00:00:00' => { monthLeft: { dateInput: '', timeInput: '' }, monthRight: { dateInput: '2022-02-15', timeInput: '00:00:00' } }\n * ```\n */\nexport default function getInsetInputValueFromInsetInputStr(options) {\n const timeSeparator = ' ';\n const {\n inputValue = '',\n rangeSeparator,\n type\n } = options;\n let leftDateInput, leftTimeInput, rightDateInput, rightTimeInput;\n const insetInputValue = {\n monthLeft: {\n dateInput: '',\n timeInput: ''\n },\n monthRight: {\n dateInput: '',\n timeInput: ''\n }\n };\n switch (type) {\n case 'date':\n case 'month':\n case 'monthRange':\n insetInputValue.monthLeft.dateInput = inputValue;\n break;\n case 'dateRange':\n [leftDateInput = '', rightDateInput = ''] = inputValue.split(rangeSeparator);\n insetInputValue.monthLeft.dateInput = leftDateInput;\n insetInputValue.monthRight.dateInput = rightDateInput;\n break;\n case 'dateTime':\n [leftDateInput = '', leftTimeInput = ''] = inputValue.split(timeSeparator);\n insetInputValue.monthLeft.dateInput = leftDateInput;\n insetInputValue.monthLeft.timeInput = leftTimeInput;\n break;\n case 'dateTimeRange':\n const [leftInput = '', rightInput = ''] = inputValue.split(rangeSeparator);\n [leftDateInput = '', leftTimeInput = ''] = leftInput.split(timeSeparator);\n [rightDateInput = '', rightTimeInput = ''] = rightInput.split(timeSeparator);\n insetInputValue.monthLeft.dateInput = leftDateInput;\n insetInputValue.monthLeft.timeInput = leftTimeInput;\n insetInputValue.monthRight.dateInput = rightDateInput;\n insetInputValue.monthRight.timeInput = rightTimeInput;\n break;\n }\n return insetInputValue;\n}","export default function isValidTimeZone(timeZone) {\n return ['string', 'number'].includes(typeof timeZone) && timeZone !== '';\n}","import _isFunction from \"lodash/isFunction\";\nimport _isEqual from \"lodash/isEqual\";\nimport _isString from \"lodash/isString\";\nimport _isObject from \"lodash/isObject\";\nimport _get from \"lodash/get\";\nimport { format, isValid, isSameSecond, isEqual as isDateEqual, isDate } from 'date-fns';\nimport BaseFoundation from '../base/foundation';\nimport { isValidDate, isTimestamp } from './_utils/index';\nimport isNullOrUndefined from '../utils/isNullOrUndefined';\nimport { utcToZonedTime, zonedTimeToUtc } from '../utils/date-fns-extra';\nimport { compatibleParse } from './_utils/parser';\nimport { getDefaultFormatTokenByType } from './_utils/getDefaultFormatToken';\nimport { strings } from './constants';\nimport { strings as inputStrings } from '../input/constants';\nimport getInsetInputFormatToken from './_utils/getInsetInputFormatToken';\nimport getInsetInputValueFromInsetInputStr from './_utils/getInsetInputValueFromInsetInputStr';\nimport isValidTimeZone from './_utils/isValidTimeZone';\nimport warning from '../utils/warning';\n/**\n * The datePicker foundation.js is responsible for maintaining the date value and the input box value, as well as the callback of both\n * task 1. Accept the selected date change, update the date value, and update the input box value according to the date = > Notify the change\n * task 2. When the input box changes, update the date value = > Notify the change\n */\nexport default class DatePickerFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n /**\n * clear range input focus when open is controlled\n * fixed github 1375\n */\n this.clearRangeInputFocus = () => {\n const {\n type\n } = this._adapter.getProps();\n const {\n rangeInputFocus\n } = this._adapter.getStates();\n if (type === 'dateTimeRange' && rangeInputFocus) {\n this._adapter.setRangeInputFocus(false);\n }\n };\n this._isRangeType = () => {\n const type = this._adapter.getProp('type');\n return /range/i.test(type);\n };\n this._isRangeValueComplete = value => {\n let result = false;\n if (Array.isArray(value)) {\n result = !value.some(date => isNullOrUndefined(date));\n }\n return result;\n };\n }\n init() {\n const timeZone = this.getProp('timeZone');\n if (this._isControlledComponent()) {\n this.initFromProps({\n timeZone,\n value: this.getProp('value')\n });\n } else if (this._isInProps('defaultValue')) {\n this.initFromProps({\n timeZone,\n value: this.getProp('defaultValue')\n });\n }\n this.initPanelOpenStatus(this.getProp('defaultOpen'));\n }\n initFromProps(_ref) {\n let {\n value,\n timeZone,\n prevTimeZone\n } = _ref;\n const _value = (Array.isArray(value) ? [...value] : (value || value === 0) && [value]) || [];\n const result = this.parseWithTimezone(_value, timeZone, prevTimeZone);\n this._adapter.updatePrevTimezone(prevTimeZone);\n // reset input value when value update\n this.clearInputValue();\n this._adapter.updateValue(result);\n this.resetCachedSelectedValue(result);\n this.initRangeInputFocus(result);\n if (this._adapter.needConfirm()) {\n this._adapter.updateCachedSelectedValue(result);\n }\n }\n /**\n * 如果用户传了一个空的 value,需要把 range input focus 设置为 rangeStart,这样用户可以清除完之后继续从开始选择\n *\n * If the user passes an empty value, you need to set the range input focus to rangeStart, so that the user can continue to select from the beginning after clearing\n */\n initRangeInputFocus(result) {\n const {\n triggerRender\n } = this.getProps();\n if (this._isRangeType() && _isFunction(triggerRender) && result.length === 0) {\n this._adapter.setRangeInputFocus('rangeStart');\n }\n }\n /**\n * value 可能是 UTC value 也可能是 zoned value\n *\n * UTC value -> 受控传入的 value\n *\n * zoned value -> statue.value,保存的是当前计算机时区下选择的日期\n *\n * 如果是时区变化,则需要将旧 zoned value 转为新时区下的 zoned value\n *\n * 如果是 value 变化,则不需要传入之前的时区,将 UTC value 转为 zoned value 即可\n *\n */\n parseWithTimezone(value, timeZone, prevTimeZone) {\n const result = [];\n if (Array.isArray(value) && value.length) {\n for (const v of value) {\n let parsedV = (v || v === 0) && this._parseValue(v);\n if (parsedV) {\n if (isValidTimeZone(prevTimeZone)) {\n parsedV = zonedTimeToUtc(parsedV, prevTimeZone);\n }\n result.push(isValidTimeZone(timeZone) ? utcToZonedTime(parsedV, timeZone) : parsedV);\n } else {\n warning(true, `[Semi DatePicker] value cannot be parsed, value: ${String(v)}`);\n }\n }\n }\n return result;\n }\n _isMultiple() {\n return Boolean(this.getProp('multiple'));\n }\n /**\n *\n * Verify and parse the following three format inputs\n *\n 1. Date object\n 2. ISO 9601-compliant string\n 3. ts timestamp\n Unified here to format the incoming value and output it as a Date object\n *\n */\n _parseValue(value) {\n const dateFnsLocale = this._adapter.getProp('dateFnsLocale');\n let dateObj;\n if (!value && value !== 0) {\n return new Date();\n }\n if (isValidDate(value)) {\n dateObj = value;\n } else if (_isString(value)) {\n dateObj = compatibleParse(value, this.getProp('format'), undefined, dateFnsLocale);\n } else if (isTimestamp(value)) {\n dateObj = new Date(value);\n } else {\n throw new TypeError('defaultValue should be valid Date object/timestamp or string');\n }\n return dateObj;\n }\n destroy() {\n // Ensure that event listeners will be uninstalled and users may not trigger closePanel\n this._adapter.togglePanel(false);\n this._adapter.unregisterClickOutSide();\n }\n initPanelOpenStatus(defaultOpen) {\n if ((this.getProp('open') || defaultOpen) && !this.getProp('disabled')) {\n this._adapter.togglePanel(true);\n this._adapter.registerClickOutSide();\n } else {\n this._adapter.togglePanel(false);\n this._adapter.unregisterClickOutSide();\n }\n }\n openPanel() {\n if (!this.getProp('disabled')) {\n if (!this._isControlledComponent('open')) {\n this.open();\n }\n this._adapter.notifyOpenChange(true);\n }\n }\n /**\n * clear inset input value when close panel\n */\n clearInsetInputValue() {\n const {\n insetInput\n } = this._adapter.getProps();\n if (insetInput) {\n this._adapter.updateInsetInputValue(null);\n }\n }\n /**\n * call it when change state value or input value\n */\n resetCachedSelectedValue(willUpdateDates) {\n const {\n value,\n cachedSelectedValue\n } = this._adapter.getStates();\n const newCachedSelectedValue = Array.isArray(willUpdateDates) ? willUpdateDates : value;\n if (!_isEqual(newCachedSelectedValue, cachedSelectedValue)) {\n this._adapter.updateCachedSelectedValue(newCachedSelectedValue);\n }\n }\n /**\n * timing to call closePanel\n * 1. click confirm button\n * 2. click cancel button\n * 3. select date, time, year, month\n * - date type and not multiple, close panel after select date\n * - dateRange type, close panel after select rangeStart and rangeEnd\n * 4. click outside\n */\n closePanel() {\n if (!this._isControlledComponent('open')) {\n this.close();\n } else {\n this.resetInnerSelectedStates();\n }\n this._adapter.notifyOpenChange(false);\n }\n open() {\n this._adapter.togglePanel(true);\n this._adapter.registerClickOutSide();\n }\n close() {\n this._adapter.togglePanel(false);\n this.resetInnerSelectedStates();\n this._adapter.unregisterClickOutSide();\n }\n focus(focusType) {\n if (this._isRangeType()) {\n const rangeInputFocus = focusType !== null && focusType !== void 0 ? focusType : 'rangeStart';\n this._adapter.setRangeInputFocus(rangeInputFocus);\n } else {\n this._adapter.setInputFocus();\n }\n }\n blur() {\n if (this._isRangeType()) {\n this._adapter.setRangeInputBlur();\n } else {\n this._adapter.setInputBlur();\n }\n }\n /**\n * reset cachedSelectedValue, inputValue when close panel\n */\n resetInnerSelectedStates() {\n // 通过 setTimeout 保证需要获取到最新的 state 状态\n setTimeout(() => {\n const {\n value,\n cachedSelectedValue\n } = this._adapter.getStates();\n if (!_isEqual(value, cachedSelectedValue)) {\n this.resetCachedSelectedValue(value);\n }\n }, 0);\n this.resetFocus();\n this.clearInputValue();\n }\n resetFocus(e) {\n this._adapter.setRangeInputFocus(false);\n this._adapter.notifyBlur(e);\n }\n /**\n * cachedSelectedValue can be `(Date|null)[]` or `null`\n */\n isCachedSelectedValueValid(dates) {\n const cachedSelectedValue = dates || this._adapter.getState('cachedSelectedValue');\n const {\n type\n } = this._adapter.getProps();\n let isValid = true;\n switch (true) {\n case type === 'dateRange':\n case type === 'dateTimeRange':\n if (!this._isRangeValueComplete(cachedSelectedValue)) {\n isValid = false;\n }\n break;\n default:\n const value = cachedSelectedValue === null || cachedSelectedValue === void 0 ? void 0 : cachedSelectedValue.filter(item => item);\n if (!(Array.isArray(value) && value.length)) {\n isValid = false;\n }\n break;\n }\n return isValid;\n }\n /**\n * 将输入框内容置空\n */\n clearInputValue() {\n this._adapter.updateInputValue(null);\n this._adapter.updateInsetInputValue(null);\n }\n /**\n * Callback when the content of the input box changes\n * Update the date panel if the changed value is a legal date, otherwise only update the input box\n * @param {String} input The value of the input box after the change\n * @param {Event} e\n */\n handleInputChange(input, e) {\n const result = this._isMultiple() ? this.parseMultipleInput(input) : this.parseInput(input);\n const {\n value: stateValue\n } = this.getStates();\n this._updateCachedSelectedValueFromInput(input);\n // Enter a valid date or empty\n if (result && result.length || input === '') {\n // If you click the clear button\n if (_get(e, inputStrings.CLEARBTN_CLICKED_EVENT_FLAG) && this._isControlledComponent('value')) {\n this._notifyChange(result);\n return;\n }\n this._updateValueAndInput(result, input === '', input);\n // Updates the selected value when entering a valid date\n const changedDates = this._getChangedDates(result);\n if (!this._someDateDisabled(changedDates, result)) {\n if (!_isEqual(result, stateValue)) {\n this._notifyChange(result);\n }\n }\n } else {\n this._adapter.updateInputValue(input);\n }\n }\n /**\n * inset input 变化时需要更新以下 state 状态\n * - insetInputValue(总是)\n * - inputValue(可以解析为合法日期时)\n * - value(可以解析为合法日期时)\n */\n handleInsetInputChange(options) {\n const {\n insetInputStr,\n format,\n insetInputValue\n } = options;\n const _isMultiple = this._isMultiple();\n const result = _isMultiple ? this.parseMultipleInput(insetInputStr, format) : this.parseInput(insetInputStr, format);\n const {\n value: stateValue\n } = this.getStates();\n this._updateCachedSelectedValueFromInput(insetInputStr);\n if (result && result.length) {\n const changedDates = this._getChangedDates(result);\n if (!this._someDateDisabled(changedDates, result)) {\n if (!_isEqual(result, stateValue)) {\n if (!this._isControlledComponent() && !this._adapter.needConfirm()) {\n this._adapter.updateValue(result);\n }\n this._notifyChange(result);\n }\n const triggerInput = _isMultiple ? this.formatMultipleDates(result) : this.formatDates(result);\n this._adapter.updateInputValue(triggerInput);\n }\n }\n this._adapter.updateInsetInputValue(insetInputValue);\n }\n /**\n * when input change we reset cached selected value\n */\n _updateCachedSelectedValueFromInput(input) {\n const looseResult = this.getLooseDateFromInput(input);\n const changedLooseResult = this._getChangedDates(looseResult);\n if (!this._someDateDisabled(changedLooseResult, looseResult)) {\n this.resetCachedSelectedValue(looseResult);\n }\n }\n /**\n * Input box blur\n * @param {String} input\n * @param {Event} e\n */\n handleInputBlur() {\n let input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n let e = arguments.length > 1 ? arguments[1] : undefined;\n }\n /**\n * called when range type rangeEnd input tab press\n * @param {Event} e\n */\n handleRangeEndTabPress(e) {\n this._adapter.setRangeInputFocus(false);\n }\n /**\n * called when the input box is focused\n * @param {Event} e input focus event\n * @param {String} range 'rangeStart' or 'rangeEnd', use when type is range\n */\n handleInputFocus(e, range) {\n const rangeInputFocus = this._adapter.getState('rangeInputFocus');\n range && this._adapter.setRangeInputFocus(range);\n /**\n * rangeType: only notify when range is false\n * not rangeType: notify when focus\n */\n if (!range || !['rangeStart', 'rangeEnd'].includes(rangeInputFocus)) {\n this._adapter.notifyFocus(e, range);\n }\n }\n handleSetRangeFocus(rangeInputFocus) {\n this._adapter.setRangeInputFocus(rangeInputFocus);\n }\n handleInputClear(e) {\n this._adapter.notifyClear(e);\n }\n /**\n * 范围选择清除按钮回调\n * 因为清除按钮没有集成在Input内,因此需要手动清除 value、inputValue、cachedValue\n *\n * callback of range input clear button\n * Since the clear button is not integrated in Input, you need to manually clear value, inputValue, cachedValue\n */\n handleRangeInputClear(e) {\n const value = [];\n const inputValue = '';\n if (!this._isControlledComponent('value')) {\n this._updateValueAndInput(value, true, inputValue);\n this._adapter.updateInsetInputValue(null);\n this.resetCachedSelectedValue(value);\n }\n this._notifyChange(value);\n this._adapter.setRangeInputFocus(false);\n this._adapter.notifyClear(e);\n }\n handleRangeInputBlur(value, e) {}\n // Parses input only after user returns\n handleInputComplete() {\n let input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n // console.log(input);\n let parsedResult = input ? this._isMultiple() ? this.parseMultipleInput(input, ',', true) : this.parseInput(input) : [];\n parsedResult = parsedResult && parsedResult.length ? parsedResult : this.getState('value');\n // Use the current date as the value when the current input is empty and the last input is also empty\n if (!parsedResult || !parsedResult.length) {\n const nowDate = new Date();\n if (this._isRangeType()) {\n parsedResult = [nowDate, nowDate];\n } else {\n parsedResult = [nowDate];\n }\n }\n this._updateValueAndInput(parsedResult);\n const {\n value: stateValue\n } = this.getStates();\n const changedDates = this._getChangedDates(parsedResult);\n if (!this._someDateDisabled(changedDates, parsedResult) && !_isEqual(parsedResult, stateValue)) {\n this._notifyChange(parsedResult);\n }\n }\n /**\n * Parse the input, return the time object if it is valid,\n * otherwise return \"\n *\n * @param {string} input\n * @returns {Date [] | '}\n */\n parseInput() {\n let input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n let format = arguments.length > 1 ? arguments[1] : undefined;\n let result = [];\n // console.log(input);\n const {\n dateFnsLocale,\n rangeSeparator\n } = this.getProps();\n if (input && input.length) {\n const type = this.getProp('type');\n const formatToken = format || this.getProp('format') || getDefaultFormatTokenByType(type);\n let parsedResult, formatedInput;\n const nowDate = new Date();\n switch (type) {\n case 'date':\n case 'dateTime':\n case 'month':\n parsedResult = input ? compatibleParse(input, formatToken, nowDate, dateFnsLocale) : '';\n formatedInput = parsedResult && isValid(parsedResult) && this.localeFormat(parsedResult, formatToken);\n if (parsedResult && formatedInput === input) {\n result = [parsedResult];\n }\n break;\n case 'dateRange':\n case 'dateTimeRange':\n case 'monthRange':\n const separator = rangeSeparator;\n const values = input.split(separator);\n parsedResult = values && values.reduce((arr, cur) => {\n const parsedVal = cur && compatibleParse(cur, formatToken, nowDate, dateFnsLocale);\n parsedVal && arr.push(parsedVal);\n return arr;\n }, []);\n formatedInput = parsedResult && parsedResult.map(v => v && isValid(v) && this.localeFormat(v, formatToken)).join(separator);\n if (parsedResult && formatedInput === input) {\n parsedResult.sort((d1, d2) => d1.getTime() - d2.getTime());\n result = parsedResult;\n }\n break;\n default:\n break;\n }\n }\n return result;\n }\n /**\n * get date which may include null from input\n */\n getLooseDateFromInput(input) {\n const value = this._isMultiple() ? this.parseMultipleInputLoose(input) : this.parseInputLoose(input);\n return value;\n }\n /**\n * parse input into `Array`, loose means return value includes `null`\n *\n * @example\n * ```javascript\n * parseInputLoose('2022-03-15 ~ '); // [Date, null]\n * parseInputLoose(' ~ 2022-03-15 '); // [null, Date]\n * parseInputLoose(''); // []\n * parseInputLoose('2022-03- ~ 2022-0'); // [null, null]\n * ```\n */\n parseInputLoose() {\n let input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n let result = [];\n const {\n dateFnsLocale,\n rangeSeparator,\n type,\n format\n } = this.getProps();\n if (input && input.length) {\n const formatToken = format || getDefaultFormatTokenByType(type);\n let parsedResult, formatedInput;\n const nowDate = new Date();\n switch (type) {\n case 'date':\n case 'dateTime':\n case 'month':\n const _parsedResult = compatibleParse(input, formatToken, nowDate, dateFnsLocale);\n if (isValidDate(_parsedResult)) {\n formatedInput = this.localeFormat(_parsedResult, formatToken);\n if (formatedInput === input) {\n parsedResult = _parsedResult;\n }\n } else {\n parsedResult = null;\n }\n result = [parsedResult];\n break;\n case 'dateRange':\n case 'dateTimeRange':\n const separator = rangeSeparator;\n const values = input.split(separator);\n parsedResult = values && values.reduce((arr, cur) => {\n let parsedVal = null;\n const _parsedResult = compatibleParse(cur, formatToken, nowDate, dateFnsLocale);\n if (isValidDate(_parsedResult)) {\n formatedInput = this.localeFormat(_parsedResult, formatToken);\n if (formatedInput === cur) {\n parsedVal = _parsedResult;\n }\n }\n arr.push(parsedVal);\n return arr;\n }, []);\n if (Array.isArray(parsedResult) && parsedResult.every(item => isValid(item))) {\n parsedResult.sort((d1, d2) => d1.getTime() - d2.getTime());\n }\n result = parsedResult;\n break;\n default:\n break;\n }\n }\n return result;\n }\n /**\n * parse multiple into `Array`, loose means return value includes `null`\n *\n * @example\n * ```javascript\n * parseMultipleInputLoose('2021-01-01,2021-10-15'); // [Date, Date];\n * parseMultipleInputLoose('2021-01-01,2021-10-'); // [Date, null];\n * parseMultipleInputLoose(''); // [];\n * ```\n */\n parseMultipleInputLoose() {\n let input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n let separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : strings.DEFAULT_SEPARATOR_MULTIPLE;\n let needDedupe = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n const max = this.getProp('max');\n const inputArr = input.split(separator);\n const result = [];\n for (const curInput of inputArr) {\n let tmpParsed = curInput && this.parseInputLoose(curInput);\n tmpParsed = Array.isArray(tmpParsed) ? tmpParsed : tmpParsed && [tmpParsed];\n if (tmpParsed && tmpParsed.length) {\n if (needDedupe) {\n !result.filter(r => Boolean(tmpParsed.find(tp => isSameSecond(r, tp)))) && result.push(...tmpParsed);\n } else {\n result.push(...tmpParsed);\n }\n } else {\n return [];\n }\n if (max && max > 0 && result.length > max) {\n return [];\n }\n }\n return result;\n }\n /**\n * Parses the input when multiple is true, if valid,\n * returns a list of time objects, otherwise returns an array\n *\n * @param {string} [input='']\n * @param {string} [separator=',']\n * @param {boolean} [needDedupe=false]\n * @returns {Date[]}\n */\n parseMultipleInput() {\n let input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n let separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : strings.DEFAULT_SEPARATOR_MULTIPLE;\n let needDedupe = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n const max = this.getProp('max');\n const inputArr = input.split(separator);\n const result = [];\n for (const curInput of inputArr) {\n let tmpParsed = curInput && this.parseInput(curInput);\n tmpParsed = Array.isArray(tmpParsed) ? tmpParsed : tmpParsed && [tmpParsed];\n if (tmpParsed && tmpParsed.length) {\n if (needDedupe) {\n // 20190519 TODO: needs to determine the case where multiple is true and range\n !result.filter(r => Boolean(tmpParsed.find(tp => isSameSecond(r, tp)))) && result.push(...tmpParsed);\n } else {\n result.push(...tmpParsed);\n }\n } else {\n return [];\n }\n if (max && max > 0 && result.length > max) {\n return [];\n }\n }\n return result;\n }\n /**\n * dates[] => string\n *\n * @param {Date[]} dates\n * @returns {string}\n */\n formatDates() {\n let dates = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let customFormat = arguments.length > 1 ? arguments[1] : undefined;\n let str = '';\n const rangeSeparator = this.getProp('rangeSeparator');\n if (Array.isArray(dates) && dates.length) {\n const type = this.getProp('type');\n const formatToken = customFormat || this.getProp('format') || getDefaultFormatTokenByType(type);\n switch (type) {\n case 'date':\n case 'dateTime':\n case 'month':\n str = this.localeFormat(dates[0], formatToken);\n break;\n case 'dateRange':\n case 'dateTimeRange':\n case 'monthRange':\n const startIsTruthy = !isNullOrUndefined(dates[0]);\n const endIsTruthy = !isNullOrUndefined(dates[1]);\n if (startIsTruthy && endIsTruthy) {\n str = `${this.localeFormat(dates[0], formatToken)}${rangeSeparator}${this.localeFormat(dates[1], formatToken)}`;\n } else {\n if (startIsTruthy) {\n str = `${this.localeFormat(dates[0], formatToken)}${rangeSeparator}`;\n } else if (endIsTruthy) {\n str = `${rangeSeparator}${this.localeFormat(dates[1], formatToken)}`;\n }\n }\n break;\n default:\n break;\n }\n }\n return str;\n }\n /**\n * dates[] => string\n *\n * @param {Date[]} dates\n * @returns {string}\n */\n formatMultipleDates() {\n let dates = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : strings.DEFAULT_SEPARATOR_MULTIPLE;\n let customFormat = arguments.length > 2 ? arguments[2] : undefined;\n const strs = [];\n if (Array.isArray(dates) && dates.length) {\n const type = this.getProp('type');\n switch (type) {\n case 'date':\n case 'dateTime':\n case 'month':\n dates.forEach(date => strs.push(this.formatDates([date], customFormat)));\n break;\n case 'dateRange':\n case 'dateTimeRange':\n case 'monthRange':\n for (let i = 0; i < dates.length; i += 2) {\n strs.push(this.formatDates(dates.slice(i, i + 2), customFormat));\n }\n break;\n default:\n break;\n }\n }\n return strs.join(separator);\n }\n /**\n * Update date value and the value of the input box\n * 1. Select Update\n * 2. Input Update\n * @param {Date|''} value\n * @param {Boolean} forceUpdateValue\n * @param {String} input\n */\n _updateValueAndInput(value, forceUpdateValue, input) {\n let _value;\n if (forceUpdateValue || value) {\n if (!Array.isArray(value)) {\n _value = value ? [value] : [];\n } else {\n _value = value;\n }\n const changedDates = this._getChangedDates(_value);\n // You cannot update the value directly when needConfirm, you can only change the value through handleConfirm\n if (!this._isControlledComponent() && !this._someDateDisabled(changedDates, _value) && !this._adapter.needConfirm()) {\n this._adapter.updateValue(_value);\n }\n }\n this._adapter.updateInputValue(input);\n }\n /**\n * when changing the selected value through the date panel\n * @param {*} value\n * @param {*} options\n */\n handleSelectedChange(value, options) {\n const {\n type,\n format,\n rangeSeparator,\n insetInput\n } = this._adapter.getProps();\n const {\n value: stateValue\n } = this.getStates();\n const controlled = this._isControlledComponent();\n const fromPreset = _isObject(options) ? options.fromPreset : options;\n const closePanel = _get(options, 'closePanel', true);\n /**\n * It is used to determine whether the panel can be stowed. In a Range type component, it is necessary to select both starting Time and endTime before stowing.\n * To determine whether both starting Time and endTime have been selected, it is used to judge whether the two inputs have been Focused.\n * This variable is used to indicate whether such a judgment is required. In the scene with shortcut operations, it is not required.\n */\n const needCheckFocusRecord = _get(options, 'needCheckFocusRecord', true);\n const dates = Array.isArray(value) ? [...value] : value ? [value] : [];\n const changedDates = this._getChangedDates(dates);\n let inputValue, insetInputValue;\n if (!this._someDateDisabled(changedDates, dates)) {\n this.resetCachedSelectedValue(dates);\n inputValue = this._isMultiple() ? this.formatMultipleDates(dates) : this.formatDates(dates);\n if (insetInput) {\n const insetInputFormatToken = getInsetInputFormatToken({\n format,\n type\n });\n const insetInputStr = this._isMultiple() ? this.formatMultipleDates(dates, undefined, insetInputFormatToken) : this.formatDates(dates, insetInputFormatToken);\n insetInputValue = getInsetInputValueFromInsetInputStr({\n inputValue: insetInputStr,\n type,\n rangeSeparator\n });\n }\n const isRangeTypeAndInputIncomplete = this._isRangeType() && !this._isRangeValueComplete(dates);\n /**\n * If the input is incomplete when under control, the notifyChange is not triggered because\n * You need to update the value of the input box, otherwise there will be a problem that a date is selected but the input box does not show the date #1357\n *\n * 受控时如果输入不完整,由于没有触发 notifyChange\n * 需要组件内更新一下输入框的值,否则会出现选了一个日期但是输入框没有回显日期的问题 #1357\n */\n if (isRangeTypeAndInputIncomplete) {\n // do not change value when selected value is incomplete\n this._adapter.updateInputValue(inputValue);\n this._adapter.updateInsetInputValue(insetInputValue);\n return;\n } else {\n if (!controlled || fromPreset) {\n this._updateValueAndInput(dates, true, inputValue);\n this._adapter.updateInsetInputValue(insetInputValue);\n }\n }\n if (!_isEqual(value, stateValue)) {\n this._notifyChange(value);\n }\n }\n const focusRecordChecked = !needCheckFocusRecord || needCheckFocusRecord && this._adapter.couldPanelClosed();\n if (type === 'date' && !this._isMultiple() && closePanel || type === 'dateRange' && this._isRangeValueComplete(dates) && closePanel && focusRecordChecked) {\n this.closePanel();\n }\n }\n /**\n * when changing the year and month through the panel when the type is year or month or monthRange\n * @param {*} item\n */\n handleYMSelectedChange() {\n let item = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // console.log(item);\n const {\n currentMonth,\n currentYear\n } = item;\n const {\n type\n } = this.getProps();\n if (type === 'month') {\n const date = new Date(currentYear['left'], currentMonth['left'] - 1);\n this.handleSelectedChange([date]);\n } else {\n const dateLeft = new Date(currentYear['left'], currentMonth['left'] - 1);\n const dateRight = new Date(currentYear['right'], currentMonth['right'] - 1);\n this.handleSelectedChange([dateLeft, dateRight]);\n }\n }\n handleConfirm() {\n const {\n cachedSelectedValue,\n value\n } = this._adapter.getStates();\n const isRangeValueComplete = this._isRangeValueComplete(cachedSelectedValue);\n const newValue = isRangeValueComplete ? cachedSelectedValue : value;\n if (this._adapter.needConfirm() && !this._isControlledComponent()) {\n this._adapter.updateValue(newValue);\n }\n // If the input is incomplete, the legal date of the last input is used\n this.closePanel();\n if (isRangeValueComplete) {\n const {\n notifyValue,\n notifyDate\n } = this.disposeCallbackArgs(cachedSelectedValue);\n this._adapter.notifyConfirm(notifyDate, notifyValue);\n }\n }\n handleCancel() {\n this.closePanel();\n const value = this.getState('value');\n const {\n notifyValue,\n notifyDate\n } = this.disposeCallbackArgs(value);\n this._adapter.notifyCancel(notifyDate, notifyValue);\n }\n handlePresetClick(item, e) {\n const {\n type,\n timeZone\n } = this.getProps();\n const prevTimeZone = this.getState('prevTimezone');\n const start = typeof item.start === 'function' ? item.start() : item.start;\n const end = typeof item.end === 'function' ? item.end() : item.end;\n let value;\n switch (type) {\n case 'month':\n case 'dateTime':\n case 'date':\n value = this.parseWithTimezone([start], timeZone, prevTimeZone);\n this.handleSelectedChange(value);\n break;\n case 'dateTimeRange':\n case 'dateRange':\n value = this.parseWithTimezone([start, end], timeZone, prevTimeZone);\n this.handleSelectedChange(value, {\n needCheckFocusRecord: false\n });\n break;\n default:\n break;\n }\n this._adapter.notifyPresetsClick(item, e);\n }\n /**\n * 根据 type 处理 onChange 返回的参数\n *\n * - 返回的日期需要把用户时间转换为设置的时区时间\n * - 用户时间:用户计算机系统时间\n * - 时区时间:通过 ConfigProvider 设置的 timeZone\n * - 例子:用户设置时区为+9,计算机所在时区为+8区,然后用户选择了22:00\n * - DatePicker 内部保存日期 state 为 +8 的 22:00 => a = new Date(\"2021-05-25 22:00:00\")\n * - 传出去时,需要把 +8 的 22:00 => +9 的 22:00 => b = zonedTimeToUtc(a, \"+09:00\");\n *\n * According to the type processing onChange returned parameters\n *\n * - the returned date needs to convert the user time to the set time zone time\n * - user time: user computer system time\n * - time zone time: timeZone set by ConfigProvider\n * - example: the user sets the time zone to + 9, the computer's time zone is + 8 zone, and then the user selects 22:00\n * - DatePicker internal save date state is + 8 22:00 = > a = new Date (\"2021-05-25 22:00:00\")\n * - when passed out, you need to + 8 22:00 = > + 9 22:00 = > b = zonedTimeToUtc (a, \"+ 09:00\");\n *\n * e.g.\n * let a = new Date (\"2021-05-25 22:00:00\");\n * = > Tue May 25 2021 22:00:00 GMT + 0800 (China Standard Time)\n * let b = zonedTimeToUtc (a, \"+ 09:00\");\n * = > Tue May 25 2021 21:00:00 GMT + 0800 (China Standard Time)\n *\n * @param {Date|Date[]} value\n * @return {{ notifyDate: Date|Date[], notifyValue: string|string[]}}\n */\n disposeCallbackArgs(value) {\n let _value = Array.isArray(value) ? value : value && [value] || [];\n const timeZone = this.getProp('timeZone');\n if (isValidTimeZone(timeZone)) {\n _value = _value.map(date => zonedTimeToUtc(date, timeZone));\n }\n const type = this.getProp('type');\n const formatToken = this.getProp('format') || getDefaultFormatTokenByType(type);\n let notifyValue, notifyDate;\n switch (type) {\n case 'date':\n case 'dateTime':\n case 'month':\n if (!this._isMultiple()) {\n notifyValue = _value[0] && this.localeFormat(_value[0], formatToken);\n [notifyDate] = _value;\n } else {\n notifyValue = _value.map(v => v && this.localeFormat(v, formatToken));\n notifyDate = [..._value];\n }\n break;\n case 'dateRange':\n case 'dateTimeRange':\n case 'monthRange':\n notifyValue = _value.map(v => v && this.localeFormat(v, formatToken));\n notifyDate = [..._value];\n break;\n default:\n break;\n }\n return {\n notifyValue,\n notifyDate\n };\n }\n /**\n * Notice: Check whether the date is the same as the state value before calling\n * @param {Date[]} value\n */\n _notifyChange(value) {\n if (this._isRangeType() && !this._isRangeValueComplete(value)) {\n return;\n }\n const {\n onChangeWithDateFirst\n } = this.getProps();\n const {\n notifyValue,\n notifyDate\n } = this.disposeCallbackArgs(value);\n if (onChangeWithDateFirst) {\n this._adapter.notifyChange(notifyDate, notifyValue);\n } else {\n this._adapter.notifyChange(notifyValue, notifyDate);\n }\n }\n /**\n * Get the date changed through the date panel or enter\n */\n _getChangedDates(dates) {\n const type = this._adapter.getProp('type');\n const {\n cachedSelectedValue: lastDate\n } = this._adapter.getStates();\n const changedDates = [];\n switch (type) {\n case 'dateRange':\n case 'dateTimeRange':\n const [lastStart, lastEnd] = lastDate;\n const [start, end] = dates;\n if (!isDateEqual(start, lastStart)) {\n changedDates.push(start);\n }\n if (!isDateEqual(end, lastEnd)) {\n changedDates.push(end);\n }\n break;\n default:\n const lastValueSet = new Set();\n lastDate.forEach(value => lastValueSet.add(isDate(value) && value.valueOf()));\n for (const date of dates) {\n if (!lastValueSet.has(isDate(date) && date.valueOf())) {\n changedDates.push(date);\n }\n }\n }\n return changedDates;\n }\n /**\n * Whether a date is disabled\n * @param value The date that needs to be judged whether to disable\n * @param selectedValue Selected date, when selecting a range, pass this date to the second parameter of `disabledDate`\n */\n _someDateDisabled(value, selectedValue) {\n const {\n rangeInputFocus\n } = this.getStates();\n const disabledOptions = {\n rangeStart: '',\n rangeEnd: '',\n rangeInputFocus\n };\n // DisabledDate needs to pass the second parameter\n if (this._isRangeType() && Array.isArray(selectedValue)) {\n if (isValid(selectedValue[0])) {\n const rangeStart = format(selectedValue[0], 'yyyy-MM-dd');\n disabledOptions.rangeStart = rangeStart;\n }\n if (isValid(selectedValue[1])) {\n const rangeEnd = format(selectedValue[1], 'yyyy-MM-dd');\n disabledOptions.rangeEnd = rangeEnd;\n }\n }\n let isSomeDateDisabled = false;\n for (const date of value) {\n // skip check if date is null\n if (!isNullOrUndefined(date) && this.disabledDisposeDate(date, disabledOptions)) {\n isSomeDateDisabled = true;\n break;\n }\n }\n return isSomeDateDisabled;\n }\n /**\n * Format locale date\n * locale get from LocaleProvider\n * @param {Date} date\n * @param {String} token\n */\n localeFormat(date, token) {\n const dateFnsLocale = this._adapter.getProp('dateFnsLocale');\n return format(date, token, {\n locale: dateFnsLocale\n });\n }\n /**\n * Convert computer date to UTC date\n * Before passing the date to the user, you need to convert the date to UTC time\n * dispose date from computer date to utc date\n * When given timeZone prop, you should convert computer date to utc date before passing to user\n * @param {(date: Date) => Boolean} fn\n * @param {Date|Date[]} date\n * @returns {Boolean}\n */\n disposeDateFn(fn, date) {\n const {\n notifyDate\n } = this.disposeCallbackArgs(date);\n const dateIsArray = Array.isArray(date);\n const notifyDateIsArray = Array.isArray(notifyDate);\n let disposeDate;\n if (dateIsArray === notifyDateIsArray) {\n disposeDate = notifyDate;\n } else {\n disposeDate = dateIsArray ? [notifyDate] : notifyDate[0];\n }\n for (var _len = arguments.length, rest = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n rest[_key - 2] = arguments[_key];\n }\n return fn(disposeDate, ...rest);\n }\n /**\n * Determine whether the date is disabled\n * Whether the date is disabled\n * @param {Date} date\n * @returns {Boolean}\n */\n disabledDisposeDate(date) {\n const {\n disabledDate\n } = this.getProps();\n for (var _len2 = arguments.length, rest = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n rest[_key2 - 1] = arguments[_key2];\n }\n return this.disposeDateFn(disabledDate, date, ...rest);\n }\n /**\n * Determine whether the date is disabled\n * Whether the date time is disabled\n * @param {Date|Date[]} date\n * @returns {Object}\n */\n disabledDisposeTime(date) {\n const {\n disabledTime\n } = this.getProps();\n for (var _len3 = arguments.length, rest = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n rest[_key3 - 1] = arguments[_key3];\n }\n return this.disposeDateFn(disabledTime, date, ...rest);\n }\n /**\n * Trigger wrapper needs to do two things:\n * 1. Open Panel when clicking trigger;\n * 2. When clicking on a child but the child does not listen to the focus event, manually trigger focus\n *\n * @param {Event} e\n * @returns\n */\n handleTriggerWrapperClick(e) {\n const {\n disabled,\n triggerRender\n } = this._adapter.getProps();\n const {\n rangeInputFocus\n } = this._adapter.getStates();\n if (disabled) {\n return;\n }\n /**\n * - 非范围选择时,trigger 为原生输入框,已在组件内处理了 focus 逻辑\n * - isEventTarget 函数用于判断触发事件的是否为 input wrapper。如果是冒泡上来的不用处理,因为在子级已经处理了 focus 逻辑。\n *\n * - When type is not range type, Input component will automatically focus in the same case\n * - isEventTarget is used to judge whether the event is a bubbling event\n */\n if (this._isRangeType() && !rangeInputFocus) {\n if (this._adapter.isEventTarget(e)) {\n setTimeout(() => {\n // using setTimeout get correct state value 'rangeInputFocus'\n this.handleInputFocus(e, 'rangeStart');\n }, 0);\n } else if (_isFunction(triggerRender)) {\n // 如果是 triggerRender 场景,因为没有 input,因此打开面板时默认 focus 在 rangeStart\n // If it is a triggerRender scene, because there is no input, the default focus is rangeStart when the panel is opened\n this._adapter.setRangeInputFocus('rangeStart');\n }\n this.openPanel();\n } else {\n this.openPanel();\n }\n }\n handlePanelVisibleChange(visible) {\n if (visible) {\n this._adapter.setInsetInputFocus();\n /**\n * After the panel is closed, the trigger input is disabled\n * 面板关闭后,trigger input 禁用\n */\n setTimeout(() => {\n this._adapter.setTriggerDisabled(true);\n }, 0);\n } else {\n this._adapter.setTriggerDisabled(false);\n }\n }\n}","/**\n * @file\n * Date-related formatting display method\n */\nimport { format } from 'date-fns';\nimport { strings } from '../constants';\n/**\n * Formats the displayed date text\n * @param {string[]|Date[]} values\n * @param {string} formatToken\n * @param {Object} groupOptions\n * @param {Object} locale\n * @returns {string}\n */\nexport function formatDateValues(values, formatToken) {\n let {\n groupInnerSeparator = strings.DEFAULT_SEPARATOR_RANGE,\n groupSize = 1,\n groupSeparator = strings.DEFAULT_SEPARATOR_MULTIPLE\n } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n let locale = arguments.length > 3 ? arguments[3] : undefined;\n let text = '';\n (groupSize <= 0 || typeof groupSize !== 'number') && (groupSize = 1);\n // console.log(values, formatToken, groupInnerSeparator, groupSize, groupSeparator);\n if (Array.isArray(values) && values.length) {\n const groups = [];\n const {\n length\n } = values;\n // chunk\n for (let i = 0; i < length; i++) {\n if (i % groupSize === 0) {\n groups.push([]);\n }\n const curArrIdx = Math.floor(i / groupSize);\n groups[curArrIdx].push(values[i]);\n }\n text = groups.map(arr => arr.map(v => {\n if (v) {\n // console.log(`formatDateValues() -> formatDateValues: ${v}`);\n return format(v, formatToken, {\n locale\n });\n } else {\n return '';\n }\n }).join(groupInnerSeparator)).join(groupSeparator);\n }\n return text;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the months added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n */\nexport default function addMonths(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var amount = toInteger(dirtyAmount);\n if (isNaN(amount)) {\n return new Date(NaN);\n }\n if (!amount) {\n // If 0 months, no-op to avoid changing times in the hour before end of DST\n return date;\n }\n var dayOfMonth = date.getDate();\n\n // The JS Date object supports date math by accepting out-of-bounds values for\n // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we\n // want except that dates will wrap around the end of a month, meaning that\n // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n // we'll default to the end of the desired month by adding 1 to the desired\n // month and using a date of 0 to back up one day to the end of the desired\n // month.\n var endOfDesiredMonth = new Date(date.getTime());\n endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0);\n var daysInMonth = endOfDesiredMonth.getDate();\n if (dayOfMonth >= daysInMonth) {\n // If we're already at the end of the month, then this is the correct date\n // and we're done.\n return endOfDesiredMonth;\n } else {\n // Otherwise, we now know that setting the original day-of-month value won't\n // cause an overflow, so set the desired day-of-month. Note that we can't\n // just set the date of `endOfDesiredMonth` because that object may have had\n // its time changed in the unusual case where where a DST transition was on\n // the last day of the month and its local time was in the hour skipped or\n // repeated next to a DST transition. So we use `date` instead which is\n // guaranteed to still have the original time.\n date.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);\n return date;\n }\n}","import { addMonths } from 'date-fns';\nimport isValidDate from './isValidDate';\nimport { compatibleParse } from './parser';\nimport isTimestamp from './isTimestamp';\n/**\n * get left panel picker date and right panel picker date\n */\nexport default function getDefaultPickerDate(options) {\n const {\n defaultPickerValue,\n format,\n dateFnsLocale\n } = options;\n let nowDate = Array.isArray(defaultPickerValue) ? defaultPickerValue[0] : defaultPickerValue;\n let nextDate = Array.isArray(defaultPickerValue) ? defaultPickerValue[1] : undefined;\n switch (true) {\n case isValidDate(nowDate):\n break;\n case isTimestamp(nowDate):\n nowDate = new Date(nowDate);\n break;\n case typeof nowDate === 'string':\n nowDate = compatibleParse(nowDate, format, undefined, dateFnsLocale);\n break;\n default:\n nowDate = new Date();\n break;\n }\n switch (true) {\n case isValidDate(nextDate):\n break;\n case isTimestamp(nextDate):\n nextDate = new Date(nextDate);\n break;\n case typeof nextDate === 'string':\n nextDate = compatibleParse(nextDate, format, undefined, dateFnsLocale);\n break;\n default:\n nextDate = addMonths(nowDate, 1);\n break;\n }\n return {\n nowDate: nowDate,\n nextDate: nextDate\n };\n}","export interface Cache {\n has: (value: any) => boolean;\n set: (key: any, value: any) => void;\n get: (key: any) => any;\n}\n\nconst { toString: toStringFunction } = Function.prototype;\nconst { create } = Object;\nconst { toString: toStringObject } = Object.prototype;\n\n/**\n * @classdesc Fallback cache for when WeakMap is not natively supported\n */\nclass LegacyCache {\n private _keys: any[] = [];\n private _values: any[] = [];\n\n has(key: any) {\n return !!~this._keys.indexOf(key);\n }\n\n get(key: any) {\n return this._values[this._keys.indexOf(key)];\n }\n\n set(key: any, value: any) {\n this._keys.push(key);\n this._values.push(value);\n }\n}\n\nfunction createCacheLegacy(): Cache {\n return new LegacyCache();\n}\n\nfunction createCacheModern(): Cache {\n return new WeakMap();\n}\n\n/**\n * Get a new cache object to prevent circular references.\n */\nexport const createCache =\n typeof WeakMap !== 'undefined' ? createCacheModern : createCacheLegacy;\n\n/**\n * Get an empty version of the object with the same prototype it has.\n */\nexport function getCleanClone(prototype: any): any {\n if (!prototype) {\n return create(null);\n }\n\n const Constructor = prototype.constructor;\n\n if (Constructor === Object) {\n return prototype === Object.prototype ? {} : create(prototype);\n }\n\n if (\n Constructor &&\n ~toStringFunction.call(Constructor).indexOf('[native code]')\n ) {\n try {\n return new Constructor();\n } catch {}\n }\n\n return create(prototype);\n}\n\nfunction getRegExpFlagsLegacy(regExp: RegExp): string {\n let flags = '';\n\n if (regExp.global) {\n flags += 'g';\n }\n\n if (regExp.ignoreCase) {\n flags += 'i';\n }\n\n if (regExp.multiline) {\n flags += 'm';\n }\n\n if (regExp.unicode) {\n flags += 'u';\n }\n\n if (regExp.sticky) {\n flags += 'y';\n }\n\n return flags;\n}\n\nfunction getRegExpFlagsModern(regExp: RegExp): string {\n return regExp.flags;\n}\n\n/**\n * Get the flags to apply to the copied regexp.\n */\nexport const getRegExpFlags =\n /test/g.flags === 'g' ? getRegExpFlagsModern : getRegExpFlagsLegacy;\n\nfunction getTagLegacy(value: any): string {\n const type = toStringObject.call(value);\n\n return type.substring(8, type.length - 1);\n}\n\nfunction getTagModern(value: any): string {\n return value[Symbol.toStringTag] || getTagLegacy(value);\n}\n\n/**\n * Get the tag of the value passed, so that the correct copier can be used.\n */\nexport const getTag =\n typeof Symbol !== 'undefined' ? getTagModern : getTagLegacy;\n","import { getCleanClone, getRegExpFlags } from './utils';\n\nimport type { Cache } from './utils';\n\nexport type InternalCopier = (value: Value, state: State) => Value;\n\nexport interface State {\n Constructor: any;\n cache: Cache;\n copier: InternalCopier;\n prototype: any;\n}\n\nconst {\n defineProperty,\n getOwnPropertyDescriptor,\n getOwnPropertyNames,\n getOwnPropertySymbols,\n} = Object;\nconst { hasOwnProperty, propertyIsEnumerable } = Object.prototype;\n\nconst SUPPORTS_SYMBOL = typeof getOwnPropertySymbols === 'function';\n\nfunction getStrictPropertiesModern(object: any): Array {\n return (getOwnPropertyNames(object) as Array).concat(\n getOwnPropertySymbols(object)\n );\n}\n\n/**\n * Get the properites used when copying objects strictly. This includes both keys and symbols.\n */\nconst getStrictProperties = SUPPORTS_SYMBOL\n ? getStrictPropertiesModern\n : getOwnPropertyNames;\n\n/**\n * Striclty copy all properties contained on the object.\n */\nfunction copyOwnPropertiesStrict(\n value: Value,\n clone: Value,\n state: State\n): Value {\n const properties = getStrictProperties(value);\n\n for (\n let index = 0, length = properties.length, property, descriptor;\n index < length;\n ++index\n ) {\n property = properties[index];\n\n if (property === 'callee' || property === 'caller') {\n continue;\n }\n\n descriptor = getOwnPropertyDescriptor(value, property);\n\n if (!descriptor) {\n // In extra edge cases where the property descriptor cannot be retrived, fall back to\n // the loose assignment.\n (clone as any)[property] = state.copier((value as any)[property], state);\n continue;\n }\n\n // Only clone the value if actually a value, not a getter / setter.\n if (!descriptor.get && !descriptor.set) {\n descriptor.value = state.copier(descriptor.value, state);\n }\n\n try {\n defineProperty(clone, property, descriptor);\n } catch (error) {\n // Tee above can fail on node in edge cases, so fall back to the loose assignment.\n (clone as any)[property] = descriptor.value;\n }\n }\n\n return clone;\n}\n\n/**\n * Deeply copy the indexed values in the array.\n */\nexport function copyArrayLoose(array: any[], state: State) {\n const clone = new state.Constructor();\n\n // set in the cache immediately to be able to reuse the object recursively\n state.cache.set(array, clone);\n\n for (let index = 0, length = array.length; index < length; ++index) {\n clone[index] = state.copier(array[index], state);\n }\n\n return clone;\n}\n\n/**\n * Deeply copy the indexed values in the array, as well as any custom properties.\n */\nexport function copyArrayStrict(\n array: Value,\n state: State\n) {\n const clone = new state.Constructor() as Value;\n\n // set in the cache immediately to be able to reuse the object recursively\n state.cache.set(array, clone);\n\n return copyOwnPropertiesStrict(array, clone, state);\n}\n\n/**\n * Copy the contents of the ArrayBuffer.\n */\nexport function copyArrayBuffer(\n arrayBuffer: Value,\n _state: State\n): Value {\n return arrayBuffer.slice(0) as Value;\n}\n\n/**\n * Create a new Blob with the contents of the original.\n */\nexport function copyBlob(\n blob: Value,\n _state: State\n): Value {\n return blob.slice(0, blob.size, blob.type) as Value;\n}\n\n/**\n * Create a new DataView with the contents of the original.\n */\nexport function copyDataView(\n dataView: Value,\n state: State\n): Value {\n return new state.Constructor(copyArrayBuffer(dataView.buffer, state));\n}\n\n/**\n * Create a new Date based on the time of the original.\n */\nexport function copyDate(date: Value, state: State): Value {\n return new state.Constructor(date.getTime());\n}\n\n/**\n * Deeply copy the keys and values of the original.\n */\nexport function copyMapLoose>(\n map: Value,\n state: State\n): Value {\n const clone = new state.Constructor() as Value;\n\n // set in the cache immediately to be able to reuse the object recursively\n state.cache.set(map, clone);\n\n map.forEach((value, key) => {\n clone.set(key, state.copier(value, state));\n });\n\n return clone;\n}\n\n/**\n * Deeply copy the keys and values of the original, as well as any custom properties.\n */\nexport function copyMapStrict>(\n map: Value,\n state: State\n) {\n return copyOwnPropertiesStrict(map, copyMapLoose(map, state), state);\n}\n\nfunction copyObjectLooseLegacy>(\n object: Value,\n state: State\n): Value {\n const clone: any = getCleanClone(state.prototype);\n\n // set in the cache immediately to be able to reuse the object recursively\n state.cache.set(object, clone);\n\n for (const key in object) {\n if (hasOwnProperty.call(object, key)) {\n clone[key] = state.copier(object[key], state);\n }\n }\n\n return clone;\n}\n\nfunction copyObjectLooseModern>(\n object: Value,\n state: State\n): Value {\n const clone = getCleanClone(state.prototype);\n\n // set in the cache immediately to be able to reuse the object recursively\n state.cache.set(object, clone);\n\n for (const key in object) {\n if (hasOwnProperty.call(object, key)) {\n clone[key] = state.copier(object[key], state);\n }\n }\n\n const symbols = getOwnPropertySymbols(object);\n\n for (\n let index = 0, length = symbols.length, symbol;\n index < length;\n ++index\n ) {\n symbol = symbols[index];\n\n if (propertyIsEnumerable.call(object, symbol)) {\n clone[symbol] = state.copier((object as any)[symbol], state);\n }\n }\n\n return clone;\n}\n\n/**\n * Deeply copy the properties (keys and symbols) and values of the original.\n */\nexport const copyObjectLoose = SUPPORTS_SYMBOL\n ? copyObjectLooseModern\n : copyObjectLooseLegacy;\n\n/**\n * Deeply copy the properties (keys and symbols) and values of the original, as well\n * as any hidden or non-enumerable properties.\n */\nexport function copyObjectStrict>(\n object: Value,\n state: State\n): Value {\n const clone = getCleanClone(state.prototype);\n\n // set in the cache immediately to be able to reuse the object recursively\n state.cache.set(object, clone);\n\n return copyOwnPropertiesStrict(object, clone, state);\n}\n\n/**\n * Create a new primitive wrapper from the value of the original.\n */\nexport function copyPrimitiveWrapper<\n // Specifically use the object constructor types\n // eslint-disable-next-line @typescript-eslint/ban-types\n Value extends Boolean | Number | String\n>(primitiveObject: Value, state: State): Value {\n return new state.Constructor(primitiveObject.valueOf());\n}\n\n/**\n * Create a new RegExp based on the value and flags of the original.\n */\nexport function copyRegExp(\n regExp: Value,\n state: State\n): Value {\n const clone = new state.Constructor(\n regExp.source,\n getRegExpFlags(regExp)\n ) as Value;\n\n clone.lastIndex = regExp.lastIndex;\n\n return clone;\n}\n\n/**\n * Return the original value (an identity function).\n *\n * @note\n * THis is used for objects that cannot be copied, such as WeakMap.\n */\nexport function copySelf(value: Value, _state: State): Value {\n return value;\n}\n\n/**\n * Deeply copy the values of the original.\n */\nexport function copySetLoose>(\n set: Value,\n state: State\n): Value {\n const clone = new state.Constructor() as Value;\n\n // set in the cache immediately to be able to reuse the object recursively\n state.cache.set(set, clone);\n\n set.forEach((value) => {\n clone.add(state.copier(value, state));\n });\n\n return clone;\n}\n\n/**\n * Deeply copy the values of the original, as well as any custom properties.\n */\nexport function copySetStrict>(\n set: Value,\n state: State\n): Value {\n return copyOwnPropertiesStrict(set, copySetLoose(set, state), state);\n}\n","import {\n copyArrayBuffer,\n copyArrayLoose,\n copyArrayStrict,\n copyBlob,\n copyDataView,\n copyDate,\n copyMapLoose,\n copyMapStrict,\n copyObjectLoose,\n copyObjectStrict,\n copyPrimitiveWrapper,\n copyRegExp,\n copySelf,\n copySetLoose,\n copySetStrict,\n} from './copier';\nimport { createCache, getTag } from './utils';\n\nimport type { InternalCopier, State } from './copier';\n\nexport type { State } from './copier';\n\nconst { isArray } = Array;\nconst { assign } = Object;\nconst getPrototypeOf = Object.getPrototypeOf || ((obj) => obj.__proto__)\n\nexport interface CreateCopierOptions {\n array?: InternalCopier;\n arrayBuffer?: InternalCopier;\n blob?: InternalCopier;\n dataView?: InternalCopier;\n date?: InternalCopier;\n error?: InternalCopier;\n map?: InternalCopier>;\n object?: InternalCopier>;\n regExp?: InternalCopier;\n set?: InternalCopier>;\n}\n\nconst DEFAULT_LOOSE_OPTIONS: Required = {\n array: copyArrayLoose,\n arrayBuffer: copyArrayBuffer,\n blob: copyBlob,\n dataView: copyDataView,\n date: copyDate,\n error: copySelf,\n map: copyMapLoose,\n object: copyObjectLoose,\n regExp: copyRegExp,\n set: copySetLoose,\n};\nconst DEFAULT_STRICT_OPTIONS: Required = assign(\n {},\n DEFAULT_LOOSE_OPTIONS,\n {\n array: copyArrayStrict,\n map: copyMapStrict,\n object: copyObjectStrict,\n set: copySetStrict,\n }\n);\n\n/**\n * Get the copiers used for each specific object tag.\n */\nfunction getTagSpecificCopiers(\n options: Required\n): Record> {\n return {\n Arguments: options.object,\n Array: options.array,\n ArrayBuffer: options.arrayBuffer,\n Blob: options.blob,\n Boolean: copyPrimitiveWrapper,\n DataView: options.dataView,\n Date: options.date,\n Error: options.error,\n Float32Array: options.arrayBuffer,\n Float64Array: options.arrayBuffer,\n Int8Array: options.arrayBuffer,\n Int16Array: options.arrayBuffer,\n Int32Array: options.arrayBuffer,\n Map: options.map,\n Number: copyPrimitiveWrapper,\n Object: options.object,\n Promise: copySelf,\n RegExp: options.regExp,\n Set: options.set,\n String: copyPrimitiveWrapper,\n WeakMap: copySelf,\n WeakSet: copySelf,\n Uint8Array: options.arrayBuffer,\n Uint8ClampedArray: options.arrayBuffer,\n Uint16Array: options.arrayBuffer,\n Uint32Array: options.arrayBuffer,\n Uint64Array: options.arrayBuffer,\n };\n}\n\n/**\n * Create a custom copier based on the object-specific copy methods passed.\n */\nexport function createCopier(options: CreateCopierOptions) {\n const normalizedOptions = assign({}, DEFAULT_LOOSE_OPTIONS, options);\n const tagSpecificCopiers = getTagSpecificCopiers(normalizedOptions);\n const { Array: array, Object: object } = tagSpecificCopiers;\n\n function copier(value: any, state: State): any {\n state.prototype = state.Constructor = undefined;\n\n if (!value || typeof value !== 'object') {\n return value;\n }\n\n if (state.cache.has(value)) {\n return state.cache.get(value);\n }\n\n state.prototype = getPrototypeOf(value);\n state.Constructor = state.prototype && state.prototype.constructor;\n\n // plain objects\n if (!state.Constructor || state.Constructor === Object) {\n return object(value, state);\n }\n\n // arrays\n if (isArray(value)) {\n return array(value, state);\n }\n\n const tagSpecificCopier = tagSpecificCopiers[getTag(value)];\n\n if (tagSpecificCopier) {\n return tagSpecificCopier(value, state);\n }\n\n return typeof value.then === 'function' ? value : object(value, state);\n }\n\n return function copy(value: Value): Value {\n return copier(value, {\n Constructor: undefined,\n cache: createCache(),\n copier,\n prototype: undefined,\n });\n };\n}\n\n/**\n * Create a custom copier based on the object-specific copy methods passed, defaulting to the\n * same internals as `copyStrict`.\n */\nexport function createStrictCopier(options: CreateCopierOptions) {\n return createCopier(assign({}, DEFAULT_STRICT_OPTIONS, options));\n}\n\n/**\n * Copy an value deeply as much as possible, where strict recreation of object properties\n * are maintained. All properties (including non-enumerable ones) are copied with their\n * original property descriptors on both objects and arrays.\n */\nexport const copyStrict = createStrictCopier({});\n\n/**\n * Copy an value deeply as much as possible.\n */\nexport default createCopier({});\n","import _get from \"lodash/get\";\nimport _set from \"lodash/set\";\nimport _isObject from \"lodash/isObject\";\nimport { format as formatFn } from 'date-fns';\nimport BaseFoundation from '../base/foundation';\nimport { formatDateValues } from './_utils/formatter';\nimport { getDefaultFormatTokenByType } from './_utils/getDefaultFormatToken';\nimport getInsetInputFormatToken from './_utils/getInsetInputFormatToken';\nimport getInsetInputValueFromInsetInputStr from './_utils/getInsetInputValueFromInsetInputStr';\nimport { strings } from './constants';\nimport getDefaultPickerDate from './_utils/getDefaultPickerDate';\nimport { compatibleParse } from './_utils/parser';\nimport { isValidDate } from './_utils';\nimport copy from 'fast-copy';\nconst KEY_CODE_ENTER = 'Enter';\nconst KEY_CODE_TAB = 'Tab';\nexport default class InputFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n }\n init() {}\n destroy() {}\n handleClick(e) {\n this._adapter.notifyClick(e);\n }\n handleChange(value, e) {\n this._adapter.notifyChange(value, e);\n }\n handleInputComplete(e) {\n /**\n * onKeyPress, e.key Code gets a value of 0 instead of 13\n * Here key is used to judge the button\n */\n if (e.key === KEY_CODE_ENTER) {\n this._adapter.notifyEnter(e.target.value);\n }\n }\n handleInputClear(e) {\n this._adapter.notifyClear(e);\n }\n handleRangeInputClear(e) {\n // prevent trigger click outside\n this.stopPropagation(e);\n this._adapter.notifyRangeInputClear(e);\n }\n handleRangeInputEnterPress(e, rangeInputValue) {\n if (e.key === KEY_CODE_ENTER) {\n this._adapter.notifyEnter(rangeInputValue);\n }\n }\n handleRangeInputEndKeyPress(e) {\n if (e.key === KEY_CODE_TAB) {\n this._adapter.notifyTabPress(e);\n }\n }\n handleRangeInputFocus(e, rangeType) {\n this._adapter.notifyRangeInputFocus(e, rangeType);\n }\n formatShowText(value, customFormat) {\n const {\n type,\n dateFnsLocale,\n format,\n rangeSeparator\n } = this._adapter.getProps();\n const formatToken = customFormat || format || getDefaultFormatTokenByType(type);\n let text = '';\n switch (type) {\n case 'date':\n text = formatDateValues(value, formatToken, undefined, dateFnsLocale);\n break;\n case 'dateRange':\n text = formatDateValues(value, formatToken, {\n groupSize: 2,\n groupInnerSeparator: rangeSeparator\n }, dateFnsLocale);\n break;\n case 'dateTime':\n text = formatDateValues(value, formatToken, undefined, dateFnsLocale);\n break;\n case 'dateTimeRange':\n text = formatDateValues(value, formatToken, {\n groupSize: 2,\n groupInnerSeparator: rangeSeparator\n }, dateFnsLocale);\n break;\n case 'month':\n text = formatDateValues(value, formatToken, undefined, dateFnsLocale);\n break;\n case 'monthRange':\n text = formatDateValues(value, formatToken, {\n groupSize: 2,\n groupInnerSeparator: rangeSeparator\n }, dateFnsLocale);\n break;\n default:\n break;\n }\n return text;\n }\n handleInsetInputChange(options) {\n const {\n value,\n valuePath,\n insetInputValue\n } = options;\n const {\n format,\n type,\n rangeSeparator\n } = this._adapter.getProps();\n const insetFormatToken = getInsetInputFormatToken({\n type,\n format\n });\n const newInsetInputValue = _set(copy(insetInputValue), valuePath, value);\n const insetInputStr = this.concatInsetInputValue({\n insetInputValue: newInsetInputValue\n });\n const parsedInsetInputValueFromInputStr = getInsetInputValueFromInsetInputStr({\n inputValue: insetInputStr,\n type,\n rangeSeparator\n });\n const filledTimeInsetInputValue = this._autoFillTimeToInsetInputValue({\n insetInputValue: parsedInsetInputValueFromInputStr,\n valuePath,\n format: insetFormatToken\n });\n const finalInsetInputStr = this.concatInsetInputValue({\n insetInputValue: filledTimeInsetInputValue\n });\n this._adapter.notifyInsetInputChange({\n insetInputValue: filledTimeInsetInputValue,\n format: insetFormatToken,\n insetInputStr: finalInsetInputStr\n });\n }\n _autoFillTimeToInsetInputValue(options) {\n const {\n valuePath,\n insetInputValue,\n format\n } = options;\n const {\n type,\n defaultPickerValue,\n dateFnsLocale\n } = this._adapter.getProps();\n const insetInputValueWithTime = copy(insetInputValue);\n const {\n nowDate,\n nextDate\n } = getDefaultPickerDate({\n defaultPickerValue,\n format,\n dateFnsLocale\n });\n if (type.includes('Time')) {\n let timeStr = '';\n const dateFormatToken = _get(format.split(' '), '0', strings.FORMAT_FULL_DATE);\n const timeFormatToken = _get(format.split(' '), '1', strings.FORMAT_TIME_PICKER);\n switch (valuePath) {\n case 'monthLeft.dateInput':\n const dateLeftStr = insetInputValueWithTime.monthLeft.dateInput;\n if (!insetInputValueWithTime.monthLeft.timeInput && dateLeftStr.length === dateFormatToken.length) {\n const dateLeftParsed = compatibleParse(insetInputValueWithTime.monthLeft.dateInput, dateFormatToken);\n if (isValidDate(dateLeftParsed)) {\n timeStr = formatFn(nowDate, timeFormatToken);\n insetInputValueWithTime.monthLeft.timeInput = timeStr;\n }\n }\n break;\n case 'monthRight.dateInput':\n const dateRightStr = insetInputValueWithTime.monthRight.dateInput;\n if (!insetInputValueWithTime.monthRight.timeInput && dateRightStr.length === dateFormatToken.length) {\n const dateRightParsed = compatibleParse(dateRightStr, dateFormatToken);\n if (isValidDate(dateRightParsed)) {\n timeStr = formatFn(nextDate, timeFormatToken);\n insetInputValueWithTime.monthRight.timeInput = timeStr;\n }\n }\n break;\n default:\n break;\n }\n }\n return insetInputValueWithTime;\n }\n /**\n * 只有传入的 format 符合 formatReg 时,才会使用用户传入的 format\n * 否则会使用默认的 format 作为 placeholder\n *\n * The format passed in by the user will be used only if the incoming format conforms to formatReg\n * Otherwise the default format will be used as placeholder\n */\n getInsetInputPlaceholder() {\n const {\n type,\n format,\n rangeSeparator\n } = this._adapter.getProps();\n const insetInputFormat = getInsetInputFormatToken({\n type,\n format\n });\n let datePlaceholder, timePlaceholder;\n switch (type) {\n case 'date':\n case 'month':\n case 'dateRange':\n datePlaceholder = insetInputFormat;\n break;\n case 'dateTime':\n case 'dateTimeRange':\n [datePlaceholder, timePlaceholder] = insetInputFormat.split(' ');\n break;\n case 'monthRange':\n datePlaceholder = insetInputFormat + rangeSeparator + insetInputFormat;\n break;\n }\n return {\n datePlaceholder,\n timePlaceholder\n };\n }\n /**\n * 从当前日期值或 inputValue 中解析出 insetInputValue\n *\n * Parse out insetInputValue from current date value or inputValue\n */\n getInsetInputValue(_ref) {\n let {\n value,\n insetInputValue\n } = _ref;\n const {\n type,\n rangeSeparator,\n format\n } = this._adapter.getProps();\n let inputValueStr = '';\n if (_isObject(insetInputValue)) {\n inputValueStr = this.concatInsetInputValue({\n insetInputValue\n });\n } else {\n const insetInputFormat = getInsetInputFormatToken({\n format,\n type\n });\n inputValueStr = this.formatShowText(value, insetInputFormat);\n }\n const newInsetInputValue = getInsetInputValueFromInsetInputStr({\n inputValue: inputValueStr,\n type,\n rangeSeparator\n });\n return newInsetInputValue;\n }\n concatInsetDateAndTime(_ref2) {\n let {\n date,\n time\n } = _ref2;\n return `${date} ${time}`;\n }\n concatInsetDateRange(_ref3) {\n let {\n rangeStart,\n rangeEnd\n } = _ref3;\n const {\n rangeSeparator\n } = this._adapter.getProps();\n return `${rangeStart}${rangeSeparator}${rangeEnd}`;\n }\n concatInsetInputValue(_ref4) {\n let {\n insetInputValue\n } = _ref4;\n const {\n type\n } = this._adapter.getProps();\n let inputValue = '';\n switch (type) {\n case 'date':\n case 'month':\n case 'monthRange':\n inputValue = insetInputValue.monthLeft.dateInput;\n break;\n case 'dateRange':\n inputValue = this.concatInsetDateRange({\n rangeStart: insetInputValue.monthLeft.dateInput,\n rangeEnd: insetInputValue.monthRight.dateInput\n });\n break;\n case 'dateTime':\n inputValue = this.concatInsetDateAndTime({\n date: insetInputValue.monthLeft.dateInput,\n time: insetInputValue.monthLeft.timeInput\n });\n break;\n case 'dateTimeRange':\n const rangeStart = this.concatInsetDateAndTime({\n date: insetInputValue.monthLeft.dateInput,\n time: insetInputValue.monthLeft.timeInput\n });\n const rangeEnd = this.concatInsetDateAndTime({\n date: insetInputValue.monthRight.dateInput,\n time: insetInputValue.monthRight.timeInput\n });\n inputValue = this.concatInsetDateRange({\n rangeStart,\n rangeEnd\n });\n break;\n }\n return inputValue;\n }\n}","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M4 20V8h16v12H4ZM2 4c0-1.1.9-2 2-2h16a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4Zm4 6.5c0-.28.22-.5.5-.5h2c.28 0 .5.22.5.5v2a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1-.5-.5v-2Zm.5 4.5a.5.5 0 0 0-.5.5v2c0 .28.22.5.5.5h2a.5.5 0 0 0 .5-.5v-2a.5.5 0 0 0-.5-.5h-2Zm4-4.5c0-.28.22-.5.5-.5h2c.28 0 .5.22.5.5v2a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1-.5-.5v-2ZM11 15a.5.5 0 0 0-.5.5v2c0 .28.22.5.5.5h2a.5.5 0 0 0 .5-.5v-2a.5.5 0 0 0-.5-.5h-2Zm4-4.5c0-.28.22-.5.5-.5h2c.28 0 .5.22.5.5v2a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1-.5-.5v-2Zm.5 4.5a.5.5 0 0 0-.5.5v2c0 .28.22.5.5.5h2a.5.5 0 0 0 .5-.5v-2a.5.5 0 0 0-.5-.5h-2Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'calendar');\nexport default IconComponent;","import _get from \"lodash/get\";\nimport React from 'react';\nimport Input from '../input';\nexport function InsetDateInput(props) {\n const {\n insetInputValue,\n valuePath,\n onFocus,\n onChange,\n placeholder,\n forwardRef\n } = props;\n const value = _get(insetInputValue, valuePath);\n return /*#__PURE__*/React.createElement(Input, {\n value: value,\n onChange: (value, event) => {\n onChange({\n value,\n event,\n insetInputValue,\n valuePath\n });\n },\n onFocus: onFocus,\n placeholder: placeholder,\n ref: forwardRef\n });\n}\nexport function InsetTimeInput(props) {\n const {\n insetInputValue,\n valuePath,\n type,\n onFocus,\n onChange,\n placeholder,\n disabled\n } = props;\n const _isTimeType = type.includes('Time');\n if (!_isTimeType) {\n return null;\n }\n const value = _get(insetInputValue, valuePath);\n return /*#__PURE__*/React.createElement(Input, {\n value: value,\n onChange: (value, event) => {\n onChange({\n value,\n event,\n insetInputValue,\n valuePath\n });\n },\n onFocus: onFocus,\n placeholder: placeholder,\n disabled: disabled\n });\n}","import _get from \"lodash/get\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\nimport React from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport DateInputFoundation from '@douyinfe/semi-foundation/lib/es/datePicker/inputFoundation';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/datePicker/constants';\nimport { noop } from '@douyinfe/semi-foundation/lib/es/utils/function';\nimport isNullOrUndefined from '@douyinfe/semi-foundation/lib/es/utils/isNullOrUndefined';\nimport { IconCalendar, IconCalendarClock, IconClear } from '@douyinfe/semi-icons';\nimport BaseComponent from '../_base/baseComponent';\nimport Input from '../input/index';\nimport { InsetDateInput, InsetTimeInput } from './insetInput';\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport default class DateInput extends BaseComponent {\n constructor(props) {\n super(props);\n this.handleChange = (value, e) => this.foundation.handleChange(value, e);\n this.handleEnterPress = e => this.foundation.handleInputComplete(e);\n this.handleInputClear = e => this.foundation.handleInputClear(e);\n this.handleRangeInputChange = (rangeStart, rangeEnd, e) => {\n const rangeInputValue = this.getRangeInputValue(rangeStart, rangeEnd);\n this.foundation.handleChange(rangeInputValue, e);\n };\n this.handleRangeInputClear = e => {\n this.foundation.handleRangeInputClear(e);\n };\n this.handleRangeInputEnterPress = (e, rangeStart, rangeEnd) => {\n const rangeInputValue = this.getRangeInputValue(rangeStart, rangeEnd);\n this.foundation.handleRangeInputEnterPress(e, rangeInputValue);\n };\n this.handleRangeInputEndKeyPress = e => {\n this.foundation.handleRangeInputEndKeyPress(e);\n };\n this.handleRangeInputFocus = (e, rangeType) => {\n this.foundation.handleRangeInputFocus(e, rangeType);\n };\n this.handleRangeStartFocus = e => {\n this.handleRangeInputFocus(e, 'rangeStart');\n };\n this.handleInsetInputChange = options => {\n this.foundation.handleInsetInputChange(options);\n };\n this.getRangeInputValue = (rangeStart, rangeEnd) => {\n const {\n rangeSeparator\n } = this.props;\n const rangeInputValue = `${rangeStart}${rangeSeparator}${rangeEnd}`;\n return rangeInputValue;\n };\n this.foundation = new DateInputFoundation(this.adapter);\n }\n get adapter() {\n var _this = this;\n return Object.assign(Object.assign({}, super.adapter), {\n updateIsFocusing: isFocusing => this.setState({\n isFocusing\n }),\n notifyClick: function () {\n return _this.props.onClick(...arguments);\n },\n notifyChange: function () {\n return _this.props.onChange(...arguments);\n },\n notifyEnter: function () {\n return _this.props.onEnterPress(...arguments);\n },\n notifyBlur: function () {\n return _this.props.onBlur(...arguments);\n },\n notifyClear: function () {\n return _this.props.onClear(...arguments);\n },\n notifyFocus: function () {\n return _this.props.onFocus(...arguments);\n },\n notifyRangeInputClear: function () {\n return _this.props.onRangeClear(...arguments);\n },\n notifyRangeInputFocus: function () {\n return _this.props.onFocus(...arguments);\n },\n notifyTabPress: function () {\n return _this.props.onRangeEndTabPress(...arguments);\n },\n notifyInsetInputChange: options => this.props.onInsetInputChange(options)\n });\n }\n componentDidMount() {\n this.foundation.init();\n }\n componentWillUnmount() {\n this.foundation.destroy();\n }\n formatText(value) {\n return value && value.length ? this.foundation.formatShowText(value) : '';\n }\n renderRangePrefix() {\n const {\n prefix,\n insetLabel,\n prefixCls,\n disabled,\n rangeInputFocus\n } = this.props;\n const labelNode = prefix || insetLabel;\n return labelNode ? (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-range-input-prefix`,\n onClick: e => !disabled && !rangeInputFocus && this.handleRangeStartFocus(e),\n \"x-semi-prop\": \"prefix,insetLabel\"\n }, labelNode)) : null;\n }\n renderRangeSeparator(rangeStart, rangeEnd) {\n const {\n disabled,\n rangeSeparator\n } = this.props;\n const separatorCls = cls({\n [`${cssClasses.PREFIX}-range-input-separator`]: true,\n [`${cssClasses.PREFIX}-range-input-separator-active`]: (rangeStart || rangeEnd) && !disabled\n });\n return /*#__PURE__*/React.createElement(\"span\", {\n onClick: e => !disabled && this.handleRangeStartFocus(e),\n className: separatorCls\n }, rangeSeparator);\n }\n renderRangeClearBtn(rangeStart, rangeEnd) {\n const {\n showClear,\n prefixCls,\n disabled,\n clearIcon,\n showClearIgnoreDisabled\n } = this.props;\n const isRealDisabled = disabled && !showClearIgnoreDisabled;\n const allowClear = (rangeStart || rangeEnd) && showClear && !isRealDisabled;\n return allowClear ? (/*#__PURE__*/React.createElement(\"div\", {\n role: \"button\",\n tabIndex: 0,\n \"aria-label\": \"Clear range input value\",\n className: `${prefixCls}-range-input-clearbtn`,\n onMouseDown: e => this.handleRangeInputClear(e)\n }, clearIcon ? clearIcon : /*#__PURE__*/React.createElement(IconClear, {\n \"aria-hidden\": true\n }))) : null;\n }\n renderRangeSuffix(suffix) {\n const {\n prefixCls,\n disabled,\n rangeInputFocus\n } = this.props;\n const rangeSuffix = suffix ? (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-range-input-suffix`,\n onClick: e => !disabled && !rangeInputFocus && this.handleRangeStartFocus(e)\n }, suffix)) : null;\n return rangeSuffix;\n }\n renderRangeInput(rangeProps) {\n const {\n // this.props\n placeholder,\n inputStyle,\n disabled,\n inputReadOnly,\n autofocus,\n size,\n // compute props\n text,\n suffix,\n inputCls,\n // range only props\n rangeInputStartRef,\n rangeInputEndRef,\n rangeInputFocus,\n prefixCls,\n rangeSeparator,\n borderless\n } = rangeProps;\n const [rangeStart, rangeEnd = ''] = text.split(rangeSeparator) || [];\n const rangeSize = size === 'large' ? 'default' : 'small';\n const rangePlaceholder = Array.isArray(placeholder) ? placeholder : [placeholder, placeholder];\n const [rangeStartPlaceholder, rangeEndPlaceholder] = rangePlaceholder;\n const inputLeftWrapperCls = cls(`${prefixCls}-range-input-wrapper-start`, `${prefixCls}-range-input-wrapper`, {\n [`${prefixCls}-range-input-wrapper-active`]: rangeInputFocus === 'rangeStart' && !disabled,\n [`${prefixCls}-range-input-wrapper-start-with-prefix`]: this.props.prefix || this.props.insetLabel,\n [`${prefixCls}-borderless`]: borderless\n });\n const inputRightWrapperCls = cls(`${prefixCls}-range-input-wrapper-end`, `${prefixCls}-range-input-wrapper`, {\n [`${prefixCls}-range-input-wrapper-active`]: rangeInputFocus === 'rangeEnd' && !disabled,\n [`${prefixCls}-borderless`]: borderless\n });\n return /*#__PURE__*/React.createElement(React.Fragment, null, this.renderRangePrefix(), /*#__PURE__*/React.createElement(\"div\", {\n onClick: e => !disabled && this.handleRangeInputFocus(e, 'rangeStart'),\n className: `${inputCls} ${inputLeftWrapperCls}`\n }, /*#__PURE__*/React.createElement(Input, {\n borderless: borderless,\n size: rangeSize,\n style: inputStyle,\n disabled: disabled,\n readonly: inputReadOnly,\n placeholder: rangeStartPlaceholder,\n value: rangeStart,\n // range input onBlur function is called when panel is closed\n // onBlur={noop}\n onChange: (rangeStartValue, e) => this.handleRangeInputChange(rangeStartValue, rangeEnd, e),\n onEnterPress: e => this.handleRangeInputEnterPress(e, rangeStart, rangeEnd),\n onFocus: e => this.handleRangeInputFocus(e, 'rangeStart'),\n autoFocus: autofocus,\n ref: rangeInputStartRef\n })), this.renderRangeSeparator(rangeStart, rangeEnd), /*#__PURE__*/React.createElement(\"div\", {\n className: `${inputCls} ${inputRightWrapperCls}`,\n onClick: e => !disabled && this.handleRangeInputFocus(e, 'rangeEnd')\n }, /*#__PURE__*/React.createElement(Input, {\n borderless: borderless,\n size: rangeSize,\n style: inputStyle,\n disabled: disabled,\n readonly: inputReadOnly,\n placeholder: rangeEndPlaceholder,\n value: rangeEnd,\n // range input onBlur function is called when panel is closed\n // onBlur={noop}\n onChange: (rangeEndValue, e) => this.handleRangeInputChange(rangeStart, rangeEndValue, e),\n onEnterPress: e => this.handleRangeInputEnterPress(e, rangeStart, rangeEnd),\n onFocus: e => this.handleRangeInputFocus(e, 'rangeEnd'),\n onKeyDown: this.handleRangeInputEndKeyPress,\n ref: rangeInputEndRef\n })), this.renderRangeClearBtn(rangeStart, rangeEnd), this.renderRangeSuffix(suffix));\n }\n isRenderMultipleInputs() {\n const {\n type\n } = this.props;\n // isRange and not monthRange render multiple inputs\n return type.includes('Range') && type !== 'monthRange';\n }\n renderInputInset() {\n const {\n type,\n handleInsetDateFocus,\n handleInsetTimeFocus,\n value,\n insetInputValue,\n prefixCls,\n rangeInputStartRef,\n rangeInputEndRef,\n density,\n insetInput\n } = this.props;\n const newInsetInputValue = this.foundation.getInsetInputValue({\n value,\n insetInputValue\n });\n const {\n dateStart,\n dateEnd,\n timeStart,\n timeEnd\n } = _get(insetInput, 'placeholder', {});\n const {\n datePlaceholder,\n timePlaceholder\n } = this.foundation.getInsetInputPlaceholder();\n const insetInputWrapperCls = `${prefixCls}-inset-input-wrapper`;\n const separatorCls = `${prefixCls}-inset-input-separator`;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: insetInputWrapperCls,\n \"x-type\": type\n }, /*#__PURE__*/React.createElement(InsetDateInput, {\n forwardRef: rangeInputStartRef,\n insetInputValue: newInsetInputValue,\n placeholder: dateStart !== null && dateStart !== void 0 ? dateStart : datePlaceholder,\n valuePath: 'monthLeft.dateInput',\n onChange: this.handleInsetInputChange,\n onFocus: e => handleInsetDateFocus(e, 'rangeStart')\n }), /*#__PURE__*/React.createElement(InsetTimeInput, {\n disabled: !newInsetInputValue.monthLeft.dateInput,\n insetInputValue: newInsetInputValue,\n placeholder: timeStart !== null && timeStart !== void 0 ? timeStart : timePlaceholder,\n type: type,\n valuePath: 'monthLeft.timeInput',\n onChange: this.handleInsetInputChange,\n onFocus: handleInsetTimeFocus\n }), this.isRenderMultipleInputs() && (/*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n className: separatorCls\n }, density === 'compact' ? null : '-'), /*#__PURE__*/React.createElement(InsetDateInput, {\n forwardRef: rangeInputEndRef,\n insetInputValue: newInsetInputValue,\n placeholder: dateEnd !== null && dateEnd !== void 0 ? dateEnd : datePlaceholder,\n valuePath: 'monthRight.dateInput',\n onChange: this.handleInsetInputChange,\n onFocus: e => handleInsetDateFocus(e, 'rangeEnd')\n }), /*#__PURE__*/React.createElement(InsetTimeInput, {\n disabled: !newInsetInputValue.monthRight.dateInput,\n insetInputValue: newInsetInputValue,\n placeholder: timeEnd !== null && timeEnd !== void 0 ? timeEnd : timePlaceholder,\n type: type,\n valuePath: 'monthRight.timeInput',\n onChange: this.handleInsetInputChange,\n onFocus: handleInsetTimeFocus\n }))));\n }\n renderTriggerInput() {\n const _a = this.props,\n {\n placeholder,\n type,\n value,\n inputValue,\n inputStyle,\n disabled,\n showClear,\n inputReadOnly,\n insetLabel,\n validateStatus,\n block,\n prefixCls,\n multiple,\n // Whether to allow multiple values for email and file types\n dateFnsLocale,\n // No need to pass to input\n onBlur,\n onClear,\n onFocus,\n prefix,\n autofocus,\n size,\n inputRef,\n // range input support props, no need passing to not range type\n rangeInputStartRef,\n rangeInputEndRef,\n onRangeClear,\n onRangeBlur,\n onRangeEndTabPress,\n rangeInputFocus,\n rangeSeparator,\n insetInput,\n insetInputValue,\n defaultPickerValue,\n showClearIgnoreDisabled\n } = _a,\n rest = __rest(_a, [\"placeholder\", \"type\", \"value\", \"inputValue\", \"inputStyle\", \"disabled\", \"showClear\", \"inputReadOnly\", \"insetLabel\", \"validateStatus\", \"block\", \"prefixCls\", \"multiple\", \"dateFnsLocale\", \"onBlur\", \"onClear\", \"onFocus\", \"prefix\", \"autofocus\", \"size\", \"inputRef\", \"rangeInputStartRef\", \"rangeInputEndRef\", \"onRangeClear\", \"onRangeBlur\", \"onRangeEndTabPress\", \"rangeInputFocus\", \"rangeSeparator\", \"insetInput\", \"insetInputValue\", \"defaultPickerValue\", \"showClearIgnoreDisabled\"]);\n const dateIcon = /*#__PURE__*/React.createElement(IconCalendar, {\n \"aria-hidden\": true\n });\n const dateTimeIcon = /*#__PURE__*/React.createElement(IconCalendarClock, {\n \"aria-hidden\": true\n });\n const suffix = type.includes('Time') ? dateTimeIcon : dateIcon;\n let text = '';\n if (!isNullOrUndefined(inputValue)) {\n text = inputValue;\n } else if (value) {\n text = this.formatText(value);\n }\n const inputCls = cls({\n [`${prefixCls}-input-readonly`]: inputReadOnly,\n [`${prefixCls}-monthRange-input`]: type === 'monthRange'\n });\n const rangeProps = Object.assign(Object.assign({}, this.props), {\n text,\n suffix,\n inputCls\n });\n return this.isRenderMultipleInputs() ? this.renderRangeInput(rangeProps) : (/*#__PURE__*/React.createElement(Input, Object.assign({}, rest, {\n ref: inputRef,\n insetLabel: insetLabel,\n disabled: disabled,\n showClearIgnoreDisabled: showClearIgnoreDisabled,\n readonly: inputReadOnly,\n className: inputCls,\n style: inputStyle,\n hideSuffix: showClear,\n placeholder: type === 'monthRange' && Array.isArray(placeholder) ? placeholder[0] + rangeSeparator + placeholder[1] : placeholder,\n onEnterPress: this.handleEnterPress,\n onChange: this.handleChange,\n onClear: this.handleInputClear,\n suffix: suffix,\n showClear: showClear,\n value: text,\n validateStatus: validateStatus,\n prefix: prefix,\n autoFocus: autofocus,\n size: size,\n onBlur: onBlur,\n onFocus: onFocus\n })));\n }\n render() {\n const {\n insetInput\n } = this.props;\n return insetInput ? this.renderInputInset() : this.renderTriggerInput();\n }\n}\nDateInput.propTypes = {\n borderless: PropTypes.bool,\n onClick: PropTypes.func,\n onChange: PropTypes.func,\n onEnterPress: PropTypes.func,\n onBlur: PropTypes.func,\n onClear: PropTypes.func,\n onFocus: PropTypes.func,\n value: PropTypes.array,\n disabled: PropTypes.bool,\n type: PropTypes.oneOf(strings.TYPE_SET),\n showClear: PropTypes.bool,\n format: PropTypes.string,\n inputStyle: PropTypes.object,\n inputReadOnly: PropTypes.bool,\n insetLabel: PropTypes.node,\n validateStatus: PropTypes.string,\n prefix: PropTypes.node,\n prefixCls: PropTypes.string,\n dateFnsLocale: PropTypes.object.isRequired,\n placeholder: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n rangeInputFocus: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n rangeInputStartRef: PropTypes.object,\n rangeInputEndRef: PropTypes.object,\n rangeSeparator: PropTypes.string,\n insetInput: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\n insetInputValue: PropTypes.object,\n defaultPickerValue: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.object, PropTypes.array])\n};\nDateInput.defaultProps = {\n borderless: false,\n showClear: true,\n onClick: noop,\n onChange: noop,\n onEnterPress: noop,\n onBlur: noop,\n onClear: noop,\n onFocus: noop,\n type: 'date',\n inputStyle: {},\n inputReadOnly: false,\n prefixCls: cssClasses.PREFIX,\n rangeSeparator: strings.DEFAULT_SEPARATOR_RANGE\n};","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport default function startOfDay(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day (and year and month)?\n *\n * @description\n * Are the given dates in the same day (and year and month)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same day (and year and month)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n *\n * @example\n * // Are 4 September and 4 October in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4))\n * //=> false\n *\n * @example\n * // Are 4 September, 2014 and 4 September, 2015 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4))\n * //=> false\n */\nexport default function isSameDay(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeftStartOfDay = startOfDay(dirtyDateLeft);\n var dateRightStartOfDay = startOfDay(dirtyDateRight);\n return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInCalendarMonths(\n * new Date(2014, 8, 1),\n * new Date(2014, 0, 31)\n * )\n * //=> 8\n */\nexport default function differenceInCalendarMonths(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear();\n var monthDiff = dateLeft.getMonth() - dateRight.getMonth();\n return yearDiff * 12 + monthDiff;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\nexport default function addYears(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMonths(dirtyDate, amount * 12);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getDaysInMonth\n * @category Month Helpers\n * @summary Get the number of days in a month of the given date.\n *\n * @description\n * Get the number of days in a month of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of days in a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many days are in February 2000?\n * const result = getDaysInMonth(new Date(2000, 1))\n * //=> 29\n */\nexport default function getDaysInMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getFullYear();\n var monthIndex = date.getMonth();\n var lastDayOfMonth = new Date(0);\n lastDayOfMonth.setFullYear(year, monthIndex + 1, 0);\n lastDayOfMonth.setHours(0, 0, 0, 0);\n return lastDayOfMonth.getDate();\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport getDaysInMonth from \"../getDaysInMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setMonth\n * @category Month Helpers\n * @summary Set the month to the given date.\n *\n * @description\n * Set the month to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} month - the month of the new date\n * @returns {Date} the new date with the month set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set February to 1 September 2014:\n * const result = setMonth(new Date(2014, 8, 1), 1)\n * //=> Sat Feb 01 2014 00:00:00\n */\nexport default function setMonth(dirtyDate, dirtyMonth) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var month = toInteger(dirtyMonth);\n var year = date.getFullYear();\n var day = date.getDate();\n var dateWithDesiredMonth = new Date(0);\n dateWithDesiredMonth.setFullYear(year, month, 15);\n dateWithDesiredMonth.setHours(0, 0, 0, 0);\n var daysInMonth = getDaysInMonth(dateWithDesiredMonth);\n // Set the last day of the new month\n // if the original date was the last day of the longer month\n date.setMonth(month, Math.min(day, daysInMonth));\n return date;\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport toDate from \"../toDate/index.js\";\nimport setMonth from \"../setMonth/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name set\n * @category Common Helpers\n * @summary Set date values to a given date.\n *\n * @description\n * Set date values to a given date.\n *\n * Sets time values to date from object `values`.\n * A value is not set if it is undefined or null or doesn't exist in `values`.\n *\n * Note about bundle size: `set` does not internally use `setX` functions from date-fns but instead opts\n * to use native `Date#setX` methods. If you use this function, you may not want to include the\n * other `setX` functions that date-fns provides if you are concerned about the bundle size.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Object} values - an object with options\n * @param {Number} [values.year] - the number of years to be set\n * @param {Number} [values.month] - the number of months to be set\n * @param {Number} [values.date] - the number of days to be set\n * @param {Number} [values.hours] - the number of hours to be set\n * @param {Number} [values.minutes] - the number of minutes to be set\n * @param {Number} [values.seconds] - the number of seconds to be set\n * @param {Number} [values.milliseconds] - the number of milliseconds to be set\n * @returns {Date} the new date with options set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `values` must be an object\n *\n * @example\n * // Transform 1 September 2014 into 20 October 2015 in a single line:\n * const result = set(new Date(2014, 8, 20), { year: 2015, month: 9, date: 20 })\n * //=> Tue Oct 20 2015 00:00:00\n *\n * @example\n * // Set 12 PM to 1 September 2014 01:23:45 to 1 September 2014 12:00:00:\n * const result = set(new Date(2014, 8, 1, 1, 23, 45), { hours: 12 })\n * //=> Mon Sep 01 2014 12:23:45\n */\nexport default function set(dirtyDate, values) {\n requiredArgs(2, arguments);\n if (_typeof(values) !== 'object' || values === null) {\n throw new RangeError('values parameter must be an object');\n }\n var date = toDate(dirtyDate);\n\n // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\n if (isNaN(date.getTime())) {\n return new Date(NaN);\n }\n if (values.year != null) {\n date.setFullYear(values.year);\n }\n if (values.month != null) {\n date = setMonth(date, values.month);\n }\n if (values.date != null) {\n date.setDate(toInteger(values.date));\n }\n if (values.hours != null) {\n date.setHours(toInteger(values.hours));\n }\n if (values.minutes != null) {\n date.setMinutes(toInteger(values.minutes));\n }\n if (values.seconds != null) {\n date.setSeconds(toInteger(values.seconds));\n }\n if (values.milliseconds != null) {\n date.setMilliseconds(toInteger(values.milliseconds));\n }\n return date;\n}","import _isFunction from \"lodash/isFunction\";\nimport { strings } from '../constants';\nimport { format } from 'date-fns';\n/**\n * Calculate the date string offset from the date\n * @param {*} fn\n * @param {*} date\n */\nconst getFullDateOffset = (fn, date) => {\n if (!date) {\n return '';\n }\n const getDate = new Date(date);\n const offsetDate = _isFunction(fn) ? fn(getDate) : getDate;\n return format(new Date(offsetDate), strings.FORMAT_FULL_DATE);\n};\nexport default getFullDateOffset;","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\nexport default function isBefore(dirtyDate, dirtyDateToCompare) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dateToCompare = toDate(dirtyDateToCompare);\n return date.getTime() < dateToCompare.getTime();\n}","export default function (str) {\n return typeof str === 'string';\n}","import { isBefore as dateFnsIsBefore, parseISO } from 'date-fns';\nimport isString from '../../utils/isString';\nexport default function isBefore(date, dateToCompare) {\n const dayOne = isString(date) ? parseISO(date) : date;\n const dayTwo = isString(dateToCompare) ? parseISO(dateToCompare) : dateToCompare;\n return dateFnsIsBefore(dayOne, dayTwo);\n}","/**\n *\n * @param {string} month\n */\nimport { startOfMonth, lastDayOfMonth, getDaysInMonth,\n// getDay,\n// parseISO,\nformat } from 'date-fns';\nfunction formatFullDate() {\n let year = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n let month = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n let day = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n let dateStr = '';\n const monthFull = typeof month === 'number' && month < 10 ? `0${month}` : month.toString();\n const dayNumberFull = typeof day === 'number' && day < 10 ? `0${day}` : day.toString();\n dateStr = `${String(year)}-${monthFull}-${dayNumberFull}`;\n return dateStr;\n}\nfunction getWeeks(date) {\n let weekStartsOn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n const weekDayNotInMonth = {\n dayNumber: '',\n dateNumberFull: '',\n fullDate: ''\n }; // For the first or last week epmtyDays\n const daysInMonth = getDaysInMonth(date); // Get the total number of days in the month\n const year = format(date, 'yyyy');\n const month = format(date, 'MM');\n const lastday = lastDayOfMonth(date); // Get the last day of the month\n const firstDay = startOfMonth(date); // Get the first day of the month\n // Const firstDayInWeek = getDay (firstDay);//The first day belongs to the day of the week\n // What is the first day of the month in the first row?\n const firstDayInWeek = Number(format(firstDay, 'e', {\n weekStartsOn\n }));\n const weeks = [];\n let week = [];\n // add empty days to set first day in correct position\n for (let s = 1; s < firstDayInWeek; s++) {\n week.push(weekDayNotInMonth);\n }\n for (let d = 0; d < daysInMonth; d++) {\n const dayNumber = d + 1;\n const dayNumberFull = dayNumber < 10 ? `0${dayNumber}` : dayNumber.toString();\n const fullDate = formatFullDate(year, month, dayNumber);\n week.push({\n dayNumber,\n dayNumberFull,\n fullDate\n });\n if (week.length === 7) {\n weeks.push(week);\n week = [];\n } else if (fullDate === format(lastday, 'yyyy-MM-dd')) {\n // Last week alone\n weeks.push(week);\n week = [];\n }\n }\n return weeks;\n}\nconst getMonthTable = (month, weekStartsOn) => {\n const weeks = getWeeks(month, weekStartsOn);\n const monthText = format(month, 'yyyy-MM');\n return {\n monthText,\n weeks,\n month\n };\n};\nexport default getMonthTable;\nexport { formatFullDate };","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name lastDayOfMonth\n * @category Month Helpers\n * @summary Return the last day of a month for the given date.\n *\n * @description\n * Return the last day of a month for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of a month for 2 September 2014 11:55:00:\n * const result = lastDayOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport default function lastDayOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var month = date.getMonth();\n date.setFullYear(date.getFullYear(), month + 1, 0);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import _isEqual from \"lodash/isEqual\";\nimport _isSet from \"lodash/isSet\";\nimport _includes from \"lodash/includes\";\nimport BaseFoundation from '../base/foundation';\nimport { strings } from './constants';\nimport { format, set, addMonths, subMonths, subYears, addYears, differenceInCalendarMonths, differenceInCalendarYears, isSameDay, parseISO } from 'date-fns';\nimport { isBefore, isValidDate, getDefaultFormatToken, getFullDateOffset } from './_utils/index';\nimport { formatFullDate } from './_utils/getMonthTable';\nimport { compatibleParse } from './_utils/parser';\nimport { zonedTimeToUtc } from '../utils/date-fns-extra';\nimport { getDefaultFormatTokenByType } from './_utils/getDefaultFormatToken';\nimport isValidTimeZone from './_utils/isValidTimeZone';\nconst dateDiffFns = {\n month: differenceInCalendarMonths,\n year: differenceInCalendarYears\n};\nconst dateCalcFns = {\n prevMonth: subMonths,\n nextMonth: addMonths,\n prevYear: subYears,\n nextYear: addYears\n};\nexport default class MonthsGridFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n // Date change data when double panels\n this.newBiMonthPanelDate = [this.getState('monthLeft').pickerDate, this.getState('monthRight').pickerDate];\n }\n init() {\n const defaultValue = this.getProp('defaultValue');\n this.initDefaultPickerValue();\n this.updateSelectedFromProps(defaultValue);\n }\n initDefaultPickerValue() {\n const defaultPickerValue = compatibleParse(this.getProp('defaultPickerValue'));\n if (defaultPickerValue && isValidDate(defaultPickerValue)) {\n this._updatePanelDetail(strings.PANEL_TYPE_LEFT, {\n pickerDate: defaultPickerValue\n });\n this._updatePanelDetail(strings.PANEL_TYPE_RIGHT, {\n pickerDate: addMonths(defaultPickerValue, 1)\n });\n }\n }\n updateSelectedFromProps(values) {\n let refreshPicker = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n const type = this.getProp('type');\n const {\n selected,\n rangeStart,\n rangeEnd\n } = this.getStates();\n if (values && (values === null || values === void 0 ? void 0 : values.length)) {\n switch (type) {\n case 'date':\n this._initDatePickerFromValue(values, refreshPicker);\n break;\n case 'dateRange':\n this._initDateRangePickerFromValue(values);\n break;\n case 'dateTime':\n this._initDateTimePickerFromValue(values);\n break;\n case 'dateTimeRange':\n this._initDateTimeRangePickerFormValue(values);\n break;\n default:\n break;\n }\n } else if (Array.isArray(values) && !values.length || !values) {\n // Empty panel when value is empty Select date\n if (_isSet(selected) && selected.size) {\n this._adapter.updateDaySelected(new Set());\n }\n if (rangeStart) {\n this._adapter.setRangeStart('');\n }\n if (rangeEnd) {\n this._adapter.setRangeEnd('');\n }\n }\n }\n calcDisabledTime(panelType) {\n const {\n disabledTime,\n type\n } = this.getProps();\n if (typeof disabledTime === 'function' && panelType && ['dateTime', 'dateTimeRange'].includes(type)) {\n const {\n rangeStart,\n rangeEnd,\n monthLeft\n } = this.getStates();\n const selected = [];\n if (type === 'dateTimeRange') {\n if (rangeStart) {\n selected.push(rangeStart);\n }\n if (rangeStart && rangeEnd) {\n selected.push(rangeEnd);\n }\n } else if (monthLeft && monthLeft.showDate) {\n selected.push(monthLeft.showDate);\n }\n const selectedDates = selected.map(str => str instanceof Date ? str : parseISO(str));\n const cbDates = type === 'dateTimeRange' ? selectedDates : selectedDates[0];\n return disabledTime(cbDates, panelType);\n }\n }\n _initDatePickerFromValue(values) {\n let refreshPicker = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n const {\n monthLeft\n } = this._adapter.getStates();\n const newMonthLeft = Object.assign({}, monthLeft);\n // REMOVE:\n this._adapter.updateMonthOnLeft(newMonthLeft);\n const newSelected = new Set();\n const isMultiple = this._isMultiple();\n if (!isMultiple) {\n values[0] && newSelected.add(format(values[0], strings.FORMAT_FULL_DATE));\n } else {\n values.forEach(date => {\n date && newSelected.add(format(date, strings.FORMAT_FULL_DATE));\n });\n }\n if (refreshPicker) {\n if (isMultiple) {\n const leftPickerDateInSelected = values === null || values === void 0 ? void 0 : values.some(item => item && differenceInCalendarMonths(item, monthLeft.pickerDate) === 0);\n !leftPickerDateInSelected && this.handleShowDateAndTime(strings.PANEL_TYPE_LEFT, values[0] || newMonthLeft.pickerDate);\n } else {\n this.handleShowDateAndTime(strings.PANEL_TYPE_LEFT, values[0] || newMonthLeft.pickerDate);\n }\n } else {\n // FIXME:\n this.handleShowDateAndTime(strings.PANEL_TYPE_LEFT, newMonthLeft.pickerDate);\n }\n this._adapter.updateDaySelected(newSelected);\n }\n _initDateRangePickerFromValue(values) {\n let withTime = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n // init month panel\n const monthLeft = this.getState('monthLeft');\n const monthRight = this.getState('monthRight');\n const adjustResult = this._autoAdjustMonth(Object.assign(Object.assign({}, monthLeft), {\n pickerDate: values[0] || monthLeft.pickerDate\n }), Object.assign(Object.assign({}, monthRight), {\n pickerDate: values[1] || monthRight.pickerDate\n }));\n const validValue = Array.isArray(values) && values.filter(item => item).length > 1;\n if (validValue) {\n this.handleShowDateAndTime(strings.PANEL_TYPE_LEFT, adjustResult.monthLeft.pickerDate);\n this.handleShowDateAndTime(strings.PANEL_TYPE_RIGHT, adjustResult.monthRight.pickerDate);\n } else {\n const selectedDate = values.find(item => item);\n // 如果日期不完整且输入日期不在面板范围内,则更新面板\n if (selectedDate) {\n const notLeftPanelDate = Math.abs(differenceInCalendarMonths(selectedDate, monthLeft.pickerDate)) > 0;\n const notRightPanelDate = Math.abs(differenceInCalendarMonths(selectedDate, monthRight.pickerDate)) > 0;\n if (notLeftPanelDate && notRightPanelDate) {\n this.handleShowDateAndTime(strings.PANEL_TYPE_LEFT, adjustResult.monthLeft.pickerDate);\n this.handleShowDateAndTime(strings.PANEL_TYPE_RIGHT, adjustResult.monthRight.pickerDate);\n }\n }\n }\n // init range\n const formatToken = withTime ? strings.FORMAT_DATE_TIME : strings.FORMAT_FULL_DATE;\n let rangeStart = values[0] && format(values[0], formatToken);\n let rangeEnd = values[1] && format(values[1], formatToken);\n if (this._isNeedSwap(rangeStart, rangeEnd)) {\n [rangeStart, rangeEnd] = [rangeEnd, rangeStart];\n }\n this._adapter.setRangeStart(rangeStart);\n this._adapter.setRangeEnd(rangeEnd);\n this._adapter.setHoverDay(rangeEnd);\n }\n _initDateTimePickerFromValue(values) {\n this._initDatePickerFromValue(values);\n }\n _initDateTimeRangePickerFormValue(values) {\n this._initDateRangePickerFromValue(values, true);\n }\n destroy() {}\n /**\n * sync change another panel month when change months from the else yam panel\n * call it when\n * - current change panel targe date month is same with another panel date\n *\n * @example\n * - panelType=right, target=new Date('2022-09-01') and left panel is in '2022-09' => call it, left panel minus one month to '2022-08'\n * - panelType=left, target=new Date('2021-12-01') and right panel is in '2021-12' => call it, right panel add one month to '2021-01'\n */\n handleSyncChangeMonths(options) {\n const {\n panelType,\n target\n } = options;\n const {\n type\n } = this._adapter.getProps();\n const {\n monthLeft,\n monthRight\n } = this._adapter.getStates();\n if (this.isRangeType(type)) {\n if (panelType === 'right' && differenceInCalendarMonths(target, monthLeft.pickerDate) === 0) {\n this.handleYearOrMonthChange('prevMonth', 'left', 1, true);\n } else if (panelType === 'left' && differenceInCalendarMonths(monthRight.pickerDate, target) === 0) {\n this.handleYearOrMonthChange('nextMonth', 'right', 1, true);\n }\n }\n }\n /**\n * Get the target date based on the panel type and switch type\n */\n getTargetChangeDate(options) {\n const {\n panelType,\n switchType\n } = options;\n const {\n monthRight,\n monthLeft\n } = this._adapter.getStates();\n const currentDate = panelType === 'left' ? monthLeft.pickerDate : monthRight.pickerDate;\n let target;\n switch (switchType) {\n case 'prevMonth':\n target = addMonths(currentDate, -1);\n break;\n case 'nextMonth':\n target = addMonths(currentDate, 1);\n break;\n case 'prevYear':\n target = addYears(currentDate, -1);\n break;\n case 'nextYear':\n target = addYears(currentDate, 1);\n break;\n }\n return target;\n }\n /**\n * Change month by yam panel\n */\n toMonth(panelType, target) {\n const {\n type\n } = this._adapter.getProps();\n const diff = this._getDiff('month', target, panelType);\n this.handleYearOrMonthChange(diff < 0 ? 'prevMonth' : 'nextMonth', panelType, Math.abs(diff), false);\n if (this.isRangeType(type)) {\n this.handleSyncChangeMonths({\n panelType,\n target\n });\n }\n }\n toYear(panelType, target) {\n const diff = this._getDiff('year', target, panelType);\n this.handleYearOrMonthChange(diff < 0 ? 'prevYear' : 'nextYear', panelType, Math.abs(diff), false);\n }\n toYearMonth(panelType, target) {\n this.toYear(panelType, target);\n this.toMonth(panelType, target);\n }\n isRangeType(type) {\n const {\n type: typeFromProp\n } = this.getProps();\n const realType = type ? type : typeFromProp;\n return typeof realType === 'string' && /range/i.test(realType);\n }\n handleSwitchMonthOrYear(switchType, panelType) {\n const {\n type,\n syncSwitchMonth\n } = this.getProps();\n const rangeType = this.isRangeType(type);\n // range type and syncSwitchMonth, we should change panels at same time\n if (rangeType && syncSwitchMonth) {\n this.handleYearOrMonthChange(switchType, 'left', 1, true);\n this.handleYearOrMonthChange(switchType, 'right', 1, true);\n } else {\n this.handleYearOrMonthChange(switchType, panelType);\n /**\n * default behavior (v2.2.0)\n * In order to prevent the two panels from being the same month, this will confuse the user when selecting the range\n * https://github.com/DouyinFE/semi-design/issues/260\n */\n if (rangeType) {\n const target = this.getTargetChangeDate({\n panelType,\n switchType\n });\n this.handleSyncChangeMonths({\n panelType,\n target\n });\n }\n }\n }\n prevMonth(panelType) {\n this.handleSwitchMonthOrYear('prevMonth', panelType);\n }\n nextMonth(panelType) {\n this.handleSwitchMonthOrYear('nextMonth', panelType);\n }\n prevYear(panelType) {\n this.handleSwitchMonthOrYear('prevYear', panelType);\n }\n nextYear(panelType) {\n this.handleSwitchMonthOrYear('nextYear', panelType);\n }\n /**\n * Calculate the year and month difference\n */\n _getDiff(type, target, panelType) {\n const panelDetail = this._getPanelDetail(panelType);\n const diff = dateDiffFns[type] && dateDiffFns[type](target, panelDetail.pickerDate);\n return diff;\n }\n _getPanelDetail(panelType) {\n return panelType === strings.PANEL_TYPE_RIGHT ? this.getState('monthRight') : this.getState('monthLeft');\n }\n /**\n * Format locale date\n * locale get from LocaleProvider\n * @param {Date} date\n * @param {String} token\n * @returns\n */\n localeFormat(date, token) {\n const dateFnsLocale = this._adapter.getProp('dateFnsLocale');\n return format(date, token, {\n locale: dateFnsLocale\n });\n }\n /**\n * 根据 type 处理 onChange 返回的参数\n *\n * - 返回的日期需要把用户时间转换为设置的时区时间\n * - 用户时间:用户计算机系统时间\n * - 时区时间:通过 ConfigProvider 设置的 timeZone\n * - 例子:用户设置时区为+9,计算机所在时区为+8区,然后用户选择了22:00\n * - DatePicker 内部保存日期 state 为 +8 的 22:00 => a = new Date(\"2021-05-25 22:00:00\")\n * - 传出去时,需要把 +8 的 22:00 => +9 的 22:00 => b = zonedTimeToUtc(a, \"+09:00\");\n *\n * The parameters returned by onChange are processed according to type\n *\n * -The returned date needs to convert the user time to the set time zone time\n * -User time: user computer system time\n * -Time zone: timeZone set by ConfigProvider\n * -Example: The user sets the time zone to + 9, and the time zone where the computer is located is + 8, and then the user selects 22:00\n * -DatePicker internal save date state is + 8 22:00 = > a = new Date (\"2021-05-25 22:00:00\")\n * -When passing out, you need to put + 8's 22:00 = > + 9's 22:00 = > b = zonedTimeToUtc (a, \"+ 09:00\");\n *\n * e.g.\n * let a = new Date (\"2021-05-25 22:00:00\");\n * = > Tue May 25 2021 22:00:00 GMT + 0800 (China Standard Time)\n * let b = zonedTimeToUtc (a, \"+ 09:00\");\n * = > Tue May 25 2021 21:00:00 GMT + 0800 (China Standard Time)\n *\n * @param {Date|Date[]} value\n */\n disposeCallbackArgs(value) {\n let _value = Array.isArray(value) ? value : value && [value] || [];\n const timeZone = this.getProp('timeZone');\n if (isValidTimeZone(timeZone)) {\n _value = _value.map(date => zonedTimeToUtc(date, timeZone));\n }\n const type = this.getProp('type');\n const formatToken = this.getProp('format') || getDefaultFormatTokenByType(type);\n let notifyValue, notifyDate;\n switch (type) {\n case 'date':\n case 'dateTime':\n case 'month':\n if (!this._isMultiple()) {\n notifyValue = _value[0] && this.localeFormat(_value[0], formatToken);\n [notifyDate] = _value;\n } else {\n notifyValue = _value.map(v => v && this.localeFormat(v, formatToken));\n notifyDate = [..._value];\n }\n break;\n case 'dateRange':\n case 'dateTimeRange':\n notifyValue = _value.map(v => v && this.localeFormat(v, formatToken));\n notifyDate = [..._value];\n break;\n default:\n break;\n }\n return {\n notifyValue,\n notifyDate\n };\n }\n handleYearOrMonthChange(type) {\n let panelType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : strings.PANEL_TYPE_LEFT;\n let step = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n let notSeparateInRange = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n const {\n autoSwitchDate,\n type: datePanelType\n } = this.getProps();\n const {\n monthLeft,\n monthRight\n } = this.getStates();\n const isRangeType = this.isRangeType(datePanelType);\n const isLeftPanelInRange = isRangeType && panelType === strings.PANEL_TYPE_LEFT;\n const panelDetail = this._getPanelDetail(panelType);\n const {\n pickerDate\n } = panelDetail;\n const fn = dateCalcFns[type];\n const targetMonth = fn(pickerDate, step);\n // Determine if the date has changed\n const panelDateHasUpdate = panelType === strings.PANEL_TYPE_LEFT && !_isEqual(targetMonth, monthLeft.pickerDate) || panelType === strings.PANEL_TYPE_RIGHT && !_isEqual(targetMonth, monthRight.pickerDate);\n this._updatePanelDetail(panelType, {\n pickerDate: targetMonth\n });\n if (panelDateHasUpdate) {\n // When the date changes\n if (!isRangeType) {\n // Single Panel Type\n const {\n notifyValue,\n notifyDate\n } = this.disposeCallbackArgs(targetMonth);\n this._adapter.notifyPanelChange(notifyDate, notifyValue);\n } else {\n // Double Panel Type\n if (isLeftPanelInRange) {\n // Left panel\n this.newBiMonthPanelDate[0] = targetMonth;\n } else {\n // Right panel\n this.newBiMonthPanelDate[1] = targetMonth;\n }\n if (!(isLeftPanelInRange && notSeparateInRange)) {\n // Not synchronously switching the left panel in the scene\n const {\n notifyValue,\n notifyDate\n } = this.disposeCallbackArgs(this.newBiMonthPanelDate);\n this._adapter.notifyPanelChange(notifyDate, notifyValue);\n }\n }\n }\n if (autoSwitchDate) {\n this.updateDateAfterChangeYM(type, targetMonth);\n }\n }\n /**\n * You have chosen to switch the year and month in the future to directly update the Date without closing the date panel\n * @param {*} type\n * @param {*} targetDate\n */\n updateDateAfterChangeYM(type, targetDate) {\n const {\n multiple,\n disabledDate,\n type: dateType\n } = this.getProps();\n const {\n selected: selectedSet,\n rangeStart,\n rangeEnd,\n monthLeft\n } = this.getStates();\n // FIXME:\n const includeRange = ['dateRange', 'dateTimeRange'].includes(type);\n const options = {\n closePanel: false\n };\n if (!multiple && !includeRange && selectedSet.size) {\n const selectedStr = Array.from(selectedSet)[0];\n const selectedDate = new Date(selectedStr);\n const year = targetDate.getFullYear();\n const month = targetDate.getMonth();\n let fullDate = set(selectedDate, {\n year,\n month\n });\n if (dateType === 'dateTime') {\n /**\n * 如果是 type dateTime 切换月份要读取只取的time\n * 无论 monthLeft 还是 monthRight 他们的 time 是不变的,所以只取 monthLeft 即可\n */\n fullDate = this._mergeDateAndTime(fullDate, monthLeft.pickerDate);\n }\n if (disabledDate(fullDate, {\n rangeStart,\n rangeEnd\n })) {\n return;\n }\n this._adapter.notifySelectedChange([fullDate], options);\n }\n }\n _isMultiple() {\n return Boolean(this.getProp('multiple')) && this.getProp('type') === 'date';\n }\n _isRange() {\n // return this._adapter.getProp('type') === dateRangeTypeKey;\n }\n handleDayClick(day, panelType) {\n const type = this.getProp('type');\n switch (true) {\n case type === 'date' || type === 'dateTime':\n this.handleDateSelected(day, panelType);\n break;\n case type === 'dateRange' || type === 'dateTimeRange':\n this.handleRangeSelected(day);\n break;\n default:\n break;\n }\n }\n handleDateSelected(day, panelType) {\n const {\n max,\n type,\n isControlledComponent,\n dateFnsLocale\n } = this.getProps();\n const multiple = this._isMultiple();\n const {\n selected\n } = this.getStates();\n const monthDetail = this._getPanelDetail(panelType);\n const newSelected = new Set(multiple ? [...selected] : []);\n const {\n fullDate\n } = day;\n const time = monthDetail.pickerDate;\n const dateStr = fullDate;\n if (!multiple) {\n newSelected.add(dateStr);\n } else {\n if (newSelected.has(dateStr)) {\n newSelected.delete(dateStr);\n } else if (max && newSelected.size === max) {\n this._adapter.notifyMaxLimit();\n } else {\n newSelected.add(dateStr);\n }\n }\n // When passed to the upper layer, it is converted into a Date object to ensure that the input parameter format of initFormDefaultValue is consistent\n const newSelectedDates = [...newSelected].map(_dateStr => type === 'dateTime' ? this._mergeDateAndTime(_dateStr, time) : compatibleParse(_dateStr, strings.FORMAT_FULL_DATE, undefined, dateFnsLocale));\n this.handleShowDateAndTime(panelType, time);\n if (!isControlledComponent) {\n // Uncontrolled components, update internal values when operating, and notify external\n // MonthGrid internally uses string to represent fullDate for easy rendering\n this._adapter.updateDaySelected(newSelected);\n }\n this._adapter.notifySelectedChange(newSelectedDates);\n }\n handleShowDateAndTime(panelType, pickerDate, showDate) {\n const _showDate = showDate || pickerDate;\n this._updatePanelDetail(panelType, {\n showDate: _showDate,\n pickerDate\n });\n }\n /**\n * link date and time\n *\n * @param {Date|string} date\n * @param {Date|string} time\n * @returns {Date}\n */\n _mergeDateAndTime(date, time) {\n const dateFnsLocale = this._adapter.getProp('dateFnsLocale');\n const dateStr = format(isValidDate(date) ? date : compatibleParse(date, strings.FORMAT_FULL_DATE, undefined, dateFnsLocale), strings.FORMAT_FULL_DATE);\n const timeStr = format(isValidDate(time) ? time : compatibleParse(time, strings.FORMAT_TIME_PICKER, undefined, dateFnsLocale), strings.FORMAT_TIME_PICKER);\n const timeFormat = this.getValidTimeFormat();\n return compatibleParse(`${dateStr} ${timeStr}`, timeFormat, undefined, dateFnsLocale);\n }\n handleRangeSelected(day) {\n let {\n rangeStart,\n rangeEnd\n } = this.getStates();\n const {\n startDateOffset,\n endDateOffset,\n type,\n dateFnsLocale,\n rangeInputFocus,\n triggerRender\n } = this._adapter.getProps();\n const {\n fullDate\n } = day;\n let rangeStartReset = false;\n let rangeEndReset = false;\n const isDateRangeAndHasOffset = (startDateOffset || endDateOffset) && type === 'dateRange';\n if (isDateRangeAndHasOffset) {\n rangeStart = getFullDateOffset(startDateOffset, fullDate);\n rangeEnd = getFullDateOffset(endDateOffset, fullDate);\n } else {\n if (rangeInputFocus === 'rangeEnd') {\n rangeEnd = fullDate;\n // rangStart Parten in dateTime: 'yyyy-MM-dd HH:MM:SS', rangeEnd parten: 'yyyy-MM-dd'\n if (rangeStart && rangeEnd && isBefore(rangeEnd, rangeStart.trim().split(/\\s+/)[0])) {\n rangeStart = null;\n rangeStartReset = true;\n }\n // Compatible to select date after opening the panel without click input\n } else if (rangeInputFocus === 'rangeStart' || !rangeInputFocus) {\n rangeStart = fullDate;\n // rangEnd Parten in dateTime: 'yyyy-MM-dd HH:MM:SS', rangeStart parten: 'yyyy-MM-dd'\n if (rangeStart && rangeEnd && isBefore(rangeEnd.trim().split(/\\s+/)[0], rangeStart)) {\n rangeEnd = null;\n rangeEndReset = true;\n }\n }\n }\n // next focus logic\n const isRangeType = /range/i.test(type);\n if (isRangeType) {\n if (isDateRangeAndHasOffset) {\n this._adapter.setRangeStart(rangeStart);\n this._adapter.setRangeEnd(rangeEnd);\n } else {\n if (rangeInputFocus === 'rangeEnd') {\n this._adapter.setRangeEnd(rangeEnd);\n if (rangeStartReset) {\n this._adapter.setRangeStart(rangeStart);\n }\n if (!this._adapter.isAnotherPanelHasOpened('rangeEnd') || !rangeStart) {\n this._adapter.setRangeInputFocus('rangeStart');\n }\n } else if (rangeInputFocus === 'rangeStart' || !rangeInputFocus) {\n this._adapter.setRangeStart(rangeStart);\n if (rangeEndReset) {\n this._adapter.setRangeEnd(rangeEnd);\n }\n if (!this._adapter.isAnotherPanelHasOpened('rangeStart') || !rangeEnd) {\n this._adapter.setRangeInputFocus('rangeEnd');\n }\n }\n }\n }\n const dateFormat = this.getValidDateFormat();\n // only notify when choose completed\n if (rangeStart || rangeEnd) {\n const [startDate, endDate] = [compatibleParse(rangeStart, dateFormat, undefined, dateFnsLocale), compatibleParse(rangeEnd, dateFormat, undefined, dateFnsLocale)];\n let date = [startDate, endDate];\n // If the type is dateRangeTime, add the value of time\n if (type === 'dateTimeRange') {\n const startTime = this.getState('monthLeft').pickerDate;\n const endTime = this.getState('monthRight').pickerDate;\n const start = rangeStart ? this._mergeDateAndTime(rangeStart, startTime) : null;\n const end = rangeEnd ? this._mergeDateAndTime(rangeEnd, endTime) : null;\n if (isSameDay(startDate, endDate) && isBefore(end, start)) {\n date = [start, start];\n } else {\n date = [start, end];\n }\n }\n /**\n * no need to check focus then\n * - dateRange and isDateRangeAndHasOffset\n */\n const needCheckFocusRecord = !(type === 'dateRange' && isDateRangeAndHasOffset);\n this._adapter.notifySelectedChange(date, {\n needCheckFocusRecord\n });\n }\n }\n _isNeedSwap(rangeStart, rangeEnd) {\n // Check whether the start and end are reasonable and whether they need to be reversed\n return rangeStart && rangeEnd && isBefore(rangeEnd, rangeStart);\n }\n /**\n * Day may be empty, this is unhover state\n * @param {*} day\n */\n handleDayHover() {\n let day = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n fullDate: ''\n };\n let panelType = arguments.length > 1 ? arguments[1] : undefined;\n const {\n fullDate\n } = day;\n const {\n startDateOffset,\n endDateOffset,\n type\n } = this.getProps();\n this._adapter.setHoverDay(fullDate);\n if ((startDateOffset || endDateOffset) && type === 'dateRange') {\n const offsetRangeStart = getFullDateOffset(startDateOffset, fullDate);\n const offsetRangeEnd = getFullDateOffset(endDateOffset, fullDate);\n this._adapter.setOffsetRangeStart(offsetRangeStart);\n this._adapter.setOffsetRangeEnd(offsetRangeEnd);\n }\n }\n // Guarantee that monthLeft, monthRight will not appear in the same month or monthLeft is greater than MonthRight\n _autoAdjustMonth(monthLeft, monthRight) {\n let newMonthLeft = monthLeft;\n let newMonthRight = monthRight;\n const difference = differenceInCalendarMonths(monthLeft.pickerDate, monthRight.pickerDate);\n if (difference > 0) {\n // The month on the left is larger than the month on the right, swap\n newMonthLeft = Object.assign({}, monthRight);\n newMonthRight = Object.assign({}, monthLeft);\n } else if (difference === 0) {\n // Around the same month, the number of months on the right + 1\n newMonthLeft = monthLeft;\n newMonthRight = Object.assign(Object.assign({}, monthRight), {\n pickerDate: addMonths(monthRight.pickerDate, 1)\n });\n }\n return {\n monthLeft: newMonthLeft,\n monthRight: newMonthRight\n };\n }\n getValidTimeFormat() {\n const formatProp = this.getProp('format') || strings.FORMAT_TIME_PICKER;\n const timeFormatTokens = [];\n if (_includes(formatProp, 'h') || _includes(formatProp, 'H')) {\n timeFormatTokens.push('HH');\n }\n if (_includes(formatProp, 'm')) {\n timeFormatTokens.push('mm');\n }\n if (_includes(formatProp, 's')) {\n timeFormatTokens.push('ss');\n }\n return timeFormatTokens.join(':');\n }\n getValidDateFormat() {\n return this.getProp('format') || getDefaultFormatToken(this.getProp('type'));\n }\n handleTimeChange(newTime, panelType) {\n const {\n rangeEnd,\n rangeStart\n } = this.getStates();\n const dateFnsLocale = this.getProp('dateFnsLocale');\n const ts = newTime.timeStampValue;\n const type = this.getProp('type');\n const panelDetail = this._getPanelDetail(panelType);\n const {\n showDate\n } = panelDetail;\n const timeDate = new Date(ts);\n const dateFormat = this.getValidDateFormat();\n const destRange = panelType === strings.PANEL_TYPE_RIGHT ? rangeEnd : rangeStart;\n let year, monthNo, date;\n // if (pickerDate && isValidDate(pickerDate)) {\n // year = pickerDate.getFullYear();\n // monthNo = pickerDate.getMonth();\n // date = pickerDate.getDate();\n // } else\n if (type === 'dateTimeRange' && destRange) {\n const rangeDate = compatibleParse(destRange, dateFormat, undefined, dateFnsLocale);\n year = rangeDate.getFullYear();\n monthNo = rangeDate.getMonth();\n date = rangeDate.getDate();\n } else {\n year = showDate.getFullYear();\n monthNo = showDate.getMonth();\n date = showDate.getDate();\n }\n const hours = timeDate.getHours();\n const minutes = timeDate.getMinutes();\n const seconds = timeDate.getSeconds();\n const milSeconds = timeDate.getMilliseconds();\n const dateArgs = [year, monthNo, date, hours, minutes, seconds, milSeconds];\n const fullValidDate = new Date(...dateArgs);\n if (type === 'dateTimeRange') {\n this.handleShowDateAndTime(panelType, fullValidDate, showDate);\n this._updateTimeInDateRange(panelType, fullValidDate);\n } else {\n const fullDate = formatFullDate(year, monthNo + 1, date);\n this.handleDateSelected({\n fullDate,\n fullValidDate\n }, panelType);\n this.handleShowDateAndTime(panelType, fullValidDate);\n this._adapter.notifySelectedChange([fullValidDate]);\n }\n }\n /**\n * Update the time part in the range\n * @param {string} panelType\n * @param {Date} timeDate\n */\n _updateTimeInDateRange(panelType, timeDate) {\n const {\n isControlledComponent,\n dateFnsLocale\n } = this.getProps();\n let rangeStart = this.getState('rangeStart');\n let rangeEnd = this.getState('rangeEnd');\n const dateFormat = this.getValidDateFormat();\n // TODO: Modify a time individually\n if (rangeStart && rangeEnd) {\n let startDate = compatibleParse(rangeStart, dateFormat, undefined, dateFnsLocale);\n let endDate = compatibleParse(rangeEnd, dateFormat, undefined, dateFnsLocale);\n // console.log('_updateTimeInDateRange()', rangeStart, rangeEnd, startDate, endDate);\n if (panelType === strings.PANEL_TYPE_RIGHT) {\n endDate = this._mergeDateAndTime(timeDate, timeDate);\n rangeEnd = format(endDate, strings.FORMAT_DATE_TIME);\n if (this._isNeedSwap(rangeStart, rangeEnd)) {\n [rangeStart, rangeEnd] = [rangeEnd, rangeStart];\n [startDate, endDate] = [endDate, startDate];\n }\n if (!isControlledComponent) {\n this._adapter.setRangeEnd(rangeEnd);\n }\n } else {\n startDate = this._mergeDateAndTime(timeDate, timeDate);\n rangeStart = format(startDate, strings.FORMAT_DATE_TIME);\n if (this._isNeedSwap(rangeStart, rangeEnd)) {\n [rangeStart, rangeEnd] = [rangeEnd, rangeStart];\n [startDate, endDate] = [endDate, startDate];\n }\n if (!isControlledComponent) {\n this._adapter.setRangeStart(rangeStart);\n }\n }\n // console.log('_updateTimeInDateRange()', rangeStart, rangeEnd, startDate, endDate);\n this._adapter.notifySelectedChange([startDate, endDate]);\n }\n }\n _updatePanelDetail(panelType, kvs) {\n const {\n monthLeft,\n monthRight\n } = this.getStates();\n if (panelType === strings.PANEL_TYPE_RIGHT) {\n this._adapter.updateMonthOnRight(Object.assign(Object.assign({}, monthRight), kvs));\n } else {\n this._adapter.updateMonthOnLeft(Object.assign(Object.assign({}, monthLeft), kvs));\n }\n }\n showYearPicker(panelType) {\n this._updatePanelDetail(panelType, {\n isTimePickerOpen: false,\n isYearPickerOpen: true\n });\n }\n showTimePicker(panelType, opt) {\n if (this.getProp('disabledTimePicker')) {\n return;\n }\n this._updatePanelDetail(panelType, {\n isTimePickerOpen: true,\n isYearPickerOpen: false\n });\n }\n showDatePanel(panelType) {\n this._updatePanelDetail(panelType, {\n isTimePickerOpen: false,\n isYearPickerOpen: false\n });\n }\n /**\n * Get year and month panel open type\n *\n * It is useful info to set minHeight of weeks.\n * - When yam open type is 'left' or 'right', weeks minHeight should be set\n * If the minHeight is not set, the change of the number of weeks will cause the scrollList to be unstable\n */\n getYAMOpenType() {\n const {\n monthLeft,\n monthRight\n } = this._adapter.getStates();\n const leftYearPickerOpen = monthLeft.isYearPickerOpen;\n const rightYearPickerOpen = monthRight.isYearPickerOpen;\n if (leftYearPickerOpen && rightYearPickerOpen) {\n return 'both';\n } else if (leftYearPickerOpen) {\n return 'left';\n } else if (rightYearPickerOpen) {\n return 'right';\n } else {\n return 'none';\n }\n }\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInCalendarYears\n * @category Year Helpers\n * @summary Get the number of calendar years between the given dates.\n *\n * @description\n * Get the number of calendar years between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInCalendarYears(\n * new Date(2015, 1, 11),\n * new Date(2013, 11, 31)\n * )\n * //=> 2\n */\nexport default function differenceInCalendarYears(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n return dateLeft.getFullYear() - dateRight.getFullYear();\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the months subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function subMonths(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMonths(dirtyDate, -amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addYears from \"../addYears/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subYears\n * @category Year Helpers\n * @summary Subtract the specified number of years from the given date.\n *\n * @description\n * Subtract the specified number of years from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the years subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 years from 1 September 2014:\n * const result = subYears(new Date(2014, 8, 1), 5)\n * //=> Tue Sep 01 2009 00:00:00\n */\nexport default function subYears(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addYears(dirtyDate, -amount);\n}","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M12.62 4.4c.5.53.5 1.38 0 1.91L7.14 12l5.48 5.69c.5.53.5 1.38 0 1.91-.51.53-1.33.53-1.84 0l-6.4-6.64a1.4 1.4 0 0 1 0-1.92l6.4-6.64c.5-.53 1.33-.53 1.84 0Z\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M19.62 4.4c.5.53.5 1.38 0 1.91L14.14 12l5.48 5.69c.5.53.5 1.38 0 1.91-.51.53-1.34.53-1.84 0l-6.4-6.64a1.4 1.4 0 0 1 0-1.92l6.4-6.64c.5-.53 1.33-.53 1.84 0Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'double_chevron_left');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M16.28 4.24a1.5 1.5 0 0 1 0 2.12l-5.66 5.66 5.66 5.65a1.5 1.5 0 1 1-2.12 2.13l-6.72-6.72a1.5 1.5 0 0 1 0-2.12l6.72-6.72a1.5 1.5 0 0 1 2.12 0Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'chevron_left');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M7.44 19.8a1.5 1.5 0 0 1 0-2.13l5.66-5.65-5.66-5.66a1.5 1.5 0 1 1 2.12-2.12l6.72 6.72a1.5 1.5 0 0 1 0 2.12L9.56 19.8a1.5 1.5 0 0 1-2.12 0Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'chevron_right');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M4.38 4.4c.51-.53 1.34-.53 1.84 0l6.4 6.64c.5.53.5 1.39 0 1.92l-6.4 6.64c-.5.53-1.33.53-1.84 0a1.4 1.4 0 0 1 0-1.91L9.86 12 4.38 6.31a1.4 1.4 0 0 1 0-1.91Z\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M11.38 4.4c.51-.53 1.33-.53 1.84 0l6.4 6.64c.5.53.5 1.39 0 1.92l-6.4 6.64c-.5.53-1.33.53-1.84 0a1.4 1.4 0 0 1 0-1.91L16.86 12l-5.48-5.69a1.4 1.4 0 0 1 0-1.91Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'double_chevron_right');\nexport default IconComponent;","import _noop from \"lodash/noop\";\nimport React, { PureComponent } from 'react';\n// import cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport IconButton from '../iconButton';\nimport Button from '../button';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/datePicker/constants';\nimport { IconChevronLeft, IconChevronRight, IconDoubleChevronLeft, IconDoubleChevronRight } from '@douyinfe/semi-icons';\nconst prefixCls = cssClasses.NAVIGATION;\nexport default class Navigation extends PureComponent {\n constructor(props) {\n super(props);\n this.navRef = /*#__PURE__*/React.createRef();\n }\n render() {\n const {\n forwardRef,\n monthText,\n onMonthClick,\n onNextMonth,\n onPrevMonth,\n onPrevYear,\n onNextYear,\n density,\n shouldBimonthSwitch,\n panelType\n } = this.props;\n const btnTheme = 'borderless';\n const iconBtnSize = density === 'compact' ? 'default' : 'large';\n const btnNoHorizontalPadding = true;\n const buttonSize = density === 'compact' ? 'small' : 'default';\n const isLeftPanel = panelType === strings.PANEL_TYPE_LEFT;\n const isRightPanel = panelType === strings.PANEL_TYPE_RIGHT;\n // syncSwitchMonth and the current panel is the left\n const hiddenLeftPanelRightButtons = shouldBimonthSwitch && isLeftPanel;\n // syncSwitchMonth and the current panel is the right\n const hiddenRightPanelLeftButtons = shouldBimonthSwitch && isRightPanel;\n // `visibility: hidden` will keep the icon in position\n const leftButtonStyle = {};\n const rightButtonStyle = {};\n if (hiddenRightPanelLeftButtons) {\n leftButtonStyle.visibility = 'hidden';\n }\n if (hiddenLeftPanelRightButtons) {\n rightButtonStyle.visibility = 'hidden';\n }\n const ref = forwardRef || this.navRef;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: prefixCls,\n ref: ref\n }, /*#__PURE__*/React.createElement(IconButton, {\n key: \"double-chevron-left\",\n \"aria-label\": \"Previous year\",\n icon: /*#__PURE__*/React.createElement(IconDoubleChevronLeft, {\n \"aria-hidden\": true,\n size: iconBtnSize\n }),\n size: buttonSize,\n theme: btnTheme,\n noHorizontalPadding: btnNoHorizontalPadding,\n onClick: onPrevYear,\n style: leftButtonStyle\n }), /*#__PURE__*/React.createElement(IconButton, {\n key: \"chevron-left\",\n \"aria-label\": \"Previous month\",\n icon: /*#__PURE__*/React.createElement(IconChevronLeft, {\n \"aria-hidden\": true,\n size: iconBtnSize\n }),\n size: buttonSize,\n onClick: onPrevMonth,\n theme: btnTheme,\n noHorizontalPadding: btnNoHorizontalPadding,\n style: leftButtonStyle\n }), /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-month`\n }, /*#__PURE__*/React.createElement(Button, {\n onClick: onMonthClick,\n theme: btnTheme,\n size: buttonSize\n }, /*#__PURE__*/React.createElement(\"span\", null, monthText))), /*#__PURE__*/React.createElement(IconButton, {\n key: \"chevron-right\",\n \"aria-label\": \"Next month\",\n icon: /*#__PURE__*/React.createElement(IconChevronRight, {\n \"aria-hidden\": true,\n size: iconBtnSize\n }),\n size: buttonSize,\n onClick: onNextMonth,\n theme: btnTheme,\n noHorizontalPadding: btnNoHorizontalPadding,\n style: rightButtonStyle\n }), /*#__PURE__*/React.createElement(IconButton, {\n key: \"double-chevron-right\",\n \"aria-label\": \"Next year\",\n icon: /*#__PURE__*/React.createElement(IconDoubleChevronRight, {\n \"aria-hidden\": true,\n size: iconBtnSize\n }),\n size: buttonSize,\n theme: btnTheme,\n noHorizontalPadding: btnNoHorizontalPadding,\n onClick: onNextYear,\n style: rightButtonStyle\n }));\n }\n}\nNavigation.propTypes = {\n monthText: PropTypes.string,\n density: PropTypes.string,\n onMonthClick: PropTypes.func,\n onNextMonth: PropTypes.func,\n onPrevMonth: PropTypes.func,\n onNextYear: PropTypes.func,\n onPrevYear: PropTypes.func,\n navPrev: PropTypes.node,\n navNext: PropTypes.node,\n // Whether to switch synchronously for two panels\n shouldBimonthSwitch: PropTypes.bool,\n // Panel type, divided into left panel and right panel\n panelType: PropTypes.oneOf([strings.PANEL_TYPE_LEFT, strings.PANEL_TYPE_RIGHT])\n};\nNavigation.defaultProps = {\n monthText: '',\n onMonthClick: _noop,\n onNextMonth: _noop,\n onPrevMonth: _noop,\n onNextYear: _noop,\n onPrevYear: _noop\n};","/**\n *\n * @param {number} weekStartsOn\n * the index of the first day of the week (0-Sunday,1-Monday, etc)\n *\n */\nconst getDayofWeek = _ref => {\n let {\n weekStartsOn = 0\n } = _ref;\n const weekDay = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n for (let index = 0; index < weekStartsOn; index++) {\n weekDay.push(weekDay.shift());\n }\n return weekDay;\n};\nexport default getDayofWeek;","import BaseFoundation from '../base/foundation';\n// import { cssClasses, strings } from './constants';\nimport getMonthTable from './_utils/getMonthTable';\nimport getDayOfWeek from './_utils/getDayOfWeek';\nimport { format } from 'date-fns';\nimport isNullOrUndefined from '../utils/isNullOrUndefined';\nexport default class CalendarMonthFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n }\n init() {\n this._getToday();\n this.getMonthTable();\n }\n _getToday() {\n const today = new Date();\n const todayText = format(today, 'yyyy-MM-dd');\n this._adapter.updateToday(todayText);\n }\n getMonthTable() {\n const month = this._adapter.getProp('month');\n const weeksRowNum = this.getState('weeksRowNum');\n if (month) {\n this.updateWeekDays();\n const weekStartsOn = this._adapter.getProp('weekStartsOn');\n const monthTable = getMonthTable(month, weekStartsOn);\n const {\n weeks\n } = monthTable;\n this._adapter.updateMonthTable(monthTable);\n if (isNullOrUndefined(weeksRowNum)) {\n this._adapter.setWeeksRowNum(weeks.length);\n } else if (Array.isArray(weeks) && weeks.length !== weeksRowNum) {\n this._adapter.setWeeksRowNum(weeks.length, () => {\n this._adapter.notifyWeeksRowNumChange(weeks.length);\n });\n }\n }\n }\n updateWeekDays() {\n const weekStartsOn = this._adapter.getProp('weekStartsOn');\n const weekdays = getDayOfWeek({\n weekStartsOn\n });\n this._adapter.setWeekDays(weekdays);\n }\n destroy() {}\n handleClick(day) {\n this._adapter.notifyDayClick(day);\n }\n handleHover(day) {\n this._adapter.notifyDayHover(day);\n }\n}","import { isAfter as dateFnsIsAfter, parseISO } from 'date-fns';\nimport isString from '../../utils/isString';\nexport default function isAfter(date, dateToCompare) {\n const dayOne = isString(date) ? parseISO(date) : date;\n const dayTwo = isString(dateToCompare) ? parseISO(dateToCompare) : dateToCompare;\n return dateFnsIsAfter(dayOne, dayTwo);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * @param {Date|Number} date - the date that should be after the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is after the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * const result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */\nexport default function isAfter(dirtyDate, dirtyDateToCompare) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dateToCompare = toDate(dirtyDateToCompare);\n return date.getTime() > dateToCompare.getTime();\n}","import { isSameDay as dateFnsIsSameDay, parseISO } from 'date-fns';\nimport isString from '../../utils/isString';\nexport default function isSameDay(date, dateToCompare) {\n const dayOne = isString(date) ? parseISO(date) : date;\n const dayTwo = isString(dateToCompare) ? parseISO(dateToCompare) : dateToCompare;\n return dateFnsIsSameDay(dayOne, dayTwo);\n}","import { isWithinInterval, parseISO, isEqual, isBefore } from 'date-fns';\nimport isString from '../../utils/isString';\n/**\n * is the date between start and end?(not including start and end)\n * - if start > end, return false\n * @param {String|Date} day\n * @param {Object} { start: string|Date, end: string|Date}\n * @returns {Boolean}\n */\nexport default function isBetween(day, _ref) {\n let {\n start,\n end\n } = _ref;\n const d = isString(day) ? parseISO(day) : day;\n const s = isString(start) ? parseISO(start) : start;\n const e = isString(end) ? parseISO(end) : end;\n return isBefore(s, e) && isWithinInterval(d, {\n start: s,\n end: e\n }) && !isEqual(d, s) && !isEqual(d, e);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isWithinInterval\n * @category Interval Helpers\n * @summary Is the given date within the interval?\n *\n * @description\n * Is the given date within the interval? (Including start and end.)\n *\n * @param {Date|Number} date - the date to check\n * @param {Interval} interval - the interval to check\n * @returns {Boolean} the date is within the interval\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For the date within the interval:\n * isWithinInterval(new Date(2014, 0, 3), {\n * start: new Date(2014, 0, 1),\n * end: new Date(2014, 0, 7)\n * })\n * //=> true\n *\n * @example\n * // For the date outside of the interval:\n * isWithinInterval(new Date(2014, 0, 10), {\n * start: new Date(2014, 0, 1),\n * end: new Date(2014, 0, 7)\n * })\n * //=> false\n *\n * @example\n * // For date equal to interval start:\n * isWithinInterval(date, { start, end: date }) // => true\n *\n * @example\n * // For date equal to interval end:\n * isWithinInterval(date, { start: date, end }) // => true\n */\nexport default function isWithinInterval(dirtyDate, interval) {\n requiredArgs(2, arguments);\n var time = toDate(dirtyDate).getTime();\n var startTime = toDate(interval.start).getTime();\n var endTime = toDate(interval.end).getTime();\n\n // Throw an exception if start date is after end date or if any date is `Invalid Date`\n if (!(startTime <= endTime)) {\n throw new RangeError('Invalid interval');\n }\n return time >= startTime && time <= endTime;\n}","import _isFunction from \"lodash/isFunction\";\nimport _stubFalse from \"lodash/stubFalse\";\nimport _noop from \"lodash/noop\";\n/* eslint-disable jsx-a11y/click-events-have-key-events,jsx-a11y/no-noninteractive-element-interactions */\nimport React from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport MonthFoundation from '@douyinfe/semi-foundation/lib/es/datePicker/monthFoundation';\nimport { cssClasses, numbers } from '@douyinfe/semi-foundation/lib/es/datePicker/constants';\nimport BaseComponent from '../_base/baseComponent';\nimport { isBefore, isAfter, isBetween, isSameDay } from '@douyinfe/semi-foundation/lib/es/datePicker/_utils/index';\nimport { parseISO } from 'date-fns';\nconst prefixCls = cssClasses.PREFIX;\nexport default class Month extends BaseComponent {\n constructor(props) {\n super(props);\n this.state = {\n weekdays: [],\n month: {\n weeks: [],\n monthText: ''\n },\n todayText: '',\n weeksRowNum: props.weeksRowNum\n };\n this.monthRef = /*#__PURE__*/React.createRef();\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n updateToday: todayText => this.setState({\n todayText\n }),\n setWeekDays: weekdays => this.setState({\n weekdays\n }),\n setWeeksRowNum: (weeksRowNum, callback) => this.setState({\n weeksRowNum\n }, callback),\n updateMonthTable: month => this.setState({\n month\n }),\n notifyDayClick: day => this.props.onDayClick(day),\n notifyDayHover: day => this.props.onDayHover(day),\n notifyWeeksRowNumChange: weeksRowNum => this.props.onWeeksRowNumChange(weeksRowNum)\n });\n }\n componentDidMount() {\n this.foundation = new MonthFoundation(this.adapter);\n this.foundation.init();\n }\n componentWillUnmount() {\n this.foundation.destroy();\n }\n componentDidUpdate(prevProps, prevState) {\n if (prevProps.month !== this.props.month) {\n this.foundation.getMonthTable();\n }\n }\n getSingleDayStatus(options) {\n const {\n rangeInputFocus\n } = this.props;\n const {\n fullDate,\n todayText,\n selected,\n disabledDate,\n rangeStart,\n rangeEnd\n } = options;\n const disabledOptions = {\n rangeStart,\n rangeEnd,\n rangeInputFocus\n };\n const isToday = fullDate === todayText;\n const isSelected = selected.has(fullDate);\n let isDisabled = disabledDate && disabledDate(parseISO(fullDate), disabledOptions);\n if (!isDisabled && this.props.rangeInputFocus === 'rangeStart' && rangeEnd && this.props.focusRecordsRef && this.props.focusRecordsRef.current.rangeEnd) {\n // The reason for splitting is that the dateRangeTime format: 'yyyy-MM-dd HH:MM:SS'\n isDisabled = isAfter(fullDate, rangeEnd.trim().split(/\\s+/)[0]);\n }\n if (!isDisabled && this.props.rangeInputFocus === 'rangeEnd' && rangeStart && this.props.focusRecordsRef && this.props.focusRecordsRef.current.rangeStart) {\n // The reason for splitting is that the dateRangeTime format: 'yyyy-MM-dd HH:MM:SS'\n isDisabled = isBefore(fullDate, rangeStart.trim().split(/\\s+/)[0]);\n }\n return {\n isToday,\n isSelected,\n isDisabled // Disabled\n };\n }\n getDateRangeStatus(options) {\n const {\n rangeStart,\n rangeEnd,\n fullDate,\n hoverDay,\n offsetRangeStart,\n offsetRangeEnd,\n rangeInputFocus\n } = options;\n // If no item is selected, return the empty object directly\n const _isDateRangeAnySelected = Boolean(rangeStart || rangeEnd);\n const _isDateRangeSelected = Boolean(rangeStart && rangeEnd);\n const _isOffsetDateRangeAnyExist = offsetRangeStart || offsetRangeEnd;\n if (!_isDateRangeAnySelected) {\n return {};\n }\n // The range selects the hover date, and the normal hover is .semi-datepicker-main: hover\n const _isHoverDay = isSameDay(hoverDay, fullDate);\n // When one is selected\n let _isHoverAfterStart, _isHoverBeforeEnd, isSelectedStart, isSelectedEnd, isHoverDayAroundOneSelected;\n if (rangeStart) {\n isSelectedStart = isSameDay(fullDate, rangeStart);\n if (rangeInputFocus === 'rangeEnd') {\n _isHoverAfterStart = isBetween(fullDate, {\n start: rangeStart,\n end: hoverDay\n });\n }\n }\n if (rangeEnd) {\n isSelectedEnd = isSameDay(fullDate, rangeEnd);\n if (rangeInputFocus === 'rangeStart') {\n _isHoverBeforeEnd = isBetween(fullDate, {\n start: hoverDay,\n end: rangeEnd\n });\n }\n }\n if (!_isDateRangeSelected && _isDateRangeAnySelected) {\n isHoverDayAroundOneSelected = _isHoverDay;\n }\n let isHover;\n if (!_isOffsetDateRangeAnyExist) {\n isHover = _isHoverAfterStart || _isHoverBeforeEnd || _isHoverDay;\n }\n // Select all\n let isInRange, isSelectedStartAfterHover, isSelectedEndBeforeHover, isHoverDayInStartSelection, isHoverDayInEndSelection, isHoverDayInRange;\n if (_isDateRangeSelected) {\n isInRange = isBetween(fullDate, {\n start: rangeStart,\n end: rangeEnd\n });\n if (!_isOffsetDateRangeAnyExist) {\n isSelectedStartAfterHover = isSelectedStart && isAfter(rangeStart, hoverDay);\n isSelectedEndBeforeHover = isSelectedEnd && isBefore(rangeEnd, hoverDay);\n isHoverDayInStartSelection = _isHoverDay && rangeInputFocus === 'rangeStart';\n isHoverDayInEndSelection = _isHoverDay && rangeInputFocus === 'rangeEnd';\n isHoverDayInRange = _isHoverDay && isBetween(hoverDay, {\n start: rangeStart,\n end: rangeEnd\n });\n }\n }\n return {\n isHoverDay: _isHoverDay,\n isSelectedStart,\n isSelectedEnd,\n isInRange,\n isHover,\n isSelectedStartAfterHover,\n isSelectedEndBeforeHover,\n isHoverDayInRange,\n isHoverDayInStartSelection,\n isHoverDayInEndSelection,\n isHoverDayAroundOneSelected // Hover date and select a date\n };\n }\n getOffsetDateStatus(options) {\n const {\n offsetRangeStart,\n offsetRangeEnd,\n rangeStart,\n rangeEnd,\n fullDate,\n hoverDay\n } = options;\n // When there is no offset, return the empty object directly\n const _isOffsetDateRangeNull = !(offsetRangeStart || offsetRangeEnd);\n if (_isOffsetDateRangeNull) {\n return {};\n }\n // Range Select base date\n const _isInRange = isBetween(fullDate, {\n start: rangeStart,\n end: rangeEnd\n });\n const _isHoverDay = isSameDay(hoverDay, fullDate);\n const _isSelectedStart = rangeStart && isSameDay(fullDate, rangeStart);\n const _isSelectedEnd = rangeEnd && isSameDay(fullDate, rangeEnd);\n const _isDateRangeSelected = Boolean(rangeStart && rangeEnd);\n // Determine whether it is offsetStart or offsetRangeEnd\n const isOffsetRangeStart = isSameDay(fullDate, offsetRangeStart);\n const isOffsetRangeEnd = isSameDay(fullDate, offsetRangeEnd);\n const isHoverDayOffset = _isHoverDay;\n // When selected\n let isHoverInOffsetRange, isInOffsetRange;\n if (_isDateRangeSelected) {\n isHoverInOffsetRange = _isInRange && _isHoverDay;\n }\n // When there is an offset area\n const _isOffsetDateRangeSelected = Boolean(offsetRangeStart && offsetRangeEnd);\n if (_isOffsetDateRangeSelected) {\n isInOffsetRange = _isSelectedStart || isBetween(fullDate, {\n start: offsetRangeStart,\n end: offsetRangeEnd\n }) || _isSelectedEnd;\n }\n return {\n isOffsetRangeStart,\n isOffsetRangeEnd,\n isHoverInOffsetRange,\n isHoverDayOffset,\n isInOffsetRange // Include start and end within the week selection (start and end styles are the same as other dates, so start and end are included)\n };\n }\n /**\n * get day current status\n * @param {Object} fullDate\n * @param {Object} options\n * @returns {Object}\n */\n getDayStatus(currentDay, options) {\n const {\n fullDate\n } = currentDay;\n const {\n hoverDay,\n rangeStart,\n rangeEnd,\n todayText,\n offsetRangeStart,\n offsetRangeEnd,\n disabledDate,\n selected,\n rangeInputFocus\n } = options;\n const singleDayStatus = this.getSingleDayStatus({\n fullDate,\n todayText,\n hoverDay,\n selected,\n disabledDate,\n rangeStart,\n rangeEnd\n });\n const dateRangeStatus = this.getDateRangeStatus(Object.assign({\n fullDate,\n rangeStart,\n rangeEnd,\n hoverDay,\n offsetRangeStart,\n offsetRangeEnd,\n rangeInputFocus\n }, singleDayStatus));\n const offsetDataStatus = this.getOffsetDateStatus(Object.assign(Object.assign({\n offsetRangeStart,\n offsetRangeEnd,\n rangeStart,\n rangeEnd,\n fullDate,\n hoverDay\n }, singleDayStatus), dateRangeStatus));\n // this parameter will pass to the user when given renderFullDate function, do not delete or modify its key\n const dayStatus = Object.assign(Object.assign(Object.assign({}, singleDayStatus), dateRangeStatus), offsetDataStatus);\n return dayStatus;\n }\n renderDayOfWeek() {\n const {\n locale\n } = this.props;\n const weekdayCls = classNames(cssClasses.WEEKDAY);\n const weekdayItemCls = classNames(`${prefixCls}-weekday-item`);\n const {\n weekdays\n } = this.state;\n // i18n\n const weekdaysText = weekdays.map(key => locale.weeks[key]);\n return /*#__PURE__*/React.createElement(\"div\", {\n role: \"row\",\n className: weekdayCls\n }, weekdaysText.map((E, i) => (/*#__PURE__*/React.createElement(\"div\", {\n role: \"columnheader\",\n key: E + i,\n className: weekdayItemCls\n }, E))));\n }\n renderWeeks() {\n const {\n month\n } = this.state;\n const {\n weeks\n } = month;\n const {\n weeksRowNum\n } = this.props;\n let style = {};\n if (weeksRowNum) {\n const height = weeksRowNum * numbers.WEEK_HEIGHT;\n style = {\n height\n };\n }\n const weeksCls = classNames(cssClasses.WEEKS);\n return /*#__PURE__*/React.createElement(\"div\", {\n className: weeksCls,\n style: style\n }, weeks.map((week, weekIndex) => this.renderWeek(week, weekIndex)));\n }\n renderWeek(week, weekIndex) {\n const weekCls = cssClasses.WEEK;\n return /*#__PURE__*/React.createElement(\"div\", {\n role: \"row\",\n className: weekCls,\n key: weekIndex\n }, week.map((day, dayIndex) => this.renderDay(day, dayIndex)));\n }\n renderDay(day, dayIndex) {\n const {\n todayText\n } = this.state;\n const {\n renderFullDate,\n renderDate\n } = this.props;\n const {\n fullDate,\n dayNumber\n } = day;\n if (!fullDate) {\n return /*#__PURE__*/React.createElement(\"div\", {\n role: \"gridcell\",\n tabIndex: -1,\n key: dayNumber + dayIndex,\n className: cssClasses.DAY\n }, /*#__PURE__*/React.createElement(\"span\", null));\n }\n const dayStatus = this.getDayStatus(day, Object.assign({\n todayText\n }, this.props));\n const dayCls = classNames(cssClasses.DAY, {\n [cssClasses.DAY_TODAY]: dayStatus.isToday,\n [cssClasses.DAY_IN_RANGE]: dayStatus.isInRange,\n [cssClasses.DAY_HOVER]: dayStatus.isHover,\n [cssClasses.DAY_SELECTED]: dayStatus.isSelected,\n [cssClasses.DAY_SELECTED_START]: dayStatus.isSelectedStart,\n [cssClasses.DAY_SELECTED_END]: dayStatus.isSelectedEnd,\n [cssClasses.DAY_DISABLED]: dayStatus.isDisabled,\n // offsetDate class\n [cssClasses.DAY_HOVER_DAY]: dayStatus.isHoverDayOffset,\n [cssClasses.DAY_IN_OFFSET_RANGE]: dayStatus.isInOffsetRange,\n [cssClasses.DAY_SELECTED_RANGE_HOVER]: dayStatus.isHoverInOffsetRange,\n [cssClasses.DAY_OFFSET_RANGE_START]: dayStatus.isOffsetRangeStart,\n [cssClasses.DAY_OFFSET_RANGE_END]: dayStatus.isOffsetRangeEnd,\n // range input class\n [cssClasses.DAY_SELECTED_START_AFTER_HOVER]: dayStatus.isSelectedStartAfterHover,\n [cssClasses.DAY_SELECTED_END_BEFORE_HOVER]: dayStatus.isSelectedEndBeforeHover,\n [cssClasses.DAY_HOVER_DAY_BEFORE_RANGE]: dayStatus.isHoverDayInStartSelection,\n [cssClasses.DAY_HOVER_DAY_AFTER_RANGE]: dayStatus.isHoverDayInEndSelection,\n [cssClasses.DAY_HOVER_DAY_AROUND_SINGLE_SELECTED]: dayStatus.isHoverDayAroundOneSelected\n });\n const dayMainCls = classNames({\n [`${cssClasses.DAY}-main`]: true\n });\n const fullDateArgs = [dayNumber, fullDate, dayStatus];\n const customRender = _isFunction(renderFullDate);\n return /*#__PURE__*/React.createElement(\"div\", {\n role: \"gridcell\",\n tabIndex: dayStatus.isDisabled ? -1 : 0,\n \"aria-disabled\": dayStatus.isDisabled,\n \"aria-selected\": dayStatus.isSelected,\n \"aria-label\": fullDate,\n className: !customRender ? dayCls : cssClasses.DAY,\n title: fullDate,\n key: dayNumber + dayIndex,\n onClick: e => !dayStatus.isDisabled && this.foundation.handleClick(day),\n onMouseEnter: () => this.foundation.handleHover(day),\n onMouseLeave: () => this.foundation.handleHover()\n }, customRender ? renderFullDate(...fullDateArgs) : (/*#__PURE__*/React.createElement(\"div\", {\n className: dayMainCls\n }, _isFunction(renderDate) ? renderDate(dayNumber, fullDate) : /*#__PURE__*/React.createElement(\"span\", null, dayNumber))));\n }\n render() {\n const {\n forwardRef,\n multiple\n } = this.props;\n const weekday = this.renderDayOfWeek();\n const weeks = this.renderWeeks();\n const monthCls = classNames(cssClasses.MONTH);\n const ref = forwardRef || this.monthRef;\n return /*#__PURE__*/React.createElement(\"div\", {\n role: \"grid\",\n \"aria-multiselectable\": multiple,\n ref: ref,\n className: monthCls\n }, weekday, weeks);\n }\n}\nMonth.propTypes = {\n month: PropTypes.object,\n selected: PropTypes.object,\n rangeStart: PropTypes.string,\n rangeEnd: PropTypes.string,\n offsetRangeStart: PropTypes.string,\n offsetRangeEnd: PropTypes.string,\n onDayClick: PropTypes.func,\n onDayHover: PropTypes.func,\n weekStartsOn: PropTypes.number,\n disabledDate: PropTypes.func,\n weeksRowNum: PropTypes.number,\n onWeeksRowNumChange: PropTypes.func,\n renderDate: PropTypes.func,\n renderFullDate: PropTypes.func,\n hoverDay: PropTypes.string,\n startDateOffset: PropTypes.func,\n endDateOffset: PropTypes.func,\n rangeInputFocus: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n focusRecordsRef: PropTypes.object,\n multiple: PropTypes.bool\n};\nMonth.defaultProps = {\n month: new Date(),\n selected: new Set(),\n rangeStart: '',\n rangeEnd: '',\n onDayClick: _noop,\n onDayHover: _noop,\n onWeeksRowNumChange: _noop,\n weekStartsOn: numbers.WEEK_START_ON,\n disabledDate: _stubFalse,\n weeksRowNum: 0\n};","import { VALIDATE_STATUS, BASE_CLASS_PREFIX } from '../base/constants';\nimport { strings as inputStrings } from '../input/constants';\nconst TYPE_TIME_PICKER = 'time';\nconst TYPE_TIME_RANGE_PICKER = 'timeRange';\nconst DEFAULT_RANGE_SEPARATOR = ' ~ ';\nconst DEFAULT_MULTIPLE_SEPARATOR = ',';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-timepicker`,\n RANGE_PICKER: `${BASE_CLASS_PREFIX}-timepicker-range-panel`,\n RANGE_PANEL_LISTS: `${BASE_CLASS_PREFIX}-timepicker-lists`\n};\nconst strings = {\n TYPES: [TYPE_TIME_PICKER, TYPE_TIME_RANGE_PICKER],\n TYPE_TIME_PICKER,\n TYPE_TIME_RANGE_PICKER,\n DEFAULT_TYPE: TYPE_TIME_PICKER,\n DEFAULT_RANGE_SEPARATOR,\n DEFAULT_MULTIPLE_SEPARATOR,\n SIZE: inputStrings.SIZE,\n DEFAULT_FORMAT: 'HH:mm:ss',\n DEFAULT_FORMAT_A: 'a h:mm:ss',\n STATUS: VALIDATE_STATUS,\n DEFAULT_POSITION: {\n [TYPE_TIME_PICKER]: 'bottomLeft',\n [TYPE_TIME_RANGE_PICKER]: 'bottomLeft'\n }\n};\nconst numbers = {};\nexport { cssClasses, strings, numbers };","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-scrolllist`,\n SELECTED: `${BASE_CLASS_PREFIX}-scrolllist-item-selected`\n};\nconst strings = {\n MODE: ['normal', 'wheel']\n};\nconst numbers = {\n DEFAULT_ITEM_HEIGHT: 36,\n DEFAULT_SCROLL_DURATION: 120\n};\nexport { cssClasses, strings, numbers };","import _findIndex from \"lodash/findIndex\";\nimport _find from \"lodash/find\";\nimport _slice from \"lodash/slice\";\nimport BaseFoundation from '../base/foundation';\nimport isElement from '../utils/isElement';\nimport { append, prepend } from '../utils/dom';\nexport default class ItemFoundation extends BaseFoundation {\n constructor() {\n super(...arguments);\n this._cachedSelectedNode = null;\n }\n selectIndex(index, listWrapper) {\n const {\n type,\n list\n } = this.getProps();\n if (index > -1 && Array.isArray(list) && list.length && isElement(listWrapper)) {\n const indexInData = index % list.length;\n const item = list[indexInData];\n const node = listWrapper.children[index];\n this._adapter.setSelectedNode(node);\n this._adapter.notifySelectItem(Object.assign(Object.assign({}, item), {\n value: item.value,\n type,\n index: indexInData\n }));\n }\n }\n selectNode(node, listWrapper) {\n const {\n type,\n list: data\n } = this.getProps();\n if (isElement(node) && isElement(listWrapper)) {\n const indexInList = _findIndex(listWrapper.children, ele => ele === node);\n const indexInData = indexInList % data.length;\n const cachedIndexInList = _findIndex(listWrapper.children, ele => ele === this._cachedSelectedNode);\n const cachedIndexData = cachedIndexInList % data.length;\n const item = data[indexInData];\n this._adapter.setSelectedNode(node);\n this._adapter.scrollToCenter(node);\n // Avoid triggerring notifySelectItem twice,\n // because that scroll event will be trigger\n // when you click to select an item.\n if (this._cachedSelectedNode !== node) {\n this._cachedSelectedNode = node;\n if (cachedIndexData !== indexInData) {\n this._adapter.notifySelectItem(Object.assign(Object.assign({}, item), {\n value: item.value,\n type,\n index: indexInData\n }));\n }\n }\n }\n }\n /**\n *\n * @param {HTMLElement} listWrapper\n * @param {HTMLElement} scrollWrapper\n * @param {number} ratio\n * @returns {boolean}\n */\n shouldAppend(listWrapper, scrollWrapper) {\n let ratio = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 2;\n const tag = 'li';\n if (isElement(listWrapper) && isElement(scrollWrapper)) {\n const itemNodes = listWrapper.querySelectorAll(tag);\n const lastNode = itemNodes[itemNodes.length - 1];\n const {\n list\n } = this.getProps();\n if (lastNode) {\n const scrollRect = scrollWrapper.getBoundingClientRect();\n const lastRect = lastNode.getBoundingClientRect();\n const listHeight = lastRect.height * list.length;\n let baseTop = lastRect.top;\n let count = 0;\n while (baseTop <= scrollRect.top + scrollRect.height * ratio) {\n count += 1;\n baseTop += listHeight;\n }\n return count;\n }\n }\n return false;\n }\n /**\n *\n * @param {HTMLElement} listWrapper\n * @param {HTMLElement} scrollWrapper\n * @param {number} ratio\n *\n * @returns {boolean}\n */\n shouldPrepend(listWrapper, scrollWrapper) {\n let ratio = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 2;\n const tag = 'li';\n if (isElement(listWrapper) && isElement(scrollWrapper)) {\n const itemNodes = listWrapper.querySelectorAll(tag);\n const firstNode = itemNodes[0];\n const {\n list\n } = this.getProps();\n if (firstNode) {\n const scrollRect = scrollWrapper.getBoundingClientRect();\n const firstRect = firstNode.getBoundingClientRect();\n const listHeight = firstRect.height * list.length;\n let baseTop = firstRect.top;\n let count = 0;\n while (baseTop + firstRect.height >= scrollRect.top - scrollRect.height * ratio) {\n count += 1;\n baseTop -= listHeight;\n }\n return count;\n }\n }\n return 0;\n }\n /**\n *\n * @param {HTMLElement} listWrapper\n * @param {HTMLElement} wrapper\n * @param {Function} [callback]\n */\n initWheelList(listWrapper, wrapper, callback) {\n const {\n list\n } = this.getProps();\n if (isElement(wrapper) && isElement(listWrapper) && list && list.length) {\n const allNodes = listWrapper.children;\n const baseNodes = _slice(allNodes, 0, list.length);\n const prependCount = this.shouldPrepend(listWrapper, wrapper);\n const appendCount = this.shouldAppend(listWrapper, wrapper);\n // this._adapter.setPrependCount(prependCount);\n // this._adapter.setAppendCount(appendCount);\n this._adapter.setState({\n prependCount,\n appendCount\n }, callback);\n }\n }\n /**\n *\n * @param {HTMLElement} listWrapper\n * @param {HTMLElement} wrapper\n * @param {HTMLElement} [nearestNode]\n */\n adjustInfiniteList(listWrapper, wrapper, nearestNode) {\n const {\n list\n } = this.getProps();\n const nodeTag = 'li';\n if (isElement(wrapper) && isElement(listWrapper) && list && list.length) {\n const allNodes = listWrapper.querySelectorAll(nodeTag);\n const total = allNodes.length;\n const ratio = 1;\n const prependCount = this.shouldPrepend(listWrapper, wrapper, ratio);\n const appendCount = this.shouldAppend(listWrapper, wrapper, ratio);\n // while (this.shouldPrepend(listWrapper, wrapper, nearestNode)) {\n if (prependCount) {\n // move last nodes to first position\n for (let i = 0; i < prependCount; i++) {\n const nodes = _slice(allNodes, total - list.length * (i + 1), total - list.length * i);\n prepend(listWrapper, ...nodes);\n }\n }\n // while (this.shouldAppend(listWrapper, wrapper, nearestNode)) {\n if (appendCount) {\n for (let i = 0; i < appendCount; i++) {\n const nodes = _slice(allNodes, i * list.length, (i + 1) * list.length);\n append(listWrapper, ...nodes);\n }\n }\n }\n }\n /**\n *\n * @param {HTMLElement} listWrapper\n * @param {HTMLElement} selector\n *\n */\n getNearestNodeInfo(listWrapper, selector) {\n if (isElement(listWrapper) && isElement(selector)) {\n const selectorRect = selector.getBoundingClientRect();\n const selectorTop = selectorRect.top;\n const itemNodes = listWrapper.querySelectorAll('li');\n let nearestNode = null;\n let nearestIndex = -1;\n let nearestDistance = Infinity;\n Array.from(itemNodes).map((node, index) => {\n const rect = node.getBoundingClientRect();\n const rectTop = rect.top;\n const absDistance = Math.abs(rectTop - selectorTop);\n if (absDistance < nearestDistance && !this._adapter.isDisabledIndex(index)) {\n nearestDistance = absDistance;\n nearestNode = node;\n nearestIndex = index;\n }\n });\n return {\n nearestNode,\n nearestIndex\n };\n }\n return undefined;\n }\n /**\n *\n * @param {HTMLElement} listWrapper\n *\n * @param {HTMLElement|null}\n */\n getTargetNode(e, listWrapper) {\n if (e && isElement(listWrapper)) {\n const targetTagName = 'li';\n const currentTarget = e.target;\n const itemNodes = listWrapper.querySelectorAll(targetTagName);\n const list = this.getProp('list');\n const length = Array.isArray(list) ? list.length : 0;\n let targetIndex = -1;\n let indexInList = -1;\n let infoInList = null;\n const targetNode = _find(itemNodes, (node, index) => {\n if (node === currentTarget || node.contains(currentTarget)) {\n targetIndex = index;\n if (length > 0) {\n indexInList = index % length;\n }\n return true;\n }\n return undefined;\n });\n if (indexInList > -1) {\n infoInList = list[indexInList];\n }\n return {\n targetNode,\n targetIndex,\n indexInList,\n infoInList\n };\n }\n return null;\n }\n}","import bezier from 'bezier-easing';\nfunction minMax(val, min, max) {\n return Math.min(Math.max(val, min), max);\n}\nfunction parseEasingParameters(string) {\n const match = /\\(([^)]+)\\)/.exec(string);\n return match ? match[1].split(',').map(p => parseFloat(p)) : [];\n}\n// Elastic easing adapted from jQueryUI http://api.jqueryui.com/easings/\nfunction elastic() {\n let amplitude = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n let period = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.5;\n const a = minMax(amplitude, 1, 10);\n const p = minMax(period, 0.1, 2);\n return t => t === 0 || t === 1 ? t : -a * Math.pow(2, 10 * (t - 1)) * Math.sin((t - 1 - p / (Math.PI * 2) * Math.asin(1 / a)) * (Math.PI * 2) / p);\n}\n// anime.js/src/index.js\nexport const easingMap = (() => {\n const names = ['Quad', 'Cubic', 'Quart', 'Quint', 'Sine', 'Expo', 'Circ', 'Back', 'Elastic'];\n // Approximated Penner equations http://matthewlein.com/ceaser/\n const curves = {\n In: [[0.55, 0.085, 0.68, 0.53] /* inQuad */, [0.55, 0.055, 0.675, 0.19] /* inCubic */, [0.895, 0.03, 0.685, 0.22] /* inQuart */, [0.755, 0.05, 0.855, 0.06] /* inQuint */, [0.47, 0.0, 0.745, 0.715] /* inSine */, [0.95, 0.05, 0.795, 0.035] /* inExpo */, [0.6, 0.04, 0.98, 0.335] /* inCirc */, [0.6, -0.28, 0.735, 0.045] /* inBack */, elastic /* inElastic */],\n Out: [[0.25, 0.46, 0.45, 0.94] /* outQuad */, [0.215, 0.61, 0.355, 1.0] /* outCubic */, [0.165, 0.84, 0.44, 1.0] /* outQuart */, [0.23, 1.0, 0.32, 1.0] /* outQuint */, [0.39, 0.575, 0.565, 1.0] /* outSine */, [0.19, 1.0, 0.22, 1.0] /* outExpo */, [0.075, 0.82, 0.165, 1.0] /* outCirc */, [0.175, 0.885, 0.32, 1.275] /* outBack */, (a, p) => t => 1 - elastic(a, p)(1 - t) /* outElastic */],\n InOut: [[0.455, 0.03, 0.515, 0.955] /* inOutQuad */, [0.645, 0.045, 0.355, 1.0] /* inOutCubic */, [0.77, 0.0, 0.175, 1.0] /* inOutQuart */, [0.86, 0.0, 0.07, 1.0] /* inOutQuint */, [0.445, 0.05, 0.55, 0.95] /* inOutSine */, [1.0, 0.0, 0.0, 1.0] /* inOutExpo */, [0.785, 0.135, 0.15, 0.86] /* inOutCirc */, [0.68, -0.55, 0.265, 1.55] /* inOutBack */, (a, p) => t => t < 0.5 ? elastic(a, p)(t * 2) / 2 : 1 - elastic(a, p)(t * -2 + 2) / 2 /* inOutElastic */]\n };\n const eases = {\n linear: [0.25, 0.25, 0.75, 0.75]\n };\n for (const coords of Object.keys(curves)) {\n curves[coords].forEach((ease, i) => {\n eases['ease' + coords + names[i]] = ease;\n });\n }\n return eases;\n})();\n/**\n * get easing function\n * @param {string|Function} easing\n * @returns {Function}\n */\nexport default function getEasing(easing) {\n if (typeof easing === 'function') {\n return easing;\n }\n if (!easing || typeof easing !== 'string') {\n easing = 'linear';\n } else {\n easing = easing.trim();\n }\n let name = easing.split('(')[0];\n const args = parseEasingParameters(easing);\n let ease;\n if (name === 'cubic-bezier' || name === 'cubicBezier') {\n return bezier(...(args.length ? args : easingMap.linear));\n } else {\n if (!name || typeof name !== 'string' || typeof name === 'string' && easingMap[name] == null) {\n name = 'linear';\n }\n ease = easingMap[name];\n if (typeof ease === 'function') {\n return ease(...args);\n } else if (args.length) {\n return bezier(...args);\n } else {\n return bezier(...ease);\n }\n }\n}","export default class Event {\n constructor() {\n this._eventMap = new Map();\n }\n on(event, callback) {\n if (event && typeof callback === 'function') {\n this._eventMap.has(event) || this._eventMap.set(event, []);\n this._eventMap.get(event).push(callback);\n }\n return this;\n }\n once(event, callback) {\n var _this = this;\n if (event && typeof callback === 'function') {\n const fn = function () {\n callback(...arguments);\n _this.off(event, fn);\n };\n this.on(event, fn);\n }\n }\n off(event, callback) {\n if (event) {\n if (typeof callback === 'function') {\n const callbacks = this._eventMap.get(event);\n if (Array.isArray(callbacks) && callbacks.length) {\n let index = -1;\n while ((index = callbacks.findIndex(cb => cb === callback)) > -1) {\n callbacks.splice(index, 1);\n }\n }\n } else if (callback == null) {\n this._eventMap.delete(event);\n }\n }\n return this;\n }\n emit(event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (!this._eventMap.has(event)) {\n return false;\n }\n this._eventMap.get(event).forEach(callback => callback(...args));\n return true;\n }\n}","export default function shouldUseBezier(config) {\n return Boolean(config && typeof config === 'object' && (config.duration > 0 || typeof config.easing === 'string' || typeof config.easing === 'function'));\n}","export default function stripStyle(style) {\n const ret = {};\n for (const key in style) {\n if (!Object.prototype.hasOwnProperty.call(style, key)) {\n continue;\n }\n ret[key] = typeof style[key] === 'number' ? style[key] : style[key].val;\n }\n return ret;\n}","/**\n * @file\n *\n * react-motion/src/stepper.js\n */\n// stepper is used a lot. Saves allocation to return the same array wrapper.\n// This is fine and danger-free against mutations because the callsite\n// immediately destructures it and gets the numbers inside without passing the\n// array reference around.\nconst reusedTuple = [0, 0];\n/**\n *\n * @param {number} secondPerFrame\n * @param {number} x\n * @param {number} v\n * @param {number} destX\n * @param {number} k\n * @param {number} b\n * @param {number} precision\n */\nexport default function stepper(secondPerFrame, x, v, destX, k, b, precision) {\n // Spring stiffness, in kg / s^2\n // for animations, destX is really spring length (spring at rest). initial\n // position is considered as the stretched/compressed position of a spring\n const Fspring = -k * (x - destX);\n // Damping, in kg / s\n const Fdamper = -b * v;\n // usually we put mass here, but for animation purposes, specifying mass is a\n // bit redundant. you could simply adjust k and b accordingly\n // let a = (Fspring + Fdamper) / mass;\n const a = Fspring + Fdamper;\n const newV = v + a * secondPerFrame;\n const newX = x + newV * secondPerFrame;\n if (Math.abs(newV) < precision && Math.abs(newX - destX) < precision) {\n reusedTuple[0] = destX;\n reusedTuple[1] = 0;\n return reusedTuple;\n }\n reusedTuple[0] = newX;\n reusedTuple[1] = newV;\n return reusedTuple;\n}","/**\n * stiffness is like tension\n * damping is like friction\n */\nexport default {\n default: {\n tension: 170,\n friction: 26\n },\n gentle: {\n tension: 120,\n friction: 14\n },\n wobbly: {\n tension: 180,\n friction: 12\n },\n stiff: {\n tension: 210,\n friction: 20\n },\n slow: {\n tension: 280,\n friction: 60\n },\n molasses: {\n tension: 280,\n friction: 120\n }\n};","import getEasing from './getEasing';\nimport presets from './presets';\nimport shouldUseBezier from './shouldUseBezier';\nconst defaultConfig = Object.assign(Object.assign({}, presets.default), {\n precision: 0.01\n});\nexport default function wrapValue(val) {\n let config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (shouldUseBezier(config)) {\n const easing = getEasing(config.easing);\n const duration = typeof config.duration === 'number' && config.duration > 0 ? config.duration : 1000;\n config = Object.assign(Object.assign({}, config), {\n easing,\n duration\n });\n }\n let wrapped = Object.assign(Object.assign(Object.assign({}, defaultConfig), config), {\n done: false\n });\n if (val && typeof val === 'object' && 'val' in val) {\n if (shouldUseBezier(val)) {\n const easing = getEasing(val.easing);\n const duration = typeof val.duration === 'number' && val.duration > 0 ? val.duration : parseInt(config.duration) || 1000;\n val = Object.assign(Object.assign({}, val), {\n easing,\n duration\n });\n }\n wrapped = Object.assign(Object.assign({}, wrapped), val);\n } else {\n wrapped = Object.assign(Object.assign({}, wrapped), {\n val\n });\n }\n return wrapped;\n}","import Event from './utils/Event';\nimport shouldStopAnimation from './shouldStopAnimation';\nimport shouldUseBezier from './shouldUseBezier';\nimport stripStyle from './stripStyle';\nimport stepper from './stepper';\nimport mapToZero from './mapToZero';\nimport wrapValue from './wrapValue';\nconst now = () => Date.now();\nconst msPerFrame = 1000 / 60;\n/**\n * @summary\n *\n * Lifecycle hook:\n * start, pause, resume, stop, frame, rest\n *\n * Binding method:\n * const animation = new Animation (); animation.on ('start | frame | rest ', () => {});\n */\nexport default class Animation extends Event {\n constructor() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super();\n this._props = Object.assign({}, props);\n this._config = Object.assign({}, config);\n this.initStates();\n }\n _wrapConfig(object, config) {\n config = config && typeof config === 'object' ? config : this._config;\n const ret = {};\n for (const key of Object.keys(object)) {\n ret[key] = wrapValue(object[key], config);\n }\n return ret;\n }\n initStates(props, config) {\n props = props && typeof props === 'object' ? props : this._props;\n config = config && typeof config === 'object' ? config : this._config;\n const {\n from,\n to\n } = props;\n this._from = {};\n if (from && typeof from) {\n for (const key of Object.keys(from)) {\n this._from[key] = typeof from[key] === 'object' && from[key].val ? from[key].val : from[key];\n }\n }\n this._to = this._wrapConfig(to, config);\n this._delay = parseInt(config.delay) || 0;\n const currentStyle = this._from && stripStyle(this._from) || stripStyle(this._to);\n const currentVelocity = mapToZero(currentStyle);\n this._currentStyle = Object.assign({}, currentStyle);\n this._currentVelocity = Object.assign({}, currentVelocity);\n this._lastIdealStyle = Object.assign({}, currentStyle);\n this._lastIdealVelocity = Object.assign({}, currentVelocity);\n this.resetPlayStates();\n this._frameCount = 0;\n this._prevTime = 0;\n }\n animate() {\n if (this._timer != null) {\n return;\n }\n this._timer = requestAnimationFrame(timestamp => {\n const nowTime = now();\n // stop animation and emit onRest event\n if (shouldStopAnimation(this._currentStyle, this._to, this._currentVelocity, this._startedTime || nowTime, nowTime) || this._ended || this._stopped) {\n if (this._wasAnimating && !this._ended && !this._stopped) {\n // should emit reset in settimeout for delay msPerframe\n this._timer = setTimeout(() => {\n clearTimeout(this._timer);\n this._timer = null;\n this._ended = true;\n this.emit('rest', this.getCurrentStates());\n }, msPerFrame);\n }\n this.resetPlayStates();\n return;\n }\n if (!this._started) {\n this._started = true;\n this.emit('start', this.getCurrentStates());\n }\n this._stopped = false;\n this._paused = false;\n this._wasAnimating = true;\n if (this._startedTime === 0) {\n this._startedTime = nowTime;\n }\n const currentTime = nowTime;\n const timeDelta = currentTime - this._prevTime;\n this._prevTime = currentTime;\n if (currentTime - this._startedTime < this._delay) {\n this._timer = null;\n this.animate();\n }\n const newLastIdealStyle = {};\n const newLastIdealVelocity = {};\n const newCurrentStyle = {};\n const newCurrentVelocity = {};\n const toKeys = this._to && Object.keys(this._to) || [];\n for (const key of toKeys) {\n const styleValue = this._to[key];\n this._accumulatedTime[key] = typeof this._accumulatedTime[key] !== 'number' ? timeDelta : this._accumulatedTime[key] + timeDelta;\n const from = this._from[key] != null && typeof this._from[key] === 'object' ? this._from[key].val : this._from[key];\n const to = styleValue.val;\n if (typeof styleValue === 'number') {\n newCurrentStyle[key] = styleValue;\n newCurrentVelocity[key] = 0;\n newLastIdealStyle[key] = styleValue;\n newLastIdealVelocity[key] = 0;\n } else {\n let newLastIdealStyleValue = this._lastIdealStyle[key];\n let newLastIdealVelocityValue = this._lastIdealVelocity[key];\n if (shouldUseBezier(this._config) || shouldUseBezier(styleValue)) {\n // easing\n const {\n easing,\n duration\n } = styleValue;\n newLastIdealStyleValue = from + easing((currentTime - this._startedTime) / duration) * (to - from);\n if (currentTime >= this._startedTime + duration) {\n newLastIdealStyleValue = to;\n styleValue.done = true;\n }\n newLastIdealStyle[key] = newLastIdealStyleValue;\n newCurrentStyle[key] = newLastIdealStyleValue;\n } else if (to != null && to === this._currentStyle[key]) {\n newCurrentStyle[key] = to;\n newCurrentVelocity[key] = 0;\n newLastIdealStyle[key] = to;\n newLastIdealVelocity[key] = 0;\n } else {\n // spring\n const currentFrameCompletion = (this._accumulatedTime[key] - Math.floor(this._accumulatedTime[key] / msPerFrame) * msPerFrame) / msPerFrame;\n const framesToCatchUp = Math.floor(this._accumulatedTime[key] / msPerFrame);\n for (let i = 0; i < framesToCatchUp; i++) {\n [newLastIdealStyleValue, newLastIdealVelocityValue] = stepper(msPerFrame / 1000, newLastIdealStyleValue, newLastIdealVelocityValue, styleValue.val, styleValue.tension, styleValue.friction, styleValue.precision);\n }\n const [nextIdealX, nextIdealV] = stepper(msPerFrame / 1000, newLastIdealStyleValue, newLastIdealVelocityValue, styleValue.val, styleValue.tension, styleValue.friction, styleValue.precision);\n newCurrentStyle[key] = newLastIdealStyleValue + (nextIdealX - newLastIdealStyleValue) * currentFrameCompletion;\n newCurrentVelocity[key] = newLastIdealVelocityValue + (nextIdealV - newLastIdealVelocityValue) * currentFrameCompletion;\n newLastIdealStyle[key] = newLastIdealStyleValue;\n newLastIdealVelocity[key] = newLastIdealVelocityValue;\n this._accumulatedTime[key] -= framesToCatchUp * msPerFrame;\n }\n }\n }\n this._timer = null;\n this._currentStyle = Object.assign({}, newCurrentStyle);\n this._currentVelocity = Object.assign({}, newCurrentVelocity);\n this._lastIdealStyle = Object.assign({}, newLastIdealStyle);\n this._lastIdealVelocity = Object.assign({}, newLastIdealVelocity);\n // console.log(newCurrentStyle);\n if (!this._destroyed) {\n this.emit('frame', this.getCurrentStates());\n this.animate();\n }\n });\n }\n start() {\n this._prevTime = now();\n this._startedTime = now();\n this.animate();\n }\n end() {\n if (!this._ended) {\n this._ended = true;\n this._currentStyle = this.getFinalStates();\n this.emit('frame', this.getFinalStates());\n this.emit('rest', this.getFinalStates());\n }\n this.destroy();\n }\n pause() {\n if (!this._paused) {\n this._pausedTime = now();\n this._paused = true;\n this.emit('pause', this.getCurrentStates());\n this.destroy();\n this._destroyed = false;\n }\n }\n resume() {\n if (this._started && this._paused) {\n const nowTime = now();\n const pausedDuration = nowTime - this._pausedTime;\n this._paused = false;\n // should add with pausedDuration\n this._startedTime += pausedDuration;\n this._prevTime += pausedDuration;\n this._pausedTime = 0;\n this.emit('resume', this.getCurrentStates());\n this.animate();\n }\n }\n stop() {\n this.destroy();\n if (!this._stopped) {\n this._stopped = true;\n // this.emit('frame', this.getInitialStates());\n this.emit('stop', this.getInitialStates());\n this.initStates();\n }\n }\n destroy() {\n cancelAnimationFrame(this._timer);\n clearTimeout(this._timer);\n this._timer = null;\n this._destroyed = true;\n }\n resetPlayStates() {\n this._started = false;\n this._stopped = false;\n this._ended = false;\n this._paused = false;\n this._destroyed = false;\n this._timer = null;\n this._wasAnimating = false;\n this._accumulatedTime = {};\n this._startedTime = 0;\n this._pausedTime = 0;\n }\n reset() {\n this.destroy();\n this.initStates();\n }\n reverse() {\n this.destroy();\n const props = Object.assign({}, this._props);\n const [from, to] = [props.to, props.from];\n props.from = from;\n props.to = to;\n this._props = Object.assign({}, props);\n this.initStates();\n }\n getCurrentStates() {\n return Object.assign({}, this._currentStyle);\n }\n getInitialStates() {\n return Object.assign({}, stripStyle(this._props.from));\n }\n getFinalStates() {\n return Object.assign({}, stripStyle(this._props.to));\n }\n}","// currently used to initiate the velocity style object to 0\nexport default function mapToZero(obj) {\n const ret = {};\n const objKeys = obj && Object.keys(obj) || [];\n for (const key of objKeys) {\n ret[key] = 0;\n }\n return ret;\n}","import shouldUseBezier from './shouldUseBezier';\n/**\n * usage assumption: currentStyle values have already been rendered but it says\n * nothing of whether currentStyle is stale (see unreadPropStyle)\n *\n * @param {object} currentStyle\n * @param {object} style\n * @param {object} currentVelocity\n * @param {number} startTime\n * @param {number} nowTime\n *\n * @returns {boolean}\n */\nexport default function shouldStopAnimation(currentStyle, style, currentVelocity, startTime, nowTime) {\n for (const key of Object.keys(style)) {\n const styleValue = style[key];\n const value = typeof styleValue === 'number' ? styleValue : styleValue.val;\n if (typeof styleValue === 'object' && styleValue.done) {\n continue;\n }\n if (shouldUseBezier(styleValue) && startTime && nowTime && styleValue.duration) {\n if (styleValue.duration + startTime <= nowTime || value !== currentStyle[key]) {\n return false;\n }\n } else if (typeof currentVelocity[key] === 'number' && currentVelocity[key] !== 0) {\n return false;\n }\n // stepper will have already taken care of rounding precision errors, so\n // won't have such thing as 0.9999 !=== 1\n if (currentStyle[key] !== value) {\n return false;\n }\n }\n return true;\n}","import { Animation } from '@douyinfe/semi-animation';\nconst scrollTo = (element, to, duration) => {\n const animation = new Animation({\n from: {\n scrollTop: element.scrollTop\n },\n to: {\n scrollTop: to\n }\n }, {\n duration\n });\n animation.on('frame', _ref => {\n let {\n scrollTop\n } = _ref;\n element.scrollTop = scrollTop;\n });\n // animation.start();\n return animation;\n};\nexport default scrollTo;","import _times from \"lodash/times\";\nimport _findIndex from \"lodash/findIndex\";\nimport _map from \"lodash/map\";\nimport _find from \"lodash/find\";\nimport _throttle from \"lodash/throttle\";\nimport _debounce from \"lodash/debounce\";\nimport _noop from \"lodash/noop\";\nimport React from 'react';\nimport BaseComponent from '../_base/baseComponent';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { cssClasses, numbers, strings } from '@douyinfe/semi-foundation/lib/es/scrollList/constants';\nimport ItemFoundation from '@douyinfe/semi-foundation/lib/es/scrollList/itemFoundation';\nimport animatedScrollTo from '@douyinfe/semi-foundation/lib/es/scrollList/scrollTo';\nimport isElement from '@douyinfe/semi-foundation/lib/es/utils/isElement';\nconst msPerFrame = 1000 / 60;\nconst blankReg = /^\\s*$/;\nconst wheelMode = 'wheel';\nexport default class ScrollItem extends BaseComponent {\n constructor() {\n var _this;\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n super(props);\n _this = this;\n this._cacheNode = (name, node) => name && node && Object.prototype.hasOwnProperty.call(this, name) && (this[name] = node);\n this._cacheSelectedNode = selectedNode => this._cacheNode('selectedNode', selectedNode);\n this._cacheWillSelectNode = node => this._cacheNode('willSelectNode', node);\n this._cacheListNode = list => this._cacheNode('list', list);\n this._cacheSelectorNode = selector => this._cacheNode('selector', selector);\n this._cacheWrapperNode = wrapper => this._cacheNode('wrapper', wrapper);\n /* istanbul ignore next */\n this._isFirst = node => {\n const {\n list\n } = this;\n if (isElement(node) && isElement(list)) {\n const chilren = list.children;\n const index = _findIndex(chilren, node);\n return index === 0;\n }\n return false;\n };\n /* istanbul ignore next */\n this._isLast = node => {\n const {\n list\n } = this;\n if (isElement(node) && isElement(list)) {\n const {\n children\n } = list;\n const index = _findIndex(children, node);\n return index === children.length - 1;\n }\n return false;\n };\n this.indexIsSame = (index1, index2) => {\n const {\n list\n } = this.props;\n if (list.length) {\n return index1 % list.length === index2 % list.length;\n }\n return undefined;\n };\n this.isDisabledIndex = index => {\n const {\n list\n } = this.props;\n if (Array.isArray(list) && list.length && index > -1) {\n const size = list.length;\n const indexInData = index % size;\n return this.isDisabledData(list[indexInData]);\n }\n return false;\n };\n this.isDisabledNode = node => {\n const listWrapper = this.list;\n if (isElement(node) && isElement(listWrapper)) {\n const index = _findIndex(listWrapper.children, child => child === node);\n return this.isDisabledIndex(index);\n }\n return false;\n };\n this.isDisabledData = data => data && typeof data === 'object' && data.disabled;\n this.isWheelMode = () => this.props.mode === wheelMode;\n this.addClassToNode = function (selectedNode) {\n let selectedCls = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : cssClasses.SELECTED;\n const {\n list\n } = _this;\n selectedNode = selectedNode || _this.selectedNode;\n if (isElement(selectedNode) && isElement(list)) {\n const {\n children\n } = list;\n const reg = new RegExp(`\\\\s*${selectedCls}\\\\s*`, 'g');\n _map(children, node => {\n node.className = node.className && node.className.replace(reg, ' ');\n if (blankReg.test(node.className)) {\n node.className = '';\n }\n });\n if (selectedNode.className && !blankReg.test(selectedNode.className)) {\n selectedNode.className += ` ${selectedCls}`;\n } else {\n selectedNode.className = selectedCls;\n }\n }\n };\n this.getIndexByNode = node => _findIndex(this.list.children, node);\n this.getNodeByIndex = index => {\n if (index > -1) {\n return _find(this.list.children, (node, idx) => idx === index);\n }\n const defaultSelectedNode = _find(this.list.children, child => !this.isDisabledNode(child));\n return defaultSelectedNode;\n };\n this.scrollToIndex = (selectedIndex, duration) => {\n // move to selected item\n duration = typeof duration === 'number' ? duration : numbers.DEFAULT_SCROLL_DURATION;\n selectedIndex = selectedIndex == null ? this.props.selectedIndex : selectedIndex;\n // this.isWheelMode() && this.addClassToNode();\n this.scrollToNode(this.selectedNode, duration);\n };\n this.scrollToNode = (node, duration) => {\n const {\n wrapper\n } = this;\n const wrapperHeight = wrapper.offsetHeight;\n const itemHeight = this.getItmHeight(node);\n const targetTop = (node.offsetTop || this.list.children.length * itemHeight / 2) - (wrapperHeight - itemHeight) / 2;\n this.scrollToPos(targetTop, duration);\n };\n this.scrollToPos = function (targetTop) {\n let duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : numbers.DEFAULT_SCROLL_DURATION;\n const {\n wrapper\n } = _this;\n // this.isWheelMode() && this.addClassToNode();\n if (duration && _this.props.motion) {\n if (_this.scrollAnimation) {\n _this.scrollAnimation.destroy();\n _this.scrolling = false;\n }\n if (wrapper.scrollTop === targetTop) {\n if (_this.isWheelMode()) {\n const nodeInfo = _this.foundation.getNearestNodeInfo(_this.list, _this.selector);\n _this.addClassToNode(nodeInfo.nearestNode);\n }\n } else {\n _this.scrollAnimation = animatedScrollTo(wrapper, targetTop, duration);\n _this.scrollAnimation.on('rest', () => {\n if (_this.isWheelMode()) {\n const nodeInfo = _this.foundation.getNearestNodeInfo(_this.list, _this.selector);\n _this.addClassToNode(nodeInfo.nearestNode);\n }\n });\n _this.scrollAnimation.start();\n }\n } else {\n wrapper.scrollTop = targetTop;\n }\n };\n this.scrollToSelectItem = e => {\n const {\n nearestNode\n } = this.foundation.getNearestNodeInfo(this.list, this.selector);\n if (this.props.cycled) {\n this.throttledAdjustList(e, nearestNode);\n }\n this.debouncedSelect(e, nearestNode);\n };\n /**\n *\n * reset position to center of the scrollWrapper\n *\n * @param {HTMLElement} selectedNode\n * @param {HTMLElement} scrollWnumber\n * @param {number} duration\n */\n this.scrollToCenter = (selectedNode, scrollWrapper, duration) => {\n selectedNode = selectedNode || this.selectedNode;\n scrollWrapper = scrollWrapper || this.wrapper;\n if (isElement(selectedNode) && isElement(scrollWrapper)) {\n const scrollRect = scrollWrapper.getBoundingClientRect();\n const selectedRect = selectedNode.getBoundingClientRect();\n const targetTop = scrollWrapper.scrollTop + (selectedRect.top - (scrollRect.top + scrollRect.height / 2 - selectedRect.height / 2));\n this.scrollToPos(targetTop, typeof duration === 'number' ? duration : numbers.DEFAULT_SCROLL_DURATION);\n }\n };\n this.clickToSelectItem = e => {\n // const index = this.foundation.selectNearestIndex(e.nativeEvent, this.list);\n e && e.nativeEvent && e.nativeEvent.stopImmediatePropagation();\n const {\n targetNode: node,\n infoInList\n } = this.foundation.getTargetNode(e, this.list);\n if (node && infoInList && !infoInList.disabled) {\n this.debouncedSelect(null, node);\n }\n };\n this.getItmHeight = itm => itm && itm.offsetHeight || numbers.DEFAULT_ITEM_HEIGHT;\n this.renderItemList = function () {\n let prefixKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n const {\n selectedIndex,\n mode,\n transform: commonTrans,\n list\n } = _this.props;\n return list.map((item, index) => {\n const {\n transform: itemTrans\n } = item;\n const transform = typeof itemTrans === 'function' ? itemTrans : commonTrans;\n const selected = selectedIndex === index;\n const cls = classnames({\n [`${cssClasses.PREFIX}-item-sel`]: selected && mode !== wheelMode,\n [`${cssClasses.PREFIX}-item-disabled`]: Boolean(item.disabled)\n });\n let text = '';\n if (selected) {\n if (typeof transform === 'function') {\n text = transform(item.value, item.text);\n } else {\n text = item.text == null ? item.value : item.text;\n }\n } else {\n text = item.text == null ? item.value : item.text;\n }\n const events = {};\n if (!_this.isWheelMode() && !item.disabled) {\n events.onClick = () => _this.foundation.selectIndex(index, _this.list);\n }\n return (\n /*#__PURE__*/\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n React.createElement(\"li\", Object.assign({\n key: prefixKey + index\n }, events, {\n className: cls,\n role: \"option\",\n \"aria-selected\": selected,\n \"aria-disabled\": item.disabled\n }), text)\n );\n });\n };\n this.renderNormalList = () => {\n const {\n list,\n className,\n style\n } = this.props;\n const inner = this.renderItemList();\n const wrapperCls = classnames(`${cssClasses.PREFIX}-item`, className);\n return /*#__PURE__*/React.createElement(\"div\", {\n style: style,\n className: wrapperCls,\n ref: this._cacheWrapperNode\n }, /*#__PURE__*/React.createElement(\"ul\", {\n role: \"listbox\",\n \"aria-multiselectable\": false,\n \"aria-label\": this.props['aria-label'],\n ref: this._cacheListNode\n }, inner));\n };\n /**\n * List of Rendering Unlimited Modes\n */\n this.renderInfiniteList = () => {\n const {\n list,\n cycled,\n className,\n style\n } = this.props;\n const {\n prependCount,\n appendCount\n } = this.state;\n const prependList = _times(prependCount).reduce((arr, num) => {\n const items = this.renderItemList(`pre_${num}_`);\n arr.unshift(...items);\n return arr;\n }, []);\n const appendList = _times(appendCount).reduce((arr, num) => {\n const items = this.renderItemList(`app_${num}_`);\n arr.push(...items);\n return arr;\n }, []);\n const inner = this.renderItemList();\n const listWrapperCls = classnames(`${cssClasses.PREFIX}-list-outer`, {\n [`${cssClasses.PREFIX}-list-outer-nocycle`]: !cycled\n });\n const wrapperCls = classnames(`${cssClasses.PREFIX}-item-wheel`, className);\n const selectorCls = classnames(`${cssClasses.PREFIX}-selector`);\n const preShadeCls = classnames(`${cssClasses.PREFIX}-shade`, `${cssClasses.PREFIX}-shade-pre`);\n const postShadeCls = classnames(`${cssClasses.PREFIX}-shade`, `${cssClasses.PREFIX}-shade-post`);\n return /*#__PURE__*/React.createElement(\"div\", {\n className: wrapperCls,\n style: style\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: preShadeCls\n }), /*#__PURE__*/React.createElement(\"div\", {\n className: selectorCls,\n ref: this._cacheSelectorNode\n }), /*#__PURE__*/React.createElement(\"div\", {\n className: postShadeCls\n }), /*#__PURE__*/React.createElement(\"div\", {\n className: listWrapperCls,\n ref: this._cacheWrapperNode,\n onScroll: this.scrollToSelectItem\n }, /*#__PURE__*/React.createElement(\"ul\", {\n role: \"listbox\",\n \"aria-label\": this.props['aria-label'],\n \"aria-multiselectable\": false,\n ref: this._cacheListNode,\n onClick: this.clickToSelectItem\n }, prependList, inner, appendList)));\n };\n this.state = {\n prependCount: 0,\n appendCount: 0\n // selectedIndex: props.selectedIndex,\n // fakeSelectedIndex: props.selectedIndex,\n };\n this.selectedNode = null;\n this.willSelectNode = null;\n this.list = null;\n this.wrapper = null;\n this.selector = null;\n this.scrollAnimation = null;\n // cache if select action comes from outside\n this.foundation = new ItemFoundation(this.adapter);\n this.throttledAdjustList = _throttle((e, nearestNode) => {\n this.foundation.adjustInfiniteList(this.list, this.wrapper, nearestNode);\n }, msPerFrame);\n this.debouncedSelect = _debounce((e, nearestNode) => {\n this._cacheSelectedNode(nearestNode);\n this.foundation.selectNode(nearestNode, this.list);\n }, msPerFrame * 2);\n }\n get adapter() {\n var _this2 = this;\n return Object.assign(Object.assign({}, super.adapter), {\n setState: (states, callback) => this.setState(Object.assign({}, states), callback),\n setPrependCount: prependCount => this.setState({\n prependCount\n }),\n setAppendCount: appendCount => this.setState({\n appendCount\n }),\n isDisabledIndex: this.isDisabledIndex,\n setSelectedNode: selectedNode => this._cacheWillSelectNode(selectedNode),\n notifySelectItem: function () {\n return _this2.props.onSelect(...arguments);\n },\n scrollToCenter: this.scrollToCenter\n });\n }\n componentWillUnmount() {\n if (this.props.cycled) {\n this.throttledAdjustList.cancel();\n this.debouncedSelect.cancel();\n }\n }\n componentDidMount() {\n this.foundation.init();\n const {\n mode,\n cycled,\n selectedIndex,\n list\n } = this.props;\n const selectedNode = this.getNodeByIndex(typeof selectedIndex === 'number' && selectedIndex > -1 ? selectedIndex : 0);\n this._cacheSelectedNode(selectedNode);\n this._cacheWillSelectNode(selectedNode);\n if (mode === wheelMode && cycled) {\n this.foundation.initWheelList(this.list, this.wrapper, () => {\n // we have to scroll in next tick\n // setTimeout(() => {\n this.scrollToNode(selectedNode, 0);\n // });\n });\n } else {\n this.scrollToNode(selectedNode, 0);\n }\n }\n componentDidUpdate(prevProps) {\n const {\n selectedIndex\n } = this.props;\n // smooth scroll to selected option\n if (prevProps.selectedIndex !== selectedIndex) {\n const willSelectIndex = this.getIndexByNode(this.willSelectNode);\n if (!this.indexIsSame(willSelectIndex, selectedIndex)) {\n const newSelectedNode = this.getNodeByOffset(this.selectedNode, selectedIndex - prevProps.selectedIndex, this.list);\n this._cacheWillSelectNode(newSelectedNode);\n }\n this._cacheSelectedNode(this.willSelectNode);\n this.scrollToIndex(selectedIndex);\n }\n }\n /**\n *\n * @param {HTMLElement} refNode\n * @param {number} offset\n * @param {HTMLElement} listWrapper\n *\n * @returns {HTMLElement}\n */\n getNodeByOffset(refNode, offset, listWrapper) {\n const {\n list\n } = this.props;\n if (isElement(refNode) && isElement(listWrapper) && typeof offset === 'number' && Array.isArray(list) && list.length) {\n offset = offset % list.length;\n const refIndex = this.getIndexByNode(refNode);\n let targetIndex = refIndex + offset;\n while (targetIndex < 0) {\n targetIndex += list.length;\n }\n if (offset) {\n return this.getNodeByIndex(targetIndex);\n }\n }\n return refNode;\n }\n render() {\n return this.isWheelMode() ? this.renderInfiniteList() : this.renderNormalList();\n }\n}\nScrollItem.propTypes = {\n mode: PropTypes.oneOf(strings.MODE),\n cycled: PropTypes.bool,\n list: PropTypes.array,\n selectedIndex: PropTypes.number,\n onSelect: PropTypes.func,\n transform: PropTypes.func,\n className: PropTypes.string,\n style: PropTypes.object,\n motion: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n type: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n};\nScrollItem.defaultProps = {\n selectedIndex: 0,\n motion: true,\n // transform: identity,\n list: [],\n onSelect: _noop,\n cycled: false,\n mode: wheelMode\n};","import BaseFoundation from '../base/foundation';\nexport default class ScrollListFoundation extends BaseFoundation {}","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport BaseComponent from '../_base/baseComponent';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/scrollList/constants';\nimport classnames from 'classnames';\nimport propTypes from 'prop-types';\nimport ScrollItem from './scrollItem';\nimport Foundation from '@douyinfe/semi-foundation/lib/es/scrollList/foundation';\nimport '@douyinfe/semi-foundation/lib/es/scrollList/scrollList.css';\n// eslint-disable-next-line @typescript-eslint/ban-types\nclass ScrollList extends BaseComponent {\n constructor(props) {\n super(props);\n this.foundation = new Foundation(this.adapter);\n }\n render() {\n const _a = this.props,\n {\n children,\n header,\n footer,\n prefixCls,\n bodyHeight,\n className,\n style\n } = _a,\n rest = __rest(_a, [\"children\", \"header\", \"footer\", \"prefixCls\", \"bodyHeight\", \"className\", \"style\"]);\n const clsWrapper = classnames(className, {\n [prefixCls || cssClasses.PREFIX]: true\n });\n const clsHeader = classnames({\n [`${prefixCls || cssClasses.PREFIX}-header`]: true\n });\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n className: clsWrapper,\n style: style\n }, this.getDataAttr(rest)), header ? (/*#__PURE__*/React.createElement(\"div\", {\n className: clsHeader\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: `${clsHeader}-title`,\n \"x-semi-prop\": this.props['x-semi-header-alias'] || \"header\"\n }, header), /*#__PURE__*/React.createElement(\"div\", {\n className: `${clsWrapper}-line`\n }))) : null, /*#__PURE__*/React.createElement(\"div\", {\n className: `${clsWrapper}-body`,\n style: {\n height: bodyHeight ? bodyHeight : ''\n },\n \"x-semi-prop\": \"children\"\n }, children), footer ? (/*#__PURE__*/React.createElement(\"div\", {\n className: `${clsWrapper}-footer`,\n \"x-semi-prop\": this.props['x-semi-footer-alias'] || \"footer\"\n }, footer)) : null);\n }\n}\nScrollList.Item = ScrollItem;\nScrollList.propTypes = {\n className: propTypes.string,\n header: propTypes.node,\n footer: propTypes.node,\n children: propTypes.node,\n bodyHeight: propTypes.oneOfType([propTypes.number, propTypes.string])\n};\nexport default ScrollList;","import { strings } from './constants';\nimport BaseFoundation from '../base/foundation';\nimport { isValidDate } from '../datePicker/_utils/index';\nimport isNullOrUndefined from '../utils/isNullOrUndefined';\nconst HOUR = 1000 * 60 * 60;\nconst DAY = 24 * HOUR;\n// TODO: move to utils\nexport const formatOption = (option, disabledOptions) => {\n let value = `${option}`;\n if (option < 10) {\n value = `0${option}`;\n }\n let disabled = false;\n if (disabledOptions && disabledOptions.indexOf(option) >= 0) {\n disabled = true;\n }\n return {\n value,\n disabled\n };\n};\nfunction generateOptions(length, disabledOptions, hideDisabledOptions) {\n let step = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;\n const arr = [];\n for (let value = 0; value < length; value += step) {\n if (!disabledOptions || disabledOptions.indexOf(value) < 0 || !hideDisabledOptions) {\n arr.push(value);\n }\n }\n return arr;\n}\nclass ComboboxFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n }\n isAM() {\n return this.getProp('isAM');\n }\n initData() {\n const {\n timeStampValue,\n hourStep,\n disabledMinutes,\n disabledSeconds,\n hideDisabledOptions,\n minuteStep,\n secondStep\n } = this.getProps();\n const format = this.getValidFormat();\n const dateTime = this.getDisplayDateFromTimeStamp(timeStampValue);\n const disabledHourOptions = this.disabledHours();\n const disabledMinuteOptions = disabledMinutes(dateTime ? dateTime.getHours() : null);\n const disabledSecondOptions = disabledSeconds(dateTime ? dateTime.getHours() : null, dateTime ? dateTime.getMinutes() : null);\n const hourOptions = generateOptions(24, disabledHourOptions, hideDisabledOptions, hourStep);\n const minuteOptions = generateOptions(60, disabledMinuteOptions, hideDisabledOptions, minuteStep);\n const secondOptions = generateOptions(60, disabledSecondOptions, hideDisabledOptions, secondStep);\n return {\n showHour: Boolean(format.match(/HH|hh|H|h/g)),\n showMinute: Boolean(format.match(/mm/g)),\n showSecond: Boolean(format.match(/ss/g)),\n hourOptions,\n minuteOptions,\n secondOptions\n };\n }\n getPosition() {\n const position = this.getProp('position');\n const type = this.getProp('type') || strings.DEFAULT_TYPE;\n return position || strings.DEFAULT_POSITION[type];\n }\n getDefaultFormatIfNeed() {\n if (this._isInProps('format')) {\n return this.getProp('format');\n } else if (this.getProp('use12Hours')) {\n return strings.DEFAULT_FORMAT_A;\n } else {\n return strings.DEFAULT_FORMAT;\n }\n }\n disabledHours() {\n const {\n use12Hours,\n disabledHours\n } = this.getProps();\n let disabledOptions = disabledHours && disabledHours();\n if (use12Hours && Array.isArray(disabledOptions)) {\n if (this.isAM()) {\n disabledOptions = disabledOptions.filter(h => h < 12).map(h => h === 0 ? 12 : h);\n } else {\n disabledOptions = disabledOptions.map(h => h === 12 ? 12 : h - 12);\n }\n }\n return disabledOptions;\n }\n getValidFormat(format) {\n let _format = isNullOrUndefined(format) ? this.getProp('format') : format;\n _format = this.getDefaultFormatIfNeed();\n _format = typeof _format === 'string' ? _format : strings.DEFAULT_FORMAT;\n // if (use12Hours) {\n // format = format.replace(/H/g, 'h');\n // if (!/(\\s+)a/i.test(format)) {\n // format += ' a';\n // } else {\n // format = format.replace(/(\\s+)A/i, '$1a');\n // }\n // }\n return _format;\n }\n /**\n * from 13-bit timestamp -> get display date\n * by combobox use\n */\n getDisplayDateFromTimeStamp(timeStamp) {\n let date;\n if (timeStamp) {\n date = new Date(timeStamp);\n }\n if (!timeStamp || !isValidDate(date)) {\n return this.createDateDefault();\n }\n return date;\n }\n /**\n * create a date at 00:00:00\n */\n createDateDefault() {\n return new Date(parseInt(String(Date.now() / DAY), 10) * DAY - 8 * HOUR);\n }\n}\nexport default ComboboxFoundation;","import _noop from \"lodash/noop\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { format as dateFnsFormat } from 'date-fns';\nimport BaseComponent from '../_base/baseComponent';\nimport { strings } from '@douyinfe/semi-foundation/lib/es/timePicker/constants';\nimport ScrollList from '../scrollList/index';\nimport ScrollItem from '../scrollList/scrollItem';\nimport ComboboxFoundation, { formatOption } from '@douyinfe/semi-foundation/lib/es/timePicker/ComboxFoundation';\nimport LocaleConsumer from '../locale/localeConsumer';\nclass Combobox extends BaseComponent {\n constructor(props) {\n super(props);\n this.cacheRefCurrent = (key, current) => {\n if (key && typeof key === 'string') {\n this.adapter.setCache(key, current);\n }\n };\n this.reselect = () => {\n const currentKeys = ['ampm', 'hour', 'minute', 'second'];\n currentKeys.forEach(key => {\n const current = this.adapter.getCache(key);\n if (current && current.scrollToIndex) {\n current.scrollToIndex();\n }\n });\n };\n this.onItemChange = _ref => {\n let {\n type,\n value,\n disabled\n } = _ref;\n let {\n onChange,\n use12Hours,\n isAM,\n format,\n timeStampValue\n } = this.props;\n const transformValue = this.foundation.getDisplayDateFromTimeStamp(timeStampValue);\n // TODO: foundation\n if (type === 'hour') {\n if (use12Hours) {\n if (isAM) {\n transformValue.setHours(Number(value) % 12);\n } else {\n transformValue.setHours(Number(value) % 12 + 12);\n }\n } else {\n transformValue.setHours(Number(value));\n }\n } else if (type === 'minute') {\n transformValue.setMinutes(Number(value));\n } else if (type === 'ampm') {\n const ampm = value.toUpperCase();\n if (use12Hours) {\n if (ampm === 'PM') {\n isAM = false;\n transformValue.getHours() < 12 && transformValue.setHours(transformValue.getHours() % 12 + 12);\n }\n if (ampm === 'AM') {\n isAM = true;\n transformValue.getHours() >= 12 && transformValue.setHours(transformValue.getHours() - 12);\n }\n }\n } else {\n transformValue.setSeconds(Number(value));\n }\n onChange && onChange({\n isAM,\n value: dateFnsFormat(transformValue, format && format.replace(/(\\s+)A/g, '$1a')),\n timeStampValue: Number(transformValue)\n });\n };\n this.onEnterSelectPanel = range => {\n const {\n onCurrentSelectPanelChange\n } = this.props;\n onCurrentSelectPanelChange(range);\n };\n this.getDisplayDateFromTimeStamp = timeStampValue => this.foundation.getDisplayDateFromTimeStamp(timeStampValue);\n this.foundation = new ComboboxFoundation(this.adapter);\n this.state = Object.assign({}, this.foundation.initData());\n }\n componentDidUpdate(prevProps, prevState) {\n if (prevProps.timeStampValue !== this.props.timeStampValue || prevProps.format !== this.props.format) {\n this.setState(Object.assign({}, this.foundation.initData()));\n }\n }\n componentWillUnmount() {\n // this.foundation.destroy();\n }\n componentDidMount() {\n // this.foundation.init();\n }\n renderHourSelect(hour, locale) {\n const {\n prefixCls,\n disabledHours,\n use12Hours,\n scrollItemProps\n } = this.props;\n const {\n showHour,\n hourOptions\n } = this.state;\n if (!showHour) {\n return null;\n }\n const disabledOptions = disabledHours();\n let hourOptionsAdj, hourAdj;\n if (use12Hours) {\n hourOptionsAdj = [12].concat(hourOptions.filter(h => h < 12 && h > 0));\n hourAdj = hour % 12 || 12;\n } else {\n hourOptionsAdj = hourOptions;\n hourAdj = hour;\n }\n const transformHour = value => value + locale.hour;\n const className = `${prefixCls}-list-hour`;\n return /*#__PURE__*/React.createElement(ScrollItem, Object.assign({\n ref: current => this.cacheRefCurrent('hour', current),\n mode: 'normal',\n transform: transformHour,\n className: className,\n list: hourOptionsAdj.map(option => formatOption(option, disabledOptions)),\n selectedIndex: hourOptionsAdj.indexOf(hourAdj),\n type: \"hour\",\n onSelect: this.onItemChange\n }, scrollItemProps));\n }\n renderMinuteSelect(minute, locale) {\n const {\n prefixCls,\n disabledMinutes,\n timeStampValue,\n scrollItemProps\n } = this.props;\n const {\n showMinute,\n minuteOptions\n } = this.state;\n if (!showMinute) {\n return null;\n }\n const value = new Date(timeStampValue);\n const disabledOptions = disabledMinutes && disabledMinutes(value.getHours());\n const className = `${prefixCls}-list-minute`;\n const transformMinute = min => min + locale.minute;\n return /*#__PURE__*/React.createElement(ScrollItem, Object.assign({\n ref: current => this.cacheRefCurrent('minute', current),\n mode: 'normal',\n transform: transformMinute,\n list: minuteOptions.map(option => formatOption(option, disabledOptions)),\n selectedIndex: minuteOptions.indexOf(minute),\n type: \"minute\",\n onSelect: this.onItemChange,\n className: className\n }, scrollItemProps));\n }\n renderSecondSelect(second, locale) {\n const {\n prefixCls,\n disabledSeconds,\n timeStampValue,\n scrollItemProps\n } = this.props;\n const {\n showSecond,\n secondOptions\n } = this.state;\n if (!showSecond) {\n return null;\n }\n const value = new Date(timeStampValue);\n const disabledOptions = disabledSeconds && disabledSeconds(value.getHours(), value.getMinutes());\n const className = `${prefixCls}-list-second`;\n const transformSecond = sec => String(sec) + locale.second;\n return /*#__PURE__*/React.createElement(ScrollItem, Object.assign({\n ref: current => this.cacheRefCurrent('second', current),\n mode: 'normal',\n transform: transformSecond,\n list: secondOptions.map(option => formatOption(option, disabledOptions)),\n selectedIndex: secondOptions.indexOf(second),\n className: className,\n type: \"second\",\n onSelect: this.onItemChange\n }, scrollItemProps));\n }\n renderAMPMSelect(locale, localeCode) {\n const {\n prefixCls,\n use12Hours,\n isAM,\n scrollItemProps\n } = this.props;\n if (!use12Hours) {\n return null;\n }\n const AMPMOptions = [{\n value: 'AM',\n text: locale.AM || '上午'\n }, {\n value: 'PM',\n text: locale.PM || '下午'\n }];\n const selected = isAM ? 0 : 1;\n const className = `${prefixCls}-list-ampm`;\n return /*#__PURE__*/React.createElement(ScrollItem, Object.assign({\n ref: current => this.cacheRefCurrent('ampm', current),\n mode: 'normal',\n className: className,\n list: AMPMOptions,\n selectedIndex: selected,\n type: \"ampm\",\n onSelect: this.onItemChange\n }, scrollItemProps));\n }\n render() {\n const {\n timeStampValue,\n panelHeader,\n panelFooter\n } = this.props;\n const value = this.getDisplayDateFromTimeStamp(timeStampValue);\n return /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"TimePicker\"\n }, (locale, localeCode) => (/*#__PURE__*/React.createElement(ScrollList, {\n header: panelHeader,\n footer: panelFooter,\n \"x-semi-header-alias\": \"panelHeader\",\n \"x-semi-footer-alias\": \"panelFooter\"\n }, this.renderAMPMSelect(locale, localeCode), this.renderHourSelect(value.getHours(), locale), this.renderMinuteSelect(value.getMinutes(), locale), this.renderSecondSelect(value.getSeconds(), locale))));\n }\n}\nCombobox.propTypes = {\n format: PropTypes.string,\n defaultOpenValue: PropTypes.object,\n prefixCls: PropTypes.string,\n onChange: PropTypes.func,\n showHour: PropTypes.bool,\n showMinute: PropTypes.bool,\n showSecond: PropTypes.bool,\n disabledHours: PropTypes.func,\n disabledMinutes: PropTypes.func,\n disabledSeconds: PropTypes.func,\n hideDisabledOptions: PropTypes.bool,\n onCurrentSelectPanelChange: PropTypes.func,\n use12Hours: PropTypes.bool,\n isAM: PropTypes.bool,\n timeStampValue: PropTypes.any,\n scrollItemProps: PropTypes.object\n};\nCombobox.defaultProps = {\n disabledHours: _noop,\n disabledMinutes: _noop,\n disabledSeconds: _noop,\n format: strings.DEFAULT_FORMAT\n};\nexport default Combobox;","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setYear\n * @category Year Helpers\n * @summary Set the year to the given date.\n *\n * @description\n * Set the year to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} year - the year of the new date\n * @returns {Date} the new date with the year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set year 2013 to 1 September 2014:\n * const result = setYear(new Date(2014, 8, 1), 2013)\n * //=> Sun Sep 01 2013 00:00:00\n */\nexport default function setYear(dirtyDate, dirtyYear) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var year = toInteger(dirtyYear);\n\n // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\n if (isNaN(date.getTime())) {\n return new Date(NaN);\n }\n date.setFullYear(year);\n return date;\n}","import { setMonth, setYear } from 'date-fns';\nimport BaseFoundation from '../base/foundation';\nimport { strings } from './constants';\nimport copy from 'fast-copy';\nexport default class YearAndMonthFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n }\n init() {}\n destroy() {}\n selectYear(item, panelType) {\n // const year = item.value;\n const {\n currentYear,\n currentMonth\n } = this.getStates();\n const {\n type\n } = this.getProps();\n const left = strings.PANEL_TYPE_LEFT;\n const right = strings.PANEL_TYPE_RIGHT;\n const year = copy(currentYear);\n year[panelType] = item.value;\n // make sure the right panel time is always less than the left panel time\n if (type === 'monthRange') {\n const isSameYearIllegalDate = year[left] === year[right] && currentMonth[left] > currentMonth[right];\n if (panelType === left && item.value > year[right] || panelType === left && isSameYearIllegalDate) {\n // 1. select left year and left year > right year\n // 2. select left year, left year = right year, but left date > right date\n year[right] = item.value + 1;\n } else if (panelType === right && isSameYearIllegalDate) {\n // 1. select right year, left year = right year, but left date > right date\n year[left] = item.value - 1;\n }\n }\n this._adapter.setCurrentYear(year, () => this.autoSelectMonth(item, panelType, year));\n this._adapter.notifySelectYear(year);\n }\n selectMonth(item, panelType) {\n const {\n currentMonth,\n currentYear\n } = this.getStates();\n const {\n type\n } = this.getProps();\n const left = strings.PANEL_TYPE_LEFT;\n const right = strings.PANEL_TYPE_RIGHT;\n const month = copy(currentMonth);\n month[panelType] = item.month;\n // Make sure the time on the right panel is always greater than or equal to the time on the left panel\n if (type === 'monthRange' && panelType === left && currentYear[left] === currentYear[right] && item.value > month[right]) {\n month[right] = item.month;\n }\n this._adapter.setCurrentMonth(month);\n this._adapter.notifySelectMonth(month);\n }\n /**\n * After selecting a year, if the currentMonth is disabled, automatically select a non-disabled month\n */\n autoSelectMonth(item, panelType, year) {\n const {\n disabledDate,\n locale\n } = this._adapter.getProps();\n const {\n months,\n currentMonth\n } = this._adapter.getStates();\n const oppositeType = panelType === strings.PANEL_TYPE_LEFT ? 'right' : 'left';\n const currentDate = setYear(Date.now(), item.year);\n const isCurrentMonthDisabled = disabledDate(setMonth(currentDate, currentMonth[panelType] - 1));\n // whether the date on the opposite is legal\n const isOppositeMonthDisabled = disabledDate(setMonth(setYear(Date.now(), year[oppositeType]), currentMonth[oppositeType] - 1));\n if (!isCurrentMonthDisabled && !isOppositeMonthDisabled) {\n // all panel Date is legal\n return;\n }\n let finalYear = year;\n let finalMonth = currentMonth;\n if (isCurrentMonthDisabled) {\n const currentIndex = months.findIndex(_ref => {\n let {\n month\n } = _ref;\n return month === currentMonth[panelType];\n });\n let validMonth;\n // First look in the back, if you can't find it in the back, then look in the front\n validMonth = months.slice(currentIndex).find(_ref2 => {\n let {\n month\n } = _ref2;\n return !disabledDate(setMonth(currentDate, month - 1));\n });\n if (!validMonth) {\n validMonth = months.slice(0, currentIndex).find(_ref3 => {\n let {\n month\n } = _ref3;\n return !disabledDate(setMonth(currentDate, month - 1));\n });\n }\n if (validMonth && !isOppositeMonthDisabled) {\n // only currentPanel Date is illegal\n // just need to modify the month of the current panel\n finalMonth[panelType] = validMonth.month;\n } else if (validMonth && isOppositeMonthDisabled) {\n // all panel Date is illegal\n // change the value to the legal value calculated by the current panel\n finalYear = {\n 'left': item.year,\n 'right': item.year\n };\n finalMonth = {\n 'left': validMonth.month,\n 'right': validMonth.month\n };\n }\n } else if (!isCurrentMonthDisabled && isOppositeMonthDisabled) {\n // only opposite panel Date is illegal\n // change the value to the legal value in the current panel\n finalYear = {\n 'left': item.year,\n 'right': item.year\n };\n finalMonth = {\n 'left': currentMonth[panelType],\n 'right': currentMonth[panelType]\n };\n }\n this._adapter.setCurrentYearAndMonth(finalYear, finalMonth);\n this._adapter.notifySelectYearAndMonth(finalYear, finalMonth);\n }\n backToMain() {\n this._adapter.notifyBackToMain();\n }\n}","export default function getYearAndMonth(year, month) {\n const nowYear = new Date().getFullYear();\n const nowMonth = new Date().getMonth();\n const rightMonth = month.right || nowMonth + 2;\n const rightYear = year.right || (rightMonth <= 12 ? nowYear : nowYear + 1);\n return {\n year: {\n left: year.left || nowYear,\n right: rightYear\n },\n month: {\n left: month.left || nowMonth + 1,\n right: rightMonth <= 12 ? rightMonth : 1\n }\n };\n}","const getYears = (startYear, endYear) => {\n const currentYear = new Date().getFullYear();\n let start = typeof startYear === 'number' ? startYear : currentYear - 100;\n let end = typeof endYear === 'number' ? endYear : currentYear + 100;\n if (end < start) {\n [start, end] = [end, start];\n }\n return Array.from({\n length: end - start + 1\n }, (v, i) => start + i);\n};\nexport default getYears;","import _isEqual from \"lodash/isEqual\";\nimport _stubFalse from \"lodash/stubFalse\";\nimport _noop from \"lodash/noop\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport YearAndMonthFoundation from '@douyinfe/semi-foundation/lib/es/datePicker/yearAndMonthFoundation';\nimport BaseComponent from '../_base/baseComponent';\nimport ScrollList from '../scrollList/index';\nimport ScrollItem from '../scrollList/scrollItem';\nimport { getYearAndMonth, getYears } from '@douyinfe/semi-foundation/lib/es/datePicker/_utils/index';\nimport IconButton from '../iconButton';\nimport { IconChevronLeft } from '@douyinfe/semi-icons';\nimport { BASE_CLASS_PREFIX } from '@douyinfe/semi-foundation/lib/es/base/constants';\nimport { setYear, setMonth, set } from 'date-fns';\nimport { strings } from '@douyinfe/semi-foundation/lib/es/datePicker/constants';\nconst prefixCls = `${BASE_CLASS_PREFIX}-datepicker`;\nclass YearAndMonth extends BaseComponent {\n constructor(props) {\n super(props);\n this.selectYear = (item, panelType) => {\n this.foundation.selectYear(item, panelType);\n };\n this.selectMonth = (item, panelType) => {\n this.foundation.selectMonth(item, panelType);\n };\n this.reselect = () => {\n const refKeys = ['yearRef', 'monthRef'];\n refKeys.forEach(key => {\n const ref = this[key];\n if (ref && ref.current && ref.current.scrollToIndex) {\n ref.current.scrollToIndex();\n }\n });\n };\n this.backToMain = e => {\n e.nativeEvent.stopImmediatePropagation();\n this.foundation.backToMain();\n };\n const now = new Date();\n let {\n currentYear,\n currentMonth\n } = props;\n const {\n year,\n month\n } = getYearAndMonth(currentYear, currentMonth);\n this.state = {\n years: getYears(props.startYear, props.endYear).map(year => ({\n value: year,\n year\n })),\n months: Array(12).fill(0).map((v, idx) => ({\n value: idx + 1,\n month: idx + 1\n })),\n currentYear: year,\n currentMonth: month\n };\n this.yearRef = /*#__PURE__*/React.createRef();\n this.monthRef = /*#__PURE__*/React.createRef();\n this.foundation = new YearAndMonthFoundation(this.adapter);\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n // updateYears: years => this.setState({ years }),\n // updateMonths: months => this.setState({ months }),\n setCurrentYear: (currentYear, cb) => this.setState({\n currentYear\n }, cb),\n setCurrentMonth: currentMonth => this.setState({\n currentMonth\n }),\n setCurrentYearAndMonth: (currentYear, currentMonth) => this.setState({\n currentYear,\n currentMonth\n }),\n notifySelectYear: year => this.props.onSelect({\n currentMonth: this.state.currentMonth,\n currentYear: year\n }),\n notifySelectMonth: month => this.props.onSelect({\n currentYear: this.state.currentYear,\n currentMonth: month\n }),\n notifySelectYearAndMonth: (year, month) => this.props.onSelect({\n currentYear: year,\n currentMonth: month\n }),\n notifyBackToMain: () => this.props.onBackToMain()\n });\n }\n static getDerivedStateFromProps(props, state) {\n const willUpdateStates = {};\n const {\n year,\n month\n } = getYearAndMonth(props.currentYear, props.currentMonth);\n if (!_isEqual(props.currentYear, state.currentYear)) {\n willUpdateStates.currentYear = year;\n }\n if (!_isEqual(props.currentMonth, state.currentMonth)) {\n willUpdateStates.currentMonth = month;\n }\n return willUpdateStates;\n }\n renderColYear(panelType) {\n const {\n years,\n currentYear,\n currentMonth,\n months\n } = this.state;\n const {\n disabledDate,\n localeCode,\n yearCycled,\n yearAndMonthOpts\n } = this.props;\n const currentDate = setMonth(Date.now(), currentMonth[panelType] - 1);\n const left = strings.PANEL_TYPE_LEFT;\n const right = strings.PANEL_TYPE_RIGHT;\n const needDisabled = year => {\n if (panelType === right && currentYear[left]) {\n return currentYear[left] > year;\n }\n return false;\n };\n const list = years.map(_ref => {\n let {\n value,\n year\n } = _ref;\n const isAllMonthDisabled = months.every(_ref2 => {\n let {\n month\n } = _ref2;\n return disabledDate(set(currentDate, {\n year,\n month: month - 1\n }));\n });\n const isRightPanelDisabled = needDisabled(year);\n return {\n year,\n value,\n disabled: isAllMonthDisabled || isRightPanelDisabled\n };\n });\n let transform = val => val;\n if (localeCode === 'zh-CN' || localeCode === 'zh-TW') {\n // Only Chinese needs to add [year] after the selected year\n transform = val => `${val}年`;\n }\n return /*#__PURE__*/React.createElement(ScrollItem, Object.assign({\n ref: this.yearRef,\n cycled: yearCycled,\n list: list,\n transform: transform,\n selectedIndex: years.findIndex(item => item.value === currentYear[panelType]),\n type: \"year\",\n onSelect: item => this.selectYear(item, panelType),\n mode: \"normal\"\n }, yearAndMonthOpts));\n }\n renderColMonth(panelType) {\n const {\n months,\n currentMonth,\n currentYear\n } = this.state;\n const {\n locale,\n localeCode,\n monthCycled,\n disabledDate,\n yearAndMonthOpts\n } = this.props;\n let transform = val => val;\n const currentDate = setYear(Date.now(), currentYear[panelType]);\n const left = strings.PANEL_TYPE_LEFT;\n const right = strings.PANEL_TYPE_RIGHT;\n if (localeCode === 'zh-CN' || localeCode === 'zh-TW') {\n // Only Chinese needs to add [month] after the selected month\n transform = val => `${val}月`;\n }\n // i18n\n const list = months.map(_ref3 => {\n let {\n value,\n month\n } = _ref3;\n const isRightPanelDisabled = panelType === right && currentMonth[left] && currentYear[left] === currentYear[right] && currentMonth[left] > month;\n return {\n month,\n disabled: disabledDate(setMonth(currentDate, month - 1)) || isRightPanelDisabled,\n value: locale.fullMonths[value] // Actual rendered text\n };\n });\n const selectedIndex = list.findIndex(item => item.month === currentMonth[panelType]);\n return /*#__PURE__*/React.createElement(ScrollItem, Object.assign({\n ref: this.monthRef,\n cycled: monthCycled,\n list: list,\n transform: transform,\n selectedIndex: selectedIndex,\n type: \"month\",\n onSelect: item => this.selectMonth(item, panelType),\n mode: 'normal'\n }, yearAndMonthOpts));\n }\n renderPanel(panelType) {\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ScrollList, null, this.renderColYear(panelType), this.renderColMonth(panelType)));\n }\n render() {\n const {\n locale,\n noBackBtn,\n density,\n presetPosition,\n renderQuickControls,\n renderDateInput,\n type\n } = this.props;\n const prefix = `${prefixCls}-yearmonth-header`;\n const bodyCls = `${prefixCls}-yearmonth-body`;\n // i18n\n const selectDateText = locale.selectDate;\n const iconSize = density === 'compact' ? 'default' : 'large';\n const buttonSize = density === 'compact' ? 'small' : 'default';\n const panelTypeLeft = strings.PANEL_TYPE_LEFT;\n const panelTypeRight = strings.PANEL_TYPE_RIGHT;\n let content = null;\n if (type === 'month') {\n content = this.renderPanel(panelTypeLeft);\n } else {\n content = /*#__PURE__*/React.createElement(\"div\", {\n className: bodyCls\n }, this.renderPanel(panelTypeLeft), this.renderPanel(panelTypeRight));\n }\n return /*#__PURE__*/React.createElement(React.Fragment, null, noBackBtn ? null : (/*#__PURE__*/React.createElement(\"div\", {\n className: prefix\n }, /*#__PURE__*/React.createElement(IconButton, {\n noHorizontalPadding: false,\n icon: /*#__PURE__*/React.createElement(IconChevronLeft, {\n \"aria-hidden\": true,\n size: iconSize\n }),\n size: buttonSize,\n onClick: this.backToMain\n }, /*#__PURE__*/React.createElement(\"span\", null, selectDateText)))), presetPosition ? (/*#__PURE__*/React.createElement(\"div\", {\n style: {\n display: 'flex'\n }\n }, presetPosition === \"left\" && type !== 'monthRange' && renderQuickControls, /*#__PURE__*/React.createElement(\"div\", null, renderDateInput, content), presetPosition === \"right\" && type !== 'monthRange' && renderQuickControls)) : /*#__PURE__*/React.createElement(React.Fragment, null, renderDateInput, content));\n }\n}\nYearAndMonth.propTypes = {\n currentYear: PropTypes.object,\n currentMonth: PropTypes.object,\n onSelect: PropTypes.func,\n locale: PropTypes.object,\n localeCode: PropTypes.string,\n monthCycled: PropTypes.bool,\n yearCycled: PropTypes.bool,\n noBackBtn: PropTypes.bool,\n disabledDate: PropTypes.func,\n density: PropTypes.string,\n presetPosition: PropTypes.oneOf(strings.PRESET_POSITION_SET),\n renderQuickControls: PropTypes.node,\n renderDateInput: PropTypes.node,\n type: PropTypes.oneOf(strings.TYPE_SET),\n startYear: PropTypes.number,\n endYear: PropTypes.number\n};\nYearAndMonth.defaultProps = {\n disabledDate: _stubFalse,\n monthCycled: false,\n yearCycled: false,\n noBackBtn: false,\n onSelect: _noop,\n type: 'month'\n};\nexport default YearAndMonth;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M12 23a11 11 0 1 0 0-22 11 11 0 0 0 0 22Zm1.5-16.5v4.88l3.56 3.56a1.5 1.5 0 0 1-2.12 2.12l-4-4A1.5 1.5 0 0 1 10.5 12V6.5a1.5 1.5 0 0 1 3 0Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'clock');\nexport default IconComponent;","import _stubFalse from \"lodash/stubFalse\";\nimport _noop from \"lodash/noop\";\n/* eslint-disable jsx-a11y/interactive-supports-focus */\nimport React from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { format as formatFn, isSameDay } from 'date-fns';\nimport MonthsGridFoundation from '@douyinfe/semi-foundation/lib/es/datePicker/monthsGridFoundation';\nimport { strings, numbers, cssClasses } from '@douyinfe/semi-foundation/lib/es/datePicker/constants';\nimport { compatibleParse } from '@douyinfe/semi-foundation/lib/es/datePicker/_utils/parser';\nimport BaseComponent from '../_base/baseComponent';\nimport Navigation from './navigation';\nimport Month from './month';\nimport Combobox from '../timePicker/Combobox';\nimport YearAndMonth from './yearAndMonth';\nimport { IconClock, IconCalendar } from '@douyinfe/semi-icons';\nimport { getDefaultFormatTokenByType } from '@douyinfe/semi-foundation/lib/es/datePicker/_utils/getDefaultFormatToken';\nimport getDefaultPickerDate from '@douyinfe/semi-foundation/lib/es/datePicker/_utils/getDefaultPickerDate';\nconst prefixCls = cssClasses.PREFIX;\nexport default class MonthsGrid extends BaseComponent {\n constructor(props) {\n super(props);\n this.cacheRefCurrent = (key, current) => {\n if (typeof key === 'string' && key.length) {\n this.adapter.setCache(key, current);\n }\n };\n this.leftIsYearOrTime = state => {\n const {\n monthLeft\n } = state || this.state;\n if (monthLeft && (monthLeft.isTimePickerOpen || monthLeft.isYearPickerOpen)) {\n return true;\n } else {\n return false;\n }\n };\n this.rightIsYearOrTime = state => {\n const {\n monthRight\n } = state || this.state;\n if (monthRight && (monthRight.isTimePickerOpen || monthRight.isYearPickerOpen)) {\n return true;\n } else {\n return false;\n }\n };\n /**\n * Calculate the height of the scrolling list, if the animation is not over, return 0\n */\n this.calcScrollListHeight = () => {\n const wrapLeft = this.adapter.getCache(`wrap-${strings.PANEL_TYPE_LEFT}`);\n const wrapRight = this.adapter.getCache(`wrap-${strings.PANEL_TYPE_RIGHT}`);\n const switchLeft = this.adapter.getCache(`switch-${strings.PANEL_TYPE_LEFT}`);\n const switchRight = this.adapter.getCache(`switch-${strings.PANEL_TYPE_RIGHT}`);\n const leftRect = wrapLeft && wrapLeft.getBoundingClientRect();\n const rightRect = wrapRight && wrapRight.getBoundingClientRect();\n let leftHeight = leftRect && leftRect.height || 0;\n let rightHeight = rightRect && rightRect.height || 0;\n if (switchLeft) {\n leftHeight += switchLeft.getBoundingClientRect().height;\n }\n if (switchRight) {\n rightHeight += switchRight.getBoundingClientRect().height;\n }\n return Math.max(leftHeight, rightHeight);\n };\n this.handleWeeksRowNumChange = (weeksRowNum, panelType) => {\n const isLeft = panelType === strings.PANEL_TYPE_RIGHT;\n const isRight = panelType === strings.PANEL_TYPE_RIGHT;\n const allIsYearOrTime = this.leftIsYearOrTime() && this.rightIsYearOrTime();\n if (this.foundation.isRangeType() && !allIsYearOrTime) {\n const states = {\n weeksRowNum,\n currentPanelHeight: this.calcScrollListHeight()\n };\n this.setState(states, () => {\n if (this.leftIsYearOrTime() && isRight || this.rightIsYearOrTime() && isLeft) {\n this.reselect();\n }\n });\n }\n };\n this.reselect = () => {\n const refKeys = [`timepicker-${strings.PANEL_TYPE_LEFT}`, `timepicker-${strings.PANEL_TYPE_RIGHT}`, `yam-${strings.PANEL_TYPE_LEFT}`, `yam-${strings.PANEL_TYPE_RIGHT}`];\n refKeys.forEach(key => {\n const current = this.adapter.getCache(key);\n if (current && typeof current.reselect === 'function') {\n current.reselect();\n }\n });\n };\n this.getYAMOpenType = () => {\n return this.foundation.getYAMOpenType();\n };\n const validFormat = props.format || getDefaultFormatTokenByType(props.type);\n const {\n nowDate,\n nextDate\n } = getDefaultPickerDate({\n defaultPickerValue: props.defaultPickerValue,\n format: validFormat,\n dateFnsLocale: props.dateFnsLocale\n });\n const dateState = {\n // Direct use of full date string storage, mainly considering the month rendering comparison to save a conversion\n // The selected value for single or multiple selection, full date string, eg. {'2019-10-01', '2019-10-02'}\n selected: new Set()\n };\n const rangeState = {\n monthLeft: {\n pickerDate: nowDate,\n showDate: nowDate,\n isTimePickerOpen: false,\n isYearPickerOpen: false\n },\n monthRight: {\n pickerDate: nextDate,\n showDate: nextDate,\n isTimePickerOpen: false,\n isYearPickerOpen: false\n },\n maxWeekNum: 0,\n hoverDay: '',\n rangeStart: props.rangeStart,\n rangeEnd: '',\n currentPanelHeight: 0,\n offsetRangeStart: '',\n offsetRangeEnd: ''\n };\n this.state = Object.assign(Object.assign({}, dateState), rangeState);\n this.foundation = new MonthsGridFoundation(this.adapter);\n }\n get dateAdapter() {\n return {\n updateDaySelected: selected => this.setState({\n selected\n })\n };\n }\n get rangeAdapter() {\n return {\n setRangeStart: rangeStart => this.setState({\n rangeStart\n }),\n setRangeEnd: rangeEnd => this.setState({\n rangeEnd\n }),\n setHoverDay: hoverDay => this.setState({\n hoverDay\n }),\n setWeeksHeight: maxWeekNum => this.setState({\n maxWeekNum\n }),\n setOffsetRangeStart: offsetRangeStart => this.setState({\n offsetRangeStart\n }),\n setOffsetRangeEnd: offsetRangeEnd => this.setState({\n offsetRangeEnd\n })\n };\n }\n get adapter() {\n return Object.assign(Object.assign(Object.assign(Object.assign({}, super.adapter), this.dateAdapter), this.rangeAdapter), {\n updateMonthOnLeft: v => this.setState({\n monthLeft: v\n }),\n updateMonthOnRight: v => this.setState({\n monthRight: v\n }),\n notifySelectedChange: (value, options) => this.props.onChange(value, options),\n notifyMaxLimit: v => this.props.onMaxSelect(v),\n notifyPanelChange: (date, dateString) => this.props.onPanelChange(date, dateString),\n setRangeInputFocus: rangeInputFocus => this.props.setRangeInputFocus(rangeInputFocus),\n isAnotherPanelHasOpened: currentRangeInput => this.props.isAnotherPanelHasOpened(currentRangeInput)\n });\n }\n componentDidMount() {\n super.componentDidMount();\n }\n componentDidUpdate(prevProps, prevState) {\n const {\n defaultValue,\n defaultPickerValue\n } = this.props;\n if (prevProps.defaultValue !== defaultValue) {\n // we should always update panel state when value changes\n this.foundation.updateSelectedFromProps(defaultValue);\n }\n if (prevProps.defaultPickerValue !== defaultPickerValue) {\n this.foundation.initDefaultPickerValue();\n }\n const isRange = this.foundation.isRangeType();\n if (isRange) {\n /**\n * we have to add these code to ensure that scroll list's selector places center\n */\n const prevAll = this.leftIsYearOrTime(prevState) && this.rightIsYearOrTime(prevState);\n const prevSome = this.leftIsYearOrTime(prevState) && !this.rightIsYearOrTime(prevState) || !this.leftIsYearOrTime(prevState) && this.rightIsYearOrTime(prevState);\n const nowAll = this.leftIsYearOrTime() && this.rightIsYearOrTime();\n const nowSome = this.leftIsYearOrTime() && !this.rightIsYearOrTime() || !this.leftIsYearOrTime() && this.rightIsYearOrTime();\n const prevAllToSome = prevAll && nowSome;\n const prevSomeToAll = prevSome && nowAll;\n if (prevSomeToAll) {\n this.setState({\n currentPanelHeight: this.calcScrollListHeight()\n }, this.reselect);\n } else if (prevAllToSome) {\n this.reselect();\n }\n }\n }\n renderPanel(month, panelType) {\n let monthCls = classnames(`${prefixCls}-month-grid-${panelType}`);\n const {\n monthLeft,\n monthRight,\n currentPanelHeight\n } = this.state;\n const {\n insetInput\n } = this.props;\n const panelDetail = panelType === strings.PANEL_TYPE_RIGHT ? monthRight : monthLeft;\n const {\n isTimePickerOpen,\n isYearPickerOpen\n } = panelDetail;\n const panelContent = this.renderMonth(month, panelType);\n const yearAndMonthLayer = isYearPickerOpen ? (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-yam`\n }, this.renderYearAndMonth(panelType, panelDetail))) : null;\n const timePickerLayer = isTimePickerOpen ? (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-tpk`\n }, this.renderTimePicker(panelType, panelDetail))) : null;\n const style = {};\n const wrapLeft = this.adapter.getCache(`wrap-${strings.PANEL_TYPE_LEFT}`);\n const wrapRight = this.adapter.getCache(`wrap-${strings.PANEL_TYPE_RIGHT}`);\n const wrap = panelType === strings.PANEL_TYPE_RIGHT ? wrapRight : wrapLeft;\n if (this.foundation.isRangeType()) {\n if (isYearPickerOpen || isTimePickerOpen) {\n style.minWidth = wrap.getBoundingClientRect().width;\n }\n if (this.leftIsYearOrTime() && this.rightIsYearOrTime() && !insetInput) {\n /**\n * left和right同时为tpk时,panel会有一个minHeight\n * 如果缓存的currentPanelHeight为0,则需要计算滚动列表的高度\n * 如果有缓存的值则使用currentPanelHeight(若此高度<实际值,则会影响ScrollList中渲染列表的循环次数)\n * 详见 packages/semi-foundation/scrollList/itemFoundation.js initWheelList函数\n *\n * When left and right are tpk at the same time, the panel will have a minHeight\n * If the cached currentPanelHeight is 0, you need to calculate the height of the scrolling list\n * If there is a cached value, use currentPanelHeight (if this height is less than the actual value, it will affect the number of cycles in the ScrollList to render the list)\n * See packages/semi-foundation/scrollList/itemFoundation.js initWheelList function\n */\n style.minHeight = currentPanelHeight ? currentPanelHeight : this.calcScrollListHeight();\n }\n } else if (this.props.type !== 'year' && this.props.type !== 'month' && (isTimePickerOpen || isYearPickerOpen)) {\n monthCls = classnames(monthCls, `${prefixCls}-yam-showing`);\n }\n const _isDatePanelOpen = !(isYearPickerOpen || isTimePickerOpen);\n const xOpenType = _isDatePanelOpen ? 'date' : isYearPickerOpen ? 'year' : 'time';\n return /*#__PURE__*/React.createElement(\"div\", {\n className: monthCls,\n key: panelType,\n style: style,\n \"x-open-type\": xOpenType\n }, yearAndMonthLayer, timePickerLayer, this.foundation.isRangeType() ? panelContent : isYearPickerOpen || isTimePickerOpen ? null : panelContent, this.renderSwitch(panelType));\n }\n showYearPicker(panelType, e) {\n // e.stopPropagation();\n // When switching to the year and month, the e.target at this time is generated from Navigation, and the Navigation module will be removed from the DOM after switching\n // If you do not prevent the event from spreading to index.jsx, panel.contain (e.target) in clickOutSide will call closePanel because there is no Nav in the Panel and think this click is clickOutSide\n // Cause the entire component pop-up window to be closed by mistake\n // console.log(this.navRef.current.clientHeight, this.monthRef.current.clientHeight);\n // this.wrapRef.current.style.height = this.wrapRef.current.clientHeight + 'px';\n // this.wrapRef.current.style.overflow = 'hidden';\n e.nativeEvent.stopImmediatePropagation();\n this.foundation.showYearPicker(panelType);\n }\n renderMonth(month, panelType) {\n const {\n selected,\n rangeStart,\n rangeEnd,\n hoverDay,\n maxWeekNum,\n offsetRangeStart,\n offsetRangeEnd\n } = this.state;\n const {\n weekStartsOn,\n disabledDate,\n locale,\n localeCode,\n renderDate,\n renderFullDate,\n startDateOffset,\n endDateOffset,\n density,\n rangeInputFocus,\n syncSwitchMonth,\n multiple\n } = this.props;\n let monthText = '';\n // i18n monthText\n if (month) {\n // Get the absolute value of the year and month\n const yearNumber = month ? formatFn(month, 'yyyy') : '';\n const monthNumber = month ? formatFn(month, 'L') : '';\n // Display the month as the corresponding language text\n const mText = locale.months[monthNumber];\n const monthFormatToken = locale.monthText;\n // Display the year and month in a specific language format order\n monthText = monthFormatToken.replace('${year}', yearNumber).replace('${month}', mText);\n }\n let style = {};\n const detail = panelType === strings.PANEL_TYPE_RIGHT ? this.state.monthRight : this.state.monthLeft;\n // Whether to select type for range\n const isRangeType = this.foundation.isRangeType();\n // Whether to switch synchronously for two panels\n const shouldBimonthSwitch = isRangeType && syncSwitchMonth;\n if (isRangeType && detail && (detail.isYearPickerOpen || detail.isTimePickerOpen)) {\n style = {\n visibility: 'hidden',\n position: 'absolute',\n pointerEvents: 'none'\n };\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n ref: current => this.cacheRefCurrent(`wrap-${panelType}`, current),\n style: style\n }, /*#__PURE__*/React.createElement(Navigation, {\n forwardRef: current => this.cacheRefCurrent(`nav-${panelType}`, current),\n monthText: monthText,\n density: density,\n onMonthClick: e => this.showYearPicker(panelType, e),\n onPrevMonth: () => this.foundation.prevMonth(panelType),\n onNextMonth: () => this.foundation.nextMonth(panelType),\n onNextYear: () => this.foundation.nextYear(panelType),\n onPrevYear: () => this.foundation.prevYear(panelType),\n shouldBimonthSwitch: shouldBimonthSwitch,\n panelType: panelType\n }), /*#__PURE__*/React.createElement(Month, {\n locale: locale,\n localeCode: localeCode,\n forwardRef: current => this.cacheRefCurrent(`month-${panelType}`, current),\n disabledDate: disabledDate,\n weekStartsOn: weekStartsOn,\n month: month,\n selected: selected,\n rangeStart: rangeStart,\n rangeEnd: rangeEnd,\n rangeInputFocus: rangeInputFocus,\n offsetRangeStart: offsetRangeStart,\n offsetRangeEnd: offsetRangeEnd,\n hoverDay: hoverDay,\n weeksRowNum: maxWeekNum,\n renderDate: renderDate,\n renderFullDate: renderFullDate,\n onDayClick: day => this.foundation.handleDayClick(day, panelType),\n onDayHover: day => this.foundation.handleDayHover(day, panelType),\n onWeeksRowNumChange: weeksRowNum => this.handleWeeksRowNumChange(weeksRowNum, panelType),\n startDateOffset: startDateOffset,\n endDateOffset: endDateOffset,\n focusRecordsRef: this.props.focusRecordsRef,\n multiple: multiple\n }));\n }\n renderTimePicker(panelType, panelDetail) {\n const {\n type,\n locale,\n format,\n hideDisabledOptions,\n timePickerOpts,\n dateFnsLocale\n } = this.props;\n const {\n pickerDate\n } = panelDetail;\n const timePanelCls = classnames(`${prefixCls}-time`);\n const restProps = Object.assign(Object.assign({}, timePickerOpts), {\n hideDisabledOptions\n });\n const disabledOptions = this.foundation.calcDisabledTime(panelType);\n if (disabledOptions) {\n ['disabledHours', 'disabledMinutes', 'disabledSeconds'].forEach(key => {\n if (disabledOptions[key]) {\n restProps[key] = disabledOptions[key];\n }\n });\n }\n const {\n rangeStart,\n rangeEnd\n } = this.state;\n const dateFormat = this.foundation.getValidDateFormat();\n let startDate, endDate;\n if (type === 'dateTimeRange' && rangeStart && rangeEnd && isSameDay(startDate = compatibleParse(rangeStart, dateFormat, undefined, dateFnsLocale), endDate = compatibleParse(rangeEnd, dateFormat, undefined, dateFnsLocale))) {\n if (panelType === strings.PANEL_TYPE_RIGHT) {\n rangeStart && (restProps.startDate = startDate);\n } else {\n rangeEnd && (restProps.endDate = endDate);\n }\n }\n // i18n placeholder\n const placeholder = locale.selectTime;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: timePanelCls\n }, /*#__PURE__*/React.createElement(Combobox, Object.assign({\n ref: current => this.cacheRefCurrent(`timepicker-${panelType}`, current),\n panelHeader: placeholder,\n format: format || strings.FORMAT_TIME_PICKER,\n timeStampValue: pickerDate,\n onChange: newTime => this.foundation.handleTimeChange(newTime, panelType)\n }, restProps)));\n }\n renderYearAndMonth(panelType, panelDetail) {\n const {\n pickerDate\n } = panelDetail;\n const {\n locale,\n localeCode,\n density,\n yearAndMonthOpts,\n startYear,\n endYear\n } = this.props;\n const y = pickerDate.getFullYear();\n const m = pickerDate.getMonth() + 1;\n return /*#__PURE__*/React.createElement(YearAndMonth, {\n ref: current => this.cacheRefCurrent(`yam-${panelType}`, current),\n locale: locale,\n localeCode: localeCode,\n // currentYear={y}\n // currentMonth={m}\n currentYear: {\n left: y,\n right: 0\n },\n currentMonth: {\n left: m,\n right: 0\n },\n onSelect: item => this.foundation.toYearMonth(panelType, new Date(item.currentYear.left, item.currentMonth.left - 1)),\n onBackToMain: () => {\n this.foundation.showDatePanel(panelType);\n const wrapCurrent = this.adapter.getCache(`wrap-${panelType}`);\n if (wrapCurrent) {\n wrapCurrent.style.height = 'auto';\n }\n },\n density: density,\n yearAndMonthOpts: yearAndMonthOpts,\n startYear: startYear,\n endYear: endYear\n });\n }\n renderSwitch(panelType) {\n const {\n rangeStart,\n rangeEnd,\n monthLeft,\n monthRight\n } = this.state;\n const {\n type,\n locale,\n disabledTimePicker,\n density,\n dateFnsLocale,\n insetInput\n } = this.props;\n // Type: date, dateRange, year, month, inset input no rendering required\n if (!type.includes('Time') || insetInput) {\n return null;\n }\n // switch year/month & time\n let panelDetail, dateText;\n // i18n\n const {\n FORMAT_SWITCH_DATE\n } = locale.localeFormatToken;\n // Timepicker format is constant and does not change with language\n // const FORMAT_TIME_PICKER = strings.FORMAT_TIME_PICKER;\n const formatTimePicker = this.foundation.getValidTimeFormat();\n const dateFormat = this.foundation.getValidDateFormat();\n if (panelType === strings.PANEL_TYPE_LEFT) {\n panelDetail = monthLeft;\n dateText = rangeStart ? formatFn(compatibleParse(rangeStart, dateFormat, undefined, dateFnsLocale), FORMAT_SWITCH_DATE) : '';\n } else {\n panelDetail = monthRight;\n dateText = rangeEnd ? formatFn(compatibleParse(rangeEnd, dateFormat, undefined, dateFnsLocale), FORMAT_SWITCH_DATE) : '';\n }\n const {\n isTimePickerOpen,\n showDate\n } = panelDetail;\n const monthText = showDate ? formatFn(showDate, FORMAT_SWITCH_DATE) : '';\n const timeText = showDate ? formatFn(showDate, formatTimePicker) : '';\n const showSwitchIcon = ['default'].includes(density);\n const switchCls = classnames(`${prefixCls}-switch`);\n const dateCls = classnames({\n [`${prefixCls}-switch-date`]: true,\n [`${prefixCls}-switch-date-active`]: !isTimePickerOpen\n });\n const timeCls = classnames({\n [`${prefixCls}-switch-time`]: true,\n [`${prefixCls}-switch-time-disabled`]: disabledTimePicker,\n [`${prefixCls}-switch-date-active`]: isTimePickerOpen\n });\n const textCls = classnames(`${prefixCls}-switch-text`);\n return /*#__PURE__*/React.createElement(\"div\", {\n className: switchCls,\n ref: current => this.adapter.setCache(`switch-${panelType}`, current)\n }, /*#__PURE__*/React.createElement(\"div\", {\n role: \"button\",\n \"aria-label\": \"Switch to date panel\",\n className: dateCls,\n onClick: e => this.foundation.showDatePanel(panelType)\n }, showSwitchIcon && /*#__PURE__*/React.createElement(IconCalendar, {\n \"aria-hidden\": true\n }), /*#__PURE__*/React.createElement(\"span\", {\n className: textCls\n }, dateText || monthText)), /*#__PURE__*/React.createElement(\"div\", {\n role: \"button\",\n \"aria-label\": \"Switch to time panel\",\n className: timeCls,\n onClick: e => this.foundation.showTimePicker(panelType, true)\n }, showSwitchIcon && /*#__PURE__*/React.createElement(IconClock, {\n \"aria-hidden\": true\n }), /*#__PURE__*/React.createElement(\"span\", {\n className: textCls\n }, timeText)));\n }\n render() {\n const {\n monthLeft,\n monthRight\n } = this.state;\n const {\n type,\n insetInput,\n presetPosition,\n renderQuickControls,\n renderDateInput\n } = this.props;\n const monthGridCls = classnames({\n [`${prefixCls}-month-grid`]: true\n });\n const panelTypeLeft = strings.PANEL_TYPE_LEFT;\n const panelTypeRight = strings.PANEL_TYPE_RIGHT;\n let content = null;\n if (type === 'date' || type === 'dateTime') {\n content = this.renderPanel(monthLeft.pickerDate, panelTypeLeft);\n } else if (type === 'dateRange' || type === 'dateTimeRange') {\n content = [this.renderPanel(monthLeft.pickerDate, panelTypeLeft), this.renderPanel(monthRight.pickerDate, panelTypeRight)];\n } else if (type === 'year' || type === 'month') {\n content = 'year month';\n }\n const yearOpenType = this.getYAMOpenType();\n return /*#__PURE__*/React.createElement(\"div\", {\n style: {\n display: 'flex'\n }\n }, presetPosition === \"left\" && renderQuickControls, /*#__PURE__*/React.createElement(\"div\", null, renderDateInput, /*#__PURE__*/React.createElement(\"div\", {\n className: monthGridCls,\n \"x-type\": type,\n \"x-panel-yearandmonth-open-type\": yearOpenType,\n \"x-insetinput\": insetInput ? \"true\" : \"false\",\n \"x-preset-position\": renderQuickControls === null ? 'null' : presetPosition,\n ref: current => this.cacheRefCurrent('monthGrid', current)\n }, content)), presetPosition === \"right\" && renderQuickControls);\n }\n}\nMonthsGrid.propTypes = {\n type: PropTypes.oneOf(strings.TYPE_SET),\n defaultValue: PropTypes.array,\n defaultPickerValue: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.object, PropTypes.array]),\n multiple: PropTypes.bool,\n max: PropTypes.number,\n weekStartsOn: PropTypes.number,\n disabledDate: PropTypes.func,\n disabledTime: PropTypes.func,\n disabledTimePicker: PropTypes.bool,\n hideDisabledOptions: PropTypes.bool,\n navPrev: PropTypes.node,\n navNext: PropTypes.node,\n onMaxSelect: PropTypes.func,\n timePickerOpts: PropTypes.object,\n // Whether the outer datePicker is a controlled component\n isControlledComponent: PropTypes.bool,\n rangeStart: PropTypes.oneOfType([PropTypes.string]),\n rangeInputFocus: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n locale: PropTypes.object,\n localeCode: PropTypes.string,\n format: PropTypes.string,\n renderDate: PropTypes.func,\n renderFullDate: PropTypes.func,\n startDateOffset: PropTypes.func,\n endDateOffset: PropTypes.func,\n autoSwitchDate: PropTypes.bool,\n density: PropTypes.string,\n dateFnsLocale: PropTypes.object.isRequired,\n timeZone: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n // Support synchronous switching of months\n syncSwitchMonth: PropTypes.bool,\n // Callback function for panel date switching\n onPanelChange: PropTypes.func,\n focusRecordsRef: PropTypes.object,\n triggerRender: PropTypes.func,\n presetPosition: PropTypes.oneOf(strings.PRESET_POSITION_SET),\n renderQuickControls: PropTypes.node,\n renderDateInput: PropTypes.node\n};\nMonthsGrid.defaultProps = {\n type: 'date',\n rangeStart: '',\n multiple: false,\n weekStartsOn: numbers.WEEK_START_ON,\n disabledDate: _stubFalse,\n onMaxSelect: _noop,\n locale: {}\n};","/* eslint-disable jsx-a11y/no-static-element-interactions,jsx-a11y/click-events-have-key-events */\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/datePicker/constants';\nimport Button from '../button/index';\nimport Typography from '../typography/index';\nimport { noop } from '@douyinfe/semi-foundation/lib/es/utils/function';\nconst prefixCls = cssClasses.PREFIX;\nconst {\n Text\n} = Typography;\nclass QuickControl extends PureComponent {\n render() {\n const {\n presets,\n onPresetClick,\n type,\n presetPosition,\n insetInput,\n locale\n } = this.props;\n const isTypeRange = type === 'dateRange' || type === 'dateTimeRange';\n const isPanelTopAndBottom = presetPosition === 'top' || presetPosition === 'bottom';\n const isMonth = type === 'month';\n const isTopAndBottomRange = isPanelTopAndBottom && isTypeRange;\n const isTopAndBottomMonth = isPanelTopAndBottom && isMonth;\n const wrapperCls = classNames(`${prefixCls}-quick-control`, {\n [`${prefixCls}-quick-control-${type}`]: type,\n [`${prefixCls}-quick-control-${presetPosition}`]: true\n });\n const headerCls = classNames({\n [`${prefixCls}-quick-control-header`]: true\n });\n const contentWrapperCls = classNames({\n [`${prefixCls}-quick-control-${presetPosition}-content-wrapper`]: true\n });\n const contentCls = classNames({\n [`${prefixCls}-quick-control-${presetPosition}-content`]: !isTopAndBottomRange && !isTopAndBottomMonth,\n [`${prefixCls}-quick-control-${presetPosition}-range-content`]: isTopAndBottomRange,\n [`${prefixCls}-quick-control-${presetPosition}-month-content`]: isTopAndBottomMonth\n });\n const itemCls = classNames({\n [`${prefixCls}-quick-control-${presetPosition}-content-item`]: !isTopAndBottomRange && !isTopAndBottomMonth,\n [`${prefixCls}-quick-control-${presetPosition}-range-content-item`]: isTopAndBottomRange,\n [`${prefixCls}-quick-control-${presetPosition}-month-content-item`]: isTopAndBottomMonth\n });\n const ellipsisCls = classNames({\n [`${prefixCls}-quick-control-${presetPosition}-content-item-ellipsis`]: !isTopAndBottomRange && !isTopAndBottomMonth,\n [`${prefixCls}-quick-control-${presetPosition}-range-content-item-ellipsis`]: isTopAndBottomRange,\n [`${prefixCls}-quick-control-${presetPosition}-month-content-item-ellipsis`]: isTopAndBottomMonth\n });\n if (!presets.length) {\n return null;\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n className: wrapperCls,\n \"x-insetinput\": insetInput ? \"true\" : \"false\"\n }, !isPanelTopAndBottom && /*#__PURE__*/React.createElement(\"div\", {\n className: headerCls\n }, locale.presets), /*#__PURE__*/React.createElement(\"div\", {\n className: contentWrapperCls\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: contentCls\n }, presets.map((item, index) => {\n const _item = typeof item === 'function' ? item() : item;\n return /*#__PURE__*/React.createElement(Button, {\n size: \"small\",\n type: \"primary\",\n onClick: e => onPresetClick(_item, e),\n key: index\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: itemCls\n }, /*#__PURE__*/React.createElement(Text, {\n ellipsis: {\n showTooltip: true\n },\n className: ellipsisCls\n }, _item.text)));\n }))));\n }\n}\nQuickControl.propTypes = {\n presets: PropTypes.array,\n presetPosition: PropTypes.oneOf(strings.PRESET_POSITION_SET),\n onPresetClick: PropTypes.func,\n type: PropTypes.string,\n insetInput: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\n locale: PropTypes.object\n};\nQuickControl.defaultProps = {\n presets: [],\n presetPosition: 'bottom',\n onPresetClick: noop\n};\nexport default QuickControl;","import _get from \"lodash/get\";\nimport React from 'react';\nimport classnames from 'classnames';\nimport Button from '../button';\nexport default function Footer() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n prefixCls,\n locale,\n onCancelClick,\n onConfirmClick\n } = props;\n const wrapCls = classnames(`${prefixCls}-footer`);\n return /*#__PURE__*/React.createElement(\"div\", {\n className: wrapCls\n }, /*#__PURE__*/React.createElement(Button, {\n theme: \"borderless\",\n onClick: onCancelClick\n }, _get(locale, 'footer.cancel', '')), /*#__PURE__*/React.createElement(Button, {\n theme: \"solid\",\n onClick: onConfirmClick\n }, _get(locale, 'footer.confirm', '')));\n}","import _pick from \"lodash/pick\";\nimport _isEqual from \"lodash/isEqual\";\nimport _isFunction from \"lodash/isFunction\";\nimport _get from \"lodash/get\";\nimport _isDate from \"lodash/isDate\";\nimport _stubFalse from \"lodash/stubFalse\";\nimport _noop from \"lodash/noop\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\n/* eslint-disable jsx-a11y/click-events-have-key-events,jsx-a11y/interactive-supports-focus */\nimport React from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport ConfigContext from '../configProvider/context';\nimport DatePickerFoundation from '@douyinfe/semi-foundation/lib/es/datePicker/foundation';\nimport { cssClasses, strings, numbers } from '@douyinfe/semi-foundation/lib/es/datePicker/constants';\nimport { strings as popoverStrings, numbers as popoverNumbers } from '@douyinfe/semi-foundation/lib/es/popover/constants';\nimport BaseComponent from '../_base/baseComponent';\nimport Popover from '../popover/index';\nimport DateInput from './dateInput';\nimport MonthsGrid from './monthsGrid';\nimport QuickControl from './quickControl';\nimport Footer from './footer';\nimport Trigger from '../trigger';\nimport YearAndMonth from './yearAndMonth';\nimport '@douyinfe/semi-foundation/lib/es/datePicker/datePicker.css';\nimport { getDefaultPropsFromGlobalConfig } from \"../_utils\";\nexport default class DatePicker extends BaseComponent {\n constructor(props) {\n var _this;\n super(props);\n _this = this;\n this.setTriggerRef = node => this.triggerElRef.current = node;\n // Called when changes are selected by clicking on the selected date\n this.handleSelectedChange = (v, options) => this.foundation.handleSelectedChange(v, options);\n // Called when the year and month change\n this.handleYMSelectedChange = item => this.foundation.handleYMSelectedChange(item);\n this.disabledDisposeDate = function (date) {\n for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n rest[_key - 1] = arguments[_key];\n }\n return _this.foundation.disabledDisposeDate(date, ...rest);\n };\n this.disabledDisposeTime = function (date) {\n for (var _len2 = arguments.length, rest = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n rest[_key2 - 1] = arguments[_key2];\n }\n return _this.foundation.disabledDisposeTime(date, ...rest);\n };\n this.handleOpenPanel = () => this.foundation.openPanel();\n this.handleInputChange = function () {\n return _this.foundation.handleInputChange(...arguments);\n };\n this.handleInsetInputChange = options => this.foundation.handleInsetInputChange(options);\n this.handleInputComplete = v => this.foundation.handleInputComplete(v);\n this.handleInputBlur = e => this.foundation.handleInputBlur(_get(e, 'nativeEvent.target.value'), e);\n this.handleInputFocus = function () {\n return _this.foundation.handleInputFocus(...arguments);\n };\n this.handleInputClear = e => this.foundation.handleInputClear(e);\n this.handleTriggerWrapperClick = e => this.foundation.handleTriggerWrapperClick(e);\n this.handleSetRangeFocus = rangeInputFocus => this.foundation.handleSetRangeFocus(rangeInputFocus);\n this.handleRangeInputBlur = (value, e) => this.foundation.handleRangeInputBlur(value, e);\n this.handleRangeInputClear = e => this.foundation.handleRangeInputClear(e);\n this.handleRangeEndTabPress = e => this.foundation.handleRangeEndTabPress(e);\n this.isAnotherPanelHasOpened = currentRangeInput => {\n if (currentRangeInput === 'rangeStart') {\n return this.focusRecordsRef.current.rangeEnd;\n } else {\n return this.focusRecordsRef.current.rangeStart;\n }\n };\n this.handleInsetDateFocus = (e, rangeType) => {\n const monthGridFoundation = _get(this, 'monthGrid.current.foundation');\n if (monthGridFoundation) {\n monthGridFoundation.showDatePanel(strings.PANEL_TYPE_LEFT);\n monthGridFoundation.showDatePanel(strings.PANEL_TYPE_RIGHT);\n }\n this.handleInputFocus(e, rangeType);\n };\n this.handleInsetTimeFocus = () => {\n const monthGridFoundation = _get(this, 'monthGrid.current.foundation');\n if (monthGridFoundation) {\n monthGridFoundation.showTimePicker(strings.PANEL_TYPE_LEFT);\n monthGridFoundation.showTimePicker(strings.PANEL_TYPE_RIGHT);\n }\n };\n this.handlePanelVisibleChange = visible => {\n this.foundation.handlePanelVisibleChange(visible);\n };\n this.handleConfirm = e => this.foundation.handleConfirm();\n this.handleCancel = e => this.foundation.handleCancel();\n this.renderFooter = (locale, localeCode) => {\n if (this.adapter.needConfirm()) {\n return /*#__PURE__*/React.createElement(Footer, Object.assign({}, this.props, {\n locale: locale,\n localeCode: localeCode,\n onConfirmClick: this.handleConfirm,\n onCancelClick: this.handleCancel\n }));\n }\n return null;\n };\n this.renderPanel = (locale, localeCode, dateFnsLocale) => {\n const {\n dropdownClassName,\n dropdownStyle,\n density,\n topSlot,\n bottomSlot,\n presetPosition,\n type,\n leftSlot,\n rightSlot\n } = this.props;\n const wrapCls = classnames(cssClasses.PREFIX, {\n [cssClasses.PANEL_YAM]: this.adapter.typeIsYearOrMonth(),\n [`${cssClasses.PREFIX}-compact`]: density === 'compact'\n }, dropdownClassName);\n return /*#__PURE__*/React.createElement(\"div\", {\n ref: this.panelRef,\n className: wrapCls,\n style: dropdownStyle,\n \"x-type\": type\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: `${cssClasses.PREFIX}-container`\n }, leftSlot && (/*#__PURE__*/React.createElement(\"div\", {\n className: `${cssClasses.PREFIX}-leftSlot`,\n \"x-semi-prop\": \"leftSlot\"\n }, leftSlot)), /*#__PURE__*/React.createElement(\"div\", null, topSlot && (/*#__PURE__*/React.createElement(\"div\", {\n className: `${cssClasses.PREFIX}-topSlot`,\n \"x-semi-prop\": \"topSlot\"\n }, topSlot)), presetPosition === \"top\" && type !== 'monthRange' && this.renderQuickControls(), this.adapter.typeIsYearOrMonth() ? this.renderYearMonthPanel(locale, localeCode) : this.renderMonthGrid(locale, localeCode, dateFnsLocale), presetPosition === \"bottom\" && type !== 'monthRange' && this.renderQuickControls(), bottomSlot && (/*#__PURE__*/React.createElement(\"div\", {\n className: `${cssClasses.PREFIX}-bottomSlot`,\n \"x-semi-prop\": \"bottomSlot\"\n }, bottomSlot))), rightSlot && (/*#__PURE__*/React.createElement(\"div\", {\n className: `${cssClasses.PREFIX}-rightSlot`,\n \"x-semi-prop\": \"rightSlot\"\n }, rightSlot))), this.renderFooter(locale, localeCode));\n };\n this.renderYearMonthPanel = (locale, localeCode) => {\n const {\n density,\n presetPosition,\n yearAndMonthOpts,\n type,\n startYear,\n endYear\n } = this.props;\n const date = this.state.value[0];\n const year = {\n left: 0,\n right: 0\n };\n const month = {\n left: 0,\n right: 0\n };\n if (_isDate(date)) {\n year.left = date.getFullYear();\n month.left = date.getMonth() + 1;\n }\n if (type === 'monthRange') {\n const dateRight = this.state.value[1];\n if (_isDate(dateRight)) {\n year.right = dateRight.getFullYear();\n month.right = dateRight.getMonth() + 1;\n }\n }\n return /*#__PURE__*/React.createElement(YearAndMonth, {\n locale: locale,\n localeCode: localeCode,\n disabledDate: this.disabledDisposeDate,\n noBackBtn: true,\n monthCycled: true,\n onSelect: this.handleYMSelectedChange,\n currentYear: year,\n currentMonth: month,\n density: density,\n presetPosition: presetPosition,\n renderQuickControls: this.renderQuickControls(),\n renderDateInput: this.renderDateInput(),\n type: type,\n yearAndMonthOpts: yearAndMonthOpts,\n startYear: startYear,\n endYear: endYear\n });\n };\n this.wrapPopover = children => {\n const {\n panelShow\n } = this.state;\n // rtl changes the default position\n const {\n direction\n } = this.context;\n const defaultPosition = direction === 'rtl' ? 'bottomRight' : 'bottomLeft';\n const {\n motion,\n zIndex,\n position = defaultPosition,\n getPopupContainer,\n locale,\n localeCode,\n dateFnsLocale,\n stopPropagation,\n autoAdjustOverflow,\n spacing,\n dropdownMargin\n } = this.props;\n return /*#__PURE__*/React.createElement(Popover, {\n getPopupContainer: getPopupContainer,\n // wrapWhenSpecial={false}\n autoAdjustOverflow: autoAdjustOverflow,\n zIndex: zIndex,\n motion: motion,\n margin: dropdownMargin,\n content: this.renderPanel(locale, localeCode, dateFnsLocale),\n trigger: \"custom\",\n position: position,\n visible: panelShow,\n stopPropagation: stopPropagation,\n spacing: spacing,\n onVisibleChange: this.handlePanelVisibleChange\n }, children);\n };\n this.state = {\n panelShow: props.open || props.defaultOpen,\n isRange: false,\n inputValue: null,\n value: [],\n cachedSelectedValue: [],\n prevTimeZone: null,\n rangeInputFocus: undefined,\n autofocus: props.autoFocus || this.isRangeType(props.type, props.triggerRender) && (props.open || props.defaultOpen),\n insetInputValue: null,\n triggerDisabled: undefined\n };\n this.triggerElRef = /*#__PURE__*/React.createRef();\n this.panelRef = /*#__PURE__*/React.createRef();\n this.monthGrid = /*#__PURE__*/React.createRef();\n this.inputRef = /*#__PURE__*/React.createRef();\n this.rangeInputStartRef = /*#__PURE__*/React.createRef();\n this.rangeInputEndRef = /*#__PURE__*/React.createRef();\n this.focusRecordsRef = /*#__PURE__*/React.createRef();\n // @ts-ignore ignore readonly\n this.focusRecordsRef.current = {\n rangeStart: false,\n rangeEnd: false\n };\n this.foundation = new DatePickerFoundation(this.adapter);\n }\n get adapter() {\n var _this2 = this;\n return Object.assign(Object.assign({}, super.adapter), {\n togglePanel: (panelShow, cb) => {\n this.setState({\n panelShow\n }, cb);\n if (!panelShow) {\n this.focusRecordsRef.current.rangeEnd = false;\n this.focusRecordsRef.current.rangeStart = false;\n }\n },\n registerClickOutSide: () => {\n if (this.clickOutSideHandler) {\n this.adapter.unregisterClickOutSide();\n this.clickOutSideHandler = null;\n }\n this.clickOutSideHandler = e => {\n const triggerEl = this.triggerElRef && this.triggerElRef.current;\n const panelEl = this.panelRef && this.panelRef.current;\n const target = e.target;\n const path = e.composedPath && e.composedPath() || [target];\n if (!(triggerEl && triggerEl.contains(target)) && !(panelEl && panelEl.contains(target)) && !(path.includes(triggerEl) || path.includes(panelEl))) {\n this.props.onClickOutSide(e);\n if (!this.adapter.needConfirm()) {\n this.foundation.closePanel();\n }\n }\n };\n document.addEventListener('mousedown', this.clickOutSideHandler);\n },\n unregisterClickOutSide: () => {\n document.removeEventListener('mousedown', this.clickOutSideHandler);\n },\n notifyBlur: function () {\n return _this2.props.onBlur(...arguments);\n },\n notifyFocus: function () {\n return _this2.props.onFocus(...arguments);\n },\n notifyClear: function () {\n return _this2.props.onClear(...arguments);\n },\n notifyChange: function () {\n return _this2.props.onChange(...arguments);\n },\n notifyCancel: function () {\n return _this2.props.onCancel(...arguments);\n },\n notifyConfirm: function () {\n return _this2.props.onConfirm(...arguments);\n },\n notifyOpenChange: function () {\n return _this2.props.onOpenChange(...arguments);\n },\n notifyPresetsClick: function () {\n return _this2.props.onPresetClick(...arguments);\n },\n updateValue: value => this.setState({\n value\n }),\n updatePrevTimezone: prevTimeZone => this.setState({\n prevTimeZone\n }),\n updateCachedSelectedValue: cachedSelectedValue => {\n let _cachedSelectedValue = cachedSelectedValue;\n if (cachedSelectedValue && !Array.isArray(cachedSelectedValue)) {\n _cachedSelectedValue = [...cachedSelectedValue];\n }\n this.setState({\n cachedSelectedValue: _cachedSelectedValue\n });\n },\n updateInputValue: inputValue => {\n this.setState({\n inputValue\n });\n },\n updateInsetInputValue: insetInputValue => {\n const {\n insetInput\n } = this.props;\n if (insetInput && !_isEqual(insetInputValue, this.state.insetInputValue)) {\n this.setState({\n insetInputValue\n });\n }\n },\n needConfirm: () => ['dateTime', 'dateTimeRange'].includes(this.props.type) && this.props.needConfirm === true,\n typeIsYearOrMonth: () => ['month', 'year', 'monthRange'].includes(this.props.type),\n setRangeInputFocus: rangeInputFocus => {\n const {\n preventScroll\n } = this.props;\n if (rangeInputFocus !== this.state.rangeInputFocus) {\n this.setState({\n rangeInputFocus\n });\n }\n switch (rangeInputFocus) {\n case 'rangeStart':\n const inputStartNode = _get(this, 'rangeInputStartRef.current');\n inputStartNode && inputStartNode.focus({\n preventScroll\n });\n /**\n * 解决选择完startDate,切换到endDate后panel被立马关闭的问题。\n * 用户打开panel,选了startDate后,会执行setRangeInputFocus('rangeEnd'),focus到endDateInput,\n * 同时会走到datePicker/foundation.js中的handleSelectedChange方法,在这个方法里会根据focusRecordsRef来判断是否可以关闭panel。\n * 如果在setRangeInputFocus里同步修改了focusRecordsRef的状态为true,那在handleSelectedChange里会误判startDate和endDate都已经完成选择,\n * 导致endDate还没选就关闭了panel\n *\n * Fix the problem that the panel is closed immediately after switching to endDate after starting Date is selected.\n * The user opens the panel and after starting Date is selected, setRangeInputFocus ('rangeEnd') will be executed, focus to endDateInput,\n * At the same time, it will go to the handleSelectedChange method in datePicker/foundation.js, where it will be determined whether the panel can be closed according to focusRecordsRef.\n * If the status of focusRecordsRef is modified synchronously in setRangeInputFocus to true, then in handleSelectedChange it will be misjudged that both begDate and endDate have completed the selection,\n * resulting in the panel being closed before endDate is selected\n */\n setTimeout(() => {\n this.focusRecordsRef.current.rangeStart = true;\n }, 0);\n break;\n case 'rangeEnd':\n const inputEndNode = _get(this, 'rangeInputEndRef.current');\n inputEndNode && inputEndNode.focus({\n preventScroll\n });\n /**\n * 解决选择完startDate,切换到endDate后panel被立马关闭的问题。\n * 用户打开panel,选了startDate后,会执行setRangeInputFocus('rangeEnd'),focus到endDateInput,\n * 同时会走到datePicker/foundation.js中的handleSelectedChange方法,在这个方法里会根据focusRecordsRef来判断是否可以关闭panel。\n * 如果在setRangeInputFocus里同步修改了focusRecordsRef的状态为true,那在handleSelectedChange里会误判startDate和endDate都已经完成选择,\n * 导致endDate还没选就关闭了panel\n *\n * Fix the problem that the panel is closed immediately after switching to endDate after starting Date is selected.\n * The user opens the panel and after starting Date is selected, setRangeInputFocus ('rangeEnd') will be executed, focus to endDateInput,\n * At the same time, it will go to the handleSelectedChange method in datePicker/foundation.js, where it will be determined whether the panel can be closed according to focusRecordsRef.\n * If the status of focusRecordsRef is modified synchronously in setRangeInputFocus to true, then in handleSelectedChange it will be misjudged that both begDate and endDate have completed the selection,\n * resulting in the panel being closed before endDate is selected\n */\n setTimeout(() => {\n this.focusRecordsRef.current.rangeEnd = true;\n }, 0);\n break;\n default:\n return;\n }\n },\n couldPanelClosed: () => this.focusRecordsRef.current.rangeStart && this.focusRecordsRef.current.rangeEnd,\n isEventTarget: e => e && e.target === e.currentTarget,\n setInsetInputFocus: () => {\n const {\n preventScroll\n } = this.props;\n const {\n rangeInputFocus\n } = this.state;\n switch (rangeInputFocus) {\n case 'rangeEnd':\n if (document.activeElement !== this.rangeInputEndRef.current) {\n const inputEndNode = _get(this, 'rangeInputEndRef.current');\n inputEndNode && inputEndNode.focus({\n preventScroll\n });\n }\n break;\n case 'rangeStart':\n default:\n if (document.activeElement !== this.rangeInputStartRef.current) {\n const inputStartNode = _get(this, 'rangeInputStartRef.current');\n inputStartNode && inputStartNode.focus({\n preventScroll\n });\n }\n break;\n }\n },\n setInputFocus: () => {\n const {\n preventScroll\n } = this.props;\n const inputNode = _get(this, 'inputRef.current');\n inputNode && inputNode.focus({\n preventScroll\n });\n },\n setInputBlur: () => {\n const inputNode = _get(this, 'inputRef.current');\n inputNode && inputNode.blur();\n },\n setRangeInputBlur: () => {\n const {\n rangeInputFocus\n } = this.state;\n if (rangeInputFocus === 'rangeStart') {\n const inputStartNode = _get(this, 'rangeInputStartRef.current');\n inputStartNode && inputStartNode.blur();\n } else if (rangeInputFocus === 'rangeEnd') {\n const inputEndNode = _get(this, 'rangeInputEndRef.current');\n inputEndNode && inputEndNode.blur();\n }\n this.adapter.setRangeInputFocus(false);\n },\n setTriggerDisabled: disabled => {\n this.setState({\n triggerDisabled: disabled\n });\n }\n });\n }\n isRangeType(type, triggerRender) {\n return /range/i.test(type) && !_isFunction(triggerRender);\n }\n componentDidUpdate(prevProps) {\n if (!_isEqual(prevProps.value, this.props.value)) {\n this.foundation.initFromProps(Object.assign({}, this.props));\n } else if (this.props.timeZone !== prevProps.timeZone) {\n this.foundation.initFromProps({\n value: this.state.value,\n timeZone: this.props.timeZone,\n prevTimeZone: prevProps.timeZone\n });\n }\n if (prevProps.open !== this.props.open) {\n this.foundation.initPanelOpenStatus();\n if (!this.props.open) {\n this.foundation.clearRangeInputFocus();\n }\n }\n }\n componentDidMount() {\n this._mounted = true;\n super.componentDidMount();\n }\n componentWillUnmount() {\n this._mounted = false;\n super.componentWillUnmount();\n }\n open() {\n this.foundation.open();\n }\n close() {\n this.foundation.close();\n }\n /**\n *\n * When selecting a range, the default focus is on the start input box, passing in `rangeEnd` can focus on the end input box\n *\n * When `insetInput` is `true`, due to trigger disabled, the cursor will focus on the input box of the popup layer panel\n *\n * 范围选择时,默认聚焦在开始输入框,传入 `rangeEnd` 可以聚焦在结束输入框\n *\n * `insetInput` 打开时,由于 trigger 禁用,会把焦点放在弹出面板的输入框上\n */\n focus(focusType) {\n this.foundation.focus(focusType);\n }\n blur() {\n this.foundation.blur();\n }\n renderMonthGrid(locale, localeCode, dateFnsLocale) {\n const {\n type,\n multiple,\n max,\n weekStartsOn,\n timePickerOpts,\n defaultPickerValue,\n format,\n hideDisabledOptions,\n disabledTimePicker,\n renderDate,\n renderFullDate,\n startDateOffset,\n endDateOffset,\n autoSwitchDate,\n density,\n syncSwitchMonth,\n onPanelChange,\n timeZone,\n triggerRender,\n insetInput,\n presetPosition,\n yearAndMonthOpts,\n startYear,\n endYear\n } = this.props;\n const {\n cachedSelectedValue,\n rangeInputFocus\n } = this.state;\n const defaultValue = cachedSelectedValue;\n return /*#__PURE__*/React.createElement(MonthsGrid, {\n ref: this.monthGrid,\n locale: locale,\n localeCode: localeCode,\n dateFnsLocale: dateFnsLocale,\n weekStartsOn: weekStartsOn,\n type: type,\n multiple: multiple,\n max: max,\n format: format,\n disabledDate: this.disabledDisposeDate,\n hideDisabledOptions: hideDisabledOptions,\n disabledTimePicker: disabledTimePicker,\n disabledTime: this.disabledDisposeTime,\n defaultValue: defaultValue,\n defaultPickerValue: defaultPickerValue,\n timePickerOpts: timePickerOpts,\n isControlledComponent: !this.adapter.needConfirm() && this.isControlled('value'),\n onChange: this.handleSelectedChange,\n renderDate: renderDate,\n renderFullDate: renderFullDate,\n startDateOffset: startDateOffset,\n endDateOffset: endDateOffset,\n autoSwitchDate: autoSwitchDate,\n density: density,\n rangeInputFocus: rangeInputFocus,\n setRangeInputFocus: this.handleSetRangeFocus,\n isAnotherPanelHasOpened: this.isAnotherPanelHasOpened,\n syncSwitchMonth: syncSwitchMonth,\n onPanelChange: onPanelChange,\n timeZone: timeZone,\n focusRecordsRef: this.focusRecordsRef,\n triggerRender: triggerRender,\n insetInput: insetInput,\n presetPosition: presetPosition,\n renderQuickControls: this.renderQuickControls(),\n renderDateInput: this.renderDateInput(),\n yearAndMonthOpts: yearAndMonthOpts,\n startYear: startYear,\n endYear: endYear\n });\n }\n renderQuickControls() {\n const {\n presets,\n type,\n presetPosition,\n insetInput,\n locale\n } = this.props;\n return /*#__PURE__*/React.createElement(QuickControl, {\n type: type,\n presets: presets,\n insetInput: insetInput,\n presetPosition: presetPosition,\n onPresetClick: (item, e) => this.foundation.handlePresetClick(item, e),\n locale: locale\n });\n }\n renderDateInput() {\n const {\n insetInput,\n dateFnsLocale,\n density,\n type,\n format,\n rangeSeparator,\n defaultPickerValue\n } = this.props;\n const {\n insetInputValue,\n value\n } = this.state;\n const props = {\n dateFnsLocale,\n format,\n insetInputValue,\n rangeSeparator,\n type,\n value: value,\n handleInsetDateFocus: this.handleInsetDateFocus,\n handleInsetTimeFocus: this.handleInsetTimeFocus,\n onInsetInputChange: this.handleInsetInputChange,\n rangeInputStartRef: this.rangeInputStartRef,\n rangeInputEndRef: this.rangeInputEndRef,\n density,\n defaultPickerValue\n };\n return insetInput ? /*#__PURE__*/React.createElement(DateInput, Object.assign({}, props, {\n insetInput: insetInput\n })) : null;\n }\n renderInner(extraProps) {\n const {\n clearIcon,\n type,\n format,\n multiple,\n disabled,\n showClear,\n insetLabel,\n insetLabelId,\n placeholder,\n validateStatus,\n inputStyle,\n prefix,\n locale,\n dateFnsLocale,\n triggerRender,\n size,\n inputReadOnly,\n rangeSeparator,\n insetInput,\n defaultPickerValue,\n borderless\n } = this.props;\n const {\n value,\n inputValue,\n rangeInputFocus,\n triggerDisabled\n } = this.state;\n // This class is not needed when triggerRender is function\n const isRangeType = this.isRangeType(type, triggerRender);\n const inputDisabled = disabled || insetInput && triggerDisabled;\n const inputCls = classnames(`${cssClasses.PREFIX}-input`, {\n [`${cssClasses.PREFIX}-range-input`]: isRangeType,\n [`${cssClasses.PREFIX}-range-input-${size}`]: isRangeType && size,\n [`${cssClasses.PREFIX}-range-input-active`]: isRangeType && rangeInputFocus && !inputDisabled,\n [`${cssClasses.PREFIX}-range-input-disabled`]: isRangeType && inputDisabled,\n [`${cssClasses.PREFIX}-range-input-${validateStatus}`]: isRangeType && validateStatus,\n [`${cssClasses.PREFIX}-borderless`]: borderless\n });\n const phText = placeholder || locale.placeholder[type]; // i18n\n // These values should be passed to triggerRender, do not delete any key if it is not necessary\n const props = Object.assign(Object.assign({}, extraProps), {\n showClearIgnoreDisabled: Boolean(insetInput),\n placeholder: phText,\n clearIcon,\n disabled: inputDisabled,\n inputValue,\n value: value,\n defaultPickerValue,\n onChange: this.handleInputChange,\n onEnterPress: this.handleInputComplete,\n // TODO: remove in next major version\n block: true,\n inputStyle,\n showClear,\n insetLabel,\n insetLabelId,\n type,\n format,\n multiple,\n validateStatus,\n inputReadOnly: inputReadOnly || Boolean(insetInput),\n // onClick: this.handleOpenPanel,\n onBlur: this.handleInputBlur,\n onFocus: this.handleInputFocus,\n onClear: this.handleInputClear,\n prefix,\n size,\n autofocus: this.state.autofocus,\n dateFnsLocale,\n rangeInputFocus,\n rangeSeparator,\n onRangeBlur: this.handleRangeInputBlur,\n onRangeClear: this.handleRangeInputClear,\n onRangeEndTabPress: this.handleRangeEndTabPress,\n rangeInputStartRef: insetInput ? null : this.rangeInputStartRef,\n rangeInputEndRef: insetInput ? null : this.rangeInputEndRef,\n inputRef: this.inputRef\n });\n return /*#__PURE__*/React.createElement(\"div\", {\n // tooltip will mount a11y props to children\n // eslint-disable-next-line jsx-a11y/role-has-required-aria-props\n role: \"combobox\",\n \"aria-label\": Array.isArray(value) && value.length ? \"Change date\" : \"Choose date\",\n \"aria-disabled\": disabled,\n onClick: this.handleTriggerWrapperClick,\n className: inputCls\n }, typeof triggerRender === 'function' ? (/*#__PURE__*/React.createElement(Trigger, Object.assign({}, props, {\n triggerRender: triggerRender,\n componentName: \"DatePicker\",\n componentProps: Object.assign({}, this.props)\n }))) : (/*#__PURE__*/React.createElement(DateInput, Object.assign({}, props))));\n }\n render() {\n const _a = this.props,\n {\n style,\n className,\n prefixCls,\n type\n } = _a,\n rest = __rest(_a, [\"style\", \"className\", \"prefixCls\", \"type\"]);\n const outerProps = Object.assign({\n style,\n className: classnames(className, {\n [prefixCls]: true\n }),\n ref: this.setTriggerRef,\n 'aria-invalid': this.props['aria-invalid'],\n 'aria-errormessage': this.props['aria-errormessage'],\n 'aria-labelledby': this.props['aria-labelledby'],\n 'aria-describedby': this.props['aria-describedby'],\n 'aria-required': this.props['aria-required']\n }, this.getDataAttr(rest));\n const innerPropKeys = [];\n if (!type.toLowerCase().includes(\"range\")) {\n innerPropKeys.push(\"borderless\");\n }\n const inner = this.renderInner(_pick(this.props, innerPropKeys));\n const wrappedInner = this.wrapPopover(inner);\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({}, outerProps), wrappedInner);\n }\n}\nDatePicker.contextType = ConfigContext;\nDatePicker.propTypes = {\n 'aria-describedby': PropTypes.string,\n 'aria-errormessage': PropTypes.string,\n 'aria-invalid': PropTypes.bool,\n 'aria-labelledby': PropTypes.string,\n 'aria-required': PropTypes.bool,\n borderless: PropTypes.bool,\n type: PropTypes.oneOf(strings.TYPE_SET),\n size: PropTypes.oneOf(strings.SIZE_SET),\n clearIcon: PropTypes.node,\n density: PropTypes.oneOf(strings.DENSITY_SET),\n defaultValue: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.object, PropTypes.array]),\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.object, PropTypes.array]),\n defaultPickerValue: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.object, PropTypes.array]),\n disabledTime: PropTypes.func,\n disabledTimePicker: PropTypes.bool,\n hideDisabledOptions: PropTypes.bool,\n format: PropTypes.string,\n disabled: PropTypes.bool,\n multiple: PropTypes.bool,\n max: PropTypes.number,\n placeholder: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n presets: PropTypes.array,\n presetPosition: PropTypes.oneOf(strings.PRESET_POSITION_SET),\n onChange: PropTypes.func,\n onChangeWithDateFirst: PropTypes.bool,\n weekStartsOn: PropTypes.number,\n disabledDate: PropTypes.func,\n timePickerOpts: PropTypes.object,\n showClear: PropTypes.bool,\n onOpenChange: PropTypes.func,\n open: PropTypes.bool,\n defaultOpen: PropTypes.bool,\n motion: PropTypes.oneOfType([PropTypes.bool, PropTypes.func, PropTypes.object]),\n className: PropTypes.string,\n prefixCls: PropTypes.string,\n prefix: PropTypes.node,\n insetLabel: PropTypes.node,\n insetLabelId: PropTypes.string,\n zIndex: PropTypes.number,\n position: PropTypes.oneOf(popoverStrings.POSITION_SET),\n getPopupContainer: PropTypes.func,\n onCancel: PropTypes.func,\n onConfirm: PropTypes.func,\n needConfirm: PropTypes.bool,\n inputStyle: PropTypes.object,\n timeZone: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n triggerRender: PropTypes.func,\n stopPropagation: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n autoAdjustOverflow: PropTypes.bool,\n onBlur: PropTypes.func,\n onFocus: PropTypes.func,\n onClear: PropTypes.func,\n style: PropTypes.object,\n autoFocus: PropTypes.bool,\n inputReadOnly: PropTypes.bool,\n validateStatus: PropTypes.oneOf(strings.STATUS),\n renderDate: PropTypes.func,\n renderFullDate: PropTypes.func,\n spacing: PropTypes.oneOfType([PropTypes.number, PropTypes.object]),\n startDateOffset: PropTypes.func,\n endDateOffset: PropTypes.func,\n autoSwitchDate: PropTypes.bool,\n dropdownClassName: PropTypes.string,\n dropdownStyle: PropTypes.object,\n dropdownMargin: PropTypes.oneOfType([PropTypes.number, PropTypes.object]),\n topSlot: PropTypes.node,\n bottomSlot: PropTypes.node,\n dateFnsLocale: PropTypes.object,\n // Support synchronous switching of months\n syncSwitchMonth: PropTypes.bool,\n // Callback function for panel date switching\n onPanelChange: PropTypes.func,\n rangeSeparator: PropTypes.string,\n preventScroll: PropTypes.bool,\n yearAndMonthOpts: PropTypes.object,\n onClickOutSide: PropTypes.func\n};\nDatePicker.__SemiComponentName__ = \"DatePicker\";\nDatePicker.defaultProps = getDefaultPropsFromGlobalConfig(DatePicker.__SemiComponentName__, {\n onChangeWithDateFirst: true,\n borderless: false,\n autoAdjustOverflow: true,\n stopPropagation: true,\n motion: true,\n prefixCls: cssClasses.PREFIX,\n presetPosition: 'bottom',\n // position: 'bottomLeft',\n zIndex: popoverNumbers.DEFAULT_Z_INDEX,\n type: 'date',\n size: 'default',\n density: 'default',\n multiple: false,\n defaultOpen: false,\n disabledHours: _noop,\n disabledMinutes: _noop,\n disabledSeconds: _noop,\n hideDisabledOptions: false,\n onBlur: _noop,\n onFocus: _noop,\n onClear: _noop,\n onCancel: _noop,\n onConfirm: _noop,\n onChange: _noop,\n onOpenChange: _noop,\n onPanelChange: _noop,\n onPresetClick: _noop,\n weekStartsOn: numbers.WEEK_START_ON,\n disabledDate: _stubFalse,\n disabledTime: _stubFalse,\n inputReadOnly: false,\n spacing: numbers.SPACING,\n autoSwitchDate: true,\n syncSwitchMonth: false,\n rangeSeparator: strings.DEFAULT_SEPARATOR_RANGE,\n insetInput: false,\n onClickOutSide: _noop\n});","import React from 'react';\nimport { forwardStatics } from '@douyinfe/semi-foundation/lib/es/utils/object';\nimport { numbers, strings } from '@douyinfe/semi-foundation/lib/es/datePicker/constants';\nimport DatePicker from './datePicker';\nimport ConfigContext from '../configProvider/context';\nimport LocaleConsumer from '../locale/localeConsumer';\nexport default forwardStatics(/*#__PURE__*/React.forwardRef((props, ref) => {\n const propsObj = Object.assign({}, props);\n const {\n type,\n format,\n rangeSeparator\n } = propsObj;\n if (typeof format === 'string' && format) {\n if (!/[Hhms]+/.test(format)) {\n if (type === 'dateTime') {\n propsObj.type = 'date';\n } else if (type === 'dateTimeRange') {\n propsObj.type = 'dateRange';\n }\n }\n }\n // Add spaces at both ends to prevent conflicts with characters in the date when separating\n if (rangeSeparator && typeof rangeSeparator === 'string') {\n propsObj.rangeSeparator = ` ${rangeSeparator.trim()} `;\n }\n if (propsObj.insetInput) {\n if (!propsObj.position) {\n propsObj.position = strings.POSITION_INLINE_INPUT;\n }\n /**\n * When insetInput is `true` and `position` includes `over`, use 1px `spacing` to solve the problem of border-radius leakage in the upper left corner\n *\n * @see https://user-images.githubusercontent.com/26477537/158817185-126a5f33-41f7-414a-8e36-8d1be2dda5cd.png\n */\n if (propsObj.position.includes('Over') && !propsObj.spacing) {\n propsObj.spacing = numbers.SPACING_INSET_INPUT;\n }\n }\n return /*#__PURE__*/React.createElement(ConfigContext.Consumer, null, _ref => {\n let {\n timeZone\n } = _ref;\n return /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: 'DatePicker'\n }, (locale, localeCode, dateFnsLocale) => (/*#__PURE__*/React.createElement(DatePicker, Object.assign({\n timeZone: timeZone,\n localeCode: localeCode,\n locale: locale,\n dateFnsLocale: dateFnsLocale\n }, propsObj, {\n ref: ref\n }))));\n });\n}), DatePicker);","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-descriptions`\n};\nconst strings = {\n ALIGN_SET: ['left', 'justify', 'plain', 'center'],\n SIZE_SET: ['small', 'medium', 'large'],\n LAYOUT_SET: ['horizontal', 'vertical']\n};\nconst numbers = {};\nexport { cssClasses, strings, numbers };","import React from 'react';\nconst DescriptionsContext = /*#__PURE__*/React.createContext(null);\nexport default DescriptionsContext;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/descriptions/constants';\nimport '@douyinfe/semi-foundation/lib/es/descriptions/descriptions.css';\nimport getDataAttr from '@douyinfe/semi-foundation/lib/es/utils/getDataAttr';\nimport DescriptionsContext from './descriptions-context';\nconst prefixCls = cssClasses.PREFIX;\nconst keyCls = `${prefixCls}-key`;\nconst valCls = `${prefixCls}-value`;\nexport default class Item extends PureComponent {\n render() {\n const _a = this.props,\n {\n itemKey,\n hidden,\n className,\n span,\n style,\n children\n } = _a,\n rest = __rest(_a, [\"itemKey\", \"hidden\", \"className\", \"span\", \"style\", \"children\"]);\n const {\n align,\n layout\n } = this.context;\n if (hidden) {\n return null;\n }\n const plainItem = /*#__PURE__*/React.createElement(\"td\", {\n className: `${prefixCls}-item`,\n colSpan: span || 1\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: keyCls\n }, itemKey, \":\"), /*#__PURE__*/React.createElement(\"span\", {\n className: valCls\n }, typeof children === 'function' ? children() : children));\n const alignItem = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"th\", {\n className: `${prefixCls}-item ${prefixCls}-item-th`\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: keyCls\n }, itemKey)), /*#__PURE__*/React.createElement(\"td\", {\n className: `${prefixCls}-item ${prefixCls}-item-td`,\n colSpan: span ? span * 2 - 1 : 1\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: valCls\n }, typeof children === 'function' ? children() : children)));\n const item = align === 'plain' ? (/*#__PURE__*/React.createElement(\"tr\", Object.assign({\n className: className,\n style: style\n }, getDataAttr(rest)), plainItem)) : (/*#__PURE__*/React.createElement(\"tr\", Object.assign({\n className: className,\n style: style\n }, getDataAttr(rest)), alignItem));\n const horizontalItem = align === 'plain' ? plainItem : alignItem;\n return layout === 'horizontal' ? horizontalItem : item;\n }\n}\nItem.propTypes = {\n itemKey: PropTypes.node,\n hidden: PropTypes.bool,\n className: PropTypes.string,\n style: PropTypes.object\n};\nItem.contextType = DescriptionsContext;","import BaseFoundation from '../base/foundation';\nexport default class DescriptionsFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n }\n getHorizontalList() {\n const {\n column,\n data,\n children\n } = this.getProps();\n const columns = this._adapter.getColumns();\n const horizontalList = [];\n const curSpan = {\n totalSpan: 0,\n itemList: []\n };\n for (const item of columns) {\n curSpan.totalSpan += item.span || 1;\n curSpan.itemList.push(item);\n if (curSpan.totalSpan >= column) {\n horizontalList.push(curSpan.itemList);\n curSpan.itemList = [];\n curSpan.totalSpan = 0;\n }\n }\n if (curSpan.itemList.length != 0) {\n const lastSpan = curSpan.itemList[curSpan.itemList.length - 1];\n if (isNaN(lastSpan.span)) {\n let total = 0;\n curSpan.itemList.forEach(item => {\n return total += !isNaN(item.span) ? item.span : 1;\n });\n if (total < column) {\n lastSpan.span = column - total + 1;\n }\n }\n horizontalList.push(curSpan.itemList);\n }\n return horizontalList;\n }\n}","import _isPlainObject from \"lodash/isPlainObject\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { isValidElement } from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport { strings, cssClasses } from '@douyinfe/semi-foundation/lib/es/descriptions/constants';\nimport '@douyinfe/semi-foundation/lib/es/descriptions/descriptions.css';\nimport getDataAttr from '@douyinfe/semi-foundation/lib/es/utils/getDataAttr';\nimport DescriptionsContext from './descriptions-context';\nimport Item from './item';\nimport DescriptionsFoundation from '@douyinfe/semi-foundation/lib/es/descriptions/foundation';\nimport BaseComponent from '../_base/baseComponent';\nconst prefixCls = cssClasses.PREFIX;\nclass Descriptions extends BaseComponent {\n constructor(props) {\n super(props);\n this.renderChildrenList = () => {\n const props = this.props;\n const {\n layout,\n data,\n children\n } = props;\n if (layout === 'horizontal') {\n const horizontalList = this.foundation.getHorizontalList();\n return horizontalList.map((row, index) => {\n return /*#__PURE__*/React.createElement(\"tr\", {\n key: index\n }, row.map((item, itemIndex) => _isPlainObject(item) ? /*#__PURE__*/React.createElement(Item, Object.assign({\n itemKey: item.key\n }, item, {\n key: index + '-' + itemIndex\n }), item.value) : null));\n });\n } else {\n return data && data.length ? data.map((item, index) => _isPlainObject(item) ? /*#__PURE__*/React.createElement(Item, Object.assign({\n itemKey: item.key\n }, item, {\n key: index\n }), item.value) : null) : children;\n }\n };\n this.foundation = new DescriptionsFoundation(this.adapter);\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n getColumns: () => {\n var _a, _b;\n if ((_a = this.props.data) === null || _a === void 0 ? void 0 : _a.length) {\n return this.props.data;\n }\n if (this.props.children) {\n return (_b = React.Children.toArray(this.props.children)) === null || _b === void 0 ? void 0 : _b.map(item => {\n return /*#__PURE__*/isValidElement(item) ? Object.assign({\n value: item.props.children\n }, item.props) : [];\n });\n }\n return [];\n }\n });\n }\n render() {\n const _a = this.props,\n {\n align,\n row,\n size,\n className,\n style,\n children,\n data,\n layout\n } = _a,\n rest = __rest(_a, [\"align\", \"row\", \"size\", \"className\", \"style\", \"children\", \"data\", \"layout\"]);\n const classNames = cls(prefixCls, className, {\n [`${prefixCls}-${align}`]: !row,\n [`${prefixCls}-double`]: row,\n [`${prefixCls}-double-${size}`]: row,\n [`${prefixCls}-horizontal`]: layout === 'horizontal',\n [`${prefixCls}-vertical`]: layout === 'vertical'\n });\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n className: classNames,\n style: style\n }, getDataAttr(rest)), /*#__PURE__*/React.createElement(\"table\", null, /*#__PURE__*/React.createElement(\"tbody\", null, /*#__PURE__*/React.createElement(DescriptionsContext.Provider, {\n value: {\n align,\n layout\n }\n }, this.renderChildrenList()))));\n }\n}\nDescriptions.Item = Item;\nDescriptions.contextType = DescriptionsContext;\nDescriptions.propTypes = {\n align: PropTypes.oneOf(strings.ALIGN_SET),\n row: PropTypes.bool,\n size: PropTypes.oneOf(strings.SIZE_SET),\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.arrayOf(PropTypes.shape({\n key: PropTypes.node,\n value: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n hidden: PropTypes.bool,\n className: PropTypes.string,\n style: PropTypes.object\n })),\n layout: PropTypes.oneOf(strings.LAYOUT_SET),\n column: PropTypes.number\n};\nDescriptions.defaultProps = {\n align: 'center',\n row: false,\n size: 'medium',\n data: [],\n layout: 'vertical',\n column: 3\n};\nexport default Descriptions;","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}`\n};\nconst strings = {\n LAYOUT: ['vertical', 'horizontal']\n};\nexport { cssClasses, strings };","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport cls from 'classnames';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/divider/constants';\nimport '@douyinfe/semi-foundation/lib/es/divider/divider.css';\nconst prefixCls = cssClasses.PREFIX;\nconst Divider = props => {\n const {\n layout = 'horizontal',\n dashed,\n align = 'center',\n className,\n margin,\n style,\n children\n } = props,\n rest = __rest(props, [\"layout\", \"dashed\", \"align\", \"className\", \"margin\", \"style\", \"children\"]);\n const dividerClassNames = cls(`${prefixCls}-divider`, className, {\n [`${prefixCls}-divider-horizontal`]: layout === 'horizontal',\n [`${prefixCls}-divider-vertical`]: layout === 'vertical',\n [`${prefixCls}-divider-dashed`]: !!dashed,\n [`${prefixCls}-divider-with-text`]: children && layout === 'horizontal',\n [`${prefixCls}-divider-with-text-${align}`]: children && layout === 'horizontal'\n });\n let overrideDefaultStyle = {};\n if (margin !== undefined) {\n if (layout === 'vertical') {\n overrideDefaultStyle = {\n 'marginLeft': margin,\n 'marginRight': margin\n };\n } else if (layout === 'horizontal') {\n overrideDefaultStyle = {\n 'marginTop': margin,\n 'marginBottom': margin\n };\n }\n }\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({}, rest, {\n className: dividerClassNames,\n style: Object.assign(Object.assign({}, overrideDefaultStyle), style)\n }), children && layout === 'horizontal' ? typeof children === 'string' ? (/*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixCls}-divider_inner-text`,\n \"x-semi-prop\": \"children\"\n }, children)) : children : null);\n};\nexport default Divider;","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n DIALOG: `${BASE_CLASS_PREFIX}-modal`\n};\nconst strings = {\n cancelKey: 'cancel',\n confirmKey: 'confirm',\n SIZE: ['small', 'medium', 'large', 'full-width'],\n directions: ['ltr', 'rtl']\n};\nexport { cssClasses, strings };","import isObject from './isObject';\nexport default function isPromise(value) {\n return isObject(value) && typeof value.then === 'function';\n}","export default function isObject(obj) {\n return obj !== null && typeof obj === 'object';\n}","import BaseFoundation from '../base/foundation';\nimport isPromise from \"../utils/isPromise\";\nexport default class ModalFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n // afterClose() {\n // this._adapter.notifyClose();\n // }\n this.toggleDisplayNone = (displayNone, callback) => {\n this._adapter.toggleDisplayNone(displayNone, callback);\n };\n }\n destroy() {\n this.afterHide();\n }\n handleCancel(e) {\n var _a;\n const result = this._adapter.notifyCancel(e);\n if (isPromise(result)) {\n this._adapter.setState({\n onCancelReturnPromiseStatus: \"pending\"\n });\n (_a = result === null || result === void 0 ? void 0 : result.then(() => {\n this._adapter.setState({\n onCancelReturnPromiseStatus: \"fulfilled\"\n });\n })) === null || _a === void 0 ? void 0 : _a.catch(e => {\n this._adapter.setState({\n onCancelReturnPromiseStatus: \"rejected\"\n });\n throw e;\n });\n }\n }\n handleOk(e) {\n var _a;\n const result = this._adapter.notifyOk(e);\n if (isPromise(result)) {\n this._adapter.setState({\n onOKReturnPromiseStatus: \"pending\"\n });\n (_a = result === null || result === void 0 ? void 0 : result.then(() => {\n this._adapter.setState({\n onOKReturnPromiseStatus: \"fulfilled\"\n });\n })) === null || _a === void 0 ? void 0 : _a.catch(e => {\n this._adapter.setState({\n onOKReturnPromiseStatus: \"rejected\"\n });\n throw e;\n });\n }\n }\n beforeShow() {\n this._adapter.disabledBodyScroll();\n }\n afterHide() {\n this._adapter.enabledBodyScroll();\n this._adapter.notifyClose();\n }\n enabledBodyScroll() {\n this._adapter.enabledBodyScroll();\n }\n}","import BaseFoundation from '../base/foundation';\nimport KeyCode from '../utils/keyCode';\nexport default class ModalContentFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign(Object.assign({}, ModalContentFoundation.defaultAdapter), adapter));\n this.handleKeyDown = e => {\n const {\n closeOnEsc\n } = this.getProps();\n if (closeOnEsc && e.keyCode === KeyCode.ESC) {\n e.stopPropagation();\n this.close(e);\n return;\n }\n };\n }\n destroy() {\n this.handleKeyDownEventListenerUnmount();\n this.modalDialogBlur();\n this.prevFocusElementReFocus();\n }\n handleDialogMouseDown() {\n this._adapter.notifyDialogMouseDown();\n }\n handleMaskMouseUp() {\n this._adapter.notifyDialogMouseUp();\n }\n handleKeyDownEventListenerMount() {\n this._adapter.addKeyDownEventListener();\n }\n handleKeyDownEventListenerUnmount() {\n this._adapter.removeKeyDownEventListener();\n }\n getMouseState() {\n this._adapter.getMouseState();\n }\n handleMaskClick(e) {\n const {\n dialogMouseDown\n } = this.getStates();\n if (e.target === e.currentTarget && !dialogMouseDown) {\n this.close(e);\n }\n }\n close(e) {\n this._adapter.notifyClose(e);\n }\n modalDialogFocus() {\n this._adapter.modalDialogFocus();\n }\n modalDialogBlur() {\n this._adapter.modalDialogBlur();\n }\n prevFocusElementReFocus() {\n this._adapter.prevFocusElementReFocus();\n }\n}","import _without from \"lodash/without\";\nimport { isHTMLElement } from \"./dom\";\n/*\n* Usage:\n* // Eg1: Pass a dom as the tab tarp container.\n* const handle = new FocusTrapHandle(container, { enable: true });\n*\n* // Eg2: The focus redirect listener will be triggered when user pressed tab whiling last focusable dom is focusing in trap dom, return false to cancel redirect and use the browser normal tab focus index.\n* handle.addFocusRedirectListener((e)=>{\n* return true; // return false to prevent redirect on target DOM;\n* });\n*\n* // Eg3: Set it to false in order to disable tab tarp at any moment;\n* handle.enable = true;\n*\n* // Eg4: Destroy instance when component is unmounting for saving resource;\n* handle.destroy();\n*\n* */\nclass FocusTrapHandle {\n constructor(container, options) {\n var _a;\n this.addFocusRedirectListener = listener => {\n this.focusRedirectListenerList.push(listener);\n return () => this.removeFocusRedirectListener(listener);\n };\n this.removeFocusRedirectListener = listener => {\n this.focusRedirectListenerList = _without(this.focusRedirectListenerList, listener);\n };\n this.destroy = () => {\n var _a;\n (_a = this.container) === null || _a === void 0 ? void 0 : _a.removeEventListener('keydown', this.onKeyPress);\n };\n // ---- private func ----\n this.shouldFocusRedirect = element => {\n if (!this.enable) {\n return false;\n }\n for (const listener of this.focusRedirectListenerList) {\n const should = listener(element);\n if (!should) {\n return false;\n }\n }\n return true;\n };\n this.focusElement = (element, event) => {\n const {\n preventScroll\n } = this.options;\n element === null || element === void 0 ? void 0 : element.focus({\n preventScroll\n });\n event.preventDefault(); // prevent browser default tab move behavior\n };\n this.onKeyPress = event => {\n if (event && event.key === 'Tab') {\n const focusableElements = FocusTrapHandle.getFocusableElements(this.container);\n const focusableNum = focusableElements.length;\n if (focusableNum) {\n // Shift + Tab will move focus backward\n if (event.shiftKey) {\n this.handleContainerShiftTabKeyDown(focusableElements, event);\n } else {\n this.handleContainerTabKeyDown(focusableElements, event);\n }\n }\n }\n };\n this.handleContainerTabKeyDown = (focusableElements, event) => {\n const activeElement = FocusTrapHandle.getActiveElement();\n const isLastCurrentFocus = focusableElements[focusableElements.length - 1] === activeElement;\n const redirectForcingElement = focusableElements[0];\n if (isLastCurrentFocus && this.shouldFocusRedirect(redirectForcingElement)) {\n this.focusElement(redirectForcingElement, event);\n }\n };\n this.handleContainerShiftTabKeyDown = (focusableElements, event) => {\n const activeElement = FocusTrapHandle.getActiveElement();\n const isFirstCurrentFocus = focusableElements[0] === activeElement;\n const redirectForcingElement = focusableElements[focusableElements.length - 1];\n if (isFirstCurrentFocus && this.shouldFocusRedirect(redirectForcingElement)) {\n this.focusElement(redirectForcingElement, event);\n }\n };\n Object.freeze(options); // prevent user to change options after init;\n this.container = container;\n this.options = options;\n this.enable = (_a = options === null || options === void 0 ? void 0 : options.enable) !== null && _a !== void 0 ? _a : true;\n this.focusRedirectListenerList = (() => {\n if (options === null || options === void 0 ? void 0 : options.onFocusRedirectListener) {\n return Array.isArray(options.onFocusRedirectListener) ? [...options.onFocusRedirectListener] : [options.onFocusRedirectListener];\n } else {\n return [];\n }\n })();\n this.container.addEventListener('keydown', this.onKeyPress);\n }\n get enable() {\n return this._enable;\n }\n set enable(value) {\n this._enable = value;\n }\n // ---- static func ----\n static getFocusableElements(node) {\n if (!isHTMLElement(node)) {\n return [];\n }\n const focusableSelectorsList = [\"input:not([disabled]):not([tabindex='-1'])\", \"textarea:not([disabled]):not([tabindex='-1'])\", \"button:not([disabled]):not([tabindex='-1'])\", \"a[href]:not([tabindex='-1'])\", \"select:not([disabled]):not([tabindex='-1'])\", \"area[href]:not([tabindex='-1'])\", \"iframe:not([tabindex='-1'])\", \"object:not([tabindex='-1'])\", \"*[tabindex]:not([tabindex='-1'])\", \"*[contenteditable]:not([tabindex='-1'])\"];\n const focusableSelectorsStr = focusableSelectorsList.join(',');\n // we are not filtered elements which are invisible\n return Array.from(node.querySelectorAll(focusableSelectorsStr));\n }\n static getActiveElement() {\n return document ? document.activeElement : null;\n }\n}\nexport default FocusTrapHandle;","import _noop from \"lodash/noop\";\nimport _isFunction from \"lodash/isFunction\";\nimport _get from \"lodash/get\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport cls from 'classnames';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/modal/constants';\nimport ConfigContext from '../configProvider/context';\nimport Button from '../iconButton';\nimport Typography from '../typography';\nimport BaseComponent from '../_base/baseComponent';\nimport ModalContentFoundation from '@douyinfe/semi-foundation/lib/es/modal/modalContentFoundation';\nimport { IconClose } from '@douyinfe/semi-icons';\nimport FocusTrapHandle from '@douyinfe/semi-foundation/lib/es/utils/FocusHandle';\nlet uuid = 0;\nexport default class ModalContent extends BaseComponent {\n constructor(props) {\n super(props);\n this.onKeyDown = e => {\n this.foundation.handleKeyDown(e);\n };\n // Record when clicking the modal box\n this.onDialogMouseDown = () => {\n this.foundation.handleDialogMouseDown();\n };\n // Cancel recording when clicking the modal box at the end\n this.onMaskMouseUp = () => {\n this.foundation.handleMaskMouseUp();\n };\n // onMaskClick will judge dialogMouseDown before onMaskMouseUp updates dialogMouseDown\n this.onMaskClick = e => {\n this.foundation.handleMaskClick(e);\n };\n this.close = e => {\n this.foundation.close(e);\n };\n this.getMaskElement = () => {\n const props = __rest(this.props, []);\n const {\n mask,\n maskClassName\n } = props;\n if (mask) {\n const className = cls(`${cssClasses.DIALOG}-mask`, {\n // [`${cssClasses.DIALOG}-mask-hidden`]: !props.visible,\n });\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n key: \"mask\"\n }, this.props.maskExtraProps, {\n className: cls(className, maskClassName),\n style: props.maskStyle\n }));\n }\n return null;\n };\n this.renderCloseBtn = () => {\n const {\n closable,\n closeIcon\n } = this.props;\n let closer;\n if (closable) {\n const iconType = closeIcon || /*#__PURE__*/React.createElement(IconClose, {\n \"x-semi-prop\": \"closeIcon\"\n });\n closer = /*#__PURE__*/React.createElement(Button, {\n \"aria-label\": \"close\",\n className: `${cssClasses.DIALOG}-close`,\n key: \"close-btn\",\n onClick: this.close,\n type: \"tertiary\",\n icon: iconType,\n theme: \"borderless\",\n size: \"small\"\n });\n }\n return closer;\n };\n this.renderIcon = () => {\n const {\n icon\n } = this.props;\n return icon ? /*#__PURE__*/React.createElement(\"span\", {\n className: `${cssClasses.DIALOG}-icon-wrapper`,\n \"x-semi-prop\": \"icon\"\n }, icon) : null;\n };\n this.renderHeader = () => {\n if ('header' in this.props) {\n return this.props.header;\n }\n const {\n title\n } = this.props;\n const closer = this.renderCloseBtn();\n const icon = this.renderIcon();\n return title === null || title === undefined ? null : (/*#__PURE__*/React.createElement(\"div\", {\n className: `${cssClasses.DIALOG}-header`\n }, icon, /*#__PURE__*/React.createElement(Typography.Title, {\n heading: 5,\n className: `${cssClasses.DIALOG}-title`,\n id: `${cssClasses.DIALOG}-title`,\n \"x-semi-prop\": \"title\"\n }, title), closer));\n };\n this.renderBody = () => {\n const {\n bodyStyle,\n children,\n title\n } = this.props;\n const bodyCls = cls(`${cssClasses.DIALOG}-body`, {\n [`${cssClasses.DIALOG}-withIcon`]: this.props.icon\n });\n const closer = this.renderCloseBtn();\n const icon = this.renderIcon();\n const hasHeader = title !== null && title !== undefined || 'header' in this.props;\n return hasHeader ? (/*#__PURE__*/React.createElement(\"div\", {\n className: bodyCls,\n id: `${cssClasses.DIALOG}-body`,\n style: bodyStyle,\n \"x-semi-prop\": \"children\"\n }, children)) : (/*#__PURE__*/React.createElement(\"div\", {\n className: `${cssClasses.DIALOG}-body-wrapper`\n }, icon, /*#__PURE__*/React.createElement(\"div\", {\n className: bodyCls,\n style: bodyStyle,\n \"x-semi-prop\": \"children\"\n }, children), closer));\n };\n this.getDialogElement = () => {\n const props = __rest(this.props, []);\n const style = {};\n const digCls = cls(`${cssClasses.DIALOG}`, {\n [`${cssClasses.DIALOG}-centered`]: props.centered,\n [`${cssClasses.DIALOG}-${props.size}`]: props.size\n });\n if (props.width) {\n style.width = props.width;\n }\n if (props.height) {\n style.height = props.height;\n }\n if (props.isFullScreen) {\n style.width = '100%';\n style.height = '100%';\n style.margin = 'unset';\n }\n const body = this.renderBody();\n const header = this.renderHeader();\n const footer = props.footer ? (/*#__PURE__*/React.createElement(\"div\", {\n className: `${cssClasses.DIALOG}-footer`,\n \"x-semi-prop\": \"footer\"\n }, props.footer)) : null;\n const dialogElement =\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n React.createElement(\"div\", {\n key: \"dialog-element\",\n className: digCls,\n onMouseDown: this.onDialogMouseDown,\n style: Object.assign(Object.assign({}, props.style), style),\n id: this.dialogId\n }, /*#__PURE__*/React.createElement(\"div\", {\n role: \"dialog\",\n ref: this.modalDialogRef,\n \"aria-modal\": \"true\",\n \"aria-labelledby\": `${cssClasses.DIALOG}-title`,\n \"aria-describedby\": `${cssClasses.DIALOG}-body`,\n onAnimationEnd: props.onAnimationEnd,\n className: cls([`${cssClasses.DIALOG}-content`, props.contentClassName, {\n [`${cssClasses.DIALOG}-content-fullScreen`]: props.isFullScreen\n }])\n }, header, body, footer));\n // return props.visible ? dialogElement : null;\n return dialogElement;\n };\n this.state = {\n dialogMouseDown: false,\n prevFocusElement: FocusTrapHandle.getActiveElement()\n };\n this.foundation = new ModalContentFoundation(this.adapter);\n this.dialogId = `dialog-${uuid++}`;\n this.modalDialogRef = /*#__PURE__*/React.createRef();\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n notifyClose: e => {\n this.props.onClose(e);\n },\n notifyDialogMouseDown: () => {\n this.setState({\n dialogMouseDown: true\n });\n },\n notifyDialogMouseUp: () => {\n if (this.state.dialogMouseDown) {\n // Not setting setTimeout triggers close when modal external mouseUp\n this.timeoutId = setTimeout(() => {\n this.setState({\n dialogMouseDown: false\n });\n }, 0);\n }\n },\n addKeyDownEventListener: () => {\n if (this.props.closeOnEsc) {\n document.addEventListener('keydown', this.foundation.handleKeyDown);\n }\n },\n removeKeyDownEventListener: () => {\n if (this.props.closeOnEsc) {\n document.removeEventListener('keydown', this.foundation.handleKeyDown);\n }\n },\n getMouseState: () => this.state.dialogMouseDown,\n modalDialogFocus: () => {\n var _a, _b, _c;\n const {\n preventScroll\n } = this.props;\n let activeElementInDialog;\n if (this.modalDialogRef) {\n const activeElement = FocusTrapHandle.getActiveElement();\n activeElementInDialog = this.modalDialogRef.current.contains(activeElement);\n (_a = this.focusTrapHandle) === null || _a === void 0 ? void 0 : _a.destroy();\n this.focusTrapHandle = new FocusTrapHandle(this.modalDialogRef.current, {\n preventScroll\n });\n }\n if (!activeElementInDialog) {\n (_c = (_b = this.modalDialogRef) === null || _b === void 0 ? void 0 : _b.current) === null || _c === void 0 ? void 0 : _c.focus({\n preventScroll\n });\n }\n },\n modalDialogBlur: () => {\n var _a, _b;\n (_a = this.modalDialogRef) === null || _a === void 0 ? void 0 : _a.current.blur();\n (_b = this.focusTrapHandle) === null || _b === void 0 ? void 0 : _b.destroy();\n },\n prevFocusElementReFocus: () => {\n const {\n prevFocusElement\n } = this.state;\n const {\n preventScroll\n } = this.props;\n const focus = _get(prevFocusElement, 'focus');\n _isFunction(focus) && prevFocusElement.focus({\n preventScroll\n });\n }\n });\n }\n componentDidMount() {\n var _a;\n this.foundation.handleKeyDownEventListenerMount();\n this.foundation.modalDialogFocus();\n const nodes = FocusTrapHandle.getFocusableElements(this.modalDialogRef.current);\n if (!this.modalDialogRef.current.contains(document.activeElement)) {\n // focus on first focusable element\n (_a = nodes[0]) === null || _a === void 0 ? void 0 : _a.focus();\n }\n }\n componentWillUnmount() {\n clearTimeout(this.timeoutId);\n this.foundation.destroy();\n }\n render() {\n var _a;\n const _b = this.props,\n {\n maskClosable,\n className,\n getPopupContainer,\n maskFixed,\n getContainerContext\n } = _b,\n rest = __rest(_b, [\"maskClosable\", \"className\", \"getPopupContainer\", \"maskFixed\", \"getContainerContext\"]);\n const {\n direction\n } = this.context;\n const classList = cls(className, {\n [`${cssClasses.DIALOG}-popup`]: getPopupContainer && getPopupContainer() !== ((_a = globalThis === null || globalThis === void 0 ? void 0 : globalThis.document) === null || _a === void 0 ? void 0 : _a.body) && !maskFixed,\n [`${cssClasses.DIALOG}-fixed`]: maskFixed,\n [`${cssClasses.DIALOG}-rtl`]: direction === 'rtl'\n });\n const containerContext = getContainerContext();\n const dataAttr = this.getDataAttr(rest);\n const elem = /*#__PURE__*/React.createElement(\"div\", Object.assign({\n className: classList\n }, dataAttr), this.getMaskElement(), /*#__PURE__*/React.createElement(\"div\", Object.assign({\n role: \"none\",\n className: cls({\n [`${cssClasses.DIALOG}-wrap`]: true,\n [`${cssClasses.DIALOG}-wrap-center`]: this.props.centered\n }),\n onClick: maskClosable ? this.onMaskClick : null,\n onMouseUp: maskClosable ? this.onMaskMouseUp : null\n }, this.props.contentExtraProps), this.getDialogElement()));\n return containerContext && containerContext.Provider ? /*#__PURE__*/React.createElement(containerContext.Provider, {\n value: containerContext.value\n }, elem) : elem;\n }\n}\nModalContent.contextType = ConfigContext;\nModalContent.propTypes = {\n close: PropTypes.func,\n getContainerContext: PropTypes.func,\n contentClassName: PropTypes.string,\n maskClassName: PropTypes.string,\n onAnimationEnd: PropTypes.func,\n preventScroll: PropTypes.bool\n};\nModalContent.defaultProps = {\n close: _noop,\n getContainerContext: _noop,\n contentClassName: '',\n maskClassName: ''\n};","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { useState, useCallback } from 'react';\nimport cls from 'classnames';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/modal/constants';\nimport Modal from './Modal';\nimport { isSemiIcon } from '../_utils';\nimport '@douyinfe/semi-foundation/lib/es/modal/modal.css';\nconst ConfirmModal = props => {\n const [visible, setVisible] = useState(true);\n const [confirmLoading, setConfirmLoading] = useState();\n const [cancelLoading, setCancelLoading] = useState();\n const {\n direction\n } = props;\n const {\n title,\n content,\n icon,\n type,\n onCancel,\n onOk,\n className\n } = props,\n rest = __rest(props, [\"title\", \"content\", \"icon\", \"type\", \"onCancel\", \"onOk\", \"className\"]);\n const handleOk = useCallback(e => {\n const res = onOk && onOk(e);\n if (res && res.then) {\n setConfirmLoading(true);\n res.then(function () {\n setVisible(false);\n setConfirmLoading(false);\n }, err => {\n setConfirmLoading(false);\n });\n } else {\n setVisible(false);\n }\n }, [onOk]);\n const handleCancel = useCallback(e => {\n const res = onCancel && onCancel(e);\n if (res && res.then) {\n setCancelLoading(true);\n res.then(function () {\n setVisible(false);\n setCancelLoading(false);\n }, err => {\n setCancelLoading(false);\n });\n } else {\n setVisible(false);\n }\n }, [onCancel]);\n const confirmCls = `${cssClasses.DIALOG}-confirm`;\n const wrapperCls = cls(className, confirmCls, {\n [`${confirmCls}-rtl`]: direction === 'rtl'\n });\n const typeCls = cls(`${cssClasses.DIALOG}-${type}`);\n const iconNode = isSemiIcon(icon) ? /*#__PURE__*/React.cloneElement(icon, {\n className: `${confirmCls}-icon ${typeCls}-icon`,\n size: 'extra-large'\n }) : icon;\n const titleNode = title == null ? null : /*#__PURE__*/React.createElement(\"span\", {\n className: `${confirmCls}-title-text`\n }, title);\n const contentCls = cls(`${confirmCls}-content`, {\n [`${confirmCls}-content-withIcon`]: props.icon\n });\n return /*#__PURE__*/React.createElement(Modal, Object.assign({\n className: wrapperCls,\n title: titleNode,\n confirmLoading: confirmLoading,\n cancelLoading: cancelLoading,\n onOk: handleOk,\n onCancel: handleCancel,\n icon: iconNode,\n visible: visible\n }, rest), /*#__PURE__*/React.createElement(\"div\", {\n className: contentCls,\n \"x-semi-prop\": \"content\"\n }, content));\n};\nexport default ConfirmModal;","import _omit from \"lodash/omit\";\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { destroyFns } from './Modal';\nimport ConfirmModal from './ConfirmModal';\nimport '@douyinfe/semi-foundation/lib/es/modal/modal.css';\nimport { IconAlertCircle, IconAlertTriangle, IconHelpCircle, IconInfoCircle, IconTickCircle } from '@douyinfe/semi-icons';\nexport default function confirm(props) {\n // create a dom in adapter?\n const div = document.createElement('div');\n document.body.appendChild(div);\n let currentConfig = Object.assign({}, props);\n const destroy = () => {\n const unmountResult = ReactDOM.unmountComponentAtNode(div);\n if (unmountResult && div.parentNode) {\n div.parentNode.removeChild(div);\n }\n for (let i = 0; i < destroyFns.length; i++) {\n const fn = destroyFns[i];\n if (fn === close) {\n destroyFns.splice(i, 1);\n break;\n }\n }\n };\n function render(renderProps) {\n const {\n afterClose\n } = renderProps;\n //@ts-ignore\n ReactDOM.render(/*#__PURE__*/React.createElement(ConfirmModal, Object.assign({}, renderProps, {\n afterClose: function () {\n //@ts-ignore\n afterClose === null || afterClose === void 0 ? void 0 : afterClose(...arguments);\n destroy();\n },\n motion: props.motion\n })), div);\n }\n function close() {\n currentConfig = Object.assign(Object.assign({}, currentConfig), {\n visible: false\n });\n render(currentConfig);\n }\n function update(newConfig) {\n currentConfig = Object.assign(Object.assign({}, currentConfig), newConfig);\n render(currentConfig);\n }\n render(currentConfig);\n destroyFns.push(close);\n return {\n destroy: close,\n update\n };\n}\nexport function withInfo(props) {\n return Object.assign({\n type: 'info',\n icon: /*#__PURE__*/React.createElement(IconInfoCircle, null)\n }, props);\n}\nexport function withSuccess(props) {\n return Object.assign({\n type: 'success',\n icon: /*#__PURE__*/React.createElement(IconTickCircle, null)\n }, props);\n}\nexport function withWarning(props) {\n return Object.assign({\n type: 'warning',\n icon: /*#__PURE__*/React.createElement(IconAlertTriangle, null)\n }, props);\n}\nexport function withError(props) {\n return Object.assign({\n type: 'error',\n icon: /*#__PURE__*/React.createElement(IconAlertCircle, null),\n okButtonProps: Object.assign({\n type: 'danger'\n }, props.okButtonProps)\n }, _omit(props, ['okButtonProps']));\n}\nexport function withConfirm(props) {\n return Object.assign({\n type: 'confirm',\n icon: /*#__PURE__*/React.createElement(IconHelpCircle, null)\n }, props);\n}","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport ConfirmModal from '../ConfirmModal';\nconst HookModal = (_a, ref) => {\n var {\n afterClose,\n config\n } = _a,\n props = __rest(_a, [\"afterClose\", \"config\"]);\n const [innerConfig, setInnerConfig] = React.useState(config);\n React.useImperativeHandle(ref, () => ({\n destroy: () => {\n setInnerConfig(originConfig => Object.assign(Object.assign({}, originConfig), {\n visible: false\n }));\n },\n update: newConfig => {\n setInnerConfig(originConfig => Object.assign(Object.assign({}, originConfig), newConfig));\n }\n }));\n const mergeAfterClose = () => {\n var _a;\n (_a = config === null || config === void 0 ? void 0 : config.afterClose) === null || _a === void 0 ? void 0 : _a.call(config);\n afterClose();\n };\n return /*#__PURE__*/React.createElement(ConfirmModal, Object.assign({}, innerConfig, {\n afterClose: mergeAfterClose\n }));\n};\nexport default /*#__PURE__*/React.forwardRef(HookModal);","import React from 'react';\nimport HookModal from './HookModal';\nimport { withConfirm, withError, withInfo, withSuccess, withWarning } from '../confirm';\nlet uuid = 0;\nfunction usePatchElement() {\n const [elements, setElements] = React.useState([]);\n function patchElement(element) {\n setElements(originElements => [...originElements, element]);\n return () => {\n setElements(originElements => originElements.filter(ele => ele !== element));\n };\n }\n return [elements, patchElement];\n}\nexport default function useModal() {\n const [elements, patchElement] = usePatchElement();\n function getConfirmFunc(withFunc) {\n return function hookConfirm(config) {\n uuid += 1;\n const modalRef = /*#__PURE__*/React.createRef();\n let closeFunc;\n const modal = /*#__PURE__*/React.createElement(HookModal, {\n key: `semi-modal-${uuid}`,\n config: withFunc(config),\n ref: modalRef,\n afterClose: () => {\n closeFunc();\n }\n });\n closeFunc = patchElement(modal);\n return {\n destroy: () => {\n if (modalRef.current) {\n modalRef.current.destroy();\n }\n },\n update: newConfig => {\n if (modalRef.current) {\n modalRef.current.update(newConfig);\n }\n }\n };\n };\n }\n return [{\n info: getConfirmFunc(withInfo),\n success: getConfirmFunc(withSuccess),\n error: getConfirmFunc(withError),\n warning: getConfirmFunc(withWarning),\n confirm: getConfirmFunc(withConfirm)\n }, /*#__PURE__*/React.createElement(React.Fragment, null, elements)];\n}","import _noop from \"lodash/noop\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/modal/constants';\nimport '@douyinfe/semi-foundation/lib/es/modal/modal.css';\nimport ModalFoundation from '@douyinfe/semi-foundation/lib/es/modal/modalFoundation';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport BaseComponent from '../_base/baseComponent';\nimport CSSAnimation from \"../_cssAnimation\";\nimport Portal from '../_portal';\nimport { getDefaultPropsFromGlobalConfig, getScrollbarWidth } from '../_utils';\nimport Button from '../button';\nimport LocaleConsumer from '../locale/localeConsumer';\nimport ModalContent from './ModalContent';\nimport confirm, { withConfirm, withError, withInfo, withSuccess, withWarning } from './confirm';\nimport useModal from './useModal';\nexport let destroyFns = [];\nclass Modal extends BaseComponent {\n constructor(props) {\n super(props);\n this.bodyOverflow = null;\n this.handleCancel = e => {\n this.foundation.handleCancel(e);\n };\n this.handleOk = e => {\n this.foundation.handleOk(e);\n };\n this.updateState = () => {\n const {\n visible\n } = this.props;\n this.foundation.toggleDisplayNone(!visible);\n };\n this.renderFooter = () => {\n const {\n okText,\n okType,\n cancelText,\n confirmLoading,\n cancelLoading,\n hasCancel,\n footerFill\n } = this.props;\n const getCancelButton = locale => {\n var _a;\n if (!hasCancel) {\n return null;\n } else {\n return /*#__PURE__*/React.createElement(Button, Object.assign({\n \"aria-label\": \"cancel\",\n onClick: this.handleCancel,\n loading: cancelLoading === undefined ? this.state.onCancelReturnPromiseStatus === \"pending\" : cancelLoading,\n type: \"tertiary\",\n block: footerFill,\n autoFocus: true\n }, this.props.cancelButtonProps, {\n style: Object.assign(Object.assign({}, footerFill ? {\n marginLeft: \"unset\"\n } : {}), (_a = this.props.cancelButtonProps) === null || _a === void 0 ? void 0 : _a.style),\n \"x-semi-children-alias\": \"cancelText\"\n }), cancelText || locale.cancel);\n }\n };\n return /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Modal\"\n }, (locale, localeCode) => (/*#__PURE__*/React.createElement(\"div\", {\n className: cls({\n [`${cssClasses.DIALOG}-footerfill`]: footerFill\n })\n }, getCancelButton(locale), /*#__PURE__*/React.createElement(Button, Object.assign({\n \"aria-label\": \"confirm\",\n type: okType,\n theme: \"solid\",\n block: footerFill,\n loading: confirmLoading === undefined ? this.state.onOKReturnPromiseStatus === \"pending\" : confirmLoading,\n onClick: this.handleOk\n }, this.props.okButtonProps, {\n \"x-semi-children-alias\": \"okText\"\n }), okText || locale.confirm))));\n };\n // getDialog = () => {\n // const {\n // footer,\n // ...restProps\n // } = this.props;\n // const renderFooter = 'footer' in this.props ? footer : this.renderFooter();\n // return ;\n // };\n this.renderDialog = () => {\n var _a;\n let _b = this.props,\n {\n footer,\n className,\n motion,\n maskStyle: maskStyleFromProps,\n keepDOM,\n style: styleFromProps,\n zIndex,\n getPopupContainer,\n visible,\n modalContentClass\n } = _b,\n restProps = __rest(_b, [\"footer\", \"className\", \"motion\", \"maskStyle\", \"keepDOM\", \"style\", \"zIndex\", \"getPopupContainer\", \"visible\", \"modalContentClass\"]);\n let style = styleFromProps;\n const maskStyle = maskStyleFromProps;\n const renderFooter = 'footer' in this.props ? footer : this.renderFooter();\n let wrapperStyle = {\n zIndex\n };\n if (getPopupContainer && getPopupContainer() !== ((_a = globalThis === null || globalThis === void 0 ? void 0 : globalThis.document) === null || _a === void 0 ? void 0 : _a.body)) {\n wrapperStyle = {\n zIndex,\n position: 'static'\n };\n }\n const classList = cls(className, {\n [`${cssClasses.DIALOG}-displayNone`]: keepDOM && this.state.displayNone\n });\n const shouldRender = this.props.visible || this.props.keepDOM && (!this.props.lazyRender || this._haveRendered) || this.props.motion && !this.state.displayNone /* When there is animation, we use displayNone to judge whether animation is ended and judge whether to unmount content */;\n if (shouldRender) {\n this._haveRendered = true;\n }\n return /*#__PURE__*/React.createElement(CSSAnimation, {\n motion: this.props.motion,\n animationState: visible ? 'enter' : 'leave',\n startClassName: visible ? `${cssClasses.DIALOG}-content-animate-show` : `${cssClasses.DIALOG}-content-animate-hide`,\n onAnimationEnd: () => {\n this.updateState();\n }\n }, _ref => {\n let {\n animationClassName,\n animationEventsNeedBind\n } = _ref;\n return /*#__PURE__*/React.createElement(CSSAnimation, {\n motion: this.props.motion,\n animationState: visible ? 'enter' : 'leave',\n startClassName: visible ? `${cssClasses.DIALOG}-mask-animate-show` : `${cssClasses.DIALOG}-mask-animate-hide`,\n onAnimationEnd: () => {\n this.updateState();\n }\n }, _ref2 => {\n let {\n animationClassName: maskAnimationClassName,\n animationEventsNeedBind: maskAnimationEventsNeedBind\n } = _ref2;\n return shouldRender ? /*#__PURE__*/React.createElement(Portal, {\n style: wrapperStyle,\n getPopupContainer: getPopupContainer\n }, \" \", /*#__PURE__*/React.createElement(ModalContent, Object.assign({}, restProps, {\n contentExtraProps: animationEventsNeedBind,\n maskExtraProps: maskAnimationEventsNeedBind,\n isFullScreen: this.state.isFullScreen,\n contentClassName: `${animationClassName} ${modalContentClass}`,\n maskClassName: maskAnimationClassName,\n className: classList,\n getPopupContainer: getPopupContainer,\n maskStyle: maskStyle,\n style: style,\n ref: this.modalRef,\n footer: renderFooter,\n onClose: this.handleCancel\n }))) : /*#__PURE__*/React.createElement(React.Fragment, null);\n });\n });\n };\n this.state = {\n displayNone: !props.visible,\n isFullScreen: props.fullScreen\n };\n this.foundation = new ModalFoundation(this.adapter);\n this.modalRef = /*#__PURE__*/React.createRef();\n this.scrollBarWidth = 0;\n this.originBodyWidth = '100%';\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n getProps: () => this.props,\n disabledBodyScroll: () => {\n var _a;\n const {\n getPopupContainer\n } = this.props;\n this.bodyOverflow = document.body.style.overflow || '';\n if ((!getPopupContainer || getPopupContainer() === ((_a = globalThis === null || globalThis === void 0 ? void 0 : globalThis.document) === null || _a === void 0 ? void 0 : _a.body)) && this.bodyOverflow !== 'hidden') {\n document.body.style.overflow = 'hidden';\n document.body.style.width = `calc(${this.originBodyWidth || '100%'} - ${this.scrollBarWidth}px)`;\n }\n },\n enabledBodyScroll: () => {\n var _a;\n const {\n getPopupContainer\n } = this.props;\n if ((!getPopupContainer || getPopupContainer() === ((_a = globalThis === null || globalThis === void 0 ? void 0 : globalThis.document) === null || _a === void 0 ? void 0 : _a.body)) && this.bodyOverflow !== null && this.bodyOverflow !== 'hidden') {\n document.body.style.overflow = this.bodyOverflow;\n document.body.style.width = this.originBodyWidth;\n }\n },\n notifyCancel: e => {\n return this.props.onCancel(e);\n },\n notifyOk: e => {\n return this.props.onOk(e);\n },\n notifyClose: () => {\n this.props.afterClose();\n },\n toggleDisplayNone: (displayNone, callback) => {\n if (displayNone !== this.state.displayNone) {\n this.setState({\n displayNone: displayNone\n }, callback || _noop);\n }\n },\n notifyFullScreen: isFullScreen => {\n if (isFullScreen !== this.state.isFullScreen) {\n this.setState({\n isFullScreen\n });\n }\n }\n });\n }\n static getDerivedStateFromProps(props, prevState) {\n const newState = {};\n if (props.fullScreen !== prevState.isFullScreen) {\n newState.isFullScreen = props.fullScreen;\n }\n if (props.visible && prevState.displayNone) {\n newState.displayNone = false;\n }\n //\n // if (!props.visible && !props.motion && !prevState.displayNone) {\n // newState.displayNone = true;\n // }\n return newState;\n }\n componentDidMount() {\n this.scrollBarWidth = getScrollbarWidth();\n this.originBodyWidth = document.body.style.width;\n if (this.props.visible) {\n this.foundation.beforeShow();\n }\n }\n componentDidUpdate(prevProps, prevState, snapshot) {\n // hide => show\n if (!prevProps.visible && this.props.visible) {\n this.foundation.beforeShow();\n }\n if (!prevState.displayNone && this.state.displayNone) {\n this.foundation.afterHide();\n }\n }\n componentWillUnmount() {\n if (this.props.visible) {\n this.foundation.destroy();\n } else {\n this.foundation.enabledBodyScroll();\n }\n }\n render() {\n const {\n visible,\n keepDOM,\n lazyRender\n } = this.props;\n return this.renderDialog();\n }\n}\nModal.propTypes = {\n mask: PropTypes.bool,\n closable: PropTypes.bool,\n centered: PropTypes.bool,\n visible: PropTypes.bool,\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n confirmLoading: PropTypes.bool,\n cancelLoading: PropTypes.bool,\n okText: PropTypes.string,\n okType: PropTypes.string,\n cancelText: PropTypes.string,\n maskClosable: PropTypes.bool,\n onCancel: PropTypes.func,\n onOk: PropTypes.func,\n afterClose: PropTypes.func,\n okButtonProps: PropTypes.object,\n cancelButtonProps: PropTypes.object,\n style: PropTypes.object,\n className: PropTypes.string,\n maskStyle: PropTypes.object,\n bodyStyle: PropTypes.object,\n zIndex: PropTypes.number,\n title: PropTypes.node,\n icon: PropTypes.node,\n header: PropTypes.node,\n footer: PropTypes.node,\n hasCancel: PropTypes.bool,\n motion: PropTypes.bool,\n children: PropTypes.node,\n getPopupContainer: PropTypes.func,\n getContainerContext: PropTypes.func,\n maskFixed: PropTypes.bool,\n closeIcon: PropTypes.node,\n closeOnEsc: PropTypes.bool,\n size: PropTypes.oneOf(strings.SIZE),\n keepDOM: PropTypes.bool,\n lazyRender: PropTypes.bool,\n direction: PropTypes.oneOf(strings.directions),\n fullScreen: PropTypes.bool,\n footerFill: PropTypes.bool\n};\nModal.__SemiComponentName__ = \"Modal\";\nModal.defaultProps = getDefaultPropsFromGlobalConfig(Modal.__SemiComponentName__, {\n zIndex: 1000,\n motion: true,\n mask: true,\n centered: false,\n closable: true,\n visible: false,\n okType: 'primary',\n maskClosable: true,\n hasCancel: true,\n onCancel: _noop,\n onOk: _noop,\n afterClose: _noop,\n maskFixed: false,\n closeOnEsc: true,\n size: 'small',\n keepDOM: false,\n lazyRender: true,\n fullScreen: false\n});\nModal.useModal = useModal;\nModal.info = function (props) {\n return confirm(withInfo(props));\n};\nModal.success = function (props) {\n return confirm(withSuccess(props));\n};\nModal.error = function (props) {\n return confirm(withError(props));\n};\nModal.warning = function (props) {\n return confirm(withWarning(props));\n};\nModal.confirm = function (props) {\n return confirm(withConfirm(props));\n};\nModal.destroyAll = function destroyAllFn() {\n for (let i = 0, len = destroyFns.length; i < len; i++) {\n const close = destroyFns[i];\n if (close) {\n close();\n }\n }\n destroyFns = [];\n};\nexport default Modal;","import '@douyinfe/semi-foundation/lib/es/modal/modal.css';\nimport Modal from './Modal';\nexport default Modal;","import { strings as tooltipStrings } from '../tooltip/constants';\nimport { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-dropdown`,\n SELECTED: `${BASE_CLASS_PREFIX}-dropdown-item-selected`,\n DISABLED: `${BASE_CLASS_PREFIX}-dropdown-item-disabled`\n};\nconst strings = {\n POSITION_SET: tooltipStrings.POSITION_SET,\n TRIGGER_SET: ['hover', 'focus', 'click', 'custom', 'contextMenu'],\n DEFAULT_LEAVE_DELAY: 100,\n ITEM_TYPE: ['primary', 'secondary', 'tertiary', 'warning', 'danger']\n};\nconst numbers = {\n SPACING: 4,\n NESTED_SPACING: 2\n};\nexport { cssClasses, strings, numbers };","import BaseFoundation from '../base/foundation';\nimport { handlePrevent, setFocusToFirstItem, setFocusToLastItem } from '../utils/a11y';\nexport default class DropdownFoundation extends BaseFoundation {\n handleVisibleChange(visible) {\n this._adapter.setPopVisible(visible);\n this._adapter.notifyVisibleChange(visible);\n const {\n trigger\n } = this.getProps();\n if (visible && trigger === \"click\") {\n const popupId = this._adapter.getPopupId();\n this.setFocusToFirstMenuItem(popupId);\n }\n }\n getMenuItemNodes(id) {\n const menuWrapper = document.getElementById(id);\n // if has dropdown item, the item must wrapped by li\n return menuWrapper ? Array.from(menuWrapper.getElementsByTagName('li')).filter(item => item.ariaDisabled === \"false\") : null;\n }\n setFocusToFirstMenuItem(id) {\n const menuItemNodes = this.getMenuItemNodes(id);\n menuItemNodes && setFocusToFirstItem(menuItemNodes);\n }\n setFocusToLastMenuItem(id) {\n const menuItemNodes = this.getMenuItemNodes(id);\n menuItemNodes && setFocusToLastItem(menuItemNodes);\n }\n handleKeyDown(event) {\n var _a, _b;\n const id = (_b = (_a = event.target) === null || _a === void 0 ? void 0 : _a.attributes['data-popupid']) === null || _b === void 0 ? void 0 : _b.value;\n const {\n visible\n } = this._adapter.getStates();\n switch (event.key) {\n case ' ':\n case 'Enter':\n event.target.click();\n // user may use input to be the trigger and bind some key event on it, so do not stoppropagation\n // handlePrevent(event);\n break;\n case 'ArrowDown':\n this.setFocusToFirstMenuItem(id);\n visible && handlePrevent(event);\n break;\n case 'ArrowUp':\n this.setFocusToLastMenuItem(id);\n visible && handlePrevent(event);\n break;\n default:\n break;\n }\n }\n}","import BaseFoundation from '../base/foundation';\nimport { handlePrevent, isPrintableCharacter, findIndexByCharacter, getAncestorNodeByRole, getMenuButton, setFocusToItem, setFocusToNextMenuitem, setFocusToPreviousMenuItem } from '../utils/a11y';\nexport default class DropdownMenuFoundation extends BaseFoundation {\n constructor() {\n super(...arguments);\n this.menuItemNodes = null;\n this.firstChars = [];\n }\n handleEscape(menu) {\n const trigger = this._adapter.getContext('trigger');\n if (trigger === 'custom') {\n const menuButton = menu && getMenuButton(document.querySelectorAll(`[data-popupid]`), menu.id);\n menuButton.focus();\n }\n }\n setFocusByFirstCharacter(curItem, char) {\n const index = findIndexByCharacter(this.menuItemNodes, curItem, this.firstChars, char);\n if (index >= 0) {\n setFocusToItem(this.menuItemNodes, this.menuItemNodes[index]);\n }\n }\n onMenuKeydown(event) {\n const menu = getAncestorNodeByRole(event.target, 'tooltip');\n if (!this.menuItemNodes) {\n this.menuItemNodes = [...event.target.parentNode.getElementsByTagName('li')].filter(item => item.ariaDisabled !== \"true\");\n }\n if (this.firstChars.length === 0) {\n this.menuItemNodes.forEach(item => {\n var _a;\n // the menuItemNodes can be an component and not exit textContent\n this.firstChars.push((_a = item.textContent.trim()[0]) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n });\n }\n // get the currently focused menu item\n const curItem = this.menuItemNodes.find(item => item.tabIndex === 0);\n switch (event.key) {\n case ' ':\n case 'Enter':\n event.target.click();\n // user may use input to be the trigger and bind some key event on it, so do not stoppropagation\n // handlePrevent(event);\n break;\n case 'Escape':\n this.handleEscape(menu);\n break;\n case 'ArrowUp':\n setFocusToPreviousMenuItem(this.menuItemNodes, curItem);\n handlePrevent(event);\n break;\n case 'ArrowDown':\n setFocusToNextMenuitem(this.menuItemNodes, curItem);\n handlePrevent(event);\n break;\n default:\n if (isPrintableCharacter(event.key)) {\n this.setFocusByFirstCharacter(curItem, event.key);\n // it can be an input on Dropdown, handlePrevent may affect the input of the component\n // handlePrevent(event); \n }\n break;\n }\n }\n}","import React from 'react';\nconst DropdownContext = /*#__PURE__*/React.createContext({\n level: 0\n});\nexport default DropdownContext;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/dropdown/constants';\nimport Foundation from '@douyinfe/semi-foundation/lib/es/dropdown/menuFoundation';\nimport DropdownContext from './context';\nimport BaseComponent from '../_base/baseComponent';\nconst prefixCls = cssClasses.PREFIX;\nclass DropdownMenu extends BaseComponent {\n constructor(props) {\n super(props);\n this.foundation = new Foundation(this.adapter);\n }\n get adapter() {\n return Object.assign({}, super.adapter);\n }\n render() {\n const _a = this.props,\n {\n children,\n className,\n style\n } = _a,\n rest = __rest(_a, [\"children\", \"className\", \"style\"]);\n return /*#__PURE__*/React.createElement(\"ul\", Object.assign({\n role: \"menu\",\n \"aria-orientation\": \"vertical\"\n }, rest, {\n className: classnames(`${prefixCls}-menu`, className),\n style: style,\n onKeyDown: e => this.foundation.onMenuKeydown(e)\n }), children);\n }\n}\nDropdownMenu.propTypes = {\n children: PropTypes.node,\n className: PropTypes.string,\n style: PropTypes.object\n};\nDropdownMenu.contextType = DropdownContext;\nexport default DropdownMenu;","import _noop from \"lodash/noop\";\nimport React from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses as css, strings } from '@douyinfe/semi-foundation/lib/es/dropdown/constants';\nimport DropdownContext from './context';\nimport BaseComponent from '../_base/baseComponent';\nimport { IconTick } from '@douyinfe/semi-icons';\nconst prefixCls = css.PREFIX;\nclass DropdownItem extends BaseComponent {\n render() {\n const {\n children,\n disabled,\n className,\n forwardRef,\n style,\n type,\n active,\n icon,\n onKeyDown,\n showTick,\n hover\n } = this.props;\n const {\n showTick: contextShowTick\n } = this.context;\n const realShowTick = contextShowTick !== null && contextShowTick !== void 0 ? contextShowTick : showTick;\n const itemclass = cls(className, {\n [`${prefixCls}-item`]: true,\n [`${prefixCls}-item-disabled`]: disabled,\n [`${prefixCls}-item-hover`]: hover,\n [`${prefixCls}-item-withTick`]: realShowTick,\n [`${prefixCls}-item-${type}`]: type,\n [`${prefixCls}-item-active`]: active\n });\n const events = {};\n if (!disabled) {\n ['onClick', 'onMouseEnter', 'onMouseLeave', 'onContextMenu'].forEach(eventName => {\n const isInAnotherDropdown = this.context.level !== 1;\n if (isInAnotherDropdown && eventName === \"onClick\") {\n events[\"onMouseDown\"] = e => {\n var _a, _b;\n if (e.button === 0) {\n (_b = (_a = this.props)[eventName]) === null || _b === void 0 ? void 0 : _b.call(_a, e);\n }\n };\n } else {\n events[eventName] = this.props[eventName];\n }\n });\n }\n let tick = null;\n switch (true) {\n case realShowTick && active:\n tick = /*#__PURE__*/React.createElement(IconTick, null);\n break;\n case realShowTick && !active:\n tick = /*#__PURE__*/React.createElement(IconTick, {\n style: {\n color: 'transparent'\n }\n });\n break;\n default:\n tick = null;\n break;\n }\n let iconContent = null;\n if (icon) {\n iconContent = /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-item-icon`\n }, icon);\n }\n return /*#__PURE__*/React.createElement(\"li\", Object.assign({\n role: \"menuitem\",\n tabIndex: -1,\n \"aria-disabled\": disabled\n }, events, {\n onKeyDown: onKeyDown,\n ref: ref => forwardRef(ref),\n className: itemclass,\n style: style\n }, this.getDataAttr(this.props)), tick, iconContent, children);\n }\n}\nDropdownItem.propTypes = {\n children: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n name: PropTypes.string,\n disabled: PropTypes.bool,\n selected: PropTypes.bool,\n onClick: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onContextMenu: PropTypes.func,\n className: PropTypes.string,\n style: PropTypes.object,\n forwardRef: PropTypes.func,\n type: PropTypes.oneOf(strings.ITEM_TYPE),\n active: PropTypes.bool,\n icon: PropTypes.node\n};\nDropdownItem.contextType = DropdownContext;\nDropdownItem.defaultProps = {\n disabled: false,\n divided: false,\n selected: false,\n onMouseEnter: _noop,\n onMouseLeave: _noop,\n forwardRef: _noop\n};\nDropdownItem.elementType = 'Dropdown.Item';\nexport default DropdownItem;","import React from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/dropdown/constants';\nconst prefixCls = cssClasses.PREFIX;\nconst DropdownDivider = function () {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n style,\n className\n } = props;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: classnames(`${prefixCls}-divider`, className),\n style: style\n });\n};\nDropdownDivider.propTypes = {\n style: PropTypes.object,\n className: PropTypes.string\n};\nexport default DropdownDivider;","import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/dropdown/constants';\nimport cls from 'classnames';\nimport DropdownContext from './context';\nconst prefixCls = cssClasses.PREFIX;\nclass DropdownTitle extends PureComponent {\n render() {\n const {\n className,\n style,\n children\n } = this.props;\n const {\n showTick\n } = this.context;\n const titleCls = cls({\n [`${prefixCls}-title`]: true,\n [`${prefixCls}-title-withTick`]: showTick\n }, className);\n return /*#__PURE__*/React.createElement(\"div\", {\n className: titleCls,\n style: style\n }, children);\n }\n}\nDropdownTitle.propTypes = {\n children: PropTypes.node,\n className: PropTypes.string,\n style: PropTypes.object\n};\nDropdownTitle.contextType = DropdownContext;\nexport default DropdownTitle;","import _get from \"lodash/get\";\nimport _noop from \"lodash/noop\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses, strings, numbers } from '@douyinfe/semi-foundation/lib/es/dropdown/constants';\nimport BaseComponent from '../_base/baseComponent';\nimport Tooltip from '../tooltip/index';\nimport { numbers as tooltipNumbers } from '@douyinfe/semi-foundation/lib/es/tooltip/constants';\nimport Foundation from '@douyinfe/semi-foundation/lib/es/dropdown/foundation';\nimport DropdownMenu from './dropdownMenu';\nimport DropdownItem from './dropdownItem';\nimport DropdownDivider from './dropdownDivider';\nimport DropdownTitle from './dropdownTitle';\nimport DropdownContext from './context';\nimport '@douyinfe/semi-foundation/lib/es/dropdown/dropdown.css';\nimport { getDefaultPropsFromGlobalConfig } from \"../_utils\";\nconst positionSet = strings.POSITION_SET;\nconst triggerSet = strings.TRIGGER_SET;\nclass Dropdown extends BaseComponent {\n constructor(props) {\n super(props);\n this.handleVisibleChange = visible => this.foundation.handleVisibleChange(visible);\n this.state = {\n popVisible: props.visible\n };\n this.foundation = new Foundation(this.adapter);\n this.tooltipRef = /*#__PURE__*/React.createRef();\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n setPopVisible: popVisible => this.setState({\n popVisible\n }),\n notifyVisibleChange: visible => {\n var _a, _b;\n return (_b = (_a = this.props).onVisibleChange) === null || _b === void 0 ? void 0 : _b.call(_a, visible);\n },\n getPopupId: () => this.tooltipRef.current.getPopupId()\n });\n }\n renderContent() {\n const {\n render,\n menu,\n contentClassName,\n style,\n showTick,\n prefixCls,\n trigger\n } = this.props;\n const className = classnames(prefixCls, contentClassName);\n const {\n level = 0\n } = this.context;\n const contextValue = {\n showTick,\n level: level + 1,\n trigger\n };\n let content = null;\n if (/*#__PURE__*/React.isValidElement(render)) {\n content = render;\n } else if (Array.isArray(menu)) {\n content = this.renderMenu();\n }\n return /*#__PURE__*/React.createElement(DropdownContext.Provider, {\n value: contextValue\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: className,\n style: style\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-content`,\n \"x-semi-prop\": \"render\"\n }, content)));\n }\n renderMenu() {\n const {\n menu\n } = this.props;\n const content = menu.map((m, index) => {\n switch (m.node) {\n case 'title':\n {\n const {\n name,\n node\n } = m,\n rest = __rest(m, [\"name\", \"node\"]);\n return /*#__PURE__*/React.createElement(Dropdown.Title, Object.assign({}, rest, {\n key: node + name + index\n }), name);\n }\n case 'item':\n {\n const {\n node,\n name\n } = m,\n rest = __rest(m, [\"node\", \"name\"]);\n return /*#__PURE__*/React.createElement(Dropdown.Item, Object.assign({}, rest, {\n key: node + name + index\n }), name);\n }\n case 'divider':\n {\n return /*#__PURE__*/React.createElement(Dropdown.Divider, {\n key: m.node + index\n });\n }\n default:\n return null;\n }\n });\n return /*#__PURE__*/React.createElement(Dropdown.Menu, null, content);\n }\n renderPopCard() {\n const {\n render,\n contentClassName,\n style,\n showTick,\n prefixCls\n } = this.props;\n const className = classnames(prefixCls, contentClassName);\n const {\n level = 0\n } = this.context;\n const contextValue = {\n showTick,\n level: level + 1\n };\n return /*#__PURE__*/React.createElement(DropdownContext.Provider, {\n value: contextValue\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: className,\n style: style\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-content`\n }, render)));\n }\n render() {\n const _a = this.props,\n {\n children,\n position,\n trigger,\n onVisibleChange,\n zIndex,\n className,\n motion,\n margin,\n style,\n prefixCls\n } = _a,\n attr = __rest(_a, [\"children\", \"position\", \"trigger\", \"onVisibleChange\", \"zIndex\", \"className\", \"motion\", \"margin\", \"style\", \"prefixCls\"]);\n let {\n spacing\n } = this.props;\n const {\n level\n } = this.context;\n const {\n popVisible\n } = this.state;\n const pop = this.renderContent();\n if (level > 0) {\n spacing = typeof spacing === 'number' ? spacing : numbers.NESTED_SPACING;\n } else if (spacing === null || typeof spacing === 'undefined') {\n spacing = numbers.SPACING;\n }\n return /*#__PURE__*/React.createElement(Tooltip, Object.assign({\n zIndex: zIndex,\n motion: motion,\n margin: margin,\n content: pop,\n className: className,\n prefixCls: prefixCls,\n spacing: spacing,\n position: position,\n trigger: trigger,\n onVisibleChange: this.handleVisibleChange,\n showArrow: false,\n returnFocusOnClose: true,\n ref: this.tooltipRef\n }, attr), /*#__PURE__*/React.isValidElement(children) ? /*#__PURE__*/React.cloneElement(children, {\n //@ts-ignore\n className: classnames(_get(children, 'props.className'), {\n [`${prefixCls}-showing`]: popVisible\n }),\n 'aria-haspopup': true,\n 'aria-expanded': popVisible,\n onKeyDown: e => {\n this.foundation.handleKeyDown(e);\n const childrenKeyDown = _get(children, 'props.onKeyDown');\n childrenKeyDown && childrenKeyDown(e);\n }\n }) : children);\n }\n}\nDropdown.Menu = DropdownMenu;\nDropdown.Item = DropdownItem;\nDropdown.Divider = DropdownDivider;\nDropdown.Title = DropdownTitle;\nDropdown.contextType = DropdownContext;\nDropdown.propTypes = {\n children: PropTypes.node,\n contentClassName: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n className: PropTypes.string,\n getPopupContainer: PropTypes.func,\n margin: PropTypes.oneOfType([PropTypes.number, PropTypes.object]),\n mouseEnterDelay: PropTypes.number,\n mouseLeaveDelay: PropTypes.number,\n menu: PropTypes.array,\n motion: PropTypes.oneOfType([PropTypes.bool, PropTypes.func, PropTypes.object]),\n onVisibleChange: PropTypes.func,\n prefixCls: PropTypes.string,\n position: PropTypes.oneOf(positionSet),\n rePosKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n render: PropTypes.node,\n spacing: PropTypes.oneOfType([PropTypes.number, PropTypes.object]),\n showTick: PropTypes.bool,\n style: PropTypes.object,\n trigger: PropTypes.oneOf(triggerSet),\n visible: PropTypes.bool,\n zIndex: PropTypes.number\n};\nDropdown.__SemiComponentName__ = \"Dropdown\";\nDropdown.defaultProps = getDefaultPropsFromGlobalConfig(Dropdown.__SemiComponentName__, {\n onVisibleChange: _noop,\n prefixCls: cssClasses.PREFIX,\n zIndex: tooltipNumbers.DEFAULT_Z_INDEX,\n motion: true,\n trigger: 'hover',\n position: 'bottom',\n mouseLeaveDelay: strings.DEFAULT_LEAVE_DELAY,\n showTick: false,\n closeOnEsc: true,\n onEscKeyDown: _noop\n});\nexport default Dropdown;","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}`\n};\nexport { cssClasses };","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\n/**\n * Implementation reference from: https://github.com/ant-design/ant-design/blob/master/components/grid/row.tsx\n */\nimport React from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/grid/constants';\nimport '@douyinfe/semi-foundation/lib/es/grid/grid.css';\nimport { registerMediaQuery } from '../_utils';\nconst responsiveArray = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\nexport const RowContext = /*#__PURE__*/React.createContext(null);\nconst responsiveMap = {\n xs: '(max-width: 575px)',\n sm: '(min-width: 576px)',\n md: '(min-width: 768px)',\n lg: '(min-width: 992px)',\n xl: '(min-width: 1200px)',\n xxl: '(min-width: 1600px)'\n};\nclass Row extends React.Component {\n constructor() {\n super(...arguments);\n this.state = {\n screens: {\n xs: true,\n sm: true,\n md: true,\n lg: true,\n xl: true,\n xxl: true\n }\n };\n this.unRegisters = [];\n }\n componentDidMount() {\n this.unRegisters = Object.keys(responsiveMap).map(screen => registerMediaQuery(responsiveMap[screen], {\n match: () => {\n if (typeof this.props.gutter !== 'object') {\n return;\n }\n this.setState(prevState => ({\n screens: Object.assign(Object.assign({}, prevState.screens), {\n [screen]: true\n })\n }));\n },\n unmatch: () => {\n if (typeof this.props.gutter !== 'object') {\n return;\n }\n this.setState(prevState => ({\n screens: Object.assign(Object.assign({}, prevState.screens), {\n [screen]: false\n })\n }));\n }\n }));\n }\n componentWillUnmount() {\n this.unRegisters.forEach(unRegister => unRegister());\n }\n getGutter() {\n const {\n gutter = 0\n } = this.props;\n const results = [0, 0];\n const normalizedGutter = Array.isArray(gutter) ? gutter.slice(0, 2) : [gutter, 0];\n normalizedGutter.forEach((g, index) => {\n if (typeof g === 'object') {\n for (let i = 0; i < responsiveArray.length; i++) {\n const breakpoint = responsiveArray[i];\n if (this.state.screens[breakpoint] && g[breakpoint] !== undefined) {\n results[index] = g[breakpoint];\n break;\n }\n }\n } else {\n results[index] = g || 0;\n }\n });\n return results;\n }\n render() {\n const _a = this.props,\n {\n prefixCls,\n type,\n justify,\n align,\n className,\n style,\n children\n } = _a,\n others = __rest(_a, [\"prefixCls\", \"type\", \"justify\", \"align\", \"className\", \"style\", \"children\"]);\n const gutters = this.getGutter();\n const prefix = `${prefixCls}-row`;\n const classes = classnames({\n [prefix]: type !== 'flex',\n [`${prefix}-${type}`]: type,\n [`${prefix}-${type}-${justify}`]: type && justify,\n [`${prefix}-${type}-${align}`]: type && align\n }, className);\n const rowStyle = Object.assign(Object.assign(Object.assign({}, gutters[0] > 0 ? {\n marginLeft: gutters[0] / -2,\n marginRight: gutters[0] / -2\n } : {}), gutters[1] > 0 ? {\n marginTop: gutters[1] / -2,\n marginBottom: gutters[1] / -2\n } : {}), style);\n const otherProps = Object.assign({}, others);\n delete otherProps.gutter;\n return /*#__PURE__*/React.createElement(RowContext.Provider, {\n value: {\n gutters\n }\n }, /*#__PURE__*/React.createElement(\"div\", Object.assign({}, otherProps, {\n className: classes,\n style: rowStyle,\n \"x-semi-prop\": \"children\"\n }), children));\n }\n}\nRow.propTypes = {\n type: PropTypes.oneOf(['flex']),\n align: PropTypes.oneOf(['top', 'middle', 'bottom']),\n justify: PropTypes.oneOf(['start', 'end', 'center', 'space-around', 'space-between']),\n className: PropTypes.string,\n style: PropTypes.object,\n children: PropTypes.node,\n gutter: PropTypes.oneOfType([PropTypes.object, PropTypes.number, PropTypes.array]),\n prefixCls: PropTypes.string\n};\nRow.defaultProps = {\n prefixCls: cssClasses.PREFIX\n};\nRow.RowContext = {\n gutters: PropTypes.any\n};\nexport default Row;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\n/**\n * Implementation reference from: https://github.com/ant-design/ant-design/blob/master/components/grid/col.tsx\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { RowContext } from './row';\nimport classnames from 'classnames';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/grid/constants';\nconst objectOrNumber = PropTypes.oneOfType([PropTypes.object, PropTypes.number]);\nclass Col extends React.Component {\n render() {\n const {\n props\n } = this;\n const {\n prefixCls,\n span,\n order,\n offset,\n push,\n pull,\n className,\n children\n } = props,\n others = __rest(props, [\"prefixCls\", \"span\", \"order\", \"offset\", \"push\", \"pull\", \"className\", \"children\"]);\n let sizeClassObj = {};\n const prefix = `${prefixCls}-col`;\n ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'].forEach(size => {\n let sizeProps = {};\n if (typeof props[size] === 'number') {\n sizeProps.span = props[size];\n } else if (typeof props[size] === 'object') {\n sizeProps = props[size] || {};\n }\n delete others[size];\n sizeClassObj = Object.assign(Object.assign({}, sizeClassObj), {\n [`${prefix}-${size}-${sizeProps.span}`]: sizeProps.span !== undefined,\n [`${prefix}-${size}-order-${sizeProps.order}`]: sizeProps.order || sizeProps.order === 0,\n [`${prefix}-${size}-offset-${sizeProps.offset}`]: sizeProps.offset || sizeProps.offset === 0,\n [`${prefix}-${size}-push-${sizeProps.push}`]: sizeProps.push || sizeProps.push === 0,\n [`${prefix}-${size}-pull-${sizeProps.pull}`]: sizeProps.pull || sizeProps.pull === 0\n });\n });\n const classes = classnames(prefix, {\n [`${prefix}-${span}`]: span !== undefined,\n [`${prefix}-order-${order}`]: order,\n [`${prefix}-offset-${offset}`]: offset,\n [`${prefix}-push-${push}`]: push,\n [`${prefix}-pull-${pull}`]: pull\n }, className, sizeClassObj);\n let {\n style\n } = others;\n let gutters;\n try {\n gutters = this.context.gutters;\n } catch (error) {\n throw new Error('please make sure inside ');\n }\n style = Object.assign(Object.assign(Object.assign({}, gutters[0] > 0 ? {\n paddingLeft: gutters[0] / 2,\n paddingRight: gutters[0] / 2\n } : {}), gutters[1] > 0 ? {\n paddingTop: gutters[1] / 2,\n paddingBottom: gutters[1] / 2\n } : {}), style);\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({}, others, {\n style: style,\n className: classes,\n \"x-semi-prop\": \"children\"\n }), children);\n }\n}\nCol.contextType = RowContext;\nCol.propTypes = {\n span: PropTypes.number,\n order: PropTypes.number,\n offset: PropTypes.number,\n push: PropTypes.number,\n pull: PropTypes.number,\n className: PropTypes.string,\n children: PropTypes.node,\n xs: objectOrNumber,\n sm: objectOrNumber,\n md: objectOrNumber,\n lg: objectOrNumber,\n xl: objectOrNumber,\n xxl: objectOrNumber,\n prefixCls: PropTypes.string\n};\nCol.defaultProps = {\n prefixCls: cssClasses.PREFIX\n};\nexport default Col;","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-layout`\n};\nconst strings = {\n BREAKPOINT: ['xs', 'sm', 'md', 'lg', 'xl', 'xxl']\n};\nexport { cssClasses, strings };","import React from 'react';\nimport { noop } from '@douyinfe/semi-foundation/lib/es/utils/function';\nconst LayoutContext = /*#__PURE__*/React.createContext({\n siderHook: {\n addSider: noop,\n removeSider: noop\n }\n});\nexport default LayoutContext;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/layout/constants';\nimport getDataAttr from '@douyinfe/semi-foundation/lib/es/utils/getDataAttr';\nimport LayoutContext from './layout-context';\nimport { registerMediaQuery } from '../_utils';\nconst responsiveMap = {\n xs: '(max-width: 575px)',\n sm: '(min-width: 576px)',\n md: '(min-width: 768px)',\n lg: '(min-width: 992px)',\n xl: '(min-width: 1200px)',\n xxl: '(min-width: 1600px)'\n};\nconst generateId = (() => {\n let i = 0;\n return () => {\n i += 1;\n return `${cssClasses.PREFIX}-sider-${i}`;\n };\n})();\nconst bpt = strings.BREAKPOINT;\nclass Sider extends React.PureComponent {\n constructor(props) {\n super(props);\n this.unRegisters = [];\n this.uniqueId = '';\n this.uniqueId = generateId();\n }\n componentDidMount() {\n const {\n breakpoint\n } = this.props;\n const matchBpt = Object.keys(responsiveMap).filter(item => breakpoint && breakpoint.indexOf(item) !== -1);\n const unRegisters = matchBpt.map(screen => registerMediaQuery(responsiveMap[screen], {\n match: () => {\n this.responsiveHandler(screen, true);\n },\n unmatch: () => {\n this.responsiveHandler(screen, false);\n }\n }));\n this.unRegisters = unRegisters;\n if (this.context.siderHook) {\n this.context.siderHook.addSider(this.uniqueId);\n }\n }\n componentWillUnmount() {\n this.unRegisters.forEach(unRegister => unRegister());\n if (this.context.siderHook) {\n this.context.siderHook.removeSider(this.uniqueId);\n }\n }\n responsiveHandler(screen, matches) {\n const {\n onBreakpoint\n } = this.props;\n if (onBreakpoint) {\n onBreakpoint(screen, matches);\n }\n }\n render() {\n const _a = this.props,\n {\n prefixCls,\n className,\n children,\n style\n } = _a,\n others = __rest(_a, [\"prefixCls\", \"className\", \"children\", \"style\"]);\n const classString = cls(className, {\n [`${prefixCls}-sider`]: true\n });\n return /*#__PURE__*/React.createElement(\"aside\", Object.assign({\n className: classString,\n \"aria-label\": this.props['aria-label'],\n style: style\n }, getDataAttr(others)), /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-sider-children`\n }, children));\n }\n}\nSider.propTypes = {\n prefixCls: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n breakpoint: PropTypes.arrayOf(PropTypes.oneOf(bpt)),\n onBreakpoint: PropTypes.func,\n 'aria-label': PropTypes.string,\n role: PropTypes.string\n};\nSider.defaultProps = {\n prefixCls: cssClasses.PREFIX\n};\nSider.contextType = LayoutContext;\nSider.elementType = \"Layout.Sider\";\nexport default Sider;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/layout/constants';\nimport '@douyinfe/semi-foundation/lib/es/layout/layout.css';\nimport LayoutContext from './layout-context';\nimport Sider from './Sider';\nconst htmlTag = {\n Header: 'header',\n Footer: 'footer',\n Content: 'main',\n Layout: 'section'\n};\nfunction generator(type) {\n const tagName = htmlTag[type];\n const typeName = type.toLowerCase();\n return BasicComponent => class Adapter extends React.PureComponent {\n render() {\n return /*#__PURE__*/React.createElement(BasicComponent, Object.assign({\n role: this.props.role,\n \"aria-label\": this.props['aria-label'],\n type: typeName,\n tagName: tagName\n }, this.props));\n }\n };\n}\nclass Basic extends React.PureComponent {\n render() {\n const _a = this.props,\n {\n prefixCls,\n type,\n className,\n children,\n tagName\n } = _a,\n others = __rest(_a, [\"prefixCls\", \"type\", \"className\", \"children\", \"tagName\"]);\n const classString = cls(className, `${prefixCls}-${type}`);\n return /*#__PURE__*/React.createElement(tagName, Object.assign({\n className: classString\n }, others), children);\n }\n}\nBasic.propTypes = {\n prefixCls: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string\n};\nBasic.defaultProps = {\n prefixCls: cssClasses.PREFIX\n};\nconst Header = generator('Header')(Basic);\nconst Footer = generator('Footer')(Basic);\nconst Content = generator('Content')(Basic);\nclass Layout extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n siders: []\n };\n }\n getSiderHook() {\n return {\n addSider: id => {\n this.setState(state => ({\n siders: [...state.siders, id]\n }));\n },\n removeSider: id => {\n this.setState(state => ({\n siders: state.siders.filter(curr => curr !== id)\n }));\n }\n };\n }\n render() {\n const _a = this.props,\n {\n prefixCls,\n className,\n children,\n hasSider,\n tagName\n } = _a,\n others = __rest(_a, [\"prefixCls\", \"className\", \"children\", \"hasSider\", \"tagName\"]);\n const {\n siders\n } = this.state;\n const classString = cls(className, prefixCls, {\n [`${prefixCls}-has-sider`]: typeof hasSider === 'boolean' && hasSider || siders.length > 0 || React.Children.toArray(children).some(child => {\n return /*#__PURE__*/React.isValidElement(child) && child.type && child.type.elementType === \"Layout.Sider\";\n })\n });\n const Tag = tagName;\n return /*#__PURE__*/React.createElement(LayoutContext.Provider, {\n value: {\n siderHook: this.getSiderHook()\n }\n }, /*#__PURE__*/React.createElement(Tag, Object.assign({\n className: classString\n }, others), children));\n }\n}\nLayout.propTypes = {\n prefixCls: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string\n};\nLayout.defaultProps = {\n prefixCls: cssClasses.PREFIX,\n tagName: 'section'\n};\nLayout.Header = Header;\nLayout.Footer = Footer;\nLayout.Content = Content;\nLayout.Sider = Sider;\nexport { Layout };\nexport default Layout;","import Icon from '@douyinfe/semi-icons';\nexport default Icon;","import Icon from './components/Icon';\nexport * from './components/Icon';\nexport * from './icons';\nexport default Icon;","// Reference to https://github.com/andreypopp/react-textarea-autosize/\nlet hiddenTextarea = null;\nconst HIDDEN_TEXTAREA_STYLE = {\n 'min-height': '0',\n 'max-height': 'none',\n height: '0',\n visibility: 'hidden',\n overflow: 'hidden',\n position: 'absolute',\n 'z-index': '-1000',\n top: '0',\n right: '0'\n};\nconst forceHiddenStyles = node => {\n Object.keys(HIDDEN_TEXTAREA_STYLE).forEach(key => {\n node.style.setProperty(key, HIDDEN_TEXTAREA_STYLE[key], 'important');\n });\n};\nconst getContentHeight = (node, sizingData) => {\n const height = node.scrollHeight;\n if (sizingData.sizingStyle.boxSizing === 'border-box') {\n // border-box: add border, since height = content + padding + border\n return height + sizingData.borderSize;\n }\n // remove padding, since height = content\n return height - sizingData.paddingSize;\n};\nexport default function calculateNodeHeight(sizingData, value) {\n let minRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n let maxRows = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : Infinity;\n if (!hiddenTextarea) {\n hiddenTextarea = document.createElement('textarea');\n hiddenTextarea.setAttribute('tab-index', '-1');\n hiddenTextarea.setAttribute('aria-hidden', 'true');\n forceHiddenStyles(hiddenTextarea);\n }\n if (hiddenTextarea.parentNode === null) {\n document.body.appendChild(hiddenTextarea);\n }\n const {\n paddingSize,\n borderSize,\n sizingStyle\n } = sizingData;\n const {\n boxSizing\n } = sizingStyle;\n Object.keys(sizingStyle).forEach(key => {\n hiddenTextarea.style[key] = sizingStyle[key];\n });\n forceHiddenStyles(hiddenTextarea);\n hiddenTextarea.value = value;\n let height = getContentHeight(hiddenTextarea, sizingData);\n // measure height of a textarea with a single row\n hiddenTextarea.value = 'x';\n // calc single row need to remove padding and border to avoid duplicated calc\n const rowHeight = getContentHeight(hiddenTextarea, sizingData) - paddingSize - borderSize;\n let minHeight = rowHeight * minRows;\n if (boxSizing === 'border-box') {\n minHeight = minHeight + paddingSize + borderSize;\n }\n height = Math.max(minHeight, height);\n let maxHeight = rowHeight * maxRows;\n if (boxSizing === 'border-box') {\n maxHeight = maxHeight + paddingSize + borderSize;\n }\n height = Math.min(maxHeight, height);\n return height;\n}","import _pick from \"lodash/pick\"; // Reference to https://github.com/andreypopp/react-textarea-autosize/\nconst SIZING_STYLE = ['borderBottomWidth', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth', 'boxSizing', 'fontFamily', 'fontSize', 'fontStyle', 'fontWeight', 'letterSpacing', 'lineHeight', 'paddingBottom', 'paddingLeft', 'paddingRight', 'paddingTop',\n// non-standard\n'tabSize', 'textIndent',\n// non-standard\n'textRendering', 'textTransform', 'width'];\nconst getSizingData = node => {\n const style = window.getComputedStyle(node);\n if (style === null) {\n return null;\n }\n const sizingStyle = _pick(style, SIZING_STYLE);\n const {\n boxSizing\n } = sizingStyle;\n // probably node is detached from DOM, can't read computed dimensions\n if (boxSizing === '') {\n return null;\n }\n const paddingSize = parseFloat(sizingStyle.paddingBottom) + parseFloat(sizingStyle.paddingTop);\n const borderSize = parseFloat(sizingStyle.borderBottomWidth) + parseFloat(sizingStyle.borderTopWidth);\n return {\n sizingStyle,\n paddingSize,\n borderSize\n };\n};\nexport default getSizingData;","import _isString from \"lodash/isString\";\nimport _isNumber from \"lodash/isNumber\";\nimport _isFunction from \"lodash/isFunction\";\nimport _noop from \"lodash/noop\";\nimport BaseFoundation from '../base/foundation';\nimport calculateNodeHeight from './util/calculateNodeHeight';\nimport getSizingData from './util/getSizingData';\nimport truncateValue from './util/truncateValue';\nexport default class TextAreaFoundation extends BaseFoundation {\n static get textAreaDefaultAdapter() {\n return {\n notifyChange: _noop,\n setValue: _noop,\n toggleFocusing: _noop,\n toggleHovering: _noop,\n notifyFocus: _noop,\n notifyBlur: _noop,\n notifyKeyDown: _noop,\n notifyEnterPress: _noop\n };\n }\n constructor(adapter) {\n super(Object.assign(Object.assign({}, TextAreaFoundation.textAreaDefaultAdapter), adapter));\n this.resizeTextarea = () => {\n var _a;\n const {\n height\n } = this.getStates();\n const {\n rows,\n autosize\n } = this.getProps();\n const node = this._adapter.getRef();\n const nodeSizingData = getSizingData(node);\n if (!nodeSizingData) {\n return;\n }\n const [minRows, maxRows] = autosize !== null && typeof autosize === 'object' ? [(_a = autosize === null || autosize === void 0 ? void 0 : autosize.minRows) !== null && _a !== void 0 ? _a : rows, autosize === null || autosize === void 0 ? void 0 : autosize.maxRows] : [rows];\n const newHeight = calculateNodeHeight(nodeSizingData, node.value || node.placeholder || 'x', minRows, maxRows);\n if (height !== newHeight) {\n this._adapter.notifyHeightUpdate(newHeight);\n node.style.height = `${newHeight}px`;\n return;\n }\n };\n }\n destroy() {}\n handleValueChange(v) {\n this._adapter.setValue(v);\n }\n handleChange(value, e) {\n const {\n maxLength,\n minLength,\n getValueLength\n } = this._adapter.getProps();\n let nextValue = value;\n if (maxLength && _isFunction(getValueLength)) {\n nextValue = this.handleVisibleMaxLength(value);\n }\n if (minLength && _isFunction(getValueLength)) {\n this.handleVisibleMinLength(nextValue);\n }\n if (this._isControlledComponent()) {\n this._adapter.notifyChange(nextValue, e);\n } else {\n this._adapter.setValue(nextValue);\n this._adapter.notifyChange(nextValue, e);\n }\n }\n /**\n * Modify minLength to trigger browser check for minimum length\n * Controlled mode is not checked\n * @param {String} value\n */\n handleVisibleMinLength(value) {\n const {\n minLength,\n getValueLength\n } = this._adapter.getProps();\n const {\n minLength: stateMinLength\n } = this._adapter.getStates();\n if (_isNumber(minLength) && minLength >= 0 && _isFunction(getValueLength) && _isString(value)) {\n const valueLength = getValueLength(value);\n if (valueLength < minLength) {\n const newMinLength = value.length + (minLength - valueLength);\n newMinLength !== stateMinLength && this._adapter.setMinLength(newMinLength);\n } else {\n stateMinLength !== minLength && this._adapter.setMinLength(minLength);\n }\n }\n }\n /**\n * Handle input emoji characters beyond maxLength\n * Controlled mode is not checked\n * @param {String} value\n */\n handleVisibleMaxLength(value) {\n const {\n maxLength,\n getValueLength\n } = this._adapter.getProps();\n if (_isNumber(maxLength) && maxLength >= 0 && _isString(value)) {\n if (_isFunction(getValueLength)) {\n const valueLength = getValueLength(value);\n if (valueLength > maxLength) {\n console.warn('[Semi TextArea] The input character is truncated because the input length exceeds the maximum length limit');\n const truncatedValue = this.handleTruncateValue(value, maxLength);\n return truncatedValue;\n }\n } else {\n if (value.length > maxLength) {\n console.warn('[Semi TextArea] The input character is truncated because the input length exceeds the maximum length limit');\n return value.slice(0, maxLength);\n }\n }\n return value;\n }\n return undefined;\n }\n /**\n * Truncate textarea values based on maximum length\n * @param {String} value\n * @param {Number} maxLength\n * @returns {String}\n */\n handleTruncateValue(value, maxLength) {\n const {\n getValueLength\n } = this._adapter.getProps();\n return truncateValue({\n value,\n maxLength,\n getValueLength\n });\n }\n handleFocus(e) {\n const {\n value\n } = this.getStates();\n this._adapter.toggleFocusing(true);\n this._adapter.notifyFocus(value, e);\n }\n handleBlur(e) {\n const {\n value\n } = this.getStates();\n const {\n maxLength\n } = this.getProps();\n let realValue = value;\n if (maxLength) {\n // 如果设置了 maxLength,在中文输输入过程中,如果点击外部触发 blur,则拼音字符的所有内容会回显,\n // 该表现不符合 maxLength 规定,因此需要在 blur 的时候二次确认\n // 详情见 https://github.com/DouyinFE/semi-design/issues/2005\n // If maxLength is set, during the Chinese input process, if you click outside to trigger blur, \n // all the contents of the Pinyin characters will be echoed.\n // This behavior does not meet the maxLength requirement, so we need to confirm twice when blurring。\n // For details, see https://github.com/DouyinFE/semi-design/issues/2005\n realValue = this.handleVisibleMaxLength(value);\n if (realValue !== value) {\n if (!this._isControlledComponent()) {\n this._adapter.setValue(realValue);\n }\n this._adapter.notifyChange(realValue, e);\n }\n }\n this._adapter.toggleFocusing(false);\n this._adapter.notifyBlur(realValue, e);\n }\n handleKeyDown(e) {\n const {\n disabledEnterStartNewLine\n } = this.getProps();\n if (disabledEnterStartNewLine && e.key === 'Enter' && !e.shiftKey) {\n // Prevent default line wrapping behavior\n e.preventDefault();\n }\n this._adapter.notifyKeyDown(e);\n if (e.keyCode === 13) {\n this._adapter.notifyPressEnter(e);\n }\n }\n // e: MouseEvent\n handleMouseEnter(e) {\n this._adapter.toggleHovering(true);\n }\n // e: MouseEvent\n handleMouseLeave(e) {\n this._adapter.toggleHovering(false);\n }\n isAllowClear() {\n const {\n value,\n isFocus,\n isHover\n } = this._adapter.getStates();\n const {\n showClear,\n disabled,\n readonly\n } = this._adapter.getProps();\n const allowClear = value && showClear && !disabled && (isFocus || isHover) && !readonly;\n return allowClear;\n }\n handleClear(e) {\n const {\n isFocus\n } = this.getStates();\n if (this._isControlledComponent('value')) {\n this._adapter.setState({\n isFocus: false\n });\n } else {\n this._adapter.setState({\n value: '',\n isFocus: false\n });\n }\n if (isFocus) {\n this._adapter.notifyBlur('', e);\n }\n this._adapter.notifyChange('', e);\n this._adapter.notifyClear(e);\n this.stopPropagation(e);\n }\n}","import _throttle from \"lodash/throttle\";\nimport _isObject from \"lodash/isObject\";\nimport _isUndefined from \"lodash/isUndefined\";\nimport _isFunction from \"lodash/isFunction\";\nimport _omit from \"lodash/omit\";\nimport _noop from \"lodash/noop\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport TextAreaFoundation from '@douyinfe/semi-foundation/lib/es/input/textareaFoundation';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/input/constants';\nimport BaseComponent from '../_base/baseComponent';\nimport '@douyinfe/semi-foundation/lib/es/input/textarea.css';\nimport { IconClear } from '@douyinfe/semi-icons';\nimport ResizeObserver from '../resizeObserver';\nconst prefixCls = cssClasses.PREFIX;\nclass TextArea extends BaseComponent {\n constructor(props) {\n super(props);\n this.handleClear = e => {\n this.foundation.handleClear(e);\n };\n this.setRef = node => {\n this.libRef.current = node;\n const {\n forwardRef\n } = this.props;\n if (typeof forwardRef === 'function') {\n forwardRef(node);\n } else if (forwardRef && typeof forwardRef === 'object') {\n forwardRef.current = node;\n }\n };\n const initValue = 'value' in props ? props.value : props.defaultValue;\n this.state = {\n value: initValue,\n isFocus: false,\n isHover: false,\n height: 0,\n minLength: props.minLength,\n cachedValue: props.value\n };\n this.focusing = false;\n this.foundation = new TextAreaFoundation(this.adapter);\n this.libRef = /*#__PURE__*/React.createRef();\n this.throttledResizeTextarea = _throttle(this.foundation.resizeTextarea, 10);\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n setValue: value => this.setState({\n value\n }, () => {\n if (this.props.autosize) {\n this.foundation.resizeTextarea();\n }\n }),\n getRef: () => this.libRef.current,\n toggleFocusing: focusing => this.setState({\n isFocus: focusing\n }),\n toggleHovering: hovering => this.setState({\n isHover: hovering\n }),\n notifyChange: (val, e) => {\n this.props.onChange(val, e);\n },\n notifyClear: e => this.props.onClear(e),\n notifyBlur: (val, e) => this.props.onBlur(e),\n notifyFocus: (val, e) => this.props.onFocus(e),\n notifyKeyDown: e => {\n this.props.onKeyDown(e);\n },\n notifyHeightUpdate: height => {\n this.setState({\n height\n });\n this.props.onResize({\n height\n });\n },\n notifyPressEnter: e => {\n this.props.onEnterPress && this.props.onEnterPress(e);\n },\n setMinLength: minLength => this.setState({\n minLength\n })\n });\n }\n static getDerivedStateFromProps(props, state) {\n const willUpdateStates = {};\n if (props.value !== state.cachedValue) {\n willUpdateStates.value = props.value;\n willUpdateStates.cachedValue = props.value;\n }\n return willUpdateStates;\n }\n componentWillUnmount() {\n var _a, _b;\n if (this.throttledResizeTextarea) {\n (_b = (_a = this.throttledResizeTextarea) === null || _a === void 0 ? void 0 : _a.cancel) === null || _b === void 0 ? void 0 : _b.call(_a);\n this.throttledResizeTextarea = null;\n }\n }\n componentDidUpdate(prevProps, prevState) {\n if ((this.props.value !== prevProps.value || this.props.placeholder !== prevProps.placeholder) && this.props.autosize) {\n this.foundation.resizeTextarea();\n }\n }\n renderClearBtn() {\n const {\n showClear\n } = this.props;\n const displayClearBtn = this.foundation.isAllowClear();\n const clearCls = cls(`${prefixCls}-clearbtn`, {\n [`${prefixCls}-clearbtn-hidden`]: !displayClearBtn\n });\n if (showClear) {\n return (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions\n React.createElement(\"div\", {\n className: clearCls,\n onClick: this.handleClear\n }, /*#__PURE__*/React.createElement(IconClear, null))\n );\n }\n return null;\n }\n renderCounter() {\n let counter, current, total, countCls;\n const {\n showCounter,\n maxCount,\n getValueLength\n } = this.props;\n if (showCounter || maxCount) {\n const {\n value\n } = this.state;\n // eslint-disable-next-line no-nested-ternary\n current = value ? _isFunction(getValueLength) ? getValueLength(value) : value.length : 0;\n total = maxCount || null;\n countCls = cls(`${prefixCls}-textarea-counter`, {\n [`${prefixCls}-textarea-counter-exceed`]: current > total\n });\n counter = /*#__PURE__*/React.createElement(\"div\", {\n className: countCls\n }, current, total ? '/' : null, total);\n } else {\n counter = null;\n }\n return counter;\n }\n render() {\n const _a = this.props,\n {\n autosize,\n placeholder,\n onEnterPress,\n onResize,\n // resize,\n disabled,\n readonly,\n className,\n showCounter,\n validateStatus,\n maxCount,\n defaultValue,\n style,\n forwardRef,\n getValueLength,\n maxLength,\n minLength,\n showClear,\n borderless,\n autoFocus\n } = _a,\n rest = __rest(_a, [\"autosize\", \"placeholder\", \"onEnterPress\", \"onResize\", \"disabled\", \"readonly\", \"className\", \"showCounter\", \"validateStatus\", \"maxCount\", \"defaultValue\", \"style\", \"forwardRef\", \"getValueLength\", \"maxLength\", \"minLength\", \"showClear\", \"borderless\", \"autoFocus\"]);\n const {\n isFocus,\n value,\n minLength: stateMinLength\n } = this.state;\n const wrapperCls = cls(className, `${prefixCls}-textarea-wrapper`, {\n [`${prefixCls}-textarea-borderless`]: borderless,\n [`${prefixCls}-textarea-wrapper-disabled`]: disabled,\n [`${prefixCls}-textarea-wrapper-readonly`]: readonly,\n [`${prefixCls}-textarea-wrapper-${validateStatus}`]: Boolean(validateStatus),\n [`${prefixCls}-textarea-wrapper-focus`]: isFocus\n // [`${prefixCls}-textarea-wrapper-resize`]: !autosize && resize,\n });\n // const ref = this.props.forwardRef || this.textAreaRef;\n const itemCls = cls(`${prefixCls}-textarea`, {\n [`${prefixCls}-textarea-disabled`]: disabled,\n [`${prefixCls}-textarea-readonly`]: readonly,\n [`${prefixCls}-textarea-autosize`]: _isObject(autosize) ? _isUndefined(autosize === null || autosize === void 0 ? void 0 : autosize.maxRows) : autosize,\n [`${prefixCls}-textarea-showClear`]: showClear\n });\n const itemProps = Object.assign(Object.assign({}, _omit(rest, 'insetLabel', 'insetLabelId', 'getValueLength', 'onClear', 'showClear', 'disabledEnterStartNewLine')), {\n autoFocus: autoFocus || this.props['autofocus'],\n className: itemCls,\n disabled,\n readOnly: readonly,\n placeholder: !placeholder ? null : placeholder,\n onChange: e => this.foundation.handleChange(e.target.value, e),\n onFocus: e => this.foundation.handleFocus(e),\n onBlur: e => this.foundation.handleBlur(e.nativeEvent),\n onKeyDown: e => this.foundation.handleKeyDown(e),\n value: value === null || value === undefined ? '' : value\n });\n if (!_isFunction(getValueLength)) {\n itemProps.maxLength = maxLength;\n }\n if (stateMinLength) {\n itemProps.minLength = stateMinLength;\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n className: wrapperCls,\n style: style,\n onMouseEnter: e => this.foundation.handleMouseEnter(e),\n onMouseLeave: e => this.foundation.handleMouseLeave(e)\n }, autosize ? (/*#__PURE__*/React.createElement(ResizeObserver, {\n onResize: this.throttledResizeTextarea\n }, /*#__PURE__*/React.createElement(\"textarea\", Object.assign({}, itemProps, {\n ref: this.setRef\n })))) : (/*#__PURE__*/React.createElement(\"textarea\", Object.assign({}, itemProps, {\n ref: this.setRef\n }))), this.renderClearBtn(), this.renderCounter());\n }\n}\nTextArea.propTypes = {\n autosize: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\n borderless: PropTypes.bool,\n placeholder: PropTypes.string,\n value: PropTypes.string,\n rows: PropTypes.number,\n cols: PropTypes.number,\n maxCount: PropTypes.number,\n onEnterPress: PropTypes.func,\n validateStatus: PropTypes.string,\n className: PropTypes.string,\n style: PropTypes.object,\n showClear: PropTypes.bool,\n onClear: PropTypes.func,\n onResize: PropTypes.func,\n getValueLength: PropTypes.func,\n disabledEnterStartNewLine: PropTypes.bool\n // TODO\n // resize: PropTypes.bool,\n};\nTextArea.defaultProps = {\n autosize: false,\n borderless: false,\n rows: 4,\n cols: 20,\n showCounter: false,\n showClear: false,\n onEnterPress: _noop,\n onChange: _noop,\n onBlur: _noop,\n onFocus: _noop,\n onKeyDown: _noop,\n onResize: _noop,\n onClear: _noop\n // resize: false,\n};\nconst ForwardTextarea = /*#__PURE__*/React.forwardRef((props, ref) => (/*#__PURE__*/React.createElement(TextArea, Object.assign({}, props, {\n forwardRef: ref\n}))));\nexport default ForwardTextarea;","/**\n * Determine whether both values are NaN\n * @param {*} a\n * @param {*} b\n * @returns {Boolean}\n */\nconst isBothNaN = (a, b) => {\n const {\n isNaN\n } = Number;\n return isNaN(a) && isNaN(b);\n};\nexport default isBothNaN;","import { cssClasses as inputCssClasses, numbers as inputNumbers, strings as inputStrings } from '../input/constants';\nconst cssClasses = Object.assign({}, inputCssClasses);\nconst numbers = Object.assign(Object.assign({}, inputNumbers), {\n DEFAULT_STEP: 1,\n DEFAULT_SHIFT_STEP: 10,\n DEFAULT_PRESS_TIMEOUT: 250,\n DEFAULT_PRESS_INTERVAL: 0,\n MOUSE_BUTTON_LEFT: 0\n});\nconst strings = Object.assign({}, inputStrings);\nexport { cssClasses, numbers, strings };","/**\n * Solve the problem of js addition accuracy\n * e.g.\n * 0.1 + 0.2 => 0.30000000000000004\n * plus(0.1, 0.2) => 0.3\n * @param {Number} num1\n * @param {Number} num2\n */\nexport function plus(num1, num2) {\n const num1Digits = (num1.toString().split('.')[1] || '').length;\n const num2Digits = (num2.toString().split('.')[1] || '').length;\n const baseNum = Math.pow(10, Math.max(num1Digits, num2Digits));\n return (num1 * baseNum + num2 * baseNum) / baseNum;\n}\nexport function minus(num1, num2) {\n return plus(num1, -num2);\n}","import _isString from \"lodash/isString\";\nimport _get from \"lodash/get\";\nimport _toString from \"lodash/toString\";\nimport _toNumber from \"lodash/toNumber\";\nimport BaseFoundation from '../base/foundation';\nimport keyCode from '../utils/keyCode';\nimport { numbers } from './constants';\nimport { minus as numberMinus } from '../utils/number';\nclass InputNumberFoundation extends BaseFoundation {\n init() {\n this._setInitValue();\n }\n destroy() {\n this._unregisterInterval();\n this._unregisterTimer();\n this._adapter.unregisterGlobalEvent('mouseup');\n }\n isControlled() {\n return this._isControlledComponent('value');\n }\n _doInput() {\n let v = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n let event = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n let updateCb = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n let notifyVal = v;\n let number = v;\n let isValidNumber = true;\n const isControlled = this.isControlled();\n // console.log(v);\n if (typeof v !== 'number') {\n number = this.doParse(v, false);\n isValidNumber = !isNaN(number);\n }\n if (isValidNumber) {\n notifyVal = number;\n if (!isControlled) {\n this._adapter.setNumber(number);\n }\n }\n if (!isControlled) {\n this._adapter.setValue(v, updateCb);\n }\n if (this.getProp('keepFocus')) {\n this._adapter.setFocusing(true, () => {\n this._adapter.setClickUpOrDown(true);\n });\n }\n this.notifyChange(notifyVal, event);\n }\n _registerInterval(cb) {\n const pressInterval = this.getProp('pressInterval') || numbers.DEFAULT_PRESS_INTERVAL;\n this._intervalHasRegistered = true;\n this._interval = setInterval(() => {\n if (typeof cb === 'function' && this._intervalHasRegistered) {\n cb();\n }\n }, pressInterval);\n }\n _unregisterInterval() {\n if (this._interval) {\n this._intervalHasRegistered = false;\n clearInterval(this._interval);\n this._interval = null;\n }\n }\n _registerTimer(cb) {\n const pressTimeout = this.getProp('pressTimeout') || numbers.DEFAULT_PRESS_TIMEOUT;\n this._timerHasRegistered = true;\n this._timer = setTimeout(() => {\n if (this._timerHasRegistered && typeof cb === 'function') {\n cb();\n }\n }, pressTimeout);\n }\n _unregisterTimer() {\n if (this._timer) {\n this._timerHasRegistered = false;\n clearTimeout(this._timer);\n this._timer = null;\n }\n }\n handleInputFocus(e) {\n const value = this.getState('value');\n if (value !== '') {\n // let parsedStr = this.doParse(this.getState('value'));\n // this._adapter.setValue(Number(parsedStr));\n }\n this._adapter.recordCursorPosition();\n this._adapter.setFocusing(true, null);\n this._adapter.setClickUpOrDown(false);\n this._adapter.notifyFocus(e);\n }\n /**\n * Input box content update processing\n * @param {String} value\n * @param {*} event\n */\n handleInputChange(value, event) {\n // Check accuracy, adjust accuracy, adjust maximum and minimum values, call parser to parse the number\n const parsedNum = this.doParse(value, true, true, true);\n // Parser parsed number, type Number (normal number or NaN)\n const toNum = this.doParse(value, false, false, false);\n // String converted from parser parsed numbers or directly converted without parser\n const valueAfterParser = this.afterParser(value);\n this._adapter.recordCursorPosition();\n let notifyVal;\n let num = toNum;\n // The formatted input value\n let formattedNum = value;\n if (value === '') {\n if (!this.isControlled()) {\n num = null;\n }\n } else if (this.isValidNumber(toNum) && this.isValidNumber(parsedNum)) {\n notifyVal = toNum;\n formattedNum = this.doFormat(toNum, false);\n } else {\n /**\n * This logic is used to solve the problem that parsedNum is not a valid number\n */\n if (typeof toNum === 'number' && !isNaN(toNum)) {\n formattedNum = this.doFormat(toNum, false);\n // console.log(`parsedStr: `, parsedStr, `toNum: `, toNum);\n const dotIndex = valueAfterParser.lastIndexOf('.');\n const lengthAfterDot = valueAfterParser.length - 1 - dotIndex;\n const precLength = this._getPrecLen(toNum);\n if (!precLength) {\n const dotBeginStr = dotIndex > -1 ? valueAfterParser.slice(dotIndex) : '';\n formattedNum += dotBeginStr;\n } else if (precLength < lengthAfterDot) {\n for (let i = 0; i < lengthAfterDot - precLength; i++) {\n formattedNum += '0';\n }\n }\n // NOUSE:\n num = toNum;\n } else {\n /**\n * When the user enters an illegal character, it needs to go through parser and format before displaying\n * Ensure that all input is processed by parser and format\n *\n * 用户输入非法字符时,需要经过 parser 和 format 一下再显示\n * 保证所有的输入都经过 parser 和 format 处理\n */\n formattedNum = this.doFormat(valueAfterParser, false);\n }\n notifyVal = valueAfterParser;\n }\n if (!this.isControlled() && (num === null || typeof num === 'number' && !isNaN(num))) {\n this._adapter.setNumber(num);\n }\n this._adapter.setValue(this.isControlled() ? formattedNum : this.doFormat(valueAfterParser, false), () => {\n this._adapter.restoreCursor();\n });\n this.notifyChange(notifyVal, event);\n }\n handleInputKeyDown(event) {\n const code = event.keyCode;\n if (code === keyCode.UP || code === keyCode.DOWN) {\n this._adapter.setClickUpOrDown(true);\n this._adapter.recordCursorPosition();\n const formattedVal = code === keyCode.UP ? this.add(null, event) : this.minus(null, event);\n this._doInput(formattedVal, event, () => {\n this._adapter.restoreCursor();\n });\n event.preventDefault();\n }\n this._adapter.notifyKeyDown(event);\n }\n handleInputBlur(e) {\n const currentValue = _toString(this.getState('value'));\n let currentNumber = this.getState('number');\n if (currentNumber != null || currentValue != null && currentValue !== '') {\n const parsedNum = this.doParse(currentValue, false, true, true);\n let numHasChanged = false;\n let strHasChanged = false;\n let willSetNum, willSetVal;\n if (this.isValidNumber(parsedNum) && currentNumber !== parsedNum) {\n willSetNum = parsedNum;\n if (!this.isControlled()) {\n currentNumber = willSetNum;\n }\n numHasChanged = true;\n }\n const currentFormattedNum = this.doFormat(currentNumber, true);\n if (currentFormattedNum !== currentValue) {\n willSetVal = currentFormattedNum;\n strHasChanged = true;\n }\n if (strHasChanged || numHasChanged) {\n const notifyVal = willSetVal != null ? willSetVal : willSetNum;\n if (willSetVal != null) {\n this._adapter.setValue(willSetVal);\n // this.notifyChange(willSetVal);\n }\n if (willSetNum != null) {\n if (!this._isControlledComponent('value')) {\n this._adapter.setNumber(willSetNum);\n }\n // this.notifyChange(willSetNum);\n }\n this.notifyChange(notifyVal, e);\n }\n }\n this._adapter.setFocusing(false);\n this._adapter.notifyBlur(e);\n }\n handleInputMouseEnter(event) {\n this._adapter.setHovering(true);\n }\n handleInputMouseLeave(event) {\n this._adapter.setHovering(false);\n }\n handleInputMouseMove(event) {\n this._adapter.setHovering(true);\n }\n handleMouseUp(e) {\n this._unregisterInterval();\n this._unregisterTimer();\n this._adapter.unregisterGlobalEvent('mouseup');\n }\n handleUpClick(event) {\n const {\n readonly\n } = this.getProps();\n if (!this._isMouseButtonLeft(event) || readonly) {\n return;\n }\n this._adapter.setClickUpOrDown(true);\n if (event) {\n this._persistEvent(event);\n event.stopPropagation();\n // Prevent native blurring events\n this._preventDefault(event);\n }\n this.upClick(event);\n // Cannot access event objects asynchronously https://reactjs.org/docs/events.html#event-pooling\n this._registerTimer(() => {\n this._registerInterval(() => {\n this.upClick(event);\n });\n });\n }\n handleDownClick(event) {\n const {\n readonly\n } = this.getProps();\n if (!this._isMouseButtonLeft(event) || readonly) {\n return;\n }\n this._adapter.setClickUpOrDown(true);\n if (event) {\n this._persistEvent(event);\n event.stopPropagation();\n this._preventDefault(event);\n }\n this.downClick(event);\n this._registerTimer(() => {\n this._registerInterval(() => {\n this.downClick(event);\n });\n });\n }\n /**\n * Whether it is a left mouse button click\n * @see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button\n */\n _isMouseButtonLeft(event) {\n return _get(event, 'button') === numbers.MOUSE_BUTTON_LEFT;\n }\n _preventDefault(event) {\n const keepFocus = this._adapter.getProp('keepFocus');\n const innerButtons = this._adapter.getProp('innerButtons');\n if (keepFocus || innerButtons) {\n event.preventDefault();\n }\n }\n handleMouseLeave(event) {\n this._adapter.registerGlobalEvent('mouseup', () => {\n this.handleMouseUp(event);\n });\n }\n upClick(event) {\n const value = this.add(null, event);\n this._doInput(value, event);\n this._adapter.notifyUpClick(value, event);\n }\n downClick(event) {\n const value = this.minus(null, event);\n this._doInput(value, event);\n this._adapter.notifyDownClick(value, event);\n }\n _setInitValue() {\n const {\n defaultValue,\n value\n } = this.getProps();\n const propsValue = this._isControlledComponent('value') ? value : defaultValue;\n const tmpNumber = this.doParse(_toString(propsValue), false, true, true);\n let number = null;\n if (typeof tmpNumber === 'number' && !isNaN(tmpNumber)) {\n number = tmpNumber;\n }\n const formattedValue = typeof number === 'number' ? this.doFormat(number, true) : '';\n this._adapter.setNumber(number);\n this._adapter.setValue(formattedValue);\n if (_isString(formattedValue) && formattedValue !== String(propsValue !== null && propsValue !== void 0 ? propsValue : '')) {\n this.notifyChange(formattedValue, null);\n }\n }\n add(step, event) {\n const pressShift = event && event.shiftKey;\n const propStep = pressShift ? this.getProp('shiftStep') : this.getProp('step');\n step = step == null ? propStep : Number(step);\n const stepAbs = Math.abs(_toNumber(step));\n const curVal = this.getState('number');\n let curNum = this.toNumber(curVal) || 0;\n const min = this.getProp('min');\n const max = this.getProp('max');\n const minPrecLen = this._getPrecLen(min);\n const maxPrecLen = this._getPrecLen(max);\n const curPrecLen = this._getPrecLen(curNum);\n const stepPrecLen = this._getPrecLen(step);\n const scale = Math.pow(10, Math.max(minPrecLen, maxPrecLen, curPrecLen, stepPrecLen));\n if (step < 0) {\n // Js accuracy problem\n if (Math.abs(numberMinus(min, curNum)) >= stepAbs) {\n curNum = (curNum * scale + step * scale) / scale;\n }\n } else if (step > 0) {\n if (Math.abs(numberMinus(max, curNum)) >= stepAbs) {\n curNum = (curNum * scale + step * scale) / scale;\n }\n }\n if (typeof min === 'number' && min > curNum) {\n curNum = min;\n }\n if (typeof max === 'number' && max < curNum) {\n curNum = max;\n }\n // console.log('scale: ', scale, 'curNum: ', curNum);\n return this.doFormat(curNum, true);\n }\n minus(step, event) {\n const pressShift = event && event.shiftKey;\n const propStep = pressShift ? this.getProp('shiftStep') : this.getProp('step');\n step = step == null ? propStep : Number(step);\n return this.add(-step, event);\n }\n /**\n * get decimal length\n * @param {number} num\n * @returns {number}\n */\n _getPrecLen(num) {\n if (typeof num !== 'string') {\n num = String(Math.abs(Number(num || '')));\n }\n const idx = num.indexOf('.') + 1;\n return idx ? num.length - idx : 0;\n }\n _adjustPrec(num) {\n const precision = this.getProp('precision');\n if (typeof precision === 'number' && num !== '' && num !== null && !Number.isNaN(Number(num))) {\n num = Number(num).toFixed(precision);\n }\n return _toString(num);\n }\n /**\n * format number to string\n * @param {string|number} value\n * @param {boolean} needAdjustPrec\n * @returns {string}\n */\n doFormat() {\n let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let needAdjustPrec = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n // if (typeof value === 'string') {\n // return value;\n // }\n let str;\n const formatter = this.getProp('formatter');\n if (needAdjustPrec) {\n str = this._adjustPrec(value);\n } else {\n str = _toString(value);\n }\n if (typeof formatter === 'function') {\n str = formatter(str);\n }\n return str;\n }\n /**\n *\n * @param {number} current\n * @returns {number}\n */\n fetchMinOrMax(current) {\n const {\n min,\n max\n } = this.getProps();\n if (current < min) {\n return min;\n } else if (current > max) {\n return max;\n }\n return current;\n }\n /**\n * parse to number\n * @param {string|number} value\n * @param {boolean} needCheckPrec\n * @param {boolean} needAdjustPrec\n * @param {boolean} needAdjustMaxMin\n * @returns {number}\n */\n doParse(value) {\n let needCheckPrec = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n let needAdjustPrec = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n let needAdjustMaxMin = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n if (typeof value === 'number') {\n if (needAdjustMaxMin) {\n value = this.fetchMinOrMax(value);\n }\n if (needAdjustPrec) {\n value = this._adjustPrec(value);\n }\n return _toNumber(value);\n }\n const parser = this.getProp('parser');\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (needCheckPrec && typeof value === 'string') {\n const zeroIsValid = value.indexOf('.') === -1 || value.indexOf('.') > -1 && (value === '0' || value.lastIndexOf('0') < value.length - 1);\n const dotIsValid = value.lastIndexOf('.') < value.length - 1 && value.split('').filter(v => v === '.').length < 2;\n if (!zeroIsValid || !dotIsValid\n // (this.getProp('precision') > 0 && this._getPrecLen(value) > this.getProp('precision'))\n ) {\n return NaN;\n }\n }\n if (needAdjustPrec) {\n value = this._adjustPrec(value);\n }\n if (typeof value === 'string' && value.length) {\n return needAdjustMaxMin ? this.fetchMinOrMax(_toNumber(value)) : _toNumber(value);\n }\n return NaN;\n }\n /**\n * Parsing the input value\n * @param {string} value\n * @returns {string}\n */\n afterParser(value) {\n const parser = this.getProp('parser');\n if (typeof value === 'string' && typeof parser === 'function') {\n return _toString(parser(value));\n }\n return _toString(value);\n }\n toNumber(value) {\n let needAdjustPrec = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n const parser = this.getProp('parser');\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (needAdjustPrec) {\n value = this._adjustPrec(value);\n }\n }\n return _toNumber(value);\n }\n /**\n * Returning true requires both:\n * 1.type is number and not equal to NaN\n * 2.min < = value < = max\n * 3.length after decimal point requires < = precision | | No precision\n * @param {*} um\n * @param {*} needCheckPrec\n * @returns\n */\n isValidNumber(num) {\n let needCheckPrec = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n if (typeof num === 'number' && !isNaN(num)) {\n const {\n min,\n max,\n precision\n } = this.getProps();\n const numPrec = this._getPrecLen(num);\n const precIsValid = needCheckPrec ? typeof precision === 'number' && numPrec <= precision || typeof precision !== 'number' : true;\n if (num >= min && num <= max && precIsValid) {\n return true;\n }\n }\n return false;\n }\n isValidString(str) {\n if (typeof str === 'string' && str.length) {\n const parsedNum = this.doParse(str);\n return this.isValidNumber(parsedNum);\n }\n return false;\n }\n notifyChange(value, e) {\n if (value == null || value === '') {\n this._adapter.notifyChange('', e);\n } else {\n const parsedNum = this.toNumber(value, true);\n if (typeof parsedNum === 'number' && !isNaN(parsedNum)) {\n // this._adapter.notifyChange(typeof value === 'number' ? parsedNum : this.afterParser(value), e);\n this._adapter.notifyChange(parsedNum, e);\n this.notifyNumberChange(parsedNum, e);\n } else {\n this._adapter.notifyChange(this.afterParser(value), e);\n }\n }\n }\n notifyNumberChange(value, e) {\n const {\n number\n } = this.getStates();\n // Does not trigger numberChange if value is not a significant number\n if (this.isValidNumber(value) && value !== number) {\n this._adapter.notifyNumberChange(value, e);\n }\n }\n updateStates(states, callback) {\n this._adapter.updateStates(states, callback);\n }\n}\nexport default InputNumberFoundation;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M19.64 16.44a1.5 1.5 0 0 1-2.12 0l-5.66-5.66-5.66 5.66a1.5 1.5 0 1 1-2.12-2.12L10.8 7.6a1.5 1.5 0 0 1 2.12 0l6.72 6.72a1.5 1.5 0 0 1 0 2.12Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'chevron_up');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M4.08 7.6a1.5 1.5 0 0 1 2.12 0l5.66 5.65 5.66-5.65a1.5 1.5 0 1 1 2.12 2.12l-6.72 6.72a1.5 1.5 0 0 1-2.12 0L4.08 9.72a1.5 1.5 0 0 1 0-2.12Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'chevron_down');\nexport default IconComponent;","import _noop from \"lodash/noop\";\nimport _isString from \"lodash/isString\";\nimport _isNaN from \"lodash/isNaN\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\n/* eslint-disable jsx-a11y/no-static-element-interactions */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport Input from '../input';\nimport { forwardStatics } from '@douyinfe/semi-foundation/lib/es/utils/object';\nimport isNullOrUndefined from '@douyinfe/semi-foundation/lib/es/utils/isNullOrUndefined';\nimport isBothNaN from '@douyinfe/semi-foundation/lib/es/utils/isBothNaN';\nimport InputNumberFoundation from '@douyinfe/semi-foundation/lib/es/inputNumber/foundation';\nimport BaseComponent from '../_base/baseComponent';\nimport { cssClasses, numbers, strings } from '@douyinfe/semi-foundation/lib/es/inputNumber/constants';\nimport { IconChevronUp, IconChevronDown } from '@douyinfe/semi-icons';\nimport '@douyinfe/semi-foundation/lib/es/inputNumber/inputNumber.css';\nclass InputNumber extends BaseComponent {\n get adapter() {\n var _this = this;\n return Object.assign(Object.assign({}, super.adapter), {\n setValue: (value, cb) => this.setState({\n value\n }, cb),\n setNumber: (number, cb) => this.setState({\n number\n }, cb),\n setFocusing: (focusing, cb) => this.setState({\n focusing\n }, cb),\n setHovering: hovering => this.setState({\n hovering\n }),\n notifyChange: function () {\n return _this.props.onChange(...arguments);\n },\n notifyNumberChange: function () {\n return _this.props.onNumberChange(...arguments);\n },\n notifyBlur: e => this.props.onBlur(e),\n notifyFocus: e => this.props.onFocus(e),\n notifyUpClick: (value, e) => this.props.onUpClick(value, e),\n notifyDownClick: (value, e) => this.props.onDownClick(value, e),\n notifyKeyDown: e => this.props.onKeyDown(e),\n registerGlobalEvent: (eventName, handler) => {\n if (eventName && typeof handler === 'function') {\n this.adapter.unregisterGlobalEvent(eventName);\n this.adapter.setCache(eventName, handler);\n document.addEventListener(eventName, handler);\n }\n },\n unregisterGlobalEvent: eventName => {\n if (eventName) {\n const handler = this.adapter.getCache(eventName);\n document.removeEventListener(eventName, handler);\n this.adapter.setCache(eventName, null);\n }\n },\n recordCursorPosition: () => {\n // Record position\n try {\n if (this.inputNode) {\n this.cursorStart = this.inputNode.selectionStart;\n this.cursorEnd = this.inputNode.selectionEnd;\n this.currentValue = this.inputNode.value;\n this.cursorBefore = this.inputNode.value.substring(0, this.cursorStart);\n this.cursorAfter = this.inputNode.value.substring(this.cursorEnd);\n }\n } catch (e) {\n console.warn(e);\n // Fix error in Chrome:\n // Failed to read the 'selectionStart' property from 'HTMLInputElement'\n // http://stackoverflow.com/q/21177489/3040605\n }\n },\n restoreByAfter: str => {\n if (isNullOrUndefined(str)) {\n return false;\n }\n const fullStr = this.inputNode.value;\n const index = fullStr.lastIndexOf(str);\n if (index === -1) {\n return false;\n }\n if (index + str.length === fullStr.length) {\n this.adapter.fixCaret(index, index);\n return true;\n }\n return false;\n },\n restoreCursor: function () {\n let str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _this.cursorAfter;\n if (isNullOrUndefined(str)) {\n return false;\n }\n // For loop from full str to the str with last char to map. e.g. 123\n // -> 123\n // -> 23\n // -> 3\n return Array.prototype.some.call(str, (_, start) => {\n const partStr = str.substring(start);\n return _this.adapter.restoreByAfter(partStr);\n });\n },\n fixCaret: (start, end) => {\n if (start === undefined || end === undefined || !this.inputNode || !this.inputNode.value) {\n return;\n }\n try {\n const currentStart = this.inputNode.selectionStart;\n const currentEnd = this.inputNode.selectionEnd;\n if (start !== currentStart || end !== currentEnd) {\n this.inputNode.setSelectionRange(start, end);\n }\n } catch (e) {\n // Fix error in Chrome:\n // Failed to read the 'selectionStart' property from 'HTMLInputElement'\n // http://stackoverflow.com/q/21177489/3040605\n }\n },\n setClickUpOrDown: value => {\n this.clickUpOrDown = value;\n },\n updateStates: (states, callback) => {\n this.setState(states, callback);\n }\n });\n }\n constructor(props) {\n super(props);\n this.setInputRef = node => {\n const {\n forwardedRef\n } = this.props;\n this.inputNode = node;\n if (forwardedRef && typeof forwardedRef === 'object') {\n forwardedRef.current = node;\n } else if (typeof forwardedRef === 'function') {\n forwardedRef(node);\n }\n };\n this.handleInputFocus = e => this.foundation.handleInputFocus(e);\n this.handleInputChange = (value, event) => this.foundation.handleInputChange(value, event);\n this.handleInputBlur = e => this.foundation.handleInputBlur(e);\n this.handleInputKeyDown = e => this.foundation.handleInputKeyDown(e);\n this.handleInputMouseEnter = e => this.foundation.handleInputMouseEnter(e);\n this.handleInputMouseLeave = e => this.foundation.handleInputMouseLeave(e);\n this.handleInputMouseMove = e => this.foundation.handleInputMouseMove(e);\n this.handleUpClick = e => this.foundation.handleUpClick(e);\n this.handleDownClick = e => this.foundation.handleDownClick(e);\n this.handleMouseUp = e => this.foundation.handleMouseUp(e);\n this.handleMouseLeave = e => this.foundation.handleMouseLeave(e);\n this.renderButtons = () => {\n const {\n prefixCls,\n disabled,\n innerButtons,\n max,\n min\n } = this.props;\n const {\n hovering,\n focusing,\n number\n } = this.state;\n const notAllowedUp = disabled ? disabled : number === max;\n const notAllowedDown = disabled ? disabled : number === min;\n const suffixChildrenCls = classnames(`${prefixCls}-number-suffix-btns`, {\n [`${prefixCls}-number-suffix-btns-inner`]: innerButtons,\n [`${prefixCls}-number-suffix-btns-inner-hover`]: innerButtons && hovering && !focusing\n });\n const upClassName = classnames(`${prefixCls}-number-button`, `${prefixCls}-number-button-up`, {\n [`${prefixCls}-number-button-up-disabled`]: disabled,\n [`${prefixCls}-number-button-up-not-allowed`]: notAllowedUp\n });\n const downClassName = classnames(`${prefixCls}-number-button`, `${prefixCls}-number-button-down`, {\n [`${prefixCls}-number-button-down-disabled`]: disabled,\n [`${prefixCls}-number-button-down-not-allowed`]: notAllowedDown\n });\n return /*#__PURE__*/React.createElement(\"div\", {\n className: suffixChildrenCls\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: upClassName,\n onMouseDown: notAllowedUp ? _noop : this.handleUpClick,\n onMouseUp: this.handleMouseUp,\n onMouseLeave: this.handleMouseLeave\n }, /*#__PURE__*/React.createElement(IconChevronUp, {\n size: \"extra-small\"\n })), /*#__PURE__*/React.createElement(\"span\", {\n className: downClassName,\n onMouseDown: notAllowedDown ? _noop : this.handleDownClick,\n onMouseUp: this.handleMouseUp,\n onMouseLeave: this.handleMouseLeave\n }, /*#__PURE__*/React.createElement(IconChevronDown, {\n size: \"extra-small\"\n })));\n };\n this.renderSuffix = () => {\n const {\n innerButtons,\n suffix\n } = this.props;\n const {\n hovering,\n focusing\n } = this.state;\n if (innerButtons && (hovering || focusing)) {\n const buttons = this.renderButtons();\n return buttons;\n }\n return suffix;\n };\n this.state = {\n value: '',\n number: null,\n focusing: Boolean(props.autofocus) || false,\n hovering: false\n };\n this.inputNode = null;\n this.foundation = new InputNumberFoundation(this.adapter);\n this.clickUpOrDown = false;\n }\n componentDidUpdate(prevProps) {\n const {\n value,\n preventScroll\n } = this.props;\n const {\n focusing\n } = this.state;\n let newValue;\n /**\n * To determine whether the front and back are equal\n * NaN need to check whether both are NaN\n */\n if (value !== prevProps.value && !isBothNaN(value, prevProps.value)) {\n if (isNullOrUndefined(value) || value === '') {\n newValue = '';\n this.foundation.updateStates({\n value: newValue,\n number: null\n });\n } else {\n let valueStr = value;\n if (typeof value === 'number') {\n valueStr = this.foundation.doFormat(value);\n }\n const parsedNum = this.foundation.doParse(valueStr, false, true, true);\n const toNum = typeof value === 'number' ? value : this.foundation.doParse(valueStr, false, false, false);\n /**\n * focusing 状态为输入状态,输入状态的受控值要特殊处理\n * 如:\n * - 输入合法值\n * 123 => input value 也应该是 123,同时需要设置 number 为 123\n * - 输入非法值,只设置 input value,不设置非法的number\n * abc => input value 这时是 abc,但失焦后会进行格式化\n * 100(超出范围) => input value 应该是 100,但不设置 number\n *\n * 保持输入态有三种方式\n * 1. 输入框输入\n * - 输入可以解析为合法数字,input value根据输入值确定,失焦时更新input value\n * - 输入不可解析为合法数字,进行格式化后显示在input框\n * 2. 键盘点击上下按钮(input value根据受控值进行更改)\n * 3. keepFocus+鼠标点击上下按钮(input value根据受控值进行更改)\n *\n * The focusing state is the input state, and the controlled value of the input state needs special treatment\n * For example:\n * - input legal value\n * 123 = > input value should also be 123, and the number should be set to 123\n * - input illegal value, only set the input value, do not set the illegal number\n * abc = > input value This is abc at this time, but it will be formatted after being out of focus\n * 100 (out of range) = > input value should be 100, but no number\n *\n * There are three ways to maintain the input state\n * 1. input box input\n * - input can be resolved into legal numbers, input value is determined according to the input value, and input value is updated when out of focus\n * - input cannot be resolved into legal numbers, and it will be displayed in the input box after formatting\n * 2. Keyboard click on the up and down button (input value is changed according to the controlled value)\n * 3.keepFocus + mouse click on the up and down button (input value is changed according to the controlled value)\n */\n if (focusing) {\n if (this.foundation.isValidNumber(parsedNum) && parsedNum !== this.state.number) {\n const obj = {\n number: parsedNum\n };\n /**\n * If you are clicking the button, it will automatically format once\n * We need to set the status to false after trigger focus event\n */\n if (this.clickUpOrDown) {\n obj.value = this.foundation.doFormat(obj.number, true);\n newValue = obj.value;\n }\n this.foundation.updateStates(obj, () => this.adapter.restoreCursor());\n } else if (!_isNaN(toNum)) {\n // Update input content when controlled input is illegal and not NaN\n newValue = this.foundation.doFormat(toNum, false);\n this.foundation.updateStates({\n value: newValue\n });\n } else {\n // Update input content when controlled input NaN\n this.foundation.updateStates({\n value: valueStr\n });\n }\n } else if (this.foundation.isValidNumber(parsedNum)) {\n newValue = this.foundation.doFormat(parsedNum);\n this.foundation.updateStates({\n number: parsedNum,\n value: newValue\n });\n } else {\n // Invalid digital analog blurring effect instead of controlled failure\n newValue = '';\n this.foundation.updateStates({\n number: null,\n value: newValue\n });\n }\n }\n if (newValue && _isString(newValue) && newValue !== String(this.props.value)) {\n this.foundation.notifyChange(newValue, null);\n }\n }\n if (!this.clickUpOrDown) {\n return;\n }\n if (this.props.keepFocus && this.state.focusing) {\n if (document.activeElement !== this.inputNode) {\n this.inputNode.focus({\n preventScroll\n });\n }\n }\n }\n render() {\n const _a = this.props,\n {\n disabled,\n className,\n prefixCls,\n min,\n max,\n step,\n shiftStep,\n precision,\n formatter,\n parser,\n forwardedRef,\n onUpClick,\n onDownClick,\n pressInterval,\n pressTimeout,\n suffix,\n size,\n hideButtons,\n innerButtons,\n style,\n onNumberChange,\n keepFocus,\n defaultValue\n } = _a,\n rest = __rest(_a, [\"disabled\", \"className\", \"prefixCls\", \"min\", \"max\", \"step\", \"shiftStep\", \"precision\", \"formatter\", \"parser\", \"forwardedRef\", \"onUpClick\", \"onDownClick\", \"pressInterval\", \"pressTimeout\", \"suffix\", \"size\", \"hideButtons\", \"innerButtons\", \"style\", \"onNumberChange\", \"keepFocus\", \"defaultValue\"]);\n const {\n value,\n number\n } = this.state;\n const inputNumberCls = classnames(className, `${prefixCls}-number`, {\n [`${prefixCls}-number-size-${size}`]: size\n });\n const buttons = this.renderButtons();\n const ariaProps = {\n 'aria-disabled': disabled,\n step\n };\n if (number) {\n ariaProps['aria-valuenow'] = number;\n }\n if (max !== Infinity) {\n ariaProps['aria-valuemax'] = max;\n }\n if (min !== -Infinity) {\n ariaProps['aria-valuemin'] = min;\n }\n const input = /*#__PURE__*/React.createElement(\"div\", {\n className: inputNumberCls,\n style: style,\n onMouseMove: e => this.handleInputMouseMove(e),\n onMouseEnter: e => this.handleInputMouseEnter(e),\n onMouseLeave: e => this.handleInputMouseLeave(e)\n }, /*#__PURE__*/React.createElement(Input, Object.assign({\n role: \"spinbutton\"\n }, ariaProps, rest, {\n size: size,\n disabled: disabled,\n ref: this.setInputRef,\n value: value,\n onFocus: this.handleInputFocus,\n onChange: this.handleInputChange,\n onBlur: this.handleInputBlur,\n onKeyDown: this.handleInputKeyDown,\n suffix: this.renderSuffix()\n })), hideButtons || innerButtons ? null : buttons);\n return input;\n }\n}\nInputNumber.propTypes = {\n 'aria-label': PropTypes.string,\n 'aria-labelledby': PropTypes.string,\n 'aria-invalid': PropTypes.bool,\n 'aria-errormessage': PropTypes.string,\n 'aria-describedby': PropTypes.string,\n 'aria-required': PropTypes.bool,\n autofocus: PropTypes.bool,\n clearIcon: PropTypes.node,\n className: PropTypes.string,\n defaultValue: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n disabled: PropTypes.bool,\n formatter: PropTypes.func,\n forwardedRef: PropTypes.any,\n hideButtons: PropTypes.bool,\n innerButtons: PropTypes.bool,\n insetLabel: PropTypes.node,\n insetLabelId: PropTypes.string,\n keepFocus: PropTypes.bool,\n max: PropTypes.number,\n min: PropTypes.number,\n parser: PropTypes.func,\n precision: PropTypes.number,\n prefixCls: PropTypes.string,\n pressInterval: PropTypes.number,\n pressTimeout: PropTypes.number,\n preventScroll: PropTypes.bool,\n shiftStep: PropTypes.number,\n step: PropTypes.number,\n style: PropTypes.object,\n suffix: PropTypes.any,\n value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onBlur: PropTypes.func,\n onChange: PropTypes.func,\n onDownClick: PropTypes.func,\n onKeyDown: PropTypes.func,\n onNumberChange: PropTypes.func,\n onUpClick: PropTypes.func\n};\nInputNumber.defaultProps = {\n forwardedRef: _noop,\n innerButtons: false,\n keepFocus: false,\n max: Infinity,\n min: -Infinity,\n prefixCls: cssClasses.PREFIX,\n pressInterval: numbers.DEFAULT_PRESS_TIMEOUT,\n pressTimeout: numbers.DEFAULT_PRESS_TIMEOUT,\n shiftStep: numbers.DEFAULT_SHIFT_STEP,\n size: strings.DEFAULT_SIZE,\n step: numbers.DEFAULT_STEP,\n onBlur: _noop,\n onChange: _noop,\n onDownClick: _noop,\n onFocus: _noop,\n onKeyDown: _noop,\n onNumberChange: _noop,\n onUpClick: _noop\n};\nexport default forwardStatics(/*#__PURE__*/React.forwardRef(function SemiInputNumber(props, ref) {\n return /*#__PURE__*/React.createElement(InputNumber, Object.assign({}, props, {\n forwardedRef: ref\n }));\n}), InputNumber);\nexport { InputNumber };","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst MODE_HORIZONTAL = 'horizontal';\nconst MODE_VERTICAL = 'vertical';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-navigation`\n};\nconst strings = {\n MODE: [MODE_VERTICAL, MODE_HORIZONTAL],\n MODE_VERTICAL,\n MODE_HORIZONTAL,\n ICON_POS_LEFT: 'left',\n ICON_POS_RIGHT: 'right',\n DEFAULT_LOGO_ICON_SIZE: 'extra-large',\n TOGGLE_ICON_LEFT: 'left',\n TOGGLE_ICON_RIGHT: 'right'\n};\nconst numbers = {\n DEFAULT_SUBNAV_MAX_HEIGHT: 999,\n DEFAULT_TOOLTIP_SHOW_DELAY: 0,\n DEFAULT_TOOLTIP_HIDE_DELAY: 100,\n DEFAULT_SUBNAV_OPEN_DELAY: 0,\n DEFAULT_SUBNAV_CLOSE_DELAY: 100 // ms\n};\nexport { cssClasses, strings, numbers };","import { numbers } from './constants';\nexport const DEFAULT_TOGGLE_ICON = {\n open: 'chevron_up',\n closed: 'chevron_down'\n};\nexport default class NavItem {\n constructor() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (options == null || typeof options !== 'object') {\n options = {\n text: options,\n itemKey: options,\n maxHeight: numbers.DEFAULT_SUBNAV_MAX_HEIGHT,\n // selected: false,\n // isOpen: false,\n link: null,\n items: null,\n icon: '',\n indent: false\n };\n }\n for (const key of Object.keys(options)) {\n this[key] = options[key];\n }\n if (options.items && Array.isArray(options.items) && options.items.length) {\n this.items = options.items.map(item => new NavItem(item));\n if ('toggleIcon' in options) {\n this.toggleIcon = NavItem.isValidToggleIcon(options.toggleIcon) ? Object.assign({}, options.toggleIcon) : Object.assign({}, DEFAULT_TOGGLE_ICON);\n } else {\n this.toggleIcon = Object.assign({}, DEFAULT_TOGGLE_ICON);\n }\n } else {\n this.items = null;\n }\n }\n static isValidToggleIcon(toggleIcon) {\n return Boolean(toggleIcon && typeof toggleIcon === 'object' && typeof toggleIcon.open === 'string' && toggleIcon.open.length && typeof toggleIcon.closed === 'string' && toggleIcon.closed.length);\n }\n}","import _get from \"lodash/get\";\nimport BaseFoundation from '../base/foundation';\nimport NavItem from './NavItem';\nimport { strings } from './constants';\nimport isNullOrUndefined from '../utils/isNullOrUndefined';\nexport default class NavigationFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n }\n /* istanbul ignore next */\n static getZeroParentKeys() {\n let itemKeysMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const willAddKeys = [];\n for (var _len = arguments.length, itemKeys = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n itemKeys[_key - 1] = arguments[_key];\n }\n if (itemKeys.length) {\n for (const itemKey of itemKeys) {\n if (Array.isArray(itemKeysMap[itemKey]) && itemKeysMap[itemKey].length) {\n const levelZeroParentKey = itemKeysMap[itemKey][0];\n if (!isNullOrUndefined(levelZeroParentKey)) {\n willAddKeys.push(levelZeroParentKey);\n }\n }\n }\n }\n return willAddKeys;\n }\n static buildItemKeysMap() {\n let items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let keysMap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let parentKeys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n let keyPropName = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'itemKey';\n if (Array.isArray(items) && items.length) {\n for (const item of items) {\n if (Array.isArray(item)) {\n NavigationFoundation.buildItemKeysMap(item, keysMap, [...parentKeys], keyPropName);\n } else {\n let itemKey;\n if (item && typeof item === 'object') {\n itemKey = item[keyPropName] || item.props && item.props[keyPropName];\n }\n if (itemKey) {\n keysMap[itemKey] = [...parentKeys];\n if (Array.isArray(item.items) && item.items.length) {\n NavigationFoundation.buildItemKeysMap(item.items, keysMap, [...parentKeys, itemKey], keyPropName);\n } else if (item.props && item.props.children) {\n const children = Array.isArray(item.props.children) ? item.props.children : [item.props.children];\n NavigationFoundation.buildItemKeysMap(children, keysMap, [...parentKeys, itemKey], keyPropName);\n }\n }\n }\n }\n }\n return keysMap;\n }\n /**\n * init is called in constructor and componentDidMount.\n * if you want to update state in constructor, please add it to return object;\n * if you want to update state in componentDidMount, please call adapter in else logic.\n * @param {*} lifecycle\n * @returns\n */\n init(lifecycle) {\n const {\n defaultSelectedKeys,\n selectedKeys\n } = this.getProps();\n let willSelectedKeys = selectedKeys || defaultSelectedKeys || [];\n const {\n itemKeysMap,\n willOpenKeys,\n formattedItems\n } = this.getCalcState();\n const parentSelectKeys = this.selectLevelZeroParentKeys(itemKeysMap, willSelectedKeys);\n willSelectedKeys = willSelectedKeys.concat(parentSelectKeys);\n if (lifecycle === 'constructor') {\n return {\n selectedKeys: willSelectedKeys,\n itemKeysMap,\n openKeys: willOpenKeys,\n items: formattedItems\n };\n } else {\n // already include parentSelectKeys, set second parameter to false\n this._adapter.updateSelectedKeys(willSelectedKeys, false);\n this._adapter.setItemKeysMap(itemKeysMap);\n this._adapter.updateOpenKeys(willOpenKeys);\n this._adapter.updateItems(formattedItems);\n this._adapter.setItemsChanged(true);\n }\n return undefined;\n }\n /**\n * Get the state to be calculated\n */\n getCalcState() {\n const {\n itemKeysMap,\n formattedItems\n } = this.getFormattedItems();\n const willOpenKeys = this.getWillOpenKeys(itemKeysMap);\n return {\n itemKeysMap,\n willOpenKeys,\n formattedItems\n };\n }\n /**\n * Calculate formatted items and itemsKeyMap\n */\n getFormattedItems() {\n const {\n items,\n children\n } = this.getProps();\n const formattedItems = this.formatItems(items);\n const willHandleItems = Array.isArray(items) && items.length ? formattedItems : children;\n const itemKeysMap = NavigationFoundation.buildItemKeysMap(willHandleItems);\n return {\n itemKeysMap,\n formattedItems\n };\n }\n /**\n * Calculate the keys that will need to be opened soon\n * @param {*} itemKeysMap\n */\n getWillOpenKeys(itemKeysMap) {\n const {\n defaultOpenKeys,\n openKeys,\n defaultSelectedKeys,\n selectedKeys,\n mode\n } = this.getProps();\n const {\n openKeys: stateOpenKeys = []\n } = this.getStates();\n let willOpenKeys = openKeys || defaultOpenKeys || [];\n if (!(Array.isArray(defaultOpenKeys) || Array.isArray(openKeys)) && mode === strings.MODE_VERTICAL && (Array.isArray(defaultSelectedKeys) || Array.isArray(selectedKeys))) {\n const currentSelectedKeys = Array.isArray(selectedKeys) ? selectedKeys : defaultSelectedKeys;\n willOpenKeys = stateOpenKeys.concat(this.getShouldOpenKeys(itemKeysMap, currentSelectedKeys));\n willOpenKeys = Array.from(new Set(willOpenKeys));\n }\n return [...willOpenKeys];\n }\n getShouldOpenKeys() {\n let itemKeysMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let selectedKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n const willOpenKeySet = new Set();\n if (Array.isArray(selectedKeys) && selectedKeys.length) {\n selectedKeys.forEach(item => {\n if (item) {\n const parentKeys = _get(itemKeysMap, item);\n if (Array.isArray(parentKeys)) {\n parentKeys.forEach(k => willOpenKeySet.add(k));\n }\n }\n });\n }\n return [...willOpenKeySet];\n }\n destroy() {}\n selectLevelZeroParentKeys(itemKeysMap, itemKeys) {\n const _itemKeysMap = isNullOrUndefined(itemKeysMap) ? this.getState('itemKeysMap') : itemKeysMap;\n // console.log(itemKeysMap);\n const willAddKeys = [];\n if (itemKeys.length) {\n for (const itemKey of itemKeys) {\n if (Array.isArray(_itemKeysMap[itemKey]) && _itemKeysMap[itemKey].length) {\n const levelZeroParentKey = _itemKeysMap[itemKey][0];\n if (!isNullOrUndefined(levelZeroParentKey)) {\n willAddKeys.push(levelZeroParentKey);\n }\n }\n }\n }\n if (willAddKeys.length) {\n return willAddKeys;\n }\n return [];\n }\n formatItems() {\n let items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n const formattedItems = [];\n for (const item of items) {\n formattedItems.push(new NavItem(item));\n }\n return formattedItems;\n }\n handleSelect(data) {\n this._adapter.notifySelect(data);\n }\n /* istanbul ignore next */\n judgeIfOpen(openKeys, items) {\n let shouldBeOpen = false;\n const _openKeys = Array.isArray(openKeys) ? openKeys : openKeys && [openKeys];\n if (_openKeys && Array.isArray(items) && items.length) {\n for (const item of items) {\n shouldBeOpen = _openKeys.includes(item.itemKey) || this.judgeIfOpen(_openKeys, item.items);\n if (shouldBeOpen) {\n break;\n }\n }\n }\n return shouldBeOpen;\n }\n handleCollapseChange() {\n const isCollapsed = !this.getState('isCollapsed');\n if (!this._isControlledComponent('isCollapsed')) {\n this._adapter.setIsCollapsed(isCollapsed);\n }\n this._adapter.notifyCollapseChange(isCollapsed);\n }\n handleItemsChange(isChanged) {\n this._adapter.setItemsChanged(isChanged);\n }\n}","import BaseFoundation from '../base/foundation';\nimport isEnterPress from '../utils/isEnterPress';\nconst addKeys = function addKeys() {\n let originKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n const keySet = new Set(originKeys);\n for (var _len = arguments.length, willAddKeys = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n willAddKeys[_key - 1] = arguments[_key];\n }\n willAddKeys.forEach(key => key && keySet.add(key));\n return Array.from(keySet);\n};\nconst removeKeys = function removeKeys() {\n let originKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n const keySet = new Set(originKeys);\n for (var _len2 = arguments.length, willRemoveKeys = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n willRemoveKeys[_key2 - 1] = arguments[_key2];\n }\n willRemoveKeys.forEach(key => key && keySet.delete(key));\n return Array.from(keySet);\n};\nexport default class SubNavFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n }\n init() {\n // this.log('invoke SubNavFoundation init()');\n this._timer = null;\n }\n destroy() {\n this.clearDelayTimer();\n }\n clearDelayTimer() {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n }\n isValidKey(itemKey) {\n return itemKey != null && (typeof itemKey === 'number' || typeof itemKey === 'string');\n }\n handleDropdownVisibleChange(visible) {\n const itemKey = this.getProp('itemKey');\n const openKeysIsControlled = this._adapter.getOpenKeysIsControlled();\n const canUpdateOpenKeys = this._adapter.getCanUpdateOpenKeys();\n const rawOpenKeys = this._adapter.getOpenKeys();\n const openKeys = visible ? addKeys(rawOpenKeys, itemKey) : removeKeys(rawOpenKeys, itemKey);\n this.clearDelayTimer();\n if (!openKeysIsControlled) {\n if (canUpdateOpenKeys) {\n this._adapter.updateOpen(visible);\n }\n // this._adapter.updateIsHovered(visible);\n }\n this._adapter.notifyGlobalOpenChange({\n itemKey,\n openKeys,\n isOpen: visible\n });\n }\n /**\n *\n * @param {Event} e\n * @param {HTMLElement} titleRef\n */\n handleClick(e, titleRef) {\n const {\n itemKey,\n disabled\n } = this.getProps();\n if (disabled) {\n return;\n }\n // this.log(e, titleRef, titleRef.contains(e.target));\n const clickedDomIsTitle = titleRef && titleRef.contains(e.target);\n let isOpen = Boolean(this._adapter.getIsOpen());\n if (!clickedDomIsTitle) {\n isOpen = false;\n } else {\n isOpen = !isOpen;\n }\n const openKeys = isOpen ? addKeys(this._adapter.getOpenKeys(), itemKey) : removeKeys(this._adapter.getOpenKeys(), itemKey);\n const cbVal = {\n itemKey,\n openKeys,\n isOpen,\n domEvent: e\n };\n const openKeysIsControlled = this._adapter.getOpenKeysIsControlled();\n const canUpdateOpenKeys = this._adapter.getCanUpdateOpenKeys();\n if (!openKeysIsControlled && canUpdateOpenKeys) {\n this._adapter.updateOpen(isOpen);\n }\n this._adapter.notifyGlobalOpenChange(cbVal);\n this._adapter.notifyGlobalOnClick(cbVal);\n }\n /**\n * A11y: simulate sub nav click\n * @param e\n * @param titleRef\n */\n handleKeyPress(e, titleRef) {\n if (isEnterPress(e)) {\n this.handleClick(e, titleRef);\n }\n }\n}","import _get from \"lodash/get\";\n/* argus-disable unPkgSensitiveInfo */\nimport BaseFoundation from '../base/foundation';\nimport isEnterPress from '../utils/isEnterPress';\nexport default class ItemFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n }\n init() {\n this._timer = null;\n this._mounted = true;\n }\n destroy() {\n this._mounted = false;\n }\n isValidKey(itemKey) {\n return itemKey != null && (typeof itemKey === 'string' || typeof itemKey === 'number');\n }\n handleClick(e) {\n const {\n isSubNav,\n itemKey,\n text,\n disabled\n } = this.getProps();\n if (disabled) {\n return;\n }\n if (!isSubNav && this.isValidKey(itemKey) && !this._adapter.getSelectedKeysIsControlled() && !this._adapter.getSelected()) {\n this._adapter.updateSelected(true);\n }\n const selectedKeys = [itemKey];\n // If the current item is subNav, there is no need to trigger the global onSelect/onClick event, instead, the SubNav component will trigger the click event\n if (!isSubNav) {\n if (!this._adapter.getSelected()) {\n // internal-issues:51\n const selectedItems = [this._adapter.cloneDeep(this.getProps())];\n this._adapter.notifyGlobalOnSelect({\n itemKey,\n selectedKeys,\n selectedItems,\n domEvent: e\n });\n }\n this._adapter.notifyGlobalOnClick({\n itemKey,\n text,\n domEvent: e\n });\n }\n this._adapter.notifyClick({\n itemKey,\n text,\n domEvent: e\n });\n }\n /**\n * A11y: simulate item click\n */\n handleKeyPress(e) {\n if (isEnterPress(e)) {\n const {\n link,\n linkOptions\n } = this.getProps();\n const target = _get(linkOptions, 'target', '_self');\n this.handleClick(e);\n if (typeof link === 'string') {\n target === '_blank' ? window.open(link) : window.location.href = link;\n }\n }\n }\n}","import React from 'react';\nconst NavContext = /*#__PURE__*/React.createContext({\n isCollapsed: false,\n selectedKeys: [],\n openKeys: []\n});\nexport default NavContext;","import _times from \"lodash/times\";\nimport _noop from \"lodash/noop\";\nimport BaseComponent from '../_base/baseComponent';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport cls from 'classnames';\nimport isNullOrUndefined from '@douyinfe/semi-foundation/lib/es/utils/isNullOrUndefined';\nimport { cloneDeep, isSemiIcon } from '../_utils';\nimport ItemFoundation from '@douyinfe/semi-foundation/lib/es/navigation/itemFoundation';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/navigation/constants';\nimport Tooltip from '../tooltip';\nimport NavContext from './nav-context';\nimport Dropdown from '../dropdown';\nconst clsPrefix = `${cssClasses.PREFIX}-item`;\nexport default class NavItem extends BaseComponent {\n constructor(props) {\n super(props);\n this.setItemRef = ref => {\n // console.log('Item - setItemRef()', ref);\n this.props.forwardRef && this.props.forwardRef(ref);\n };\n this.wrapTooltip = node => {\n const {\n text,\n tooltipHideDelay,\n tooltipShowDelay\n } = this.props;\n const hideDelay = tooltipHideDelay !== null && tooltipHideDelay !== void 0 ? tooltipHideDelay : this.context.tooltipHideDelay;\n const showDelay = tooltipShowDelay !== null && tooltipShowDelay !== void 0 ? tooltipShowDelay : this.context.tooltipShowDelay;\n return /*#__PURE__*/React.createElement(Tooltip, {\n content: text,\n wrapWhenSpecial: false,\n position: \"right\",\n trigger: 'hover',\n mouseEnterDelay: showDelay,\n mouseLeaveDelay: hideDelay\n }, node);\n };\n this.handleClick = e => this.foundation.handleClick(e);\n this.handleKeyPress = e => this.foundation.handleKeyPress(e);\n this.state = {\n tooltipShow: false\n };\n this.foundation = new ItemFoundation(this.adapter);\n }\n _invokeContextFunc(funcName) {\n if (funcName && this.context && typeof this.context[funcName] === 'function') {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return this.context[funcName](...args);\n }\n return null;\n }\n get adapter() {\n var _this = this;\n return Object.assign(Object.assign({}, super.adapter), {\n cloneDeep,\n updateTooltipShow: tooltipShow => this.setState({\n tooltipShow\n }),\n updateSelected: _selected => this._invokeContextFunc('updateSelectedKeys', [this.props.itemKey]),\n updateGlobalSelectedKeys: keys => this._invokeContextFunc('updateSelectedKeys', [...keys]),\n getSelectedKeys: () => this.context && this.context.selectedKeys,\n getSelectedKeysIsControlled: () => this.context && this.context.selectedKeysIsControlled,\n notifyGlobalOnSelect: function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return _this._invokeContextFunc('onSelect', ...args);\n },\n notifyGlobalOnClick: function () {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n return _this._invokeContextFunc('onClick', ...args);\n },\n notifyClick: function () {\n return _this.props.onClick(...arguments);\n },\n notifyMouseEnter: function () {\n return _this.props.onMouseEnter(...arguments);\n },\n notifyMouseLeave: function () {\n return _this.props.onMouseLeave(...arguments);\n },\n getIsCollapsed: () => this.props.isCollapsed || Boolean(this.context && this.context.isCollapsed) || false,\n getSelected: () => Boolean(this.context && this.context.selectedKeys && this.context.selectedKeys.includes(this.props.itemKey)),\n getIsOpen: () => Boolean(this.context && this.context.openKeys && this.context.openKeys.includes(this.props.itemKey))\n });\n }\n renderIcon(icon, pos) {\n let isToggleIcon = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n let key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n if (this.props.isSubNav) {\n return null;\n }\n if (!icon && this.context.mode === strings.MODE_HORIZONTAL) {\n return null;\n }\n let iconSize = 'large';\n if (pos === strings.ICON_POS_RIGHT) {\n iconSize = 'default';\n }\n const className = cls(`${clsPrefix}-icon`, {\n [`${clsPrefix}-icon-toggle-${this.context.toggleIconPosition}`]: isToggleIcon,\n [`${clsPrefix}-icon-info`]: !isToggleIcon\n });\n return /*#__PURE__*/React.createElement(\"i\", {\n className: className,\n key: key\n }, isSemiIcon(icon) ? /*#__PURE__*/React.cloneElement(icon, {\n size: icon.props.size || iconSize\n }) : icon);\n }\n render() {\n const {\n text,\n children,\n icon,\n toggleIcon,\n className,\n isSubNav,\n style,\n indent,\n onMouseEnter,\n onMouseLeave,\n link,\n linkOptions,\n disabled,\n level = 0,\n tabIndex\n } = this.props;\n const {\n mode,\n isInSubNav,\n prefixCls,\n limitIndent\n } = this.context;\n const isCollapsed = this.adapter.getIsCollapsed();\n const selected = this.adapter.getSelected();\n let itemChildren = null;\n if (!isNullOrUndefined(children)) {\n itemChildren = children;\n } else {\n let placeholderIcons = null;\n if (mode === strings.MODE_VERTICAL && !limitIndent && !isCollapsed) {\n const iconAmount = icon && !indent ? level : level - 1;\n placeholderIcons = _times(iconAmount, index => this.renderIcon(null, strings.ICON_POS_RIGHT, false, index));\n }\n itemChildren = /*#__PURE__*/React.createElement(React.Fragment, null, placeholderIcons, this.context.toggleIconPosition === strings.TOGGLE_ICON_LEFT && this.renderIcon(toggleIcon, strings.ICON_POS_RIGHT, true, 'key-toggle-pos-right'), icon || indent || isInSubNav ? this.renderIcon(icon, strings.ICON_POS_LEFT, false, 'key-position-left') : null, !isNullOrUndefined(text) ? /*#__PURE__*/React.createElement(\"span\", {\n className: `${cssClasses.PREFIX}-item-text`\n }, text) : '', this.context.toggleIconPosition === strings.TOGGLE_ICON_RIGHT && this.renderIcon(toggleIcon, strings.ICON_POS_RIGHT, true, 'key-toggle-pos-right'));\n }\n if (typeof link === 'string') {\n itemChildren = /*#__PURE__*/React.createElement(\"a\", Object.assign({\n className: `${prefixCls}-item-link`,\n href: link,\n tabIndex: -1\n }, linkOptions), itemChildren);\n }\n let itemDom = '';\n if (isInSubNav && (isCollapsed || mode === strings.MODE_HORIZONTAL)) {\n const popoverItemCls = cls({\n [clsPrefix]: true,\n [`${clsPrefix}-sub`]: isSubNav,\n [`${clsPrefix}-selected`]: selected,\n [`${clsPrefix}-collapsed`]: isCollapsed,\n [`${clsPrefix}-disabled`]: disabled\n });\n itemDom = /*#__PURE__*/React.createElement(Dropdown.Item, {\n selected: selected,\n active: selected,\n forwardRef: this.setItemRef,\n className: popoverItemCls,\n onClick: this.handleClick,\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave,\n disabled: disabled,\n onKeyDown: this.handleKeyPress\n }, itemChildren);\n } else {\n // Items are divided into normal and sub-wrap\n const popoverItemCls = cls(`${className || `${clsPrefix}-normal`}`, {\n [clsPrefix]: true,\n [`${clsPrefix}-sub`]: isSubNav,\n [`${clsPrefix}-selected`]: selected && !isSubNav,\n [`${clsPrefix}-collapsed`]: isCollapsed,\n [`${clsPrefix}-disabled`]: disabled,\n [`${clsPrefix}-has-link`]: typeof link === 'string'\n });\n const ariaProps = {\n 'aria-disabled': disabled\n };\n if (isSubNav) {\n const isOpen = this.adapter.getIsOpen();\n ariaProps['aria-expanded'] = isOpen;\n }\n itemDom =\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions\n React.createElement(\"li\", Object.assign({\n // if role = menuitem, the narration will read all expanded li\n role: isSubNav ? null : \"menuitem\",\n tabIndex: isSubNav ? -1 : tabIndex\n }, ariaProps, {\n style: style,\n ref: this.setItemRef,\n className: popoverItemCls,\n onClick: this.handleClick,\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave,\n onKeyPress: this.handleKeyPress\n }, this.getDataAttr(this.props)), itemChildren);\n }\n // Display Tooltip when disabled and SubNav\n if (isCollapsed && !isInSubNav && !isSubNav || isCollapsed && isSubNav && disabled) {\n itemDom = this.wrapTooltip(itemDom);\n }\n if (typeof this.context.renderWrapper === 'function') {\n return this.context.renderWrapper({\n itemElement: itemDom,\n isSubNav: isSubNav,\n isInSubNav: isInSubNav,\n props: this.props\n });\n }\n return itemDom;\n }\n}\nNavItem.contextType = NavContext;\nNavItem.propTypes = {\n text: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n itemKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n onClick: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n children: PropTypes.node,\n icon: PropTypes.oneOfType([PropTypes.node]),\n className: PropTypes.string,\n toggleIcon: PropTypes.string,\n style: PropTypes.object,\n forwardRef: PropTypes.func,\n indent: PropTypes.oneOfType([PropTypes.bool, PropTypes.number]),\n isCollapsed: PropTypes.bool,\n isSubNav: PropTypes.bool,\n link: PropTypes.string,\n linkOptions: PropTypes.object,\n disabled: PropTypes.bool,\n tabIndex: PropTypes.number\n};\nNavItem.defaultProps = {\n isSubNav: false,\n indent: false,\n forwardRef: _noop,\n isCollapsed: false,\n onClick: _noop,\n onMouseEnter: _noop,\n onMouseLeave: _noop,\n disabled: false,\n tabIndex: 0\n};","import BaseFoundation from \"../base/foundation\";\nclass CollapsibleFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n this.updateDOMInRenderTree = isInRenderTree => {\n this._adapter.setDOMInRenderTree(isInRenderTree);\n };\n this.updateDOMHeight = domHeight => {\n this._adapter.setDOMHeight(domHeight);\n };\n this.updateVisible = visible => {\n this._adapter.setVisible(visible);\n };\n this.updateIsTransitioning = isTransitioning => {\n this._adapter.setIsTransitioning(isTransitioning);\n };\n }\n}\nexport default CollapsibleFoundation;","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-collapsible`\n};\nexport { cssClasses };","import _pick from \"lodash/pick\";\nimport _isEqual from \"lodash/isEqual\";\nimport React from 'react';\nimport CollapsibleFoundation from '@douyinfe/semi-foundation/lib/es/collapsible/foundation';\nimport BaseComponent from \"../_base/baseComponent\";\nimport PropTypes from \"prop-types\";\nimport cls from \"classnames\";\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/collapsible/constants';\nimport '@douyinfe/semi-foundation/lib/es/collapsible/collapsible.css';\nimport { getDefaultPropsFromGlobalConfig } from \"../_utils\";\nclass Collapsible extends BaseComponent {\n constructor(props) {\n super(props);\n this.domRef = /*#__PURE__*/React.createRef();\n this.hasBeenRendered = false;\n this.handleResize = entryList => {\n const entry = entryList[0];\n if (entry) {\n const entryInfo = Collapsible.getEntryInfo(entry);\n this.foundation.updateDOMHeight(entryInfo.height);\n this.foundation.updateDOMInRenderTree(entryInfo.isShown);\n }\n };\n this.isChildrenInRenderTree = () => {\n if (this.domRef.current) {\n return this.domRef.current.offsetHeight > 0;\n }\n return false;\n };\n this.state = {\n domInRenderTree: false,\n domHeight: 0,\n visible: this.props.isOpen,\n isTransitioning: false\n };\n this.foundation = new CollapsibleFoundation(this.adapter);\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n setDOMInRenderTree: domInRenderTree => {\n if (this.state.domInRenderTree !== domInRenderTree) {\n this.setState({\n domInRenderTree\n });\n }\n },\n setDOMHeight: domHeight => {\n if (this.state.domHeight !== domHeight) {\n this.setState({\n domHeight\n });\n }\n },\n setVisible: visible => {\n if (this.state.visible !== visible) {\n this.setState({\n visible\n });\n }\n },\n setIsTransitioning: isTransitioning => {\n if (this.state.isTransitioning !== isTransitioning) {\n this.setState({\n isTransitioning\n });\n }\n }\n });\n }\n componentDidMount() {\n super.componentDidMount();\n this.resizeObserver = new ResizeObserver(this.handleResize);\n this.resizeObserver.observe(this.domRef.current);\n const domInRenderTree = this.isChildrenInRenderTree();\n this.foundation.updateDOMInRenderTree(domInRenderTree);\n if (domInRenderTree) {\n this.foundation.updateDOMHeight(this.domRef.current.scrollHeight);\n }\n }\n componentDidUpdate(prevProps, prevState, snapshot) {\n const changedPropKeys = Object.keys(_pick(this.props, ['reCalcKey', \"isOpen\"])).filter(key => !_isEqual(this.props[key], prevProps[key]));\n const changedStateKeys = Object.keys(_pick(this.state, ['domInRenderTree'])).filter(key => !_isEqual(this.state[key], prevState[key]));\n if (changedPropKeys.includes(\"reCalcKey\")) {\n this.foundation.updateDOMHeight(this.domRef.current.scrollHeight);\n }\n if (changedStateKeys.includes(\"domInRenderTree\") && this.state.domInRenderTree) {\n this.foundation.updateDOMHeight(this.domRef.current.scrollHeight);\n }\n if (changedPropKeys.includes(\"isOpen\")) {\n if (this.props.isOpen || !this.props.motion) {\n this.foundation.updateVisible(this.props.isOpen);\n }\n }\n if (this.props.motion && prevProps.isOpen !== this.props.isOpen) {\n this.foundation.updateIsTransitioning(true);\n }\n }\n componentWillUnmount() {\n super.componentWillUnmount();\n this.resizeObserver.disconnect();\n }\n render() {\n const wrapperStyle = Object.assign({\n overflow: 'hidden',\n height: this.props.isOpen ? this.state.domHeight : this.props.collapseHeight,\n opacity: this.props.isOpen || !this.props.fade || this.props.collapseHeight !== 0 ? 1 : 0,\n transitionDuration: `${this.props.motion && this.state.isTransitioning ? this.props.duration : 0}ms`\n }, this.props.style);\n const wrapperCls = cls(`${cssClasses.PREFIX}-wrapper`, {\n [`${cssClasses.PREFIX}-transition`]: this.props.motion && this.state.isTransitioning\n }, this.props.className);\n const shouldRender = this.props.keepDOM && (this.props.lazyRender ? this.hasBeenRendered : true) || this.props.collapseHeight !== 0 || this.state.visible || this.props.isOpen;\n if (shouldRender && !this.hasBeenRendered) {\n this.hasBeenRendered = true;\n }\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n className: wrapperCls,\n style: wrapperStyle,\n onTransitionEnd: () => {\n var _a, _b;\n if (!this.props.isOpen) {\n this.foundation.updateVisible(false);\n }\n this.foundation.updateIsTransitioning(false);\n (_b = (_a = this.props).onMotionEnd) === null || _b === void 0 ? void 0 : _b.call(_a);\n }\n }, this.getDataAttr(this.props)), /*#__PURE__*/React.createElement(\"div\", {\n \"x-semi-prop\": \"children\",\n ref: this.domRef,\n style: {\n overflow: 'hidden'\n },\n id: this.props.id\n }, shouldRender && this.props.children));\n }\n}\nCollapsible.__SemiComponentName__ = \"Collapsible\";\nCollapsible.defaultProps = getDefaultPropsFromGlobalConfig(Collapsible.__SemiComponentName__, {\n isOpen: false,\n duration: 250,\n motion: true,\n keepDOM: false,\n lazyRender: false,\n collapseHeight: 0,\n fade: false\n});\nCollapsible.getEntryInfo = entry => {\n //judge whether parent or self display none\n let inRenderTree;\n if (entry.borderBoxSize) {\n inRenderTree = !(entry.borderBoxSize[0].blockSize === 0 && entry.borderBoxSize[0].inlineSize === 0);\n } else {\n inRenderTree = !(entry.contentRect.height === 0 && entry.contentRect.width === 0);\n }\n let height = 0;\n if (entry.borderBoxSize) {\n height = Math.ceil(entry.borderBoxSize[0].blockSize);\n } else {\n const target = entry.target;\n height = target.clientHeight;\n }\n return {\n isShown: inRenderTree,\n height\n };\n};\nCollapsible.propTypes = {\n motion: PropTypes.bool,\n children: PropTypes.node,\n isOpen: PropTypes.bool,\n duration: PropTypes.number,\n keepDOM: PropTypes.bool,\n collapseHeight: PropTypes.number,\n style: PropTypes.object,\n className: PropTypes.string,\n reCalcKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n};\nexport default Collapsible;","import _get from \"lodash/get\";\nimport _times from \"lodash/times\";\nimport BaseComponent from '../_base/baseComponent';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport cls from 'classnames';\nimport '@douyinfe/semi-foundation/lib/es/navigation/navigation.css';\nimport isNullOrUndefined from '@douyinfe/semi-foundation/lib/es/utils/isNullOrUndefined';\nimport SubNavFoundation from '@douyinfe/semi-foundation/lib/es/navigation/subNavFoundation';\nimport { strings, numbers, cssClasses } from '@douyinfe/semi-foundation/lib/es/navigation/constants';\nimport { IconChevronDown, IconChevronRight } from '@douyinfe/semi-icons';\nimport NavItem from './Item';\nimport Dropdown from '../dropdown';\nimport NavContext from './nav-context';\nimport Collapsible from \"../collapsible\";\nimport CSSAnimation from \"../_cssAnimation\";\nexport default class SubNav extends BaseComponent {\n constructor(props) {\n super(props);\n this.setItemRef = ref => {\n if (ref && ref.current) {\n this.itemRef = ref;\n } else {\n this.itemRef = {\n current: ref\n };\n }\n };\n this.setTitleRef = ref => {\n if (ref && ref.current) {\n this.titleRef = ref;\n } else {\n this.titleRef = {\n current: ref\n };\n }\n };\n this.handleClick = e => {\n this.foundation.handleClick(e && e.nativeEvent, this.titleRef && this.titleRef.current);\n };\n this.handleKeyPress = e => {\n this.foundation.handleKeyPress(e && e.nativeEvent, this.titleRef && this.titleRef.current);\n };\n this.handleDropdownVisible = visible => this.foundation.handleDropdownVisibleChange(visible);\n this.state = {\n isHovered: false\n };\n this.adapter.setCache('firstMounted', true);\n this.titleRef = /*#__PURE__*/React.createRef();\n this.itemRef = /*#__PURE__*/React.createRef();\n this.foundation = new SubNavFoundation(this.adapter);\n }\n _invokeContextFunc(funcName) {\n if (funcName && this.context && typeof this.context[funcName] === 'function') {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return this.context[funcName](...args);\n }\n return null;\n }\n get adapter() {\n var _this = this;\n return Object.assign(Object.assign({}, super.adapter), {\n updateIsHovered: isHovered => this.setState({\n isHovered\n }),\n getOpenKeys: () => this.context && this.context.openKeys,\n getOpenKeysIsControlled: () => this.context && this.context.openKeysIsControlled,\n getCanUpdateOpenKeys: () => this.context && this.context.canUpdateOpenKeys,\n updateOpen: isOpen => this._invokeContextFunc(isOpen ? 'addOpenKeys' : 'removeOpenKeys', this.props.itemKey),\n notifyGlobalOpenChange: function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return _this._invokeContextFunc('onOpenChange', ...args);\n },\n notifyGlobalOnSelect: function () {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n return _this._invokeContextFunc('onSelect', ...args);\n },\n notifyGlobalOnClick: function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n return _this._invokeContextFunc('onClick', ...args);\n },\n getIsSelected: itemKey => Boolean(!isNullOrUndefined(itemKey) && _get(this.context, 'selectedKeys', []).includes(String(itemKey))),\n getIsOpen: () => {\n const {\n itemKey\n } = this.props;\n return Boolean(this.context && this.context.openKeys && this.context.openKeys.includes(this.props.itemKey));\n }\n });\n }\n renderIcon(icon, pos, withTransition) {\n let isToggleIcon = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n let key = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n const {\n prefixCls\n } = this.context;\n let iconSize = 'large';\n if (pos === strings.ICON_POS_RIGHT) {\n iconSize = 'default';\n }\n const className = cls(`${prefixCls}-item-icon`, {\n [`${prefixCls}-item-icon-toggle-${this.context.toggleIconPosition}`]: isToggleIcon,\n [`${prefixCls}-item-icon-info`]: !isToggleIcon\n });\n const isOpen = this.adapter.getIsOpen();\n const iconElem = /*#__PURE__*/React.isValidElement(icon) ? withTransition ? (/*#__PURE__*/React.createElement(CSSAnimation, {\n animationState: isOpen ? \"enter\" : \"leave\",\n startClassName: `${cssClasses.PREFIX}-icon-rotate-${isOpen ? \"180\" : \"0\"}`\n }, _ref => {\n let {\n animationClassName\n } = _ref;\n // @ts-ignore\n return /*#__PURE__*/React.cloneElement(icon, {\n size: iconSize,\n className: animationClassName\n });\n })\n // @ts-ignore\n ) : /*#__PURE__*/React.cloneElement(icon, {\n size: iconSize\n }) : null;\n return /*#__PURE__*/React.createElement(\"i\", {\n key: key,\n className: className\n }, iconElem);\n }\n renderTitleDiv() {\n const {\n text,\n icon,\n itemKey,\n indent,\n disabled,\n level,\n expandIcon\n } = this.props;\n const {\n mode,\n isInSubNav,\n isCollapsed,\n prefixCls,\n subNavMotion,\n limitIndent\n } = this.context;\n const isOpen = this.adapter.getIsOpen();\n const titleCls = cls(`${prefixCls}-sub-title`, {\n [`${prefixCls}-sub-title-selected`]: this.adapter.getIsSelected(itemKey),\n [`${prefixCls}-sub-title-disabled`]: disabled\n });\n let withTransition = false;\n let toggleIconType = '';\n if (isCollapsed) {\n if (isInSubNav) {\n toggleIconType = /*#__PURE__*/React.createElement(IconChevronRight, null);\n } else {\n toggleIconType = null;\n }\n } else if (mode === strings.MODE_HORIZONTAL) {\n if (isInSubNav) {\n toggleIconType = /*#__PURE__*/React.createElement(IconChevronRight, {\n \"aria-hidden\": true\n });\n } else {\n toggleIconType = expandIcon ? expandIcon : /*#__PURE__*/React.createElement(IconChevronDown, {\n \"aria-hidden\": true\n });\n // Horizontal mode does not require animation fix#1198\n // withTransition = true;\n }\n } else {\n if (subNavMotion) {\n withTransition = true;\n }\n toggleIconType = expandIcon ? expandIcon : /*#__PURE__*/React.createElement(IconChevronDown, {\n \"aria-hidden\": true\n });\n }\n let placeholderIcons = null;\n if (mode === strings.MODE_VERTICAL && !limitIndent && !isCollapsed) {\n /* Different icons' amount means different indents.*/\n const iconAmount = icon && !indent ? level : level - 1;\n placeholderIcons = _times(iconAmount, index => this.renderIcon(null, strings.ICON_POS_RIGHT, false, false, index));\n }\n const isIconChevronRightShow = !isCollapsed && isInSubNav && mode === strings.MODE_HORIZONTAL || isCollapsed && isInSubNav;\n const titleDiv = /*#__PURE__*/React.createElement(\"div\", {\n role: \"menuitem\",\n // to avoid nested horizontal navigation be focused\n tabIndex: isIconChevronRightShow ? -1 : 0,\n ref: this.setTitleRef,\n className: titleCls,\n onClick: this.handleClick,\n onKeyPress: this.handleKeyPress,\n \"aria-expanded\": isOpen ? 'true' : 'false'\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-item-inner`\n }, placeholderIcons, this.context.toggleIconPosition === strings.TOGGLE_ICON_LEFT && this.renderIcon(toggleIconType, strings.ICON_POS_RIGHT, withTransition, true, 'key-toggle-position-left'), icon || indent || isInSubNav && mode !== strings.MODE_HORIZONTAL ? this.renderIcon(icon, strings.ICON_POS_LEFT, false, false, 'key-inSubNav-position-left') : null, /*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixCls}-item-text`\n }, text), this.context.toggleIconPosition === strings.TOGGLE_ICON_RIGHT && this.renderIcon(toggleIconType, strings.ICON_POS_RIGHT, withTransition, true, 'key-toggle-position-right')));\n return titleDiv;\n }\n renderSubUl() {\n const {\n children,\n maxHeight\n } = this.props;\n const {\n isCollapsed,\n mode,\n subNavMotion,\n prefixCls\n } = this.context;\n const isOpen = this.adapter.getIsOpen();\n const isHorizontal = mode === strings.MODE_HORIZONTAL;\n const subNavCls = cls(`${prefixCls}-sub`, {\n [`${prefixCls}-sub-open`]: isOpen,\n [`${prefixCls}-sub-popover`]: isCollapsed || isHorizontal\n });\n const ulWithMotion = /*#__PURE__*/React.createElement(Collapsible, {\n motion: subNavMotion,\n isOpen: isOpen,\n keepDOM: false,\n fade: true\n }, !isCollapsed ? /*#__PURE__*/React.createElement(\"ul\", {\n className: subNavCls\n }, children) : null);\n const finalDom = isHorizontal ? null : subNavMotion ? ulWithMotion : isOpen && !isCollapsed ? (/*#__PURE__*/React.createElement(\"ul\", {\n className: subNavCls\n }, children)) : null;\n return finalDom;\n }\n wrapDropdown() {\n let elem = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n let _elem = elem;\n const {\n children,\n dropdownStyle,\n disabled,\n subDropdownProps,\n dropdownProps: userDropdownProps\n } = this.props;\n const {\n mode,\n isInSubNav,\n isCollapsed,\n subNavCloseDelay,\n subNavOpenDelay,\n prefixCls,\n getPopupContainer\n } = this.context;\n const isOpen = this.adapter.getIsOpen();\n const openKeysIsControlled = this.adapter.getOpenKeysIsControlled();\n const subNavCls = cls({\n [`${prefixCls}-popover`]: isCollapsed\n });\n const dropdownProps = {\n trigger: 'hover',\n style: dropdownStyle\n };\n if (openKeysIsControlled) {\n dropdownProps.trigger = 'custom';\n dropdownProps.visible = isOpen;\n }\n if (getPopupContainer) {\n dropdownProps.getPopupContainer = getPopupContainer;\n }\n if (isCollapsed || mode === strings.MODE_HORIZONTAL) {\n // Do not show dropdown when disabled\n _elem = !disabled ? (/*#__PURE__*/React.createElement(Dropdown, Object.assign({\n className: subNavCls,\n render: (/*#__PURE__*/React.createElement(Dropdown.Menu, null, children)),\n position: mode === strings.MODE_HORIZONTAL && !isInSubNav ? 'bottomLeft' : 'rightTop',\n mouseEnterDelay: subNavOpenDelay,\n mouseLeaveDelay: subNavCloseDelay,\n onVisibleChange: this.handleDropdownVisible\n }, userDropdownProps ? userDropdownProps : subDropdownProps, dropdownProps), _elem)) : _elem;\n }\n return _elem;\n }\n render() {\n const {\n itemKey,\n style,\n onMouseEnter,\n onMouseLeave,\n disabled,\n text\n } = this.props;\n const {\n mode,\n isCollapsed,\n prefixCls\n } = this.context;\n let titleDiv = this.renderTitleDiv();\n const subUl = this.renderSubUl();\n // When mode=horizontal, it is displayed in Dropdown\n if (isCollapsed || mode === strings.MODE_HORIZONTAL) {\n titleDiv = this.wrapDropdown(titleDiv);\n }\n return /*#__PURE__*/React.createElement(NavItem, {\n style: style,\n isSubNav: true,\n itemKey: itemKey,\n forwardRef: this.setItemRef,\n isCollapsed: isCollapsed,\n className: `${prefixCls}-sub-wrap`,\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave,\n disabled: disabled,\n text: text\n }, /*#__PURE__*/React.createElement(NavContext.Provider, {\n value: Object.assign(Object.assign({}, this.context), {\n isInSubNav: true\n })\n }, titleDiv, subUl));\n }\n}\nSubNav.contextType = NavContext;\nSubNav.propTypes = {\n /**\n * Unique identification\n */\n itemKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n /**\n * Copywriting\n */\n text: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n /**\n * Whether child navigation is expanded\n */\n isOpen: PropTypes.bool,\n /**\n * Whether it is in the state of being stowed to the sidebar\n */\n isCollapsed: PropTypes.bool,\n /**\n * Whether to keep the left Icon placeholder\n */\n indent: PropTypes.oneOfType([PropTypes.bool, PropTypes.number]),\n /**\n * Nested child elements\n */\n children: PropTypes.node,\n style: PropTypes.object,\n /**\n * Icon name on the left\n */\n icon: PropTypes.node,\n /**\n * Maximum height (for animation)\n */\n maxHeight: PropTypes.number,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n // Is it disabled\n disabled: PropTypes.bool,\n level: PropTypes.number\n};\nSubNav.defaultProps = {\n level: 0,\n indent: false,\n isCollapsed: false,\n isOpen: false,\n maxHeight: numbers.DEFAULT_SUBNAV_MAX_HEIGHT,\n disabled: false\n};","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M5 2h14a3 3 0 0 1 3 3v14a3 3 0 0 1-3 3H5a3 3 0 0 1-3-3V5a3 3 0 0 1 3-3Zm1 2a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1V5a1 1 0 0 0-1-1H6Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'sidebar');\nexport default IconComponent;","import _noop from \"lodash/noop\";\nimport React from 'react';\nimport { IconSidebar } from '@douyinfe/semi-icons';\nimport Button from '../button';\nimport Tooltip from '../tooltip';\nexport default function CollapseButton(_ref) {\n let {\n prefixCls,\n locale,\n collapseText,\n isCollapsed,\n onClick = _noop\n } = _ref;\n const handleClick = () => {\n if (typeof onClick === 'function') {\n onClick(!isCollapsed);\n }\n };\n const btnProps = {\n icon: /*#__PURE__*/React.createElement(IconSidebar, null),\n type: 'tertiary',\n theme: 'borderless',\n onClick: handleClick\n };\n let finalCollapseText = isCollapsed ? locale === null || locale === void 0 ? void 0 : locale.expandText : locale === null || locale === void 0 ? void 0 : locale.collapseText;\n if (typeof collapseText === 'function') {\n finalCollapseText = collapseText(isCollapsed);\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-collapse-btn`\n }, isCollapsed ? (/*#__PURE__*/React.createElement(Tooltip, {\n content: finalCollapseText,\n position: \"right\"\n }, /*#__PURE__*/React.createElement(Button, Object.assign({}, btnProps)))) : (/*#__PURE__*/React.createElement(Button, Object.assign({}, btnProps), finalCollapseText)));\n}","import _noop from \"lodash/noop\";\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport cls from 'classnames';\nimport { strings, cssClasses } from '@douyinfe/semi-foundation/lib/es/navigation/constants';\nimport CollapseButton from './CollapseButton';\nimport '@douyinfe/semi-foundation/lib/es/navigation/navigation.css';\nimport NavContext from './nav-context';\nexport default class NavFooter extends PureComponent {\n constructor() {\n super(...arguments);\n this.renderCollapseButton = () => {\n const {\n collapseButton,\n collapseText\n } = this.props;\n if (/*#__PURE__*/React.isValidElement(collapseButton)) {\n return collapseButton;\n }\n const {\n onCollapseChange,\n prefixCls,\n locale,\n isCollapsed\n } = this.context;\n return /*#__PURE__*/React.createElement(CollapseButton, {\n prefixCls: prefixCls,\n isCollapsed: isCollapsed,\n locale: locale,\n onClick: onCollapseChange,\n collapseText: collapseText\n });\n };\n }\n render() {\n const {\n style,\n className,\n collapseButton,\n onClick\n } = this.props;\n let {\n children\n } = this.props;\n const {\n isCollapsed,\n mode\n } = this.context;\n if (! /*#__PURE__*/React.isValidElement(children) && collapseButton && mode !== strings.MODE_HORIZONTAL) {\n children = this.renderCollapseButton();\n }\n const wrapCls = cls(className, `${cssClasses.PREFIX}-footer`, {\n [`${cssClasses.PREFIX}-footer-collapsed`]: isCollapsed\n });\n return (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions\n React.createElement(\"div\", {\n className: wrapCls,\n style: style,\n onClick: onClick\n }, children)\n );\n }\n}\nNavFooter.contextType = NavContext;\nNavFooter.propTypes = {\n children: PropTypes.node,\n style: PropTypes.object,\n className: PropTypes.string,\n collapseButton: PropTypes.oneOfType([PropTypes.node, PropTypes.bool]),\n collapseText: PropTypes.func,\n onClick: PropTypes.func\n};\nNavFooter.defaultProps = {\n collapseButton: false,\n onClick: _noop\n};\nNavFooter.elementType = \"NavFooter\";","import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport cls from 'classnames';\nimport isNullOrUndefined from '@douyinfe/semi-foundation/lib/es/utils/isNullOrUndefined';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/navigation/constants';\nimport '@douyinfe/semi-foundation/lib/es/navigation/navigation.css';\nimport NavContext from './nav-context';\nexport default class NavHeader extends PureComponent {\n renderLogo(logo) {\n if (/*#__PURE__*/React.isValidElement(logo)) {\n return logo;\n }\n return null;\n }\n render() {\n const {\n children,\n style,\n className,\n logo,\n text,\n link,\n linkOptions,\n prefixCls\n } = this.props;\n const {\n isCollapsed\n } = this.context;\n const wrapCls = cls(className, `${cssClasses.PREFIX}-header`, {\n [`${cssClasses.PREFIX}-header-collapsed`]: isCollapsed\n });\n let wrappedChildren = /*#__PURE__*/React.createElement(React.Fragment, null, logo ? /*#__PURE__*/React.createElement(\"i\", {\n className: `${cssClasses.PREFIX}-header-logo`\n }, this.renderLogo(logo)) : null, !isNullOrUndefined(text) && !isCollapsed ? (/*#__PURE__*/React.createElement(\"span\", {\n className: `${cssClasses.PREFIX}-header-text`\n }, text)) : null, children);\n if (typeof link === 'string') {\n wrappedChildren = /*#__PURE__*/React.createElement(\"a\", Object.assign({\n className: `${prefixCls}-header-link`,\n href: link\n }, linkOptions), wrappedChildren);\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n className: wrapCls,\n style: style\n }, wrappedChildren);\n }\n}\nNavHeader.contextType = NavContext;\nNavHeader.propTypes = {\n prefixCls: PropTypes.string,\n logo: PropTypes.oneOfType([PropTypes.string, PropTypes.object, PropTypes.node]),\n text: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n children: PropTypes.node,\n style: PropTypes.object,\n className: PropTypes.string,\n link: PropTypes.string,\n linkOptions: PropTypes.object\n};\nNavHeader.defaultProps = {\n prefixCls: cssClasses.PREFIX\n};\nNavHeader.elementType = \"NavHeader\";","import _isEqual from \"lodash/isEqual\";\nimport _get from \"lodash/get\";\nimport _noop from \"lodash/noop\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport BaseComponent from '../_base/baseComponent';\nimport React, { Children } from 'react';\nimport PropTypes from 'prop-types';\nimport cls from 'classnames';\nimport NavigationFoundation from '@douyinfe/semi-foundation/lib/es/navigation/foundation';\nimport { strings, cssClasses, numbers } from '@douyinfe/semi-foundation/lib/es/navigation/constants';\nimport SubNav from './SubNav';\nimport Item from './Item';\nimport Footer from './Footer';\nimport Header from './Header';\nimport NavContext from './nav-context';\nimport LocaleConsumer from '../locale/localeConsumer';\nimport '@douyinfe/semi-foundation/lib/es/navigation/navigation.css';\nimport { getDefaultPropsFromGlobalConfig } from \"../_utils\";\nfunction createAddKeysFn(context, keyName) {\n return function addKeys() {\n const handleKeys = new Set(context.state[keyName]);\n for (var _len = arguments.length, keys = new Array(_len), _key = 0; _key < _len; _key++) {\n keys[_key] = arguments[_key];\n }\n keys.forEach(key => key && handleKeys.add(key));\n context.setState({\n [keyName]: Array.from(handleKeys)\n });\n };\n}\nfunction createRemoveKeysFn(context, keyName) {\n return function removeKeys() {\n const handleKeys = new Set(context.state[keyName]);\n for (var _len2 = arguments.length, keys = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n keys[_key2] = arguments[_key2];\n }\n keys.forEach(key => key && handleKeys.delete(key));\n context.setState({\n [keyName]: Array.from(handleKeys)\n });\n };\n}\nconst {\n hasOwnProperty\n} = Object.prototype;\nclass Nav extends BaseComponent {\n constructor(props) {\n super(props);\n this.onCollapseChange = () => {\n this.foundation.handleCollapseChange();\n };\n this.foundation = new NavigationFoundation(this.adapter);\n this.itemsChanged = true;\n const {\n isCollapsed,\n defaultIsCollapsed,\n items,\n children\n } = props;\n const initState = {\n isCollapsed: Boolean(this.isControlled('isCollapsed') ? isCollapsed : defaultIsCollapsed),\n // calc state\n openKeys: [],\n items: [],\n itemKeysMap: {},\n selectedKeys: []\n };\n this.state = Object.assign({}, initState);\n if (items && items.length || children) {\n const calcState = this.foundation.init('constructor');\n this.state = Object.assign(Object.assign({}, initState), calcState);\n }\n }\n static getDerivedStateFromProps(props, state) {\n const willUpdateState = {};\n if (hasOwnProperty.call(props, 'isCollapsed') && props.isCollapsed !== state.isCollapsed) {\n willUpdateState.isCollapsed = props.isCollapsed;\n }\n return willUpdateState;\n }\n componentDidMount() {\n // override BaseComponent\n }\n componentDidUpdate(prevProps) {\n if (prevProps.items !== this.props.items || prevProps.children !== this.props.children) {\n this.foundation.init();\n } else {\n this.foundation.handleItemsChange(false);\n if (this.props.selectedKeys && !_isEqual(prevProps.selectedKeys, this.props.selectedKeys)) {\n this.adapter.updateSelectedKeys(this.props.selectedKeys);\n const willOpenKeys = this.foundation.getWillOpenKeys(this.state.itemKeysMap);\n this.adapter.updateOpenKeys(willOpenKeys);\n }\n if (this.props.openKeys && !_isEqual(prevProps.openKeys, this.props.openKeys)) {\n this.adapter.updateOpenKeys(this.props.openKeys);\n }\n }\n }\n get adapter() {\n var _this = this;\n return Object.assign(Object.assign({}, super.adapter), {\n notifySelect: function () {\n return _this.props.onSelect(...arguments);\n },\n notifyOpenChange: function () {\n return _this.props.onOpenChange(...arguments);\n },\n setIsCollapsed: isCollapsed => this.setState({\n isCollapsed\n }),\n notifyCollapseChange: function () {\n return _this.props.onCollapseChange(...arguments);\n },\n updateItems: items => this.setState({\n items: [...items]\n }),\n setItemKeysMap: itemKeysMap => this.setState({\n itemKeysMap: Object.assign({}, itemKeysMap)\n }),\n addSelectedKeys: createAddKeysFn(this, 'selectedKeys'),\n removeSelectedKeys: createRemoveKeysFn(this, 'selectedKeys'),\n /**\n * when `includeParentKeys` is `true`, select a nested nav item will select parent nav sub\n */\n updateSelectedKeys: function (selectedKeys) {\n let includeParentKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n let willUpdateSelectedKeys = selectedKeys;\n if (includeParentKeys) {\n const parentSelectKeys = _this.foundation.selectLevelZeroParentKeys(null, selectedKeys);\n willUpdateSelectedKeys = Array.from(new Set(selectedKeys.concat(parentSelectKeys)));\n }\n _this.setState({\n selectedKeys: willUpdateSelectedKeys\n });\n },\n updateOpenKeys: openKeys => this.setState({\n openKeys: [...openKeys]\n }),\n addOpenKeys: createAddKeysFn(this, 'openKeys'),\n removeOpenKeys: createRemoveKeysFn(this, 'openKeys'),\n setItemsChanged: isChanged => {\n this.itemsChanged = isChanged;\n }\n });\n }\n /**\n * Render navigation items recursively\n *\n * @param {NavItem[]} items\n * @returns {JSX.Element}\n */\n renderItems() {\n let items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n const {\n expandIcon,\n subDropdownProps\n } = this.props;\n const finalDom = /*#__PURE__*/React.createElement(React.Fragment, null, items.map((item, idx) => {\n if (Array.isArray(item.items) && item.items.length) {\n return /*#__PURE__*/React.createElement(SubNav, Object.assign({\n key: item.itemKey || String(level) + idx\n }, item, {\n level: level,\n expandIcon: expandIcon,\n subDropdownProps: subDropdownProps\n }), this.renderItems(item.items, level + 1));\n } else {\n return /*#__PURE__*/React.createElement(Item, Object.assign({\n key: item.itemKey || String(level) + idx\n }, item, {\n level: level\n }));\n }\n }));\n return finalDom;\n }\n render() {\n const _a = this.props,\n {\n children: originChildren,\n mode,\n onOpenChange,\n onSelect,\n onClick,\n style,\n className,\n subNavCloseDelay,\n subNavOpenDelay,\n subNavMotion,\n tooltipShowDelay,\n tooltipHideDelay,\n prefixCls,\n bodyStyle,\n footer,\n header,\n toggleIconPosition,\n limitIndent,\n renderWrapper,\n getPopupContainer\n } = _a,\n rest = __rest(_a, [\"children\", \"mode\", \"onOpenChange\", \"onSelect\", \"onClick\", \"style\", \"className\", \"subNavCloseDelay\", \"subNavOpenDelay\", \"subNavMotion\", \"tooltipShowDelay\", \"tooltipHideDelay\", \"prefixCls\", \"bodyStyle\", \"footer\", \"header\", \"toggleIconPosition\", \"limitIndent\", \"renderWrapper\", \"getPopupContainer\"]);\n const {\n selectedKeys,\n openKeys,\n items,\n isCollapsed\n } = this.state;\n const {\n updateOpenKeys,\n addOpenKeys,\n removeOpenKeys,\n updateSelectedKeys,\n addSelectedKeys,\n removeSelectedKeys\n } = this.adapter;\n const finalStyle = Object.assign({}, style);\n let children = Children.toArray(originChildren);\n const footers = [];\n const headers = [];\n if (/*#__PURE__*/React.isValidElement(footer)) {\n footers.push(/*#__PURE__*/React.createElement(Footer, {\n key: 0\n }, footer));\n } else if (footer && typeof footer === 'object') {\n footers.push(/*#__PURE__*/React.createElement(Footer, Object.assign({\n key: 0\n }, footer)));\n }\n if (/*#__PURE__*/React.isValidElement(header)) {\n headers.push(/*#__PURE__*/React.createElement(Header, {\n key: 0\n }, header));\n } else if (header && typeof header === 'object') {\n headers.push(/*#__PURE__*/React.createElement(Header, Object.assign({\n key: 0\n }, header)));\n }\n if (Array.isArray(children) && children.length) {\n children = [...children];\n let childrenLength = children.length;\n for (let i = 0; i < childrenLength; i++) {\n const child = children[i];\n if (child.type === Footer || _get(child, 'type.elementType') === 'NavFooter') {\n footers.push(child);\n children.splice(i, 1);\n i--;\n childrenLength--;\n } else if (child.type === Header || _get(child, 'type.elementType') === 'NavHeader') {\n headers.push(child);\n children.splice(i, 1);\n i--;\n childrenLength--;\n }\n }\n }\n const finalCls = cls(prefixCls, className, {\n [`${prefixCls}-collapsed`]: isCollapsed,\n [`${prefixCls}-horizontal`]: mode === 'horizontal',\n [`${prefixCls}-vertical`]: mode === 'vertical'\n });\n const headerListOuterCls = cls(`${prefixCls}-header-list-outer`, {\n [`${prefixCls}-header-list-outer-collapsed`]: isCollapsed\n });\n if (this.itemsChanged) {\n this.adapter.setCache('itemElems', this.renderItems(items));\n }\n return /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Navigation\"\n }, locale => (/*#__PURE__*/React.createElement(NavContext.Provider, {\n value: {\n subNavCloseDelay,\n subNavOpenDelay,\n subNavMotion,\n tooltipShowDelay,\n tooltipHideDelay,\n openKeys,\n openKeysIsControlled: this.isControlled('openKeys') && mode === 'vertical' && !isCollapsed,\n // canUpdateOpenKeys: mode === 'vertical' && !isCollapsed,\n canUpdateOpenKeys: true,\n selectedKeys,\n selectedKeysIsControlled: this.isControlled('selectedKeys'),\n isCollapsed,\n onCollapseChange: this.onCollapseChange,\n mode,\n onSelect,\n onOpenChange,\n updateOpenKeys,\n addOpenKeys,\n removeOpenKeys,\n updateSelectedKeys,\n addSelectedKeys,\n removeSelectedKeys,\n onClick,\n locale,\n prefixCls,\n toggleIconPosition,\n limitIndent,\n renderWrapper,\n getPopupContainer\n }\n }, /*#__PURE__*/React.createElement(\"div\", Object.assign({\n className: finalCls,\n style: finalStyle\n }, this.getDataAttr(rest)), /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-inner`\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: headerListOuterCls\n }, headers, /*#__PURE__*/React.createElement(\"div\", {\n style: bodyStyle,\n className: `${prefixCls}-list-wrapper`\n }, /*#__PURE__*/React.createElement(\"ul\", {\n role: \"menu\",\n \"aria-orientation\": mode,\n className: `${prefixCls}-list`\n }, this.adapter.getCache('itemElems'), children))), footers)))));\n }\n}\nNav.Sub = SubNav;\nNav.Item = Item;\nNav.Header = Header;\nNav.Footer = Footer;\nNav.propTypes = {\n collapseIcon: PropTypes.node,\n // Initial expanded SubNav navigation key array\n defaultOpenKeys: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])),\n openKeys: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])),\n // Initial selected navigation key array\n defaultSelectedKeys: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])),\n expandIcon: PropTypes.node,\n selectedKeys: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])),\n // Navigation type, now supports vertical, horizontal\n mode: PropTypes.oneOf([...strings.MODE]),\n // Triggered when selecting a navigation item\n onSelect: PropTypes.func,\n // Triggered when clicking a navigation item\n onClick: PropTypes.func,\n // SubNav expand/close callback\n onOpenChange: PropTypes.func,\n // Array of options (nested options can continue)\n items: PropTypes.array,\n // Is it in the state of being stowed to the sidebar\n isCollapsed: PropTypes.bool,\n defaultIsCollapsed: PropTypes.bool,\n onCollapseChange: PropTypes.func,\n multiple: PropTypes.bool,\n onDeselect: PropTypes.func,\n subNavMotion: PropTypes.oneOfType([PropTypes.bool, PropTypes.object, PropTypes.func]),\n subNavCloseDelay: PropTypes.number,\n subNavOpenDelay: PropTypes.number,\n tooltipShowDelay: PropTypes.number,\n tooltipHideDelay: PropTypes.number,\n children: PropTypes.node,\n style: PropTypes.object,\n bodyStyle: PropTypes.object,\n className: PropTypes.string,\n toggleIconPosition: PropTypes.string,\n prefixCls: PropTypes.string,\n header: PropTypes.oneOfType([PropTypes.node, PropTypes.object]),\n footer: PropTypes.oneOfType([PropTypes.node, PropTypes.object]),\n limitIndent: PropTypes.bool,\n getPopupContainer: PropTypes.func\n};\nNav.__SemiComponentName__ = \"Navigation\";\nNav.defaultProps = getDefaultPropsFromGlobalConfig(Nav.__SemiComponentName__, {\n subNavCloseDelay: numbers.DEFAULT_SUBNAV_CLOSE_DELAY,\n subNavOpenDelay: numbers.DEFAULT_SUBNAV_OPEN_DELAY,\n tooltipHideDelay: numbers.DEFAULT_TOOLTIP_HIDE_DELAY,\n tooltipShowDelay: numbers.DEFAULT_TOOLTIP_SHOW_DELAY,\n onCollapseChange: _noop,\n onSelect: _noop,\n onClick: _noop,\n onOpenChange: _noop,\n toggleIconPosition: 'right',\n limitIndent: true,\n prefixCls: cssClasses.PREFIX,\n subNavMotion: true,\n // isOpen: false,\n mode: strings.MODE_VERTICAL\n // defaultOpenKeys: [],\n // defaultSelectedKeys: [],\n // items: [],\n});\nexport default Nav;","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-popconfirm`,\n POPOVER: `${BASE_CLASS_PREFIX}-popconfirm-popover`\n};\nconst strings = {\n POSITION_SET: ['top', 'topLeft', 'topRight', 'left', 'leftTop', 'leftBottom', 'right', 'rightTop', 'rightBottom', 'bottom', 'bottomLeft', 'bottomRight', 'leftTopOver', 'rightTopOver'],\n TRIGGER_SET: ['hover', 'focus', 'click', 'custom']\n};\nconst numbers = {\n SPACING: 4,\n DEFAULT_Z_INDEX: 1030\n};\nexport { cssClasses, strings, numbers };","import _get from \"lodash/get\";\nimport BaseFoundation from '../base/foundation';\nimport isPromise from '../utils/isPromise';\nexport default class PopConfirmFoundation extends BaseFoundation {\n init() {}\n destroy() {}\n handleCancel(e) {\n const maybePromise = this._adapter.notifyCancel(e);\n if (isPromise(maybePromise)) {\n this._adapter.updateCancelLoading(true);\n maybePromise.then(result => {\n this.handleVisibleChange(false);\n this._adapter.updateCancelLoading(false);\n }, errors => {\n this._adapter.updateCancelLoading(false);\n });\n } else {\n this.handleVisibleChange(false);\n }\n }\n handleConfirm(e) {\n const maybePromise = this._adapter.notifyConfirm(e);\n if (isPromise(maybePromise)) {\n this._adapter.updateConfirmLoading(true);\n maybePromise.then(result => {\n this._adapter.updateConfirmLoading(false);\n this.handleVisibleChange(false);\n }, errors => {\n this._adapter.updateConfirmLoading(false);\n });\n } else {\n this.handleVisibleChange(false);\n }\n }\n handleClickOutSide(e) {\n this._adapter.notifyClickOutSide(e);\n }\n handleVisibleChange(visible) {\n if (!this._isControlledComponent('visible')) {\n this._adapter.setVisible(visible);\n }\n if (visible) {\n this.handleFocusOperateButton();\n } else {\n this._adapter.focusPrevFocusElement();\n }\n this._adapter.notifyVisibleChange(visible);\n }\n handleFocusOperateButton() {\n const {\n cancelButtonProps,\n okButtonProps\n } = this._adapter.getProps();\n if (_get(cancelButtonProps, 'autoFocus') && !_get(cancelButtonProps, 'disabled')) {\n this._adapter.focusCancelButton();\n } else if (_get(okButtonProps, 'autoFocus') && !_get(okButtonProps, 'disabled')) {\n this._adapter.focusOkButton();\n }\n }\n}","import _omit from \"lodash/omit\";\nimport _isFunction from \"lodash/isFunction\";\nimport _get from \"lodash/get\";\nimport _noop from \"lodash/noop\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses, numbers } from '@douyinfe/semi-foundation/lib/es/popconfirm/constants';\nimport PopconfirmFoundation from '@douyinfe/semi-foundation/lib/es/popconfirm/popconfirmFoundation';\nimport { IconClose, IconAlertTriangle } from '@douyinfe/semi-icons';\nimport BaseComponent from '../_base/baseComponent';\nimport Popover from '../popover';\nimport Button from '../button';\nimport ConfigContext from '../configProvider/context';\nimport LocaleConsumer from '../locale/localeConsumer';\nimport '@douyinfe/semi-foundation/lib/es/popconfirm/popconfirm.css';\nimport { getDefaultPropsFromGlobalConfig } from \"../_utils\";\nexport default class Popconfirm extends BaseComponent {\n constructor(props) {\n super(props);\n this.handleCancel = e => this.foundation.handleCancel(e && e.nativeEvent);\n this.handleConfirm = e => this.foundation.handleConfirm(e && e.nativeEvent);\n this.handleVisibleChange = visible => this.foundation.handleVisibleChange(visible);\n this.handleClickOutSide = e => this.foundation.handleClickOutSide(e);\n this.stopImmediatePropagation = e => e && e.nativeEvent && e.nativeEvent.stopImmediatePropagation();\n this.renderConfirmPopCard = _ref => {\n let {\n initialFocusRef\n } = _ref;\n const {\n content,\n title,\n className,\n style,\n cancelType,\n icon,\n prefixCls,\n showCloseIcon\n } = this.props;\n const {\n direction\n } = this.context;\n const popCardCls = cls(prefixCls, className, {\n [`${prefixCls}-rtl`]: direction === 'rtl'\n });\n const showTitle = title !== null && typeof title !== 'undefined';\n const showContent = !(content === null || typeof content === 'undefined');\n const hasIcon = /*#__PURE__*/React.isValidElement(icon);\n const bodyCls = cls({\n [`${prefixCls}-body`]: true,\n [`${prefixCls}-body-withIcon`]: hasIcon\n });\n return (\n /*#__PURE__*/\n /* eslint-disable-next-line jsx-a11y/no-static-element-interactions */\n React.createElement(\"div\", {\n className: popCardCls,\n onClick: this.stopImmediatePropagation,\n style: style\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-inner`\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-header`\n }, hasIcon ? /*#__PURE__*/React.createElement(\"i\", {\n className: `${prefixCls}-header-icon`,\n \"x-semi-prop\": \"icon\"\n }, icon) : null, /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-header-body`\n }, showTitle ? (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-header-title`,\n \"x-semi-prop\": \"title\"\n }, title)) : null), showCloseIcon ? (/*#__PURE__*/React.createElement(Button, {\n className: `${prefixCls}-btn-close`,\n icon: /*#__PURE__*/React.createElement(IconClose, null),\n size: \"small\",\n theme: 'borderless',\n type: cancelType,\n onClick: this.handleCancel\n })) : null), showContent ? (/*#__PURE__*/React.createElement(\"div\", {\n className: bodyCls,\n \"x-semi-prop\": \"content\"\n }, _isFunction(content) ? content({\n initialFocusRef\n }) : content)) : null, /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-footer`,\n ref: this.footerRef\n }, this.renderControls())))\n );\n };\n this.state = {\n cancelLoading: false,\n confirmLoading: false,\n visible: props.defaultVisible || false\n };\n this.foundation = new PopconfirmFoundation(this.adapter);\n this.footerRef = /*#__PURE__*/React.createRef();\n this.popoverRef = /*#__PURE__*/React.createRef();\n }\n static getDerivedStateFromProps(props, state) {\n const willUpdateStates = {};\n const {\n hasOwnProperty\n } = Object.prototype;\n if (hasOwnProperty.call(props, 'visible')) {\n willUpdateStates.visible = props.visible;\n }\n return willUpdateStates;\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n setVisible: visible => this.setState({\n visible\n }),\n updateConfirmLoading: loading => this.setState({\n confirmLoading: loading\n }),\n updateCancelLoading: loading => this.setState({\n cancelLoading: loading\n }),\n notifyConfirm: e => this.props.onConfirm(e),\n notifyCancel: e => this.props.onCancel(e),\n notifyVisibleChange: visible => this.props.onVisibleChange(visible),\n notifyClickOutSide: e => this.props.onClickOutSide(e),\n focusCancelButton: () => {\n var _a, _b;\n const buttonNode = (_b = (_a = this.footerRef) === null || _a === void 0 ? void 0 : _a.current) === null || _b === void 0 ? void 0 : _b.querySelector('[data-type=cancel]');\n buttonNode === null || buttonNode === void 0 ? void 0 : buttonNode.focus({\n preventScroll: true\n });\n },\n focusOkButton: () => {\n var _a, _b;\n const buttonNode = (_b = (_a = this.footerRef) === null || _a === void 0 ? void 0 : _a.current) === null || _b === void 0 ? void 0 : _b.querySelector('[data-type=ok]');\n buttonNode === null || buttonNode === void 0 ? void 0 : buttonNode.focus({\n preventScroll: true\n });\n },\n focusPrevFocusElement: () => {\n var _a;\n (_a = this.popoverRef.current) === null || _a === void 0 ? void 0 : _a.focusTrigger();\n }\n });\n }\n renderControls() {\n const {\n okText,\n cancelText,\n okType,\n cancelType,\n cancelButtonProps,\n okButtonProps\n } = this.props;\n const {\n cancelLoading,\n confirmLoading\n } = this.state;\n return /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Popconfirm\"\n }, (locale, localeCode) => (/*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, Object.assign({\n \"data-type\": \"cancel\",\n type: cancelType,\n onClick: this.handleCancel,\n loading: cancelLoading\n }, _omit(cancelButtonProps, 'autoFocus')), cancelText || _get(locale, 'cancel')), /*#__PURE__*/React.createElement(Button, Object.assign({\n \"data-type\": \"ok\",\n type: okType,\n theme: \"solid\",\n onClick: this.handleConfirm,\n loading: confirmLoading\n }, _omit(okButtonProps, 'autoFocus')), okText || _get(locale, 'confirm')))));\n }\n render() {\n // rtl changes the default position\n const {\n direction\n } = this.context;\n const defaultPosition = direction === 'rtl' ? 'bottomRight' : 'bottomLeft';\n const _a = this.props,\n {\n className,\n prefixCls,\n disabled,\n children,\n style,\n position = defaultPosition\n } = _a,\n attrs = __rest(_a, [\"className\", \"prefixCls\", \"disabled\", \"children\", \"style\", \"position\"]);\n if (disabled) {\n return children;\n }\n const {\n visible\n } = this.state;\n const popProps = {\n onVisibleChange: this.handleVisibleChange,\n className: cssClasses.POPOVER,\n onClickOutSide: this.handleClickOutSide\n };\n if (this.isControlled('visible')) {\n popProps.trigger = 'custom';\n }\n return /*#__PURE__*/React.createElement(Popover, Object.assign({\n ref: this.popoverRef\n }, attrs, {\n // A arrow function needs to be passed here, otherwise the content will not be updated after the Popconfirm state is updated\n // Popover is a PureComponent, same props will not trigger update\n content: _ref2 => {\n let {\n initialFocusRef\n } = _ref2;\n return this.renderConfirmPopCard({\n initialFocusRef\n });\n },\n visible: visible,\n position: position\n }, popProps), children);\n }\n}\nPopconfirm.contextType = ConfigContext;\nPopconfirm.propTypes = {\n motion: PropTypes.oneOfType([PropTypes.bool, PropTypes.func, PropTypes.object]),\n disabled: PropTypes.bool,\n content: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n title: PropTypes.any,\n prefixCls: PropTypes.string,\n className: PropTypes.string,\n style: PropTypes.object,\n icon: PropTypes.node,\n okText: PropTypes.string,\n okType: PropTypes.string,\n cancelText: PropTypes.string,\n cancelType: PropTypes.string,\n onCancel: PropTypes.func,\n onConfirm: PropTypes.func,\n onClickOutSide: PropTypes.func,\n onVisibleChange: PropTypes.func,\n visible: PropTypes.bool,\n defaultVisible: PropTypes.bool,\n okButtonProps: PropTypes.object,\n cancelButtonProps: PropTypes.object,\n stopPropagation: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n showCloseIcon: PropTypes.bool,\n zIndex: PropTypes.number,\n // private\n trigger: PropTypes.string,\n position: PropTypes.string\n};\nPopconfirm.__SemiComponentName__ = \"Popconfirm\";\nPopconfirm.defaultProps = getDefaultPropsFromGlobalConfig(Popconfirm.__SemiComponentName__, {\n stopPropagation: true,\n trigger: 'click',\n // position: 'bottomLeft',\n onVisibleChange: _noop,\n disabled: false,\n icon: /*#__PURE__*/React.createElement(IconAlertTriangle, {\n size: \"extra-large\"\n }),\n okType: 'primary',\n cancelType: 'tertiary',\n prefixCls: cssClasses.PREFIX,\n zIndex: numbers.DEFAULT_Z_INDEX,\n showCloseIcon: true,\n onCancel: _noop,\n onConfirm: _noop,\n onClickOutSide: _noop\n});","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-progress`\n};\nconst strings = {\n types: ['line', 'circle'],\n DEFAULT_TYPE: 'line',\n STROKE_DEFAULT: 'var(--semi-color-success)',\n strokeLineCap: ['square', 'round'],\n DEFAULT_LINECAP: 'round',\n sizes: ['default', 'small', 'large'],\n DEFAULT_SIZE: 'default',\n directions: ['vertical', 'horizontal'],\n DEFAULT_DIRECTION: 'horizontal'\n};\nconst numbers = {};\nexport { cssClasses, strings };","import { strings } from './constants';\nfunction generateColor(s, percent, gradient) {\n try {\n const gradientColorArr = generate(s, percent, gradient);\n if (gradientColorArr.length !== 0) return gradientColorArr;\n } catch (e) {\n return undefined;\n }\n return undefined;\n}\nfunction generate(s, percent, gradient) {\n s.sort((a, b) => a.percent - b.percent);\n if (s[0].percent > percent) {\n return strings.STROKE_DEFAULT;\n }\n const endS = s[s.length - 1];\n if (endS.percent < percent) {\n return formatToHex(endS.color);\n }\n for (const [index, item] of s.entries()) {\n if (item.percent === percent) {\n return formatToHex(item.color);\n }\n if (percent > item.percent) continue;\n const oldItem = s[index - 1];\n if (!gradient) {\n return formatToHex(oldItem.color);\n }\n return generateGradients({\n startColor: formatToHex(oldItem.color),\n endColor: formatToHex(item.color),\n size: item.percent - oldItem.percent - 1\n }, percent - oldItem.percent - 1);\n }\n return undefined;\n}\nfunction generateGradients(g, index) {\n const {\n startColor,\n endColor,\n size\n } = g;\n const sA = startColor.split('');\n const eA = endColor.split('');\n const rC = [parseInt(`${sA[1]}${sA[2]}`, 16), parseInt(`${eA[1]}${eA[2]}`, 16)];\n const gC = [parseInt(`${sA[3]}${sA[4]}`, 16), parseInt(`${eA[3]}${eA[4]}`, 16)];\n const bC = [parseInt(`${sA[5]}${sA[6]}`, 16), parseInt(`${eA[5]}${eA[6]}`, 16)];\n const aC = [parseInt(`${sA[7]}${sA[8]}`, 16), parseInt(`${eA[7]}${eA[8]}`, 16)];\n const rStep = (rC[0] - rC[1]) / (size + 1);\n const gStep = (gC[0] - gC[1]) / (size + 1);\n const bStep = (bC[0] - bC[1]) / (size + 1);\n const aStep = (aC[0] - aC[1]) / (size + 1);\n function tHex(i) {\n const rS = Math.round(rC[0] - rStep * (i + 1)).toString(16);\n const gS = Math.round(gC[0] - gStep * (i + 1)).toString(16);\n const bS = Math.round(bC[0] - bStep * (i + 1)).toString(16);\n const h = `${padTwo(rS)}${padTwo(gS)}${padTwo(bS)}`;\n const t = Math.floor(aStep * (i + 1) + aC[1]).toString(16);\n return toHex.Hex(`#${h}`, t);\n }\n function padTwo(s) {\n if (s.length === 1) {\n return `0${s}`;\n }\n if (s.length === 0) {\n return '00';\n }\n return s;\n }\n if (typeof index === 'undefined') {\n const gradientColorArr = [startColor];\n for (let i = 0; i < size; i += 1) {\n gradientColorArr.push(tHex(i));\n }\n return gradientColorArr;\n }\n return tHex(index);\n}\n// Resolve the colour type contained within `ColorType` to Hex\nfunction formatToHex(color) {\n color = color.trim().toLowerCase();\n // Hex\n if (REG_S.hex.test(color)) {\n return toHex.Hex(color, undefined);\n }\n // Hsl or Hsla\n if (REG_S.hslA.test(color)) {\n return toHex.Hex(toHex.HslA(color), undefined);\n }\n // Rgb or Rgba\n if (REG_S.rgbA.test(color)) {\n return toHex.Hex(toHex.RgbA(color), undefined);\n }\n // Semi Design Tokens\n if (REG_S.semiDesignTokens.test(color)) {\n if (SEMI_DESIGN_TOKENS.ALONG.indexOf(color) !== -1) {\n return toHex.SemiDesignToken(color);\n }\n if (SEMI_DESIGN_TOKENS.SEQUENCE.indexOf(color) !== -1) {\n return toHex.SemiDesignToken(`${color}-5`);\n }\n return toHex.SemiDesignToken(`${color}`);\n }\n return undefined;\n}\nconst toHex = {\n Hex(color, transparency) {\n color = color.replace('#', '');\n if (color.length === 8) return `#${color}`;\n if (color.length === 6) return `#${color}${transparency || 'ff'}`;\n if (color.length === 3) {\n color = color.split('').map(c => c + c).join('');\n }\n return `#${color}${transparency || 'ff'}`;\n },\n SemiDesignToken(color) {\n // ! Only produces effects when used, the conditions for running need to occur after the real DOM is rendered\n if (typeof window === 'undefined') {\n return undefined;\n }\n const variable = getComputedStyle(document.body).getPropertyValue(`--semi-${color}`);\n if (variable === '') return undefined;\n const rgba = `rgba(${variable}, 1)`;\n return toHex.RgbA(rgba);\n },\n HslA(color) {\n const hsla = REG_S.hslA.exec(color);\n const h = parseInt(hsla[2]);\n const s = parseInt(hsla[3]) / 100;\n const l = parseInt(hsla[4]) / 100;\n const a = hsla[5];\n const c = (1 - Math.abs(2 * l - 1)) * s,\n x = c * (1 - Math.abs(h / 60 % 2 - 1)),\n m = l - c / 2;\n let r = 0,\n g = 0,\n b = 0;\n if (0 <= h && h < 60) {\n r = c;\n g = x;\n b = 0;\n } else if (60 <= h && h < 120) {\n r = x;\n g = c;\n b = 0;\n } else if (120 <= h && h < 180) {\n r = 0;\n g = c;\n b = x;\n } else if (180 <= h && h < 240) {\n r = 0;\n g = x;\n b = c;\n } else if (240 <= h && h < 300) {\n r = x;\n g = 0;\n b = c;\n } else if (300 <= h && h < 360) {\n r = c;\n g = 0;\n b = x;\n }\n r = Math.round((r + m) * 255).toString(16);\n g = Math.round((g + m) * 255).toString(16);\n b = Math.round((b + m) * 255).toString(16);\n return toHex.utils.pAL(r, g, b, a);\n },\n RgbA(color) {\n const rgba = REG_S.rgbA.exec(color);\n const r = parseInt(rgba[2], 10).toString(16),\n g = parseInt(rgba[3], 10).toString(16),\n b = parseInt(rgba[4], 10).toString(16),\n a = rgba[5];\n return toHex.utils.pAL(r, g, b, a);\n },\n utils: {\n pAL(r, g, b, a) {\n if (r.length == 1) r = '0' + r;\n if (g.length == 1) g = '0' + g;\n if (b.length == 1) b = '0' + b;\n if (typeof a !== 'undefined') {\n a = Math.round(parseInt(a) * 255).toString(16);\n if (a.length == 1) a = '0' + a;\n return '#' + r + g + b + a;\n }\n return '#' + r + g + b;\n }\n }\n};\nconst REG_S = {\n hex: /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,\n hslA: /(hsl)a?\\(\\s*?(\\d+),?\\s*?(\\d+)%,?\\s*?(\\d+)%,?\\s*?\\/?(\\s*?[\\d.]+)?\\s*?\\)/,\n rgbA: /(rgb)a?\\(\\s*?(\\d+),?\\s*?(\\d+),?\\s*?(\\d+),?\\s*?\\/?(\\s*?[\\d.]+)?\\s*?\\)/,\n semiDesignTokens: /(\\w+)?-?(\\w+)-?(\\d)?/\n};\n// From src/components/palette.js\nconst SEMI_DESIGN_TOKENS = {\n // No sequence\n ALONG: [\"black\", \"white\"],\n // Sequence: 0-9\n SEQUENCE: [\"amber\", \"blue\", \"cyan\", \"green\", \"grey\", \"indigo\", \"light-blue\", \"light-green\", \"lime\", \"orange\", \"pink\", \"purple\", \"red\", \"teal\", \"violet\", \"yellow\"]\n};\nexport { generateColor };","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { Component } from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/progress/constants';\nimport getDataAttr from '@douyinfe/semi-foundation/lib/es/utils/getDataAttr';\nimport '@douyinfe/semi-foundation/lib/es/progress/progress.css';\nimport { Animation } from '@douyinfe/semi-animation';\nimport { generateColor } from '@douyinfe/semi-foundation/lib/es/progress/generates';\nconst prefixCls = cssClasses.PREFIX;\nclass Progress extends Component {\n constructor(props) {\n super(props);\n this._mounted = true;\n this._mounted = true;\n this.state = {\n percentNumber: this.props.percent // Specially used for animation of numbers\n };\n }\n componentDidUpdate(prevProps) {\n if (isNaN(this.props.percent) || isNaN(prevProps.percent)) {\n throw new Error('[Semi Progress]:percent can not be NaN');\n return;\n }\n if (prevProps.percent !== this.props.percent) {\n if (!this.props.motion) {\n this.setState({\n percentNumber: this.props.percent\n });\n return;\n }\n if (this.animation && this.animation.destroy) {\n this.animation.destroy();\n }\n this.animation = new Animation({\n from: {\n value: prevProps.percent\n },\n to: {\n value: this.props.percent\n }\n }, {\n // easing: 'cubic-bezier(0, .68, .3, 1)'\n easing: 'linear',\n duration: 300\n });\n this.animation.on('frame', props => {\n // prevent setState while component is unmounted but this timer is called\n if (this._mounted === false) {\n return;\n }\n // let percentNumber = Number.isInteger(props.value) ? props.value : Math.floor(props.value * 100) / 100;\n const percentNumber = parseInt(props.value);\n this.setState({\n percentNumber\n });\n });\n this.animation.on('rest', () => {\n // prevent setState while component is unmounted but this timer is called\n if (this._mounted === false) {\n return;\n }\n this.setState({\n percentNumber: this.props.percent\n });\n });\n this.animation.start();\n }\n }\n componentWillUnmount() {\n this.animation && this.animation.destroy();\n this._mounted = false;\n }\n renderCircleProgress() {\n const _a = this.props,\n {\n strokeLinecap,\n style,\n className,\n strokeWidth,\n format,\n size,\n stroke,\n strokeGradient,\n showInfo,\n percent,\n orbitStroke,\n id\n } = _a,\n rest = __rest(_a, [\"strokeLinecap\", \"style\", \"className\", \"strokeWidth\", \"format\", \"size\", \"stroke\", \"strokeGradient\", \"showInfo\", \"percent\", \"orbitStroke\", \"id\"]);\n const ariaLabel = this.props['aria-label'];\n const ariaLabelledBy = this.props['aria-labelledby'];\n const ariaValueText = this.props['aria-valuetext'];\n const {\n percentNumber\n } = this.state;\n const classNames = {\n wrapper: cls(`${prefixCls}-circle`, className),\n svg: cls(`${prefixCls}-circle-ring`),\n circle: cls(`${prefixCls}-circle-ring-inner`)\n };\n const perc = this.calcPercent(percent);\n const percNumber = this.calcPercent(percentNumber);\n let width;\n if (this.props.width) {\n width = this.props.width;\n } else {\n size === strings.DEFAULT_SIZE ? width = 72 : width = 24;\n }\n // parse stroke & generate gradients\n const _stroke = this.selectStroke(stroke, percent, strokeGradient);\n // cx, cy is circle center\n const cy = width / 2;\n const cx = width / 2;\n const radius = (width - strokeWidth) / 2; // radius\n const circumference = radius * 2 * Math.PI;\n const strokeDashoffset = (1 - perc / 100) * circumference; // Offset\n const strokeDasharray = `${circumference} ${circumference}`;\n const text = format(percNumber);\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n id: id,\n className: classNames.wrapper,\n style: style,\n role: \"progressbar\",\n \"aria-valuemin\": 0,\n \"aria-valuemax\": 100,\n \"aria-valuenow\": percNumber,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-label\": ariaLabel,\n \"aria-valuetext\": ariaValueText\n }, getDataAttr(rest)), /*#__PURE__*/React.createElement(\"svg\", {\n key: size,\n className: classNames.svg,\n height: width,\n width: width,\n \"aria-hidden\": true\n }, /*#__PURE__*/React.createElement(\"circle\", {\n strokeDashoffset: 0,\n strokeWidth: strokeWidth,\n strokeDasharray: strokeDasharray,\n strokeLinecap: strokeLinecap,\n fill: \"transparent\",\n stroke: orbitStroke,\n r: radius,\n cx: cx,\n cy: cy,\n \"aria-hidden\": true\n }), /*#__PURE__*/React.createElement(\"circle\", {\n className: classNames.circle,\n strokeDashoffset: strokeDashoffset,\n strokeWidth: strokeWidth,\n strokeDasharray: strokeDasharray,\n strokeLinecap: strokeLinecap,\n fill: \"transparent\",\n stroke: _stroke,\n r: radius,\n cx: cx,\n cy: cy,\n \"aria-hidden\": true\n })), showInfo && size !== 'small' ? /*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixCls}-circle-text`\n }, text) : null);\n }\n calcPercent(percent) {\n let perc;\n if (percent > 100) {\n perc = 100;\n } else if (percent < 0) {\n perc = 0;\n } else {\n perc = percent;\n }\n return perc;\n }\n selectStroke(stroke, percent, strokeGradient) {\n if (typeof stroke === 'string') {\n return stroke;\n }\n const color = generateColor(stroke, percent, strokeGradient);\n if (typeof color !== 'undefined') {\n return color;\n }\n return strings.STROKE_DEFAULT;\n }\n renderLineProgress() {\n const _a = this.props,\n {\n className,\n style,\n stroke,\n strokeGradient,\n direction,\n format,\n showInfo,\n size,\n percent,\n orbitStroke,\n id\n } = _a,\n rest = __rest(_a, [\"className\", \"style\", \"stroke\", \"strokeGradient\", \"direction\", \"format\", \"showInfo\", \"size\", \"percent\", \"orbitStroke\", \"id\"]);\n const ariaLabel = this.props['aria-label'];\n const ariaLabelledBy = this.props['aria-labelledby'];\n const ariaValueText = this.props['aria-valuetext'];\n const {\n percentNumber\n } = this.state;\n const progressWrapperCls = cls(prefixCls, className, {\n [`${prefixCls}-horizontal`]: direction === strings.DEFAULT_DIRECTION,\n [`${prefixCls}-vertical`]: direction !== strings.DEFAULT_DIRECTION,\n [`${prefixCls}-large`]: size === 'large'\n });\n const progressTrackCls = cls({\n [`${prefixCls}-track`]: true\n });\n const innerCls = cls(`${prefixCls}-track-inner`);\n const perc = this.calcPercent(percent);\n const percNumber = this.calcPercent(percentNumber);\n // parse stroke & generate gradients\n const _stroke = this.selectStroke(stroke, percent, strokeGradient);\n const innerStyle = {\n background: _stroke\n };\n if (direction === strings.DEFAULT_DIRECTION) {\n innerStyle.width = `${perc}%`;\n } else {\n innerStyle.height = `${perc}%`;\n }\n const text = format(percNumber);\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n id: id,\n className: progressWrapperCls,\n style: style,\n role: \"progressbar\",\n \"aria-valuemin\": 0,\n \"aria-valuemax\": 100,\n \"aria-valuenow\": perc,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-label\": ariaLabel,\n \"aria-valuetext\": ariaValueText\n }, getDataAttr(rest)), /*#__PURE__*/React.createElement(\"div\", {\n className: progressTrackCls,\n style: orbitStroke ? {\n backgroundColor: orbitStroke\n } : {},\n \"aria-hidden\": true\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: innerCls,\n style: innerStyle,\n \"aria-hidden\": true\n })), showInfo ? /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-line-text`\n }, text) : null);\n }\n render() {\n const {\n type\n } = this.props;\n if (type === 'line') {\n return this.renderLineProgress();\n } else {\n return this.renderCircleProgress();\n }\n }\n}\nProgress.propTypes = {\n 'aria-label': PropTypes.string,\n 'aria-labelledby': PropTypes.string,\n 'aria-valuetext': PropTypes.string,\n className: PropTypes.string,\n direction: PropTypes.oneOf(strings.directions),\n format: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n id: PropTypes.string,\n motion: PropTypes.oneOfType([PropTypes.bool, PropTypes.func, PropTypes.object]),\n orbitStroke: PropTypes.string,\n percent: PropTypes.number,\n scale: PropTypes.number,\n showInfo: PropTypes.bool,\n size: PropTypes.oneOf(strings.sizes),\n stroke: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.shape({\n percent: PropTypes.number,\n color: PropTypes.string\n }))]),\n strokeGradient: PropTypes.bool,\n strokeLinecap: PropTypes.oneOf(strings.strokeLineCap),\n strokeWidth: PropTypes.number,\n style: PropTypes.object,\n type: PropTypes.oneOf(strings.types),\n width: PropTypes.number\n};\nProgress.defaultProps = {\n className: '',\n direction: strings.DEFAULT_DIRECTION,\n format: text => `${text}%`,\n motion: true,\n orbitStroke: 'var(--semi-color-fill-0)',\n percent: 0,\n showInfo: false,\n size: strings.DEFAULT_SIZE,\n stroke: strings.STROKE_DEFAULT,\n strokeGradient: false,\n strokeLinecap: strings.DEFAULT_LINECAP,\n strokeWidth: 4,\n style: {},\n type: strings.DEFAULT_TYPE\n};\nexport default Progress;","import { VALIDATE_STATUS, BASE_CLASS_PREFIX } from '../base/constants';\nimport { strings as tooltipStrings } from '../tooltip/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-select`,\n PREFIX_OPTION: `${BASE_CLASS_PREFIX}-select-option`,\n PREFIX_GROUP: `${BASE_CLASS_PREFIX}-select-group`\n};\nconst strings = {\n SIZE_SET: ['small', 'large', 'default'],\n POSITION_SET: tooltipStrings.POSITION_SET,\n MODE_SELECT: 'select',\n MODE_AUTOCOMPLETE: 'autoComplete',\n // MODE_TAGS: 'tags',\n STATUS: VALIDATE_STATUS,\n SEARCH_POSITION_TRIGGER: 'trigger',\n SEARCH_POSITION_DROPDOWN: 'dropdown'\n};\nconst numbers = {\n LIST_HEIGHT: 270\n};\nexport { cssClasses, strings, numbers };","import _omit from \"lodash/omit\";\nimport _isEqual from \"lodash/isEqual\";\nimport _isString from \"lodash/isString\";\nimport _isNumber from \"lodash/isNumber\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport BaseFoundation from '../base/foundation';\nimport KeyCode, { ENTER_KEY } from '../utils/keyCode';\nimport warning from '../utils/warning';\nimport isNullOrUndefined from '../utils/isNullOrUndefined';\nimport isEnterPress from '../utils/isEnterPress';\nimport { handlePrevent } from '../utils/a11y';\nimport { strings } from './constants';\nexport default class SelectFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n // keyboard event listner\n this._keydownHandler = null;\n }\n init() {\n this._setDropdownWidth();\n const isDefaultOpen = this.getProp('defaultOpen');\n const isOpen = this.getProp('open');\n const originalOptions = this._collectOptions();\n this._setDefaultSelection(originalOptions);\n if (isDefaultOpen || isOpen) {\n this.open(undefined, originalOptions);\n }\n const autoFocus = this.getProp('autoFocus');\n if (autoFocus) {\n this.focus();\n }\n }\n focus() {\n const isFilterable = this._isFilterable();\n const isMultiple = this._isMultiple();\n this._adapter.updateFocusState(true);\n this._adapter.setIsFocusInContainer(false);\n if (isFilterable && isMultiple) {\n // when filter and multiple, only focus input\n this.focusInput();\n } else if (isFilterable && !isMultiple) {\n // when filter and not multiple, only show input and focus input\n this.toggle2SearchInput(true);\n } else {\n this._focusTrigger();\n }\n }\n _focusTrigger() {\n this._adapter.focusTrigger();\n // this.bindKeyBoardEvent();\n }\n destroy() {\n this._adapter.unregisterClickOutsideHandler();\n // this.unBindKeyBoardEvent();\n }\n _setDropdownWidth() {\n const {\n style,\n dropdownMatchSelectWidth\n } = this.getProps();\n let width;\n if (dropdownMatchSelectWidth) {\n if (style && _isNumber(style.width)) {\n width = style.width;\n } else if (style && _isString(style.width) && !style.width.includes('%')) {\n width = style.width;\n } else {\n width = this._adapter.getTriggerWidth();\n }\n this._adapter.setOptionWrapperWidth(width);\n }\n }\n _collectOptions() {\n const originalOptions = this._adapter.getOptionsFromChildren();\n this._adapter.updateOptions(originalOptions);\n // Reposition the drop-down layer\n this._adapter.rePositionDropdown();\n return originalOptions;\n }\n _setDefaultSelection(originalOptions) {\n let {\n value\n } = this.getProps();\n const {\n defaultValue\n } = this.getProps();\n if (this._isControlledComponent()) {\n // do nothing\n } else {\n value = defaultValue;\n }\n this._update(value, originalOptions);\n }\n // call when props.optionList change\n handleOptionListChange() {\n const newOptionList = this._collectOptions();\n const {\n selections\n } = this.getStates();\n this.updateOptionsActiveStatus(selections, newOptionList);\n // reset focusIndex\n const {\n defaultActiveFirstOption\n } = this.getProps();\n if (defaultActiveFirstOption) {\n this._adapter.updateFocusIndex(0);\n }\n }\n // In uncontrolled mode, when props.optionList change,\n // but already had defaultValue or choose some option\n handleOptionListChangeHadDefaultValue() {\n const selections = this.getState('selections');\n let value;\n const {\n onChangeWithObject\n } = this.getProps();\n const isMultiple = this._isMultiple();\n switch (true) {\n case isMultiple && Boolean(selections.size):\n try {\n value = [...selections].map(item =>\n // At this point item1 is directly the object\n onChangeWithObject ? item[1] : item[1].value);\n } catch (error) {\n value = [];\n }\n break;\n case isMultiple && !selections.size:\n value = [];\n break;\n case !isMultiple && Boolean(selections.size):\n try {\n value = onChangeWithObject ? [...selections][0][1] : [...selections][0][1].value;\n } catch (error) {}\n break;\n case !isMultiple && !selections.size:\n break;\n default:\n break;\n }\n const originalOptions = this._adapter.getOptionsFromChildren();\n this._update(value, originalOptions);\n }\n // call when props.value change\n handleValueChange(value) {\n const {\n allowCreate,\n autoClearSearchValue,\n remote\n } = this.getProps();\n const {\n inputValue\n } = this.getStates();\n let originalOptions;\n // AllowCreate and controlled mode, no need to re-collect optionList\n if (allowCreate && this._isControlledComponent()) {\n originalOptions = this.getState('options');\n originalOptions.forEach(item => item._show = true);\n } else {\n // originalOptions = this.getState('options');\n // The options in state cannot be used directly here,\n // because it is possible to update the optionList and props.value at the same time, and the options in state are still old at this time\n originalOptions = this._adapter.getOptionsFromChildren();\n }\n // Multi-selection, controlled mode, you need to reposition the drop-down menu after updating\n this._adapter.rePositionDropdown();\n if (this._isFilterable() && !autoClearSearchValue && inputValue && !remote) {\n originalOptions = this._filterOption(originalOptions, inputValue);\n }\n this._update(value, originalOptions);\n }\n // Update the selected item in the selection box\n _update(propValue, originalOptions) {\n let selections;\n if (!this._isMultiple()) {\n // Radio\n selections = this._updateSingle(propValue, originalOptions);\n } else {\n selections = this._updateMultiple(propValue, originalOptions);\n this.updateOverflowItemCount(selections.size);\n }\n // Update the text in the selection box\n this._adapter.updateSelection(selections);\n // Update the selected item in the drop-down box\n this.updateOptionsActiveStatus(selections, originalOptions);\n }\n // Optionally selected updates (when components are mounted, or after value changes)\n _updateSingle(propValue, originalOptions) {\n const selections = new Map();\n const {\n onChangeWithObject\n } = this.getProps();\n // When onChangeWithObject is true, the defaultValue or Value passed by the props should be the object, which corresponds to the result returned by onChange, so the value of the object needs to be taken as a judgment comparison\n const selectedValue = onChangeWithObject && typeof propValue !== 'undefined' ? propValue.value : propValue;\n const selectedOptions = originalOptions.filter(option => option.value === selectedValue);\n const noMatchOptionInList = !selectedOptions.length && typeof selectedValue !== 'undefined' && selectedValue !== null;\n // If the current value, there is a matching option in the optionList\n if (selectedOptions.length) {\n const selectedOption = selectedOptions[0];\n const optionExist = Object.assign({}, selectedOption);\n // if (onChangeWithObject) {\n // OptionExist = {... propValue }; // value is the object with the'value 'Key\n // }\n selections.set(optionExist.label, optionExist);\n } else if (noMatchOptionInList) {\n // If the current value does not have a corresponding item in the optionList, construct an option and update it to the selection. However, it does not need to be inserted into the list\n let optionNotExist = {\n value: propValue,\n label: propValue,\n _notExist: true,\n _scrollIndex: -1\n };\n if (onChangeWithObject) {\n optionNotExist = Object.assign(Object.assign({}, propValue), {\n _notExist: true,\n _scrollIndex: -1\n });\n }\n selections.set(optionNotExist.label, optionNotExist);\n }\n return selections;\n }\n // Multi-selected option update (when the component is mounted, or after the value changes)\n _updateMultiple(propValue, originalOptions) {\n const nowSelections = this.getState('selections');\n let selectedOptionList = [];\n // Multiple selection is to determine whether it is an array to avoid the problem of defaultValue/value incoming string error\n const propValueIsArray = Array.isArray(propValue);\n this.checkMultipleProps();\n // If N values are currently selected, the corresponding option data is retrieved from the current selections for retrieval. Because these selected options may not exist in the new optionList\n if (nowSelections.size) {\n selectedOptionList = [...nowSelections].map(item => item[1]);\n }\n const selections = new Map();\n let selectedValues = propValue;\n const {\n onChangeWithObject\n } = this.getProps();\n // When onChangeWithObject is true\n if (onChangeWithObject && propValueIsArray) {\n selectedValues = propValue.map(item => item.value);\n }\n if (propValueIsArray && selectedValues.length) {\n selectedValues.forEach((selectedValue, i) => {\n // The current value exists in the current optionList\n const index = originalOptions.findIndex(option => option.value === selectedValue);\n if (index !== -1) {\n selections.set(originalOptions[index].label, originalOptions[index]);\n } else {\n // The current value exists in the optionList that has been selected before the change, and does not exist in the current optionList, then directly take the corresponding value from the selections, no need to construct a new option\n const indexInSelectedList = selectedOptionList.findIndex(option => option.value === selectedValue);\n if (indexInSelectedList !== -1) {\n const option = selectedOptionList[indexInSelectedList];\n if (onChangeWithObject) {\n // Although the value is the same and can be found in selections, it cannot ensure that other items remain unchanged. A comparison is made.\n // https://github.com/DouyinFE/semi-design/pull/2139\n const optionCompare = Object.assign({}, propValue[i]);\n if (_isEqual(optionCompare, option)) {\n selections.set(option.label, option);\n } else {\n selections.set(optionCompare.label, optionCompare);\n }\n } else {\n selections.set(option.label, option);\n }\n } else {\n // The current value does not exist in the current optionList or the list before the change. Construct an option and update it to the selection\n let optionNotExist = {\n value: selectedValue,\n label: selectedValue,\n _notExist: true\n };\n onChangeWithObject ? optionNotExist = Object.assign(Object.assign({}, propValue[i]), {\n _notExist: true\n }) : null;\n selections.set(optionNotExist.label, Object.assign(Object.assign({}, optionNotExist), {\n _scrollIndex: -1\n }));\n }\n }\n });\n }\n return selections;\n }\n _isMultiple() {\n return this.getProp('multiple');\n }\n _isDisabled() {\n return this.getProp('disabled');\n }\n _isFilterable() {\n return Boolean(this.getProp('filter')); // filter can be boolean or function\n }\n handleClick(e) {\n const {\n clickToHide\n } = this.getProps();\n const {\n isOpen\n } = this.getStates();\n const isDisabled = this._isDisabled();\n if (isDisabled) {\n return;\n } else if (!isOpen) {\n this.open();\n this._notifyFocus(e);\n } else if (isOpen && clickToHide) {\n this.close({\n event: e\n });\n } else if (isOpen && !clickToHide) {\n this.focusInput();\n }\n }\n open(acInput, originalOptions) {\n const isFilterable = this._isFilterable();\n const options = originalOptions || this.getState('options');\n // When searchable, when the drop-down box expands\n if (isFilterable) {\n // Also clears the options filter to show all candidates\n // Options created dynamically but not selected are also filtered out\n const sugInput = '';\n const newOptions = this._filterOption(options, sugInput).filter(item => !item._inputCreateOnly);\n this._adapter.updateOptions(newOptions);\n this.toggle2SearchInput(true);\n } else {\n // whether it is a filter or not, isFocus is guaranteed to be true when open\n this._adapter.updateFocusState(true);\n }\n this._adapter.openMenu(() => {\n const {\n searchPosition,\n autoFocus\n } = this.getProps();\n if (autoFocus && searchPosition === strings.SEARCH_POSITION_DROPDOWN) {\n this._adapter.focusDropdownInput();\n }\n });\n this._setDropdownWidth();\n this._adapter.notifyDropdownVisibleChange(true);\n this.bindKeyBoardEvent();\n this._adapter.registerClickOutsideHandler(e => {\n this.close({\n event: e\n });\n this._notifyBlur(e);\n this._adapter.updateFocusState(false);\n });\n }\n toggle2SearchInput(isShow) {\n if (isShow) {\n this._adapter.toggleInputShow(isShow, () => this.focusInput());\n } else {\n // only when choose the option and close the panel, the input can be hide\n this._adapter.toggleInputShow(isShow, () => undefined);\n }\n }\n close(closeConfig) {\n // to support A11y, closing the panel trigger does not necessarily lose focus\n const {\n event,\n closeCb,\n notToggleInput\n } = closeConfig || {};\n const {\n isFocus\n } = this.getStates();\n this._adapter.closeMenu();\n this._adapter.notifyDropdownVisibleChange(false);\n this._adapter.setIsFocusInContainer(false);\n if (isFocus) {\n // if the isFocus state is true, refocus the trigger case see in https://github.com/DouyinFE/semi-design/issues/2465\n this._focusTrigger();\n }\n // this.unBindKeyBoardEvent();\n // this._notifyBlur(e);\n // this._adapter.updateFocusState(false);\n this._adapter.unregisterClickOutsideHandler();\n const isFilterable = this._isFilterable();\n // notToggleInput will only be true when in controlled mode - handleSingeleSelect process\n if (isFilterable && !notToggleInput) {\n this.toggle2SearchInput(false);\n }\n this._adapter.once('popoverClose', () => {\n if (isFilterable) {\n this.clearInput(event);\n }\n if (closeCb) {\n closeCb();\n }\n });\n }\n onSelect(option, optionIndex, event) {\n const isDisabled = this._isDisabled();\n if (isDisabled) {\n return;\n }\n // If the allowCreate dynamically created option is selected, onCreate needs to be triggered\n if (option._inputCreateOnly) {\n this._adapter.notifyCreate(option);\n }\n const isMultiple = this._isMultiple();\n if (!isMultiple) {\n this._handleSingleSelect(option, event);\n } else {\n this._handleMultipleSelect(option, event);\n }\n this._adapter.updateFocusIndex(optionIndex);\n }\n _handleSingleSelect(_a, event) {\n var {\n value,\n label\n } = _a,\n rest = __rest(_a, [\"value\", \"label\"]);\n const selections = new Map().set(label, Object.assign({\n value,\n label\n }, rest));\n // First trigger onSelect, then trigger onChange\n this._notifySelect(value, Object.assign({\n value,\n label\n }, rest));\n // If it is a controlled component, directly notify\n // Make sure that the operations of updating updateOptions are done after the animation ends\n // otherwise the content will be updated when the popup layer is not collapsed, and it looks like it will flash once when it is closed\n const isFilterable = this._isFilterable();\n if (this._isControlledComponent()) {\n this.close({\n event: event,\n notToggleInput: true,\n closeCb: () => {\n // trigger props.onChange -> update props.value -> updateSelection\n this._notifyChange(selections);\n // make sure toggleSearchInput update after updateSelection in controlled mode, otherwise text in inactive DOM will update quicker than selection, looks like flash text\n if (isFilterable) {\n this.toggle2SearchInput(false);\n }\n }\n });\n } else {\n this._adapter.updateSelection(selections);\n // notify user\n this._notifyChange(selections);\n this.close({\n event: event,\n closeCb: () => {\n // Update the selected item in the drop-down box\n this.updateOptionsActiveStatus(selections);\n }\n });\n }\n }\n _handleMultipleSelect(_a, event) {\n var {\n value,\n label\n } = _a,\n rest = __rest(_a, [\"value\", \"label\"]);\n const maxLimit = this._adapter.getMaxLimit();\n const selections = this._adapter.getSelections();\n const {\n autoClearSearchValue\n } = this.getProps();\n if (selections.has(label)) {\n this._notifyDeselect(value, Object.assign({\n value,\n label\n }, rest));\n selections.delete(label);\n } else if (maxLimit && selections.size === maxLimit) {\n this._adapter.notifyMaxLimit(Object.assign({\n value,\n label\n }, _omit(rest, '_scrollIndex')));\n return;\n } else {\n this._notifySelect(value, Object.assign({\n value,\n label\n }, rest));\n selections.set(label, Object.assign({\n value,\n label\n }, rest));\n }\n if (this._isControlledComponent()) {\n // Controlled components, directly notified\n this._notifyChange(selections);\n if (this._isFilterable()) {\n if (autoClearSearchValue) {\n this.clearInput(event);\n }\n this.focusInput();\n }\n } else {\n // Uncontrolled components, update ui\n this._adapter.updateSelection(selections);\n this.updateOverflowItemCount(selections.size);\n // In multi-select mode, the drop-down pop-up layer is repositioned every time the value is changed, because the height selection of the selection box may have changed\n this._adapter.rePositionDropdown();\n let {\n options\n } = this.getStates();\n // Searchable filtering, when selected, resets Input\n if (this._isFilterable()) {\n // When filter active,if autoClearSearchValue is true,reset input after select\n if (autoClearSearchValue) {\n this.clearInput(event);\n // At the same time, the filtering of options is also cleared, in order to show all candidates\n const sugInput = '';\n options = this._filterOption(options, sugInput);\n }\n this.focusInput();\n }\n this.updateOptionsActiveStatus(selections, options);\n this._notifyChange(selections);\n }\n }\n clearSelected() {\n const selections = new Map();\n if (this._isControlledComponent()) {\n this._notifyChange(selections);\n this._adapter.notifyClear();\n } else {\n this._adapter.updateSelection(selections);\n this.updateOptionsActiveStatus(selections);\n this._notifyChange(selections);\n this._adapter.notifyClear();\n }\n // when call manually by ref method\n const {\n isOpen\n } = this.getStates();\n if (isOpen) {\n this._adapter.rePositionDropdown();\n }\n }\n // Update the selected item in the drop-down box\n updateOptionsActiveStatus(selections) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getState('options');\n const {\n allowCreate\n } = this.getProps();\n const newOptions = options.map(option => {\n if (selections.has(option.label)) {\n option._selected = true;\n if (allowCreate) {\n delete option._inputCreateOnly;\n }\n } else {\n if (option._inputCreateOnly) {\n option._show = false;\n }\n option._selected = false;\n }\n return option;\n });\n this._adapter.updateOptions(newOptions);\n }\n removeTag(item) {\n const selections = this._adapter.getSelections();\n selections.delete(item.label);\n if (this._isControlledComponent()) {\n this._notifyDeselect(item.value, item);\n this._notifyChange(selections);\n } else {\n this._notifyDeselect(item.value, item);\n this._adapter.updateSelection(selections);\n this.updateOverflowItemCount(selections.size);\n this.updateOptionsActiveStatus(selections);\n // Repostion drop-down layer, because the selection may have changed the number of rows, resulting in a height change\n this._adapter.rePositionDropdown();\n this._notifyChange(selections);\n }\n }\n // The reason why event input is optional is that clearInput may be manually called by the user through ref\n clearInput(event) {\n const {\n inputValue\n } = this.getStates();\n // only when input is not null, select should notifySearch and updateOptions\n if (inputValue !== '') {\n this._adapter.updateInputValue('');\n this._adapter.notifySearch('', event);\n // reset options filter\n const {\n options\n } = this.getStates();\n const {\n remote\n } = this.getProps();\n let optionsAfterFilter = options;\n if (!remote) {\n optionsAfterFilter = this._filterOption(options, '');\n }\n this._adapter.updateOptions(optionsAfterFilter);\n }\n }\n focusInput() {\n this._adapter.focusInput();\n this._adapter.updateFocusState(true);\n this._adapter.setIsFocusInContainer(false);\n }\n handleInputChange(sugInput, event) {\n // Input is a controlled component, so the value needs to be updated\n this._adapter.updateInputValue(sugInput);\n const {\n options,\n isOpen\n } = this.getStates();\n const {\n allowCreate,\n remote\n } = this.getProps();\n let optionsAfterFilter = options;\n if (!remote) {\n // Filter options based on input\n optionsAfterFilter = this._filterOption(options, sugInput);\n }\n // When allowClear is true, an entry can be created. You need to include the current input as a new Option input\n optionsAfterFilter = this._createOptionByInput(allowCreate, optionsAfterFilter, sugInput);\n this._adapter.updateOptions(optionsAfterFilter);\n this._adapter.notifySearch(sugInput, event);\n // In multi-select mode, the drop-down box is repositioned each time you enter, because it may cause a line break as the input changes\n if (this._isMultiple()) {\n this._adapter.rePositionDropdown();\n }\n }\n _filterOption(originalOptions, sugInput) {\n const filter = this.getProp('filter');\n if (!filter) {\n // 1. No filtering\n return originalOptions;\n } else if (typeof filter === 'boolean' && filter) {\n // 2. When true, the default filter is used\n const input = sugInput.toLowerCase();\n return originalOptions.map(option => {\n const label = option.label.toString().toLowerCase();\n const groupLabel = option._parentGroup && option._parentGroup.label;\n const matchOption = label.includes(input);\n const matchGroup = _isString(groupLabel) && groupLabel.toLowerCase().includes(input);\n if (matchOption || matchGroup) {\n option._show = true;\n } else {\n option._show = false;\n }\n return option;\n });\n } else if (typeof filter === 'function') {\n // 3. When passing in a custom function, use a custom function for filtering\n return originalOptions.map(option => {\n filter(sugInput, option) ? option._show = true : option._show = false;\n return option;\n });\n }\n return undefined;\n }\n _createOptionByInput(allowCreate, optionsAfterFilter, sugInput) {\n if (allowCreate) {\n if (sugInput) {\n // optionsAfterFilter clone ??? needClone ?\n const newOptionByInput = {\n _show: true,\n _selected: false,\n value: sugInput,\n label: sugInput,\n // True indicates that the option was dynamically created during user filtering\n _inputCreateOnly: true\n };\n let createOptionIndex = -1;\n let matchOptionIndex = -1;\n optionsAfterFilter.forEach((option, index) => {\n if (!option._show && !option._inputCreateOnly) {\n return;\n }\n // The matching algorithm is not necessarily through labels?\n if (option.label === sugInput) {\n matchOptionIndex = index;\n }\n if (option._inputCreateOnly) {\n createOptionIndex = index;\n option.value = sugInput;\n option.label = sugInput;\n option._show = true;\n }\n });\n if (createOptionIndex === -1 && matchOptionIndex === -1) {\n optionsAfterFilter.push(newOptionByInput);\n }\n if (matchOptionIndex !== -1) {\n optionsAfterFilter = optionsAfterFilter.filter(item => !item._inputCreateOnly);\n }\n } else {\n // Delete input unselected items\n optionsAfterFilter = optionsAfterFilter.filter(item => !item._inputCreateOnly);\n }\n }\n // TODO Promise supports asynchronous creation\n return optionsAfterFilter;\n }\n bindKeyBoardEvent() {\n this._keydownHandler = event => {\n this._handleKeyDown(event);\n };\n this._adapter.registerKeyDown(this._keydownHandler);\n }\n unBindKeyBoardEvent() {\n if (this._keydownHandler) {\n this._adapter.unregisterKeyDown();\n }\n }\n // When searchPosition is trigger, the keyboard events bind to the outer trigger div\n // When searchPosition is dropdown, the popup and the outer trigger div are not parent- child relationships, keyboard events bind to the dorpdown input\n _handleKeyDown(event) {\n const key = event.keyCode;\n const {\n loading,\n filter,\n multiple,\n disabled\n } = this.getProps();\n const {\n isOpen\n } = this.getStates();\n if (loading || disabled) {\n return;\n }\n switch (key) {\n case KeyCode.UP:\n // Prevent Input's cursor from following\n // Prevent Input cursor from following\n event.preventDefault();\n this._handleArrowKeyDown(-1);\n break;\n case KeyCode.DOWN:\n // Prevent Input's cursor from following\n // Prevent Input cursor from following\n event.preventDefault();\n this._handleArrowKeyDown(1);\n break;\n case KeyCode.BACKSPACE:\n this._handleBackspaceKeyDown();\n break;\n case KeyCode.ENTER:\n // internal-issues:302\n // prevent trigger form’s submit when use in form\n handlePrevent(event);\n this._handleEnterKeyDown(event);\n break;\n case KeyCode.ESC:\n isOpen && this.close({\n event: event\n });\n filter && !multiple && this._focusTrigger();\n break;\n case KeyCode.TAB:\n // check if slot have focusable element\n this._handleTabKeyDown(event);\n break;\n default:\n break;\n }\n }\n handleContainerKeyDown(event) {\n // when focus in contanier, handle the key down\n const key = event.keyCode;\n const {\n isOpen\n } = this.getStates();\n switch (key) {\n case KeyCode.TAB:\n isOpen && this._handleTabKeyDown(event);\n break;\n default:\n break;\n }\n }\n _getEnableFocusIndex(offset) {\n const {\n focusIndex,\n options\n } = this.getStates();\n const visibleOptions = options.filter(item => item._show);\n // let visibleOptions = options;\n const optionsLength = visibleOptions.length;\n let index = focusIndex + offset;\n if (index < 0) {\n index = optionsLength - 1;\n }\n if (index >= optionsLength) {\n index = 0;\n }\n // avoid newIndex option is disabled\n if (offset > 0) {\n let nearestActiveOption = -1;\n for (let i = 0; i < visibleOptions.length; i++) {\n const optionIsActive = !visibleOptions[i].disabled;\n if (optionIsActive) {\n nearestActiveOption = i;\n }\n if (nearestActiveOption >= index) {\n break;\n }\n }\n index = nearestActiveOption;\n } else {\n let nearestActiveOption = visibleOptions.length;\n for (let i = optionsLength - 1; i >= 0; i--) {\n const optionIsActive = !visibleOptions[i].disabled;\n if (optionIsActive) {\n nearestActiveOption = i;\n }\n if (nearestActiveOption <= index) {\n break;\n }\n }\n index = nearestActiveOption;\n }\n // console.log('new:' + index);\n this._adapter.updateFocusIndex(index);\n this._adapter.updateScrollTop(index);\n }\n _handleArrowKeyDown(offset) {\n const {\n isOpen\n } = this.getStates();\n isOpen ? this._getEnableFocusIndex(offset) : this.open();\n }\n _handleTabKeyDown(event) {\n const {\n isOpen\n } = this.getStates();\n this._adapter.updateFocusState(false);\n if (isOpen) {\n const container = this._adapter.getContainer();\n const focusableElements = this._adapter.getFocusableElements(container);\n const focusableNum = focusableElements.length;\n if (focusableNum > 0) {\n // Shift + Tab will move focus backward\n if (event.shiftKey) {\n this._handlePanelOpenShiftTabKeyDown(focusableElements, event);\n } else {\n this._handlePanelOpenTabKeyDown(focusableElements, event);\n }\n } else {\n // there are no focusable elements inside the container, tab to next element and trigger blur\n this.close({\n event: event\n });\n this._notifyBlur(event);\n }\n } else {\n // tab or shift tab to next element and trigger blur\n this._notifyBlur(event);\n }\n }\n _handlePanelOpenTabKeyDown(focusableElements, event) {\n const activeElement = this._adapter.getActiveElement();\n const isFocusInContainer = this._adapter.getIsFocusInContainer();\n if (!isFocusInContainer) {\n // focus in trigger, set next focus to the first element in container\n focusableElements[0].focus();\n this._adapter.setIsFocusInContainer(true);\n handlePrevent(event);\n } else if (activeElement === focusableElements[focusableElements.length - 1]) {\n // focus in the last element in container, focus back to trigger and close panel\n this._focusTrigger();\n this.close({\n event\n });\n handlePrevent(event);\n }\n }\n _handlePanelOpenShiftTabKeyDown(focusableElements, event) {\n const activeElement = this._adapter.getActiveElement();\n const isFocusInContainer = this._adapter.getIsFocusInContainer();\n if (!isFocusInContainer) {\n // focus in trigger, close the panel, shift tab to previe element and trigger blur\n this.close({\n event\n });\n this._notifyBlur(event);\n } else if (activeElement === focusableElements[0]) {\n // focus in the first element in container, focus back to trigger\n this._focusTrigger();\n this._adapter.setIsFocusInContainer(false);\n handlePrevent(event);\n }\n }\n _handleEnterKeyDown(event) {\n const {\n isOpen,\n options,\n focusIndex\n } = this.getStates();\n if (!isOpen) {\n this.open();\n } else {\n if (focusIndex !== -1) {\n const visibleOptions = options.filter(item => item._show);\n const {\n length\n } = visibleOptions;\n // fix issue 1201\n if (length <= focusIndex) {\n return;\n }\n if (visibleOptions && length) {\n const selectedOption = visibleOptions[focusIndex];\n if (selectedOption.disabled) {\n return;\n }\n this.onSelect(selectedOption, focusIndex, event);\n }\n } else {\n this.close({\n event\n });\n }\n }\n }\n _handleBackspaceKeyDown() {\n if (this._isMultiple()) {\n const selections = this._adapter.getSelections();\n const {\n inputValue\n } = this.getStates();\n const length = selections.size;\n if (length && !inputValue) {\n const keys = [...selections.keys()];\n let index = length - 1;\n let targetLabel = keys[index];\n let targetItem = selections.get(targetLabel);\n let isAllDisabled = false;\n // can skip disabled item when remove trigger by backspace\n if (targetItem.disabled && index === 0) {\n return;\n }\n while (targetItem.disabled && index !== 0) {\n index = index - 1;\n targetLabel = keys[index];\n targetItem = selections.get(targetLabel);\n if (index == 0 && targetItem.disabled) {\n isAllDisabled = true;\n }\n }\n if (!isAllDisabled) {\n this.removeTag(targetItem);\n }\n }\n }\n }\n _notifyChange(selections) {\n const {\n onChangeWithObject\n } = this.getProps();\n const stateSelections = this.getState('selections');\n let notifyVal;\n const selectionsProps = [...selections.values()];\n const isMultiple = this._isMultiple();\n const hasChange = this._diffSelections(selections, stateSelections, isMultiple);\n if (!hasChange) {\n return;\n }\n switch (true) {\n case onChangeWithObject:\n this._notifyChangeWithObject(selections);\n break;\n case !onChangeWithObject && !isMultiple:\n notifyVal = selectionsProps.length ? selectionsProps[0].value : undefined;\n this._adapter.notifyChange(notifyVal);\n break;\n case !onChangeWithObject && isMultiple:\n notifyVal = selectionsProps.length ? selectionsProps.map(props => props.value) : [];\n this._adapter.notifyChange(notifyVal);\n break;\n default:\n break;\n }\n }\n _removeInternalKey(option) {\n let newOption = Object.assign({}, option);\n delete newOption._parentGroup;\n delete newOption._show;\n delete newOption._selected;\n delete newOption._scrollIndex;\n delete newOption._keyInJsx;\n if ('_keyInOptionList' in newOption) {\n newOption.key = newOption._keyInOptionList;\n delete newOption._keyInOptionList;\n }\n return newOption;\n }\n _notifySelect(value, option) {\n const newOption = this._removeInternalKey(option);\n this._adapter.notifySelect(value, newOption);\n }\n _notifyDeselect(value, option) {\n const newOption = this._removeInternalKey(option);\n this._adapter.notifyDeselect(value, newOption);\n }\n _diffSelections(selections, oldSelections, isMultiple) {\n let diffLabel = true,\n diffValue = true;\n if (!isMultiple) {\n const selectionProps = [...selections.values()];\n const oldSelectionProps = [...oldSelections.values()];\n const optionValue = selectionProps[0] ? selectionProps[0].value : selectionProps[0];\n const oldOptionValue = oldSelectionProps[0] ? oldSelectionProps[0].value : oldSelectionProps[0];\n diffValue = !_isEqual(optionValue, oldOptionValue);\n const optionLabel = selectionProps[0] ? selectionProps[0].label : selectionProps[0];\n const oldOptionLabel = oldSelectionProps[0] ? oldSelectionProps[0].label : oldSelectionProps[0];\n diffLabel = !_isEqual(optionLabel, oldOptionLabel);\n } else {\n // When multiple selection, there is no scene where the value is different between the two operations\n }\n return diffValue || diffLabel;\n }\n // When onChangeWithObject is true, the onChange input parameter is not only value, but also label and other parameters\n _notifyChangeWithObject(selections) {\n const stateSelections = this.getState('selections');\n const values = [];\n for (const item of selections.entries()) {\n let val = Object.assign({\n label: item[0]\n }, item[1]);\n val = this._removeInternalKey(val);\n values.push(val);\n }\n if (!this._isMultiple()) {\n this._adapter.notifyChange(values[0]);\n } else {\n this._adapter.notifyChange(values);\n }\n }\n // Scenes that may trigger blur:\n // 1、clickOutSide\n // 2、 tab to next element/ shift tab to previous element\n // 3、[remove when add a11y] click option / press enter, and then select complete(when multiple is false \n // 4、[remove when add a11y] press esc when dropdown list open \n _notifyBlur(e) {\n this._adapter.notifyBlur(e);\n }\n // Scenes that may trigger focus:\n // 1、click selection\n _notifyFocus(e) {\n this._adapter.notifyFocus(e);\n }\n handleMouseEnter(e) {\n this._adapter.updateHovering(true);\n this._adapter.notifyMouseEnter(e);\n }\n handleMouseLeave(e) {\n this._adapter.updateHovering(false);\n this._adapter.notifyMouseLeave(e);\n }\n handleClearClick(e) {\n const {\n filter,\n searchPosition\n } = this.getProps();\n if (filter && searchPosition === strings.SEARCH_POSITION_TRIGGER) {\n this.clearInput(e);\n }\n // after click showClear button, the select need to be focused\n this.focus();\n this.clearSelected();\n // prevent this click open dropdown\n e.stopPropagation();\n }\n handleKeyPress(e) {\n if (e && e.key === ENTER_KEY) {\n this.handleClick(e);\n }\n }\n /* istanbul ignore next */\n handleClearBtnEnterPress(e) {\n if (isEnterPress(e)) {\n this.handleClearClick(e);\n }\n }\n handleOptionMouseEnter(optionIndex) {\n this._adapter.updateFocusIndex(optionIndex);\n }\n handleListScroll(e) {\n this._adapter.notifyListScroll(e);\n }\n handleTriggerFocus(e) {\n this.bindKeyBoardEvent();\n // close the tag in multiple select did not trigger select focus, but trigger TriggerFocus, so not need to updateFocusState in this function\n // this._adapter.updateFocusState(true);\n this._adapter.setIsFocusInContainer(false);\n }\n handleTriggerBlur(e) {\n const {\n filter,\n autoFocus\n } = this.getProps();\n const {\n isOpen,\n isFocus\n } = this.getStates();\n // Under normal circumstances, blur will be accompanied by clickOutsideHandler, so the notify of blur can be called uniformly in clickOutsideHandler\n // But when autoFocus or the panel is close, because clickOutsideHandler is not register or unregister, you need to listen for the trigger's blur and trigger the notify callback\n if (isFocus && !isOpen) {\n this._notifyBlur(e);\n this._adapter.updateFocusState(false);\n }\n }\n handleInputBlur(e) {\n const {\n filter,\n autoFocus\n } = this.getProps();\n const {\n showInput\n } = this.getStates();\n const isMultiple = this._isMultiple();\n if (filter && !isMultiple) {\n if (showInput || autoFocus) {\n this.toggle2SearchInput(false);\n }\n }\n }\n selectAll() {\n const {\n options\n } = this.getStates();\n const {\n onChangeWithObject\n } = this.getProps();\n let selectedValues = [];\n const isMultiple = this._isMultiple();\n if (!isMultiple) {\n console.warn(`[Semi Select]: It seems that you have called the selectAll method in the single-selection Select.\n Please note that this is not a legal way to use it`);\n return;\n }\n if (onChangeWithObject) {\n selectedValues = options;\n } else {\n selectedValues = options.map(option => option.value);\n }\n this.handleValueChange(selectedValues);\n this._adapter.notifyChange(selectedValues);\n }\n /**\n * Check whether the props\n * -defaultValue/value in multiple selection mode is array\n * @param {Object} props\n */\n checkMultipleProps(props) {\n if (this._isMultiple()) {\n const currentProps = props ? props : this.getProps();\n const {\n defaultValue,\n value\n } = currentProps;\n const selectedValues = value || defaultValue;\n if (!isNullOrUndefined(selectedValues) && !Array.isArray(selectedValues)) {\n /* istanbul ignore next */\n warning(true, '[Semi Select] defaultValue/value should be array type in multiple mode');\n }\n }\n }\n updateScrollTop() {\n this._adapter.updateScrollTop();\n }\n updateOverflowItemCount(selectionLength, overFlowCount) {\n const {\n maxTagCount,\n ellipsisTrigger\n } = this.getProps();\n if (!ellipsisTrigger) {\n return;\n }\n if (overFlowCount) {\n this._adapter.updateOverflowItemCount(overFlowCount);\n } else if (typeof maxTagCount === 'number') {\n if (selectionLength - maxTagCount > 0) {\n this._adapter.updateOverflowItemCount(selectionLength - maxTagCount);\n } else {\n this._adapter.updateOverflowItemCount(0);\n }\n }\n }\n updateIsFullTags() {\n const {\n isFullTags\n } = this.getStates();\n if (!isFullTags) {\n this._adapter.setState({\n isFullTags: true\n });\n }\n }\n handlePopoverClose() {\n this._adapter.emit('popoverClose');\n }\n // need to remove focus style of option when user hover slot\n handleSlotMouseEnter() {\n this._adapter.updateFocusIndex(-1);\n }\n}","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-tag`\n};\nconst strings = {\n TAG_SIZE: ['default', 'small', 'large'],\n TAG_COLOR: ['grey', 'red', 'pink', 'purple', 'violet', 'indigo', 'blue', 'light-blue', 'cyan', 'teal', 'green', 'light-green', 'lime', 'yellow', 'amber', 'orange', 'white'],\n TAG_TYPE: ['light', 'solid', 'ghost'],\n AVATAR_SHAPE: ['square', 'circle']\n};\nexport { cssClasses, strings };","import _isString from \"lodash/isString\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/tag/constants';\nimport Avatar from '../avatar/index';\nimport { IconClose } from '@douyinfe/semi-icons';\nimport { handlePrevent } from '@douyinfe/semi-foundation/lib/es/utils/a11y';\nimport '@douyinfe/semi-foundation/lib/es/tag/tag.css';\nimport cls from 'classnames';\nexport * from './interface';\nconst prefixCls = cssClasses.PREFIX;\nconst tagColors = strings.TAG_COLOR;\nconst tagSize = strings.TAG_SIZE;\nconst tagType = strings.TAG_TYPE;\nconst avatarShapeSet = strings.AVATAR_SHAPE;\nexport default class Tag extends Component {\n constructor(props) {\n super(props);\n this.state = {\n visible: true\n };\n this.close = this.close.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n }\n // any other way to achieve this?\n static getDerivedStateFromProps(nextProps) {\n if ('visible' in nextProps) {\n return {\n visible: nextProps.visible\n };\n }\n return null;\n }\n setVisible(visible) {\n if (!('visible' in this.props)) {\n this.setState({\n visible\n });\n }\n }\n close(e, value, tagKey) {\n const {\n onClose\n } = this.props;\n e.stopPropagation();\n e.nativeEvent.stopImmediatePropagation();\n onClose && onClose(value, e, tagKey);\n // when user call e.preventDefault() in onClick callback, tag will not hidden\n if (e.defaultPrevented) {\n return;\n }\n this.setVisible(false);\n }\n handleKeyDown(event) {\n const {\n closable,\n onClick,\n onKeyDown\n } = this.props;\n switch (event.key) {\n case \"Backspace\":\n case \"Delete\":\n closable && this.close(event, this.props.children, this.props.tagKey);\n handlePrevent(event);\n break;\n case \"Enter\":\n onClick(event);\n handlePrevent(event);\n break;\n case 'Escape':\n event.target.blur();\n break;\n default:\n break;\n }\n onKeyDown && onKeyDown(event);\n }\n renderAvatar() {\n const {\n avatarShape,\n avatarSrc\n } = this.props;\n const avatar = /*#__PURE__*/React.createElement(Avatar, {\n src: avatarSrc,\n shape: avatarShape\n });\n return avatar;\n }\n render() {\n const _a = this.props,\n {\n tagKey,\n children,\n size,\n color,\n closable,\n visible,\n onClose,\n onClick,\n className,\n type,\n shape,\n avatarSrc,\n avatarShape,\n tabIndex,\n prefixIcon,\n suffixIcon\n } = _a,\n attr = __rest(_a, [\"tagKey\", \"children\", \"size\", \"color\", \"closable\", \"visible\", \"onClose\", \"onClick\", \"className\", \"type\", \"shape\", \"avatarSrc\", \"avatarShape\", \"tabIndex\", \"prefixIcon\", \"suffixIcon\"]);\n const {\n visible: isVisible\n } = this.state;\n const clickable = onClick !== Tag.defaultProps.onClick || closable;\n // only when the Tag is clickable or closable, the value of tabIndex is allowed to be passed in. \n const a11yProps = {\n role: 'button',\n tabIndex: tabIndex || 0,\n onKeyDown: this.handleKeyDown\n };\n const baseProps = Object.assign(Object.assign({}, attr), {\n onClick,\n tabIndex: tabIndex,\n className: classNames(prefixCls, {\n [`${prefixCls}-default`]: size === 'default',\n [`${prefixCls}-small`]: size === 'small',\n [`${prefixCls}-large`]: size === 'large',\n [`${prefixCls}-square`]: shape === 'square',\n [`${prefixCls}-circle`]: shape === 'circle',\n [`${prefixCls}-${type}`]: type,\n [`${prefixCls}-${color}-${type}`]: color && type,\n [`${prefixCls}-closable`]: closable,\n [`${prefixCls}-invisible`]: !isVisible,\n [`${prefixCls}-avatar-${avatarShape}`]: avatarSrc\n }, className)\n });\n const wrapProps = clickable ? Object.assign(Object.assign({}, baseProps), a11yProps) : baseProps;\n const closeIcon = closable ? (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions\n React.createElement(\"div\", {\n className: `${prefixCls}-close`,\n onClick: e => this.close(e, children, tagKey)\n }, /*#__PURE__*/React.createElement(IconClose, {\n size: \"small\"\n }))) : null;\n const stringChild = _isString(children);\n const contentCls = cls(`${prefixCls}-content`, `${prefixCls}-content-${stringChild ? 'ellipsis' : 'center'}`);\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n \"aria-label\": this.props['aria-label'] || stringChild ? `${closable ? 'Closable ' : ''}Tag: ${children}` : ''\n }, wrapProps), prefixIcon ? /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-prefix-icon`\n }, prefixIcon) : null, avatarSrc ? this.renderAvatar() : null, /*#__PURE__*/React.createElement(\"div\", {\n className: contentCls\n }, children), suffixIcon ? /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-suffix-icon`\n }, suffixIcon) : null, closeIcon);\n }\n}\nTag.defaultProps = {\n size: tagSize[0],\n color: tagColors[0],\n closable: false,\n // visible: true,\n type: tagType[0],\n onClose: () => undefined,\n onClick: () => undefined,\n onMouseEnter: () => undefined,\n style: {},\n className: '',\n shape: 'square',\n avatarShape: 'square',\n prefixIcon: null,\n suffixIcon: null\n};\nTag.propTypes = {\n children: PropTypes.node,\n tagKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n size: PropTypes.oneOf(tagSize),\n color: PropTypes.oneOf(tagColors),\n type: PropTypes.oneOf(tagType),\n closable: PropTypes.bool,\n visible: PropTypes.bool,\n onClose: PropTypes.func,\n onClick: PropTypes.func,\n prefixIcon: PropTypes.node,\n suffixIcon: PropTypes.node,\n style: PropTypes.object,\n className: PropTypes.string,\n avatarSrc: PropTypes.string,\n avatarShape: PropTypes.oneOf(avatarShapeSet),\n 'aria-label': PropTypes.string\n};","import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/tag/constants';\nimport Tag from './index';\nimport Popover from '../popover/index';\nconst prefixCls = cssClasses.PREFIX;\nconst tagSize = strings.TAG_SIZE;\nconst avatarShapeSet = strings.AVATAR_SHAPE;\nexport default class TagGroup extends PureComponent {\n renderNTag(n, restTags) {\n const {\n size,\n showPopover,\n popoverProps,\n onPlusNMouseEnter\n } = this.props;\n let nTag = /*#__PURE__*/React.createElement(Tag, {\n closable: false,\n size: size,\n color: \"grey\",\n style: {\n backgroundColor: 'transparent'\n },\n key: \"_+n\",\n onMouseEnter: onPlusNMouseEnter\n }, \"+\", n);\n if (showPopover) {\n nTag = /*#__PURE__*/React.createElement(Popover, Object.assign({\n showArrow: true,\n content: restTags,\n trigger: \"hover\",\n position: \"top\",\n autoAdjustOverflow: true,\n className: `${prefixCls}-rest-group-popover`\n }, popoverProps, {\n key: \"_+n_Popover\"\n }), nTag);\n }\n return nTag;\n }\n renderMergeTags(tags) {\n const {\n maxTagCount,\n tagList,\n restCount\n } = this.props;\n const n = restCount ? restCount : tagList.length - maxTagCount;\n let renderTags = tags;\n const normalTags = tags.slice(0, maxTagCount);\n const restTags = tags.slice(maxTagCount);\n let nTag = null;\n if (n > 0) {\n nTag = this.renderNTag(n, restTags);\n normalTags.push(nTag);\n renderTags = normalTags;\n }\n return renderTags;\n }\n renderAllTags() {\n const {\n tagList,\n size,\n mode,\n avatarShape,\n onTagClose\n } = this.props;\n const renderTags = tagList.map(tag => {\n if (mode === 'custom') {\n return tag;\n }\n const newTag = Object.assign({}, tag);\n if (!newTag.size) {\n newTag.size = size;\n }\n if (!newTag.avatarShape) {\n newTag.avatarShape = avatarShape;\n }\n if (!newTag.tagKey) {\n if (typeof newTag.children === 'string' || typeof newTag.children === 'number') {\n newTag.tagKey = newTag.children;\n } else {\n newTag.tagKey = Math.random();\n }\n }\n return /*#__PURE__*/React.createElement(Tag, Object.assign({}, newTag, {\n key: newTag.tagKey,\n onClose: (tagChildren, e, tagKey) => {\n if (newTag.onClose) {\n newTag.onClose(tagChildren, e, tagKey);\n }\n onTagClose && onTagClose(tagChildren, e, tagKey);\n }\n }));\n });\n return renderTags;\n }\n render() {\n const {\n style,\n className,\n maxTagCount,\n size\n } = this.props;\n const groupCls = classNames({\n [`${prefixCls}-group`]: true,\n [`${prefixCls}-group-max`]: maxTagCount,\n [`${prefixCls}-group-small`]: size === 'small',\n [`${prefixCls}-group-large`]: size === 'large'\n }, className);\n const tags = this.renderAllTags();\n const tagContents = typeof maxTagCount === 'undefined' ? tags : this.renderMergeTags(tags);\n return /*#__PURE__*/React.createElement(\"div\", {\n style: style,\n className: groupCls\n }, tagContents);\n }\n}\nTagGroup.defaultProps = {\n style: {},\n className: '',\n size: tagSize[0],\n avatarShape: 'square',\n onTagClose: () => undefined,\n onPlusNMouseEnter: () => undefined\n};\nTagGroup.propTypes = {\n children: PropTypes.node,\n style: PropTypes.object,\n className: PropTypes.string,\n maxTagCount: PropTypes.number,\n restCount: PropTypes.number,\n tagList: PropTypes.array,\n size: PropTypes.oneOf(tagSize),\n mode: PropTypes.string,\n onTagClose: PropTypes.func,\n showPopover: PropTypes.bool,\n popoverProps: PropTypes.object,\n avatarShape: PropTypes.oneOf(avatarShapeSet)\n};","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: BASE_CLASS_PREFIX + '-overflow-list'\n};\nconst MODE_MAP = {\n COLLAPSE: 'collapse',\n SCROLL: 'scroll'\n};\nconst BOUNDARY_MAP = {\n START: 'start',\n END: 'end'\n};\nconst OVERFLOW_DIR = {\n NONE: 0,\n GROW: 1,\n SHRINK: 2\n};\nconst strings = {\n BOUNDARY_SET: Object.values(BOUNDARY_MAP),\n POSITION_SET: ['vertical', 'horizontal'],\n MODE_SET: Object.values(MODE_MAP),\n MODE_MAP,\n BOUNDARY_MAP,\n OVERFLOW_DIR\n};\nconst numbers = {\n MINIMUM_HTML_ELEMENT_WIDTH: 4\n};\nexport { cssClasses, strings, numbers };","import _isEmpty from \"lodash/isEmpty\";\nimport _isEqual from \"lodash/isEqual\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { isHTMLElement } from '../_base/reactUtils';\nexport default class ReactIntersectionObserver extends React.PureComponent {\n componentDidMount() {\n const {\n items\n } = this.props;\n this.cachedKeys = Object.keys(items);\n const {\n root,\n threshold,\n rootMargin,\n option,\n onIntersect\n } = this.props;\n this.observer = new IntersectionObserver(onIntersect, Object.assign({\n root,\n threshold,\n rootMargin\n }, option));\n this.observeElement();\n }\n componentDidUpdate() {\n const {\n items\n } = this.props;\n const itemKeys = Object.keys(items);\n if (!_isEqual(this.cachedKeys, itemKeys)) {\n this.observeElement(true);\n this.cachedKeys = itemKeys;\n }\n }\n componentWillUnmount() {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n }\n observeElement() {\n let force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n const {\n items\n } = this.props;\n if (_isEmpty(items)) {\n // stop everything if not defined\n this.observer.disconnect();\n return;\n }\n if (force) {\n this.observer.disconnect();\n }\n // observer callback is invoked immediately when observing new elements\n Object.keys(items).forEach(key => {\n const node = items[key];\n if (!(node && isHTMLElement(node))) {\n return;\n }\n this.observer.observe(node);\n });\n }\n render() {\n const {\n children\n } = this.props;\n return children;\n }\n}\nReactIntersectionObserver.propTypes = {\n onIntersect: PropTypes.func,\n option: PropTypes.object,\n root: PropTypes.any,\n threshold: PropTypes.number,\n rootMargin: PropTypes.string,\n items: PropTypes.object\n};\nReactIntersectionObserver.defaultProps = {\n onIntersect: () => undefined,\n threshold: 0.75,\n rootMargin: '0px',\n option: {},\n items: {}\n};","import _get from \"lodash/get\";\nimport BaseFoundation from '../base/foundation';\nimport { strings } from './constants';\nimport copy from 'fast-copy';\nconst Boundary = strings.BOUNDARY_MAP;\nconst OverflowDirection = strings.OVERFLOW_DIR;\nclass OverflowListFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n this.previousY = undefined;\n this.isScrollMode = () => {\n const {\n renderMode\n } = this.getProps();\n return renderMode === 'scroll';\n };\n this.getReversedItems = () => {\n const {\n items\n } = this.getProps();\n return copy(items).reverse();\n };\n }\n getOverflowItem() {\n const {\n items\n } = this.getProps();\n const {\n visibleState,\n overflow\n } = this.getStates();\n if (!this.isScrollMode()) {\n return overflow;\n }\n const visibleStateArr = items.map(_ref => {\n let {\n key\n } = _ref;\n return Boolean(visibleState.get(key));\n });\n const visibleStart = visibleStateArr.indexOf(true);\n const visibleEnd = visibleStateArr.lastIndexOf(true);\n const overflowList = [];\n overflowList[0] = visibleStart >= 0 ? items.slice(0, visibleStart) : [];\n overflowList[1] = visibleEnd >= 0 ? items.slice(visibleEnd + 1, items.length) : items.slice();\n return overflowList;\n }\n handleIntersect(entries) {\n const visibleState = copy(this.getState('visibleState'));\n const res = {};\n entries.forEach(entry => {\n const itemKey = _get(entry, 'target.dataset.scrollkey');\n const visible = entry.isIntersecting;\n res[itemKey] = entry;\n visibleState.set(itemKey, visible);\n });\n let someItemVisible = false;\n for (const value of visibleState.values()) {\n if (value) {\n someItemVisible = true;\n break;\n }\n }\n // Any item is visible, indicating that the List is visible\n const wholeListVisible = someItemVisible;\n // If scrolling in the vertical direction makes the List invisible, no processing is required. \n // If this.previousY is undefined, it means that the List is mounted for the first time and will not be processed.\n const [entry1] = entries;\n const currentY = entry1.boundingClientRect.y;\n if (!wholeListVisible && this.previousY !== undefined && currentY !== this.previousY) {\n this.previousY = currentY;\n return;\n }\n this.previousY = currentY;\n this._adapter.updateVisibleState(visibleState);\n this._adapter.notifyIntersect(res);\n }\n handleCollapseOverflow() {\n const {\n minVisibleItems,\n collapseFrom\n } = this.getProps();\n const {\n overflowWidth,\n containerWidth,\n pivot: statePivot,\n overflowStatus\n } = this.getStates();\n const {\n items,\n onOverflow\n } = this.getProps();\n let itemWidths = overflowWidth,\n _pivot = 0;\n let overflowed = false;\n for (const size of this._adapter.getItemSizeMap().values()) {\n itemWidths += size;\n // 触发overflow\n if (itemWidths > containerWidth) {\n overflowed = true;\n break;\n }\n // 顺利遍历完整个列表,说明不存在overflow,直接渲染全部\n if (_pivot === items.length - 1) {\n this._adapter.updateStates({\n overflowStatus: \"normal\",\n pivot: items.length - 1,\n visible: items,\n overflow: []\n });\n break;\n }\n _pivot++;\n }\n if (overflowed) {\n const pivot = Math.max(minVisibleItems, _pivot);\n const isCollapseFromStart = collapseFrom === Boundary.START;\n const visible = isCollapseFromStart ? this.getReversedItems().slice(0, pivot).reverse() : items.slice(0, pivot);\n const overflow = isCollapseFromStart ? this.getReversedItems().slice(pivot).reverse() : items.slice(pivot);\n this._adapter.updateStates({\n overflowStatus: \"overflowed\",\n pivot: pivot,\n visible,\n overflow\n });\n // trigger onOverflow\n if (statePivot !== pivot) {\n onOverflow(overflow);\n }\n return;\n }\n }\n}\nexport default OverflowListFoundation;","import _get from \"lodash/get\";\nimport _isFunction from \"lodash/isFunction\";\nimport _isEqual from \"lodash/isEqual\";\nimport React from 'react';\nimport cls from 'classnames';\nimport BaseComponent from '../_base/baseComponent';\nimport PropTypes from 'prop-types';\nimport { cssClasses, strings, numbers } from '@douyinfe/semi-foundation/lib/es/overflowList/constants';\nimport ResizeObserver from '../resizeObserver';\nimport IntersectionObserver from './intersectionObserver';\nimport OverflowListFoundation from '@douyinfe/semi-foundation/lib/es/overflowList/foundation';\nimport '@douyinfe/semi-foundation/lib/es/overflowList/overflowList.css';\nimport { getDefaultPropsFromGlobalConfig } from '../_utils';\nimport copy from 'fast-copy';\nconst prefixCls = cssClasses.PREFIX;\nconst Boundary = strings.BOUNDARY_MAP;\nconst OverflowDirection = strings.OVERFLOW_DIR;\nconst RenderMode = strings.MODE_MAP;\n// reference to https://github.com/palantir/blueprint/blob/1aa71605/packages/core/src/components/overflow-list/overflowList.tsx#L34\nclass OverflowList extends BaseComponent {\n constructor(props) {\n var _this;\n super(props);\n _this = this;\n this.scroller = null;\n this.spacer = null;\n this.isScrollMode = () => {\n const {\n renderMode\n } = this.props;\n return renderMode === RenderMode.SCROLL;\n };\n this.resize = function () {\n let entries = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var _a;\n const containerWidth = (_a = entries[0]) === null || _a === void 0 ? void 0 : _a.target.clientWidth;\n _this.setState({\n containerWidth,\n overflowStatus: 'calculating'\n });\n };\n this.reintersect = entries => {\n this.foundation.handleIntersect(entries);\n };\n this.mergeRef = (ref, node, key) => {\n this.itemRefs[key] = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (typeof ref === 'object' && ref && 'current' in ref) {\n ref.current = node;\n }\n };\n this.renderOverflow = () => {\n const overflow = this.foundation.getOverflowItem();\n return this.props.overflowRenderer(overflow);\n };\n this.getItemKey = (item, defaultKey) => {\n const {\n itemKey\n } = this.props;\n if (_isFunction(itemKey)) {\n return itemKey(item);\n }\n return _get(item, itemKey || 'key', defaultKey);\n };\n this.renderItemList = () => {\n const {\n className,\n wrapperClassName,\n wrapperStyle,\n style,\n visibleItemRenderer,\n renderMode,\n collapseFrom\n } = this.props;\n const {\n visible,\n overflowStatus\n } = this.state;\n let overflow = this.renderOverflow();\n if (!this.isScrollMode()) {\n if (Array.isArray(overflow)) {\n overflow = /*#__PURE__*/React.createElement(React.Fragment, null, overflow);\n }\n if (/*#__PURE__*/React.isValidElement(overflow)) {\n const child = /*#__PURE__*/React.cloneElement(overflow);\n overflow = /*#__PURE__*/React.createElement(ResizeObserver, {\n onResize: _ref => {\n let [entry] = _ref;\n this.setState({\n overflowWidth: entry.target.clientWidth,\n overflowStatus: 'calculating'\n });\n }\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-overflow`\n }, child));\n }\n }\n const inner = renderMode === RenderMode.SCROLL ? (() => {\n const list = [/*#__PURE__*/React.createElement(\"div\", {\n className: cls(wrapperClassName, `${prefixCls}-scroll-wrapper`),\n ref: ref => {\n this.scroller = ref;\n },\n style: Object.assign({}, wrapperStyle),\n key: `${prefixCls}-scroll-wrapper`\n }, visible.map(visibleItemRenderer).map(item => {\n const {\n forwardRef,\n key\n } = item;\n return /*#__PURE__*/React.cloneElement(item, {\n ref: node => this.mergeRef(forwardRef, node, key),\n 'data-scrollkey': `${key}`,\n key\n });\n }))];\n if (this.props.overflowRenderDirection === \"both\") {\n list.unshift(overflow[0]);\n list.push(overflow[1]);\n } else if (this.props.overflowRenderDirection === \"start\") {\n list.unshift(overflow[1]);\n list.unshift(overflow[0]);\n } else {\n list.push(overflow[0]);\n list.push(overflow[1]);\n }\n return list;\n })() : [collapseFrom === Boundary.START ? overflow : null, visible.map((item, idx) => {\n const {\n key\n } = item;\n const element = visibleItemRenderer(item, idx);\n const child = /*#__PURE__*/React.cloneElement(element);\n return /*#__PURE__*/React.createElement(ResizeObserver, {\n key: key !== null && key !== void 0 ? key : idx,\n onResize: _ref2 => {\n let [entry] = _ref2;\n return this.onItemResize(entry, item, idx);\n }\n }, /*#__PURE__*/React.createElement(\"div\", {\n key: key !== null && key !== void 0 ? key : idx,\n className: `${prefixCls}-item`\n }, child));\n }), collapseFrom === Boundary.END ? overflow : null];\n const list = /*#__PURE__*/React.createElement('div', {\n className: cls(`${prefixCls}`, className),\n style: Object.assign(Object.assign({}, style), renderMode === RenderMode.COLLAPSE ? {\n maxWidth: '100%',\n visibility: overflowStatus === \"calculating\" ? \"hidden\" : \"visible\"\n } : null)\n }, ...inner);\n return list;\n };\n this.onItemResize = (entry, item, idx) => {\n const key = this.getItemKey(item, idx);\n const width = this.itemSizeMap.get(key);\n if (!width) {\n this.itemSizeMap.set(key, entry.target.clientWidth);\n } else if (width !== entry.target.clientWidth) {\n // 某个item发生resize后,重新计算\n this.itemSizeMap.set(key, entry.target.clientWidth);\n this.setState({\n overflowStatus: 'calculating'\n });\n }\n const {\n maxCount\n } = this.state;\n // 已经按照最大值maxCount渲染完毕,触发真正的渲染\n // Already rendered maxCount items, trigger the real rendering\n if (this.itemSizeMap.size === maxCount) {\n this.setState({\n overflowStatus: 'calculating'\n });\n }\n };\n this.state = {\n direction: OverflowDirection.GROW,\n lastOverflowCount: 0,\n overflow: [],\n visible: [],\n containerWidth: 0,\n visibleState: new Map(),\n itemSizeMap: new Map(),\n overflowStatus: \"calculating\",\n pivot: -1,\n overflowWidth: 0,\n maxCount: 0\n };\n this.foundation = new OverflowListFoundation(this.adapter);\n this.previousWidths = new Map();\n this.itemRefs = {};\n this.itemSizeMap = new Map();\n }\n static getDerivedStateFromProps(props, prevState) {\n const {\n prevProps\n } = prevState;\n const newState = {};\n newState.prevProps = props;\n const needUpdate = name => {\n return !prevProps && name in props || prevProps && !_isEqual(prevProps[name], props[name]);\n };\n if (needUpdate('items') || needUpdate('style')) {\n // reset visible state if the above props change.\n newState.direction = OverflowDirection.GROW;\n newState.lastOverflowCount = 0;\n newState.maxCount = 0;\n if (props.renderMode === RenderMode.SCROLL) {\n newState.visible = props.items;\n newState.overflow = [];\n } else {\n let maxCount = props.items.length;\n if (Math.floor(prevState.containerWidth / numbers.MINIMUM_HTML_ELEMENT_WIDTH) !== 0) {\n maxCount = Math.min(maxCount, Math.floor(prevState.containerWidth / numbers.MINIMUM_HTML_ELEMENT_WIDTH));\n }\n const isCollapseFromStart = props.collapseFrom === Boundary.START;\n const visible = isCollapseFromStart ? copy(props.items).reverse().slice(0, maxCount) : props.items.slice(0, maxCount);\n const overflow = isCollapseFromStart ? copy(props.items).reverse().slice(maxCount) : props.items.slice(maxCount);\n newState.visible = visible;\n newState.overflow = overflow;\n newState.maxCount = maxCount;\n }\n newState.pivot = -1;\n newState.overflowStatus = \"calculating\";\n }\n return newState;\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n updateVisibleState: visibleState => {\n this.setState({\n visibleState\n }, () => {\n var _a, _b;\n (_b = (_a = this.props).onVisibleStateChange) === null || _b === void 0 ? void 0 : _b.call(_a, visibleState);\n });\n },\n updateStates: states => {\n this.setState(Object.assign({}, states));\n },\n notifyIntersect: res => {\n this.props.onIntersect && this.props.onIntersect(res);\n },\n getItemSizeMap: () => this.itemSizeMap\n });\n }\n componentDidUpdate(prevProps, prevState) {\n const prevItemsKeys = prevProps.items.map(item => item.key);\n const nowItemsKeys = this.props.items.map(item => item.key);\n // Determine whether to update by comparing key values\n if (!_isEqual(prevItemsKeys, nowItemsKeys)) {\n this.itemRefs = {};\n this.setState({\n visibleState: new Map()\n });\n }\n const {\n overflow,\n containerWidth,\n visible,\n overflowStatus\n } = this.state;\n if (this.isScrollMode() || overflowStatus !== \"calculating\") {\n return;\n }\n this.foundation.handleCollapseOverflow();\n }\n render() {\n const list = this.renderItemList();\n const {\n renderMode\n } = this.props;\n if (renderMode === RenderMode.SCROLL) {\n return /*#__PURE__*/React.createElement(IntersectionObserver, {\n onIntersect: this.reintersect,\n root: this.scroller,\n threshold: this.props.threshold,\n items: this.itemRefs\n }, list);\n }\n return /*#__PURE__*/React.createElement(ResizeObserver, {\n onResize: this.resize\n }, list);\n }\n}\nOverflowList.__SemiComponentName__ = \"OverflowList\";\nOverflowList.defaultProps = getDefaultPropsFromGlobalConfig(OverflowList.__SemiComponentName__, {\n collapseFrom: 'end',\n minVisibleItems: 0,\n overflowRenderer: () => null,\n renderMode: 'collapse',\n threshold: 0.75,\n visibleItemRenderer: () => null,\n onOverflow: () => null,\n overflowRenderDirection: \"both\"\n});\nOverflowList.propTypes = {\n // if render in scroll mode, key is required in items\n className: PropTypes.string,\n collapseFrom: PropTypes.oneOf(strings.BOUNDARY_SET),\n direction: PropTypes.oneOf(strings.POSITION_SET),\n items: PropTypes.array,\n minVisibleItems: PropTypes.number,\n onIntersect: PropTypes.func,\n onOverflow: PropTypes.func,\n overflowRenderer: PropTypes.func,\n renderMode: PropTypes.oneOf(strings.MODE_SET),\n style: PropTypes.object,\n threshold: PropTypes.number,\n visibleItemRenderer: PropTypes.func,\n wrapperClassName: PropTypes.string,\n wrapperStyle: PropTypes.object,\n collapseMask: PropTypes.object,\n overflowRenderDirection: PropTypes.string\n};\nexport default OverflowList;","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","// @flow\n\n// Animation frame based implementation of setTimeout.\n// Inspired by Joe Lambert, https://gist.github.com/joelambert/1002116#file-requesttimeout-js\n\nconst hasNativePerformanceNow =\n typeof performance === 'object' && typeof performance.now === 'function';\n\nconst now = hasNativePerformanceNow\n ? () => performance.now()\n : () => Date.now();\n\nexport type TimeoutID = {|\n id: AnimationFrameID,\n|};\n\nexport function cancelTimeout(timeoutID: TimeoutID) {\n cancelAnimationFrame(timeoutID.id);\n}\n\nexport function requestTimeout(callback: Function, delay: number): TimeoutID {\n const start = now();\n\n function tick() {\n if (now() - start >= delay) {\n callback.call(null);\n } else {\n timeoutID.id = requestAnimationFrame(tick);\n }\n }\n\n const timeoutID: TimeoutID = {\n id: requestAnimationFrame(tick),\n };\n\n return timeoutID;\n}\n","// @flow\n\nlet size: number = -1;\n\n// This utility copied from \"dom-helpers\" package.\nexport function getScrollbarSize(recalculate?: boolean = false): number {\n if (size === -1 || recalculate) {\n const div = document.createElement('div');\n const style = div.style;\n style.width = '50px';\n style.height = '50px';\n style.overflow = 'scroll';\n\n ((document.body: any): HTMLBodyElement).appendChild(div);\n\n size = div.offsetWidth - div.clientWidth;\n\n ((document.body: any): HTMLBodyElement).removeChild(div);\n }\n\n return size;\n}\n\nexport type RTLOffsetType =\n | 'negative'\n | 'positive-descending'\n | 'positive-ascending';\n\nlet cachedRTLResult: RTLOffsetType | null = null;\n\n// TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n// Chrome does not seem to adhere; its scrollLeft values are positive (measured relative to the left).\n// Safari's elastic bounce makes detecting this even more complicated wrt potential false positives.\n// The safest way to check this is to intentionally set a negative offset,\n// and then verify that the subsequent \"scroll\" event matches the negative offset.\n// If it does not match, then we can assume a non-standard RTL scroll implementation.\nexport function getRTLOffsetType(recalculate?: boolean = false): RTLOffsetType {\n if (cachedRTLResult === null || recalculate) {\n const outerDiv = document.createElement('div');\n const outerStyle = outerDiv.style;\n outerStyle.width = '50px';\n outerStyle.height = '50px';\n outerStyle.overflow = 'scroll';\n outerStyle.direction = 'rtl';\n\n const innerDiv = document.createElement('div');\n const innerStyle = innerDiv.style;\n innerStyle.width = '100px';\n innerStyle.height = '100px';\n\n outerDiv.appendChild(innerDiv);\n\n ((document.body: any): HTMLBodyElement).appendChild(outerDiv);\n\n if (outerDiv.scrollLeft > 0) {\n cachedRTLResult = 'positive-descending';\n } else {\n outerDiv.scrollLeft = 1;\n if (outerDiv.scrollLeft === 0) {\n cachedRTLResult = 'negative';\n } else {\n cachedRTLResult = 'positive-ascending';\n }\n }\n\n ((document.body: any): HTMLBodyElement).removeChild(outerDiv);\n\n return cachedRTLResult;\n }\n\n return cachedRTLResult;\n}\n","// @flow\n\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport { cancelTimeout, requestTimeout } from './timer';\nimport { getScrollbarSize, getRTLOffsetType } from './domHelpers';\n\nimport type { TimeoutID } from './timer';\n\ntype Direction = 'ltr' | 'rtl';\nexport type ScrollToAlign = 'auto' | 'smart' | 'center' | 'start' | 'end';\n\ntype itemSize = number | ((index: number) => number);\n\ntype RenderComponentProps = {|\n columnIndex: number,\n data: T,\n isScrolling?: boolean,\n rowIndex: number,\n style: Object,\n|};\nexport type RenderComponent = React$ComponentType<\n $Shape>\n>;\n\ntype ScrollDirection = 'forward' | 'backward';\n\ntype OnItemsRenderedCallback = ({\n overscanColumnStartIndex: number,\n overscanColumnStopIndex: number,\n overscanRowStartIndex: number,\n overscanRowStopIndex: number,\n visibleColumnStartIndex: number,\n visibleColumnStopIndex: number,\n visibleRowStartIndex: number,\n visibleRowStopIndex: number,\n}) => void;\ntype OnScrollCallback = ({\n horizontalScrollDirection: ScrollDirection,\n scrollLeft: number,\n scrollTop: number,\n scrollUpdateWasRequested: boolean,\n verticalScrollDirection: ScrollDirection,\n}) => void;\n\ntype ScrollEvent = SyntheticEvent;\ntype ItemStyleCache = { [key: string]: Object };\n\ntype OuterProps = {|\n children: React$Node,\n className: string | void,\n onScroll: ScrollEvent => void,\n style: {\n [string]: mixed,\n },\n|};\n\ntype InnerProps = {|\n children: React$Node,\n style: {\n [string]: mixed,\n },\n|};\n\nexport type Props = {|\n children: RenderComponent,\n className?: string,\n columnCount: number,\n columnWidth: itemSize,\n direction: Direction,\n height: number,\n initialScrollLeft?: number,\n initialScrollTop?: number,\n innerRef?: any,\n innerElementType?: string | React$AbstractComponent,\n innerTagName?: string, // deprecated\n itemData: T,\n itemKey?: (params: {|\n columnIndex: number,\n data: T,\n rowIndex: number,\n |}) => any,\n onItemsRendered?: OnItemsRenderedCallback,\n onScroll?: OnScrollCallback,\n outerRef?: any,\n outerElementType?: string | React$AbstractComponent,\n outerTagName?: string, // deprecated\n overscanColumnCount?: number,\n overscanColumnsCount?: number, // deprecated\n overscanCount?: number, // deprecated\n overscanRowCount?: number,\n overscanRowsCount?: number, // deprecated\n rowCount: number,\n rowHeight: itemSize,\n style?: Object,\n useIsScrolling: boolean,\n width: number,\n|};\n\ntype State = {|\n instance: any,\n isScrolling: boolean,\n horizontalScrollDirection: ScrollDirection,\n scrollLeft: number,\n scrollTop: number,\n scrollUpdateWasRequested: boolean,\n verticalScrollDirection: ScrollDirection,\n|};\n\ntype getItemOffset = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype getItemSize = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype getEstimatedTotalSize = (props: Props, instanceProps: any) => number;\ntype GetOffsetForItemAndAlignment = (\n props: Props,\n index: number,\n align: ScrollToAlign,\n scrollOffset: number,\n instanceProps: any,\n scrollbarSize: number\n) => number;\ntype GetStartIndexForOffset = (\n props: Props,\n offset: number,\n instanceProps: any\n) => number;\ntype GetStopIndexForStartIndex = (\n props: Props,\n startIndex: number,\n scrollOffset: number,\n instanceProps: any\n) => number;\ntype InitInstanceProps = (props: Props, instance: any) => any;\ntype ValidateProps = (props: Props) => void;\n\nconst IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nconst defaultItemKey = ({ columnIndex, data, rowIndex }) =>\n `${rowIndex}:${columnIndex}`;\n\n// In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\nlet devWarningsOverscanCount = null;\nlet devWarningsOverscanRowsColumnsCount = null;\nlet devWarningsTagName = null;\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsOverscanCount = new WeakSet();\n devWarningsOverscanRowsColumnsCount = new WeakSet();\n devWarningsTagName = new WeakSet();\n }\n}\n\nexport default function createGridComponent({\n getColumnOffset,\n getColumnStartIndexForOffset,\n getColumnStopIndexForStartIndex,\n getColumnWidth,\n getEstimatedTotalHeight,\n getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment,\n getOffsetForRowAndAlignment,\n getRowHeight,\n getRowOffset,\n getRowStartIndexForOffset,\n getRowStopIndexForStartIndex,\n initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange,\n validateProps,\n}: {|\n getColumnOffset: getItemOffset,\n getColumnStartIndexForOffset: GetStartIndexForOffset,\n getColumnStopIndexForStartIndex: GetStopIndexForStartIndex,\n getColumnWidth: getItemSize,\n getEstimatedTotalHeight: getEstimatedTotalSize,\n getEstimatedTotalWidth: getEstimatedTotalSize,\n getOffsetForColumnAndAlignment: GetOffsetForItemAndAlignment,\n getOffsetForRowAndAlignment: GetOffsetForItemAndAlignment,\n getRowOffset: getItemOffset,\n getRowHeight: getItemSize,\n getRowStartIndexForOffset: GetStartIndexForOffset,\n getRowStopIndexForStartIndex: GetStopIndexForStartIndex,\n initInstanceProps: InitInstanceProps,\n shouldResetStyleCacheOnItemSizeChange: boolean,\n validateProps: ValidateProps,\n|}) {\n return class Grid extends PureComponent, State> {\n _instanceProps: any = initInstanceProps(this.props, this);\n _resetIsScrollingTimeoutId: TimeoutID | null = null;\n _outerRef: ?HTMLDivElement;\n\n static defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n useIsScrolling: false,\n };\n\n state: State = {\n instance: this,\n isScrolling: false,\n horizontalScrollDirection: 'forward',\n scrollLeft:\n typeof this.props.initialScrollLeft === 'number'\n ? this.props.initialScrollLeft\n : 0,\n scrollTop:\n typeof this.props.initialScrollTop === 'number'\n ? this.props.initialScrollTop\n : 0,\n scrollUpdateWasRequested: false,\n verticalScrollDirection: 'forward',\n };\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n constructor(props: Props) {\n super(props);\n }\n\n static getDerivedStateFromProps(\n nextProps: Props,\n prevState: State\n ): $Shape | null {\n validateSharedProps(nextProps, prevState);\n validateProps(nextProps);\n return null;\n }\n\n scrollTo({\n scrollLeft,\n scrollTop,\n }: {\n scrollLeft: number,\n scrollTop: number,\n }): void {\n if (scrollLeft !== undefined) {\n scrollLeft = Math.max(0, scrollLeft);\n }\n if (scrollTop !== undefined) {\n scrollTop = Math.max(0, scrollTop);\n }\n\n this.setState(prevState => {\n if (scrollLeft === undefined) {\n scrollLeft = prevState.scrollLeft;\n }\n if (scrollTop === undefined) {\n scrollTop = prevState.scrollTop;\n }\n\n if (\n prevState.scrollLeft === scrollLeft &&\n prevState.scrollTop === scrollTop\n ) {\n return null;\n }\n\n return {\n horizontalScrollDirection:\n prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollUpdateWasRequested: true,\n verticalScrollDirection:\n prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n };\n }, this._resetIsScrollingDebounced);\n }\n\n scrollToItem({\n align = 'auto',\n columnIndex,\n rowIndex,\n }: {\n align: ScrollToAlign,\n columnIndex?: number,\n rowIndex?: number,\n }): void {\n const { columnCount, height, rowCount, width } = this.props;\n const { scrollLeft, scrollTop } = this.state;\n const scrollbarSize = getScrollbarSize();\n\n if (columnIndex !== undefined) {\n columnIndex = Math.max(0, Math.min(columnIndex, columnCount - 1));\n }\n if (rowIndex !== undefined) {\n rowIndex = Math.max(0, Math.min(rowIndex, rowCount - 1));\n }\n\n const estimatedTotalHeight = getEstimatedTotalHeight(\n this.props,\n this._instanceProps\n );\n const estimatedTotalWidth = getEstimatedTotalWidth(\n this.props,\n this._instanceProps\n );\n\n // The scrollbar size should be considered when scrolling an item into view,\n // to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n const horizontalScrollbarSize =\n estimatedTotalWidth > width ? scrollbarSize : 0;\n const verticalScrollbarSize =\n estimatedTotalHeight > height ? scrollbarSize : 0;\n\n this.scrollTo({\n scrollLeft:\n columnIndex !== undefined\n ? getOffsetForColumnAndAlignment(\n this.props,\n columnIndex,\n align,\n scrollLeft,\n this._instanceProps,\n verticalScrollbarSize\n )\n : scrollLeft,\n scrollTop:\n rowIndex !== undefined\n ? getOffsetForRowAndAlignment(\n this.props,\n rowIndex,\n align,\n scrollTop,\n this._instanceProps,\n horizontalScrollbarSize\n )\n : scrollTop,\n });\n }\n\n componentDidMount() {\n const { initialScrollLeft, initialScrollTop } = this.props;\n\n if (this._outerRef != null) {\n const outerRef = ((this._outerRef: any): HTMLElement);\n if (typeof initialScrollLeft === 'number') {\n outerRef.scrollLeft = initialScrollLeft;\n }\n if (typeof initialScrollTop === 'number') {\n outerRef.scrollTop = initialScrollTop;\n }\n }\n\n this._callPropsCallbacks();\n }\n\n componentDidUpdate() {\n const { direction } = this.props;\n const { scrollLeft, scrollTop, scrollUpdateWasRequested } = this.state;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n const outerRef = ((this._outerRef: any): HTMLElement);\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollLeft;\n break;\n case 'positive-ascending':\n outerRef.scrollLeft = scrollLeft;\n break;\n default:\n const { clientWidth, scrollWidth } = outerRef;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } else {\n outerRef.scrollLeft = Math.max(0, scrollLeft);\n }\n\n outerRef.scrollTop = Math.max(0, scrollTop);\n }\n\n this._callPropsCallbacks();\n }\n\n componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n }\n\n render() {\n const {\n children,\n className,\n columnCount,\n direction,\n height,\n innerRef,\n innerElementType,\n innerTagName,\n itemData,\n itemKey = defaultItemKey,\n outerElementType,\n outerTagName,\n rowCount,\n style,\n useIsScrolling,\n width,\n } = this.props;\n const { isScrolling } = this.state;\n\n const [\n columnStartIndex,\n columnStopIndex,\n ] = this._getHorizontalRangeToRender();\n const [rowStartIndex, rowStopIndex] = this._getVerticalRangeToRender();\n\n const items = [];\n if (columnCount > 0 && rowCount) {\n for (\n let rowIndex = rowStartIndex;\n rowIndex <= rowStopIndex;\n rowIndex++\n ) {\n for (\n let columnIndex = columnStartIndex;\n columnIndex <= columnStopIndex;\n columnIndex++\n ) {\n items.push(\n createElement(children, {\n columnIndex,\n data: itemData,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n key: itemKey({ columnIndex, data: itemData, rowIndex }),\n rowIndex,\n style: this._getItemStyle(rowIndex, columnIndex),\n })\n );\n }\n }\n }\n\n // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n const estimatedTotalHeight = getEstimatedTotalHeight(\n this.props,\n this._instanceProps\n );\n const estimatedTotalWidth = getEstimatedTotalWidth(\n this.props,\n this._instanceProps\n );\n\n return createElement(\n outerElementType || outerTagName || 'div',\n {\n className,\n onScroll: this._onScroll,\n ref: this._outerRefSetter,\n style: {\n position: 'relative',\n height,\n width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction,\n ...style,\n },\n },\n createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: estimatedTotalHeight,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: estimatedTotalWidth,\n },\n })\n );\n }\n\n _callOnItemsRendered: (\n overscanColumnStartIndex: number,\n overscanColumnStopIndex: number,\n overscanRowStartIndex: number,\n overscanRowStopIndex: number,\n visibleColumnStartIndex: number,\n visibleColumnStopIndex: number,\n visibleRowStartIndex: number,\n visibleRowStopIndex: number\n ) => void;\n _callOnItemsRendered = memoizeOne(\n (\n overscanColumnStartIndex: number,\n overscanColumnStopIndex: number,\n overscanRowStartIndex: number,\n overscanRowStopIndex: number,\n visibleColumnStartIndex: number,\n visibleColumnStopIndex: number,\n visibleRowStartIndex: number,\n visibleRowStopIndex: number\n ) =>\n ((this.props.onItemsRendered: any): OnItemsRenderedCallback)({\n overscanColumnStartIndex,\n overscanColumnStopIndex,\n overscanRowStartIndex,\n overscanRowStopIndex,\n visibleColumnStartIndex,\n visibleColumnStopIndex,\n visibleRowStartIndex,\n visibleRowStopIndex,\n })\n );\n\n _callOnScroll: (\n scrollLeft: number,\n scrollTop: number,\n horizontalScrollDirection: ScrollDirection,\n verticalScrollDirection: ScrollDirection,\n scrollUpdateWasRequested: boolean\n ) => void;\n _callOnScroll = memoizeOne(\n (\n scrollLeft: number,\n scrollTop: number,\n horizontalScrollDirection: ScrollDirection,\n verticalScrollDirection: ScrollDirection,\n scrollUpdateWasRequested: boolean\n ) =>\n ((this.props.onScroll: any): OnScrollCallback)({\n horizontalScrollDirection,\n scrollLeft,\n scrollTop,\n verticalScrollDirection,\n scrollUpdateWasRequested,\n })\n );\n\n _callPropsCallbacks() {\n const { columnCount, onItemsRendered, onScroll, rowCount } = this.props;\n\n if (typeof onItemsRendered === 'function') {\n if (columnCount > 0 && rowCount > 0) {\n const [\n overscanColumnStartIndex,\n overscanColumnStopIndex,\n visibleColumnStartIndex,\n visibleColumnStopIndex,\n ] = this._getHorizontalRangeToRender();\n const [\n overscanRowStartIndex,\n overscanRowStopIndex,\n visibleRowStartIndex,\n visibleRowStopIndex,\n ] = this._getVerticalRangeToRender();\n this._callOnItemsRendered(\n overscanColumnStartIndex,\n overscanColumnStopIndex,\n overscanRowStartIndex,\n overscanRowStopIndex,\n visibleColumnStartIndex,\n visibleColumnStopIndex,\n visibleRowStartIndex,\n visibleRowStopIndex\n );\n }\n }\n\n if (typeof onScroll === 'function') {\n const {\n horizontalScrollDirection,\n scrollLeft,\n scrollTop,\n scrollUpdateWasRequested,\n verticalScrollDirection,\n } = this.state;\n this._callOnScroll(\n scrollLeft,\n scrollTop,\n horizontalScrollDirection,\n verticalScrollDirection,\n scrollUpdateWasRequested\n );\n }\n }\n\n // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n _getItemStyle: (rowIndex: number, columnIndex: number) => Object;\n _getItemStyle = (rowIndex: number, columnIndex: number): Object => {\n const { columnWidth, direction, rowHeight } = this.props;\n\n const itemStyleCache = this._getItemStyleCache(\n shouldResetStyleCacheOnItemSizeChange && columnWidth,\n shouldResetStyleCacheOnItemSizeChange && direction,\n shouldResetStyleCacheOnItemSizeChange && rowHeight\n );\n\n const key = `${rowIndex}:${columnIndex}`;\n\n let style;\n if (itemStyleCache.hasOwnProperty(key)) {\n style = itemStyleCache[key];\n } else {\n const offset = getColumnOffset(\n this.props,\n columnIndex,\n this._instanceProps\n );\n const isRtl = direction === 'rtl';\n itemStyleCache[key] = style = {\n position: 'absolute',\n left: isRtl ? undefined : offset,\n right: isRtl ? offset : undefined,\n top: getRowOffset(this.props, rowIndex, this._instanceProps),\n height: getRowHeight(this.props, rowIndex, this._instanceProps),\n width: getColumnWidth(this.props, columnIndex, this._instanceProps),\n };\n }\n\n return style;\n };\n\n _getItemStyleCache: (_: any, __: any, ___: any) => ItemStyleCache;\n _getItemStyleCache = memoizeOne((_: any, __: any, ___: any) => ({}));\n\n _getHorizontalRangeToRender(): [number, number, number, number] {\n const {\n columnCount,\n overscanColumnCount,\n overscanColumnsCount,\n overscanCount,\n rowCount,\n } = this.props;\n const { horizontalScrollDirection, isScrolling, scrollLeft } = this.state;\n\n const overscanCountResolved: number =\n overscanColumnCount || overscanColumnsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n const startIndex = getColumnStartIndexForOffset(\n this.props,\n scrollLeft,\n this._instanceProps\n );\n const stopIndex = getColumnStopIndexForStartIndex(\n this.props,\n startIndex,\n scrollLeft,\n this._instanceProps\n );\n\n // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n const overscanBackward =\n !isScrolling || horizontalScrollDirection === 'backward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n const overscanForward =\n !isScrolling || horizontalScrollDirection === 'forward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n\n return [\n Math.max(0, startIndex - overscanBackward),\n Math.max(0, Math.min(columnCount - 1, stopIndex + overscanForward)),\n startIndex,\n stopIndex,\n ];\n }\n\n _getVerticalRangeToRender(): [number, number, number, number] {\n const {\n columnCount,\n overscanCount,\n overscanRowCount,\n overscanRowsCount,\n rowCount,\n } = this.props;\n const { isScrolling, verticalScrollDirection, scrollTop } = this.state;\n\n const overscanCountResolved: number =\n overscanRowCount || overscanRowsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n const startIndex = getRowStartIndexForOffset(\n this.props,\n scrollTop,\n this._instanceProps\n );\n const stopIndex = getRowStopIndexForStartIndex(\n this.props,\n startIndex,\n scrollTop,\n this._instanceProps\n );\n\n // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n const overscanBackward =\n !isScrolling || verticalScrollDirection === 'backward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n const overscanForward =\n !isScrolling || verticalScrollDirection === 'forward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n\n return [\n Math.max(0, startIndex - overscanBackward),\n Math.max(0, Math.min(rowCount - 1, stopIndex + overscanForward)),\n startIndex,\n stopIndex,\n ];\n }\n\n _onScroll = (event: ScrollEvent): void => {\n const {\n clientHeight,\n clientWidth,\n scrollLeft,\n scrollTop,\n scrollHeight,\n scrollWidth,\n } = event.currentTarget;\n this.setState(prevState => {\n if (\n prevState.scrollLeft === scrollLeft &&\n prevState.scrollTop === scrollTop\n ) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n const { direction } = this.props;\n\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n let calculatedScrollLeft = scrollLeft;\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n calculatedScrollLeft = -scrollLeft;\n break;\n case 'positive-descending':\n calculatedScrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n calculatedScrollLeft = Math.max(\n 0,\n Math.min(calculatedScrollLeft, scrollWidth - clientWidth)\n );\n const calculatedScrollTop = Math.max(\n 0,\n Math.min(scrollTop, scrollHeight - clientHeight)\n );\n\n return {\n isScrolling: true,\n horizontalScrollDirection:\n prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: calculatedScrollLeft,\n scrollTop: calculatedScrollTop,\n verticalScrollDirection:\n prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n scrollUpdateWasRequested: false,\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _outerRefSetter = (ref: any): void => {\n const { outerRef } = this.props;\n\n this._outerRef = ((ref: any): HTMLDivElement);\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (\n outerRef != null &&\n typeof outerRef === 'object' &&\n outerRef.hasOwnProperty('current')\n ) {\n outerRef.current = ref;\n }\n };\n\n _resetIsScrollingDebounced = () => {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n\n this._resetIsScrollingTimeoutId = requestTimeout(\n this._resetIsScrolling,\n IS_SCROLLING_DEBOUNCE_INTERVAL\n );\n };\n\n _resetIsScrolling = () => {\n this._resetIsScrollingTimeoutId = null;\n\n this.setState({ isScrolling: false }, () => {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n this._getItemStyleCache(-1);\n });\n };\n };\n}\n\nconst validateSharedProps = (\n {\n children,\n direction,\n height,\n innerTagName,\n outerTagName,\n overscanColumnsCount,\n overscanCount,\n overscanRowsCount,\n width,\n }: Props,\n { instance }: State\n): void => {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof overscanCount === 'number') {\n if (devWarningsOverscanCount && !devWarningsOverscanCount.has(instance)) {\n devWarningsOverscanCount.add(instance);\n console.warn(\n 'The overscanCount prop has been deprecated. ' +\n 'Please use the overscanColumnCount and overscanRowCount props instead.'\n );\n }\n }\n\n if (\n typeof overscanColumnsCount === 'number' ||\n typeof overscanRowsCount === 'number'\n ) {\n if (\n devWarningsOverscanRowsColumnsCount &&\n !devWarningsOverscanRowsColumnsCount.has(instance)\n ) {\n devWarningsOverscanRowsColumnsCount.add(instance);\n console.warn(\n 'The overscanColumnsCount and overscanRowsCount props have been deprecated. ' +\n 'Please use the overscanColumnCount and overscanRowCount props instead.'\n );\n }\n }\n\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n devWarningsTagName.add(instance);\n console.warn(\n 'The innerTagName and outerTagName props have been deprecated. ' +\n 'Please use the innerElementType and outerElementType props instead.'\n );\n }\n }\n\n if (children == null) {\n throw Error(\n 'An invalid \"children\" prop has been specified. ' +\n 'Value should be a React component. ' +\n `\"${children === null ? 'null' : typeof children}\" was specified.`\n );\n }\n\n switch (direction) {\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n default:\n throw Error(\n 'An invalid \"direction\" prop has been specified. ' +\n 'Value should be either \"ltr\" or \"rtl\". ' +\n `\"${direction}\" was specified.`\n );\n }\n\n if (typeof width !== 'number') {\n throw Error(\n 'An invalid \"width\" prop has been specified. ' +\n 'Grids must specify a number for width. ' +\n `\"${width === null ? 'null' : typeof width}\" was specified.`\n );\n }\n\n if (typeof height !== 'number') {\n throw Error(\n 'An invalid \"height\" prop has been specified. ' +\n 'Grids must specify a number for height. ' +\n `\"${height === null ? 'null' : typeof height}\" was specified.`\n );\n }\n }\n};\n","// @flow\n\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport { cancelTimeout, requestTimeout } from './timer';\nimport { getScrollbarSize, getRTLOffsetType } from './domHelpers';\n\nimport type { TimeoutID } from './timer';\n\nexport type ScrollToAlign = 'auto' | 'smart' | 'center' | 'start' | 'end';\n\ntype itemSize = number | ((index: number) => number);\n// TODO Deprecate directions \"horizontal\" and \"vertical\"\ntype Direction = 'ltr' | 'rtl' | 'horizontal' | 'vertical';\ntype Layout = 'horizontal' | 'vertical';\n\ntype RenderComponentProps = {|\n data: T,\n index: number,\n isScrolling?: boolean,\n style: Object,\n|};\ntype RenderComponent = React$ComponentType<$Shape>>;\n\ntype ScrollDirection = 'forward' | 'backward';\n\ntype onItemsRenderedCallback = ({\n overscanStartIndex: number,\n overscanStopIndex: number,\n visibleStartIndex: number,\n visibleStopIndex: number,\n}) => void;\ntype onScrollCallback = ({\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean,\n}) => void;\n\ntype ScrollEvent = SyntheticEvent;\ntype ItemStyleCache = { [index: number]: Object };\n\ntype OuterProps = {|\n children: React$Node,\n className: string | void,\n onScroll: ScrollEvent => void,\n style: {\n [string]: mixed,\n },\n|};\n\ntype InnerProps = {|\n children: React$Node,\n style: {\n [string]: mixed,\n },\n|};\n\nexport type Props = {|\n children: RenderComponent,\n className?: string,\n direction: Direction,\n height: number | string,\n initialScrollOffset?: number,\n innerRef?: any,\n innerElementType?: string | React$AbstractComponent,\n innerTagName?: string, // deprecated\n itemCount: number,\n itemData: T,\n itemKey?: (index: number, data: T) => any,\n itemSize: itemSize,\n layout: Layout,\n onItemsRendered?: onItemsRenderedCallback,\n onScroll?: onScrollCallback,\n outerRef?: any,\n outerElementType?: string | React$AbstractComponent,\n outerTagName?: string, // deprecated\n overscanCount: number,\n style?: Object,\n useIsScrolling: boolean,\n width: number | string,\n|};\n\ntype State = {|\n instance: any,\n isScrolling: boolean,\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean,\n|};\n\ntype GetItemOffset = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype GetItemSize = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype GetEstimatedTotalSize = (props: Props, instanceProps: any) => number;\ntype GetOffsetForIndexAndAlignment = (\n props: Props,\n index: number,\n align: ScrollToAlign,\n scrollOffset: number,\n instanceProps: any\n) => number;\ntype GetStartIndexForOffset = (\n props: Props,\n offset: number,\n instanceProps: any\n) => number;\ntype GetStopIndexForStartIndex = (\n props: Props,\n startIndex: number,\n scrollOffset: number,\n instanceProps: any\n) => number;\ntype InitInstanceProps = (props: Props, instance: any) => any;\ntype ValidateProps = (props: Props) => void;\n\nconst IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nconst defaultItemKey = (index: number, data: any) => index;\n\n// In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\nlet devWarningsDirection = null;\nlet devWarningsTagName = null;\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsDirection = new WeakSet();\n devWarningsTagName = new WeakSet();\n }\n}\n\nexport default function createListComponent({\n getItemOffset,\n getEstimatedTotalSize,\n getItemSize,\n getOffsetForIndexAndAlignment,\n getStartIndexForOffset,\n getStopIndexForStartIndex,\n initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange,\n validateProps,\n}: {|\n getItemOffset: GetItemOffset,\n getEstimatedTotalSize: GetEstimatedTotalSize,\n getItemSize: GetItemSize,\n getOffsetForIndexAndAlignment: GetOffsetForIndexAndAlignment,\n getStartIndexForOffset: GetStartIndexForOffset,\n getStopIndexForStartIndex: GetStopIndexForStartIndex,\n initInstanceProps: InitInstanceProps,\n shouldResetStyleCacheOnItemSizeChange: boolean,\n validateProps: ValidateProps,\n|}) {\n return class List extends PureComponent, State> {\n _instanceProps: any = initInstanceProps(this.props, this);\n _outerRef: ?HTMLDivElement;\n _resetIsScrollingTimeoutId: TimeoutID | null = null;\n\n static defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n layout: 'vertical',\n overscanCount: 2,\n useIsScrolling: false,\n };\n\n state: State = {\n instance: this,\n isScrolling: false,\n scrollDirection: 'forward',\n scrollOffset:\n typeof this.props.initialScrollOffset === 'number'\n ? this.props.initialScrollOffset\n : 0,\n scrollUpdateWasRequested: false,\n };\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n constructor(props: Props) {\n super(props);\n }\n\n static getDerivedStateFromProps(\n nextProps: Props,\n prevState: State\n ): $Shape | null {\n validateSharedProps(nextProps, prevState);\n validateProps(nextProps);\n return null;\n }\n\n scrollTo(scrollOffset: number): void {\n scrollOffset = Math.max(0, scrollOffset);\n\n this.setState(prevState => {\n if (prevState.scrollOffset === scrollOffset) {\n return null;\n }\n return {\n scrollDirection:\n prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: true,\n };\n }, this._resetIsScrollingDebounced);\n }\n\n scrollToItem(index: number, align: ScrollToAlign = 'auto'): void {\n const { itemCount, layout } = this.props;\n const { scrollOffset } = this.state;\n\n index = Math.max(0, Math.min(index, itemCount - 1));\n\n // The scrollbar size should be considered when scrolling an item into view, to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n // This is an edge case for lists; normally they only scroll in the dominant direction.\n let scrollbarSize = 0;\n if (this._outerRef) {\n const outerRef = ((this._outerRef: any): HTMLElement);\n if (layout === 'vertical') {\n scrollbarSize =\n outerRef.scrollWidth > outerRef.clientWidth\n ? getScrollbarSize()\n : 0;\n } else {\n scrollbarSize =\n outerRef.scrollHeight > outerRef.clientHeight\n ? getScrollbarSize()\n : 0;\n }\n }\n\n this.scrollTo(\n getOffsetForIndexAndAlignment(\n this.props,\n index,\n align,\n scrollOffset,\n this._instanceProps,\n scrollbarSize\n )\n );\n }\n\n componentDidMount() {\n const { direction, initialScrollOffset, layout } = this.props;\n\n if (typeof initialScrollOffset === 'number' && this._outerRef != null) {\n const outerRef = ((this._outerRef: any): HTMLElement);\n // TODO Deprecate direction \"horizontal\"\n if (direction === 'horizontal' || layout === 'horizontal') {\n outerRef.scrollLeft = initialScrollOffset;\n } else {\n outerRef.scrollTop = initialScrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n }\n\n componentDidUpdate() {\n const { direction, layout } = this.props;\n const { scrollOffset, scrollUpdateWasRequested } = this.state;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n const outerRef = ((this._outerRef: any): HTMLElement);\n\n // TODO Deprecate direction \"horizontal\"\n if (direction === 'horizontal' || layout === 'horizontal') {\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollOffset;\n break;\n case 'positive-ascending':\n outerRef.scrollLeft = scrollOffset;\n break;\n default:\n const { clientWidth, scrollWidth } = outerRef;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollOffset;\n break;\n }\n } else {\n outerRef.scrollLeft = scrollOffset;\n }\n } else {\n outerRef.scrollTop = scrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n }\n\n componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n }\n\n render() {\n const {\n children,\n className,\n direction,\n height,\n innerRef,\n innerElementType,\n innerTagName,\n itemCount,\n itemData,\n itemKey = defaultItemKey,\n layout,\n outerElementType,\n outerTagName,\n style,\n useIsScrolling,\n width,\n } = this.props;\n const { isScrolling } = this.state;\n\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal =\n direction === 'horizontal' || layout === 'horizontal';\n\n const onScroll = isHorizontal\n ? this._onScrollHorizontal\n : this._onScrollVertical;\n\n const [startIndex, stopIndex] = this._getRangeToRender();\n\n const items = [];\n if (itemCount > 0) {\n for (let index = startIndex; index <= stopIndex; index++) {\n items.push(\n createElement(children, {\n data: itemData,\n key: itemKey(index, itemData),\n index,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n style: this._getItemStyle(index),\n })\n );\n }\n }\n\n // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n const estimatedTotalSize = getEstimatedTotalSize(\n this.props,\n this._instanceProps\n );\n\n return createElement(\n outerElementType || outerTagName || 'div',\n {\n className,\n onScroll,\n ref: this._outerRefSetter,\n style: {\n position: 'relative',\n height,\n width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction,\n ...style,\n },\n },\n createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: isHorizontal ? '100%' : estimatedTotalSize,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: isHorizontal ? estimatedTotalSize : '100%',\n },\n })\n );\n }\n\n _callOnItemsRendered: (\n overscanStartIndex: number,\n overscanStopIndex: number,\n visibleStartIndex: number,\n visibleStopIndex: number\n ) => void;\n _callOnItemsRendered = memoizeOne(\n (\n overscanStartIndex: number,\n overscanStopIndex: number,\n visibleStartIndex: number,\n visibleStopIndex: number\n ) =>\n ((this.props.onItemsRendered: any): onItemsRenderedCallback)({\n overscanStartIndex,\n overscanStopIndex,\n visibleStartIndex,\n visibleStopIndex,\n })\n );\n\n _callOnScroll: (\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean\n ) => void;\n _callOnScroll = memoizeOne(\n (\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean\n ) =>\n ((this.props.onScroll: any): onScrollCallback)({\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested,\n })\n );\n\n _callPropsCallbacks() {\n if (typeof this.props.onItemsRendered === 'function') {\n const { itemCount } = this.props;\n if (itemCount > 0) {\n const [\n overscanStartIndex,\n overscanStopIndex,\n visibleStartIndex,\n visibleStopIndex,\n ] = this._getRangeToRender();\n this._callOnItemsRendered(\n overscanStartIndex,\n overscanStopIndex,\n visibleStartIndex,\n visibleStopIndex\n );\n }\n }\n\n if (typeof this.props.onScroll === 'function') {\n const {\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested,\n } = this.state;\n this._callOnScroll(\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested\n );\n }\n }\n\n // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n _getItemStyle: (index: number) => Object;\n _getItemStyle = (index: number): Object => {\n const { direction, itemSize, layout } = this.props;\n\n const itemStyleCache = this._getItemStyleCache(\n shouldResetStyleCacheOnItemSizeChange && itemSize,\n shouldResetStyleCacheOnItemSizeChange && layout,\n shouldResetStyleCacheOnItemSizeChange && direction\n );\n\n let style;\n if (itemStyleCache.hasOwnProperty(index)) {\n style = itemStyleCache[index];\n } else {\n const offset = getItemOffset(this.props, index, this._instanceProps);\n const size = getItemSize(this.props, index, this._instanceProps);\n\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal =\n direction === 'horizontal' || layout === 'horizontal';\n\n const isRtl = direction === 'rtl';\n const offsetHorizontal = isHorizontal ? offset : 0;\n itemStyleCache[index] = style = {\n position: 'absolute',\n left: isRtl ? undefined : offsetHorizontal,\n right: isRtl ? offsetHorizontal : undefined,\n top: !isHorizontal ? offset : 0,\n height: !isHorizontal ? size : '100%',\n width: isHorizontal ? size : '100%',\n };\n }\n\n return style;\n };\n\n _getItemStyleCache: (_: any, __: any, ___: any) => ItemStyleCache;\n _getItemStyleCache = memoizeOne((_: any, __: any, ___: any) => ({}));\n\n _getRangeToRender(): [number, number, number, number] {\n const { itemCount, overscanCount } = this.props;\n const { isScrolling, scrollDirection, scrollOffset } = this.state;\n\n if (itemCount === 0) {\n return [0, 0, 0, 0];\n }\n\n const startIndex = getStartIndexForOffset(\n this.props,\n scrollOffset,\n this._instanceProps\n );\n const stopIndex = getStopIndexForStartIndex(\n this.props,\n startIndex,\n scrollOffset,\n this._instanceProps\n );\n\n // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n const overscanBackward =\n !isScrolling || scrollDirection === 'backward'\n ? Math.max(1, overscanCount)\n : 1;\n const overscanForward =\n !isScrolling || scrollDirection === 'forward'\n ? Math.max(1, overscanCount)\n : 1;\n\n return [\n Math.max(0, startIndex - overscanBackward),\n Math.max(0, Math.min(itemCount - 1, stopIndex + overscanForward)),\n startIndex,\n stopIndex,\n ];\n }\n\n _onScrollHorizontal = (event: ScrollEvent): void => {\n const { clientWidth, scrollLeft, scrollWidth } = event.currentTarget;\n this.setState(prevState => {\n if (prevState.scrollOffset === scrollLeft) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n const { direction } = this.props;\n\n let scrollOffset = scrollLeft;\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n switch (getRTLOffsetType()) {\n case 'negative':\n scrollOffset = -scrollLeft;\n break;\n case 'positive-descending':\n scrollOffset = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n scrollOffset = Math.max(\n 0,\n Math.min(scrollOffset, scrollWidth - clientWidth)\n );\n\n return {\n isScrolling: true,\n scrollDirection:\n prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset,\n scrollUpdateWasRequested: false,\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _onScrollVertical = (event: ScrollEvent): void => {\n const { clientHeight, scrollHeight, scrollTop } = event.currentTarget;\n this.setState(prevState => {\n if (prevState.scrollOffset === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n const scrollOffset = Math.max(\n 0,\n Math.min(scrollTop, scrollHeight - clientHeight)\n );\n\n return {\n isScrolling: true,\n scrollDirection:\n prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset,\n scrollUpdateWasRequested: false,\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _outerRefSetter = (ref: any): void => {\n const { outerRef } = this.props;\n\n this._outerRef = ((ref: any): HTMLDivElement);\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (\n outerRef != null &&\n typeof outerRef === 'object' &&\n outerRef.hasOwnProperty('current')\n ) {\n outerRef.current = ref;\n }\n };\n\n _resetIsScrollingDebounced = () => {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n\n this._resetIsScrollingTimeoutId = requestTimeout(\n this._resetIsScrolling,\n IS_SCROLLING_DEBOUNCE_INTERVAL\n );\n };\n\n _resetIsScrolling = () => {\n this._resetIsScrollingTimeoutId = null;\n\n this.setState({ isScrolling: false }, () => {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n this._getItemStyleCache(-1, null);\n });\n };\n };\n}\n\n// NOTE: I considered further wrapping individual items with a pure ListItem component.\n// This would avoid ever calling the render function for the same index more than once,\n// But it would also add the overhead of a lot of components/fibers.\n// I assume people already do this (render function returning a class component),\n// So my doing it would just unnecessarily double the wrappers.\n\nconst validateSharedProps = (\n {\n children,\n direction,\n height,\n layout,\n innerTagName,\n outerTagName,\n width,\n }: Props,\n { instance }: State\n): void => {\n if (process.env.NODE_ENV !== 'production') {\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n devWarningsTagName.add(instance);\n console.warn(\n 'The innerTagName and outerTagName props have been deprecated. ' +\n 'Please use the innerElementType and outerElementType props instead.'\n );\n }\n }\n\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n\n switch (direction) {\n case 'horizontal':\n case 'vertical':\n if (devWarningsDirection && !devWarningsDirection.has(instance)) {\n devWarningsDirection.add(instance);\n console.warn(\n 'The direction prop should be either \"ltr\" (default) or \"rtl\". ' +\n 'Please use the layout prop to specify \"vertical\" (default) or \"horizontal\" orientation.'\n );\n }\n break;\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n default:\n throw Error(\n 'An invalid \"direction\" prop has been specified. ' +\n 'Value should be either \"ltr\" or \"rtl\". ' +\n `\"${direction}\" was specified.`\n );\n }\n\n switch (layout) {\n case 'horizontal':\n case 'vertical':\n // Valid values\n break;\n default:\n throw Error(\n 'An invalid \"layout\" prop has been specified. ' +\n 'Value should be either \"horizontal\" or \"vertical\". ' +\n `\"${layout}\" was specified.`\n );\n }\n\n if (children == null) {\n throw Error(\n 'An invalid \"children\" prop has been specified. ' +\n 'Value should be a React component. ' +\n `\"${children === null ? 'null' : typeof children}\" was specified.`\n );\n }\n\n if (isHorizontal && typeof width !== 'number') {\n throw Error(\n 'An invalid \"width\" prop has been specified. ' +\n 'Horizontal lists must specify a number for width. ' +\n `\"${width === null ? 'null' : typeof width}\" was specified.`\n );\n } else if (!isHorizontal && typeof height !== 'number') {\n throw Error(\n 'An invalid \"height\" prop has been specified. ' +\n 'Vertical lists must specify a number for height. ' +\n `\"${height === null ? 'null' : typeof height}\" was specified.`\n );\n }\n }\n};\n","// @flow\n\nimport createListComponent from './createListComponent';\n\nimport type { Props, ScrollToAlign } from './createListComponent';\n\nconst DEFAULT_ESTIMATED_ITEM_SIZE = 50;\n\ntype VariableSizeProps = {|\n estimatedItemSize: number,\n ...Props,\n|};\n\ntype itemSizeGetter = (index: number) => number;\n\ntype ItemMetadata = {|\n offset: number,\n size: number,\n|};\ntype InstanceProps = {|\n itemMetadataMap: { [index: number]: ItemMetadata },\n estimatedItemSize: number,\n lastMeasuredIndex: number,\n|};\n\nconst getItemMetadata = (\n props: Props,\n index: number,\n instanceProps: InstanceProps\n): ItemMetadata => {\n const { itemSize } = ((props: any): VariableSizeProps);\n const { itemMetadataMap, lastMeasuredIndex } = instanceProps;\n\n if (index > lastMeasuredIndex) {\n let offset = 0;\n if (lastMeasuredIndex >= 0) {\n const itemMetadata = itemMetadataMap[lastMeasuredIndex];\n offset = itemMetadata.offset + itemMetadata.size;\n }\n\n for (let i = lastMeasuredIndex + 1; i <= index; i++) {\n let size = ((itemSize: any): itemSizeGetter)(i);\n\n itemMetadataMap[i] = {\n offset,\n size,\n };\n\n offset += size;\n }\n\n instanceProps.lastMeasuredIndex = index;\n }\n\n return itemMetadataMap[index];\n};\n\nconst findNearestItem = (\n props: Props,\n instanceProps: InstanceProps,\n offset: number\n) => {\n const { itemMetadataMap, lastMeasuredIndex } = instanceProps;\n\n const lastMeasuredItemOffset =\n lastMeasuredIndex > 0 ? itemMetadataMap[lastMeasuredIndex].offset : 0;\n\n if (lastMeasuredItemOffset >= offset) {\n // If we've already measured items within this range just use a binary search as it's faster.\n return findNearestItemBinarySearch(\n props,\n instanceProps,\n lastMeasuredIndex,\n 0,\n offset\n );\n } else {\n // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n // The exponential search avoids pre-computing sizes for the full set of items as a binary search would.\n // The overall complexity for this approach is O(log n).\n return findNearestItemExponentialSearch(\n props,\n instanceProps,\n Math.max(0, lastMeasuredIndex),\n offset\n );\n }\n};\n\nconst findNearestItemBinarySearch = (\n props: Props,\n instanceProps: InstanceProps,\n high: number,\n low: number,\n offset: number\n): number => {\n while (low <= high) {\n const middle = low + Math.floor((high - low) / 2);\n const currentOffset = getItemMetadata(props, middle, instanceProps).offset;\n\n if (currentOffset === offset) {\n return middle;\n } else if (currentOffset < offset) {\n low = middle + 1;\n } else if (currentOffset > offset) {\n high = middle - 1;\n }\n }\n\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\n\nconst findNearestItemExponentialSearch = (\n props: Props,\n instanceProps: InstanceProps,\n index: number,\n offset: number\n): number => {\n const { itemCount } = props;\n let interval = 1;\n\n while (\n index < itemCount &&\n getItemMetadata(props, index, instanceProps).offset < offset\n ) {\n index += interval;\n interval *= 2;\n }\n\n return findNearestItemBinarySearch(\n props,\n instanceProps,\n Math.min(index, itemCount - 1),\n Math.floor(index / 2),\n offset\n );\n};\n\nconst getEstimatedTotalSize = (\n { itemCount }: Props,\n { itemMetadataMap, estimatedItemSize, lastMeasuredIndex }: InstanceProps\n) => {\n let totalSizeOfMeasuredItems = 0;\n\n // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n if (lastMeasuredIndex >= itemCount) {\n lastMeasuredIndex = itemCount - 1;\n }\n\n if (lastMeasuredIndex >= 0) {\n const itemMetadata = itemMetadataMap[lastMeasuredIndex];\n totalSizeOfMeasuredItems = itemMetadata.offset + itemMetadata.size;\n }\n\n const numUnmeasuredItems = itemCount - lastMeasuredIndex - 1;\n const totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedItemSize;\n\n return totalSizeOfMeasuredItems + totalSizeOfUnmeasuredItems;\n};\n\nconst VariableSizeList = createListComponent({\n getItemOffset: (\n props: Props,\n index: number,\n instanceProps: InstanceProps\n ): number => getItemMetadata(props, index, instanceProps).offset,\n\n getItemSize: (\n props: Props,\n index: number,\n instanceProps: InstanceProps\n ): number => instanceProps.itemMetadataMap[index].size,\n\n getEstimatedTotalSize,\n\n getOffsetForIndexAndAlignment: (\n props: Props,\n index: number,\n align: ScrollToAlign,\n scrollOffset: number,\n instanceProps: InstanceProps,\n scrollbarSize: number\n ): number => {\n const { direction, height, layout, width } = props;\n\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n const size = (((isHorizontal ? width : height): any): number);\n const itemMetadata = getItemMetadata(props, index, instanceProps);\n\n // Get estimated total size after ItemMetadata is computed,\n // To ensure it reflects actual measurements instead of just estimates.\n const estimatedTotalSize = getEstimatedTotalSize(props, instanceProps);\n\n const maxOffset = Math.max(\n 0,\n Math.min(estimatedTotalSize - size, itemMetadata.offset)\n );\n const minOffset = Math.max(\n 0,\n itemMetadata.offset - size + itemMetadata.size + scrollbarSize\n );\n\n if (align === 'smart') {\n if (\n scrollOffset >= minOffset - size &&\n scrollOffset <= maxOffset + size\n ) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n case 'end':\n return minOffset;\n case 'center':\n return Math.round(minOffset + (maxOffset - minOffset) / 2);\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n }\n },\n\n getStartIndexForOffset: (\n props: Props,\n offset: number,\n instanceProps: InstanceProps\n ): number => findNearestItem(props, instanceProps, offset),\n\n getStopIndexForStartIndex: (\n props: Props,\n startIndex: number,\n scrollOffset: number,\n instanceProps: InstanceProps\n ): number => {\n const { direction, height, itemCount, layout, width } = props;\n\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n const size = (((isHorizontal ? width : height): any): number);\n const itemMetadata = getItemMetadata(props, startIndex, instanceProps);\n const maxOffset = scrollOffset + size;\n\n let offset = itemMetadata.offset + itemMetadata.size;\n let stopIndex = startIndex;\n\n while (stopIndex < itemCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata(props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n\n initInstanceProps(props: Props, instance: any): InstanceProps {\n const { estimatedItemSize } = ((props: any): VariableSizeProps);\n\n const instanceProps = {\n itemMetadataMap: {},\n estimatedItemSize: estimatedItemSize || DEFAULT_ESTIMATED_ITEM_SIZE,\n lastMeasuredIndex: -1,\n };\n\n instance.resetAfterIndex = (\n index: number,\n shouldForceUpdate?: boolean = true\n ) => {\n instanceProps.lastMeasuredIndex = Math.min(\n instanceProps.lastMeasuredIndex,\n index - 1\n );\n\n // We could potentially optimize further by only evicting styles after this index,\n // But since styles are only cached while scrolling is in progress-\n // It seems an unnecessary optimization.\n // It's unlikely that resetAfterIndex() will be called while a user is scrolling.\n instance._getItemStyleCache(-1);\n\n if (shouldForceUpdate) {\n instance.forceUpdate();\n }\n };\n\n return instanceProps;\n },\n\n shouldResetStyleCacheOnItemSizeChange: false,\n\n validateProps: ({ itemSize }: Props): void => {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof itemSize !== 'function') {\n throw Error(\n 'An invalid \"itemSize\" prop has been specified. ' +\n 'Value should be a function. ' +\n `\"${itemSize === null ? 'null' : typeof itemSize}\" was specified.`\n );\n }\n }\n },\n});\n\nexport default VariableSizeList;\n","// @flow\n\nimport createListComponent from './createListComponent';\n\nimport type { Props, ScrollToAlign } from './createListComponent';\n\ntype InstanceProps = any;\n\nconst FixedSizeList = createListComponent({\n getItemOffset: ({ itemSize }: Props, index: number): number =>\n index * ((itemSize: any): number),\n\n getItemSize: ({ itemSize }: Props, index: number): number =>\n ((itemSize: any): number),\n\n getEstimatedTotalSize: ({ itemCount, itemSize }: Props) =>\n ((itemSize: any): number) * itemCount,\n\n getOffsetForIndexAndAlignment: (\n { direction, height, itemCount, itemSize, layout, width }: Props,\n index: number,\n align: ScrollToAlign,\n scrollOffset: number,\n instanceProps: InstanceProps,\n scrollbarSize: number\n ): number => {\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n const size = (((isHorizontal ? width : height): any): number);\n const lastItemOffset = Math.max(\n 0,\n itemCount * ((itemSize: any): number) - size\n );\n const maxOffset = Math.min(\n lastItemOffset,\n index * ((itemSize: any): number)\n );\n const minOffset = Math.max(\n 0,\n index * ((itemSize: any): number) -\n size +\n ((itemSize: any): number) +\n scrollbarSize\n );\n\n if (align === 'smart') {\n if (\n scrollOffset >= minOffset - size &&\n scrollOffset <= maxOffset + size\n ) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n case 'end':\n return minOffset;\n case 'center': {\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n const middleOffset = Math.round(\n minOffset + (maxOffset - minOffset) / 2\n );\n if (middleOffset < Math.ceil(size / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastItemOffset + Math.floor(size / 2)) {\n return lastItemOffset; // near the end\n } else {\n return middleOffset;\n }\n }\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n }\n },\n\n getStartIndexForOffset: (\n { itemCount, itemSize }: Props,\n offset: number\n ): number =>\n Math.max(\n 0,\n Math.min(itemCount - 1, Math.floor(offset / ((itemSize: any): number)))\n ),\n\n getStopIndexForStartIndex: (\n { direction, height, itemCount, itemSize, layout, width }: Props,\n startIndex: number,\n scrollOffset: number\n ): number => {\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n const offset = startIndex * ((itemSize: any): number);\n const size = (((isHorizontal ? width : height): any): number);\n const numVisibleItems = Math.ceil(\n (size + scrollOffset - offset) / ((itemSize: any): number)\n );\n return Math.max(\n 0,\n Math.min(\n itemCount - 1,\n startIndex + numVisibleItems - 1 // -1 is because stop index is inclusive\n )\n );\n },\n\n initInstanceProps(props: Props): any {\n // Noop\n },\n\n shouldResetStyleCacheOnItemSizeChange: true,\n\n validateProps: ({ itemSize }: Props): void => {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof itemSize !== 'number') {\n throw Error(\n 'An invalid \"itemSize\" prop has been specified. ' +\n 'Value should be a number. ' +\n `\"${itemSize === null ? 'null' : typeof itemSize}\" was specified.`\n );\n }\n }\n },\n});\n\nexport default FixedSizeList;\n","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport warning from '@douyinfe/semi-foundation/lib/es/utils/warning';\nconst generateOption = (child, parent, index, newKey) => {\n const childProps = child.props;\n if (!child || !childProps) {\n return null;\n }\n const option = Object.assign(Object.assign({\n value: childProps.value,\n // Dropdown menu rendering priority label value, children, value in turn downgrade\n label: childProps.label || childProps.children || childProps.value,\n _show: true,\n _selected: false,\n _scrollIndex: index\n }, childProps), {\n _parentGroup: parent\n });\n // Props are collected from ReactNode, after React.Children.toArray\n // no need to determine whether the key exists in child\n // Even if the user does not explicitly declare it, React will always generate a key.\n option._keyInJsx = newKey || child.key;\n return option;\n};\nconst getOptionsFromGroup = selectChildren => {\n let optionGroups = [];\n let options = [];\n const emptyGroup = {\n label: '',\n children: [],\n _show: false\n };\n // avoid null\n let childNodes = React.Children.toArray(selectChildren);\n childNodes = childNodes.filter(childNode => childNode && childNode.props);\n let type = '';\n let optionIndex = -1;\n childNodes.forEach(child => {\n if (child.type.isSelectOption) {\n type = 'option';\n optionIndex++;\n const option = generateOption(child, undefined, optionIndex);\n emptyGroup.children.push(option);\n options.push(option);\n } else if (child.type.isSelectOptionGroup) {\n type = 'group';\n // Avoid saving children (reactNode) by... removing other props from the group except children, causing performance problems\n let _a = child.props,\n {\n children\n } = _a,\n restGroupProps = __rest(_a, [\"children\"]);\n let originKeys = [];\n if (Array.isArray(children)) {\n // if group has children > 1\n originKeys = children.map(item => item.key);\n } else {\n originKeys.push(children.key);\n }\n children = React.Children.toArray(children);\n const childrenOption = children.map((option, index) => {\n let newKey = option.key;\n if (originKeys[index] === null) {\n newKey = child.key + '' + option.key; // if option in group and didn't set key, concat parent key to avoid conflict (default generate key just like .0, .1)\n }\n optionIndex++;\n return generateOption(option, restGroupProps, optionIndex, newKey);\n });\n const group = Object.assign(Object.assign({}, child.props), {\n children: childrenOption,\n key: child.key\n });\n optionGroups.push(group);\n options = options.concat(childrenOption);\n } else {\n warning(true, '[Semi Select] The children of `Select` should be `Select.Option` or `Select.OptionGroup`');\n }\n });\n if (type === 'option') {\n optionGroups = [emptyGroup];\n }\n return {\n optionGroups,\n options\n };\n};\nexport { generateOption, getOptionsFromGroup };","const VirtualRow = _ref => {\n let {\n index,\n data,\n style\n } = _ref;\n const {\n visibleOptions,\n renderOption\n } = data;\n const option = visibleOptions[index];\n return renderOption(option, index, style);\n};\nexport default VirtualRow;","import _isString from \"lodash/isString\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/select/constants';\nimport LocaleConsumer from '../locale/localeConsumer';\nimport { IconTick } from '@douyinfe/semi-icons';\nimport Highlight from '../highlight';\nimport getDataAttr from '@douyinfe/semi-foundation/lib/es/utils/getDataAttr';\nclass Option extends PureComponent {\n onClick(_a, event) {\n var {\n value,\n label,\n children\n } = _a,\n rest = __rest(_a, [\"value\", \"label\", \"children\"]);\n const {\n props\n } = this;\n const isDisabled = props.disabled;\n if (!isDisabled) {\n props.onSelect(Object.assign(Object.assign({}, rest), {\n value,\n label: label || children\n }), event);\n }\n }\n renderOptionContent(_ref) {\n let {\n config,\n children,\n inputValue,\n prefixCls\n } = _ref;\n if (_isString(children) && inputValue) {\n return /*#__PURE__*/React.createElement(Highlight, {\n searchWords: config.searchWords,\n sourceString: config.sourceString,\n highlightClassName: config.highlightClassName\n });\n }\n return children;\n }\n render() {\n const _a = this.props,\n {\n children,\n disabled,\n value,\n selected,\n label,\n empty,\n emptyContent,\n onSelect,\n focused,\n showTick,\n className,\n style,\n onMouseEnter,\n prefixCls,\n renderOptionItem,\n inputValue,\n semiOptionId\n } = _a,\n rest = __rest(_a, [\"children\", \"disabled\", \"value\", \"selected\", \"label\", \"empty\", \"emptyContent\", \"onSelect\", \"focused\", \"showTick\", \"className\", \"style\", \"onMouseEnter\", \"prefixCls\", \"renderOptionItem\", \"inputValue\", \"semiOptionId\"]);\n const optionClassName = classNames(prefixCls, {\n [`${prefixCls}-disabled`]: disabled,\n [`${prefixCls}-selected`]: selected,\n [`${prefixCls}-focused`]: focused,\n [`${prefixCls}-empty`]: empty,\n [className]: className\n });\n const selectedIconClassName = classNames([`${prefixCls}-icon`]);\n if (empty) {\n if (emptyContent === null) {\n return null;\n }\n return /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Select\"\n }, locale => (/*#__PURE__*/React.createElement(\"div\", {\n className: optionClassName,\n \"x-semi-prop\": \"emptyContent\"\n }, emptyContent || locale.emptyText)));\n }\n // Since there are empty, locale and other logic, the custom renderOptionItem is directly converged to the internal option instead of being placed in Select/index\n if (typeof renderOptionItem === 'function') {\n const customRenderClassName = classNames(className, {\n [`${prefixCls}-custom`]: true,\n [`${prefixCls}-custom-selected`]: selected\n });\n return renderOptionItem(Object.assign({\n disabled,\n focused,\n selected,\n style,\n label,\n value,\n inputValue,\n onMouseEnter: e => onMouseEnter(e),\n onClick: e => this.onClick(Object.assign({\n value,\n label,\n children\n }, rest), e),\n className: customRenderClassName\n }, rest));\n }\n const config = {\n searchWords: [inputValue],\n sourceString: children,\n highlightClassName: `${prefixCls}-keyword`\n };\n return (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/interactive-supports-focus,jsx-a11y/click-events-have-key-events\n React.createElement(\"div\", Object.assign({\n className: optionClassName,\n onClick: e => {\n this.onClick(Object.assign({\n value,\n label,\n children\n }, rest), e);\n },\n onMouseEnter: e => onMouseEnter && onMouseEnter(e),\n role: \"option\",\n id: semiOptionId,\n \"aria-selected\": selected ? \"true\" : \"false\",\n \"aria-disabled\": disabled ? \"true\" : \"false\",\n style: style\n }, getDataAttr(rest)), showTick ? (/*#__PURE__*/React.createElement(\"div\", {\n className: selectedIconClassName\n }, /*#__PURE__*/React.createElement(IconTick, null))) : null, _isString(children) ? /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-text`\n }, this.renderOptionContent({\n children,\n config,\n inputValue,\n prefixCls\n })) : children)\n );\n }\n}\nOption.isSelectOption = true;\nOption.propTypes = {\n children: PropTypes.node,\n disabled: PropTypes.bool,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n selected: PropTypes.bool,\n label: PropTypes.node,\n empty: PropTypes.bool,\n emptyContent: PropTypes.node,\n onSelect: PropTypes.func,\n focused: PropTypes.bool,\n showTick: PropTypes.bool,\n className: PropTypes.string,\n style: PropTypes.object,\n onMouseEnter: PropTypes.func,\n prefixCls: PropTypes.string,\n renderOptionItem: PropTypes.func,\n inputValue: PropTypes.string\n};\nOption.defaultProps = {\n prefixCls: cssClasses.PREFIX_OPTION\n};\nexport default Option;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport cls from 'classnames';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/select/constants';\nimport BaseComponent from '../_base/baseComponent';\nconst prefixCls = cssClasses.PREFIX_GROUP;\nclass OptionGroup extends BaseComponent {\n render() {\n const _a = this.props,\n {\n label,\n className,\n style\n } = _a,\n rest = __rest(_a, [\"label\", \"className\", \"style\"]);\n const groupCls = cls(className, {\n [prefixCls]: true\n });\n if (!label && typeof label !== 'number') {\n return null;\n }\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n className: groupCls,\n style: style\n }, this.getDataAttr(rest)), label);\n }\n}\nOptionGroup.isSelectOptionGroup = true;\nOptionGroup.propTypes = {\n children: PropTypes.oneOfType([PropTypes.array, PropTypes.node]),\n label: PropTypes.node,\n className: PropTypes.string,\n style: PropTypes.object\n};\nexport default OptionGroup;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M10.5 2a8.5 8.5 0 1 0 4.86 15.48l4.08 4.08a1.5 1.5 0 1 0 2.12-2.12l-4.08-4.08A8.5 8.5 0 0 0 10.5 2ZM5 10.5a5.5 5.5 0 1 1 11 0 5.5 5.5 0 0 1-11 0Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'search');\nexport default IconComponent;","import _isFunction from \"lodash/isFunction\";\nimport _isNumber from \"lodash/isNumber\";\nimport _get from \"lodash/get\";\nimport _noop from \"lodash/noop\";\nimport _isString from \"lodash/isString\";\nimport _isEqual from \"lodash/isEqual\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { Fragment } from 'react';\nimport ReactDOM from 'react-dom';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport ConfigContext from '../configProvider/context';\nimport SelectFoundation from '@douyinfe/semi-foundation/lib/es/select/foundation';\nimport { cssClasses, strings, numbers } from '@douyinfe/semi-foundation/lib/es/select/constants';\nimport BaseComponent from '../_base/baseComponent';\nimport Tag from '../tag/index';\nimport TagGroup from '../tag/group';\nimport OverflowList from '../overflowList/index';\nimport Space from '../space/index';\nimport Text from '../typography/text';\nimport LocaleConsumer from '../locale/localeConsumer';\nimport Popover from '../popover/index';\nimport { numbers as popoverNumbers } from '@douyinfe/semi-foundation/lib/es/popover/constants';\nimport Event from '@douyinfe/semi-foundation/lib/es/utils/Event';\nimport { FixedSizeList as List } from 'react-window';\nimport { getOptionsFromGroup } from './utils';\nimport VirtualRow from './virtualRow';\nimport Input from '../input/index';\nimport Option from './option';\nimport OptionGroup from './optionGroup';\nimport Spin from '../spin';\nimport Trigger from '../trigger';\nimport { IconChevronDown, IconClear, IconSearch } from '@douyinfe/semi-icons';\nimport { isSemiIcon, getFocusableElements, getActiveElement, getDefaultPropsFromGlobalConfig } from '../_utils';\nimport { getUuidShort } from '@douyinfe/semi-foundation/lib/es/utils/uuid';\nimport '@douyinfe/semi-foundation/lib/es/select/select.css';\nconst prefixcls = cssClasses.PREFIX;\nconst key = 0;\n// Notes: Use the label of the option as the identifier, that is, the option in Select, the value is allowed to be the same, but the label must be unique\nclass Select extends BaseComponent {\n constructor(props) {\n super(props);\n this.setOptionContainerEl = node => this.optionContainerEl = {\n current: node\n };\n this.handleInputChange = (value, event) => this.foundation.handleInputChange(value, event);\n this.getTagItem = (item, i, renderSelectedItem) => {\n const {\n size,\n disabled: selectDisabled\n } = this.props;\n const label = item[0];\n const {\n value\n } = item[1];\n const disabled = item[1].disabled || selectDisabled;\n const onClose = (tagContent, e) => {\n if (e && typeof e.preventDefault === 'function') {\n e.preventDefault(); // make sure that tag will not hidden immediately in controlled mode\n }\n this.foundation.removeTag({\n label,\n value\n });\n };\n const {\n content,\n isRenderInTag\n } = renderSelectedItem(item[1], {\n index: i,\n disabled,\n onClose\n });\n const basic = {\n disabled,\n closable: !disabled,\n onClose\n };\n if (isRenderInTag) {\n return /*#__PURE__*/React.createElement(Tag, Object.assign({}, basic, {\n color: \"white\",\n size: size || 'large',\n key: value,\n tabIndex: -1\n }), content);\n } else {\n return /*#__PURE__*/React.createElement(Fragment, {\n key: value\n }, content);\n }\n };\n this.state = {\n isOpen: false,\n isFocus: false,\n options: [],\n selections: new Map(),\n dropdownMinWidth: null,\n optionKey: key,\n inputValue: '',\n showInput: false,\n focusIndex: props.defaultActiveFirstOption ? 0 : -1,\n keyboardEventSet: {},\n optionGroups: [],\n isHovering: false,\n isFocusInContainer: false,\n isFullTags: false,\n overflowItemCount: 0\n };\n /* Generate random string */\n this.selectOptionListID = '';\n this.selectID = '';\n this.virtualizeListRef = /*#__PURE__*/React.createRef();\n this.inputRef = /*#__PURE__*/React.createRef();\n this.dropdownInputRef = /*#__PURE__*/React.createRef(); // only work when searchPosition = 'dropdown'\n this.triggerRef = /*#__PURE__*/React.createRef();\n this.optionsRef = /*#__PURE__*/React.createRef();\n this.optionContainerEl = /*#__PURE__*/React.createRef();\n this.clickOutsideHandler = null;\n this.onSelect = this.onSelect.bind(this);\n this.onClear = this.onClear.bind(this);\n this.onMouseEnter = this.onMouseEnter.bind(this);\n this.onMouseLeave = this.onMouseLeave.bind(this);\n this.renderOption = this.renderOption.bind(this);\n this.onKeyPress = this.onKeyPress.bind(this);\n this.eventManager = new Event();\n this.foundation = new SelectFoundation(this.adapter);\n }\n get adapter() {\n var _this = this;\n const keyboardAdapter = {\n registerKeyDown: cb => {\n const keyboardEventSet = {\n onKeyDown: cb\n };\n this.setState({\n keyboardEventSet\n });\n },\n unregisterKeyDown: () => {\n this.setState({\n keyboardEventSet: {}\n });\n },\n updateFocusIndex: focusIndex => {\n this.setState({\n focusIndex\n });\n },\n scrollToFocusOption: () => {}\n };\n const filterAdapter = {\n updateInputValue: value => {\n this.setState({\n inputValue: value\n });\n },\n toggleInputShow: (showInput, cb) => {\n this.setState({\n showInput\n }, () => {\n cb();\n });\n },\n focusInput: () => {\n const {\n preventScroll\n } = this.props;\n if (this.inputRef && this.inputRef.current) {\n this.inputRef.current.focus({\n preventScroll\n });\n }\n },\n focusDropdownInput: () => {\n const {\n preventScroll\n } = this.props;\n if (this.dropdownInputRef && this.dropdownInputRef.current) {\n this.dropdownInputRef.current.focus({\n preventScroll\n });\n }\n }\n };\n const multipleAdapter = {\n notifyMaxLimit: option => this.props.onExceed(option),\n getMaxLimit: () => this.props.max,\n registerClickOutsideHandler: cb => {\n const clickOutsideHandler = e => {\n const optionInstance = this.optionsRef && this.optionsRef.current;\n const triggerDom = this.triggerRef && this.triggerRef.current;\n const optionsDom = ReactDOM.findDOMNode(optionInstance);\n const target = e.target;\n const path = e.composedPath && e.composedPath() || [target];\n if (!(optionsDom && optionsDom.contains(target)) && !(triggerDom && triggerDom.contains(target)) && !(path.includes(triggerDom) || path.includes(optionsDom))) {\n cb(e);\n }\n };\n this.clickOutsideHandler = clickOutsideHandler;\n document.addEventListener('mousedown', clickOutsideHandler, false);\n },\n unregisterClickOutsideHandler: () => {\n if (this.clickOutsideHandler) {\n document.removeEventListener('mousedown', this.clickOutsideHandler, false);\n this.clickOutsideHandler = null;\n }\n },\n rePositionDropdown: () => {\n let {\n optionKey\n } = this.state;\n optionKey = optionKey + 1;\n this.setState({\n optionKey\n });\n },\n notifyDeselect: (value, option) => {\n delete option._parentGroup;\n this.props.onDeselect(value, option);\n }\n };\n return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, super.adapter), keyboardAdapter), filterAdapter), multipleAdapter), {\n on: (eventName, eventCallback) => this.eventManager.on(eventName, eventCallback),\n off: eventName => this.eventManager.off(eventName),\n once: (eventName, eventCallback) => this.eventManager.once(eventName, eventCallback),\n emit: eventName => this.eventManager.emit(eventName),\n // Collect all subitems, each item is visible by default when collected, and is not selected\n getOptionsFromChildren: function () {\n let children = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _this.props.children;\n let optionGroups = [];\n let options = [];\n const {\n optionList\n } = _this.props;\n if (optionList && optionList.length) {\n options = optionList.map((itemOpt, index) => Object.assign({\n _show: true,\n _selected: false,\n _scrollIndex: index\n }, itemOpt));\n optionGroups[0] = {\n children: options,\n label: ''\n };\n } else {\n const result = getOptionsFromGroup(children);\n optionGroups = result.optionGroups;\n options = result.options;\n }\n _this.setState({\n optionGroups\n });\n return options;\n },\n updateOptions: options => {\n this.setState({\n options\n });\n },\n openMenu: cb => {\n this.setState({\n isOpen: true\n }, () => {\n cb === null || cb === void 0 ? void 0 : cb();\n });\n },\n closeMenu: () => {\n this.setState({\n isOpen: false\n });\n },\n getTriggerWidth: () => {\n const el = this.triggerRef.current;\n return el && el.getBoundingClientRect().width;\n },\n setOptionWrapperWidth: width => {\n this.setState({\n dropdownMinWidth: width\n });\n },\n updateSelection: selections => {\n this.setState({\n selections\n });\n },\n // clone Map, important!!!, prevent unexpected modify on state\n getSelections: () => new Map(this.state.selections),\n notifyChange: value => {\n this.props.onChange(value);\n },\n notifySelect: (value, option) => {\n delete option._parentGroup;\n this.props.onSelect(value, option);\n },\n notifyDropdownVisibleChange: visible => {\n this.props.onDropdownVisibleChange(visible);\n },\n notifySearch: (input, event) => {\n this.props.onSearch(input, event);\n },\n notifyCreate: input => {\n this.props.onCreate(input);\n },\n notifyMouseEnter: e => {\n this.props.onMouseEnter(e);\n },\n notifyMouseLeave: e => {\n this.props.onMouseLeave(e);\n },\n notifyFocus: event => {\n this.props.onFocus(event);\n },\n notifyBlur: event => {\n this.props.onBlur(event);\n },\n notifyClear: () => {\n this.props.onClear();\n },\n notifyListScroll: e => {\n this.props.onListScroll(e);\n },\n updateHovering: isHovering => {\n this.setState({\n isHovering\n });\n },\n updateFocusState: isFocus => {\n this.setState({\n isFocus\n });\n },\n updateOverflowItemCount: overflowItemCount => {\n this.setState({\n overflowItemCount\n });\n },\n focusTrigger: () => {\n try {\n const {\n preventScroll\n } = this.props;\n const el = this.triggerRef.current;\n el.focus({\n preventScroll\n });\n } catch (error) {}\n },\n getContainer: () => {\n return this.optionContainerEl && this.optionContainerEl.current;\n },\n getFocusableElements: node => {\n return getFocusableElements(node);\n },\n getActiveElement: () => {\n return getActiveElement();\n },\n setIsFocusInContainer: isFocusInContainer => {\n this.setState({\n isFocusInContainer\n });\n },\n getIsFocusInContainer: () => {\n return this.state.isFocusInContainer;\n },\n updateScrollTop: index => {\n let optionClassName;\n if ('renderOptionItem' in this.props) {\n optionClassName = `.${prefixcls}-option-custom-selected`;\n if (index !== undefined) {\n optionClassName = `.${prefixcls}-option-custom:nth-child(${index + 1})`;\n }\n } else {\n optionClassName = `.${prefixcls}-option-selected`;\n if (index !== undefined) {\n optionClassName = `.${prefixcls}-option:nth-child(${index + 1})`;\n }\n }\n let destNode = document.querySelector(`#${prefixcls}-${this.selectOptionListID} ${optionClassName}`);\n if (Array.isArray(destNode)) {\n destNode = destNode[0];\n }\n if (destNode) {\n /**\n * Scroll the first selected item into view.\n * The reason why ScrollIntoView is not used here is that it may cause page to move.\n */\n const destParent = destNode.parentNode;\n destParent.scrollTop = destNode.offsetTop - destParent.offsetTop - destParent.clientHeight / 2 + destNode.clientHeight / 2;\n }\n }\n });\n }\n componentDidMount() {\n this.foundation.init();\n this.selectOptionListID = getUuidShort();\n this.selectID = this.props.id || getUuidShort();\n }\n componentWillUnmount() {\n this.foundation.destroy();\n }\n componentDidUpdate(prevProps, prevState) {\n const prevChildrenKeys = React.Children.toArray(prevProps.children).map(child => child.key);\n const nowChildrenKeys = React.Children.toArray(this.props.children).map(child => child.key);\n let isOptionsChanged = false;\n if (!_isEqual(prevChildrenKeys, nowChildrenKeys) || !_isEqual(prevProps.optionList, this.props.optionList)) {\n isOptionsChanged = true;\n this.foundation.handleOptionListChange();\n }\n // Add isOptionChanged: There may be cases where the value is unchanged, but the optionList is updated. At this time, the label corresponding to the value may change, and the selected item needs to be updated\n if (!_isEqual(this.props.value, prevProps.value) || isOptionsChanged) {\n if ('value' in this.props) {\n this.foundation.handleValueChange(this.props.value);\n } else {\n this.foundation.handleOptionListChangeHadDefaultValue();\n }\n }\n }\n renderTriggerInput() {\n const {\n size,\n multiple,\n disabled,\n inputProps,\n filter\n } = this.props;\n const inputPropsCls = _get(inputProps, 'className');\n const inputcls = cls(`${prefixcls}-input`, {\n [`${prefixcls}-input-single`]: !multiple,\n [`${prefixcls}-input-multiple`]: multiple\n }, inputPropsCls);\n const {\n inputValue,\n focusIndex\n } = this.state;\n const selectInputProps = Object.assign({\n value: inputValue,\n disabled,\n className: inputcls,\n onChange: this.handleInputChange\n }, inputProps);\n let style = {};\n // Multiple choice mode\n if (multiple) {\n style = {\n width: inputValue ? `${inputValue.length * 16}px` : '2px'\n };\n selectInputProps.style = style;\n }\n return /*#__PURE__*/React.createElement(Input, Object.assign({\n ref: this.inputRef,\n size: size,\n \"aria-activedescendant\": focusIndex !== -1 ? `${this.selectID}-option-${focusIndex}` : '',\n onFocus: e => {\n // if multiple and filter, when use tab key to let select get focus\n // need to manual update state isFocus to let the focus style take effect\n if (multiple && Boolean(filter)) {\n this.setState({\n isFocus: true\n });\n }\n // prevent event bubbling which will fire trigger onFocus event\n e.stopPropagation();\n // e.nativeEvent.stopImmediatePropagation();\n },\n onBlur: e => this.foundation.handleInputBlur(e)\n }, selectInputProps));\n }\n renderDropdownInput() {\n const {\n size,\n multiple,\n disabled,\n inputProps,\n filter,\n searchPosition,\n searchPlaceholder\n } = this.props;\n const {\n inputValue,\n focusIndex\n } = this.state;\n const wrapperCls = cls(`${prefixcls}-dropdown-search-wrapper`, {});\n const inputPropsCls = _get(inputProps, 'className');\n const inputCls = cls(`${prefixcls}-dropdown-input`, {\n [`${prefixcls}-dropdown-input-single`]: !multiple,\n [`${prefixcls}-dropdown-input-multiple`]: multiple\n }, inputPropsCls);\n const selectInputProps = Object.assign(Object.assign({\n value: inputValue,\n disabled,\n className: inputCls,\n onChange: this.handleInputChange,\n placeholder: searchPlaceholder,\n showClear: true\n }, inputProps), {\n /**\n * When searchPosition is trigger, the keyboard events are bound to the outer trigger div, so there is no need to listen in input.\n * When searchPosition is dropdown, the popup and the outer trigger div are not parent- child relationships,\n * and bubbles cannot occur, so onKeydown needs to be listened in input.\n * */\n onKeyDown: e => this.foundation._handleKeyDown(e)\n });\n return /*#__PURE__*/React.createElement(\"div\", {\n className: wrapperCls\n }, /*#__PURE__*/React.createElement(Input, Object.assign({\n ref: this.dropdownInputRef,\n prefix: /*#__PURE__*/React.createElement(IconSearch, null),\n \"aria-activedescendant\": focusIndex !== -1 ? `${this.selectID}-option-${focusIndex}` : ''\n }, selectInputProps)));\n }\n close() {\n this.foundation.close();\n }\n open() {\n this.foundation.open();\n }\n clearInput() {\n this.foundation.clearInput();\n }\n selectAll() {\n this.foundation.selectAll();\n }\n deselectAll() {\n this.foundation.clearSelected();\n }\n focus() {\n this.foundation.focus();\n }\n onSelect(option, optionIndex, e) {\n this.foundation.onSelect(option, optionIndex, e);\n }\n onClear(e) {\n e.nativeEvent.stopImmediatePropagation();\n this.foundation.handleClearClick(e);\n }\n search(value, event) {\n this.handleInputChange(value, event);\n }\n renderEmpty() {\n return /*#__PURE__*/React.createElement(Option, {\n empty: true,\n emptyContent: this.props.emptyContent\n });\n }\n renderLoading() {\n const loadingWrapperCls = `${prefixcls}-loading-wrapper`;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: loadingWrapperCls\n }, /*#__PURE__*/React.createElement(Spin, null));\n }\n renderOption(option, optionIndex, style) {\n const {\n focusIndex,\n inputValue\n } = this.state;\n const {\n renderOptionItem\n } = this.props;\n let optionContent;\n const isFocused = optionIndex === focusIndex;\n let optionStyle = style || {};\n if (option.style) {\n optionStyle = Object.assign(Object.assign({}, optionStyle), option.style);\n }\n if (option._inputCreateOnly) {\n optionContent = this.renderCreateOption(option, isFocused, optionIndex, style);\n } else {\n // use another name to make sure that 'key' in optionList still exist when we call onChange\n if ('key' in option) {\n option._keyInOptionList = option.key;\n }\n optionContent = /*#__PURE__*/React.createElement(Option, Object.assign({\n showTick: true\n }, option, {\n selected: option._selected,\n onSelect: (v, e) => this.onSelect(v, optionIndex, e),\n focused: isFocused,\n onMouseEnter: () => this.onOptionHover(optionIndex),\n style: optionStyle,\n key: option._keyInOptionList || option._keyInJsx || option.label + option.value + optionIndex,\n renderOptionItem: renderOptionItem,\n inputValue: inputValue,\n semiOptionId: `${this.selectID}-option-${optionIndex}`\n }), option.label);\n }\n return optionContent;\n }\n renderCreateOption(option, isFocused, optionIndex, style) {\n const {\n renderCreateItem\n } = this.props;\n // default render method\n if (typeof renderCreateItem === 'undefined') {\n const defaultCreateItem = /*#__PURE__*/React.createElement(Option, Object.assign({\n key: option.key || option.label + option.value,\n onSelect: (v, e) => this.onSelect(v, optionIndex, e),\n onMouseEnter: () => this.onOptionHover(optionIndex),\n showTick: true\n }, option, {\n focused: isFocused,\n style: style\n }), /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Select\"\n }, locale => (/*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixcls}-create-tips`\n }, locale.createText), option.value))));\n return defaultCreateItem;\n }\n const customCreateItem = renderCreateItem(option.value, isFocused, style);\n return (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/interactive-supports-focus\n React.createElement(\"div\", {\n role: \"button\",\n \"aria-label\": \"Use the input box to create an optional item\",\n onClick: e => this.onSelect(option, optionIndex, e),\n key: option.key || option.label\n }, customCreateItem)\n );\n }\n onOptionHover(optionIndex) {\n this.foundation.handleOptionMouseEnter(optionIndex);\n }\n renderWithGroup(visibleOptions) {\n const content = [];\n const groupStatus = new Map();\n visibleOptions.forEach((option, optionIndex) => {\n const parentGroup = option._parentGroup;\n const optionContent = this.renderOption(option, optionIndex);\n if (parentGroup && !groupStatus.has(parentGroup.label)) {\n // when use with OptionGroup and group content not already insert\n const groupContent = /*#__PURE__*/React.createElement(OptionGroup, Object.assign({}, parentGroup, {\n key: parentGroup.label\n }));\n groupStatus.set(parentGroup.label, true);\n content.push(groupContent);\n }\n content.push(optionContent);\n });\n return content;\n }\n renderVirtualizeList(visibleOptions) {\n const {\n virtualize\n } = this.props;\n const {\n direction\n } = this.context;\n const {\n height,\n width,\n itemSize\n } = virtualize;\n return /*#__PURE__*/React.createElement(List, {\n ref: this.virtualizeListRef,\n height: height || numbers.LIST_HEIGHT,\n itemCount: visibleOptions.length,\n itemSize: itemSize,\n itemData: {\n visibleOptions,\n renderOption: this.renderOption\n },\n width: width || '100%',\n style: {\n direction\n }\n }, VirtualRow);\n }\n renderOptions(children) {\n const {\n dropdownMinWidth,\n options,\n selections\n } = this.state;\n const {\n maxHeight,\n dropdownClassName,\n dropdownStyle,\n outerTopSlot,\n innerTopSlot,\n outerBottomSlot,\n innerBottomSlot,\n loading,\n virtualize,\n multiple,\n emptyContent,\n searchPosition,\n filter\n } = this.props;\n // Do a filter first, instead of directly judging in forEach, so that the focusIndex can correspond to\n const visibleOptions = options.filter(item => item._show);\n let listContent = this.renderWithGroup(visibleOptions);\n if (virtualize) {\n listContent = this.renderVirtualizeList(visibleOptions);\n }\n const style = Object.assign({\n minWidth: dropdownMinWidth\n }, dropdownStyle);\n const optionListCls = cls({\n [`${prefixcls}-option-list`]: true,\n [`${prefixcls}-option-list-chosen`]: selections.size\n });\n const isEmpty = !options.length || !options.some(item => item._show);\n return (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n React.createElement(\"div\", {\n id: `${prefixcls}-${this.selectOptionListID}`,\n className: cls({\n // When emptyContent is null and the option is empty, there is no need for the drop-down option for the user,\n // so there is no need to set padding through this className\n [`${prefixcls}-option-list-wrapper`]: !(isEmpty && emptyContent === null)\n }, dropdownClassName),\n style: style,\n ref: this.setOptionContainerEl,\n onKeyDown: e => this.foundation.handleContainerKeyDown(e)\n }, outerTopSlot ? /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixcls}-option-list-outer-top-slot`,\n onMouseEnter: () => this.foundation.handleSlotMouseEnter()\n }, outerTopSlot) : null, searchPosition === strings.SEARCH_POSITION_DROPDOWN && filter ? this.renderDropdownInput() : null, /*#__PURE__*/React.createElement(\"div\", {\n style: {\n maxHeight: `${maxHeight}px`\n },\n className: optionListCls,\n role: \"listbox\",\n \"aria-multiselectable\": multiple,\n onScroll: e => this.foundation.handleListScroll(e)\n }, innerTopSlot ? /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixcls}-option-list-inner-top-slot`,\n onMouseEnter: () => this.foundation.handleSlotMouseEnter()\n }, innerTopSlot) : null, loading ? this.renderLoading() : isEmpty ? this.renderEmpty() : listContent, innerBottomSlot ? /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixcls}-option-list-inner-bottom-slot`,\n onMouseEnter: () => this.foundation.handleSlotMouseEnter()\n }, innerBottomSlot) : null), outerBottomSlot ? /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixcls}-option-list-outer-bottom-slot`,\n onMouseEnter: () => this.foundation.handleSlotMouseEnter()\n }, outerBottomSlot) : null)\n );\n }\n renderSingleSelection(selections, filterable) {\n let {\n renderSelectedItem,\n searchPosition\n } = this.props;\n const {\n placeholder\n } = this.props;\n const {\n showInput,\n inputValue\n } = this.state;\n let renderText = '';\n const selectedItems = [...selections];\n if (typeof renderSelectedItem === 'undefined') {\n renderSelectedItem = optionNode => optionNode.label;\n }\n if (selectedItems.length) {\n const selectedItem = selectedItems[0][1];\n renderText = renderSelectedItem(selectedItem);\n }\n const showInputInTrigger = searchPosition === strings.SEARCH_POSITION_TRIGGER;\n const spanCls = cls({\n [`${prefixcls}-selection-text`]: true,\n [`${prefixcls}-selection-placeholder`]: !renderText && renderText !== 0,\n [`${prefixcls}-selection-text-hide`]: inputValue && showInput && showInputInTrigger,\n [`${prefixcls}-selection-text-inactive`]: !inputValue && showInput && showInputInTrigger // Stack Input & RenderText(opacity 0.4)\n });\n const contentWrapperCls = `${prefixcls}-content-wrapper`;\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n className: contentWrapperCls\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: spanCls,\n \"x-semi-prop\": \"placeholder\"\n }, renderText || renderText === 0 ? renderText : placeholder), filterable && showInput && showInputInTrigger ? this.renderTriggerInput() : null));\n }\n renderTag(item, i, isCollapseItem) {\n const {\n size,\n disabled: selectDisabled\n } = this.props;\n let {\n renderSelectedItem\n } = this.props;\n const label = item[0];\n const {\n value\n } = item[1];\n const disabled = item[1].disabled || selectDisabled;\n const onClose = (tagContent, e) => {\n if (e && typeof e.preventDefault === 'function') {\n e.preventDefault(); // make sure that tag will not hidden immediately in controlled mode\n }\n this.foundation.removeTag({\n label,\n value\n });\n };\n if (typeof renderSelectedItem === 'undefined') {\n renderSelectedItem = optionNode => ({\n isRenderInTag: true,\n content: optionNode.label\n });\n }\n const {\n content,\n isRenderInTag\n } = renderSelectedItem(item[1], {\n index: i,\n disabled,\n onClose\n });\n const basic = {\n disabled,\n closable: !disabled,\n onClose\n };\n const realContent = isCollapseItem && !_isFunction(this.props.renderSelectedItem) ? (/*#__PURE__*/React.createElement(Text, {\n size: 'small',\n ellipsis: {\n rows: 1,\n showTooltip: {\n type: 'popover',\n opts: {\n style: {\n width: 'auto',\n fontSize: 12\n }\n }\n }\n }\n }, content)) : content;\n if (isRenderInTag) {\n return /*#__PURE__*/React.createElement(Tag, Object.assign({}, basic, {\n color: \"white\",\n size: size || 'large',\n key: value,\n style: {\n maxWidth: '100%'\n }\n }), realContent);\n } else {\n return /*#__PURE__*/React.createElement(Fragment, {\n key: value\n }, realContent);\n }\n }\n renderNTag(n, restTags) {\n const {\n size,\n showRestTagsPopover,\n restTagsPopoverProps\n } = this.props;\n let nTag = /*#__PURE__*/React.createElement(Tag, {\n closable: false,\n size: size || 'large',\n color: 'grey',\n className: `${prefixcls}-content-wrapper-collapse-tag`,\n key: `_+${n}`,\n style: {\n marginRight: 0,\n flexShrink: 0\n }\n }, \"+\", n);\n if (showRestTagsPopover) {\n nTag = /*#__PURE__*/React.createElement(Popover, Object.assign({\n showArrow: true,\n content: /*#__PURE__*/React.createElement(Space, {\n spacing: 2,\n wrap: true,\n style: {\n maxWidth: '400px'\n }\n }, restTags.map((tag, index) => this.renderTag(tag, index))),\n trigger: \"hover\",\n position: \"top\",\n autoAdjustOverflow: true\n }, restTagsPopoverProps, {\n key: `_+${n}_Popover`\n }), nTag);\n }\n return nTag;\n }\n renderOverflow(items, index) {\n const isCollapse = true;\n return items.length && items[0] ? this.renderTag(items[0], index, isCollapse) : null;\n }\n handleOverflow(items) {\n const {\n overflowItemCount,\n selections\n } = this.state;\n const {\n maxTagCount\n } = this.props;\n const newOverFlowItemCount = selections.size - maxTagCount > 0 ? selections.size - maxTagCount + items.length - 1 : items.length - 1;\n if (overflowItemCount !== newOverFlowItemCount) {\n this.foundation.updateOverflowItemCount(selections.size, newOverFlowItemCount);\n }\n }\n renderCollapsedTags(selections, length) {\n const {\n overflowItemCount\n } = this.state;\n const normalTags = typeof length === 'number' ? selections.slice(0, length) : selections;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixcls}-content-wrapper-collapse`\n }, /*#__PURE__*/React.createElement(OverflowList, {\n items: normalTags,\n key: String(selections.length),\n overflowRenderer: overflowItems => this.renderOverflow(overflowItems, length - 1),\n onOverflow: overflowItems => this.handleOverflow(overflowItems),\n visibleItemRenderer: (item, index) => this.renderTag(item, index)\n }), overflowItemCount > 0 && this.renderNTag(overflowItemCount, selections.slice(selections.length - overflowItemCount)));\n }\n renderOneLineTags(selectedItems, n) {\n let {\n renderSelectedItem\n } = this.props;\n const {\n showRestTagsPopover,\n restTagsPopoverProps,\n maxTagCount\n } = this.props;\n const {\n isFullTags\n } = this.state;\n let tagContent;\n if (typeof renderSelectedItem === 'undefined') {\n renderSelectedItem = optionNode => ({\n isRenderInTag: true,\n content: optionNode.label\n });\n }\n if (showRestTagsPopover) {\n // showRestTagsPopover = true,\n const mapItems = isFullTags ? selectedItems : selectedItems.slice(0, maxTagCount);\n const tags = mapItems.map((item, i) => {\n return this.getTagItem(item, i, renderSelectedItem);\n });\n tagContent = /*#__PURE__*/React.createElement(TagGroup, {\n tagList: tags,\n maxTagCount: n,\n restCount: isFullTags ? undefined : selectedItems.length - maxTagCount,\n size: \"large\",\n mode: \"custom\",\n showPopover: showRestTagsPopover,\n popoverProps: restTagsPopoverProps,\n onPlusNMouseEnter: () => {\n this.foundation.updateIsFullTags();\n }\n });\n } else {\n // If maxTagCount is set, showRestTagsPopover is false/undefined, \n // then there is no popover when hovering, no extra Tags are displayed, \n // only the tags and restCount displayed in the trigger need to be passed in\n const mapItems = selectedItems.slice(0, maxTagCount);\n const tags = mapItems.map((item, i) => {\n return this.getTagItem(item, i, renderSelectedItem);\n });\n tagContent = /*#__PURE__*/React.createElement(TagGroup, {\n tagList: tags,\n maxTagCount: n,\n restCount: selectedItems.length - maxTagCount,\n size: \"large\",\n mode: \"custom\"\n });\n }\n return tagContent;\n }\n renderMultipleSelection(selections, filterable) {\n let {\n renderSelectedItem,\n searchPosition\n } = this.props;\n const {\n placeholder,\n maxTagCount,\n expandRestTagsOnClick,\n ellipsisTrigger\n } = this.props;\n const {\n inputValue,\n isOpen\n } = this.state;\n const selectedItems = [...selections];\n if (typeof renderSelectedItem === 'undefined') {\n renderSelectedItem = optionNode => ({\n isRenderInTag: true,\n content: optionNode.label\n });\n }\n const contentWrapperCls = cls({\n [`${prefixcls}-content-wrapper`]: true,\n [`${prefixcls}-content-wrapper-one-line`]: maxTagCount && !isOpen,\n [`${prefixcls}-content-wrapper-empty`]: !selectedItems.length\n });\n const spanCls = cls({\n [`${prefixcls}-selection-text`]: true,\n [`${prefixcls}-selection-placeholder`]: !selectedItems.length,\n [`${prefixcls}-selection-text-hide`]: selectedItems && selectedItems.length\n });\n const placeholderText = placeholder && !inputValue ? /*#__PURE__*/React.createElement(\"span\", {\n className: spanCls\n }, placeholder) : null;\n const n = selectedItems.length > maxTagCount ? maxTagCount : undefined;\n const NotOneLine = !maxTagCount;\n const oneLineTags = ellipsisTrigger ? this.renderCollapsedTags(selectedItems, n) : this.renderOneLineTags(selectedItems, n);\n const tagContent = NotOneLine || expandRestTagsOnClick && isOpen ? selectedItems.map((item, i) => this.renderTag(item, i)) : oneLineTags;\n const showTriggerInput = filterable && searchPosition === strings.SEARCH_POSITION_TRIGGER;\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n className: contentWrapperCls\n }, selectedItems && selectedItems.length ? tagContent : placeholderText, showTriggerInput ? this.renderTriggerInput() : null));\n }\n onMouseEnter(e) {\n this.foundation.handleMouseEnter(e);\n }\n onMouseLeave(e) {\n this.foundation.handleMouseLeave(e);\n }\n onKeyPress(e) {\n this.foundation.handleKeyPress(e);\n }\n /* Processing logic when popover visible changes */\n handlePopoverVisibleChange(status) {\n const {\n virtualize\n } = this.props;\n const {\n selections\n } = this.state;\n if (!status) {\n return;\n }\n if (virtualize) {\n let minItemIndex = -1;\n selections.forEach(item => {\n const itemIndex = _get(item, '_scrollIndex');\n /* When the itemIndex is legal */\n if (_isNumber(itemIndex) && itemIndex >= 0) {\n minItemIndex = minItemIndex !== -1 && minItemIndex < itemIndex ? minItemIndex : itemIndex;\n }\n });\n if (minItemIndex !== -1) {\n try {\n this.virtualizeListRef.current.scrollToItem(minItemIndex, 'center');\n } catch (error) {}\n }\n } else {\n this.foundation.updateScrollTop();\n }\n }\n renderSuffix() {\n const {\n suffix\n } = this.props;\n const suffixWrapperCls = cls({\n [`${prefixcls}-suffix`]: true,\n [`${prefixcls}-suffix-text`]: suffix && _isString(suffix),\n [`${prefixcls}-suffix-icon`]: isSemiIcon(suffix)\n });\n return /*#__PURE__*/React.createElement(\"div\", {\n className: suffixWrapperCls,\n \"x-semi-prop\": \"suffix\"\n }, suffix);\n }\n renderPrefix() {\n const {\n prefix,\n insetLabel,\n insetLabelId\n } = this.props;\n const labelNode = prefix || insetLabel;\n const prefixWrapperCls = cls({\n [`${prefixcls}-prefix`]: true,\n [`${prefixcls}-inset-label`]: insetLabel,\n [`${prefixcls}-prefix-text`]: labelNode && _isString(labelNode),\n [`${prefixcls}-prefix-icon`]: isSemiIcon(labelNode)\n });\n return /*#__PURE__*/React.createElement(\"div\", {\n className: prefixWrapperCls,\n id: insetLabelId,\n \"x-semi-prop\": \"prefix,insetLabel\"\n }, labelNode);\n }\n renderSelection() {\n const _a = this.props,\n {\n disabled,\n multiple,\n filter,\n style,\n id,\n size,\n className,\n validateStatus,\n showArrow,\n suffix,\n prefix,\n insetLabel,\n placeholder,\n triggerRender,\n arrowIcon,\n clearIcon,\n borderless\n } = _a,\n rest = __rest(_a, [\"disabled\", \"multiple\", \"filter\", \"style\", \"id\", \"size\", \"className\", \"validateStatus\", \"showArrow\", \"suffix\", \"prefix\", \"insetLabel\", \"placeholder\", \"triggerRender\", \"arrowIcon\", \"clearIcon\", \"borderless\"]);\n const {\n selections,\n isOpen,\n keyboardEventSet,\n inputValue,\n isHovering,\n isFocus,\n showInput,\n focusIndex\n } = this.state;\n const useCustomTrigger = typeof triggerRender === 'function';\n const filterable = Boolean(filter); // filter(boolean || function)\n const selectionCls = useCustomTrigger ? cls(className) : cls(prefixcls, className, {\n [`${prefixcls}-borderless`]: borderless,\n [`${prefixcls}-open`]: isOpen,\n [`${prefixcls}-focus`]: isFocus,\n [`${prefixcls}-disabled`]: disabled,\n [`${prefixcls}-single`]: !multiple,\n [`${prefixcls}-multiple`]: multiple,\n [`${prefixcls}-filterable`]: filterable,\n [`${prefixcls}-small`]: size === 'small',\n [`${prefixcls}-large`]: size === 'large',\n [`${prefixcls}-error`]: validateStatus === 'error',\n [`${prefixcls}-warning`]: validateStatus === 'warning',\n [`${prefixcls}-no-arrow`]: !showArrow,\n [`${prefixcls}-with-prefix`]: prefix || insetLabel,\n [`${prefixcls}-with-suffix`]: suffix\n });\n const showClear = this.props.showClear && (selections.size || inputValue) && !disabled && (isHovering || isOpen);\n const arrowContent = showArrow ? (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixcls}-arrow`,\n \"x-semi-prop\": \"arrowIcon\"\n }, arrowIcon)) : (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixcls}-arrow-empty`\n }));\n const clear = clearIcon ? clearIcon : /*#__PURE__*/React.createElement(IconClear, null);\n // semantics of onSearch are more in line with behavior, onChange is alias of onSearch, will be deprecate next major version\n const inner = useCustomTrigger ? (/*#__PURE__*/React.createElement(Trigger, {\n value: Array.from(selections.values()),\n inputValue: inputValue,\n onChange: this.handleInputChange,\n onSearch: this.handleInputChange,\n onRemove: item => this.foundation.removeTag(item),\n onClear: this.onClear,\n disabled: disabled,\n triggerRender: triggerRender,\n placeholder: placeholder,\n componentName: \"Select\",\n componentProps: Object.assign({}, this.props)\n })) : [/*#__PURE__*/React.createElement(Fragment, {\n key: \"prefix\"\n }, prefix || insetLabel ? this.renderPrefix() : null), /*#__PURE__*/React.createElement(Fragment, {\n key: \"selection\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: cls(`${prefixcls}-selection`)\n }, multiple ? this.renderMultipleSelection(selections, filterable) : this.renderSingleSelection(selections, filterable))), /*#__PURE__*/React.createElement(Fragment, {\n key: \"suffix\"\n }, suffix ? this.renderSuffix() : null), /*#__PURE__*/React.createElement(Fragment, {\n key: \"clearicon\"\n }, showClear ? (/*#__PURE__*/React.createElement(\"div\", {\n className: cls(`${prefixcls}-clear`),\n onClick: this.onClear\n }, clear)) : arrowContent)];\n /**\n *\n * In disabled, searchable single-selection and display input, and searchable multi-selection\n * make combobox not focusable by tab key\n *\n * 在disabled,可搜索单选且显示input框,以及可搜索多选情况下\n * 让combobox无法通过tab聚焦\n */\n const tabIndex = disabled || filterable && showInput || filterable && multiple ? -1 : 0;\n return (\n /*#__PURE__*/\n /* eslint-disable-next-line jsx-a11y/aria-activedescendant-has-tabindex */\n React.createElement(\"div\", Object.assign({\n role: \"combobox\",\n \"aria-disabled\": disabled,\n \"aria-expanded\": isOpen,\n \"aria-controls\": `${prefixcls}-${this.selectOptionListID}`,\n \"aria-haspopup\": \"listbox\",\n \"aria-label\": selections.size ? 'selected' : '',\n \"aria-invalid\": this.props['aria-invalid'],\n \"aria-errormessage\": this.props['aria-errormessage'],\n \"aria-labelledby\": this.props['aria-labelledby'],\n \"aria-describedby\": this.props['aria-describedby'],\n \"aria-required\": this.props['aria-required'],\n className: selectionCls,\n ref: ref => this.triggerRef.current = ref,\n onClick: e => this.foundation.handleClick(e),\n style: style,\n id: this.selectID,\n tabIndex: tabIndex,\n \"aria-activedescendant\": focusIndex !== -1 ? `${this.selectID}-option-${focusIndex}` : '',\n onMouseEnter: this.onMouseEnter,\n onMouseLeave: this.onMouseLeave,\n onFocus: e => this.foundation.handleTriggerFocus(e),\n onBlur: e => this.foundation.handleTriggerBlur(e),\n onKeyPress: this.onKeyPress\n }, keyboardEventSet, this.getDataAttr(rest)), inner)\n );\n }\n render() {\n const {\n direction\n } = this.context;\n const defaultPosition = direction === 'rtl' ? 'bottomRight' : 'bottomLeft';\n const {\n children,\n position = defaultPosition,\n zIndex,\n getPopupContainer,\n motion,\n autoAdjustOverflow,\n mouseLeaveDelay,\n mouseEnterDelay,\n spacing,\n stopPropagation,\n dropdownMargin\n } = this.props;\n const {\n isOpen,\n optionKey\n } = this.state;\n const selection = this.renderSelection();\n return /*#__PURE__*/React.createElement(Popover, {\n getPopupContainer: getPopupContainer,\n motion: motion,\n margin: dropdownMargin,\n autoAdjustOverflow: autoAdjustOverflow,\n mouseLeaveDelay: mouseLeaveDelay,\n mouseEnterDelay: mouseEnterDelay,\n zIndex: zIndex,\n ref: this.optionsRef,\n content: () => this.renderOptions(children),\n visible: isOpen,\n trigger: \"custom\",\n rePosKey: optionKey,\n position: position,\n spacing: spacing,\n stopPropagation: stopPropagation,\n disableArrowKeyDown: true,\n onVisibleChange: status => this.handlePopoverVisibleChange(status),\n afterClose: () => this.foundation.handlePopoverClose()\n }, selection);\n }\n}\nSelect.contextType = ConfigContext;\nSelect.Option = Option;\nSelect.OptGroup = OptionGroup;\nSelect.propTypes = {\n 'aria-describedby': PropTypes.string,\n 'aria-errormessage': PropTypes.string,\n 'aria-invalid': PropTypes.bool,\n 'aria-labelledby': PropTypes.string,\n 'aria-required': PropTypes.bool,\n autoFocus: PropTypes.bool,\n autoClearSearchValue: PropTypes.bool,\n borderless: PropTypes.bool,\n children: PropTypes.node,\n clearIcon: PropTypes.node,\n defaultValue: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.array, PropTypes.object]),\n ellipsisTrigger: PropTypes.bool,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.array, PropTypes.object]),\n placeholder: PropTypes.node,\n onChange: PropTypes.func,\n multiple: PropTypes.bool,\n // Whether to turn on the input box filtering function, when it is a function, it represents a custom filtering function\n filter: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n // How many tags can you choose?\n max: PropTypes.number,\n // How many tabs are displayed at most, and the rest are displayed in + N\n maxTagCount: PropTypes.number,\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n style: PropTypes.object,\n className: PropTypes.string,\n size: PropTypes.oneOf(strings.SIZE_SET),\n disabled: PropTypes.bool,\n emptyContent: PropTypes.node,\n expandRestTagsOnClick: PropTypes.bool,\n onDropdownVisibleChange: PropTypes.func,\n zIndex: PropTypes.number,\n position: PropTypes.oneOf(strings.POSITION_SET),\n onSearch: PropTypes.func,\n getPopupContainer: PropTypes.func,\n dropdownClassName: PropTypes.string,\n dropdownStyle: PropTypes.object,\n dropdownMargin: PropTypes.oneOfType([PropTypes.number, PropTypes.object]),\n outerTopSlot: PropTypes.node,\n innerTopSlot: PropTypes.node,\n inputProps: PropTypes.object,\n outerBottomSlot: PropTypes.node,\n innerBottomSlot: PropTypes.node,\n optionList: PropTypes.array,\n dropdownMatchSelectWidth: PropTypes.bool,\n loading: PropTypes.bool,\n defaultOpen: PropTypes.bool,\n validateStatus: PropTypes.oneOf(strings.STATUS),\n defaultActiveFirstOption: PropTypes.bool,\n triggerRender: PropTypes.func,\n stopPropagation: PropTypes.bool,\n searchPosition: PropTypes.string,\n // motion doesn't need to be exposed\n motion: PropTypes.bool,\n onChangeWithObject: PropTypes.bool,\n suffix: PropTypes.node,\n prefix: PropTypes.node,\n insetLabel: PropTypes.node,\n insetLabelId: PropTypes.string,\n showClear: PropTypes.bool,\n showArrow: PropTypes.bool,\n renderSelectedItem: PropTypes.func,\n allowCreate: PropTypes.bool,\n renderCreateItem: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n clickToHide: PropTypes.bool,\n onExceed: PropTypes.func,\n onCreate: PropTypes.func,\n remote: PropTypes.bool,\n onDeselect: PropTypes.func,\n // The main difference between onSelect and onChange is that when multiple selections are selected, onChange contains all options, while onSelect only contains items for the current operation\n onSelect: PropTypes.func,\n autoAdjustOverflow: PropTypes.bool,\n mouseEnterDelay: PropTypes.number,\n mouseLeaveDelay: PropTypes.number,\n spacing: PropTypes.oneOfType([PropTypes.number, PropTypes.object]),\n onBlur: PropTypes.func,\n onFocus: PropTypes.func,\n onClear: PropTypes.func,\n virtualize: PropTypes.object,\n renderOptionItem: PropTypes.func,\n onListScroll: PropTypes.func,\n arrowIcon: PropTypes.node,\n preventScroll: PropTypes.bool\n // open: PropTypes.bool,\n // tagClosable: PropTypes.bool,\n};\nSelect.__SemiComponentName__ = \"Select\";\nSelect.defaultProps = getDefaultPropsFromGlobalConfig(Select.__SemiComponentName__, {\n stopPropagation: true,\n motion: true,\n borderless: false,\n zIndex: popoverNumbers.DEFAULT_Z_INDEX,\n // position: 'bottomLeft',\n filter: false,\n multiple: false,\n disabled: false,\n defaultOpen: false,\n allowCreate: false,\n placeholder: '',\n onDropdownVisibleChange: _noop,\n onChangeWithObject: false,\n onChange: _noop,\n onSearch: _noop,\n onMouseEnter: _noop,\n onMouseLeave: _noop,\n onDeselect: _noop,\n onSelect: _noop,\n onCreate: _noop,\n onExceed: _noop,\n onFocus: _noop,\n onBlur: _noop,\n onClear: _noop,\n onListScroll: _noop,\n maxHeight: numbers.LIST_HEIGHT,\n dropdownMatchSelectWidth: true,\n defaultActiveFirstOption: true,\n showArrow: true,\n showClear: false,\n searchPosition: strings.SEARCH_POSITION_TRIGGER,\n remote: false,\n autoAdjustOverflow: true,\n autoClearSearchValue: true,\n arrowIcon: /*#__PURE__*/React.createElement(IconChevronDown, {\n \"aria-label\": ''\n }),\n showRestTagsPopover: false,\n restTagsPopoverProps: {},\n expandRestTagsOnClick: false,\n ellipsisTrigger: false\n // Radio selection is different from the default renderSelectedItem for multiple selection, so it is not declared here\n // renderSelectedItem: (optionNode) => optionNode.label,\n // The default creator rendering is related to i18, so it is not declared here\n // renderCreateItem: (input) => input\n});\nexport default Select;","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-sidesheet`,\n DIALOG: `${BASE_CLASS_PREFIX}-modal`\n};\nconst strings = {\n PLACEMENT: ['top', 'right', 'bottom', 'left'],\n SIZE: ['small', 'medium', 'large'],\n WIDTH: {\n small: 448,\n medium: 684,\n large: 920\n },\n HEIGHT: 448\n};\nexport { cssClasses, strings };","import _noop from \"lodash/noop\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport cls from 'classnames';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/sideSheet/constants';\nimport Button from '../iconButton';\nimport { IconClose } from '@douyinfe/semi-icons';\nimport getDataAttr from '@douyinfe/semi-foundation/lib/es/utils/getDataAttr';\nlet uuid = 0;\nconst prefixCls = cssClasses.PREFIX;\nexport default class SideSheetContent extends React.PureComponent {\n constructor() {\n super(...arguments);\n this.onMaskClick = e => {\n if (e.target === e.currentTarget) {\n this.close(e);\n }\n };\n this.close = e => {\n const {\n onClose\n } = this.props;\n onClose && onClose(e);\n };\n }\n componentDidMount() {\n this.sideSheetId = `sidesheet-${uuid++}`;\n }\n componentWillUnmount() {\n clearTimeout(this.timeoutId);\n }\n getMaskElement() {\n var _a;\n const {\n mask,\n maskStyle,\n maskClosable\n } = this.props;\n if (mask) {\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n \"aria-hidden\": true,\n key: \"mask\",\n className: cls(`${prefixCls}-mask`, (_a = this.props.maskClassName) !== null && _a !== void 0 ? _a : \"\"),\n style: maskStyle,\n onClick: maskClosable ? this.onMaskClick : null\n }, this.props.maskExtraProps));\n }\n return null;\n }\n renderHeader() {\n const {\n title,\n closable,\n headerStyle,\n closeIcon\n } = this.props;\n let header, closer;\n if (title) {\n header = /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-title`,\n \"x-semi-prop\": \"title\"\n }, this.props.title);\n }\n if (closable) {\n const iconType = closeIcon || /*#__PURE__*/React.createElement(IconClose, null);\n closer = /*#__PURE__*/React.createElement(Button, {\n className: `${prefixCls}-close`,\n key: \"close-btn\",\n onClick: this.close,\n type: \"tertiary\",\n icon: iconType,\n theme: \"borderless\",\n size: \"small\"\n });\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-header`,\n role: 'heading',\n \"aria-level\": 1,\n style: Object.assign({}, headerStyle)\n }, header, closer);\n }\n getDialogElement() {\n var _a;\n const props = __rest(this.props, []);\n const style = {};\n if (props.width) {\n style.width = props.width;\n // When the mask is false, the width is set on the wrapper. At this time, sidesheet-inner does not need to set the width again, otherwise, the percentage will be accumulated repeatedly when the width is a percentage\n if (!props.mask) {\n style.width = '100%';\n }\n }\n if (props.height) {\n style.height = props.height;\n }\n const header = this.renderHeader();\n const dialogElement = /*#__PURE__*/React.createElement(\"div\", Object.assign({\n key: \"dialog-element\",\n role: \"dialog\",\n tabIndex: -1,\n className: cls(`${prefixCls}-inner`, `${prefixCls}-inner-wrap`, (_a = this.props.dialogClassName) !== null && _a !== void 0 ? _a : \"\", `${prefixCls}-size-${props.size}`),\n // onMouseDown={this.onDialogMouseDown}\n style: Object.assign(Object.assign({}, props.style), style)\n }, this.props.wrapperExtraProps), /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-content`\n }, header, /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-body`,\n style: props.bodyStyle,\n \"x-semi-prop\": \"children\"\n }, props.children), props.footer ? (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-footer`,\n \"x-semi-prop\": \"footer\"\n }, props.footer)) : null));\n return dialogElement;\n }\n render() {\n const _a = this.props,\n {\n mask,\n className,\n width,\n onClose,\n maskStyle,\n maskClosable,\n maskClassName,\n title,\n closable,\n headerStyle,\n height,\n style,\n size,\n bodyStyle,\n dialogClassName,\n children,\n footer,\n maskExtraProps,\n wrapperExtraProps\n } = _a,\n rest = __rest(_a, [\"mask\", \"className\", \"width\", \"onClose\", \"maskStyle\", \"maskClosable\", \"maskClassName\", \"title\", \"closable\", \"headerStyle\", \"height\", \"style\", \"size\", \"bodyStyle\", \"dialogClassName\", \"children\", \"footer\", \"maskExtraProps\", \"wrapperExtraProps\"]);\n const wrapperCls = cls(className, {\n [`${prefixCls}-fixed`]: !mask,\n [`${prefixCls}-size-${this.props.size}`]: !mask\n });\n const wrapperStyle = {};\n if (!mask && width) {\n wrapperStyle.width = width;\n }\n const dataAttr = getDataAttr(rest);\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n className: wrapperCls,\n style: wrapperStyle\n }, dataAttr), this.getMaskElement(), this.getDialogElement());\n }\n}\nSideSheetContent.propTypes = {\n onClose: PropTypes.func,\n closeIcon: PropTypes.node\n};\nSideSheetContent.defaultProps = {\n onClose: _noop\n};","import _noop from \"lodash/noop\";\nimport BaseFoundation from '../base/foundation';\nimport KeyCode from '../utils/keyCode';\nexport default class SideSheetFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign(Object.assign({}, SideSheetFoundation.defaultAdapter), adapter));\n this.toggleDisplayNone = displayNone => {\n this._adapter.toggleDisplayNone(displayNone);\n };\n }\n get defaultAdapter() {\n return {\n handleCancel: _noop,\n beforeShow: _noop,\n afterHide: _noop\n };\n }\n destroy() {\n this.afterHide();\n }\n handleCancel(e) {\n this._adapter.notifyCancel(e);\n }\n beforeShow() {\n const allowDisable = this.getProp('disableScroll');\n allowDisable && this._adapter.disabledBodyScroll();\n this._adapter.setOnKeyDownListener();\n }\n afterHide() {\n const allowDisable = this.getProp('disableScroll');\n allowDisable && this._adapter.enabledBodyScroll();\n this._adapter.removeKeyDownListener();\n }\n handleKeyDown(e) {\n const {\n closeOnEsc\n } = this.getProps();\n if (closeOnEsc && e.keyCode === KeyCode.ESC) {\n e.stopPropagation();\n this.handleCancel(e);\n return;\n }\n }\n onVisibleChange(visible) {\n this._adapter.notifyVisibleChange(visible);\n }\n}","import _noop from \"lodash/noop\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport BaseComponent from '../_base/baseComponent';\nimport PropTypes from 'prop-types';\nimport Portal from '../_portal';\nimport cls from 'classnames';\nimport ConfigContext from '../configProvider/context';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/sideSheet/constants';\nimport SideSheetContent from './SideSheetContent';\nimport SideSheetFoundation from '@douyinfe/semi-foundation/lib/es/sideSheet/sideSheetFoundation';\nimport '@douyinfe/semi-foundation/lib/es/sideSheet/sideSheet.css';\nimport CSSAnimation from \"../_cssAnimation\";\nimport { getDefaultPropsFromGlobalConfig, getScrollbarWidth } from '../_utils';\nconst prefixCls = cssClasses.PREFIX;\nconst defaultWidthList = strings.WIDTH;\nconst defaultHeight = strings.HEIGHT;\nexport default class SideSheet extends BaseComponent {\n constructor(props) {\n super(props);\n this.handleCancel = e => {\n this.foundation.handleCancel(e);\n };\n this.handleKeyDown = e => {\n this.foundation.handleKeyDown(e);\n };\n this.updateState = () => {\n this.foundation.toggleDisplayNone(!this.props.visible);\n };\n this.state = {\n displayNone: !this.props.visible\n };\n this.foundation = new SideSheetFoundation(this.adapter);\n this.bodyOverflow = '';\n this.scrollBarWidth = 0;\n this.originBodyWidth = '100%';\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n disabledBodyScroll: () => {\n const {\n getPopupContainer\n } = this.props;\n this.bodyOverflow = document.body.style.overflow || '';\n if (!getPopupContainer && this.bodyOverflow !== 'hidden') {\n document.body.style.overflow = 'hidden';\n document.body.style.width = `calc(${this.originBodyWidth || '100%'} - ${this.scrollBarWidth}px)`;\n }\n },\n enabledBodyScroll: () => {\n const {\n getPopupContainer\n } = this.props;\n if (!getPopupContainer && this.bodyOverflow !== 'hidden') {\n document.body.style.overflow = this.bodyOverflow;\n document.body.style.width = this.originBodyWidth;\n }\n },\n notifyCancel: e => {\n this.props.onCancel && this.props.onCancel(e);\n },\n notifyVisibleChange: visible => {\n this.props.afterVisibleChange(visible);\n },\n setOnKeyDownListener: () => {\n if (window) {\n window.addEventListener('keydown', this.handleKeyDown);\n }\n },\n removeKeyDownListener: () => {\n if (window) {\n window.removeEventListener('keydown', this.handleKeyDown);\n }\n },\n toggleDisplayNone: displayNone => {\n if (displayNone !== this.state.displayNone) {\n this.setState({\n displayNone: displayNone\n });\n }\n }\n });\n }\n static getDerivedStateFromProps(props, prevState) {\n const newState = {};\n if (props.visible && prevState.displayNone) {\n newState.displayNone = false;\n }\n if (!props.visible && !props.motion && !prevState.displayNone) {\n newState.displayNone = true;\n }\n return newState;\n }\n componentDidMount() {\n this.scrollBarWidth = getScrollbarWidth();\n this.originBodyWidth = document.body.style.width;\n if (this.props.visible) {\n this.foundation.beforeShow();\n }\n }\n componentDidUpdate(prevProps, prevState, snapshot) {\n // hide => show\n if (!prevProps.visible && this.props.visible) {\n this.foundation.beforeShow();\n }\n // show => hide\n if (prevProps.visible && !this.props.visible) {\n this.foundation.afterHide();\n }\n if (prevState.displayNone !== this.state.displayNone) {\n this.foundation.onVisibleChange(!this.state.displayNone);\n }\n }\n componentWillUnmount() {\n if (this.props.visible) {\n this.foundation.destroy();\n }\n }\n renderContent() {\n const _a = this.props,\n {\n placement,\n className,\n children,\n width,\n height,\n motion,\n visible,\n style,\n maskStyle,\n size,\n zIndex,\n getPopupContainer,\n keepDOM\n } = _a,\n props = __rest(_a, [\"placement\", \"className\", \"children\", \"width\", \"height\", \"motion\", \"visible\", \"style\", \"maskStyle\", \"size\", \"zIndex\", \"getPopupContainer\", \"keepDOM\"]);\n let wrapperStyle = {\n zIndex\n };\n if (getPopupContainer) {\n wrapperStyle = {\n zIndex,\n position: 'static'\n };\n }\n const {\n direction\n } = this.context;\n const isVertical = placement === 'left' || placement === 'right';\n const isHorizontal = placement === 'top' || placement === 'bottom';\n const sheetHeight = isHorizontal ? height ? height : defaultHeight : '100%';\n const classList = cls(prefixCls, className, {\n [`${prefixCls}-${placement}`]: placement,\n [`${prefixCls}-popup`]: getPopupContainer,\n [`${prefixCls}-horizontal`]: isHorizontal,\n [`${prefixCls}-rtl`]: direction === 'rtl',\n [`${prefixCls}-hidden`]: keepDOM && this.state.displayNone\n });\n const contentProps = Object.assign(Object.assign(Object.assign({}, isVertical ? width ? {\n width\n } : {} : {\n width: \"100%\"\n }), props), {\n visible,\n motion: false,\n size,\n className: classList,\n height: sheetHeight,\n onClose: this.handleCancel\n });\n const shouldRender = this.props.visible || this.props.keepDOM || this.props.motion && !this.state.displayNone /* When there is animation, we use displayNone to judge whether animation is ended and judge whether to unmount content */;\n // Since user could change animate duration , we don't know which animation end first. So we call updateState func twice.\n return /*#__PURE__*/React.createElement(CSSAnimation, {\n motion: this.props.motion,\n animationState: visible ? 'enter' : 'leave',\n startClassName: visible ? `${prefixCls}-animation-mask_show` : `${prefixCls}-animation-mask_hide`,\n onAnimationEnd: this.updateState\n }, _ref => {\n let {\n animationClassName: maskAnimationClassName,\n animationEventsNeedBind: maskAnimationEventsNeedBind\n } = _ref;\n return /*#__PURE__*/React.createElement(CSSAnimation, {\n motion: this.props.motion,\n animationState: visible ? 'enter' : 'leave',\n startClassName: visible ? `${prefixCls}-animation-content_show_${this.props.placement}` : `${prefixCls}-animation-content_hide_${this.props.placement}`,\n onAnimationEnd: this.updateState /* for no mask case*/\n }, _ref2 => {\n let {\n animationClassName,\n animationStyle,\n animationEventsNeedBind\n } = _ref2;\n return shouldRender ? /*#__PURE__*/React.createElement(Portal, {\n getPopupContainer: getPopupContainer,\n style: wrapperStyle\n }, /*#__PURE__*/React.createElement(SideSheetContent, Object.assign({}, contentProps, {\n maskExtraProps: maskAnimationEventsNeedBind,\n wrapperExtraProps: animationEventsNeedBind,\n dialogClassName: animationClassName,\n maskClassName: maskAnimationClassName,\n maskStyle: Object.assign({}, maskStyle),\n style: Object.assign(Object.assign({}, animationStyle), style)\n }), children)) : /*#__PURE__*/React.createElement(React.Fragment, null);\n });\n });\n }\n render() {\n const {\n zIndex,\n getPopupContainer,\n visible\n } = this.props;\n return this.renderContent();\n }\n}\nSideSheet.contextType = ConfigContext;\nSideSheet.propTypes = {\n bodyStyle: PropTypes.object,\n headerStyle: PropTypes.object,\n children: PropTypes.node,\n className: PropTypes.string,\n closable: PropTypes.bool,\n disableScroll: PropTypes.bool,\n getPopupContainer: PropTypes.func,\n height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n mask: PropTypes.bool,\n maskClosable: PropTypes.bool,\n maskStyle: PropTypes.object,\n motion: PropTypes.oneOfType([PropTypes.bool, PropTypes.object, PropTypes.func]),\n onCancel: PropTypes.func,\n placement: PropTypes.oneOf(strings.PLACEMENT),\n size: PropTypes.oneOf(strings.SIZE),\n style: PropTypes.object,\n title: PropTypes.node,\n visible: PropTypes.bool,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n zIndex: PropTypes.number,\n afterVisibleChange: PropTypes.func,\n closeOnEsc: PropTypes.bool,\n footer: PropTypes.node,\n keepDOM: PropTypes.bool,\n 'aria-label': PropTypes.string\n};\nSideSheet.__SemiComponentName__ = \"SideSheet\";\nSideSheet.defaultProps = getDefaultPropsFromGlobalConfig(SideSheet.__SemiComponentName__, {\n visible: false,\n motion: true,\n mask: true,\n placement: 'right',\n closable: true,\n footer: null,\n zIndex: 1000,\n maskClosable: true,\n size: 'small',\n disableScroll: true,\n closeOnEsc: false,\n afterVisibleChange: _noop,\n keepDOM: false\n});","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/button/constants';\nimport '@douyinfe/semi-foundation/lib/es/button/button.css';\nimport BaseComponent from '../_base/baseComponent';\nconst prefixCls = cssClasses.PREFIX;\nexport default class SplitButtonGroup extends BaseComponent {\n constructor() {\n super(...arguments);\n this.containerRef = /*#__PURE__*/React.createRef();\n this.mutationObserver = null;\n }\n componentDidMount() {\n const addClassName = () => {\n const buttons = this.containerRef.current.querySelectorAll('button');\n const firstButton = buttons[0];\n const lastButton = buttons[buttons.length - 1];\n if (!(firstButton === null || firstButton === void 0 ? void 0 : firstButton.classList.contains(`${prefixCls}-first`))) {\n firstButton === null || firstButton === void 0 ? void 0 : firstButton.classList.add(`${prefixCls}-first`);\n }\n if (!(lastButton === null || lastButton === void 0 ? void 0 : lastButton.classList.contains(`${prefixCls}-last`))) {\n lastButton === null || lastButton === void 0 ? void 0 : lastButton.classList.add(`${prefixCls}-last`);\n }\n };\n if (this.containerRef.current) {\n addClassName();\n const mutationObserver = new MutationObserver((mutations, observer) => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.attributeName === 'class' || mutation.type === 'childList' && Array.from(mutation.addedNodes).some(node => node.nodeName === 'BUTTON')) {\n addClassName();\n }\n }\n });\n mutationObserver.observe(this.containerRef.current, {\n attributes: true,\n childList: true,\n subtree: true\n });\n this.mutationObserver = mutationObserver;\n }\n }\n componentWillUnmount() {\n var _a;\n super.componentWillUnmount();\n (_a = this.mutationObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\n }\n render() {\n const {\n children,\n style,\n className\n } = this.props;\n const cls = classNames(`${prefixCls}-split`, className);\n return /*#__PURE__*/React.createElement(\"div\", {\n ref: this.containerRef,\n className: cls,\n style: style,\n role: \"group\",\n \"aria-label\": this.props['aria-label']\n }, children);\n }\n}\nSplitButtonGroup.propTypes = {\n style: PropTypes.object,\n className: PropTypes.string,\n 'aria-label': PropTypes.string\n};","import BaseFoundation from '../base/foundation';\nimport warning from '../utils/warning';\nexport default class SwitchFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n this.handleFocusVisible = event => {\n const {\n target\n } = event;\n try {\n if (target.matches(':focus-visible')) {\n this._adapter.setFocusVisible(true);\n }\n } catch (error) {\n warning(true, 'Warning: [Semi Switch] The current browser does not support the focus-visible');\n }\n };\n this.handleBlur = () => {\n this._adapter.setFocusVisible(false);\n };\n }\n init() {\n const {\n disabled\n } = this.getProps();\n this.setDisabled(disabled);\n }\n setChecked(checked) {\n this._adapter.setNativeControlChecked(checked);\n }\n setDisabled(disabled) {\n this._adapter.setNativeControlDisabled(disabled);\n }\n handleChange(checked, e) {\n const propChecked = this.getProps().checked;\n const isControlledComponent = typeof propChecked !== 'undefined';\n if (isControlledComponent) {\n this._adapter.notifyChange(checked, e);\n } else {\n this._adapter.setNativeControlChecked(checked);\n this._adapter.notifyChange(checked, e);\n }\n }\n destroy() {}\n}","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-switch`,\n FOCUS: `${BASE_CLASS_PREFIX}-switch-focus`,\n LARGE: `${BASE_CLASS_PREFIX}-switch-large`,\n SMALL: `${BASE_CLASS_PREFIX}-switch-small`,\n CHECKED: `${BASE_CLASS_PREFIX}-switch-checked`,\n DISABLED: `${BASE_CLASS_PREFIX}-switch-disabled`,\n ACTIVE: `${BASE_CLASS_PREFIX}-switch-active`,\n KNOB: `${BASE_CLASS_PREFIX}-switch-knob`,\n NATIVE_CONTROL: `${BASE_CLASS_PREFIX}-switch-native-control`,\n CHECKED_TEXT: `${BASE_CLASS_PREFIX}-switch-checked-text`,\n UNCHECKED_TEXT: `${BASE_CLASS_PREFIX}-switch-unchecked-text`,\n LOADING_SPIN: `${BASE_CLASS_PREFIX}-switch-loading-spin`,\n LOADING: `${BASE_CLASS_PREFIX}-switch-loading`\n};\nconst strings = {\n SIZE_MAP: ['default', 'small', 'large']\n};\nexport { cssClasses, strings };","import _noop from \"lodash/noop\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport SwitchFoudation from '@douyinfe/semi-foundation/lib/es/switch/foundation';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/switch/constants';\nimport BaseComponent from '../_base/baseComponent';\nimport '@douyinfe/semi-foundation/lib/es/switch/switch.css';\nimport Spin from '../spin';\nclass Switch extends BaseComponent {\n constructor(props) {\n super(props);\n this.handleFocusVisible = event => {\n this.foundation.handleFocusVisible(event);\n };\n this.handleBlur = event => {\n this.foundation.handleBlur();\n };\n this.state = {\n nativeControlChecked: props.defaultChecked || props.checked,\n nativeControlDisabled: false,\n focusVisible: false\n };\n this.switchRef = /*#__PURE__*/React.createRef();\n this.foundation = new SwitchFoudation(this.adapter);\n }\n componentDidMount() {\n this.foundation.init();\n }\n componentDidUpdate(prevProps) {\n if (this.props.checked !== prevProps.checked) {\n this.foundation.setChecked(this.props.checked);\n }\n if (this.props.disabled !== prevProps.disabled) {\n this.foundation.setDisabled(this.props.disabled);\n }\n }\n componentWillUnmount() {\n this.foundation.destroy();\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n setNativeControlChecked: nativeControlChecked => {\n this.setState({\n nativeControlChecked\n });\n },\n setNativeControlDisabled: nativeControlDisabled => {\n this.setState({\n nativeControlDisabled\n });\n },\n setFocusVisible: focusVisible => {\n this.setState({\n focusVisible\n });\n },\n notifyChange: (checked, e) => {\n this.props.onChange(checked, e);\n }\n });\n }\n render() {\n const {\n nativeControlChecked,\n nativeControlDisabled,\n focusVisible\n } = this.state;\n const _a = this.props,\n {\n className,\n style,\n onMouseEnter,\n onMouseLeave,\n size,\n checkedText,\n uncheckedText,\n loading,\n id\n } = _a,\n rest = __rest(_a, [\"className\", \"style\", \"onMouseEnter\", \"onMouseLeave\", \"size\", \"checkedText\", \"uncheckedText\", \"loading\", \"id\"]);\n const wrapperCls = cls(className, {\n [cssClasses.PREFIX]: true,\n [cssClasses.CHECKED]: nativeControlChecked,\n [cssClasses.DISABLED]: nativeControlDisabled,\n [cssClasses.LARGE]: size === 'large',\n [cssClasses.SMALL]: size === 'small',\n [cssClasses.LOADING]: loading,\n [cssClasses.FOCUS]: focusVisible\n });\n const switchProps = {\n type: 'checkbox',\n className: cssClasses.NATIVE_CONTROL,\n disabled: nativeControlDisabled || loading,\n checked: nativeControlChecked || false\n };\n const showCheckedText = checkedText && nativeControlChecked && size !== 'small';\n const showUncheckedText = uncheckedText && !nativeControlChecked && size !== 'small';\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n className: wrapperCls,\n style: style,\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave\n }, this.getDataAttr(rest)), loading ? (/*#__PURE__*/React.createElement(Spin, {\n wrapperClassName: cssClasses.LOADING_SPIN,\n size: size === 'default' ? 'middle' : size\n })) : (/*#__PURE__*/React.createElement(\"div\", {\n className: cssClasses.KNOB,\n \"aria-hidden\": true\n })), showCheckedText ? (/*#__PURE__*/React.createElement(\"div\", {\n className: cssClasses.CHECKED_TEXT,\n \"x-semi-prop\": \"checkedText\"\n }, checkedText)) : null, showUncheckedText ? (/*#__PURE__*/React.createElement(\"div\", {\n className: cssClasses.UNCHECKED_TEXT,\n \"x-semi-prop\": \"uncheckedText\"\n }, uncheckedText)) : null, /*#__PURE__*/React.createElement(\"input\", Object.assign({}, switchProps, {\n ref: this.switchRef,\n id: id,\n role: \"switch\",\n \"aria-checked\": nativeControlChecked,\n \"aria-invalid\": this.props['aria-invalid'],\n \"aria-errormessage\": this.props['aria-errormessage'],\n \"aria-label\": this.props['aria-label'],\n \"aria-labelledby\": this.props['aria-labelledby'],\n \"aria-describedby\": this.props['aria-describedby'],\n \"aria-disabled\": this.props['disabled'],\n onChange: e => this.foundation.handleChange(e.target.checked, e),\n onFocus: e => this.handleFocusVisible(e),\n onBlur: e => this.handleBlur(e)\n })));\n }\n}\nSwitch.propTypes = {\n 'aria-label': PropTypes.string,\n 'aria-labelledby': PropTypes.string,\n 'aria-invalid': PropTypes.bool,\n 'aria-errormessage': PropTypes.string,\n 'aria-describedby': PropTypes.string,\n className: PropTypes.string,\n checked: PropTypes.bool,\n checkedText: PropTypes.node,\n defaultChecked: PropTypes.bool,\n disabled: PropTypes.bool,\n loading: PropTypes.bool,\n onChange: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n style: PropTypes.object,\n size: PropTypes.oneOf(strings.SIZE_MAP),\n uncheckedText: PropTypes.node,\n id: PropTypes.string\n};\nSwitch.defaultProps = {\n disabled: false,\n className: '',\n onChange: _noop,\n loading: false,\n onMouseEnter: _noop,\n onMouseLeave: _noop,\n size: 'default'\n};\nexport default Switch;","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-table`,\n TABLE: `${BASE_CLASS_PREFIX}-table`,\n WRAP: `${BASE_CLASS_PREFIX}-table-wrapper`,\n THEAD: `${BASE_CLASS_PREFIX}-table-thead`,\n TR: `${BASE_CLASS_PREFIX}-table-row`,\n TH: `${BASE_CLASS_PREFIX}-table-row-head`,\n TD: `${BASE_CLASS_PREFIX}-table-row-cell`\n};\nconst strings = {\n SIZE_SMALL: 'small',\n SIZE_MIDDLE: 'middle',\n SIZES: ['small', 'default', 'middle'],\n LAYOUTS: ['', 'auto', 'fixed'],\n PAGINATION_POSITIONS: ['bottom', 'top', 'both'],\n FOOTER_POSITIONS: [false, true, 'left', 'right'],\n SORT_DIRECTIONS: ['ascend', 'descend'],\n FIXED_SET: [false, true, 'left', 'right'],\n ALIGNS: ['left', 'right', 'center'],\n JUSTIFY_CONTENT: ['flex-start', 'flex-end', 'center'],\n SCROLL_HORIZONTAL_POSITIONS: ['left', 'middle', 'right'],\n DEFAULT_KEY_COLUMN_SELECTION: 'column-selection',\n DEFAULT_KEY_COLUMN_EXPAND: 'column-expand',\n DEFAULT_KEY_COLUMN_TITLE: 'column-title',\n DEFAULT_KEY_COLUMN_SORTER: 'column-sorter',\n DEFAULT_KEY_COLUMN_FILTER: 'column-filter',\n DEFAULT_KEY_COLUMN_SCROLLBAR: 'column-scrollbar',\n DEFAULT_COMPONENTS: {\n table: 'table',\n header: {\n outer: 'table',\n wrapper: 'thead',\n row: 'tr',\n cell: 'th'\n },\n body: {\n outer: 'table',\n wrapper: 'tbody',\n row: 'tr',\n cell: 'td'\n },\n footer: {\n wrapper: 'tfoot',\n row: 'tr',\n cell: 'td'\n }\n },\n EXPAND_RELATED_PROPS: ['expandedRowRender', 'dataSource', 'hideExpandedColumn', 'childrenRecordName', 'rowExpandable']\n};\nconst DEFAULT_CELL_BORDER_WITH_BOTTOM = 1;\nconst DEFAULT_CELL_BORDER_WITH_TOP = 0;\nconst DEFAULT_CELL_PADDING_TOP = 16;\nconst DEFAULT_CELL_PADDING_BOTTOM = 16;\nconst DEFAULT_CELL_MIDDLE_PADDING_TOP = 12;\nconst DEFAULT_CELL_MIDDLE_PADDING_BOTTOM = 12;\nconst DEFAULT_CELL_SMALL_PADDING_TOP = 8;\nconst DEFAULT_CELL_SMALL_PADDING_BOTTOM = 8;\nconst DEFAULT_CELL_LINE_HEIGHT = 20;\n// normal size\nconst DEFAULT_VIRTUALIZED_ROW_HEIGHT = DEFAULT_CELL_LINE_HEIGHT + DEFAULT_CELL_BORDER_WITH_BOTTOM + DEFAULT_CELL_BORDER_WITH_TOP + DEFAULT_CELL_PADDING_TOP + DEFAULT_CELL_PADDING_BOTTOM;\nconst DEFAULT_VIRTUALIZED_ROW_MIN_HEIGHT = DEFAULT_CELL_PADDING_TOP + DEFAULT_CELL_PADDING_BOTTOM + DEFAULT_CELL_BORDER_WITH_BOTTOM;\n// middle size\nconst DEFAULT_VIRTUALIZED_ROW_MIDDLE_HEIGHT = DEFAULT_CELL_LINE_HEIGHT + DEFAULT_CELL_BORDER_WITH_BOTTOM + DEFAULT_CELL_BORDER_WITH_TOP + DEFAULT_CELL_MIDDLE_PADDING_TOP + DEFAULT_CELL_MIDDLE_PADDING_BOTTOM;\nconst DEFAULT_VIRTUALIZED_ROW_MIDDLE_MIN_HEIGHT = DEFAULT_CELL_MIDDLE_PADDING_TOP + DEFAULT_CELL_MIDDLE_PADDING_BOTTOM + DEFAULT_CELL_BORDER_WITH_BOTTOM;\n// small size\nconst DEFAULT_VIRTUALIZED_ROW_SMALL_HEIGHT = DEFAULT_CELL_LINE_HEIGHT + DEFAULT_CELL_BORDER_WITH_BOTTOM + DEFAULT_CELL_BORDER_WITH_TOP + DEFAULT_CELL_SMALL_PADDING_BOTTOM + DEFAULT_CELL_SMALL_PADDING_TOP;\nconst DEFAULT_VIRTUALIZED_ROW_SMALL_MIN_HEIGHT = DEFAULT_CELL_SMALL_PADDING_TOP + DEFAULT_CELL_SMALL_PADDING_BOTTOM + DEFAULT_CELL_BORDER_WITH_BOTTOM;\nconst numbers = {\n DEFAULT_PAGE_SIZE: 10,\n DEFAULT_WIDTH_COLUMN_EXPAND: 60,\n DEFAULT_WIDTH_COLUMN_SELECTION: 60,\n DEFAULT_INDENT_WIDTH: 20,\n DEFAULT_CELL_PADDING_LEFT: 16,\n DEFAULT_CELL_PADDING_RIGHT: 16,\n DEFAULT_CELL_PADDING_TOP,\n DEFAULT_CELL_PADDING_BOTTOM,\n DEFAULT_CELL_MIDDLE_PADDING_TOP,\n DEFAULT_CELL_MIDDLE_PADDING_BOTTOM,\n DEFAULT_CELL_SMALL_PADDING_TOP,\n DEFAULT_CELL_SMALL_PADDING_BOTTOM,\n DEFAULT_CELL_BORDER_WIDTH_LEFT: 1,\n DEFAULT_CELL_BORDER_WIDTH_RIGHT: 1,\n DEFAULT_CELL_BORDER_WITH_BOTTOM,\n DEFAULT_CELL_LINE_HEIGHT,\n DEFAULT_VIRTUALIZED_BODY_HEIGHT: 600,\n DEFAULT_VIRTUALIZED_SECTION_ROW_HEIGHT: DEFAULT_VIRTUALIZED_ROW_HEIGHT,\n DEFAULT_VIRTUALIZED_ROW_HEIGHT,\n DEFAULT_VIRTUALIZED_ROW_MIN_HEIGHT,\n DEFAULT_VIRTUALIZED_SECTION_ROW_MIDDLE_HEIGHT: DEFAULT_VIRTUALIZED_ROW_MIDDLE_HEIGHT,\n DEFAULT_VIRTUALIZED_ROW_MIDDLE_HEIGHT,\n DEFAULT_VIRTUALIZED_ROW_MIDDLE_MIN_HEIGHT,\n DEFAULT_VIRTUALIZED_SECTION_ROW_SMALL_HEIGHT: DEFAULT_VIRTUALIZED_ROW_SMALL_HEIGHT,\n DEFAULT_VIRTUALIZED_ROW_SMALL_HEIGHT,\n DEFAULT_VIRTUALIZED_ROW_SMALL_MIN_HEIGHT\n};\nexport { cssClasses, strings, numbers };","class Logger {\n /**\n * specify prefix\n * @param {string} prefix\n */\n constructor(prefix) {\n this._prefix = prefix;\n }\n _isEmpty(value) {\n return value === null || value === undefined || value === '';\n }\n _baseLog() {\n let method = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'log';\n if (typeof console[method] === 'function') {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n const messages = [...args];\n if (!this._isEmpty(this._prefix)) {\n messages.unshift(this._prefix, ':');\n }\n console[method](...messages);\n }\n }\n /* istanbul ignore next */\n log() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n this._baseLog('log', ...args);\n }\n /* istanbul ignore next */\n warn() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n this._baseLog('warn', ...args);\n }\n /* istanbul ignore next */\n error() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n this._baseLog('error', ...args);\n }\n /* istanbul ignore next */\n info() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n this._baseLog('info', ...args);\n }\n}\nexport default Logger;","import _isFunction from \"lodash/isFunction\";\nimport _toString from \"lodash/toString\";\nimport _includes from \"lodash/includes\";\nimport _some from \"lodash/some\";\nimport _findIndex from \"lodash/findIndex\";\nimport _each from \"lodash/each\";\nimport _find from \"lodash/find\";\nimport _filter from \"lodash/filter\";\nimport _get from \"lodash/get\";\nimport _isEqualWith from \"lodash/isEqualWith\";\nimport { strings, numbers } from './constants';\nimport isNullOrUndefined from '../utils/isNullOrUndefined';\nimport Logger from '../utils/Logger';\nexport function equalWith(value, other, customizer) {\n return _isEqualWith(value, other, function (objVal, othVal) {\n if (typeof objVal === 'function' && typeof othVal === 'function') {\n return _toString(objVal) === _toString(othVal);\n }\n if (typeof customizer === 'function') {\n for (var _len = arguments.length, rest = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n rest[_key - 2] = arguments[_key];\n }\n return customizer(objVal, othVal, ...rest);\n }\n // If customizer returns undefined, comparisons are handled by isEqual instead\n return undefined;\n });\n}\nexport function getColumnKey(column, keyPropNames) {\n keyPropNames = Array.isArray(keyPropNames) ? keyPropNames : ['key', 'dataIndex'];\n let key = null;\n _each(keyPropNames, propName => {\n key = _get(column, propName);\n if (key != null) {\n return false;\n }\n return undefined;\n });\n return key;\n}\n/**\n *\n * @param {Array} arr\n * @param {number} [beginIndex] begin index, included\n * @param {number} [endIndex] end index, not included\n * @returns {number}\n */\nexport function arrayAdd() {\n let arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let beginIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n let endIndex = arguments.length > 2 ? arguments[2] : undefined;\n beginIndex = beginIndex < 0 || typeof beginIndex !== 'number' ? 0 : beginIndex;\n endIndex = endIndex > arr.length || typeof endIndex !== 'number' ? arr.length : endIndex;\n let result = 0;\n _each(arr, (value, index) => {\n if (index >= beginIndex && index < endIndex) {\n result += typeof value === 'number' && !isNaN(value) ? value : 0;\n }\n });\n return result;\n}\nexport function isLastLeftFixed(columns, column) {\n let checkKeys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ['key'];\n const leftFixedColumns = _filter(columns, col => col.fixed === true || col.fixed === 'left');\n const index = _findIndex(leftFixedColumns, col => checkKeys.every(key => col[key] != null && col[key] === column[key]));\n return leftFixedColumns.length > 0 && index === leftFixedColumns.length - 1;\n}\nexport function isFirstFixedRight(columns, column) {\n let checkKeys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ['key'];\n const rightFixedColumns = _filter(columns, col => col.fixed === 'right');\n const index = _findIndex(rightFixedColumns, col => checkKeys.every(key => col[key] != null && col[key] === column[key]));\n return rightFixedColumns.length > 0 && index === 0;\n}\nexport function isAnyFixed(columns) {\n let fixedSet = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ['left', true, 'right'];\n if (typeof fixedSet === 'string' || typeof fixedSet === 'boolean') {\n fixedSet = [fixedSet];\n }\n return fixedSet.length > 0 && _some(columns, col => fixedSet.includes(col.fixed));\n}\nexport function isAnyFixedRight(columns) {\n return _some(columns, col => col.fixed === 'right');\n}\nexport function isFixedLeft(column) {\n return ['left', true].includes(_get(column, 'fixed'));\n}\nexport function isFixedRight(column) {\n return ['right'].includes(_get(column, 'fixed'));\n}\nexport function isFixed(column) {\n return isFixedLeft(column) || isFixedRight(column);\n}\nexport function isInnerColumnKey(key) {\n return [strings.DEFAULT_KEY_COLUMN_EXPAND, strings.DEFAULT_KEY_COLUMN_SCROLLBAR, strings.DEFAULT_KEY_COLUMN_SELECTION].includes(key);\n}\nexport function isExpandedColumn(column) {\n return _get(column, 'key') === strings.DEFAULT_KEY_COLUMN_EXPAND;\n}\nexport function isScrollbarColumn(column) {\n return _get(column, 'key') === strings.DEFAULT_KEY_COLUMN_SCROLLBAR;\n}\nexport function isSelectionColumn(column) {\n return _get(column, 'key') === strings.DEFAULT_KEY_COLUMN_SELECTION;\n}\nexport function filterColumns(columns) {\n let ignoreKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [strings.DEFAULT_KEY_COLUMN_SCROLLBAR];\n return _filter(columns, col => !ignoreKeys.includes(col.key));\n}\n/**\n * get width of scroll bar\n * @param {Array} columns\n * @returns {Number|undefined}\n */\nexport function getScrollbarColumnWidth() {\n let columns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n const len = columns.length;\n if (len) {\n const lastColumn = columns[len - 1];\n if (_get(lastColumn, 'key') === strings.DEFAULT_KEY_COLUMN_SCROLLBAR) {\n return _get(lastColumn, 'width', 0);\n }\n }\n}\nexport function getRecordKey(record, rowKey) {\n if (rowKey === undefined) {\n rowKey = 'key';\n }\n return typeof rowKey === 'function' ? rowKey(record) : _get(record, rowKey);\n}\n/**\n * Determine whether the expandedRowKeys includes a key (rowKey will be added to expandedRowKeys when the expand button is clicked)\n * @param {*} expandedRowKeys\n * @param {*} key\n */\nexport function isExpanded(expandedRowKeys, key) {\n return key != null && _includes(expandedRowKeys, key);\n}\n/**\n * Determine whether the selectedKeysSet includes the key\n * @param {Set} selectedRowKeysSet\n * @param {String} key\n */\nexport function isSelected(selectedRowKeysSet, key) {\n return key !== null && selectedRowKeysSet.has(key);\n}\n/**\n * Whether the key is included in the disabledRowKeysSet\n * @param {Set} disabledRowKeysSet\n * @param {String} key\n */\nexport function isDisabled(disabledRowKeysSet, key) {\n return key !== null && disabledRowKeysSet.has(key);\n}\nexport function getRecord(data, recordKey, rowKey) {\n if (rowKey === undefined) {\n rowKey = 'key';\n }\n return _find(data, record => recordKey != null && recordKey !== '' && getRecordKey(record, rowKey) === recordKey);\n}\nexport function getRecordChildren(record, childrenRecordName) {\n if (childrenRecordName === undefined) {\n childrenRecordName = 'children';\n }\n return _get(record, childrenRecordName);\n}\nexport function genExpandedRowKey() {\n let recordKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n let suffix = arguments.length > 1 ? arguments[1] : undefined;\n if (suffix === undefined) {\n suffix = '__expanded_row';\n }\n return recordKey + suffix;\n}\nexport function getDefaultVirtualizedRowConfig() {\n let size = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n let sectionRow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n const config = {};\n if (size === 'small') {\n config.height = sectionRow ? numbers.DEFAULT_VIRTUALIZED_SECTION_ROW_SMALL_HEIGHT : numbers.DEFAULT_VIRTUALIZED_ROW_SMALL_HEIGHT;\n config.minHeight = numbers.DEFAULT_VIRTUALIZED_ROW_SMALL_MIN_HEIGHT;\n } else if (size === 'middle') {\n config.height = sectionRow ? numbers.DEFAULT_VIRTUALIZED_SECTION_ROW_MIDDLE_HEIGHT : numbers.DEFAULT_VIRTUALIZED_ROW_MIDDLE_HEIGHT;\n config.minHeight = numbers.DEFAULT_VIRTUALIZED_ROW_MIDDLE_MIN_HEIGHT;\n } else {\n config.height = sectionRow ? numbers.DEFAULT_VIRTUALIZED_SECTION_ROW_HEIGHT : numbers.DEFAULT_VIRTUALIZED_ROW_HEIGHT;\n config.minHeight = numbers.DEFAULT_VIRTUALIZED_ROW_MIN_HEIGHT;\n }\n return config;\n}\nexport function flattenColumns(cols) {\n let childrenColumnName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'children';\n const list = [];\n if (Array.isArray(cols) && cols.length) {\n for (const col of cols) {\n if (Array.isArray(col[childrenColumnName]) && col[childrenColumnName].length) {\n list.push(...flattenColumns(col[childrenColumnName], childrenColumnName));\n } else {\n warnIfNoDataIndex(col);\n list.push(col);\n }\n }\n }\n return list;\n}\nexport function assignColumnKeys(columns) {\n let childrenColumnName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'children';\n let level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n const sameLevelCols = [];\n _each(columns, (column, index) => {\n if (column.key == null) {\n // if user give column a dataIndex, use it for backup\n const _index = column.dataIndex || index;\n column.key = `${level}-${_index}`;\n }\n if (Array.isArray(column[childrenColumnName]) && column[childrenColumnName].length) {\n sameLevelCols.push(...column[childrenColumnName]);\n }\n });\n if (sameLevelCols.length) {\n assignColumnKeys(sameLevelCols, childrenColumnName, level + 1);\n }\n return columns;\n}\nexport function sliceColumnsByLevel(columns) {\n let targetLevel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n let childrenColumnName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'children';\n let currentLevel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n const slicedColumns = [];\n if (Array.isArray(columns) && columns.length && currentLevel <= targetLevel) {\n columns.forEach(column => {\n const children = column[childrenColumnName];\n if (Array.isArray(children) && children.length && currentLevel < targetLevel) {\n slicedColumns.push(...sliceColumnsByLevel(children, targetLevel, childrenColumnName, currentLevel + 1));\n } else {\n slicedColumns.push(column);\n }\n });\n }\n return slicedColumns;\n}\nexport function getColumnsByLevel(columns) {\n let targetLevel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n let targetColumns = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n let currentLevel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n let childrenColumnName = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'children';\n if (Array.isArray(columns) && columns.length) {\n if (targetLevel === currentLevel) {\n targetColumns.push(...columns);\n } else {\n columns.forEach(column => {\n getColumnsByLevel(column[childrenColumnName], targetLevel, targetColumns, currentLevel + 1, childrenColumnName);\n });\n }\n }\n return targetColumns;\n}\nexport function getAllLevelColumns(columns) {\n let childrenColumnName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'children';\n const all = [];\n if (Array.isArray(columns) && columns.length) {\n all.push([...columns]);\n const sameLevelColumns = [];\n columns.forEach(column => {\n const children = column[childrenColumnName];\n if (Array.isArray(children) && children.length) {\n sameLevelColumns.push(...children);\n }\n });\n if (sameLevelColumns.length) {\n all.push(sameLevelColumns);\n }\n }\n return all;\n}\nexport function getColumnByLevelIndex(columns, index) {\n let level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n let childrenColumnName = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'children';\n const allLevelColumns = getAllLevelColumns(columns, childrenColumnName);\n return allLevelColumns[level][index];\n}\nexport function findColumn(columns, column) {\n let childrenColumnName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'children';\n let found;\n _each(columns, item => {\n if (item && item.key != null && !found) {\n if (item.key === column.key) {\n found = item;\n }\n }\n if (item && Array.isArray(item[childrenColumnName]) && !found) {\n found = findColumn(item[childrenColumnName], column, childrenColumnName);\n }\n if (found) {\n return false;\n }\n return undefined;\n });\n return found;\n}\nexport function expandBtnShouldInRow(props) {\n const {\n expandedRowRender,\n dataSource,\n hideExpandedColumn,\n childrenRecordName,\n rowExpandable\n } = props;\n const hasExpandedRowRender = typeof expandedRowRender === 'function';\n return hideExpandedColumn && hasExpandedRowRender || !hasExpandedRowRender && dataSource.some(record => {\n const children = _get(record, childrenRecordName);\n if (Array.isArray(children) && children.length || rowExpandable(record)) {\n return true;\n } else {\n return false;\n }\n });\n}\n/**\n * merge query\n * @param {*} query\n * @param {*} queries\n */\nexport function mergeQueries(query) {\n let queries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n let _mergedQuery;\n const idx = queries.findIndex(item => {\n if (query.dataIndex === item.dataIndex) {\n _mergedQuery = Object.assign(Object.assign({}, item), query);\n return true;\n }\n return false;\n });\n if (idx > -1) {\n queries.splice(idx, 1, _mergedQuery);\n } else {\n queries.push(_mergedQuery);\n }\n return [...queries];\n}\n/**\n * Replace the width of the newColumns column with the width of the column after resize\n * @param {Object[]} columns columns retain the column width after resize\n * @param {Object[]} newColumns\n */\nexport function withResizeWidth(columns, newColumns) {\n const _newColumns = [...newColumns];\n for (const column of columns) {\n if (!isNullOrUndefined(column.width)) {\n const currentColumn = column.key;\n const columnIndex = _findIndex(_newColumns, item => item.key === currentColumn);\n if (columnIndex !== -1) {\n _newColumns[columnIndex].width = _get(column, 'width');\n }\n }\n }\n return _newColumns;\n}\n/**\n * Pure function version of the same function in table foundation\n * This is not accessible in getDerivedStateFromProps, so fork one out\n */\nexport function getAllDisabledRowKeys(_ref) {\n let {\n dataSource,\n getCheckboxProps,\n childrenRecordName,\n rowKey\n } = _ref;\n const disabledRowKeys = [];\n if (Array.isArray(dataSource) && dataSource.length && typeof getCheckboxProps === 'function') {\n for (const record of dataSource) {\n const props = getCheckboxProps(record);\n const recordKey = typeof rowKey === 'function' ? rowKey(record) : _get(record, rowKey);\n if (props && props.disabled) {\n disabledRowKeys.push(recordKey);\n }\n const children = _get(record, childrenRecordName);\n if (Array.isArray(children) && children.length) {\n const keys = getAllDisabledRowKeys({\n dataSource: children,\n getCheckboxProps\n });\n disabledRowKeys.push(...keys);\n }\n }\n }\n return disabledRowKeys;\n}\nexport function warnIfNoDataIndex(column) {\n if (typeof column === 'object' && column !== null) {\n const {\n filters,\n sorter,\n dataIndex,\n onFilter\n } = column;\n const logger = new Logger('[@douyinfe/semi-ui Table]');\n if ((Array.isArray(filters) || _isFunction(onFilter) || _isFunction(sorter)) && isNullOrUndefined(dataIndex)) {\n logger.warn(`The column with sorter or filter must pass the 'dataIndex' prop`);\n }\n }\n}\n/**\n * Whether is tree table\n */\nexport function isTreeTable(_ref2) {\n let {\n dataSource,\n childrenRecordName = 'children'\n } = _ref2;\n let flag = false;\n if (Array.isArray(dataSource)) {\n for (const data of dataSource) {\n const children = _get(data, childrenRecordName);\n if (Array.isArray(children) && children.length) {\n flag = true;\n break;\n }\n }\n }\n return flag;\n}\nexport function getRTLAlign(align, direction) {\n if (direction === 'rtl') {\n switch (align) {\n case 'left':\n return 'right';\n case 'right':\n return 'left';\n default:\n return align;\n }\n }\n return align;\n}\nexport function getRTLFlexAlign(align, direction) {\n if (direction === 'rtl') {\n switch (align) {\n case 'left':\n return 'flex-end';\n case 'right':\n return 'flex-start';\n default:\n return align;\n }\n } else {\n switch (align) {\n case 'left':\n return 'flex-start';\n case 'right':\n return 'flex-end';\n default:\n return align;\n }\n }\n}\nexport function shouldShowEllipsisTitle(ellipsis) {\n const shouldShowTitle = ellipsis === true || _get(ellipsis, 'showTitle', true);\n return shouldShowTitle;\n}","/* istanbul ignore next */\nclass Store {\n constructor(initialState) {\n this._state = Object.assign({}, initialState);\n this._listeners = [];\n }\n subscribe(listener) {\n this._listeners.push(listener);\n const unsubscribe = () => {\n const index = this._listeners.indexOf(listener);\n if (index > -1) {\n this._listeners.splice(index, 1);\n }\n };\n return unsubscribe;\n }\n setState(state) {\n Object.assign(this._state, Object.assign({}, state));\n for (const listener of this._listeners) {\n if (typeof listener === 'function') {\n listener(this._state);\n }\n }\n }\n getState() {\n return this._state;\n }\n}\nexport default Store;","import _isSet from \"lodash/isSet\";\n/* istanbul ignore next */\nexport function copySet(setA) {\n return new Set(setA);\n}\n/**\n * Set deduplicate\n * @param {*} setA\n * @param {*} setB\n */\nexport function pullAll(setA, setB) {\n if (setA === setB) {\n setB = copySet(setB);\n }\n if (_isSet(setA) && setA.size && _isSet(setB) && setB.size) {\n for (const item of setB) {\n if (setA.has(item)) {\n setA.delete(item);\n }\n }\n return setA;\n }\n return setA;\n}","import { pullAll as setPullAll } from './set';\n/**\n * arrayA remove arrayB\n * @param {array} arrayA\n * @param {array} arrayB\n * @returns {array} new array\n *\n * const arrayA = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * const result = pullAll(arrayA, ['a', 'c'])\n * console.log(result);\n * => ['b', 'b']\n */\nexport function pullAll(arrayA, arrayB) {\n if (arrayA !== null && arrayA.length && arrayB !== null && arrayB.length) {\n const setA = new Set(arrayA);\n const setB = new Set(arrayB);\n const resultSet = setPullAll(setA, setB);\n return Array.from(resultSet);\n }\n return arrayA;\n}\n/**\n * Adapt the descending order\n * @param {Function} fn\n * @param {String} order\n * @returns\n */\nexport function withOrderSort(fn) {\n let order = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'ascend';\n switch (order) {\n case 'descend':\n return (a, b) => {\n const result = Number(fn(a, b, order));\n return result !== 0 ? -result : result;\n };\n case 'ascend':\n default:\n return (a, b) => fn(a, b, order);\n }\n}","import _isUndefined from \"lodash/isUndefined\";\nimport _isEqual from \"lodash/isEqual\";\nimport _slice from \"lodash/slice\";\nimport _isMap from \"lodash/isMap\";\nimport _filter from \"lodash/filter\";\nimport _isSet from \"lodash/isSet\";\nimport _pull from \"lodash/pull\";\nimport _some from \"lodash/some\";\nimport _find from \"lodash/find\";\nimport _each from \"lodash/each\";\nimport _isFunction from \"lodash/isFunction\";\nimport _merge from \"lodash/merge\";\nimport _get from \"lodash/get\";\nimport memoizeOne from 'memoize-one';\nimport BaseFoundation from '../base/foundation';\nimport { strings, numbers } from './constants';\nimport { mergeQueries, flattenColumns, filterColumns } from './utils';\nimport { pullAll, withOrderSort } from '../utils/array';\nclass TableFoundation extends BaseFoundation {\n /**\n * update columns in place, and use default values as initial values if the sorting and filtering columns have no values\n */\n static initColumnsFilteredValueAndSorterOrder(columns) {\n columns.forEach(column => {\n TableFoundation.initFilteredValue(column);\n TableFoundation.initSorterOrder(column);\n });\n return columns;\n }\n /**\n * init filteredValue of filtering column, use defaultFilteredValue or [] when it is undefined\n */\n static initFilteredValue(column) {\n const {\n defaultFilteredValue,\n filteredValue\n } = column;\n // There may be cases where onFilter is empty, such as server-side filtering\n // Because filterValue affects the output of filters, it needs to be initialized here\n if (_isUndefined(filteredValue)) {\n if (Array.isArray(defaultFilteredValue) && defaultFilteredValue.length) {\n column.filteredValue = defaultFilteredValue;\n } else {\n column.filteredValue = [];\n }\n }\n }\n /**\n * init sortOrder of sorting column, use defaultSortOrder or [] when it is undefined\n */\n static initSorterOrder(column) {\n const {\n defaultSortOrder,\n sortOrder,\n sorter\n } = column;\n if (sorter && _isUndefined(sortOrder)) {\n if (!_isUndefined(defaultSortOrder)) {\n column.sortOrder = defaultSortOrder;\n } else {\n column.sortOrder = false;\n }\n }\n }\n constructor(adapter) {\n super(Object.assign({}, adapter));\n /**\n * set page number\n */\n this.setPage = (currentPage, currentPageSize) => {\n currentPage = currentPage || this._adapter.getCurrentPage();\n const currentPagination = this.getState('pagination');\n const {\n dataSource,\n pagination,\n disabledRowKeys,\n allRowKeys\n } = this.getCurrentPageData(null, Object.assign(Object.assign({}, currentPagination), {\n currentPage,\n pageSize: currentPageSize\n }));\n if (!this._pagerIsControlled() && currentPage > 0) {\n this._adapter.setDisabledRowKeys(disabledRowKeys);\n this._adapter.setAllRowKeys(allRowKeys);\n this._adapter.setPagination(pagination);\n this._adapter.setDataSource(dataSource);\n }\n this._notifyChange(pagination, undefined, undefined, {\n changeType: 'pagination'\n });\n };\n /**\n * Cache related data when initializing or updating the calculated dataSource\n * @param {*} filteredSortedDataSource\n */\n this.setCachedFilteredSortedDataSource = filteredSortedDataSource => {\n this._adapter.setCachedFilteredSortedDataSource(filteredSortedDataSource);\n const filteredSortedRowKeys = this.getAllRowKeys(filteredSortedDataSource);\n this._adapter.setCachedFilteredSortedRowKeys(filteredSortedRowKeys);\n };\n this.isSortOrderValid = sortOrder => strings.SORT_DIRECTIONS.includes(sortOrder) || sortOrder === false;\n /**\n * memoized function list\n */\n const handleColumns = this._adapter.getHandleColumns();\n const mergePagination = this._adapter.getMergePagination();\n this.memoizedWithFnsColumns = memoizeOne(handleColumns, _isEqual);\n this.memoizedFilterColumns = memoizeOne(filterColumns);\n this.memoizedFlattenFnsColumns = memoizeOne(flattenColumns);\n this.memoizedPagination = memoizeOne(mergePagination, _isEqual);\n }\n init() {\n const dataSource = [...this.getProp('dataSource')];\n const {\n queries\n } = this._adapter.getStates();\n const filteredSortedDataSource = this.getFilteredSortedDataSource(dataSource, queries);\n const allDataDisabledRowKeys = this.getAllDisabledRowKeys(filteredSortedDataSource);\n const pageData = this.getCurrentPageData(filteredSortedDataSource);\n this.setAdapterPageData(pageData);\n this.initExpandedRowKeys(pageData);\n this.initSelectedRowKeys(pageData);\n // cache dataSource after mount, and then calculate it on demand\n this.setCachedFilteredSortedDataSource(filteredSortedDataSource);\n this.setAllDisabledRowKeys(allDataDisabledRowKeys);\n }\n initExpandedRowKeys() {\n let {\n groups\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n defaultExpandAllRows,\n defaultExpandedRowKeys = [],\n expandedRowKeys: propExpandedRowKeys = [],\n dataSource = [],\n expandAllRows,\n defaultExpandAllGroupRows,\n expandAllGroupRows\n } = this.getProps();\n const expandedRowKeys = [];\n if (defaultExpandAllRows || expandAllRows) {\n this._addNoDuplicatedItemsToArr(expandedRowKeys, this.getAllRowKeys(dataSource), groups && _isMap(groups) && groups.size ? Array.from(groups.keys()) : []);\n } else if (defaultExpandAllGroupRows || expandAllGroupRows) {\n this._addNoDuplicatedItemsToArr(expandedRowKeys, propExpandedRowKeys, groups && _isMap(groups) && groups.size ? Array.from(groups.keys()) : []);\n } else if (Array.isArray(defaultExpandedRowKeys) && defaultExpandedRowKeys.length) {\n this._addNoDuplicatedItemsToArr(expandedRowKeys, defaultExpandedRowKeys);\n } else if (Array.isArray(propExpandedRowKeys) && propExpandedRowKeys.length) {\n this._addNoDuplicatedItemsToArr(expandedRowKeys, propExpandedRowKeys);\n }\n this._adapter.setExpandedRowKeys(expandedRowKeys);\n }\n initSelectedRowKeys(_ref) {\n let {\n disabledRowKeys\n } = _ref;\n const rowSelection = this.getProp('rowSelection');\n const rowKeys = [];\n if (rowSelection) {\n const selectedRowKeys = _get(rowSelection, 'selectedRowKeys');\n const defaultSelectedRowKeys = _get(rowSelection, 'defaultSelectedRowKeys');\n if (Array.isArray(selectedRowKeys)) {\n this._addNoDuplicatedItemsToArr(rowKeys, selectedRowKeys);\n } else if (Array.isArray(defaultSelectedRowKeys)) {\n this._addNoDuplicatedItemsToArr(rowKeys, defaultSelectedRowKeys);\n }\n if (Array.isArray(disabledRowKeys) && disabledRowKeys.length) {\n _pull(rowKeys, ...disabledRowKeys);\n }\n this._adapter.setSelectedRowKeys(rowKeys);\n }\n }\n /**\n * Get filtered and sorted data\n * @param {Object[]} dataSource\n * @param {Object[]} queries\n * @returns {Object[]} sortedDataSource\n */\n getFilteredSortedDataSource(dataSource, queries) {\n const filteredDataSource = this.filterDataSource(dataSource, queries.filter(query => {\n const currentFilteredValue = query.filteredValue ? query.filteredValue : query.defaultFilteredValue;\n return _isFunction(query.onFilter) && Array.isArray(currentFilteredValue) && currentFilteredValue.length;\n }));\n const sortedDataSource = this.sortDataSource(filteredDataSource, queries.filter(query => query && _isFunction(query.sorter)));\n return sortedDataSource;\n }\n /**\n * get current page data\n *\n * @param {Array} dataSource\n * @param {object} pagination\n * @param {object} queries\n * @returns {{dataSource: RecordType[], groups: Map>, pagination: object, disabledRowKeys: string[], queries: BaseColumnProps[], allRowKeys: string[]}}\n */\n getCurrentPageData(dataSource, pagination, queries) {\n const filteredSortedDataSource = this._adapter.getCachedFilteredSortedDataSource();\n dataSource = dataSource == null ? [...filteredSortedDataSource] : dataSource;\n pagination = pagination == null ? this.getState('pagination') && Object.assign({}, this.getState('pagination')) : pagination;\n queries = queries == null ? [...this.getState('queries')] : queries;\n let groups;\n if (this.getProp('groupBy') != null) {\n const {\n groups: groupedGroups,\n dataSource: groupedData\n } = this.groupDataSource(dataSource);\n dataSource = groupedData;\n groups = groupedGroups;\n }\n pagination = this.normalizePagination(pagination, dataSource);\n dataSource = this.limitPageDataSource(dataSource, pagination);\n const disabledRowKeys = this.getAllDisabledRowKeys(dataSource);\n const allRowKeys = this.getAllRowKeys(dataSource);\n const pageData = {\n dataSource,\n groups,\n pagination,\n disabledRowKeys,\n allRowKeys,\n queries\n };\n return pageData;\n }\n /**\n * group dataSource, return grouped row keys\n *\n * @param {*[]} dataSource\n * @param {Function|string} groupBy\n */\n groupDataSource(dataSource, groupBy) {\n groupBy = groupBy == null ? this.getProp('groupBy') : groupBy;\n const groups = new Map();\n const newDataSource = [];\n if (groupBy != null) {\n _each(dataSource, (record, index) => {\n const groupKey = typeof groupBy === 'function' ? groupBy(record) : _get(record, groupBy);\n if (groupKey != null && groupKey !== '') {\n const recordKey = this.getRecordKey(record);\n let group = groups.get(groupKey);\n if (!_isSet(group)) {\n group = new Set([recordKey]);\n groups.set(groupKey, group);\n } else {\n group.add(recordKey);\n }\n }\n });\n }\n if (groups && groups.size) {\n groups.forEach((set, key) => {\n if (_isSet(set)) {\n set.forEach(realKey => {\n newDataSource.push(this._getRecord(realKey));\n });\n }\n });\n } else {\n newDataSource.push(...dataSource);\n }\n return {\n groups,\n dataSource: newDataSource\n };\n }\n /**\n * sort data\n *\n * @param {Array} dataSource\n * @param {Array} sorters\n * @returns {Array}\n */\n sortDataSource(dataSource, sorters) {\n _each(sorters, sorterObj => {\n // const sorterObj = last(sorters) || {};\n const {\n sorter,\n sortOrder,\n defaultSortOrder,\n sortChildrenRecord\n } = sorterObj;\n const currentSortOrder = this.isSortOrderValid(sortOrder) ? sortOrder : defaultSortOrder;\n if (_isFunction(sorter) && currentSortOrder && strings.SORT_DIRECTIONS.includes(currentSortOrder)) {\n if (sortChildrenRecord) {\n const childrenRecordName = this.getProp('childrenRecordName');\n dataSource = dataSource && dataSource.map(record => {\n const children = this._getRecordChildren(record);\n if (Array.isArray(children) && children.length) {\n return Object.assign(Object.assign({}, record), {\n [childrenRecordName]: this.sortDataSource(children, [sorterObj])\n });\n }\n return record;\n });\n }\n dataSource.sort(withOrderSort(sorter, currentSortOrder));\n return false;\n }\n return undefined;\n });\n return dataSource;\n }\n /**\n * filter data source\n *\n * @param {*[]} dataSource\n * @param {*[]} filters\n * @returns {*[]}\n */\n filterDataSource(dataSource, filters) {\n let filteredData = null;\n let hasValidFilters = false;\n const childrenRecordName = this.getProp('childrenRecordName');\n _each(filters, filterObj => {\n const {\n onFilter,\n filteredValue,\n filterChildrenRecord,\n defaultFilteredValue\n } = filterObj;\n const currentFilteredValue = Array.isArray(filteredValue) ? filteredValue : defaultFilteredValue;\n if (typeof onFilter === 'function' && Array.isArray(currentFilteredValue) && currentFilteredValue.length) {\n hasValidFilters = true;\n if (filteredData === null) {\n filteredData = new Map();\n } else {\n dataSource = Array.from(filteredData && filteredData.values());\n filteredData = new Map();\n }\n _each(dataSource, record => {\n _each(currentFilteredValue, value => {\n const childrenRecords = _get(record, childrenRecordName);\n const recordKey = this.getRecordKey(record);\n let filteredChildren;\n if (Array.isArray(childrenRecords) && childrenRecords.length && filterChildrenRecord) {\n filteredChildren = this.filterDataSource(childrenRecords, [filterObj]);\n }\n if (Array.isArray(filteredChildren) && filteredChildren.length) {\n if (recordKey != null) {\n const children = _get(filteredData.get(recordKey), childrenRecordName, []);\n filteredData.set(recordKey, Object.assign(Object.assign({}, record), {\n [childrenRecordName]: filteredChildren.reduce((arr, cur) => {\n if (arr.find(item => this.getRecordKey(item) === this.getRecordKey(cur)) == null) {\n arr.push(cur);\n }\n return arr;\n },\n // @ts-ignore\n [...children])\n }));\n }\n } else if (onFilter(value, record)) {\n filteredData.set(recordKey, record);\n }\n });\n });\n }\n });\n if (hasValidFilters) {\n dataSource = Array.from(filteredData && filteredData.values());\n }\n return dataSource;\n }\n limitPageDataSource(dataSource, pagination) {\n dataSource = dataSource == null ? this.getProp('dataSource') : dataSource;\n pagination = pagination == null ? this.getState('pagination') : pagination;\n let pageData = dataSource;\n const pageNo = _get(pagination, 'currentPage');\n if (this.getProp('pagination') !== false && pageNo && dataSource && pagination && !this._pagerIsControlled()) {\n const {\n pageSize = numbers.DEFAULT_PAGE_SIZE\n } = pagination;\n const start = (pageNo - 1) * pageSize;\n const end = pageNo * pageSize;\n pageData = _slice(dataSource, start, end);\n }\n return pageData;\n }\n normalizePagination(pagination, dataSource) {\n pagination = pagination == null ? this._getPagination() : pagination;\n dataSource = dataSource == null ? this._getDataSource() : dataSource;\n const propPagination = this.getProp('pagination');\n if (pagination) {\n pagination = typeof pagination === 'object' ? Object.assign({}, pagination) : {};\n pagination = _merge({\n total: dataSource && dataSource.length || 0,\n pageSize: numbers.DEFAULT_PAGE_SIZE,\n currentPage: _get(propPagination, 'defaultCurrentPage', 1),\n position: strings.PAGINATION_POSITIONS[0]\n }, pagination);\n if (!this._pagerIsControlled()) {\n const total = _get(propPagination, 'total', dataSource.length);\n const {\n currentPage,\n pageSize\n } = pagination;\n const realTotalPage = Math.ceil(total / pageSize);\n pagination.total = total;\n if (currentPage > realTotalPage) {\n pagination.currentPage = 1;\n }\n }\n }\n return pagination;\n }\n setAdapterPageData() {\n let pageData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n pagination,\n dataSource,\n disabledRowKeys,\n allRowKeys,\n groups\n } = pageData;\n this._adapter.setDisabledRowKeys(disabledRowKeys);\n this._adapter.setAllRowKeys(allRowKeys);\n this._adapter.setPagination(pagination);\n this._adapter.setGroups(groups);\n this._adapter.setDataSource(dataSource);\n }\n destroy() {}\n setAllDisabledRowKeys(disabledRowKeys) {\n this._adapter.setAllDisabledRowKeys(disabledRowKeys);\n }\n handleClick(e) {}\n handleMouseEnter(e) {}\n handleMouseLeave(e) {}\n stopPropagation(e) {\n this._adapter.stopPropagation(e);\n }\n /**\n * Add non-repeating elements to the array itself\n */\n _addNoDuplicatedItemsToArr() {\n let srcArr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n for (var _len = arguments.length, objArrs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n objArrs[_key - 1] = arguments[_key];\n }\n for (const objArr of objArrs) {\n if (Array.isArray(objArr)) {\n for (const item of objArr) {\n if (!srcArr.includes(item)) {\n srcArr.push(item);\n }\n }\n }\n }\n return srcArr;\n }\n _notifyChange(pagination, filters, sorter, extra) {\n pagination = pagination == null ? this._getPagination() : pagination;\n filters = filters == null ? this._getAllFilters() : filters;\n sorter = sorter == null ? this._getAllSorters()[0] : sorter;\n if (_get(this.getProp('scroll'), 'scrollToFirstRowOnChange')) {\n this._adapter.resetScrollY();\n }\n this._adapter.notifyChange({\n pagination: Object.assign({}, pagination),\n filters: [...filters],\n sorter,\n extra: Object.assign({}, extra)\n });\n }\n _rowExpansionIsControlled() {\n return Array.isArray(this.getProp('expandedRowKeys'));\n }\n _pagerIsControlled() {\n return _get(this.getProp('pagination'), 'currentPage') != null;\n }\n _selectionIsControlled() {\n return Array.isArray(_get(this.getProp('rowSelection'), 'selectedRowKeys'));\n }\n /**\n * Determine whether the column sorting is controlled\n * Controlled: the column passed the sortOrder prop\n * @param {String} dataIndex\n * @returns {Boolean}\n */\n _sorterIsControlled(dataIndex) {\n // The basis for judgment should be props columns instead of cachedColumns fix#1141\n const query = dataIndex && this.getQuery(dataIndex, this.getState('flattenColumns'));\n return Boolean(query && query.sortOrder != null);\n }\n /**\n * Determine whether the column is filtered and controlled\n * Controlled: the column passed the filteredValue prop\n * @param {String} dataIndex\n * @returns {Boolean}\n */\n _filterIsControlled(dataIndex) {\n const query = dataIndex && this.getQuery(dataIndex, this.getState('flattenColumns'));\n return Boolean(query && Array.isArray(query.filteredValue));\n }\n _filterShowIsControlled(dataIndex) {\n const query = dataIndex && this.getQuery(dataIndex, this.getState('flattenColumns'));\n return Boolean(query && (query.filterDropdownVisible === true || query.filterDropdownVisible === false));\n }\n _getSelectedRowKeys() {\n const rowSelection = this.getState('rowSelection');\n const selectedRowKeys = _get(rowSelection, 'selectedRowKeys', []);\n return [...selectedRowKeys];\n }\n _getSelectedRowKeysSet() {\n const rowSelection = this.getState('rowSelection');\n const selectedRowKeysSet = _get(rowSelection, 'selectedRowKeysSet', new Set());\n return selectedRowKeysSet;\n }\n _getDataSource() {\n return this.getProp('dataSource') || [];\n }\n _getRecord(realKey) {\n return _find(this.getProp('dataSource'), record => realKey != null && realKey !== '' && this.getRecordKey(record) === realKey);\n }\n _getRecordChildren(record) {\n return _get(record, this.getProp('childrenRecordName'));\n }\n _getPagination() {\n return this.getState('pagination') || {};\n }\n /**\n * Filters are considered valid if filteredValue exists\n */\n _getAllFilters(queries) {\n queries = queries || this.getState('queries');\n const filters = [];\n _each(queries, query => {\n if (Array.isArray(query.filteredValue) && (query.filteredValue.length || this._filterIsControlled(query.dataIndex))) {\n filters.push(query);\n }\n });\n return filters;\n }\n _getAllSorters(queries) {\n queries = queries || this.getState('queries');\n return _filter(queries, query => query.sorter && query.sortOrder);\n }\n _filterQueries(targetQuery, queries) {\n let keys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ['dataIndex'];\n queries = queries == null ? this.getState('queries') : queries;\n const filteredQueries = [];\n const filteredIndexes = [];\n _each(queries, (itQuery, index) => {\n const flag = _some(keys, k => k && targetQuery[k] != null && targetQuery[k] === itQuery[k]);\n if (flag) {\n filteredQueries.push(itQuery);\n filteredIndexes.push(index);\n }\n });\n return {\n filteredQueries,\n filteredIndexes\n };\n }\n _mergeToQueries(query, queries) {\n let keys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ['dataIndex'];\n queries = queries == null ? this.getState('queries') : queries;\n queries = [...queries];\n query = Object.assign({}, query);\n const {\n filteredQueries,\n filteredIndexes\n } = this._filterQueries(query, queries, keys);\n _each(filteredQueries, (curQuery, idx) => {\n // assign(curQuery, query);\n queries[filteredIndexes[idx]] = Object.assign({}, query);\n });\n return queries;\n }\n /**\n * get record real key\n * @param {RecordType} record\n * @returns {string}\n */\n getRecordKey(record) {\n if (!record) {\n return undefined;\n }\n const rowKey = this.getProp('rowKey');\n return typeof rowKey === 'function' ? rowKey(record) : _get(record, rowKey);\n }\n isEmpty(dataSource) {\n dataSource = dataSource == null ? this.getProp('dataSource') : dataSource;\n return !(Array.isArray(dataSource) && dataSource.length > 0);\n }\n handleSelectRow(realKey, selected, e) {\n this.stopPropagation(e);\n if (typeof selected === 'boolean' && realKey != null) {\n const selectedRowKeys = this._getSelectedRowKeys();\n let foundIdx = -1;\n const selectedRow = this.getSelectedRows(null, [realKey])[0];\n let selectedRows;\n if ((foundIdx = selectedRowKeys.indexOf(realKey)) > -1 && selected === false) {\n selectedRowKeys.splice(foundIdx, 1);\n selectedRows = this.getSelectedRows(null, selectedRowKeys);\n if (!this._selectionIsControlled()) {\n this._adapter.setSelectedRowKeys(selectedRowKeys);\n }\n this._adapter.notifySelect(selectedRow, selected, selectedRows, e);\n this._adapter.notifySelectionChange(selectedRowKeys, selectedRows);\n } else if (selectedRowKeys.indexOf(realKey) === -1 && selected === true) {\n selectedRowKeys.push(realKey);\n selectedRows = this.getSelectedRows(null, selectedRowKeys);\n if (!this._selectionIsControlled()) {\n this._adapter.setSelectedRowKeys(selectedRowKeys);\n }\n this._adapter.notifySelect(selectedRow, selected, selectedRows, e);\n this._adapter.notifySelectionChange(selectedRowKeys, selectedRows);\n }\n }\n }\n /**\n * select all rows\n * @param {*} selected The future state of the select all button\n * @param {*} e\n */\n handleSelectAllRow(selected, e) {\n this.stopPropagation(e);\n if (typeof selected === 'boolean') {\n const curSelectedRowKeys = this._getSelectedRowKeys();\n let selectedRowKeys = [...curSelectedRowKeys];\n const selectedRowKeysSet = this._getSelectedRowKeysSet();\n let allRowKeys = [...this._adapter.getCachedFilteredSortedRowKeys()];\n const disabledRowKeys = this._adapter.getAllDisabledRowKeys();\n const disabledRowKeysSet = this._adapter.getAllDisabledRowKeysSet();\n let changedRowKeys;\n // Select all, if not disabled && not in selectedRowKeys\n if (selected) {\n for (const key of allRowKeys) {\n if (!disabledRowKeysSet.has(key) && !selectedRowKeysSet.has(key)) {\n selectedRowKeys.push(key);\n }\n }\n allRowKeys = pullAll(allRowKeys, [...disabledRowKeys, ...curSelectedRowKeys]);\n changedRowKeys = [...allRowKeys];\n } else {\n selectedRowKeys = pullAll(selectedRowKeys, allRowKeys);\n changedRowKeys = [...curSelectedRowKeys];\n }\n const changedRows = this.getSelectedRows(null, changedRowKeys || []);\n const selectedRows = this.getSelectedRows(null, selectedRowKeys || []);\n if (!this._selectionIsControlled()) {\n this._adapter.setSelectedRowKeys(selectedRowKeys);\n }\n this._adapter.notifySelectAll(selected, selectedRows, changedRows, e);\n this._adapter.notifySelectionChange(selectedRowKeys, selectedRows);\n }\n }\n /**\n * row keys => rows\n * @param {*} dataSource\n * @param {*} selectedRowKeys\n * @param {*} selectedRowKeysSet Recursive optimization\n */\n getSelectedRows(dataSource, selectedRowKeys, selectedRowKeysSet) {\n dataSource = dataSource == null ? this._getDataSource() : dataSource;\n selectedRowKeys = selectedRowKeys == null ? this._getSelectedRowKeys() : selectedRowKeys;\n if (!_isSet(selectedRowKeysSet)) {\n selectedRowKeysSet = new Set(selectedRowKeys);\n }\n const childrenRecordName = this.getProp('childrenRecordName');\n const selectedRows = [];\n if (_isSet(selectedRowKeysSet) && selectedRowKeysSet.size && Array.isArray(dataSource) && dataSource.length) {\n // Time complexity optimization, replace the includes operation of array with has of set\n selectedRows.push(...dataSource.filter(data => selectedRowKeysSet.has(this.getRecordKey(data))));\n if (selectedRows.length < selectedRowKeys.length) {\n for (const item of dataSource) {\n const children = _get(item, childrenRecordName);\n if (Array.isArray(children) && children.length) {\n const rows = this.getSelectedRows(children, selectedRowKeys, selectedRowKeysSet);\n selectedRows.push(...rows);\n }\n }\n }\n }\n return selectedRows;\n }\n getAllDisabledRowKeys(dataSource, getCheckboxProps) {\n dataSource = dataSource == null ? this._getDataSource() : dataSource;\n getCheckboxProps = getCheckboxProps == null ? _get(this.getProp('rowSelection'), 'getCheckboxProps') : getCheckboxProps;\n const childrenRecordName = this.getProp('childrenRecordName');\n const disabledRowKeys = [];\n if (Array.isArray(dataSource) && dataSource.length && typeof getCheckboxProps === 'function') {\n for (const record of dataSource) {\n const props = getCheckboxProps(record);\n if (props && props.disabled) {\n disabledRowKeys.push(this.getRecordKey(record));\n }\n const children = _get(record, childrenRecordName);\n if (Array.isArray(children) && children.length) {\n const keys = this.getAllDisabledRowKeys(children, getCheckboxProps);\n disabledRowKeys.push(...keys);\n }\n }\n }\n return disabledRowKeys;\n }\n getAllRowKeys(dataSource) {\n dataSource = dataSource == null ? this._getDataSource() : dataSource;\n const childrenRecordName = this.getProp('childrenRecordName');\n const allRowKeys = [];\n if (Array.isArray(dataSource) && dataSource.length) {\n for (const record of dataSource) {\n const childrenRowKeys = [];\n const children = _get(record, childrenRecordName);\n if (Array.isArray(children) && children.length) {\n childrenRowKeys.push(...this.getAllRowKeys(children));\n }\n allRowKeys.push(this.getRecordKey(record), ...childrenRowKeys);\n }\n }\n return allRowKeys;\n }\n /**\n * Check if the selected item is in allRowKeysSet\n * @param {Array} selectedRowKeys\n * @param {Set} allRowKeysSet\n */\n hasRowSelected(selectedRowKeys, allRowKeysSet) {\n return Boolean(Array.isArray(selectedRowKeys) && selectedRowKeys.length && _isSet(allRowKeysSet) && allRowKeysSet.size && selectedRowKeys.filter(key => allRowKeysSet.has(key)).length);\n }\n /**\n * expand processing function\n * @param {Boolean} expanded\n * @param {String} realKey\n * @param {Event} domEvent\n */\n handleRowExpanded(expanded, realKey, domEvent) {\n this.stopPropagation(domEvent);\n const expandedRowKeys = [...this.getState('expandedRowKeys')];\n const index = expandedRowKeys.indexOf(realKey);\n const keyIsValid = typeof realKey === 'string' || typeof realKey === 'number';\n if (keyIsValid && expanded && index === -1) {\n expandedRowKeys.push(realKey);\n } else if (keyIsValid && !expanded && index > -1) {\n expandedRowKeys.splice(index, 1);\n }\n if (!this._rowExpansionIsControlled()) {\n this._adapter.setExpandedRowKeys(expandedRowKeys);\n }\n const expandedRows = this.getSelectedRows(null, expandedRowKeys);\n let expandedRow = this.getSelectedRows(null, [realKey])[0];\n // groups record processing\n const groups = this._getGroups();\n if (groups) {\n // Construct group expandRow\n if (groups.has(realKey)) {\n expandedRow = {\n groupKey: realKey\n };\n }\n // If expandedRowKeys includes groupKey, add to expandedRows\n for (let i = 0, len = expandedRowKeys.length; i < len; i++) {\n if (groups.has(realKey)) {\n expandedRows.push({\n groupKey: expandedRowKeys[i]\n });\n }\n }\n }\n this._adapter.notifyExpand(expanded, expandedRow, domEvent);\n this._adapter.notifyExpandedRowsChange(expandedRows);\n }\n /**\n * get state.groups\n * @returns {Map|Null}\n */\n _getGroups() {\n const groupBy = this._adapter.getProp('groupBy');\n if (groupBy !== null) {\n const groups = this._adapter.getState('groups');\n return groups;\n }\n return null;\n }\n /**\n * Determine whether you have selected all except for disabled\n * @param {Set} selectedRowKeysSet\n * @param {Set} disabledRowKeysSet\n * @param {Array} allKeys keys after sorted and filtered\n */\n allIsSelected(selectedRowKeysSet, disabledRowKeysSet, allKeys) {\n const filteredAllKeys = _filter(allKeys, key => key != null && !disabledRowKeysSet.has(key));\n if (filteredAllKeys && filteredAllKeys.length) {\n for (const key of filteredAllKeys) {\n if (key != null && !selectedRowKeysSet.has(key)) {\n return false;\n }\n }\n return true;\n } else {\n const isAllSelected = allKeys.length && allKeys.every(rowKey => selectedRowKeysSet.has(rowKey));\n return isAllSelected || false;\n }\n }\n /**\n * This function is not used yet\n * @param {*} selectedRowKeys\n * @param {*} allKeys\n */\n allIsNotSelected(selectedRowKeys, allKeys) {\n for (const key of allKeys) {\n if (key != null && Array.isArray(selectedRowKeys) && selectedRowKeys.includes(key)) {\n return true;\n }\n }\n return false;\n }\n formatPaginationInfo() {\n let pagination = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let defaultPageText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n let info = '';\n const formatPageText = _get(this.getProp('pagination'), 'formatPageText');\n const {\n total,\n pageSize,\n currentPage\n } = pagination;\n const currentStart = Math.min((currentPage - 1) * pageSize + 1, total);\n const currentEnd = Math.min(currentPage * pageSize, total);\n if (formatPageText || formatPageText !== false && defaultPageText && total > 0) {\n info = typeof formatPageText === 'function' ? formatPageText({\n currentStart,\n currentEnd,\n total\n }) : defaultPageText.replace('${currentStart}', currentStart).replace('${currentEnd}', currentEnd).replace('${total}', total);\n }\n return info;\n }\n toggleShowFilter(dataIndex, visible) {\n let filterObj = this.getQuery(dataIndex);\n const filterDropdownVisible = visible;\n filterObj = Object.assign(Object.assign({}, filterObj), {\n filterDropdownVisible\n });\n if (!this._filterShowIsControlled()) {\n // this._adapter.setQuery({\n // ...filterObj,\n // filterDropdownVisible,\n // });\n }\n this._adapter.notifyFilterDropdownVisibleChange(filterDropdownVisible, dataIndex);\n }\n /**\n * Called when the filter changes\n * @param {*} dataIndex\n * @param {*} data\n */\n handleFilterSelect(dataIndex) {\n let data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let query = this.getQuery(dataIndex);\n let queries = [...this._adapter.getState('queries')];\n const {\n filteredValue\n } = data;\n query = Object.assign(Object.assign({}, query), {\n filteredValue\n });\n queries = mergeQueries(query, queries);\n const mergedQueries = this._mergeToQueries(query, null);\n const filters = this._getAllFilters(mergedQueries);\n if (!this._filterIsControlled(dataIndex)) {\n this._adapter.setQueries(queries);\n this.handleClickFilterOrSorter(queries);\n }\n this._notifyChange(null, filters, undefined, {\n changeType: 'filter'\n });\n }\n /**\n * Click the sort button to call\n * @param {*} column\n * @param {*} e\n */\n handleSort() {\n let column = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let e = arguments.length > 1 ? arguments[1] : undefined;\n this.stopPropagation(e);\n const {\n dataIndex\n } = column;\n let queries = this.getState('queries');\n let curQuery = null;\n queries = [...queries];\n _each(queries, (query, idx, arr) => {\n if (query.sorter) {\n const sorterObj = Object.assign({}, query);\n const stateSortOrder = _get(sorterObj, 'sortOrder');\n const defaultSortOrder = _get(sorterObj, 'defaultSortOrder', false);\n let querySortOrder = this.isSortOrderValid(stateSortOrder) ? stateSortOrder : defaultSortOrder;\n if (dataIndex && dataIndex === sorterObj.dataIndex) {\n if (querySortOrder === strings.SORT_DIRECTIONS[0]) {\n querySortOrder = strings.SORT_DIRECTIONS[1];\n } else if (querySortOrder === strings.SORT_DIRECTIONS[1]) {\n querySortOrder = false;\n } else {\n querySortOrder = strings.SORT_DIRECTIONS[0];\n }\n } else {\n // This results in the current click only supports single column sorting\n querySortOrder = false;\n }\n arr[idx] = Object.assign(Object.assign({}, sorterObj), {\n sortOrder: querySortOrder\n });\n if (dataIndex === sorterObj.dataIndex) {\n curQuery = arr[idx];\n }\n }\n });\n if (!this._sorterIsControlled(dataIndex)) {\n this._adapter.setQueries(queries);\n this.handleClickFilterOrSorter(queries);\n }\n // notify sort event\n this._notifyChange(null, null, curQuery, {\n changeType: 'sorter'\n });\n }\n /**\n * Recalculate the cached data after clicking filter or sorter\n * @param {*} queries\n */\n handleClickFilterOrSorter(queries) {\n const dataSource = [...this.getProp('dataSource')];\n const sortedDataSource = this.getFilteredSortedDataSource(dataSource, queries);\n const allDataDisabledRowKeys = this.getAllDisabledRowKeys(sortedDataSource);\n this.setCachedFilteredSortedDataSource(sortedDataSource);\n this.setAllDisabledRowKeys(allDataDisabledRowKeys);\n const pageData = this.getCurrentPageData(sortedDataSource);\n this.setAdapterPageData(pageData);\n }\n getQuery(dataIndex, queries) {\n queries = queries || this.getState('queries');\n if (dataIndex != null) {\n return _find(queries, query => query.dataIndex === dataIndex);\n }\n return undefined;\n }\n getCellWidths(flattenedColumns, flattenedWidths, ignoreScrollBarKey) {\n return this._adapter.getCellWidths(flattenedColumns, flattenedWidths, ignoreScrollBarKey);\n }\n setHeadWidths(headWidths, index) {\n return this._adapter.setHeadWidths(headWidths, index);\n }\n getHeadWidths(index) {\n return this._adapter.getHeadWidths(index);\n }\n mergedRowExpandable(record) {\n return this._adapter.mergedRowExpandable(record);\n }\n setBodyHasScrollbar(bodyHasScrollbar) {\n this._adapter.setBodyHasScrollbar(bodyHasScrollbar);\n }\n}\nexport default TableFoundation;","import PropTypes from 'prop-types';\nimport { strings } from '@douyinfe/semi-foundation/lib/es/table/constants';\nexport default {\n align: PropTypes.oneOf(strings.ALIGNS),\n className: PropTypes.string,\n colSpan: PropTypes.number,\n dataIndex: PropTypes.string,\n defaultSortOrder: PropTypes.oneOf(strings.SORT_DIRECTIONS),\n filterChildrenRecord: PropTypes.bool,\n filterDropdownProps: PropTypes.object,\n filterDropdown: PropTypes.node,\n filterDropdownVisible: PropTypes.bool,\n filterIcon: PropTypes.func,\n filterMultiple: PropTypes.bool,\n filteredValue: PropTypes.arrayOf(PropTypes.any),\n filters: PropTypes.array,\n fixed: PropTypes.oneOf(strings.FIXED_SET),\n onCell: PropTypes.func,\n onFilter: PropTypes.func,\n onFilterDropdownVisibleChange: PropTypes.func,\n onHeaderCell: PropTypes.func,\n onSorterChange: PropTypes.func,\n render: PropTypes.func,\n renderFilterDropdownItem: PropTypes.func,\n sortChildrenRecord: PropTypes.bool,\n sortDirections: PropTypes.arrayOf(PropTypes.string),\n sortOrder: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n sorter: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]),\n title: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n useFullRender: PropTypes.bool,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n showSortTip: PropTypes.bool\n};","import React from 'react';\nimport ColumnShape from './ColumnShape';\nexport default class Column extends React.PureComponent {\n constructor() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n super(props);\n }\n render() {\n return null;\n }\n}\nColumn.propTypes = Object.assign({}, ColumnShape);\nColumn.elementType = 'Column';","import _omit from \"lodash/omit\";\nimport _get from \"lodash/get\";\nimport React from 'react';\nimport Column from './Column';\n/**\n * Convert jsx children into object columns\n * @param {Node} children\n * @returns\n */\nexport default function getColumns(children) {\n if (children) {\n const columns = [];\n React.Children.forEach(children, child => {\n if (/*#__PURE__*/React.isValidElement(child) && (child.type === Column || _get(child, 'type.elementType') === 'Column')) {\n const col = _omit(child.props, ['children']);\n if (Array.isArray(child.props.children) && child.props.children.length) {\n col.children = getColumns(child.props.children);\n }\n columns.push(Object.assign({\n key: child.key\n }, col));\n }\n });\n return columns;\n }\n return [];\n}","import _noop from \"lodash/noop\";\nimport React from 'react';\nconst TableContext = /*#__PURE__*/React.createContext({\n headWidths: [],\n setHeadWidths: _noop,\n handleRowExpanded: _noop\n});\nexport default TableContext;","import React, { useMemo } from 'react';\nimport Context from './table-context';\nconst TableContextProvider = _ref => {\n let {\n children,\n anyColumnFixed,\n flattenedColumns,\n tableWidth,\n headWidths,\n setHeadWidths,\n getHeadWidths,\n getCellWidths,\n handleRowExpanded,\n renderExpandIcon,\n renderSelection,\n getVirtualizedListRef,\n setBodyHasScrollbar,\n direction\n } = _ref;\n const tableContextValue = useMemo(() => ({\n anyColumnFixed,\n flattenedColumns,\n renderExpandIcon,\n renderSelection,\n setHeadWidths,\n getHeadWidths,\n getCellWidths,\n headWidths,\n tableWidth,\n handleRowExpanded,\n getVirtualizedListRef,\n setBodyHasScrollbar,\n direction\n }), [anyColumnFixed, flattenedColumns, renderExpandIcon, renderSelection, setHeadWidths, getHeadWidths, getCellWidths, headWidths, tableWidth, handleRowExpanded, getVirtualizedListRef, setBodyHasScrollbar, direction]);\n return /*#__PURE__*/React.createElement(Context.Provider, {\n value: tableContextValue\n }, children);\n};\nexport default TableContextProvider;","import BaseFoundation from '../base/foundation';\nexport default class TableSelectionCellFoundation extends BaseFoundation {\n handleChange(e) {\n const value = e.target.checked;\n this._adapter.notifyChange(value, e);\n }\n}","import _noop from \"lodash/noop\";\nimport React from 'react';\nimport BaseComponent from '../_base/baseComponent';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/table/constants';\nimport TableSelectionCellFoundation from '@douyinfe/semi-foundation/lib/es/table/tableSelectionCellFoundation';\nimport { Checkbox } from '../checkbox';\n/**\n * render selection cell\n */\nexport default class TableSelectionCell extends BaseComponent {\n get adapter() {\n var _this = this;\n return Object.assign(Object.assign({}, super.adapter), {\n notifyChange: function () {\n return _this.props.onChange(...arguments);\n }\n });\n }\n constructor(props) {\n super(props);\n this.handleChange = e => this.foundation.handleChange(e);\n this.foundation = new TableSelectionCellFoundation(this.adapter);\n }\n render() {\n const {\n selected,\n getCheckboxProps,\n indeterminate,\n disabled,\n prefixCls,\n className\n } = this.props;\n const ariaLabel = this.props['aria-label'];\n let checkboxProps = {\n onChange: this.handleChange,\n disabled,\n indeterminate,\n checked: selected\n };\n if (typeof getCheckboxProps === 'function') {\n checkboxProps = Object.assign(Object.assign({}, checkboxProps), getCheckboxProps());\n }\n const wrapCls = classnames(`${prefixCls}-selection-wrap`, {\n [`${prefixCls}-selection-disabled`]: disabled\n }, className);\n return /*#__PURE__*/React.createElement(\"span\", {\n className: wrapCls\n }, /*#__PURE__*/React.createElement(Checkbox, Object.assign({\n \"aria-label\": ariaLabel\n }, checkboxProps)));\n }\n}\nTableSelectionCell.propTypes = {\n columnTitle: PropTypes.string,\n getCheckboxProps: PropTypes.func,\n type: PropTypes.string,\n onChange: PropTypes.func,\n selected: PropTypes.bool,\n disabled: PropTypes.bool,\n indeterminate: PropTypes.bool,\n prefixCls: PropTypes.string,\n className: PropTypes.string,\n 'aria-label': PropTypes.string\n};\nTableSelectionCell.defaultProps = {\n disabled: false,\n onChange: _noop,\n prefixCls: cssClasses.PREFIX\n};","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-page`\n};\nconst strings = {};\nconst numbers = {\n PAGE_SHOW_MAX: 7,\n REST_PAGE_SHOW_MAX: 5,\n DEFAULT_PAGE_SIZE: 10,\n PAGE_SIZE_OPTION: [10, 20, 40, 100],\n REST_PAGE_MAX_SIZE: 1000000\n};\nexport { cssClasses, strings, numbers };","import BaseFoundation from '../base/foundation';\nimport { numbers } from './constants';\nclass PaginationFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n }\n init() {\n const {\n currentPage,\n total,\n pageSize\n } = this.getStates();\n // If pageSize is set, pageSizeOpts does not work\n this._updateDisabled({\n currentPage,\n total,\n pageSize\n });\n this._updatePageList({\n currentPage,\n total,\n pageSize\n });\n this._registerEventHandler();\n }\n destroy() {\n this._unregisterEventHandler();\n }\n _registerEventHandler() {\n this._adapter.registerKeyDownHandler(this.handleKeyDown);\n }\n _unregisterEventHandler() {\n this._adapter.unregisterKeyDownHandler(this.handleKeyDown);\n }\n _updateDisabled(pageInfo) {\n const {\n currentPage,\n total,\n pageSize\n } = pageInfo;\n const totalPageNum = this._getTotalPageNumber(total, pageSize);\n let prevIsDisabled = false;\n let nextIsDisabled = false;\n if (currentPage === 1) {\n prevIsDisabled = true;\n nextIsDisabled = totalPageNum < 2;\n } else if (currentPage === totalPageNum) {\n prevIsDisabled = false;\n nextIsDisabled = true;\n }\n this._adapter.setDisabled(prevIsDisabled, nextIsDisabled);\n }\n goPage(targetPageIndex) {\n if (targetPageIndex === '...') {\n return;\n }\n const {\n pageSize,\n currentPage\n } = this.getStates();\n const isControlComponent = this._isInProps('currentPage');\n if (targetPageIndex === currentPage) {\n return;\n }\n if (!isControlComponent) {\n this.updatePage(targetPageIndex);\n this._adapter.notifyPageChange(targetPageIndex);\n this._adapter.notifyChange(targetPageIndex, pageSize);\n } else {\n this._adapter.notifyPageChange(targetPageIndex);\n this._adapter.notifyChange(targetPageIndex, pageSize);\n }\n }\n updatePage() {\n let targetPageIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n let total = arguments.length > 1 ? arguments[1] : undefined;\n let pageSize = arguments.length > 2 ? arguments[2] : undefined;\n // maybe undefined or null\n if (total === null || typeof total === 'undefined') {\n total = this.getState('total');\n }\n if (pageSize === null || typeof pageSize === 'undefined') {\n pageSize = this.getState('pageSize');\n }\n this._updateDisabled({\n currentPage: targetPageIndex,\n total,\n pageSize\n });\n this._updatePageList({\n currentPage: targetPageIndex,\n total,\n pageSize\n });\n this._adapter.updateTotal(total);\n this._adapter.setCurrentPage(targetPageIndex);\n this._adapter.updatePageSize(pageSize);\n }\n updateAllPageNumbers(total, pageSize) {\n // only need to update in small size\n const {\n size,\n hoverShowPageSelect,\n disabled\n } = this.getProps();\n if (size !== 'small' || !hoverShowPageSelect || disabled) {\n return;\n } else {\n const pageNumbers = Array.from({\n length: Math.ceil(total / pageSize)\n }, (v, i) => i + 1);\n this._adapter.updateAllPageNumbers(pageNumbers);\n }\n }\n goPrev() {\n const {\n currentPage\n } = this.getStates();\n if (currentPage > 1) {\n this.goPage(currentPage - 1);\n }\n }\n goNext() {\n const {\n currentPage,\n total,\n pageSize\n } = this.getStates();\n const totalPageNum = this._getTotalPageNumber(total, pageSize);\n if (currentPage <= totalPageNum - 1) {\n this.goPage(currentPage + 1);\n }\n }\n _updatePageList(pageListInfo) {\n const {\n currentPage,\n total,\n pageSize\n } = pageListInfo;\n let pageList = [];\n let restLeftPageList = []; // pages before ...\n let restRightPageList = []; // pages after ...\n /** Pager truncation logic (t is the total number of pages, c is the current page):\n - No need to truncate when t<=7 pages\n - When t>7\n - When c<4, the fourth is a truncation symbol (...)\n - When c=4, the sixth is the truncation symbol (...)\n - When 47 时\n - 当 c<4 时,第4个为截断符号(...)\n - 当 c=4 时,第6个为截断符号(...)\n - 当 4 i + 1);\n restLeftPageList = [];\n restRightPageList = [];\n } else {\n switch (true) {\n case currentPage < 4:\n pageList = [1, 2, 3, 4, '...', totalPageNum - 1, totalPageNum];\n // length: (totalPageNum - 1) - 4\n restRightPageList = Array.from({\n length: Math.min(totalPageNum - 6, REST_PAGE_MAX_SIZE)\n }, (v, i) => i + 5);\n restLeftPageList = [];\n break;\n case currentPage === 4:\n pageList = [1, 2, 3, 4, 5, '...', totalPageNum];\n restRightPageList = Array.from({\n length: Math.min(totalPageNum - 6, REST_PAGE_MAX_SIZE)\n }, (v, i) => i + 6);\n restLeftPageList = [];\n break;\n case 4 < currentPage && currentPage < totalPageNum - 3:\n const middle = Array.from({\n length: 3\n }, (v, i) => currentPage + (i - 1));\n pageList = [1].concat('...', middle, '...', totalPageNum);\n // length: total-(currentPage+1)-1\n restRightPageList = Array.from({\n length: Math.min(totalPageNum - currentPage - 2, REST_PAGE_MAX_SIZE)\n }, (v, i) => currentPage + i + 2);\n restLeftPageList = Array.from({\n length: Math.min(currentPage - 3, REST_PAGE_MAX_SIZE)\n }, (v, i) => i + 2);\n break;\n case currentPage - 3 <= currentPage && currentPage <= totalPageNum:\n const right = Array.from({\n length: 5\n }, (v, i) => totalPageNum - (4 - i));\n pageList = [1, '...'].concat(right);\n restRightPageList = [];\n restLeftPageList = Array.from({\n length: Math.min(right[0] - 2, REST_PAGE_MAX_SIZE)\n }, (v, i) => i + 2);\n break;\n default:\n break;\n }\n }\n this._adapter.setPageList({\n pageList,\n restLeftPageList,\n restRightPageList\n });\n // this._adapter.setRestLeftPageList(restLeftPageList);\n // this._adapter.setRestRightPageList(restRightPageList);\n }\n changePageSize(newPageSize) {\n const {\n pageSize\n } = this.getStates();\n this._adapter.updatePageSize(newPageSize);\n this._adapter.notifyPageSizeChange(newPageSize);\n const {\n total,\n currentPage\n } = this.getStates();\n // After converting the switching page capacity, which page is the current page\n const currentPageFirstItemIndex = (currentPage - 1) * pageSize + 1;\n const newCurrentPage = Math.ceil(currentPageFirstItemIndex / newPageSize);\n this.updatePage(newCurrentPage, total, newPageSize);\n if (currentPage !== newCurrentPage) {\n this._adapter.notifyPageChange(newCurrentPage);\n }\n this._adapter.notifyChange(newCurrentPage, newPageSize);\n }\n // TODO handle tab/enter events\n handleKeyDown() {}\n // If pageSize is not in the Opts array, insert it\n pageSizeInOpts() {\n const {\n pageSizeOpts\n } = this.getProps();\n const {\n pageSize\n } = this.getStates();\n const newPageSizeOpts = [...pageSizeOpts];\n if (newPageSizeOpts.indexOf(pageSize) === -1) {\n const firstLargerIndex = newPageSizeOpts.findIndex(el => el > pageSize);\n newPageSizeOpts.splice(firstLargerIndex, 0, pageSize);\n }\n return newPageSizeOpts;\n }\n handleQuickJumpNumberChange(targetPage) {\n this._adapter.updateQuickJumpPage(targetPage);\n }\n _handleQuickJump(quickJumpPage) {\n let page = Number(quickJumpPage);\n const {\n pageSize,\n total\n } = this.getStates();\n const totalPageNum = this._getTotalPageNumber(total, pageSize);\n if (Number.isNaN(page)) {\n return;\n }\n // If the user input is greater than totalPage\n if (page > totalPageNum) {\n page = totalPageNum;\n }\n if (page <= 0) {\n page = 1;\n }\n // clear inputnumber\n this._adapter.updateQuickJumpPage('');\n this.goPage(page);\n }\n handleQuickJumpBlur() {\n const {\n quickJumpPage\n } = this.getStates();\n // no need to operate when inputnumber blur & quickJumpPage is empty\n if (typeof quickJumpPage === 'string' && quickJumpPage || typeof quickJumpPage === 'number') {\n this._handleQuickJump(quickJumpPage);\n }\n }\n handleQuickJumpEnterPress(targetPage) {\n this._handleQuickJump(targetPage);\n }\n _getTotalPageNumber(total, pageSize) {\n const totalPageNum = Math.ceil(total / pageSize);\n return totalPageNum;\n }\n}\nexport default PaginationFoundation;","import _noop from \"lodash/noop\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\n/* eslint-disable jsx-a11y/no-noninteractive-element-to-interactive-role */\nimport React from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { FixedSizeList as List } from 'react-window';\nimport PaginationFoundation from '@douyinfe/semi-foundation/lib/es/pagination/foundation';\nimport { cssClasses, numbers } from '@douyinfe/semi-foundation/lib/es/pagination/constants';\nimport '@douyinfe/semi-foundation/lib/es/pagination/pagination.css';\nimport { numbers as popoverNumbers } from '@douyinfe/semi-foundation/lib/es/popover/constants';\nimport { IconChevronLeft, IconChevronRight } from '@douyinfe/semi-icons';\nimport warning from '@douyinfe/semi-foundation/lib/es/utils/warning';\nimport ConfigContext from '../configProvider/context';\nimport LocaleConsumer from '../locale/localeConsumer';\nimport Select from '../select/index';\nimport InputNumber from '../inputNumber/index';\nimport BaseComponent from '../_base/baseComponent';\nimport Popover from '../popover/index';\nconst prefixCls = cssClasses.PREFIX;\nconst {\n Option\n} = Select;\nexport default class Pagination extends BaseComponent {\n constructor(props) {\n super(props);\n const total = props.total;\n const pageSize = props.pageSize || props.pageSizeOpts[0] || numbers.DEFAULT_PAGE_SIZE; // Use pageSize first, use the first of pageSizeOpts when not, use the default value when none\n const shouldFillAllNumber = props.size === 'small' && props.hoverShowPageSelect && !props.disabled;\n this.state = {\n total,\n showTotal: props.showTotal,\n currentPage: props.currentPage || props.defaultCurrentPage,\n pageSize,\n pageList: [],\n prevDisabled: false,\n nextDisabled: false,\n restLeftPageList: [],\n restRightPageList: [],\n quickJumpPage: '',\n allPageNumbers: shouldFillAllNumber ? Array.from({\n length: Math.ceil(total / pageSize)\n }, (v, i) => i + 1) : [] // only need to count in smallPage mode, when props.size = small\n };\n this.foundation = new PaginationFoundation(this.adapter);\n this.renderDefaultPage = this.renderDefaultPage.bind(this);\n this.renderSmallPage = this.renderSmallPage.bind(this);\n warning(Boolean(props.showSizeChanger && props.hideOnSinglePage), '[Semi Pagination] You should not use showSizeChanger and hideOnSinglePage in ths same time. At this time, hideOnSinglePage no longer takes effect, otherwise there may be a problem that the switch entry disappears');\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n setPageList: pageListState => {\n const {\n pageList,\n restLeftPageList,\n restRightPageList\n } = pageListState;\n this.setState({\n pageList,\n restLeftPageList,\n restRightPageList\n });\n },\n setDisabled: (prevIsDisabled, nextIsDisabled) => {\n this.setState({\n prevDisabled: prevIsDisabled,\n nextDisabled: nextIsDisabled\n });\n },\n updateTotal: total => this.setState({\n total\n }),\n updatePageSize: pageSize => this.setState({\n pageSize\n }),\n updateQuickJumpPage: quickJumpPage => this.setState({\n quickJumpPage\n }),\n updateAllPageNumbers: allPageNumbers => this.setState({\n allPageNumbers\n }),\n setCurrentPage: pageIndex => {\n this.setState({\n currentPage: pageIndex\n });\n },\n registerKeyDownHandler: handler => {\n document.addEventListener('keydown', handler);\n },\n unregisterKeyDownHandler: handler => {\n document.removeEventListener('keydown', handler);\n },\n notifyPageChange: pageIndex => {\n this.props.onPageChange(pageIndex);\n },\n notifyPageSizeChange: pageSize => {\n this.props.onPageSizeChange(pageSize);\n },\n notifyChange: (pageIndex, pageSize) => {\n this.props.onChange(pageIndex, pageSize);\n }\n });\n }\n componentDidMount() {\n this.foundation.init();\n }\n componentWillUnmount() {\n this.foundation.destroy();\n }\n componentDidUpdate(prevProps) {\n const pagerProps = {\n currentPage: this.props.currentPage,\n total: this.props.total,\n pageSize: this.props.pageSize\n };\n let pagerHasChanged = false;\n let allPageNumberNeedUpdate = false;\n if (prevProps.currentPage !== this.props.currentPage) {\n pagerHasChanged = true;\n // this.foundation.updatePage(this.props.currentPage);\n }\n if (prevProps.total !== this.props.total) {\n pagerHasChanged = true;\n allPageNumberNeedUpdate = true;\n }\n if (prevProps.pageSize !== this.props.pageSize) {\n pagerHasChanged = true;\n allPageNumberNeedUpdate = true;\n }\n if (pagerHasChanged) {\n this.foundation.updatePage(pagerProps.currentPage, pagerProps.total, pagerProps.pageSize);\n }\n if (allPageNumberNeedUpdate) {\n this.foundation.updateAllPageNumbers(pagerProps.total, pagerProps.pageSize);\n }\n }\n renderPrevBtn() {\n const {\n prevText,\n disabled\n } = this.props;\n const {\n prevDisabled\n } = this.state;\n const isDisabled = prevDisabled || disabled;\n const preClassName = classNames({\n [`${prefixCls}-item`]: true,\n [`${prefixCls}-prev`]: true,\n [`${prefixCls}-item-disabled`]: isDisabled\n });\n return /*#__PURE__*/React.createElement(\"li\", {\n role: \"button\",\n \"aria-disabled\": isDisabled ? true : false,\n \"aria-label\": \"Previous\",\n onClick: e => !isDisabled && this.foundation.goPrev(e),\n className: preClassName,\n \"x-semi-prop\": \"prevText\"\n }, prevText || /*#__PURE__*/React.createElement(IconChevronLeft, {\n size: \"large\"\n }));\n }\n renderNextBtn() {\n const {\n nextText,\n disabled\n } = this.props;\n const {\n nextDisabled\n } = this.state;\n const isDisabled = nextDisabled || disabled;\n const nextClassName = classNames({\n [`${prefixCls}-item`]: true,\n [`${prefixCls}-item-disabled`]: isDisabled,\n [`${prefixCls}-next`]: true\n });\n return /*#__PURE__*/React.createElement(\"li\", {\n role: \"button\",\n \"aria-disabled\": isDisabled ? true : false,\n \"aria-label\": \"Next\",\n onClick: e => !isDisabled && this.foundation.goNext(e),\n className: nextClassName,\n \"x-semi-prop\": \"nextText\"\n }, nextText || /*#__PURE__*/React.createElement(IconChevronRight, {\n size: \"large\"\n }));\n }\n renderPageSizeSwitch(locale) {\n // rtl modify the default position\n const {\n direction\n } = this.context;\n const defaultPopoverPosition = direction === 'rtl' ? 'bottomRight' : 'bottomLeft';\n const {\n showSizeChanger,\n popoverPosition = defaultPopoverPosition,\n disabled,\n popoverZIndex\n } = this.props;\n const {\n pageSize\n } = this.state;\n const switchCls = classNames(`${prefixCls}-switch`);\n if (!showSizeChanger) {\n return null;\n }\n const newPageSizeOpts = this.foundation.pageSizeInOpts();\n const pageSizeToken = locale.pageSize;\n // Display pageSize in a specific language format order\n const options = newPageSizeOpts.map(size => (/*#__PURE__*/React.createElement(Option, {\n value: size,\n key: size\n }, /*#__PURE__*/React.createElement(\"span\", null, pageSizeToken.replace('${pageSize}', size.toString())))));\n return /*#__PURE__*/React.createElement(\"div\", {\n className: switchCls\n }, /*#__PURE__*/React.createElement(Select, {\n \"aria-label\": \"Page size selector\",\n disabled: disabled,\n onChange: newPageSize => this.foundation.changePageSize(newPageSize),\n value: pageSize,\n key: pageSize,\n position: popoverPosition || 'bottomRight',\n clickToHide: true,\n zIndex: popoverZIndex,\n dropdownClassName: `${prefixCls}-select-dropdown`\n }, options));\n }\n renderQuickJump(locale) {\n const {\n showQuickJumper,\n disabled\n } = this.props;\n const {\n quickJumpPage,\n total,\n pageSize\n } = this.state;\n if (!showQuickJumper) {\n return null;\n }\n const totalPageNum = this.foundation._getTotalPageNumber(total, pageSize);\n const isDisabled = totalPageNum === 1 || disabled;\n const quickJumpCls = classNames({\n [`${prefixCls}-quickjump`]: true,\n [`${prefixCls}-quickjump-disabled`]: isDisabled\n });\n return /*#__PURE__*/React.createElement(\"div\", {\n className: quickJumpCls\n }, /*#__PURE__*/React.createElement(\"span\", null, locale.jumpTo), /*#__PURE__*/React.createElement(InputNumber, {\n value: quickJumpPage,\n className: `${prefixCls}-quickjump-input-number`,\n hideButtons: true,\n disabled: isDisabled,\n onBlur: e => this.foundation.handleQuickJumpBlur(),\n onEnterPress: e => this.foundation.handleQuickJumpEnterPress(e.target.value),\n onChange: v => this.foundation.handleQuickJumpNumberChange(v)\n }), /*#__PURE__*/React.createElement(\"span\", null, locale.page));\n }\n renderPageList() {\n const {\n pageList,\n currentPage,\n restLeftPageList,\n restRightPageList\n } = this.state;\n const {\n popoverPosition,\n popoverZIndex,\n disabled\n } = this.props;\n return pageList.map((page, i) => {\n const pageListClassName = classNames(`${prefixCls}-item`, {\n [`${prefixCls}-item-active`]: currentPage === page,\n [`${prefixCls}-item-all-disabled`]: disabled,\n [`${prefixCls}-item-all-disabled-active`]: currentPage === page && disabled\n // [`${prefixCls}-item-rest-opening`]: (i < 3 && isLeftRestHover && page ==='...') || (i > 3 && isRightRestHover && page === '...')\n });\n const pageEl = /*#__PURE__*/React.createElement(\"li\", {\n key: `${page}${i}`,\n onClick: () => !disabled && this.foundation.goPage(page, i),\n className: pageListClassName,\n \"aria-label\": page === '...' ? 'More' : `Page ${page}`,\n \"aria-current\": currentPage === page ? \"page\" : false\n }, page);\n if (page === '...' && !disabled) {\n let content;\n i < 3 ? content = restLeftPageList : content = restRightPageList;\n return /*#__PURE__*/React.createElement(Popover, {\n rePosKey: this.props.currentPage,\n trigger: \"hover\",\n // onVisibleChange={visible=>this.handleRestHover(visible, i < 3 ? 'left' : 'right')}\n content: this.renderRestPageList(content),\n key: `${page}${i}`,\n position: popoverPosition,\n zIndex: popoverZIndex\n }, pageEl);\n }\n return pageEl;\n });\n }\n renderRestPageList(restList) {\n // The number of pages may be tens of thousands, here is virtualized with the help of react-window\n const {\n direction\n } = this.context;\n const className = classNames(`${prefixCls}-rest-item`);\n const count = restList.length;\n const row = item => {\n const {\n index,\n style\n } = item;\n const page = restList[index];\n return /*#__PURE__*/React.createElement(\"div\", {\n role: \"listitem\",\n key: `${page}${index}`,\n className: className,\n onClick: () => this.foundation.goPage(page, index),\n style: style,\n \"aria-label\": `${page}`\n }, page);\n };\n const itemHeight = 32;\n const listHeight = count >= 5 ? itemHeight * 5 : itemHeight * count;\n return (\n /*#__PURE__*/\n // @ts-ignore skip type check cause react-window not update with @types/react 18\n React.createElement(List, {\n className: `${prefixCls}-rest-list`,\n itemData: restList,\n itemSize: itemHeight,\n width: 78,\n itemCount: count,\n height: listHeight,\n style: {\n direction\n }\n }, row)\n );\n }\n renderSmallPageSelect(content) {\n const allPageNumbers = this.state.allPageNumbers;\n const pageList = this.renderRestPageList(allPageNumbers);\n return /*#__PURE__*/React.createElement(Popover, {\n content: pageList\n }, content);\n }\n renderSmallPage(locale) {\n const _a = this.props,\n {\n className,\n style,\n hideOnSinglePage,\n hoverShowPageSelect,\n showSizeChanger,\n disabled\n } = _a,\n rest = __rest(_a, [\"className\", \"style\", \"hideOnSinglePage\", \"hoverShowPageSelect\", \"showSizeChanger\", \"disabled\"]);\n const paginationCls = classNames(`${prefixCls}-small`, prefixCls, className, {\n [`${prefixCls}-disabled`]: disabled\n });\n const {\n currentPage,\n total,\n pageSize\n } = this.state;\n const totalPageNum = Math.ceil(total / pageSize);\n if (totalPageNum < 2 && hideOnSinglePage && !showSizeChanger) {\n return null;\n }\n const pageCls = classNames({\n [`${prefixCls}-item`]: true,\n [`${prefixCls}-item-small`]: true,\n [`${prefixCls}-item-all-disabled`]: disabled\n });\n const content = /*#__PURE__*/React.createElement(\"div\", {\n className: pageCls\n }, currentPage, \"/\", totalPageNum, \" \");\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n className: paginationCls,\n style: style\n }, this.getDataAttr(rest)), this.renderPrevBtn(), hoverShowPageSelect && !disabled ? this.renderSmallPageSelect(content) : content, this.renderNextBtn(), this.renderQuickJump(locale));\n }\n renderDefaultPage(locale) {\n const {\n total,\n pageSize\n } = this.state;\n const _a = this.props,\n {\n showTotal,\n className,\n style,\n hideOnSinglePage,\n showSizeChanger,\n disabled\n } = _a,\n rest = __rest(_a, [\"showTotal\", \"className\", \"style\", \"hideOnSinglePage\", \"showSizeChanger\", \"disabled\"]);\n const paginationCls = classNames(className, `${prefixCls}`, {\n [`${prefixCls}-disabled`]: disabled\n });\n const showTotalCls = `${prefixCls}-total`;\n const totalPageNum = Math.ceil(total / pageSize);\n if (totalPageNum < 2 && hideOnSinglePage && !showSizeChanger) {\n return null;\n }\n const totalNum = Math.ceil(total / pageSize);\n const totalToken = locale.total.replace('${total}', totalNum.toString());\n return /*#__PURE__*/React.createElement(\"ul\", Object.assign({\n className: paginationCls,\n style: style\n }, this.getDataAttr(rest)), showTotal ? (/*#__PURE__*/React.createElement(\"span\", {\n className: showTotalCls\n }, totalToken)) : null, this.renderPrevBtn(), this.renderPageList(), this.renderNextBtn(), this.renderPageSizeSwitch(locale), this.renderQuickJump(locale));\n }\n render() {\n const {\n size\n } = this.props;\n return /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Pagination\"\n }, locale => size === 'small' ? this.renderSmallPage(locale) : this.renderDefaultPage(locale));\n }\n}\nPagination.contextType = ConfigContext;\nPagination.propTypes = {\n total: PropTypes.number,\n showTotal: PropTypes.bool,\n pageSize: PropTypes.number,\n pageSizeOpts: PropTypes.array,\n size: PropTypes.string,\n currentPage: PropTypes.number,\n defaultCurrentPage: PropTypes.number,\n onPageChange: PropTypes.func,\n onPageSizeChange: PropTypes.func,\n onChange: PropTypes.func,\n prevText: PropTypes.node,\n nextText: PropTypes.node,\n showSizeChanger: PropTypes.bool,\n popoverZIndex: PropTypes.number,\n popoverPosition: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n hideOnSinglePage: PropTypes.bool,\n hoverShowPageSelect: PropTypes.bool,\n showQuickJumper: PropTypes.bool,\n disabled: PropTypes.bool\n};\nPagination.defaultProps = {\n total: 1,\n popoverZIndex: popoverNumbers.DEFAULT_Z_INDEX,\n showTotal: false,\n pageSize: null,\n pageSizeOpts: numbers.PAGE_SIZE_OPTION,\n defaultCurrentPage: 1,\n size: 'default',\n onPageChange: _noop,\n onPageSizeChange: _noop,\n onChange: _noop,\n showSizeChanger: false,\n className: '',\n hideOnSinglePage: false,\n showQuickJumper: false,\n disabled: false\n};","import _isFunction from \"lodash/isFunction\";\nimport _get from \"lodash/get\";\nimport React, { PureComponent, isValidElement } from 'react';\nimport PropTypes from 'prop-types';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/table/constants';\nimport Pagination from '../pagination';\nexport default class TablePagination extends PureComponent {\n render() {\n const {\n pagination,\n prefixCls,\n info,\n renderPagination\n } = this.props;\n const total = _get(pagination, 'total');\n const customPagination = renderPagination && _isFunction(renderPagination) ? renderPagination(pagination) : null;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-pagination-outer`\n }, /*#__PURE__*/isValidElement(customPagination) ? customPagination : (/*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixCls}-pagination-info`\n }, info), /*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixCls}-pagination-wrapper`\n }, total > 0 ? /*#__PURE__*/React.createElement(Pagination, Object.assign({}, pagination, {\n key: _get(pagination, 'pageSize', 'pagination')\n })) : null))));\n }\n}\nTablePagination.propTypes = {\n style: PropTypes.object,\n prefixCls: PropTypes.string,\n pagination: PropTypes.object,\n info: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n renderPagination: PropTypes.func\n};\nTablePagination.defaultProps = {\n prefixCls: cssClasses.PREFIX\n};","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M1.1 2.58A1 1 0 0 1 2 2h20a1 1 0 0 1 .76 1.65l-8.2 9.18V21a1 1 0 0 1-1.44.9l-3.07-2a1 1 0 0 1-.55-.9v-6.17L1.24 3.65a1 1 0 0 1-.15-1.07Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'filter');\nexport default IconComponent;","import BaseFoundation from '../base/foundation';\nimport warning from '../utils/warning';\nexport default class RadioFoundation extends BaseFoundation {\n constructor() {\n super(...arguments);\n this.handleFocusVisible = event => {\n const {\n target\n } = event;\n try {\n if (target.matches(':focus-visible')) {\n this._adapter.setFocusVisible(true);\n }\n } catch (error) {\n warning(true, 'Warning: [Semi Radio] The current browser does not support the focus-visible');\n }\n };\n this.handleBlur = () => {\n this._adapter.setFocusVisible(false);\n };\n }\n init() {\n const {\n children,\n extra,\n extraId,\n addonId\n } = this._adapter.getProps();\n if (children && !addonId) {\n this._adapter.setAddonId();\n }\n if (extra && !extraId) {\n this._adapter.setExtraId();\n }\n }\n setHover(hover) {\n this._adapter.setHover(hover);\n }\n setChecked(checked) {\n this._adapter.setChecked(checked);\n }\n}","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst radioClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-radio`,\n INNER: `${BASE_CLASS_PREFIX}-radio-inner`,\n TEXT: `${BASE_CLASS_PREFIX}-radio-text`,\n INPUT: `${BASE_CLASS_PREFIX}-radio-input`,\n CHECKED: `${BASE_CLASS_PREFIX}-radio-checked`,\n DISABLED: `${BASE_CLASS_PREFIX}-radio-disabled`,\n BUTTON: `${BASE_CLASS_PREFIX}-radio-button`\n};\nconst radioGroupClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-radioGroup`,\n INNER: `${BASE_CLASS_PREFIX}-radioGroup-inner`,\n TEXT: `${BASE_CLASS_PREFIX}-radioGroup-text`,\n INPUT: `${BASE_CLASS_PREFIX}-radioGroup-input`,\n CHECKED: `${BASE_CLASS_PREFIX}-radioGroup-checked`,\n DISABLED: `${BASE_CLASS_PREFIX}-radioGroup-disabled`\n};\nconst strings = {\n DIRECTION_SET: ['horizontal', 'vertical'],\n DEFAULT_DIRECTION: 'horizontal',\n MODE: ['advanced', ''],\n TYPE_DEFAULT: 'default',\n TYPE_BUTTON: 'button',\n TYPE_CARD: 'card',\n TYPE_PURECARD: 'pureCard',\n BUTTON_SIZE: ['middle', 'small', 'large']\n};\nconst numbers = {};\nexport { radioClasses, radioGroupClasses, strings, numbers };","import BaseFoundation from '../base/foundation';\nexport default class RadioInnerFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n }\n init() {\n const checked = this._adapter.getProp('checked');\n const defaultChecked = this._adapter.getProp('defaultChecked');\n this.setChecked(checked || defaultChecked);\n }\n setChecked(checked) {\n this._adapter.setNativeControlChecked(checked);\n }\n getChecked() {\n return this._adapter.getProp('checked');\n }\n handleChange(e) {\n const isControlledMode = 'checked' in this.getProps();\n const {\n checked\n } = e.target;\n const stopPropagation = () => {\n e.stopPropagation();\n };\n const preventDefault = () => {\n e.preventDefault();\n };\n const cbValue = {\n target: Object.assign(Object.assign({}, this.getProps()), {\n checked\n }),\n stopPropagation,\n preventDefault\n };\n if (isControlledMode) {\n this._adapter.notifyChange(cbValue);\n } else {\n this.setChecked(checked);\n this._adapter.notifyChange(cbValue);\n }\n }\n destroy() {}\n}","import React from 'react';\nconst Context = /*#__PURE__*/React.createContext(null);\nexport default Context;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 12,\n cy: 12,\n r: 5,\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'radio');\nexport default IconComponent;","import _noop from \"lodash/noop\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport RadioInnerFoundation from '@douyinfe/semi-foundation/lib/es/radio/radioInnerFoundation';\nimport BaseComponent from '../_base/baseComponent';\nimport { radioClasses as css } from '@douyinfe/semi-foundation/lib/es/radio/constants';\nimport Context from './context';\nimport classnames from 'classnames';\nimport { IconRadio } from '@douyinfe/semi-icons';\nclass RadioInner extends BaseComponent {\n constructor(props) {\n super(props);\n this.state = {\n checked: false\n };\n this.foundation = new RadioInnerFoundation(this.adapter);\n this.onChange = this.onChange.bind(this);\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n setNativeControlChecked: checked => {\n this.setState({\n checked\n });\n },\n notifyChange: e => {\n this.props.onChange(e);\n }\n });\n }\n componentDidMount() {\n this.foundation.init();\n }\n componentDidUpdate(prevProps) {\n if (prevProps.checked !== this.props.checked) {\n this.foundation.setChecked(this.props.checked);\n }\n }\n componentWillUnmount() {\n this.foundation.destroy();\n }\n blur() {\n this.inputEntity.blur();\n }\n focus() {\n const {\n preventScroll\n } = this.props;\n this.inputEntity.focus({\n preventScroll\n });\n }\n onChange(e) {\n this.foundation.handleChange(e);\n }\n render() {\n const {\n disabled,\n mode,\n autoFocus,\n name,\n isButtonRadio,\n isPureCardRadioGroup,\n addonId,\n extraId,\n 'aria-label': ariaLabel,\n focusInner,\n onInputFocus,\n onInputBlur\n } = this.props;\n const {\n checked\n } = this.state;\n const prefix = this.props.prefixCls || css.PREFIX;\n const wrapper = classnames({\n [`${prefix}-inner`]: true,\n [`${prefix}-inner-checked`]: Boolean(checked),\n [`${prefix}-inner-buttonRadio`]: isButtonRadio,\n [`${prefix}-inner-pureCardRadio`]: isPureCardRadioGroup\n });\n const inner = classnames({\n [`${prefix}-focus`]: focusInner,\n [`${prefix}-focus-border`]: focusInner && !checked,\n [`${prefix}-inner-display`]: !isButtonRadio\n });\n return /*#__PURE__*/React.createElement(\"span\", {\n className: wrapper\n }, /*#__PURE__*/React.createElement(\"input\", {\n ref: ref => {\n this.inputEntity = ref;\n },\n autoFocus: autoFocus,\n type: mode === 'advanced' ? 'checkbox' : 'radio',\n checked: Boolean(checked),\n disabled: disabled,\n onChange: this.onChange,\n name: name,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": addonId,\n \"aria-describedby\": extraId,\n onFocus: onInputFocus,\n onBlur: onInputBlur\n }), /*#__PURE__*/React.createElement(\"span\", {\n className: inner\n }, checked ? /*#__PURE__*/React.createElement(IconRadio, null) : null));\n }\n}\nRadioInner.contextType = Context;\nRadioInner.propTypes = {\n checked: PropTypes.bool,\n disabled: PropTypes.bool,\n isButtonRadio: PropTypes.bool,\n onChange: PropTypes.func,\n mode: PropTypes.oneOf(['advanced', '']),\n 'aria-label': PropTypes.string,\n focusInner: PropTypes.bool,\n onInputFocus: PropTypes.func,\n onInputBlur: PropTypes.func,\n preventScroll: PropTypes.bool\n};\nRadioInner.defaultProps = {\n onChange: _noop,\n isButtonRadio: false\n};\nexport default RadioInner;","import _isBoolean from \"lodash/isBoolean\";\nimport _isUndefined from \"lodash/isUndefined\";\nimport _noop from \"lodash/noop\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport cls from 'classnames';\nimport RadioFoundation from '@douyinfe/semi-foundation/lib/es/radio/radioFoundation';\nimport { strings, radioClasses as css } from '@douyinfe/semi-foundation/lib/es/radio/constants';\nimport { getUuidShort } from '@douyinfe/semi-foundation/lib/es/utils/uuid';\nimport '@douyinfe/semi-foundation/lib/es/radio/radio.css';\nimport BaseComponent from '../_base/baseComponent';\nimport RadioInner from './radioInner';\nimport Context from './context';\nclass Radio extends BaseComponent {\n constructor(props) {\n super(props);\n this.onChange = e => {\n const {\n onChange\n } = this.props;\n if (this.isInGroup()) {\n const {\n radioGroup\n } = this.context;\n radioGroup.onChange && radioGroup.onChange(e);\n }\n !('checked' in this.props) && this.foundation.setChecked(e.target.checked);\n onChange && onChange(e);\n };\n this.handleMouseEnter = e => {\n this.props.onMouseEnter(e);\n this.foundation.setHover(true);\n };\n this.handleMouseLeave = e => {\n this.props.onMouseLeave(e);\n this.foundation.setHover(false);\n };\n this.handleFocusVisible = event => {\n this.foundation.handleFocusVisible(event);\n };\n this.handleBlur = event => {\n this.foundation.handleBlur();\n };\n this.state = {\n hover: false,\n addonId: props.addonId,\n extraId: props.extraId,\n checked: props.checked || props.defaultChecked || false\n };\n this.foundation = new RadioFoundation(this.adapter);\n this.radioEntity = null;\n }\n componentDidUpdate(prevProps) {\n if (this.props.checked !== prevProps.checked) {\n if (_isUndefined(this.props.checked)) {\n this.foundation.setChecked(false);\n } else if (_isBoolean(this.props.checked)) {\n this.foundation.setChecked(this.props.checked);\n }\n }\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n setHover: hover => {\n this.setState({\n hover\n });\n },\n setAddonId: () => {\n this.setState({\n addonId: getUuidShort({\n prefix: 'addon'\n })\n });\n },\n setChecked: checked => {\n this.setState({\n checked\n });\n },\n setExtraId: () => {\n this.setState({\n extraId: getUuidShort({\n prefix: 'extra'\n })\n });\n },\n setFocusVisible: focusVisible => {\n this.setState({\n focusVisible\n });\n }\n });\n }\n isInGroup() {\n // eslint-disable-next-line react/destructuring-assignment\n return this.context && this.context.radioGroup;\n }\n focus() {\n this.radioEntity.focus();\n }\n blur() {\n this.radioEntity.blur();\n }\n render() {\n const _a = this.props,\n {\n addonClassName,\n addonStyle,\n disabled,\n style,\n className,\n prefixCls,\n displayMode,\n children,\n extra,\n mode,\n type,\n value: propValue,\n name\n } = _a,\n rest = __rest(_a, [\"addonClassName\", \"addonStyle\", \"disabled\", \"style\", \"className\", \"prefixCls\", \"displayMode\", \"children\", \"extra\", \"mode\", \"type\", \"value\", \"name\"]);\n let realChecked, isDisabled, realMode, isButtonRadioGroup, isCardRadioGroup, isPureCardRadioGroup, isButtonRadioComponent, buttonSize, realPrefixCls;\n const {\n hover: isHover,\n addonId,\n extraId,\n focusVisible,\n checked\n } = this.state;\n const props = {\n checked,\n disabled\n };\n if (this.isInGroup()) {\n realChecked = this.context.radioGroup.value === propValue;\n isDisabled = disabled || this.context.radioGroup.disabled;\n realMode = this.context.mode;\n isButtonRadioGroup = this.context.radioGroup.isButtonRadio;\n isCardRadioGroup = this.context.radioGroup.isCardRadio;\n isPureCardRadioGroup = this.context.radioGroup.isPureCardRadio;\n buttonSize = this.context.radioGroup.buttonSize;\n realPrefixCls = prefixCls || this.context.radioGroup.prefixCls;\n props.checked = realChecked;\n props.disabled = isDisabled;\n } else {\n realChecked = checked;\n isDisabled = disabled;\n realMode = mode;\n isButtonRadioComponent = type === 'button';\n realPrefixCls = prefixCls;\n isButtonRadioGroup = type === strings.TYPE_BUTTON;\n isPureCardRadioGroup = type === strings.TYPE_PURECARD;\n isCardRadioGroup = type === strings.TYPE_CARD || isPureCardRadioGroup;\n }\n const isButtonRadio = typeof isButtonRadioGroup === 'undefined' ? isButtonRadioComponent : isButtonRadioGroup;\n const prefix = realPrefixCls || css.PREFIX;\n const focusOuter = isCardRadioGroup || isPureCardRadioGroup || isButtonRadio;\n const wrapper = cls(prefix, {\n [`${prefix}-disabled`]: isDisabled,\n [`${prefix}-checked`]: realChecked,\n [`${prefix}-${displayMode}`]: Boolean(displayMode),\n [`${prefix}-buttonRadioComponent`]: isButtonRadioComponent,\n [`${prefix}-buttonRadioGroup`]: isButtonRadioGroup,\n [`${prefix}-buttonRadioGroup-${buttonSize}`]: isButtonRadioGroup && buttonSize,\n [`${prefix}-cardRadioGroup`]: isCardRadioGroup,\n [`${prefix}-cardRadioGroup_disabled`]: isDisabled && isCardRadioGroup,\n [`${prefix}-cardRadioGroup_checked`]: isCardRadioGroup && realChecked && !isDisabled,\n [`${prefix}-cardRadioGroup_checked_disabled`]: isCardRadioGroup && realChecked && isDisabled,\n [`${prefix}-cardRadioGroup_hover`]: isCardRadioGroup && !realChecked && isHover && !isDisabled,\n [className]: Boolean(className),\n [`${prefix}-focus`]: focusVisible && (isCardRadioGroup || isPureCardRadioGroup)\n });\n const groupName = this.isInGroup() && this.context.radioGroup.name;\n const addonCls = cls({\n [`${prefix}-addon`]: !isButtonRadio,\n [`${prefix}-addon-buttonRadio`]: isButtonRadio,\n [`${prefix}-addon-buttonRadio-checked`]: isButtonRadio && realChecked,\n [`${prefix}-addon-buttonRadio-disabled`]: isButtonRadio && isDisabled,\n [`${prefix}-addon-buttonRadio-hover`]: isButtonRadio && !realChecked && !isDisabled && isHover,\n [`${prefix}-addon-buttonRadio-${buttonSize}`]: isButtonRadio && buttonSize,\n [`${prefix}-focus`]: focusVisible && isButtonRadio\n }, addonClassName);\n const renderContent = () => {\n if (!children && !extra) {\n return null;\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n className: cls([`${prefix}-content`, {\n [`${prefix}-isCardRadioGroup_content`]: isCardRadioGroup\n }])\n }, children ? (/*#__PURE__*/React.createElement(\"span\", {\n className: addonCls,\n style: addonStyle,\n id: addonId,\n \"x-semi-prop\": \"children\"\n }, children)) : null, extra && !isButtonRadio ? (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefix}-extra`,\n id: extraId,\n \"x-semi-prop\": \"extra\"\n }, extra)) : null);\n };\n return /*#__PURE__*/React.createElement(\"label\", Object.assign({\n style: style,\n className: wrapper,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave\n }, this.getDataAttr(rest)), /*#__PURE__*/React.createElement(RadioInner, Object.assign({}, this.props, props, {\n mode: realMode,\n name: name !== null && name !== void 0 ? name : groupName,\n isButtonRadio: isButtonRadio,\n isPureCardRadioGroup: isPureCardRadioGroup,\n onChange: this.onChange,\n ref: ref => {\n this.radioEntity = ref;\n },\n addonId: children && addonId,\n extraId: extra && extraId,\n focusInner: focusVisible && !focusOuter,\n onInputFocus: this.handleFocusVisible,\n onInputBlur: this.handleBlur\n })), renderContent());\n }\n}\nRadio.contextType = Context;\nRadio.propTypes = {\n autoFocus: PropTypes.bool,\n checked: PropTypes.bool,\n defaultChecked: PropTypes.bool,\n value: PropTypes.any,\n style: PropTypes.object,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n prefixCls: PropTypes.string,\n displayMode: PropTypes.oneOf(['vertical', '']),\n onChange: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n mode: PropTypes.oneOf(strings.MODE),\n extra: PropTypes.node,\n addonStyle: PropTypes.object,\n addonClassName: PropTypes.string,\n type: PropTypes.oneOf([strings.TYPE_DEFAULT, strings.TYPE_BUTTON, strings.TYPE_CARD, strings.TYPE_PURECARD]),\n 'aria-label': PropTypes.string,\n preventScroll: PropTypes.bool\n};\nRadio.defaultProps = {\n autoFocus: false,\n defaultChecked: false,\n value: undefined,\n style: undefined,\n onMouseEnter: _noop,\n onMouseLeave: _noop,\n mode: '',\n type: 'default'\n};\nRadio.elementType = 'Radio';\nexport default Radio;","import _pick from \"lodash/pick\";\nimport _noop from \"lodash/noop\";\nimport _isEqual from \"lodash/isEqual\";\nimport React, { isValidElement, useEffect, useState } from 'react';\nimport cls from 'classnames';\nimport { IconFilter } from '@douyinfe/semi-icons';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/table/constants';\nimport Dropdown from '../dropdown';\nimport { Radio } from '../radio';\nimport { Checkbox } from '../checkbox';\nfunction renderDropdown(props) {\n let nestedElem = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n let level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n const {\n filterMultiple = true,\n filters = [],\n filteredValue = [],\n filterDropdownVisible,\n onSelect = _noop,\n onFilterDropdownVisibleChange = _noop,\n trigger = 'click',\n position = 'bottom',\n renderFilterDropdown,\n renderFilterDropdownItem\n } = props !== null && props !== void 0 ? props : {};\n const renderFilterDropdownProps = _pick(props, ['tempFilteredValue', 'setTempFilteredValue', 'confirm', 'clear', 'close', 'filters']);\n const render = typeof renderFilterDropdown === 'function' ? renderFilterDropdown(renderFilterDropdownProps) : (/*#__PURE__*/React.createElement(Dropdown.Menu, null, Array.isArray(filters) && filters.map((filter, index) => {\n const changeFn = e => {\n const domEvent = e && e.nativeEvent;\n if (domEvent) {\n // Block this event to prevent the pop-up layer from closing\n domEvent.stopImmediatePropagation();\n // Prevent bubbling and default events to prevent label click events from triggering twice\n domEvent.stopPropagation();\n domEvent.preventDefault();\n }\n let values = [...filteredValue];\n const included = values.includes(filter.value);\n const idx = values.indexOf(filter.value);\n if (idx > -1) {\n values.splice(idx, 1);\n } else if (filterMultiple) {\n values.push(filter.value);\n } else {\n values = [filter.value];\n }\n return onSelect({\n value: filter.value,\n filteredValue: values,\n included: !included,\n domEvent\n });\n };\n const checked = filteredValue.includes(filter.value);\n const {\n text\n } = filter;\n const {\n value\n } = filter;\n const key = `${level}_${index}`;\n const dropdownItem = typeof renderFilterDropdownItem === 'function' ? renderFilterDropdownItem({\n onChange: changeFn,\n filterMultiple,\n value,\n text,\n checked,\n filteredValue,\n level\n }) : null;\n let item = dropdownItem && /*#__PURE__*/React.isValidElement(dropdownItem) ? (/*#__PURE__*/React.cloneElement(dropdownItem, {\n key\n })) : (/*#__PURE__*/React.createElement(Dropdown.Item, {\n key: key,\n onClick: changeFn\n }, filterMultiple ? (/*#__PURE__*/React.createElement(Checkbox, {\n checked: checked\n }, text)) : (/*#__PURE__*/React.createElement(Radio, {\n checked: checked\n }, text))));\n if (Array.isArray(filter.children) && filter.children.length) {\n const childrenDropdownProps = Object.assign(Object.assign({}, props), {\n filters: filter.children,\n trigger: 'hover',\n position: 'right'\n });\n delete childrenDropdownProps.filterDropdownVisible;\n item = renderDropdown(childrenDropdownProps, item, level + 1);\n }\n return item;\n })));\n const dropdownProps = Object.assign(Object.assign({}, props), {\n onVisibleChange: visible => onFilterDropdownVisibleChange(visible),\n trigger,\n position,\n render\n });\n if (filterDropdownVisible != null) {\n dropdownProps.visible = filterDropdownVisible;\n }\n return /*#__PURE__*/React.createElement(Dropdown, Object.assign({}, dropdownProps, {\n key: `Dropdown_level_${level}`,\n className: `${cssClasses.PREFIX}-column-filter-dropdown`\n }), nestedElem);\n}\nexport default function ColumnFilter() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n prefixCls = cssClasses.PREFIX,\n filteredValue,\n filterIcon = 'filter',\n filterDropdownProps,\n onSelect,\n filterDropdownVisible,\n renderFilterDropdown,\n onFilterDropdownVisibleChange\n } = props;\n let {\n filterDropdown = null\n } = props;\n // custom filter related status\n const isFilterDropdownVisibleControlled = typeof filterDropdownVisible !== 'undefined';\n const isCustomFilterDropdown = typeof renderFilterDropdown === 'function';\n const isCustomDropdownVisible = !isFilterDropdownVisibleControlled && isCustomFilterDropdown;\n const [tempFilteredValue, setTempFilteredValue] = useState(filteredValue);\n const dropdownVisibleInitValue = isCustomDropdownVisible ? false : filterDropdownVisible;\n const [dropdownVisible, setDropdownVisible] = useState(dropdownVisibleInitValue);\n useEffect(() => {\n if (typeof filterDropdownVisible !== 'undefined') {\n setDropdownVisible(filterDropdownVisible);\n }\n }, [filterDropdownVisible]);\n useEffect(() => {\n setTempFilteredValue(filteredValue);\n }, [filteredValue]);\n const confirm = function () {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const newFilteredValue = (props === null || props === void 0 ? void 0 : props.filteredValue) || tempFilteredValue;\n if (!_isEqual(newFilteredValue, filteredValue)) {\n onSelect({\n filteredValue: newFilteredValue\n });\n }\n if (props.closeDropdown) {\n setDropdownVisible(false);\n }\n };\n const clear = function () {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n setTempFilteredValue([]);\n onSelect({\n filteredValue: []\n });\n if (props.closeDropdown) {\n setDropdownVisible(false);\n }\n };\n const close = () => {\n setDropdownVisible(false);\n };\n const handleFilterDropdownVisibleChange = visible => {\n if (isCustomDropdownVisible) {\n setDropdownVisible(visible);\n }\n onFilterDropdownVisibleChange(visible);\n };\n const renderFilterDropdownProps = {\n tempFilteredValue,\n setTempFilteredValue,\n confirm,\n clear,\n close\n };\n const finalCls = cls(`${prefixCls}-column-filter`, {\n on: Array.isArray(filteredValue) && filteredValue.length\n });\n let iconElem;\n if (typeof filterIcon === 'function') {\n iconElem = filterIcon(Array.isArray(filteredValue) && filteredValue.length > 0);\n } else if (/*#__PURE__*/isValidElement(filterIcon)) {\n iconElem = filterIcon;\n } else {\n iconElem = /*#__PURE__*/React.createElement(\"div\", {\n className: finalCls\n }, '\\u200b' /* ZWSP(zero-width space) */, /*#__PURE__*/React.createElement(IconFilter, {\n role: \"button\",\n \"aria-label\": \"Filter data with this column\",\n \"aria-haspopup\": \"listbox\",\n tabIndex: -1,\n size: \"default\"\n }));\n }\n const renderProps = Object.assign(Object.assign(Object.assign(Object.assign({}, props), filterDropdownProps), renderFilterDropdownProps), {\n filterDropdownVisible: isFilterDropdownVisibleControlled ? filterDropdownVisible : dropdownVisible,\n onFilterDropdownVisibleChange: handleFilterDropdownVisibleChange\n });\n filterDropdown = /*#__PURE__*/React.isValidElement(filterDropdown) ? filterDropdown : renderDropdown(renderProps, iconElem);\n return filterDropdown;\n}","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m6.45 8.34 4.8-5.48a1 1 0 0 1 1.5 0l4.8 5.48A1 1 0 0 1 16.8 10H7.2a1 1 0 0 1-.75-1.66Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'caretup');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m17.55 15.66-4.8 5.48a1 1 0 0 1-1.5 0l-4.8-5.48A1 1 0 0 1 7.2 14h9.6a1 1 0 0 1 .75 1.66Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'caretdown');\nexport default IconComponent;","import _map from \"lodash/map\";\nimport _find from \"lodash/find\";\nimport _clone from \"lodash/clone\";\nimport _merge from \"lodash/merge\";\nimport Logger from '@douyinfe/semi-foundation/lib/es/utils/Logger';\nimport { numbers, strings } from '@douyinfe/semi-foundation/lib/es/table/constants';\nimport { cloneDeep } from '../_utils';\nimport { getColumnKey } from '@douyinfe/semi-foundation/lib/es/table/utils';\nlet scrollbarVerticalSize, scrollbarHorizontalSize;\n// Measure scrollbar width for padding body during modal show/hide\nconst scrollbarMeasure = {\n position: 'absolute',\n top: '-9999px',\n width: '50px',\n height: '50px'\n};\n/**\n * @param {'vertical'|'horizontal'} [direction]\n * @returns {number}\n */\nexport function measureScrollbar() {\n let direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'vertical';\n if (typeof document === 'undefined' || typeof window === 'undefined') {\n return 0;\n }\n const isVertical = direction === 'vertical';\n if (isVertical && scrollbarVerticalSize) {\n return scrollbarVerticalSize;\n } else if (!isVertical && scrollbarHorizontalSize) {\n return scrollbarHorizontalSize;\n }\n const scrollDiv = document.createElement('div');\n Object.keys(scrollbarMeasure).forEach(scrollProp => {\n scrollDiv.style[scrollProp] = scrollbarMeasure[scrollProp];\n });\n // Append related overflow style\n if (isVertical) {\n scrollDiv.style.overflowY = 'scroll';\n } else {\n scrollDiv.style.overflowX = 'scroll';\n }\n document.body.appendChild(scrollDiv);\n let size = 0;\n if (isVertical) {\n // clientWidth is the inner width (excluding borders and scrollbars)\n // offsetWidth is the outer width (including padding and borders)\n size = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n scrollbarVerticalSize = size;\n } else {\n size = scrollDiv.offsetHeight - scrollDiv.clientHeight;\n scrollbarHorizontalSize = size;\n }\n document.body.removeChild(scrollDiv);\n // console.log(size);\n return size;\n}\nexport function amendTableWidth(tableWidth) {\n return typeof tableWidth === 'number' ? tableWidth - numbers.DEFAULT_CELL_PADDING_LEFT - numbers.DEFAULT_CELL_PADDING_RIGHT - numbers.DEFAULT_CELL_BORDER_WIDTH_LEFT - numbers.DEFAULT_CELL_BORDER_WIDTH_RIGHT - measureScrollbar('vertical') : undefined;\n}\n/**\n * The user can pass a component to define the rendering method of each level of the table\n * This function merges the components passed in by the user with the default components\n * @param {Object} components\n * @param {Boolean|Object} virtualized\n * @returns\n */\nexport function mergeComponents(components, virtualized) {\n return _merge({}, {\n table: 'table',\n header: {\n outer: 'table',\n wrapper: 'thead',\n row: 'tr',\n cell: 'th'\n },\n body: virtualized ? {\n outer: 'div',\n wrapper: 'div',\n row: 'div',\n cell: 'div',\n colgroup: {\n wrapper: 'div',\n col: 'div'\n }\n } : {\n outer: 'table',\n wrapper: 'tbody',\n row: 'tr',\n cell: 'td',\n colgroup: {\n wrapper: 'colgroup',\n col: 'col'\n }\n },\n footer: {\n wrapper: 'tfoot',\n row: 'tr',\n cell: 'td'\n }\n }, components);\n}\nexport const logger = new Logger('[@douyinfe/semi-ui Table]');\nexport function mergeColumns() {\n let oldColumns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let newColumns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n let keyPropNames = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n let deep = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n const finalColumns = [];\n const clone = deep ? cloneDeep : _clone;\n _map(newColumns, newColumn => {\n newColumn = Object.assign({}, newColumn);\n const key = getColumnKey(newColumn, keyPropNames);\n const oldColumn = key != null && _find(oldColumns, item => getColumnKey(item, keyPropNames) === key);\n if (oldColumn) {\n finalColumns.push(clone(Object.assign(Object.assign({}, oldColumn), newColumn)));\n } else {\n finalColumns.push(clone(newColumn));\n }\n });\n return finalColumns;\n}\nexport function getNextSortOrder(sortOrder) {\n switch (sortOrder) {\n case strings.SORT_DIRECTIONS[0]:\n return strings.SORT_DIRECTIONS[1];\n case strings.SORT_DIRECTIONS[1]:\n return 'cancelSort';\n default:\n return strings.SORT_DIRECTIONS[0];\n }\n}\nexport { cloneDeep };","import _noop from \"lodash/noop\";\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport cls from 'classnames';\nimport { IconCaretup, IconCaretdown } from '@douyinfe/semi-icons';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/table/constants';\nimport Tooltip from '../tooltip';\nimport isEnterPress from '@douyinfe/semi-foundation/lib/es/utils/isEnterPress';\nimport { getNextSortOrder } from './utils';\nimport LocaleConsumer from '../locale/localeConsumer';\nexport default class ColumnSorter extends PureComponent {\n render() {\n const {\n prefixCls,\n onClick,\n sortOrder,\n style,\n title,\n sortIcon,\n showTooltip\n } = this.props;\n const iconBtnSize = 'default';\n const upCls = cls(`${prefixCls}-column-sorter-up`, {\n on: sortOrder === strings.SORT_DIRECTIONS[0]\n });\n const downCls = cls(`${prefixCls}-column-sorter-down`, {\n on: sortOrder === strings.SORT_DIRECTIONS[1]\n });\n const ariaProps = {\n /**\n * Set 'aria-sort' to aria-columnheader is difficult, so set 'aria-label' about sort info to sorter\n * reference: https://developer.mozilla.org/en-US/docs/Web/API/Element/ariaSort\n */\n 'aria-label': `Current sort order is ${sortOrder ? `${sortOrder}ing` : 'none'}`,\n 'aria-roledescription': 'Sort data with this column'\n };\n const renderSortIcon = () => {\n if (typeof sortIcon === 'function') {\n return sortIcon({\n sortOrder\n });\n } else {\n const node = /*#__PURE__*/React.createElement(\"div\", {\n style: style,\n className: `${prefixCls}-column-sorter`\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: `${upCls}`\n }, /*#__PURE__*/React.createElement(IconCaretup, {\n size: iconBtnSize\n })), /*#__PURE__*/React.createElement(\"span\", {\n className: `${downCls}`\n }, /*#__PURE__*/React.createElement(IconCaretdown, {\n size: iconBtnSize\n })));\n if (showTooltip) {\n let content = getNextSortOrder(sortOrder);\n return /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Table\"\n }, (locale, localeCode) => (/*#__PURE__*/React.createElement(Tooltip, {\n content: locale[content]\n }, node)));\n }\n return node;\n }\n };\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n role: \"button\"\n }, ariaProps, {\n tabIndex: -1,\n className: `${prefixCls}-column-sorter-wrapper`,\n onClick: onClick,\n onKeyPress: e => isEnterPress(e) && onClick(e)\n }), title, renderSortIcon());\n }\n}\nColumnSorter.propTypes = {\n className: PropTypes.string,\n style: PropTypes.object,\n onClick: PropTypes.func,\n prefixCls: PropTypes.string,\n sortOrder: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n sortIcon: PropTypes.func,\n showTooltip: PropTypes.bool\n};\nColumnSorter.defaultProps = {\n prefixCls: cssClasses.PREFIX,\n onClick: _noop,\n sortOrder: false,\n showTooltip: false\n};","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m9.66 3.44 8.97 7.8a1 1 0 0 1 0 1.51l-8.97 7.81A1 1 0 0 1 8 19.81V4.19a1 1 0 0 1 1.66-.75Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'tree_triangle_right');\nexport default IconComponent;","import _noop from \"lodash/noop\";\n/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { IconChevronRight, IconChevronDown, IconTreeTriangleDown, IconTreeTriangleRight } from '@douyinfe/semi-icons';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/table/constants';\nimport isEnterPress from '@douyinfe/semi-foundation/lib/es/utils/isEnterPress';\nimport CSSAnimation from \"../_cssAnimation\";\n/**\n * render expand icon\n */\nexport default function CustomExpandIcon(props) {\n const {\n expanded,\n componentType,\n onClick = _noop,\n onMouseEnter = _noop,\n onMouseLeave = _noop,\n expandIcon,\n prefixCls = cssClasses.PREFIX,\n motion = true\n } = props;\n let icon;\n if (/*#__PURE__*/React.isValidElement(expandIcon)) {\n icon = expandIcon;\n } else if (typeof expandIcon === 'function') {\n icon = expandIcon(expanded);\n } else if (componentType === 'tree') {\n icon = expanded && !motion ? /*#__PURE__*/React.createElement(IconTreeTriangleDown, {\n size: \"small\"\n }) : /*#__PURE__*/React.createElement(IconTreeTriangleRight, {\n size: \"small\"\n });\n } else {\n icon = expanded && !motion ? /*#__PURE__*/React.createElement(IconChevronDown, null) : /*#__PURE__*/React.createElement(IconChevronRight, null);\n }\n const handleClick = useCallback(e => {\n if (typeof onClick === 'function') {\n onClick(!expanded, e);\n }\n }, [expanded]);\n if (motion) {\n const originIcon = icon;\n icon = /*#__PURE__*/React.createElement(CSSAnimation, {\n animationState: expanded ? \"enter\" : \"leave\",\n startClassName: `${cssClasses.PREFIX}-expandedIcon-${expanded ? 'show' : \"hide\"}`\n }, _ref => {\n let {\n animationClassName\n } = _ref;\n return /*#__PURE__*/React.cloneElement(originIcon, {\n className: (originIcon.props.className || \"\") + \" \" + animationClassName\n });\n });\n }\n return /*#__PURE__*/React.createElement(\"span\", {\n role: \"button\",\n \"aria-label\": \"Expand this row\",\n tabIndex: -1,\n onClick: handleClick,\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave,\n className: `${prefixCls}-expand-icon`,\n onKeyPress: e => isEnterPress(e) && handleClick(e)\n }, icon);\n}\nCustomExpandIcon.propTypes = {\n expanded: PropTypes.bool,\n componentType: PropTypes.oneOf(['tree', 'expand']),\n onClick: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n expandIcon: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n prefixCls: PropTypes.string,\n motion: PropTypes.bool\n};\nCustomExpandIcon.defaultProps = {\n componentType: 'expand',\n onClick: _noop,\n onMouseEnter: _noop,\n onMouseLeave: _noop,\n prefixCls: cssClasses.PREFIX\n};","import _get from \"lodash/get\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/table/constants';\nimport { flattenColumns } from '@douyinfe/semi-foundation/lib/es/table/utils';\nexport default class ColGroup extends React.PureComponent {\n render() {\n const {\n columns,\n className,\n style,\n prefixCls,\n components\n } = this.props;\n const ColGroup = _get(components, 'colgroup.wrapper', 'colgroup');\n const Col = _get(components, 'colgroup.col', 'col');\n const cols = flattenColumns(columns).map((column, idx) => {\n const colStyle = {};\n /**\n * table width\n */\n if (column.width) {\n colStyle.width = column.width;\n colStyle.minWidth = colStyle.width;\n }\n return /*#__PURE__*/React.createElement(Col, {\n className: classnames(`${prefixCls}-col`, column.className),\n key: column.key || column.dataIndex || idx,\n style: colStyle\n });\n });\n const groupCls = classnames(`${prefixCls}-colgroup`, className);\n return /*#__PURE__*/React.createElement(ColGroup, {\n className: groupCls,\n style: style\n }, cols);\n }\n}\nColGroup.propTypes = {\n columns: PropTypes.array,\n prefixCls: PropTypes.string,\n className: PropTypes.string,\n style: PropTypes.object,\n components: PropTypes.object\n};\nColGroup.defaultProps = {\n columns: [],\n prefixCls: cssClasses.PREFIX\n};","import _findIndex from \"lodash/findIndex\";\nimport _omit from \"lodash/omit\";\nimport _set from \"lodash/set\";\nimport _map from \"lodash/map\";\nimport _noop from \"lodash/noop\";\nimport _get from \"lodash/get\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/table/constants';\nimport { arrayAdd, isFirstFixedRight, isLastLeftFixed, isFixedLeft, isFixedRight, sliceColumnsByLevel, getRTLAlign } from '@douyinfe/semi-foundation/lib/es/table/utils';\nimport BaseComponent from '../_base/baseComponent';\nimport TableContext from './table-context';\nimport Tooltip from '../tooltip';\nimport LocaleConsumer from '../locale/localeConsumer';\nimport { getNextSortOrder } from './utils';\nexport default class TableHeaderRow extends BaseComponent {\n get adapter() {\n return Object.assign({}, super.adapter);\n }\n constructor(props) {\n super(props);\n this.cacheRef = node => {\n this.headerNode = node;\n if (node && this.context.setHeadWidths) {\n const {\n prefixCls,\n row,\n index\n } = this.props;\n const cellSelector = `.${prefixCls}-row-head`;\n const heads = node && node.querySelectorAll && node.querySelectorAll(cellSelector);\n this.context.setHeadWidths(_map(heads, (head, headIndex) => {\n let configWidth = _get(row, [headIndex, 'column', 'width']);\n const key = _get(row, [headIndex, 'column', 'key']);\n if (typeof configWidth !== 'number') {\n configWidth = head && head.getBoundingClientRect().width || 0;\n }\n return {\n width: configWidth,\n key\n };\n }), index);\n }\n };\n this.headerNode = null;\n }\n componentDidUpdate(prevProps) {\n if (prevProps.columns !== this.props.columns && this.headerNode) {\n this.cacheRef(this.headerNode);\n }\n }\n render() {\n const {\n components,\n row,\n prefixCls,\n onHeaderRow,\n index,\n style,\n columns\n } = this.props;\n const {\n getCellWidths,\n direction\n } = this.context;\n const isRTL = direction === 'rtl';\n const slicedColumns = sliceColumnsByLevel(columns, index);\n const headWidths = getCellWidths(slicedColumns);\n const HeaderRow = _get(components, 'header.row', 'tr');\n const HeaderCell = _get(components, 'header.cell', 'th');\n const rowProps = onHeaderRow(columns, index) || {};\n _set(rowProps, 'className', classnames(_get(rowProps, 'className'), `${prefixCls}-row`));\n const cells = _map(row, (cell, cellIndex) => {\n const {\n column\n } = cell,\n cellProps = __rest(cell, [\"column\"]);\n const customProps = typeof column.onHeaderCell === 'function' ? column.onHeaderCell(column, cellIndex, index) : {};\n let cellStyle = Object.assign({}, customProps.style);\n if (column.align) {\n const textAlign = getRTLAlign(column.align, direction);\n cellStyle = Object.assign(Object.assign({}, cellStyle), {\n textAlign\n });\n customProps.className = classnames(customProps.className, column.className, {\n [`${prefixCls}-align-${textAlign}`]: Boolean(textAlign)\n });\n }\n let fixedLeft, fixedRight, fixedLeftLast, fixedRightFirst;\n if (isRTL) {\n fixedLeft = isFixedRight(column);\n fixedRight = isFixedLeft(column);\n fixedLeftLast = isFirstFixedRight(slicedColumns, column);\n fixedRightFirst = isLastLeftFixed(slicedColumns, column);\n } else {\n fixedLeft = isFixedLeft(column);\n fixedRight = isFixedRight(column);\n fixedLeftLast = isLastLeftFixed(slicedColumns, column);\n fixedRightFirst = isFirstFixedRight(slicedColumns, column);\n }\n customProps.className = classnames(`${prefixCls}-row-head`, column.className, customProps.className,\n // `${prefixCls}-fixed-columns`,\n {\n [`${prefixCls}-cell-fixed-left`]: fixedLeft,\n [`${prefixCls}-cell-fixed-left-last`]: fixedLeftLast,\n [`${prefixCls}-cell-fixed-right`]: fixedRight,\n [`${prefixCls}-cell-fixed-right-first`]: fixedRightFirst,\n [`${prefixCls}-row-head-ellipsis`]: column.ellipsis,\n [`${prefixCls}-row-head-clickSort`]: column.clickToSort\n });\n if (headWidths.length && slicedColumns.length) {\n const indexOfSlicedColumns = _findIndex(slicedColumns, item => item && item.key != null && item.key === column.key);\n if (indexOfSlicedColumns > -1) {\n if (isFixedLeft(column)) {\n const xPositionKey = isRTL ? 'right' : 'left';\n cellStyle = Object.assign(Object.assign({}, cellStyle), {\n position: 'sticky',\n [xPositionKey]: arrayAdd(headWidths, 0, indexOfSlicedColumns)\n });\n } else if (isFixedRight(column)) {\n const xPositionKey = isRTL ? 'left' : 'right';\n cellStyle = Object.assign(Object.assign({}, cellStyle), {\n position: 'sticky',\n [xPositionKey]: arrayAdd(headWidths, indexOfSlicedColumns + 1)\n });\n }\n }\n }\n Object.assign(cellProps, {\n resize: column.resize\n });\n const props = _omit(Object.assign(Object.assign({}, cellProps), customProps), ['colStart', 'colEnd', 'hasSubColumns', 'parents', 'level']);\n const {\n rowSpan,\n colSpan\n } = props;\n if (rowSpan === 0 || colSpan === 0) {\n return null;\n }\n if (typeof column.clickToSort === 'function') {\n if (props.onClick) {\n props.onClick = e => {\n props.onClick(e);\n column.clickToSort(e);\n };\n } else {\n props.onClick = column.clickToSort;\n }\n }\n const headerCellNode = /*#__PURE__*/React.createElement(HeaderCell, Object.assign({\n role: \"columnheader\",\n \"aria-colindex\": cellIndex + 1\n }, props, {\n style: cellStyle,\n key: column.key || column.dataIndex || cellIndex\n }));\n if (typeof column.clickToSort === 'function' && column.showSortTip === true) {\n let content = getNextSortOrder(column.sortOrder);\n return /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Table\",\n key: column.key || column.dataIndex || cellIndex\n }, (locale, localeCode) => (/*#__PURE__*/React.createElement(Tooltip, {\n content: locale[content]\n }, headerCellNode)));\n }\n return headerCellNode;\n });\n return (\n /*#__PURE__*/\n // @ts-ignore no need to do complex ts type checking and qualification\n React.createElement(HeaderRow, Object.assign({\n role: \"row\",\n \"aria-rowindex\": index + 1\n }, rowProps, {\n style: style,\n ref: this.cacheRef\n }), cells)\n );\n }\n}\nTableHeaderRow.contextType = TableContext;\nTableHeaderRow.propTypes = {\n components: PropTypes.object,\n row: PropTypes.array,\n prefixCls: PropTypes.string,\n onHeaderRow: PropTypes.func,\n index: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n style: PropTypes.object,\n columns: PropTypes.array,\n fixed: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n selectedRowKeysSet: PropTypes.instanceOf(Set).isRequired\n};\nTableHeaderRow.defaultProps = {\n onHeaderRow: _noop,\n prefixCls: cssClasses.PREFIX,\n columns: [],\n components: {\n header: {\n wrapper: 'thead',\n row: 'tr',\n cell: 'th'\n }\n }\n};","import _isFunction from \"lodash/isFunction\";\nimport _noop from \"lodash/noop\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport BaseComponent from '../_base/baseComponent';\nimport { strings, cssClasses } from '@douyinfe/semi-foundation/lib/es/table/constants';\nimport { shouldShowEllipsisTitle } from '@douyinfe/semi-foundation/lib/es/table/utils';\nimport TableHeaderRow from './TableHeaderRow';\nfunction parseHeaderRows(columns) {\n const rows = [];\n function fillRowCells(columns, colIndex) {\n let parents = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n let rowIndex = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n let level = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n // Init rows\n rows[rowIndex] = rows[rowIndex] || [];\n let currentColIndex = colIndex;\n const colSpans = columns.map(column => {\n const cell = {\n key: column.key,\n className: column.className || '',\n children: _isFunction(column.title) ? column.title() : column.title,\n column,\n colStart: currentColIndex,\n level,\n parents\n };\n let colSpan = 1;\n /**\n * Calculate header column merge colSpan\n * - If the current cell has children, colSpan = the sum of children rowSpan\n * - If the current cell has no children, colSpan = 1\n */\n const subColumns = column.children;\n if (subColumns && subColumns.length > 0) {\n colSpan = fillRowCells(subColumns, currentColIndex, [...parents, cell], rowIndex + 1, level + 1).reduce((total, count) => total + count, 0);\n cell.hasSubColumns = true;\n }\n if ('colSpan' in column) {\n ({\n colSpan\n } = column);\n }\n if ('rowSpan' in column) {\n cell.rowSpan = column.rowSpan;\n }\n if (column.key === strings.DEFAULT_KEY_COLUMN_SCROLLBAR) {\n cell['x-type'] = strings.DEFAULT_KEY_COLUMN_SCROLLBAR;\n }\n cell.colSpan = colSpan;\n cell.colEnd = cell.colStart + colSpan - 1;\n rows[rowIndex].push(cell);\n currentColIndex += colSpan;\n const ellipsis = column === null || column === void 0 ? void 0 : column.ellipsis;\n const shouldShowTitle = shouldShowEllipsisTitle(ellipsis);\n if (shouldShowTitle && typeof cell.children === 'string') {\n cell.title = cell.children;\n }\n return colSpan;\n });\n return colSpans;\n }\n // Generate `rows` cell data\n fillRowCells(columns, 0);\n /**\n * Calculate header row merge rowSpan\n * - If the current cell has no children, you need to calculate rowSpan, rowSpan = the total number of rows in the header-which row currently belongs to\n * - If the current cell has children, there is no need to calculate rowSpan\n *\n * 计算表头行合并 rowSpan\n * - 如果当前cell没有children,则需要计算rowSpan,rowSpan = 表头总行数 - 当前属于第几行\n * - 如果当前cell有children,则无需计算rowSpan\n */\n const rowCount = rows.length;\n for (let rowIndex = 0; rowIndex < rowCount; rowIndex += 1) {\n rows[rowIndex].forEach(cell => {\n if (!('rowSpan' in cell) && !cell.hasSubColumns) {\n cell.rowSpan = rowCount - rowIndex;\n }\n });\n }\n return rows;\n}\n/**\n * Render the header of the table header, and control the merging of the columns of the header\n */\nclass TableHeader extends BaseComponent {\n get adapter() {\n return Object.assign({}, super.adapter);\n }\n render() {\n const {\n components,\n columns,\n prefixCls,\n fixed,\n onHeaderRow,\n forwardedRef,\n selectedRowKeysSet\n } = this.props;\n const rows = parseHeaderRows(columns);\n const HeaderWrapper = components.header.wrapper;\n return /*#__PURE__*/React.createElement(HeaderWrapper, {\n className: `${prefixCls}-thead`,\n ref: forwardedRef\n }, rows.map((row, idx) => (/*#__PURE__*/React.createElement(TableHeaderRow, {\n prefixCls: prefixCls,\n key: idx,\n index: idx,\n fixed: fixed,\n columns: columns,\n row: row,\n components: components,\n onHeaderRow: onHeaderRow,\n selectedRowKeysSet: selectedRowKeysSet\n }))));\n }\n}\nTableHeader.propTypes = {\n components: PropTypes.any,\n columns: PropTypes.array,\n columnManager: PropTypes.object,\n prefixCls: PropTypes.string,\n onHeaderRow: PropTypes.func,\n onDidUpdate: PropTypes.func,\n fixed: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n selectedRowKeysSet: PropTypes.instanceOf(Set).isRequired\n};\nTableHeader.defaultProps = {\n columns: [],\n prefixCls: cssClasses.PREFIX,\n onHeaderRow: _noop,\n onDidUpdate: _noop,\n components: {\n header: {\n wrapper: 'thead',\n row: 'tr',\n cell: 'th'\n }\n }\n};\nexport default /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(TableHeader, Object.assign({}, props, {\n forwardedRef: ref\n})));","import _noop from \"lodash/noop\";\nimport _get from \"lodash/get\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport ColGroup from './ColGroup';\nimport TableHeader from './TableHeader';\n/**\n * When there are fixed columns, the header is rendered as a separate Table\n */\nclass HeadTable extends React.PureComponent {\n constructor() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n selectedRowKeysSet: new Set()\n };\n super(props);\n }\n render() {\n const {\n scroll,\n prefixCls,\n fixed,\n forwardedRef,\n handleBodyScroll,\n columns,\n components,\n onDidUpdate,\n showHeader,\n tableLayout,\n bodyHasScrollBar,\n sticky\n } = this.props;\n const Table = _get(components, 'header.outer', 'table');\n const x = _get(scroll, 'x');\n const headStyle = {};\n const tableStyle = {};\n if (x && !fixed) {\n tableStyle.width = x;\n }\n if (bodyHasScrollBar) {\n headStyle.overflowY = 'scroll';\n }\n const colgroup = /*#__PURE__*/React.createElement(ColGroup, {\n columns: columns,\n prefixCls: prefixCls\n });\n const tableHeader = /*#__PURE__*/React.createElement(TableHeader, Object.assign({}, this.props, {\n columns: columns,\n components: components,\n onDidUpdate: onDidUpdate\n }));\n const headTableCls = classnames(`${prefixCls}-header`, {\n [`${prefixCls}-header-sticky`]: sticky,\n [`${prefixCls}-header-hidden`]: !showHeader\n });\n const stickyTop = _get(sticky, 'top', 0);\n if (typeof stickyTop === 'number') {\n headStyle.top = stickyTop;\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n key: \"headTable\",\n style: headStyle,\n className: headTableCls,\n ref: forwardedRef,\n onScroll: handleBodyScroll\n }, /*#__PURE__*/React.createElement(Table, {\n style: tableStyle,\n className: classnames(prefixCls, {\n [`${prefixCls}-fixed`]: tableLayout === 'fixed'\n })\n }, colgroup, tableHeader));\n }\n}\nHeadTable.propTypes = {\n tableLayout: PropTypes.string,\n bodyHasScrollBar: PropTypes.bool,\n columns: PropTypes.array,\n components: PropTypes.object,\n dataSource: PropTypes.array,\n fixed: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n handleBodyScroll: PropTypes.func,\n prefixCls: PropTypes.string,\n forwardedRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),\n scroll: PropTypes.shape({\n x: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.bool]),\n y: PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n }),\n selectedRowKeysSet: PropTypes.instanceOf(Set).isRequired,\n showHeader: PropTypes.bool,\n onDidUpdate: PropTypes.func,\n onHeaderRow: PropTypes.func\n};\nHeadTable.defaultProps = {\n handleBodyScroll: _noop\n};\nexport default /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(HeadTable, Object.assign({}, props, {\n forwardedRef: ref\n})));","import _isObject from \"lodash/isObject\";\nimport _findLastIndex from \"lodash/findLastIndex\";\nimport _isMap from \"lodash/isMap\";\nimport _includes from \"lodash/includes\";\nimport _get from \"lodash/get\";\nimport BaseFoundation from '../base/foundation';\nimport { strings } from './constants';\nimport { getRecordKey, genExpandedRowKey, getRecordChildren, expandBtnShouldInRow } from './utils';\nexport default class TableBodyFoundation extends BaseFoundation {\n init() {\n this.initVirtualizedData();\n this.initExpandBtnShouldInRow();\n }\n destroy() {\n this.unobserveBodyResize();\n }\n initVirtualizedData(cb) {\n this._adapter.setVirtualizedData(this.flattenData(this.getProp('dataSource')), cb);\n }\n initExpandBtnShouldInRow(newExpandRelatedProps) {\n const props = this.getProps(); // TODO check: this._adapter.getProps -> this.getProps\n const cachedExpandBtnShouldInRow = expandBtnShouldInRow(props);\n this._adapter.setCachedExpandBtnShouldInRow(cachedExpandBtnShouldInRow);\n if (!_isObject(newExpandRelatedProps) && !newExpandRelatedProps) {\n const expandRelatedProps = strings.EXPAND_RELATED_PROPS;\n newExpandRelatedProps = expandRelatedProps.map(key => _get(props, key, undefined));\n }\n this._adapter.setCachedExpandRelatedProps(newExpandRelatedProps);\n }\n flattenData() {\n let dataSource = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n let parentKeys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n let childrenKeys = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n const flattenData = [];\n const {\n rowKey,\n childrenRecordName,\n expandedRowRender,\n expandedRowKeys,\n groups\n } = this.getProps();\n if (level === 0 && _isMap(groups)) {\n groups.forEach((set, key) => {\n const firstIndex = dataSource.findIndex(record => set.has(getRecordKey(record, rowKey)));\n if (firstIndex > -1) {\n const lastIndex = _findLastIndex(dataSource, record => set.has(getRecordKey(record, rowKey)));\n const expanded = _includes(expandedRowKeys, key);\n flattenData.push({\n key,\n level,\n sectionRow: true,\n group: set,\n groupKey: key,\n expanded\n });\n if (expanded) {\n flattenData.push(...this.flattenData(dataSource.slice(firstIndex, lastIndex + 1), level + 1, [...parentKeys], [...childrenKeys]));\n }\n }\n });\n } else {\n dataSource.forEach((record, index) => {\n const recordKey = getRecordKey(record, rowKey);\n const children = getRecordChildren(record, childrenRecordName);\n if (level) {\n childrenKeys.push(recordKey);\n }\n const item = {\n key: recordKey,\n record,\n level,\n parentKeys: [...parentKeys],\n childrenKeys: [...childrenKeys]\n };\n flattenData.push(item);\n const extras = [];\n if (_includes(expandedRowKeys, recordKey)) {\n if (Array.isArray(children) && children.length) {\n extras.push(...this.flattenData(children, level + 1, [...item.parentKeys], [...item.childrenKeys]));\n } else if (expandedRowRender) {\n extras.push({\n key: genExpandedRowKey(recordKey),\n level,\n expandedRow: true,\n record\n });\n }\n flattenData.push(...extras);\n }\n });\n }\n return flattenData;\n }\n /**\n * Use ResizeObserver to monitor changes in the size of the body content area, and notify Table to recalculate if it changes. columns #1219\n * (Only monitor the scroll.y scene, other scenes are not monitored, because the header of the scroll.y scene is a separate table, and a scrollbar column will be inserted)\n */\n observeBodyResize(bodyDOM) {\n const {\n scroll\n } = this.getProps(); // TODO check: this._adapter.getProps -> this.getProps\n if (_get(scroll, 'y')) {\n return this._adapter.observeBodyResize(bodyDOM);\n }\n }\n unobserveBodyResize() {\n return this._adapter.unobserveBodyResize();\n }\n}","import BaseFoundation from '../base/foundation';\nexport default class TableRowFoundation extends BaseFoundation {\n handleClick(e) {\n const {\n expanded,\n rowKey\n } = this.getProps();\n this._adapter.notifyClick(rowKey, e, expanded);\n }\n handleDoubleClick(e) {\n this._adapter.notifyDoubleClick(this.getProp('record'), e);\n }\n handleMouseEnter(e) {\n const record = this.getProp('record');\n this._adapter.notifyMouseEnter(record, e);\n }\n handleMouseLeave(e) {\n const record = this.getProp('record');\n this._adapter.notifyMouseLeave(record, e);\n }\n}","import BaseFoundation from '../base/foundation';\nexport default class TableCellFoundation extends BaseFoundation {\n handleClick(e) {\n this._adapter.notifyClick(this.getProp('record'), e);\n }\n}","import _isEqual from \"lodash/isEqual\";\nimport _merge from \"lodash/merge\";\nimport _omit from \"lodash/omit\";\nimport _set from \"lodash/set\";\nimport _noop from \"lodash/noop\";\nimport _get from \"lodash/get\";\nimport React, { createRef, Fragment } from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses, numbers } from '@douyinfe/semi-foundation/lib/es/table/constants';\nimport TableCellFoundation from '@douyinfe/semi-foundation/lib/es/table/cellFoundation';\nimport { isSelectionColumn, isExpandedColumn, getRTLAlign, shouldShowEllipsisTitle, getRTLFlexAlign } from '@douyinfe/semi-foundation/lib/es/table/utils';\nimport BaseComponent from '../_base/baseComponent';\nimport Context from './table-context';\nimport { amendTableWidth } from './utils';\nfunction isInvalidRenderCellText(text) {\n return text && ! /*#__PURE__*/React.isValidElement(text) && Object.prototype.toString.call(text) === '[object Object]';\n}\nexport default class TableCell extends BaseComponent {\n get adapter() {\n var _this = this;\n return Object.assign(Object.assign({}, super.adapter), {\n notifyClick: function () {\n const {\n onClick\n } = _this.props;\n if (typeof onClick === 'function') {\n onClick(...arguments);\n }\n }\n });\n }\n constructor(props) {\n super(props);\n this.setRef = ref => this.ref = ref;\n this.handleClick = e => {\n this.foundation.handleClick(e);\n const customCellProps = this.adapter.getCache('customCellProps');\n if (customCellProps && typeof customCellProps.onClick === 'function') {\n customCellProps.onClick(e);\n }\n };\n this.ref = /*#__PURE__*/createRef();\n this.foundation = new TableCellFoundation(this.adapter);\n }\n /**\n * Control whether to execute the render function of the cell\n * 1. Scenes that return true\n * - The cell contains the selection state, you need to calculate whether its selection state has changed during selection\n * - The cell contains the folding state, it needs to be calculated when the folding state has changed\n * 2. Scenarios that return false\n * - Cells without table operation operation status, only need to judge that their props have changed\n * At this time, the update of the table cell is controlled by the user. At this time, its update will not affect other cells\n *\n * 控制是否执行cell的render函数\n * 1. 返回true的场景\n * - cell内包含选择状态,需要在选择时计算它的选择态是否发生变化\n * - cell内包含折叠状态,需要在折叠时计算它的折叠态是否发生了变化\n * 2. 返回false的场景\n * - 没有table操作操作状态的cell,只需判断自己的props发生了变化\n * 此时table cell的更新由用户自己控制,此时它的更新不会影响其他cell\n *\n * @param {*} nextProps\n * @returns\n */\n shouldComponentUpdate(nextProps) {\n const props = this.props;\n const {\n column,\n expandIcon\n } = props;\n const cellInSelectionColumn = isSelectionColumn(column);\n const {\n shouldCellUpdate\n } = column;\n if (typeof shouldCellUpdate === 'function') {\n return shouldCellUpdate(nextProps, props);\n }\n // The expand button may be in a separate column or in the first data column\n const columnHasExpandIcon = isExpandedColumn(column) || expandIcon;\n if ((cellInSelectionColumn || columnHasExpandIcon) && !_isEqual(nextProps, this.props)) {\n return true;\n } else {\n const omitProps = ['selected', 'expanded', 'expandIcon', 'disabled'];\n const propsOmitSelected = _omit(props, omitProps);\n const nextPropsOmitSelected = _omit(nextProps, omitProps);\n if (!_isEqual(nextPropsOmitSelected, propsOmitSelected)) {\n return true;\n }\n }\n return false;\n }\n componentDidUpdate() {\n this.props.onDidUpdate(this.ref);\n }\n getTdProps() {\n const {\n record,\n index,\n column = {},\n fixedLeft,\n fixedRight,\n width,\n height\n } = this.props;\n let tdProps = {};\n let customCellProps = {};\n const {\n direction\n } = this.context;\n const isRTL = direction === 'rtl';\n const fixedLeftFlag = fixedLeft || typeof fixedLeft === 'number';\n const fixedRightFlag = fixedRight || typeof fixedRight === 'number';\n if (fixedLeftFlag) {\n _set(tdProps, isRTL ? 'style.right' : 'style.left', typeof fixedLeft === 'number' ? fixedLeft : 0);\n } else if (fixedRightFlag) {\n _set(tdProps, isRTL ? 'style.left' : 'style.right', typeof fixedRight === 'number' ? fixedRight : 0);\n }\n if (width != null) {\n _set(tdProps, 'style.width', width);\n }\n if (height != null) {\n _set(tdProps, 'style.height', height);\n }\n if (column.onCell) {\n customCellProps = column.onCell(record, index);\n this.adapter.setCache('customCellProps', Object.assign({}, customCellProps));\n tdProps = Object.assign(Object.assign({}, tdProps), _omit(customCellProps, ['style', 'className', 'onClick']));\n const customCellStyle = _get(customCellProps, 'style') || {};\n tdProps.style = Object.assign(Object.assign({}, tdProps.style), customCellStyle);\n }\n if (column.align) {\n const textAlign = getRTLAlign(column.align, direction);\n const justifyContent = getRTLFlexAlign(column.align, direction);\n tdProps.style = Object.assign(Object.assign({}, tdProps.style), {\n textAlign,\n justifyContent\n });\n }\n return {\n tdProps,\n customCellProps\n };\n }\n /**\n * We should return undefined if no dataIndex is specified, but in order to\n * be compatible with object-path's behavior, we return the record object instead.\n */\n renderText(tdProps) {\n const {\n record,\n indentSize,\n prefixCls,\n indent,\n index,\n expandIcon,\n renderExpandIcon,\n column = {}\n } = this.props;\n const {\n dataIndex,\n render,\n useFullRender\n } = column;\n let text, colSpan, rowSpan;\n if (typeof dataIndex === 'number') {\n text = _get(record, dataIndex);\n } else if (!dataIndex || dataIndex.length === 0) {\n text = record;\n } else {\n text = _get(record, dataIndex);\n }\n const indentText = indent && indentSize ? (/*#__PURE__*/React.createElement(\"span\", {\n style: {\n paddingLeft: `${indentSize * indent}px`\n },\n className: `${prefixCls}-row-indent indent-level-${indent}`\n })) : null;\n // column.render\n const realExpandIcon = typeof renderExpandIcon === 'function' ? renderExpandIcon(record) : expandIcon;\n if (render) {\n const renderOptions = {\n expandIcon: realExpandIcon\n };\n // column.useFullRender\n if (useFullRender) {\n const {\n renderSelection\n } = this.context;\n const realSelection = typeof renderSelection === 'function' ? renderSelection(record) : null;\n Object.assign(renderOptions, {\n selection: realSelection,\n indentText\n });\n }\n text = render(text, record, index, renderOptions);\n if (isInvalidRenderCellText(text)) {\n tdProps = text.props ? _merge(tdProps, text.props) : tdProps;\n colSpan = tdProps.colSpan;\n rowSpan = tdProps.rowSpan;\n text = text.children;\n }\n }\n return {\n text,\n indentText,\n rowSpan,\n colSpan,\n realExpandIcon,\n tdProps\n };\n }\n renderInner(text, indentText, realExpandIcon) {\n const {\n prefixCls,\n isSection,\n expandIcon,\n column = {}\n } = this.props;\n const {\n tableWidth,\n anyColumnFixed\n } = this.context;\n const {\n useFullRender\n } = column;\n let inner = null;\n if (useFullRender) {\n inner = text;\n } else {\n inner = [/*#__PURE__*/React.createElement(Fragment, {\n key: 'indentText'\n }, indentText), /*#__PURE__*/React.createElement(Fragment, {\n key: 'expandIcon'\n }, expandIcon ? realExpandIcon : null), /*#__PURE__*/React.createElement(Fragment, {\n key: 'text'\n }, text)];\n }\n if (isSection) {\n inner = /*#__PURE__*/React.createElement(\"div\", {\n className: classnames(`${prefixCls}-section-inner`),\n style: {\n width: anyColumnFixed ? amendTableWidth(tableWidth) : undefined\n }\n }, inner);\n }\n return inner;\n }\n render() {\n const {\n prefixCls,\n column = {},\n component: BodyCell,\n fixedLeft,\n fixedRight,\n lastFixedLeft,\n firstFixedRight,\n colIndex\n } = this.props;\n const {\n direction\n } = this.context;\n const isRTL = direction === 'rtl';\n const {\n className,\n ellipsis\n } = column;\n const fixedLeftFlag = fixedLeft || typeof fixedLeft === 'number';\n const fixedRightFlag = fixedRight || typeof fixedRight === 'number';\n const {\n tdProps,\n customCellProps\n } = this.getTdProps();\n const renderTextResult = this.renderText(tdProps);\n let {\n text\n } = renderTextResult;\n const {\n indentText,\n rowSpan,\n colSpan,\n realExpandIcon,\n tdProps: newTdProps\n } = renderTextResult;\n let title;\n const shouldShowTitle = shouldShowEllipsisTitle(ellipsis);\n if (shouldShowTitle) {\n if (typeof text === 'string') {\n title = text;\n }\n }\n if (rowSpan === 0 || colSpan === 0) {\n return null;\n }\n if (isInvalidRenderCellText(text)) {\n text = null;\n }\n const inner = this.renderInner(text, indentText, realExpandIcon);\n let isFixedLeft, isFixedLeftLast, isFixedRight, isFixedRightFirst;\n if (isRTL) {\n isFixedLeft = fixedRightFlag;\n isFixedLeftLast = firstFixedRight;\n isFixedRight = fixedLeftFlag;\n isFixedRightFirst = lastFixedLeft;\n } else {\n isFixedLeft = fixedLeftFlag;\n isFixedLeftLast = lastFixedLeft;\n isFixedRight = fixedRightFlag;\n isFixedRightFirst = firstFixedRight;\n }\n const columnCls = classnames(className, `${prefixCls}-row-cell`, _get(customCellProps, 'className'), {\n [`${prefixCls}-cell-fixed-left`]: isFixedLeft,\n [`${prefixCls}-cell-fixed-left-last`]: isFixedLeftLast,\n [`${prefixCls}-cell-fixed-right`]: isFixedRight,\n [`${prefixCls}-cell-fixed-right-first`]: isFixedRightFirst,\n [`${prefixCls}-row-cell-ellipsis`]: ellipsis\n });\n return /*#__PURE__*/React.createElement(BodyCell, Object.assign({\n role: \"gridcell\",\n \"aria-colindex\": colIndex + 1,\n className: columnCls,\n onClick: this.handleClick,\n title: title\n }, newTdProps, {\n ref: this.setRef\n }), inner);\n }\n}\nTableCell.contextType = Context;\nTableCell.defaultProps = {\n indent: 0,\n indentSize: numbers.DEFAULT_INDENT_WIDTH,\n onClick: _noop,\n prefixCls: cssClasses.PREFIX,\n component: 'td',\n onDidUpdate: _noop,\n column: {}\n};\nTableCell.propTypes = {\n record: PropTypes.object,\n prefixCls: PropTypes.string,\n index: PropTypes.number,\n fixedLeft: PropTypes.oneOfType([PropTypes.bool, PropTypes.number]),\n lastFixedLeft: PropTypes.bool,\n fixedRight: PropTypes.oneOfType([PropTypes.bool, PropTypes.number]),\n firstFixedRight: PropTypes.bool,\n indent: PropTypes.number,\n indentSize: PropTypes.number,\n column: PropTypes.object,\n expandIcon: PropTypes.any,\n renderExpandIcon: PropTypes.func,\n hideExpandedColumn: PropTypes.bool,\n component: PropTypes.any,\n onClick: PropTypes.func,\n onDidUpdate: PropTypes.func,\n isSection: PropTypes.bool,\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n selected: PropTypes.bool,\n expanded: PropTypes.bool,\n colIndex: PropTypes.number\n};","import _pick from \"lodash/pick\";\nimport _isEqual from \"lodash/isEqual\";\nimport _omit from \"lodash/omit\";\nimport _stubTrue from \"lodash/stubTrue\";\nimport _get from \"lodash/get\";\nimport _noop from \"lodash/noop\";\nimport _each from \"lodash/each\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { strings, cssClasses } from '@douyinfe/semi-foundation/lib/es/table/constants';\nimport shallowEqualObjects from '@douyinfe/semi-foundation/lib/es/utils/shallowEqualObjects';\nimport TableRowFoundation from '@douyinfe/semi-foundation/lib/es/table/tableRowFoundation';\nimport { isLastLeftFixed, arrayAdd, isFixedLeft, isFixedRight, isScrollbarColumn, isFirstFixedRight, isInnerColumnKey, isExpandedColumn } from '@douyinfe/semi-foundation/lib/es/table/utils';\nimport BaseComponent from '../../_base/baseComponent';\nimport TableCell from '../TableCell';\n/**\n * avoid affected by https://www.npmjs.com/package/babel-plugin-transform-react-remove-prop-types\n */\nexport const baseRowPropTypes = {\n anyColumnFixed: PropTypes.bool,\n cellWidths: PropTypes.array.isRequired,\n className: PropTypes.string,\n columns: PropTypes.array.isRequired,\n components: PropTypes.object.isRequired,\n disabled: PropTypes.bool,\n expandIcon: PropTypes.oneOfType([PropTypes.bool, PropTypes.func, PropTypes.node]),\n expandableRow: PropTypes.bool,\n expanded: PropTypes.bool,\n displayNone: PropTypes.bool,\n expandedRow: PropTypes.bool,\n fixed: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n hideExpandedColumn: PropTypes.bool,\n hovered: PropTypes.bool.isRequired,\n indent: PropTypes.number,\n indentSize: PropTypes.number,\n index: PropTypes.number,\n isSection: PropTypes.bool,\n level: PropTypes.number,\n onDidUpdate: PropTypes.func,\n onHover: PropTypes.func,\n onRow: PropTypes.func,\n onRowClick: PropTypes.func,\n onRowContextMenu: PropTypes.func,\n onRowDoubleClick: PropTypes.func,\n onRowMouseEnter: PropTypes.func,\n onRowMouseLeave: PropTypes.func,\n prefixCls: PropTypes.string,\n record: PropTypes.object,\n renderExpandIcon: PropTypes.func,\n replaceClassName: PropTypes.string,\n rowExpandable: PropTypes.func,\n rowKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n selected: PropTypes.bool,\n store: PropTypes.object,\n style: PropTypes.object,\n virtualized: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n visible: PropTypes.bool.isRequired\n};\nexport default class TableRow extends BaseComponent {\n get adapter() {\n var _this = this;\n return Object.assign(Object.assign({}, super.adapter), {\n notifyClick: function () {\n return _this.props.onRowClick(...arguments);\n },\n notifyDoubleClick: function () {\n return _this.props.onRowDoubleClick(...arguments);\n },\n notifyMouseLeave: function () {\n _this.props.onHover(false, _this.props.rowKey);\n _this.props.onRowMouseEnter(...arguments);\n },\n notifyMouseEnter: function () {\n _this.props.onHover(true, _this.props.rowKey);\n _this.props.onRowMouseEnter(...arguments);\n }\n });\n }\n constructor(props) {\n super(props);\n // Pass true to render the tree-shaped expand button\n this.renderExpandIcon = record => {\n const {\n renderExpandIcon\n } = this.props;\n return renderExpandIcon(record, true);\n };\n this.handleMouseEnter = e => {\n this.foundation.handleMouseEnter(e);\n const customRowProps = this.adapter.getCache('customRowProps');\n if (typeof (customRowProps === null || customRowProps === void 0 ? void 0 : customRowProps.onMouseEnter) === 'function') {\n customRowProps.onMouseEnter(e);\n }\n };\n this.handleMouseLeave = e => {\n this.foundation.handleMouseLeave(e);\n const customRowProps = this.adapter.getCache('customRowProps');\n if (typeof (customRowProps === null || customRowProps === void 0 ? void 0 : customRowProps.onMouseLeave) === 'function') {\n customRowProps.onMouseLeave(e);\n }\n };\n this.handleClick = e => {\n this.foundation.handleClick(e);\n const customRowProps = this.adapter.getCache('customRowProps');\n if (customRowProps && typeof customRowProps.onClick === 'function') {\n customRowProps.onClick(e);\n }\n };\n this.foundation = new TableRowFoundation(this.adapter);\n }\n componentDidMount() {\n // fix #745\n // didmount/willUnmount may be called twice when React.StrictMode is true in React 18, we need to ensure that this.cache.customRowProps is correct\n const {\n onRow,\n index,\n record\n } = this.props;\n const customRowProps = this.adapter.getCache('customRowProps');\n if (typeof customRowProps === 'undefined') {\n const _a = onRow(record, index) || {},\n {\n className: customClassName,\n style: customStyle\n } = _a,\n rowProps = __rest(_a, [\"className\", \"style\"]);\n this.adapter.setCache('customRowProps', Object.assign({}, rowProps));\n }\n }\n shouldComponentUpdate(nextProps) {\n /**\n * Shallow comparison of incoming props to simulate PureComponent\n * Deep comparison cellWidths\n *\n * 浅层对比传入的 props,模拟 PureComponent\n * 深比较 cellWidths\n */\n const omitProps = ['cellWidths'];\n const isPropsShallowEqual = shallowEqualObjects(_omit(nextProps, omitProps), _omit(this.props, omitProps));\n if (!isPropsShallowEqual || !_isEqual(_pick(nextProps, omitProps), _pick(this.props, omitProps))) {\n return true;\n }\n return false;\n }\n renderCells() {\n const {\n columns,\n record,\n index,\n prefixCls,\n fixed,\n components,\n expandableRow,\n level,\n expandIcon,\n rowExpandable,\n isSection,\n expandedRow,\n virtualized,\n indentSize,\n hideExpandedColumn,\n cellWidths,\n selected,\n expanded,\n disabled,\n onDidUpdate\n } = this.props;\n const BodyCell = _get(components, 'body.cell', strings.DEFAULT_COMPONENTS.body.cell);\n const cells = [];\n const displayExpandedColumn = rowExpandable(record);\n let firstIndex = 0;\n // const dataColumns = getDataColumns(columns);\n _each(columns, (column, columnIndex) => {\n const columnKey = _get(column, 'key');\n const expandableProps = {};\n if (fixed !== 'right') {\n if (isInnerColumnKey(columnKey)) {\n firstIndex++;\n }\n if (expandableRow && columnIndex === firstIndex) {\n expandableProps.renderExpandIcon = this.renderExpandIcon;\n if (hideExpandedColumn || isSection) {\n expandableProps.expandIcon = expandIcon != null ? expandIcon : true;\n }\n }\n // Only the first data row will be indented\n if (level != null && columnIndex === firstIndex) {\n expandableProps.indent = level;\n const isBool = typeof expandIcon === 'boolean';\n const hasExpandIcon = expandIcon !== false || !isBool && expandIcon !== null;\n // 如果 expandIcon 为空,不需要 indent\n if (!expandableRow && hideExpandedColumn && hasExpandIcon) {\n expandableProps.indent = level + 1;\n }\n }\n }\n if (isExpandedColumn(column) && !displayExpandedColumn) {\n cells.push(/*#__PURE__*/React.createElement(TableCell, {\n key: columnIndex,\n colIndex: columnIndex,\n isSection: isSection\n }));\n } else if (!isScrollbarColumn(column)) {\n const diyProps = {};\n if (BodyCell !== strings.DEFAULT_COMPONENTS.body.cell && virtualized && !expandedRow) {\n diyProps.width = _get(cellWidths, columnIndex);\n }\n cells.push(/*#__PURE__*/React.createElement(TableCell, Object.assign({\n colIndex: columnIndex\n }, expandableProps, diyProps, {\n hideExpandedColumn: hideExpandedColumn,\n indentSize: indentSize,\n isSection: isSection,\n prefixCls: `${prefixCls}`,\n column: column,\n key: columnIndex,\n index: index,\n record: record,\n component: BodyCell,\n fixedLeft: isFixedLeft(column) && arrayAdd(cellWidths, 0, columnIndex),\n lastFixedLeft: isLastLeftFixed(columns, column),\n fixedRight: isFixedRight(column) && arrayAdd(cellWidths, columnIndex + 1),\n firstFixedRight: isFirstFixedRight(columns, column),\n selected: selected,\n expanded: expanded,\n disabled: disabled,\n onDidUpdate: onDidUpdate\n })));\n }\n });\n return cells;\n }\n render() {\n const {\n style\n } = this.props;\n const {\n components,\n prefixCls,\n selected,\n onRow,\n index,\n className,\n replaceClassName,\n record,\n hovered,\n expanded,\n displayNone,\n expandableRow,\n level,\n expandedRow,\n isSection,\n rowKey\n } = this.props;\n const BodyRow = components.body.row;\n const _a = onRow(record, index) || {},\n {\n className: customClassName,\n style: customStyle\n } = _a,\n rowProps = __rest(_a, [\"className\", \"style\"]);\n this.adapter.setCache('customRowProps', Object.assign({}, rowProps));\n const baseRowStyle = Object.assign(Object.assign({}, style), customStyle);\n const rowCls = typeof replaceClassName === 'string' && replaceClassName.length ? classnames(replaceClassName, customClassName) : classnames(className, `${prefixCls}-row`, {\n [`${prefixCls}-row-selected`]: selected,\n [`${prefixCls}-row-expanded`]: expanded,\n [`${prefixCls}-row-hovered`]: hovered,\n [`${prefixCls}-row-hidden`]: displayNone\n }, customClassName);\n const ariaProps = {};\n if (typeof index === 'number') {\n ariaProps['aria-rowindex'] = index + 1;\n }\n if (expandableRow) {\n ariaProps['aria-expanded'] = expanded;\n }\n // if row is expandedRow, set it's level to 2 \n if (expanded || expandedRow) {\n ariaProps['aria-level'] = 2;\n }\n if (typeof level === 'number') {\n ariaProps['aria-level'] = level + 1;\n }\n if (isSection) {\n ariaProps['aria-level'] = 1;\n }\n return /*#__PURE__*/React.createElement(BodyRow, Object.assign({\n role: \"row\"\n }, ariaProps, rowProps, {\n style: baseRowStyle,\n className: rowCls,\n \"data-row-key\": rowKey,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n onClick: this.handleClick\n }), this.renderCells());\n }\n}\nTableRow.propTypes = baseRowPropTypes;\nTableRow.defaultProps = {\n columns: [],\n rowExpandable: _stubTrue,\n components: {\n body: {\n row: 'tr',\n cell: 'td'\n }\n },\n prefixCls: cssClasses.PREFIX,\n onRow: _noop,\n onRowClick: _noop,\n onRowDoubleClick: _noop,\n onRowMouseEnter: _noop,\n onRowMouseLeave: _noop,\n onHover: _noop,\n onDidUpdate: _noop,\n visible: true,\n hovered: false,\n selected: false,\n disabled: false\n};","export default function shallowEqualObjects(objA, objB) {\n if (objA === objB) {\n return true;\n }\n if (!objA || !objB) {\n return false;\n }\n const aKeys = Object.keys(objA);\n const bKeys = Object.keys(objB);\n const len = aKeys.length;\n if (bKeys.length !== len) {\n return false;\n }\n for (let i = 0; i < len; i++) {\n const key = aKeys[i];\n if (objA[key] !== objB[key] || !Object.prototype.hasOwnProperty.call(objB, key)) {\n return false;\n }\n }\n return true;\n}","import _isNull from \"lodash/isNull\";\nimport _set from \"lodash/set\";\nimport _get from \"lodash/get\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { PureComponent, isValidElement } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/table/constants';\nimport { arrayAdd, filterColumns } from '@douyinfe/semi-foundation/lib/es/table/utils';\nimport TableContext from '../table-context';\nimport TableRow from './BaseRow';\nimport { amendTableWidth } from '../utils';\n/**\n * Render expanded row\n */\nexport default class TableExpandedRow extends PureComponent {\n render() {\n const {\n record,\n columns: propColumns = [],\n prefixCls,\n className,\n expanded,\n expandedRowRender,\n renderExpandIcon,\n index,\n store,\n components,\n style,\n virtualized,\n indentSize,\n cellWidths,\n displayNone\n } = this.props;\n const {\n tableWidth,\n anyColumnFixed,\n getCellWidths\n } = this.context;\n const cell = expandedRowRender(record, index, expanded);\n let children = null;\n const props = {};\n let column = {};\n if (_isNull(cell)) {\n return null;\n } else if (/*#__PURE__*/isValidElement(cell)) {\n children = cell;\n } else if (cell && Object.prototype.toString.call(cell) === '[object Object]') {\n const _a = cell,\n {\n children: cellChildren,\n fixed\n } = _a,\n restProps = __rest(_a, [\"children\", \"fixed\"]);\n children = cellChildren;\n column = Object.assign({}, restProps);\n }\n if (_get(components, 'body.cell') !== strings.DEFAULT_COMPONENTS.body.cell) {\n if (virtualized) {\n _set(props, 'style.height', '100%');\n }\n _set(props, 'style.display', 'block');\n _set(props, 'style.width', arrayAdd(cellWidths, 0, propColumns.length));\n } else {\n // Remove the row where the scroll bar is located\n props.colSpan = filterColumns(propColumns).length;\n }\n const columns = [Object.assign({\n render: () => ({\n props,\n children: (/*#__PURE__*/React.createElement(\"div\", {\n className: classnames(`${prefixCls}-expand-inner`),\n style: {\n width: anyColumnFixed ? amendTableWidth(tableWidth) : undefined\n }\n }, children))\n })\n }, column)];\n const rowCls = classnames(className, `${prefixCls}-row-expand`);\n const baseRowCellWidths = getCellWidths(columns);\n return /*#__PURE__*/React.createElement(TableRow, {\n style: style,\n components: components,\n className: rowCls,\n expandedRow: true,\n renderExpandIcon: renderExpandIcon,\n rowKey: `${record.key}-expanded-row`,\n columns: columns,\n store: store,\n virtualized: virtualized,\n indentSize: indentSize,\n cellWidths: baseRowCellWidths,\n displayNone: displayNone\n });\n }\n}\nTableExpandedRow.contextType = TableContext;\nTableExpandedRow.propTypes = {\n cellWidths: PropTypes.array.isRequired,\n className: PropTypes.string,\n columns: PropTypes.array,\n components: PropTypes.object,\n defaultExpandAllRows: PropTypes.bool,\n defaultExpandedRowKeys: PropTypes.array,\n expandIcon: PropTypes.oneOfType([PropTypes.object, PropTypes.node, PropTypes.func]),\n expandRowByClick: PropTypes.bool,\n expanded: PropTypes.bool,\n expandedRowKeys: PropTypes.array,\n expandedRowRender: PropTypes.func,\n indentSize: PropTypes.number,\n index: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n onExpand: PropTypes.func,\n onExpandedRowsChange: PropTypes.func,\n prefixCls: PropTypes.string,\n record: PropTypes.object,\n renderExpandIcon: PropTypes.func,\n store: PropTypes.object,\n style: PropTypes.object,\n virtualized: PropTypes.oneOfType([PropTypes.bool, PropTypes.object])\n};\nTableExpandedRow.defaultProps = {\n record: {},\n prefixCls: cssClasses.PREFIX\n};","import _isSet from \"lodash/isSet\";\nimport _get from \"lodash/get\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { PureComponent, isValidElement } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/table/constants';\nimport { filterColumns } from '@douyinfe/semi-foundation/lib/es/table/utils';\nimport BaseRow from './BaseRow';\nimport TableContext from '../table-context';\n/**\n * avoid affected by https://www.npmjs.com/package/babel-plugin-transform-react-remove-prop-types\n */\nexport const sectionRowPropTypes = {\n record: PropTypes.object,\n index: PropTypes.number,\n columns: PropTypes.array,\n group: PropTypes.object.isRequired,\n groupKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n data: PropTypes.array,\n renderGroupSection: PropTypes.func,\n onGroupedRow: PropTypes.func,\n clickGroupedRowToExpand: PropTypes.bool,\n components: PropTypes.object,\n expanded: PropTypes.bool,\n prefixCls: PropTypes.string,\n onExpand: PropTypes.func,\n virtualized: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\n style: PropTypes.object,\n renderExpandIcon: PropTypes.func,\n className: PropTypes.string,\n store: PropTypes.object,\n rowKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func])\n};\n/**\n * Grouping component title row\n */\nclass SectionRow extends PureComponent {\n constructor() {\n var _this;\n super(...arguments);\n _this = this;\n this.onRow = function () {\n const {\n onGroupedRow,\n clickGroupedRowToExpand,\n onExpand,\n groupKey,\n expanded\n } = _this.props;\n const rowProps = {};\n if (typeof onGroupedRow === 'function') {\n Object.assign(rowProps, onGroupedRow(...arguments));\n }\n return Object.assign(Object.assign({}, rowProps), {\n onClick: e => {\n if (typeof onExpand === 'function' && clickGroupedRowToExpand) {\n onExpand(!expanded, groupKey, e);\n }\n if (typeof rowProps.onClick === 'function') {\n rowProps.onClick(e);\n }\n }\n });\n };\n this.collectGroupedData = () => {\n const {\n data,\n group,\n rowKey\n } = this.props;\n if (Array.isArray(data) && data.length && _isSet(group)) {\n return data.filter(record => {\n const realRowKey = typeof rowKey === 'function' ? rowKey(record) : _get(record, rowKey);\n return realRowKey != null && realRowKey !== '' && group.has(realRowKey);\n });\n }\n return [];\n };\n this.renderExpandIcon = record => {\n const {\n renderExpandIcon,\n groupKey\n } = this.props;\n if (typeof renderExpandIcon === 'function') {\n return renderExpandIcon(record, false, groupKey);\n }\n return null;\n };\n }\n isInnerColumnKey(key) {\n if (key != null) {\n return [strings.DEFAULT_KEY_COLUMN_EXPAND, strings.DEFAULT_KEY_COLUMN_SELECTION].includes(key);\n }\n return false;\n }\n render() {\n const {\n record,\n columns: propColumns = [],\n prefixCls,\n className,\n expanded,\n renderGroupSection,\n components,\n index,\n store,\n group,\n groupKey,\n virtualized,\n style\n } = this.props;\n const props = {};\n let column = {};\n let children = null;\n // render title\n const cell = typeof renderGroupSection === 'function' ? renderGroupSection(groupKey, [...group]) : null;\n if (/*#__PURE__*/isValidElement(cell)) {\n children = cell;\n } else if (cell && Object.prototype.toString.call(cell) === '[object Object]') {\n const _a = cell,\n {\n children: cellChildren\n } = _a,\n restProps = __rest(_a, [\"children\"]);\n children = cellChildren;\n column = Object.assign({}, restProps);\n }\n // Filter out scroll-bar column\n props.colSpan = filterColumns(propColumns).length;\n const columns = [Object.assign({\n render: () => ({\n props,\n children\n })\n }, column)];\n const rowCls = classnames(className, `${prefixCls}-row-section`, {\n on: expanded\n });\n const {\n getCellWidths\n } = this.context;\n const baseRowCellWidths = getCellWidths(columns, null, true);\n return /*#__PURE__*/React.createElement(BaseRow, {\n components: components,\n virtualized: virtualized,\n index: index,\n onRow: this.onRow,\n expanded: expanded,\n expandIcon: true,\n isSection: true,\n record: record,\n replaceClassName: rowCls,\n expandableRow: true,\n renderExpandIcon: this.renderExpandIcon,\n rowKey: groupKey,\n columns: columns,\n store: store,\n style: style,\n cellWidths: baseRowCellWidths\n });\n }\n}\nSectionRow.contextType = TableContext;\nSectionRow.propTypes = sectionRowPropTypes;\nSectionRow.defaultProps = {\n prefixCls: cssClasses.PREFIX,\n components: {\n body: {\n row: 'tr',\n cell: 'td'\n }\n }\n};\nexport default SectionRow;","import _isFunction from \"lodash/isFunction\";\nimport _isNull from \"lodash/isNull\";\nimport _pick from \"lodash/pick\";\nimport _isEqual from \"lodash/isEqual\";\nimport _each from \"lodash/each\";\nimport _isMap from \"lodash/isMap\";\nimport _size from \"lodash/size\";\nimport _get from \"lodash/get\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { VariableSizeList as List } from 'react-window';\nimport { arrayAdd, getRecordKey, isExpanded, isSelected, isDisabled, getRecord, genExpandedRowKey, getDefaultVirtualizedRowConfig, isTreeTable } from '@douyinfe/semi-foundation/lib/es/table/utils';\nimport BodyFoundation from '@douyinfe/semi-foundation/lib/es/table/bodyFoundation';\nimport { strings } from '@douyinfe/semi-foundation/lib/es/table/constants';\nimport BaseComponent from '../../_base/baseComponent';\nimport { logger } from '../utils';\nimport ColGroup from '../ColGroup';\nimport BaseRow, { baseRowPropTypes } from './BaseRow';\nimport ExpandedRow from './ExpandedRow';\nimport SectionRow, { sectionRowPropTypes } from './SectionRow';\nimport TableHeader from '../TableHeader';\nimport TableContext from '../table-context';\nclass Body extends BaseComponent {\n constructor(props, context) {\n var _this;\n super(props);\n _this = this;\n this.forwardRef = node => {\n const {\n forwardedRef\n } = this.props;\n this.ref.current = node;\n this.foundation.observeBodyResize(node);\n if (typeof forwardedRef === 'function') {\n forwardedRef(node);\n } else if (forwardedRef && typeof forwardedRef === 'object') {\n forwardedRef.current = node;\n }\n };\n this.setListRef = listInstance => {\n this.listRef.current = listInstance;\n const {\n getVirtualizedListRef\n } = this.context;\n if (getVirtualizedListRef) {\n if (this.props.virtualized) {\n getVirtualizedListRef(this.listRef);\n } else {\n console.warn('getVirtualizedListRef only works with virtualized. ' + 'See https://semi.design/en-US/show/table for more information.');\n }\n }\n };\n this.itemSize = index => {\n const {\n virtualized,\n size: tableSize\n } = this.props;\n const {\n virtualizedData\n } = this.state;\n const virtualizedItem = _get(virtualizedData, index);\n const defaultConfig = getDefaultVirtualizedRowConfig(tableSize, virtualizedItem.sectionRow);\n const itemSize = _get(virtualized, 'itemSize', defaultConfig.height);\n let realSize = itemSize;\n if (typeof itemSize === 'function') {\n realSize = itemSize(index, {\n expandedRow: _get(virtualizedItem, 'expandedRow', false),\n sectionRow: _get(virtualizedItem, 'sectionRow', false)\n });\n }\n if (realSize < defaultConfig.minHeight) {\n logger.warn(`The computed real \\`itemSize\\` cannot be less than ${defaultConfig.minHeight}`);\n }\n return realSize;\n };\n this.itemKey = (index, data) => _get(data, [index, 'key'], index);\n this.handleRowClick = (rowKey, e, expand) => {\n const {\n handleRowExpanded\n } = this.context;\n handleRowExpanded(!expand, rowKey, e);\n };\n this.handleVirtualizedScroll = function () {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const onScroll = _get(_this.props.virtualized, 'onScroll');\n if (typeof onScroll === 'function') {\n onScroll(props);\n }\n };\n /**\n * @param {MouseEvent} e\n */\n this.handleVirtualizedBodyScroll = e => {\n const {\n handleBodyScroll\n } = this.props;\n const newScrollLeft = _get(e, 'nativeEvent.target.scrollLeft');\n const newScrollTop = _get(e, 'nativeEvent.target.scrollTop');\n if (newScrollTop === this.state.cache.virtualizedScrollTop) {\n this.handleVirtualizedScroll({\n horizontalScrolling: true\n });\n }\n this.state.cache.virtualizedScrollLeft = newScrollLeft;\n this.state.cache.virtualizedScrollTop = newScrollTop;\n if (typeof handleBodyScroll === 'function') {\n handleBodyScroll(e);\n }\n };\n this.getVirtualizedRowWidth = () => {\n const {\n getCellWidths\n } = this.context;\n const {\n columns\n } = this.props;\n const cellWidths = getCellWidths(columns);\n const rowWidth = arrayAdd(cellWidths, 0, _size(columns));\n return rowWidth;\n };\n this.renderVirtualizedRow = options => {\n const {\n index,\n style\n } = options;\n const {\n virtualizedData,\n cachedExpandBtnShouldInRow\n } = this.state;\n const {\n flattenedColumns\n } = this.context;\n const virtualizedItem = _get(virtualizedData, [index], {});\n const {\n key,\n parentKeys,\n expandedRow,\n sectionRow\n } = virtualizedItem,\n rest = __rest(virtualizedItem, [\"key\", \"parentKeys\", \"expandedRow\", \"sectionRow\"]);\n const rowWidth = this.getVirtualizedRowWidth();\n const expandBtnShouldInRow = cachedExpandBtnShouldInRow;\n const props = Object.assign(Object.assign(Object.assign(Object.assign({}, this.props), {\n style: Object.assign(Object.assign({}, style), {\n width: rowWidth\n })\n }), rest), {\n columns: flattenedColumns,\n index,\n expandBtnShouldInRow\n });\n return sectionRow ? this.renderSectionRow(props) : expandedRow ? this.renderExpandedRow(props) : this.renderBaseRow(props);\n };\n // virtualized List innerElementType\n this.renderTbody = /*#__PURE__*/React.forwardRef(function () {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let ref = arguments.length > 1 ? arguments[1] : undefined;\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({}, props, {\n onScroll: function () {\n if (props.onScroll) {\n props.onScroll(...arguments);\n }\n },\n // eslint-disable-next-line react/no-this-in-sfc,react/destructuring-assignment\n className: classnames(props.className, `${_this.props.prefixCls}-tbody`),\n style: Object.assign({}, props.style),\n ref: ref\n }));\n });\n // virtualized List outerElementType\n this.renderOuter = /*#__PURE__*/React.forwardRef((props, ref) => {\n const {\n children\n } = props,\n rest = __rest(props, [\"children\"]);\n const {\n handleWheel,\n prefixCls,\n emptySlot,\n dataSource\n } = this.props;\n const tableWidth = this.getVirtualizedRowWidth();\n const tableCls = classnames(`${prefixCls}`, `${prefixCls}-fixed`);\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({}, rest, {\n ref: ref,\n onWheel: function () {\n if (handleWheel) {\n handleWheel(...arguments);\n }\n if (rest.onWheel) {\n rest.onWheel(...arguments);\n }\n },\n onScroll: function () {\n _this.handleVirtualizedBodyScroll(...arguments);\n if (rest.onScroll) {\n rest.onScroll(...arguments);\n }\n }\n }), /*#__PURE__*/React.createElement(\"div\", {\n style: {\n width: tableWidth\n },\n className: tableCls\n }, children), _size(dataSource) === 0 && emptySlot);\n });\n this.onItemsRendered = props => {\n if (this.state.cache.virtualizedScrollLeft && this.ref.current) {\n this.ref.current.scrollLeft = this.state.cache.virtualizedScrollLeft;\n }\n };\n this.renderVirtualizedBody = direction => {\n const {\n scroll,\n prefixCls,\n virtualized,\n columns\n } = this.props;\n const {\n virtualizedData\n } = this.state;\n const {\n getCellWidths\n } = this.context;\n const cellWidths = getCellWidths(columns);\n if (!_size(cellWidths)) {\n return null;\n }\n const rawY = _get(scroll, 'y');\n const yIsNumber = typeof rawY === 'number';\n const y = yIsNumber ? rawY : 600;\n if (!yIsNumber) {\n logger.warn('You have to specific \"scroll.y\" which must be a number for table virtualization!');\n }\n const listStyle = {\n width: '100%',\n height: (virtualizedData === null || virtualizedData === void 0 ? void 0 : virtualizedData.length) ? y : null,\n overflowX: 'auto',\n overflowY: 'auto'\n };\n const wrapCls = classnames(`${prefixCls}-body`);\n return /*#__PURE__*/React.createElement(List, Object.assign({}, typeof virtualized === 'object' ? virtualized : {}, {\n initialScrollOffset: this.state.cache.virtualizedScrollTop,\n onScroll: this.handleVirtualizedScroll,\n onItemsRendered: this.onItemsRendered,\n ref: this.setListRef,\n className: wrapCls,\n outerRef: this.forwardRef,\n height: (virtualizedData === null || virtualizedData === void 0 ? void 0 : virtualizedData.length) ? y : 0,\n width: listStyle.width,\n itemData: virtualizedData,\n itemSize: this.itemSize,\n itemCount: virtualizedData.length,\n itemKey: this.itemKey,\n innerElementType: this.renderTbody,\n outerElementType: this.renderOuter,\n style: Object.assign(Object.assign({}, listStyle), {\n direction\n }),\n direction: direction\n }), this.renderVirtualizedRow);\n };\n /**\n * render group title\n * @param {*} props\n */\n this.renderSectionRow = function () {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n groupKey: undefined\n };\n const {\n dataSource,\n rowKey,\n group,\n groupKey,\n index\n } = props;\n const sectionRowPickKeys = Object.keys(sectionRowPropTypes);\n const sectionRowProps = _pick(props, sectionRowPickKeys);\n const {\n handleRowExpanded\n } = _this.context;\n return /*#__PURE__*/React.createElement(SectionRow, Object.assign({}, sectionRowProps, {\n record: {\n groupKey,\n records: [...group].map(recordKey => getRecord(dataSource, recordKey, rowKey))\n },\n index: index,\n onExpand: handleRowExpanded,\n data: dataSource,\n key: groupKey || index\n }));\n };\n this.renderExpandedRow = function () {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n renderExpandIcon: () => null\n };\n const {\n style,\n components,\n renderExpandIcon,\n expandedRowRender,\n record,\n columns,\n expanded,\n index,\n rowKey,\n virtualized,\n displayNone\n } = props;\n let key = getRecordKey(record, rowKey);\n if (key == null) {\n key = index;\n }\n const {\n flattenedColumns,\n getCellWidths\n } = _this.context;\n // we use memoized cellWidths to avoid re-render expanded row (fix #686)\n if (flattenedColumns !== _this.flattenedColumns) {\n _this.flattenedColumns = flattenedColumns;\n _this.cellWidths = getCellWidths(flattenedColumns);\n }\n return /*#__PURE__*/React.createElement(ExpandedRow, {\n style: style,\n components: components,\n renderExpandIcon: renderExpandIcon,\n expandedRowRender: expandedRowRender,\n record: record,\n columns: columns,\n expanded: expanded,\n index: index,\n virtualized: virtualized,\n key: genExpandedRowKey(key),\n cellWidths: _this.cellWidths,\n displayNone: displayNone\n });\n };\n /**\n * render grouped rows\n * @returns {ReactNode[]} renderedRows\n */\n this.renderGroupedRows = () => {\n const {\n groups,\n dataSource: data,\n rowKey,\n expandedRowKeys,\n keepDOM\n } = this.props;\n const {\n flattenedColumns\n } = this.context;\n const groupsInData = new Map();\n const renderedRows = [];\n if (groups != null && Array.isArray(data) && data.length) {\n data.forEach(record => {\n const recordKey = getRecordKey(record, rowKey);\n groups.forEach((group, key) => {\n if (group.has(recordKey)) {\n if (!groupsInData.has(key)) {\n groupsInData.set(key, new Set([]));\n }\n groupsInData.get(key).add(recordKey);\n return false;\n }\n return undefined;\n });\n });\n }\n let index = -1;\n groupsInData.forEach((group, groupKey) => {\n // Calculate the expanded state of the group\n const expanded = isExpanded(expandedRowKeys, groupKey);\n // Render the title of the group\n renderedRows.push(this.renderSectionRow(Object.assign(Object.assign({}, this.props), {\n columns: flattenedColumns,\n index: ++index,\n group,\n groupKey,\n expanded\n })));\n // Render the grouped content when the group is expanded\n if (expanded || keepDOM) {\n const dataInGroup = [];\n group.forEach(recordKey => {\n const record = getRecord(data, recordKey, rowKey);\n if (record != null) {\n dataInGroup.push(record);\n }\n });\n /**\n * Render the contents of the group row\n */\n renderedRows.push(this.renderBodyRows(dataInGroup, undefined, [], !expanded));\n }\n });\n return renderedRows;\n };\n this.renderBody = direction => {\n const {\n scroll,\n prefixCls,\n columns,\n components,\n fixed,\n handleWheel,\n headerRef,\n handleBodyScroll,\n anyColumnFixed,\n showHeader,\n emptySlot,\n includeHeader,\n dataSource,\n onScroll,\n groups,\n expandedRowRender,\n tableLayout\n } = this.props;\n const x = _get(scroll, 'x');\n const y = _get(scroll, 'y');\n const bodyStyle = {};\n const tableStyle = {};\n const Table = _get(components, 'body.outer', 'table');\n const BodyWrapper = _get(components, 'body.wrapper') || 'tbody';\n if (y) {\n bodyStyle.maxHeight = y;\n }\n if (x) {\n tableStyle.width = x;\n }\n if (anyColumnFixed && _size(dataSource)) {\n // Auto is better than scroll. For example, when there is only scrollY, the scroll axis is not displayed horizontally.\n bodyStyle.overflow = 'auto';\n // Fix weird webkit render bug\n bodyStyle.WebkitTransform = 'translate3d (0, 0, 0)';\n }\n const colgroup = /*#__PURE__*/React.createElement(ColGroup, {\n components: _get(components, 'body'),\n columns: columns,\n prefixCls: prefixCls\n });\n // const tableBody = this.renderBody();\n const wrapCls = `${prefixCls}-body`;\n const baseTable = /*#__PURE__*/React.createElement(\"div\", {\n key: \"bodyTable\",\n className: wrapCls,\n style: bodyStyle,\n ref: this.forwardRef,\n onWheel: handleWheel,\n onScroll: handleBodyScroll\n }, /*#__PURE__*/React.createElement(Table, {\n role: _isMap(groups) || _isFunction(expandedRowRender) || isTreeTable({\n dataSource\n }) ? 'treegrid' : 'grid',\n \"aria-rowcount\": dataSource && dataSource.length,\n \"aria-colcount\": columns && columns.length,\n style: tableStyle,\n className: classnames(prefixCls, {\n [`${prefixCls}-fixed`]: tableLayout === 'fixed'\n })\n }, colgroup, includeHeader && showHeader ? (/*#__PURE__*/React.createElement(TableHeader, Object.assign({}, this.props, {\n ref: headerRef,\n components: components,\n columns: columns\n }))) : null, /*#__PURE__*/React.createElement(BodyWrapper, {\n className: `${prefixCls}-tbody`,\n onScroll: onScroll\n }, _isMap(groups) ? this.renderGroupedRows() : this.renderBodyRows(dataSource))), emptySlot);\n if (fixed && columns.length) {\n return /*#__PURE__*/React.createElement(\"div\", {\n key: \"bodyTable\",\n className: `${prefixCls}-body-outer`\n }, baseTable);\n }\n return baseTable;\n };\n this.ref = /*#__PURE__*/React.createRef();\n this.state = {\n virtualizedData: [],\n cache: {\n virtualizedScrollTop: null,\n virtualizedScrollLeft: null\n },\n cachedExpandBtnShouldInRow: null,\n cachedExpandRelatedProps: []\n };\n this.listRef = /*#__PURE__*/React.createRef();\n const {\n flattenedColumns,\n getCellWidths\n } = context;\n this.foundation = new BodyFoundation(this.adapter);\n this.flattenedColumns = flattenedColumns;\n this.cellWidths = getCellWidths(flattenedColumns);\n this.observer = null;\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n setVirtualizedData: (virtualizedData, cb) => this.setState({\n virtualizedData\n }, cb),\n setCachedExpandBtnShouldInRow: cachedExpandBtnShouldInRow => this.setState({\n cachedExpandBtnShouldInRow\n }),\n setCachedExpandRelatedProps: cachedExpandRelatedProps => this.setState({\n cachedExpandRelatedProps\n }),\n observeBodyResize: bodyWrapDOM => {\n const {\n setBodyHasScrollbar\n } = this.context;\n // Callback when the size of the body dom content changes, notifying Table.jsx whether the bodyHasScrollBar exists\n const resizeCallback = () => {\n const update = () => {\n const {\n offsetWidth,\n clientWidth\n } = bodyWrapDOM;\n const bodyHasScrollBar = clientWidth < offsetWidth;\n setBodyHasScrollbar(bodyHasScrollBar);\n };\n const requestAnimationFrame = window.requestAnimationFrame || window.setTimeout;\n requestAnimationFrame(update);\n };\n // Monitor body dom resize\n if (bodyWrapDOM) {\n if (_get(window, 'ResizeObserver')) {\n if (this.observer) {\n this.observer.unobserve(bodyWrapDOM);\n this.observer = null;\n }\n this.observer = new ResizeObserver(resizeCallback);\n this.observer.observe(bodyWrapDOM);\n } else {\n logger.warn('The current browser does not support ResizeObserver,' + 'and the table may be misaligned after plugging and unplugging the mouse and keyboard.' + 'You can try to refresh it.');\n }\n }\n },\n unobserveBodyResize: () => {\n const bodyWrapDOM = this.ref.current;\n if (this.observer) {\n this.observer.unobserve(bodyWrapDOM);\n this.observer = null;\n }\n }\n });\n }\n componentDidUpdate(prevProps, prevState) {\n const {\n virtualized,\n dataSource,\n expandedRowKeys,\n columns,\n scroll\n } = this.props;\n if (virtualized) {\n if (prevProps.dataSource !== dataSource || prevProps.expandedRowKeys !== expandedRowKeys || prevProps.columns !== columns) {\n this.foundation.initVirtualizedData();\n }\n }\n const expandRelatedProps = strings.EXPAND_RELATED_PROPS;\n const newExpandRelatedProps = expandRelatedProps.map(key => _get(this.props, key, undefined));\n if (!_isEqual(newExpandRelatedProps, prevState.cachedExpandRelatedProps)) {\n this.foundation.initExpandBtnShouldInRow(newExpandRelatedProps);\n }\n const scrollY = _get(scroll, 'y');\n const bodyWrapDOM = this.ref.current;\n if (scrollY && scrollY !== _get(prevProps, 'scroll.y')) {\n this.foundation.observeBodyResize(bodyWrapDOM);\n }\n }\n /**\n * render base row\n * @param {*} props\n * @returns\n */\n renderBaseRow() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n rowKey,\n columns,\n expandedRowKeys,\n rowExpandable,\n record,\n index,\n level,\n expandBtnShouldInRow,\n // effect the display of the indent span\n selectedRowKeysSet,\n disabledRowKeysSet,\n expandRowByClick\n } = props;\n const baseRowPickKeys = Object.keys(baseRowPropTypes);\n const baseRowProps = _pick(props, baseRowPickKeys);\n let key = getRecordKey(record, rowKey);\n if (key == null) {\n key = index;\n }\n const expanded = isExpanded(expandedRowKeys, key);\n const expandable = rowExpandable && rowExpandable(record);\n const expandableProps = {\n level: undefined,\n expanded\n };\n if (expandable || expandBtnShouldInRow) {\n expandableProps.level = level;\n expandableProps.expandableRow = expandable;\n if (expandRowByClick) {\n expandableProps.onRowClick = this.handleRowClick;\n }\n }\n const selectionProps = {\n selected: isSelected(selectedRowKeysSet, key),\n disabled: isDisabled(disabledRowKeysSet, key)\n };\n const {\n getCellWidths\n } = this.context;\n const cellWidths = getCellWidths(columns, null, true);\n return /*#__PURE__*/React.createElement(BaseRow, Object.assign({}, baseRowProps, expandableProps, selectionProps, {\n key: key,\n rowKey: key,\n cellWidths: cellWidths\n }));\n }\n renderBodyRows() {\n let data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n let renderedRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n let displayNone = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n const {\n rowKey,\n expandedRowRender,\n expandedRowKeys,\n childrenRecordName,\n rowExpandable,\n keepDOM\n } = this.props;\n const hasExpandedRowRender = typeof expandedRowRender === 'function';\n const expandBtnShouldInRow = this.state.cachedExpandBtnShouldInRow;\n const {\n flattenedColumns\n } = this.context;\n _each(data, (record, index) => {\n let key = getRecordKey(record, rowKey);\n if (key == null) {\n key = index;\n }\n const recordChildren = _get(record, childrenRecordName);\n const recordHasChildren = Boolean(Array.isArray(recordChildren) && recordChildren.length);\n renderedRows.push(this.renderBaseRow(Object.assign(Object.assign({}, this.props), {\n columns: flattenedColumns,\n expandBtnShouldInRow,\n displayNone,\n record,\n key,\n level,\n index\n })));\n // render expand row\n const expanded = isExpanded(expandedRowKeys, key);\n const shouldRenderExpandedRows = expanded || keepDOM;\n if (hasExpandedRowRender && rowExpandable && rowExpandable(record) && shouldRenderExpandedRows) {\n const currentExpandRow = this.renderExpandedRow(Object.assign(Object.assign({}, this.props), {\n columns: flattenedColumns,\n level,\n index,\n record,\n expanded,\n displayNone: displayNone || !expanded\n }));\n /**\n * If expandedRowRender returns falsy, this expanded row will not be rendered\n * Render an empty div before v1.19.7\n */\n if (!_isNull(currentExpandRow)) {\n renderedRows.push(currentExpandRow);\n }\n }\n // render tree data\n if (recordHasChildren && shouldRenderExpandedRows) {\n const nestedRows = this.renderBodyRows(recordChildren, level + 1, [], displayNone || !expanded);\n renderedRows.push(...nestedRows);\n }\n });\n return renderedRows;\n }\n render() {\n const {\n virtualized\n } = this.props;\n const {\n direction\n } = this.context;\n return virtualized ? this.renderVirtualizedBody(direction) : this.renderBody(direction);\n }\n}\nBody.contextType = TableContext;\nBody.propTypes = {\n anyColumnFixed: PropTypes.bool,\n childrenRecordName: PropTypes.string,\n columns: PropTypes.array,\n components: PropTypes.object,\n dataSource: PropTypes.array,\n disabledRowKeysSet: PropTypes.instanceOf(Set).isRequired,\n emptySlot: PropTypes.node,\n expandRowByClick: PropTypes.bool,\n expandedRowKeys: PropTypes.array,\n expandedRowRender: PropTypes.func,\n fixed: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n forwardedRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),\n groups: PropTypes.instanceOf(Map),\n handleBodyScroll: PropTypes.func,\n handleWheel: PropTypes.func,\n headerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),\n includeHeader: PropTypes.bool,\n onScroll: PropTypes.func,\n prefixCls: PropTypes.string,\n renderExpandIcon: PropTypes.func,\n rowExpandable: PropTypes.func,\n rowKey: PropTypes.oneOfType([PropTypes.string, PropTypes.bool, PropTypes.func]),\n scroll: PropTypes.object,\n selectedRowKeysSet: PropTypes.instanceOf(Set).isRequired,\n showHeader: PropTypes.bool,\n size: PropTypes.string,\n store: PropTypes.object,\n virtualized: PropTypes.oneOfType([PropTypes.bool, PropTypes.object])\n};\nexport default /*#__PURE__*/React.forwardRef(function TableBody(props, ref) {\n return /*#__PURE__*/React.createElement(Body, Object.assign({}, props, {\n forwardedRef: ref\n }));\n});","import _isPlainObject from \"lodash/isPlainObject\";\nimport _isObject from \"lodash/isObject\";\nimport _isFunction from \"lodash/isFunction\";\nimport _difference from \"lodash/difference\";\nimport _omit from \"lodash/omit\";\nimport _each from \"lodash/each\";\nimport _flattenDeep from \"lodash/flattenDeep\";\nimport _debounce from \"lodash/debounce\";\nimport _some from \"lodash/some\";\nimport _findIndex from \"lodash/findIndex\";\nimport _find from \"lodash/find\";\nimport _includes from \"lodash/includes\";\nimport _noop from \"lodash/noop\";\nimport _get from \"lodash/get\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\n/* eslint-disable react/no-did-update-set-state */\nimport React, { createRef, isValidElement } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { mergeQueries, equalWith, assignColumnKeys, flattenColumns, getAllDisabledRowKeys, shouldShowEllipsisTitle } from '@douyinfe/semi-foundation/lib/es/table/utils';\nimport Store from '@douyinfe/semi-foundation/lib/es/utils/Store';\nimport TableFoundation from '@douyinfe/semi-foundation/lib/es/table/foundation';\nimport { strings, cssClasses, numbers } from '@douyinfe/semi-foundation/lib/es/table/constants';\nimport '@douyinfe/semi-foundation/lib/es/table/table.css';\nimport Spin from '../spin';\nimport BaseComponent from '../_base/baseComponent';\nimport LocaleConsumer from '../locale/localeConsumer';\nimport ColumnShape from './ColumnShape';\nimport getColumns from './getColumns';\nimport TableContext from './table-context';\nimport TableContextProvider from './TableContextProvider';\nimport ColumnSelection from './ColumnSelection';\nimport TablePagination from './TablePagination';\nimport ColumnFilter from './ColumnFilter';\nimport ColumnSorter from './ColumnSorter';\nimport ExpandedIcon from './CustomExpandIcon';\nimport HeadTable from './HeadTable';\nimport BodyTable from './Body';\nimport { logger, cloneDeep, mergeComponents, mergeColumns } from './utils';\nclass Table extends BaseComponent {\n get adapter() {\n var _this = this;\n return Object.assign(Object.assign({}, super.adapter), {\n resetScrollY: () => {\n if (this.bodyWrapRef.current) {\n this.bodyWrapRef.current.scrollTop = 0;\n }\n },\n setSelectedRowKeys: selectedRowKeys => {\n this.setState({\n rowSelection: Object.assign(Object.assign({}, this.state.rowSelection), {\n selectedRowKeys: [...selectedRowKeys],\n selectedRowKeysSet: new Set(selectedRowKeys)\n })\n });\n },\n setDisabledRowKeys: disabledRowKeys => {\n this.setState({\n disabledRowKeys,\n disabledRowKeysSet: new Set(disabledRowKeys)\n });\n },\n setCurrentPage: currentPage => {\n const {\n pagination\n } = this.state;\n if (typeof pagination === 'object') {\n this.setState({\n pagination: Object.assign(Object.assign({}, pagination), {\n currentPage\n })\n });\n } else {\n this.setState({\n pagination: {\n currentPage\n }\n });\n }\n },\n setPagination: pagination => this.setState({\n pagination\n }),\n setGroups: groups => this.setState({\n groups\n }),\n setDataSource: dataSource => this.setState({\n dataSource\n }),\n setExpandedRowKeys: expandedRowKeys => this.setState({\n expandedRowKeys: [...expandedRowKeys]\n }),\n setQuery: function () {\n let query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let queries = [..._this.state.queries];\n queries = mergeQueries(query, queries);\n _this.setState({\n queries\n });\n },\n // Update queries when filtering or sorting\n setQueries: queries => this.setState({\n queries\n }),\n setFlattenData: flattenData => this.setState({\n flattenData\n }),\n setAllRowKeys: allRowKeys => this.setState({\n allRowKeys\n }),\n setHoveredRowKey: hoveredRowKey => {\n this.store.setState({\n hoveredRowKey\n });\n },\n setCachedFilteredSortedDataSource: filteredSortedDataSource => {\n this.cachedFilteredSortedDataSource = filteredSortedDataSource;\n },\n setCachedFilteredSortedRowKeys: filteredSortedRowKeys => {\n this.cachedFilteredSortedRowKeys = filteredSortedRowKeys;\n this.cachedFilteredSortedRowKeysSet = new Set(filteredSortedRowKeys);\n },\n setAllDisabledRowKeys: allDisabledRowKeys => {\n const allDisabledRowKeysSet = new Set(allDisabledRowKeys);\n this.setState({\n allDisabledRowKeys,\n allDisabledRowKeysSet\n });\n },\n getCurrentPage: () => _get(this.state, 'pagination.currentPage', 1),\n getCurrentPageSize: () => _get(this.state, 'pagination.pageSize', numbers.DEFAULT_PAGE_SIZE),\n getCachedFilteredSortedDataSource: () => this.cachedFilteredSortedDataSource,\n getCachedFilteredSortedRowKeys: () => this.cachedFilteredSortedRowKeys,\n getCachedFilteredSortedRowKeysSet: () => this.cachedFilteredSortedRowKeysSet,\n getAllDisabledRowKeys: () => this.state.allDisabledRowKeys,\n getAllDisabledRowKeysSet: () => this.state.allDisabledRowKeysSet,\n notifyFilterDropdownVisibleChange: (visible, dataIndex) => this._invokeColumnFn(dataIndex, 'onFilterDropdownVisibleChange', visible),\n notifyChange: function () {\n return _this.props.onChange(...arguments);\n },\n notifyExpand: function () {\n return _this.props.onExpand(...arguments);\n },\n notifyExpandedRowsChange: function () {\n return _this.props.onExpandedRowsChange(...arguments);\n },\n notifySelect: function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return _this._invokeRowSelection('onSelect', ...args);\n },\n notifySelectAll: function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return _this._invokeRowSelection('onSelectAll', ...args);\n },\n notifySelectInvert: function () {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n return _this._invokeRowSelection('onSelectInvert', ...args);\n },\n notifySelectionChange: function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n return _this._invokeRowSelection('onChange', ...args);\n },\n isAnyColumnFixed: columns => _some(this.getColumns(columns || this.props.columns, this.props.children), column => Boolean(column.fixed)),\n useFixedHeader: () => {\n const {\n scroll,\n sticky\n } = this.props;\n if (_get(scroll, 'y')) {\n return true;\n }\n if (sticky) {\n return true;\n }\n return false;\n },\n getTableLayout: () => {\n let isFixed = false;\n const {\n flattenColumns\n } = this.state;\n if (Array.isArray(flattenColumns)) {\n isFixed = flattenColumns.some(column => Boolean(column.ellipsis) || Boolean(column.fixed));\n }\n if (this.adapter.useFixedHeader()) {\n isFixed = true;\n }\n return isFixed ? 'fixed' : 'auto';\n },\n setHeadWidths: function (headWidths) {\n let index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (!equalWith(_this.state.headWidths[index], headWidths)) {\n // The map call depends on the last state\n _this.setState(state => {\n const newHeadWidths = [...state.headWidths];\n newHeadWidths[index] = [...headWidths];\n return {\n headWidths: newHeadWidths\n };\n });\n }\n },\n getHeadWidths: function () {\n let index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n if (_this.state.headWidths.length && typeof index === 'number') {\n const configs = _this.state.headWidths[index] || [];\n return configs.map(item => item.width);\n }\n return [];\n },\n // This method is called by row rendering function\n getCellWidths: function (flattenedColumns) {\n let flattenedWidths = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n let ignoreScrollBarKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n if (Array.isArray(flattenedColumns) && flattenedColumns.length) {\n flattenedWidths = flattenedWidths == null && _this.state.headWidths.length ? _flattenDeep(_this.state.headWidths) : [];\n if (Array.isArray(flattenedWidths) && flattenedWidths.length) {\n return flattenedColumns.reduce((result, column) => {\n const found = column.key === strings.DEFAULT_KEY_COLUMN_SCROLLBAR && ignoreScrollBarKey ? null : _find(flattenedWidths, item => item && item.key != null && item.key === column.key);\n if (found) {\n result.push(found.width);\n }\n return result;\n }, []);\n }\n }\n return [];\n },\n mergedRowExpandable: record => {\n const {\n expandedRowRender,\n childrenRecordName,\n rowExpandable\n } = this.props;\n const children = _get(record, childrenRecordName);\n const hasExpandedRowRender = typeof expandedRowRender === 'function';\n const hasRowExpandable = typeof rowExpandable === 'function';\n const hasChildren = Array.isArray(children) && children.length;\n const strictExpandableResult = hasRowExpandable && rowExpandable(record);\n const looseExpandableResult = !hasRowExpandable || strictExpandableResult;\n return (hasExpandedRowRender || hasChildren) && looseExpandableResult || !(hasExpandedRowRender || hasChildren) && strictExpandableResult;\n },\n isAnyColumnUseFullRender: columns => _some(columns, column => Boolean(column.useFullRender)),\n getNormalizeColumns: () => this.normalizeColumns,\n getHandleColumns: () => this.handleColumns,\n getMergePagination: () => this.mergePagination,\n setBodyHasScrollbar: bodyHasScrollBar => {\n if (bodyHasScrollBar !== this.state.bodyHasScrollBar) {\n this.setState({\n bodyHasScrollBar\n });\n }\n },\n stopPropagation(e) {\n // The event definition here is not very accurate for now, it belongs to a broad structure definition\n if (e && typeof e === 'object') {\n if (typeof e.stopPropagation === 'function') {\n e.stopPropagation();\n }\n if (e.nativeEvent && typeof e.nativeEvent.stopPropagation === 'function') {\n e.nativeEvent.stopPropagation();\n } else if (typeof e.stopImmediatePropagation === 'function') {\n e.stopImmediatePropagation();\n }\n }\n }\n });\n }\n constructor(props, context) {\n var _this2;\n // TODO: notify when data don't have key\n super(props);\n _this2 = this;\n this._warnIfNoKey = () => {\n if ((this.props.rowSelection || this.props.expandedRowRender) && _some(this.props.dataSource, record => this.foundation.getRecordKey(record) == null)) {\n logger.error('You must specify a key for each element in the dataSource or use \"rowKey\" to specify an attribute name as the primary key!');\n }\n };\n this._invokeRowSelection = function (funcName) {\n const func = _get(_this2.state, ['rowSelection', funcName]);\n if (typeof func === 'function') {\n for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n args[_key5 - 1] = arguments[_key5];\n }\n func(...args);\n }\n };\n this._invokeColumnFn = function (key, funcName) {\n if (key && funcName) {\n const column = _this2.foundation.getQuery(key);\n const func = _get(column, funcName, null);\n if (typeof func === 'function') {\n for (var _len6 = arguments.length, args = new Array(_len6 > 2 ? _len6 - 2 : 0), _key6 = 2; _key6 < _len6; _key6++) {\n args[_key6 - 2] = arguments[_key6];\n }\n func(...args);\n }\n }\n };\n this._cacheHeaderRef = node => {\n this.headerWrapRef.current = node;\n };\n this.getCurrentPageData = () => {\n const pageData = this.foundation.getCurrentPageData();\n const retObj = ['dataSource', 'groups'].reduce((result, key) => {\n if (pageData[key]) {\n result[key] = pageData[key];\n }\n return result;\n }, {});\n return cloneDeep(retObj);\n };\n this.getColumns = (columns, children) => !Array.isArray(columns) || !columns || !columns.length ? getColumns(children) : columns;\n // @ts-ignore\n this.getCellWidths = function () {\n return _this2.foundation.getCellWidths(...arguments);\n };\n // @ts-ignore\n this.setHeadWidths = function () {\n return _this2.foundation.setHeadWidths(...arguments);\n };\n // @ts-ignore\n this.getHeadWidths = function () {\n return _this2.foundation.getHeadWidths(...arguments);\n };\n // @ts-ignore\n this.mergedRowExpandable = function () {\n return _this2.foundation.mergedRowExpandable(...arguments);\n };\n // @ts-ignore\n this.setBodyHasScrollbar = function () {\n return _this2.foundation.setBodyHasScrollbar(...arguments);\n };\n this.handleWheel = event => {\n const {\n scroll = {}\n } = this.props;\n if (window.navigator.userAgent.match(/Trident\\/7\\./) && scroll.y) {\n event.preventDefault();\n const wd = event.deltaY;\n const {\n target\n } = event;\n // const { bodyTable, fixedColumnsBodyLeft, fixedColumnsBodyRight } = this;\n const bodyTable = this.bodyWrapRef.current;\n let scrollTop = 0;\n if (this.lastScrollTop) {\n scrollTop = this.lastScrollTop + wd;\n } else {\n scrollTop = wd;\n }\n if (bodyTable && target !== bodyTable) {\n bodyTable.scrollTop = scrollTop;\n }\n }\n };\n this.handleBodyScrollLeft = e => {\n if (e.currentTarget !== e.target) {\n return;\n }\n const {\n target\n } = e;\n // const { headTable, bodyTable } = this;\n const headTable = this.headerWrapRef.current;\n const bodyTable = this.bodyWrapRef.current;\n if (target.scrollLeft !== this.lastScrollLeft) {\n if (target === bodyTable && headTable) {\n headTable.scrollLeft = target.scrollLeft;\n } else if (target === headTable && bodyTable) {\n bodyTable.scrollLeft = target.scrollLeft;\n }\n this.setScrollPositionClassName();\n }\n // Remember last scrollLeft for scroll direction detecting.\n this.lastScrollLeft = target.scrollLeft;\n };\n this.handleWindowResize = () => {\n this.syncTableWidth();\n this.setScrollPositionClassName();\n };\n this.handleBodyScrollTop = e => {\n const {\n target\n } = e;\n if (e.currentTarget !== target) {\n return;\n }\n const {\n scroll = {}\n } = this.props;\n // const { headTable, bodyTable, fixedColumnsBodyLeft, fixedColumnsBodyRight } = this;\n const headTable = this.headerWrapRef.current;\n const bodyTable = this.bodyWrapRef.current;\n if (target.scrollTop !== this.lastScrollTop && scroll.y && target !== headTable) {\n const {\n scrollTop\n } = target;\n if (bodyTable && target !== bodyTable) {\n bodyTable.scrollTop = scrollTop;\n }\n }\n // Remember last scrollTop for scroll direction detecting.\n this.lastScrollTop = target.scrollTop;\n };\n this.handleBodyScroll = e => {\n this.handleBodyScrollLeft(e);\n this.handleBodyScrollTop(e);\n };\n this.setScrollPosition = position => {\n const {\n prefixCls\n } = this.props;\n const positionAll = [`${prefixCls}-scroll-position-both`, `${prefixCls}-scroll-position-middle`, `${prefixCls}-scroll-position-left`, `${prefixCls}-scroll-position-right`];\n this.scrollPosition = position;\n const tableNode = this.wrapRef.current;\n if (tableNode && tableNode.nodeType) {\n if (position === 'both') {\n const acceptPosition = [`${prefixCls}-scroll-position-left`, `${prefixCls}-scroll-position-right`];\n tableNode.classList.remove(..._difference(positionAll, acceptPosition));\n tableNode.classList.add(...acceptPosition);\n } else {\n const acceptPosition = [`${prefixCls}-scroll-position-${position}`];\n tableNode.classList.remove(..._difference(positionAll, acceptPosition));\n tableNode.classList.add(...acceptPosition);\n }\n }\n };\n this.setScrollPositionClassName = () => {\n const node = this.bodyWrapRef.current;\n if (node && node.children && node.children.length) {\n const scrollToLeft = node.scrollLeft === 0;\n // why use Math.abs? @see https://bugzilla.mozilla.org/show_bug.cgi?id=1447743\n const scrollToRight = Math.abs(node.scrollLeft) + 1 >= node.children[0].getBoundingClientRect().width - node.getBoundingClientRect().width;\n if (scrollToLeft && scrollToRight) {\n this.setScrollPosition('both');\n } else if (scrollToLeft) {\n this.setScrollPosition('left');\n } else if (scrollToRight) {\n this.setScrollPosition('right');\n } else if (this.scrollPosition !== 'middle') {\n this.setScrollPosition('middle');\n }\n }\n };\n this.syncTableWidth = () => {\n if (this.rootWrapRef && this.rootWrapRef.current) {\n this.setState({\n tableWidth: this.rootWrapRef.current.getBoundingClientRect().width\n });\n }\n };\n this.renderSelection = function () {\n let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let inHeader = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n let index = arguments.length > 2 ? arguments[2] : undefined;\n const {\n rowSelection,\n allDisabledRowKeysSet\n } = _this2.state;\n if (rowSelection && typeof rowSelection === 'object') {\n const {\n selectedRowKeys = [],\n selectedRowKeysSet = new Set(),\n getCheckboxProps,\n disabled,\n renderCell\n } = rowSelection;\n const allRowKeys = _this2.cachedFilteredSortedRowKeys;\n const allRowKeysSet = _this2.cachedFilteredSortedRowKeysSet;\n const allIsSelected = _this2.foundation.allIsSelected(selectedRowKeysSet, allDisabledRowKeysSet, allRowKeys);\n const hasRowSelected = _this2.foundation.hasRowSelected(selectedRowKeys, allRowKeysSet);\n const indeterminate = hasRowSelected && !allIsSelected;\n if (inHeader) {\n const columnKey = _get(rowSelection, 'key', strings.DEFAULT_KEY_COLUMN_SELECTION);\n const originNode = /*#__PURE__*/React.createElement(ColumnSelection, {\n \"aria-label\": `${allIsSelected ? 'Deselect' : 'Select'} all rows`,\n disabled: disabled,\n key: columnKey,\n selected: allIsSelected,\n indeterminate: indeterminate,\n onChange: (selected, e) => {\n _this2.toggleSelectAllRow(selected, e);\n }\n });\n const selectAll = (selected, e) => _this2.toggleSelectAllRow(selected, e);\n return _isFunction(renderCell) ? renderCell({\n selected: allIsSelected,\n record,\n originNode,\n inHeader,\n disabled,\n indeterminate,\n selectAll\n }) : originNode;\n } else {\n const key = _this2.foundation.getRecordKey(record);\n const selected = selectedRowKeysSet.has(key);\n const checkboxPropsFn = () => typeof getCheckboxProps === 'function' ? getCheckboxProps(record) : {};\n const originNode = /*#__PURE__*/React.createElement(ColumnSelection, {\n \"aria-label\": `${selected ? 'Deselect' : 'Select'} this row`,\n getCheckboxProps: checkboxPropsFn,\n selected: selected,\n onChange: (status, e) => _this2.toggleSelectRow(status, key, e)\n });\n const selectRow = (selected, e) => _this2.toggleSelectRow(selected, key, e);\n return _isFunction(renderCell) ? renderCell({\n selected,\n record,\n index,\n originNode,\n inHeader: false,\n disabled,\n indeterminate,\n selectRow\n }) : originNode;\n }\n }\n return null;\n };\n this.renderRowSelectionCallback = function (text) {\n let record = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let index = arguments.length > 2 ? arguments[2] : undefined;\n return _this2.renderSelection(record, false, index);\n };\n this.renderTitleSelectionCallback = () => this.renderSelection(undefined, true);\n this.normalizeSelectionColumn = function () {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n rowSelection,\n prefixCls\n } = props;\n let column = {};\n if (rowSelection) {\n const needOmitSelectionKey = ['selectedRowKeys', 'selectedRowKeysSet'];\n column = {\n key: strings.DEFAULT_KEY_COLUMN_SELECTION\n };\n if (_isObject(rowSelection)) {\n column = Object.assign(Object.assign({}, column), _omit(rowSelection, needOmitSelectionKey));\n }\n column.className = classnames(column.className, `${prefixCls}-column-selection`);\n column.title = _this2.renderTitleSelectionCallback;\n column.render = _this2.renderRowSelectionCallback;\n }\n return column;\n };\n // If there is a scroll bar, manually construct a column and insert it into the header\n this.normalizeScrollbarColumn = function () {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n scrollbarWidth = 0\n } = props;\n return {\n key: strings.DEFAULT_KEY_COLUMN_SCROLLBAR,\n width: scrollbarWidth,\n fixed: 'right'\n };\n };\n /**\n * render expand icon\n * @param {Object} record\n * @param {Boolean} isNested\n * @param {String} groupKey\n * @returns {ReactNode}\n */\n this.renderExpandIcon = function () {\n let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let isNested = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n let groupKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n const {\n expandedRowKeys\n } = _this2.state;\n const {\n expandIcon\n } = _this2.props;\n const key = typeof groupKey === 'string' || typeof groupKey === 'number' ? groupKey : _this2.foundation.getRecordKey(record);\n return /*#__PURE__*/React.createElement(ExpandedIcon, {\n key: key,\n componentType: isNested ? 'tree' : 'expand',\n expanded: _includes(expandedRowKeys, key),\n expandIcon: expandIcon,\n onClick: (expanded, e) => _this2.handleRowExpanded(expanded, key, e)\n });\n };\n // @ts-ignore\n this.handleRowExpanded = function () {\n return _this2.foundation.handleRowExpanded(...arguments);\n };\n this.normalizeExpandColumn = function () {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let column = null;\n const {\n prefixCls,\n expandCellFixed,\n expandIcon\n } = props;\n column = {\n fixed: expandCellFixed,\n key: strings.DEFAULT_KEY_COLUMN_EXPAND\n };\n column.className = classnames(column.className, `${prefixCls}-column-expand`);\n column.render = expandIcon !== false ? function () {\n let text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n let record = arguments.length > 1 ? arguments[1] : undefined;\n let index = arguments.length > 2 ? arguments[2] : undefined;\n return _this2.adapter.mergedRowExpandable(record) ? _this2.renderExpandIcon(record) : null;\n } : () => null;\n return column;\n };\n /**\n * Add sorting, filtering, and rendering functions to columns, and add column event handling\n * Title support function, passing parameters as {filter: node, sorter: node, selection: node}\n * @param {*} column\n */\n this.addFnsInColumn = function () {\n let column = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n prefixCls\n } = _this2.props;\n if (column && (column.sorter || column.filters || column.onFilter || column.useFullRender)) {\n let hasSorter = typeof column.sorter === 'function' || column.sorter === true;\n let hasFilter = Array.isArray(column.filters) && column.filters.length || /*#__PURE__*/isValidElement(column.filterDropdown) || typeof column.renderFilterDropdown === 'function';\n let hasSorterOrFilter = false;\n const sortOrderNotControlled = !('sortOrder' in column);\n const showSortTip = sortOrderNotControlled && column.showSortTip === true;\n const {\n dataIndex,\n title: rawTitle,\n useFullRender\n } = column;\n const clickColumnToSorter = hasSorter && !hasFilter && !Boolean(useFullRender);\n const curQuery = _this2.foundation.getQuery(dataIndex);\n const titleMap = {};\n const titleArr = [];\n // useFullRender adds select buttons to each column\n if (useFullRender) {\n titleMap.selection = _this2.renderSelection(null, true);\n }\n const stateSortOrder = _get(curQuery, 'sortOrder');\n const defaultSortOrder = _get(curQuery, 'defaultSortOrder', false);\n const sortOrder = _this2.foundation.isSortOrderValid(stateSortOrder) ? stateSortOrder : defaultSortOrder;\n const showEllipsisTitle = shouldShowEllipsisTitle(column.ellipsis);\n const TitleNode = typeof rawTitle !== 'function' && (/*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixCls}-row-head-title`,\n key: strings.DEFAULT_KEY_COLUMN_TITLE,\n title: showEllipsisTitle && typeof rawTitle === 'string' ? rawTitle : undefined\n }, rawTitle));\n if (hasSorter) {\n // In order to increase the click hot area of ​​sorting, when sorting is required & useFullRender is false,\n // both the title and sorting areas are used as the click hot area for sorting。\n const sorter = /*#__PURE__*/React.createElement(ColumnSorter, {\n key: strings.DEFAULT_KEY_COLUMN_SORTER,\n sortOrder: sortOrder,\n sortIcon: column.sortIcon,\n onClick: useFullRender || hasFilter ? e => _this2.foundation.handleSort(column, e) : null,\n title: TitleNode,\n showTooltip: !clickColumnToSorter && showSortTip\n });\n useFullRender && (titleMap.sorter = sorter);\n hasSorterOrFilter = true;\n titleArr.push(sorter);\n } else {\n titleArr.push(TitleNode);\n }\n const stateFilteredValue = _get(curQuery, 'filteredValue');\n const defaultFilteredValue = _get(curQuery, 'defaultFilteredValue');\n const filteredValue = stateFilteredValue ? stateFilteredValue : defaultFilteredValue;\n if (hasFilter) {\n const filter = /*#__PURE__*/React.createElement(ColumnFilter, Object.assign({\n key: strings.DEFAULT_KEY_COLUMN_FILTER\n }, _omit(curQuery, 'children'), {\n filteredValue: filteredValue,\n onFilterDropdownVisibleChange: visible => _this2.foundation.toggleShowFilter(dataIndex, visible),\n onSelect: data => _this2.foundation.handleFilterSelect(dataIndex, data)\n }));\n useFullRender && (titleMap.filter = filter);\n hasSorterOrFilter = true;\n titleArr.push(filter);\n }\n const newTitle = typeof rawTitle === 'function' ? () => rawTitle(titleMap) : hasSorterOrFilter ? (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-operate-wrapper`\n }, titleArr)) : titleArr;\n column = Object.assign(Object.assign({}, column), {\n title: newTitle\n });\n if (clickColumnToSorter) {\n column.clickToSort = e => {\n _this2.foundation.handleSort(column, e);\n };\n column.sortOrder = sortOrder;\n column.showSortTip = showSortTip;\n }\n }\n return column;\n };\n this.toggleSelectRow = (selected, realKey, e) => {\n this.foundation.handleSelectRow(realKey, selected, e);\n };\n this.toggleSelectAllRow = (selected, e) => {\n this.foundation.handleSelectAllRow(selected, e);\n };\n /**\n * render pagination\n * @param {object} pagination\n * @param {object} propRenderPagination\n */\n this.renderPagination = (pagination, propRenderPagination) => {\n if (!pagination) {\n return null;\n }\n // use memoized pagination\n const mergedPagination = this.foundation.memoizedPagination(pagination);\n return /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Table\"\n }, locale => {\n const info = this.foundation.formatPaginationInfo(mergedPagination, locale.pageText);\n return /*#__PURE__*/React.createElement(TablePagination, {\n info: info,\n pagination: mergedPagination,\n renderPagination: propRenderPagination\n });\n });\n };\n this.renderTitle = function () {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let {\n title\n } = props;\n const {\n prefixCls,\n dataSource\n } = props;\n if (typeof title === 'function') {\n title = title(dataSource);\n }\n return /*#__PURE__*/isValidElement(title) || typeof title === 'string' ? (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-title`,\n \"x-semi-prop\": \"title\"\n }, title)) : null;\n };\n this.renderEmpty = function () {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n prefixCls,\n empty,\n dataSource\n } = props;\n const wrapCls = `${prefixCls}-placeholder`;\n const isEmpty = _this2.foundation.isEmpty(dataSource);\n if (!isEmpty) {\n return null;\n }\n return /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Table\",\n key: 'emptyText'\n }, (locale, localeCode) => (/*#__PURE__*/React.createElement(\"div\", {\n className: wrapCls\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-empty`,\n \"x-semi-prop\": \"empty\"\n }, empty || locale.emptyText))));\n };\n this.renderFooter = function () {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let {\n footer\n } = props;\n const {\n prefixCls,\n dataSource\n } = props;\n if (typeof footer === 'function') {\n footer = footer(dataSource);\n }\n return /*#__PURE__*/isValidElement(footer) || typeof footer === 'string' ? (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-footer`,\n key: \"footer\",\n \"x-semi-prop\": \"footer\"\n }, footer)) : null;\n };\n this.renderMainTable = props => {\n const useFixedHeader = this.adapter.useFixedHeader();\n const emptySlot = this.renderEmpty(props);\n const table = [this.renderTable(Object.assign(Object.assign({}, props), {\n fixed: false,\n useFixedHeader,\n headerRef: this._cacheHeaderRef,\n bodyRef: this.bodyWrapRef,\n includeHeader: !useFixedHeader,\n emptySlot\n })), this.renderFooter(props)];\n return table;\n };\n this.renderTable = props => {\n const {\n columns,\n filteredColumns,\n fixed,\n useFixedHeader,\n scroll,\n prefixCls,\n anyColumnFixed,\n includeHeader,\n showHeader,\n components,\n headerRef,\n bodyRef,\n onHeaderRow,\n rowSelection,\n dataSource,\n bodyHasScrollBar,\n disabledRowKeysSet,\n sticky\n } = props;\n const selectedRowKeysSet = _get(rowSelection, 'selectedRowKeysSet', new Set());\n const tableLayout = this.adapter.getTableLayout();\n const headTable = fixed || useFixedHeader ? (/*#__PURE__*/React.createElement(HeadTable, {\n key: \"head\",\n tableLayout: tableLayout,\n ref: headerRef,\n columns: filteredColumns,\n prefixCls: prefixCls,\n fixed: fixed,\n handleBodyScroll: this.handleBodyScrollLeft,\n components: components,\n scroll: scroll,\n showHeader: showHeader,\n selectedRowKeysSet: selectedRowKeysSet,\n onHeaderRow: onHeaderRow,\n dataSource: dataSource,\n bodyHasScrollBar: bodyHasScrollBar,\n sticky: sticky\n })) : null;\n const bodyTable = /*#__PURE__*/React.createElement(BodyTable, Object.assign({}, _omit(props, ['rowSelection', 'headWidths']), {\n key: \"body\",\n ref: bodyRef,\n columns: filteredColumns,\n fixed: fixed,\n prefixCls: prefixCls,\n handleWheel: this.handleWheel,\n handleBodyScroll: this.handleBodyScroll,\n anyColumnFixed: anyColumnFixed,\n tableLayout: tableLayout,\n includeHeader: includeHeader,\n showHeader: showHeader,\n scroll: scroll,\n components: components,\n store: this.store,\n selectedRowKeysSet: selectedRowKeysSet,\n disabledRowKeysSet: disabledRowKeysSet\n }));\n return [headTable, bodyTable];\n };\n /**\n * When columns change, call this function to get the latest withFnsColumns\n * In addition to changes in columns, these props changes must be recalculated\n * - hideExpandedColumn\n * -rowSelection changes from trusy to falsy or rowSelection.hidden changes\n * -isAnyFixedRight(columns) || get(scroll,'y') changes\n *\n * columns变化时,调用此函数获取最新的withFnsColumns\n * 除了 columns 变化,这些 props 变化也要重新计算\n * - hideExpandedColumn\n * - rowSelection 从 trusy 变为 falsy 或 rowSelection.hidden 发生变化\n * - isAnyFixedRight(columns) || get(scroll, 'y') 发生变化\n *\n * @param {Array} queries\n * @param {Array} cachedColumns\n * @returns columns after adding extended functions\n */\n this.handleColumns = (queries, cachedColumns) => {\n const {\n hideExpandedColumn,\n scroll,\n prefixCls,\n expandCellFixed,\n expandIcon,\n rowSelection\n } = this.props;\n const childrenColumnName = 'children';\n let columns = cloneDeep(cachedColumns);\n const addFns = function () {\n let columns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n if (Array.isArray(columns) && columns.length) {\n _each(columns, (column, index, originColumns) => {\n const newColumn = _this2.addFnsInColumn(column);\n const children = column[childrenColumnName];\n if (Array.isArray(children) && children.length) {\n const newChildren = [...children];\n addFns(newChildren);\n newColumn[childrenColumnName] = newChildren;\n }\n originColumns[index] = newColumn;\n });\n }\n };\n addFns(columns);\n // hideExpandedColumn=false render expand column separately\n if (!hideExpandedColumn) {\n const column = this.normalizeExpandColumn({\n prefixCls,\n expandCellFixed,\n expandIcon\n });\n const destIndex = _findIndex(columns, item => item.key === strings.DEFAULT_KEY_COLUMN_EXPAND);\n if (column) {\n if (destIndex > -1) {\n columns[destIndex] = Object.assign(Object.assign({}, column), columns[destIndex]);\n } else if (column.fixed === 'right') {\n columns = [...columns, column];\n } else {\n columns = [column, ...columns];\n }\n }\n }\n // selection column\n if (rowSelection && !_get(rowSelection, 'hidden')) {\n const destIndex = _findIndex(columns, item => item.key === strings.DEFAULT_KEY_COLUMN_SELECTION);\n const column = this.normalizeSelectionColumn({\n rowSelection,\n prefixCls\n });\n if (destIndex > -1) {\n columns[destIndex] = Object.assign(Object.assign({}, column), columns[destIndex]);\n } else if (column.fixed === 'right') {\n columns = [...columns, column];\n } else {\n columns = [column, ...columns];\n }\n }\n assignColumnKeys(columns);\n return columns;\n };\n /**\n * Convert children to columns object\n * @param {Array} columns\n * @param {ReactNode} children\n * @returns {Array}\n */\n this.normalizeColumns = (columns, children) => {\n const normalColumns = cloneDeep(this.getColumns(columns, children));\n return normalColumns;\n };\n /**\n * Combine pagination and table paging processing functions\n */\n this.mergePagination = pagination => {\n const newPagination = Object.assign({\n onChange: this.foundation.setPage\n }, pagination);\n return newPagination;\n };\n this.foundation = new TableFoundation(this.adapter);\n // columns cannot be deepClone, otherwise the comparison will be false\n const columns = this.getColumns(props.columns, props.children);\n const cachedflattenColumns = flattenColumns(columns);\n const queries = TableFoundation.initColumnsFilteredValueAndSorterOrder(cloneDeep(cachedflattenColumns));\n const filteredSortedDataSource = this.foundation.getFilteredSortedDataSource(this.props.dataSource, queries);\n const newPagination = _isPlainObject(this.props.pagination) ? this.props.pagination : {};\n const pageData = this.foundation.getCurrentPageData(filteredSortedDataSource, newPagination, queries);\n this.state = {\n /**\n * Cached props\n */\n cachedColumns: columns,\n cachedChildren: props.children,\n flattenColumns: cachedflattenColumns,\n components: mergeComponents(props.components, props.virtualized),\n /**\n * State calculated based on prop\n */\n queries,\n dataSource: pageData.dataSource,\n flattenData: [],\n expandedRowKeys: [...(props.expandedRowKeys || []), ...(props.defaultExpandedRowKeys || [])],\n rowSelection: props.rowSelection ? _isObject(props.rowSelection) ? Object.assign({}, props.rowSelection) : {} : null,\n pagination: pageData.pagination,\n /**\n * Internal state\n */\n groups: null,\n allRowKeys: [],\n disabledRowKeys: [],\n disabledRowKeysSet: new Set(),\n allDisabledRowKeys: [],\n allDisabledRowKeysSet: new Set(),\n headWidths: [],\n bodyHasScrollBar: false,\n prePropRowSelection: undefined,\n prePagination: undefined\n };\n this.rootWrapRef = /*#__PURE__*/createRef();\n this.wrapRef = /*#__PURE__*/createRef(); // table's outside wrap\n this.bodyWrapRef = /*#__PURE__*/createRef();\n this.headerWrapRef = /*#__PURE__*/createRef();\n this.store = new Store({\n hoveredRowKey: null\n });\n this.debouncedWindowResize = _debounce(this.handleWindowResize, 150);\n this.cachedFilteredSortedDataSource = [];\n this.cachedFilteredSortedRowKeys = [];\n this.cachedFilteredSortedRowKeysSet = new Set();\n }\n static getDerivedStateFromProps(props, state) {\n const willUpdateStates = {};\n const {\n rowSelection,\n dataSource,\n childrenRecordName,\n rowKey,\n pagination\n } = props;\n props.columns && props.children && logger.warn('columns should not given by object and children at the same time');\n if (props.columns && props.columns !== state.cachedColumns) {\n const newFlattenColumns = flattenColumns(props.columns);\n willUpdateStates.flattenColumns = newFlattenColumns;\n willUpdateStates.queries = mergeColumns(state.queries, newFlattenColumns, null, false);\n willUpdateStates.cachedColumns = props.columns;\n willUpdateStates.cachedChildren = null;\n } else if (props.children && props.children !== state.cachedChildren) {\n const newNestedColumns = getColumns(props.children);\n const newFlattenColumns = flattenColumns(newNestedColumns);\n const columns = mergeColumns(state.queries, newFlattenColumns, null, false);\n willUpdateStates.flattenColumns = newFlattenColumns;\n willUpdateStates.queries = [...columns];\n willUpdateStates.cachedColumns = [...newNestedColumns];\n willUpdateStates.cachedChildren = props.children;\n }\n // Update controlled selection column\n if (rowSelection !== state.prePropRowSelection) {\n let newSelectionStates = {};\n if (_isObject(state.rowSelection)) {\n newSelectionStates = Object.assign(Object.assign({}, newSelectionStates), state.rowSelection);\n }\n if (_isObject(rowSelection)) {\n newSelectionStates = Object.assign(Object.assign({}, newSelectionStates), rowSelection);\n }\n const selectedRowKeys = _get(rowSelection, 'selectedRowKeys');\n const getCheckboxProps = _get(rowSelection, 'getCheckboxProps');\n if (selectedRowKeys && Array.isArray(selectedRowKeys)) {\n newSelectionStates.selectedRowKeysSet = new Set(selectedRowKeys);\n }\n // The return value of getCheckboxProps affects the disabled rows\n if (_isFunction(getCheckboxProps)) {\n const disabledRowKeys = getAllDisabledRowKeys({\n dataSource,\n getCheckboxProps,\n childrenRecordName,\n rowKey\n });\n const disabledRowKeysSet = new Set(disabledRowKeys);\n willUpdateStates.disabledRowKeys = disabledRowKeys;\n willUpdateStates.disabledRowKeysSet = disabledRowKeysSet;\n willUpdateStates.allDisabledRowKeys = disabledRowKeys;\n willUpdateStates.allDisabledRowKeysSet = disabledRowKeysSet;\n }\n willUpdateStates.rowSelection = newSelectionStates;\n willUpdateStates.prePropRowSelection = rowSelection;\n }\n if (pagination !== state.prePagination) {\n let newPagination = {};\n if (_isObject(state.pagination)) {\n newPagination = Object.assign(Object.assign({}, newPagination), state.pagination);\n }\n if (_isObject(pagination)) {\n newPagination = Object.assign(Object.assign({}, newPagination), pagination);\n }\n willUpdateStates.pagination = newPagination;\n willUpdateStates.prePagination = pagination;\n }\n return willUpdateStates;\n }\n componentDidMount() {\n super.componentDidMount();\n this.setScrollPosition('left');\n if (this.adapter.isAnyColumnFixed() || this.props.showHeader && this.adapter.useFixedHeader()) {\n this.handleWindowResize();\n window.addEventListener('resize', this.debouncedWindowResize);\n }\n }\n // TODO: Extract the setState operation to the adapter or getDerivedStateFromProps function\n componentDidUpdate(prevProps, prevState) {\n const {\n dataSource,\n expandedRowKeys,\n expandAllRows,\n expandAllGroupRows,\n virtualized,\n components,\n pagination: propsPagination\n } = this.props;\n const {\n pagination: statePagination,\n queries: stateQueries,\n cachedColumns: stateCachedColumns,\n cachedChildren: stateCachedChildren,\n groups: stateGroups\n } = this.state;\n /**\n * State related to paging\n *\n * @param dataSource\n * @param groups\n * @param pagination\n * @param disabledRowKeys\n * @param allRowKeys\n * @param queries\n */\n const states = {};\n this._warnIfNoKey();\n /**\n * The state that needs to be updated after props changes\n */\n // Update controlled expand column\n if (Array.isArray(expandedRowKeys) && expandedRowKeys !== prevProps.expandedRowKeys) {\n this.setState({\n expandedRowKeys\n });\n }\n // Update components\n if (components !== prevProps.components || virtualized !== prevProps.virtualized) {\n this.setState({\n components: mergeComponents(components, virtualized)\n });\n }\n // Update the default expanded column\n if (expandAllRows !== prevProps.expandAllRows || expandAllGroupRows !== prevProps.expandAllGroupRows) {\n this.foundation.initExpandedRowKeys({\n groups: stateGroups\n });\n }\n /**\n * After dataSource is updated || (cachedColumns || cachedChildren updated)\n * 1. Cache filtered sorted data and a collection of data rows, stored in this\n * 2. Update pager and group, stored in state\n */\n if (dataSource !== prevProps.dataSource || stateCachedColumns !== prevState.cachedColumns || stateCachedChildren !== prevState.cachedChildren) {\n // TODO: foundation.getFilteredSortedDataSource has side effects and will be modified to the dataSource reference\n // Temporarily use _dataSource=[...dataSource] for processing\n const _dataSource = [...dataSource];\n const filteredSortedDataSource = this.foundation.getFilteredSortedDataSource(_dataSource, stateQueries);\n const allDataDisabledRowKeys = this.foundation.getAllDisabledRowKeys(filteredSortedDataSource);\n this.foundation.setCachedFilteredSortedDataSource(filteredSortedDataSource);\n this.foundation.setAllDisabledRowKeys(allDataDisabledRowKeys);\n states.dataSource = filteredSortedDataSource;\n if (this.props.groupBy) {\n states.groups = null;\n }\n }\n // when dataSource has change, should reset currentPage\n if (dataSource !== prevProps.dataSource) {\n states.pagination = _isObject(statePagination) ? Object.assign(Object.assign({}, statePagination), {\n currentPage: _isObject(propsPagination) && propsPagination.currentPage ? propsPagination.currentPage : 1\n }) : statePagination;\n }\n if (Object.keys(states).length) {\n const {\n pagination: mergedStatePagination = null,\n queries: stateQueries = null,\n dataSource: stateDataSource = null\n } = states;\n const handledProps = this.foundation.getCurrentPageData(stateDataSource, mergedStatePagination, stateQueries);\n // After the pager is updated, reset allRowKeys of the current page\n this.adapter.setAllRowKeys(handledProps.allRowKeys);\n this.adapter.setDisabledRowKeys(handledProps.disabledRowKeys);\n if ('dataSource' in states) {\n if (this.props.defaultExpandAllRows && handledProps.groups && handledProps.groups.size || this.props.expandAllRows || this.props.expandAllGroupRows) {\n this.foundation.initExpandedRowKeys(handledProps);\n }\n states.pagination = handledProps.pagination;\n }\n // Centrally update paging related state\n const statesKeys = Object.keys(states);\n for (const k of statesKeys) {\n this.setState({\n [k]: handledProps[k]\n });\n }\n }\n if (this.adapter.isAnyColumnFixed() || this.props.showHeader && this.adapter.useFixedHeader()) {\n if (!this.debouncedWindowResize) {\n window.addEventListener('resize', this.debouncedWindowResize);\n }\n }\n }\n componentWillUnmount() {\n super.componentWillUnmount();\n if (this.debouncedWindowResize) {\n window.removeEventListener('resize', this.debouncedWindowResize);\n this.debouncedWindowResize.cancel();\n this.debouncedWindowResize = null;\n }\n }\n render() {\n let _a = this.props,\n {\n scroll,\n prefixCls,\n className,\n style: wrapStyle = {},\n bordered,\n id,\n pagination: propPagination,\n virtualized,\n size,\n renderPagination: propRenderPagination,\n getVirtualizedListRef,\n loading,\n hideExpandedColumn,\n rowSelection: propRowSelection\n } = _a,\n rest = __rest(_a, [\"scroll\", \"prefixCls\", \"className\", \"style\", \"bordered\", \"id\", \"pagination\", \"virtualized\", \"size\", \"renderPagination\", \"getVirtualizedListRef\", \"loading\", \"hideExpandedColumn\", \"rowSelection\"]);\n let {\n rowSelection,\n expandedRowKeys,\n headWidths,\n tableWidth,\n pagination,\n dataSource,\n queries,\n cachedColumns,\n bodyHasScrollBar\n } = this.state;\n wrapStyle = Object.assign({}, wrapStyle);\n let columns;\n /**\n * As state.queries will change, the columns should be refreshed as a whole at this time\n * The scene of changes in queries\n * 1. Filter\n * 2. Pagination\n *\n * useFullRender needs to be passed to the user selection ReactNode, so columns need to be recalculated every time the selectedRowKeys changes\n * TODO: In the future, the selection passed to the user can be changed to the function type, allowing the user to execute the function to obtain the real-time status of the selection title\n *\n * 由于state.queries会发生变化,此时columns应该整体刷新\n * queries变化的场景\n * 1. 筛选\n * 2. 分页\n * useFullRender需要传给用户selection ReactNode,因此需要每次selectedRowKeys变化时重新计算columns\n * TODO: 未来可以将传给用户的selection改为函数类型,让用户执行函数获取selection title的实时状态\n */\n if (!this.adapter.isAnyColumnUseFullRender(queries)) {\n const rowSelectionUpdate = propRowSelection && !_get(propRowSelection, 'hidden');\n columns = this.foundation.memoizedWithFnsColumns(queries, cachedColumns, rowSelectionUpdate, hideExpandedColumn,\n // Update the columns after the body scrollbar changes to ensure that the head and body are aligned\n bodyHasScrollBar);\n } else {\n columns = this.handleColumns(queries, cachedColumns);\n }\n const filteredColumns = this.foundation.memoizedFilterColumns(columns);\n const flattenFnsColumns = this.foundation.memoizedFlattenFnsColumns(columns);\n const anyColumnFixed = this.adapter.isAnyColumnFixed(columns);\n /**\n * - If it is the first page break, you need to calculate the current page\n * - If it is manual paging, call foundation to modify the state\n *\n * TODO: After merging issue 1007, you can place it in the constructor to complete\n * The reason is that #1007 exposes the parameters required by getCurrentPageData in the constructor\n */\n // if (isNull(dataSource)) {\n // const pageData: BasePageData = this.foundation.getCurrentPageData(this.props.dataSource);\n // dataSource = pageData.dataSource;\n // pagination = pageData.pagination;\n // }\n const props = Object.assign(Object.assign(Object.assign({}, rest), this.state), {\n // props not in rest\n virtualized,\n scroll,\n prefixCls,\n size,\n hideExpandedColumn,\n // renamed state\n columns,\n // calculated value\n anyColumnFixed,\n rowExpandable: this.mergedRowExpandable,\n pagination,\n dataSource,\n rowSelection,\n expandedRowKeys,\n renderExpandIcon: this.renderExpandIcon,\n filteredColumns\n });\n const x = _get(scroll, 'x');\n const y = _get(scroll, 'y');\n if (virtualized) {\n if (typeof wrapStyle.width !== 'number') {\n wrapStyle.width = x;\n }\n }\n const wrapCls = classnames({\n [`${prefixCls}-${strings.SIZE_SMALL}`]: size === strings.SIZE_SMALL,\n [`${prefixCls}-${strings.SIZE_MIDDLE}`]: size === strings.SIZE_MIDDLE,\n [`${prefixCls}-virtualized`]: Boolean(virtualized),\n [`${prefixCls}-bordered`]: bordered,\n [`${prefixCls}-fixed-header`]: Boolean(y),\n [`${prefixCls}-scroll-position-left`]: ['both', 'left'].includes(this.position),\n [`${prefixCls}-scroll-position-right`]: ['both', 'right'].includes(this.position)\n });\n // pagination\n const tablePagination = pagination && propPagination ? this.renderPagination(pagination, propRenderPagination) : null;\n const paginationPosition = _get(propPagination, 'position', 'bottom');\n const tableContextValue = Object.assign(Object.assign({}, this.context), {\n headWidths,\n tableWidth,\n anyColumnFixed,\n flattenedColumns: flattenFnsColumns,\n renderExpandIcon: this.renderExpandIcon,\n renderSelection: this.renderSelection,\n setHeadWidths: this.setHeadWidths,\n getHeadWidths: this.getHeadWidths,\n getCellWidths: this.getCellWidths,\n handleRowExpanded: this.handleRowExpanded,\n getVirtualizedListRef,\n setBodyHasScrollbar: this.setBodyHasScrollbar\n });\n const dataAttr = this.getDataAttr(rest);\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n ref: this.rootWrapRef,\n className: classnames(className, `${prefixCls}-wrapper`, `${prefixCls}-wrapper-${props.direction}`),\n \"data-column-fixed\": anyColumnFixed,\n style: wrapStyle,\n id: id\n }, dataAttr), /*#__PURE__*/React.createElement(TableContextProvider, Object.assign({}, tableContextValue, {\n direction: props.direction\n }), /*#__PURE__*/React.createElement(Spin, {\n spinning: loading,\n size: \"large\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n ref: this.wrapRef,\n className: wrapCls\n }, /*#__PURE__*/React.createElement(React.Fragment, {\n key: 'pagination-top'\n }, ['top', 'both'].includes(paginationPosition) ? tablePagination : null), this.renderTitle({\n title: props.title,\n dataSource: props.dataSource,\n prefixCls: props.prefixCls\n }), /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-container`\n }, this.renderMainTable(Object.assign({}, props))), /*#__PURE__*/React.createElement(React.Fragment, {\n key: 'pagination-bottom'\n }, ['bottom', 'both'].includes(paginationPosition) ? tablePagination : null)))));\n }\n}\nTable.contextType = TableContext;\nTable.propTypes = {\n className: PropTypes.string,\n style: PropTypes.object,\n prefixCls: PropTypes.string,\n components: PropTypes.any,\n bordered: PropTypes.bool,\n loading: PropTypes.bool,\n size: PropTypes.oneOf(strings.SIZES),\n tableLayout: PropTypes.oneOf(strings.LAYOUTS),\n columns: PropTypes.arrayOf(PropTypes.shape(ColumnShape)),\n hideExpandedColumn: PropTypes.bool,\n id: PropTypes.string,\n expandIcon: PropTypes.oneOfType([PropTypes.bool, PropTypes.func, PropTypes.node]),\n expandCellFixed: PropTypes.oneOf(strings.FIXED_SET),\n title: PropTypes.oneOfType([PropTypes.string, PropTypes.node, PropTypes.func]),\n onHeaderRow: PropTypes.func,\n showHeader: PropTypes.bool,\n indentSize: PropTypes.number,\n rowKey: PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.number]),\n onRow: PropTypes.func,\n onExpandedRowsChange: PropTypes.func,\n onExpand: PropTypes.func,\n rowExpandable: PropTypes.func,\n expandedRowRender: PropTypes.func,\n expandedRowKeys: PropTypes.array,\n defaultExpandAllRows: PropTypes.bool,\n expandAllRows: PropTypes.bool,\n defaultExpandAllGroupRows: PropTypes.bool,\n expandAllGroupRows: PropTypes.bool,\n defaultExpandedRowKeys: PropTypes.array,\n pagination: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n renderPagination: PropTypes.func,\n footer: PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.node]),\n empty: PropTypes.node,\n dataSource: PropTypes.array,\n childrenRecordName: PropTypes.string,\n rowSelection: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n onChange: PropTypes.func,\n scroll: PropTypes.shape({\n x: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.bool]),\n y: PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n }),\n groupBy: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func]),\n renderGroupSection: PropTypes.oneOfType([PropTypes.func]),\n onGroupedRow: PropTypes.func,\n clickGroupedRowToExpand: PropTypes.bool,\n virtualized: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n dropdownPrefixCls: PropTypes.string,\n expandRowByClick: PropTypes.bool,\n getVirtualizedListRef: PropTypes.func // TODO: future api\n};\nTable.defaultProps = {\n // rowExpandable: stubTrue,\n tableLayout: '',\n dataSource: [],\n prefixCls: cssClasses.PREFIX,\n rowSelection: null,\n className: '',\n childrenRecordName: 'children',\n size: 'default',\n loading: false,\n bordered: false,\n expandCellFixed: false,\n hideExpandedColumn: true,\n showHeader: true,\n indentSize: numbers.DEFAULT_INDENT_WIDTH,\n onChange: _noop,\n pagination: true,\n rowKey: 'key',\n defaultExpandedRowKeys: [],\n defaultExpandAllRows: false,\n defaultExpandAllGroupRows: false,\n expandAllRows: false,\n expandAllGroupRows: false,\n onFilterDropdownVisibleChange: _noop,\n onExpand: _noop,\n onExpandedRowsChange: _noop,\n expandRowByClick: false\n};\nexport default Table;","import _map from \"lodash/map\";\nimport _filter from \"lodash/filter\";\nimport _split from \"lodash/split\";\nimport classnames from 'classnames';\nfunction addClass(rawCls) {\n const clss = _split(rawCls, /\\s+/);\n for (var _len = arguments.length, srcClss = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n srcClss[_key - 1] = arguments[_key];\n }\n const validClss = _filter(srcClss, cls => !clss.includes(cls));\n return classnames(rawCls, ...validClss);\n}\nfunction removeClass(rawCls) {\n const clss = _split(rawCls, /\\s+/);\n for (var _len2 = arguments.length, srcClss = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n srcClss[_key2 - 1] = arguments[_key2];\n }\n _map(srcClss, cls => {\n const index = clss.indexOf(cls);\n if (index > -1) {\n clss.splice(index, 1);\n }\n });\n return classnames(...clss);\n}\nexport { addClass, removeClass };","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport { Resizable } from 'react-resizable';\nclass ResizableHeaderCell extends React.PureComponent {\n render() {\n const _a = this.props,\n {\n onResize,\n onResizeStart,\n onResizeStop,\n width,\n resize\n } = _a,\n restProps = __rest(_a, [\"onResize\", \"onResizeStart\", \"onResizeStop\", \"width\", \"resize\"]);\n if (typeof width !== 'number' || resize === false) {\n return /*#__PURE__*/React.createElement(\"th\", Object.assign({}, restProps));\n }\n let {\n children\n } = restProps;\n // Fragment must be used here, otherwise there will be an error (seemingly a react-resizable@1.9.0 problem)\n children = React.Children.map(children, (child, index) => /*#__PURE__*/React.createElement(React.Fragment, {\n key: index\n }, child));\n return /*#__PURE__*/React.createElement(Resizable, {\n width: width,\n height: 0,\n onResize: onResize,\n onResizeStart: onResizeStart,\n onResizeStop: onResizeStop,\n draggableOpts: {\n enableUserSelectHack: false\n },\n axis: 'x'\n }, /*#__PURE__*/React.createElement(\"th\", Object.assign({}, restProps), children));\n }\n}\nexport default ResizableHeaderCell;","import _noop from \"lodash/noop\";\nimport _find from \"lodash/find\";\nimport _get from \"lodash/get\";\nimport _merge from \"lodash/merge\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\n/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { useState, useEffect, useMemo } from 'react';\nimport { addClass, removeClass } from '@douyinfe/semi-foundation/lib/es/utils/classnames';\nimport { strings, numbers } from '@douyinfe/semi-foundation/lib/es/table/constants';\nimport { assignColumnKeys, findColumn, withResizeWidth } from '@douyinfe/semi-foundation/lib/es/table/utils';\nimport Table from './Table';\nimport { cloneDeep, mergeColumns } from './utils';\nimport getColumns from './getColumns';\nimport ResizableHeaderCell from './ResizableHeaderCell';\nconst ResizableTable = function () {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let ref = arguments.length > 1 ? arguments[1] : undefined;\n const {\n components: propComponents,\n columns: propColumns,\n resizable\n } = props,\n restProps = __rest(props, [\"components\", \"columns\", \"resizable\"]);\n const childrenColumnName = 'children';\n const onResize = _get(resizable, 'onResize', _noop);\n const onResizeStart = _get(resizable, 'onResizeStart', _noop);\n const onResizeStop = _get(resizable, 'onResizeStop', _noop);\n /**\n * 此处关于 columns 有三个存储\n *\n * 1. rawColumns 是根据 props.columns 或者 props.children 解析出来的原始 columns\n * 2. newColumns 是 rawColumns 的深拷贝,同时根据 props.expandedRowRender、props.hideExpandedColumn 和 props.rowSelection\n * 这三个参数加入了【选择列】以及【展开列】\n * 3. columns 是当前组件中存储的 state,一般情况下与 newColumns 相等,但是会保存列当前伸缩的宽度\n */\n /**\n * There are three stores for columns here\n *\n * 1. rawColumns are the original columns parsed according to props.columns or props.children\n * 2. newColumns is a deep copy of rawColumns, based on props.expandedRowRender, props.hideExpandedColumn and props.rowSelection\n * These three parameters have been added [Select Column] and [Expand Column]\n * 3. columns is the state stored in the current component, which is generally equal to newColumns, but it will save the current stretched width of the column\n */\n const parsedColumns = Array.isArray(propColumns) && propColumns.length ? propColumns : getColumns(props.children);\n const rawColumns = assignColumnKeys(cloneDeep(parsedColumns), childrenColumnName);\n const newColumns = assignColumnKeys(cloneDeep(parsedColumns), childrenColumnName);\n if (typeof props.expandedRowRender === 'function' && !props.hideExpandedColumn && !_find(rawColumns, item => item.key === strings.DEFAULT_KEY_COLUMN_EXPAND)) {\n newColumns.unshift({\n key: strings.DEFAULT_KEY_COLUMN_EXPAND,\n width: numbers.DEFAULT_WIDTH_COLUMN_EXPAND\n });\n }\n if (props.rowSelection && !_get(props.rowSelection, 'hidden') && !_find(rawColumns, item => item.key === strings.DEFAULT_KEY_COLUMN_SELECTION)) {\n newColumns.unshift({\n width: _get(props, 'rowSelection.width', numbers.DEFAULT_WIDTH_COLUMN_SELECTION),\n key: strings.DEFAULT_KEY_COLUMN_SELECTION\n });\n }\n const [columns, setColumns] = useState(newColumns);\n useEffect(() => {\n // If there is a resize value, the width does not use the default value fix#1072\n const _newColumns = withResizeWidth(columns, newColumns);\n setColumns(mergeColumns(columns, _newColumns));\n }, [propColumns, props.expandedRowRender, props.hideExpandedColumn, props.rowSelection]);\n const components = useMemo(() => _merge({\n header: {\n cell: ResizableHeaderCell\n }\n }, propComponents), [propComponents]);\n const handlerClassName = _get(resizable, 'handlerClassName', 'resizing');\n const handleResize = column => (e, _ref) => {\n let {\n size\n } = _ref;\n const nextColumns = cloneDeep(columns);\n const curColumn = findColumn(nextColumns, column, childrenColumnName);\n let nextColumn = Object.assign(Object.assign({}, curColumn), {\n width: size.width\n });\n const customProps = onResize(nextColumn) || {};\n nextColumn = Object.assign(Object.assign({}, nextColumn), customProps);\n Object.assign(curColumn, nextColumn);\n setColumns(nextColumns);\n };\n const handleResizeStart = column => e => {\n const nextColumns = cloneDeep(columns);\n const curColumn = findColumn(nextColumns, column, childrenColumnName);\n let nextColumn = Object.assign(Object.assign({}, curColumn), {\n className: addClass(curColumn.className, handlerClassName)\n });\n const customProps = onResizeStart(nextColumn) || {};\n nextColumn = Object.assign(Object.assign({}, nextColumn), customProps);\n Object.assign(curColumn, nextColumn);\n setColumns(nextColumns);\n };\n const handleResizeStop = column => e => {\n const nextColumns = cloneDeep(columns);\n const curColumn = findColumn(nextColumns, column, childrenColumnName);\n let nextColumn = Object.assign(Object.assign({}, curColumn), {\n className: removeClass(curColumn.className, handlerClassName)\n });\n const customProps = onResizeStop(nextColumn) || {};\n nextColumn = Object.assign(Object.assign({}, nextColumn), customProps);\n Object.assign(curColumn, nextColumn);\n setColumns(nextColumns);\n };\n const resizableRender = function (col, index) {\n let level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n let originalHeaderCellProps = arguments.length > 3 ? arguments[3] : undefined;\n return Object.assign(Object.assign({}, col), {\n onHeaderCell: column => {\n return Object.assign(Object.assign({}, originalHeaderCellProps), {\n width: column.width,\n onResize: handleResize(column),\n onResizeStart: handleResizeStart(column),\n onResizeStop: handleResizeStop(column)\n });\n }\n });\n };\n const assignResizableRender = function () {\n let columns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n return Array.isArray(columns) && columns.length ? columns.map((col, index) => {\n var _a, _b;\n const originalHeaderCellProps = (_b = (_a = col.onHeaderCell) === null || _a === void 0 ? void 0 : _a.call(col, col, index, level)) !== null && _b !== void 0 ? _b : {};\n Object.assign(col, resizableRender(col, index, level, originalHeaderCellProps));\n const children = col[childrenColumnName];\n if (Array.isArray(children) && children.length) {\n col[childrenColumnName] = assignResizableRender(children, level + 1);\n }\n return col;\n }) : [];\n };\n const finalColumns = useMemo(() => assignResizableRender(columns), [columns]);\n return /*#__PURE__*/React.createElement(Table, Object.assign({}, restProps, {\n columns: finalColumns,\n components: components,\n ref: ref\n }));\n};\nexport default /*#__PURE__*/React.forwardRef(ResizableTable);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport NormalTable from './Table';\nimport ResizableTable from './ResizableTable';\nimport Column from './Column';\nimport { strings } from '@douyinfe/semi-foundation/lib/es/table/constants';\nimport ConfigContext from '../configProvider/context';\nclass Table extends React.PureComponent {\n constructor(props) {\n super(props);\n this.getCurrentPageData = () => this.tableRef.current && this.tableRef.current.getCurrentPageData();\n this.tableRef = /*#__PURE__*/React.createRef();\n }\n render() {\n var _a;\n // eslint-disable-next-line prefer-destructuring\n const props = this.props;\n const direction = (_a = this.props.direction) !== null && _a !== void 0 ? _a : this.context.direction;\n if (props.resizable) {\n return /*#__PURE__*/React.createElement(ResizableTable, Object.assign({}, props, {\n ref: this.tableRef,\n direction: direction\n }));\n } else {\n return /*#__PURE__*/React.createElement(NormalTable, Object.assign({}, props, {\n ref: this.tableRef,\n direction: direction\n }));\n }\n }\n}\nTable.Column = Column;\nTable.DEFAULT_KEY_COLUMN_SELECTION = strings.DEFAULT_KEY_COLUMN_SELECTION;\nTable.DEFAULT_KEY_COLUMN_EXPAND = strings.DEFAULT_KEY_COLUMN_EXPAND;\nTable.propTypes = Object.assign(Object.assign({}, NormalTable.propTypes), {\n resizable: PropTypes.oneOfType([PropTypes.bool, PropTypes.object])\n});\nTable.defaultProps = {\n hideExpandedColumn: true\n};\nTable.contextType = ConfigContext;\nexport * from './interface';\nexport default Table;","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n TABS: `${BASE_CLASS_PREFIX}-tabs`,\n TABS_BAR: `${BASE_CLASS_PREFIX}-tabs-bar`,\n TABS_BAR_LINE: `${BASE_CLASS_PREFIX}-tabs-bar-line`,\n TABS_BAR_CARD: `${BASE_CLASS_PREFIX}-tabs-bar-card`,\n TABS_BAR_BUTTON: `${BASE_CLASS_PREFIX}-tabs-bar-button`,\n TABS_BAR_SLASH: `${BASE_CLASS_PREFIX}-tabs-bar-slash`,\n TABS_BAR_EXTRA: `${BASE_CLASS_PREFIX}-tabs-bar-extra`,\n TABS_TAB: `${BASE_CLASS_PREFIX}-tabs-tab`,\n TABS_TAB_ACTIVE: `${BASE_CLASS_PREFIX}-tabs-tab-active`,\n TABS_TAB_DISABLED: `${BASE_CLASS_PREFIX}-tabs-tab-disabled`,\n TABS_CONTENT: `${BASE_CLASS_PREFIX}-tabs-content`,\n TABS_CONTENT_ANIMATED: `${BASE_CLASS_PREFIX}-tabs-content-animated`,\n TABS_CONTENT_NO_ANIMATED: `${BASE_CLASS_PREFIX}-tabs-content-no-animated`,\n TABS_PANE: `${BASE_CLASS_PREFIX}-tabs-pane`,\n TABS_PANE_INACTIVE: `${BASE_CLASS_PREFIX}-tabs-pane-inactive`,\n TABS_PANE_ACTIVE: `${BASE_CLASS_PREFIX}-tabs-pane-active`,\n TABS_PANE_MOTION_OVERLAY: `${BASE_CLASS_PREFIX}-tabs-pane-motion-overlay`,\n TABS_PANE_ANIMATING: `${BASE_CLASS_PREFIX}-tabs-pane-animating`,\n \"TABS_PANE_ANIMATE_LEFT_SHOW\": `${BASE_CLASS_PREFIX}-tabs-pane-animate-leftShow`,\n \"TABS_PANE_ANIMATE_RIGHT_SHOW\": `${BASE_CLASS_PREFIX}-tabs-pane-animate-rightShow`,\n \"TABS_PANE_ANIMATE_TOP_SHOW\": `${BASE_CLASS_PREFIX}-tabs-pane-animate-topShow`,\n \"TABS_PANE_ANIMATE_BOTTOM_SHOW\": `${BASE_CLASS_PREFIX}-tabs-pane-animate-bottomShow`\n};\nconst numbers = {\n DEFAULT_ACTIVE_KEY: 1\n};\nconst strings = {\n TYPE_MAP: ['line', 'card', 'button', 'slash'],\n SIZE: ['small', 'medium', 'large'],\n POSITION_MAP: ['top', 'left']\n};\nexport { cssClasses, numbers, strings };","import _noop from \"lodash/noop\";\nimport _get from \"lodash/get\";\nimport BaseFoundation from '../base/foundation';\nclass TabsFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n this.destroy = _noop;\n this.handlePrevent = event => {\n event.stopPropagation();\n event.preventDefault();\n };\n this.handleKeyDown = (event, itemKey, closable) => {\n const {\n preventScroll\n } = this.getProps();\n const tabs = [...event.target.parentNode.childNodes].filter(item => {\n return _get(item, 'attributes.data-tabkey.value', '').includes('semiTab') && _get(item, 'attributes.aria-disabled.value', '') !== \"true\";\n });\n switch (event.key) {\n case \"ArrowLeft\":\n case \"ArrowRight\":\n case \"ArrowUp\":\n case \"ArrowDown\":\n this.determineOrientation(event, tabs);\n break;\n case \"Backspace\":\n case \"Delete\":\n this.handleDeleteKeyDown(event, tabs, itemKey, closable);\n break;\n case \"Enter\":\n case \" \":\n this.handleTabClick(itemKey, event);\n this.handlePrevent(event);\n break;\n case \"Home\":\n tabs[0].focus({\n preventScroll\n }); // focus first tab\n this.handlePrevent(event);\n break;\n case \"End\":\n tabs[tabs.length - 1].focus({\n preventScroll\n }); // focus last tab\n this.handlePrevent(event);\n break;\n }\n };\n }\n init() {\n this._adapter.collectPane();\n }\n _notifyChange(activeKey) {\n const {\n activeKey: stateActiveKey\n } = this.getStates();\n if (stateActiveKey !== activeKey) {\n this._adapter.notifyChange(activeKey);\n }\n }\n handleTabClick(activeKey, event) {\n const isControlledComponent = this._isInProps('activeKey');\n if (isControlledComponent) {\n this._notifyChange(activeKey);\n } else {\n this._notifyChange(activeKey);\n this.handleNewActiveKey(activeKey);\n }\n this._adapter.notifyTabClick(activeKey, event);\n }\n handleNewActiveKey(activeKey) {\n const {\n activeKey: stateActiveKey\n } = this.getStates();\n if (stateActiveKey !== activeKey) {\n this._adapter.setNewActiveKey(activeKey);\n }\n }\n getDefaultActiveKey() {\n let activeKey;\n const props = this.getProps();\n if ('activeKey' in props) {\n activeKey = props.activeKey;\n } else if ('defaultActiveKey' in props) {\n activeKey = props.defaultActiveKey;\n } else {\n activeKey = this._adapter.getDefaultActiveKeyFromChildren();\n }\n return activeKey;\n }\n handleTabListChange() {\n this._adapter.collectPane();\n }\n handleTabPanesChange() {\n this._adapter.collectPane();\n this._adapter.collectActiveKey();\n }\n handleTabDelete(tabKey) {\n this._adapter.notifyTabDelete(tabKey);\n }\n determineOrientation(event, tabs) {\n const {\n tabPosition\n } = this.getProps();\n const isVertical = tabPosition === 'left';\n if (isVertical) {\n if (event.key === \"ArrowUp\" || event.key === \"ArrowDown\") {\n this.switchTabOnArrowPress(event, tabs);\n this.handlePrevent(event);\n }\n } else {\n if (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\") {\n this.switchTabOnArrowPress(event, tabs);\n this.handlePrevent(event);\n }\n }\n }\n handleDeleteKeyDown(event, tabs, itemKey, closable) {\n const {\n preventScroll\n } = this.getProps();\n if (closable) {\n this.handleTabDelete(itemKey);\n const index = tabs.indexOf(event.target);\n // Move focus to next element after deletion\n // If the element is the last removable tab, focus to its previous tab\n if (tabs.length !== 1) {\n tabs[index + 1 >= tabs.length ? index - 1 : index + 1].focus({\n preventScroll\n });\n }\n }\n }\n switchTabOnArrowPress(event, tabs) {\n const {\n preventScroll\n } = this.getProps();\n const index = tabs.indexOf(event.target);\n const direction = {\n \"ArrowLeft\": -1,\n \"ArrowUp\": -1,\n \"ArrowRight\": 1,\n \"ArrowDown\": 1\n };\n if (direction[event.key]) {\n if (index !== undefined) {\n if (tabs[index + direction[event.key]]) {\n tabs[index + direction[event.key]].focus({\n preventScroll\n });\n } else if (event.key === \"ArrowLeft\" || event.key === \"ArrowUp\") {\n tabs[tabs.length - 1].focus({\n preventScroll\n }); // focus last tab\n } else if (event.key === \"ArrowRight\" || event.key == \"ArrowDown\") {\n tabs[0].focus({\n preventScroll\n }); // focus first tab\n }\n }\n }\n }\n}\nexport default TabsFoundation;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { forwardRef, useCallback, useMemo } from 'react';\nimport cls from 'classnames';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/tabs/constants';\nimport { IconClose } from '@douyinfe/semi-icons';\nconst TabItem = (props, ref) => {\n const {\n tab,\n size,\n type,\n icon,\n selected,\n closable,\n disabled,\n itemKey,\n deleteTabItem,\n tabPosition,\n handleKeyDown,\n onClick\n } = props,\n restProps = __rest(props, [\"tab\", \"size\", \"type\", \"icon\", \"selected\", \"closable\", \"disabled\", \"itemKey\", \"deleteTabItem\", \"tabPosition\", \"handleKeyDown\", \"onClick\"]);\n const closableIcon = useMemo(() => {\n return closable ? /*#__PURE__*/React.createElement(IconClose, {\n \"aria-label\": \"Close\",\n role: \"button\",\n className: `${cssClasses.TABS_TAB}-icon-close`,\n onClick: e => deleteTabItem(itemKey, e)\n }) : null;\n }, [type, closable, deleteTabItem, itemKey]);\n const renderIcon = useCallback(icon => (/*#__PURE__*/React.createElement(\"span\", {\n className: `${cssClasses.TABS_BAR}-icon`\n }, icon)), []);\n const handleKeyDownInItem = useCallback(event => {\n handleKeyDown && handleKeyDown(event, itemKey, closable);\n }, [handleKeyDown, itemKey, closable]);\n const handleItemClick = useCallback(e => {\n !disabled && onClick && onClick(itemKey, e);\n }, [itemKey, disabled, onClick]);\n const panelIcon = icon ? renderIcon(icon) : null;\n const className = cls(cssClasses.TABS_TAB, `${cssClasses.TABS_TAB}-${type}`, `${cssClasses.TABS_TAB}-${tabPosition}`, `${cssClasses.TABS_TAB}-single`, {\n [cssClasses.TABS_TAB_ACTIVE]: selected,\n [cssClasses.TABS_TAB_DISABLED]: disabled,\n [`${cssClasses.TABS_TAB}-small`]: size === 'small',\n [`${cssClasses.TABS_TAB}-medium`]: size === 'medium'\n });\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n role: \"tab\",\n id: `semiTab${itemKey}`,\n \"data-tabkey\": `semiTab${itemKey}`,\n \"aria-controls\": `semiTabPanel${itemKey}`,\n \"aria-disabled\": disabled ? 'true' : 'false',\n \"aria-selected\": selected ? 'true' : 'false',\n tabIndex: selected ? 0 : -1,\n onKeyDown: handleKeyDownInItem,\n onClick: handleItemClick,\n className: className\n }, restProps, {\n ref: ref\n }), panelIcon, tab, closableIcon);\n};\n// Why is forwardRef needed here?\n// Because TabItem needs to be used in OverflowList (when tabs' type is collapsible), \n// OverflowList will pass ref to the outermost div DOM node of TabItem\nconst ForwardTabItem = /*#__PURE__*/forwardRef(TabItem);\n// @ts-ignore \nForwardTabItem.elementType = 'Tabs.TabItem';\nexport default ForwardTabItem;","import _pick from \"lodash/pick\";\nimport _isEmpty from \"lodash/isEmpty\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport cls from 'classnames';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/tabs/constants';\nimport getDataAttr from '@douyinfe/semi-foundation/lib/es/utils/getDataAttr';\nimport OverflowList from '../overflowList';\nimport Dropdown from '../dropdown';\nimport Button from '../button';\nimport { IconChevronRight, IconChevronLeft, IconChevronDown } from '@douyinfe/semi-icons';\nimport { getUuidv4 } from '@douyinfe/semi-foundation/lib/es/utils/uuid';\nimport TabItem from './TabItem';\nimport LocaleConsumer from \"../locale/localeConsumer\";\nclass TabBar extends React.Component {\n constructor(props) {\n var _this;\n super(props);\n _this = this;\n this.handleItemClick = (itemKey, e) => {\n this.props.onTabClick(itemKey, e);\n };\n this.handleKeyDown = (event, itemKey, closable) => {\n this.props.handleKeyDown(event, itemKey, closable);\n };\n this.renderTabItem = panel => {\n const {\n size,\n type,\n deleteTabItem,\n handleKeyDown,\n tabPosition\n } = this.props;\n const isSelected = this._isActive(panel.itemKey);\n return /*#__PURE__*/React.createElement(TabItem, Object.assign({}, _pick(panel, ['disabled', 'icon', 'itemKey', 'tab', 'closable']), {\n key: this._getBarItemKeyByItemKey(panel.itemKey),\n selected: isSelected,\n size: size,\n type: type,\n tabPosition: tabPosition,\n handleKeyDown: handleKeyDown,\n deleteTabItem: deleteTabItem,\n onClick: this.handleItemClick\n }));\n };\n this.scrollTabItemIntoViewByKey = function (key) {\n let logicalPosition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'nearest';\n const tabItem = document.querySelector(`[data-uuid=\"${_this.state.uuid}\"] .${cssClasses.TABS_TAB}[data-scrollkey=\"${key}\"]`);\n tabItem === null || tabItem === void 0 ? void 0 : tabItem.scrollIntoView({\n behavior: 'smooth',\n block: logicalPosition,\n inline: logicalPosition\n });\n };\n this.scrollActiveTabItemIntoView = logicalPosition => {\n const key = this._getBarItemKeyByItemKey(this.props.activeKey);\n this.scrollTabItemIntoViewByKey(key, logicalPosition);\n };\n this.renderTabComponents = list => list.map(panel => this.renderTabItem(panel));\n this.handleArrowClick = (items, pos) => {\n const lastItem = pos === 'start' ? items.pop() : items.shift();\n if (!lastItem) {\n return;\n }\n const key = this._getBarItemKeyByItemKey(lastItem.itemKey);\n this.scrollTabItemIntoViewByKey(key);\n };\n this.renderCollapse = (items, icon, pos) => {\n var _a;\n const arrowCls = cls({\n [`${cssClasses.TABS_BAR}-arrow-${pos}`]: pos,\n [`${cssClasses.TABS_BAR}-arrow`]: true\n });\n if (_isEmpty(items)) {\n return /*#__PURE__*/React.createElement(\"div\", {\n role: \"presentation\",\n className: arrowCls\n }, /*#__PURE__*/React.createElement(Button, {\n disabled: true,\n icon: icon,\n theme: \"borderless\"\n }));\n }\n const {\n dropdownClassName,\n dropdownStyle,\n showRestInDropdown,\n dropdownProps\n } = this.props;\n const {\n rePosKey\n } = this.state;\n const disabled = !items.length;\n const menu = /*#__PURE__*/React.createElement(Dropdown.Menu, null, items.map(panel => {\n const {\n icon: i,\n tab,\n itemKey\n } = panel;\n const panelIcon = i ? this.renderIcon(panel.icon) : null;\n return /*#__PURE__*/React.createElement(Dropdown.Item, {\n key: itemKey,\n onClick: e => this.handleItemClick(itemKey, e),\n active: this._isActive(itemKey)\n }, panelIcon, tab);\n }));\n const button = /*#__PURE__*/React.createElement(\"div\", {\n role: \"presentation\",\n className: arrowCls,\n onClick: e => this.handleArrowClick(items, pos)\n }, /*#__PURE__*/React.createElement(Button, {\n disabled: disabled,\n icon: icon,\n theme: \"borderless\"\n }));\n const dropdownCls = cls(dropdownClassName, {\n [`${cssClasses.TABS_BAR}-dropdown`]: true\n });\n const customDropdownProps = (_a = dropdownProps === null || dropdownProps === void 0 ? void 0 : dropdownProps[pos]) !== null && _a !== void 0 ? _a : {};\n return /*#__PURE__*/React.createElement(React.Fragment, null, showRestInDropdown ? (/*#__PURE__*/React.createElement(Dropdown, Object.assign({\n className: dropdownCls,\n clickToHide: true,\n clickTriggerToHide: true,\n key: `${rePosKey}-${pos}`,\n position: pos === 'start' ? 'bottomLeft' : 'bottomRight',\n render: disabled ? null : menu,\n showTick: true,\n style: dropdownStyle,\n trigger: 'hover',\n disableFocusListener // prevent the panel from popping up again after clicking\n : true\n }, customDropdownProps), button)) : button);\n };\n this.renderOverflow = items => items.map((item, index) => {\n const pos = index === 0 ? 'start' : 'end';\n const icon = index === 0 ? /*#__PURE__*/React.createElement(IconChevronLeft, null) : /*#__PURE__*/React.createElement(IconChevronRight, null);\n const overflowNode = this.renderCollapse(item, icon, pos);\n if (this.props.renderArrow) {\n return this.props.renderArrow(item, pos, () => this.handleArrowClick(item, pos), overflowNode);\n }\n return overflowNode;\n });\n this.renderCollapsedTab = () => {\n const {\n list\n } = this.props;\n const renderedList = list.map(item => {\n const {\n itemKey\n } = item;\n return Object.assign({\n key: this._getBarItemKeyByItemKey(itemKey),\n active: this._isActive(itemKey)\n }, item);\n });\n return /*#__PURE__*/React.createElement(OverflowList, {\n items: renderedList,\n overflowRenderDirection: this.props.arrowPosition,\n wrapperStyle: this.props.visibleTabsStyle,\n overflowRenderer: this.renderOverflow,\n renderMode: \"scroll\",\n className: `${cssClasses.TABS_BAR}-overflow-list`,\n visibleItemRenderer: this.renderTabItem,\n onVisibleStateChange: visibleMap => {\n var _a, _b;\n const visibleMapWithItemKey = new Map();\n visibleMap.forEach((v, k) => {\n visibleMapWithItemKey.set(this._getItemKeyByBarItemKey(k), v);\n });\n (_b = (_a = this.props).onVisibleTabsChange) === null || _b === void 0 ? void 0 : _b.call(_a, visibleMapWithItemKey);\n }\n });\n };\n this.renderWithMoreTrigger = () => {\n const {\n list,\n more\n } = this.props;\n let tabElements = [];\n let moreTrigger = /*#__PURE__*/React.createElement(\"div\", {\n className: cls({\n [`${cssClasses.TABS_BAR}-more-trigger`]: true,\n [`${cssClasses.TABS_BAR}-more-trigger-${this.props.type}`]: true\n })\n }, /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Tabs\"\n }, (locale, localeCode) => (/*#__PURE__*/React.createElement(\"div\", {\n className: `${cssClasses.TABS_BAR}-more-trigger-content`\n }, /*#__PURE__*/React.createElement(\"div\", null, locale.more), /*#__PURE__*/React.createElement(IconChevronDown, {\n className: `${cssClasses.TABS_BAR}-more-trigger-content-icon`\n })))));\n let keepCount;\n if (typeof more === \"number\") {\n keepCount = list.length - Math.min(more, list.length);\n tabElements = list.slice(0, keepCount).map(panel => this.renderTabItem(panel));\n } else if (typeof more === 'object') {\n keepCount = list.length - Math.min(more.count, list.length);\n tabElements = list.slice(0, keepCount).map(panel => this.renderTabItem(panel));\n if (more.render) {\n moreTrigger = more.render();\n }\n } else if (more !== undefined) {\n throw new Error(\"[Semi Tabs]: invalid tab props format: more\");\n }\n return /*#__PURE__*/React.createElement(React.Fragment, null, tabElements, this.renderMoreDropdown(list.slice(keepCount), more === null || more === void 0 ? void 0 : more['dropdownProps'], moreTrigger));\n };\n this.renderMoreDropdown = (panels, dropDownProps, trigger) => {\n return /*#__PURE__*/React.createElement(Dropdown, Object.assign({\n trigger: 'hover',\n showTick: true,\n position: 'bottomLeft',\n className: `${cssClasses.TABS_BAR}-more-dropdown-${this.props.type}`,\n clickToHide: true,\n menu: panels.map(panel => ({\n node: 'item',\n name: panel.tab,\n icon: panel.icon,\n onClick: e => this.props.onTabClick(panel.itemKey, e),\n active: this.props.activeKey === panel.itemKey\n }))\n }, dropDownProps), trigger);\n };\n this._isActive = key => key === this.props.activeKey;\n this._getBarItemKeyByItemKey = key => `${key}-bar`;\n this._getItemKeyByBarItemKey = key => key.replace(/-bar$/, \"\");\n this.state = {\n endInd: props.list.length,\n rePosKey: 0,\n startInd: 0,\n uuid: '',\n currentVisibleItems: []\n };\n }\n componentDidMount() {\n this.setState({\n uuid: getUuidv4()\n });\n }\n componentDidUpdate(prevProps) {\n if (prevProps.activeKey !== this.props.activeKey) {\n if (this.props.collapsible) {\n this.scrollActiveTabItemIntoView();\n }\n }\n }\n renderIcon(icon) {\n return /*#__PURE__*/React.createElement(\"span\", null, icon);\n }\n renderExtra() {\n const {\n tabBarExtraContent,\n type,\n size\n } = this.props;\n const tabBarExtraContentDefaultStyle = {\n float: 'right'\n };\n const tabBarExtraContentStyle = tabBarExtraContent && tabBarExtraContent.props ? tabBarExtraContent.props.style : {};\n const extraCls = cls(cssClasses.TABS_BAR_EXTRA, {\n [`${cssClasses.TABS_BAR}-${type}-extra`]: type,\n [`${cssClasses.TABS_BAR}-${type}-extra-${size}`]: size\n });\n if (tabBarExtraContent) {\n const tabBarStyle = Object.assign(Object.assign({}, tabBarExtraContentDefaultStyle), tabBarExtraContentStyle);\n return /*#__PURE__*/React.createElement(\"div\", {\n className: extraCls,\n style: tabBarStyle,\n \"x-semi-prop\": \"tabBarExtraContent\"\n }, tabBarExtraContent);\n }\n return null;\n }\n render() {\n const _a = this.props,\n {\n type,\n style,\n className,\n list,\n tabPosition,\n more,\n collapsible\n } = _a,\n restProps = __rest(_a, [\"type\", \"style\", \"className\", \"list\", \"tabPosition\", \"more\", \"collapsible\"]);\n const classNames = cls(className, {\n [cssClasses.TABS_BAR]: true,\n [cssClasses.TABS_BAR_LINE]: type === 'line',\n [cssClasses.TABS_BAR_CARD]: type === 'card',\n [cssClasses.TABS_BAR_BUTTON]: type === 'button',\n [cssClasses.TABS_BAR_SLASH]: type === 'slash',\n [`${cssClasses.TABS_BAR}-${tabPosition}`]: tabPosition,\n [`${cssClasses.TABS_BAR}-collapse`]: collapsible\n });\n const extra = this.renderExtra();\n const contents = collapsible ? this.renderCollapsedTab() : more ? this.renderWithMoreTrigger() : this.renderTabComponents(list);\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n role: \"tablist\",\n \"aria-orientation\": tabPosition === \"left\" ? \"vertical\" : \"horizontal\",\n className: classNames,\n style: style\n }, getDataAttr(restProps), {\n \"data-uuid\": this.state.uuid\n }), contents, extra);\n }\n}\nTabBar.propTypes = {\n activeKey: PropTypes.string,\n className: PropTypes.string,\n collapsible: PropTypes.bool,\n list: PropTypes.array,\n onTabClick: PropTypes.func,\n size: PropTypes.oneOf(strings.SIZE),\n style: PropTypes.object,\n tabBarExtraContent: PropTypes.node,\n tabPosition: PropTypes.oneOf(strings.POSITION_MAP),\n type: PropTypes.oneOf(strings.TYPE_MAP),\n closable: PropTypes.bool,\n deleteTabItem: PropTypes.func,\n more: PropTypes.oneOfType([PropTypes.number, PropTypes.object])\n};\nexport default TabBar;","import React from 'react';\nconst TabsContext = /*#__PURE__*/React.createContext({});\nexport default TabsContext;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { createRef, PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport cls from 'classnames';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/tabs/constants';\nimport getDataAttr from '@douyinfe/semi-foundation/lib/es/utils/getDataAttr';\nimport TabsContext from './tabs-context';\nimport CSSAnimation from \"../_cssAnimation\";\nclass TabPane extends PureComponent {\n constructor() {\n super(...arguments);\n this.ref = /*#__PURE__*/createRef();\n // get direction from current item key to activeKey\n this.getDirection = (activeKey, itemKey, panes, lastActiveKey) => {\n if (itemKey !== null && activeKey !== null && Array.isArray(panes) && panes.length) {\n const activeIndex = panes.findIndex(pane => pane.itemKey === activeKey);\n const itemIndex = panes.findIndex(pane => pane.itemKey === itemKey);\n const lastActiveIndex = panes.findIndex(pane => pane.itemKey === lastActiveKey);\n if (activeIndex === itemIndex) {\n return lastActiveIndex > activeIndex;\n } else {\n return itemIndex < activeIndex;\n }\n }\n return false;\n };\n this.shouldRender = () => {\n const {\n itemKey\n } = this.props;\n const {\n activeKey,\n lazyRender\n } = this.context;\n const active = activeKey === itemKey;\n this._active = this._active || active;\n return lazyRender ? this._active : true;\n };\n }\n render() {\n const {\n tabPaneMotion: motion,\n tabPosition,\n prevActiveKey\n } = this.context;\n const _a = this.props,\n {\n className,\n style,\n children,\n itemKey,\n tabIndex\n } = _a,\n restProps = __rest(_a, [\"className\", \"style\", \"children\", \"itemKey\", \"tabIndex\"]);\n const active = this.context.activeKey === itemKey;\n const classNames = cls(className, {\n [cssClasses.TABS_PANE_INACTIVE]: !active,\n [cssClasses.TABS_PANE_ACTIVE]: active,\n [cssClasses.TABS_PANE]: true\n });\n const shouldRender = this.shouldRender();\n const startClassName = (() => {\n const direction = this.getDirection(this.context.activeKey, itemKey, this.context.panes, prevActiveKey);\n if (tabPosition === 'top') {\n if (direction) {\n return cssClasses.TABS_PANE_ANIMATE_RIGHT_SHOW;\n } else {\n return cssClasses.TABS_PANE_ANIMATE_LEFT_SHOW;\n }\n } else {\n if (direction) {\n return cssClasses.TABS_PANE_ANIMATE_BOTTOM_SHOW;\n } else {\n return cssClasses.TABS_PANE_ANIMATE_TOP_SHOW;\n }\n }\n })();\n const isActivatedBecauseOtherTabPaneRemoved = !this.context.panes.find(tabPane => tabPane.itemKey === prevActiveKey);\n const hasMotion = motion && active && !isActivatedBecauseOtherTabPaneRemoved && !this.context.forceDisableMotion;\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n ref: this.ref,\n role: \"tabpanel\",\n id: `semiTabPanel${itemKey}`,\n \"aria-labelledby\": `semiTab${itemKey}`,\n className: classNames,\n style: style,\n \"aria-hidden\": active ? 'false' : 'true',\n tabIndex: tabIndex ? tabIndex : 0\n }, getDataAttr(restProps), {\n \"x-semi-prop\": \"children\"\n }), /*#__PURE__*/React.createElement(CSSAnimation, {\n motion: hasMotion,\n animationState: active ? \"enter\" : \"leave\",\n startClassName: startClassName\n }, _ref => {\n let {\n animationClassName,\n animationEventsNeedBind\n } = _ref;\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n className: cls(cssClasses.TABS_PANE_MOTION_OVERLAY, animationClassName),\n \"x-semi-prop\": \"children\"\n }, animationEventsNeedBind), shouldRender ? children : null);\n }));\n }\n}\nTabPane.isTabPane = true;\nTabPane.contextType = TabsContext;\nTabPane.propTypes = {\n className: PropTypes.string,\n style: PropTypes.object,\n children: PropTypes.node,\n disabled: PropTypes.bool,\n itemKey: PropTypes.string,\n tab: PropTypes.node,\n icon: PropTypes.node,\n closable: PropTypes.bool\n};\nexport default TabPane;","import _pick from \"lodash/pick\";\nimport _isEqual from \"lodash/isEqual\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { createRef, isValidElement } from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/tabs/constants';\nimport isNullOrUndefined from '@douyinfe/semi-foundation/lib/es/utils/isNullOrUndefined';\nimport TabsFoundation from '@douyinfe/semi-foundation/lib/es/tabs/foundation';\nimport BaseComponent from '../_base/baseComponent';\nimport '@douyinfe/semi-foundation/lib/es/tabs/tabs.css';\nimport TabBar from './TabBar';\nimport TabPane from './TabPane';\nimport TabItem from './TabItem';\nimport TabsContext from './tabs-context';\nimport { getDefaultPropsFromGlobalConfig } from \"../_utils\";\nconst panePickKeys = ['className', 'style', 'disabled', 'itemKey', 'tab', 'icon'];\nexport * from './interface';\nclass Tabs extends BaseComponent {\n constructor(props) {\n super(props);\n this.setContentRef = ref => {\n this.contentRef = {\n current: ref\n };\n };\n this.getPanes = () => {\n const {\n tabList,\n children\n } = this.props;\n if (Array.isArray(tabList) && tabList.length) {\n return tabList;\n }\n return React.Children.map(children, child => {\n if (child) {\n const {\n tab,\n icon,\n disabled,\n itemKey,\n closable\n } = child.props;\n return {\n tab,\n icon,\n disabled,\n itemKey,\n closable\n };\n }\n return undefined;\n });\n };\n this.onTabClick = (activeKey, event) => {\n this.foundation.handleTabClick(activeKey, event);\n };\n /* istanbul ignore next */\n this.rePosChildren = (children, activeKey) => {\n const newChildren = [];\n const falttenChildren = React.Children.toArray(children);\n if (children.length) {\n newChildren.push(...falttenChildren.filter(child => child.props && child.props.itemKey === activeKey));\n newChildren.push(...falttenChildren.filter(child => child.props && child.props.itemKey !== activeKey));\n }\n return newChildren;\n };\n this.getActiveItem = () => {\n const {\n activeKey\n } = this.state;\n const {\n children,\n tabList\n } = this.props;\n if (tabList || !Array.isArray(children)) {\n return children;\n }\n return React.Children.toArray(children).filter(pane => {\n if (/*#__PURE__*/isValidElement(pane) && pane.type && pane.type.isTabPane) {\n return pane.props.itemKey === activeKey;\n }\n return true;\n });\n };\n this.deleteTabItem = (tabKey, event) => {\n event.stopPropagation();\n this.foundation.handleTabDelete(tabKey);\n };\n this.foundation = new TabsFoundation(this.adapter);\n this.state = {\n activeKey: this.foundation.getDefaultActiveKey(),\n panes: this.getPanes(),\n prevActiveKey: null,\n forceDisableMotion: false\n };\n this.contentRef = /*#__PURE__*/createRef();\n this.contentHeight = 'auto';\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n collectPane: () => {\n const panes = this.getPanes();\n this.setState({\n panes\n });\n },\n collectActiveKey: () => {\n const {\n tabList,\n children,\n activeKey: propsActiveKey\n } = this.props;\n if (typeof propsActiveKey !== 'undefined') {\n return;\n }\n const {\n activeKey\n } = this.state;\n const panes = this.getPanes();\n if (panes.findIndex(p => p.itemKey === activeKey) === -1) {\n if (panes.length > 0) {\n this.setState({\n activeKey: panes[0].itemKey\n });\n } else {\n this.setState({\n activeKey: ''\n });\n }\n }\n },\n notifyTabClick: (activeKey, event) => {\n this.props.onTabClick(activeKey, event);\n },\n notifyChange: activeKey => {\n this.props.onChange(activeKey);\n },\n setNewActiveKey: activeKey => {\n this.setState({\n activeKey\n });\n },\n getDefaultActiveKeyFromChildren: () => {\n const {\n tabList,\n children\n } = this.props;\n let activeKey = '';\n const list = tabList ? tabList : React.Children.toArray(children).map(child => /*#__PURE__*/isValidElement(child) ? child.props : null);\n list.forEach(item => {\n if (item && !activeKey && !item.disabled) {\n activeKey = item.itemKey;\n }\n });\n return activeKey;\n },\n notifyTabDelete: tabKey => {\n this.props.onTabClose && this.props.onTabClose(tabKey);\n }\n });\n }\n static getDerivedStateFromProps(props, state) {\n const states = {};\n if (!isNullOrUndefined(props.activeKey) && props.activeKey !== state.activeKey) {\n state.prevActiveKey = state.activeKey;\n states.activeKey = props.activeKey;\n }\n return states;\n }\n componentDidUpdate(prevProps, prevState) {\n // Panes state acts on tab bar, no need to compare TabPane children\n const prevChildrenProps = React.Children.toArray(prevProps.children).map(child => _pick(/*#__PURE__*/isValidElement(child) ? child.props : null, panePickKeys));\n const nowChildrenProps = React.Children.toArray(this.props.children).map(child => _pick(/*#__PURE__*/isValidElement(child) ? child.props : null, panePickKeys));\n const isTabListType = this.props.tabList || prevProps.tabList;\n if (!_isEqual(this.props.tabList, prevProps.tabList)) {\n this.foundation.handleTabListChange();\n }\n if (prevState.activeKey !== this.state.activeKey && prevState.activeKey !== this.state.prevActiveKey) {\n this.setState({\n prevActiveKey: prevState.activeKey\n });\n }\n if (prevProps.activeKey !== this.props.activeKey) {\n const newAddedPanelItemKey = (() => {\n const prevItemKeys = new Set(prevChildrenProps.map(p => p.itemKey));\n return nowChildrenProps.map(p => p.itemKey).filter(itemKey => !prevItemKeys.has(itemKey));\n })();\n this.setState({\n forceDisableMotion: newAddedPanelItemKey.includes(this.props.activeKey)\n });\n }\n // children变化,tabList方式使用时,啥也不用做\n // children变化,非tabList方式使用,需要重新取activeKey。TabPane可能是异步更新的,若不重新取,未设activeKey时,第一个不会自动激活\n // children changed: do nothing in tabList case\n // children changed: recalc activeKey. TabPane could be updated async. If not recalc the first panel will not be activated\n if (!_isEqual(prevChildrenProps, nowChildrenProps) && !isTabListType) {\n this.foundation.handleTabPanesChange();\n }\n }\n render() {\n const _a = this.props,\n {\n children,\n className,\n collapsible,\n contentStyle,\n keepDOM,\n lazyRender,\n renderTabBar,\n showRestInDropdown,\n size,\n style,\n tabBarClassName,\n tabBarExtraContent,\n tabBarStyle,\n tabPaneMotion,\n tabPosition,\n type,\n more,\n onVisibleTabsChange,\n visibleTabsStyle,\n arrowPosition,\n renderArrow,\n dropdownProps\n } = _a,\n restProps = __rest(_a, [\"children\", \"className\", \"collapsible\", \"contentStyle\", \"keepDOM\", \"lazyRender\", \"renderTabBar\", \"showRestInDropdown\", \"size\", \"style\", \"tabBarClassName\", \"tabBarExtraContent\", \"tabBarStyle\", \"tabPaneMotion\", \"tabPosition\", \"type\", \"more\", \"onVisibleTabsChange\", \"visibleTabsStyle\", \"arrowPosition\", \"renderArrow\", \"dropdownProps\"]);\n const {\n panes,\n activeKey\n } = this.state;\n const tabWrapperCls = cls(className, {\n [cssClasses.TABS]: true,\n [`${cssClasses.TABS}-${tabPosition}`]: tabPosition\n });\n const tabContentCls = cls({\n [cssClasses.TABS_CONTENT]: true,\n [`${cssClasses.TABS_CONTENT}-${tabPosition}`]: tabPosition\n });\n const tabBarProps = {\n activeKey,\n className: tabBarClassName,\n collapsible,\n list: panes,\n onTabClick: this.onTabClick,\n showRestInDropdown,\n size,\n style: tabBarStyle,\n tabBarExtraContent,\n tabPosition,\n type,\n deleteTabItem: this.deleteTabItem,\n handleKeyDown: this.foundation.handleKeyDown,\n more,\n onVisibleTabsChange,\n visibleTabsStyle,\n arrowPosition,\n renderArrow,\n dropdownProps\n };\n const tabBar = renderTabBar ? renderTabBar(tabBarProps, TabBar) : /*#__PURE__*/React.createElement(TabBar, Object.assign({}, tabBarProps));\n const content = keepDOM ? children : this.getActiveItem();\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n className: tabWrapperCls,\n style: style\n }, this.getDataAttr(restProps)), tabBar, /*#__PURE__*/React.createElement(TabsContext.Provider, {\n value: {\n activeKey,\n lazyRender,\n panes,\n tabPaneMotion,\n tabPosition,\n prevActiveKey: this.state.prevActiveKey,\n forceDisableMotion: this.state.forceDisableMotion\n }\n }, /*#__PURE__*/React.createElement(\"div\", {\n ref: this.setContentRef,\n className: tabContentCls,\n style: Object.assign({}, contentStyle)\n }, content)));\n }\n}\nTabs.TabPane = TabPane;\nTabs.TabItem = TabItem;\nTabs.propTypes = {\n activeKey: PropTypes.string,\n className: PropTypes.string,\n collapsible: PropTypes.bool,\n contentStyle: PropTypes.oneOfType([PropTypes.object]),\n defaultActiveKey: PropTypes.string,\n keepDOM: PropTypes.bool,\n lazyRender: PropTypes.bool,\n onChange: PropTypes.func,\n onTabClick: PropTypes.func,\n renderTabBar: PropTypes.func,\n showRestInDropdown: PropTypes.bool,\n size: PropTypes.oneOf(strings.SIZE),\n style: PropTypes.object,\n tabBarClassName: PropTypes.string,\n tabBarExtraContent: PropTypes.node,\n tabBarStyle: PropTypes.object,\n tabList: PropTypes.array,\n tabPaneMotion: PropTypes.bool,\n tabPosition: PropTypes.oneOf(strings.POSITION_MAP),\n type: PropTypes.oneOf(strings.TYPE_MAP),\n onTabClose: PropTypes.func,\n preventScroll: PropTypes.bool,\n more: PropTypes.oneOfType([PropTypes.number, PropTypes.object]),\n arrowPosition: PropTypes.string,\n renderArrow: PropTypes.func,\n dropdownProps: PropTypes.object\n};\nTabs.__SemiComponentName__ = \"Tabs\";\nTabs.defaultProps = getDefaultPropsFromGlobalConfig(Tabs.__SemiComponentName__, {\n children: [],\n collapsible: false,\n keepDOM: true,\n lazyRender: false,\n onChange: () => undefined,\n onTabClick: () => undefined,\n size: 'large',\n tabPaneMotion: true,\n tabPosition: 'top',\n type: 'line',\n onTabClose: () => undefined,\n showRestInDropdown: true,\n arrowPosition: \"both\"\n});\nexport default Tabs;","import BaseFoundation from '../base/foundation';\nexport default class ToastListFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign(Object.assign({}, ToastListFoundation.defaultAdapter), adapter));\n this.handleMouseInSideChange = mouseInSideChange => {\n this._adapter.handleMouseInSideChange(mouseInSideChange);\n };\n this.getInputWrapperRect = () => {\n return this._adapter.getInputWrapperRect();\n };\n }\n hasToast(id) {\n const toastList = this._adapter.getState('list');\n return toastList.map(_ref => {\n let {\n id\n } = _ref;\n return id;\n }).includes(id);\n }\n addToast(toastOpts) {\n const toastList = this._adapter.getState('list');\n // const id = getUuid('toast');\n // let toastOpts = { ...opts, id };\n // console.log(toastOpts);\n toastList.push(toastOpts);\n this._adapter.updateToast(toastList, [], []);\n // return id;\n }\n updateToast(id, toastOpts) {\n let toastList = this._adapter.getState('list');\n toastList = toastList.map(toast => toast.id === id ? Object.assign(Object.assign({}, toast), toastOpts) : toast);\n const updatedItems = toastList.filter(toast => toast.id === id);\n this._adapter.updateToast(toastList, [], updatedItems);\n }\n removeToast(id) {\n let toastList = this._adapter.getState('list');\n const removedItems = [];\n toastList = toastList.filter(toastOpts => {\n if (toastOpts.id === id) {\n removedItems.push(toastOpts);\n return false;\n }\n return true;\n });\n this._adapter.updateToast(toastList, removedItems, []);\n }\n destroyAll() {\n const toastList = this._adapter.getState('list');\n if (toastList.length > 0) {\n this._adapter.updateToast([], toastList, []);\n }\n }\n}","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst PREFIX = `${BASE_CLASS_PREFIX}-toast`;\nconst cssClasses = {\n PREFIX,\n WRAPPER: `${PREFIX}-wrapper`,\n LIST: `${PREFIX}-list`\n};\nconst strings = {\n types: ['warning', 'success', 'info', 'error', 'default'],\n themes: ['normal', 'light'],\n directions: ['ltr', 'rtl']\n};\nconst numbers = {\n duration: 3 // default close time, unit: s\n};\nexport { cssClasses, strings, numbers };","import _isNumber from \"lodash/isNumber\";\nimport BaseFoundation from '../base/foundation';\nexport default class ToastFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign(Object.assign({}, ToastFoundation.defaultAdapter), adapter));\n this._timer = null;\n this._id = null; // cache id\n }\n init() {\n this.startCloseTimer_();\n this._id = this._adapter.getProp('id');\n }\n destroy() {\n this.clearCloseTimer_();\n }\n startCloseTimer_() {\n // unit: s\n const duration = this._adapter.getProp('duration');\n if (duration && _isNumber(duration)) {\n this._timer = setTimeout(() => {\n this.close(); // call parent to remove itself\n }, duration * 1000);\n }\n }\n close(e) {\n if (e) {\n e.stopPropagation();\n }\n this._adapter.notifyWrapperToRemove(this._id);\n this._adapter.notifyClose();\n }\n clearCloseTimer_() {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n }\n restartCloseTimer() {\n this.clearCloseTimer_();\n this.startCloseTimer_();\n }\n}","import _noop from \"lodash/noop\";\nimport React from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport ConfigContext from '../configProvider/context';\nimport ToastFoundation from '@douyinfe/semi-foundation/lib/es/toast/toastFoundation';\nimport { numbers, cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/toast/constants';\nimport BaseComponent from '../_base/baseComponent';\nimport Button from '../iconButton/index';\nimport { IconClose, IconAlertTriangle, IconInfoCircle, IconTickCircle, IconAlertCircle } from '@douyinfe/semi-icons';\nimport { getDefaultPropsFromGlobalConfig, isSemiIcon } from '../_utils';\nconst prefixCls = cssClasses.PREFIX;\nclass Toast extends BaseComponent {\n constructor(props) {\n super(props);\n this.toastEle = /*#__PURE__*/React.createRef();\n this.clearCloseTimer = () => {\n this.foundation.clearCloseTimer_();\n };\n this.startCloseTimer = () => {\n this.foundation.startCloseTimer_();\n };\n this.restartCloseTimer = () => {\n this.foundation.restartCloseTimer();\n };\n this.state = {};\n this.foundation = new ToastFoundation(this.adapter);\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n notifyWrapperToRemove: id => {\n this.props.close(id);\n },\n notifyClose: () => {\n this.props.onClose();\n }\n });\n }\n componentDidMount() {\n this.foundation.init();\n }\n componentWillUnmount() {\n this.foundation.destroy();\n }\n close(e) {\n this.foundation.close(e);\n }\n renderIcon() {\n const {\n type,\n icon\n } = this.props;\n const iconMap = {\n warning: /*#__PURE__*/React.createElement(IconAlertTriangle, null),\n success: /*#__PURE__*/React.createElement(IconTickCircle, null),\n info: /*#__PURE__*/React.createElement(IconInfoCircle, null),\n error: /*#__PURE__*/React.createElement(IconAlertCircle, null)\n };\n const iconType = iconMap[type];\n const iconSize = 'large';\n const iconCls = cls(`${prefixCls}-icon`, `${prefixCls}-icon-${type}`);\n if (icon) {\n return isSemiIcon(icon) ? /*#__PURE__*/React.cloneElement(icon, {\n size: iconSize,\n className: `${prefixCls}-icon`\n }) : icon;\n }\n if (type && iconType) {\n return /*#__PURE__*/React.cloneElement(iconType, {\n size: iconSize,\n className: iconCls\n });\n }\n return null;\n }\n render() {\n const {\n content,\n type,\n theme,\n showClose,\n textMaxWidth,\n className,\n style\n } = this.props;\n const direction = this.props.direction || this.context.direction;\n const toastCls = cls(prefixCls, className, {\n [`${prefixCls}-${type}`]: true,\n [`${prefixCls}-${theme}`]: theme === 'light',\n [`${prefixCls}-rtl`]: direction === 'rtl'\n });\n const textStyle = {};\n textStyle.maxWidth = textMaxWidth;\n const btnTheme = 'borderless';\n const btnSize = 'small';\n const reservedIndex = this.props.positionInList ? this.props.positionInList.length - this.props.positionInList.index - 1 : 0;\n const toastEle = /*#__PURE__*/React.createElement(\"div\", {\n ref: this.toastEle,\n role: \"alert\",\n \"aria-label\": `${type ? type : 'default'} type`,\n className: toastCls,\n style: Object.assign(Object.assign({}, style), {\n transform: `translate3d(0,0,${reservedIndex * -10}px)`\n }),\n onMouseEnter: this.clearCloseTimer,\n onMouseLeave: this.startCloseTimer,\n onAnimationStart: this.props.onAnimationStart,\n onAnimationEnd: this.props.onAnimationEnd\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-content`\n }, this.renderIcon(), /*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixCls}-content-text`,\n style: textStyle,\n \"x-semi-prop\": \"content\"\n }, content), showClose && (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-close-button`\n }, /*#__PURE__*/React.createElement(Button, {\n onClick: e => this.close(e),\n type: \"tertiary\",\n icon: /*#__PURE__*/React.createElement(IconClose, {\n \"x-semi-prop\": \"icon\"\n }),\n theme: btnTheme,\n size: btnSize\n })))));\n if (this.props.stack) {\n const height = this.props.stackExpanded && this.toastEle.current && getComputedStyle(this.toastEle.current).height || 0;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-zero-height-wrapper`,\n style: {\n height\n }\n }, toastEle);\n } else {\n return toastEle;\n }\n }\n}\nToast.contextType = ConfigContext;\nToast.propTypes = {\n onClose: PropTypes.func,\n content: PropTypes.node,\n close: PropTypes.func,\n duration: PropTypes.number,\n theme: PropTypes.oneOf(strings.themes),\n type: PropTypes.oneOf(strings.types),\n textMaxWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n style: PropTypes.object,\n className: PropTypes.string,\n showClose: PropTypes.bool,\n stack: PropTypes.bool,\n stackExpanded: PropTypes.bool,\n icon: PropTypes.node,\n direction: PropTypes.oneOf(strings.directions)\n};\nToast.__SemiComponentName__ = \"Toast\";\nToast.defaultProps = getDefaultPropsFromGlobalConfig(Toast.__SemiComponentName__, {\n onClose: _noop,\n content: '',\n close: _noop,\n duration: numbers.duration,\n textMaxWidth: 450,\n showClose: true,\n stack: false,\n stackExpanded: false,\n theme: 'normal'\n});\nexport default Toast;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { useState, useEffect } from 'react';\nimport Toast from '../toast';\nconst HookToast = (_a, ref) => {\n var {\n afterClose\n } = _a,\n config = __rest(_a, [\"afterClose\"]);\n const [visible, setVisible] = useState(true);\n const close = () => {\n setVisible(false);\n };\n React.useImperativeHandle(ref, () => ({\n close: () => {\n setVisible(false);\n }\n }));\n useEffect(() => {\n if (!visible) {\n afterClose(config.id);\n }\n }, [visible]);\n return visible ? (/*#__PURE__*/React.createElement(Toast, Object.assign({}, config, {\n close: close\n }))) : null;\n};\nexport default /*#__PURE__*/React.forwardRef(HookToast);","import _noop from \"lodash/noop\";\nimport React, { useRef } from 'react';\nimport getUuid from '@douyinfe/semi-foundation/lib/es/utils/uuid';\nimport HookToast from './HookToast';\n// const ref = null;\n// TODO: toast larger than N bars, automatic folding, allowing expansion, N configurable\nconst defaultOpts = {\n motion: true,\n zIndex: 1010,\n duration: 3\n};\nfunction usePatchElement() {\n const [elements, setElements] = React.useState([]);\n function patchElement(element, config) {\n setElements(originElements => [{\n element,\n config\n }, ...originElements]);\n return id => {\n setElements(originElements => originElements.filter(_ref => {\n let {\n config: configOfCurrentElement\n } = _ref;\n return configOfCurrentElement.id !== id;\n }));\n };\n }\n return [elements, patchElement];\n}\nexport default function useToast() {\n const [elements, patchElement] = usePatchElement();\n const toastRef = useRef(new Map());\n const addToast = config => {\n const id = getUuid('semi_toast_');\n const mergeConfig = Object.assign(Object.assign({}, config), {\n id\n });\n let closeFunc;\n const toast = /*#__PURE__*/React.createElement(HookToast, Object.assign({}, mergeConfig, {\n key: id,\n afterClose: instanceId => closeFunc(instanceId),\n ref: data => {\n var _a;\n toastRef.current.set(id, {\n close: (_a = data === null || data === void 0 ? void 0 : data.close) !== null && _a !== void 0 ? _a : _noop\n });\n }\n }));\n closeFunc = patchElement(toast, Object.assign({}, mergeConfig));\n return id;\n };\n const removeElement = id => {\n var _a;\n const {\n close\n } = (_a = toastRef.current.get(id)) !== null && _a !== void 0 ? _a : {};\n close === null || close === void 0 ? void 0 : close();\n };\n return [{\n success: config => addToast(Object.assign(Object.assign(Object.assign({}, defaultOpts), config), {\n type: 'success'\n })),\n info: config => addToast(Object.assign(Object.assign(Object.assign({}, defaultOpts), config), {\n type: 'info'\n })),\n error: config => addToast(Object.assign(Object.assign(Object.assign({}, defaultOpts), config), {\n type: 'error'\n })),\n warning: config => addToast(Object.assign(Object.assign(Object.assign({}, defaultOpts), config), {\n type: 'warning'\n })),\n open: config => addToast(Object.assign(Object.assign(Object.assign({}, defaultOpts), config), {\n type: 'default'\n })),\n close: id => removeElement(id)\n }, /*#__PURE__*/React.createElement(React.Fragment, null, Array.isArray(elements) && elements.length ? /*#__PURE__*/React.createElement(React.Fragment, null, elements.map(item => item.element)) : null)];\n}","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport ToastListFoundation from '@douyinfe/semi-foundation/lib/es/toast/toastListFoundation';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/toast/constants';\nimport BaseComponent from '../_base/baseComponent';\nimport Toast from './toast';\nimport '@douyinfe/semi-foundation/lib/es/toast/toast.css';\nimport getUuid from '@douyinfe/semi-foundation/lib/es/utils/uuid';\nimport useToast from './useToast';\nimport CSSAnimation from '../_cssAnimation';\nimport cls from 'classnames';\nconst createBaseToast = () => {\n var _a;\n return _a = class ToastList extends BaseComponent {\n constructor(props) {\n super(props);\n this.stack = false;\n this.innerWrapperRef = /*#__PURE__*/React.createRef();\n this.handleMouseEnter = e => {\n if (this.stack) {\n this.foundation.handleMouseInSideChange(true);\n }\n };\n this.handleMouseLeave = e => {\n var _a;\n if (this.stack) {\n const height = (_a = this.foundation.getInputWrapperRect()) === null || _a === void 0 ? void 0 : _a.height;\n if (height) {\n this.foundation.handleMouseInSideChange(false);\n }\n }\n };\n this.state = {\n list: [],\n removedItems: [],\n updatedItems: [],\n mouseInSide: false\n };\n this.foundation = new ToastListFoundation(this.adapter);\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n updateToast: (list, removedItems, updatedItems) => {\n this.setState({\n list,\n removedItems,\n updatedItems\n });\n },\n handleMouseInSideChange: mouseInSide => {\n this.setState({\n mouseInSide\n });\n },\n getInputWrapperRect: () => {\n var _a;\n return (_a = this.innerWrapperRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();\n }\n });\n }\n static create(opts) {\n var _a;\n const id = (_a = opts.id) !== null && _a !== void 0 ? _a : getUuid('toast');\n // this.id = id;\n if (!ToastList.ref) {\n const div = document.createElement('div');\n if (!this.wrapperId) {\n this.wrapperId = getUuid('toast-wrapper').slice(0, 26);\n }\n div.className = cssClasses.WRAPPER;\n div.id = this.wrapperId;\n div.style.zIndex = String(typeof opts.zIndex === 'number' ? opts.zIndex : ToastList.defaultOpts.zIndex);\n ['top', 'left', 'bottom', 'right'].map(pos => {\n if (pos in ToastList.defaultOpts || pos in opts) {\n const val = opts[pos] ? opts[pos] : ToastList.defaultOpts[pos];\n div.style[pos] = typeof val === 'number' ? `${val}px` : val;\n }\n });\n // document.body.appendChild(div);\n if (ToastList.defaultOpts.getPopupContainer) {\n const container = ToastList.defaultOpts.getPopupContainer();\n container.appendChild(div);\n } else {\n document.body.appendChild(div);\n }\n ReactDOM.render(/*#__PURE__*/React.createElement(ToastList, {\n ref: instance => ToastList.ref = instance\n }), div, () => {\n ToastList.ref.add(Object.assign(Object.assign({}, opts), {\n id\n }));\n ToastList.ref.stack = Boolean(opts.stack);\n });\n } else {\n const node = document.querySelector(`#${this.wrapperId}`);\n ['top', 'left', 'bottom', 'right'].map(pos => {\n if (pos in opts) {\n node.style[pos] = typeof opts[pos] === 'number' ? `${opts[pos]}px` : opts[pos];\n }\n });\n if (Boolean(opts.stack) !== ToastList.ref.stack) {\n ToastList.ref.stack = Boolean(opts.stack);\n }\n if (ToastList.ref.has(id)) {\n ToastList.ref.update(id, Object.assign(Object.assign({}, opts), {\n id\n }));\n } else {\n ToastList.ref.add(Object.assign(Object.assign({}, opts), {\n id\n }));\n }\n }\n return id;\n }\n static close(id) {\n if (ToastList.ref) {\n ToastList.ref.remove(id);\n }\n }\n static destroyAll() {\n if (ToastList.ref) {\n ToastList.ref.destroyAll();\n const wrapper = document.querySelector(`#${this.wrapperId}`);\n ReactDOM.unmountComponentAtNode(wrapper);\n wrapper && wrapper.parentNode.removeChild(wrapper);\n ToastList.ref = null;\n this.wrapperId = null;\n }\n }\n static getWrapperId() {\n return this.wrapperId;\n }\n static info(opts) {\n if (typeof opts === 'string') {\n opts = {\n content: opts\n };\n }\n return this.create(Object.assign(Object.assign(Object.assign({}, ToastList.defaultOpts), opts), {\n type: 'info'\n }));\n }\n static warning(opts) {\n if (typeof opts === 'string') {\n opts = {\n content: opts\n };\n }\n return this.create(Object.assign(Object.assign(Object.assign({}, ToastList.defaultOpts), opts), {\n type: 'warning'\n }));\n }\n static error(opts) {\n if (typeof opts === 'string') {\n opts = {\n content: opts\n };\n }\n return this.create(Object.assign(Object.assign(Object.assign({}, ToastList.defaultOpts), opts), {\n type: 'error'\n }));\n }\n static success(opts) {\n if (typeof opts === 'string') {\n opts = {\n content: opts\n };\n }\n return this.create(Object.assign(Object.assign(Object.assign({}, ToastList.defaultOpts), opts), {\n type: 'success'\n }));\n }\n static config(opts) {\n ['top', 'left', 'bottom', 'right'].forEach(pos => {\n if (pos in opts) {\n ToastList.defaultOpts[pos] = opts[pos];\n }\n });\n if (typeof opts.theme === 'string' && strings.themes.includes(opts.theme)) {\n ToastList.defaultOpts.theme = opts.theme;\n }\n if (typeof opts.zIndex === 'number') {\n ToastList.defaultOpts.zIndex = opts.zIndex;\n }\n if (typeof opts.duration === 'number') {\n ToastList.defaultOpts.duration = opts.duration;\n }\n if (typeof opts.getPopupContainer === 'function') {\n ToastList.defaultOpts.getPopupContainer = opts.getPopupContainer;\n }\n }\n has(id) {\n return this.foundation.hasToast(id);\n }\n add(opts) {\n return this.foundation.addToast(opts);\n }\n update(id, opts) {\n return this.foundation.updateToast(id, opts);\n }\n remove(id) {\n return this.foundation.removeToast(id);\n }\n destroyAll() {\n return this.foundation.destroyAll();\n }\n render() {\n let {\n list\n } = this.state;\n const {\n removedItems,\n updatedItems\n } = this.state;\n list = Array.from(new Set([...list, ...removedItems]));\n const updatedIds = updatedItems.map(_ref => {\n let {\n id\n } = _ref;\n return id;\n });\n const refFn = toast => {\n var _a;\n if (((_a = toast === null || toast === void 0 ? void 0 : toast.foundation) === null || _a === void 0 ? void 0 : _a._id) && updatedIds.includes(toast.foundation._id)) {\n toast.foundation.restartCloseTimer();\n }\n };\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n className: cls({\n [`${cssClasses.PREFIX}-innerWrapper`]: true,\n [`${cssClasses.PREFIX}-innerWrapper-hover`]: this.state.mouseInSide\n }),\n ref: this.innerWrapperRef,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave\n }, list.map((item, index) => {\n const isRemoved = removedItems.find(removedItem => removedItem.id === item.id) !== undefined;\n return /*#__PURE__*/React.createElement(CSSAnimation, {\n key: item.id,\n motion: item.motion,\n animationState: isRemoved ? \"leave\" : \"enter\",\n startClassName: isRemoved ? `${cssClasses.PREFIX}-animation-hide` : `${cssClasses.PREFIX}-animation-show`\n }, _ref2 => {\n let {\n animationClassName,\n animationEventsNeedBind,\n isAnimating\n } = _ref2;\n return isRemoved && !isAnimating ? null : /*#__PURE__*/React.createElement(Toast, Object.assign({}, item, {\n stack: this.stack,\n stackExpanded: this.state.mouseInSide,\n positionInList: {\n length: list.length,\n index\n },\n className: cls({\n [item.className]: Boolean(item.className),\n [animationClassName]: true\n })\n }, animationEventsNeedBind, {\n style: Object.assign({}, item.style),\n close: id => this.remove(id),\n ref: refFn\n }));\n });\n })));\n }\n }, _a.defaultOpts = {\n motion: true,\n zIndex: 1010,\n content: ''\n }, _a.propTypes = {\n content: PropTypes.node,\n duration: PropTypes.number,\n onClose: PropTypes.func,\n icon: PropTypes.node,\n direction: PropTypes.oneOf(strings.directions),\n stack: PropTypes.bool\n }, _a.defaultProps = {}, _a;\n};\nexport class ToastFactory {\n static create(config) {\n const newToast = createBaseToast();\n newToast.useToast = useToast;\n config && newToast.config(config);\n return newToast;\n }\n}\nexport default ToastFactory.create();","/* eslint no-console:0 */\n\nconst formatRegExp = /%[sdj%]/g;\n\nexport let warning = () => {};\n\n// don't print warning message when in production env or node runtime\nif (\n typeof process !== 'undefined' &&\n process.env &&\n process.env.NODE_ENV !== 'production' &&\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n) {\n warning = (type, errors) => {\n if (typeof console !== 'undefined' && console.warn) {\n if (errors.every(e => typeof e === 'string')) {\n console.warn(type, errors);\n }\n }\n };\n}\n\nexport function convertFieldsError(errors) {\n if (!errors || !errors.length) return null;\n const fields = {};\n errors.forEach(error => {\n const field = error.field;\n fields[field] = fields[field] || [];\n fields[field].push(error);\n });\n return fields;\n}\n\nexport function format(...args) {\n let i = 1;\n const f = args[0];\n const len = args.length;\n if (typeof f === 'function') {\n return f.apply(null, args.slice(1));\n }\n if (typeof f === 'string') {\n let str = String(f).replace(formatRegExp, x => {\n if (x === '%%') {\n return '%';\n }\n if (i >= len) {\n return x;\n }\n switch (x) {\n case '%s':\n return String(args[i++]);\n case '%d':\n return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n break;\n default:\n return x;\n }\n });\n return str;\n }\n return f;\n}\n\nfunction isNativeStringType(type) {\n return (\n type === 'string' ||\n type === 'url' ||\n type === 'hex' ||\n type === 'email' ||\n type === 'date' ||\n type === 'pattern'\n );\n}\n\nexport function isEmptyValue(value, type) {\n if (value === undefined || value === null) {\n return true;\n }\n if (type === 'array' && Array.isArray(value) && !value.length) {\n return true;\n }\n if (isNativeStringType(type) && typeof value === 'string' && !value) {\n return true;\n }\n return false;\n}\n\nexport function isEmptyObject(obj) {\n return Object.keys(obj).length === 0;\n}\n\nfunction asyncParallelArray(arr, func, callback) {\n const results = [];\n let total = 0;\n const arrLength = arr.length;\n\n function count(errors) {\n results.push.apply(results, errors);\n total++;\n if (total === arrLength) {\n callback(results);\n }\n }\n\n arr.forEach(a => {\n func(a, count);\n });\n}\n\nfunction asyncSerialArray(arr, func, callback) {\n let index = 0;\n const arrLength = arr.length;\n\n function next(errors) {\n if (errors && errors.length) {\n callback(errors);\n return;\n }\n const original = index;\n index = index + 1;\n if (original < arrLength) {\n func(arr[original], next);\n } else {\n callback([]);\n }\n }\n\n next([]);\n}\n\nfunction flattenObjArr(objArr) {\n const ret = [];\n Object.keys(objArr).forEach(k => {\n ret.push.apply(ret, objArr[k]);\n });\n return ret;\n}\n\nexport class AsyncValidationError extends Error {\n constructor(errors, fields) {\n super('Async Validation Error');\n this.errors = errors;\n this.fields = fields;\n }\n}\n\nexport function asyncMap(objArr, option, func, callback) {\n if (option.first) {\n const pending = new Promise((resolve, reject) => {\n const next = errors => {\n callback(errors);\n return errors.length\n ? reject(new AsyncValidationError(errors, convertFieldsError(errors)))\n : resolve();\n };\n const flattenArr = flattenObjArr(objArr);\n asyncSerialArray(flattenArr, func, next);\n });\n pending.catch(e => e);\n return pending;\n }\n let firstFields = option.firstFields || [];\n if (firstFields === true) {\n firstFields = Object.keys(objArr);\n }\n const objArrKeys = Object.keys(objArr);\n const objArrLength = objArrKeys.length;\n let total = 0;\n const results = [];\n const pending = new Promise((resolve, reject) => {\n const next = errors => {\n results.push.apply(results, errors);\n total++;\n if (total === objArrLength) {\n callback(results);\n return results.length\n ? reject(\n new AsyncValidationError(results, convertFieldsError(results)),\n )\n : resolve();\n }\n };\n if (!objArrKeys.length) {\n callback(results);\n resolve();\n }\n objArrKeys.forEach(key => {\n const arr = objArr[key];\n if (firstFields.indexOf(key) !== -1) {\n asyncSerialArray(arr, func, next);\n } else {\n asyncParallelArray(arr, func, next);\n }\n });\n });\n pending.catch(e => e);\n return pending;\n}\n\nexport function complementError(rule) {\n return oe => {\n if (oe && oe.message) {\n oe.field = oe.field || rule.fullField;\n return oe;\n }\n return {\n message: typeof oe === 'function' ? oe() : oe,\n field: oe.field || rule.fullField,\n };\n };\n}\n\nexport function deepMerge(target, source) {\n if (source) {\n for (const s in source) {\n if (source.hasOwnProperty(s)) {\n const value = source[s];\n if (typeof value === 'object' && typeof target[s] === 'object') {\n target[s] = {\n ...target[s],\n ...value,\n };\n } else {\n target[s] = value;\n }\n }\n }\n }\n return target;\n}\n","import * as util from '../util';\n\n/**\n * Rule for validating required fields.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction required(rule, value, source, errors, options, type) {\n if (\n rule.required &&\n (!source.hasOwnProperty(rule.field) ||\n util.isEmptyValue(value, type || rule.type))\n ) {\n errors.push(util.format(options.messages.required, rule.fullField));\n }\n}\n\nexport default required;\n","import * as util from '../util';\nimport required from './required';\n\n/* eslint max-len:0 */\n\nconst pattern = {\n // http://emailregex.com/\n email: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n url: new RegExp(\n '^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\\\S+(?::\\\\S*)?@)?(?:(?:(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}(?:\\\\.(?:[0-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))|(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,})))|localhost)(?::\\\\d{2,5})?(?:(/|\\\\?|#)[^\\\\s]*)?$',\n 'i',\n ),\n hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i,\n};\n\nconst types = {\n integer(value) {\n return types.number(value) && parseInt(value, 10) === value;\n },\n float(value) {\n return types.number(value) && !types.integer(value);\n },\n array(value) {\n return Array.isArray(value);\n },\n regexp(value) {\n if (value instanceof RegExp) {\n return true;\n }\n try {\n return !!new RegExp(value);\n } catch (e) {\n return false;\n }\n },\n date(value) {\n return (\n typeof value.getTime === 'function' &&\n typeof value.getMonth === 'function' &&\n typeof value.getYear === 'function' &&\n !isNaN(value.getTime())\n );\n },\n number(value) {\n if (isNaN(value)) {\n return false;\n }\n return typeof value === 'number';\n },\n object(value) {\n return typeof value === 'object' && !types.array(value);\n },\n method(value) {\n return typeof value === 'function';\n },\n email(value) {\n return (\n typeof value === 'string' &&\n !!value.match(pattern.email) &&\n value.length < 255\n );\n },\n url(value) {\n return typeof value === 'string' && !!value.match(pattern.url);\n },\n hex(value) {\n return typeof value === 'string' && !!value.match(pattern.hex);\n },\n};\n\n/**\n * Rule for validating the type of a value.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction type(rule, value, source, errors, options) {\n if (rule.required && value === undefined) {\n required(rule, value, source, errors, options);\n return;\n }\n const custom = [\n 'integer',\n 'float',\n 'array',\n 'regexp',\n 'object',\n 'method',\n 'email',\n 'number',\n 'date',\n 'url',\n 'hex',\n ];\n const ruleType = rule.type;\n if (custom.indexOf(ruleType) > -1) {\n if (!types[ruleType](value)) {\n errors.push(\n util.format(\n options.messages.types[ruleType],\n rule.fullField,\n rule.type,\n ),\n );\n }\n // straight typeof check\n } else if (ruleType && typeof value !== rule.type) {\n errors.push(\n util.format(options.messages.types[ruleType], rule.fullField, rule.type),\n );\n }\n}\n\nexport default type;\n","import * as util from '../util';\n\nconst ENUM = 'enum';\n\n/**\n * Rule for validating a value exists in an enumerable list.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction enumerable(rule, value, source, errors, options) {\n rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];\n if (rule[ENUM].indexOf(value) === -1) {\n errors.push(\n util.format(\n options.messages[ENUM],\n rule.fullField,\n rule[ENUM].join(', '),\n ),\n );\n }\n}\n\nexport default enumerable;\n","import required from './required';\nimport whitespace from './whitespace';\nimport type from './type';\nimport range from './range';\nimport enumRule from './enum';\nimport pattern from './pattern';\n\nexport default {\n required,\n whitespace,\n type,\n range,\n enum: enumRule,\n pattern,\n};\n","import * as util from '../util';\n\n/**\n * Rule for validating whitespace.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction whitespace(rule, value, source, errors, options) {\n if (/^\\s+$/.test(value) || value === '') {\n errors.push(util.format(options.messages.whitespace, rule.fullField));\n }\n}\n\nexport default whitespace;\n","import * as util from '../util';\n\n/**\n * Rule for validating minimum and maximum allowed values.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction range(rule, value, source, errors, options) {\n const len = typeof rule.len === 'number';\n const min = typeof rule.min === 'number';\n const max = typeof rule.max === 'number';\n // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)\n const spRegexp = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n let val = value;\n let key = null;\n const num = typeof value === 'number';\n const str = typeof value === 'string';\n const arr = Array.isArray(value);\n if (num) {\n key = 'number';\n } else if (str) {\n key = 'string';\n } else if (arr) {\n key = 'array';\n }\n // if the value is not of a supported type for range validation\n // the validation rule rule should use the\n // type property to also test for a particular type\n if (!key) {\n return false;\n }\n if (arr) {\n val = value.length;\n }\n if (str) {\n // 处理码点大于U+010000的文字length属性不准确的bug,如\"𠮷𠮷𠮷\".lenght !== 3\n val = value.replace(spRegexp, '_').length;\n }\n if (len) {\n if (val !== rule.len) {\n errors.push(\n util.format(options.messages[key].len, rule.fullField, rule.len),\n );\n }\n } else if (min && !max && val < rule.min) {\n errors.push(\n util.format(options.messages[key].min, rule.fullField, rule.min),\n );\n } else if (max && !min && val > rule.max) {\n errors.push(\n util.format(options.messages[key].max, rule.fullField, rule.max),\n );\n } else if (min && max && (val < rule.min || val > rule.max)) {\n errors.push(\n util.format(\n options.messages[key].range,\n rule.fullField,\n rule.min,\n rule.max,\n ),\n );\n }\n}\n\nexport default range;\n","import * as util from '../util';\n\n/**\n * Rule for validating a regular expression pattern.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction pattern(rule, value, source, errors, options) {\n if (rule.pattern) {\n if (rule.pattern instanceof RegExp) {\n // if a RegExp instance is passed, reset `lastIndex` in case its `global`\n // flag is accidentally set to `true`, which in a validation scenario\n // is not necessary and the result might be misleading\n rule.pattern.lastIndex = 0;\n if (!rule.pattern.test(value)) {\n errors.push(\n util.format(\n options.messages.pattern.mismatch,\n rule.fullField,\n value,\n rule.pattern,\n ),\n );\n }\n } else if (typeof rule.pattern === 'string') {\n const _pattern = new RegExp(rule.pattern);\n if (!_pattern.test(value)) {\n errors.push(\n util.format(\n options.messages.pattern.mismatch,\n rule.fullField,\n value,\n rule.pattern,\n ),\n );\n }\n }\n }\n}\n\nexport default pattern;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\nfunction type(rule, value, callback, source, options) {\n const ruleType = rule.type;\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, ruleType) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options, ruleType);\n if (!isEmptyValue(value, ruleType)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default type;\n","import string from './string';\nimport method from './method';\nimport number from './number';\nimport boolean from './boolean';\nimport regexp from './regexp';\nimport integer from './integer';\nimport float from './float';\nimport array from './array';\nimport object from './object';\nimport enumValidator from './enum';\nimport pattern from './pattern';\nimport date from './date';\nimport required from './required';\nimport type from './type';\nimport any from './any';\n\nexport default {\n string,\n method,\n number,\n boolean,\n regexp,\n integer,\n float,\n array,\n object,\n enum: enumValidator,\n pattern,\n date,\n url: type,\n hex: type,\n email: type,\n required,\n any,\n};\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Performs validation for string types.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction string(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options, 'string');\n if (!isEmptyValue(value, 'string')) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n rules.pattern(rule, value, source, errors, options);\n if (rule.whitespace === true) {\n rules.whitespace(rule, value, source, errors, options);\n }\n }\n }\n callback(errors);\n}\n\nexport default string;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a function.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction method(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default method;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a number.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction number(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (value === '') {\n value = undefined;\n }\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default number;\n","import { isEmptyValue } from '../util';\nimport rules from '../rule/index.js';\n\n/**\n * Validates a boolean.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction boolean(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default boolean;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates the regular expression type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction regexp(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (!isEmptyValue(value)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default regexp;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a number is an integer.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction integer(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default integer;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a number is a floating point number.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction floatFn(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default floatFn;\n","import rules from '../rule/index';\nimport { isEmptyValue } from '../util';\n/**\n * Validates an array.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction array(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if ((value === undefined || value === null) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options, 'array');\n if (value !== undefined && value !== null) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default array;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates an object.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction object(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default object;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\nconst ENUM = 'enum';\n\n/**\n * Validates an enumerable list.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction enumerable(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules[ENUM](rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default enumerable;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a regular expression pattern.\n *\n * Performs validation when a rule only contains\n * a pattern property but is not declared as a string type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction pattern(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (!isEmptyValue(value, 'string')) {\n rules.pattern(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default pattern;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\nfunction date(rule, value, callback, source, options) {\n // console.log('integer rule called %j', rule);\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n // console.log('validate on %s value', value);\n if (validate) {\n if (isEmptyValue(value, 'date') && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (!isEmptyValue(value, 'date')) {\n let dateObject;\n\n if (value instanceof Date) {\n dateObject = value;\n } else {\n dateObject = new Date(value);\n }\n\n rules.type(rule, dateObject, source, errors, options);\n if (dateObject) {\n rules.range(rule, dateObject.getTime(), source, errors, options);\n }\n }\n }\n callback(errors);\n}\n\nexport default date;\n","import rules from '../rule/index.js';\n\nfunction required(rule, value, callback, source, options) {\n const errors = [];\n const type = Array.isArray(value) ? 'array' : typeof value;\n rules.required(rule, value, source, errors, options, type);\n callback(errors);\n}\n\nexport default required;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Performs validation for any type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction any(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n }\n callback(errors);\n}\n\nexport default any;\n","export function newMessages() {\n return {\n default: 'Validation error on field %s',\n required: '%s is required',\n enum: '%s must be one of %s',\n whitespace: '%s cannot be empty',\n date: {\n format: '%s date %s is invalid for format %s',\n parse: '%s date could not be parsed, %s is invalid ',\n invalid: '%s date %s is invalid',\n },\n types: {\n string: '%s is not a %s',\n method: '%s is not a %s (function)',\n array: '%s is not an %s',\n object: '%s is not an %s',\n number: '%s is not a %s',\n date: '%s is not a %s',\n boolean: '%s is not a %s',\n integer: '%s is not an %s',\n float: '%s is not a %s',\n regexp: '%s is not a valid %s',\n email: '%s is not a valid %s',\n url: '%s is not a valid %s',\n hex: '%s is not a valid %s',\n },\n string: {\n len: '%s must be exactly %s characters',\n min: '%s must be at least %s characters',\n max: '%s cannot be longer than %s characters',\n range: '%s must be between %s and %s characters',\n },\n number: {\n len: '%s must equal %s',\n min: '%s cannot be less than %s',\n max: '%s cannot be greater than %s',\n range: '%s must be between %s and %s',\n },\n array: {\n len: '%s must be exactly %s in length',\n min: '%s cannot be less than %s in length',\n max: '%s cannot be greater than %s in length',\n range: '%s must be between %s and %s in length',\n },\n pattern: {\n mismatch: '%s value %s does not match pattern %s',\n },\n clone() {\n const cloned = JSON.parse(JSON.stringify(this));\n cloned.clone = this.clone;\n return cloned;\n },\n };\n}\n\nexport const messages = newMessages();\n","import {\n format,\n complementError,\n asyncMap,\n warning,\n deepMerge,\n convertFieldsError,\n} from './util';\nimport validators from './validator/index';\nimport { messages as defaultMessages, newMessages } from './messages';\n\n/**\n * Encapsulates a validation schema.\n *\n * @param descriptor An object declaring validation rules\n * for this schema.\n */\nfunction Schema(descriptor) {\n this.rules = null;\n this._messages = defaultMessages;\n this.define(descriptor);\n}\n\nSchema.prototype = {\n messages(messages) {\n if (messages) {\n this._messages = deepMerge(newMessages(), messages);\n }\n return this._messages;\n },\n define(rules) {\n if (!rules) {\n throw new Error('Cannot configure a schema with no rules');\n }\n if (typeof rules !== 'object' || Array.isArray(rules)) {\n throw new Error('Rules must be an object');\n }\n this.rules = {};\n let z;\n let item;\n for (z in rules) {\n if (rules.hasOwnProperty(z)) {\n item = rules[z];\n this.rules[z] = Array.isArray(item) ? item : [item];\n }\n }\n },\n validate(source_, o = {}, oc = () => {}) {\n let source = source_;\n let options = o;\n let callback = oc;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (!this.rules || Object.keys(this.rules).length === 0) {\n if (callback) {\n callback();\n }\n return Promise.resolve();\n }\n\n function complete(results) {\n let i;\n let errors = [];\n let fields = {};\n\n function add(e) {\n if (Array.isArray(e)) {\n errors = errors.concat(...e);\n } else {\n errors.push(e);\n }\n }\n\n for (i = 0; i < results.length; i++) {\n add(results[i]);\n }\n if (!errors.length) {\n errors = null;\n fields = null;\n } else {\n fields = convertFieldsError(errors);\n }\n callback(errors, fields);\n }\n\n if (options.messages) {\n let messages = this.messages();\n if (messages === defaultMessages) {\n messages = newMessages();\n }\n deepMerge(messages, options.messages);\n options.messages = messages;\n } else {\n options.messages = this.messages();\n }\n let arr;\n let value;\n const series = {};\n const keys = options.keys || Object.keys(this.rules);\n keys.forEach(z => {\n arr = this.rules[z];\n value = source[z];\n arr.forEach(r => {\n let rule = r;\n if (typeof rule.transform === 'function') {\n if (source === source_) {\n source = { ...source };\n }\n value = source[z] = rule.transform(value);\n }\n if (typeof rule === 'function') {\n rule = {\n validator: rule,\n };\n } else {\n rule = { ...rule };\n }\n rule.validator = this.getValidationMethod(rule);\n rule.field = z;\n rule.fullField = rule.fullField || z;\n rule.type = this.getType(rule);\n if (!rule.validator) {\n return;\n }\n series[z] = series[z] || [];\n series[z].push({\n rule,\n value,\n source,\n field: z,\n });\n });\n });\n const errorFields = {};\n return asyncMap(\n series,\n options,\n (data, doIt) => {\n const rule = data.rule;\n let deep =\n (rule.type === 'object' || rule.type === 'array') &&\n (typeof rule.fields === 'object' ||\n typeof rule.defaultField === 'object');\n deep = deep && (rule.required || (!rule.required && data.value));\n rule.field = data.field;\n\n function addFullfield(key, schema) {\n return {\n ...schema,\n fullField: `${rule.fullField}.${key}`,\n };\n }\n\n function cb(e = []) {\n let errors = e;\n if (!Array.isArray(errors)) {\n errors = [errors];\n }\n if (!options.suppressWarning && errors.length) {\n Schema.warning('async-validator:', errors);\n }\n if (errors.length && rule.message !== undefined) {\n errors = [].concat(rule.message);\n }\n\n errors = errors.map(complementError(rule));\n\n if (options.first && errors.length) {\n errorFields[rule.field] = 1;\n return doIt(errors);\n }\n if (!deep) {\n doIt(errors);\n } else {\n // if rule is required but the target object\n // does not exist fail at the rule level and don't\n // go deeper\n if (rule.required && !data.value) {\n if (rule.message !== undefined) {\n errors = [].concat(rule.message).map(complementError(rule));\n } else if (options.error) {\n errors = [\n options.error(\n rule,\n format(options.messages.required, rule.field),\n ),\n ];\n }\n return doIt(errors);\n }\n\n let fieldsSchema = {};\n if (rule.defaultField) {\n for (const k in data.value) {\n if (data.value.hasOwnProperty(k)) {\n fieldsSchema[k] = rule.defaultField;\n }\n }\n }\n fieldsSchema = {\n ...fieldsSchema,\n ...data.rule.fields,\n };\n for (const f in fieldsSchema) {\n if (fieldsSchema.hasOwnProperty(f)) {\n const fieldSchema = Array.isArray(fieldsSchema[f])\n ? fieldsSchema[f]\n : [fieldsSchema[f]];\n fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f));\n }\n }\n const schema = new Schema(fieldsSchema);\n schema.messages(options.messages);\n if (data.rule.options) {\n data.rule.options.messages = options.messages;\n data.rule.options.error = options.error;\n }\n schema.validate(data.value, data.rule.options || options, errs => {\n const finalErrors = [];\n if (errors && errors.length) {\n finalErrors.push(...errors);\n }\n if (errs && errs.length) {\n finalErrors.push(...errs);\n }\n doIt(finalErrors.length ? finalErrors : null);\n });\n }\n }\n\n let res;\n if (rule.asyncValidator) {\n res = rule.asyncValidator(rule, data.value, cb, data.source, options);\n } else if (rule.validator) {\n res = rule.validator(rule, data.value, cb, data.source, options);\n if (res === true) {\n cb();\n } else if (res === false) {\n cb(rule.message || `${rule.field} fails`);\n } else if (res instanceof Array) {\n cb(res);\n } else if (res instanceof Error) {\n cb(res.message);\n }\n }\n if (res && res.then) {\n res.then(\n () => cb(),\n e => cb(e),\n );\n }\n },\n results => {\n complete(results);\n },\n );\n },\n getType(rule) {\n if (rule.type === undefined && rule.pattern instanceof RegExp) {\n rule.type = 'pattern';\n }\n if (\n typeof rule.validator !== 'function' &&\n rule.type &&\n !validators.hasOwnProperty(rule.type)\n ) {\n throw new Error(format('Unknown rule type %s', rule.type));\n }\n return rule.type || 'string';\n },\n getValidationMethod(rule) {\n if (typeof rule.validator === 'function') {\n return rule.validator;\n }\n const keys = Object.keys(rule);\n const messageIndex = keys.indexOf('message');\n if (messageIndex !== -1) {\n keys.splice(messageIndex, 1);\n }\n if (keys.length === 1 && keys[0] === 'required') {\n return validators.required;\n }\n return validators[this.getType(rule)] || false;\n },\n};\n\nSchema.register = function register(type, validator) {\n if (typeof validator !== 'function') {\n throw new Error(\n 'Cannot register a validator by type, validator is not a function',\n );\n }\n validators[type] = validator;\n};\n\nSchema.warning = warning;\n\nSchema.messages = defaultMessages;\n\nSchema.validators = validators;\n\nexport default Schema;\n","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-form`\n};\nconst strings = {\n LAYOUT: ['horizontal', 'vertical'],\n LABEL_POS: ['left', 'top', 'inset'],\n LABEL_ALIGN: ['left', 'right'],\n EXTRA_POS: ['middle', 'bottom'],\n DEFAULT_TRIGGER: 'change'\n};\nconst numbers = {};\nexport { cssClasses, strings, numbers };","import _isUndefined from \"lodash/isUndefined\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport AsyncValidator from 'async-validator';\nimport { strings } from './constants';\nimport copy from 'fast-copy';\n/**\n *\n * @param WrappedComponent React.ComponentType | any\n */\nexport function getDisplayName(WrappedComponent) {\n const originName = WrappedComponent.displayName || WrappedComponent.name;\n return originName ? `SemiField${originName}` : 'SemiField';\n}\nexport function generateValidatesFromRules(field) {\n let rules = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n const descriptor = {};\n descriptor[field] = rules;\n const validator = new AsyncValidator(descriptor);\n return validator;\n}\nexport function isRequired() {\n let rules = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let required = false;\n if (typeof rules === 'object' && 'required' in rules) {\n required = rules.required;\n } else if (Array.isArray(rules) && rules.length) {\n rules.forEach(rule => {\n rule.required ? required = true : null;\n });\n }\n return required;\n}\nexport function isValid(errors) {\n let valid = true;\n if (typeof errors === 'string' && errors.length) {\n valid = false;\n } else if (Array.isArray(errors) && errors.length) {\n valid = errors.every(error => isValid(error));\n } else if (typeof errors === 'boolean') {\n valid = errors;\n } else if (errors && typeof errors.$$typeof === 'symbol' && errors.$$typeof.toString() === 'Symbol(react.element)') {\n // when error message is reactNode\n // only work with React Adapter\n valid = false;\n }\n return valid;\n}\n/**\n * trigger transform rule\n 1. If the user has set fieldProps, follow the user's fieldProps\n 2. If the user does not set fieldProps, follow formProps\n 3. If there is no formProps, follow the change\n 4. If it is an array, follow the array, if it is not an array (pure string), convert it to a string array\n */\nexport function transformTrigger(fieldTrigger, formTrigger) {\n let result = [];\n let finalResult = [];\n if (!_isUndefined(fieldTrigger)) {\n result = fieldTrigger;\n } else if (!_isUndefined(formTrigger)) {\n result = formTrigger;\n } else {\n result = strings.DEFAULT_TRIGGER;\n }\n if (Array.isArray(result)) {\n finalResult = result;\n }\n if (typeof result === 'string') {\n finalResult[0] = result;\n }\n return finalResult;\n}\nexport function transformDefaultBooleanAPI(fieldProp, formProp) {\n let defaultVal = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n if (!_isUndefined(fieldProp)) {\n return fieldProp;\n } else if (!_isUndefined(formProp)) {\n return formProp;\n } else {\n return defaultVal;\n }\n}\nexport function mergeOptions(opts, props) {\n // Opts: different types of component identification value, value change callback function may be inconsistent, used to adapt 1, input, select 2, radio, checkbox 3, switch\n // valueKey: input, select class component control value props are value, and checkbox, switch is checked\n // eg:checkbox、radio { valueKey: 'checked', onKeyChangeFnName: 'onChange', valuePath: 'target.value' }\n const defaultOpts = {\n valueKey: 'value',\n onKeyChangeFnName: 'onChange',\n valuePath: '',\n maintainCursor: false,\n shouldInject: true,\n shouldMemo: true\n };\n const options = Object.assign(Object.assign({}, defaultOpts), opts);\n // If the field attribute is declared, then the injection is carried out (mainly used to deal with the case where Checkbox and Radio are used separately from the Group); other cases are subject to options\n const shouldInject = 'field' in props ? true : options.shouldInject;\n return {\n options,\n shouldInject\n };\n}\nexport function mergeProps(props) {\n const defaultProps = {\n // validateStatus: 'default',\n allowEmptyString: false,\n allowEmpty: false,\n emptyValue: '',\n noLabel: false,\n noErrorMessage: false,\n isInInputGroup: false\n };\n let _a = Object.assign(Object.assign({}, defaultProps), props),\n {\n field,\n label,\n labelPosition,\n labelWidth,\n labelAlign,\n labelCol,\n wrapperCol,\n initValue,\n validate,\n /**\n * error、warning、default、success\n */\n validateStatus,\n /**\n * change、blur、custom、mount\n */\n trigger,\n allowEmptyString,\n allowEmpty,\n emptyValue,\n rules,\n onChange,\n keepState,\n // Conversion before validation\n transform,\n name,\n fieldClassName,\n fieldStyle,\n noLabel,\n noErrorMessage,\n isInInputGroup,\n stopValidateWithError,\n convert,\n showValidateIcon,\n helpText,\n extraText,\n extraTextPosition,\n pure,\n id\n } = _a,\n rest = __rest(_a, [\"field\", \"label\", \"labelPosition\", \"labelWidth\", \"labelAlign\", \"labelCol\", \"wrapperCol\", \"initValue\", \"validate\", \"validateStatus\", \"trigger\", \"allowEmptyString\", \"allowEmpty\", \"emptyValue\", \"rules\", \"onChange\", \"keepState\", \"transform\", \"name\", \"fieldClassName\", \"fieldStyle\", \"noLabel\", \"noErrorMessage\", \"isInInputGroup\", \"stopValidateWithError\", \"convert\", \"showValidateIcon\", \"helpText\", \"extraText\", \"extraTextPosition\", \"pure\", \"id\"]);\n // Form中的任何类型组件,初始值都统一通过initValue字段来传入,同时将可能会导致组件行为错误的props抽取出来,防止透传到组件中\n // For any type of field component in Form, the initial value is uniformly passed in through the initValue field.\n // At the same time, the props that may cause component behavior errors are extracted to prevent transparent transmission to the component.\n delete rest.defaultChecked;\n delete rest.defaultValue;\n delete rest.checked;\n if (typeof initValue !== 'undefined') {\n initValue = copy(initValue);\n }\n const required = isRequired(rules);\n emptyValue = typeof emptyValue !== 'undefined' ? emptyValue : '';\n return {\n field,\n label,\n labelPosition,\n labelWidth,\n labelAlign,\n labelCol,\n wrapperCol,\n noLabel,\n noErrorMessage,\n isInInputGroup,\n initValue,\n validate,\n validateStatus,\n trigger,\n allowEmptyString,\n allowEmpty,\n emptyValue,\n rules,\n required,\n keepState,\n transform,\n name,\n fieldClassName,\n fieldStyle,\n convert,\n stopValidateWithError,\n showValidateIcon,\n helpText,\n extraText,\n extraTextPosition,\n pure,\n rest,\n id\n };\n}\nfunction bothEmptyArray(val, otherVal) {\n return Array.isArray(val) && Array.isArray(otherVal) && !val.length && !otherVal.length;\n}","// Compute what scrolling needs to be done on required scrolling boxes for target to be in view\n\n// The type names here are named after the spec to make it easier to find more information around what they mean:\n// To reduce churn and reduce things that need be maintained things from the official TS DOM library is used here\n// https://drafts.csswg.org/cssom-view/\n\n// For a definition on what is \"block flow direction\" exactly, check this: https://drafts.csswg.org/css-writing-modes-4/#block-flow-direction\n\n// add support for visualViewport object currently implemented in chrome\ninterface visualViewport {\n height: number\n width: number\n}\n\ntype ScrollLogicalPosition = 'start' | 'center' | 'end' | 'nearest'\n// This new option is tracked in this PR, which is the most likely candidate at the time: https://github.com/w3c/csswg-drafts/pull/1805\ntype ScrollMode = 'always' | 'if-needed'\n// New option that skips auto-scrolling all nodes with overflow: hidden set\n// See FF implementation: https://hg.mozilla.org/integration/fx-team/rev/c48c3ec05012#l7.18\ntype SkipOverflowHiddenElements = boolean\n\ninterface Options {\n block?: ScrollLogicalPosition\n inline?: ScrollLogicalPosition\n scrollMode?: ScrollMode\n boundary?: CustomScrollBoundary\n skipOverflowHiddenElements?: SkipOverflowHiddenElements\n}\n\n// Custom behavior, not in any spec\ntype CustomScrollBoundaryCallback = (parent: Element) => boolean\ntype CustomScrollBoundary = Element | CustomScrollBoundaryCallback | null\ninterface CustomScrollAction {\n el: Element\n top: number\n left: number\n}\n\n// @TODO better shadowdom test, 11 = document fragment\nfunction isElement(el: any): el is Element {\n return typeof el === 'object' && el != null && el.nodeType === 1\n}\n\nfunction canOverflow(\n overflow: string | null,\n skipOverflowHiddenElements?: boolean\n) {\n if (skipOverflowHiddenElements && overflow === 'hidden') {\n return false\n }\n\n return overflow !== 'visible' && overflow !== 'clip'\n}\n\nfunction getFrameElement(el: Element) {\n if (!el.ownerDocument || !el.ownerDocument.defaultView) {\n return null\n }\n\n try {\n return el.ownerDocument.defaultView.frameElement\n } catch (e) {\n return null\n }\n}\n\nfunction isHiddenByFrame(el: Element): boolean {\n const frame = getFrameElement(el)\n if (!frame) {\n return false\n }\n\n return (\n frame.clientHeight < el.scrollHeight || frame.clientWidth < el.scrollWidth\n )\n}\n\nfunction isScrollable(el: Element, skipOverflowHiddenElements?: boolean) {\n if (el.clientHeight < el.scrollHeight || el.clientWidth < el.scrollWidth) {\n const style = getComputedStyle(el, null)\n return (\n canOverflow(style.overflowY, skipOverflowHiddenElements) ||\n canOverflow(style.overflowX, skipOverflowHiddenElements) ||\n isHiddenByFrame(el)\n )\n }\n\n return false\n}\n/**\n * Find out which edge to align against when logical scroll position is \"nearest\"\n * Interesting fact: \"nearest\" works similarily to \"if-needed\", if the element is fully visible it will not scroll it\n *\n * Legends:\n * ┌────────┐ ┏ ━ ━ ━ ┓\n * │ target │ frame\n * └────────┘ ┗ ━ ━ ━ ┛\n */\nfunction alignNearest(\n scrollingEdgeStart: number,\n scrollingEdgeEnd: number,\n scrollingSize: number,\n scrollingBorderStart: number,\n scrollingBorderEnd: number,\n elementEdgeStart: number,\n elementEdgeEnd: number,\n elementSize: number\n) {\n /**\n * If element edge A and element edge B are both outside scrolling box edge A and scrolling box edge B\n *\n * ┌──┐\n * ┏━│━━│━┓\n * │ │\n * ┃ │ │ ┃ do nothing\n * │ │\n * ┗━│━━│━┛\n * └──┘\n *\n * If element edge C and element edge D are both outside scrolling box edge C and scrolling box edge D\n *\n * ┏ ━ ━ ━ ━ ┓\n * ┌───────────┐\n * │┃ ┃│ do nothing\n * └───────────┘\n * ┗ ━ ━ ━ ━ ┛\n */\n if (\n (elementEdgeStart < scrollingEdgeStart &&\n elementEdgeEnd > scrollingEdgeEnd) ||\n (elementEdgeStart > scrollingEdgeStart && elementEdgeEnd < scrollingEdgeEnd)\n ) {\n return 0\n }\n\n /**\n * If element edge A is outside scrolling box edge A and element height is less than scrolling box height\n *\n * ┌──┐\n * ┏━│━━│━┓ ┏━┌━━┐━┓\n * └──┘ │ │\n * from ┃ ┃ to ┃ └──┘ ┃\n *\n * ┗━ ━━ ━┛ ┗━ ━━ ━┛\n *\n * If element edge B is outside scrolling box edge B and element height is greater than scrolling box height\n *\n * ┏━ ━━ ━┓ ┏━┌━━┐━┓\n * │ │\n * from ┃ ┌──┐ ┃ to ┃ │ │ ┃\n * │ │ │ │\n * ┗━│━━│━┛ ┗━│━━│━┛\n * │ │ └──┘\n * │ │\n * └──┘\n *\n * If element edge C is outside scrolling box edge C and element width is less than scrolling box width\n *\n * from to\n * ┏ ━ ━ ━ ━ ┓ ┏ ━ ━ ━ ━ ┓\n * ┌───┐ ┌───┐\n * │ ┃ │ ┃ ┃ │ ┃\n * └───┘ └───┘\n * ┗ ━ ━ ━ ━ ┛ ┗ ━ ━ ━ ━ ┛\n *\n * If element edge D is outside scrolling box edge D and element width is greater than scrolling box width\n *\n * from to\n * ┏ ━ ━ ━ ━ ┓ ┏ ━ ━ ━ ━ ┓\n * ┌───────────┐ ┌───────────┐\n * ┃ │ ┃ │ ┃ ┃ │\n * └───────────┘ └───────────┘\n * ┗ ━ ━ ━ ━ ┛ ┗ ━ ━ ━ ━ ┛\n */\n if (\n (elementEdgeStart <= scrollingEdgeStart && elementSize <= scrollingSize) ||\n (elementEdgeEnd >= scrollingEdgeEnd && elementSize >= scrollingSize)\n ) {\n return elementEdgeStart - scrollingEdgeStart - scrollingBorderStart\n }\n\n /**\n * If element edge B is outside scrolling box edge B and element height is less than scrolling box height\n *\n * ┏━ ━━ ━┓ ┏━ ━━ ━┓\n *\n * from ┃ ┃ to ┃ ┌──┐ ┃\n * ┌──┐ │ │\n * ┗━│━━│━┛ ┗━└━━┘━┛\n * └──┘\n *\n * If element edge A is outside scrolling box edge A and element height is greater than scrolling box height\n *\n * ┌──┐\n * │ │\n * │ │ ┌──┐\n * ┏━│━━│━┓ ┏━│━━│━┓\n * │ │ │ │\n * from ┃ └──┘ ┃ to ┃ │ │ ┃\n * │ │\n * ┗━ ━━ ━┛ ┗━└━━┘━┛\n *\n * If element edge C is outside scrolling box edge C and element width is greater than scrolling box width\n *\n * from to\n * ┏ ━ ━ ━ ━ ┓ ┏ ━ ━ ━ ━ ┓\n * ┌───────────┐ ┌───────────┐\n * │ ┃ │ ┃ │ ┃ ┃\n * └───────────┘ └───────────┘\n * ┗ ━ ━ ━ ━ ┛ ┗ ━ ━ ━ ━ ┛\n *\n * If element edge D is outside scrolling box edge D and element width is less than scrolling box width\n *\n * from to\n * ┏ ━ ━ ━ ━ ┓ ┏ ━ ━ ━ ━ ┓\n * ┌───┐ ┌───┐\n * ┃ │ ┃ │ ┃ │ ┃\n * └───┘ └───┘\n * ┗ ━ ━ ━ ━ ┛ ┗ ━ ━ ━ ━ ┛\n *\n */\n if (\n (elementEdgeEnd > scrollingEdgeEnd && elementSize < scrollingSize) ||\n (elementEdgeStart < scrollingEdgeStart && elementSize > scrollingSize)\n ) {\n return elementEdgeEnd - scrollingEdgeEnd + scrollingBorderEnd\n }\n\n return 0\n}\n\nfunction getParentElement(element: Node): Element | null {\n const parent = element.parentElement\n if (parent == null) {\n return (element.getRootNode() as ShadowRoot).host || null\n }\n return parent\n}\n\nexport default (target: Element, options: Options): CustomScrollAction[] => {\n //TODO: remove this hack when microbundle will support typescript >= 4.0\n const windowWithViewport = window as unknown as Window & {\n visualViewport: visualViewport\n }\n\n const { scrollMode, block, inline, boundary, skipOverflowHiddenElements } =\n options\n // Allow using a callback to check the boundary\n // The default behavior is to check if the current target matches the boundary element or not\n // If undefined it'll check that target is never undefined (can happen as we recurse up the tree)\n const checkBoundary =\n typeof boundary === 'function' ? boundary : (node: any) => node !== boundary\n\n if (!isElement(target)) {\n throw new TypeError('Invalid target')\n }\n\n // Used to handle the top most element that can be scrolled\n const scrollingElement = document.scrollingElement || document.documentElement\n\n // Collect all the scrolling boxes, as defined in the spec: https://drafts.csswg.org/cssom-view/#scrolling-box\n const frames: Element[] = []\n let cursor: Element | null = target\n while (isElement(cursor) && checkBoundary(cursor)) {\n // Move cursor to parent\n cursor = getParentElement(cursor)\n\n // Stop when we reach the viewport\n if (cursor === scrollingElement) {\n frames.push(cursor)\n break\n }\n\n // Skip document.body if it's not the scrollingElement and documentElement isn't independently scrollable\n if (\n cursor != null &&\n cursor === document.body &&\n isScrollable(cursor) &&\n !isScrollable(document.documentElement)\n ) {\n continue\n }\n\n // Now we check if the element is scrollable, this code only runs if the loop haven't already hit the viewport or a custom boundary\n if (cursor != null && isScrollable(cursor, skipOverflowHiddenElements)) {\n frames.push(cursor)\n }\n }\n\n // Support pinch-zooming properly, making sure elements scroll into the visual viewport\n // Browsers that don't support visualViewport will report the layout viewport dimensions on document.documentElement.clientWidth/Height\n // and viewport dimensions on window.innerWidth/Height\n // https://www.quirksmode.org/mobile/viewports2.html\n // https://bokand.github.io/viewport/index.html\n const viewportWidth = windowWithViewport.visualViewport\n ? windowWithViewport.visualViewport.width\n : innerWidth\n const viewportHeight = windowWithViewport.visualViewport\n ? windowWithViewport.visualViewport.height\n : innerHeight\n\n // Newer browsers supports scroll[X|Y], page[X|Y]Offset is\n const viewportX = window.scrollX || pageXOffset\n const viewportY = window.scrollY || pageYOffset\n\n const {\n height: targetHeight,\n width: targetWidth,\n top: targetTop,\n right: targetRight,\n bottom: targetBottom,\n left: targetLeft,\n } = target.getBoundingClientRect()\n\n // These values mutate as we loop through and generate scroll coordinates\n let targetBlock: number =\n block === 'start' || block === 'nearest'\n ? targetTop\n : block === 'end'\n ? targetBottom\n : targetTop + targetHeight / 2 // block === 'center\n let targetInline: number =\n inline === 'center'\n ? targetLeft + targetWidth / 2\n : inline === 'end'\n ? targetRight\n : targetLeft // inline === 'start || inline === 'nearest\n\n // Collect new scroll positions\n const computations: CustomScrollAction[] = []\n // In chrome there's no longer a difference between caching the `frames.length` to a var or not, so we don't in this case (size > speed anyways)\n for (let index = 0; index < frames.length; index++) {\n const frame = frames[index]\n\n // @TODO add a shouldScroll hook here that allows userland code to take control\n\n const { height, width, top, right, bottom, left } =\n frame.getBoundingClientRect()\n\n // If the element is already visible we can end it here\n // @TODO targetBlock and targetInline should be taken into account to be compliant with https://github.com/w3c/csswg-drafts/pull/1805/files#diff-3c17f0e43c20f8ecf89419d49e7ef5e0R1333\n if (\n scrollMode === 'if-needed' &&\n targetTop >= 0 &&\n targetLeft >= 0 &&\n targetBottom <= viewportHeight &&\n targetRight <= viewportWidth &&\n targetTop >= top &&\n targetBottom <= bottom &&\n targetLeft >= left &&\n targetRight <= right\n ) {\n // Break the loop and return the computations for things that are not fully visible\n return computations\n }\n\n const frameStyle = getComputedStyle(frame)\n const borderLeft = parseInt(frameStyle.borderLeftWidth as string, 10)\n const borderTop = parseInt(frameStyle.borderTopWidth as string, 10)\n const borderRight = parseInt(frameStyle.borderRightWidth as string, 10)\n const borderBottom = parseInt(frameStyle.borderBottomWidth as string, 10)\n\n let blockScroll: number = 0\n let inlineScroll: number = 0\n\n // The property existance checks for offfset[Width|Height] is because only HTMLElement objects have them, but any Element might pass by here\n // @TODO find out if the \"as HTMLElement\" overrides can be dropped\n const scrollbarWidth =\n 'offsetWidth' in frame\n ? (frame as HTMLElement).offsetWidth -\n (frame as HTMLElement).clientWidth -\n borderLeft -\n borderRight\n : 0\n const scrollbarHeight =\n 'offsetHeight' in frame\n ? (frame as HTMLElement).offsetHeight -\n (frame as HTMLElement).clientHeight -\n borderTop -\n borderBottom\n : 0\n\n const scaleX =\n 'offsetWidth' in frame\n ? (frame as HTMLElement).offsetWidth === 0\n ? 0\n : width / (frame as HTMLElement).offsetWidth\n : 0\n const scaleY =\n 'offsetHeight' in frame\n ? (frame as HTMLElement).offsetHeight === 0\n ? 0\n : height / (frame as HTMLElement).offsetHeight\n : 0\n\n if (scrollingElement === frame) {\n // Handle viewport logic (document.documentElement or document.body)\n\n if (block === 'start') {\n blockScroll = targetBlock\n } else if (block === 'end') {\n blockScroll = targetBlock - viewportHeight\n } else if (block === 'nearest') {\n blockScroll = alignNearest(\n viewportY,\n viewportY + viewportHeight,\n viewportHeight,\n borderTop,\n borderBottom,\n viewportY + targetBlock,\n viewportY + targetBlock + targetHeight,\n targetHeight\n )\n } else {\n // block === 'center' is the default\n blockScroll = targetBlock - viewportHeight / 2\n }\n\n if (inline === 'start') {\n inlineScroll = targetInline\n } else if (inline === 'center') {\n inlineScroll = targetInline - viewportWidth / 2\n } else if (inline === 'end') {\n inlineScroll = targetInline - viewportWidth\n } else {\n // inline === 'nearest' is the default\n inlineScroll = alignNearest(\n viewportX,\n viewportX + viewportWidth,\n viewportWidth,\n borderLeft,\n borderRight,\n viewportX + targetInline,\n viewportX + targetInline + targetWidth,\n targetWidth\n )\n }\n\n // Apply scroll position offsets and ensure they are within bounds\n // @TODO add more test cases to cover this 100%\n blockScroll = Math.max(0, blockScroll + viewportY)\n inlineScroll = Math.max(0, inlineScroll + viewportX)\n } else {\n // Handle each scrolling frame that might exist between the target and the viewport\n\n if (block === 'start') {\n blockScroll = targetBlock - top - borderTop\n } else if (block === 'end') {\n blockScroll = targetBlock - bottom + borderBottom + scrollbarHeight\n } else if (block === 'nearest') {\n blockScroll = alignNearest(\n top,\n bottom,\n height,\n borderTop,\n borderBottom + scrollbarHeight,\n targetBlock,\n targetBlock + targetHeight,\n targetHeight\n )\n } else {\n // block === 'center' is the default\n blockScroll = targetBlock - (top + height / 2) + scrollbarHeight / 2\n }\n\n if (inline === 'start') {\n inlineScroll = targetInline - left - borderLeft\n } else if (inline === 'center') {\n inlineScroll = targetInline - (left + width / 2) + scrollbarWidth / 2\n } else if (inline === 'end') {\n inlineScroll = targetInline - right + borderRight + scrollbarWidth\n } else {\n // inline === 'nearest' is the default\n inlineScroll = alignNearest(\n left,\n right,\n width,\n borderLeft,\n borderRight + scrollbarWidth,\n targetInline,\n targetInline + targetWidth,\n targetWidth\n )\n }\n\n const { scrollLeft, scrollTop } = frame\n // Ensure scroll coordinates are not out of bounds while applying scroll offsets\n blockScroll = Math.max(\n 0,\n Math.min(\n scrollTop + blockScroll / scaleY,\n frame.scrollHeight - height / scaleY + scrollbarHeight\n )\n )\n inlineScroll = Math.max(\n 0,\n Math.min(\n scrollLeft + inlineScroll / scaleX,\n frame.scrollWidth - width / scaleX + scrollbarWidth\n )\n )\n\n // Cache the offset so that parent frames can scroll this into view correctly\n targetBlock += scrollTop - blockScroll\n targetInline += scrollLeft - inlineScroll\n }\n\n computations.push({ el: frame, top: blockScroll, left: inlineScroll })\n }\n\n return computations\n}\n","import compute from 'compute-scroll-into-view';\nfunction isOptionsObject(options) {\n return options === Object(options) && Object.keys(options).length !== 0;\n}\nfunction defaultBehavior(actions, behavior) {\n if (behavior === void 0) {\n behavior = 'auto';\n }\n var canSmoothScroll = ('scrollBehavior' in document.body.style);\n actions.forEach(function (_ref) {\n var el = _ref.el,\n top = _ref.top,\n left = _ref.left;\n if (el.scroll && canSmoothScroll) {\n el.scroll({\n top: top,\n left: left,\n behavior: behavior\n });\n } else {\n el.scrollTop = top;\n el.scrollLeft = left;\n }\n });\n}\nfunction getOptions(options) {\n if (options === false) {\n return {\n block: 'end',\n inline: 'nearest'\n };\n }\n if (isOptionsObject(options)) {\n return options;\n }\n return {\n block: 'start',\n inline: 'nearest'\n };\n}\nfunction scrollIntoView(target, options) {\n var isTargetAttached = target.isConnected || target.ownerDocument.documentElement.contains(target);\n if (isOptionsObject(options) && typeof options.behavior === 'function') {\n return options.behavior(isTargetAttached ? compute(target, options) : []);\n }\n if (!isTargetAttached) {\n return;\n }\n var computeOptions = getOptions(options);\n return defaultBehavior(compute(target, computeOptions), computeOptions.behavior);\n}\nexport default scrollIntoView;","import _toPath from \"lodash/toPath\";\nimport _isFunction from \"lodash/isFunction\";\nimport _isUndefined from \"lodash/isUndefined\";\nimport BaseFoundation from '../base/foundation';\nimport * as ObjectUtil from '../utils/object';\nimport isPromise from '../utils/isPromise';\nimport { isValid } from './utils';\nimport scrollIntoView from 'scroll-into-view-if-needed';\nexport default class FormFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n /*\n Also need to read initValue here, because the Form level can set the initial value,\n and the Field level can also set the initial value.\n The field set in the Form does not necessarily have a Field entity,\n so you cannot completely rely on the register moment to set the initial value\n 这里也需要读一次initValue,因为Form级别可设置初始值,Field级别也可设置初始值.\n Form中设置的字段,不一定会存在Field实体,所以不能完全依赖register时刻来设置初始值\n */\n let {\n initValues\n } = this._adapter.getProps();\n initValues = this._adapter.cloneDeep(initValues);\n this.data = {\n values: initValues ? initValues : {},\n errors: {},\n touched: {}\n // invalid: false,\n // dirty: false,\n };\n // Map store all fields\n // key: fieldName\n // value: { field, fieldApi, keepState, initValue}\n this.fields = new Map();\n // Record all registered fields\n this.registered = {};\n // Record all registered ArrayField\n this.registeredArrayField = new Map();\n this.register = this.register.bind(this);\n this.unRegister = this.unRegister.bind(this);\n this.registerArrayField = this.registerArrayField.bind(this);\n this.unRegisterArrayField = this.unRegisterArrayField.bind(this);\n this.getArrayField = this.getArrayField.bind(this);\n this.updateArrayField = this.updateArrayField.bind(this);\n this.getField = this.getField.bind(this);\n this.setValues = this.setValues.bind(this);\n this.updateStateValue = this.updateStateValue.bind(this);\n this.updateStateError = this.updateStateError.bind(this);\n this.updateStateTouched = this.updateStateTouched.bind(this);\n this.getFormState = this.getFormState.bind(this);\n this.getValue = this.getValue.bind(this);\n this.getError = this.getError.bind(this);\n this.getTouched = this.getTouched.bind(this);\n this.getInitValues = this.getInitValues.bind(this);\n this.getInitValue = this.getInitValue.bind(this);\n this.getFormProps = this.getFormProps.bind(this);\n this.getFieldExist = this.getFieldExist.bind(this);\n this.scrollToField = this.scrollToField.bind(this);\n this.scrollToError = this.scrollToError.bind(this);\n }\n init() {\n this._adapter.initFormId();\n }\n getField(field) {\n const targetField = this.fields.get(field);\n return targetField;\n }\n register(field, fieldState, fieldStuff) {\n // determine if this field has been register before\n const registered = this.registered[field];\n this.registered[field] = true;\n this.fields.set(field, fieldStuff);\n if (fieldStuff.keepState) {\n // TODO support keepState\n } else {\n const allowEmpty = fieldStuff.allowEmpty || false;\n const opts = {\n notNotify: true,\n notUpdate: false,\n allowEmpty\n };\n let fieldValue = fieldState.value;\n // When allowEmpty is false, 'is equivalent to undefined, and the key of the field does not need to be reflected on values\n if (!allowEmpty && fieldValue === '') {\n fieldValue = undefined;\n }\n this.updateStateValue(field, fieldValue, opts);\n if (fieldState.error) {\n this.updateStateError(field, fieldState.error, opts);\n }\n }\n // this.log(this.fields);\n }\n unRegister(field) {\n const targetField = this.fields.get(field);\n // delete data\n try {\n if (!targetField.keepState) {\n ObjectUtil.remove(this.data.values, field);\n ObjectUtil.remove(this.data.errors, field);\n ObjectUtil.remove(this.data.touched, field);\n }\n } catch (error) {\n console.error(`some thing wrong when unregister field:${field}`);\n }\n // delete field\n this.fields.delete(field);\n this._adapter.notifyChange(this.data);\n this._adapter.forceUpdate();\n }\n // in order to solve bytedance internal issue-289\n registerArrayField(arrayFieldPath, val) {\n this.updateArrayField(arrayFieldPath, {\n updateKey: new Date().valueOf(),\n initValue: val\n });\n }\n unRegisterArrayField(arrayField) {\n this.registeredArrayField.delete(arrayField);\n }\n getArrayField(arrayField) {\n return this.registeredArrayField.get(arrayField);\n }\n updateArrayField(arrayField, updateValue) {\n const mergeVal = Object.assign(Object.assign({}, this.registeredArrayField.get(arrayField)), updateValue);\n this.registeredArrayField.set(arrayField, mergeVal);\n }\n validate(fieldPaths) {\n const {\n validateFields\n } = this.getProps();\n if (validateFields && _isFunction(validateFields)) {\n return this._formValidate();\n } else {\n return this._fieldsValidate(fieldPaths);\n }\n }\n // form level validate\n _formValidate() {\n const {\n values\n } = this.data;\n const {\n validateFields\n } = this.getProps();\n return new Promise((resolve, reject) => {\n let maybePromisedErrors;\n try {\n maybePromisedErrors = validateFields(values);\n } catch (errors) {\n // error throw by sync validate directly\n maybePromisedErrors = errors;\n }\n if (!maybePromisedErrors) {\n const _values = this._adapter.cloneDeep(values);\n resolve(_values);\n this.injectErrorToField({});\n } else if (isPromise(maybePromisedErrors)) {\n maybePromisedErrors.then(result => {\n // validate success,clear error\n if (!result) {\n const _values = this._adapter.cloneDeep(values);\n resolve(_values);\n this.injectErrorToField({});\n } else {\n this.data.errors = result;\n this._adapter.notifyChange(this.data);\n this.injectErrorToField(result);\n this._adapter.forceUpdate();\n this._autoScroll(100);\n reject(result);\n }\n }, errors => {\n // validate failed\n // this._adapter.notifyChange(this.data);\n this._autoScroll(100);\n reject(errors);\n });\n } else {\n // TODO: current design, returning an empty object will be considered a checksum failure and will be rejected. Only returning an empty string will be considered a success, consider resetting it in 1.0?\n this.data.errors = maybePromisedErrors;\n this.injectErrorToField(maybePromisedErrors);\n this._adapter.notifyChange(this.data);\n this._adapter.forceUpdate();\n this._autoScroll(100);\n reject(maybePromisedErrors);\n }\n });\n }\n // field level validate\n _fieldsValidate(fieldPaths) {\n const {\n values\n } = this.data;\n // When there is no custom validation function at Form level, perform validation of each Field\n return new Promise((resolve, reject) => {\n let promiseSet = [];\n const targetFields = this._getOperateFieldMap(fieldPaths);\n targetFields.forEach((field, fieldPath) => {\n // Call each fieldApi for verification\n const fieldValue = this.getValue(fieldPath);\n // When centralized verification, no need to trigger forceUpdate and notify\n const opts = {\n notNotify: true,\n notUpdate: true\n };\n const validateResult = field.fieldApi.validate(fieldValue, opts);\n promiseSet.push(validateResult);\n field.fieldApi.setTouched(true, opts);\n });\n Promise.all(promiseSet).then(() => {\n // After the centralized verification is completed, trigger notify and forceUpdate once.\n this._adapter.notifyChange(this.data);\n this._adapter.forceUpdate();\n const errors = this.getError();\n if (this._isValid(targetFields)) {\n const _values = this._adapter.cloneDeep(values);\n resolve(_values);\n } else {\n this._autoScroll();\n reject(errors);\n }\n });\n });\n }\n submit(e) {\n const {\n values\n } = this.data;\n // validate form\n this.validate().then(resolveValues => {\n // if valid do submit\n const _values = this._adapter.cloneDeep(resolveValues);\n this._adapter.notifySubmit(_values, e);\n }).catch(errors => {\n const _errors = this._adapter.cloneDeep(errors);\n const _values = this._adapter.cloneDeep(values);\n this._adapter.notifySubmitFail(_errors, _values, e);\n });\n }\n /**\n * Case A:\n * All fields: a[0]、a[1]、b.type、b.name[2]、b.name[0]\n * input => output:\n * a => a[0]、a[1]\n * b => b.type、b.name[0]、b.name[2]\n *\n * Case B:\n * All fields: activity.a[0]、activity.a[1]、activity.c、activity.d、other\n * input => output:\n * activity.a => activity.a[0]、activity.a[1]\n *\n */\n _getNestedField(path) {\n const allRegisterField = this.fields;\n const allFieldPath = [...allRegisterField].map(item => item[0]);\n let nestedFieldPath = new Map();\n allFieldPath.forEach(item => {\n let itemPath = _toPath(item);\n let targetPath = _toPath(path);\n if (targetPath.every((path, i) => targetPath[i] === itemPath[i])) {\n const realField = allRegisterField.get(item);\n nestedFieldPath.set(item, realField);\n }\n });\n return nestedFieldPath;\n }\n // get all operate fields, called by validate() / reset()\n _getOperateFieldMap(fieldPaths) {\n let targetFields = new Map();\n if (!_isUndefined(fieldPaths)) {\n // reset or validate specific fields\n fieldPaths.forEach(path => {\n const field = this.fields.get(path);\n // may be undefined, if exists two fields like 'a[0]'、'a[1]', but user directly call reset(['a']) / validate(['a'])\n if (_isUndefined(field)) {\n const nestedFields = this._getNestedField(path);\n targetFields = new Map([...targetFields, ...nestedFields]);\n } else {\n targetFields.set(path, field);\n }\n });\n } else {\n // reset or validate all fields\n targetFields = this.fields;\n }\n return targetFields;\n }\n // Reset the entire form, reset all fields and remove validation results\n reset(fieldPaths) {\n const targetFields = this._getOperateFieldMap(fieldPaths);\n targetFields.forEach(field => {\n field.fieldApi.reset();\n });\n if (this.registeredArrayField.size) {\n this._resetArrayField();\n }\n this._adapter.notifyChange(this.data);\n this._adapter.forceUpdate();\n this._adapter.notifyReset();\n }\n _resetArrayField() {\n /*\n When Reset, arrayField needs to be processed separately. Restore the key/value of arrayField in formState according to the initial value\n Update the key inside the arrayField to make it actively renderer\n Reset时,arrayField需要单独处理, 根据初始值还原 arrayField在formState中的key/value, 更新 arrayField内部的key,使其主动rerender\n */\n const arrayFieldPaths = [...this.registeredArrayField.keys()];\n arrayFieldPaths.forEach(path => {\n const arrayFieldState = this.registeredArrayField.get(path);\n const arrayFieldInitValue = arrayFieldState.initValue;\n this.updateStateValue(path, arrayFieldInitValue, {\n notNotify: true,\n notUpdate: true\n });\n this.updateArrayField(path, {\n updateKey: new Date().valueOf()\n });\n });\n }\n // After calling the form's custom validateFields function, reject the returned error to the corresponding field\n // 调用了Form的自定义validateFields函数后,将返回的错误展示到对应的field中\n injectErrorToField(errors) {\n this.fields.forEach(field => {\n const fieldError = ObjectUtil.get(errors, field.field);\n const opts = {\n notNotify: true,\n notUpdate: true\n };\n field.fieldApi.setError(fieldError, opts);\n });\n }\n getValue(field, opts) {\n const isAllField = typeof field === 'undefined';\n const needClone = opts && opts.needClone;\n let result, fieldValue;\n switch (true) {\n case !isAllField && !needClone:\n result = ObjectUtil.get(this.data.values, field);\n break;\n case !isAllField && needClone:\n fieldValue = ObjectUtil.get(this.data.values, field);\n result = this._adapter.cloneDeep(fieldValue);\n break;\n case isAllField && !needClone:\n result = Object.assign({}, this.data.values);\n break;\n case isAllField && needClone:\n result = this._adapter.cloneDeep(this.data.values);\n break;\n default:\n break;\n }\n return result;\n }\n setValues(values, _ref) {\n let {\n isOverride = false\n } = _ref;\n const _values = this._adapter.cloneDeep(values);\n this.fields.forEach(field => {\n const value = ObjectUtil.get(_values, field.field);\n // When calling setValues to override the values, only need to trigger onValueChange and onChange once, so setNotNotify of setValue to true\n // 调用setValues进行值的覆盖时,只需要回调一次onValueChange、onChange即可,所以此处将setValue的notNotify置为true\n const opts = {\n notNotify: true,\n notUpdate: true\n };\n field.fieldApi.setValue(value, opts);\n });\n // if there exists any arrayField component in this form\n if (this.registeredArrayField.size) {\n const arrayFieldPaths = [...this.registeredArrayField.keys()];\n arrayFieldPaths.forEach(path => {\n this.updateArrayField(path, {\n updateKey: new Date().valueOf()\n });\n });\n }\n // When isOverride is true, there may be a non-existent field in the values passed in, directly synchronized to formState.values\n // 当isOverride为true,传入的values中可能存在不存在的field时,直接将其同步到formState.values中\n if (isOverride) {\n this.data.values = _values;\n }\n // After completing the assignment, the unified callback can be done once.\n // 在完成赋值后,统一回调一次即可\n this._adapter.notifyChange(this.data);\n this._adapter.notifyValueChange(this.data.values, Object.assign({}, values));\n this._adapter.forceUpdate();\n }\n // update formState value\n updateStateValue(field, value, opts, callback) {\n const notNotify = opts && opts.notNotify;\n const notUpdate = opts && opts.notUpdate;\n const fieldAllowEmpty = opts && opts.fieldAllowEmpty;\n /**\n * 当Form.allowEmpty为true时,所有的field,key都会在formState.values中出现,如果值为空那么就是undefined\n * 当Form.allowEmpty为false时,只有有值的field,key才会在formState.values中出现\n * When F orm.allow Empty is true, all fields and keys will appear in the formS tate.values. If the value is empty, it is undefined\n * When F orm.allow Empty is false, only fields with values will key appear in the formS tate.values\n */\n const formAllowEmpty = this.getProp('allowEmpty');\n // priority at Field level\n const allowEmpty = fieldAllowEmpty ? fieldAllowEmpty : formAllowEmpty;\n ObjectUtil.set(this.data.values, field, value, allowEmpty);\n /**\n * When registering, setValue called when Field initValue is synchronized to FormState should not trigger notify\n * but need to trigger forceUpdate, otherwise useFormState, useFieldState initial rendering will have problems\n *\n * register时,Field中同步initValue到FormState时调用的setValue不应该触发notify\n * 但需要触发forceUpdate,否则useFormState、useFieldState初始渲染会有问题\n */\n if (!notNotify) {\n this._adapter.notifyChange(this.data);\n this._adapter.notifyValueChange(this.data.values, {\n [field]: value\n });\n }\n if (!notUpdate) {\n this._adapter.forceUpdate(callback);\n }\n }\n // get touched from formState\n getTouched(field) {\n if (typeof field === 'undefined') {\n return this.data.touched;\n }\n return ObjectUtil.get(this.data.touched, field);\n }\n // update formState touched\n updateStateTouched(field, isTouched, opts, callback) {\n const notNotify = opts && opts.notNotify;\n const notUpdate = opts && opts.notUpdate;\n ObjectUtil.set(this.data.touched, field, isTouched);\n if (!notNotify) {\n this._adapter.notifyChange(this.data);\n }\n if (!notUpdate) {\n this._adapter.forceUpdate(callback);\n }\n }\n // get error from formState\n getError(field) {\n if (typeof field === 'undefined') {\n return this.data.errors;\n }\n return ObjectUtil.get(this.data.errors, field);\n }\n // update formState error\n updateStateError(field, error, opts, callback) {\n const notNotify = opts && opts.notNotify;\n const notUpdate = opts && opts.notUpdate;\n ObjectUtil.set(this.data.errors, field, error);\n // The setError caused by centralized validation does not need to trigger notify, otherwise it will be called too frequently, as many times as there are fields\n if (!notNotify) {\n this._adapter.notifyChange(this.data);\n }\n this._adapter.notifyErrorChange(this.data.errors, {\n [field]: error\n });\n if (!notUpdate) {\n this._adapter.forceUpdate(callback);\n }\n }\n // For internal use in the FormApi Operating Field\n getFieldSetterApi() {\n const setValue = (field, value, opts) => {\n const fieldApi = this.fields.get(field) ? this.fields.get(field).fieldApi : undefined;\n // DeepClone the value entered from the outside to avoid unexpected errors caused by not isolating the scope to the greatest extent. This setValue will be called in eg: ArrayField\n const newValue = this._adapter.cloneDeep(value);\n if (fieldApi) {\n // If there is a corresponding Field entity, call FieldApi to update the value\n fieldApi.setValue(newValue, opts);\n } else {\n // If you reset an entire array, such as Array Field, the array as a whole may actually have no Field entities (but each array element corresponds to a Field)\n // At this time, first modify formState directly, then find out the subordinate fields and drive them to update\n // Eg: peoples: [0, 2, 3]. Each value of the peoples array corresponds to an Input Field\n // When the user directly calls formA pi.set Value ('peoples', [2,3])\n this.updateStateValue(field, newValue, opts, () => {\n let nestedFields = this._getNestedField(field);\n if (nestedFields.size) {\n nestedFields.forEach(fieldStaff => {\n let fieldPath = fieldStaff.field;\n let newFieldVal = ObjectUtil.get(this.data.values, fieldPath);\n let nestedBatchUpdateOpts = {\n notNotify: true,\n notUpdate: true\n };\n fieldStaff.fieldApi.setValue(newFieldVal, nestedBatchUpdateOpts);\n });\n }\n });\n // If the reset happens to be, then update the updateKey corresponding to ArrayField to render it again\n if (this.getArrayField(field)) {\n this.updateArrayField(field, {\n updateKey: new Date().valueOf()\n });\n }\n }\n };\n const setError = (field, error, opts) => {\n const fieldApi = this.fields.get(field) ? this.fields.get(field).fieldApi : undefined;\n const newError = this._adapter.cloneDeep(error);\n if (fieldApi) {\n fieldApi.setError(newError, opts);\n } else {\n this.updateStateError(field, newError, opts, () => {\n let nestedFields = this._getNestedField(field);\n if (nestedFields.size) {\n nestedFields.forEach(fieldStaff => {\n let fieldPath = fieldStaff.field;\n let newFieldError = ObjectUtil.get(this.data.errors, fieldPath);\n let nestedBatchUpdateOpts = {\n notNotify: true,\n notUpdate: true\n };\n fieldStaff.fieldApi.setError(newFieldError, nestedBatchUpdateOpts);\n });\n }\n });\n if (this.getArrayField(field)) {\n this.updateArrayField(field, {\n updateKey: new Date().valueOf()\n });\n }\n }\n };\n const setTouched = (field, isTouched, opts) => {\n const fieldApi = this.fields.get(field) ? this.fields.get(field).fieldApi : undefined;\n // touched is boolean variable, no need to exec deepClone like setValue\n if (fieldApi) {\n fieldApi.setTouched(isTouched, opts);\n } else {\n this.updateStateTouched(field, isTouched, opts, () => {\n let nestedFields = this._getNestedField(field);\n if (nestedFields.size) {\n nestedFields.forEach(fieldStaff => {\n let fieldPath = fieldStaff.field;\n let newFieldTouch = ObjectUtil.get(this.data.touched, fieldPath);\n let nestedBatchUpdateOpts = {\n notNotify: true,\n notUpdate: true\n };\n fieldStaff.fieldApi.setTouched(newFieldTouch, nestedBatchUpdateOpts);\n });\n }\n });\n if (this.getArrayField(field)) {\n this.updateArrayField(field, {\n updateKey: new Date().valueOf()\n });\n }\n }\n };\n return {\n setValue,\n setError,\n setTouched\n };\n }\n // For Field and ArrayField to read and modify FormState\n getModifyFormStateApi() {\n return {\n register: this.register,\n unRegister: this.unRegister,\n updateStateValue: this.updateStateValue,\n updateStateError: this.updateStateError,\n updateStateTouched: this.updateStateTouched,\n getValue: this.getValue,\n getError: this.getError,\n getTouched: this.getTouched,\n getInitValues: this.getInitValues,\n getInitValue: this.getInitValue,\n getFormProps: this.getFormProps,\n getField: this.getField,\n registerArrayField: this.registerArrayField,\n unRegisterArrayField: this.unRegisterArrayField,\n getArrayField: this.getArrayField,\n updateArrayField: this.updateArrayField\n };\n }\n // Form APIs for external use, exposed to the user\n getFormApi() {\n const fieldSetterApi = this.getFieldSetterApi();\n return Object.assign(Object.assign({}, fieldSetterApi), {\n reset: fields => this.reset(fields),\n validate: fields => this.validate(fields),\n getValue: field => this.getValue(field, {\n needClone: true\n }),\n getValues: () => this.getValue(undefined, {\n needClone: true\n }),\n getFormState: () => this.getFormState(true),\n getFormProps: props => this.getFormProps(props),\n getInitValue: field => this.getInitValue(field),\n getInitValues: () => this.getInitValues(),\n getTouched: field => this.getTouched(field),\n getError: field => this.getError(field),\n setValues: (values, opts) => this.setValues(values, opts || {\n isOverride: false\n }),\n submitForm: () => this.submit(),\n getFieldExist: field => this.getFieldExist(field),\n scrollToField: (field, scrollOpts) => this.scrollToField(field, scrollOpts),\n scrollToError: opts => this.scrollToError(opts)\n });\n }\n getFormState() {\n let needClone = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n // NOTES:这里如果直接返回this.data,forceUpdate 触发 Form rerender 时,通过context传下去的formState会被认为是同一个对象【应该是浅对比的原因】\n // 使用了useFormState相关的component都不会触发重新渲染。所以使用...复制一次\n /*\n The reason for distinguishing deepClone: When semi is calling getFormState for internal consumption,\n the value of formState will not be modified, so deep cloning is not necessary, which can reduce performance loss\n But if the users use formApi.getFormState(), the behavior is unpredictable, and invasive modifications may be performed,\n so deep clones are used for isolation.\n 对deepClone进行区分的原因:semi调用getFormState内部消费时,不会对formState的值进行修改,所以无需深克隆,节约开销\n 但如果是业务方用formApi调用getFormState时,行为无法预料,有可能会进行侵入式修改,所以用深克隆进行隔离\n */\n if (!needClone) {\n return Object.assign({}, this.data);\n } else {\n return this._adapter.cloneDeep(this.data);\n }\n }\n _isValid(targetFields) {\n let valid = true;\n if (!targetFields) {\n valid = Boolean(ObjectUtil.empty(this.data.errors));\n } else {\n // when trigger partial validate\n const targetFieldStr = [...targetFields.keys()];\n targetFieldStr.forEach(fieldStr => {\n const fieldError = ObjectUtil.get(this.data.errors, fieldStr);\n if (!isValid(fieldError)) {\n valid = false;\n }\n });\n }\n return valid;\n }\n // get form.props.initValues\n getInitValues() {\n return this._adapter.getInitValues();\n }\n getInitValue(field) {\n if (typeof field === 'undefined') {\n return this._adapter.getInitValues();\n }\n return ObjectUtil.get(this._adapter.getInitValues(), field);\n }\n getFormProps(keys) {\n return this._adapter.getFormProps(keys);\n }\n getFieldExist(field) {\n return Boolean(this.fields.has(field));\n }\n _autoScroll(timeout) {\n const {\n autoScrollToError\n } = this.getFormProps();\n if (!autoScrollToError) {\n return;\n }\n let scrollOpts = {\n behavior: 'smooth',\n block: 'start'\n };\n typeof autoScrollToError === 'object' ? scrollOpts = autoScrollToError : null;\n if (timeout) {\n setTimeout(() => this._getErrorFieldAndScroll(scrollOpts), 100);\n } else {\n this._getErrorFieldAndScroll(scrollOpts);\n }\n }\n _getErrorFieldAndScroll(scrollOpts) {\n const errorDOM = this._adapter.getAllErrorDOM();\n if (errorDOM && errorDOM.length) {\n try {\n const fieldDOM = errorDOM[0].parentNode.parentNode;\n scrollIntoView(fieldDOM, scrollOpts);\n } catch (error) {}\n }\n }\n scrollToField(field) {\n let scrollOpts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n behavior: 'smooth',\n block: 'start'\n };\n if (this.getFieldExist(field)) {\n const fieldDOM = this._adapter.getFieldDOM(field);\n scrollIntoView(fieldDOM, scrollOpts);\n }\n }\n scrollToError(config) {\n let scrollOpts = config && config.scrollOpts ? config.scrollOpts : {\n behavior: 'smooth',\n block: 'start'\n };\n let field = config && config.field;\n let index = config && config.index;\n let fieldDOM, errorDOM;\n if (typeof index === 'number') {\n const allErrorDOM = this._adapter.getAllErrorDOM();\n let errorDOM = allErrorDOM[index];\n if (errorDOM) {\n fieldDOM = errorDOM.parentNode.parentNode;\n }\n } else if (field) {\n // If field is specified, find the error dom of the corresponding field\n errorDOM = this._adapter.getFieldErrorDOM(field);\n if (errorDOM) {\n fieldDOM = errorDOM.parentNode.parentNode;\n }\n } else if (typeof field === 'undefined') {\n // If field is not specified, find all error doms and scroll to the first one\n let allErrorDOM = this._adapter.getAllErrorDOM();\n if (allErrorDOM && allErrorDOM.length) {\n fieldDOM = allErrorDOM[0].parentNode.parentNode;\n }\n }\n if (fieldDOM) {\n scrollIntoView(fieldDOM, scrollOpts);\n }\n }\n}","import React from 'react';\nconst FormStateContext = /*#__PURE__*/React.createContext({});\nFormStateContext.displayName = 'FormState';\nconst FormApiContext = /*#__PURE__*/React.createContext({});\nFormApiContext.displayName = 'FormApi';\nconst FormUpdaterContext = /*#__PURE__*/React.createContext({});\nFormUpdaterContext.displayName = 'FormUpdater';\nconst ArrayFieldContext = /*#__PURE__*/React.createContext({\n shouldUseInitValue: true\n});\nexport { FormStateContext, FormApiContext, FormUpdaterContext, ArrayFieldContext };","// https://stackoverflow.com/questions/33199959/how-to-detect-a-react-component-vs-a-react-element\nimport React from 'react';\nimport { isHTMLElement } from '@douyinfe/semi-foundation/lib/es/utils/dom';\nfunction isClassComponent(component) {\n return typeof component === 'function' && Boolean(component.prototype.isReactComponent);\n}\nfunction isFunctionalComponent(Component) {\n return typeof Component === 'function' &&\n // can be various things\n !(Component.prototype && Component.prototype.isReactComponent // native arrows don't have prototypes\n );\n}\nfunction isReactComponent(component) {\n return isClassComponent(component) || isFunctionalComponent(component);\n}\nfunction isElement(element) {\n return /*#__PURE__*/React.isValidElement(element);\n}\nfunction isCompositeTypeElement(element) {\n return isElement(element) && typeof element.type === 'function';\n}\nfunction isEmptyChildren(children) {\n return React.Children.count(children) === 0;\n}\nexport { isClassComponent, isFunctionalComponent, isReactComponent, isElement,\n// isDOMTypeElement,\nisHTMLElement, isCompositeTypeElement, isEmptyChildren };","import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/form/constants';\nimport LocaleConsumer from '../locale/localeConsumer';\nconst prefixCls = cssClasses.PREFIX;\nexport default class Label extends PureComponent {\n render() {\n const {\n children,\n required,\n text,\n disabled,\n name,\n width,\n align,\n style,\n className,\n extra,\n id,\n optional\n } = this.props;\n const labelCls = classNames(className, {\n [`${prefixCls}-field-label`]: true,\n [`${prefixCls}-field-label-left`]: align === 'left',\n [`${prefixCls}-field-label-right`]: align === 'right',\n [`${prefixCls}-field-label-required`]: required,\n [`${prefixCls}-field-label-disabled`]: disabled,\n [`${prefixCls}-field-label-with-extra`]: extra\n });\n const labelStyle = style ? style : {};\n width ? labelStyle.width = width : null;\n const optionalText = /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Form\"\n }, locale => (/*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixCls}-field-label-optional-text`\n }, locale.optional)));\n const textContent = /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-field-label-text`,\n \"x-semi-prop\": \"label\"\n }, typeof text !== 'undefined' ? text : children, optional ? optionalText : null);\n const contentWithExtra = /*#__PURE__*/React.createElement(React.Fragment, null, textContent, /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-field-label-extra`\n }, extra));\n return /*#__PURE__*/React.createElement(\"label\", {\n className: labelCls,\n htmlFor: name,\n style: labelStyle,\n id: id\n }, extra ? contentWithExtra : textContent);\n }\n}\nLabel.defaultProps = {\n required: false,\n name: '',\n align: 'left',\n className: '',\n optional: false\n};\nLabel.propTypes = {\n id: PropTypes.string,\n children: PropTypes.node,\n required: PropTypes.bool,\n text: PropTypes.node,\n disabled: PropTypes.bool,\n name: PropTypes.string,\n align: PropTypes.string,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n style: PropTypes.object,\n className: PropTypes.string,\n extra: PropTypes.node,\n optional: PropTypes.bool\n};","import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/form/constants';\nimport { IconAlertTriangle, IconAlertCircle } from '@douyinfe/semi-icons';\nconst prefix = cssClasses.PREFIX;\nexport default class ErrorMessage extends PureComponent {\n generatorText(error) {\n const {\n helpTextId,\n errorMessageId\n } = this.props;\n const propsError = this.props.error;\n let id = errorMessageId;\n if (!propsError) {\n id = helpTextId;\n }\n if (typeof error === 'string') {\n return /*#__PURE__*/React.createElement(\"span\", {\n id: id\n }, error);\n } else if (Array.isArray(error)) {\n const err = error.filter(e => e);\n return err.length ? /*#__PURE__*/React.createElement(\"span\", {\n id: id\n }, err.join(', ')) : null;\n } else if (/*#__PURE__*/React.isValidElement(error)) {\n return error;\n }\n return null;\n }\n render() {\n const {\n error,\n className,\n style,\n validateStatus,\n helpText,\n showValidateIcon,\n isInInputGroup\n } = this.props;\n const cls = classNames({\n [prefix + '-field-error-message']: Boolean(error),\n [prefix + '-field-help-text']: Boolean(helpText)\n }, className);\n if (!error && !helpText) {\n return null;\n }\n const iconMap = {\n warning: /*#__PURE__*/React.createElement(IconAlertTriangle, null),\n error: /*#__PURE__*/React.createElement(IconAlertCircle, null)\n };\n const text = error ? this.generatorText(error) : this.generatorText(helpText);\n const iconCls = `${prefix}-field-validate-status-icon`;\n let icon = null;\n if (isInInputGroup) {\n icon = /*#__PURE__*/React.createElement(IconAlertCircle, {\n className: iconCls\n });\n } else {\n if (iconMap[validateStatus]) {\n icon = /*#__PURE__*/React.cloneElement(iconMap[validateStatus], {\n className: iconCls\n });\n }\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n className: cls,\n style: style\n }, showValidateIcon && text ? icon : null, text);\n }\n}\nErrorMessage.propTypes = {\n error: PropTypes.oneOfType([PropTypes.bool, PropTypes.string, PropTypes.array, PropTypes.node]),\n className: PropTypes.string,\n style: PropTypes.object,\n validateStatus: PropTypes.string,\n showValidateIcon: PropTypes.bool,\n helpText: PropTypes.node,\n isInInputGroup: PropTypes.bool,\n // internal props\n errorMessageId: PropTypes.string,\n helpTextId: PropTypes.string\n};","import _isObject from \"lodash/isObject\";\nimport _isNumber from \"lodash/isNumber\";\nimport _isString from \"lodash/isString\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { useContext } from 'react';\nimport classNames from 'classnames';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/form/constants';\nimport Label from './label';\nimport { Col } from '../grid';\nimport { FormUpdaterContext } from './context';\nimport ErrorMessage from './errorMessage';\nconst prefix = cssClasses.PREFIX;\nconst FormSlot = props => {\n let labelCol, wrapperCol, labelWidth, labelAlign, content;\n let labelPosition = 'top';\n try {\n const updater = useContext(FormUpdaterContext);\n const formProps = updater.getFormProps(['labelPosition', 'labelWidth', 'labelAlign', 'labelCol', 'wrapperCol']);\n labelCol = formProps.labelCol;\n wrapperCol = formProps.wrapperCol;\n labelWidth = formProps.labelWidth;\n labelAlign = formProps.labelAlign;\n labelPosition = formProps.labelPosition ? formProps.labelPosition : labelPosition;\n } catch (error) {}\n props.labelPosition ? labelPosition = props.labelPosition : null;\n let {\n children,\n label,\n className,\n style,\n error,\n noLabel\n } = props,\n rest = __rest(props, [\"children\", \"label\", \"className\", \"style\", \"error\", \"noLabel\"]);\n const appendCol = labelCol && wrapperCol;\n const slotCls = classNames({\n [`${prefix}-field`]: true,\n [`${prefix}-slot`]: true\n }, className);\n const labelColCls = classNames({\n [`${prefix}-col-${labelAlign}`]: true\n });\n switch (true) {\n case _isObject(label) && ! /*#__PURE__*/React.isValidElement(label):\n // do nothing\n break;\n case _isString(label) || _isNumber(label):\n // @ts-ignore skip type check, the actual type is already determined\n label = {\n text: label\n };\n break;\n case /*#__PURE__*/React.isValidElement(label):\n // @ts-ignore skip type check, the actual type is already determined\n label = {\n text: label\n };\n break;\n default:\n break;\n }\n let slotError = null;\n if (typeof error !== undefined) {\n let emProps = {};\n switch (true) {\n case _isObject(error) && ! /*#__PURE__*/React.isValidElement(error):\n // do nothing\n emProps = error;\n break;\n case _isString(error) || _isNumber(error):\n emProps = {\n error\n };\n break;\n case /*#__PURE__*/React.isValidElement(error):\n emProps = {\n error\n };\n break;\n default:\n break;\n }\n slotError = /*#__PURE__*/React.createElement(ErrorMessage, Object.assign({}, emProps));\n }\n let mergeLabelProps = Object.assign({\n align: labelAlign,\n width: labelWidth\n }, label);\n let mainCls = classNames({\n [`${prefix}-field-main`]: true,\n [`${prefix}-slot-main`]: true\n });\n switch (true) {\n case !appendCol && !noLabel:\n content = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Label, Object.assign({}, mergeLabelProps)), /*#__PURE__*/React.createElement(\"div\", {\n className: mainCls\n }, children, slotError));\n break;\n case !appendCol && noLabel:\n content = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n className: mainCls\n }, children, slotError));\n break;\n case appendCol && labelPosition === 'top':\n // When labelPosition is top, you need to add an overflow hidden div to the label, otherwise it will be arranged horizontally\n content = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n style: {\n overflow: 'hidden'\n }\n }, /*#__PURE__*/React.createElement(Col, Object.assign({}, labelCol, {\n className: labelColCls\n }), /*#__PURE__*/React.createElement(Label, Object.assign({}, mergeLabelProps)))), /*#__PURE__*/React.createElement(Col, null, children, slotError));\n break;\n case appendCol && labelPosition !== 'top':\n content = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Col, Object.assign({}, labelCol, {\n className: labelColCls\n }), /*#__PURE__*/React.createElement(Label, Object.assign({}, mergeLabelProps))), /*#__PURE__*/React.createElement(Col, null, children, slotError));\n break;\n default:\n break;\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n className: slotCls,\n \"x-label-pos\": labelPosition,\n style: style\n }, content);\n};\nexport default FormSlot;","import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/form/constants';\nconst prefix = cssClasses.PREFIX;\nexport default class Section extends PureComponent {\n render() {\n const {\n text,\n className,\n style,\n children\n } = this.props;\n const cls = classNames({\n [prefix + '-section']: true\n }, className);\n const textCls = prefix + '-section-text';\n return /*#__PURE__*/React.createElement(\"section\", {\n className: cls,\n style: style\n }, /*#__PURE__*/React.createElement(\"h5\", {\n className: textCls\n }, text), children);\n }\n}\nSection.propTypes = {\n text: PropTypes.node,\n className: PropTypes.string,\n style: PropTypes.object,\n children: PropTypes.node\n};","import { useContext } from 'react';\nimport { FormStateContext } from '../context';\nfunction useFormState() {\n const formState = useContext(FormStateContext);\n return formState;\n}\nexport default useFormState;","import _isFunction from \"lodash/isFunction\";\nimport _get from \"lodash/get\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/input/constants';\nimport BaseComponent from '../_base/baseComponent';\nimport Label from '../form/label';\nimport { noop } from '@douyinfe/semi-foundation/lib/es/utils/function';\nconst prefixCls = cssClasses.PREFIX;\nconst sizeSet = strings.SIZE;\nexport default class inputGroup extends BaseComponent {\n renderGroupWithLabel(inner) {\n const _a = this.props,\n {\n size,\n className,\n label,\n labelPosition\n } = _a,\n rest = __rest(_a, [\"size\", \"className\", \"label\", \"labelPosition\"]);\n const groupWrapperCls = cls({\n [`${prefixCls}-group-wrapper`]: true,\n [`${prefixCls}-group-wrapper-with-top-label`]: labelPosition === 'top',\n [`${prefixCls}-group-wrapper-with-left-label`]: labelPosition === 'left'\n });\n const groupCls = cls(`${prefixCls}-group`, className, {\n [`${prefixCls}-${size}`]: size !== 'default'\n });\n // const labelCls = cls(label.className, '');\n const defaultName = 'input-group';\n return /*#__PURE__*/React.createElement(\"div\", {\n className: groupWrapperCls\n }, label && label.text ? /*#__PURE__*/React.createElement(Label, Object.assign({\n name: defaultName\n }, label)) : null, /*#__PURE__*/React.createElement(\"span\", {\n role: \"group\",\n \"aria-disabled\": this.props.disabled,\n id: label && label.name || defaultName,\n className: groupCls,\n style: this.props.style,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur\n }, inner));\n }\n render() {\n const _a = this.props,\n {\n size,\n style,\n className,\n children,\n label,\n onBlur: groupOnBlur,\n onFocus: groupOnFocus,\n disabled: groupDisabled\n } = _a,\n rest = __rest(_a, [\"size\", \"style\", \"className\", \"children\", \"label\", \"onBlur\", \"onFocus\", \"disabled\"]);\n const groupCls = cls(`${prefixCls}-group`, {\n [`${prefixCls}-${size}`]: size !== 'default'\n }, className);\n let inner;\n if (children) {\n inner = (Array.isArray(children) ? children : [children]).map((item, index) => {\n if (item) {\n const {\n onBlur: itemOnBlur,\n onFocus: itemOnFocus,\n disabled: itemDisabled\n } = item.props;\n const onBlur = _isFunction(itemOnBlur) && _get(itemOnBlur, 'name') !== 'noop' ? itemOnBlur : groupOnBlur;\n const onFocus = _isFunction(itemOnFocus) && _get(itemOnFocus, 'name') !== 'noop' ? itemOnFocus : groupOnFocus;\n const disabled = typeof itemDisabled === 'boolean' ? itemDisabled : groupDisabled;\n return /*#__PURE__*/React.cloneElement(item, Object.assign(Object.assign({\n key: index\n }, rest), {\n size,\n onBlur,\n onFocus,\n disabled\n }));\n }\n return null;\n });\n }\n if (label && label.text) {\n return this.renderGroupWithLabel(inner);\n }\n return /*#__PURE__*/React.createElement(\"span\", {\n role: \"group\",\n \"aria-label\": \"Input group\",\n \"aria-disabled\": this.props.disabled,\n className: groupCls,\n style: style,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur\n }, inner);\n }\n}\ninputGroup.propTypes = {\n className: PropTypes.string,\n children: PropTypes.node,\n size: PropTypes.oneOf(sizeSet),\n style: PropTypes.object,\n onBlur: PropTypes.func,\n onFocus: PropTypes.func,\n label: PropTypes.object,\n labelPosition: PropTypes.string\n};\ninputGroup.defaultProps = {\n size: 'default',\n className: '',\n onBlur: noop,\n onFocus: noop\n};","import _isString from \"lodash/isString\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { isValid } from '@douyinfe/semi-foundation/lib/es/form/utils';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/form/constants';\nimport * as ObjectUtil from '@douyinfe/semi-foundation/lib/es/utils/object';\nimport ErrorMessage from './errorMessage';\nimport Label from './label';\nimport { FormUpdaterContext } from './context';\nimport { useFormState } from './hooks/index';\nimport InputGroup from '../input/inputGroup';\nimport { Col } from '../grid/index';\nconst prefix = cssClasses.PREFIX;\n// Group component to remove Labels and ErrorMessages from its child fields\n// Unified insertion of Labels and ErrorMessages from the group level\n// Get Errors of all field in this group\nconst GroupError = props => {\n const {\n fieldSet\n } = props;\n const formState = useFormState();\n const error = fieldSet.map(field => ObjectUtil.get(formState.errors, field));\n if (isValid(error)) {\n return null;\n }\n return /*#__PURE__*/React.createElement(ErrorMessage, {\n error: error,\n showValidateIcon: props.showValidateIcon,\n isInInputGroup: props.isInInputGroup\n });\n};\nclass FormInputGroup extends Component {\n renderLabel(label, formProps) {\n if (label) {\n if (_isString(label)) {\n return /*#__PURE__*/React.createElement(Label, {\n width: formProps.labelWidth,\n text: label\n });\n } else {\n return /*#__PURE__*/React.createElement(Label, Object.assign({\n width: formProps.labelWidth\n }, label));\n }\n }\n return null;\n }\n render() {\n const _a = this.props,\n {\n children,\n label,\n extraText,\n extraTextPosition\n } = _a,\n rest = __rest(_a, [\"children\", \"label\", \"extraText\", \"extraTextPosition\"]);\n const updater = this.context;\n const formProps = updater.getFormProps(['labelPosition', 'labelWidth', 'labelAlign', 'showValidateIcon', 'wrapperCol', 'labelCol', 'disabled']);\n const labelPosition = this.props.labelPosition || formProps.labelPosition;\n const groupFieldSet = [];\n const inner = React.Children.map(children, child => {\n if (child && child.props && child.props.field) {\n groupFieldSet.push(child.props.field);\n return /*#__PURE__*/React.cloneElement(child, {\n isInInputGroup: true\n // noErrorMessage: true,\n // noLabel: true\n });\n }\n return null;\n });\n const groupCls = classNames({\n [`${prefix}-field-group`]: true\n });\n const labelCol = formProps.labelCol;\n const wrapperCol = formProps.wrapperCol;\n const labelAlign = formProps.labelAlign;\n const appendCol = labelCol && wrapperCol;\n const labelColCls = labelCol ? `${prefix}-col-${labelAlign}` : '';\n const labelContent = this.renderLabel(label, formProps);\n const inputGroupContent = /*#__PURE__*/React.createElement(InputGroup, Object.assign({\n disabled: formProps.disabled\n }, rest), inner);\n const groupErrorContent = /*#__PURE__*/React.createElement(GroupError, {\n fieldSet: groupFieldSet,\n showValidateIcon: formProps.showValidateIcon,\n isInInputGroup: true\n });\n const extraCls = classNames(`${prefix}-field-extra`, {\n [`${prefix}-field-extra-string`]: typeof extraText === 'string',\n [`${prefix}-field-extra-middle`]: extraTextPosition === 'middle',\n [`${prefix}-field-extra-bottom`]: extraTextPosition === 'bottom'\n });\n const extraContent = extraText ? /*#__PURE__*/React.createElement(\"div\", {\n className: extraCls,\n \"x-semi-prop\": \"extraText\"\n }, extraText) : null;\n let content;\n switch (true) {\n case !appendCol:\n content = /*#__PURE__*/React.createElement(React.Fragment, null, labelContent, /*#__PURE__*/React.createElement(\"div\", null, extraTextPosition === 'middle' ? extraContent : null, inputGroupContent, extraTextPosition === 'bottom' ? extraContent : null, groupErrorContent));\n break;\n case appendCol && labelPosition === 'top':\n // When labelPosition is top, you need to add an overflow hidden div to the label, otherwise it will be arranged horizontally\n content = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n style: {\n overflow: 'hidden'\n }\n }, /*#__PURE__*/React.createElement(Col, Object.assign({}, labelCol, {\n className: labelColCls\n }), labelContent)), /*#__PURE__*/React.createElement(Col, Object.assign({}, wrapperCol), extraTextPosition === 'middle' ? extraContent : null, inputGroupContent, extraTextPosition === 'bottom' ? extraContent : null, groupErrorContent));\n break;\n case appendCol && labelPosition !== 'top':\n content = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Col, Object.assign({}, labelCol, {\n className: labelColCls\n }), labelContent), /*#__PURE__*/React.createElement(Col, Object.assign({}, wrapperCol), extraTextPosition === 'middle' ? extraContent : null, inputGroupContent, extraTextPosition === 'bottom' ? extraContent : null, groupErrorContent));\n break;\n default:\n break;\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n \"x-label-pos\": labelPosition,\n className: groupCls\n }, content);\n }\n}\nFormInputGroup.contextType = FormUpdaterContext;\nexport default FormInputGroup;","import { useContext } from 'react';\nimport { ArrayFieldContext } from '../context';\nfunction useArrayFieldState() {\n const arrayFieldContext = useContext(ArrayFieldContext);\n return arrayFieldContext;\n}\nexport default useArrayFieldState;","import { useRef, useState } from 'react';\n// https://github.com/facebook/react/issues/14543\nexport default function useStateWithGetter(initial) {\n const ref = useRef();\n const [state, setState] = useState(initial);\n ref.current = state;\n const set = value => {\n ref.current = value;\n setState(value);\n };\n const get = () => ref.current;\n return [state, set, get];\n}","/* eslint-disable react-hooks/rules-of-hooks */\nimport React, { useState, useLayoutEffect, useEffect, useMemo, useRef, forwardRef } from 'react';\nimport classNames from 'classnames';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/form/constants';\nimport { isValid, generateValidatesFromRules, mergeOptions, mergeProps, getDisplayName, transformTrigger, transformDefaultBooleanAPI } from '@douyinfe/semi-foundation/lib/es/form/utils';\nimport * as ObjectUtil from '@douyinfe/semi-foundation/lib/es/utils/object';\nimport isPromise from '@douyinfe/semi-foundation/lib/es/utils/isPromise';\nimport warning from '@douyinfe/semi-foundation/lib/es/utils/warning';\nimport { useFormState, useStateWithGetter, useFormUpdater, useArrayFieldState } from '../hooks/index';\nimport ErrorMessage from '../errorMessage';\nimport { isElement } from '../../_base/reactUtils';\nimport Label from '../label';\nimport { Col } from '../../grid';\nconst prefix = cssClasses.PREFIX;\n// To avoid useLayoutEffect warning when ssr, refer: https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\n// Fix issue 1140\nconst useIsomorphicEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n/**\n * withFiled is used to inject components\n * 1. Takes over the value and onChange of the component and synchronizes them to Form Foundation\n * 2. Insert
\n );\n}\n","import {createContext} from 'react';\n\nimport type {RegisterListener} from './types';\n\nexport const DndMonitorContext = createContext(null);\n","import type {Announcements, ScreenReaderInstructions} from './types';\n\nexport const defaultScreenReaderInstructions: ScreenReaderInstructions = {\n draggable: `\n To pick up a draggable item, press the space bar.\n While dragging, use the arrow keys to move the item.\n Press space again to drop the item in its new position, or press escape to cancel.\n `,\n};\n\nexport const defaultAnnouncements: Announcements = {\n onDragStart({active}) {\n return `Picked up draggable item ${active.id}.`;\n },\n onDragOver({active, over}) {\n if (over) {\n return `Draggable item ${active.id} was moved over droppable area ${over.id}.`;\n }\n\n return `Draggable item ${active.id} is no longer over a droppable area.`;\n },\n onDragEnd({active, over}) {\n if (over) {\n return `Draggable item ${active.id} was dropped over droppable area ${over.id}`;\n }\n\n return `Draggable item ${active.id} was dropped.`;\n },\n onDragCancel({active}) {\n return `Dragging was cancelled. Draggable item ${active.id} was dropped.`;\n },\n};\n","import React, {useEffect, useMemo, useState} from 'react';\nimport {createPortal} from 'react-dom';\nimport {useUniqueId} from '@dnd-kit/utilities';\nimport {HiddenText, LiveRegion, useAnnouncement} from '@dnd-kit/accessibility';\n\nimport {DndMonitorListener, useDndMonitor} from '../DndMonitor';\n\nimport type {Announcements, ScreenReaderInstructions} from './types';\nimport {\n defaultAnnouncements,\n defaultScreenReaderInstructions,\n} from './defaults';\n\ninterface Props {\n announcements?: Announcements;\n container?: Element;\n screenReaderInstructions?: ScreenReaderInstructions;\n hiddenTextDescribedById: string;\n}\n\nexport function Accessibility({\n announcements = defaultAnnouncements,\n container,\n hiddenTextDescribedById,\n screenReaderInstructions = defaultScreenReaderInstructions,\n}: Props) {\n const {announce, announcement} = useAnnouncement();\n const liveRegionId = useUniqueId(`DndLiveRegion`);\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n useDndMonitor(\n useMemo(\n () => ({\n onDragStart({active}) {\n announce(announcements.onDragStart({active}));\n },\n onDragMove({active, over}) {\n if (announcements.onDragMove) {\n announce(announcements.onDragMove({active, over}));\n }\n },\n onDragOver({active, over}) {\n announce(announcements.onDragOver({active, over}));\n },\n onDragEnd({active, over}) {\n announce(announcements.onDragEnd({active, over}));\n },\n onDragCancel({active, over}) {\n announce(announcements.onDragCancel({active, over}));\n },\n }),\n [announce, announcements]\n )\n );\n\n if (!mounted) {\n return null;\n }\n\n const markup = (\n <>\n \n \n \n );\n\n return container ? createPortal(markup, container) : markup;\n}\n","import {useCallback, useState} from 'react';\n\nexport function useAnnouncement() {\n const [announcement, setAnnouncement] = useState('');\n const announce = useCallback((value: string | undefined) => {\n if (value != null) {\n setAnnouncement(value);\n }\n }, []);\n\n return {announce, announcement} as const;\n}\n","import {useContext, useEffect} from 'react';\n\nimport {DndMonitorContext} from './context';\nimport type {DndMonitorListener} from './types';\n\nexport function useDndMonitor(listener: DndMonitorListener) {\n const registerListener = useContext(DndMonitorContext);\n\n useEffect(() => {\n if (!registerListener) {\n throw new Error(\n 'useDndMonitor must be used within a children of '\n );\n }\n\n const unsubscribe = registerListener(listener);\n\n return unsubscribe;\n }, [listener, registerListener]);\n}\n","import type {Coordinates, UniqueIdentifier} from '../types';\nimport type {DroppableContainer} from './types';\n\nexport enum Action {\n DragStart = 'dragStart',\n DragMove = 'dragMove',\n DragEnd = 'dragEnd',\n DragCancel = 'dragCancel',\n DragOver = 'dragOver',\n RegisterDroppable = 'registerDroppable',\n SetDroppableDisabled = 'setDroppableDisabled',\n UnregisterDroppable = 'unregisterDroppable',\n}\n\nexport type Actions =\n | {\n type: Action.DragStart;\n active: UniqueIdentifier;\n initialCoordinates: Coordinates;\n }\n | {type: Action.DragMove; coordinates: Coordinates}\n | {type: Action.DragEnd}\n | {type: Action.DragCancel}\n | {\n type: Action.RegisterDroppable;\n element: DroppableContainer;\n }\n | {\n type: Action.SetDroppableDisabled;\n id: UniqueIdentifier;\n key: UniqueIdentifier;\n disabled: boolean;\n }\n | {\n type: Action.UnregisterDroppable;\n id: UniqueIdentifier;\n key: UniqueIdentifier;\n };\n","export function noop(..._args: any) {}\n","import {useMemo} from 'react';\n\nimport type {Sensor, SensorDescriptor, SensorOptions} from './types';\n\nexport function useSensor(\n sensor: Sensor,\n options?: T\n): SensorDescriptor {\n return useMemo(\n () => ({\n sensor,\n options: options ?? ({} as T),\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [sensor, options]\n );\n}\n","import type {Coordinates} from '../../types';\n\nexport const defaultCoordinates: Coordinates = Object.freeze({\n x: 0,\n y: 0,\n});\n","import type {Coordinates} from '../../types';\n\n/**\n * Returns the distance between two points\n */\nexport function distanceBetween(p1: Coordinates, p2: Coordinates) {\n return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));\n}\n","import {getEventCoordinates} from '@dnd-kit/utilities';\nimport type {ClientRect} from '../../types';\n\nexport function getRelativeTransformOrigin(\n event: MouseEvent | TouchEvent | KeyboardEvent,\n rect: ClientRect\n) {\n const eventCoordinates = getEventCoordinates(event);\n\n if (!eventCoordinates) {\n return '0 0';\n }\n\n const transformOrigin = {\n x: ((eventCoordinates.x - rect.left) / rect.width) * 100,\n y: ((eventCoordinates.y - rect.top) / rect.height) * 100,\n };\n\n return `${transformOrigin.x}% ${transformOrigin.y}%`;\n}\n","/* eslint-disable no-redeclare */\nimport type {ClientRect} from '../../types';\n\nimport type {Collision, CollisionDescriptor} from './types';\n\n/**\n * Sort collisions from smallest to greatest value\n */\nexport function sortCollisionsAsc(\n {data: {value: a}}: CollisionDescriptor,\n {data: {value: b}}: CollisionDescriptor\n) {\n return a - b;\n}\n\n/**\n * Sort collisions from greatest to smallest value\n */\nexport function sortCollisionsDesc(\n {data: {value: a}}: CollisionDescriptor,\n {data: {value: b}}: CollisionDescriptor\n) {\n return b - a;\n}\n\n/**\n * Returns the coordinates of the corners of a given rectangle:\n * [TopLeft {x, y}, TopRight {x, y}, BottomLeft {x, y}, BottomRight {x, y}]\n */\nexport function cornersOfRectangle({left, top, height, width}: ClientRect) {\n return [\n {\n x: left,\n y: top,\n },\n {\n x: left + width,\n y: top,\n },\n {\n x: left,\n y: top + height,\n },\n {\n x: left + width,\n y: top + height,\n },\n ];\n}\n\n/**\n * Returns the first collision, or null if there isn't one.\n * If a property is specified, returns the specified property of the first collision.\n */\nexport function getFirstCollision(\n collisions: Collision[] | null | undefined\n): Collision | null;\nexport function getFirstCollision(\n collisions: Collision[] | null | undefined,\n property: T\n): Collision[T] | null;\nexport function getFirstCollision(\n collisions: Collision[] | null | undefined,\n property?: keyof Collision\n) {\n if (!collisions || collisions.length === 0) {\n return null;\n }\n\n const [firstCollision] = collisions;\n\n return property ? firstCollision[property] : firstCollision;\n}\n","import {distanceBetween} from '../coordinates';\nimport type {Coordinates, ClientRect} from '../../types';\n\nimport type {CollisionDescriptor, CollisionDetection} from './types';\nimport {sortCollisionsAsc} from './helpers';\n\n/**\n * Returns the coordinates of the center of a given ClientRect\n */\nfunction centerOfRectangle(\n rect: ClientRect,\n left = rect.left,\n top = rect.top\n): Coordinates {\n return {\n x: left + rect.width * 0.5,\n y: top + rect.height * 0.5,\n };\n}\n\n/**\n * Returns the closest rectangles from an array of rectangles to the center of a given\n * rectangle.\n */\nexport const closestCenter: CollisionDetection = ({\n collisionRect,\n droppableRects,\n droppableContainers,\n}) => {\n const centerRect = centerOfRectangle(\n collisionRect,\n collisionRect.left,\n collisionRect.top\n );\n const collisions: CollisionDescriptor[] = [];\n\n for (const droppableContainer of droppableContainers) {\n const {id} = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const distBetween = distanceBetween(centerOfRectangle(rect), centerRect);\n\n collisions.push({id, data: {droppableContainer, value: distBetween}});\n }\n }\n\n return collisions.sort(sortCollisionsAsc);\n};\n","import type {ClientRect} from '../../types';\n\nimport type {CollisionDescriptor, CollisionDetection} from './types';\nimport {sortCollisionsDesc} from './helpers';\n\n/**\n * Returns the intersecting rectangle area between two rectangles\n */\nexport function getIntersectionRatio(\n entry: ClientRect,\n target: ClientRect\n): number {\n const top = Math.max(target.top, entry.top);\n const left = Math.max(target.left, entry.left);\n const right = Math.min(target.left + target.width, entry.left + entry.width);\n const bottom = Math.min(target.top + target.height, entry.top + entry.height);\n const width = right - left;\n const height = bottom - top;\n\n if (left < right && top < bottom) {\n const targetArea = target.width * target.height;\n const entryArea = entry.width * entry.height;\n const intersectionArea = width * height;\n const intersectionRatio =\n intersectionArea / (targetArea + entryArea - intersectionArea);\n\n return Number(intersectionRatio.toFixed(4));\n }\n\n // Rectangles do not overlap, or overlap has an area of zero (edge/corner overlap)\n return 0;\n}\n\n/**\n * Returns the rectangles that has the greatest intersection area with a given\n * rectangle in an array of rectangles.\n */\nexport const rectIntersection: CollisionDetection = ({\n collisionRect,\n droppableRects,\n droppableContainers,\n}) => {\n const collisions: CollisionDescriptor[] = [];\n\n for (const droppableContainer of droppableContainers) {\n const {id} = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const intersectionRatio = getIntersectionRatio(rect, collisionRect);\n\n if (intersectionRatio > 0) {\n collisions.push({\n id,\n data: {droppableContainer, value: intersectionRatio},\n });\n }\n }\n }\n\n return collisions.sort(sortCollisionsDesc);\n};\n","import type {Coordinates, ClientRect} from '../../types';\nimport {defaultCoordinates} from '../coordinates';\n\nexport function getRectDelta(\n rect1: ClientRect | null,\n rect2: ClientRect | null\n): Coordinates {\n return rect1 && rect2\n ? {\n x: rect1.left - rect2.left,\n y: rect1.top - rect2.top,\n }\n : defaultCoordinates;\n}\n","import type {Coordinates, ClientRect} from '../../types';\n\nexport function createRectAdjustmentFn(modifier: number) {\n return function adjustClientRect(\n rect: ClientRect,\n ...adjustments: Coordinates[]\n ): ClientRect {\n return adjustments.reduce(\n (acc, adjustment) => ({\n ...acc,\n top: acc.top + modifier * adjustment.y,\n bottom: acc.bottom + modifier * adjustment.y,\n left: acc.left + modifier * adjustment.x,\n right: acc.right + modifier * adjustment.x,\n }),\n {...rect}\n );\n };\n}\n\nexport const getAdjustedRect = createRectAdjustmentFn(1);\n","import type {Transform} from '@dnd-kit/utilities';\n\nexport function parseTransform(transform: string): Transform | null {\n if (transform.startsWith('matrix3d(')) {\n const transformArray = transform.slice(9, -1).split(/, /);\n\n return {\n x: +transformArray[12],\n y: +transformArray[13],\n scaleX: +transformArray[0],\n scaleY: +transformArray[5],\n };\n } else if (transform.startsWith('matrix(')) {\n const transformArray = transform.slice(7, -1).split(/, /);\n\n return {\n x: +transformArray[4],\n y: +transformArray[5],\n scaleX: +transformArray[0],\n scaleY: +transformArray[3],\n };\n }\n\n return null;\n}\n","import {getWindow} from '@dnd-kit/utilities';\n\nimport type {ClientRect} from '../../types';\nimport {inverseTransform} from '../transform';\n\ninterface Options {\n ignoreTransform?: boolean;\n}\n\nconst defaultOptions: Options = {ignoreTransform: false};\n\n/**\n * Returns the bounding client rect of an element relative to the viewport.\n */\nexport function getClientRect(\n element: Element,\n options: Options = defaultOptions\n) {\n let rect: ClientRect = element.getBoundingClientRect();\n\n if (options.ignoreTransform) {\n const {transform, transformOrigin} =\n getWindow(element).getComputedStyle(element);\n\n if (transform) {\n rect = inverseTransform(rect, transform, transformOrigin);\n }\n }\n\n const {top, left, width, height, bottom, right} = rect;\n\n return {\n top,\n left,\n width,\n height,\n bottom,\n right,\n };\n}\n\n/**\n * Returns the bounding client rect of an element relative to the viewport.\n *\n * @remarks\n * The ClientRect returned by this method does not take into account transforms\n * applied to the element it measures.\n *\n */\nexport function getTransformAgnosticClientRect(element: Element): ClientRect {\n return getClientRect(element, {ignoreTransform: true});\n}\n","import type {ClientRect} from '../../types';\n\nimport {parseTransform} from './parseTransform';\n\nexport function inverseTransform(\n rect: ClientRect,\n transform: string,\n transformOrigin: string\n): ClientRect {\n const parsedTransform = parseTransform(transform);\n\n if (!parsedTransform) {\n return rect;\n }\n\n const {scaleX, scaleY, x: translateX, y: translateY} = parsedTransform;\n\n const x = rect.left - translateX - (1 - scaleX) * parseFloat(transformOrigin);\n const y =\n rect.top -\n translateY -\n (1 - scaleY) *\n parseFloat(transformOrigin.slice(transformOrigin.indexOf(' ') + 1));\n const w = scaleX ? rect.width / scaleX : rect.width;\n const h = scaleY ? rect.height / scaleY : rect.height;\n\n return {\n width: w,\n height: h,\n top: y,\n right: x + w,\n bottom: y + h,\n left: x,\n };\n}\n","import {\n getWindow,\n isDocument,\n isHTMLElement,\n isSVGElement,\n} from '@dnd-kit/utilities';\n\nimport {isFixed} from './isFixed';\nimport {isScrollable} from './isScrollable';\n\nexport function getScrollableAncestors(\n element: Node | null,\n limit?: number\n): Element[] {\n const scrollParents: Element[] = [];\n\n function findScrollableAncestors(node: Node | null): Element[] {\n if (limit != null && scrollParents.length >= limit) {\n return scrollParents;\n }\n\n if (!node) {\n return scrollParents;\n }\n\n if (\n isDocument(node) &&\n node.scrollingElement != null &&\n !scrollParents.includes(node.scrollingElement)\n ) {\n scrollParents.push(node.scrollingElement);\n\n return scrollParents;\n }\n\n if (!isHTMLElement(node) || isSVGElement(node)) {\n return scrollParents;\n }\n\n if (scrollParents.includes(node)) {\n return scrollParents;\n }\n\n const computedStyle = getWindow(element).getComputedStyle(node);\n\n if (node !== element) {\n if (isScrollable(node, computedStyle)) {\n scrollParents.push(node);\n }\n }\n\n if (isFixed(node, computedStyle)) {\n return scrollParents;\n }\n\n return findScrollableAncestors(node.parentNode);\n }\n\n if (!element) {\n return scrollParents;\n }\n\n return findScrollableAncestors(element);\n}\n\nexport function getFirstScrollableAncestor(node: Node | null): Element | null {\n const [firstScrollableAncestor] = getScrollableAncestors(node, 1);\n\n return firstScrollableAncestor ?? null;\n}\n","import {getWindow} from '@dnd-kit/utilities';\n\nexport function isScrollable(\n element: HTMLElement,\n computedStyle: CSSStyleDeclaration = getWindow(element).getComputedStyle(\n element\n )\n): boolean {\n const overflowRegex = /(auto|scroll|overlay)/;\n const properties = ['overflow', 'overflowX', 'overflowY'];\n\n return properties.some((property) => {\n const value = computedStyle[property as keyof CSSStyleDeclaration];\n\n return typeof value === 'string' ? overflowRegex.test(value) : false;\n });\n}\n","import {getWindow} from '@dnd-kit/utilities';\n\nexport function isFixed(\n node: HTMLElement,\n computedStyle: CSSStyleDeclaration = getWindow(node).getComputedStyle(node)\n): boolean {\n return computedStyle.position === 'fixed';\n}\n","import {\n canUseDOM,\n isHTMLElement,\n isDocument,\n getOwnerDocument,\n isNode,\n isWindow,\n} from '@dnd-kit/utilities';\n\nexport function getScrollableElement(element: EventTarget | null) {\n if (!canUseDOM || !element) {\n return null;\n }\n\n if (isWindow(element)) {\n return element;\n }\n\n if (!isNode(element)) {\n return null;\n }\n\n if (\n isDocument(element) ||\n element === getOwnerDocument(element).scrollingElement\n ) {\n return window;\n }\n\n if (isHTMLElement(element)) {\n return element;\n }\n\n return null;\n}\n","import {isWindow} from '@dnd-kit/utilities';\n\nimport type {Coordinates} from '../../types';\n\nexport function getScrollXCoordinate(element: Element | typeof window): number {\n if (isWindow(element)) {\n return element.scrollX;\n }\n\n return element.scrollLeft;\n}\n\nexport function getScrollYCoordinate(element: Element | typeof window): number {\n if (isWindow(element)) {\n return element.scrollY;\n }\n\n return element.scrollTop;\n}\n\nexport function getScrollCoordinates(\n element: Element | typeof window\n): Coordinates {\n return {\n x: getScrollXCoordinate(element),\n y: getScrollYCoordinate(element),\n };\n}\n","export enum Direction {\n Forward = 1,\n Backward = -1,\n}\n","import {canUseDOM} from '@dnd-kit/utilities';\n\nexport function isDocumentScrollingElement(element: Element | null) {\n if (!canUseDOM || !element) {\n return false;\n }\n\n return element === document.scrollingElement;\n}\n","import {isDocumentScrollingElement} from './documentScrollingElement';\n\nexport function getScrollPosition(scrollingContainer: Element) {\n const minScroll = {\n x: 0,\n y: 0,\n };\n const dimensions = isDocumentScrollingElement(scrollingContainer)\n ? {\n height: window.innerHeight,\n width: window.innerWidth,\n }\n : {\n height: scrollingContainer.clientHeight,\n width: scrollingContainer.clientWidth,\n };\n const maxScroll = {\n x: scrollingContainer.scrollWidth - dimensions.width,\n y: scrollingContainer.scrollHeight - dimensions.height,\n };\n\n const isTop = scrollingContainer.scrollTop <= minScroll.y;\n const isLeft = scrollingContainer.scrollLeft <= minScroll.x;\n const isBottom = scrollingContainer.scrollTop >= maxScroll.y;\n const isRight = scrollingContainer.scrollLeft >= maxScroll.x;\n\n return {\n isTop,\n isLeft,\n isBottom,\n isRight,\n maxScroll,\n minScroll,\n };\n}\n","import {Direction, ClientRect} from '../../types';\nimport {getScrollPosition} from './getScrollPosition';\n\ninterface PositionalCoordinates\n extends Pick {}\n\nconst defaultThreshold = {\n x: 0.2,\n y: 0.2,\n};\n\nexport function getScrollDirectionAndSpeed(\n scrollContainer: Element,\n scrollContainerRect: ClientRect,\n {top, left, right, bottom}: PositionalCoordinates,\n acceleration = 10,\n thresholdPercentage = defaultThreshold\n) {\n const {isTop, isBottom, isLeft, isRight} = getScrollPosition(scrollContainer);\n\n const direction = {\n x: 0,\n y: 0,\n };\n const speed = {\n x: 0,\n y: 0,\n };\n const threshold = {\n height: scrollContainerRect.height * thresholdPercentage.y,\n width: scrollContainerRect.width * thresholdPercentage.x,\n };\n\n if (!isTop && top <= scrollContainerRect.top + threshold.height) {\n // Scroll Up\n direction.y = Direction.Backward;\n speed.y =\n acceleration *\n Math.abs(\n (scrollContainerRect.top + threshold.height - top) / threshold.height\n );\n } else if (\n !isBottom &&\n bottom >= scrollContainerRect.bottom - threshold.height\n ) {\n // Scroll Down\n direction.y = Direction.Forward;\n speed.y =\n acceleration *\n Math.abs(\n (scrollContainerRect.bottom - threshold.height - bottom) /\n threshold.height\n );\n }\n\n if (!isRight && right >= scrollContainerRect.right - threshold.width) {\n // Scroll Right\n direction.x = Direction.Forward;\n speed.x =\n acceleration *\n Math.abs(\n (scrollContainerRect.right - threshold.width - right) / threshold.width\n );\n } else if (!isLeft && left <= scrollContainerRect.left + threshold.width) {\n // Scroll Left\n direction.x = Direction.Backward;\n speed.x =\n acceleration *\n Math.abs(\n (scrollContainerRect.left + threshold.width - left) / threshold.width\n );\n }\n\n return {\n direction,\n speed,\n };\n}\n","export function getScrollElementRect(element: Element) {\n if (element === document.scrollingElement) {\n const {innerWidth, innerHeight} = window;\n\n return {\n top: 0,\n left: 0,\n right: innerWidth,\n bottom: innerHeight,\n width: innerWidth,\n height: innerHeight,\n };\n }\n\n const {top, left, right, bottom} = element.getBoundingClientRect();\n\n return {\n top,\n left,\n right,\n bottom,\n width: element.clientWidth,\n height: element.clientHeight,\n };\n}\n","import {add} from '@dnd-kit/utilities';\n\nimport type {Coordinates} from '../../types';\nimport {\n getScrollCoordinates,\n getScrollXCoordinate,\n getScrollYCoordinate,\n} from './getScrollCoordinates';\nimport {defaultCoordinates} from '../coordinates';\n\nexport function getScrollOffsets(scrollableAncestors: Element[]): Coordinates {\n return scrollableAncestors.reduce((acc, node) => {\n return add(acc, getScrollCoordinates(node));\n }, defaultCoordinates);\n}\n\nexport function getScrollXOffset(scrollableAncestors: Element[]): number {\n return scrollableAncestors.reduce((acc, node) => {\n return acc + getScrollXCoordinate(node);\n }, 0);\n}\n\nexport function getScrollYOffset(scrollableAncestors: Element[]): number {\n return scrollableAncestors.reduce((acc, node) => {\n return acc + getScrollYCoordinate(node);\n }, 0);\n}\n","import type {ClientRect} from '../../types';\nimport {getClientRect} from '../rect/getRect';\nimport {getFirstScrollableAncestor} from './getScrollableAncestors';\n\nexport function scrollIntoViewIfNeeded(\n element: HTMLElement | null | undefined,\n measure: (node: HTMLElement) => ClientRect = getClientRect\n) {\n if (!element) {\n return;\n }\n\n const {top, left, bottom, right} = measure(element);\n const firstScrollableAncestor = getFirstScrollableAncestor(element);\n\n if (!firstScrollableAncestor) {\n return;\n }\n\n if (\n bottom <= 0 ||\n right <= 0 ||\n top >= window.innerHeight ||\n left >= window.innerWidth\n ) {\n element.scrollIntoView({\n block: 'center',\n inline: 'center',\n });\n }\n}\n","import type {ClientRect} from '../../types/rect';\nimport {\n getScrollableAncestors,\n getScrollOffsets,\n getScrollXOffset,\n getScrollYOffset,\n} from '../scroll';\n\nconst properties = [\n ['x', ['left', 'right'], getScrollXOffset],\n ['y', ['top', 'bottom'], getScrollYOffset],\n] as const;\n\nexport class Rect {\n constructor(rect: ClientRect, element: Element) {\n const scrollableAncestors = getScrollableAncestors(element);\n const scrollOffsets = getScrollOffsets(scrollableAncestors);\n\n this.rect = {...rect};\n this.width = rect.width;\n this.height = rect.height;\n\n for (const [axis, keys, getScrollOffset] of properties) {\n for (const key of keys) {\n Object.defineProperty(this, key, {\n get: () => {\n const currentOffsets = getScrollOffset(scrollableAncestors);\n const scrollOffsetsDeltla = scrollOffsets[axis] - currentOffsets;\n\n return this.rect[key] + scrollOffsetsDeltla;\n },\n enumerable: true,\n });\n }\n }\n\n Object.defineProperty(this, 'rect', {enumerable: false});\n }\n\n private rect: ClientRect;\n\n public width: number;\n\n public height: number;\n\n // The below properties are set by the `Object.defineProperty` calls in the constructor\n // @ts-ignore\n public top: number;\n // @ts-ignore\n public bottom: number;\n // @ts-ignore\n public right: number;\n // @ts-ignore\n public left: number;\n}\n","export class Listeners {\n private listeners: [\n string,\n EventListenerOrEventListenerObject,\n AddEventListenerOptions | boolean | undefined\n ][] = [];\n\n constructor(private target: EventTarget | null) {}\n\n public add(\n eventName: string,\n handler: (event: T) => void,\n options?: AddEventListenerOptions | boolean\n ) {\n this.target?.addEventListener(eventName, handler as EventListener, options);\n this.listeners.push([eventName, handler as EventListener, options]);\n }\n\n public removeAll = () => {\n this.listeners.forEach((listener) =>\n this.target?.removeEventListener(...listener)\n );\n };\n}\n","import type {Coordinates, DistanceMeasurement} from '../../types';\n\nexport function hasExceededDistance(\n delta: Coordinates,\n measurement: DistanceMeasurement\n): boolean {\n const dx = Math.abs(delta.x);\n const dy = Math.abs(delta.y);\n\n if (typeof measurement === 'number') {\n return Math.sqrt(dx ** 2 + dy ** 2) > measurement;\n }\n\n if ('x' in measurement && 'y' in measurement) {\n return dx > measurement.x && dy > measurement.y;\n }\n\n if ('x' in measurement) {\n return dx > measurement.x;\n }\n\n if ('y' in measurement) {\n return dy > measurement.y;\n }\n\n return false;\n}\n","export enum EventName {\n Click = 'click',\n DragStart = 'dragstart',\n Keydown = 'keydown',\n ContextMenu = 'contextmenu',\n Resize = 'resize',\n SelectionChange = 'selectionchange',\n VisibilityChange = 'visibilitychange',\n}\n\nexport function preventDefault(event: Event) {\n event.preventDefault();\n}\n\nexport function stopPropagation(event: Event) {\n event.stopPropagation();\n}\n","import type {Coordinates, UniqueIdentifier} from '../../types';\nimport type {SensorContext} from '../types';\n\nexport enum KeyboardCode {\n Space = 'Space',\n Down = 'ArrowDown',\n Right = 'ArrowRight',\n Left = 'ArrowLeft',\n Up = 'ArrowUp',\n Esc = 'Escape',\n Enter = 'Enter',\n Tab = 'Tab',\n}\n\nexport type KeyboardCodes = {\n start: KeyboardEvent['code'][];\n cancel: KeyboardEvent['code'][];\n end: KeyboardEvent['code'][];\n};\n\nexport type KeyboardCoordinateGetter = (\n event: KeyboardEvent,\n args: {\n active: UniqueIdentifier;\n currentCoordinates: Coordinates;\n context: SensorContext;\n }\n) => Coordinates | void;\n","import {KeyboardCoordinateGetter, KeyboardCode, KeyboardCodes} from './types';\n\nexport const defaultKeyboardCodes: KeyboardCodes = {\n start: [KeyboardCode.Space, KeyboardCode.Enter],\n cancel: [KeyboardCode.Esc],\n end: [KeyboardCode.Space, KeyboardCode.Enter, KeyboardCode.Tab],\n};\n\nexport const defaultKeyboardCoordinateGetter: KeyboardCoordinateGetter = (\n event,\n {currentCoordinates}\n) => {\n switch (event.code) {\n case KeyboardCode.Right:\n return {\n ...currentCoordinates,\n x: currentCoordinates.x + 25,\n };\n case KeyboardCode.Left:\n return {\n ...currentCoordinates,\n x: currentCoordinates.x - 25,\n };\n case KeyboardCode.Down:\n return {\n ...currentCoordinates,\n y: currentCoordinates.y + 25,\n };\n case KeyboardCode.Up:\n return {\n ...currentCoordinates,\n y: currentCoordinates.y - 25,\n };\n }\n\n return undefined;\n};\n","import {\n add as getAdjustedCoordinates,\n subtract as getCoordinatesDelta,\n getOwnerDocument,\n getWindow,\n isKeyboardEvent,\n} from '@dnd-kit/utilities';\n\nimport type {Coordinates} from '../../types';\nimport {\n defaultCoordinates,\n getScrollPosition,\n getScrollElementRect,\n} from '../../utilities';\nimport {scrollIntoViewIfNeeded} from '../../utilities/scroll';\nimport {EventName} from '../events';\nimport {Listeners} from '../utilities';\nimport type {\n Activators,\n SensorInstance,\n SensorProps,\n SensorOptions,\n} from '../types';\n\nimport {KeyboardCoordinateGetter, KeyboardCode, KeyboardCodes} from './types';\nimport {\n defaultKeyboardCodes,\n defaultKeyboardCoordinateGetter,\n} from './defaults';\n\nexport interface KeyboardSensorOptions extends SensorOptions {\n keyboardCodes?: KeyboardCodes;\n coordinateGetter?: KeyboardCoordinateGetter;\n scrollBehavior?: ScrollBehavior;\n onActivation?({event}: {event: KeyboardEvent}): void;\n}\n\nexport type KeyboardSensorProps = SensorProps;\n\nexport class KeyboardSensor implements SensorInstance {\n public autoScrollEnabled = false;\n private referenceCoordinates: Coordinates | undefined;\n private listeners: Listeners;\n private windowListeners: Listeners;\n\n constructor(private props: KeyboardSensorProps) {\n const {\n event: {target},\n } = props;\n\n this.props = props;\n this.listeners = new Listeners(getOwnerDocument(target));\n this.windowListeners = new Listeners(getWindow(target));\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n\n this.attach();\n }\n\n private attach() {\n this.handleStart();\n\n this.windowListeners.add(EventName.Resize, this.handleCancel);\n this.windowListeners.add(EventName.VisibilityChange, this.handleCancel);\n\n setTimeout(() => this.listeners.add(EventName.Keydown, this.handleKeyDown));\n }\n\n private handleStart() {\n const {activeNode, onStart} = this.props;\n const node = activeNode.node.current;\n\n if (node) {\n scrollIntoViewIfNeeded(node);\n }\n\n onStart(defaultCoordinates);\n }\n\n private handleKeyDown(event: Event) {\n if (isKeyboardEvent(event)) {\n const {active, context, options} = this.props;\n const {\n keyboardCodes = defaultKeyboardCodes,\n coordinateGetter = defaultKeyboardCoordinateGetter,\n scrollBehavior = 'smooth',\n } = options;\n const {code} = event;\n\n if (keyboardCodes.end.includes(code)) {\n this.handleEnd(event);\n return;\n }\n\n if (keyboardCodes.cancel.includes(code)) {\n this.handleCancel(event);\n return;\n }\n\n const {collisionRect} = context.current;\n const currentCoordinates = collisionRect\n ? {x: collisionRect.left, y: collisionRect.top}\n : defaultCoordinates;\n\n if (!this.referenceCoordinates) {\n this.referenceCoordinates = currentCoordinates;\n }\n\n const newCoordinates = coordinateGetter(event, {\n active,\n context: context.current,\n currentCoordinates,\n });\n\n if (newCoordinates) {\n const coordinatesDelta = getCoordinatesDelta(\n newCoordinates,\n currentCoordinates\n );\n const scrollDelta = {\n x: 0,\n y: 0,\n };\n const {scrollableAncestors} = context.current;\n\n for (const scrollContainer of scrollableAncestors) {\n const direction = event.code;\n const {isTop, isRight, isLeft, isBottom, maxScroll, minScroll} =\n getScrollPosition(scrollContainer);\n const scrollElementRect = getScrollElementRect(scrollContainer);\n\n const clampedCoordinates = {\n x: Math.min(\n direction === KeyboardCode.Right\n ? scrollElementRect.right - scrollElementRect.width / 2\n : scrollElementRect.right,\n Math.max(\n direction === KeyboardCode.Right\n ? scrollElementRect.left\n : scrollElementRect.left + scrollElementRect.width / 2,\n newCoordinates.x\n )\n ),\n y: Math.min(\n direction === KeyboardCode.Down\n ? scrollElementRect.bottom - scrollElementRect.height / 2\n : scrollElementRect.bottom,\n Math.max(\n direction === KeyboardCode.Down\n ? scrollElementRect.top\n : scrollElementRect.top + scrollElementRect.height / 2,\n newCoordinates.y\n )\n ),\n };\n\n const canScrollX =\n (direction === KeyboardCode.Right && !isRight) ||\n (direction === KeyboardCode.Left && !isLeft);\n const canScrollY =\n (direction === KeyboardCode.Down && !isBottom) ||\n (direction === KeyboardCode.Up && !isTop);\n\n if (canScrollX && clampedCoordinates.x !== newCoordinates.x) {\n const newScrollCoordinates =\n scrollContainer.scrollLeft + coordinatesDelta.x;\n const canScrollToNewCoordinates =\n (direction === KeyboardCode.Right &&\n newScrollCoordinates <= maxScroll.x) ||\n (direction === KeyboardCode.Left &&\n newScrollCoordinates >= minScroll.x);\n\n if (canScrollToNewCoordinates && !coordinatesDelta.y) {\n // We don't need to update coordinates, the scroll adjustment alone will trigger\n // logic to auto-detect the new container we are over\n scrollContainer.scrollTo({\n left: newScrollCoordinates,\n behavior: scrollBehavior,\n });\n return;\n }\n\n if (canScrollToNewCoordinates) {\n scrollDelta.x = scrollContainer.scrollLeft - newScrollCoordinates;\n } else {\n scrollDelta.x =\n direction === KeyboardCode.Right\n ? scrollContainer.scrollLeft - maxScroll.x\n : scrollContainer.scrollLeft - minScroll.x;\n }\n\n if (scrollDelta.x) {\n scrollContainer.scrollBy({\n left: -scrollDelta.x,\n behavior: scrollBehavior,\n });\n }\n break;\n } else if (canScrollY && clampedCoordinates.y !== newCoordinates.y) {\n const newScrollCoordinates =\n scrollContainer.scrollTop + coordinatesDelta.y;\n const canScrollToNewCoordinates =\n (direction === KeyboardCode.Down &&\n newScrollCoordinates <= maxScroll.y) ||\n (direction === KeyboardCode.Up &&\n newScrollCoordinates >= minScroll.y);\n\n if (canScrollToNewCoordinates && !coordinatesDelta.x) {\n // We don't need to update coordinates, the scroll adjustment alone will trigger\n // logic to auto-detect the new container we are over\n scrollContainer.scrollTo({\n top: newScrollCoordinates,\n behavior: scrollBehavior,\n });\n return;\n }\n\n if (canScrollToNewCoordinates) {\n scrollDelta.y = scrollContainer.scrollTop - newScrollCoordinates;\n } else {\n scrollDelta.y =\n direction === KeyboardCode.Down\n ? scrollContainer.scrollTop - maxScroll.y\n : scrollContainer.scrollTop - minScroll.y;\n }\n\n if (scrollDelta.y) {\n scrollContainer.scrollBy({\n top: -scrollDelta.y,\n behavior: scrollBehavior,\n });\n }\n\n break;\n }\n }\n\n this.handleMove(\n event,\n getAdjustedCoordinates(\n getCoordinatesDelta(newCoordinates, this.referenceCoordinates),\n scrollDelta\n )\n );\n }\n }\n }\n\n private handleMove(event: Event, coordinates: Coordinates) {\n const {onMove} = this.props;\n\n event.preventDefault();\n onMove(coordinates);\n }\n\n private handleEnd(event: Event) {\n const {onEnd} = this.props;\n\n event.preventDefault();\n this.detach();\n onEnd();\n }\n\n private handleCancel(event: Event) {\n const {onCancel} = this.props;\n\n event.preventDefault();\n this.detach();\n onCancel();\n }\n\n private detach() {\n this.listeners.removeAll();\n this.windowListeners.removeAll();\n }\n\n static activators: Activators = [\n {\n eventName: 'onKeyDown' as const,\n handler: (\n event: React.KeyboardEvent,\n {keyboardCodes = defaultKeyboardCodes, onActivation},\n {active}\n ) => {\n const {code} = event.nativeEvent;\n\n if (keyboardCodes.start.includes(code)) {\n const activator = active.activatorNode.current;\n\n if (activator && event.target !== activator) {\n return false;\n }\n\n event.preventDefault();\n\n onActivation?.({event: event.nativeEvent});\n\n return true;\n }\n\n return false;\n },\n },\n ];\n}\n","import {\n subtract as getCoordinatesDelta,\n getEventCoordinates,\n getOwnerDocument,\n getWindow,\n} from '@dnd-kit/utilities';\n\nimport {defaultCoordinates} from '../../utilities';\nimport {\n getEventListenerTarget,\n hasExceededDistance,\n Listeners,\n} from '../utilities';\nimport {EventName, preventDefault, stopPropagation} from '../events';\nimport {KeyboardCode} from '../keyboard';\nimport type {SensorInstance, SensorProps, SensorOptions} from '../types';\nimport type {Coordinates, DistanceMeasurement} from '../../types';\n\ninterface DistanceConstraint {\n distance: DistanceMeasurement;\n tolerance?: DistanceMeasurement;\n}\n\ninterface DelayConstraint {\n delay: number;\n tolerance: DistanceMeasurement;\n}\n\ninterface EventDescriptor {\n name: keyof DocumentEventMap;\n passive?: boolean;\n}\n\nexport interface PointerEventHandlers {\n cancel?: EventDescriptor;\n move: EventDescriptor;\n end: EventDescriptor;\n}\n\nexport type PointerActivationConstraint =\n | DelayConstraint\n | DistanceConstraint\n | (DelayConstraint & DistanceConstraint);\n\nfunction isDistanceConstraint(\n constraint: PointerActivationConstraint\n): constraint is PointerActivationConstraint & DistanceConstraint {\n return Boolean(constraint && 'distance' in constraint);\n}\n\nfunction isDelayConstraint(\n constraint: PointerActivationConstraint\n): constraint is DelayConstraint {\n return Boolean(constraint && 'delay' in constraint);\n}\n\nexport interface AbstractPointerSensorOptions extends SensorOptions {\n activationConstraint?: PointerActivationConstraint;\n bypassActivationConstraint?(\n props: Pick\n ): boolean;\n onActivation?({event}: {event: Event}): void;\n}\n\nexport type AbstractPointerSensorProps =\n SensorProps;\n\nexport class AbstractPointerSensor implements SensorInstance {\n public autoScrollEnabled = true;\n private document: Document;\n private activated: boolean = false;\n private initialCoordinates: Coordinates;\n private timeoutId: NodeJS.Timeout | null = null;\n private listeners: Listeners;\n private documentListeners: Listeners;\n private windowListeners: Listeners;\n\n constructor(\n private props: AbstractPointerSensorProps,\n private events: PointerEventHandlers,\n listenerTarget = getEventListenerTarget(props.event.target)\n ) {\n const {event} = props;\n const {target} = event;\n\n this.props = props;\n this.events = events;\n this.document = getOwnerDocument(target);\n this.documentListeners = new Listeners(this.document);\n this.listeners = new Listeners(listenerTarget);\n this.windowListeners = new Listeners(getWindow(target));\n this.initialCoordinates = getEventCoordinates(event) ?? defaultCoordinates;\n this.handleStart = this.handleStart.bind(this);\n this.handleMove = this.handleMove.bind(this);\n this.handleEnd = this.handleEnd.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleKeydown = this.handleKeydown.bind(this);\n this.removeTextSelection = this.removeTextSelection.bind(this);\n\n this.attach();\n }\n\n private attach() {\n const {\n events,\n props: {\n options: {activationConstraint, bypassActivationConstraint},\n },\n } = this;\n\n this.listeners.add(events.move.name, this.handleMove, {passive: false});\n this.listeners.add(events.end.name, this.handleEnd);\n\n if (events.cancel) {\n this.listeners.add(events.cancel.name, this.handleCancel);\n }\n\n this.windowListeners.add(EventName.Resize, this.handleCancel);\n this.windowListeners.add(EventName.DragStart, preventDefault);\n this.windowListeners.add(EventName.VisibilityChange, this.handleCancel);\n this.windowListeners.add(EventName.ContextMenu, preventDefault);\n this.documentListeners.add(EventName.Keydown, this.handleKeydown);\n\n if (activationConstraint) {\n if (\n bypassActivationConstraint?.({\n event: this.props.event,\n activeNode: this.props.activeNode,\n options: this.props.options,\n })\n ) {\n return this.handleStart();\n }\n\n if (isDelayConstraint(activationConstraint)) {\n this.timeoutId = setTimeout(\n this.handleStart,\n activationConstraint.delay\n );\n this.handlePending(activationConstraint);\n return;\n }\n\n if (isDistanceConstraint(activationConstraint)) {\n this.handlePending(activationConstraint);\n return;\n }\n }\n\n this.handleStart();\n }\n\n private detach() {\n this.listeners.removeAll();\n this.windowListeners.removeAll();\n\n // Wait until the next event loop before removing document listeners\n // This is necessary because we listen for `click` and `selection` events on the document\n setTimeout(this.documentListeners.removeAll, 50);\n\n if (this.timeoutId !== null) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n }\n\n private handlePending(\n constraint: PointerActivationConstraint,\n offset?: Coordinates | undefined\n ): void {\n const {active, onPending} = this.props;\n onPending(active, constraint, this.initialCoordinates, offset);\n }\n\n private handleStart() {\n const {initialCoordinates} = this;\n const {onStart} = this.props;\n\n if (initialCoordinates) {\n this.activated = true;\n\n // Stop propagation of click events once activation constraints are met\n this.documentListeners.add(EventName.Click, stopPropagation, {\n capture: true,\n });\n\n // Remove any text selection from the document\n this.removeTextSelection();\n\n // Prevent further text selection while dragging\n this.documentListeners.add(\n EventName.SelectionChange,\n this.removeTextSelection\n );\n\n onStart(initialCoordinates);\n }\n }\n\n private handleMove(event: Event) {\n const {activated, initialCoordinates, props} = this;\n const {\n onMove,\n options: {activationConstraint},\n } = props;\n\n if (!initialCoordinates) {\n return;\n }\n\n const coordinates = getEventCoordinates(event) ?? defaultCoordinates;\n const delta = getCoordinatesDelta(initialCoordinates, coordinates);\n\n // Constraint validation\n if (!activated && activationConstraint) {\n if (isDistanceConstraint(activationConstraint)) {\n if (\n activationConstraint.tolerance != null &&\n hasExceededDistance(delta, activationConstraint.tolerance)\n ) {\n return this.handleCancel();\n }\n\n if (hasExceededDistance(delta, activationConstraint.distance)) {\n return this.handleStart();\n }\n }\n\n if (isDelayConstraint(activationConstraint)) {\n if (hasExceededDistance(delta, activationConstraint.tolerance)) {\n return this.handleCancel();\n }\n }\n\n this.handlePending(activationConstraint, delta);\n return;\n }\n\n if (event.cancelable) {\n event.preventDefault();\n }\n\n onMove(coordinates);\n }\n\n private handleEnd() {\n const {onAbort, onEnd} = this.props;\n\n this.detach();\n if (!this.activated) {\n onAbort(this.props.active);\n }\n onEnd();\n }\n\n private handleCancel() {\n const {onAbort, onCancel} = this.props;\n\n this.detach();\n if (!this.activated) {\n onAbort(this.props.active);\n }\n onCancel();\n }\n\n private handleKeydown(event: KeyboardEvent) {\n if (event.code === KeyboardCode.Esc) {\n this.handleCancel();\n }\n }\n\n private removeTextSelection() {\n this.document.getSelection()?.removeAllRanges();\n }\n}\n","import {getOwnerDocument, getWindow} from '@dnd-kit/utilities';\n\nexport function getEventListenerTarget(\n target: EventTarget | null\n): EventTarget | Document {\n // If the `event.target` element is removed from the document events will still be targeted\n // at it, and hence won't always bubble up to the window or document anymore.\n // If there is any risk of an element being removed while it is being dragged,\n // the best practice is to attach the event listeners directly to the target.\n // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget\n\n const {EventTarget} = getWindow(target);\n\n return target instanceof EventTarget ? target : getOwnerDocument(target);\n}\n","import type {PointerEvent} from 'react';\nimport {getOwnerDocument} from '@dnd-kit/utilities';\n\nimport type {SensorProps} from '../types';\nimport {\n AbstractPointerSensor,\n AbstractPointerSensorOptions,\n PointerEventHandlers,\n} from './AbstractPointerSensor';\n\nconst events: PointerEventHandlers = {\n cancel: {name: 'pointercancel'},\n move: {name: 'pointermove'},\n end: {name: 'pointerup'},\n};\n\nexport interface PointerSensorOptions extends AbstractPointerSensorOptions {}\n\nexport type PointerSensorProps = SensorProps;\n\nexport class PointerSensor extends AbstractPointerSensor {\n constructor(props: PointerSensorProps) {\n const {event} = props;\n // Pointer events stop firing if the target is unmounted while dragging\n // Therefore we attach listeners to the owner document instead\n const listenerTarget = getOwnerDocument(event.target);\n\n super(props, events, listenerTarget);\n }\n\n static activators = [\n {\n eventName: 'onPointerDown' as const,\n handler: (\n {nativeEvent: event}: PointerEvent,\n {onActivation}: PointerSensorOptions\n ) => {\n if (!event.isPrimary || event.button !== 0) {\n return false;\n }\n\n onActivation?.({event});\n\n return true;\n },\n },\n ];\n}\n","import type {MouseEvent} from 'react';\nimport {getOwnerDocument} from '@dnd-kit/utilities';\n\nimport type {SensorProps} from '../types';\nimport {\n AbstractPointerSensor,\n PointerEventHandlers,\n AbstractPointerSensorOptions,\n} from '../pointer';\n\nconst events: PointerEventHandlers = {\n move: {name: 'mousemove'},\n end: {name: 'mouseup'},\n};\n\nenum MouseButton {\n RightClick = 2,\n}\n\nexport interface MouseSensorOptions extends AbstractPointerSensorOptions {}\n\nexport type MouseSensorProps = SensorProps;\n\nexport class MouseSensor extends AbstractPointerSensor {\n constructor(props: MouseSensorProps) {\n super(props, events, getOwnerDocument(props.event.target));\n }\n\n static activators = [\n {\n eventName: 'onMouseDown' as const,\n handler: (\n {nativeEvent: event}: MouseEvent,\n {onActivation}: MouseSensorOptions\n ) => {\n if (event.button === MouseButton.RightClick) {\n return false;\n }\n\n onActivation?.({event});\n\n return true;\n },\n },\n ];\n}\n","import type {TouchEvent} from 'react';\n\nimport {\n AbstractPointerSensor,\n PointerSensorProps,\n PointerEventHandlers,\n PointerSensorOptions,\n} from '../pointer';\nimport type {SensorProps} from '../types';\n\nconst events: PointerEventHandlers = {\n cancel: {name: 'touchcancel'},\n move: {name: 'touchmove'},\n end: {name: 'touchend'},\n};\n\nexport interface TouchSensorOptions extends PointerSensorOptions {}\n\nexport type TouchSensorProps = SensorProps;\n\nexport class TouchSensor extends AbstractPointerSensor {\n constructor(props: PointerSensorProps) {\n super(props, events);\n }\n\n static activators = [\n {\n eventName: 'onTouchStart' as const,\n handler: (\n {nativeEvent: event}: TouchEvent,\n {onActivation}: TouchSensorOptions\n ) => {\n const {touches} = event;\n\n if (touches.length > 1) {\n return false;\n }\n\n onActivation?.({event});\n\n return true;\n },\n },\n ];\n\n static setup() {\n // Adding a non-capture and non-passive `touchmove` listener in order\n // to force `event.preventDefault()` calls to work in dynamically added\n // touchmove event handlers. This is required for iOS Safari.\n window.addEventListener(events.move.name, noop, {\n capture: false,\n passive: false,\n });\n\n return function teardown() {\n window.removeEventListener(events.move.name, noop);\n };\n\n // We create a new handler because the teardown function of another sensor\n // could remove our event listener if we use a referentially equal listener.\n function noop() {}\n }\n}\n","import {useCallback, useEffect, useMemo, useRef} from 'react';\nimport {useInterval, useLazyMemo, usePrevious} from '@dnd-kit/utilities';\n\nimport {getScrollDirectionAndSpeed} from '../../utilities';\nimport {Direction} from '../../types';\nimport type {Coordinates, ClientRect} from '../../types';\n\nexport type ScrollAncestorSortingFn = (ancestors: Element[]) => Element[];\n\nexport enum AutoScrollActivator {\n Pointer,\n DraggableRect,\n}\n\nexport interface Options {\n acceleration?: number;\n activator?: AutoScrollActivator;\n canScroll?: CanScroll;\n enabled?: boolean;\n interval?: number;\n layoutShiftCompensation?:\n | boolean\n | {\n x: boolean;\n y: boolean;\n };\n order?: TraversalOrder;\n threshold?: {\n x: number;\n y: number;\n };\n}\n\ninterface Arguments extends Options {\n draggingRect: ClientRect | null;\n enabled: boolean;\n pointerCoordinates: Coordinates | null;\n scrollableAncestors: Element[];\n scrollableAncestorRects: ClientRect[];\n delta: Coordinates;\n}\n\nexport type CanScroll = (element: Element) => boolean;\n\nexport enum TraversalOrder {\n TreeOrder,\n ReversedTreeOrder,\n}\n\ninterface ScrollDirection {\n x: 0 | Direction;\n y: 0 | Direction;\n}\n\nexport function useAutoScroller({\n acceleration,\n activator = AutoScrollActivator.Pointer,\n canScroll,\n draggingRect,\n enabled,\n interval = 5,\n order = TraversalOrder.TreeOrder,\n pointerCoordinates,\n scrollableAncestors,\n scrollableAncestorRects,\n delta,\n threshold,\n}: Arguments) {\n const scrollIntent = useScrollIntent({delta, disabled: !enabled});\n const [setAutoScrollInterval, clearAutoScrollInterval] = useInterval();\n const scrollSpeed = useRef({x: 0, y: 0});\n const scrollDirection = useRef({x: 0, y: 0});\n const rect = useMemo(() => {\n switch (activator) {\n case AutoScrollActivator.Pointer:\n return pointerCoordinates\n ? {\n top: pointerCoordinates.y,\n bottom: pointerCoordinates.y,\n left: pointerCoordinates.x,\n right: pointerCoordinates.x,\n }\n : null;\n case AutoScrollActivator.DraggableRect:\n return draggingRect;\n }\n }, [activator, draggingRect, pointerCoordinates]);\n const scrollContainerRef = useRef(null);\n const autoScroll = useCallback(() => {\n const scrollContainer = scrollContainerRef.current;\n\n if (!scrollContainer) {\n return;\n }\n\n const scrollLeft = scrollSpeed.current.x * scrollDirection.current.x;\n const scrollTop = scrollSpeed.current.y * scrollDirection.current.y;\n\n scrollContainer.scrollBy(scrollLeft, scrollTop);\n }, []);\n const sortedScrollableAncestors = useMemo(\n () =>\n order === TraversalOrder.TreeOrder\n ? [...scrollableAncestors].reverse()\n : scrollableAncestors,\n [order, scrollableAncestors]\n );\n\n useEffect(\n () => {\n if (!enabled || !scrollableAncestors.length || !rect) {\n clearAutoScrollInterval();\n return;\n }\n\n for (const scrollContainer of sortedScrollableAncestors) {\n if (canScroll?.(scrollContainer) === false) {\n continue;\n }\n\n const index = scrollableAncestors.indexOf(scrollContainer);\n const scrollContainerRect = scrollableAncestorRects[index];\n\n if (!scrollContainerRect) {\n continue;\n }\n\n const {direction, speed} = getScrollDirectionAndSpeed(\n scrollContainer,\n scrollContainerRect,\n rect,\n acceleration,\n threshold\n );\n\n for (const axis of ['x', 'y'] as const) {\n if (!scrollIntent[axis][direction[axis] as Direction]) {\n speed[axis] = 0;\n direction[axis] = 0;\n }\n }\n\n if (speed.x > 0 || speed.y > 0) {\n clearAutoScrollInterval();\n\n scrollContainerRef.current = scrollContainer;\n setAutoScrollInterval(autoScroll, interval);\n\n scrollSpeed.current = speed;\n scrollDirection.current = direction;\n\n return;\n }\n }\n\n scrollSpeed.current = {x: 0, y: 0};\n scrollDirection.current = {x: 0, y: 0};\n clearAutoScrollInterval();\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n acceleration,\n autoScroll,\n canScroll,\n clearAutoScrollInterval,\n enabled,\n interval,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(rect),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(scrollIntent),\n setAutoScrollInterval,\n scrollableAncestors,\n sortedScrollableAncestors,\n scrollableAncestorRects,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(threshold),\n ]\n );\n}\n\ninterface ScrollIntent {\n x: Record;\n y: Record;\n}\n\nconst defaultScrollIntent: ScrollIntent = {\n x: {[Direction.Backward]: false, [Direction.Forward]: false},\n y: {[Direction.Backward]: false, [Direction.Forward]: false},\n};\n\nfunction useScrollIntent({\n delta,\n disabled,\n}: {\n delta: Coordinates;\n disabled: boolean;\n}): ScrollIntent {\n const previousDelta = usePrevious(delta);\n\n return useLazyMemo(\n (previousIntent) => {\n if (disabled || !previousDelta || !previousIntent) {\n // Reset scroll intent tracking when auto-scrolling is disabled\n return defaultScrollIntent;\n }\n\n const direction = {\n x: Math.sign(delta.x - previousDelta.x),\n y: Math.sign(delta.y - previousDelta.y),\n };\n\n // Keep track of the user intent to scroll in each direction for both axis\n return {\n x: {\n [Direction.Backward]:\n previousIntent.x[Direction.Backward] || direction.x === -1,\n [Direction.Forward]:\n previousIntent.x[Direction.Forward] || direction.x === 1,\n },\n y: {\n [Direction.Backward]:\n previousIntent.y[Direction.Backward] || direction.y === -1,\n [Direction.Forward]:\n previousIntent.y[Direction.Forward] || direction.y === 1,\n },\n };\n },\n [disabled, delta, previousDelta]\n );\n}\n","import {useCallback, useRef} from 'react';\n\nexport function useInterval() {\n const intervalRef = useRef(null);\n\n const set = useCallback((listener: Function, duration: number) => {\n intervalRef.current = setInterval(listener, duration);\n }, []);\n\n const clear = useCallback(() => {\n if (intervalRef.current !== null) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n }, []);\n\n return [set, clear] as const;\n}\n","import {useCallback, useEffect, useRef, useState} from 'react';\nimport {useLatestValue, useLazyMemo} from '@dnd-kit/utilities';\n\nimport {Rect} from '../../utilities/rect';\nimport type {DroppableContainer, RectMap} from '../../store/types';\nimport type {ClientRect, UniqueIdentifier} from '../../types';\n\ninterface Arguments {\n dragging: boolean;\n dependencies: any[];\n config: DroppableMeasuring;\n}\n\nexport enum MeasuringStrategy {\n Always,\n BeforeDragging,\n WhileDragging,\n}\n\nexport enum MeasuringFrequency {\n Optimized = 'optimized',\n}\n\ntype MeasuringFunction = (element: HTMLElement) => ClientRect;\n\nexport interface DroppableMeasuring {\n measure: MeasuringFunction;\n strategy: MeasuringStrategy;\n frequency: MeasuringFrequency | number;\n}\n\nconst defaultValue: RectMap = new Map();\n\nexport function useDroppableMeasuring(\n containers: DroppableContainer[],\n {dragging, dependencies, config}: Arguments\n) {\n const [queue, setQueue] = useState(null);\n const {frequency, measure, strategy} = config;\n const containersRef = useRef(containers);\n const disabled = isDisabled();\n const disabledRef = useLatestValue(disabled);\n const measureDroppableContainers = useCallback(\n (ids: UniqueIdentifier[] = []) => {\n if (disabledRef.current) {\n return;\n }\n\n setQueue((value) => {\n if (value === null) {\n return ids;\n }\n\n return value.concat(ids.filter((id) => !value.includes(id)));\n });\n },\n [disabledRef]\n );\n const timeoutId = useRef(null);\n const droppableRects = useLazyMemo(\n (previousValue) => {\n if (disabled && !dragging) {\n return defaultValue;\n }\n\n if (\n !previousValue ||\n previousValue === defaultValue ||\n containersRef.current !== containers ||\n queue != null\n ) {\n const map: RectMap = new Map();\n\n for (let container of containers) {\n if (!container) {\n continue;\n }\n\n if (\n queue &&\n queue.length > 0 &&\n !queue.includes(container.id) &&\n container.rect.current\n ) {\n // This container does not need to be re-measured\n map.set(container.id, container.rect.current);\n continue;\n }\n\n const node = container.node.current;\n const rect = node ? new Rect(measure(node), node) : null;\n\n container.rect.current = rect;\n\n if (rect) {\n map.set(container.id, rect);\n }\n }\n\n return map;\n }\n\n return previousValue;\n },\n [containers, queue, dragging, disabled, measure]\n );\n\n useEffect(() => {\n containersRef.current = containers;\n }, [containers]);\n\n useEffect(\n () => {\n if (disabled) {\n return;\n }\n\n measureDroppableContainers();\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dragging, disabled]\n );\n\n useEffect(\n () => {\n if (queue && queue.length > 0) {\n setQueue(null);\n }\n },\n //eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(queue)]\n );\n\n useEffect(\n () => {\n if (\n disabled ||\n typeof frequency !== 'number' ||\n timeoutId.current !== null\n ) {\n return;\n }\n\n timeoutId.current = setTimeout(() => {\n measureDroppableContainers();\n timeoutId.current = null;\n }, frequency);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [frequency, disabled, measureDroppableContainers, ...dependencies]\n );\n\n return {\n droppableRects,\n measureDroppableContainers,\n measuringScheduled: queue != null,\n };\n\n function isDisabled() {\n switch (strategy) {\n case MeasuringStrategy.Always:\n return false;\n case MeasuringStrategy.BeforeDragging:\n return dragging;\n default:\n return !dragging;\n }\n }\n}\n","import {useLazyMemo} from '@dnd-kit/utilities';\n\ntype AnyFunction = (...args: any) => any;\n\nexport function useInitialValue<\n T,\n U extends AnyFunction | undefined = undefined\n>(\n value: T | null,\n computeFn?: U\n): U extends AnyFunction ? ReturnType | null : T | null {\n return useLazyMemo(\n (previousValue) => {\n if (!value) {\n return null;\n }\n\n if (previousValue) {\n return previousValue;\n }\n\n return typeof computeFn === 'function' ? computeFn(value) : value;\n },\n [computeFn, value]\n );\n}\n","import {useEffect, useMemo} from 'react';\nimport {useEvent} from '@dnd-kit/utilities';\n\ninterface Arguments {\n callback: ResizeObserverCallback;\n disabled?: boolean;\n}\n\n/**\n * Returns a new ResizeObserver instance bound to the `onResize` callback.\n * If `ResizeObserver` is undefined in the execution environment, returns `undefined`.\n */\nexport function useResizeObserver({callback, disabled}: Arguments) {\n const handleResize = useEvent(callback);\n const resizeObserver = useMemo(\n () => {\n if (\n disabled ||\n typeof window === 'undefined' ||\n typeof window.ResizeObserver === 'undefined'\n ) {\n return undefined;\n }\n\n const {ResizeObserver} = window;\n\n return new ResizeObserver(handleResize);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [disabled]\n );\n\n useEffect(() => {\n return () => resizeObserver?.disconnect();\n }, [resizeObserver]);\n\n return resizeObserver;\n}\n","import {useState} from 'react';\nimport {useIsomorphicLayoutEffect} from '@dnd-kit/utilities';\n\nimport type {ClientRect} from '../../types';\nimport {getClientRect, Rect} from '../../utilities';\n\nimport {useMutationObserver} from './useMutationObserver';\nimport {useResizeObserver} from './useResizeObserver';\n\nfunction defaultMeasure(element: HTMLElement) {\n return new Rect(getClientRect(element), element);\n}\n\nexport function useRect(\n element: HTMLElement | null,\n measure: (element: HTMLElement) => ClientRect = defaultMeasure,\n fallbackRect?: ClientRect | null\n) {\n const [rect, setRect] = useState(null);\n\n function measureRect() {\n setRect((currentRect): ClientRect | null => {\n if (!element) {\n return null;\n }\n \n if (element.isConnected === false) {\n // Fall back to last rect we measured if the element is\n // no longer connected to the DOM.\n return currentRect ?? fallbackRect ?? null;\n }\n \n const newRect = measure(element);\n \n if (JSON.stringify(currentRect) === JSON.stringify(newRect)) {\n return currentRect;\n }\n \n return newRect;\n });\n }\n \n const mutationObserver = useMutationObserver({\n callback(records) {\n if (!element) {\n return;\n }\n\n for (const record of records) {\n const {type, target} = record;\n\n if (\n type === 'childList' &&\n target instanceof HTMLElement &&\n target.contains(element)\n ) {\n measureRect();\n break;\n }\n }\n },\n });\n const resizeObserver = useResizeObserver({callback: measureRect});\n\n useIsomorphicLayoutEffect(() => {\n measureRect();\n\n if (element) {\n resizeObserver?.observe(element);\n mutationObserver?.observe(document.body, {\n childList: true,\n subtree: true,\n });\n } else {\n resizeObserver?.disconnect();\n mutationObserver?.disconnect();\n }\n }, [element]);\n\n return rect;\n}\n","import {useEffect, useMemo} from 'react';\nimport {useEvent} from '@dnd-kit/utilities';\n\ninterface Arguments {\n callback: MutationCallback;\n disabled?: boolean;\n}\n\n/**\n * Returns a new MutationObserver instance.\n * If `MutationObserver` is undefined in the execution environment, returns `undefined`.\n */\nexport function useMutationObserver({callback, disabled}: Arguments) {\n const handleMutations = useEvent(callback);\n const mutationObserver = useMemo(() => {\n if (\n disabled ||\n typeof window === 'undefined' ||\n typeof window.MutationObserver === 'undefined'\n ) {\n return undefined;\n }\n\n const {MutationObserver} = window;\n\n return new MutationObserver(handleMutations);\n }, [handleMutations, disabled]);\n\n useEffect(() => {\n return () => mutationObserver?.disconnect();\n }, [mutationObserver]);\n\n return mutationObserver;\n}\n","import {useEffect, useRef} from 'react';\nimport {useLazyMemo} from '@dnd-kit/utilities';\n\nimport {getScrollableAncestors} from '../../utilities';\n\nconst defaultValue: Element[] = [];\n\nexport function useScrollableAncestors(node: HTMLElement | null) {\n const previousNode = useRef(node);\n\n const ancestors = useLazyMemo(\n (previousValue) => {\n if (!node) {\n return defaultValue;\n }\n\n if (\n previousValue &&\n previousValue !== defaultValue &&\n node &&\n previousNode.current &&\n node.parentNode === previousNode.current.parentNode\n ) {\n return previousValue;\n }\n\n return getScrollableAncestors(node);\n },\n [node]\n );\n\n useEffect(() => {\n previousNode.current = node;\n }, [node]);\n\n return ancestors;\n}\n","import {useEffect, useRef} from 'react';\nimport {Coordinates, subtract} from '@dnd-kit/utilities';\n\nimport {defaultCoordinates} from '../../utilities';\n\nexport function useScrollOffsetsDelta(\n scrollOffsets: Coordinates,\n dependencies: any[] = []\n) {\n const initialScrollOffsets = useRef(null);\n\n useEffect(\n () => {\n initialScrollOffsets.current = null;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n dependencies\n );\n\n useEffect(() => {\n const hasScrollOffsets = scrollOffsets !== defaultCoordinates;\n\n if (hasScrollOffsets && !initialScrollOffsets.current) {\n initialScrollOffsets.current = scrollOffsets;\n }\n\n if (!hasScrollOffsets && initialScrollOffsets.current) {\n initialScrollOffsets.current = null;\n }\n }, [scrollOffsets]);\n\n return initialScrollOffsets.current\n ? subtract(scrollOffsets, initialScrollOffsets.current)\n : defaultCoordinates;\n}\n","import {useMemo} from 'react';\n\nimport {getWindowClientRect} from '../../utilities/rect';\n\nexport function useWindowRect(element: typeof window | null) {\n return useMemo(() => (element ? getWindowClientRect(element) : null), [\n element,\n ]);\n}\n","import type {ClientRect} from '../../types';\n\nexport function getWindowClientRect(element: typeof window): ClientRect {\n const width = element.innerWidth;\n const height = element.innerHeight;\n\n return {\n top: 0,\n left: 0,\n right: width,\n bottom: height,\n width,\n height,\n };\n}\n","import {useState} from 'react';\nimport {getWindow, useIsomorphicLayoutEffect} from '@dnd-kit/utilities';\n\nimport type {ClientRect} from '../../types';\nimport {Rect, getClientRect} from '../../utilities/rect';\nimport {isDocumentScrollingElement} from '../../utilities';\n\nimport {useResizeObserver} from './useResizeObserver';\nimport {useWindowRect} from './useWindowRect';\n\nconst defaultValue: Rect[] = [];\n\nexport function useRects(\n elements: Element[],\n measure: (element: Element) => ClientRect = getClientRect\n): ClientRect[] {\n const [firstElement] = elements;\n const windowRect = useWindowRect(\n firstElement ? getWindow(firstElement) : null\n );\n const [rects, setRects] = useState(defaultValue);\n\n function measureRects() {\n setRects(() => {\n if (!elements.length) {\n return defaultValue;\n }\n\n return elements.map((element) =>\n isDocumentScrollingElement(element)\n ? (windowRect as ClientRect)\n : new Rect(measure(element), element)\n );\n });\n }\n\n const resizeObserver = useResizeObserver({callback: measureRects});\n\n useIsomorphicLayoutEffect(() => {\n resizeObserver?.disconnect();\n measureRects();\n elements.forEach((element) => resizeObserver?.observe(element));\n }, [elements]);\n\n return rects;\n}\n","import {isHTMLElement} from '@dnd-kit/utilities';\n\nexport function getMeasurableNode(\n node: HTMLElement | undefined | null\n): HTMLElement | null {\n if (!node) {\n return null;\n }\n\n if (node.children.length > 1) {\n return node;\n }\n const firstChild = node.children[0];\n\n return isHTMLElement(firstChild) ? firstChild : node;\n}\n","import type {DeepRequired} from '@dnd-kit/utilities';\n\nimport type {DataRef} from '../../store/types';\nimport {KeyboardSensor, PointerSensor} from '../../sensors';\nimport {MeasuringStrategy, MeasuringFrequency} from '../../hooks/utilities';\nimport {\n getClientRect,\n getTransformAgnosticClientRect,\n} from '../../utilities/rect';\n\nimport type {MeasuringConfiguration} from './types';\n\nexport const defaultSensors = [\n {sensor: PointerSensor, options: {}},\n {sensor: KeyboardSensor, options: {}},\n];\n\nexport const defaultData: DataRef = {current: {}};\n\nexport const defaultMeasuringConfiguration: DeepRequired = {\n draggable: {\n measure: getTransformAgnosticClientRect,\n },\n droppable: {\n measure: getTransformAgnosticClientRect,\n strategy: MeasuringStrategy.WhileDragging,\n frequency: MeasuringFrequency.Optimized,\n },\n dragOverlay: {\n measure: getClientRect,\n },\n};\n","import type {UniqueIdentifier} from '../types';\nimport type {DroppableContainer} from './types';\n\ntype Identifier = UniqueIdentifier | null | undefined;\n\nexport class DroppableContainersMap extends Map<\n UniqueIdentifier,\n DroppableContainer\n> {\n get(id: Identifier) {\n return id != null ? super.get(id) ?? undefined : undefined;\n }\n\n toArray(): DroppableContainer[] {\n return Array.from(this.values());\n }\n\n getEnabled(): DroppableContainer[] {\n return this.toArray().filter(({disabled}) => !disabled);\n }\n\n getNodeFor(id: Identifier) {\n return this.get(id)?.node.current ?? undefined;\n }\n}\n","import {createContext} from 'react';\n\nimport {noop} from '../utilities/other';\nimport {defaultMeasuringConfiguration} from '../components/DndContext/defaults';\nimport {DroppableContainersMap} from './constructors';\nimport type {InternalContextDescriptor, PublicContextDescriptor} from './types';\n\nexport const defaultPublicContext: PublicContextDescriptor = {\n activatorEvent: null,\n active: null,\n activeNode: null,\n activeNodeRect: null,\n collisions: null,\n containerNodeRect: null,\n draggableNodes: new Map(),\n droppableRects: new Map(),\n droppableContainers: new DroppableContainersMap(),\n over: null,\n dragOverlay: {\n nodeRef: {\n current: null,\n },\n rect: null,\n setRef: noop,\n },\n scrollableAncestors: [],\n scrollableAncestorRects: [],\n measuringConfiguration: defaultMeasuringConfiguration,\n measureDroppableContainers: noop,\n windowRect: null,\n measuringScheduled: false,\n};\n\nexport const defaultInternalContext: InternalContextDescriptor = {\n activatorEvent: null,\n activators: [],\n active: null,\n activeNodeRect: null,\n ariaDescribedById: {\n draggable: '',\n },\n dispatch: noop,\n draggableNodes: new Map(),\n over: null,\n measureDroppableContainers: noop,\n};\n\nexport const InternalContext = createContext(\n defaultInternalContext\n);\n\nexport const PublicContext = createContext(\n defaultPublicContext\n);\n","import {Action, Actions} from './actions';\nimport {DroppableContainersMap} from './constructors';\nimport type {State} from './types';\n\nexport function getInitialState(): State {\n return {\n draggable: {\n active: null,\n initialCoordinates: {x: 0, y: 0},\n nodes: new Map(),\n translate: {x: 0, y: 0},\n },\n droppable: {\n containers: new DroppableContainersMap(),\n },\n };\n}\n\nexport function reducer(state: State, action: Actions): State {\n switch (action.type) {\n case Action.DragStart:\n return {\n ...state,\n draggable: {\n ...state.draggable,\n initialCoordinates: action.initialCoordinates,\n active: action.active,\n },\n };\n case Action.DragMove:\n if (state.draggable.active == null) {\n return state;\n }\n\n return {\n ...state,\n draggable: {\n ...state.draggable,\n translate: {\n x: action.coordinates.x - state.draggable.initialCoordinates.x,\n y: action.coordinates.y - state.draggable.initialCoordinates.y,\n },\n },\n };\n case Action.DragEnd:\n case Action.DragCancel:\n return {\n ...state,\n draggable: {\n ...state.draggable,\n active: null,\n initialCoordinates: {x: 0, y: 0},\n translate: {x: 0, y: 0},\n },\n };\n\n case Action.RegisterDroppable: {\n const {element} = action;\n const {id} = element;\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.set(id, element);\n\n return {\n ...state,\n droppable: {\n ...state.droppable,\n containers,\n },\n };\n }\n\n case Action.SetDroppableDisabled: {\n const {id, key, disabled} = action;\n const element = state.droppable.containers.get(id);\n\n if (!element || key !== element.key) {\n return state;\n }\n\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.set(id, {\n ...element,\n disabled,\n });\n\n return {\n ...state,\n droppable: {\n ...state.droppable,\n containers,\n },\n };\n }\n\n case Action.UnregisterDroppable: {\n const {id, key} = action;\n const element = state.droppable.containers.get(id);\n\n if (!element || key !== element.key) {\n return state;\n }\n\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.delete(id);\n\n return {\n ...state,\n droppable: {\n ...state.droppable,\n containers,\n },\n };\n }\n\n default: {\n return state;\n }\n }\n}\n","import {useContext, useEffect} from 'react';\nimport {\n findFirstFocusableNode,\n isKeyboardEvent,\n usePrevious,\n} from '@dnd-kit/utilities';\n\nimport {InternalContext} from '../../../store';\n\ninterface Props {\n disabled: boolean;\n}\n\nexport function RestoreFocus({disabled}: Props) {\n const {active, activatorEvent, draggableNodes} = useContext(InternalContext);\n const previousActivatorEvent = usePrevious(activatorEvent);\n const previousActiveId = usePrevious(active?.id);\n\n // Restore keyboard focus on the activator node\n useEffect(() => {\n if (disabled) {\n return;\n }\n\n if (!activatorEvent && previousActivatorEvent && previousActiveId != null) {\n if (!isKeyboardEvent(previousActivatorEvent)) {\n return;\n }\n\n if (document.activeElement === previousActivatorEvent.target) {\n // No need to restore focus\n return;\n }\n\n const draggableNode = draggableNodes.get(previousActiveId);\n\n if (!draggableNode) {\n return;\n }\n\n const {activatorNode, node} = draggableNode;\n\n if (!activatorNode.current && !node.current) {\n return;\n }\n\n requestAnimationFrame(() => {\n for (const element of [activatorNode.current, node.current]) {\n if (!element) {\n continue;\n }\n\n const focusableNode = findFirstFocusableNode(element);\n\n if (focusableNode) {\n focusableNode.focus();\n break;\n }\n }\n });\n }\n }, [\n activatorEvent,\n disabled,\n draggableNodes,\n previousActiveId,\n previousActivatorEvent,\n ]);\n\n return null;\n}\n","import type {FirstArgument, Transform} from '@dnd-kit/utilities';\n\nimport type {Modifiers, Modifier} from './types';\n\nexport function applyModifiers(\n modifiers: Modifiers | undefined,\n {transform, ...args}: FirstArgument\n): Transform {\n return modifiers?.length\n ? modifiers.reduce((accumulator, modifier) => {\n return modifier({\n transform: accumulator,\n ...args,\n });\n }, transform)\n : transform;\n}\n","import React, {\n memo,\n createContext,\n useCallback,\n useEffect,\n useMemo,\n useReducer,\n useRef,\n useState,\n} from 'react';\nimport {unstable_batchedUpdates} from 'react-dom';\nimport {\n add,\n getEventCoordinates,\n getWindow,\n useLatestValue,\n useIsomorphicLayoutEffect,\n useUniqueId,\n} from '@dnd-kit/utilities';\nimport type {Transform} from '@dnd-kit/utilities';\n\nimport {\n Action,\n PublicContext,\n InternalContext,\n PublicContextDescriptor,\n InternalContextDescriptor,\n getInitialState,\n reducer,\n} from '../../store';\nimport {DndMonitorContext, useDndMonitorProvider} from '../DndMonitor';\nimport {\n useAutoScroller,\n useCachedNode,\n useCombineActivators,\n useDragOverlayMeasuring,\n useDroppableMeasuring,\n useInitialRect,\n useRect,\n useRectDelta,\n useRects,\n useScrollableAncestors,\n useScrollOffsets,\n useScrollOffsetsDelta,\n useSensorSetup,\n useWindowRect,\n} from '../../hooks/utilities';\nimport type {AutoScrollOptions, SyntheticListener} from '../../hooks/utilities';\nimport type {\n Sensor,\n SensorContext,\n SensorDescriptor,\n SensorActivatorFunction,\n SensorInstance,\n} from '../../sensors';\nimport {\n adjustScale,\n CollisionDetection,\n defaultCoordinates,\n getAdjustedRect,\n getFirstCollision,\n rectIntersection,\n} from '../../utilities';\nimport {applyModifiers, Modifiers} from '../../modifiers';\nimport type {Active, Over} from '../../store/types';\nimport type {\n DragStartEvent,\n DragCancelEvent,\n DragEndEvent,\n DragMoveEvent,\n DragOverEvent,\n UniqueIdentifier,\n DragPendingEvent,\n DragAbortEvent,\n} from '../../types';\nimport {\n Accessibility,\n Announcements,\n RestoreFocus,\n ScreenReaderInstructions,\n} from '../Accessibility';\n\nimport {defaultData, defaultSensors} from './defaults';\nimport {\n useLayoutShiftScrollCompensation,\n useMeasuringConfiguration,\n} from './hooks';\nimport type {MeasuringConfiguration} from './types';\n\nexport interface Props {\n id?: string;\n accessibility?: {\n announcements?: Announcements;\n container?: Element;\n restoreFocus?: boolean;\n screenReaderInstructions?: ScreenReaderInstructions;\n };\n autoScroll?: boolean | AutoScrollOptions;\n cancelDrop?: CancelDrop;\n children?: React.ReactNode;\n collisionDetection?: CollisionDetection;\n measuring?: MeasuringConfiguration;\n modifiers?: Modifiers;\n sensors?: SensorDescriptor[];\n onDragAbort?(event: DragAbortEvent): void;\n onDragPending?(event: DragPendingEvent): void;\n onDragStart?(event: DragStartEvent): void;\n onDragMove?(event: DragMoveEvent): void;\n onDragOver?(event: DragOverEvent): void;\n onDragEnd?(event: DragEndEvent): void;\n onDragCancel?(event: DragCancelEvent): void;\n}\n\nexport interface CancelDropArguments extends DragEndEvent {}\n\nexport type CancelDrop = (\n args: CancelDropArguments\n) => boolean | Promise;\n\ninterface DndEvent extends Event {\n dndKit?: {\n capturedBy: Sensor;\n };\n}\n\nexport const ActiveDraggableContext = createContext({\n ...defaultCoordinates,\n scaleX: 1,\n scaleY: 1,\n});\n\nenum Status {\n Uninitialized,\n Initializing,\n Initialized,\n}\n\nexport const DndContext = memo(function DndContext({\n id,\n accessibility,\n autoScroll = true,\n children,\n sensors = defaultSensors,\n collisionDetection = rectIntersection,\n measuring,\n modifiers,\n ...props\n}: Props) {\n const store = useReducer(reducer, undefined, getInitialState);\n const [state, dispatch] = store;\n const [dispatchMonitorEvent, registerMonitorListener] =\n useDndMonitorProvider();\n const [status, setStatus] = useState(Status.Uninitialized);\n const isInitialized = status === Status.Initialized;\n const {\n draggable: {active: activeId, nodes: draggableNodes, translate},\n droppable: {containers: droppableContainers},\n } = state;\n const node = activeId != null ? draggableNodes.get(activeId) : null;\n const activeRects = useRef({\n initial: null,\n translated: null,\n });\n const active = useMemo(\n () =>\n activeId != null\n ? {\n id: activeId,\n // It's possible for the active node to unmount while dragging\n data: node?.data ?? defaultData,\n rect: activeRects,\n }\n : null,\n [activeId, node]\n );\n const activeRef = useRef(null);\n const [activeSensor, setActiveSensor] = useState(null);\n const [activatorEvent, setActivatorEvent] = useState(null);\n const latestProps = useLatestValue(props, Object.values(props));\n const draggableDescribedById = useUniqueId(`DndDescribedBy`, id);\n const enabledDroppableContainers = useMemo(\n () => droppableContainers.getEnabled(),\n [droppableContainers]\n );\n const measuringConfiguration = useMeasuringConfiguration(measuring);\n const {droppableRects, measureDroppableContainers, measuringScheduled} =\n useDroppableMeasuring(enabledDroppableContainers, {\n dragging: isInitialized,\n dependencies: [translate.x, translate.y],\n config: measuringConfiguration.droppable,\n });\n const activeNode = useCachedNode(draggableNodes, activeId);\n const activationCoordinates = useMemo(\n () => (activatorEvent ? getEventCoordinates(activatorEvent) : null),\n [activatorEvent]\n );\n const autoScrollOptions = getAutoScrollerOptions();\n const initialActiveNodeRect = useInitialRect(\n activeNode,\n measuringConfiguration.draggable.measure\n );\n\n useLayoutShiftScrollCompensation({\n activeNode: activeId != null ? draggableNodes.get(activeId) : null,\n config: autoScrollOptions.layoutShiftCompensation,\n initialRect: initialActiveNodeRect,\n measure: measuringConfiguration.draggable.measure,\n });\n\n const activeNodeRect = useRect(\n activeNode,\n measuringConfiguration.draggable.measure,\n initialActiveNodeRect\n );\n const containerNodeRect = useRect(\n activeNode ? activeNode.parentElement : null\n );\n const sensorContext = useRef({\n activatorEvent: null,\n active: null,\n activeNode,\n collisionRect: null,\n collisions: null,\n droppableRects,\n draggableNodes,\n draggingNode: null,\n draggingNodeRect: null,\n droppableContainers,\n over: null,\n scrollableAncestors: [],\n scrollAdjustedTranslate: null,\n });\n const overNode = droppableContainers.getNodeFor(\n sensorContext.current.over?.id\n );\n const dragOverlay = useDragOverlayMeasuring({\n measure: measuringConfiguration.dragOverlay.measure,\n });\n\n // Use the rect of the drag overlay if it is mounted\n const draggingNode = dragOverlay.nodeRef.current ?? activeNode;\n const draggingNodeRect = isInitialized\n ? dragOverlay.rect ?? activeNodeRect\n : null;\n const usesDragOverlay = Boolean(\n dragOverlay.nodeRef.current && dragOverlay.rect\n );\n // The delta between the previous and new position of the draggable node\n // is only relevant when there is no drag overlay\n const nodeRectDelta = useRectDelta(usesDragOverlay ? null : activeNodeRect);\n\n // Get the window rect of the dragging node\n const windowRect = useWindowRect(\n draggingNode ? getWindow(draggingNode) : null\n );\n\n // Get scrollable ancestors of the dragging node\n const scrollableAncestors = useScrollableAncestors(\n isInitialized ? overNode ?? activeNode : null\n );\n const scrollableAncestorRects = useRects(scrollableAncestors);\n\n // Apply modifiers\n const modifiedTranslate = applyModifiers(modifiers, {\n transform: {\n x: translate.x - nodeRectDelta.x,\n y: translate.y - nodeRectDelta.y,\n scaleX: 1,\n scaleY: 1,\n },\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggingNodeRect,\n over: sensorContext.current.over,\n overlayNodeRect: dragOverlay.rect,\n scrollableAncestors,\n scrollableAncestorRects,\n windowRect,\n });\n\n const pointerCoordinates = activationCoordinates\n ? add(activationCoordinates, translate)\n : null;\n\n const scrollOffsets = useScrollOffsets(scrollableAncestors);\n // Represents the scroll delta since dragging was initiated\n const scrollAdjustment = useScrollOffsetsDelta(scrollOffsets);\n // Represents the scroll delta since the last time the active node rect was measured\n const activeNodeScrollDelta = useScrollOffsetsDelta(scrollOffsets, [\n activeNodeRect,\n ]);\n\n const scrollAdjustedTranslate = add(modifiedTranslate, scrollAdjustment);\n\n const collisionRect = draggingNodeRect\n ? getAdjustedRect(draggingNodeRect, modifiedTranslate)\n : null;\n\n const collisions =\n active && collisionRect\n ? collisionDetection({\n active,\n collisionRect,\n droppableRects,\n droppableContainers: enabledDroppableContainers,\n pointerCoordinates,\n })\n : null;\n const overId = getFirstCollision(collisions, 'id');\n const [over, setOver] = useState(null);\n\n // When there is no drag overlay used, we need to account for the\n // window scroll delta\n const appliedTranslate = usesDragOverlay\n ? modifiedTranslate\n : add(modifiedTranslate, activeNodeScrollDelta);\n\n const transform = adjustScale(\n appliedTranslate,\n over?.rect ?? null,\n activeNodeRect\n );\n\n const activeSensorRef = useRef(null);\n const instantiateSensor = useCallback(\n (\n event: React.SyntheticEvent,\n {sensor: Sensor, options}: SensorDescriptor\n ) => {\n if (activeRef.current == null) {\n return;\n }\n\n const activeNode = draggableNodes.get(activeRef.current);\n\n if (!activeNode) {\n return;\n }\n\n const activatorEvent = event.nativeEvent;\n\n const sensorInstance = new Sensor({\n active: activeRef.current,\n activeNode,\n event: activatorEvent,\n options,\n // Sensors need to be instantiated with refs for arguments that change over time\n // otherwise they are frozen in time with the stale arguments\n context: sensorContext,\n onAbort(id) {\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {onDragAbort} = latestProps.current;\n const event: DragAbortEvent = {id};\n onDragAbort?.(event);\n dispatchMonitorEvent({type: 'onDragAbort', event});\n },\n onPending(id, constraint, initialCoordinates, offset) {\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {onDragPending} = latestProps.current;\n const event: DragPendingEvent = {\n id,\n constraint,\n initialCoordinates,\n offset,\n };\n\n onDragPending?.(event);\n dispatchMonitorEvent({type: 'onDragPending', event});\n },\n onStart(initialCoordinates) {\n const id = activeRef.current;\n\n if (id == null) {\n return;\n }\n\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {onDragStart} = latestProps.current;\n const event: DragStartEvent = {\n activatorEvent,\n active: {id, data: draggableNode.data, rect: activeRects},\n };\n\n unstable_batchedUpdates(() => {\n onDragStart?.(event);\n setStatus(Status.Initializing);\n dispatch({\n type: Action.DragStart,\n initialCoordinates,\n active: id,\n });\n dispatchMonitorEvent({type: 'onDragStart', event});\n setActiveSensor(activeSensorRef.current);\n setActivatorEvent(activatorEvent);\n });\n },\n onMove(coordinates) {\n dispatch({\n type: Action.DragMove,\n coordinates,\n });\n },\n onEnd: createHandler(Action.DragEnd),\n onCancel: createHandler(Action.DragCancel),\n });\n\n activeSensorRef.current = sensorInstance;\n\n function createHandler(type: Action.DragEnd | Action.DragCancel) {\n return async function handler() {\n const {active, collisions, over, scrollAdjustedTranslate} =\n sensorContext.current;\n let event: DragEndEvent | null = null;\n\n if (active && scrollAdjustedTranslate) {\n const {cancelDrop} = latestProps.current;\n\n event = {\n activatorEvent,\n active: active,\n collisions,\n delta: scrollAdjustedTranslate,\n over,\n };\n\n if (type === Action.DragEnd && typeof cancelDrop === 'function') {\n const shouldCancel = await Promise.resolve(cancelDrop(event));\n\n if (shouldCancel) {\n type = Action.DragCancel;\n }\n }\n }\n\n activeRef.current = null;\n\n unstable_batchedUpdates(() => {\n dispatch({type});\n setStatus(Status.Uninitialized);\n setOver(null);\n setActiveSensor(null);\n setActivatorEvent(null);\n activeSensorRef.current = null;\n\n const eventName =\n type === Action.DragEnd ? 'onDragEnd' : 'onDragCancel';\n\n if (event) {\n const handler = latestProps.current[eventName];\n\n handler?.(event);\n dispatchMonitorEvent({type: eventName, event});\n }\n });\n };\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [draggableNodes]\n );\n\n const bindActivatorToSensorInstantiator = useCallback(\n (\n handler: SensorActivatorFunction,\n sensor: SensorDescriptor\n ): SyntheticListener['handler'] => {\n return (event, active) => {\n const nativeEvent = event.nativeEvent as DndEvent;\n const activeDraggableNode = draggableNodes.get(active);\n\n if (\n // Another sensor is already instantiating\n activeRef.current !== null ||\n // No active draggable\n !activeDraggableNode ||\n // Event has already been captured\n nativeEvent.dndKit ||\n nativeEvent.defaultPrevented\n ) {\n return;\n }\n\n const activationContext = {\n active: activeDraggableNode,\n };\n const shouldActivate = handler(\n event,\n sensor.options,\n activationContext\n );\n\n if (shouldActivate === true) {\n nativeEvent.dndKit = {\n capturedBy: sensor.sensor,\n };\n\n activeRef.current = active;\n instantiateSensor(event, sensor);\n }\n };\n },\n [draggableNodes, instantiateSensor]\n );\n\n const activators = useCombineActivators(\n sensors,\n bindActivatorToSensorInstantiator\n );\n\n useSensorSetup(sensors);\n\n useIsomorphicLayoutEffect(() => {\n if (activeNodeRect && status === Status.Initializing) {\n setStatus(Status.Initialized);\n }\n }, [activeNodeRect, status]);\n\n useEffect(\n () => {\n const {onDragMove} = latestProps.current;\n const {active, activatorEvent, collisions, over} = sensorContext.current;\n\n if (!active || !activatorEvent) {\n return;\n }\n\n const event: DragMoveEvent = {\n active,\n activatorEvent,\n collisions,\n delta: {\n x: scrollAdjustedTranslate.x,\n y: scrollAdjustedTranslate.y,\n },\n over,\n };\n\n unstable_batchedUpdates(() => {\n onDragMove?.(event);\n dispatchMonitorEvent({type: 'onDragMove', event});\n });\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [scrollAdjustedTranslate.x, scrollAdjustedTranslate.y]\n );\n\n useEffect(\n () => {\n const {\n active,\n activatorEvent,\n collisions,\n droppableContainers,\n scrollAdjustedTranslate,\n } = sensorContext.current;\n\n if (\n !active ||\n activeRef.current == null ||\n !activatorEvent ||\n !scrollAdjustedTranslate\n ) {\n return;\n }\n\n const {onDragOver} = latestProps.current;\n const overContainer = droppableContainers.get(overId);\n const over =\n overContainer && overContainer.rect.current\n ? {\n id: overContainer.id,\n rect: overContainer.rect.current,\n data: overContainer.data,\n disabled: overContainer.disabled,\n }\n : null;\n const event: DragOverEvent = {\n active,\n activatorEvent,\n collisions,\n delta: {\n x: scrollAdjustedTranslate.x,\n y: scrollAdjustedTranslate.y,\n },\n over,\n };\n\n unstable_batchedUpdates(() => {\n setOver(over);\n onDragOver?.(event);\n dispatchMonitorEvent({type: 'onDragOver', event});\n });\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [overId]\n );\n\n useIsomorphicLayoutEffect(() => {\n sensorContext.current = {\n activatorEvent,\n active,\n activeNode,\n collisionRect,\n collisions,\n droppableRects,\n draggableNodes,\n draggingNode,\n draggingNodeRect,\n droppableContainers,\n over,\n scrollableAncestors,\n scrollAdjustedTranslate,\n };\n\n activeRects.current = {\n initial: draggingNodeRect,\n translated: collisionRect,\n };\n }, [\n active,\n activeNode,\n collisions,\n collisionRect,\n draggableNodes,\n draggingNode,\n draggingNodeRect,\n droppableRects,\n droppableContainers,\n over,\n scrollableAncestors,\n scrollAdjustedTranslate,\n ]);\n\n useAutoScroller({\n ...autoScrollOptions,\n delta: translate,\n draggingRect: collisionRect,\n pointerCoordinates,\n scrollableAncestors,\n scrollableAncestorRects,\n });\n\n const publicContext = useMemo(() => {\n const context: PublicContextDescriptor = {\n active,\n activeNode,\n activeNodeRect,\n activatorEvent,\n collisions,\n containerNodeRect,\n dragOverlay,\n draggableNodes,\n droppableContainers,\n droppableRects,\n over,\n measureDroppableContainers,\n scrollableAncestors,\n scrollableAncestorRects,\n measuringConfiguration,\n measuringScheduled,\n windowRect,\n };\n\n return context;\n }, [\n active,\n activeNode,\n activeNodeRect,\n activatorEvent,\n collisions,\n containerNodeRect,\n dragOverlay,\n draggableNodes,\n droppableContainers,\n droppableRects,\n over,\n measureDroppableContainers,\n scrollableAncestors,\n scrollableAncestorRects,\n measuringConfiguration,\n measuringScheduled,\n windowRect,\n ]);\n\n const internalContext = useMemo(() => {\n const context: InternalContextDescriptor = {\n activatorEvent,\n activators,\n active,\n activeNodeRect,\n ariaDescribedById: {\n draggable: draggableDescribedById,\n },\n dispatch,\n draggableNodes,\n over,\n measureDroppableContainers,\n };\n\n return context;\n }, [\n activatorEvent,\n activators,\n active,\n activeNodeRect,\n dispatch,\n draggableDescribedById,\n draggableNodes,\n over,\n measureDroppableContainers,\n ]);\n\n return (\n \n \n \n \n {children}\n \n \n \n \n \n \n );\n\n function getAutoScrollerOptions() {\n const activeSensorDisablesAutoscroll =\n activeSensor?.autoScrollEnabled === false;\n const autoScrollGloballyDisabled =\n typeof autoScroll === 'object'\n ? autoScroll.enabled === false\n : autoScroll === false;\n const enabled =\n isInitialized &&\n !activeSensorDisablesAutoscroll &&\n !autoScrollGloballyDisabled;\n\n if (typeof autoScroll === 'object') {\n return {\n ...autoScroll,\n enabled,\n };\n }\n\n return {enabled};\n }\n});\n","import {useCallback, useState} from 'react';\n\nimport type {DndMonitorListener, DndMonitorEvent} from './types';\n\nexport function useDndMonitorProvider() {\n const [listeners] = useState(() => new Set());\n\n const registerListener = useCallback(\n (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n [listeners]\n );\n\n const dispatch = useCallback(\n ({type, event}: DndMonitorEvent) => {\n listeners.forEach((listener) => listener[type]?.(event as any));\n },\n [listeners]\n );\n\n return [dispatch, registerListener] as const;\n}\n","import {useMemo} from 'react';\nimport type {DeepRequired} from '@dnd-kit/utilities';\n\nimport {defaultMeasuringConfiguration} from '../defaults';\nimport type {MeasuringConfiguration} from '../types';\n\nexport function useMeasuringConfiguration(\n config: MeasuringConfiguration | undefined\n): DeepRequired {\n return useMemo(\n () => ({\n draggable: {\n ...defaultMeasuringConfiguration.draggable,\n ...config?.draggable,\n },\n droppable: {\n ...defaultMeasuringConfiguration.droppable,\n ...config?.droppable,\n },\n dragOverlay: {\n ...defaultMeasuringConfiguration.dragOverlay,\n ...config?.dragOverlay,\n },\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [config?.draggable, config?.droppable, config?.dragOverlay]\n );\n}\n","import {useLazyMemo} from '@dnd-kit/utilities';\n\nimport type {DraggableNode, DraggableNodes} from '../../store';\nimport type {UniqueIdentifier} from '../../types';\n\nexport function useCachedNode(\n draggableNodes: DraggableNodes,\n id: UniqueIdentifier | null\n): DraggableNode['node']['current'] {\n const draggableNode = id != null ? draggableNodes.get(id) : undefined;\n const node = draggableNode ? draggableNode.node.current : null;\n\n return useLazyMemo(\n (cachedNode) => {\n if (id == null) {\n return null;\n }\n\n // In some cases, the draggable node can unmount while dragging\n // This is the case for virtualized lists. In those situations,\n // we fall back to the last known value for that node.\n return node ?? cachedNode ?? null;\n },\n [node, id]\n );\n}\n","import type {ClientRect} from '../../types';\nimport {useInitialValue} from './useInitialValue';\n\nexport function useInitialRect(\n node: HTMLElement | null,\n measure: (node: HTMLElement) => ClientRect\n) {\n return useInitialValue(node, measure);\n}\n","import {useRef} from 'react';\nimport {useIsomorphicLayoutEffect} from '@dnd-kit/utilities';\n\nimport {getRectDelta} from '../../../utilities/rect';\nimport {getFirstScrollableAncestor} from '../../../utilities/scroll';\nimport type {ClientRect} from '../../../types';\nimport type {DraggableNode} from '../../../store';\nimport type {MeasuringFunction} from '../types';\n\ninterface Options {\n activeNode: DraggableNode | null | undefined;\n config: boolean | {x: boolean; y: boolean} | undefined;\n initialRect: ClientRect | null;\n measure: MeasuringFunction;\n}\n\nexport function useLayoutShiftScrollCompensation({\n activeNode,\n measure,\n initialRect,\n config = true,\n}: Options) {\n const initialized = useRef(false);\n const {x, y} = typeof config === 'boolean' ? {x: config, y: config} : config;\n\n useIsomorphicLayoutEffect(() => {\n const disabled = !x && !y;\n\n if (disabled || !activeNode) {\n initialized.current = false;\n return;\n }\n\n if (initialized.current || !initialRect) {\n // Return early if layout shift scroll compensation was already attempted\n // or if there is no initialRect to compare to.\n return;\n }\n\n // Get the most up to date node ref for the active draggable\n const node = activeNode?.node.current;\n\n if (!node || node.isConnected === false) {\n // Return early if there is no attached node ref or if the node is\n // disconnected from the document.\n return;\n }\n\n const rect = measure(node);\n const rectDelta = getRectDelta(rect, initialRect);\n\n if (!x) {\n rectDelta.x = 0;\n }\n\n if (!y) {\n rectDelta.y = 0;\n }\n\n // Only perform layout shift scroll compensation once\n initialized.current = true;\n\n if (Math.abs(rectDelta.x) > 0 || Math.abs(rectDelta.y) > 0) {\n const firstScrollableAncestor = getFirstScrollableAncestor(node);\n\n if (firstScrollableAncestor) {\n firstScrollableAncestor.scrollBy({\n top: rectDelta.y,\n left: rectDelta.x,\n });\n }\n }\n }, [activeNode, x, y, initialRect, measure]);\n}\n","import {useMemo, useCallback, useState} from 'react';\nimport {isHTMLElement, useNodeRef} from '@dnd-kit/utilities';\n\nimport {useResizeObserver} from './useResizeObserver';\nimport {getMeasurableNode} from '../../utilities/nodes';\nimport type {PublicContextDescriptor} from '../../store';\nimport type {ClientRect} from '../../types';\n\ninterface Arguments {\n measure(element: HTMLElement): ClientRect;\n}\n\nexport function useDragOverlayMeasuring({\n measure,\n}: Arguments): PublicContextDescriptor['dragOverlay'] {\n const [rect, setRect] = useState(null);\n const handleResize = useCallback(\n (entries: ResizeObserverEntry[]) => {\n for (const {target} of entries) {\n if (isHTMLElement(target)) {\n setRect((rect) => {\n const newRect = measure(target);\n\n return rect\n ? {...rect, width: newRect.width, height: newRect.height}\n : newRect;\n });\n break;\n }\n }\n },\n [measure]\n );\n const resizeObserver = useResizeObserver({callback: handleResize});\n const handleNodeChange = useCallback(\n (element) => {\n const node = getMeasurableNode(element);\n\n resizeObserver?.disconnect();\n\n if (node) {\n resizeObserver?.observe(node);\n }\n\n setRect(node ? measure(node) : null);\n },\n [measure, resizeObserver]\n );\n const [nodeRef, setRef] = useNodeRef(handleNodeChange);\n\n return useMemo(\n () => ({\n nodeRef,\n rect,\n setRef,\n }),\n [rect, nodeRef, setRef]\n );\n}\n","import type {ClientRect} from '../../types';\nimport {getRectDelta} from '../../utilities';\n\nimport {useInitialValue} from './useInitialValue';\n\nexport function useRectDelta(rect: ClientRect | null) {\n const initialRect = useInitialValue(rect);\n\n return getRectDelta(rect, initialRect);\n}\n","import {useState, useCallback, useMemo, useRef, useEffect} from 'react';\nimport {add} from '@dnd-kit/utilities';\n\nimport {\n defaultCoordinates,\n getScrollableElement,\n getScrollCoordinates,\n getScrollOffsets,\n} from '../../utilities';\nimport type {Coordinates} from '../../types';\n\ntype ScrollCoordinates = Map;\n\nexport function useScrollOffsets(elements: Element[]): Coordinates {\n const [\n scrollCoordinates,\n setScrollCoordinates,\n ] = useState(null);\n const prevElements = useRef(elements);\n\n // To-do: Throttle the handleScroll callback\n const handleScroll = useCallback((event: Event) => {\n const scrollingElement = getScrollableElement(event.target);\n\n if (!scrollingElement) {\n return;\n }\n\n setScrollCoordinates((scrollCoordinates) => {\n if (!scrollCoordinates) {\n return null;\n }\n\n scrollCoordinates.set(\n scrollingElement,\n getScrollCoordinates(scrollingElement)\n );\n\n return new Map(scrollCoordinates);\n });\n }, []);\n\n useEffect(() => {\n const previousElements = prevElements.current;\n\n if (elements !== previousElements) {\n cleanup(previousElements);\n\n const entries = elements\n .map((element) => {\n const scrollableElement = getScrollableElement(element);\n\n if (scrollableElement) {\n scrollableElement.addEventListener('scroll', handleScroll, {\n passive: true,\n });\n\n return [\n scrollableElement,\n getScrollCoordinates(scrollableElement),\n ] as const;\n }\n\n return null;\n })\n .filter(\n (\n entry\n ): entry is [\n HTMLElement | (Window & typeof globalThis),\n Coordinates\n ] => entry != null\n );\n\n setScrollCoordinates(entries.length ? new Map(entries) : null);\n\n prevElements.current = elements;\n }\n\n return () => {\n cleanup(elements);\n cleanup(previousElements);\n };\n\n function cleanup(elements: Element[]) {\n elements.forEach((element) => {\n const scrollableElement = getScrollableElement(element);\n\n scrollableElement?.removeEventListener('scroll', handleScroll);\n });\n }\n }, [handleScroll, elements]);\n\n return useMemo(() => {\n if (elements.length) {\n return scrollCoordinates\n ? Array.from(scrollCoordinates.values()).reduce(\n (acc, coordinates) => add(acc, coordinates),\n defaultCoordinates\n )\n : getScrollOffsets(elements);\n }\n\n return defaultCoordinates;\n }, [elements, scrollCoordinates]);\n}\n","import type {Transform} from '@dnd-kit/utilities';\nimport type {ClientRect} from '../../types';\n\nexport function adjustScale(\n transform: Transform,\n rect1: ClientRect | null,\n rect2: ClientRect | null\n): Transform {\n return {\n ...transform,\n scaleX: rect1 && rect2 ? rect1.width / rect2.width : 1,\n scaleY: rect1 && rect2 ? rect1.height / rect2.height : 1,\n };\n}\n","import {useMemo} from 'react';\n\nimport type {SensorActivatorFunction, SensorDescriptor} from '../../sensors';\nimport type {\n SyntheticListener,\n SyntheticListeners,\n} from './useSyntheticListeners';\n\nexport function useCombineActivators(\n sensors: SensorDescriptor[],\n getSyntheticHandler: (\n handler: SensorActivatorFunction,\n sensor: SensorDescriptor\n ) => SyntheticListener['handler']\n): SyntheticListeners {\n return useMemo(\n () =>\n sensors.reduce((accumulator, sensor) => {\n const {sensor: Sensor} = sensor;\n\n const sensorActivators = Sensor.activators.map((activator) => ({\n eventName: activator.eventName,\n handler: getSyntheticHandler(activator.handler, sensor),\n }));\n\n return [...accumulator, ...sensorActivators];\n }, []),\n [sensors, getSyntheticHandler]\n );\n}\n","import {useEffect} from 'react';\nimport {canUseDOM} from '@dnd-kit/utilities';\n\nimport type {SensorDescriptor} from '../../sensors';\n\nexport function useSensorSetup(sensors: SensorDescriptor[]) {\n useEffect(\n () => {\n if (!canUseDOM) {\n return;\n }\n\n const teardownFns = sensors.map(({sensor}) => sensor.setup?.());\n\n return () => {\n for (const teardown of teardownFns) {\n teardown?.();\n }\n };\n },\n // TO-DO: Sensors length could theoretically change which would not be a valid dependency\n // eslint-disable-next-line react-hooks/exhaustive-deps\n sensors.map(({sensor}) => sensor)\n );\n}\n","import {createContext, useContext, useMemo} from 'react';\nimport {\n Transform,\n useNodeRef,\n useIsomorphicLayoutEffect,\n useLatestValue,\n useUniqueId,\n} from '@dnd-kit/utilities';\n\nimport {InternalContext, Data} from '../store';\nimport type {UniqueIdentifier} from '../types';\nimport {ActiveDraggableContext} from '../components/DndContext';\nimport {useSyntheticListeners, SyntheticListenerMap} from './utilities';\n\nexport interface UseDraggableArguments {\n id: UniqueIdentifier;\n data?: Data;\n disabled?: boolean;\n attributes?: {\n role?: string;\n roleDescription?: string;\n tabIndex?: number;\n };\n}\n\nexport interface DraggableAttributes {\n role: string;\n tabIndex: number;\n 'aria-disabled': boolean;\n 'aria-pressed': boolean | undefined;\n 'aria-roledescription': string;\n 'aria-describedby': string;\n}\n\nexport type DraggableSyntheticListeners = SyntheticListenerMap | undefined;\n\nconst NullContext = createContext(null);\n\nconst defaultRole = 'button';\n\nconst ID_PREFIX = 'Draggable';\n\nexport function useDraggable({\n id,\n data,\n disabled = false,\n attributes,\n}: UseDraggableArguments) {\n const key = useUniqueId(ID_PREFIX);\n const {\n activators,\n activatorEvent,\n active,\n activeNodeRect,\n ariaDescribedById,\n draggableNodes,\n over,\n } = useContext(InternalContext);\n const {\n role = defaultRole,\n roleDescription = 'draggable',\n tabIndex = 0,\n } = attributes ?? {};\n const isDragging = active?.id === id;\n const transform: Transform | null = useContext(\n isDragging ? ActiveDraggableContext : NullContext\n );\n const [node, setNodeRef] = useNodeRef();\n const [activatorNode, setActivatorNodeRef] = useNodeRef();\n const listeners = useSyntheticListeners(activators, id);\n const dataRef = useLatestValue(data);\n\n useIsomorphicLayoutEffect(\n () => {\n draggableNodes.set(id, {id, key, node, activatorNode, data: dataRef});\n\n return () => {\n const node = draggableNodes.get(id);\n\n if (node && node.key === key) {\n draggableNodes.delete(id);\n }\n };\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [draggableNodes, id]\n );\n\n const memoizedAttributes: DraggableAttributes = useMemo(\n () => ({\n role,\n tabIndex,\n 'aria-disabled': disabled,\n 'aria-pressed': isDragging && role === defaultRole ? true : undefined,\n 'aria-roledescription': roleDescription,\n 'aria-describedby': ariaDescribedById.draggable,\n }),\n [\n disabled,\n role,\n tabIndex,\n isDragging,\n roleDescription,\n ariaDescribedById.draggable,\n ]\n );\n\n return {\n active,\n activatorEvent,\n activeNodeRect,\n attributes: memoizedAttributes,\n isDragging,\n listeners: disabled ? undefined : listeners,\n node,\n over,\n setNodeRef,\n setActivatorNodeRef,\n transform,\n };\n}\n","import {useMemo} from 'react';\n\nimport type {SyntheticEventName, UniqueIdentifier} from '../../types';\n\nexport type SyntheticListener = {\n eventName: SyntheticEventName;\n handler: (event: React.SyntheticEvent, id: UniqueIdentifier) => void;\n};\n\nexport type SyntheticListeners = SyntheticListener[];\n\nexport type SyntheticListenerMap = Record;\n\nexport function useSyntheticListeners(\n listeners: SyntheticListeners,\n id: UniqueIdentifier\n): SyntheticListenerMap {\n return useMemo(() => {\n return listeners.reduce(\n (acc, {eventName, handler}) => {\n acc[eventName] = (event: React.SyntheticEvent) => {\n handler(event, id);\n };\n\n return acc;\n },\n {} as SyntheticListenerMap\n );\n }, [listeners, id]);\n}\n","import {ContextType, useContext} from 'react';\nimport {PublicContext} from '../store';\n\nexport function useDndContext() {\n return useContext(PublicContext);\n}\n\nexport type UseDndContextReturnValue = ContextType;\n","import {useCallback, useContext, useEffect, useRef} from 'react';\nimport {useLatestValue, useNodeRef, useUniqueId} from '@dnd-kit/utilities';\n\nimport {InternalContext, Action, Data} from '../store';\nimport type {ClientRect, UniqueIdentifier} from '../types';\n\nimport {useResizeObserver} from './utilities';\n\ninterface ResizeObserverConfig {\n /** Whether the ResizeObserver should be disabled entirely */\n disabled?: boolean;\n /** Resize events may affect the layout and position of other droppable containers.\n * Specify an array of `UniqueIdentifier` of droppable containers that should also be re-measured\n * when this droppable container resizes. Specifying an empty array re-measures all droppable containers.\n */\n updateMeasurementsFor?: UniqueIdentifier[];\n /** Represents the debounce timeout between when resize events are observed and when elements are re-measured */\n timeout?: number;\n}\n\nexport interface UseDroppableArguments {\n id: UniqueIdentifier;\n disabled?: boolean;\n data?: Data;\n resizeObserverConfig?: ResizeObserverConfig;\n}\n\nconst ID_PREFIX = 'Droppable';\n\nconst defaultResizeObserverConfig = {\n timeout: 25,\n};\n\nexport function useDroppable({\n data,\n disabled = false,\n id,\n resizeObserverConfig,\n}: UseDroppableArguments) {\n const key = useUniqueId(ID_PREFIX);\n const {active, dispatch, over, measureDroppableContainers} =\n useContext(InternalContext);\n const previous = useRef({disabled});\n const resizeObserverConnected = useRef(false);\n const rect = useRef(null);\n const callbackId = useRef(null);\n const {\n disabled: resizeObserverDisabled,\n updateMeasurementsFor,\n timeout: resizeObserverTimeout,\n } = {\n ...defaultResizeObserverConfig,\n ...resizeObserverConfig,\n };\n const ids = useLatestValue(updateMeasurementsFor ?? id);\n const handleResize = useCallback(\n () => {\n if (!resizeObserverConnected.current) {\n // ResizeObserver invokes the `handleResize` callback as soon as `observe` is called,\n // assuming the element is rendered and displayed.\n resizeObserverConnected.current = true;\n return;\n }\n\n if (callbackId.current != null) {\n clearTimeout(callbackId.current);\n }\n\n callbackId.current = setTimeout(() => {\n measureDroppableContainers(\n Array.isArray(ids.current) ? ids.current : [ids.current]\n );\n callbackId.current = null;\n }, resizeObserverTimeout);\n },\n //eslint-disable-next-line react-hooks/exhaustive-deps\n [resizeObserverTimeout]\n );\n const resizeObserver = useResizeObserver({\n callback: handleResize,\n disabled: resizeObserverDisabled || !active,\n });\n const handleNodeChange = useCallback(\n (newElement: HTMLElement | null, previousElement: HTMLElement | null) => {\n if (!resizeObserver) {\n return;\n }\n\n if (previousElement) {\n resizeObserver.unobserve(previousElement);\n resizeObserverConnected.current = false;\n }\n\n if (newElement) {\n resizeObserver.observe(newElement);\n }\n },\n [resizeObserver]\n );\n const [nodeRef, setNodeRef] = useNodeRef(handleNodeChange);\n const dataRef = useLatestValue(data);\n\n useEffect(() => {\n if (!resizeObserver || !nodeRef.current) {\n return;\n }\n\n resizeObserver.disconnect();\n resizeObserverConnected.current = false;\n resizeObserver.observe(nodeRef.current);\n }, [nodeRef, resizeObserver]);\n\n useEffect(\n () => {\n dispatch({\n type: Action.RegisterDroppable,\n element: {\n id,\n key,\n disabled,\n node: nodeRef,\n rect,\n data: dataRef,\n },\n });\n\n return () =>\n dispatch({\n type: Action.UnregisterDroppable,\n key,\n id,\n });\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [id]\n );\n\n useEffect(() => {\n if (disabled !== previous.current.disabled) {\n dispatch({\n type: Action.SetDroppableDisabled,\n id,\n key,\n disabled,\n });\n\n previous.current.disabled = disabled;\n }\n }, [id, key, disabled, dispatch]);\n\n return {\n active,\n rect,\n isOver: over?.id === id,\n node: nodeRef,\n over,\n setNodeRef,\n };\n}\n","import React, {cloneElement, useState} from 'react';\nimport {useIsomorphicLayoutEffect, usePrevious} from '@dnd-kit/utilities';\n\nimport type {UniqueIdentifier} from '../../../../types';\n\nexport type Animation = (\n key: UniqueIdentifier,\n node: HTMLElement\n) => Promise | void;\n\nexport interface Props {\n animation: Animation;\n children: React.ReactElement | null;\n}\n\nexport function AnimationManager({animation, children}: Props) {\n const [\n clonedChildren,\n setClonedChildren,\n ] = useState(null);\n const [element, setElement] = useState(null);\n const previousChildren = usePrevious(children);\n\n if (!children && !clonedChildren && previousChildren) {\n setClonedChildren(previousChildren);\n }\n\n useIsomorphicLayoutEffect(() => {\n if (!element) {\n return;\n }\n\n const key = clonedChildren?.key;\n const id = clonedChildren?.props.id;\n\n if (key == null || id == null) {\n setClonedChildren(null);\n return;\n }\n\n Promise.resolve(animation(id, element)).then(() => {\n setClonedChildren(null);\n });\n }, [animation, clonedChildren, element]);\n\n return (\n <>\n {children}\n {clonedChildren ? cloneElement(clonedChildren, {ref: setElement}) : null}\n \n );\n}\n","import React from 'react';\nimport type {Transform} from '@dnd-kit/utilities';\n\nimport {InternalContext, defaultInternalContext} from '../../../../store';\nimport {ActiveDraggableContext} from '../../../DndContext';\n\ninterface Props {\n children: React.ReactNode;\n}\n\nconst defaultTransform: Transform = {\n x: 0,\n y: 0,\n scaleX: 1,\n scaleY: 1,\n};\n\nexport function NullifiedContextProvider({children}: Props) {\n return (\n \n \n {children}\n \n \n );\n}\n","import React, {forwardRef} from 'react';\nimport {CSS, isKeyboardEvent} from '@dnd-kit/utilities';\n\nimport type {Transform} from '@dnd-kit/utilities';\n\nimport {getRelativeTransformOrigin} from '../../../../utilities';\nimport type {ClientRect, UniqueIdentifier} from '../../../../types';\n\ntype TransitionGetter = (\n activatorEvent: Event | null\n) => React.CSSProperties['transition'] | undefined;\n\nexport interface Props {\n as: keyof JSX.IntrinsicElements;\n activatorEvent: Event | null;\n adjustScale?: boolean;\n children?: React.ReactNode;\n className?: string;\n id: UniqueIdentifier;\n rect: ClientRect | null;\n style?: React.CSSProperties;\n transition?: string | TransitionGetter;\n transform: Transform;\n}\n\nconst baseStyles: React.CSSProperties = {\n position: 'fixed',\n touchAction: 'none',\n};\n\nconst defaultTransition: TransitionGetter = (activatorEvent) => {\n const isKeyboardActivator = isKeyboardEvent(activatorEvent);\n\n return isKeyboardActivator ? 'transform 250ms ease' : undefined;\n};\n\nexport const PositionedOverlay = forwardRef(\n (\n {\n as,\n activatorEvent,\n adjustScale,\n children,\n className,\n rect,\n style,\n transform,\n transition = defaultTransition,\n },\n ref\n ) => {\n if (!rect) {\n return null;\n }\n\n const scaleAdjustedTransform = adjustScale\n ? transform\n : {\n ...transform,\n scaleX: 1,\n scaleY: 1,\n };\n const styles: React.CSSProperties | undefined = {\n ...baseStyles,\n width: rect.width,\n height: rect.height,\n top: rect.top,\n left: rect.left,\n transform: CSS.Transform.toString(scaleAdjustedTransform),\n transformOrigin:\n adjustScale && activatorEvent\n ? getRelativeTransformOrigin(\n activatorEvent as MouseEvent | KeyboardEvent | TouchEvent,\n rect\n )\n : undefined,\n transition:\n typeof transition === 'function'\n ? transition(activatorEvent)\n : transition,\n ...style,\n };\n\n return React.createElement(\n as,\n {\n className,\n style: styles,\n ref,\n },\n children\n );\n }\n);\n","import {CSS, useEvent, getWindow} from '@dnd-kit/utilities';\nimport type {DeepRequired, Transform} from '@dnd-kit/utilities';\n\nimport type {\n Active,\n DraggableNode,\n DraggableNodes,\n DroppableContainers,\n} from '../../../store';\nimport type {ClientRect, UniqueIdentifier} from '../../../types';\nimport {getMeasurableNode} from '../../../utilities/nodes';\nimport {scrollIntoViewIfNeeded} from '../../../utilities/scroll';\nimport {parseTransform} from '../../../utilities/transform';\nimport type {MeasuringConfiguration} from '../../DndContext';\nimport type {Animation} from '../components';\n\ninterface SharedParameters {\n active: {\n id: UniqueIdentifier;\n data: Active['data'];\n node: HTMLElement;\n rect: ClientRect;\n };\n dragOverlay: {\n node: HTMLElement;\n rect: ClientRect;\n };\n draggableNodes: DraggableNodes;\n droppableContainers: DroppableContainers;\n measuringConfiguration: DeepRequired;\n}\n\nexport interface KeyframeResolverParameters extends SharedParameters {\n transform: {\n initial: Transform;\n final: Transform;\n };\n}\n\nexport type KeyframeResolver = (\n parameters: KeyframeResolverParameters\n) => Keyframe[];\n\nexport interface DropAnimationOptions {\n keyframes?: KeyframeResolver;\n duration?: number;\n easing?: string;\n sideEffects?: DropAnimationSideEffects | null;\n}\n\nexport type DropAnimation = DropAnimationFunction | DropAnimationOptions;\n\ninterface Arguments {\n draggableNodes: DraggableNodes;\n droppableContainers: DroppableContainers;\n measuringConfiguration: DeepRequired;\n config?: DropAnimation | null;\n}\n\nexport interface DropAnimationFunctionArguments extends SharedParameters {\n transform: Transform;\n}\n\nexport type DropAnimationFunction = (\n args: DropAnimationFunctionArguments\n) => Promise | void;\n\ntype CleanupFunction = () => void;\n\nexport interface DropAnimationSideEffectsParameters extends SharedParameters {}\n\nexport type DropAnimationSideEffects = (\n parameters: DropAnimationSideEffectsParameters\n) => CleanupFunction | void;\n\ntype ExtractStringProperties = {\n [K in keyof T]?: T[K] extends string ? string : never;\n};\n\ntype Styles = ExtractStringProperties;\n\ninterface DefaultDropAnimationSideEffectsOptions {\n className?: {\n active?: string;\n dragOverlay?: string;\n };\n styles?: {\n active?: Styles;\n dragOverlay?: Styles;\n };\n}\n\nexport const defaultDropAnimationSideEffects = (\n options: DefaultDropAnimationSideEffectsOptions\n): DropAnimationSideEffects => ({active, dragOverlay}) => {\n const originalStyles: Record = {};\n const {styles, className} = options;\n\n if (styles?.active) {\n for (const [key, value] of Object.entries(styles.active)) {\n if (value === undefined) {\n continue;\n }\n\n originalStyles[key] = active.node.style.getPropertyValue(key);\n active.node.style.setProperty(key, value);\n }\n }\n\n if (styles?.dragOverlay) {\n for (const [key, value] of Object.entries(styles.dragOverlay)) {\n if (value === undefined) {\n continue;\n }\n\n dragOverlay.node.style.setProperty(key, value);\n }\n }\n\n if (className?.active) {\n active.node.classList.add(className.active);\n }\n\n if (className?.dragOverlay) {\n dragOverlay.node.classList.add(className.dragOverlay);\n }\n\n return function cleanup() {\n for (const [key, value] of Object.entries(originalStyles)) {\n active.node.style.setProperty(key, value);\n }\n\n if (className?.active) {\n active.node.classList.remove(className.active);\n }\n };\n};\n\nconst defaultKeyframeResolver: KeyframeResolver = ({\n transform: {initial, final},\n}) => [\n {\n transform: CSS.Transform.toString(initial),\n },\n {\n transform: CSS.Transform.toString(final),\n },\n];\n\nexport const defaultDropAnimationConfiguration: Required = {\n duration: 250,\n easing: 'ease',\n keyframes: defaultKeyframeResolver,\n sideEffects: defaultDropAnimationSideEffects({\n styles: {\n active: {\n opacity: '0',\n },\n },\n }),\n};\n\nexport function useDropAnimation({\n config,\n draggableNodes,\n droppableContainers,\n measuringConfiguration,\n}: Arguments) {\n return useEvent((id, node) => {\n if (config === null) {\n return;\n }\n\n const activeDraggable: DraggableNode | undefined = draggableNodes.get(id);\n\n if (!activeDraggable) {\n return;\n }\n\n const activeNode = activeDraggable.node.current;\n\n if (!activeNode) {\n return;\n }\n\n const measurableNode = getMeasurableNode(node);\n\n if (!measurableNode) {\n return;\n }\n const {transform} = getWindow(node).getComputedStyle(node);\n const parsedTransform = parseTransform(transform);\n\n if (!parsedTransform) {\n return;\n }\n\n const animation: DropAnimationFunction =\n typeof config === 'function'\n ? config\n : createDefaultDropAnimation(config);\n\n scrollIntoViewIfNeeded(\n activeNode,\n measuringConfiguration.draggable.measure\n );\n\n return animation({\n active: {\n id,\n data: activeDraggable.data,\n node: activeNode,\n rect: measuringConfiguration.draggable.measure(activeNode),\n },\n draggableNodes,\n dragOverlay: {\n node,\n rect: measuringConfiguration.dragOverlay.measure(measurableNode),\n },\n droppableContainers,\n measuringConfiguration,\n transform: parsedTransform,\n });\n });\n}\n\nfunction createDefaultDropAnimation(\n options: DropAnimationOptions | undefined\n): DropAnimationFunction {\n const {duration, easing, sideEffects, keyframes} = {\n ...defaultDropAnimationConfiguration,\n ...options,\n };\n\n return ({active, dragOverlay, transform, ...rest}) => {\n if (!duration) {\n // Do not animate if animation duration is zero.\n return;\n }\n\n const delta = {\n x: dragOverlay.rect.left - active.rect.left,\n y: dragOverlay.rect.top - active.rect.top,\n };\n\n const scale = {\n scaleX:\n transform.scaleX !== 1\n ? (active.rect.width * transform.scaleX) / dragOverlay.rect.width\n : 1,\n scaleY:\n transform.scaleY !== 1\n ? (active.rect.height * transform.scaleY) / dragOverlay.rect.height\n : 1,\n };\n const finalTransform = {\n x: transform.x - delta.x,\n y: transform.y - delta.y,\n ...scale,\n };\n\n const animationKeyframes = keyframes({\n ...rest,\n active,\n dragOverlay,\n transform: {initial: transform, final: finalTransform},\n });\n\n const [firstKeyframe] = animationKeyframes;\n const lastKeyframe = animationKeyframes[animationKeyframes.length - 1];\n\n if (JSON.stringify(firstKeyframe) === JSON.stringify(lastKeyframe)) {\n // The start and end keyframes are the same, infer that there is no animation needed.\n return;\n }\n\n const cleanup = sideEffects?.({active, dragOverlay, ...rest});\n const animation = dragOverlay.node.animate(animationKeyframes, {\n duration,\n easing,\n fill: 'forwards',\n });\n\n return new Promise((resolve) => {\n animation.onfinish = () => {\n cleanup?.();\n resolve();\n };\n });\n };\n}\n","import {useMemo} from 'react';\n\nimport type {UniqueIdentifier} from '../../../types';\n\nlet key = 0;\n\nexport function useKey(id: UniqueIdentifier | undefined) {\n return useMemo(() => {\n if (id == null) {\n return;\n }\n\n key++;\n return key;\n }, [id]);\n}\n","import React, {useContext} from 'react';\n\nimport {applyModifiers, Modifiers} from '../../modifiers';\nimport {ActiveDraggableContext} from '../DndContext';\nimport {useDndContext} from '../../hooks';\nimport {useInitialValue} from '../../hooks/utilities';\n\nimport {\n AnimationManager,\n NullifiedContextProvider,\n PositionedOverlay,\n} from './components';\nimport type {PositionedOverlayProps} from './components';\n\nimport {useDropAnimation, useKey} from './hooks';\nimport type {DropAnimation} from './hooks';\n\nexport interface Props\n extends Pick<\n PositionedOverlayProps,\n 'adjustScale' | 'children' | 'className' | 'style' | 'transition'\n > {\n dropAnimation?: DropAnimation | null | undefined;\n modifiers?: Modifiers;\n wrapperElement?: keyof JSX.IntrinsicElements;\n zIndex?: number;\n}\n\nexport const DragOverlay = React.memo(\n ({\n adjustScale = false,\n children,\n dropAnimation: dropAnimationConfig,\n style,\n transition,\n modifiers,\n wrapperElement = 'div',\n className,\n zIndex = 999,\n }: Props) => {\n const {\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggableNodes,\n droppableContainers,\n dragOverlay,\n over,\n measuringConfiguration,\n scrollableAncestors,\n scrollableAncestorRects,\n windowRect,\n } = useDndContext();\n const transform = useContext(ActiveDraggableContext);\n const key = useKey(active?.id);\n const modifiedTransform = applyModifiers(modifiers, {\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggingNodeRect: dragOverlay.rect,\n over,\n overlayNodeRect: dragOverlay.rect,\n scrollableAncestors,\n scrollableAncestorRects,\n transform,\n windowRect,\n });\n const initialRect = useInitialValue(activeNodeRect);\n const dropAnimation = useDropAnimation({\n config: dropAnimationConfig,\n draggableNodes,\n droppableContainers,\n measuringConfiguration,\n });\n // We need to wait for the active node to be measured before connecting the drag overlay ref\n // otherwise collisions can be computed against a mispositioned drag overlay\n const ref = initialRect ? dragOverlay.setRef : undefined;\n\n return (\n \n \n {active && key ? (\n \n {children}\n \n ) : null}\n \n \n );\n }\n);\n","/**\n * Move an array item to a different position. Returns a new array with the item moved to the new position.\n */\nexport function arrayMove(array: T[], from: number, to: number): T[] {\n const newArray = array.slice();\n newArray.splice(\n to < 0 ? newArray.length + to : to,\n 0,\n newArray.splice(from, 1)[0]\n );\n\n return newArray;\n}\n","import type {\n ClientRect,\n UniqueIdentifier,\n UseDndContextReturnValue,\n} from '@dnd-kit/core';\n\nexport function getSortedRects(\n items: UniqueIdentifier[],\n rects: UseDndContextReturnValue['droppableRects']\n) {\n return items.reduce((accumulator, id, index) => {\n const rect = rects.get(id);\n\n if (rect) {\n accumulator[index] = rect;\n }\n\n return accumulator;\n }, Array(items.length));\n}\n","export function isValidIndex(index: number | null): index is number {\n return index !== null && index >= 0;\n}\n","import {arrayMove} from '../utilities';\nimport type {SortingStrategy} from '../types';\n\nexport const rectSortingStrategy: SortingStrategy = ({\n rects,\n activeIndex,\n overIndex,\n index,\n}) => {\n const newRects = arrayMove(rects, overIndex, activeIndex);\n\n const oldRect = rects[index];\n const newRect = newRects[index];\n\n if (!newRect || !oldRect) {\n return null;\n }\n\n return {\n x: newRect.left - oldRect.left,\n y: newRect.top - oldRect.top,\n scaleX: newRect.width / oldRect.width,\n scaleY: newRect.height / oldRect.height,\n };\n};\n","import React, {useEffect, useMemo, useRef} from 'react';\nimport {useDndContext, ClientRect, UniqueIdentifier} from '@dnd-kit/core';\nimport {useIsomorphicLayoutEffect, useUniqueId} from '@dnd-kit/utilities';\n\nimport type {Disabled, SortingStrategy} from '../types';\nimport {getSortedRects, itemsEqual, normalizeDisabled} from '../utilities';\nimport {rectSortingStrategy} from '../strategies';\n\nexport interface Props {\n children: React.ReactNode;\n items: (UniqueIdentifier | {id: UniqueIdentifier})[];\n strategy?: SortingStrategy;\n id?: string;\n disabled?: boolean | Disabled;\n}\n\nconst ID_PREFIX = 'Sortable';\n\ninterface ContextDescriptor {\n activeIndex: number;\n containerId: string;\n disabled: Disabled;\n disableTransforms: boolean;\n items: UniqueIdentifier[];\n overIndex: number;\n useDragOverlay: boolean;\n sortedRects: ClientRect[];\n strategy: SortingStrategy;\n}\n\nexport const Context = React.createContext({\n activeIndex: -1,\n containerId: ID_PREFIX,\n disableTransforms: false,\n items: [],\n overIndex: -1,\n useDragOverlay: false,\n sortedRects: [],\n strategy: rectSortingStrategy,\n disabled: {\n draggable: false,\n droppable: false,\n },\n});\n\nexport function SortableContext({\n children,\n id,\n items: userDefinedItems,\n strategy = rectSortingStrategy,\n disabled: disabledProp = false,\n}: Props) {\n const {\n active,\n dragOverlay,\n droppableRects,\n over,\n measureDroppableContainers,\n } = useDndContext();\n const containerId = useUniqueId(ID_PREFIX, id);\n const useDragOverlay = Boolean(dragOverlay.rect !== null);\n const items = useMemo(\n () =>\n userDefinedItems.map((item) =>\n typeof item === 'object' && 'id' in item ? item.id : item\n ),\n [userDefinedItems]\n );\n const isDragging = active != null;\n const activeIndex = active ? items.indexOf(active.id) : -1;\n const overIndex = over ? items.indexOf(over.id) : -1;\n const previousItemsRef = useRef(items);\n const itemsHaveChanged = !itemsEqual(items, previousItemsRef.current);\n const disableTransforms =\n (overIndex !== -1 && activeIndex === -1) || itemsHaveChanged;\n const disabled = normalizeDisabled(disabledProp);\n\n useIsomorphicLayoutEffect(() => {\n if (itemsHaveChanged && isDragging) {\n measureDroppableContainers(items);\n }\n }, [itemsHaveChanged, items, isDragging, measureDroppableContainers]);\n\n useEffect(() => {\n previousItemsRef.current = items;\n }, [items]);\n\n const contextValue = useMemo(\n (): ContextDescriptor => ({\n activeIndex,\n containerId,\n disabled,\n disableTransforms,\n items,\n overIndex,\n useDragOverlay,\n sortedRects: getSortedRects(items, droppableRects),\n strategy,\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n activeIndex,\n containerId,\n disabled.draggable,\n disabled.droppable,\n disableTransforms,\n items,\n overIndex,\n droppableRects,\n useDragOverlay,\n strategy,\n ]\n );\n\n return {children};\n}\n","import type {UniqueIdentifier} from '@dnd-kit/core';\n\nexport function itemsEqual(a: UniqueIdentifier[], b: UniqueIdentifier[]) {\n if (a === b) {\n return true;\n }\n\n if (a.length !== b.length) {\n return false;\n }\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n}\n","import type {Disabled} from '../types';\n\nexport function normalizeDisabled(disabled: boolean | Disabled): Disabled {\n if (typeof disabled === 'boolean') {\n return {\n draggable: disabled,\n droppable: disabled,\n };\n }\n\n return disabled;\n}\n","import {CSS} from '@dnd-kit/utilities';\n\nimport {arrayMove} from '../utilities';\n\nimport type {\n AnimateLayoutChanges,\n NewIndexGetter,\n SortableTransition,\n} from './types';\n\nexport const defaultNewIndexGetter: NewIndexGetter = ({\n id,\n items,\n activeIndex,\n overIndex,\n}) => arrayMove(items, activeIndex, overIndex).indexOf(id);\n\nexport const defaultAnimateLayoutChanges: AnimateLayoutChanges = ({\n containerId,\n isSorting,\n wasDragging,\n index,\n items,\n newIndex,\n previousItems,\n previousContainerId,\n transition,\n}) => {\n if (!transition || !wasDragging) {\n return false;\n }\n\n if (previousItems !== items && index === newIndex) {\n return false;\n }\n\n if (isSorting) {\n return true;\n }\n\n return newIndex !== index && containerId === previousContainerId;\n};\n\nexport const defaultTransition: SortableTransition = {\n duration: 200,\n easing: 'ease',\n};\n\nexport const transitionProperty = 'transform';\n\nexport const disabledTransition = CSS.Transition.toString({\n property: transitionProperty,\n duration: 0,\n easing: 'linear',\n});\n\nexport const defaultAttributes = {\n roleDescription: 'sortable',\n};\n","import {useContext, useEffect, useMemo, useRef} from 'react';\nimport {\n useDraggable,\n useDroppable,\n UseDraggableArguments,\n UseDroppableArguments,\n} from '@dnd-kit/core';\nimport type {Data} from '@dnd-kit/core';\nimport {CSS, isKeyboardEvent, useCombinedRefs} from '@dnd-kit/utilities';\n\nimport {Context} from '../components';\nimport type {Disabled, SortableData, SortingStrategy} from '../types';\nimport {isValidIndex} from '../utilities';\nimport {\n defaultAnimateLayoutChanges,\n defaultAttributes,\n defaultNewIndexGetter,\n defaultTransition,\n disabledTransition,\n transitionProperty,\n} from './defaults';\nimport type {\n AnimateLayoutChanges,\n NewIndexGetter,\n SortableTransition,\n} from './types';\nimport {useDerivedTransform} from './utilities';\n\nexport interface Arguments\n extends Omit,\n Pick {\n animateLayoutChanges?: AnimateLayoutChanges;\n disabled?: boolean | Disabled;\n getNewIndex?: NewIndexGetter;\n strategy?: SortingStrategy;\n transition?: SortableTransition | null;\n}\n\nexport function useSortable({\n animateLayoutChanges = defaultAnimateLayoutChanges,\n attributes: userDefinedAttributes,\n disabled: localDisabled,\n data: customData,\n getNewIndex = defaultNewIndexGetter,\n id,\n strategy: localStrategy,\n resizeObserverConfig,\n transition = defaultTransition,\n}: Arguments) {\n const {\n items,\n containerId,\n activeIndex,\n disabled: globalDisabled,\n disableTransforms,\n sortedRects,\n overIndex,\n useDragOverlay,\n strategy: globalStrategy,\n } = useContext(Context);\n const disabled: Disabled = normalizeLocalDisabled(\n localDisabled,\n globalDisabled\n );\n const index = items.indexOf(id);\n const data = useMemo(\n () => ({sortable: {containerId, index, items}, ...customData}),\n [containerId, customData, index, items]\n );\n const itemsAfterCurrentSortable = useMemo(\n () => items.slice(items.indexOf(id)),\n [items, id]\n );\n const {\n rect,\n node,\n isOver,\n setNodeRef: setDroppableNodeRef,\n } = useDroppable({\n id,\n data,\n disabled: disabled.droppable,\n resizeObserverConfig: {\n updateMeasurementsFor: itemsAfterCurrentSortable,\n ...resizeObserverConfig,\n },\n });\n const {\n active,\n activatorEvent,\n activeNodeRect,\n attributes,\n setNodeRef: setDraggableNodeRef,\n listeners,\n isDragging,\n over,\n setActivatorNodeRef,\n transform,\n } = useDraggable({\n id,\n data,\n attributes: {\n ...defaultAttributes,\n ...userDefinedAttributes,\n },\n disabled: disabled.draggable,\n });\n const setNodeRef = useCombinedRefs(setDroppableNodeRef, setDraggableNodeRef);\n const isSorting = Boolean(active);\n const displaceItem =\n isSorting &&\n !disableTransforms &&\n isValidIndex(activeIndex) &&\n isValidIndex(overIndex);\n const shouldDisplaceDragSource = !useDragOverlay && isDragging;\n const dragSourceDisplacement =\n shouldDisplaceDragSource && displaceItem ? transform : null;\n const strategy = localStrategy ?? globalStrategy;\n const finalTransform = displaceItem\n ? dragSourceDisplacement ??\n strategy({\n rects: sortedRects,\n activeNodeRect,\n activeIndex,\n overIndex,\n index,\n })\n : null;\n const newIndex =\n isValidIndex(activeIndex) && isValidIndex(overIndex)\n ? getNewIndex({id, items, activeIndex, overIndex})\n : index;\n const activeId = active?.id;\n const previous = useRef({\n activeId,\n items,\n newIndex,\n containerId,\n });\n const itemsHaveChanged = items !== previous.current.items;\n const shouldAnimateLayoutChanges = animateLayoutChanges({\n active,\n containerId,\n isDragging,\n isSorting,\n id,\n index,\n items,\n newIndex: previous.current.newIndex,\n previousItems: previous.current.items,\n previousContainerId: previous.current.containerId,\n transition,\n wasDragging: previous.current.activeId != null,\n });\n\n const derivedTransform = useDerivedTransform({\n disabled: !shouldAnimateLayoutChanges,\n index,\n node,\n rect,\n });\n\n useEffect(() => {\n if (isSorting && previous.current.newIndex !== newIndex) {\n previous.current.newIndex = newIndex;\n }\n\n if (containerId !== previous.current.containerId) {\n previous.current.containerId = containerId;\n }\n\n if (items !== previous.current.items) {\n previous.current.items = items;\n }\n }, [isSorting, newIndex, containerId, items]);\n\n useEffect(() => {\n if (activeId === previous.current.activeId) {\n return;\n }\n\n if (activeId && !previous.current.activeId) {\n previous.current.activeId = activeId;\n return;\n }\n\n const timeoutId = setTimeout(() => {\n previous.current.activeId = activeId;\n }, 50);\n\n return () => clearTimeout(timeoutId);\n }, [activeId]);\n\n return {\n active,\n activeIndex,\n attributes,\n data,\n rect,\n index,\n newIndex,\n items,\n isOver,\n isSorting,\n isDragging,\n listeners,\n node,\n overIndex,\n over,\n setNodeRef,\n setActivatorNodeRef,\n setDroppableNodeRef,\n setDraggableNodeRef,\n transform: derivedTransform ?? finalTransform,\n transition: getTransition(),\n };\n\n function getTransition() {\n if (\n // Temporarily disable transitions for a single frame to set up derived transforms\n derivedTransform ||\n // Or to prevent items jumping to back to their \"new\" position when items change\n (itemsHaveChanged && previous.current.newIndex === index)\n ) {\n return disabledTransition;\n }\n\n if (\n (shouldDisplaceDragSource && !isKeyboardEvent(activatorEvent)) ||\n !transition\n ) {\n return undefined;\n }\n\n if (isSorting || shouldAnimateLayoutChanges) {\n return CSS.Transition.toString({\n ...transition,\n property: transitionProperty,\n });\n }\n\n return undefined;\n }\n}\n\nfunction normalizeLocalDisabled(\n localDisabled: Arguments['disabled'],\n globalDisabled: Disabled\n) {\n if (typeof localDisabled === 'boolean') {\n return {\n draggable: localDisabled,\n // Backwards compatibility\n droppable: false,\n };\n }\n\n return {\n draggable: localDisabled?.draggable ?? globalDisabled.draggable,\n droppable: localDisabled?.droppable ?? globalDisabled.droppable,\n };\n}\n","import {useMemo} from 'react';\n\nexport function useCombinedRefs(\n ...refs: ((node: T) => void)[]\n): (node: T) => void {\n return useMemo(\n () => (node: T) => {\n refs.forEach((ref) => ref(node));\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n refs\n );\n}\n","import {useEffect, useRef, useState} from 'react';\nimport {getClientRect, ClientRect} from '@dnd-kit/core';\nimport {Transform, useIsomorphicLayoutEffect} from '@dnd-kit/utilities';\n\ninterface Arguments {\n rect: React.MutableRefObject;\n disabled: boolean;\n index: number;\n node: React.MutableRefObject;\n}\n\n/*\n * When the index of an item changes while sorting,\n * we need to temporarily disable the transforms\n */\nexport function useDerivedTransform({disabled, index, node, rect}: Arguments) {\n const [derivedTransform, setDerivedtransform] = useState(\n null\n );\n const previousIndex = useRef(index);\n\n useIsomorphicLayoutEffect(() => {\n if (!disabled && index !== previousIndex.current && node.current) {\n const initial = rect.current;\n\n if (initial) {\n const current = getClientRect(node.current, {\n ignoreTransform: true,\n });\n\n const delta = {\n x: initial.left - current.left,\n y: initial.top - current.top,\n scaleX: initial.width / current.width,\n scaleY: initial.height / current.height,\n };\n\n if (delta.x || delta.y) {\n setDerivedtransform(delta);\n }\n }\n }\n\n if (index !== previousIndex.current) {\n previousIndex.current = index;\n }\n }, [disabled, index, node, rect]);\n\n useEffect(() => {\n if (derivedTransform) {\n setDerivedtransform(null);\n }\n }, [derivedTransform]);\n\n return derivedTransform;\n}\n","import type {\n Active,\n Data,\n DroppableContainer,\n DraggableNode,\n Over,\n} from '@dnd-kit/core';\n\nimport type {SortableData} from './data';\n\nexport function hasSortableData<\n T extends Active | Over | DraggableNode | DroppableContainer\n>(\n entry: T | null | undefined\n): entry is T & {data: {current: Data}} {\n if (!entry) {\n return false;\n }\n\n const data = entry.data.current;\n\n if (\n data &&\n 'sortable' in data &&\n typeof data.sortable === 'object' &&\n 'containerId' in data.sortable &&\n 'items' in data.sortable &&\n 'index' in data.sortable\n ) {\n return true;\n }\n\n return false;\n}\n","import {\n closestCorners,\n getScrollableAncestors,\n getFirstCollision,\n KeyboardCode,\n DroppableContainer,\n KeyboardCoordinateGetter,\n} from '@dnd-kit/core';\nimport {subtract} from '@dnd-kit/utilities';\n\nimport {hasSortableData} from '../../types';\n\nconst directions: string[] = [\n KeyboardCode.Down,\n KeyboardCode.Right,\n KeyboardCode.Up,\n KeyboardCode.Left,\n];\n\nexport const sortableKeyboardCoordinates: KeyboardCoordinateGetter = (\n event,\n {\n context: {\n active,\n collisionRect,\n droppableRects,\n droppableContainers,\n over,\n scrollableAncestors,\n },\n }\n) => {\n if (directions.includes(event.code)) {\n event.preventDefault();\n\n if (!active || !collisionRect) {\n return;\n }\n\n const filteredContainers: DroppableContainer[] = [];\n\n droppableContainers.getEnabled().forEach((entry) => {\n if (!entry || entry?.disabled) {\n return;\n }\n\n const rect = droppableRects.get(entry.id);\n\n if (!rect) {\n return;\n }\n\n switch (event.code) {\n case KeyboardCode.Down:\n if (collisionRect.top < rect.top) {\n filteredContainers.push(entry);\n }\n break;\n case KeyboardCode.Up:\n if (collisionRect.top > rect.top) {\n filteredContainers.push(entry);\n }\n break;\n case KeyboardCode.Left:\n if (collisionRect.left > rect.left) {\n filteredContainers.push(entry);\n }\n break;\n case KeyboardCode.Right:\n if (collisionRect.left < rect.left) {\n filteredContainers.push(entry);\n }\n break;\n }\n });\n\n const collisions = closestCorners({\n active,\n collisionRect: collisionRect,\n droppableRects,\n droppableContainers: filteredContainers,\n pointerCoordinates: null,\n });\n let closestId = getFirstCollision(collisions, 'id');\n\n if (closestId === over?.id && collisions.length > 1) {\n closestId = collisions[1].id;\n }\n\n if (closestId != null) {\n const activeDroppable = droppableContainers.get(active.id);\n const newDroppable = droppableContainers.get(closestId);\n const newRect = newDroppable ? droppableRects.get(newDroppable.id) : null;\n const newNode = newDroppable?.node.current;\n\n if (newNode && newRect && activeDroppable && newDroppable) {\n const newScrollAncestors = getScrollableAncestors(newNode);\n const hasDifferentScrollAncestors = newScrollAncestors.some(\n (element, index) => scrollableAncestors[index] !== element\n );\n const hasSameContainer = isSameContainer(activeDroppable, newDroppable);\n const isAfterActive = isAfter(activeDroppable, newDroppable);\n const offset =\n hasDifferentScrollAncestors || !hasSameContainer\n ? {\n x: 0,\n y: 0,\n }\n : {\n x: isAfterActive ? collisionRect.width - newRect.width : 0,\n y: isAfterActive ? collisionRect.height - newRect.height : 0,\n };\n const rectCoordinates = {\n x: newRect.left,\n y: newRect.top,\n };\n\n const newCoordinates =\n offset.x && offset.y\n ? rectCoordinates\n : subtract(rectCoordinates, offset);\n\n return newCoordinates;\n }\n }\n }\n\n return undefined;\n};\n\nfunction isSameContainer(a: DroppableContainer, b: DroppableContainer) {\n if (!hasSortableData(a) || !hasSortableData(b)) {\n return false;\n }\n\n return (\n a.data.current.sortable.containerId === b.data.current.sortable.containerId\n );\n}\n\nfunction isAfter(a: DroppableContainer, b: DroppableContainer) {\n if (!hasSortableData(a) || !hasSortableData(b)) {\n return false;\n }\n\n if (!isSameContainer(a, b)) {\n return false;\n }\n\n return a.data.current.sortable.index < b.data.current.sortable.index;\n}\n","import _isNull from \"lodash/isNull\";\nimport React, { useState, useCallback, useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { CSS as cssDndKit } from '@dnd-kit/utilities';\nimport cls from 'classnames';\nimport { closestCenter, DragOverlay, DndContext, MouseSensor, TouchSensor, useSensor, useSensors, KeyboardSensor, TraversalOrder } from '@dnd-kit/core';\nimport { useSortable, SortableContext, rectSortingStrategy, sortableKeyboardCoordinates } from '@dnd-kit/sortable';\nconst defaultPrefix = 'semi-sortable';\nfunction DefaultContainer(props) {\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n style: {\n overflow: 'auto'\n }\n }, props));\n}\nconst defaultKeyBoardOptions = {\n coordinateGetter: sortableKeyboardCoordinates\n};\nexport function Sortable(_ref) {\n let {\n items,\n onSortEnd,\n adjustScale,\n renderItem,\n transition,\n collisionDetection = closestCenter,\n strategy = rectSortingStrategy,\n useDragOverlay = true,\n dragOverlayCls,\n container: Container = DefaultContainer,\n prefix = defaultPrefix\n } = _ref;\n const [activeId, setActiveId] = useState(null);\n const sensors = useSensors(useSensor(MouseSensor), useSensor(TouchSensor), useSensor(KeyboardSensor, defaultKeyBoardOptions));\n const getIndex = useCallback(id => items.indexOf(id), [items]);\n const activeIndex = useMemo(() => activeId ? getIndex(activeId) : -1, [getIndex, activeId]);\n const onDragStart = useCallback(_ref2 => {\n let {\n active\n } = _ref2;\n if (!active) {\n return;\n }\n setActiveId(active.id);\n }, []);\n const onDragEnd = useCallback(_ref3 => {\n let {\n over\n } = _ref3;\n setActiveId(null);\n if (over) {\n const overIndex = getIndex(over.id);\n if (activeIndex !== overIndex) {\n onSortEnd({\n oldIndex: activeIndex,\n newIndex: overIndex\n });\n }\n }\n }, [activeIndex, getIndex, onSortEnd]);\n const onDragCancel = useCallback(() => {\n setActiveId(null);\n }, []);\n return /*#__PURE__*/React.createElement(DndContext, {\n sensors: sensors,\n collisionDetection: collisionDetection,\n onDragStart: onDragStart,\n onDragEnd: onDragEnd,\n onDragCancel: onDragCancel,\n autoScroll: {\n order: TraversalOrder.ReversedTreeOrder\n }\n }, /*#__PURE__*/React.createElement(SortableContext, {\n items: items,\n strategy: strategy\n }, /*#__PURE__*/React.createElement(Container, null, items.map((value, index) => (/*#__PURE__*/React.createElement(SortableItem, {\n key: value,\n id: value,\n index: index,\n renderItem: renderItem,\n useDragOverlay: useDragOverlay,\n prefix: prefix,\n transition: transition\n }))))), useDragOverlay ? /*#__PURE__*/createPortal(/*#__PURE__*/React.createElement(DragOverlay, {\n adjustScale: adjustScale,\n // Set zIndex in style to undefined to override the default zIndex in DragOverlay, \n // So that the zIndex of DragOverlay can be set by className\n style: {\n zIndex: undefined\n },\n className: dragOverlayCls\n }, activeId ? renderItem({\n id: activeId,\n sortableHandle: WrapperComponent => WrapperComponent\n }) : null), document.body) : null);\n}\nexport function SortableItem(_ref4) {\n let {\n animateLayoutChanges,\n id,\n renderItem,\n prefix,\n transition: animation\n } = _ref4;\n const {\n listeners,\n setNodeRef,\n transform,\n transition,\n active,\n isOver,\n attributes\n } = useSortable({\n id,\n animateLayoutChanges,\n transition: animation\n });\n const sortableHandle = useCallback(WrapperComponent => {\n // console.log('listeners', listeners);\n // 保证给出的接口的一致性,使用 span 包一层,保证用户能够通过同样的方式使用 handler\n // To ensure the consistency of the given interface\n // use a span package layer to ensure that users can use the handler in the same way\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n return () => /*#__PURE__*/React.createElement(\"span\", Object.assign({}, listeners, {\n style: {\n lineHeight: 0\n },\n onMouseDown: e => {\n listeners.onMouseDown(e);\n // 阻止onMousedown的事件传递,\n // 防止元素在点击后被卸载导致tooltip/popover的弹出层意外关闭\n // Prevent the onMousedown event from being delivered, \n // preventing the element from being unloaded after being clicked, \n // causing the tooltip/popover pop-up layer to close unexpectedly\n e.preventDefault();\n e.stopPropagation();\n }\n }), /*#__PURE__*/React.createElement(WrapperComponent, null));\n }, [listeners]);\n const itemCls = cls(`${prefix}-sortable-item`, {\n [`${prefix}-sortable-item-over`]: isOver,\n [`${prefix}-sortable-item-active`]: (active === null || active === void 0 ? void 0 : active.id) === id\n });\n const wrapperStyle = useMemo(() => {\n return !_isNull(animation) ? {\n transform: cssDndKit.Transform.toString(Object.assign(Object.assign({}, transform), {\n scaleX: 1,\n scaleY: 1\n })),\n transition: transition\n } : undefined;\n }, [animation, transform, transition]);\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n ref: setNodeRef,\n style: wrapperStyle,\n className: itemCls\n }, attributes), renderItem({\n id,\n sortableHandle\n }));\n}","import {distanceBetween} from '../coordinates';\n\nimport type {CollisionDescriptor, CollisionDetection} from './types';\nimport {cornersOfRectangle, sortCollisionsAsc} from './helpers';\n\n/**\n * Returns the closest rectangles from an array of rectangles to the corners of\n * another rectangle.\n */\nexport const closestCorners: CollisionDetection = ({\n collisionRect,\n droppableRects,\n droppableContainers,\n}) => {\n const corners = cornersOfRectangle(collisionRect);\n const collisions: CollisionDescriptor[] = [];\n\n for (const droppableContainer of droppableContainers) {\n const {id} = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const rectCorners = cornersOfRectangle(rect);\n const distances = corners.reduce((accumulator, corner, index) => {\n return accumulator + distanceBetween(rectCorners[index], corner);\n }, 0);\n const effectiveDistance = Number((distances / 4).toFixed(4));\n\n collisions.push({\n id,\n data: {droppableContainer, value: effectiveDistance},\n });\n }\n }\n\n return collisions.sort(sortCollisionsAsc);\n};\n","import {useMemo} from 'react';\n\nimport type {SensorDescriptor, SensorOptions} from './types';\n\nexport function useSensors(\n ...sensors: (SensorDescriptor | undefined | null)[]\n): SensorDescriptor[] {\n return useMemo(\n () =>\n [...sensors].filter(\n (sensor): sensor is SensorDescriptor => sensor != null\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [...sensors]\n );\n}\n","import _isFunction from \"lodash/isFunction\";\nimport _isUndefined from \"lodash/isUndefined\";\nimport _isNull from \"lodash/isNull\";\nimport _isArray from \"lodash/isArray\";\nimport _isString from \"lodash/isString\";\nimport _noop from \"lodash/noop\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/tagInput/constants';\nimport '@douyinfe/semi-foundation/lib/es/tagInput/tagInput.css';\nimport TagInputFoundation from '@douyinfe/semi-foundation/lib/es/tagInput/foundation';\nimport { isSemiIcon } from '../_utils';\nimport BaseComponent from '../_base/baseComponent';\nimport Tag from '../tag';\nimport Input from '../input';\nimport Popover from '../popover';\nimport Paragraph from '../typography/paragraph';\nimport { IconClear, IconHandle } from '@douyinfe/semi-icons';\nimport { Sortable } from '../_sortable';\nconst prefixCls = cssClasses.PREFIX;\nfunction SortContainer(props) {\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n className: `${prefixCls}-sortable-list`\n }, props));\n}\nclass TagInput extends BaseComponent {\n constructor(props) {\n super(props);\n this.handleInputChange = e => {\n this.foundation.handleInputChange(e);\n };\n this.handleKeyDown = e => {\n this.foundation.handleKeyDown(e);\n };\n this.handleInputFocus = e => {\n this.foundation.handleInputFocus(e);\n };\n this.handleInputBlur = e => {\n this.foundation.handleInputBlur(e);\n };\n this.handleClearBtn = e => {\n this.foundation.handleClearBtn(e);\n };\n /* istanbul ignore next */\n this.handleClearEnterPress = e => {\n this.foundation.handleClearEnterPress(e);\n };\n this.handleTagClose = idx => {\n this.foundation.handleTagClose(idx);\n };\n this.handleInputMouseLeave = e => {\n this.foundation.handleInputMouseLeave();\n };\n this.handleClick = e => {\n this.foundation.handleClick(e);\n };\n this.handleInputMouseEnter = e => {\n this.foundation.handleInputMouseEnter();\n };\n this.handleClickPrefixOrSuffix = e => {\n this.foundation.handleClickPrefixOrSuffix(e);\n };\n this.handlePreventMouseDown = e => {\n this.foundation.handlePreventMouseDown(e);\n };\n this.getAllTags = () => {\n const {\n tagsArray\n } = this.state;\n return tagsArray.map((value, index) => this.renderTag(value, index));\n };\n this.renderTag = (value, index, sortableHandle) => {\n const {\n size,\n disabled,\n renderTagItem,\n showContentTooltip,\n draggable\n } = this.props;\n const {\n active\n } = this.state;\n const showIconHandler = active && draggable;\n const tagCls = cls(`${prefixCls}-wrapper-tag`, {\n [`${prefixCls}-wrapper-tag-size-${size}`]: size,\n [`${prefixCls}-wrapper-tag-icon`]: showIconHandler\n });\n const typoCls = cls(`${prefixCls}-wrapper-typo`, {\n [`${prefixCls}-wrapper-typo-disabled`]: disabled\n });\n const itemWrapperCls = cls({\n [`${prefixCls}-drag-item`]: showIconHandler,\n [`${prefixCls}-wrapper-tag-icon`]: showIconHandler\n });\n const DragHandle = sortableHandle && sortableHandle(() => /*#__PURE__*/React.createElement(IconHandle, {\n className: `${prefixCls}-drag-handler`\n }));\n const elementKey = showIconHandler ? value : `${index}${value}`;\n const onClose = () => {\n !disabled && this.handleTagClose(index);\n };\n if (_isFunction(renderTagItem)) {\n return /*#__PURE__*/React.createElement(\"div\", {\n className: itemWrapperCls,\n key: elementKey\n }, showIconHandler && sortableHandle ? /*#__PURE__*/React.createElement(DragHandle, null) : null, renderTagItem(value, index, onClose));\n } else {\n return /*#__PURE__*/React.createElement(Tag, {\n className: tagCls,\n color: \"white\",\n size: size === 'small' ? 'small' : 'large',\n type: \"light\",\n onClose: onClose,\n closable: !disabled,\n key: elementKey,\n visible: true,\n \"aria-label\": `${!disabled ? 'Closable ' : ''}Tag: ${value}`\n }, showIconHandler && sortableHandle ? /*#__PURE__*/React.createElement(DragHandle, null) : null, /*#__PURE__*/React.createElement(Paragraph, {\n className: typoCls,\n ellipsis: {\n showTooltip: showContentTooltip,\n rows: 1\n }\n }, value));\n }\n };\n this.renderSortTag = props => {\n const {\n id: item,\n sortableHandle\n } = props;\n const {\n tagsArray\n } = this.state;\n const index = tagsArray.indexOf(item);\n return this.renderTag(item, index, sortableHandle);\n };\n this.onSortEnd = callbackProps => {\n this.foundation.handleSortEnd(callbackProps);\n };\n this.handleInputCompositionStart = e => {\n this.foundation.handleInputCompositionStart(e);\n };\n this.handleInputCompositionEnd = e => {\n this.foundation.handleInputCompositionEnd(e);\n };\n this.foundation = new TagInputFoundation(this.adapter);\n this.state = {\n tagsArray: props.defaultValue || [],\n inputValue: '',\n focusing: false,\n hovering: false,\n active: false,\n entering: false\n };\n this.inputRef = /*#__PURE__*/React.createRef();\n this.tagInputRef = /*#__PURE__*/React.createRef();\n this.clickOutsideHandler = null;\n }\n static getDerivedStateFromProps(nextProps, prevState) {\n const {\n value,\n inputValue\n } = nextProps;\n const {\n tagsArray: prevTagsArray\n } = prevState;\n let tagsArray;\n if (_isArray(value)) {\n tagsArray = value;\n } else if ('value' in nextProps && !value) {\n tagsArray = [];\n } else {\n tagsArray = prevTagsArray;\n }\n return {\n tagsArray,\n inputValue: _isString(inputValue) ? inputValue : prevState.inputValue\n };\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n setInputValue: inputValue => {\n this.setState({\n inputValue\n });\n },\n setTagsArray: tagsArray => {\n this.setState({\n tagsArray\n });\n },\n setFocusing: focusing => {\n this.setState({\n focusing\n });\n },\n toggleFocusing: isFocus => {\n const {\n preventScroll\n } = this.props;\n const input = this.inputRef && this.inputRef.current;\n if (isFocus) {\n input && input.focus({\n preventScroll\n });\n } else {\n input && input.blur();\n }\n this.setState({\n focusing: isFocus\n });\n },\n setHovering: hovering => {\n this.setState({\n hovering\n });\n },\n setActive: active => {\n this.setState({\n active\n });\n },\n setEntering: entering => {\n this.setState({\n entering\n });\n },\n getClickOutsideHandler: () => {\n return this.clickOutsideHandler;\n },\n notifyBlur: e => {\n this.props.onBlur(e);\n },\n notifyFocus: e => {\n this.props.onFocus(e);\n },\n notifyInputChange: (v, e) => {\n this.props.onInputChange(v, e);\n },\n notifyTagChange: v => {\n this.props.onChange(v);\n },\n notifyTagAdd: v => {\n this.props.onAdd(v);\n },\n notifyTagRemove: (v, idx) => {\n this.props.onRemove(v, idx);\n },\n notifyKeyDown: e => {\n this.props.onKeyDown(e);\n },\n registerClickOutsideHandler: cb => {\n const clickOutsideHandler = e => {\n const tagInputDom = this.tagInputRef && this.tagInputRef.current;\n const target = e.target;\n const path = e.composedPath && e.composedPath() || [target];\n if (tagInputDom && !tagInputDom.contains(target) && !path.includes(tagInputDom)) {\n cb(e);\n }\n };\n this.clickOutsideHandler = clickOutsideHandler;\n document.addEventListener('click', clickOutsideHandler, false);\n },\n unregisterClickOutsideHandler: () => {\n document.removeEventListener('click', this.clickOutsideHandler, false);\n this.clickOutsideHandler = null;\n }\n });\n }\n componentDidMount() {\n const {\n disabled,\n autoFocus,\n preventScroll\n } = this.props;\n if (!disabled && autoFocus) {\n this.inputRef.current.focus({\n preventScroll\n });\n this.foundation.handleClick();\n }\n this.foundation.init();\n }\n renderClearBtn() {\n const {\n hovering,\n tagsArray,\n inputValue\n } = this.state;\n const {\n showClear,\n disabled,\n clearIcon\n } = this.props;\n const clearCls = cls(`${prefixCls}-clearBtn`, {\n [`${prefixCls}-clearBtn-invisible`]: !hovering || inputValue === '' && tagsArray.length === 0 || disabled\n });\n if (showClear) {\n return /*#__PURE__*/React.createElement(\"div\", {\n role: \"button\",\n tabIndex: 0,\n \"aria-label\": \"Clear TagInput value\",\n className: clearCls,\n onClick: e => this.handleClearBtn(e),\n onKeyPress: e => this.handleClearEnterPress(e)\n }, clearIcon ? clearIcon : /*#__PURE__*/React.createElement(IconClear, null));\n }\n return null;\n }\n renderPrefix() {\n const {\n prefix,\n insetLabel,\n insetLabelId\n } = this.props;\n const labelNode = prefix || insetLabel;\n if (_isNull(labelNode) || _isUndefined(labelNode)) {\n return null;\n }\n const prefixWrapperCls = cls(`${prefixCls}-prefix`, {\n [`${prefixCls}-inset-label`]: insetLabel,\n [`${prefixCls}-prefix-text`]: labelNode && _isString(labelNode),\n [`${prefixCls}-prefix-icon`]: isSemiIcon(labelNode)\n });\n return (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions,jsx-a11y/click-events-have-key-events\n React.createElement(\"div\", {\n className: prefixWrapperCls,\n onMouseDown: this.handlePreventMouseDown,\n onClick: this.handleClickPrefixOrSuffix,\n id: insetLabelId,\n \"x-semi-prop\": \"prefix\"\n }, labelNode)\n );\n }\n renderSuffix() {\n const {\n suffix\n } = this.props;\n if (_isNull(suffix) || _isUndefined(suffix)) {\n return null;\n }\n const suffixWrapperCls = cls(`${prefixCls}-suffix`, {\n [`${prefixCls}-suffix-text`]: suffix && _isString(suffix),\n [`${prefixCls}-suffix-icon`]: isSemiIcon(suffix)\n });\n return (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions\n React.createElement(\"div\", {\n className: suffixWrapperCls,\n onMouseDown: this.handlePreventMouseDown,\n onClick: this.handleClickPrefixOrSuffix,\n \"x-semi-prop\": \"suffix\"\n }, suffix)\n );\n }\n renderTags() {\n const {\n disabled,\n maxTagCount,\n showRestTagsPopover,\n restTagsPopoverProps = {},\n draggable,\n expandRestTagsOnClick\n } = this.props;\n const {\n tagsArray,\n active\n } = this.state;\n const restTagsCls = cls(`${prefixCls}-wrapper-n`, {\n [`${prefixCls}-wrapper-n-disabled`]: disabled\n });\n const allTags = this.getAllTags();\n let restTags = [];\n let tags = [...allTags];\n if ((!active || !expandRestTagsOnClick) && maxTagCount && maxTagCount < allTags.length) {\n tags = allTags.slice(0, maxTagCount);\n restTags = allTags.slice(maxTagCount);\n }\n const restTagsContent = /*#__PURE__*/React.createElement(\"span\", {\n className: restTagsCls\n }, \"+\", tagsArray.length - maxTagCount);\n const sortableListItems = allTags.map((item, index) => ({\n item: item,\n key: tagsArray[index]\n }));\n if (active && draggable && sortableListItems.length > 0) {\n return /*#__PURE__*/React.createElement(Sortable, {\n items: tagsArray,\n onSortEnd: this.onSortEnd,\n renderItem: this.renderSortTag,\n container: SortContainer,\n prefix: prefixCls,\n transition: null,\n dragOverlayCls: `${prefixCls}-right-item-drag-item-move`\n });\n }\n return /*#__PURE__*/React.createElement(React.Fragment, null, tags, restTags.length > 0 && (showRestTagsPopover ? (/*#__PURE__*/React.createElement(Popover, Object.assign({\n content: restTags,\n showArrow: true,\n trigger: \"hover\",\n position: \"top\",\n autoAdjustOverflow: true\n }, restTagsPopoverProps), restTagsContent)) : restTagsContent));\n }\n blur() {\n this.inputRef.current.blur();\n // unregister clickOutside event\n this.foundation.clickOutsideCallBack();\n }\n focus() {\n const {\n preventScroll,\n disabled\n } = this.props;\n this.inputRef.current.focus({\n preventScroll\n });\n if (!disabled) {\n // register clickOutside event\n this.foundation.handleClick();\n }\n }\n render() {\n const _a = this.props,\n {\n size,\n style,\n className,\n disabled,\n placeholder,\n validateStatus,\n prefix,\n insetLabel,\n suffix\n } = _a,\n rest = __rest(_a, [\"size\", \"style\", \"className\", \"disabled\", \"placeholder\", \"validateStatus\", \"prefix\", \"insetLabel\", \"suffix\"]);\n const {\n focusing,\n hovering,\n tagsArray,\n inputValue,\n active\n } = this.state;\n const tagInputCls = cls(prefixCls, className, {\n [`${prefixCls}-focus`]: focusing || active,\n [`${prefixCls}-disabled`]: disabled,\n [`${prefixCls}-hover`]: hovering && !disabled,\n [`${prefixCls}-error`]: validateStatus === 'error',\n [`${prefixCls}-warning`]: validateStatus === 'warning',\n [`${prefixCls}-small`]: size === 'small',\n [`${prefixCls}-large`]: size === 'large',\n [`${prefixCls}-with-prefix`]: !!prefix || !!insetLabel,\n [`${prefixCls}-with-suffix`]: !!suffix\n });\n const inputCls = cls(`${prefixCls}-wrapper-input`, `${prefixCls}-wrapper-input-${size}`);\n const wrapperCls = cls(`${prefixCls}-wrapper`);\n return (\n /*#__PURE__*/\n // eslint-disable-next-line\n React.createElement(\"div\", Object.assign({\n ref: this.tagInputRef,\n style: style,\n className: tagInputCls,\n \"aria-disabled\": disabled,\n \"aria-label\": this.props['aria-label'],\n \"aria-invalid\": validateStatus === 'error',\n onMouseEnter: e => {\n this.handleInputMouseEnter(e);\n },\n onMouseLeave: e => {\n this.handleInputMouseLeave(e);\n },\n onClick: e => {\n this.handleClick(e);\n }\n }, this.getDataAttr(rest)), this.renderPrefix(), /*#__PURE__*/React.createElement(\"div\", {\n className: wrapperCls\n }, this.renderTags(), /*#__PURE__*/React.createElement(Input, {\n \"aria-label\": 'input value',\n ref: this.inputRef,\n className: inputCls,\n disabled: disabled,\n value: inputValue,\n size: size,\n placeholder: tagsArray.length === 0 ? placeholder : '',\n onKeyDown: e => {\n this.handleKeyDown(e);\n },\n onChange: (v, e) => {\n this.handleInputChange(e);\n },\n onBlur: e => {\n this.handleInputBlur(e);\n },\n onFocus: e => {\n this.handleInputFocus(e);\n },\n onCompositionStart: this.handleInputCompositionStart,\n onCompositionEnd: this.handleInputCompositionEnd\n })), this.renderClearBtn(), this.renderSuffix())\n );\n }\n}\nTagInput.propTypes = {\n children: PropTypes.node,\n clearIcon: PropTypes.node,\n style: PropTypes.object,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n allowDuplicates: PropTypes.bool,\n max: PropTypes.number,\n maxTagCount: PropTypes.number,\n maxLength: PropTypes.number,\n showRestTagsPopover: PropTypes.bool,\n restTagsPopoverProps: PropTypes.object,\n showContentTooltip: PropTypes.oneOfType([PropTypes.shape({\n type: PropTypes.string,\n opts: PropTypes.object\n }), PropTypes.bool]),\n defaultValue: PropTypes.array,\n value: PropTypes.array,\n inputValue: PropTypes.string,\n placeholder: PropTypes.string,\n separator: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n showClear: PropTypes.bool,\n addOnBlur: PropTypes.bool,\n draggable: PropTypes.bool,\n expandRestTagsOnClick: PropTypes.bool,\n autoFocus: PropTypes.bool,\n renderTagItem: PropTypes.func,\n onBlur: PropTypes.func,\n onFocus: PropTypes.func,\n onChange: PropTypes.func,\n onInputChange: PropTypes.func,\n onExceed: PropTypes.func,\n onInputExceed: PropTypes.func,\n onAdd: PropTypes.func,\n onRemove: PropTypes.func,\n onKeyDown: PropTypes.func,\n size: PropTypes.oneOf(strings.SIZE_SET),\n validateStatus: PropTypes.oneOf(strings.STATUS),\n prefix: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n suffix: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n 'aria-label': PropTypes.string,\n preventScroll: PropTypes.bool\n};\nTagInput.defaultProps = {\n showClear: false,\n addOnBlur: false,\n allowDuplicates: true,\n showRestTagsPopover: true,\n autoFocus: false,\n draggable: false,\n expandRestTagsOnClick: true,\n showContentTooltip: true,\n separator: ',',\n size: 'default',\n validateStatus: 'default',\n onBlur: _noop,\n onFocus: _noop,\n onChange: _noop,\n onInputChange: _noop,\n onExceed: _noop,\n onInputExceed: _noop,\n onAdd: _noop,\n onRemove: _noop,\n onKeyDown: _noop\n};\nexport default TagInput;","import _pick from \"lodash/pick\";\nimport _isNull from \"lodash/isNull\";\nimport _isUndefined from \"lodash/isUndefined\";\nimport _isFunction from \"lodash/isFunction\";\nimport _get from \"lodash/get\";\nimport _noop from \"lodash/noop\";\nimport _isEmpty from \"lodash/isEmpty\";\nimport _isString from \"lodash/isString\";\nimport _isEqual from \"lodash/isEqual\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { Fragment } from 'react';\nimport ReactDOM from 'react-dom';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport TreeSelectFoundation from '@douyinfe/semi-foundation/lib/es/treeSelect/foundation';\nimport { convertDataToEntities, flattenTreeData, calcExpandedKeysForValues, calcMotionKeys, findKeysForValues, calcCheckedKeys, calcExpandedKeys, getValueOrKey, normalizeKeyList, calcDisabledKeys, normalizeValue, updateKeys, filterTreeData } from '@douyinfe/semi-foundation/lib/es/tree/treeUtil';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/treeSelect/constants';\nimport { numbers as popoverNumbers } from '@douyinfe/semi-foundation/lib/es/popover/constants';\nimport { FixedSizeList as VirtualList } from 'react-window';\nimport '@douyinfe/semi-foundation/lib/es/tree/tree.css';\nimport '@douyinfe/semi-foundation/lib/es/treeSelect/treeSelect.css';\nimport BaseComponent from '../_base/baseComponent';\nimport ConfigContext from '../configProvider/context';\nimport TagGroup from '../tag/group';\nimport Tag from '../tag/index';\nimport Input from '../input/index';\nimport AutoSizer from '../tree/autoSizer';\nimport TreeContext from '../tree/treeContext';\nimport TreeNode from '../tree/treeNode';\nimport NodeList from '../tree/nodeList';\nimport { cloneDeep } from '../tree/treeUtil';\nimport LocaleConsumer from '../locale/localeConsumer';\nimport Trigger from '../trigger';\nimport TagInput from '../tagInput';\nimport { isSemiIcon } from '../_utils';\nimport { IconChevronDown, IconClear, IconSearch } from '@douyinfe/semi-icons';\nimport CheckboxGroup from '../checkbox/checkboxGroup';\nimport Popover from '../popover/index';\nimport VirtualRow from '../select/virtualRow';\nconst prefixcls = cssClasses.PREFIX;\nconst prefixTree = cssClasses.PREFIX_TREE;\nconst key = 0;\nclass TreeSelect extends BaseComponent {\n constructor(props) {\n super(props);\n this.renderSuffix = () => {\n const {\n suffix\n } = this.props;\n const suffixWrapperCls = cls({\n [`${prefixcls}-suffix`]: true,\n [`${prefixcls}-suffix-text`]: suffix && _isString(suffix),\n [`${prefixcls}-suffix-icon`]: isSemiIcon(suffix)\n });\n return /*#__PURE__*/React.createElement(\"div\", {\n className: suffixWrapperCls,\n \"x-semi-prop\": \"suffix\"\n }, suffix);\n };\n this.renderPrefix = () => {\n const {\n prefix,\n insetLabel,\n insetLabelId\n } = this.props;\n const labelNode = prefix || insetLabel;\n const prefixWrapperCls = cls({\n [`${prefixcls}-prefix`]: true,\n // to be doublechecked\n [`${prefixcls}-inset-label`]: insetLabel,\n [`${prefixcls}-prefix-text`]: labelNode && _isString(labelNode),\n [`${prefixcls}-prefix-icon`]: isSemiIcon(labelNode)\n });\n return /*#__PURE__*/React.createElement(\"div\", {\n className: prefixWrapperCls,\n id: insetLabelId,\n \"x-semi-prop\": \"prefix,insetLabel\"\n }, labelNode);\n };\n this.renderContent = () => {\n const {\n dropdownMinWidth\n } = this.state;\n const {\n dropdownStyle,\n dropdownClassName\n } = this.props;\n const style = Object.assign({\n minWidth: dropdownMinWidth\n }, dropdownStyle);\n const popoverCls = cls(dropdownClassName, `${prefixcls}-popover`);\n return /*#__PURE__*/React.createElement(\"div\", {\n className: popoverCls,\n style: style,\n onKeyDown: this.foundation.handleKeyDown\n }, this.renderTree());\n };\n this.removeTag = removedKey => {\n this.foundation.removeTag(removedKey);\n };\n this.handleClick = e => {\n this.foundation.handleClick(e);\n };\n this.getDataForKeyNotInKeyEntities = key => {\n return this.foundation.getDataForKeyNotInKeyEntities(key);\n };\n /* istanbul ignore next */\n this.handleSelectionEnterPress = e => {\n this.foundation.handleSelectionEnterPress(e);\n };\n this.hasValue = () => {\n const {\n multiple,\n checkRelation\n } = this.props;\n const {\n realCheckedKeys,\n checkedKeys,\n selectedKeys\n } = this.state;\n let hasValue = false;\n if (multiple) {\n if (checkRelation === 'related') {\n hasValue = Boolean(checkedKeys.size);\n } else if (checkRelation === 'unRelated') {\n hasValue = Boolean(realCheckedKeys.size);\n }\n } else {\n hasValue = Boolean(selectedKeys.length);\n }\n return hasValue;\n };\n this.showClearBtn = () => {\n const {\n showClear,\n disabled,\n searchPosition\n } = this.props;\n const {\n inputValue,\n isOpen,\n isHovering\n } = this.state;\n const triggerSearchHasInputValue = searchPosition === strings.SEARCH_POSITION_TRIGGER && inputValue;\n return showClear && (this.hasValue() || triggerSearchHasInputValue) && !disabled && (isOpen || isHovering);\n };\n this.renderTagList = triggerRenderKeys => {\n const {\n keyEntities,\n disabledKeys\n } = this.state;\n const {\n treeNodeLabelProp,\n leafOnly,\n disabled,\n disableStrictly,\n size,\n renderSelectedItem: propRenderSelectedItem,\n keyMaps\n } = this.props;\n const realLabelName = _get(keyMaps, 'label', treeNodeLabelProp);\n const renderSelectedItem = _isFunction(propRenderSelectedItem) ? propRenderSelectedItem : item => ({\n isRenderInTag: true,\n content: _get(item, realLabelName, null)\n });\n const tagList = [];\n triggerRenderKeys.forEach((key, index) => {\n const item = keyEntities[key] && keyEntities[key].key === key ? keyEntities[key].data : this.getDataForKeyNotInKeyEntities(key);\n const onClose = (tagContent, e) => {\n if (e && typeof e.preventDefault === 'function') {\n // make sure that tag will not hidden immediately in controlled mode\n e.preventDefault();\n }\n this.removeTag(key);\n };\n const {\n content,\n isRenderInTag\n } = item ? renderSelectedItem(item, {\n index,\n onClose\n }) : {};\n if (_isNull(content) || _isUndefined(content)) {\n return;\n }\n const isDisabled = disabled || item.disabled || disableStrictly && disabledKeys.has(item.key);\n const tag = {\n closable: !isDisabled,\n color: 'white',\n visible: true,\n onClose,\n key: `tag-${key}-${index}`,\n size: size === 'small' ? 'small' : 'large'\n };\n if (isRenderInTag) {\n // pass ReactNode list to tagList when using tagGroup custom mode\n tagList.push(/*#__PURE__*/React.createElement(Tag, Object.assign({}, tag), content));\n } else {\n tagList.push(content);\n }\n });\n return tagList;\n };\n /**\n * When single selection and the search box is on trigger, the items displayed in the rendered search box\n */\n this.renderSingleTriggerSearchItem = () => {\n const {\n placeholder,\n disabled\n } = this.props;\n const {\n inputTriggerFocus\n } = this.state;\n const renderText = this.foundation.getRenderTextInSingle();\n const spanCls = cls(`${prefixcls}-selection-TriggerSearchItem`, {\n [`${prefixcls}-selection-TriggerSearchItem-placeholder`]: (inputTriggerFocus || !renderText) && !disabled,\n [`${prefixcls}-selection-TriggerSearchItem-disabled`]: disabled\n });\n return /*#__PURE__*/React.createElement(\"span\", {\n className: spanCls,\n onClick: this.foundation.onClickSingleTriggerSearchItem\n }, renderText ? renderText : placeholder);\n };\n /**\n * Single selection and the search box content rendered when the search box is on trigger\n */\n this.renderSingleTriggerSearch = () => {\n const {\n inputValue\n } = this.state;\n return /*#__PURE__*/React.createElement(React.Fragment, null, this.renderInput(), !inputValue && this.renderSingleTriggerSearchItem());\n };\n this.renderSelectContent = triggerRenderKeys => {\n const {\n multiple,\n placeholder,\n maxTagCount,\n searchPosition,\n filterTreeNode,\n showRestTagsPopover,\n restTagsPopoverProps\n } = this.props;\n const isTriggerPositionSearch = filterTreeNode && searchPosition === strings.SEARCH_POSITION_TRIGGER;\n // searchPosition = trigger\n if (isTriggerPositionSearch) {\n return multiple ? this.renderTagInput(triggerRenderKeys) : this.renderSingleTriggerSearch();\n }\n // searchPosition = dropdown and single seleciton\n if (!multiple || !this.hasValue()) {\n const renderText = this.foundation.getRenderTextInSingle();\n const spanCls = cls(`${prefixcls}-selection-content`, {\n [`${prefixcls}-selection-placeholder`]: !renderText\n });\n return /*#__PURE__*/React.createElement(\"span\", {\n className: spanCls\n }, renderText ? renderText : placeholder);\n }\n // searchPosition = dropdown and multiple seleciton\n const tagList = this.renderTagList(triggerRenderKeys);\n // mode=custom to return tagList directly\n return /*#__PURE__*/React.createElement(TagGroup, {\n maxTagCount: maxTagCount,\n tagList: tagList,\n size: \"large\",\n mode: \"custom\",\n showPopover: showRestTagsPopover,\n popoverProps: restTagsPopoverProps\n });\n };\n this.handleClear = e => {\n e && e.stopPropagation();\n this.foundation.handleClear(e);\n };\n /* istanbul ignore next */\n this.handleClearEnterPress = e => {\n e && e.stopPropagation();\n this.foundation.handleClearEnterPress(e);\n };\n this.handleMouseOver = e => {\n this.foundation.toggleHoverState(true);\n };\n this.handleMouseLeave = e => {\n this.foundation.toggleHoverState(false);\n };\n this.search = value => {\n const {\n isOpen\n } = this.state;\n if (!isOpen) {\n this.foundation.open();\n }\n this.foundation.handleInputChange(value);\n };\n this.close = () => {\n this.foundation.close(null);\n };\n this.renderArrow = () => {\n const showClearBtn = this.showClearBtn();\n const {\n arrowIcon\n } = this.props;\n if (showClearBtn) {\n return null;\n }\n return arrowIcon ? (/*#__PURE__*/React.createElement(\"div\", {\n className: cls(`${prefixcls}-arrow`),\n \"x-semi-prop\": \"arrowIcon\"\n }, arrowIcon)) : null;\n };\n this.renderClearBtn = () => {\n const showClearBtn = this.showClearBtn();\n const {\n clearIcon\n } = this.props;\n const clearCls = cls(`${prefixcls}-clearbtn`);\n if (showClearBtn) {\n return /*#__PURE__*/React.createElement(\"div\", {\n role: 'button',\n tabIndex: 0,\n \"aria-label\": \"Clear TreeSelect value\",\n className: clearCls,\n onClick: this.handleClear,\n onKeyPress: this.handleClearEnterPress\n }, clearIcon ? clearIcon : /*#__PURE__*/React.createElement(IconClear, null));\n }\n return null;\n };\n this.renderSelection = () => {\n const _a = this.props,\n {\n disabled,\n multiple,\n filterTreeNode,\n validateStatus,\n prefix,\n suffix,\n style,\n size,\n insetLabel,\n className,\n placeholder,\n showClear,\n leafOnly,\n searchPosition,\n triggerRender,\n borderless,\n autoMergeValue,\n checkRelation\n } = _a,\n rest = __rest(_a, [\"disabled\", \"multiple\", \"filterTreeNode\", \"validateStatus\", \"prefix\", \"suffix\", \"style\", \"size\", \"insetLabel\", \"className\", \"placeholder\", \"showClear\", \"leafOnly\", \"searchPosition\", \"triggerRender\", \"borderless\", \"autoMergeValue\", \"checkRelation\"]);\n const {\n inputValue,\n selectedKeys,\n checkedKeys,\n keyEntities,\n isFocus,\n realCheckedKeys\n } = this.state;\n const filterable = Boolean(filterTreeNode);\n const useCustomTrigger = typeof triggerRender === 'function';\n const mouseEvent = showClear ? {\n onMouseEnter: e => this.handleMouseOver(e),\n onMouseLeave: e => this.handleMouseLeave(e)\n } : {};\n const isTriggerPositionSearch = searchPosition === strings.SEARCH_POSITION_TRIGGER && filterable;\n const isEmptyTriggerSearch = isTriggerPositionSearch && _isEmpty(checkedKeys);\n const isValueTriggerSearch = isTriggerPositionSearch && !_isEmpty(checkedKeys);\n const classNames = useCustomTrigger ? cls(className) : cls(prefixcls, {\n [`${prefixcls}-borderless`]: borderless,\n [`${prefixcls}-focus`]: isFocus,\n [`${prefixcls}-disabled`]: disabled,\n [`${prefixcls}-single`]: !multiple,\n [`${prefixcls}-multiple`]: multiple,\n [`${prefixcls}-multiple-tagInput-empty`]: multiple && isEmptyTriggerSearch,\n [`${prefixcls}-multiple-tagInput-notEmpty`]: multiple && isValueTriggerSearch,\n [`${prefixcls}-filterable`]: filterable,\n [`${prefixcls}-error`]: validateStatus === 'error',\n [`${prefixcls}-warning`]: validateStatus === 'warning',\n [`${prefixcls}-small`]: size === 'small',\n [`${prefixcls}-large`]: size === 'large',\n [`${prefixcls}-with-prefix`]: prefix || insetLabel,\n [`${prefixcls}-with-suffix`]: suffix,\n [`${prefixcls}-with-suffix`]: suffix\n }, className);\n let inner;\n let triggerRenderKeys = [];\n if (multiple) {\n if (!autoMergeValue) {\n triggerRenderKeys = [...checkedKeys];\n } else if (checkRelation === 'related') {\n triggerRenderKeys = normalizeKeyList([...checkedKeys], keyEntities, leafOnly, true);\n } else if (checkRelation === 'unRelated') {\n triggerRenderKeys = [...realCheckedKeys];\n }\n } else {\n triggerRenderKeys = selectedKeys;\n }\n if (useCustomTrigger) {\n inner = /*#__PURE__*/React.createElement(Trigger, {\n inputValue: inputValue,\n value: triggerRenderKeys.map(key => _get(keyEntities, [key, 'data'])),\n disabled: disabled,\n placeholder: placeholder,\n onClear: this.handleClear,\n componentName: 'TreeSelect',\n triggerRender: triggerRender,\n componentProps: Object.assign({}, this.props),\n onSearch: this.search,\n onRemove: this.removeTag\n });\n } else {\n inner = [/*#__PURE__*/React.createElement(Fragment, {\n key: 'prefix'\n }, prefix || insetLabel ? this.renderPrefix() : null), /*#__PURE__*/React.createElement(Fragment, {\n key: 'selection'\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixcls}-selection`\n }, this.renderSelectContent(triggerRenderKeys))), /*#__PURE__*/React.createElement(Fragment, {\n key: 'suffix'\n }, suffix ? this.renderSuffix() : null), /*#__PURE__*/React.createElement(Fragment, {\n key: 'clearBtn'\n }, showClear || isTriggerPositionSearch && inputValue ? this.renderClearBtn() : null), /*#__PURE__*/React.createElement(Fragment, {\n key: 'arrow'\n }, this.renderArrow())];\n }\n const tabIndex = disabled ? null : 0;\n /**\n * Reasons for disabling the a11y eslint rule:\n * The following attributes(aria-controls,aria-expanded) will be automatically added by Tooltip, no need to declare here\n */\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n // eslint-disable-next-line jsx-a11y/role-has-required-aria-props\n role: 'combobox',\n \"aria-disabled\": disabled,\n \"aria-haspopup\": \"tree\",\n tabIndex: tabIndex,\n className: classNames,\n style: style,\n ref: this.triggerRef,\n onClick: this.handleClick,\n onKeyPress: this.handleSelectionEnterPress,\n onKeyDown: this.foundation.handleKeyDown,\n \"aria-invalid\": this.props['aria-invalid'],\n \"aria-errormessage\": this.props['aria-errormessage'],\n \"aria-label\": this.props['aria-label'],\n \"aria-labelledby\": this.props['aria-labelledby'],\n \"aria-describedby\": this.props['aria-describedby'],\n \"aria-required\": this.props['aria-required']\n }, mouseEvent, this.getDataAttr(rest)), inner);\n };\n this.renderTagItem = (key, idx) => {\n const {\n keyEntities,\n disabledKeys\n } = this.state;\n const {\n size,\n leafOnly,\n disabled,\n disableStrictly,\n renderSelectedItem: propRenderSelectedItem,\n treeNodeLabelProp,\n keyMaps\n } = this.props;\n const realLabelName = _get(keyMaps, 'label', treeNodeLabelProp);\n const keyList = normalizeKeyList([key], keyEntities, leafOnly, true);\n const nodes = keyList.map(i => keyEntities[key] && keyEntities[key].key === key ? keyEntities[key].data : this.getDataForKeyNotInKeyEntities(key));\n const value = getValueOrKey(nodes, keyMaps);\n const tagCls = cls(`${prefixcls}-selection-tag`, {\n [`${prefixcls}-selection-tag-disabled`]: disabled\n });\n const nodeHaveData = !_isEmpty(nodes) && !_isEmpty(nodes[0]);\n const isDisableStrictlyNode = disableStrictly && nodeHaveData && disabledKeys.has(nodes[0].key);\n const closable = nodeHaveData && !nodes[0].disabled && !disabled && !isDisableStrictlyNode;\n const onClose = (tagChildren, e) => {\n // When value has not changed, prevent clicking tag closeBtn to close tag\n e.preventDefault();\n this.removeTag(key);\n };\n const tagProps = {\n size: size === 'small' ? 'small' : 'large',\n key: `tag-${value}-${idx}`,\n color: 'white',\n className: tagCls,\n closable,\n onClose\n };\n const item = nodes[0];\n const renderSelectedItem = _isFunction(propRenderSelectedItem) ? propRenderSelectedItem : selectedItem => ({\n isRenderInTag: true,\n content: _get(selectedItem, realLabelName, null)\n });\n if (_isFunction(renderSelectedItem)) {\n const {\n content,\n isRenderInTag\n } = item ? renderSelectedItem(item, {\n index: idx,\n onClose\n }) : {};\n if (isRenderInTag) {\n return /*#__PURE__*/React.createElement(Tag, Object.assign({}, tagProps), content);\n } else {\n return content;\n }\n }\n return /*#__PURE__*/React.createElement(Tag, Object.assign({}, tagProps), value);\n };\n this.renderTagInput = triggerRenderKeys => {\n const {\n disabled,\n size,\n searchAutoFocus,\n placeholder,\n maxTagCount,\n showRestTagsPopover,\n restTagsPopoverProps,\n searchPosition,\n filterTreeNode,\n preventScroll\n } = this.props;\n const {\n inputValue\n } = this.state;\n // auto focus search input divide into two parts\n // 1. filterTreeNode && searchPosition === strings.SEARCH_POSITION_TRIGGER\n // Implemented by passing autofocus to the underlying input's autofocus\n // 2. filterTreeNode && searchPosition === strings.SEARCH_POSITION_DROPDOWN\n // Due to the off-screen rendering in the tooltip implementation mechanism, if it is implemented through the \n // autofocus of the input, when the option panel is opened, the page will scroll to top, so it is necessary \n // to call the focus method through ref in the onVisibleChange callback of the Popover to achieve focus\n const autoFocus = filterTreeNode && searchPosition === strings.SEARCH_POSITION_TRIGGER ? searchAutoFocus : undefined;\n return /*#__PURE__*/React.createElement(TagInput, {\n maxTagCount: maxTagCount,\n disabled: disabled,\n onInputChange: v => this.search(v),\n ref: this.tagInputRef,\n placeholder: placeholder,\n value: triggerRenderKeys,\n inputValue: inputValue,\n size: size,\n showRestTagsPopover: showRestTagsPopover,\n restTagsPopoverProps: restTagsPopoverProps,\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus: autoFocus,\n renderTagItem: (itemKey, index) => this.renderTagItem(itemKey, index),\n onRemove: itemKey => this.removeTag(itemKey),\n expandRestTagsOnClick: false,\n preventScroll: preventScroll\n });\n };\n // render Tree\n this.renderInput = () => {\n const {\n searchPlaceholder,\n searchRender,\n showSearchClear,\n searchPosition,\n searchAutoFocus,\n multiple,\n disabled,\n preventScroll\n } = this.props;\n const {\n inputValue,\n inputTriggerFocus\n } = this.state;\n const isDropdownPositionSearch = searchPosition === strings.SEARCH_POSITION_DROPDOWN;\n const inputcls = cls({\n [`${prefixTree}-input`]: isDropdownPositionSearch,\n [`${prefixcls}-inputTrigger`]: !isDropdownPositionSearch\n });\n const baseInputProps = {\n value: inputValue,\n className: inputcls,\n preventScroll,\n onChange: value => this.search(value)\n };\n const inputDropdownProps = {\n showClear: showSearchClear,\n prefix: /*#__PURE__*/React.createElement(IconSearch, null)\n };\n const inputTriggerProps = {\n autofocus: searchAutoFocus,\n onFocus: e => this.foundation.handleInputTriggerFocus(),\n onBlur: e => this.foundation.handleInputTriggerBlur(),\n disabled\n };\n const realInputProps = isDropdownPositionSearch ? inputDropdownProps : inputTriggerProps;\n const wrapperCls = cls({\n [`${prefixTree}-search-wrapper`]: isDropdownPositionSearch,\n [`${prefixcls}-triggerSingleSearch-wrapper`]: !isDropdownPositionSearch && !multiple,\n [`${prefixcls}-triggerSingleSearch-upper`]: !isDropdownPositionSearch && inputTriggerFocus\n });\n const useCusSearch = typeof searchRender === 'function' || typeof searchRender === 'boolean';\n if (useCusSearch && !searchRender) {\n return null;\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n className: wrapperCls\n }, /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"TreeSelect\"\n }, locale => {\n const placeholder = isDropdownPositionSearch ? searchPlaceholder || locale.searchPlaceholder : '';\n if (useCusSearch) {\n return searchRender(Object.assign(Object.assign(Object.assign({}, realInputProps), baseInputProps), {\n placeholder\n }));\n }\n return /*#__PURE__*/React.createElement(Input, Object.assign({\n \"aria-label\": 'Filter TreeSelect item',\n ref: this.inputRef,\n placeholder: placeholder\n }, baseInputProps, realInputProps));\n }));\n };\n this.renderEmpty = () => {\n const {\n emptyContent\n } = this.props;\n if (emptyContent === null) {\n return null;\n }\n if (emptyContent) {\n return /*#__PURE__*/React.createElement(TreeNode, {\n empty: true,\n emptyContent: this.props.emptyContent\n });\n } else {\n return /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Tree\"\n }, locale => /*#__PURE__*/React.createElement(TreeNode, {\n empty: true,\n emptyContent: locale.emptyText\n }));\n }\n };\n this.onNodeLoad = data => new Promise(resolve => this.foundation.setLoadKeys(data, resolve));\n this.onNodeSelect = (e, treeNode) => {\n this.foundation.handleNodeSelect(e, treeNode);\n };\n this.onNodeCheck = (e, treeNode) => {\n this.foundation.handleNodeSelect(e, treeNode);\n };\n this.onNodeExpand = (e, treeNode) => {\n this.foundation.handleNodeExpand(e, treeNode);\n };\n this.getTreeNodeRequiredProps = () => {\n const {\n expandedKeys,\n selectedKeys,\n checkedKeys,\n halfCheckedKeys,\n keyEntities,\n filteredKeys\n } = this.state;\n return {\n expandedKeys: expandedKeys || new Set(),\n selectedKeys: selectedKeys || [],\n checkedKeys: checkedKeys || new Set(),\n halfCheckedKeys: halfCheckedKeys || new Set(),\n filteredKeys: filteredKeys || new Set(),\n keyEntities\n };\n };\n this.getTreeNodeKey = treeNode => {\n const {\n data\n } = treeNode;\n const {\n key\n } = data;\n return key;\n };\n /* Event handler function after popover visible change */\n this.handlePopoverVisibleChange = isVisible => {\n this.foundation.handlePopoverVisibleChange(isVisible);\n };\n this.afterClose = () => {\n this.foundation.handleAfterClose();\n };\n this.renderTreeNode = (treeNode, ind, style) => {\n const {\n data,\n key\n } = treeNode;\n const treeNodeProps = this.foundation.getTreeNodeProps(key);\n const {\n showLine\n } = this.props;\n if (!treeNodeProps) {\n return null;\n }\n const props = _pick(treeNode, ['key', 'label', 'disabled', 'isLeaf', 'icon', 'isEnd']);\n const {\n keyMaps\n } = this.props;\n const children = data[_get(keyMaps, 'children', 'children')];\n !_isUndefined(children) && (props.children = children);\n return /*#__PURE__*/React.createElement(TreeNode, Object.assign({}, treeNodeProps, data, props, {\n data: data,\n style: style,\n showLine: showLine\n }));\n };\n this.itemKey = (index, data) => {\n const {\n visibleOptions\n } = data;\n // Find the item at the specified index.\n const item = visibleOptions[index];\n // Return a value that uniquely identifies this item.\n return item.key;\n };\n this.renderNodeList = () => {\n const {\n flattenNodes,\n cachedFlattenNodes,\n motionKeys,\n motionType,\n filteredKeys\n } = this.state;\n const {\n direction\n } = this.context;\n const {\n virtualize,\n motionExpand\n } = this.props;\n const isExpandControlled = 'expandedKeys' in this.props;\n if (!virtualize || _isEmpty(virtualize)) {\n return /*#__PURE__*/React.createElement(NodeList, {\n flattenNodes: flattenNodes,\n flattenList: cachedFlattenNodes,\n motionKeys: motionExpand ? motionKeys : new Set([]),\n motionType: motionType,\n // When motionKeys is empty, but filteredKeys is not empty (that is, the search hits), this situation should be distinguished from ordinary motionKeys\n searchTargetIsDeep: isExpandControlled && motionExpand && _isEmpty(motionKeys) && !_isEmpty(filteredKeys),\n onMotionEnd: this.onMotionEnd,\n renderTreeNode: this.renderTreeNode\n });\n }\n const data = {\n visibleOptions: flattenNodes,\n renderOption: this.renderTreeNode\n };\n return /*#__PURE__*/React.createElement(AutoSizer, {\n defaultHeight: virtualize.height,\n defaultWidth: virtualize.width\n }, _ref => {\n let {\n height,\n width\n } = _ref;\n return /*#__PURE__*/React.createElement(VirtualList, {\n itemCount: flattenNodes.length,\n itemSize: virtualize.itemSize,\n height: height,\n width: width,\n // @ts-ignore avoid strict check of itemKey\n itemKey: this.itemKey,\n itemData: data,\n className: `${prefixTree}-virtual-list`,\n style: {\n direction\n }\n }, VirtualRow);\n });\n };\n this.renderTree = () => {\n const {\n keyEntities,\n motionKeys,\n motionType,\n inputValue,\n filteredKeys,\n flattenNodes,\n checkedKeys,\n realCheckedKeys\n } = this.state;\n const {\n loadData,\n filterTreeNode,\n disabled,\n multiple,\n showFilteredOnly,\n motionExpand,\n outerBottomSlot,\n outerTopSlot,\n expandAction,\n labelEllipsis,\n virtualize,\n optionListStyle,\n searchPosition,\n renderLabel,\n renderFullLabel,\n checkRelation,\n emptyContent\n } = this.props;\n const wrapperCls = cls(`${prefixTree}-wrapper`);\n const searchNoRes = Boolean(inputValue) && !filteredKeys.size;\n const noData = _isEmpty(flattenNodes) || showFilteredOnly && searchNoRes;\n const isDropdownPositionSearch = searchPosition === strings.SEARCH_POSITION_DROPDOWN;\n const listCls = cls(`${prefixTree}-option-list ${prefixTree}-option-list-block`, {\n [`${prefixTree}-option-list-hidden`]: emptyContent === null && noData\n });\n return /*#__PURE__*/React.createElement(TreeContext.Provider, {\n value: {\n loadData,\n treeDisabled: disabled,\n motion: motionExpand,\n motionKeys,\n motionType,\n expandAction,\n filterTreeNode,\n keyEntities,\n onNodeClick: this.onNodeClick,\n onNodeDoubleClick: this.onNodeDoubleClick,\n // tree node will call this function when treeNode is right clicked\n onNodeRightClick: _noop,\n onNodeExpand: this.onNodeExpand,\n onNodeSelect: this.onNodeSelect,\n onNodeCheck: this.onNodeCheck,\n renderTreeNode: this.renderTreeNode,\n multiple,\n showFilteredOnly,\n isSearching: Boolean(inputValue),\n renderLabel,\n renderFullLabel,\n labelEllipsis: typeof labelEllipsis === 'undefined' ? virtualize : labelEllipsis\n }\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: wrapperCls\n }, outerTopSlot, !outerTopSlot && filterTreeNode && isDropdownPositionSearch && this.renderInput(), /*#__PURE__*/React.createElement(\"div\", {\n className: listCls,\n role: \"tree\",\n \"aria-multiselectable\": multiple ? true : false,\n style: optionListStyle\n }, noData ? this.renderEmpty() : multiple ? (/*#__PURE__*/React.createElement(CheckboxGroup, {\n value: Array.from(checkRelation === 'related' ? checkedKeys : realCheckedKeys)\n }, this.renderNodeList())) : this.renderNodeList()), outerBottomSlot));\n };\n this.state = {\n inputTriggerFocus: false,\n isOpen: false,\n isFocus: false,\n // isInput: false,\n rePosKey: key,\n dropdownMinWidth: null,\n inputValue: '',\n keyEntities: {},\n treeData: [],\n flattenNodes: [],\n cachedFlattenNodes: undefined,\n selectedKeys: [],\n checkedKeys: new Set(),\n halfCheckedKeys: new Set(),\n realCheckedKeys: new Set([]),\n disabledKeys: new Set(),\n motionKeys: new Set([]),\n motionType: 'hide',\n expandedKeys: new Set(props.expandedKeys),\n filteredKeys: new Set(),\n filteredExpandedKeys: new Set(),\n filteredShownKeys: new Set(),\n prevProps: null,\n isHovering: false,\n cachedKeyValuePairs: {},\n loadedKeys: new Set(),\n loadingKeys: new Set()\n };\n this.inputRef = /*#__PURE__*/React.createRef();\n this.tagInputRef = /*#__PURE__*/React.createRef();\n this.triggerRef = /*#__PURE__*/React.createRef();\n this.optionsRef = /*#__PURE__*/React.createRef();\n this.clickOutsideHandler = null;\n this.foundation = new TreeSelectFoundation(this.adapter);\n this.treeSelectID = Math.random().toString(36).slice(2);\n this.onMotionEnd = () => {\n this.adapter.rePositionDropdown();\n };\n }\n static getDerivedStateFromProps(props, prevState) {\n const {\n prevProps,\n rePosKey\n } = prevState;\n const {\n keyMaps\n } = props;\n const needUpdate = name => !prevProps && name in props || prevProps && !_isEqual(prevProps[name], props[name]);\n let treeData;\n const withObject = props.onChangeWithObject;\n let keyEntities = prevState.keyEntities || {};\n let valueEntities = prevState.cachedKeyValuePairs || {};\n const newState = {\n prevProps: props\n };\n const needUpdateTreeData = needUpdate('treeData');\n const needUpdateExpandedKeys = needUpdate('expandedKeys');\n const isExpandControlled = 'expandedKeys' in props;\n const isSearching = Boolean(props.filterTreeNode && prevState.inputValue && prevState.inputValue.length);\n // TreeNode\n if (needUpdateTreeData) {\n treeData = props.treeData;\n newState.treeData = treeData;\n const entitiesMap = convertDataToEntities(treeData, keyMaps);\n newState.keyEntities = Object.assign({}, entitiesMap.keyEntities);\n keyEntities = newState.keyEntities;\n newState.cachedKeyValuePairs = Object.assign({}, entitiesMap.valueEntities);\n valueEntities = newState.cachedKeyValuePairs;\n }\n // if treeData keys changes, we won't show animation\n if (treeData && props.motion && !_isEqual(Object.keys(newState.keyEntities), Object.keys(prevState.keyEntities))) {\n if (prevProps && props.motion) {\n newState.motionKeys = new Set([]);\n newState.motionType = null;\n }\n }\n const expandAllWhenDataChange = needUpdateTreeData && props.expandAll;\n if (!isSearching) {\n // expandedKeys\n if (needUpdateExpandedKeys || prevProps && needUpdate('autoExpandParent')) {\n newState.expandedKeys = calcExpandedKeys(props.expandedKeys, keyEntities, props.autoExpandParent || !prevProps);\n // only show animation when treeData does not change\n if (prevProps && props.motion && !treeData) {\n const {\n motionKeys,\n motionType\n } = calcMotionKeys(prevState.expandedKeys, newState.expandedKeys, keyEntities);\n newState.motionKeys = new Set(motionKeys);\n newState.motionType = motionType;\n if (motionType === 'hide') {\n // cache flatten nodes: expandedKeys changed may not be triggered by interaction\n newState.cachedFlattenNodes = cloneDeep(prevState.flattenNodes);\n }\n }\n } else if (!prevProps && (props.defaultExpandAll || props.expandAll) || expandAllWhenDataChange) {\n newState.expandedKeys = new Set(Object.keys(keyEntities));\n } else if (!prevProps && props.defaultExpandedKeys) {\n newState.expandedKeys = calcExpandedKeys(props.defaultExpandedKeys, keyEntities);\n } else if (!prevProps && props.defaultValue) {\n newState.expandedKeys = calcExpandedKeysForValues(normalizeValue(props.defaultValue, withObject, keyMaps), keyEntities, props.multiple, valueEntities);\n } else if (!prevProps && props.value) {\n newState.expandedKeys = calcExpandedKeysForValues(normalizeValue(props.value, withObject, keyMaps), keyEntities, props.multiple, valueEntities);\n }\n if (!newState.expandedKeys) {\n delete newState.expandedKeys;\n }\n if (treeData || newState.expandedKeys) {\n const flattenNodes = flattenTreeData(treeData || prevState.treeData, newState.expandedKeys || prevState.expandedKeys, keyMaps);\n newState.flattenNodes = flattenNodes;\n }\n } else {\n let filteredState;\n // treeData changed while searching\n if (treeData) {\n // Get filter data\n filteredState = filterTreeData({\n treeData,\n inputValue: prevState.inputValue,\n filterTreeNode: props.filterTreeNode,\n filterProps: props.treeNodeFilterProp,\n showFilteredOnly: props.showFilteredOnly,\n keyEntities: newState.keyEntities,\n prevExpandedKeys: [...prevState.filteredExpandedKeys],\n keyMaps: keyMaps\n });\n newState.flattenNodes = filteredState.flattenNodes;\n newState.motionKeys = new Set([]);\n newState.filteredKeys = filteredState.filteredKeys;\n newState.filteredShownKeys = filteredState.filteredShownKeys;\n newState.filteredExpandedKeys = filteredState.filteredExpandedKeys;\n }\n // expandedKeys changed while searching\n if (props.expandedKeys) {\n newState.filteredExpandedKeys = calcExpandedKeys(props.expandedKeys, keyEntities, props.autoExpandParent || !prevProps);\n if (prevProps && props.motion) {\n const prevKeys = prevState ? prevState.filteredExpandedKeys : new Set([]);\n // only show animation when treeData does not change\n if (!treeData) {\n const motionResult = calcMotionKeys(prevKeys, newState.filteredExpandedKeys, keyEntities);\n let {\n motionKeys\n } = motionResult;\n const {\n motionType\n } = motionResult;\n if (props.showFilteredOnly) {\n motionKeys = motionKeys.filter(key => prevState.filteredShownKeys.has(key));\n }\n if (motionType === 'hide') {\n // cache flatten nodes: expandedKeys changed may not be triggered by interaction\n newState.cachedFlattenNodes = cloneDeep(prevState.flattenNodes);\n }\n newState.motionKeys = new Set(motionKeys);\n newState.motionType = motionType;\n }\n }\n newState.flattenNodes = flattenTreeData(treeData || prevState.treeData, newState.filteredExpandedKeys || prevState.filteredExpandedKeys, keyMaps, props.showFilteredOnly && prevState.filteredShownKeys);\n }\n }\n // selectedKeys: single mode controlled\n const isMultiple = props.multiple;\n if (!isMultiple) {\n if (needUpdate('value')) {\n newState.selectedKeys = findKeysForValues(normalizeValue(props.value, withObject, keyMaps), valueEntities, isMultiple);\n } else if (!prevProps && props.defaultValue) {\n newState.selectedKeys = findKeysForValues(normalizeValue(props.defaultValue, withObject, keyMaps), valueEntities, isMultiple);\n } else if (treeData) {\n // If `treeData` changed, we also need check it\n if (props.value) {\n newState.selectedKeys = findKeysForValues(normalizeValue(props.value, withObject, keyMaps) || '', valueEntities, isMultiple);\n } else {\n newState.selectedKeys = updateKeys(prevState.selectedKeys, keyEntities);\n }\n }\n } else {\n // checkedKeys: multiple mode controlled || data changed\n let checkedKeyValues;\n if (needUpdate('value')) {\n checkedKeyValues = findKeysForValues(normalizeValue(props.value, withObject, keyMaps), valueEntities, isMultiple);\n } else if (!prevProps && props.defaultValue) {\n checkedKeyValues = findKeysForValues(normalizeValue(props.defaultValue, withObject, keyMaps), valueEntities, isMultiple);\n } else if (treeData) {\n // If `treeData` changed, we also need check it\n if (props.value) {\n checkedKeyValues = findKeysForValues(normalizeValue(props.value, withObject, keyMaps) || [], valueEntities, isMultiple);\n } else {\n checkedKeyValues = updateKeys(props.checkRelation === 'related' ? prevState.checkedKeys : prevState.realCheckedKeys, keyEntities);\n }\n }\n if (checkedKeyValues) {\n if (props.checkRelation === 'unRelated') {\n newState.realCheckedKeys = new Set(checkedKeyValues);\n } else if (props.checkRelation === 'related') {\n const {\n checkedKeys,\n halfCheckedKeys\n } = calcCheckedKeys(checkedKeyValues, keyEntities);\n newState.checkedKeys = checkedKeys;\n newState.halfCheckedKeys = halfCheckedKeys;\n }\n }\n }\n // loadedKeys\n if (needUpdate('loadedKeys')) {\n newState.loadedKeys = new Set(props.loadedKeys);\n }\n // ================== rePosKey ==================\n if (needUpdateTreeData || needUpdate('value')) {\n newState.rePosKey = rePosKey + 1;\n }\n // ================ disableStrictly =================\n if (treeData && props.disableStrictly && props.checkRelation === 'related') {\n newState.disabledKeys = calcDisabledKeys(keyEntities, keyMaps);\n }\n return newState;\n }\n get adapter() {\n var _this = this;\n const filterAdapter = {\n updateInputValue: value => {\n this.setState({\n inputValue: value\n });\n }\n };\n const treeSelectAdapter = {\n registerClickOutsideHandler: cb => {\n this.adapter.unregisterClickOutsideHandler();\n const clickOutsideHandler = e => {\n const optionInstance = this.optionsRef && this.optionsRef.current;\n const triggerDom = this.triggerRef && this.triggerRef.current;\n const optionsDom = ReactDOM.findDOMNode(optionInstance);\n const target = e.target;\n const path = e.composedPath && e.composedPath() || [target];\n if (optionsDom && (!optionsDom.contains(target) || !optionsDom.contains(target.parentNode)) && triggerDom && !triggerDom.contains(target) && !(path.includes(triggerDom) || path.includes(optionsDom))) {\n cb(e);\n }\n };\n this.clickOutsideHandler = clickOutsideHandler;\n document.addEventListener('mousedown', clickOutsideHandler, false);\n },\n unregisterClickOutsideHandler: () => {\n if (!this.clickOutsideHandler) {\n return;\n }\n document.removeEventListener('mousedown', this.clickOutsideHandler, false);\n this.clickOutsideHandler = null;\n },\n rePositionDropdown: () => {\n let {\n rePosKey\n } = this.state;\n rePosKey = rePosKey + 1;\n this.setState({\n rePosKey\n });\n }\n };\n const treeAdapter = {\n updateState: states => {\n this.setState(Object.assign({}, states));\n },\n notifySelect: (selectKey, bool, node) => {\n this.props.onSelect && this.props.onSelect(selectKey, bool, node);\n },\n notifySearch: (input, filteredExpandedKeys, filteredNodes) => {\n this.props.onSearch && this.props.onSearch(input, filteredExpandedKeys, filteredNodes);\n },\n cacheFlattenNodes: bool => {\n this.setState({\n cachedFlattenNodes: bool ? cloneDeep(this.state.flattenNodes) : undefined\n });\n },\n notifyLoad: (newLoadedKeys, data) => {\n const {\n onLoad\n } = this.props;\n _isFunction(onLoad) && onLoad(newLoadedKeys, data);\n },\n notifyClear: e => {\n this.props.onClear && this.props.onClear(e);\n }\n };\n return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, super.adapter), filterAdapter), treeSelectAdapter), treeAdapter), {\n updateLoadKeys: (data, resolve) => {\n this.setState(_ref2 => {\n let {\n loadedKeys,\n loadingKeys\n } = _ref2;\n return this.foundation.handleNodeLoad(loadedKeys, loadingKeys, data, resolve);\n });\n },\n updateState: states => {\n this.setState(Object.assign({}, states));\n },\n openMenu: () => {\n this.setState({\n isOpen: true\n }, () => {\n this.props.onVisibleChange(true);\n });\n },\n closeMenu: cb => {\n this.setState({\n isOpen: false\n }, () => {\n cb && cb();\n this.props.onVisibleChange(false);\n });\n },\n getTriggerWidth: () => {\n const el = this.triggerRef.current;\n return el && el.getBoundingClientRect().width;\n },\n setOptionWrapperWidth: width => {\n this.setState({\n dropdownMinWidth: width\n });\n },\n notifyChange: (value, node, e) => {\n this.props.onChange && this.props.onChange(value, node, e);\n },\n notifyChangeWithObject: (node, e) => {\n this.props.onChange && this.props.onChange(node, e);\n },\n notifyExpand: (expandedKeys, _ref3) => {\n let {\n expanded: bool,\n node\n } = _ref3;\n this.props.onExpand && this.props.onExpand([...expandedKeys], {\n expanded: bool,\n node\n });\n if (bool && this.props.loadData) {\n this.onNodeLoad(node);\n }\n },\n notifyFocus: function () {\n _this.props.onFocus && _this.props.onFocus(...arguments);\n },\n notifyBlur: function () {\n _this.props.onBlur && _this.props.onBlur(...arguments);\n },\n toggleHovering: bool => {\n this.setState({\n isHovering: bool\n });\n },\n updateInputFocus: bool => {\n if (bool) {\n if (this.inputRef && this.inputRef.current) {\n const {\n preventScroll\n } = this.props;\n this.inputRef.current.focus({\n preventScroll\n });\n }\n if (this.tagInputRef && this.tagInputRef.current) {\n this.tagInputRef.current.focus();\n }\n } else {\n if (this.inputRef && this.inputRef.current) {\n this.inputRef.current.blur();\n }\n if (this.tagInputRef && this.tagInputRef.current) {\n this.tagInputRef.current.blur();\n }\n }\n },\n updateIsFocus: bool => {\n this.setState({\n isFocus: bool\n });\n }\n });\n }\n componentDidMount() {\n this.foundation.init();\n }\n componentWillUnmount() {\n this.foundation.destroy();\n }\n render() {\n const content = this.renderContent();\n const {\n motion,\n zIndex,\n mouseLeaveDelay,\n mouseEnterDelay,\n autoAdjustOverflow,\n stopPropagation,\n getPopupContainer,\n dropdownMargin,\n position\n } = this.props;\n const {\n isOpen,\n rePosKey\n } = this.state;\n const selection = this.renderSelection();\n const pos = position ? position : 'bottomLeft';\n return /*#__PURE__*/React.createElement(Popover, {\n stopPropagation: stopPropagation,\n getPopupContainer: getPopupContainer,\n zIndex: zIndex,\n motion: motion,\n margin: dropdownMargin,\n ref: this.optionsRef,\n content: content,\n visible: isOpen,\n trigger: \"custom\",\n rePosKey: rePosKey,\n position: pos,\n autoAdjustOverflow: autoAdjustOverflow,\n mouseLeaveDelay: mouseLeaveDelay,\n mouseEnterDelay: mouseEnterDelay,\n onVisibleChange: this.handlePopoverVisibleChange,\n afterClose: this.afterClose\n }, selection);\n }\n}\nTreeSelect.contextType = ConfigContext;\nTreeSelect.propTypes = {\n 'aria-describedby': PropTypes.string,\n 'aria-errormessage': PropTypes.string,\n 'aria-invalid': PropTypes.bool,\n 'aria-labelledby': PropTypes.string,\n 'aria-required': PropTypes.bool,\n borderless: PropTypes.bool,\n loadedKeys: PropTypes.arrayOf(PropTypes.string),\n loadData: PropTypes.func,\n onLoad: PropTypes.func,\n arrowIcon: PropTypes.node,\n clearIcon: PropTypes.node,\n defaultOpen: PropTypes.bool,\n defaultValue: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]),\n defaultExpandAll: PropTypes.bool,\n defaultExpandedKeys: PropTypes.array,\n expandAll: PropTypes.bool,\n disabled: PropTypes.bool,\n disableStrictly: PropTypes.bool,\n // Whether to turn on the input box filtering function, when it is a function, it represents a custom filtering function\n filterTreeNode: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n multiple: PropTypes.bool,\n searchPlaceholder: PropTypes.string,\n searchAutoFocus: PropTypes.bool,\n virtualize: PropTypes.object,\n treeNodeFilterProp: PropTypes.string,\n onChange: PropTypes.func,\n onClear: PropTypes.func,\n onSearch: PropTypes.func,\n onSelect: PropTypes.func,\n onExpand: PropTypes.func,\n onChangeWithObject: PropTypes.bool,\n onBlur: PropTypes.func,\n onFocus: PropTypes.func,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.array, PropTypes.object]),\n expandedKeys: PropTypes.array,\n autoExpandParent: PropTypes.bool,\n showClear: PropTypes.bool,\n showSearchClear: PropTypes.bool,\n autoAdjustOverflow: PropTypes.bool,\n showFilteredOnly: PropTypes.bool,\n showLine: PropTypes.bool,\n motionExpand: PropTypes.bool,\n emptyContent: PropTypes.node,\n keyMaps: PropTypes.object,\n leafOnly: PropTypes.bool,\n treeData: PropTypes.arrayOf(PropTypes.shape({\n key: PropTypes.string,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n label: PropTypes.any\n })),\n dropdownClassName: PropTypes.string,\n dropdownStyle: PropTypes.object,\n dropdownMargin: PropTypes.oneOfType([PropTypes.number, PropTypes.object]),\n motion: PropTypes.bool,\n placeholder: PropTypes.string,\n maxTagCount: PropTypes.number,\n size: PropTypes.oneOf(strings.SIZE_SET),\n className: PropTypes.string,\n style: PropTypes.object,\n treeNodeLabelProp: PropTypes.string,\n suffix: PropTypes.node,\n prefix: PropTypes.node,\n insetLabel: PropTypes.node,\n insetLabelId: PropTypes.string,\n zIndex: PropTypes.number,\n getPopupContainer: PropTypes.func,\n dropdownMatchSelectWidth: PropTypes.bool,\n validateStatus: PropTypes.oneOf(strings.STATUS),\n mouseEnterDelay: PropTypes.number,\n mouseLeaveDelay: PropTypes.number,\n triggerRender: PropTypes.func,\n stopPropagation: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n outerBottomSlot: PropTypes.node,\n outerTopSlot: PropTypes.node,\n onVisibleChange: PropTypes.func,\n expandAction: PropTypes.oneOf(['click', 'doubleClick', false]),\n searchPosition: PropTypes.oneOf([strings.SEARCH_POSITION_DROPDOWN, strings.SEARCH_POSITION_TRIGGER]),\n clickToHide: PropTypes.bool,\n renderLabel: PropTypes.func,\n renderFullLabel: PropTypes.func,\n labelEllipsis: PropTypes.bool,\n optionListStyle: PropTypes.object,\n searchRender: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n renderSelectedItem: PropTypes.func,\n checkRelation: PropTypes.string,\n 'aria-label': PropTypes.string,\n showRestTagsPopover: PropTypes.bool,\n restTagsPopoverProps: PropTypes.object,\n preventScroll: PropTypes.bool,\n clickTriggerToHide: PropTypes.bool,\n autoMergeValue: PropTypes.bool\n};\nTreeSelect.defaultProps = {\n borderless: false,\n searchPosition: strings.SEARCH_POSITION_DROPDOWN,\n arrowIcon: /*#__PURE__*/React.createElement(IconChevronDown, null),\n autoExpandParent: false,\n autoAdjustOverflow: true,\n stopPropagation: true,\n motion: true,\n motionExpand: true,\n expandAll: false,\n zIndex: popoverNumbers.DEFAULT_Z_INDEX,\n disableStrictly: false,\n multiple: false,\n filterTreeNode: false,\n size: 'default',\n treeNodeFilterProp: 'label',\n onChangeWithObject: false,\n treeNodeLabelProp: 'label',\n dropdownMatchSelectWidth: true,\n defaultOpen: false,\n showSearchClear: true,\n showClear: false,\n onVisibleChange: _noop,\n expandAction: false,\n clickToHide: true,\n searchAutoFocus: false,\n checkRelation: 'related',\n 'aria-label': 'TreeSelect',\n showRestTagsPopover: false,\n restTagsPopoverProps: {},\n clickTriggerToHide: true,\n autoMergeValue: true\n};\nexport default TreeSelect;","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-cascader`,\n PREFIX_OPTION: `${BASE_CLASS_PREFIX}-cascader-option`\n};\nconst strings = {\n SIZE_SET: ['small', 'large', 'default'],\n VALIDATE_STATUS: ['success', 'default', 'error', 'warning'],\n IS_KEY: 'isKey',\n IS_VALUE: 'isValue',\n SHOW_NEXT_BY_CLICK: 'click',\n SHOW_NEXT_BY_HOVER: 'hover',\n /* Merge Type */\n LEAF_ONLY_MERGE_TYPE: 'leafOnly',\n AUTO_MERGE_VALUE_MERGE_TYPE: 'autoMergeValue',\n NONE_MERGE_TYPE: 'none',\n SEARCH_POSITION_TRIGGER: 'trigger',\n SEARCH_POSITION_CUSTOM: 'custom',\n RELATED: 'related',\n UN_RELATED: 'unRelated'\n};\nconst numbers = {};\nexport { cssClasses, strings, numbers };\nexport const VALUE_SPLIT = '_SEMI_CASCADER_SPLIT_';","import _isUndefined from \"lodash/isUndefined\";\nimport _isNull from \"lodash/isNull\";\nimport { strings, VALUE_SPLIT } from './constants';\nfunction getPosition(level, index) {\n return `${level}-${index}`;\n}\nexport function isValid(val) {\n return !_isNull(val) && !_isUndefined(val);\n}\nexport function normalizedArr(val) {\n if (!Array.isArray(val)) {\n return [val];\n } else {\n return val;\n }\n}\n/**\n * @returns whether option includes sugInput.\n * When filterTreeNode is a function,returns the result of filterTreeNode which called with (sugInput, target, option).\n */\nexport function filter(sugInput, option, filterTreeNode, filteredPath) {\n if (!filterTreeNode) {\n return true;\n }\n let filterFn = filterTreeNode;\n let target;\n if (typeof filterTreeNode === 'boolean') {\n filterFn = (targetVal, val) => {\n const input = targetVal.toLowerCase();\n return val.toLowerCase().includes(input);\n };\n // 当 filterTreeNode 是 bool 类型时,由 Cascader 内部判断是否符合筛选条件,使用 join('') 修复搜索英文逗号导致所有数据被匹配问题\n // When the type of of filterTreeNode is bool, Cascader internally determines whether it meets the filtering conditions.\n // Use join('') to fix the problem that searching for English commas causes all data to be matched.\n target = filteredPath.join('');\n } else {\n // 当 filterTreeNode 为函数类型时,由用户判断是否符合筛选条件,使用 join(), 和原来保持一致\n // When the type of of filterTreeNode is function, the user determines whether it meets the filtering conditions, \n // uses join() to be consistent with the previous version.\n target = filteredPath.join();\n }\n return filterFn(sugInput, target, option);\n}\n/**\n * Traverse all the data by `treeData`.\n */\nfunction traverseDataNodes(treeNodes, callback) {\n const processNode = (node, ind, parent) => {\n const children = node ? node.children : treeNodes;\n let item = null;\n // Process node if is not root\n if (node) {\n const key = parent ? `${parent.key}${VALUE_SPLIT}${node.value}` : `${node.value}`;\n const pos = parent ? getPosition(parent.pos, ind) : `${ind}`;\n item = {\n data: Object.assign({}, node),\n ind,\n key,\n pos,\n level: parent ? parent.level + 1 : 0,\n parentKey: parent ? parent.key : null,\n path: parent ? [...parent.path, key] : [key],\n valuePath: parent ? [...parent.valuePath, node.value] : [node.value]\n };\n callback(item);\n }\n // Process children node\n if (children) {\n children.forEach((subNode, subIndex) => {\n processNode(subNode, subIndex, item);\n });\n }\n };\n processNode(null);\n}\nexport function getKeysByValuePath(valuePath) {\n if (valuePath === null || valuePath === void 0 ? void 0 : valuePath.length) {\n if (Array.isArray(valuePath[0])) {\n return valuePath.map(item => getKeyByValuePath(item));\n } else {\n return [getKeyByValuePath(valuePath)];\n }\n }\n return [];\n}\nexport function getKeyByValuePath(valuePath) {\n return valuePath.join(VALUE_SPLIT);\n}\nexport function getValuePathByKey(key) {\n return key.split(VALUE_SPLIT);\n}\nexport function getKeyByPos(pos, treeData) {\n const posArr = pos.split('-').map(item => Number(item));\n let resultData = treeData;\n let valuePath = [];\n posArr.forEach((item, index) => {\n var _a;\n resultData = index === 0 ? resultData[item] : (_a = resultData === null || resultData === void 0 ? void 0 : resultData.children) === null || _a === void 0 ? void 0 : _a[item];\n valuePath.push(resultData === null || resultData === void 0 ? void 0 : resultData.value);\n });\n return getKeyByValuePath(valuePath);\n}\nexport function convertDataToEntities(dataNodes) {\n const keyEntities = {};\n traverseDataNodes(dataNodes, data => {\n const {\n key,\n parentKey\n } = data;\n const entity = Object.assign({}, data);\n keyEntities[key] = entity;\n // Fill children\n entity.parent = keyEntities[parentKey];\n if (entity.parent) {\n entity.parent.children = entity.parent.children || [];\n entity.parent.children.push(entity);\n }\n });\n return keyEntities;\n}\nexport function calcMergeType(autoMergeValue, leafOnly) {\n let mergeType;\n if (leafOnly) {\n mergeType = strings.LEAF_ONLY_MERGE_TYPE;\n } else if (autoMergeValue) {\n mergeType = strings.AUTO_MERGE_VALUE_MERGE_TYPE;\n } else {\n mergeType = strings.NONE_MERGE_TYPE;\n }\n return mergeType;\n}","import _isObject from \"lodash/isObject\";\nimport _isFunction from \"lodash/isFunction\";\nimport _includes from \"lodash/includes\";\nimport _isNumber from \"lodash/isNumber\";\nimport _isEmpty from \"lodash/isEmpty\";\nimport _assign from \"lodash/assign\";\nimport _isUndefined from \"lodash/isUndefined\";\nimport _difference from \"lodash/difference\";\nimport _get from \"lodash/get\";\nimport _isEqual from \"lodash/isEqual\";\nimport BaseFoundation from '../base/foundation';\nimport { findAncestorKeys, calcCheckedKeysForUnchecked, calcCheckedKeysForChecked, calcCheckedKeys, findDescendantKeys, normalizeKeyList } from '../tree/treeUtil';\nimport { filter, convertDataToEntities, normalizedArr, isValid, calcMergeType, getKeysByValuePath, getKeyByPos } from './util';\nimport { strings } from './constants';\nimport isEnterPress from '../utils/isEnterPress';\nimport { ESC_KEY } from '../utils/keyCode';\nexport default class CascaderFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n this.handleKeyDown = e => {\n if (e.key === ESC_KEY) {\n const isOpen = this.getState('isOpen');\n isOpen && this.close(e);\n }\n };\n this.updateSearching = isSearching => {\n this._adapter.updateStates({\n isSearching: false\n });\n };\n this.handleTagRemoveByKey = key => {\n var _a, _b;\n const {\n keyEntities\n } = this.getStates();\n const {\n disabled\n } = this.getProps();\n if (disabled) {\n /* istanbul ignore next */\n return;\n }\n const removedItem = (_a = keyEntities[key]) !== null && _a !== void 0 ? _a : {};\n !((_b = removedItem === null || removedItem === void 0 ? void 0 : removedItem.data) === null || _b === void 0 ? void 0 : _b.disable) && this._handleMultipleSelect(removedItem);\n this._adapter.rePositionDropdown();\n };\n this.handleTagRemoveInTrigger = pos => {\n const {\n treeData\n } = this.getStates();\n const key = getKeyByPos(pos, treeData);\n this.handleTagRemoveByKey(key);\n };\n }\n init() {\n const isOpen = this.getProp('open') || this.getProp('defaultOpen');\n this.collectOptions(true);\n this._adapter.updateLoadingKeyRefValue(new Set());\n this._adapter.updateLoadedKeyRefValue(new Set());\n if (isOpen && !this._isDisabled()) {\n this.open();\n }\n }\n destroy() {\n this._adapter.unregisterClickOutsideHandler();\n }\n _isDisabled() {\n return this.getProp('disabled');\n }\n _isFilterable() {\n return Boolean(this.getProp('filterTreeNode')); // filter can be boolean or function\n }\n _notifyChange(item) {\n const {\n onChangeWithObject,\n multiple\n } = this.getProps();\n const valueProp = onChangeWithObject ? [] : 'value';\n if (multiple) {\n const valuePath = [];\n // @ts-ignore\n item.forEach(checkedKey => {\n const valuePathItem = this.getItemPropPath(checkedKey, valueProp);\n valuePath.push(valuePathItem);\n });\n this._adapter.notifyChange(valuePath);\n } else {\n const valuePath = _isUndefined(item) || !('key' in item) ? [] : this.getItemPropPath(item.key, valueProp);\n this._adapter.notifyChange(valuePath);\n }\n }\n _isLeaf(item) {\n if (this.getProp('loadData')) {\n return Boolean(item.isLeaf);\n }\n return !item.children || !item.children.length;\n }\n _clearInput() {\n this._adapter.updateInputValue('');\n }\n // Scenes that may trigger blur:\n // 1、clickOutSide\n _notifyBlur(e) {\n this._adapter.notifyBlur(e);\n }\n // Scenes that may trigger focus:\n // 1、click selection\n _notifyFocus(e) {\n this._adapter.notifyFocus(e);\n }\n _isOptionDisabled(key, keyEntities) {\n const isDisabled = findAncestorKeys([key], keyEntities, true).some(item => keyEntities[item].data.disabled);\n return isDisabled;\n }\n // prop: is array, return all data\n getItemPropPath(selectedKey, prop, keyEntities) {\n const searchMap = keyEntities || this.getState('keyEntities');\n const selectedItem = searchMap[selectedKey];\n let path = [];\n if (!selectedItem) {\n // do nothing\n } else if (selectedItem._notExist) {\n path = selectedItem.path;\n } else {\n const keyPath = selectedItem.path;\n path = Array.isArray(prop) ? keyPath.map(key => searchMap[key].data) : keyPath.map(key => searchMap[key].data[prop]);\n }\n return path;\n }\n _getCacheValue(keyEntities) {\n const {\n selectedKeys\n } = this.getStates();\n const selectedKey = Array.from(selectedKeys)[0];\n let cacheValue;\n /* selectedKeys does not match keyEntities */\n if (_isEmpty(keyEntities[selectedKey])) {\n if (_includes(selectedKey, 'not-exist-')) {\n /* Get the value behind not-exist- */\n const targetValue = selectedKey.match(/not-exist-(\\S*)/)[1];\n if (_isEmpty(keyEntities[targetValue])) {\n cacheValue = targetValue;\n } else {\n /**\n * 典型的场景是: 假设我们选中了 0-0 这个节点,此时 selectedKeys=Set('0-0'),\n * 输入框会显示 0-0 的 label。当 treeData 发生更新,假设此时 0-0 在 treeData\n * 中不存在,则 selectedKeys=Set('not-exist-0-0'),此时输入框显示的是 0-0,\n * 也就是显示 not-exist- 后的内容。当treeData再次更新,假设此时 0-0 在 treeData\n * 中存在,则 selectedKeys=Set('0-0'),此时输入框显示 0-0 的 label。 这个地\n * 方做的操作就是,为了例子中第二次更新后 0-0 label 能够正常显示。\n */\n /**\n * The typical scenario is: suppose we select the 0-0 node, at this time\n * selectedKeys=Set('0-0'), the input box will display a 0-0 label. When\n * treeData is updated, assuming 0-0 does not exist in treeData at this\n * time, then selectedKeys=Set('not-exist-0-0'), at this time the input\n * box displays 0-0, which means not-exist -After the content. When treeData\n * is updated again, assuming that 0-0 exists in treeData at this time,\n * then selectedKeys=Set('0-0'), and the input box displays a label of\n * 0-0 at this time. The operation done here is for the 0-0 label to be\n * displayed normally after the second update in the example.\n */\n cacheValue = keyEntities[targetValue].valuePath;\n }\n } else {\n cacheValue = selectedKey;\n }\n /* selectedKeys match keyEntities */\n } else {\n /* selectedKeys match keyEntities */\n cacheValue = keyEntities[selectedKey].valuePath;\n }\n return cacheValue;\n }\n collectOptions() {\n let init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n const {\n treeData,\n value,\n defaultValue\n } = this.getProps();\n const keyEntities = convertDataToEntities(treeData);\n this._adapter.rePositionDropdown();\n let cacheValue;\n /* when mount */\n if (init) {\n cacheValue = defaultValue;\n } else if (!_isEmpty(keyEntities)) {\n cacheValue = this._getCacheValue(keyEntities);\n }\n const selectedValue = !this._isControlledComponent() ? cacheValue : _isUndefined(value) ? [] : value;\n if (isValid(selectedValue)) {\n this.updateSelectedKey(selectedValue, keyEntities);\n } else {\n this._adapter.updateStates({\n keyEntities\n });\n }\n }\n // call when props.value change\n handleValueChange(value) {\n const {\n keyEntities\n } = this.getStates();\n this.updateSelectedKey(value, keyEntities);\n }\n /**\n * When single selection, the clear objects of\n * selectedKeys, activeKeys, filteredKeys, input, etc.\n */\n _getClearSelectedKey(filterable) {\n const updateStates = {};\n const {\n searchPlaceholder,\n placeholder,\n multiple\n } = this.getProps();\n updateStates.selectedKeys = new Set([]);\n updateStates.activeKeys = new Set([]);\n updateStates.filteredKeys = new Set([]);\n if (filterable && !multiple) {\n updateStates.inputPlaceHolder = searchPlaceholder || placeholder || '';\n updateStates.inputValue = '';\n }\n return updateStates;\n }\n updateSelectedKey(value, keyEntities) {\n const {\n changeOnSelect,\n onChangeWithObject,\n multiple\n } = this.getProps();\n const {\n activeKeys,\n loading,\n keyEntities: keyEntityState,\n selectedKeys: selectedKeysState\n } = this.getStates();\n const loadingKeys = this._adapter.getLoadingKeyRefValue();\n const filterable = this._isFilterable();\n const loadingActive = [...activeKeys].filter(i => loadingKeys.has(i));\n const normalizedValue = normalizedArr(value);\n const valuePath = onChangeWithObject && _isObject(normalizedValue[0]) ? normalizedValue.map(i => i.value) : normalizedValue;\n const selectedKeys = getKeysByValuePath(valuePath);\n let updateStates = {};\n const selectedKey = selectedKeys.length > 0 ? selectedKeys[0] : undefined;\n const selectedItem = selectedKey ? keyEntities[selectedKey] : undefined;\n if (selectedItem) {\n /**\n * When changeOnSelect is turned on, or the target option is a leaf option,\n * the option is considered to be selected, even if the option is disabled\n */\n if (changeOnSelect || this._isLeaf(selectedItem.data)) {\n updateStates.selectedKeys = new Set([selectedKey]);\n if (!loadingActive.length) {\n updateStates.activeKeys = new Set(selectedItem.path);\n }\n if (filterable && !multiple) {\n const displayText = this.renderDisplayText(selectedKey, keyEntities);\n updateStates.inputPlaceHolder = displayText;\n /*\n * displayText should not be assign to inputValue,\n * cause inputValue should only change by user enter\n */\n // updateStates.inputValue = displayText;\n }\n /**\n * If selectedKeys does not meet the update conditions,\n * and state.selectedKeys is the same as selectedKeys\n * at this time, state.selectedKeys should be cleared.\n * A typical scenario is:\n * The originally selected node is the leaf node, but\n * after props.treeData is dynamically updated, the node\n * is a non-leaf node. At this point, selectedKeys should\n * be cleared.\n */\n } else if (_isEqual(selectedKeys, Array.from(selectedKeysState))) {\n updateStates = this._getClearSelectedKey(filterable);\n }\n } else if (value && value.length) {\n const val = valuePath[valuePath.length - 1];\n const key = `not-exist-${val}`;\n const optionNotExist = {\n data: {\n label: val,\n value: val\n },\n key,\n path: valuePath,\n _notExist: true\n };\n updateStates.selectedKeys = new Set([key]);\n if (filterable && !multiple) {\n const displayText = this._defaultRenderText(valuePath);\n updateStates.inputPlaceHolder = displayText;\n /*\n * displayText should not be assign to inputValue,\n * cause inputValue should only change by user enter\n */\n // updateStates.inputValue = displayText;\n }\n keyEntities[key] = optionNotExist;\n // Fix: 1155, if the data is loaded asynchronously to update treeData, the emptying operation should not be done when entering the updateSelectedKey method\n } else if (loading) {\n // Use assign to avoid overwriting the'not-exist- * 'property of keyEntities after asynchronous loading\n // Overwriting'not-exist- * 'will cause selectionContent to be emptied unexpectedly when clicking on a dropDown item\n updateStates.keyEntities = _assign(keyEntityState, keyEntities);\n this._adapter.updateStates(updateStates);\n return;\n } else {\n updateStates = this._getClearSelectedKey(filterable);\n }\n updateStates.keyEntities = keyEntities;\n this._adapter.updateStates(updateStates);\n }\n open() {\n const filterable = this._isFilterable();\n const {\n multiple\n } = this.getProps();\n this._adapter.openMenu();\n if (filterable) {\n this._clearInput();\n !multiple && this.toggle2SearchInput(true);\n }\n if (this._isControlledComponent()) {\n this.reCalcActiveKeys();\n }\n this._adapter.notifyDropdownVisibleChange(true);\n this._adapter.registerClickOutsideHandler(e => this.close(e));\n }\n reCalcActiveKeys() {\n const {\n selectedKeys,\n activeKeys,\n keyEntities\n } = this.getStates();\n const selectedKey = [...selectedKeys][0];\n const selectedItem = keyEntities[selectedKey];\n if (!selectedItem) {\n return;\n }\n const newActiveKeys = new Set(selectedItem.path);\n if (!_isEqual(newActiveKeys, activeKeys)) {\n this._adapter.updateStates({\n activeKeys: newActiveKeys\n });\n }\n }\n close(e, key) {\n const {\n multiple\n } = this.getProps();\n this._adapter.closeMenu();\n this._adapter.notifyDropdownVisibleChange(false);\n this._adapter.unregisterClickOutsideHandler();\n if (this._isFilterable()) {\n const {\n selectedKeys,\n isSearching\n } = this.getStates();\n let inputValue = '';\n if (key && !multiple) {\n inputValue = this.renderDisplayText(key);\n } else if (selectedKeys.size && !multiple) {\n inputValue = this.renderDisplayText([...selectedKeys][0]);\n }\n this._adapter.updateStates({\n inputValue\n });\n !multiple && this.toggle2SearchInput(false);\n !multiple && this._adapter.updateFocusState(false);\n }\n this._notifyBlur(e);\n }\n focus() {\n const {\n filterTreeNode\n } = this.getProps();\n if (filterTreeNode) {\n this._adapter.focusInput();\n }\n this._adapter.updateFocusState(true);\n }\n blur() {\n const {\n filterTreeNode\n } = this.getProps();\n if (filterTreeNode) {\n this._adapter.blurInput();\n }\n this._adapter.updateFocusState(false);\n }\n toggle2SearchInput(isShow) {\n if (isShow) {\n this._adapter.toggleInputShow(isShow, () => this.focus());\n } else {\n this._adapter.toggleInputShow(isShow, () => undefined);\n }\n }\n handleItemClick(e, item) {\n const isDisabled = this._isDisabled();\n if (isDisabled) {\n return;\n }\n this.handleSingleSelect(e, item);\n this._adapter.rePositionDropdown();\n }\n handleItemHover(e, item) {\n const isDisabled = this._isDisabled();\n if (isDisabled) {\n return;\n }\n this.handleShowNextByHover(item);\n }\n handleShowNextByHover(item) {\n const {\n keyEntities\n } = this.getStates();\n const {\n data,\n key\n } = item;\n const isLeaf = this._isLeaf(data);\n const activeKeys = keyEntities[key].path;\n this._adapter.updateStates({\n activeKeys: new Set(activeKeys)\n });\n if (!isLeaf) {\n this.notifyIfLoadData(item);\n }\n }\n onItemCheckboxClick(item) {\n const isDisabled = this._isDisabled();\n if (isDisabled) {\n return;\n }\n this._handleMultipleSelect(item);\n this._adapter.rePositionDropdown();\n }\n handleClick(e) {\n const isDisabled = this._isDisabled();\n const isFilterable = this._isFilterable();\n const {\n isOpen\n } = this.getStates();\n if (isDisabled) {\n return;\n } else if (!isOpen) {\n this.open();\n this._notifyFocus(e);\n } else if (isOpen && !isFilterable) {\n this.close(e);\n }\n }\n /**\n * A11y: simulate selection click\n */\n /* istanbul ignore next */\n handleSelectionEnterPress(keyboardEvent) {\n if (isEnterPress(keyboardEvent)) {\n this.handleClick(keyboardEvent);\n }\n }\n toggleHoverState(bool) {\n this._adapter.toggleHovering(bool);\n }\n _defaultRenderText(path, displayRender) {\n const separator = this.getProp('separator');\n if (displayRender && typeof displayRender === 'function') {\n return displayRender(path);\n } else {\n return path.join(separator);\n }\n }\n renderDisplayText(targetKey, keyEntities) {\n const renderFunc = this.getProp('displayRender');\n const displayProp = this.getProp('displayProp');\n const displayPath = this.getItemPropPath(targetKey, displayProp, keyEntities);\n return this._defaultRenderText(displayPath, renderFunc);\n }\n handleNodeLoad(item) {\n const {\n data,\n key\n } = item;\n const prevLoadingKeys = new Set(this._adapter.getLoadingKeyRefValue());\n const prevLoadedKeys = new Set(this._adapter.getLoadedKeyRefValue());\n const newLoadedKeys = prevLoadedKeys.add(key);\n const newLoadingKeys = new Set([...prevLoadingKeys]);\n newLoadingKeys.delete(key);\n // onLoad should trigger before internal setState to avoid `loadData` trigger twice.\n this._adapter.notifyOnLoad(newLoadedKeys, data);\n this._adapter.updateLoadingKeyRefValue(newLoadingKeys);\n this._adapter.updateLoadedKeyRefValue(newLoadedKeys);\n this._adapter.updateStates({\n loadingKeys: newLoadingKeys,\n loadedKeys: newLoadedKeys\n });\n }\n notifyIfLoadData(item) {\n const {\n data,\n key\n } = item;\n this._adapter.updateStates({\n loading: false\n });\n if (!data.isLeaf && !data.children && this.getProp('loadData')) {\n const loadedKeys = this._adapter.getLoadedKeyRefValue();\n const loadingKeys = new Set(this._adapter.getLoadingKeyRefValue());\n if (loadedKeys.has(key) || loadingKeys.has(key)) {\n return;\n }\n this._adapter.updateStates({\n loading: true\n });\n const {\n keyEntities\n } = this.getStates();\n const optionPath = this.getItemPropPath(key, [], keyEntities);\n const newLoadingKeys = loadingKeys.add(key);\n this._adapter.updateLoadingKeyRefValue(newLoadingKeys);\n this._adapter.updateStates({\n loadingKeys: newLoadingKeys\n });\n this._adapter.notifyLoadData(optionPath, this.handleNodeLoad.bind(this, item));\n }\n }\n handleSingleSelect(e, item) {\n const {\n changeOnSelect: allowChange,\n filterLeafOnly,\n multiple,\n enableLeafClick\n } = this.getProps();\n const {\n keyEntities,\n selectedKeys,\n isSearching\n } = this.getStates();\n const filterable = this._isFilterable();\n const {\n data,\n key\n } = item;\n const isLeaf = this._isLeaf(data);\n const activeKeys = keyEntities[key].path;\n const selectedKey = [key];\n const hasChanged = key !== [...selectedKeys][0];\n if (!isLeaf && !allowChange && !isSearching) {\n this._adapter.updateStates({\n activeKeys: new Set(activeKeys)\n });\n this.notifyIfLoadData(item);\n return;\n }\n if (multiple) {\n this._adapter.updateStates({\n activeKeys: new Set(activeKeys)\n });\n if (isLeaf && enableLeafClick) {\n this.onItemCheckboxClick(item);\n }\n } else {\n this._adapter.notifySelect(data.value);\n if (hasChanged) {\n this._notifyChange(item);\n this.notifyIfLoadData(item);\n if (this._isControlledComponent()) {\n this._adapter.updateStates({\n activeKeys: new Set(activeKeys)\n });\n if (isLeaf) {\n this.close(e);\n }\n return;\n }\n this._adapter.updateStates({\n activeKeys: new Set(activeKeys),\n selectedKeys: new Set(selectedKey)\n });\n const displayText = this.renderDisplayText(key);\n if (filterable) {\n this._adapter.updateInputPlaceHolder(displayText);\n }\n if (isLeaf) {\n this.close(e, key);\n } else if (!filterLeafOnly && isSearching) {\n this.close(e, key);\n }\n } else {\n this.close(e);\n }\n }\n }\n _handleMultipleSelect(item) {\n const {\n checkRelation\n } = this.getProps();\n if (checkRelation === strings.RELATED) {\n this._handleRelatedMultipleSelect(item);\n } else if (checkRelation === 'unRelated') {\n this._handleUnRelatedMultipleSelect(item);\n }\n this._adapter.updateStates({\n inputValue: ''\n });\n }\n _handleRelatedMultipleSelect(item) {\n const {\n key\n } = item;\n const {\n checkedKeys,\n keyEntities,\n resolvedCheckedKeys\n } = this.getStates();\n const {\n autoMergeValue,\n max,\n disableStrictly,\n leafOnly\n } = this.getProps();\n // prev checked status\n const prevCheckedStatus = checkedKeys.has(key);\n // next checked status\n const curCheckedStatus = disableStrictly ? this.calcCheckedStatus(!prevCheckedStatus, key) : !prevCheckedStatus;\n // calculate all key of nodes that are checked or half checked\n const {\n checkedKeys: curCheckedKeys,\n halfCheckedKeys: curHalfCheckedKeys\n } = disableStrictly ? this.calcNonDisabledCheckedKeys(key, curCheckedStatus) : this.calcCheckedKeys(key, curCheckedStatus);\n const mergeType = calcMergeType(autoMergeValue, leafOnly);\n const isLeafOnlyMerge = mergeType === strings.LEAF_ONLY_MERGE_TYPE;\n const isNoneMerge = mergeType === strings.NONE_MERGE_TYPE;\n const curResolvedCheckedKeys = new Set(normalizeKeyList(curCheckedKeys, keyEntities, isLeafOnlyMerge));\n const curRealCheckedKeys = isNoneMerge ? curCheckedKeys : curResolvedCheckedKeys;\n if (_isNumber(max)) {\n if (!isNoneMerge) {\n // When it exceeds max, the quantity is allowed to be reduced, and no further increase is allowed\n if (resolvedCheckedKeys.size < curResolvedCheckedKeys.size && curResolvedCheckedKeys.size > max) {\n const checkedEntities = [];\n curResolvedCheckedKeys.forEach(itemKey => {\n checkedEntities.push(keyEntities[itemKey]);\n });\n this._adapter.notifyOnExceed(checkedEntities);\n return;\n }\n } else {\n // When it exceeds max, the quantity is allowed to be reduced, and no further increase is allowed\n if (checkedKeys.size < curCheckedKeys.size && curCheckedKeys.size > max) {\n const checkedEntities = [];\n curCheckedKeys.forEach(itemKey => {\n checkedEntities.push(keyEntities[itemKey]);\n });\n this._adapter.notifyOnExceed(checkedEntities);\n return;\n }\n }\n }\n if (!this._isControlledComponent()) {\n this._adapter.updateStates({\n checkedKeys: curCheckedKeys,\n halfCheckedKeys: curHalfCheckedKeys,\n resolvedCheckedKeys: curResolvedCheckedKeys\n });\n }\n // The click event during multiple selection will definitely cause the checked state of node to change,\n // so there is no need to judge the value to change.\n this._notifyChange(curRealCheckedKeys);\n if (curCheckedStatus) {\n this._notifySelect(curRealCheckedKeys);\n }\n }\n _handleUnRelatedMultipleSelect(item) {\n const {\n key\n } = item;\n const {\n checkedKeys,\n keyEntities\n } = this.getStates();\n const {\n max\n } = this.getProps();\n const newCheckedKeys = new Set(checkedKeys);\n let targetStatus;\n const prevCheckedStatus = checkedKeys.has(key);\n if (prevCheckedStatus) {\n newCheckedKeys.delete(key);\n targetStatus = false;\n } else {\n // 查看是否超出 max\n if (_isNumber(max)) {\n if (checkedKeys.size >= max) {\n const checkedEntities = [];\n checkedKeys.forEach(itemKey => {\n checkedEntities.push(keyEntities[itemKey]);\n });\n this._adapter.notifyOnExceed(checkedEntities);\n return;\n }\n }\n newCheckedKeys.add(key);\n targetStatus = true;\n }\n if (!this._isControlledComponent()) {\n this._adapter.updateStates({\n checkedKeys: newCheckedKeys\n });\n }\n this._notifyChange(newCheckedKeys);\n if (targetStatus) {\n this._notifySelect(newCheckedKeys);\n }\n }\n calcNonDisabledCheckedKeys(eventKey, targetStatus) {\n const {\n keyEntities,\n disabledKeys\n } = this.getStates();\n const checkedKeys = new Set(this.getState('checkedKeys'));\n const descendantKeys = normalizeKeyList(findDescendantKeys([eventKey], keyEntities, false), keyEntities, true);\n const hasDisabled = descendantKeys.some(key => disabledKeys.has(key));\n if (!hasDisabled) {\n return this.calcCheckedKeys(eventKey, targetStatus);\n }\n const nonDisabled = descendantKeys.filter(key => !disabledKeys.has(key));\n const newCheckedKeys = targetStatus ? [...nonDisabled, ...checkedKeys] : _difference(normalizeKeyList([...checkedKeys], keyEntities, true), nonDisabled);\n return calcCheckedKeys(newCheckedKeys, keyEntities);\n }\n calcCheckedStatus(targetStatus, eventKey) {\n if (!targetStatus) {\n return targetStatus;\n }\n const {\n checkedKeys,\n keyEntities,\n disabledKeys\n } = this.getStates();\n const descendantKeys = normalizeKeyList(findDescendantKeys([eventKey], keyEntities, false), keyEntities, true);\n const hasDisabled = descendantKeys.some(key => disabledKeys.has(key));\n if (!hasDisabled) {\n return targetStatus;\n }\n const nonDisabledKeys = descendantKeys.filter(key => !disabledKeys.has(key));\n const allChecked = nonDisabledKeys.every(key => checkedKeys.has(key));\n return !allChecked;\n }\n _notifySelect(keys) {\n const {\n keyEntities\n } = this.getStates();\n const values = [];\n keys.forEach(key => {\n var _a, _b;\n const valueItem = (_b = (_a = keyEntities[key]) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.value;\n valueItem !== undefined && values.push(valueItem);\n });\n const formatValue = values.length === 1 ? values[0] : values;\n this._adapter.notifySelect(formatValue);\n }\n /**\n * calculate all key of nodes that are checked or half checked\n * @param {string} key key of node\n * @param {boolean} curCheckedStatus checked status of node\n */\n calcCheckedKeys(key, curCheckedStatus) {\n const {\n keyEntities\n } = this.getStates();\n const checkedKeys = new Set(this.getState('checkedKeys'));\n const halfCheckedKeys = new Set(this.getState('halfCheckedKeys'));\n return curCheckedStatus ? calcCheckedKeysForChecked(key, keyEntities, checkedKeys, halfCheckedKeys) : calcCheckedKeysForUnchecked(key, keyEntities, checkedKeys, halfCheckedKeys);\n }\n handleInputChange(sugInput) {\n this._adapter.updateInputValue(sugInput);\n const {\n keyEntities\n } = this.getStates();\n const {\n treeNodeFilterProp,\n filterTreeNode,\n filterLeafOnly\n } = this.getProps();\n let filteredKeys = [];\n if (sugInput) {\n filteredKeys = Object.values(keyEntities).filter(item => {\n const {\n key,\n _notExist,\n data\n } = item;\n if (_notExist) {\n return false;\n }\n const filteredPath = this.getItemPropPath(key, treeNodeFilterProp);\n return filter(sugInput, data, filterTreeNode, filteredPath);\n }).filter(item => filterTreeNode && !filterLeafOnly || this._isLeaf(item)).map(item => item.key);\n }\n this._adapter.updateStates({\n isSearching: Boolean(sugInput),\n filteredKeys: new Set(filteredKeys)\n });\n this._adapter.notifyOnSearch(sugInput);\n this._adapter.rePositionDropdown();\n }\n handleClear() {\n const {\n isSearching\n } = this.getStates();\n const {\n searchPlaceholder,\n placeholder,\n multiple\n } = this.getProps();\n const isFilterable = this._isFilterable();\n const isControlled = this._isControlledComponent();\n const newState = {};\n if (multiple) {\n newState.isSearching = false;\n this._adapter.updateInputValue('');\n this._adapter.notifyOnSearch('');\n newState.checkedKeys = new Set([]);\n newState.halfCheckedKeys = new Set([]);\n newState.selectedKeys = new Set([]);\n newState.activeKeys = new Set([]);\n newState.resolvedCheckedKeys = new Set([]);\n this._adapter.notifyChange([]);\n } else {\n // if click clearBtn when not searching, clear selected and active values as well\n if (isFilterable && isSearching) {\n newState.isSearching = false;\n this._adapter.updateInputValue('');\n this._adapter.notifyOnSearch('');\n } else {\n if (isFilterable) {\n newState.inputValue = '';\n newState.inputPlaceHolder = searchPlaceholder || placeholder || '';\n this._adapter.updateInputValue('');\n this._adapter.notifyOnSearch('');\n }\n if (!isControlled) {\n newState.selectedKeys = new Set([]);\n }\n newState.activeKeys = new Set([]);\n newState.filteredKeys = new Set([]);\n this._adapter.notifyChange([]);\n }\n }\n this._adapter.updateStates(newState);\n this._adapter.notifyClear();\n this._adapter.rePositionDropdown();\n }\n /**\n * A11y: simulate clear button click\n */\n /* istanbul ignore next */\n handleClearEnterPress(keyboardEvent) {\n if (isEnterPress(keyboardEvent)) {\n this.handleClear();\n }\n }\n getRenderData() {\n const {\n keyEntities,\n isSearching\n } = this.getStates();\n const isFilterable = this._isFilterable();\n if (isSearching && isFilterable) {\n return this.getFilteredData();\n }\n return Object.values(keyEntities).filter(item => item.parentKey === null && !item._notExist)\n // @ts-ignore\n .sort((a, b) => parseInt(a.ind, 10) - parseInt(b.ind, 10));\n }\n getFilteredData() {\n const {\n treeNodeFilterProp,\n filterSorter\n } = this.getProps();\n const {\n filteredKeys,\n keyEntities,\n inputValue\n } = this.getStates();\n const filteredList = [];\n const filteredKeyArr = [...filteredKeys];\n filteredKeyArr.forEach(key => {\n const item = keyEntities[key];\n if (!item) {\n return;\n }\n const pathData = this.getItemPropPath(key, []);\n const itemSearchPath = pathData.map(item => item[treeNodeFilterProp]);\n const isDisabled = this._isOptionDisabled(key, keyEntities);\n filteredList.push({\n data: item.data,\n pathData,\n key,\n disabled: isDisabled,\n searchText: itemSearchPath\n });\n });\n if (_isFunction(filterSorter)) {\n filteredList.sort((a, b) => {\n return filterSorter(a.pathData, b.pathData, inputValue);\n });\n }\n return filteredList;\n }\n handleListScroll(e, ind) {\n const {\n activeKeys,\n keyEntities\n } = this.getStates();\n const lastActiveKey = [...activeKeys][activeKeys.size - 1];\n const data = lastActiveKey ? _get(keyEntities, [lastActiveKey, 'data'], null) : null;\n this._adapter.notifyListScroll(e, {\n panelIndex: ind,\n activeNode: data\n });\n }\n}","const VirtualRow = _ref => {\n let {\n index,\n data,\n style\n } = _ref;\n const {\n visibleOptions,\n renderOption\n } = data;\n const option = visibleOptions[index];\n return renderOption(option, index, style);\n};\nexport default VirtualRow;","import _includes from \"lodash/includes\";\nimport React, { PureComponent } from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/cascader/constants';\nimport isEnterPress from '@douyinfe/semi-foundation/lib/es/utils/isEnterPress';\nimport ConfigContext from '../configProvider/context';\nimport LocaleConsumer from '../locale/localeConsumer';\nimport { IconChevronRight, IconTick } from '@douyinfe/semi-icons';\nimport Spin from '../spin';\nimport Checkbox from '../checkbox';\nimport { FixedSizeList as List } from 'react-window';\nimport VirtualRow from './virtualRow';\nconst prefixcls = cssClasses.PREFIX_OPTION;\nexport default class Item extends PureComponent {\n constructor() {\n var _this;\n super(...arguments);\n _this = this;\n this.onClick = (e, item) => {\n const {\n onItemClick\n } = this.props;\n if (item.data.disabled || 'disabled' in item && item.disabled) {\n return;\n }\n onItemClick(e, item);\n };\n /**\n * A11y: simulate item click\n */\n this.handleItemEnterPress = (keyboardEvent, item) => {\n if (isEnterPress(keyboardEvent)) {\n this.onClick(keyboardEvent, item);\n }\n };\n this.onHover = (e, item) => {\n const {\n showNext,\n onItemHover\n } = this.props;\n if (item.data.disabled) {\n return;\n }\n if (showNext === strings.SHOW_NEXT_BY_HOVER) {\n onItemHover(e, item);\n }\n };\n this.onCheckboxChange = (e, item) => {\n const {\n onItemCheckboxClick\n } = this.props;\n // Prevent Checkbox's click event bubbling to trigger the li click event\n e.stopPropagation();\n if (e.nativeEvent && typeof e.nativeEvent.stopImmediatePropagation === 'function') {\n e.nativeEvent.stopImmediatePropagation();\n }\n onItemCheckboxClick(item);\n };\n this.getItemStatus = key => {\n const {\n activeKeys,\n selectedKeys,\n loadedKeys,\n loadingKeys\n } = this.props;\n const state = {\n active: false,\n selected: false,\n loading: false\n };\n if (activeKeys.has(key)) {\n state.active = true;\n }\n if (selectedKeys.has(key)) {\n state.selected = true;\n }\n if (loadingKeys.has(key) && !loadedKeys.has(key)) {\n state.loading = true;\n }\n return state;\n };\n this.renderIcon = function (type) {\n let haveMarginLeft = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n const finalCls = style => {\n return style + (haveMarginLeft ? ` ${prefixcls}-icon-left` : '');\n };\n switch (type) {\n case 'child':\n const {\n expandIcon\n } = _this.props;\n if (expandIcon) {\n return expandIcon;\n }\n return /*#__PURE__*/React.createElement(IconChevronRight, {\n className: finalCls(`${prefixcls}-icon ${prefixcls}-icon-expand`)\n });\n case 'tick':\n return /*#__PURE__*/React.createElement(IconTick, {\n className: finalCls(`${prefixcls}-icon ${prefixcls}-icon-active`)\n });\n case 'loading':\n return /*#__PURE__*/React.createElement(Spin, {\n wrapperClassName: finalCls(`${prefixcls}-spin-icon`)\n });\n case 'empty':\n return /*#__PURE__*/React.createElement(\"span\", {\n \"aria-hidden\": true,\n className: finalCls(`${prefixcls}-icon ${prefixcls}-icon-empty`)\n });\n default:\n return null;\n }\n };\n this.highlight = searchText => {\n const content = [];\n const {\n keyword,\n separator\n } = this.props;\n searchText.forEach((item, idx) => {\n if (typeof item === 'string' && _includes(item, keyword)) {\n item.split(keyword).forEach((node, index) => {\n if (index > 0) {\n content.push(/*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixcls}-label-highlight`,\n key: `${index}-${idx}`\n }, keyword));\n }\n content.push(node);\n });\n } else {\n content.push(item);\n }\n if (idx !== searchText.length - 1) {\n content.push(separator);\n }\n });\n return content;\n };\n this.renderFlattenOptionItem = (data, index, style) => {\n var _a;\n const {\n multiple,\n selectedKeys,\n checkedKeys,\n halfCheckedKeys,\n keyword,\n filterRender,\n virtualize\n } = this.props;\n const {\n searchText,\n key,\n disabled,\n pathData\n } = data;\n const selected = selectedKeys.has(key);\n const className = cls(prefixcls, {\n [`${prefixcls}-flatten`]: true && !filterRender,\n [`${prefixcls}-disabled`]: disabled,\n [`${prefixcls}-select`]: selected && !multiple\n });\n const onClick = e => {\n this.onClick(e, data);\n };\n const onKeyPress = e => this.handleItemEnterPress(e, data);\n const onCheck = e => this.onCheckboxChange(e, data);\n if (filterRender) {\n const props = {\n className,\n inputValue: keyword,\n disabled,\n data: pathData,\n checkStatus: {\n checked: checkedKeys.has(data.key),\n halfChecked: halfCheckedKeys.has(data.key)\n },\n selected,\n onClick,\n onCheck\n };\n const item = filterRender(props);\n const otherProps = virtualize ? {\n key,\n style: Object.assign(Object.assign({}, (_a = item.props.style) !== null && _a !== void 0 ? _a : {}), style)\n } : {\n key\n };\n return /*#__PURE__*/React.cloneElement(item, otherProps);\n }\n return /*#__PURE__*/React.createElement(\"li\", {\n role: 'menuitem',\n className: className,\n style: style,\n key: key,\n onClick: onClick,\n onKeyPress: onKeyPress\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixcls}-label`\n }, !multiple && this.renderIcon('empty'), multiple && (/*#__PURE__*/React.createElement(Checkbox, {\n onChange: onCheck,\n disabled: disabled,\n indeterminate: halfCheckedKeys.has(data.key),\n checked: checkedKeys.has(data.key),\n className: `${prefixcls}-label-checkbox`\n })), this.highlight(searchText)));\n };\n this.renderFlattenOption = data => {\n const {\n virtualize\n } = this.props;\n const content = /*#__PURE__*/React.createElement(\"ul\", {\n className: `${prefixcls}-list`,\n key: 'flatten-list'\n }, virtualize ? this.renderVirtualizeList(data) : data.map(item => this.renderFlattenOptionItem(item)));\n return content;\n };\n this.renderVirtualizeList = visibleOptions => {\n var _a;\n const {\n direction\n } = this.context;\n const {\n virtualize\n } = this.props;\n return /*#__PURE__*/React.createElement(List, {\n height: virtualize.height,\n itemCount: visibleOptions.length,\n itemSize: virtualize.itemSize,\n itemData: {\n visibleOptions,\n renderOption: this.renderFlattenOptionItem\n },\n width: (_a = virtualize.width) !== null && _a !== void 0 ? _a : '100%',\n style: {\n direction\n }\n }, VirtualRow);\n };\n }\n renderItem(renderData) {\n let content = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n const {\n multiple,\n checkedKeys,\n halfCheckedKeys\n } = this.props;\n let showChildItem;\n const ind = content.length;\n content.push(/*#__PURE__*/React.createElement(\"ul\", {\n role: 'menu',\n className: `${prefixcls}-list`,\n key: renderData[0].key,\n onScroll: e => this.props.onListScroll(e, ind)\n }, renderData.map(item => {\n const {\n data,\n key,\n parentKey\n } = item;\n const {\n children,\n label,\n disabled,\n isLeaf\n } = data;\n const {\n active,\n selected,\n loading\n } = this.getItemStatus(key);\n const hasChild = Boolean(children) && children.length;\n const showExpand = hasChild || this.props.loadData && !isLeaf;\n if (active && hasChild) {\n showChildItem = item;\n }\n const className = cls(prefixcls, {\n [`${prefixcls}-active`]: active && !selected,\n [`${prefixcls}-select`]: selected && !multiple,\n [`${prefixcls}-disabled`]: disabled\n });\n const otherAriaProps = parentKey ? {\n ['aria-owns']: `cascaderItem-${parentKey}`\n } : {};\n return /*#__PURE__*/React.createElement(\"li\", Object.assign({\n role: 'menuitem',\n id: `cascaderItem-${key}`,\n \"aria-expanded\": active,\n \"aria-haspopup\": Boolean(showExpand),\n \"aria-disabled\": disabled\n }, otherAriaProps, {\n className: className,\n key: key,\n onClick: e => {\n this.onClick(e, item);\n },\n onKeyPress: e => this.handleItemEnterPress(e, item),\n onMouseEnter: e => {\n this.onHover(e, item);\n }\n }), /*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixcls}-label`\n }, selected && !multiple && this.renderIcon('tick'), !selected && !multiple && this.renderIcon('empty'), multiple && (/*#__PURE__*/React.createElement(Checkbox, {\n onChange: e => this.onCheckboxChange(e, item),\n disabled: disabled,\n indeterminate: halfCheckedKeys.has(item.key),\n checked: checkedKeys.has(item.key),\n className: `${prefixcls}-label-checkbox`\n })), /*#__PURE__*/React.createElement(\"span\", null, label)), showExpand ? this.renderIcon(loading ? 'loading' : 'child', true) : null);\n })));\n if (showChildItem) {\n content.concat(this.renderItem(showChildItem.children, content));\n }\n return content;\n }\n renderEmpty() {\n const {\n emptyContent\n } = this.props;\n if (emptyContent === null) {\n return null;\n }\n return /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Cascader\"\n }, locale => (/*#__PURE__*/React.createElement(\"ul\", {\n className: `${prefixcls} ${prefixcls}-empty`,\n key: 'empty-list'\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixcls}-label`,\n \"x-semi-prop\": \"emptyContent\"\n }, emptyContent || locale.emptyText))));\n }\n render() {\n const {\n data,\n searchable\n } = this.props;\n const {\n direction\n } = this.context;\n const isEmpty = !data || !data.length;\n let content;\n const listsCls = cls({\n [`${prefixcls}-lists`]: true,\n [`${prefixcls}-lists-rtl`]: direction === 'rtl',\n [`${prefixcls}-lists-empty`]: isEmpty\n });\n if (isEmpty) {\n content = this.renderEmpty();\n } else {\n content = searchable ? this.renderFlattenOption(data) : this.renderItem(data);\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n className: listsCls\n }, content);\n }\n}\nItem.contextType = ConfigContext;\nItem.propTypes = {\n data: PropTypes.array,\n emptyContent: PropTypes.node,\n searchable: PropTypes.bool,\n onItemClick: PropTypes.func,\n onItemHover: PropTypes.func,\n multiple: PropTypes.bool,\n showNext: PropTypes.oneOf([strings.SHOW_NEXT_BY_CLICK, strings.SHOW_NEXT_BY_HOVER]),\n checkedKeys: PropTypes.object,\n halfCheckedKeys: PropTypes.object,\n onItemCheckboxClick: PropTypes.func,\n separator: PropTypes.string,\n keyword: PropTypes.string,\n virtualize: PropTypes.object,\n expandIcon: PropTypes.node\n};\nItem.defaultProps = {\n empty: false\n};","import _isObject from \"lodash/isObject\";\nimport _noop from \"lodash/noop\";\nimport _isNumber from \"lodash/isNumber\";\nimport _isFunction from \"lodash/isFunction\";\nimport _isEmpty from \"lodash/isEmpty\";\nimport _isString from \"lodash/isString\";\nimport _isEqual from \"lodash/isEqual\";\nimport _isSet from \"lodash/isSet\";\nimport React, { Fragment } from 'react';\nimport ReactDOM from 'react-dom';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport CascaderFoundation from '@douyinfe/semi-foundation/lib/es/cascader/foundation';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/cascader/constants';\nimport { numbers as popoverNumbers } from '@douyinfe/semi-foundation/lib/es/popover/constants';\nimport '@douyinfe/semi-foundation/lib/es/cascader/cascader.css';\nimport { IconClear, IconChevronDown } from '@douyinfe/semi-icons';\nimport { convertDataToEntities, calcMergeType, getKeyByValuePath } from '@douyinfe/semi-foundation/lib/es/cascader/util';\nimport { calcCheckedKeys, normalizeKeyList, calcDisabledKeys } from '@douyinfe/semi-foundation/lib/es/tree/treeUtil';\nimport ConfigContext from '../configProvider/context';\nimport BaseComponent from '../_base/baseComponent';\nimport Input from '../input/index';\nimport Popover from '../popover/index';\nimport Item from './item';\nimport Trigger from '../trigger';\nimport Tag from '../tag';\nimport TagInput from '../tagInput';\nimport { getDefaultPropsFromGlobalConfig, isSemiIcon } from '../_utils';\nconst prefixcls = cssClasses.PREFIX;\nconst resetkey = 0;\nclass Cascader extends BaseComponent {\n constructor(props) {\n super(props);\n // ref method\n this.search = value => {\n this.handleInputChange(value);\n };\n this.handleInputChange = value => {\n this.foundation.handleInputChange(value);\n };\n this.handleTagRemoveInTrigger = pos => {\n this.foundation.handleTagRemoveInTrigger(pos);\n };\n this.handleTagClose = (tagChildren, e, tagKey) => {\n // When value has not changed, prevent clicking tag closeBtn to close tag\n e.preventDefault();\n this.foundation.handleTagRemoveByKey(tagKey);\n };\n this.renderTagItem = (nodeKey, idx) => {\n const {\n keyEntities,\n disabledKeys\n } = this.state;\n const {\n size,\n disabled,\n displayProp,\n displayRender,\n disableStrictly\n } = this.props;\n if (keyEntities[nodeKey]) {\n const isDisabled = disabled || keyEntities[nodeKey].data.disabled || disableStrictly && disabledKeys.has(nodeKey);\n const tagCls = cls(`${prefixcls}-selection-tag`, {\n [`${prefixcls}-selection-tag-disabled`]: isDisabled\n });\n // custom render tags\n if (_isFunction(displayRender)) {\n return displayRender(keyEntities[nodeKey], idx);\n // default render tags\n } else {\n return /*#__PURE__*/React.createElement(Tag, {\n size: size === 'default' ? 'large' : size,\n key: `tag-${nodeKey}-${idx}`,\n color: \"white\",\n tagKey: nodeKey,\n className: tagCls,\n closable: true,\n onClose: this.handleTagClose\n }, keyEntities[nodeKey].data[displayProp]);\n }\n }\n return null;\n };\n this.onRemoveInTagInput = v => {\n this.foundation.handleTagRemoveByKey(v);\n };\n this.handleItemClick = (e, item) => {\n this.foundation.handleItemClick(e, item);\n };\n this.handleItemHover = (e, item) => {\n this.foundation.handleItemHover(e, item);\n };\n this.onItemCheckboxClick = item => {\n this.foundation.onItemCheckboxClick(item);\n };\n this.handleListScroll = (e, ind) => {\n this.foundation.handleListScroll(e, ind);\n };\n this.renderContent = () => {\n const {\n inputValue,\n isSearching,\n activeKeys,\n selectedKeys,\n checkedKeys,\n halfCheckedKeys,\n loadedKeys,\n loadingKeys\n } = this.state;\n const {\n filterTreeNode,\n dropdownClassName,\n dropdownStyle,\n loadData,\n emptyContent,\n separator,\n topSlot,\n bottomSlot,\n showNext,\n multiple,\n filterRender,\n virtualizeInSearch,\n expandIcon\n } = this.props;\n const searchable = Boolean(filterTreeNode) && isSearching;\n const popoverCls = cls(dropdownClassName, `${prefixcls}-popover`);\n const renderData = this.foundation.getRenderData();\n const content = /*#__PURE__*/React.createElement(\"div\", {\n className: popoverCls,\n role: \"listbox\",\n style: dropdownStyle,\n onKeyDown: this.foundation.handleKeyDown\n }, topSlot, /*#__PURE__*/React.createElement(Item, {\n activeKeys: activeKeys,\n selectedKeys: selectedKeys,\n separator: separator,\n loadedKeys: loadedKeys,\n loadingKeys: loadingKeys,\n onItemClick: this.handleItemClick,\n onItemHover: this.handleItemHover,\n showNext: showNext,\n onItemCheckboxClick: this.onItemCheckboxClick,\n onListScroll: this.handleListScroll,\n searchable: searchable,\n keyword: inputValue,\n emptyContent: emptyContent,\n loadData: loadData,\n data: renderData,\n multiple: multiple,\n checkedKeys: checkedKeys,\n halfCheckedKeys: halfCheckedKeys,\n filterRender: filterRender,\n virtualize: virtualizeInSearch,\n expandIcon: expandIcon\n }), bottomSlot);\n return content;\n };\n this.renderPlusN = hiddenTag => {\n const {\n disabled,\n showRestTagsPopover,\n restTagsPopoverProps\n } = this.props;\n const plusNCls = cls(`${prefixcls}-selection-n`, {\n [`${prefixcls}-selection-n-disabled`]: disabled\n });\n const renderPlusNChildren = /*#__PURE__*/React.createElement(\"span\", {\n className: plusNCls\n }, \"+\", hiddenTag.length);\n return showRestTagsPopover ? (/*#__PURE__*/React.createElement(Popover, Object.assign({\n content: hiddenTag,\n showArrow: true,\n trigger: \"hover\",\n position: \"top\",\n autoAdjustOverflow: true\n }, restTagsPopoverProps), renderPlusNChildren)) : renderPlusNChildren;\n };\n this.renderMultipleTags = () => {\n const {\n autoMergeValue,\n maxTagCount,\n checkRelation\n } = this.props;\n const {\n checkedKeys,\n resolvedCheckedKeys\n } = this.state;\n const realKeys = this.mergeType === strings.NONE_MERGE_TYPE || checkRelation === strings.UN_RELATED ? checkedKeys : resolvedCheckedKeys;\n const displayTag = [];\n const hiddenTag = [];\n [...realKeys].forEach((checkedKey, idx) => {\n const notExceedMaxTagCount = !_isNumber(maxTagCount) || maxTagCount >= idx + 1;\n const item = this.renderTagItem(checkedKey, idx);\n if (notExceedMaxTagCount) {\n displayTag.push(item);\n } else {\n hiddenTag.push(item);\n }\n });\n return /*#__PURE__*/React.createElement(React.Fragment, null, displayTag, !_isEmpty(hiddenTag) && this.renderPlusN(hiddenTag));\n };\n this.renderDisplayText = () => {\n const {\n displayProp,\n separator,\n displayRender\n } = this.props;\n const {\n selectedKeys\n } = this.state;\n let displayText = '';\n if (selectedKeys.size) {\n const displayPath = this.foundation.getItemPropPath([...selectedKeys][0], displayProp);\n if (displayRender && typeof displayRender === 'function') {\n displayText = displayRender(displayPath);\n } else {\n displayText = displayPath.map((path, index) => (/*#__PURE__*/React.createElement(Fragment, {\n key: `${path}-${index}`\n }, index < displayPath.length - 1 ? (/*#__PURE__*/React.createElement(React.Fragment, null, path, separator)) : path)));\n }\n }\n return displayText;\n };\n this.renderSelectContent = () => {\n const {\n placeholder,\n filterTreeNode,\n multiple,\n searchPosition\n } = this.props;\n const {\n checkedKeys\n } = this.state;\n const searchable = Boolean(filterTreeNode) && searchPosition === strings.SEARCH_POSITION_TRIGGER;\n if (!searchable) {\n if (multiple) {\n if (checkedKeys.size === 0) {\n return /*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixcls}-selection-placeholder`\n }, placeholder);\n }\n return this.renderMultipleTags();\n } else {\n const displayText = this.renderDisplayText();\n const spanCls = cls({\n [`${prefixcls}-selection-placeholder`]: !displayText\n });\n return /*#__PURE__*/React.createElement(\"span\", {\n className: spanCls\n }, displayText ? displayText : placeholder);\n }\n }\n const input = multiple ? this.renderTagInput() : this.renderInput();\n return input;\n };\n this.renderSuffix = () => {\n const {\n suffix\n } = this.props;\n const suffixWrapperCls = cls({\n [`${prefixcls}-suffix`]: true,\n [`${prefixcls}-suffix-text`]: suffix && _isString(suffix),\n [`${prefixcls}-suffix-icon`]: isSemiIcon(suffix)\n });\n return /*#__PURE__*/React.createElement(\"div\", {\n className: suffixWrapperCls,\n \"x-semi-prop\": \"suffix\"\n }, suffix);\n };\n this.renderPrefix = () => {\n const {\n prefix,\n insetLabel,\n insetLabelId\n } = this.props;\n const labelNode = prefix || insetLabel;\n const prefixWrapperCls = cls({\n [`${prefixcls}-prefix`]: true,\n // to be doublechecked\n [`${prefixcls}-inset-label`]: insetLabel,\n [`${prefixcls}-prefix-text`]: labelNode && _isString(labelNode),\n [`${prefixcls}-prefix-icon`]: isSemiIcon(labelNode)\n });\n return /*#__PURE__*/React.createElement(\"div\", {\n className: prefixWrapperCls,\n id: insetLabelId,\n \"x-semi-prop\": \"prefix,insetLabel\"\n }, labelNode);\n };\n this.renderCustomTrigger = () => {\n var _a;\n const {\n disabled,\n triggerRender,\n multiple\n } = this.props;\n const {\n selectedKeys,\n inputValue,\n inputPlaceHolder,\n resolvedCheckedKeys,\n checkedKeys,\n keyEntities\n } = this.state;\n let realValue;\n if (multiple) {\n if (this.mergeType === strings.NONE_MERGE_TYPE) {\n realValue = new Set();\n checkedKeys.forEach(key => {\n var _a;\n realValue.add((_a = keyEntities[key]) === null || _a === void 0 ? void 0 : _a.pos);\n });\n } else {\n realValue = new Set();\n resolvedCheckedKeys.forEach(key => {\n var _a;\n realValue.add((_a = keyEntities[key]) === null || _a === void 0 ? void 0 : _a.pos);\n });\n }\n } else {\n realValue = (_a = keyEntities[[...selectedKeys][0]]) === null || _a === void 0 ? void 0 : _a.pos;\n }\n return /*#__PURE__*/React.createElement(Trigger, {\n value: realValue,\n inputValue: inputValue,\n onChange: this.handleInputChange,\n onClear: this.handleClear,\n placeholder: inputPlaceHolder,\n disabled: disabled,\n triggerRender: triggerRender,\n componentName: 'Cascader',\n componentProps: Object.assign({}, this.props),\n onSearch: this.handleInputChange,\n onRemove: this.handleTagRemoveInTrigger\n });\n };\n this.handleMouseOver = () => {\n this.foundation.toggleHoverState(true);\n };\n this.handleMouseLeave = () => {\n this.foundation.toggleHoverState(false);\n };\n this.handleClear = e => {\n e && e.stopPropagation();\n this.foundation.handleClear();\n };\n /**\n * A11y: simulate clear button click\n */\n /* istanbul ignore next */\n this.handleClearEnterPress = e => {\n e && e.stopPropagation();\n this.foundation.handleClearEnterPress(e);\n };\n this.showClearBtn = () => {\n const {\n showClear,\n disabled,\n multiple\n } = this.props;\n const {\n selectedKeys,\n isOpen,\n isHovering,\n checkedKeys,\n inputValue\n } = this.state;\n const hasValue = selectedKeys.size;\n const multipleWithHaveValue = multiple && checkedKeys.size;\n return showClear && (inputValue || hasValue || multipleWithHaveValue) && !disabled && (isOpen || isHovering);\n };\n this.renderClearBtn = () => {\n const clearCls = cls(`${prefixcls}-clearbtn`);\n const {\n clearIcon\n } = this.props;\n const allowClear = this.showClearBtn();\n if (allowClear) {\n return /*#__PURE__*/React.createElement(\"div\", {\n className: clearCls,\n onClick: this.handleClear,\n onKeyPress: this.handleClearEnterPress,\n role: \"button\",\n tabIndex: 0\n }, clearIcon ? clearIcon : /*#__PURE__*/React.createElement(IconClear, null));\n }\n return null;\n };\n this.renderArrow = () => {\n const {\n arrowIcon\n } = this.props;\n const showClearBtn = this.showClearBtn();\n if (showClearBtn) {\n return null;\n }\n return arrowIcon ? (/*#__PURE__*/React.createElement(\"div\", {\n className: cls(`${prefixcls}-arrow`),\n \"x-semi-prop\": \"arrowIcon\"\n }, arrowIcon)) : null;\n };\n this.renderSelection = () => {\n const {\n disabled,\n multiple,\n filterTreeNode,\n style,\n size,\n className,\n validateStatus,\n prefix,\n suffix,\n insetLabel,\n triggerRender,\n showClear,\n id,\n borderless\n } = this.props;\n const {\n isOpen,\n isFocus,\n isInput,\n checkedKeys\n } = this.state;\n const filterable = Boolean(filterTreeNode);\n const useCustomTrigger = typeof triggerRender === 'function';\n const classNames = useCustomTrigger ? cls(className) : cls(prefixcls, className, {\n [`${prefixcls}-borderless`]: borderless,\n [`${prefixcls}-focus`]: isFocus || isOpen && !isInput,\n [`${prefixcls}-disabled`]: disabled,\n [`${prefixcls}-single`]: true,\n [`${prefixcls}-filterable`]: filterable,\n [`${prefixcls}-error`]: validateStatus === 'error',\n [`${prefixcls}-warning`]: validateStatus === 'warning',\n [`${prefixcls}-small`]: size === 'small',\n [`${prefixcls}-large`]: size === 'large',\n [`${prefixcls}-with-prefix`]: prefix || insetLabel,\n [`${prefixcls}-with-suffix`]: suffix\n });\n const mouseEvent = showClear ? {\n onMouseEnter: () => this.handleMouseOver(),\n onMouseLeave: () => this.handleMouseLeave()\n } : {};\n const sectionCls = cls(`${prefixcls}-selection`, {\n [`${prefixcls}-selection-multiple`]: multiple && !_isEmpty(checkedKeys)\n });\n const inner = useCustomTrigger ? this.renderCustomTrigger() : [/*#__PURE__*/React.createElement(Fragment, {\n key: 'prefix'\n }, prefix || insetLabel ? this.renderPrefix() : null), /*#__PURE__*/React.createElement(Fragment, {\n key: 'selection'\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: sectionCls\n }, this.renderSelectContent())), /*#__PURE__*/React.createElement(Fragment, {\n key: 'suffix'\n }, suffix ? this.renderSuffix() : null), /*#__PURE__*/React.createElement(Fragment, {\n key: 'clearbtn'\n }, this.renderClearBtn()), /*#__PURE__*/React.createElement(Fragment, {\n key: 'arrow'\n }, this.renderArrow())];\n /**\n * Reasons for disabling the a11y eslint rule:\n * The following attributes(aria-controls,aria-expanded) will be automatically added by Tooltip, no need to declare here\n */\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n className: classNames,\n style: style,\n ref: this.triggerRef,\n onClick: e => this.foundation.handleClick(e),\n onKeyPress: e => this.foundation.handleSelectionEnterPress(e),\n \"aria-invalid\": this.props['aria-invalid'],\n \"aria-errormessage\": this.props['aria-errormessage'],\n \"aria-label\": this.props['aria-label'],\n \"aria-labelledby\": this.props['aria-labelledby'],\n \"aria-describedby\": this.props['aria-describedby'],\n \"aria-required\": this.props['aria-required'],\n id: id,\n onKeyDown: this.foundation.handleKeyDown\n }, mouseEvent, {\n // eslint-disable-next-line jsx-a11y/role-has-required-aria-props\n role: \"combobox\",\n tabIndex: 0\n }, this.getDataAttr(this.props)), inner);\n };\n this.state = {\n disabledKeys: new Set(),\n isOpen: props.defaultOpen,\n /* By changing rePosKey, the dropdown position can be refreshed */\n rePosKey: resetkey,\n /* A data structure for storing cascader data items */\n keyEntities: {},\n /* Selected and show tick icon */\n selectedKeys: new Set([]),\n /* The key of the activated node */\n activeKeys: new Set([]),\n /* The key of the filtered node */\n filteredKeys: new Set([]),\n /* Value of input box */\n inputValue: '',\n /* Is searching */\n isSearching: false,\n /* The placeholder of input box */\n inputPlaceHolder: props.searchPlaceholder || props.placeholder,\n /* Cache props */\n prevProps: {},\n /* Is hovering */\n isHovering: false,\n /* Key of checked node, when multiple */\n checkedKeys: new Set([]),\n /* Key of half checked node, when multiple */\n halfCheckedKeys: new Set([]),\n /* Auto merged checkedKeys or leaf checkedKeys, when multiple */\n resolvedCheckedKeys: new Set([]),\n /* Keys of loaded item */\n loadedKeys: new Set(),\n /* Keys of loading item */\n loadingKeys: new Set(),\n /* Mark whether this rendering has triggered asynchronous loading of data */\n loading: false,\n showInput: false\n };\n this.options = {};\n this.isEmpty = false;\n this.mergeType = calcMergeType(props.autoMergeValue, props.leafOnly);\n this.inputRef = /*#__PURE__*/React.createRef();\n this.triggerRef = /*#__PURE__*/React.createRef();\n this.optionsRef = /*#__PURE__*/React.createRef();\n this.clickOutsideHandler = null;\n this.foundation = new CascaderFoundation(this.adapter);\n this.loadingKeysRef = /*#__PURE__*/React.createRef();\n this.loadedKeysRef = /*#__PURE__*/React.createRef();\n }\n get adapter() {\n var _this = this;\n const filterAdapter = {\n updateInputValue: value => {\n this.setState({\n inputValue: value\n });\n },\n updateInputPlaceHolder: value => {\n this.setState({\n inputPlaceHolder: value\n });\n },\n focusInput: () => {\n const {\n preventScroll\n } = this.props;\n if (this.inputRef && this.inputRef.current) {\n // TODO: check the reason\n this.inputRef.current.focus({\n preventScroll\n });\n }\n },\n blurInput: () => {\n if (this.inputRef && this.inputRef.current) {\n this.inputRef.current.blur();\n }\n }\n };\n const cascaderAdapter = {\n registerClickOutsideHandler: cb => {\n const clickOutsideHandler = e => {\n const optionInstance = this.optionsRef && this.optionsRef.current;\n const triggerDom = this.triggerRef && this.triggerRef.current;\n const optionsDom = ReactDOM.findDOMNode(optionInstance);\n const target = e.target;\n const path = e.composedPath && e.composedPath() || [target];\n if (optionsDom && (!optionsDom.contains(target) || !optionsDom.contains(target.parentNode)) && triggerDom && !triggerDom.contains(target) && !(path.includes(triggerDom) || path.includes(optionsDom))) {\n cb(e);\n }\n };\n this.clickOutsideHandler = clickOutsideHandler;\n document.addEventListener('mousedown', clickOutsideHandler, false);\n },\n unregisterClickOutsideHandler: () => {\n document.removeEventListener('mousedown', this.clickOutsideHandler, false);\n },\n rePositionDropdown: () => {\n let {\n rePosKey\n } = this.state;\n rePosKey = rePosKey + 1;\n this.setState({\n rePosKey\n });\n }\n };\n return Object.assign(Object.assign(Object.assign(Object.assign({}, super.adapter), filterAdapter), cascaderAdapter), {\n updateStates: states => {\n this.setState(Object.assign({}, states));\n },\n openMenu: () => {\n this.setState({\n isOpen: true\n });\n },\n closeMenu: cb => {\n this.setState({\n isOpen: false\n }, () => {\n cb && cb();\n });\n },\n updateSelection: selectedKeys => this.setState({\n selectedKeys\n }),\n notifyChange: value => {\n this.props.onChange && this.props.onChange(value);\n },\n notifySelect: selected => {\n this.props.onSelect && this.props.onSelect(selected);\n },\n notifyOnSearch: input => {\n this.props.onSearch && this.props.onSearch(input);\n },\n notifyFocus: function () {\n _this.props.onFocus && _this.props.onFocus(...arguments);\n },\n notifyBlur: function () {\n _this.props.onBlur && _this.props.onBlur(...arguments);\n },\n notifyDropdownVisibleChange: visible => {\n this.props.onDropdownVisibleChange(visible);\n },\n toggleHovering: bool => {\n this.setState({\n isHovering: bool\n });\n },\n notifyLoadData: (selectedOpt, callback) => {\n const {\n loadData\n } = this.props;\n if (loadData) {\n new Promise(resolve => {\n loadData(selectedOpt).then(() => {\n /** Why update loading status & call callback function in setTimeout?\n * loadData func will update treeData, treeData change may trigger\n * selectedKeys & activeKeys change. For Loading data asynchronously,\n * activeKeys should not change, Its implementation depends on loading\n * & loadedKeys. The update time of Loading & loadedKeys(in callback func)\n * should be later than the update time of treeData(in loaData func)\n * In React 18, we need to use setTimeout to ensure the above time requirements.\n * */\n setTimeout(() => {\n callback();\n this.setState({\n loading: false\n });\n resolve();\n });\n });\n });\n }\n },\n notifyOnLoad: (newLoadedKeys, data) => {\n const {\n onLoad\n } = this.props;\n onLoad && onLoad(newLoadedKeys, data);\n },\n notifyListScroll: (e, _ref) => {\n let {\n panelIndex,\n activeNode\n } = _ref;\n this.props.onListScroll(e, {\n panelIndex,\n activeNode\n });\n },\n notifyOnExceed: data => this.props.onExceed(data),\n notifyClear: () => this.props.onClear(),\n toggleInputShow: (showInput, cb) => {\n this.setState({\n showInput\n }, () => {\n cb();\n });\n },\n updateFocusState: isFocus => {\n this.setState({\n isFocus\n });\n },\n updateLoadingKeyRefValue: keys => {\n this.loadingKeysRef.current = keys;\n },\n getLoadingKeyRefValue: () => {\n return this.loadingKeysRef.current;\n },\n updateLoadedKeyRefValue: keys => {\n this.loadedKeysRef.current = keys;\n },\n getLoadedKeyRefValue: () => {\n return this.loadedKeysRef.current;\n }\n });\n }\n static getDerivedStateFromProps(props, prevState) {\n const {\n multiple,\n value,\n defaultValue,\n onChangeWithObject,\n leafOnly,\n autoMergeValue,\n checkRelation\n } = props;\n const {\n prevProps\n } = prevState;\n let keyEntities = prevState.keyEntities || {};\n const newState = {};\n const needUpdate = name => {\n const firstInProps = _isEmpty(prevProps) && name in props;\n const nameHasChange = prevProps && !_isEqual(prevProps[name], props[name]);\n return firstInProps || nameHasChange;\n };\n const needUpdateData = () => {\n const firstInProps = !prevProps && 'treeData' in props;\n const treeDataHasChange = prevProps && prevProps.treeData !== props.treeData;\n return firstInProps || treeDataHasChange;\n };\n const getRealKeys = (realValue, keyEntities) => {\n // normalizedValue is used to save the value in two-dimensional array format\n let normalizedValue = [];\n if (Array.isArray(realValue)) {\n normalizedValue = Array.isArray(realValue[0]) ? realValue : [realValue];\n } else {\n if (realValue !== undefined) {\n normalizedValue = [[realValue]];\n }\n }\n // formatValuePath is used to save value of valuePath\n const formatValuePath = [];\n normalizedValue.forEach(valueItem => {\n const formatItem = onChangeWithObject && _isObject(valueItem[0]) ? valueItem.map(i => i === null || i === void 0 ? void 0 : i.value) : valueItem;\n formatItem.length > 0 && formatValuePath.push(formatItem);\n });\n // formatKeys is used to save key of value\n const formatKeys = formatValuePath.reduce((acc, cur) => {\n const key = getKeyByValuePath(cur);\n keyEntities[key] && acc.push(key);\n return acc;\n }, []);\n return formatKeys;\n };\n if (multiple) {\n const needUpdateTreeData = needUpdate('treeData') || needUpdateData();\n const needUpdateValue = needUpdate('value') || _isEmpty(prevProps) && defaultValue;\n // when value and treedata need updated\n if (needUpdateTreeData || needUpdateValue) {\n // update state.keyEntities\n if (needUpdateTreeData) {\n newState.treeData = props.treeData;\n keyEntities = convertDataToEntities(props.treeData);\n newState.keyEntities = keyEntities;\n }\n let realKeys = prevState.checkedKeys;\n // when data was updated\n if (needUpdateValue) {\n const realValue = needUpdate('value') ? value : defaultValue;\n realKeys = getRealKeys(realValue, keyEntities);\n } else {\n // needUpdateValue is false\n // if treeData is updated & Cascader is controlled, realKeys should be recalculated\n if (needUpdateTreeData && 'value' in props) {\n const realValue = value;\n realKeys = getRealKeys(realValue, keyEntities);\n }\n }\n if (_isSet(realKeys)) {\n realKeys = [...realKeys];\n }\n if (checkRelation === strings.RELATED) {\n const calRes = calcCheckedKeys(realKeys, keyEntities);\n const checkedKeys = new Set(calRes.checkedKeys);\n const halfCheckedKeys = new Set(calRes.halfCheckedKeys);\n // disableStrictly\n if (props.disableStrictly) {\n newState.disabledKeys = calcDisabledKeys(keyEntities);\n }\n const isLeafOnlyMerge = calcMergeType(autoMergeValue, leafOnly) === strings.LEAF_ONLY_MERGE_TYPE;\n newState.checkedKeys = checkedKeys;\n newState.halfCheckedKeys = halfCheckedKeys;\n newState.resolvedCheckedKeys = new Set(normalizeKeyList(checkedKeys, keyEntities, isLeafOnlyMerge));\n } else {\n newState.checkedKeys = new Set(realKeys);\n }\n newState.prevProps = props;\n }\n }\n return newState;\n }\n componentDidMount() {\n this.foundation.init();\n }\n componentWillUnmount() {\n this.foundation.destroy();\n }\n componentDidUpdate(prevProps) {\n if (this.props.multiple) {\n return;\n }\n let isOptionsChanged = false;\n if (!_isEqual(prevProps.treeData, this.props.treeData)) {\n isOptionsChanged = true;\n this.foundation.collectOptions();\n }\n if (prevProps.value !== this.props.value && !isOptionsChanged) {\n this.foundation.handleValueChange(this.props.value);\n }\n }\n renderTagInput() {\n const {\n size,\n disabled,\n placeholder,\n maxTagCount,\n showRestTagsPopover,\n restTagsPopoverProps,\n checkRelation\n } = this.props;\n const {\n inputValue,\n checkedKeys,\n keyEntities,\n resolvedCheckedKeys\n } = this.state;\n const tagInputcls = cls(`${prefixcls}-tagInput-wrapper`);\n const realKeys = this.mergeType === strings.NONE_MERGE_TYPE || checkRelation === strings.UN_RELATED ? checkedKeys : resolvedCheckedKeys;\n return /*#__PURE__*/React.createElement(TagInput, {\n className: tagInputcls,\n ref: this.inputRef,\n disabled: disabled,\n size: size,\n value: [...realKeys],\n showRestTagsPopover: showRestTagsPopover,\n restTagsPopoverProps: restTagsPopoverProps,\n maxTagCount: maxTagCount,\n renderTagItem: this.renderTagItem,\n inputValue: inputValue,\n onInputChange: this.handleInputChange,\n // TODO Modify logic, not modify type\n onRemove: this.onRemoveInTagInput,\n placeholder: placeholder,\n expandRestTagsOnClick: false\n });\n }\n renderInput() {\n const {\n size,\n disabled\n } = this.props;\n const inputcls = cls(`${prefixcls}-input`);\n const {\n inputValue,\n inputPlaceHolder,\n showInput\n } = this.state;\n const inputProps = {\n disabled,\n value: inputValue,\n className: inputcls,\n onChange: this.handleInputChange\n };\n const wrappercls = cls({\n [`${prefixcls}-search-wrapper`]: true,\n [`${prefixcls}-search-wrapper-${size}`]: size !== 'default'\n });\n const displayText = this.renderDisplayText();\n const spanCls = cls({\n [`${prefixcls}-selection-placeholder`]: !displayText,\n [`${prefixcls}-selection-text-hide`]: showInput && inputValue,\n [`${prefixcls}-selection-text-inactive`]: showInput && !inputValue\n });\n return /*#__PURE__*/React.createElement(\"div\", {\n className: wrappercls\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: spanCls\n }, displayText ? displayText : inputPlaceHolder), showInput && /*#__PURE__*/React.createElement(Input, Object.assign({\n ref: this.inputRef,\n size: size\n }, inputProps)));\n }\n close() {\n this.foundation.close();\n }\n open() {\n this.foundation.open();\n }\n focus() {\n this.foundation.focus();\n }\n blur() {\n this.foundation.blur();\n }\n render() {\n const {\n zIndex,\n getPopupContainer,\n autoAdjustOverflow,\n stopPropagation,\n mouseLeaveDelay,\n mouseEnterDelay,\n position,\n motion,\n dropdownMargin\n } = this.props;\n const {\n isOpen,\n rePosKey\n } = this.state;\n const {\n direction\n } = this.context;\n const content = this.renderContent();\n const selection = this.renderSelection();\n const pos = position !== null && position !== void 0 ? position : direction === 'rtl' ? 'bottomRight' : 'bottomLeft';\n return /*#__PURE__*/React.createElement(Popover, {\n getPopupContainer: getPopupContainer,\n zIndex: zIndex,\n motion: motion,\n margin: dropdownMargin,\n ref: this.optionsRef,\n content: content,\n visible: isOpen,\n trigger: \"custom\",\n rePosKey: rePosKey,\n position: pos,\n autoAdjustOverflow: autoAdjustOverflow,\n stopPropagation: stopPropagation,\n mouseLeaveDelay: mouseLeaveDelay,\n mouseEnterDelay: mouseEnterDelay,\n afterClose: () => this.foundation.updateSearching(false)\n }, selection);\n }\n}\nCascader.__SemiComponentName__ = \"Cascader\";\nCascader.contextType = ConfigContext;\nCascader.propTypes = {\n 'aria-labelledby': PropTypes.string,\n 'aria-invalid': PropTypes.bool,\n 'aria-errormessage': PropTypes.string,\n 'aria-describedby': PropTypes.string,\n 'aria-required': PropTypes.bool,\n 'aria-label': PropTypes.string,\n arrowIcon: PropTypes.node,\n borderless: PropTypes.bool,\n clearIcon: PropTypes.node,\n changeOnSelect: PropTypes.bool,\n defaultValue: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n disabled: PropTypes.bool,\n dropdownClassName: PropTypes.string,\n dropdownStyle: PropTypes.object,\n dropdownMargin: PropTypes.oneOfType([PropTypes.number, PropTypes.object]),\n emptyContent: PropTypes.node,\n motion: PropTypes.bool,\n /* show search input, if passed in a function, used as custom filter */\n filterTreeNode: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n filterLeafOnly: PropTypes.bool,\n placeholder: PropTypes.string,\n searchPlaceholder: PropTypes.string,\n size: PropTypes.oneOf(strings.SIZE_SET),\n style: PropTypes.object,\n className: PropTypes.string,\n treeData: PropTypes.arrayOf(PropTypes.shape({\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n label: PropTypes.any\n })),\n treeNodeFilterProp: PropTypes.string,\n suffix: PropTypes.node,\n prefix: PropTypes.node,\n insetLabel: PropTypes.node,\n insetLabelId: PropTypes.string,\n id: PropTypes.string,\n displayProp: PropTypes.string,\n displayRender: PropTypes.func,\n onChange: PropTypes.func,\n onSearch: PropTypes.func,\n onSelect: PropTypes.func,\n onBlur: PropTypes.func,\n onFocus: PropTypes.func,\n children: PropTypes.node,\n getPopupContainer: PropTypes.func,\n zIndex: PropTypes.number,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.array]),\n validateStatus: PropTypes.oneOf(strings.VALIDATE_STATUS),\n showNext: PropTypes.oneOf([strings.SHOW_NEXT_BY_CLICK, strings.SHOW_NEXT_BY_HOVER]),\n stopPropagation: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n showClear: PropTypes.bool,\n defaultOpen: PropTypes.bool,\n autoAdjustOverflow: PropTypes.bool,\n onDropdownVisibleChange: PropTypes.func,\n triggerRender: PropTypes.func,\n onListScroll: PropTypes.func,\n onChangeWithObject: PropTypes.bool,\n bottomSlot: PropTypes.node,\n topSlot: PropTypes.node,\n multiple: PropTypes.bool,\n autoMergeValue: PropTypes.bool,\n maxTagCount: PropTypes.number,\n showRestTagsPopover: PropTypes.bool,\n restTagsPopoverProps: PropTypes.object,\n max: PropTypes.number,\n separator: PropTypes.string,\n onExceed: PropTypes.func,\n onClear: PropTypes.func,\n loadData: PropTypes.func,\n onLoad: PropTypes.func,\n loadedKeys: PropTypes.array,\n disableStrictly: PropTypes.bool,\n leafOnly: PropTypes.bool,\n enableLeafClick: PropTypes.bool,\n preventScroll: PropTypes.bool,\n position: PropTypes.string,\n searchPosition: PropTypes.string\n};\nCascader.defaultProps = getDefaultPropsFromGlobalConfig(Cascader.__SemiComponentName__, {\n borderless: false,\n leafOnly: false,\n arrowIcon: /*#__PURE__*/React.createElement(IconChevronDown, null),\n stopPropagation: true,\n motion: true,\n defaultOpen: false,\n zIndex: popoverNumbers.DEFAULT_Z_INDEX,\n showClear: false,\n autoClearSearchValue: true,\n changeOnSelect: false,\n disableStrictly: false,\n autoMergeValue: true,\n multiple: false,\n filterTreeNode: false,\n filterLeafOnly: true,\n showRestTagsPopover: false,\n restTagsPopoverProps: {},\n separator: ' / ',\n size: 'default',\n treeNodeFilterProp: 'label',\n displayProp: 'label',\n treeData: [],\n showNext: strings.SHOW_NEXT_BY_CLICK,\n onExceed: _noop,\n onClear: _noop,\n onDropdownVisibleChange: _noop,\n onListScroll: _noop,\n enableLeafClick: false,\n 'aria-label': 'Cascader',\n searchPosition: strings.SEARCH_POSITION_TRIGGER,\n checkRelation: strings.RELATED\n});\nexport default Cascader;","import { BASE_CLASS_PREFIX } from '../base/constants';\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-rating`\n};\nconst strings = {\n SIZE_SET: ['default', 'small']\n};\nexport { cssClasses, strings };","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.75 1.9c.4-1.2 2.1-1.2 2.5 0l1.99 6.12h6.45a1.3 1.3 0 0 1 .77 2.37l-5.22 3.78 2 6.11c.39 1.2-1 2.2-2.02 1.46L12 17.96l-5.22 3.78c-1.02.75-2.4-.25-2.01-1.46l1.99-6.11-5.22-3.78a1.3 1.3 0 0 1 .77-2.37h6.45l2-6.12Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'star');\nexport default IconComponent;","import BaseFoundation from '../base/foundation';\nimport warning from '../utils/warning';\nexport default class RatingFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign(Object.assign({}, RatingFoundation.defaultAdapter), adapter));\n this.handleStarFocusVisible = event => {\n const {\n target\n } = event;\n const {\n count\n } = this.getProps();\n // when rating 0 is focus visible\n try {\n if (target.matches(':focus-visible')) {\n this._adapter.setEmptyStarFocusVisible(true);\n }\n } catch (error) {\n warning(true, 'Warning: [Semi Rating] The current browser does not support the focus-visible');\n }\n };\n // e: FocusEvent\n this.handleStarBlur = e => {\n const {\n emptyStarFocusVisible\n } = this.getStates();\n if (emptyStarFocusVisible) {\n this._adapter.setEmptyStarFocusVisible(false);\n }\n };\n }\n init() {\n const {\n autoFocus,\n disabled\n } = this.getProps();\n if (autoFocus && !disabled) {\n this._adapter.focus();\n }\n }\n _getScroll(w, top) {\n let ret = top ? w.pageYOffset : w.pageXOffset;\n const method = top ? 'scrollTop' : 'scrollLeft';\n if (typeof ret !== 'number') {\n const d = w.document;\n // ie6,7,8 standard mode\n ret = d.documentElement[method];\n if (typeof ret !== 'number') {\n // quirks mode\n ret = d.body[method];\n }\n }\n return ret;\n }\n _getClientPosition(elem) {\n let x, y;\n const doc = elem.ownerDocument;\n const {\n body\n } = doc;\n const docElem = doc && doc.documentElement;\n const box = elem.getBoundingClientRect();\n x = box.left;\n y = box.top;\n x -= docElem.clientLeft || body.clientLeft || 0;\n y -= docElem.clientTop || body.clientTop || 0;\n return {\n left: x,\n top: y\n };\n }\n _getOffsetLeft(el) {\n const pos = this._getClientPosition(el);\n const doc = el.ownerDocument;\n const w = doc.defaultView || doc.parentWindow;\n pos.left += this._getScroll(w);\n return pos.left;\n }\n getStarValue(index, pos) {\n const {\n allowHalf\n } = this.getProps();\n const direction = this._adapter.getContext('direction');\n const reverse = direction === 'rtl';\n let value = index + 1;\n if (allowHalf) {\n const starEle = this._adapter.getStarDOM(index);\n const leftDis = this._getOffsetLeft(starEle);\n const width = starEle.clientWidth;\n if (reverse && pos - leftDis > width / 2) {\n value -= 0.5;\n } else if (!reverse && pos - leftDis < width / 2) {\n value -= 0.5;\n }\n }\n return value;\n }\n handleHover(event, index) {\n const currValue = this.getStarValue(index, event.pageX);\n const {\n clearedValue,\n hoverValue\n } = this.getStates();\n if (currValue !== hoverValue && currValue !== clearedValue) {\n this._adapter.notifyHoverChange(currValue, null);\n }\n }\n handleMouseLeave() {\n this._adapter.notifyHoverChange(undefined, null);\n }\n handleClick(event, index) {\n const {\n allowClear\n } = this.getProps();\n const {\n value\n } = this.getStates();\n const newValue = this.getStarValue(index, event.pageX);\n const isReset = allowClear ? newValue === value : false;\n this._adapter.updateValue(isReset ? 0 : newValue);\n if (isReset) {\n this._adapter.notifyHoverChange(undefined, newValue);\n } else {\n this._adapter.clearValue(null);\n }\n }\n handleFocus(e) {\n this._adapter.notifyFocus(e);\n }\n handleBlur(e) {\n this._adapter.notifyBlur(e);\n }\n handleKeyDown(event, value) {\n const {\n key\n } = event;\n const {\n count,\n allowHalf\n } = this.getProps();\n const direction = this._adapter.getContext('direction');\n const reverse = direction === 'rtl';\n const step = allowHalf ? 0.5 : 1;\n let tempValue;\n let newValue;\n if (key === 'ArrowRight' || key === 'ArrowUp') {\n tempValue = value + (reverse ? -step : step);\n } else if (key === 'ArrowLeft' || key === 'ArrowDown') {\n tempValue = value + (reverse ? step : -step);\n }\n if (tempValue > count) {\n newValue = 0;\n } else if (tempValue < 0) {\n newValue = count;\n } else {\n newValue = tempValue;\n }\n if (['ArrowRight', 'ArrowUp', 'ArrowLeft', 'ArrowDown'].includes(key)) {\n this._adapter.notifyKeyDown(event);\n this._adapter.updateValue(newValue);\n this.changeFocusStar(newValue, event);\n event.preventDefault();\n this._adapter.notifyHoverChange(undefined, null);\n }\n }\n changeFocusStar(value, event) {\n const {\n count,\n allowHalf,\n preventScroll\n } = this.getProps();\n const index = Math.ceil(value) - 1;\n const starElement = [...event.currentTarget.childNodes].map(item => item.childNodes[0].childNodes);\n if (index < 0) {\n starElement[count][0].focus({\n preventScroll\n });\n } else {\n starElement[index][allowHalf ? value * 10 % 10 === 5 ? 0 : 1 : 0].focus({\n preventScroll\n });\n }\n }\n}\nexport class RatingItemFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign(Object.assign({}, RatingItemFoundation.defaultAdapter), adapter));\n this.handleFocusVisible = (event, star) => {\n const {\n target\n } = event;\n // when rating 0 is focus visible\n try {\n if (target.matches(':focus-visible')) {\n if (star === 'first') {\n this._adapter.setFirstStarFocus(true);\n } else {\n this._adapter.setSecondStarFocus(true);\n }\n }\n } catch (error) {\n warning(true, 'Warning: [Semi Rating] The current browser does not support the focus-visible');\n }\n };\n // e: FocusEvent\n this.handleBlur = (e, star) => {\n const {\n firstStarFocus,\n secondStarFocus\n } = this.getStates();\n if (star === 'first') {\n firstStarFocus && this._adapter.setFirstStarFocus(false);\n } else {\n secondStarFocus && this._adapter.setSecondStarFocus(false);\n }\n };\n }\n}","import React from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/rating/constants';\nimport '@douyinfe/semi-foundation/lib/es/rating/rating.css';\nimport { IconStar } from '@douyinfe/semi-icons';\nimport { RatingItemFoundation } from '@douyinfe/semi-foundation/lib/es/rating/foundation';\nimport BaseComponent from '../_base/baseComponent';\nexport default class Item extends BaseComponent {\n constructor(props) {\n super(props);\n this.firstStar = null;\n this.secondStar = null;\n this.onHover = e => {\n const {\n onHover,\n index\n } = this.props;\n onHover(e, index);\n };\n this.onClick = e => {\n const {\n onClick,\n index\n } = this.props;\n onClick(e, index);\n };\n this.onFocus = (e, star) => {\n const {\n onFocus\n } = this.props;\n onFocus && onFocus(e);\n this.foundation.handleFocusVisible(e, star);\n };\n this.onBlur = (e, star) => {\n const {\n onBlur\n } = this.props;\n onBlur && onBlur(e);\n this.foundation.handleBlur(e, star);\n };\n this.onKeyDown = e => {\n const {\n onClick,\n index\n } = this.props;\n if (e.keyCode === 13) {\n onClick(e, index);\n }\n };\n this.starFocus = () => {\n const {\n value,\n index,\n preventScroll\n } = this.props;\n if (value - index === 0.5) {\n this.firstStar.focus({\n preventScroll\n });\n } else {\n this.secondStar.focus({\n preventScroll\n });\n }\n };\n this.saveFirstStar = node => {\n this.firstStar = node;\n };\n this.saveSecondStar = node => {\n this.secondStar = node;\n };\n this.state = {\n firstStarFocus: false,\n secondStarFocus: false\n };\n this.foundation = new RatingItemFoundation(this.adapter);\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n setFirstStarFocus: value => {\n this.setState({\n firstStarFocus: value\n });\n },\n setSecondStarFocus: value => {\n this.setState({\n secondStarFocus: value\n });\n }\n });\n }\n render() {\n const {\n index,\n prefixCls,\n character,\n count,\n value,\n disabled,\n allowHalf,\n focused,\n size,\n ariaLabelPrefix\n } = this.props;\n const {\n firstStarFocus,\n secondStarFocus\n } = this.state;\n const starValue = index + 1;\n const diff = starValue - value;\n // const isHalf = allowHalf && value + 0.5 === starValue;\n const isHalf = allowHalf && diff < 1 && diff > 0;\n const firstWidth = 1 - diff;\n const isFull = starValue <= value;\n const isCustomSize = typeof size === 'number';\n const starCls = cls(prefixCls, {\n [`${prefixCls}-half`]: isHalf,\n [`${prefixCls}-full`]: isFull,\n [`${prefixCls}-${size}`]: !isCustomSize\n });\n const sizeStyle = isCustomSize ? {\n width: size,\n height: size,\n fontSize: size\n } : {};\n const iconSize = isCustomSize ? 'inherit' : size === 'small' ? 'default' : 'extra-large';\n const content = character ? character : /*#__PURE__*/React.createElement(IconStar, {\n size: iconSize,\n style: {\n display: 'block'\n }\n });\n const isEmpty = index === count;\n const starWrapCls = cls(`${prefixCls}-wrapper`, {\n [`${prefixCls}-disabled`]: disabled,\n [`${cssClasses.PREFIX}-focus`]: (firstStarFocus || secondStarFocus) && value !== 0\n });\n const starWrapProps = {\n onClick: disabled ? null : this.onClick,\n onKeyDown: disabled ? null : this.onKeyDown,\n onMouseMove: disabled ? null : this.onHover,\n className: starWrapCls\n };\n const AriaSetSize = allowHalf ? count * 2 + 1 : count + 1;\n const firstStarProps = {\n ref: this.saveFirstStar,\n role: \"radio\",\n 'aria-checked': value === index + 0.5,\n 'aria-posinset': 2 * index + 1,\n 'aria-setsize': AriaSetSize,\n 'aria-disabled': disabled,\n 'aria-label': `${index + 0.5} ${ariaLabelPrefix}s`,\n 'aria-labelledby': this.props['aria-describedby'],\n 'aria-describedby': this.props['aria-describedby'],\n className: cls(`${prefixCls}-first`, `${cssClasses.PREFIX}-no-focus`),\n tabIndex: !disabled && value === index + 0.5 ? 0 : -1,\n onFocus: e => {\n this.onFocus(e, 'first');\n },\n onBlur: e => {\n this.onBlur(e, 'first');\n }\n };\n const secondStarTabIndex = !disabled && (value === index + 1 || isEmpty && value === 0) ? 0 : -1;\n const secondStarProps = {\n ref: this.saveSecondStar,\n role: \"radio\",\n 'aria-checked': isEmpty ? value === 0 : value === index + 1,\n 'aria-posinset': allowHalf ? 2 * (index + 1) : index + 1,\n 'aria-setsize': AriaSetSize,\n 'aria-disabled': disabled,\n 'aria-label': `${isEmpty ? 0 : index + 1} ${ariaLabelPrefix}${index === 0 ? '' : 's'}`,\n 'aria-labelledby': this.props['aria-describedby'],\n 'aria-describedby': this.props['aria-describedby'],\n className: cls(`${prefixCls}-second`, `${cssClasses.PREFIX}-no-focus`),\n tabIndex: secondStarTabIndex,\n onFocus: e => {\n this.onFocus(e, 'second');\n },\n onBlur: e => {\n this.onBlur(e, 'second');\n }\n };\n return /*#__PURE__*/React.createElement(\"li\", {\n className: starCls,\n style: Object.assign({}, sizeStyle),\n key: index\n }, /*#__PURE__*/React.createElement(\"div\", Object.assign({}, starWrapProps), allowHalf && !isEmpty && /*#__PURE__*/React.createElement(\"div\", Object.assign({}, firstStarProps, {\n style: {\n width: `${firstWidth * 100}%`\n }\n }), content), /*#__PURE__*/React.createElement(\"div\", Object.assign({}, secondStarProps, {\n \"x-semi-prop\": \"character\"\n }), content)));\n }\n}\nItem.propTypes = {\n value: PropTypes.number,\n index: PropTypes.number,\n prefixCls: PropTypes.string,\n allowHalf: PropTypes.bool,\n onHover: PropTypes.func,\n onClick: PropTypes.func,\n character: PropTypes.node,\n focused: PropTypes.bool,\n disabled: PropTypes.bool,\n count: PropTypes.number,\n ariaLabelPrefix: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.oneOf(strings.SIZE_SET), PropTypes.number]),\n 'aria-describedby': PropTypes.string,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n preventScroll: PropTypes.bool\n};","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport BaseComponent from '../_base/baseComponent';\nimport cls from 'classnames';\nimport ConfigContext from '../configProvider/context';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/rating/constants';\nimport PropTypes from 'prop-types';\nimport { noop } from '@douyinfe/semi-foundation/lib/es/utils/function';\nimport Item from './item';\nimport Tooltip from '../tooltip';\nimport RatingFoundation from '@douyinfe/semi-foundation/lib/es/rating/foundation';\nimport '@douyinfe/semi-foundation/lib/es/rating/rating.css';\nexport default class Rating extends BaseComponent {\n constructor(props) {\n super(props);\n this.rate = null;\n this.onHover = (event, index) => {\n this.foundation.handleHover(event, index);\n };\n this.onMouseLeave = () => {\n this.foundation.handleMouseLeave();\n };\n this.onClick = (event, index) => {\n this.foundation.handleClick(event, index);\n };\n this.onFocus = e => {\n this.foundation.handleFocus(e);\n };\n this.onBlur = e => {\n this.foundation.handleBlur(e);\n };\n this.onKeyDown = event => {\n const {\n value\n } = this.state;\n this.foundation.handleKeyDown(event, value);\n };\n this.focus = () => {\n const {\n disabled,\n preventScroll\n } = this.props;\n if (!disabled) {\n this.rate.focus({\n preventScroll\n });\n }\n };\n this.blur = () => {\n const {\n disabled\n } = this.props;\n if (!disabled) {\n this.rate.blur();\n }\n };\n this.saveRef = index => node => {\n this.stars[index] = node;\n };\n this.saveRate = node => {\n this.rate = node;\n };\n this.handleStarFocusVisible = event => {\n this.foundation.handleStarFocusVisible(event);\n };\n this.handleStarBlur = event => {\n this.foundation.handleStarBlur(event);\n };\n this.getAriaLabelPrefix = () => {\n if (this.props['aria-label']) {\n return this.props['aria-label'];\n }\n let prefix = 'star';\n const {\n character\n } = this.props;\n if (typeof character === 'string') {\n prefix = character;\n }\n return prefix;\n };\n this.getItemList = ariaLabelPrefix => {\n const {\n count,\n allowHalf,\n prefixCls,\n disabled,\n character,\n size,\n tooltips\n } = this.props;\n const {\n value,\n hoverValue,\n focused\n } = this.state;\n // index == count is for Empty rating\n const itemList = [...Array(count + 1).keys()].map(ind => {\n const content = /*#__PURE__*/React.createElement(Item, {\n ref: this.saveRef(ind),\n index: ind,\n count: count,\n prefixCls: `${prefixCls}-star`,\n allowHalf: allowHalf,\n value: hoverValue === undefined ? value : hoverValue,\n onClick: disabled ? noop : this.onClick,\n onHover: disabled ? noop : this.onHover,\n key: ind,\n disabled: disabled,\n character: character,\n focused: focused,\n size: ind === count ? 0 : size,\n ariaLabelPrefix: ariaLabelPrefix,\n onFocus: disabled || count !== ind ? noop : this.handleStarFocusVisible,\n onBlur: disabled || count !== ind ? noop : this.handleStarBlur\n });\n if (tooltips) {\n const text = tooltips[ind] ? tooltips[ind] : '';\n const showTips = hoverValue - 1 === ind;\n return /*#__PURE__*/React.createElement(Tooltip, {\n visible: showTips,\n trigger: \"custom\",\n content: text,\n key: `${ind}-${showTips}`\n }, content);\n }\n return content;\n });\n return itemList;\n };\n const value = props.value === undefined ? props.defaultValue : props.value;\n this.stars = {};\n this.state = {\n value,\n focused: false,\n hoverValue: undefined,\n clearedValue: null,\n emptyStarFocusVisible: false\n };\n this.foundation = new RatingFoundation(this.adapter);\n }\n static getDerivedStateFromProps(nextProps, state) {\n if ('value' in nextProps && nextProps.value !== undefined) {\n return Object.assign(Object.assign({}, state), {\n value: nextProps.value\n });\n }\n return state;\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n focus: () => {\n const {\n disabled,\n count\n } = this.props;\n const {\n value\n } = this.state;\n if (!disabled) {\n const index = Math.ceil(value) - 1;\n this.stars[index < 0 ? count : index].starFocus();\n }\n },\n getStarDOM: index => {\n const instance = this.stars && this.stars[index];\n return ReactDOM.findDOMNode(instance);\n },\n notifyHoverChange: (hoverValue, clearedValue) => {\n const {\n onHoverChange\n } = this.props;\n this.setState({\n hoverValue,\n clearedValue\n });\n onHoverChange(hoverValue);\n },\n updateValue: value => {\n const {\n onChange\n } = this.props;\n if (!('value' in this.props)) {\n this.setState({\n value\n });\n }\n onChange(value);\n },\n clearValue: clearedValue => {\n this.setState({\n clearedValue\n });\n },\n notifyFocus: e => {\n const {\n onFocus\n } = this.props;\n this.setState({\n focused: true\n });\n onFocus && onFocus(e);\n },\n notifyBlur: e => {\n const {\n onBlur\n } = this.props;\n this.setState({\n focused: false\n });\n onBlur && onBlur(e);\n },\n notifyKeyDown: e => {\n const {\n onKeyDown\n } = this.props;\n this.setState({\n focused: false\n });\n onKeyDown && onKeyDown(e);\n },\n setEmptyStarFocusVisible: focusVisible => {\n this.setState({\n emptyStarFocusVisible: focusVisible\n });\n }\n });\n }\n componentDidMount() {\n this.foundation.init();\n }\n componentWillUnmount() {\n this.foundation.destroy();\n }\n render() {\n const _a = this.props,\n {\n style,\n prefixCls,\n disabled,\n className,\n id,\n count,\n tabIndex\n } = _a,\n rest = __rest(_a, [\"style\", \"prefixCls\", \"disabled\", \"className\", \"id\", \"count\", \"tabIndex\"]);\n const {\n value,\n emptyStarFocusVisible\n } = this.state;\n const ariaLabelPrefix = this.getAriaLabelPrefix();\n const ariaLabel = `Rating: ${value} of ${count} ${ariaLabelPrefix}${value === 1 ? '' : 's'},`;\n const itemList = this.getItemList(ariaLabelPrefix);\n const listCls = cls(prefixCls, {\n [`${prefixCls}-disabled`]: disabled,\n [`${prefixCls}-focus`]: emptyStarFocusVisible\n }, className);\n return (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions\n React.createElement(\"ul\", Object.assign({\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": this.props['aria-labelledby'],\n \"aria-describedby\": this.props['aria-describedby'],\n className: listCls,\n style: style,\n onMouseLeave: disabled ? noop : this.onMouseLeave,\n tabIndex: disabled ? -1 : tabIndex,\n onFocus: disabled ? noop : this.onFocus,\n onBlur: disabled ? noop : this.onBlur,\n onKeyDown: disabled ? noop : this.onKeyDown,\n ref: this.saveRate,\n id: id\n }, this.getDataAttr(rest)), itemList)\n );\n }\n}\nRating.contextType = ConfigContext;\nRating.propTypes = {\n 'aria-describedby': PropTypes.string,\n 'aria-errormessage': PropTypes.string,\n 'aria-invalid': PropTypes.bool,\n 'aria-label': PropTypes.string,\n 'aria-labelledby': PropTypes.string,\n 'aria-required': PropTypes.bool,\n disabled: PropTypes.bool,\n value: PropTypes.number,\n defaultValue: PropTypes.number,\n count: PropTypes.number,\n allowHalf: PropTypes.bool,\n allowClear: PropTypes.bool,\n style: PropTypes.object,\n prefixCls: PropTypes.string,\n onChange: PropTypes.func,\n onHoverChange: PropTypes.func,\n className: PropTypes.string,\n character: PropTypes.node,\n tabIndex: PropTypes.number,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n onKeyDown: PropTypes.func,\n autoFocus: PropTypes.bool,\n size: PropTypes.oneOfType([PropTypes.oneOf(strings.SIZE_SET), PropTypes.number]),\n tooltips: PropTypes.arrayOf(PropTypes.string),\n id: PropTypes.string,\n preventScroll: PropTypes.bool\n};\nRating.defaultProps = {\n defaultValue: 0,\n count: 5,\n allowHalf: false,\n allowClear: true,\n style: {},\n prefixCls: cssClasses.PREFIX,\n onChange: noop,\n onHoverChange: noop,\n tabIndex: -1,\n size: 'default'\n};","import { VALIDATE_STATUS, BASE_CLASS_PREFIX } from '../base/constants';\nconst PREFIX = `${BASE_CLASS_PREFIX}-upload`;\nconst FILE_LIST_PIC = 'picture';\nconst FILE_LIST_DEFAULT = 'list';\nconst PROGRESS_COEFFICIENT = 0.95;\nconst cssClasses = {\n PREFIX,\n // WRAPPER: `${PREFIX}-wrapper`,\n LIST: `${PREFIX}-list`\n};\nconst TRIGGER_AUTO = 'auto';\nconst TRIGGER_CUSTOM = 'custom';\nconst strings = {\n FILE_STATUS_UPLOADING: 'uploading',\n FILE_STATUS_SUCCESS: 'success',\n FILE_STATUS_UPLOAD_FAIL: 'uploadFail',\n FILE_STATUS_VALIDATING: 'validating',\n FILE_STATUS_VALID_FAIL: 'validateFail',\n FILE_STATUS_WAIT_UPLOAD: 'wait',\n FILE_LIST_PIC,\n FILE_LIST_DEFAULT,\n LIST_TYPE: [FILE_LIST_PIC, FILE_LIST_DEFAULT],\n imageTypes: ['image', 'webp', 'png', 'svg', 'gif', 'jpg', 'jpeg', 'bmp', 'dpg'],\n DRAG_AREA_DEFAULT: 'default',\n DRAG_AREA_LEGAL: 'legal',\n DRAG_AREA_ILLEGAL: 'illegal',\n TRIGGER_AUTO,\n TRIGGER_CUSTOM,\n UPLOAD_TRIGGER: [TRIGGER_AUTO, TRIGGER_CUSTOM],\n VALIDATE_STATUS,\n PROMPT_POSITION: ['left', 'right', 'bottom']\n};\nconst numbers = {\n PROGRESS_COEFFICIENT\n};\nexport { cssClasses, strings, numbers };","var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nexport const byteKB = 1024;\nexport const byteMB = 1048576;\nexport function getFileSize(number) {\n if (number < byteKB) {\n return `${(number / byteKB).toFixed(2)}KB`;\n } else if (number >= byteKB && number < byteMB) {\n return `${(number / byteKB).toFixed(1)}KB`;\n } else if (number >= byteMB) {\n return `${(number / byteMB).toFixed(1)}MB`;\n }\n return undefined;\n}\nexport function endsWith(str, suffix) {\n return str.indexOf(suffix, str.length - suffix.length) !== -1;\n}\nexport function loopFiles(item) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((res, rej) => {\n const dirReader = item.createReader();\n let fileList = [];\n function sequence() {\n dirReader.readEntries(entries => {\n const entryList = Array.prototype.slice.apply(entries);\n fileList = fileList.concat(entryList);\n // Check if all the file has been viewed\n const isFinished = !entryList.length;\n if (isFinished) {\n res(fileList);\n } else {\n sequence();\n }\n }, rej);\n }\n sequence();\n });\n });\n}\nexport function mapFileTree(items) {\n return __awaiter(this, void 0, void 0, function* () {\n const promises = [];\n const _traverseFileTree = (item, path) => __awaiter(this, void 0, void 0, function* () {\n path = path || '';\n //@ts-ignore add path property into item\n item.path = path;\n if (item.isFile) {\n promises.push(new Promise((res, rej) => {\n item.file(file => {\n if (item.fullPath && !file.webkitRelativePath) {\n // This file is provided to the user based on the relative path of the drag and drop folder\n // If you drag the Upload folder, the path of the internal file may be Upload/File/a.png, etc\n Object.defineProperties(file, {\n webkitRelativePath: {\n writable: true\n }\n });\n //@ts-ignore add webkitRelativePath property into file\n file.webkitRelativePath = item.fullPath.replace(/^\\//, '');\n Object.defineProperties(file, {\n webkitRelativePath: {\n writable: false\n }\n });\n }\n res(file);\n }, rej);\n }));\n } else if (item.isDirectory) {\n const entries = yield loopFiles(item);\n for (let index = 0; index < entries.length; index++) {\n const entry = entries[index];\n yield _traverseFileTree(entry, `${path}${item.name}/`);\n }\n }\n });\n try {\n const batches = items.map(i => _traverseFileTree(i.webkitGetAsEntry()));\n // Perform asynchronous operations to add the required promises to the queue\n yield Promise.all(batches);\n // Execution queue\n const result = yield Promise.all(promises);\n return result;\n } catch (error) {\n console.warn('Captured error while loop directory.');\n console.error(error);\n return [];\n }\n });\n}","var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport BaseFoundation from '../base/foundation';\nimport isPromise from '../utils/isPromise';\nimport { getUuidv4 } from '../utils/uuid';\nimport { strings, numbers } from './constants';\nimport { getFileSize, byteKB, endsWith, mapFileTree } from './utils';\nconst {\n FILE_STATUS_UPLOADING,\n FILE_STATUS_SUCCESS,\n FILE_STATUS_UPLOAD_FAIL,\n FILE_STATUS_VALID_FAIL,\n FILE_STATUS_WAIT_UPLOAD,\n DRAG_AREA_DEFAULT,\n DRAG_AREA_LEGAL,\n TRIGGER_AUTO\n} = strings;\nclass UploadFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n this.destroyState = false;\n }\n init() {\n // make sure state reset, otherwise may cause upload abort in React StrictMode, like https://github.com/DouyinFE/semi-design/pull/843\n this.destroyState = false;\n const {\n disabled,\n addOnPasting\n } = this.getProps();\n if (addOnPasting && !disabled) {\n this.bindPastingHandler();\n }\n }\n destroy() {\n const {\n disabled,\n addOnPasting\n } = this.getProps();\n this.releaseMemory();\n if (!disabled) {\n this.unbindPastingHandler();\n }\n this.destroyState = true;\n }\n getError(_ref) {\n let {\n action,\n xhr,\n message,\n fileName\n } = _ref;\n const status = xhr ? xhr.status : 0;\n const msg = message || `cannot post ${fileName} to ${action}, xhr status: ${status}'`;\n const err = new Error(msg);\n err.status = status;\n err.method = 'post';\n err.url = action;\n return err;\n }\n getBody(xhr) {\n if (!xhr) {\n return;\n }\n const text = xhr.responseText || xhr.response;\n if (!text) {\n return text;\n }\n try {\n return JSON.parse(text);\n } catch (error) {\n return text;\n }\n }\n checkFileSize(file) {\n const {\n size\n } = file;\n const {\n maxSize,\n minSize\n } = this.getProps();\n let isIllegal = false;\n if (size > maxSize * byteKB || size < minSize * byteKB) {\n isIllegal = true;\n }\n return isIllegal;\n }\n /**\n * 1. 选择文件\n * 2. transform转换. 添加uid\n * 3. 检查文件个数是否超出\n * 若超出,不添加到list中,触发onExceed,中止流程\n * 若未超出,执行以下流程\n * 4. 检查文件尺寸,添加尺寸是否合法的标识\n * 5. 检查uploadTrigger是否为'auto',若是执行步骤6-8\n * 6. 遍历文件列表触发上传\n * - 对尺寸不合适的不需要触发上传\n * 7. beforeUpload\n * - 对beforeUpload中设为不合法的不需要触发上传\n * 8. TODO: check\n * 9. afterUpload\n *\n * 1. Select file\n * 2. transform, add uid\n * 3. Check whether the number of files exceeds\n * If it exceeds, it is not added to the list, trigger onExceed, and abort the process\n * If it is not exceeded, execute the following process\n * 4. check the file size, add the size is legal logo\n * 5. Check whether the uploadTrigger is'auto ', if so, perform steps 6-8\n * 6. Traversing the file list triggers upload\n * - No need to trigger uploads for inappropriate sizes\n * 7. beforeUpload\n * - no need to trigger upload if beforeUpload is not set to be valid\n * 8. TODO: check\n * 9. afterUpload\n */\n handleChange(currentFileList) {\n const invalidFiles = [];\n const {\n limit,\n transformFile,\n accept\n } = this.getProps();\n const {\n fileList\n } = this.getStates();\n let files = Array.from(currentFileList); // When the selected file\n if (typeof accept !== 'undefined') {\n files = files.filter(item => {\n const isValid = this.checkFileFormat(accept, item);\n if (!isValid) {\n invalidFiles.push(item);\n }\n return isValid;\n });\n if (invalidFiles.length !== 0) {\n this._adapter.notifyAcceptInvalid(invalidFiles);\n }\n if (files.length === 0) {\n return;\n }\n }\n files = files.map(file => {\n if (transformFile) {\n file = transformFile(file);\n }\n if (!file.uid) {\n file.uid = getUuidv4();\n }\n if (this.checkFileSize(file)) {\n file._sizeInvalid = true;\n file.status = FILE_STATUS_VALID_FAIL;\n this._adapter.notifySizeError(file, fileList);\n }\n return file;\n });\n const total = fileList.length + files.length;\n if (typeof limit !== 'undefined') {\n // Determine whether the limit is exceeded\n if (total > limit) {\n this._adapter.notifyExceed(files);\n if (limit === 1) {\n // Replace the current file with the last file\n files = files.slice(-1);\n this._adapter.notifyFileSelect(files);\n this._adapter.resetInput();\n this.replaceFileList(files);\n return;\n }\n // If the limit is exceeded, the calculation can add a few more files and continue uploading the remaining files\n const restNum = limit - fileList.length;\n files = files.slice(0, restNum);\n }\n }\n this._adapter.notifyFileSelect(files);\n this._adapter.resetInput();\n this.addFilesToList(files);\n }\n // Triggered when replacing a single file\n handleReplaceChange(currentFileList) {\n if (currentFileList.length === 0) {\n return;\n }\n const {\n transformFile,\n uploadTrigger,\n accept\n } = this.getProps();\n const {\n replaceIdx,\n fileList\n } = this.getStates();\n let newFile = Array.from(currentFileList).pop();\n if (typeof accept !== 'undefined') {\n if (!this.checkFileFormat(accept, newFile)) {\n this._adapter.notifyAcceptInvalid([newFile]);\n return;\n }\n }\n if (transformFile) {\n newFile = transformFile(newFile);\n }\n if (!newFile.uid) {\n newFile.uid = getUuidv4();\n }\n if (this.checkFileSize(newFile)) {\n newFile._sizeInvalid = true;\n newFile.status = FILE_STATUS_VALID_FAIL;\n this._adapter.notifySizeError(newFile, fileList);\n }\n this._adapter.notifyFileSelect([newFile]);\n const newFileItem = this.buildFileItem(newFile, uploadTrigger);\n const newFileList = [...fileList];\n newFileList.splice(replaceIdx, 1, newFileItem);\n this._adapter.notifyChange({\n currentFile: newFileItem,\n fileList: newFileList\n });\n this._adapter.updateFileList(newFileList, () => {\n this._adapter.resetReplaceInput();\n if (!newFileItem._sizeInvalid) {\n this.upload(newFileItem);\n }\n });\n }\n buildFileItem(fileInstance, uploadTrigger) {\n const {\n _sizeInvalid,\n status\n } = fileInstance;\n try {\n // can't use ... to get rest property on File Object\n delete fileInstance._sizeInvalid;\n delete fileInstance.status;\n } catch (error) {}\n const _file = {\n status: status ? status : uploadTrigger === TRIGGER_AUTO ? FILE_STATUS_UPLOADING : FILE_STATUS_WAIT_UPLOAD,\n name: fileInstance.name,\n size: getFileSize(fileInstance.size),\n uid: fileInstance.uid,\n percent: 0,\n fileInstance,\n url: this._createURL(fileInstance)\n };\n if (_sizeInvalid) {\n _file._sizeInvalid = true;\n }\n // If it is an image, preview; if it is a pdf, you can jump to\n if (this.isImage(fileInstance)) {\n _file.preview = true;\n }\n return _file;\n }\n replaceFileList(files) {\n const {\n uploadTrigger\n } = this.getProps();\n const currentFiles = files.map(item => this.buildFileItem(item, uploadTrigger));\n this._adapter.notifyChange({\n fileList: currentFiles,\n currentFile: currentFiles[0]\n });\n this._adapter.updateFileList(currentFiles, () => {\n if (uploadTrigger === TRIGGER_AUTO) {\n this.startUpload(currentFiles);\n }\n });\n }\n addFilesToList(files) {\n const fileList = this.getState('fileList').slice();\n const {\n uploadTrigger\n } = this.getProps();\n const currentFiles = files.map(item => this.buildFileItem(item, uploadTrigger));\n currentFiles.forEach(file => {\n const index = fileList.findIndex(item => item.uid === file.uid);\n if (index !== -1) {\n fileList[index] = file;\n } else {\n fileList.push(file);\n this._adapter.notifyChange({\n fileList,\n currentFile: file\n });\n }\n });\n this._adapter.updateFileList(fileList, () => {\n if (uploadTrigger === TRIGGER_AUTO) {\n this.startUpload(currentFiles);\n }\n });\n }\n // 插入多个文件到指定位置\n // Insert files to the specified location\n insertFileToList(files, index) {\n const {\n limit,\n transformFile,\n accept,\n uploadTrigger\n } = this.getProps();\n const {\n fileList\n } = this.getStates();\n const unAcceptFileList = [];\n // 当次选中的文件\n // current selected file\n let currentFileList = Array.from(files);\n if (typeof accept !== 'undefined') {\n currentFileList = currentFileList.filter(item => {\n const isValid = this.checkFileFormat(accept, item);\n if (!isValid) {\n unAcceptFileList.push(item);\n }\n return isValid;\n });\n if (unAcceptFileList.length !== 0) {\n this._adapter.notifyAcceptInvalid(unAcceptFileList);\n }\n if (currentFileList.length === 0) {\n return;\n }\n }\n currentFileList = currentFileList.map(file => {\n if (!file.uid) {\n file.uid = getUuidv4();\n }\n if (this.checkFileSize(file)) {\n file._sizeInvalid = true;\n file.status = FILE_STATUS_VALID_FAIL;\n this._adapter.notifySizeError(file, fileList);\n }\n if (transformFile) {\n file = transformFile(file);\n }\n return file;\n });\n const total = fileList.length + currentFileList.length;\n if (typeof limit !== 'undefined') {\n // 判断是否超出限制\n // Determine whether the limit is exceeded\n if (total > limit) {\n if (limit === 1) {\n // 使用最后面的文件对当前文件进行替换\n // Use the last file to replace the current file\n currentFileList = currentFileList.slice(-1);\n this._adapter.notifyFileSelect(currentFileList);\n this._adapter.resetInput();\n this.replaceFileList(currentFileList);\n return;\n }\n // 如果超出了限制,则计算还能添加几个文件,将剩余的文件继续上传\n // If the limit is exceeded, several files can be added to the calculation, and the remaining files will continue to be uploaded\n const restNum = limit - fileList.length;\n currentFileList = currentFileList.slice(0, restNum);\n this._adapter.notifyExceed(currentFileList);\n }\n }\n const fileItemList = currentFileList.map(file => this.buildFileItem(file, uploadTrigger));\n const newFileList = fileList.slice();\n if (typeof index !== 'undefined') {\n newFileList.splice(index, 0, ...fileItemList);\n } else {\n newFileList.push(...fileItemList);\n }\n this._adapter.notifyFileSelect(currentFileList);\n this._adapter.notifyChange({\n fileList: newFileList,\n currentFile: null\n });\n this._adapter.updateFileList(newFileList, () => {\n if (uploadTrigger === TRIGGER_AUTO) {\n this.startUpload(fileItemList);\n }\n });\n }\n /* istanbul ignore next */\n manualUpload() {\n // find the list of files that have not been uploaded\n const waitToUploadFileList = this.getState('fileList').filter(item => item.status === FILE_STATUS_WAIT_UPLOAD);\n this.startUpload(waitToUploadFileList);\n }\n startUpload(fileList) {\n fileList.forEach(file => {\n if (!file._sizeInvalid) {\n this.upload(file);\n }\n });\n }\n upload(file) {\n const {\n beforeUpload\n } = this.getProps();\n if (typeof beforeUpload === 'undefined') {\n this.post(file);\n return;\n }\n if (typeof beforeUpload === 'function') {\n const {\n fileList\n } = this.getStates();\n const buResult = this._adapter.notifyBeforeUpload({\n file,\n fileList\n });\n switch (true) {\n // sync validate - boolean\n case buResult === true:\n {\n this.post(file);\n break;\n }\n case buResult === false:\n {\n const newResult = {\n shouldUpload: false,\n status: strings.FILE_STATUS_VALID_FAIL\n };\n this.handleBeforeUploadResultInObject(newResult, file);\n break;\n }\n // async validate\n case buResult && isPromise(buResult):\n {\n Promise.resolve(buResult).then(resolveData => {\n let newResult = {\n shouldUpload: true\n };\n const typeOfResolveData = Object.prototype.toString.call(resolveData).slice(8, -1);\n if (typeOfResolveData === 'Object') {\n newResult = Object.assign(Object.assign({}, newResult), resolveData);\n }\n this.handleBeforeUploadResultInObject(newResult, file);\n }, rejectVal => {\n let newResult = {\n shouldUpload: false,\n status: strings.FILE_STATUS_VALID_FAIL\n };\n const typeOfRejectData = Object.prototype.toString.call(rejectVal).slice(8, -1);\n if (typeOfRejectData === 'Object') {\n newResult = Object.assign(Object.assign({}, newResult), rejectVal);\n }\n this.handleBeforeUploadResultInObject(newResult, file);\n });\n break;\n }\n // sync validate - object\n case typeof buResult === 'object':\n // inject to fileList\n this.handleBeforeUploadResultInObject(buResult, file);\n break;\n default:\n break;\n }\n }\n }\n // handle beforeUpload result when it's an object\n handleBeforeUploadResultInObject(buResult, file) {\n const {\n shouldUpload,\n status,\n autoRemove,\n validateMessage,\n fileInstance\n } = buResult;\n let newFileList = this.getState('fileList').slice();\n if (autoRemove) {\n newFileList = newFileList.filter(item => item.uid !== file.uid);\n } else {\n const index = this._getFileIndex(file, newFileList);\n if (index < 0) {\n return;\n }\n status ? newFileList[index].status = status : null;\n validateMessage ? newFileList[index].validateMessage = validateMessage : null;\n if (fileInstance) {\n fileInstance.uid = file.uid; // reuse recent file uid\n newFileList[index].fileInstance = fileInstance;\n newFileList[index].size = getFileSize(fileInstance.size);\n newFileList[index].name = fileInstance.name;\n newFileList[index].url = this._createURL(fileInstance);\n }\n newFileList[index].shouldUpload = shouldUpload;\n }\n this._adapter.updateFileList(newFileList);\n this._adapter.notifyChange({\n fileList: newFileList,\n currentFile: file\n });\n if (shouldUpload) {\n this.post(file);\n }\n }\n post(file) {\n const {\n fileInstance\n } = file;\n const option = this.getProps();\n if (typeof XMLHttpRequest === 'undefined') {\n return;\n }\n const xhr = new XMLHttpRequest();\n const formData = new FormData();\n const {\n action\n } = option;\n // add data\n let {\n data\n } = option;\n if (data) {\n if (typeof data === 'function') {\n data = data(fileInstance);\n }\n Object.keys(data).forEach(key => {\n formData.append(key, data[key]);\n });\n }\n // add file\n const fileName = option.name || option.fileName || fileInstance.name;\n if (option.customRequest) {\n return option.customRequest({\n fileName,\n data,\n file,\n fileInstance,\n onProgress: e => this.handleProgress({\n e,\n fileInstance\n }),\n onError: (userXhr, e) => this.handleError({\n e,\n xhr: userXhr,\n fileInstance\n }),\n onSuccess: (response, e) => this.handleSuccess({\n response,\n fileInstance,\n e,\n isCustomRequest: true\n }),\n withCredentials: option.withCredentials,\n action: option.action\n });\n }\n formData.append(fileName, fileInstance);\n xhr.open('post', action, true);\n if (option.withCredentials && 'withCredentials' in xhr) {\n xhr.withCredentials = true;\n }\n if (xhr.upload) {\n xhr.upload.onprogress = e => {\n if (!this.destroyState) {\n this.handleProgress({\n e,\n fileInstance\n });\n } else {\n xhr.abort();\n }\n };\n }\n // Callback function after upload is completed\n xhr.onload = e => {\n if (!this.destroyState) {\n this.handleOnLoad({\n e,\n xhr,\n fileInstance\n });\n }\n };\n xhr.onerror = e => {\n if (!this.destroyState) {\n this.handleError({\n e,\n xhr,\n fileInstance\n });\n }\n };\n // add headers\n let headers = option.headers || {};\n if (typeof headers === 'function') {\n headers = headers(fileInstance);\n }\n for (const item in headers) {\n if (Object.prototype.hasOwnProperty.call(headers, item) && headers[item] !== null) {\n xhr.setRequestHeader(item, headers[item]);\n }\n }\n xhr.send(formData);\n }\n handleProgress(_ref2) {\n let {\n e,\n fileInstance\n } = _ref2;\n const {\n fileList\n } = this.getStates();\n const newFileList = fileList.slice();\n let percent = 0;\n if (e.total > 0) {\n percent = Number((e.loaded / e.total * 100 * numbers.PROGRESS_COEFFICIENT).toFixed(0)) || 0;\n }\n const index = this._getFileIndex(fileInstance, newFileList);\n if (index < 0) {\n return;\n }\n newFileList[index].percent = percent;\n newFileList[index].status = FILE_STATUS_UPLOADING;\n this._adapter.notifyProgress(percent, fileInstance, newFileList);\n this._adapter.updateFileList(newFileList);\n this._adapter.notifyChange({\n fileList: newFileList,\n currentFile: newFileList[index]\n });\n }\n handleOnLoad(_ref3) {\n let {\n e,\n xhr,\n fileInstance\n } = _ref3;\n const {\n fileList\n } = this.getStates();\n const index = this._getFileIndex(fileInstance, fileList);\n if (index < 0) {\n return;\n }\n if (xhr.status < 200 || xhr.status >= 300) {\n this.handleError({\n e,\n xhr,\n fileInstance\n });\n } else {\n this.handleSuccess({\n e,\n xhr,\n fileInstance,\n index\n });\n }\n }\n handleSuccess(_ref4) {\n let {\n e,\n fileInstance,\n isCustomRequest = false,\n xhr,\n response\n } = _ref4;\n const {\n fileList\n } = this.getStates();\n let body = null;\n const index = this._getFileIndex(fileInstance, fileList);\n if (index < 0) {\n return;\n }\n if (isCustomRequest) {\n // use when pass customRequest\n body = response;\n } else {\n body = this.getBody(xhr);\n }\n const newFileList = fileList.slice();\n const {\n afterUpload\n } = this.getProps();\n newFileList[index].status = FILE_STATUS_SUCCESS;\n newFileList[index].percent = 100;\n this._adapter.notifyProgress(100, fileInstance, newFileList);\n newFileList[index].response = body;\n e ? newFileList[index].event = e : null;\n if (afterUpload && typeof afterUpload === 'function') {\n const {\n autoRemove,\n status,\n validateMessage,\n name,\n url\n } = this._adapter.notifyAfterUpload({\n response: body,\n file: newFileList[index],\n fileList: newFileList\n }) || {};\n status ? newFileList[index].status = status : null;\n validateMessage ? newFileList[index].validateMessage = validateMessage : null;\n name ? newFileList[index].name = name : null;\n url ? newFileList[index].url = url : null;\n autoRemove ? newFileList.splice(index, 1) : null;\n }\n this._adapter.notifySuccess(body, fileInstance, newFileList);\n this._adapter.notifyChange({\n fileList: newFileList,\n currentFile: newFileList[index]\n });\n this._adapter.updateFileList(newFileList);\n }\n _getFileIndex(file, fileList) {\n return fileList.findIndex(item => item.uid === file.uid);\n }\n handleRemove(file) {\n const {\n disabled\n } = this.getProps();\n if (disabled) {\n return;\n }\n const {\n fileList\n } = this.getStates();\n Promise.resolve(this._adapter.notifyBeforeRemove(file, fileList)).then(res => {\n // prevent remove while user return false\n if (res === false) {\n return;\n }\n const newFileList = fileList.slice();\n const index = this._getFileIndex(file, fileList);\n if (index < 0) {\n return;\n }\n newFileList.splice(index, 1);\n this._adapter.notifyRemove(file.fileInstance, newFileList, file);\n this._adapter.updateFileList(newFileList);\n this._adapter.notifyChange({\n fileList: newFileList,\n currentFile: file\n });\n });\n }\n handleError(_ref5) {\n let {\n e,\n xhr,\n fileInstance\n } = _ref5;\n const {\n fileList\n } = this.getStates();\n const index = this._getFileIndex(fileInstance, fileList);\n if (index < 0) {\n return;\n }\n const {\n action\n } = this.getProps();\n const newFileList = fileList.slice();\n const error = this.getError({\n action,\n xhr,\n fileName: fileInstance.name\n });\n newFileList[index].status = FILE_STATUS_UPLOAD_FAIL;\n newFileList[index].response = error;\n newFileList[index].event = e;\n this._adapter.notifyError(error, fileInstance, newFileList, xhr);\n this._adapter.updateFileList(newFileList);\n this._adapter.notifyChange({\n currentFile: newFileList[index],\n fileList: newFileList\n });\n }\n handleClear() {\n const {\n disabled\n } = this.getProps();\n const {\n fileList\n } = this.getStates();\n if (disabled) {\n return;\n }\n Promise.resolve(this._adapter.notifyBeforeClear(fileList)).then(res => {\n if (res === false) {\n return;\n }\n this._adapter.updateFileList([]);\n this._adapter.notifyClear();\n this._adapter.notifyChange({\n fileList: []\n });\n }).catch(error => {\n // if user pass reject promise, no need to do anything\n });\n }\n _createURL(fileInstance) {\n // https://stackoverflow.com/questions/31742072/filereader-vs-window-url-createobjecturl\n const url = URL.createObjectURL(fileInstance);\n const {\n localUrls\n } = this.getStates();\n const newUrls = localUrls.slice();\n newUrls.push(url);\n this._adapter.updateLocalUrls(newUrls);\n return url;\n }\n // 释放预览文件所占用的内存\n // Release memory used by preview files\n releaseMemory() {\n const {\n localUrls\n } = this.getStates();\n localUrls.forEach(url => {\n this._releaseBlob(url);\n });\n }\n _releaseBlob(url) {\n try {\n URL.revokeObjectURL(url);\n } catch (error) {\n console.log(error);\n }\n }\n isImage(file) {\n return /(webp|svg|png|gif|jpg|jpeg|bmp|dpg)$/i.test(file.type);\n }\n /* istanbul ignore next */\n isMultiple() {\n return Boolean(this.getProp('multiple'));\n }\n handleDragEnter(e) {\n e.preventDefault();\n e.stopPropagation();\n this._dragEnterTarget = e.currentTarget;\n const {\n disabled\n } = this.getProps();\n if (!disabled) {\n this._adapter.updateDragAreaStatus(DRAG_AREA_LEGAL);\n }\n }\n handleDirectoryDrop(e) {\n return __awaiter(this, void 0, void 0, function* () {\n const fileList = this.getState('fileList').slice();\n const items = [].slice.call(e.dataTransfer.items);\n const files = yield mapFileTree(items);\n this.handleChange(files);\n this._adapter.updateDragAreaStatus(DRAG_AREA_DEFAULT);\n this._adapter.notifyDrop(e, files, fileList);\n });\n }\n handleDrop(e) {\n // Block file opening in browser\n e.preventDefault();\n e.stopPropagation();\n const {\n disabled,\n directory\n } = this.getProps();\n const fileList = this.getState('fileList').slice();\n if (!disabled) {\n if (directory) {\n this.handleDirectoryDrop(e);\n return;\n }\n const files = Array.from(e.dataTransfer.files);\n this.handleChange(files);\n this._adapter.updateDragAreaStatus(DRAG_AREA_DEFAULT);\n this._adapter.notifyDrop(e, files, fileList);\n }\n }\n handleDragOver(e) {\n e.preventDefault();\n e.stopPropagation();\n }\n handleDragLeave(e) {\n e.preventDefault();\n e.stopPropagation();\n // 防止拖拽进入子元素时触发的dragLeave也被处理\n // Prevent dragLeave triggered when dragging into a child element is also handled\n // https://stackoverflow.com/questions/7110353/html5-dragleave-fired-when-hovering-a-child-element\n if (this._dragEnterTarget === e.target) {\n this._adapter.updateDragAreaStatus(DRAG_AREA_DEFAULT);\n }\n }\n // 拖拽上传时,需要对文件的格式进行校验\n // When dragging and uploading, you need to verify the file format\n checkFileFormat(accept, file) {\n const acceptTypes = accept.split(',').map(type => type.trim()).filter(type => type);\n const mimeType = file.type || '';\n // Get the large class to which MIMEtype belongs, eg: image/jpeg = > image, application/= > application\n const baseMimeType = mimeType.replace(/\\/.*$/, '');\n return acceptTypes.some(type => {\n // When accepted as a suffix filename such as [.jpeg]\n if (type.charAt(0) === '.') {\n const fileName = file.name || '';\n const acceptExtension = type.split('.').pop().toLowerCase();\n return endsWith(fileName.toLowerCase(), acceptExtension);\n }\n // When accepted as a general class such as [image/*] or [video/*]\n if (/\\/\\*$/.test(type)) {\n const acceptBaseMimeType = type.replace(/\\/.*$/, '');\n return baseMimeType === acceptBaseMimeType;\n }\n // When accepted as a full MIME types string\n if (/^[^\\/]+\\/[^\\/]+$/.test(type)) {\n return mimeType === type;\n }\n return false;\n });\n }\n retry(fileItem) {\n const {\n onRetry\n } = this.getProps();\n if (onRetry && typeof onRetry === 'function') {\n onRetry(fileItem);\n }\n this.post(fileItem);\n }\n handlePreviewClick(fileItem) {\n this._adapter.notifyPreviewClick(fileItem);\n }\n readFileFromClipboard(clipboardItems) {\n for (const clipboardItem of clipboardItems) {\n for (const type of clipboardItem.types) {\n // types maybe: text/plain, image/png, text/html\n if (type.startsWith('image')) {\n clipboardItem.getType(type).then(blob => {\n return blob.arrayBuffer();\n }).then(buffer => {\n const format = type.split('/')[1];\n const file = new File([buffer], `upload.${format}`, {\n type\n });\n this.handleChange([file]);\n });\n }\n }\n }\n }\n handlePasting(e) {\n const isMac = this._adapter.isMac();\n const isCombineKeydown = isMac ? e.metaKey : e.ctrlKey;\n const {\n addOnPasting\n } = this.getProps();\n if (addOnPasting) {\n if (isCombineKeydown && e.code === 'KeyV') {\n // https://github.com/microsoft/TypeScript/issues/33923\n const permissionName = 'clipboard-read';\n // The main thread should not be blocked by clipboard, so callback writing is required here. No await here\n navigator.permissions.query({\n name: permissionName\n }).then(result => {\n if (result.state === 'granted' || result.state === 'prompt') {\n // user has authorized or will authorize\n navigator.clipboard.read().then(clipboardItems => {\n // Process the data read from the pasteboard\n // Check the returned data type to determine if it is image data, and process accordingly\n this.readFileFromClipboard(clipboardItems);\n });\n } else {\n this._adapter.notifyPastingError(result);\n }\n }).catch(error => {\n this._adapter.notifyPastingError(error);\n });\n }\n }\n }\n bindPastingHandler() {\n this._adapter.registerPastingHandler(event => this.handlePasting(event));\n }\n unbindPastingHandler() {\n this._adapter.unRegisterPastingHandler();\n }\n}\nexport default UploadFoundation;","import BaseFoundation from '../base/foundation';\nclass FileCardFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n }\n handleImageError(error) {\n this._adapter.updateFallbackPreview(true);\n }\n}\nexport default FileCardFoundation;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M4.5 12a7.5 7.5 0 0 1 13.8-4.07l-2-.4a1.5 1.5 0 0 0-.6 2.94l5 1c.76.15 1.51-.3 1.74-1.04l1.5-5a1.5 1.5 0 1 0-2.88-.86l-.43 1.45A10.49 10.49 0 0 0 1.5 12a10.5 10.5 0 0 0 20.4 3.5 1.5 1.5 0 1 0-2.83-1A7.5 7.5 0 0 1 4.5 12Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'refresh');\nexport default IconComponent;","import React from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/upload/constants';\nimport FileCardFoundation from '@douyinfe/semi-foundation/lib/es/upload/fileCardFoundation';\nimport { getFileSize } from '@douyinfe/semi-foundation/lib/es/upload/utils';\nimport { IconAlertCircle, IconClose, IconClear, IconFile, IconRefresh } from '@douyinfe/semi-icons';\nimport LocaleConsumer from '../locale/localeConsumer';\nimport BaseComponent from '../_base/baseComponent';\nimport Button from '../button/index';\nimport Progress from '../progress/index';\nimport Tooltip from '../tooltip/index';\nimport Spin from '../spin/index';\nimport { isElement } from '../_base/reactUtils';\nconst prefixCls = cssClasses.PREFIX;\nconst ErrorSvg = function () {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n focusable: false,\n \"aria-hidden\": true,\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), /*#__PURE__*/React.createElement(\"circle\", {\n cx: \"7.99992\",\n cy: \"7.99992\",\n r: \"6.66667\",\n fill: \"white\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M15.3332 8.00008C15.3332 12.0502 12.0499 15.3334 7.99984 15.3334C3.94975 15.3334 0.666504 12.0502 0.666504 8.00008C0.666504 3.94999 3.94975 0.666748 7.99984 0.666748C12.0499 0.666748 15.3332 3.94999 15.3332 8.00008ZM8.99984 11.6667C8.99984 11.1145 8.55212 10.6667 7.99984 10.6667C7.44755 10.6667 6.99984 11.1145 6.99984 11.6667C6.99984 12.219 7.44755 12.6667 7.99984 12.6667C8.55212 12.6667 8.99984 12.219 8.99984 11.6667ZM7.99984 3.33341C7.27573 3.33341 6.7003 3.94171 6.74046 4.66469L6.94437 8.33495C6.97549 8.89513 7.4388 9.33341 7.99984 9.33341C8.56087 9.33341 9.02419 8.89513 9.05531 8.33495L9.25921 4.66469C9.29938 3.94171 8.72394 3.33341 7.99984 3.33341Z\",\n fill: \"#F93920\"\n }));\n};\nconst ReplaceSvg = function () {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n focusable: false,\n \"aria-hidden\": true,\n width: \"28\",\n height: \"28\",\n viewBox: \"0 0 28 28\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), /*#__PURE__*/React.createElement(\"circle\", {\n cx: \"14\",\n cy: \"14\",\n r: \"14\",\n fill: \"#16161A\",\n fillOpacity: \"0.6\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9 10.25V18.25L10.25 13.25H17.875V11.75C17.875 11.4739 17.6511 11.25 17.375 11.25H14L12.75 9.75H9.5C9.22386 9.75 9 9.97386 9 10.25Z\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18 18.25L19 13.25H10.2031L9 18.25H18Z\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }));\n};\nconst DirectorySvg = function () {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n focusable: false,\n \"aria-hidden\": true,\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6 17V7.58824C6 7.26336 6.26863 7 6.6 7H10.5L12 8.76471H16.05C16.3814 8.76471 16.65 9.02806 16.65 9.35294V11.1176H7.5L6 17ZM6 17L7.44375 11.1176H18L16.8 17L6 17Z\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }));\n};\nclass FileCard extends BaseComponent {\n constructor(props) {\n super(props);\n this.state = {\n fallbackPreview: false\n };\n this.foundation = new FileCardFoundation(this.adapter);\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n updateFallbackPreview: fallbackPreview => this.setState({\n fallbackPreview\n })\n });\n }\n transSize(size) {\n if (typeof size === 'number') {\n return getFileSize(size);\n }\n return size;\n }\n renderValidateMessage() {\n const {\n status,\n validateMessage\n } = this.props;\n let content = null;\n switch (true) {\n case typeof validateMessage === 'string' && status === strings.FILE_STATUS_VALIDATING:\n content = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Spin, {\n size: \"small\",\n wrapperClassName: `${prefixCls}-file-card-icon-loading`\n }), validateMessage);\n break;\n case typeof validateMessage === 'string':\n content = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(IconAlertCircle, {\n className: `${prefixCls}-file-card-icon-error`\n }), validateMessage);\n break;\n case isElement(validateMessage):\n content = validateMessage;\n break;\n default:\n break;\n }\n return content;\n }\n renderPicValidateMsg() {\n const {\n status,\n validateMessage\n } = this.props;\n let icon = null;\n switch (true) {\n case validateMessage && status === strings.FILE_STATUS_VALIDATING:\n icon = /*#__PURE__*/React.createElement(Spin, {\n size: \"small\",\n wrapperClassName: `${prefixCls}-picture-file-card-icon-loading`\n });\n break;\n case validateMessage && (status === strings.FILE_STATUS_VALID_FAIL || status === strings.FILE_STATUS_UPLOAD_FAIL):\n icon = /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-picture-file-card-icon-error`\n }, /*#__PURE__*/React.createElement(ErrorSvg, null));\n break;\n default:\n break;\n }\n return icon ? /*#__PURE__*/React.createElement(Tooltip, {\n content: validateMessage,\n trigger: \"hover\",\n position: \"bottom\"\n }, icon) : null;\n }\n renderPic(locale) {\n const {\n fallbackPreview\n } = this.state;\n const {\n url,\n percent,\n status,\n disabled,\n style,\n onPreviewClick,\n showPicInfo,\n renderPicInfo,\n renderPicPreviewIcon,\n renderThumbnail,\n name,\n index,\n picHeight,\n picWidth\n } = this.props;\n const showProgress = status === strings.FILE_STATUS_UPLOADING && percent !== 100;\n const showRetry = status === strings.FILE_STATUS_UPLOAD_FAIL && this.props.showRetry;\n const showReplace = status === strings.FILE_STATUS_SUCCESS && this.props.showReplace;\n const showPreview = status === strings.FILE_STATUS_SUCCESS && !this.props.showReplace;\n const customThumbnail = typeof renderThumbnail === 'function';\n const filePicCardCls = cls({\n [`${prefixCls}-picture-file-card`]: true,\n [`${prefixCls}-picture-file-card-preview-fallback`]: fallbackPreview,\n [`${prefixCls}-picture-file-card-disabled`]: disabled,\n [`${prefixCls}-picture-file-card-show-pointer`]: typeof onPreviewClick !== 'undefined',\n [`${prefixCls}-picture-file-card-error`]: status === strings.FILE_STATUS_UPLOAD_FAIL,\n [`${prefixCls}-picture-file-card-uploading`]: showProgress,\n [`${prefixCls}-picture-file-card-custom-thumbnail`]: customThumbnail && picHeight && picWidth\n });\n const retry = /*#__PURE__*/React.createElement(\"div\", {\n role: \"button\",\n tabIndex: 0,\n className: `${prefixCls}-picture-file-card-retry`,\n onClick: e => this.onRetry(e)\n }, /*#__PURE__*/React.createElement(IconRefresh, {\n className: `${prefixCls}-picture-file-card-icon-retry`\n }));\n const replace = /*#__PURE__*/React.createElement(Tooltip, {\n trigger: \"hover\",\n position: \"top\",\n content: locale.replace,\n showArrow: false,\n spacing: 4\n }, /*#__PURE__*/React.createElement(\"div\", {\n role: \"button\",\n tabIndex: 0,\n className: `${prefixCls}-picture-file-card-replace`,\n onClick: e => this.onReplace(e)\n }, /*#__PURE__*/React.createElement(ReplaceSvg, {\n className: `${prefixCls}-picture-file-card-icon-replace`\n })));\n const preview = /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-picture-file-card-preview`\n }, typeof renderPicPreviewIcon === 'function' ? renderPicPreviewIcon(this.props) : null);\n const close = /*#__PURE__*/React.createElement(\"div\", {\n role: \"button\",\n tabIndex: 0,\n className: `${prefixCls}-picture-file-card-close`,\n onClick: e => this.onRemove(e)\n }, /*#__PURE__*/React.createElement(IconClear, {\n className: `${prefixCls}-picture-file-card-icon-close`\n }));\n const picInfo = typeof renderPicInfo === 'function' ? renderPicInfo(this.props) : (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-picture-file-card-pic-info`\n }, index + 1));\n let imgStyle = {};\n let itemStyle = style ? Object.assign({}, style) : {};\n if (picHeight) {\n itemStyle.height = picHeight;\n imgStyle.height = picHeight;\n }\n if (picWidth) {\n itemStyle.width = picWidth;\n imgStyle.width = picWidth;\n }\n const defaultThumbTail = !fallbackPreview ? /*#__PURE__*/React.createElement(\"img\", {\n src: url,\n alt: name,\n onError: error => this.foundation.handleImageError(error),\n style: imgStyle\n }) : /*#__PURE__*/React.createElement(IconFile, {\n size: \"large\"\n });\n const thumbnail = customThumbnail ? renderThumbnail(this.props) : defaultThumbTail;\n return /*#__PURE__*/React.createElement(\"div\", {\n role: \"listitem\",\n className: filePicCardCls,\n style: itemStyle,\n onClick: onPreviewClick\n }, thumbnail, showProgress ? /*#__PURE__*/React.createElement(Progress, {\n percent: percent,\n type: \"circle\",\n size: \"small\",\n orbitStroke: '#FFF',\n \"aria-label\": \"uploading file progress\"\n }) : null, showRetry ? retry : null, showReplace && replace, showPreview && preview, showPicInfo && picInfo, !disabled && close, this.renderPicValidateMsg());\n }\n renderFile(locale) {\n const {\n name,\n size,\n percent,\n url,\n showRetry: propsShowRetry,\n showReplace: propsShowReplace,\n preview,\n previewFile,\n status,\n style,\n onPreviewClick,\n renderFileOperation\n } = this.props;\n const {\n fallbackPreview\n } = this.state;\n const fileCardCls = cls({\n [`${prefixCls}-file-card`]: true,\n [`${prefixCls}-file-card-fail`]: status === strings.FILE_STATUS_VALID_FAIL || status === strings.FILE_STATUS_UPLOAD_FAIL,\n [`${prefixCls}-file-card-show-pointer`]: typeof onPreviewClick !== 'undefined'\n });\n const previewCls = cls({\n [`${prefixCls}-file-card-preview`]: true,\n [`${prefixCls}-file-card-preview-placeholder`]: !preview || previewFile || fallbackPreview\n });\n const infoCls = `${prefixCls}-file-card-info`;\n const closeCls = `${prefixCls}-file-card-close`;\n const replaceCls = `${prefixCls}-file-card-replace`;\n const showProgress = !(percent === 100 || typeof percent === 'undefined') && status === strings.FILE_STATUS_UPLOADING;\n // only show retry when upload fail & showRetry is true, no need to show during validate fail\n const showRetry = status === strings.FILE_STATUS_UPLOAD_FAIL && propsShowRetry;\n const showReplace = status === strings.FILE_STATUS_SUCCESS && propsShowReplace;\n const fileSize = this.transSize(size);\n let previewContent = preview && !fallbackPreview ? (/*#__PURE__*/React.createElement(\"img\", {\n src: url,\n alt: name,\n onError: error => this.foundation.handleImageError(error)\n })) : (/*#__PURE__*/React.createElement(IconFile, {\n size: \"large\"\n }));\n if (previewFile) {\n previewContent = previewFile(this.props);\n }\n const operation = typeof renderFileOperation === 'function' ? renderFileOperation(this.props) : /*#__PURE__*/React.createElement(Button, {\n onClick: e => this.onRemove(e),\n type: \"tertiary\",\n icon: /*#__PURE__*/React.createElement(IconClose, null),\n theme: \"borderless\",\n size: \"small\",\n className: closeCls\n });\n return /*#__PURE__*/React.createElement(\"div\", {\n role: \"listitem\",\n className: fileCardCls,\n style: style,\n onClick: onPreviewClick\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: previewCls\n }, previewContent), /*#__PURE__*/React.createElement(\"div\", {\n className: `${infoCls}-main`\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: `${infoCls}-main-text`\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: `${infoCls}-name`\n }, name), /*#__PURE__*/React.createElement(\"span\", null, /*#__PURE__*/React.createElement(\"span\", {\n className: `${infoCls}-size`\n }, fileSize), showReplace && (/*#__PURE__*/React.createElement(Tooltip, {\n trigger: \"hover\",\n position: \"top\",\n showArrow: false,\n content: locale.replace\n }, /*#__PURE__*/React.createElement(Button, {\n onClick: e => this.onReplace(e),\n type: \"tertiary\",\n theme: \"borderless\",\n size: \"small\",\n icon: /*#__PURE__*/React.createElement(DirectorySvg, null),\n className: replaceCls\n }))))), showProgress ? (/*#__PURE__*/React.createElement(Progress, {\n percent: percent,\n style: {\n width: '100%'\n },\n \"aria-label\": \"uploading file progress\"\n })) : null, /*#__PURE__*/React.createElement(\"div\", {\n className: `${infoCls}-main-control`\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: `${infoCls}-validate-message`\n }, this.renderValidateMessage()), showRetry ? /*#__PURE__*/React.createElement(\"span\", {\n role: \"button\",\n tabIndex: 0,\n className: `${infoCls}-retry`,\n onClick: e => this.onRetry(e)\n }, locale.retry) : null)), operation);\n }\n onRemove(e) {\n e.stopPropagation();\n this.props.onRemove();\n }\n onReplace(e) {\n e.stopPropagation();\n this.props.onReplace();\n }\n onRetry(e) {\n e.stopPropagation();\n this.props.onRetry();\n }\n render() {\n const {\n listType\n } = this.props;\n if (listType === strings.FILE_LIST_PIC) {\n return /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Upload\"\n }, locale => this.renderPic(locale));\n }\n if (listType === strings.FILE_LIST_DEFAULT) {\n return /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Upload\"\n }, locale => this.renderFile(locale));\n }\n return null;\n }\n}\nFileCard.propTypes = {\n className: PropTypes.string,\n disabled: PropTypes.bool,\n listType: PropTypes.string,\n name: PropTypes.string,\n onPreviewClick: PropTypes.func,\n onRemove: PropTypes.func,\n onReplace: PropTypes.func,\n onRetry: PropTypes.func,\n percent: PropTypes.number,\n preview: PropTypes.bool,\n previewFile: PropTypes.func,\n picWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n picHeight: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n showReplace: PropTypes.bool,\n showRetry: PropTypes.bool,\n size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n status: PropTypes.string,\n style: PropTypes.object,\n url: PropTypes.string,\n validateMessage: PropTypes.node,\n index: PropTypes.number\n};\nFileCard.defaultProps = {\n listType: strings.FILE_LIST_DEFAULT,\n name: '',\n onRemove: () => undefined,\n onRetry: () => undefined,\n preview: false,\n size: ''\n};\nexport default FileCard;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.84 8.06A6.5 6.5 0 1 0 5.18 11 4.5 4.5 0 0 0 5.5 20H17a6 6 0 0 0 .84-11.94Zm-5.52.2a.5.5 0 0 0-.64 0l-5.15 4.3a.25.25 0 0 0 .16.44H10v4.5c0 .28.22.5.5.5h3a.5.5 0 0 0 .5-.5V13h3.31c.23 0 .34-.3.16-.44l-5.15-4.3Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'upload');\nexport default IconComponent;","import _pick from \"lodash/pick\";\nimport _noop from \"lodash/noop\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport UploadFoundation from '@douyinfe/semi-foundation/lib/es/upload/foundation';\nimport { strings, cssClasses } from '@douyinfe/semi-foundation/lib/es/upload/constants';\nimport FileCard from './fileCard';\nimport BaseComponent from '../_base/baseComponent';\nimport LocaleConsumer from '../locale/localeConsumer';\nimport { IconUpload } from '@douyinfe/semi-icons';\nimport '@douyinfe/semi-foundation/lib/es/upload/upload.css';\nconst prefixCls = cssClasses.PREFIX;\nclass Upload extends BaseComponent {\n constructor(props) {\n super(props);\n this.inputRef = null;\n this.replaceInputRef = null;\n this.onClick = () => {\n const {\n inputRef,\n props\n } = this;\n const {\n onOpenFileDialog\n } = props;\n const isDisabled = Boolean(this.props.disabled);\n if (isDisabled || !inputRef || !inputRef.current) {\n return;\n }\n inputRef.current.click();\n if (onOpenFileDialog && typeof onOpenFileDialog) {\n onOpenFileDialog();\n }\n };\n this.onChange = e => {\n const {\n files\n } = e.target;\n this.foundation.handleChange(files);\n };\n this.replace = index => {\n this.setState({\n replaceIdx: index\n }, () => {\n this.replaceInputRef.current.click();\n });\n };\n this.onReplaceChange = e => {\n const {\n files\n } = e.target;\n this.foundation.handleReplaceChange(files);\n };\n this.clear = () => {\n this.foundation.handleClear();\n };\n this.remove = fileItem => {\n this.foundation.handleRemove(fileItem);\n };\n /**\n * ref method\n * insert files at index\n * @param files Array\n * @param index number\n * @returns\n */\n this.insert = (files, index) => {\n return this.foundation.insertFileToList(files, index);\n };\n /**\n * ref method\n * manual upload by user\n */\n this.upload = () => {\n this.foundation.manualUpload();\n };\n /**\n * ref method\n * manual open file select dialog\n */\n this.openFileDialog = () => {\n this.onClick();\n };\n this.renderFile = (file, index, locale) => {\n const {\n name,\n status,\n validateMessage,\n _sizeInvalid,\n uid\n } = file;\n const {\n previewFile,\n listType,\n itemStyle,\n showPicInfo,\n renderPicInfo,\n renderPicPreviewIcon,\n renderFileOperation,\n renderFileItem,\n renderThumbnail,\n disabled,\n onPreviewClick,\n picWidth,\n picHeight\n } = this.props;\n const onRemove = () => this.remove(file);\n const onRetry = () => {\n this.foundation.retry(file);\n };\n const onReplace = () => {\n this.replace(index);\n };\n const fileCardProps = Object.assign(Object.assign(Object.assign({}, _pick(this.props, ['showRetry', 'showReplace', ''])), file), {\n previewFile,\n listType,\n onRemove,\n onRetry,\n index,\n key: uid || `${name}${index}`,\n style: itemStyle,\n disabled,\n showPicInfo,\n renderPicInfo,\n renderPicPreviewIcon,\n renderFileOperation,\n renderThumbnail,\n onReplace,\n onPreviewClick: typeof onPreviewClick !== 'undefined' ? () => this.foundation.handlePreviewClick(file) : undefined,\n picWidth,\n picHeight\n });\n if (status === strings.FILE_STATUS_UPLOAD_FAIL && !validateMessage) {\n fileCardProps.validateMessage = locale.fail;\n }\n if (_sizeInvalid && !validateMessage) {\n fileCardProps.validateMessage = locale.illegalSize;\n }\n if (typeof renderFileItem === 'undefined') {\n return /*#__PURE__*/React.createElement(FileCard, Object.assign({}, fileCardProps));\n } else {\n return renderFileItem(fileCardProps);\n }\n };\n this.renderFileList = () => {\n const {\n listType\n } = this.props;\n if (listType === strings.FILE_LIST_PIC) {\n return this.renderFileListPic();\n }\n if (listType === strings.FILE_LIST_DEFAULT) {\n return this.renderFileListDefault();\n }\n return null;\n };\n this.renderFileListPic = () => {\n const {\n showUploadList,\n limit,\n disabled,\n children,\n draggable,\n hotSpotLocation,\n picHeight,\n picWidth\n } = this.props;\n const {\n fileList: stateFileList,\n dragAreaStatus\n } = this.state;\n const fileList = this.props.fileList || stateFileList;\n const showAddTriggerInList = limit ? limit > fileList.length : true;\n const dragAreaBaseCls = `${prefixCls}-drag-area`;\n const uploadAddCls = cls(`${prefixCls}-add`, {\n [`${prefixCls}-picture-add`]: true,\n [`${prefixCls}-picture-add-disabled`]: disabled\n });\n const fileListCls = cls(`${prefixCls}-file-list`, {\n [`${prefixCls}-picture-file-list`]: true\n });\n const dragAreaCls = cls({\n [`${dragAreaBaseCls}-legal`]: dragAreaStatus === strings.DRAG_AREA_LEGAL,\n [`${dragAreaBaseCls}-illegal`]: dragAreaStatus === strings.DRAG_AREA_ILLEGAL\n });\n const mainCls = `${prefixCls}-file-list-main`;\n const addContentProps = {\n role: 'button',\n className: uploadAddCls,\n onClick: this.onClick,\n style: {\n height: picHeight,\n width: picWidth\n }\n };\n const containerProps = {\n className: fileListCls\n };\n const draggableProps = {\n onDrop: this.onDrop,\n onDragOver: this.onDragOver,\n onDragLeave: this.onDragLeave,\n onDragEnter: this.onDragEnter\n };\n if (draggable) {\n Object.assign(addContentProps, draggableProps, {\n className: cls(uploadAddCls, dragAreaCls)\n });\n }\n const addContent = /*#__PURE__*/React.createElement(\"div\", Object.assign({}, addContentProps, {\n \"x-semi-prop\": \"children\"\n }), children);\n if (!showUploadList || !fileList.length) {\n if (showAddTriggerInList) {\n return addContent;\n }\n return null;\n }\n return /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Upload\"\n }, locale => (/*#__PURE__*/React.createElement(\"div\", Object.assign({}, containerProps), /*#__PURE__*/React.createElement(\"div\", {\n className: mainCls,\n role: \"list\",\n \"aria-label\": \"picture list\"\n }, showAddTriggerInList && hotSpotLocation === 'start' ? addContent : null, fileList.map((file, index) => this.renderFile(file, index, locale)), showAddTriggerInList && hotSpotLocation === 'end' ? addContent : null))));\n };\n this.renderFileListDefault = () => {\n const {\n showUploadList,\n limit,\n disabled\n } = this.props;\n const {\n fileList: stateFileList\n } = this.state;\n const fileList = this.props.fileList || stateFileList;\n const fileListCls = cls(`${prefixCls}-file-list`);\n const titleCls = `${prefixCls}-file-list-title`;\n const mainCls = `${prefixCls}-file-list-main`;\n const showTitle = limit !== 1 && fileList.length;\n const showClear = this.props.showClear && !disabled;\n const containerProps = {\n className: fileListCls\n };\n if (!showUploadList || !fileList.length) {\n return null;\n }\n return /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Upload\"\n }, locale => (/*#__PURE__*/React.createElement(\"div\", Object.assign({}, containerProps), showTitle ? (/*#__PURE__*/React.createElement(\"div\", {\n className: titleCls\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: `${titleCls}-choosen`\n }, locale.selectedFiles), showClear ? (/*#__PURE__*/React.createElement(\"span\", {\n role: \"button\",\n tabIndex: 0,\n onClick: this.clear,\n className: `${titleCls}-clear`\n }, locale.clear)) : null)) : null, /*#__PURE__*/React.createElement(\"div\", {\n className: mainCls,\n role: \"list\",\n \"aria-label\": \"file list\"\n }, fileList.map((file, index) => this.renderFile(file, index, locale))))));\n };\n this.onDrop = e => {\n this.foundation.handleDrop(e);\n };\n this.onDragOver = e => {\n // When a drag element moves within the target element\n this.foundation.handleDragOver(e);\n };\n this.onDragLeave = e => {\n this.foundation.handleDragLeave(e);\n };\n this.onDragEnter = e => {\n this.foundation.handleDragEnter(e);\n };\n this.renderAddContent = () => {\n const {\n draggable,\n children,\n listType,\n disabled\n } = this.props;\n const uploadAddCls = cls(`${prefixCls}-add`);\n if (listType === strings.FILE_LIST_PIC) {\n return null;\n }\n if (draggable) {\n return this.renderDragArea();\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n role: \"button\",\n tabIndex: 0,\n \"aria-disabled\": disabled,\n className: uploadAddCls,\n onClick: this.onClick\n }, children);\n };\n this.renderDragArea = () => {\n const {\n dragAreaStatus\n } = this.state;\n const {\n children,\n dragIcon,\n dragMainText,\n dragSubText,\n disabled\n } = this.props;\n const dragAreaBaseCls = `${prefixCls}-drag-area`;\n const dragAreaCls = cls(dragAreaBaseCls, {\n [`${dragAreaBaseCls}-legal`]: dragAreaStatus === strings.DRAG_AREA_LEGAL,\n [`${dragAreaBaseCls}-illegal`]: dragAreaStatus === strings.DRAG_AREA_ILLEGAL,\n [`${dragAreaBaseCls}-custom`]: children\n });\n return /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Upload\"\n }, locale => (/*#__PURE__*/React.createElement(\"div\", {\n role: \"button\",\n tabIndex: 0,\n \"aria-disabled\": disabled,\n className: dragAreaCls,\n onDrop: this.onDrop,\n onDragOver: this.onDragOver,\n onDragLeave: this.onDragLeave,\n onDragEnter: this.onDragEnter,\n onClick: this.onClick\n }, children ? children : (/*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n className: `${dragAreaBaseCls}-icon`,\n \"x-semi-prop\": \"dragIcon\"\n }, dragIcon || /*#__PURE__*/React.createElement(IconUpload, {\n size: \"extra-large\"\n })), /*#__PURE__*/React.createElement(\"div\", {\n className: `${dragAreaBaseCls}-text`\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: `${dragAreaBaseCls}-main-text`,\n \"x-semi-prop\": \"dragMainText\"\n }, dragMainText || locale.mainText), /*#__PURE__*/React.createElement(\"div\", {\n className: `${dragAreaBaseCls}-sub-text`,\n \"x-semi-prop\": \"dragSubText\"\n }, dragSubText), /*#__PURE__*/React.createElement(\"div\", {\n className: `${dragAreaBaseCls}-tips`\n }, dragAreaStatus === strings.DRAG_AREA_LEGAL && (/*#__PURE__*/React.createElement(\"span\", {\n className: `${dragAreaBaseCls}-tips-legal`\n }, locale.legalTips)), dragAreaStatus === strings.DRAG_AREA_ILLEGAL && (/*#__PURE__*/React.createElement(\"span\", {\n className: `${dragAreaBaseCls}-tips-illegal`\n }, locale.illegalTips)))))))));\n };\n this.state = {\n fileList: props.defaultFileList || [],\n replaceIdx: -1,\n inputKey: Math.random(),\n replaceInputKey: Math.random(),\n // Status of the drag zone\n dragAreaStatus: 'default',\n localUrls: []\n };\n this.foundation = new UploadFoundation(this.adapter);\n this.inputRef = /*#__PURE__*/React.createRef();\n this.replaceInputRef = /*#__PURE__*/React.createRef();\n }\n /**\n * Notes:\n * The input parameter and return value here do not declare the type, otherwise tsc may report an error in form/fields.tsx when wrap after withField\n * `The types of the parameters \"props\" and \"nextProps\" are incompatible.\n The attribute \"action\" is missing in the type \"Readonly\", but it is required in the type \"UploadProps\".`\n * which seems to be a bug, remove props type declare here\n */\n static getDerivedStateFromProps(props) {\n const {\n fileList\n } = props;\n if ('fileList' in props) {\n return {\n fileList: fileList || []\n };\n }\n return null;\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n notifyFileSelect: files => this.props.onFileChange(files),\n notifyError: (error, fileInstance, fileList, xhr) => this.props.onError(error, fileInstance, fileList, xhr),\n notifySuccess: (responseBody, file, fileList) => this.props.onSuccess(responseBody, file, fileList),\n notifyProgress: (percent, file, fileList) => this.props.onProgress(percent, file, fileList),\n notifyRemove: (file, fileList, fileItem) => this.props.onRemove(file, fileList, fileItem),\n notifySizeError: (file, fileList) => this.props.onSizeError(file, fileList),\n notifyExceed: fileList => this.props.onExceed(fileList),\n updateFileList: (fileList, cb) => {\n if (typeof cb === 'function') {\n this.setState({\n fileList\n }, cb);\n } else {\n this.setState({\n fileList\n });\n }\n },\n notifyBeforeUpload: _ref => {\n let {\n file,\n fileList\n } = _ref;\n return this.props.beforeUpload({\n file,\n fileList\n });\n },\n notifyAfterUpload: _ref2 => {\n let {\n response,\n file,\n fileList\n } = _ref2;\n return this.props.afterUpload({\n response,\n file,\n fileList\n });\n },\n resetInput: () => {\n this.setState(prevState => ({\n inputKey: Math.random()\n }));\n },\n resetReplaceInput: () => {\n this.setState(prevState => ({\n replaceInputKey: Math.random()\n }));\n },\n isMac: () => {\n return navigator.platform.toUpperCase().indexOf('MAC') >= 0;\n },\n registerPastingHandler: cb => {\n document.body.addEventListener('keydown', cb);\n this.pastingCb = cb;\n },\n unRegisterPastingHandler: () => {\n if (this.pastingCb) {\n document.body.removeEventListener('keydown', this.pastingCb);\n }\n },\n notifyPastingError: error => this.props.onPastingError(error),\n updateDragAreaStatus: dragAreaStatus => this.setState({\n dragAreaStatus\n }),\n notifyChange: _ref3 => {\n let {\n currentFile,\n fileList\n } = _ref3;\n return this.props.onChange({\n currentFile,\n fileList\n });\n },\n updateLocalUrls: urls => this.setState({\n localUrls: urls\n }),\n notifyClear: () => this.props.onClear(),\n notifyPreviewClick: file => this.props.onPreviewClick(file),\n notifyDrop: (e, files, fileList) => this.props.onDrop(e, files, fileList),\n notifyAcceptInvalid: invalidFiles => this.props.onAcceptInvalid(invalidFiles),\n notifyBeforeRemove: (file, fileList) => this.props.beforeRemove(file, fileList),\n notifyBeforeClear: fileList => this.props.beforeClear(fileList)\n });\n }\n componentDidMount() {\n this.foundation.init();\n }\n componentWillUnmount() {\n this.foundation.destroy();\n }\n render() {\n const _a = this.props,\n {\n style,\n className,\n multiple,\n accept,\n disabled,\n children,\n capture,\n listType,\n prompt,\n promptPosition,\n draggable,\n validateMessage,\n validateStatus,\n directory\n } = _a,\n rest = __rest(_a, [\"style\", \"className\", \"multiple\", \"accept\", \"disabled\", \"children\", \"capture\", \"listType\", \"prompt\", \"promptPosition\", \"draggable\", \"validateMessage\", \"validateStatus\", \"directory\"]);\n const uploadCls = cls(prefixCls, {\n [`${prefixCls}-picture`]: listType === strings.FILE_LIST_PIC,\n [`${prefixCls}-disabled`]: disabled,\n [`${prefixCls}-default`]: validateStatus === 'default',\n [`${prefixCls}-error`]: validateStatus === 'error',\n [`${prefixCls}-warning`]: validateStatus === 'warning',\n [`${prefixCls}-success`]: validateStatus === 'success'\n }, className);\n const inputCls = cls(`${prefixCls}-hidden-input`);\n const inputReplaceCls = cls(`${prefixCls}-hidden-input-replace`);\n const promptCls = cls(`${prefixCls}-prompt`);\n const validateMsgCls = cls(`${prefixCls}-validate-message`);\n const dirProps = directory ? {\n directory: 'directory',\n webkitdirectory: 'webkitdirectory'\n } : {};\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n className: uploadCls,\n style: style,\n \"x-prompt-pos\": promptPosition\n }, this.getDataAttr(rest)), /*#__PURE__*/React.createElement(\"input\", Object.assign({\n key: this.state.inputKey,\n capture: capture,\n multiple: multiple,\n accept: accept,\n onChange: this.onChange,\n type: \"file\",\n autoComplete: \"off\",\n tabIndex: -1,\n className: inputCls,\n ref: this.inputRef\n }, dirProps)), /*#__PURE__*/React.createElement(\"input\", {\n key: this.state.replaceInputKey,\n multiple: false,\n accept: accept,\n onChange: this.onReplaceChange,\n type: \"file\",\n autoComplete: \"off\",\n tabIndex: -1,\n className: inputReplaceCls,\n ref: this.replaceInputRef\n }), this.renderAddContent(), prompt ? (/*#__PURE__*/React.createElement(\"div\", {\n className: promptCls,\n \"x-semi-prop\": \"prompt\"\n }, prompt)) : null, validateMessage ? (/*#__PURE__*/React.createElement(\"div\", {\n className: validateMsgCls,\n \"x-semi-prop\": \"validateMessage\"\n }, validateMessage)) : null, this.renderFileList());\n }\n}\nUpload.propTypes = {\n accept: PropTypes.string,\n action: PropTypes.string.isRequired,\n addOnPasting: PropTypes.bool,\n afterUpload: PropTypes.func,\n beforeClear: PropTypes.func,\n beforeRemove: PropTypes.func,\n beforeUpload: PropTypes.func,\n children: PropTypes.node,\n className: PropTypes.string,\n customRequest: PropTypes.func,\n data: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),\n defaultFileList: PropTypes.array,\n directory: PropTypes.bool,\n disabled: PropTypes.bool,\n dragIcon: PropTypes.node,\n dragMainText: PropTypes.node,\n dragSubText: PropTypes.node,\n draggable: PropTypes.bool,\n fileList: PropTypes.array,\n fileName: PropTypes.string,\n headers: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),\n hotSpotLocation: PropTypes.oneOf(['start', 'end']),\n itemStyle: PropTypes.object,\n limit: PropTypes.number,\n listType: PropTypes.oneOf(strings.LIST_TYPE),\n maxSize: PropTypes.number,\n minSize: PropTypes.number,\n multiple: PropTypes.bool,\n name: PropTypes.string,\n onAcceptInvalid: PropTypes.func,\n onChange: PropTypes.func,\n onClear: PropTypes.func,\n onDrop: PropTypes.func,\n onError: PropTypes.func,\n onExceed: PropTypes.func,\n onFileChange: PropTypes.func,\n onOpenFileDialog: PropTypes.func,\n onPreviewClick: PropTypes.func,\n onProgress: PropTypes.func,\n onRemove: PropTypes.func,\n onRetry: PropTypes.func,\n onSizeError: PropTypes.func,\n onSuccess: PropTypes.func,\n onPastingError: PropTypes.func,\n previewFile: PropTypes.func,\n prompt: PropTypes.node,\n promptPosition: PropTypes.oneOf(strings.PROMPT_POSITION),\n picWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n picHeight: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n renderFileItem: PropTypes.func,\n renderPicPreviewIcon: PropTypes.func,\n renderFileOperation: PropTypes.func,\n renderPicInfo: PropTypes.func,\n renderThumbnail: PropTypes.func,\n showClear: PropTypes.bool,\n showPicInfo: PropTypes.bool,\n showReplace: PropTypes.bool,\n showRetry: PropTypes.bool,\n showUploadList: PropTypes.bool,\n style: PropTypes.object,\n timeout: PropTypes.number,\n transformFile: PropTypes.func,\n uploadTrigger: PropTypes.oneOf(strings.UPLOAD_TRIGGER),\n validateMessage: PropTypes.node,\n validateStatus: PropTypes.oneOf(strings.VALIDATE_STATUS),\n withCredentials: PropTypes.bool\n};\nUpload.defaultProps = {\n defaultFileList: [],\n disabled: false,\n listType: 'list',\n hotSpotLocation: 'end',\n multiple: false,\n onAcceptInvalid: _noop,\n onChange: _noop,\n beforeRemove: () => true,\n beforeClear: () => true,\n onClear: _noop,\n onDrop: _noop,\n onError: _noop,\n onExceed: _noop,\n onFileChange: _noop,\n onOpenFileDialog: _noop,\n onProgress: _noop,\n onRemove: _noop,\n onRetry: _noop,\n onSizeError: _noop,\n onSuccess: _noop,\n onPastingError: _noop,\n promptPosition: 'right',\n showClear: true,\n showPicInfo: false,\n showReplace: false,\n showRetry: true,\n showUploadList: true,\n uploadTrigger: 'auto',\n withCredentials: false\n};\nUpload.FileCard = FileCard;\nexport default Upload;","import withField from './hoc/withField';\n// Basic component\nimport Input from '../input/index';\nimport TextArea from '../input/textarea';\nimport InputNumber from '../inputNumber/index';\nimport Select from '../select/index';\nimport { Checkbox } from '../checkbox/index';\nimport CheckboxGroup from '../checkbox/checkboxGroup';\nimport { Radio } from '../radio/index';\nimport RadioGroup from '../radio/radioGroup';\nimport DatePicker from '../datePicker/index';\nimport Switch from '../switch/index';\nimport Slider from '../slider/index';\nimport TimePicker from '../timePicker/index';\nimport TreeSelect from '../treeSelect/index';\nimport Cascader from '../cascader/index';\nimport Rating from '../rating/index';\nimport AutoComplete from '../autoComplete/index';\nimport Upload from '../upload/index';\nimport TagInput from '../tagInput/index';\nconst FormInput = withField(Input, {\n maintainCursor: true\n});\nconst FormInputNumber = withField(InputNumber, {\n maintainCursor: true\n});\nconst FormTextArea = withField(TextArea, {\n maintainCursor: true\n});\nconst FormSelect = withField(Select);\n// Select after withField is a new Component, without the Option attribute, it needs to be manually assigned once\nFormSelect.Option = Select.Option;\nFormSelect.OptGroup = Select.OptGroup;\nconst FormCheckboxGroup = withField(CheckboxGroup);\nconst FormCheckbox = withField(Checkbox, {\n valueKey: 'checked',\n valuePath: 'target.checked',\n shouldInject: false\n});\nconst FormRadioGroup = withField(RadioGroup, {\n valuePath: 'target.value'\n});\nconst FormRadio = withField(Radio, {\n valueKey: 'checked',\n valuePath: 'target.checked',\n shouldInject: false\n});\nconst FormDatePicker = withField(DatePicker);\nconst FormSwitch = withField(Switch, {\n valueKey: 'checked'\n});\nconst FormSlider = withField(Slider);\nconst FormTimePicker = withField(TimePicker);\nconst FormTreeSelect = withField(TreeSelect);\nconst FormCascader = withField(Cascader);\nconst FormRating = withField(Rating);\nconst FormAutoComplete = withField(AutoComplete, {\n valueKey: 'value',\n onKeyChangeFnName: 'onChange'\n});\nconst FormUpload = withField(Upload, {\n valueKey: 'fileList',\n valuePath: 'fileList',\n onKeyChangeFnName: 'onChange'\n});\nconst FormTagInput = withField(TagInput);\nexport { FormInput, FormInputNumber, FormTextArea, FormSelect, FormCheckboxGroup, FormCheckbox, FormRadioGroup, FormRadio, FormDatePicker, FormSwitch, FormSlider, FormTimePicker, FormTreeSelect, FormCascader, FormRating, FormAutoComplete, FormUpload, FormTagInput };","import _noop from \"lodash/noop\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport FormFoundation from '@douyinfe/semi-foundation/lib/es/form/foundation';\nimport { strings, cssClasses } from '@douyinfe/semi-foundation/lib/es/form/constants';\nimport { getUuidv4 } from '@douyinfe/semi-foundation/lib/es/utils/uuid';\nimport warning from '@douyinfe/semi-foundation/lib/es/utils/warning';\nimport BaseComponent from '../_base/baseComponent';\nimport { FormStateContext, FormApiContext, FormUpdaterContext } from './context';\nimport { isEmptyChildren } from '../_base/reactUtils';\nimport Row from '../grid/row';\nimport { cloneDeep } from '../_utils/index';\nimport Slot from './slot';\nimport Section from './section';\nimport Label from './label';\nimport ErrorMessage from './errorMessage';\nimport FormInputGroup from './group';\nimport '@douyinfe/semi-foundation/lib/es/form/form.css';\nimport { FormInput, FormInputNumber, FormTextArea, FormSelect, FormCheckboxGroup, FormCheckbox, FormRadioGroup, FormRadio, FormDatePicker, FormSwitch, FormSlider, FormTimePicker, FormTreeSelect, FormCascader, FormRating, FormAutoComplete, FormUpload, FormTagInput } from './field';\nconst prefix = cssClasses.PREFIX;\nclass Form extends BaseComponent {\n constructor(props) {\n super(props);\n this.state = {\n formId: ''\n };\n warning(Boolean(props.component && props.render), '[Semi Form] You should not use
and in ths same time; will be ignored');\n warning(props.component && props.children && !isEmptyChildren(props.children), '[Semi Form] You should not use and {children}
in ths same time;
{children}
will be ignored');\n warning(props.render && props.children && !isEmptyChildren(props.children), '[Semi Form] You should not use
and {children}
in ths same time;
{children}
will be ignored');\n this.submit = this.submit.bind(this);\n this.reset = this.reset.bind(this);\n this.foundation = new FormFoundation(this.adapter);\n this.formApi = this.foundation.getFormApi();\n if (this.props.getFormApi) {\n this.props.getFormApi(this.formApi);\n }\n }\n componentDidMount() {\n this.foundation.init();\n }\n componentWillUnmount() {\n this.foundation.destroy();\n }\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n cloneDeep,\n notifySubmit: (values, e) => {\n this.props.onSubmit(values, e);\n },\n notifySubmitFail: (errors, values, e) => {\n this.props.onSubmitFail(errors, values, e);\n },\n forceUpdate: callback => {\n this.forceUpdate(callback);\n },\n notifyChange: formState => {\n this.props.onChange(formState);\n },\n notifyValueChange: (values, changedValues) => {\n this.props.onValueChange(values, changedValues);\n },\n notifyErrorChange: (errors, changedError) => {\n this.props.onErrorChange(errors, changedError);\n },\n notifyReset: () => {\n this.props.onReset();\n },\n initFormId: () => {\n this.setState({\n formId: getUuidv4()\n });\n },\n getInitValues: () => this.props.initValues,\n getFormProps: keys => {\n if (typeof keys === 'undefined') {\n return this.props;\n } else if (typeof keys === 'string') {\n return this.props[keys];\n } else {\n const props = {};\n keys.forEach(key => {\n props[key] = this.props[key];\n });\n return props;\n }\n },\n getAllErrorDOM: () => {\n const {\n formId\n } = this.state;\n const {\n id\n } = this.props;\n const xId = id ? id : formId;\n return document.querySelectorAll(`form[x-form-id=\"${xId}\"] .${cssClasses.PREFIX}-field-error-message`);\n },\n getFieldDOM: field => document.querySelector(`.${cssClasses.PREFIX}-field[x-field-id=\"${field}\"]`),\n getFieldErrorDOM: field => {\n const {\n formId\n } = this.state;\n const {\n id\n } = this.props;\n const xId = id ? id : formId;\n let selector = `form[x-form-id=\"${xId}\"] .${cssClasses.PREFIX}-field[x-field-id=\"${field}\"] .${cssClasses.PREFIX}-field-error-message`;\n return document.querySelector(selector);\n }\n });\n }\n get content() {\n const {\n children,\n component,\n render\n } = this.props;\n const formState = this.foundation.getFormState();\n const props = {\n formState,\n formApi: this.foundation.getFormApi(),\n values: formState.values\n };\n if (component) {\n return /*#__PURE__*/React.createElement(component, props);\n }\n if (render) {\n return render(props);\n }\n if (typeof children === 'function') {\n return children(props);\n }\n return children;\n }\n submit(e) {\n e.preventDefault();\n if (this.props.stopPropagation && this.props.stopPropagation.submit) {\n e.stopPropagation();\n }\n this.foundation.submit(e);\n }\n reset(e) {\n e.preventDefault();\n if (this.props.stopPropagation && this.props.stopPropagation.reset) {\n e.stopPropagation();\n }\n this.foundation.reset();\n }\n render() {\n const needClone = false;\n const formState = this.foundation.getFormState(needClone);\n const updaterApi = this.foundation.getModifyFormStateApi();\n const {\n formId\n } = this.state;\n const _a = this.props,\n {\n children,\n getFormApi,\n onChange,\n onSubmit,\n onSubmitFail,\n onErrorChange,\n onValueChange,\n component,\n render,\n validateFields,\n initValues,\n layout,\n style,\n className,\n labelPosition,\n labelWidth,\n labelAlign,\n labelCol,\n wrapperCol,\n allowEmpty,\n autoScrollToError,\n showValidateIcon,\n stopValidateWithError,\n extraTextPosition,\n id,\n trigger\n } = _a,\n rest = __rest(_a, [\"children\", \"getFormApi\", \"onChange\", \"onSubmit\", \"onSubmitFail\", \"onErrorChange\", \"onValueChange\", \"component\", \"render\", \"validateFields\", \"initValues\", \"layout\", \"style\", \"className\", \"labelPosition\", \"labelWidth\", \"labelAlign\", \"labelCol\", \"wrapperCol\", \"allowEmpty\", \"autoScrollToError\", \"showValidateIcon\", \"stopValidateWithError\", \"extraTextPosition\", \"id\", \"trigger\"]);\n const formCls = classNames(prefix, className, {\n [prefix + '-vertical']: layout === 'vertical',\n [prefix + '-horizontal']: layout === 'horizontal'\n });\n const shouldAppendRow = wrapperCol && labelCol;\n const formContent = /*#__PURE__*/React.createElement(\"form\", Object.assign({\n style: style\n }, rest, {\n onReset: this.reset,\n onSubmit: this.submit,\n className: formCls,\n id: id ? id : formId,\n \"x-form-id\": id ? id : formId\n }), this.content);\n const withRowForm = /*#__PURE__*/React.createElement(Row, null, formContent);\n return /*#__PURE__*/React.createElement(FormUpdaterContext.Provider, {\n value: updaterApi\n }, /*#__PURE__*/React.createElement(FormApiContext.Provider, {\n value: this.formApi\n }, /*#__PURE__*/React.createElement(FormStateContext.Provider, {\n value: formState\n }, shouldAppendRow ? withRowForm : formContent)));\n }\n}\nForm.propTypes = {\n 'aria-label': PropTypes.string,\n onSubmit: PropTypes.func,\n onSubmitFail: PropTypes.func,\n /* Triggered from update, including field mount/unmount/value change/blur/verification status change/error prompt change, input parameter is formState, currentField */\n onChange: PropTypes.func,\n onReset: PropTypes.func,\n // Triggered when the value of the form is updated, only when the value of the subfield changes. The entry parameter is formState.values\n onValueChange: PropTypes.func,\n autoScrollToError: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\n allowEmpty: PropTypes.bool,\n className: PropTypes.string,\n component: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n disabled: PropTypes.bool,\n extraTextPosition: PropTypes.oneOf(strings.EXTRA_POS),\n getFormApi: PropTypes.func,\n initValues: PropTypes.object,\n validateFields: PropTypes.func,\n layout: PropTypes.oneOf(strings.LAYOUT),\n labelPosition: PropTypes.oneOf(strings.LABEL_POS),\n labelWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n labelAlign: PropTypes.oneOf(strings.LABEL_ALIGN),\n labelCol: PropTypes.object,\n render: PropTypes.func,\n style: PropTypes.object,\n showValidateIcon: PropTypes.bool,\n stopValidateWithError: PropTypes.bool,\n stopPropagation: PropTypes.shape({\n submit: PropTypes.bool,\n reset: PropTypes.bool\n }),\n id: PropTypes.string,\n wrapperCol: PropTypes.object,\n trigger: PropTypes.oneOfType([PropTypes.oneOf(['blur', 'change', 'custom', 'mount']), PropTypes.arrayOf(PropTypes.oneOf(['blur', 'change', 'custom', 'mount']))])\n};\nForm.defaultProps = {\n onChange: _noop,\n onSubmitFail: _noop,\n onSubmit: _noop,\n onReset: _noop,\n onValueChange: _noop,\n onErrorChange: _noop,\n layout: 'vertical',\n labelPosition: 'top',\n allowEmpty: false,\n autoScrollToError: false,\n showValidateIcon: true\n};\nForm.Input = FormInput;\nForm.TextArea = FormTextArea;\nForm.InputNumber = FormInputNumber;\nForm.Select = FormSelect;\nForm.Checkbox = FormCheckbox;\nForm.CheckboxGroup = FormCheckboxGroup;\nForm.Radio = FormRadio;\nForm.RadioGroup = FormRadioGroup;\nForm.DatePicker = FormDatePicker;\nForm.TimePicker = FormTimePicker;\nForm.Switch = FormSwitch;\nForm.Slider = FormSlider;\nForm.TreeSelect = FormTreeSelect;\nForm.Cascader = FormCascader;\nForm.Rating = FormRating;\nForm.AutoComplete = FormAutoComplete;\nForm.Upload = FormUpload;\nForm.TagInput = FormTagInput;\nForm.Slot = Slot;\nForm.ErrorMessage = ErrorMessage;\nForm.InputGroup = FormInputGroup;\nForm.Label = Label;\nForm.Section = Section;\nexport default Form;","import { BASE_CLASS_PREFIX } from \"../base/constants\";\nconst cssClasses = {\n PREFIX: `${BASE_CLASS_PREFIX}-image`\n};\nconst numbers = {\n DEFAULT_Z_INDEX: 1070\n};\nexport { cssClasses, numbers };","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M23 12a11 11 0 1 1-22 0 11 11 0 0 1 22 0Zm-9.5 5.5a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0ZM12 5a1.9 1.9 0 0 0-1.89 2l.3 5.5a1.59 1.59 0 0 0 3.17 0l.3-5.5c.07-1.09-.8-2-1.88-2Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'upload_error');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M23 12c0 .83-.67 1.5-1.5 1.5H6.12l6.44 6.44a1.5 1.5 0 0 1-2.12 2.12l-9-9a1.5 1.5 0 0 1 0-2.12l9-9a1.5 1.5 0 0 1 2.12 2.12L6.12 10.5H21.5c.83 0 1.5.67 1.5 1.5Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'arrow_left');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M1 12c0-.83.67-1.5 1.5-1.5h15.38l-6.44-6.44a1.5 1.5 0 0 1 2.12-2.12l9 9a1.5 1.5 0 0 1 0 2.12l-9 9a1.5 1.5 0 0 1-2.12-2.12l6.44-6.44H2.5A1.5 1.5 0 0 1 1 12Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'arrow_right');\nexport default IconComponent;","import { createContext } from \"react\";\nexport const PreviewContext = /*#__PURE__*/createContext({});","import React, { forwardRef } from \"react\";\nimport { IconClose } from \"@douyinfe/semi-icons\";\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/image/constants';\nimport cls from \"classnames\";\nimport { PreviewContext } from \"./previewContext\";\nconst prefixCls = `${cssClasses.PREFIX}-preview-header`;\nconst Header = /*#__PURE__*/forwardRef((_ref, ref) => {\n let {\n onClose,\n titleStyle,\n className,\n renderHeader,\n closable\n } = _ref;\n return /*#__PURE__*/React.createElement(PreviewContext.Consumer, null, _ref2 => {\n let {\n currentIndex,\n titles\n } = _ref2;\n let title;\n if (titles && typeof currentIndex === \"number\") {\n title = titles[currentIndex];\n }\n return /*#__PURE__*/React.createElement(\"section\", {\n ref: ref,\n className: cls(prefixCls, className)\n }, /*#__PURE__*/React.createElement(\"section\", {\n className: `${prefixCls}-title`,\n style: titleStyle\n }, renderHeader ? renderHeader(title) : title), closable && /*#__PURE__*/React.createElement(\"section\", {\n className: `${prefixCls}-close`,\n onMouseUp: onClose\n }, /*#__PURE__*/React.createElement(IconClose, null)));\n });\n});\nexport default Header;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2 12c0-.83.67-1.5 1.5-1.5h17a1.5 1.5 0 0 1 0 3h-17A1.5 1.5 0 0 1 2 12Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'minus');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.5 13.5a1.5 1.5 0 0 0 0-3h-7v-7a1.5 1.5 0 0 0-3 0v7h-7a1.5 1.5 0 0 0 0 3h7v7a1.5 1.5 0 0 0 3 0v-7h7Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'plus');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M1 6c0-1.1.9-2 2-2h18a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V6Zm20 0H3v12h18V6ZM5 9a1 1 0 0 1 1-1h1.5a1 1 0 0 1 1 1v6a1 1 0 1 1-2 0v-5H6a1 1 0 0 1-1-1Zm11-1a1 1 0 1 0 0 2h.5v5a1 1 0 1 0 2 0V9a1 1 0 0 0-1-1H16Zm-3 2a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-1 5a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'real_size_stroked');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M14 3a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 1 1-2 0V4h-5a1 1 0 0 1-1-1Zm-4 18a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1v-6a1 1 0 1 1 2 0v5h5a1 1 0 0 1 1 1ZM2 9a1 1 0 0 0 2 0V4h5a1 1 0 1 0 0-2H3a1 1 0 0 0-1 1v6Zm19 5a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 1 1 0-2h5v-5a1 1 0 0 1 1-1ZM8.5 7.5a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h7a1 1 0 0 0 1-1v-7a1 1 0 0 0-1-1h-7Zm1 7v-5h5v5h-5Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'window_adaption_stroked');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.2 2.2A1 1 0 0 0 12.8.8l-2.5 2.5a1 1 0 0 0 0 1.4l2.5 2.5a1 1 0 1 0 1.4-1.4l-.79-.8H16a5 5 0 0 1 5 5v2a1 1 0 1 0 2 0v-2a7 7 0 0 0-7-7h-2.59l.8-.8Z\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3 10c0-1.1.9-2 2-2h12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V10Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'rotate');\nexport default IconComponent;","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.84 8.06A6.5 6.5 0 1 0 5.18 11 4.5 4.5 0 0 0 5.5 20H17a6 6 0 0 0 .84-11.94Zm-6.16 9.67a.5.5 0 0 0 .64 0l5.15-4.29a.25.25 0 0 0-.16-.44H14V9.5a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 0-.5.5V13H6.7c-.24 0-.35.3-.17.44l5.15 4.3Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'download');\nexport default IconComponent;","import BaseFoundation from \"../base/foundation\";\nexport default class PreviewFooterFoundation extends BaseFoundation {\n constructor() {\n super(...arguments);\n this.changeSliderValue = type => {\n const {\n zoom,\n step,\n min,\n max\n } = this.getProps();\n let newValue = type === \"plus\" ? zoom + step : zoom - step;\n if (newValue > max) {\n newValue = max;\n } else if (newValue < min) {\n newValue = min;\n }\n this.handleValueChange(newValue);\n };\n this.handleValueChange = value => {\n const {\n onZoomIn,\n onZoomOut,\n zoom\n } = this.getProps();\n if (value > zoom) {\n onZoomIn(Number((value / 100).toFixed(2)));\n } else {\n onZoomOut(Number((value / 100).toFixed(2)));\n }\n };\n this.handleRatioClick = () => {\n const {\n ratio,\n onAdjustRatio\n } = this.getProps();\n const type = ratio === \"adaptation\" ? \"realSize\" : \"adaptation\";\n onAdjustRatio(type);\n };\n this.handleRotate = direction => {\n const {\n onRotate\n } = this.getProps();\n onRotate && onRotate(direction);\n };\n }\n}","import _throttle from \"lodash/throttle\";\nimport React from \"react\";\nimport BaseComponent from \"../_base/baseComponent\";\nimport { IconChevronLeft, IconChevronRight, IconMinus, IconPlus, IconRotate, IconDownload, IconWindowAdaptionStroked, IconRealSizeStroked } from \"@douyinfe/semi-icons\";\nimport PropTypes from \"prop-types\";\nimport Tooltip from \"../tooltip\";\nimport Divider from \"../divider\";\nimport Slider from \"../slider\";\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/image/constants';\nimport cls from \"classnames\";\nimport PreviewFooterFoundation from '@douyinfe/semi-foundation/lib/es/image/previewFooterFoundation';\nimport LocaleConsumer from \"../locale/localeConsumer\";\nconst prefixCls = cssClasses.PREFIX;\nconst footerPrefixCls = `${cssClasses.PREFIX}-preview-footer`;\nexport default class Footer extends BaseComponent {\n get adapter() {\n return Object.assign({}, super.adapter);\n }\n constructor(props) {\n super(props);\n this.changeSliderValue = type => {\n this.foundation.changeSliderValue(type);\n };\n this.handleMinusClick = () => {\n this.changeSliderValue(\"minus\");\n };\n this.handlePlusClick = () => {\n this.changeSliderValue(\"plus\");\n };\n this.handleRotateLeft = () => {\n this.foundation.handleRotate(\"left\");\n };\n this.handleRotateRight = () => {\n this.foundation.handleRotate(\"right\");\n };\n this.handleSlideChange = _throttle(value => {\n this.foundation.handleValueChange(value);\n }, 50);\n this.handleRatioClick = () => {\n this.foundation.handleRatioClick();\n };\n this.customRenderViewMenu = () => {\n const {\n min,\n max,\n step,\n curPage,\n totalNum,\n ratio,\n zoom,\n disabledPrev,\n disabledNext,\n disableDownload,\n onNext,\n onPrev,\n onDownload,\n renderPreviewMenu\n } = this.props;\n const props = {\n min,\n max,\n step,\n curPage,\n totalNum,\n ratio,\n zoom,\n disabledPrev,\n disabledNext,\n disableDownload,\n onNext,\n onPrev,\n onDownload,\n onRotateLeft: this.handleRotateLeft,\n onRotateRight: this.handleRotateRight,\n disabledZoomIn: zoom === max,\n disabledZoomOut: zoom === min,\n onRatioClick: this.handleRatioClick,\n onZoomIn: this.handlePlusClick,\n onZoomOut: this.handleMinusClick,\n menuItems: this.getMenu()\n };\n return renderPreviewMenu(props);\n };\n // According to showTooltip in props, decide whether to use Tooltip to pack a layer\n // 根据 props 中的 showTooltip 决定是否使用 Tooltip 包一层\n this.getFinalIconElement = (element, content, key) => {\n const {\n showTooltip,\n zIndex\n } = this.props;\n return showTooltip ? (/*#__PURE__*/React.createElement(Tooltip, {\n content: content,\n key: `tooltip-${key}`,\n zIndex: zIndex + 1\n }, element)) : element;\n };\n this.getLocalTextByKey = key => (/*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Image\"\n }, locale => locale[key]));\n this.getIconChevronLeft = () => {\n const {\n disabledPrev,\n onPrev,\n prevTip\n } = this.props;\n const icon = /*#__PURE__*/React.createElement(IconChevronLeft, {\n key: \"chevron-left\",\n size: \"large\",\n className: disabledPrev ? `${footerPrefixCls}-disabled` : \"\",\n onClick: !disabledPrev ? onPrev : undefined\n });\n const content = prevTip !== null && prevTip !== void 0 ? prevTip : this.getLocalTextByKey(\"prevTip\");\n return this.getFinalIconElement(icon, content, 'chevron-left');\n };\n this.getIconChevronRight = () => {\n const {\n disabledNext,\n onNext,\n nextTip\n } = this.props;\n const icon = /*#__PURE__*/React.createElement(IconChevronRight, {\n key: \"chevron-right\",\n size: \"large\",\n className: disabledNext ? `${footerPrefixCls}-disabled` : \"\",\n onClick: !disabledNext ? onNext : undefined\n });\n const content = nextTip !== null && nextTip !== void 0 ? nextTip : this.getLocalTextByKey(\"nextTip\");\n return this.getFinalIconElement(icon, content, 'chevron-right');\n };\n this.getIconMinus = () => {\n const {\n zoomOutTip,\n zoom,\n min\n } = this.props;\n const disabledZoomOut = zoom === min;\n const icon = /*#__PURE__*/React.createElement(IconMinus, {\n key: \"minus\",\n size: \"large\",\n onClick: !disabledZoomOut ? this.handleMinusClick : undefined,\n className: disabledZoomOut ? `${footerPrefixCls}-disabled` : \"\"\n });\n const content = zoomOutTip !== null && zoomOutTip !== void 0 ? zoomOutTip : this.getLocalTextByKey(\"zoomOutTip\");\n return this.getFinalIconElement(icon, content, 'minus');\n };\n this.getIconPlus = () => {\n const {\n zoomInTip,\n zoom,\n max\n } = this.props;\n const disabledZoomIn = zoom === max;\n const icon = /*#__PURE__*/React.createElement(IconPlus, {\n key: \"plus\",\n size: \"large\",\n onClick: !disabledZoomIn ? this.handlePlusClick : undefined,\n className: disabledZoomIn ? `${footerPrefixCls}-disabled` : \"\"\n });\n const content = zoomInTip !== null && zoomInTip !== void 0 ? zoomInTip : this.getLocalTextByKey(\"zoomInTip\");\n return this.getFinalIconElement(icon, content, 'plus');\n };\n this.getIconRatio = () => {\n const {\n ratio,\n originTip,\n adaptiveTip\n } = this.props;\n const props = {\n key: \"ratio\",\n size: \"large\",\n className: cls(`${footerPrefixCls}-gap`),\n onClick: this.handleRatioClick\n };\n const icon = ratio === \"adaptation\" ? /*#__PURE__*/React.createElement(IconRealSizeStroked, Object.assign({}, props)) : /*#__PURE__*/React.createElement(IconWindowAdaptionStroked, Object.assign({}, props));\n let content;\n if (ratio === \"adaptation\") {\n content = originTip !== null && originTip !== void 0 ? originTip : this.getLocalTextByKey(\"originTip\");\n } else {\n content = adaptiveTip !== null && adaptiveTip !== void 0 ? adaptiveTip : this.getLocalTextByKey(\"adaptiveTip\");\n }\n return this.getFinalIconElement(icon, content, 'ratio');\n };\n this.getIconRotate = () => {\n const {\n rotateTip\n } = this.props;\n const icon = /*#__PURE__*/React.createElement(IconRotate, {\n key: \"rotate\",\n size: \"large\",\n onClick: this.handleRotateLeft\n });\n const content = rotateTip !== null && rotateTip !== void 0 ? rotateTip : this.getLocalTextByKey(\"rotateTip\");\n return this.getFinalIconElement(icon, content, 'rotate');\n };\n this.getIconDownload = () => {\n const {\n downloadTip,\n onDownload,\n disableDownload\n } = this.props;\n const icon = /*#__PURE__*/React.createElement(IconDownload, {\n key: 'download',\n size: \"large\",\n onClick: !disableDownload ? onDownload : undefined,\n className: cls(`${footerPrefixCls}-gap`, {\n [`${footerPrefixCls}-disabled`]: disableDownload\n })\n });\n const content = downloadTip !== null && downloadTip !== void 0 ? downloadTip : this.getLocalTextByKey(\"downloadTip\");\n return this.getFinalIconElement(icon, content, 'download');\n };\n this.getNumberInfo = () => {\n const {\n curPage,\n totalNum\n } = this.props;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: `${footerPrefixCls}-page`,\n key: 'info'\n }, curPage, \"/\", totalNum);\n };\n this.getSlider = () => {\n const {\n zoom,\n min,\n max,\n step,\n showTooltip\n } = this.props;\n return /*#__PURE__*/React.createElement(Slider, {\n key: 'slider',\n value: zoom,\n min: min,\n max: max,\n step: step,\n tipFormatter: v => `${v}%`,\n tooltipVisible: showTooltip ? undefined : false,\n onChange: this.handleSlideChange\n });\n };\n this.getMenu = () => [this.getIconChevronLeft(), this.getNumberInfo(), this.getIconChevronRight(), this.getIconMinus(), this.getSlider(), this.getIconPlus(), this.getIconRatio(), this.getIconRotate(), this.getIconDownload()];\n this.getFooterMenu = () => {\n const menuItems = this.getMenu();\n menuItems.splice(3, 0, /*#__PURE__*/React.createElement(Divider, {\n layout: \"vertical\",\n key: \"divider-first\"\n }));\n menuItems.splice(8, 0, /*#__PURE__*/React.createElement(Divider, {\n layout: \"vertical\",\n key: \"divider-second\"\n }));\n return menuItems;\n };\n this.foundation = new PreviewFooterFoundation(this.adapter);\n }\n render() {\n const {\n className,\n renderPreviewMenu,\n forwardRef\n } = this.props;\n const menuCls = cls(footerPrefixCls, `${footerPrefixCls}-wrapper`, className, {\n [`${footerPrefixCls}-content`]: !Boolean(renderPreviewMenu)\n });\n return /*#__PURE__*/React.createElement(\"section\", {\n className: menuCls,\n ref: forwardRef\n }, renderPreviewMenu ? this.customRenderViewMenu() : this.getFooterMenu());\n }\n}\nFooter.propTypes = {\n curPage: PropTypes.number,\n totalNum: PropTypes.number,\n disabledPrev: PropTypes.bool,\n disabledNext: PropTypes.bool,\n disableDownload: PropTypes.bool,\n className: PropTypes.string,\n zoom: PropTypes.number,\n ratio: PropTypes.string,\n prevTip: PropTypes.string,\n nextTip: PropTypes.string,\n zoomInTip: PropTypes.string,\n zoomOutTip: PropTypes.string,\n rotateTip: PropTypes.string,\n downloadTip: PropTypes.string,\n adaptiveTip: PropTypes.string,\n originTip: PropTypes.string,\n showTooltip: PropTypes.bool,\n onZoomIn: PropTypes.func,\n onZoomOut: PropTypes.func,\n onPrev: PropTypes.func,\n onNext: PropTypes.func,\n onAdjustRatio: PropTypes.func,\n onRotateLeft: PropTypes.func,\n onDownload: PropTypes.func\n};\nFooter.defaultProps = {\n min: 10,\n max: 500,\n step: 10,\n showTooltip: false,\n disableDownload: false\n};","import BaseFoundation from \"../base/foundation\";\nexport default class PreviewImageFoundation extends BaseFoundation {\n constructor(adapter) {\n var _this;\n super(Object.assign({}, adapter));\n _this = this;\n this.startMouseClientPosition = {\n x: 0,\n y: 0\n };\n this.originImageWidth = null;\n this.originImageHeight = null;\n this.containerWidth = 0;\n this.containerHeight = 0;\n this._isImageVertical = () => this.getProp(\"rotation\") % 180 !== 0;\n this._getContainerBoundingRectSize = () => {\n const containerDOM = this._adapter.getContainer();\n if (containerDOM) {\n this.containerWidth = containerDOM.clientWidth;\n this.containerHeight = containerDOM.clientHeight;\n }\n };\n this._getAdaptationZoom = () => {\n let _zoom = 1;\n const containerDOM = this._adapter.getContainer();\n if (containerDOM && this.originImageWidth && this.originImageHeight) {\n const {\n rotation\n } = this.getProps();\n const {\n width: imageWidth,\n height: imageHeight\n } = this.calcBoundingRectSize(this.originImageWidth, this.originImageHeight, rotation);\n const reservedWidth = this.containerWidth - 80;\n const reservedHeight = this.containerHeight - 80;\n _zoom = Number(Math.min(reservedWidth / imageWidth, reservedHeight / imageHeight).toFixed(2));\n }\n return _zoom;\n };\n this._getInitialZoom = () => {\n const {\n ratio\n } = this.getProps();\n let _zoom = 1;\n if (ratio === 'adaptation') {\n _zoom = this._getAdaptationZoom();\n }\n return _zoom;\n };\n this.setLoading = loading => {\n this._adapter.setLoading(loading);\n };\n this.handleWindowResize = () => {\n this._getContainerBoundingRectSize();\n this.initializeImage();\n };\n this.handleLoad = e => {\n if (e.target) {\n const {\n naturalWidth: w,\n naturalHeight: h\n } = e.target;\n this.originImageHeight = h;\n this.originImageWidth = w;\n this.setState({\n loading: false\n });\n // 图片初次加载,计算 zoom,zoom 改变不需要通过回调透出\n // When the image is loaded for the first time, zoom is calculated, and zoom changes do not need to be exposed through callbacks.\n this.initializeImage(false);\n }\n const {\n src,\n onLoad\n } = this.getProps();\n onLoad && onLoad(src);\n };\n this.handleError = e => {\n const {\n onError,\n src\n } = this.getProps();\n this.setState({\n loading: false\n });\n onError && onError(src);\n };\n this.handleRatioChange = () => {\n this.initializeImage();\n };\n this.initializeImageZoom = function () {\n let notify = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n const {\n currZoom\n } = _this.getStates();\n const {\n onZoom\n } = _this.getProps();\n const _zoom = _this._getInitialZoom();\n if (currZoom !== _zoom) {\n onZoom(_zoom, notify);\n } else {\n _this.changeZoom(_zoom);\n }\n };\n this.initializeTranslate = () => {\n this.setState({\n translate: {\n x: 0,\n y: 0\n }\n });\n };\n this.initializeImage = function () {\n let notify = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n _this.initializeImageZoom(notify);\n _this.initializeTranslate();\n };\n this.handleRightClickImage = e => {\n const {\n disableDownload\n } = this.getProps();\n if (disableDownload) {\n e.preventDefault();\n e.stopPropagation();\n return false;\n } else {\n return true;\n }\n };\n this.getCanDragDirection = (width, height) => {\n let canDragHorizontal = width > this.containerWidth;\n let canDragVertical = height > this.containerHeight;\n return {\n canDragVertical,\n canDragHorizontal\n };\n };\n this.changeZoom = (newZoom, e) => {\n const imageDOM = this._adapter.getImage();\n const {\n currZoom,\n translate,\n width,\n height\n } = this.getStates();\n const {\n rotation\n } = this.getProps();\n const changeScale = newZoom / (currZoom || 1);\n const newWidth = Math.floor(this.originImageWidth * newZoom);\n const newHeight = Math.floor(this.originImageHeight * newZoom);\n let newTranslateX = Math.floor(translate.x * changeScale);\n let newTranslateY = Math.floor(translate.y * changeScale);\n const imageBound = this.calcBoundingRectSize(width, height, rotation);\n const newImageBound = {\n width: imageBound.width * changeScale,\n height: imageBound.height * changeScale\n };\n if (e && imageDOM && e.target === imageDOM) {\n let angle = rotation % 360;\n angle < 0 && (angle = 360 + angle);\n switch (angle) {\n case 0:\n newTranslateX = (e.offsetX - 0.5 * width) * (1 - newZoom / currZoom) + translate.x;\n newTranslateY = (e.offsetY - 0.5 * height) * (1 - newZoom / currZoom) + translate.y;\n break;\n case 90:\n newTranslateX = (0.5 * height - e.offsetY) * (1 - newZoom / currZoom) + translate.x;\n newTranslateY = (e.offsetX - 0.5 * width) * (1 - newZoom / currZoom) + translate.y;\n break;\n case 180:\n newTranslateX = (0.5 * width - e.offsetX) * (1 - newZoom / currZoom) + translate.x;\n newTranslateY = (0.5 * height - e.offsetY) * (1 - newZoom / currZoom) + translate.y;\n break;\n case 270:\n newTranslateX = (e.offsetY - 0.5 * height) * (1 - newZoom / currZoom) + translate.x;\n newTranslateY = (0.5 * width - e.offsetX) * (1 - newZoom / currZoom) + translate.y;\n break;\n default:\n break;\n }\n }\n const newTranslate = this.getSafeTranslate(newImageBound.width, newImageBound.height, newTranslateX, newTranslateY);\n this.setState({\n translate: newTranslate,\n width: newWidth,\n height: newHeight,\n currZoom: newZoom\n });\n if (imageDOM) {\n const {\n canDragVertical,\n canDragHorizontal\n } = this.getCanDragDirection(newImageBound.width, newImageBound.height);\n const canDrag = canDragVertical || canDragHorizontal;\n this._adapter.setImageCursor(canDrag);\n }\n };\n this.getExtremeTranslate = (width, height) => {\n return {\n x: (width - this.containerWidth) / 2,\n y: (height - this.containerHeight) / 2\n };\n };\n this.getSafeTranslate = (width, height, translateX, translateY) => {\n const {\n x: extremeX,\n y: extremeY\n } = this.getExtremeTranslate(width, height);\n const {\n canDragVertical,\n canDragHorizontal\n } = this.getCanDragDirection(width, height);\n let newTranslateX = 0,\n newTranslateY = 0;\n if (canDragHorizontal) {\n newTranslateX = translateX > 0 ? Math.min(translateX, extremeX) : Math.max(translateX, -extremeX);\n }\n if (canDragVertical) {\n newTranslateY = translateY > 0 ? Math.min(translateY, extremeY) : Math.max(translateY, -extremeY);\n }\n return {\n x: newTranslateX,\n y: newTranslateY\n };\n };\n this.handleImageMove = e => {\n // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons\n const mouseLeftPress = e.buttons === 1;\n if (mouseLeftPress) {\n this.moveImage(e);\n }\n };\n this.moveImage = e => {\n const {\n clientX,\n clientY\n } = e;\n const {\n width,\n height,\n translate\n } = this.getStates();\n const {\n rotation\n } = this.getProps();\n const imageBound = this.calcBoundingRectSize(width, height, rotation);\n const {\n canDragVertical,\n canDragHorizontal\n } = this.getCanDragDirection(imageBound.width, imageBound.height);\n if (canDragVertical || canDragHorizontal) {\n let newTranslateX = canDragHorizontal ? translate.x + clientX - this.startMouseClientPosition.x : translate.x;\n let newTranslateY = canDragVertical ? translate.y + clientY - this.startMouseClientPosition.y : translate.y;\n const newTranslate = this.getSafeTranslate(imageBound.width, imageBound.height, newTranslateX, newTranslateY);\n this.setState({\n translate: newTranslate\n });\n this.startMouseClientPosition = {\n x: clientX,\n y: clientY\n };\n }\n };\n this.handleImageMouseDown = e => {\n this.startMouseClientPosition = {\n x: e.clientX,\n y: e.clientY\n };\n };\n // 鼠标事件的 e.offset 是以 dom 旋转前左上角为零点的, 这个方法会转换为以旋转后元素的外接矩形左上角为零点的 offset\n this.calcBoundingRectMouseOffset = calcBoundingRectMouseOffset => {\n const {\n width,\n height,\n offset,\n rotation = 0\n } = calcBoundingRectMouseOffset;\n let degrees = rotation % 360;\n degrees = degrees >= 0 ? degrees : 360 + degrees;\n let boundOffsetX = 0,\n boundOffsetY = 0;\n switch (degrees) {\n case 0:\n boundOffsetX = offset.x;\n boundOffsetY = offset.y;\n break;\n case 90:\n boundOffsetX = height - offset.y;\n boundOffsetY = offset.x;\n break;\n case 180:\n boundOffsetX = width - offset.x;\n boundOffsetY = height - offset.y;\n break;\n case 270:\n boundOffsetX = offset.y;\n boundOffsetY = width - offset.x;\n break;\n default:\n break;\n }\n return {\n x: boundOffsetX,\n y: boundOffsetY\n };\n };\n }\n init() {\n this._getContainerBoundingRectSize();\n }\n calcBoundingRectSize() {\n let width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n let rotation = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n const angleInRadians = rotation * Math.PI / 180;\n const sinTheta = Math.abs(Math.sin(angleInRadians));\n const cosTheta = Math.abs(Math.cos(angleInRadians));\n const boundingWidth = width * cosTheta + height * sinTheta;\n const boundingHeight = width * sinTheta + height * cosTheta;\n return {\n width: boundingWidth,\n height: boundingHeight\n };\n }\n}","import React from \"react\";\nimport BaseComponent from \"../_base/baseComponent\";\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/image/constants';\nimport PropTypes from \"prop-types\";\nimport Spin from \"../spin\";\nimport PreviewImageFoundation from '@douyinfe/semi-foundation/lib/es/image/previewImageFoundation';\nconst prefixCls = cssClasses.PREFIX;\nconst preViewImgPrefixCls = `${prefixCls}-preview-image`;\nexport default class PreviewImage extends BaseComponent {\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n getContainer: () => {\n return this.containerRef.current;\n },\n getImage: () => {\n return this.imageRef.current;\n },\n setLoading: loading => {\n this.setState({\n loading\n });\n },\n setImageCursor: canDrag => {\n this.imageRef.current.style.cursor = canDrag ? \"grab\" : \"default\";\n }\n });\n }\n constructor(props) {\n super(props);\n this.onWindowResize = () => {\n this.foundation.handleWindowResize();\n };\n // Determine the response method of right click according to the disableDownload parameter in props\n this.handleRightClickImage = e => {\n this.foundation.handleRightClickImage(e);\n };\n this.handleLoad = e => {\n this.foundation.handleLoad(e);\n };\n this.handleError = e => {\n this.foundation.handleError(e);\n };\n this.handleImageMove = e => {\n this.foundation.handleImageMove(e);\n };\n this.handleMouseDown = e => {\n this.foundation.handleImageMouseDown(e);\n };\n this.state = {\n width: 0,\n height: 0,\n loading: true,\n translate: {\n x: 0,\n y: 0\n },\n currZoom: this.props.zoom\n };\n this.containerRef = /*#__PURE__*/React.createRef();\n this.imageRef = /*#__PURE__*/React.createRef();\n this.foundation = new PreviewImageFoundation(this.adapter);\n }\n componentDidMount() {\n this.foundation.init();\n window.addEventListener(\"resize\", this.onWindowResize);\n }\n componentWillUnmount() {\n window.removeEventListener(\"resize\", this.onWindowResize);\n }\n componentDidUpdate(prevProps, prevStates) {\n // If src changes, start a new loading\n const zoomChange = \"zoom\" in this.props && this.props.zoom !== this.state.currZoom;\n const srcChange = this.props.src && this.props.src !== prevProps.src;\n if (srcChange) {\n this.foundation.setLoading(true);\n }\n if (!zoomChange && !srcChange && prevProps) {\n if (\"ratio\" in this.props && this.props.ratio !== prevProps.ratio) {\n this.foundation.handleRatioChange();\n }\n if (\"rotation\" in this.props && this.props.rotation !== prevProps.rotation) {\n this.onWindowResize();\n }\n }\n }\n render() {\n const {\n src,\n rotation,\n crossOrigin\n } = this.props;\n const {\n loading,\n width,\n height,\n translate\n } = this.state;\n const imgStyle = {\n position: \"absolute\",\n visibility: loading ? \"hidden\" : \"visible\",\n transform: `translate(${translate.x}px, ${translate.y}px) rotate(${rotation}deg)`,\n width,\n height\n };\n return /*#__PURE__*/React.createElement(\"div\", {\n className: `${preViewImgPrefixCls}`,\n ref: this.containerRef\n }, /*#__PURE__*/React.createElement(\"img\", {\n ref: this.imageRef,\n src: src,\n alt: \"previewImag\",\n className: `${preViewImgPrefixCls}-img`,\n key: src,\n onMouseMove: this.handleImageMove,\n onMouseDown: this.handleMouseDown,\n onContextMenu: this.handleRightClickImage,\n onDragStart: e => e.preventDefault(),\n onLoad: this.handleLoad,\n onError: this.handleError,\n style: imgStyle,\n crossOrigin: crossOrigin\n }), loading && /*#__PURE__*/React.createElement(Spin, {\n size: \"large\",\n wrapperClassName: `${preViewImgPrefixCls}-spin`\n }));\n }\n}\nPreviewImage.propTypes = {\n src: PropTypes.string,\n rotation: PropTypes.number,\n style: PropTypes.object,\n // maxZoom: PropTypes.number,\n // minZoom: PropTypes.number,\n // zoomStep: PropTypes.number,\n zoom: PropTypes.number,\n ratio: PropTypes.string,\n disableDownload: PropTypes.bool,\n clickZoom: PropTypes.number,\n setRatio: PropTypes.func,\n onZoom: PropTypes.func,\n onLoad: PropTypes.func,\n onError: PropTypes.func\n};\nPreviewImage.defaultProps = {\n // maxZoom: 5,\n // minZoom: 0.1,\n // zoomStep: 0.1,\n zoom: undefined\n};","var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nexport const isTargetEmit = (event, targetClasses) => {\n // event.path usage is discouraged, use event.composedPath() as it's standard and is more future-proof\n // path is the event-triggered bubbling path, which stores each node through which bubbling passes.\n // path.length-4 is to remove elements above the root node, such as body, html, document, window\n const path = event === null || event === void 0 ? void 0 : event.composedPath();\n const isTarget = path === null || path === void 0 ? void 0 : path.slice(0, path.length - 4).some(node => {\n if (node.className && typeof node.className === \"string\") {\n return targetClasses.some(c => node.className.includes(c));\n }\n return false;\n });\n return isTarget;\n};\nexport const downloadImage = (src, filename, downloadErrorCb) => __awaiter(void 0, void 0, void 0, function* () {\n try {\n const response = yield fetch(src);\n if (response.ok) {\n const blob = yield response.blob();\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n link.click();\n URL.revokeObjectURL(url);\n link.remove();\n } else {\n downloadErrorCb(src);\n }\n } catch (error) {\n downloadErrorCb(src);\n }\n});\nexport const crossMerge = function () {\n let leftArr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let rightArr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n let newArr = [];\n const leftLen = leftArr.length;\n const rightLen = rightArr.length;\n const crossLength = leftLen <= rightLen ? leftLen : rightLen;\n new Array(crossLength).fill(0).forEach((item, index) => {\n newArr.push(rightArr[index]);\n newArr.push(leftArr[index]);\n });\n if (leftLen > rightLen) {\n newArr = newArr.concat(leftArr.slice(rightLen, leftLen));\n } else if (leftLen < rightLen) {\n newArr = newArr.concat(rightArr.slice(leftLen, rightLen));\n }\n return newArr;\n};\nexport const getPreloadImagArr = (imgSrc, currentIndex, preLoadGap, infinite) => {\n const beginIndex = currentIndex - preLoadGap;\n const endIndex = currentIndex + preLoadGap;\n const srcLength = imgSrc.length;\n let leftArr = [];\n let rightArr = [];\n if (preLoadGap >= Math.floor(srcLength / 2)) {\n if (infinite) {\n leftArr = imgSrc.concat(imgSrc).slice(beginIndex + srcLength < 0 ? 0 : beginIndex + srcLength, currentIndex + srcLength);\n rightArr = imgSrc.concat(imgSrc).slice(currentIndex + 1, endIndex + 1 < 2 * srcLength ? endIndex + 1 : 2 * srcLength);\n } else {\n leftArr = imgSrc.slice(0, currentIndex);\n rightArr = imgSrc.slice(currentIndex + 1, srcLength);\n }\n } else {\n if (infinite) {\n leftArr = imgSrc.concat(imgSrc).slice(beginIndex + srcLength, currentIndex + srcLength);\n rightArr = imgSrc.concat(imgSrc).slice(currentIndex + 1, endIndex + 1);\n } else {\n if (beginIndex >= 0 && endIndex < srcLength) {\n leftArr = imgSrc.slice(beginIndex, currentIndex);\n rightArr = imgSrc.slice(currentIndex + 1, endIndex + 1);\n } else if (beginIndex < 0) {\n leftArr = imgSrc.slice(0, currentIndex);\n rightArr = imgSrc.slice(currentIndex + 1, 2 * preLoadGap + 1);\n } else {\n rightArr = imgSrc.slice(currentIndex + 1, srcLength);\n leftArr = imgSrc.slice(srcLength - 2 * preLoadGap - 1, currentIndex);\n }\n }\n }\n const result = crossMerge(leftArr.reverse(), rightArr);\n const duplicateResult = Array.from(new Set(result));\n return duplicateResult;\n};","import _throttle from \"lodash/throttle\";\nimport _isUndefined from \"lodash/isUndefined\";\nimport { handlePrevent } from \"../utils/a11y\";\nimport BaseFoundation from \"../base/foundation\";\nimport KeyCode from \"../utils/keyCode\";\nimport { getPreloadImagArr, downloadImage, isTargetEmit } from \"./utils\";\nconst NOT_CLOSE_TARGETS = [\"icon\", \"footer\"];\nconst STOP_CLOSE_TARGET = [\"icon\", \"footer\", \"header\"];\nexport default class PreviewInnerFoundation extends BaseFoundation {\n constructor(adapter) {\n var _this;\n super(Object.assign({}, adapter));\n _this = this;\n this._timer = null;\n this._startMouseDown = {\n x: 0,\n y: 0\n };\n this.handleViewVisibleChange = () => {\n const {\n viewerVisible\n } = this.getStates();\n if (viewerVisible) {\n this.setState({\n viewerVisible: false\n });\n this.clearTimer();\n }\n };\n this.handleMouseMove = e => {\n this._persistEvent(e);\n this.mouseMoveHandler(e);\n };\n this.mouseMoveHandler = _throttle(e => {\n const {\n viewerVisible\n } = this.getStates();\n const isValidTarget = this._adapter.isValidTarget(e);\n if (isValidTarget) {\n if (!viewerVisible) {\n this.setState({\n viewerVisible: true\n });\n }\n this.updateTimer();\n } else {\n this.clearTimer();\n }\n }, 50);\n this.updateTimer = () => {\n const {\n viewerVisibleDelay\n } = this.getProps();\n this.clearTimer();\n this._timer = setTimeout(this.handleViewVisibleChange, viewerVisibleDelay);\n };\n this.clearTimer = () => {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n };\n this.handleWheel = e => {\n this.onWheel(e);\n handlePrevent(e);\n };\n this.onWheel = e => {\n const {\n zoomStep,\n maxZoom,\n minZoom\n } = this.getProps();\n const {\n zoom: currZoom\n } = this.getStates();\n let _zoom;\n if (e.deltaY < 0) {\n /* zoom in */\n if (currZoom + zoomStep <= maxZoom) {\n _zoom = Number((currZoom + zoomStep).toFixed(2));\n }\n } else if (e.deltaY > 0) {\n /* zoom out */\n if (currZoom - zoomStep >= minZoom) {\n _zoom = Number((currZoom - zoomStep).toFixed(2));\n }\n }\n if (!_isUndefined(_zoom)) {\n this.handleZoomImage(_zoom, true, e);\n }\n };\n this.handleMouseUp = e => {\n const {\n maskClosable\n } = this.getProps();\n let couldClose = !isTargetEmit(e, NOT_CLOSE_TARGETS);\n const {\n clientX,\n clientY\n } = e;\n const {\n x,\n y\n } = this._startMouseDown;\n // 对鼠标移动做容错处理,当 x 和 y 方向在 mouseUp 的时候移动距离都小于等于 5px 时候就可以关闭预览\n // Error-tolerant processing of mouse movement, when the movement distance in the x and y directions is less than or equal to 5px in mouseUp, the preview can be closed\n // 不做容错处理的话,直接用 clientX !== x || y !== clientY 做判断,鼠标在用户点击时候无意识的轻微移动无法关闭预览,不符合用户预期\n // If you do not do fault-tolerant processing, but directly use clientX !== x || y !== clientY to make judgments, the slight movement of the mouse when the user clicks will not be able to close the preview, which does not meet the user's expectations.\n if (Math.abs(clientX - x) > 5 || Math.abs(y - clientY) > 5) {\n couldClose = false;\n }\n if (couldClose && maskClosable) {\n this._adapter.notifyVisibleChange(false);\n }\n };\n this.handleMouseDown = e => {\n const {\n clientX,\n clientY\n } = e;\n this._startMouseDown = {\n x: clientX,\n y: clientY\n };\n };\n this.handleKeyDown = e => {\n const {\n closeOnEsc\n } = this.getProps();\n if (closeOnEsc && e.keyCode === KeyCode.ESC) {\n e.stopPropagation();\n this._adapter.notifyVisibleChange(false);\n this._adapter.notifyClose();\n return;\n }\n };\n this.handleSwitchImage = direction => {\n const step = direction === \"prev\" ? -1 : 1;\n const {\n imgSrc,\n currentIndex: currentIndexInState\n } = this.getStates();\n const srcLength = imgSrc.length;\n const newIndex = (currentIndexInState + step + srcLength) % srcLength;\n if (\"currentIndex\" in this.getProps()) {\n if (this._adapter.getIsInGroup()) {\n const setCurrentIndex = this._adapter.getContext(\"setCurrentIndex\");\n setCurrentIndex(newIndex);\n }\n } else {\n this.setState({\n currentIndex: newIndex\n });\n }\n this._adapter.notifyChange(newIndex, direction);\n this.setState({\n direction,\n rotation: 0\n });\n };\n this.handleDownload = () => {\n const {\n currentIndex,\n imgSrc\n } = this.getStates();\n const setDownloadName = this._adapter.getSetDownloadFunc();\n const downloadSrc = imgSrc[currentIndex];\n const downloadName = setDownloadName ? setDownloadName(downloadSrc) : downloadSrc.slice(downloadSrc.lastIndexOf(\"/\") + 1).split('?')[0];\n downloadImage(downloadSrc, downloadName, this._adapter.notifyDownloadError);\n this._adapter.notifyDownload(downloadSrc, currentIndex);\n };\n this.handlePreviewClose = e => {\n this._adapter.notifyVisibleChange(false);\n this._adapter.notifyClose();\n handlePrevent(e);\n };\n this.handleAdjustRatio = type => {\n this.setState({\n ratio: type\n });\n this._adapter.notifyRatioChange(type);\n };\n this.handleRotateImage = direction => {\n const {\n rotation\n } = this.getStates();\n const ROTATE_STEP = 90;\n const newRotation = rotation + (direction === \"left\" ? -ROTATE_STEP : ROTATE_STEP);\n this.setState({\n rotation: newRotation\n });\n this._adapter.notifyRotateChange(newRotation);\n };\n this.handleZoomImage = function (newZoom) {\n let notify = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n let e = arguments.length > 2 ? arguments[2] : undefined;\n const {\n zoom\n } = _this.getStates();\n if (zoom !== newZoom) {\n notify && _this._adapter.notifyZoom(newZoom, newZoom > zoom);\n _this._adapter.changeImageZoom(newZoom, e);\n _this.setState({\n zoom: newZoom\n });\n }\n };\n // 当 visible 改变之后,预览组件完成首张图片加载后,启动预加载\n // 如: 1,2,3,4,5,6,7,8张图片, 点击第 4 张图片,preLoadGap 为 2\n // 当 visible 从 false 变为 true ,首先加载第 4 张图片,当第 4 张图片加载完成后,\n // 再按照 5,3,6,2的顺序预先加载这几张图片\n // When visible changes, the preview component finishes loading the first image and starts preloading\n // Such as: 1, 2, 3, 4, 5, 6, 7, 8 pictures, click the 4th picture, preLoadGap is 2\n // When visible changes from false to true , load the 4th image first, when the 4th image is loaded,\n // Preload these pictures in the order of 5, 3, 6, 2\n this.preloadGapImage = () => {\n const {\n preLoad,\n preLoadGap,\n infinite,\n currentIndex\n } = this.getProps();\n const {\n imgSrc\n } = this.getStates();\n if (!preLoad || typeof preLoadGap !== \"number\" || preLoadGap < 1) {\n return;\n }\n const preloadImages = getPreloadImagArr(imgSrc, currentIndex, preLoadGap, infinite);\n if (preloadImages.length === 0) {\n return;\n }\n const Img = new Image();\n let index = 0;\n function callback(e) {\n index++;\n if (index < preloadImages.length) {\n Img.src = preloadImages[index];\n }\n }\n Img.onload = e => {\n this.setLoadSuccessStatus(Img.src);\n callback(e);\n };\n Img.onerror = callback;\n Img.src = preloadImages[0];\n };\n // 在切换左右图片时,当被切换图片完成加载后,根据方向决定下一个预加载的图片\n // 如: 1,2,3,4,5,6,7,8张图片\n // 当 preLoadGap 为 2, 从第 5 张图片进行切换\n // - 如果向 右 切换到第 6 张,则第 6 张图片加载动作结束后(无论加载成功 or 失败),会预先加载第 8 张;\n // - 如果向 左 切换到第 4 张,则第 4 张图片加载动作结束后(无论加载成功 or 失败),会预先加载第 2 张;\n // When switching the left and right pictures, when the switched picture is loaded, the next preloaded picture is determined according to the direction\n // Such as: 1, 2, 3, 4, 5, 6, 7, 8 pictures\n // When preLoadGap is 2, switch from the 5th picture\n // - If you switch to the 6th image(direction is next), the 8th image will be preloaded after the 6th image is loaded (whether it succeeds or fails to load);\n // - If you switch to the 4th image(direction is prev), the second image will be preloaded after the 4th image is loaded (whether it succeeds or fails to load);\n this.preloadSingleImage = () => {\n const {\n preLoad,\n preLoadGap,\n infinite\n } = this.getProps();\n const {\n imgSrc,\n currentIndex,\n direction,\n imgLoadStatus\n } = this.getStates();\n if (!preLoad || typeof preLoadGap !== \"number\" || preLoadGap < 1) {\n return;\n }\n // 根据方向决定preload那个index\n // Determine the index of preload according to the direction\n let preloadIndex = currentIndex + (direction === \"prev\" ? -1 : 1) * preLoadGap;\n if (preloadIndex < 0 || preloadIndex >= imgSrc.length) {\n if (infinite) {\n preloadIndex = (preloadIndex + imgSrc.length) % imgSrc.length;\n } else {\n return;\n }\n }\n // 如果图片没有加载成功过,则进行预加载\n // If the image has not been loaded successfully, preload it\n if (!imgLoadStatus[preloadIndex]) {\n const Img = new Image();\n Img.onload = e => {\n this.setLoadSuccessStatus(imgSrc[preloadIndex]);\n };\n Img.src = imgSrc[preloadIndex];\n }\n };\n this.setLoadSuccessStatus = src => {\n const {\n imgLoadStatus\n } = this.getStates();\n const status = Object.assign({}, imgLoadStatus);\n status[src] = true;\n this.setState({\n imgLoadStatus: status\n });\n };\n this.onImageLoad = src => {\n const {\n preloadAfterVisibleChange\n } = this.getStates();\n this.setLoadSuccessStatus(src);\n // 当 preview 中当前加载的图片加载完成后,\n // 如果是在visible change之后的第一次加载,则启动加载该currentIndex左右preloadGap范围的图片\n // 如果是非第一次加载,是在左右切换图片,则根据方向预先加载单张图片\n // When the currently loaded image in Preview is loaded,\n // - It is the first load after visible change, start loading the images in the preloadGap range around the currentIndex\n // - It is not the first load, the image is switched left and right, and a single image is preloaded according to the direction\n if (preloadAfterVisibleChange) {\n this.preloadGapImage();\n this.setState({\n preloadAfterVisibleChange: false\n });\n } else {\n this.preloadSingleImage();\n }\n };\n }\n beforeShow() {\n this._adapter.registerKeyDownListener();\n this._adapter.disabledBodyScroll();\n this.updateTimer();\n }\n afterHide() {\n this._adapter.unregisterKeyDownListener();\n this._adapter.enabledBodyScroll();\n this.clearTimer();\n }\n}","import _isFunction from \"lodash/isFunction\";\nimport _isEqual from \"lodash/isEqual\";\nimport React from \"react\";\nimport BaseComponent from \"../_base/baseComponent\";\nimport PropTypes from \"prop-types\";\nimport { cssClasses, numbers } from '@douyinfe/semi-foundation/lib/es/image/constants';\nimport cls from \"classnames\";\nimport Portal from \"../_portal\";\nimport { IconArrowLeft, IconArrowRight } from \"@douyinfe/semi-icons\";\nimport Header from \"./previewHeader\";\nimport Footer from \"./previewFooter\";\nimport PreviewImage from \"./previewImage\";\nimport PreviewInnerFoundation from '@douyinfe/semi-foundation/lib/es/image/previewInnerFoundation';\nimport { PreviewContext } from \"./previewContext\";\nimport { getScrollbarWidth } from \"../_utils\";\nconst prefixCls = cssClasses.PREFIX;\nexport default class PreviewInner extends BaseComponent {\n get adapter() {\n var _this = this;\n return Object.assign(Object.assign({}, super.adapter), {\n getIsInGroup: () => this.isInGroup(),\n disabledBodyScroll: () => {\n const {\n getPopupContainer\n } = this.props;\n this.bodyOverflow = document.body.style.overflow || '';\n if (!getPopupContainer && this.bodyOverflow !== 'hidden') {\n document.body.style.overflow = 'hidden';\n document.body.style.width = `calc(${this.originBodyWidth || '100%'} - ${this.scrollBarWidth}px)`;\n }\n },\n enabledBodyScroll: () => {\n const {\n getPopupContainer\n } = this.props;\n if (!getPopupContainer && this.bodyOverflow !== 'hidden') {\n document.body.style.overflow = this.bodyOverflow;\n document.body.style.width = this.originBodyWidth;\n }\n },\n notifyChange: (index, direction) => {\n const {\n onChange,\n onPrev,\n onNext\n } = this.props;\n _isFunction(onChange) && onChange(index);\n if (direction === \"prev\") {\n onPrev && onPrev(index);\n } else {\n onNext && onNext(index);\n }\n },\n notifyZoom: (zoom, increase) => {\n const {\n onZoomIn,\n onZoomOut\n } = this.props;\n if (increase) {\n _isFunction(onZoomIn) && onZoomIn(zoom);\n } else {\n _isFunction(onZoomOut) && onZoomOut(zoom);\n }\n },\n notifyClose: () => {\n const {\n onClose\n } = this.props;\n _isFunction(onClose) && onClose();\n },\n notifyVisibleChange: visible => {\n const {\n onVisibleChange\n } = this.props;\n _isFunction(onVisibleChange) && onVisibleChange(visible);\n },\n notifyRatioChange: type => {\n const {\n onRatioChange\n } = this.props;\n _isFunction(onRatioChange) && onRatioChange(type);\n },\n notifyRotateChange: angle => {\n const {\n onRotateLeft\n } = this.props;\n _isFunction(onRotateLeft) && onRotateLeft(angle);\n },\n notifyDownload: (src, index) => {\n const {\n onDownload\n } = this.props;\n _isFunction(onDownload) && onDownload(src, index);\n },\n notifyDownloadError: src => {\n const {\n onDownloadError\n } = this.props;\n _isFunction(onDownloadError) && onDownloadError(src);\n },\n registerKeyDownListener: () => {\n window && window.addEventListener(\"keydown\", this.handleKeyDown);\n },\n unregisterKeyDownListener: () => {\n window && window.removeEventListener(\"keydown\", this.handleKeyDown);\n },\n getSetDownloadFunc: () => {\n var _a, _b;\n return (_b = (_a = this.context) === null || _a === void 0 ? void 0 : _a.setDownloadName) !== null && _b !== void 0 ? _b : this.props.setDownloadName;\n },\n isValidTarget: e => {\n const headerDom = this.headerRef && this.headerRef.current;\n const footerDom = this.footerRef && this.footerRef.current;\n const leftIconDom = this.leftIconRef && this.leftIconRef.current;\n const rightIconDom = this.rightIconRef && this.rightIconRef.current;\n const target = e.target;\n if (headerDom && headerDom.contains(target) || footerDom && footerDom.contains(target) || leftIconDom && leftIconDom.contains(target) || rightIconDom && rightIconDom.contains(target)) {\n // Move in the operation area, return false\n return false;\n }\n // Move in the preview area except the operation area, return true\n return true;\n },\n changeImageZoom: function () {\n var _a;\n ((_a = _this.imageRef) === null || _a === void 0 ? void 0 : _a.current) && _this.imageRef.current.foundation.changeZoom(...arguments);\n }\n });\n }\n constructor(props) {\n var _this2;\n super(props);\n _this2 = this;\n this.viewVisibleChange = () => {\n this.foundation.handleViewVisibleChange();\n };\n this.handleSwitchImage = direction => {\n this.foundation.handleSwitchImage(direction);\n };\n this.handleDownload = () => {\n this.foundation.handleDownload();\n };\n this.handlePreviewClose = e => {\n this.foundation.handlePreviewClose(e);\n };\n this.handleAdjustRatio = type => {\n this.foundation.handleAdjustRatio(type);\n };\n this.handleRotateImage = direction => {\n this.foundation.handleRotateImage(direction);\n };\n this.handleZoomImage = function (newZoom) {\n let notify = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n _this2.foundation.handleZoomImage(newZoom, notify);\n };\n this.handleMouseUp = e => {\n this.foundation.handleMouseUp(e.nativeEvent);\n };\n this.handleMouseMove = e => {\n this.foundation.handleMouseMove(e);\n };\n this.handleKeyDown = e => {\n this.foundation.handleKeyDown(e);\n };\n this.onImageError = () => {\n this.foundation.preloadSingleImage();\n };\n this.onImageLoad = src => {\n this.foundation.onImageLoad(src);\n };\n this.handleMouseDown = e => {\n this.foundation.handleMouseDown(e);\n };\n this.handleWheel = e => {\n this.foundation.handleWheel(e);\n };\n // 为什么通过 addEventListener 注册 wheel 事件而不是使用 onWheel 事件?\n // 因为 Passive Event Listeners(https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#improving_scrolling_performance_with_passive_listeners)\n // Passive Event Listeners 是一种优化技术,用于提高滚动性能。在默认情况下,浏览器会假设事件的监听器不会调用 \n // preventDefault() 方法来阻止事件的默认行为,从而允许进行一些优化操作,例如滚动平滑。\n // 对于 Image 而言,如果使用触控板,双指朝不同方向分开放大图片,则需要 preventDefault 防止页面整体放大。\n // Why register wheel event through addEventListener instead of using onWheel event?\n // Because of Passive Event Listeners(an optimization technique used to improve scrolling performance. By default, \n // the browser will assume that event listeners will not call preventDefault() method to prevent the default behavior of the event, \n // allowing some optimization operations such as scroll smoothing.)\n // For Image, if we use the trackpad and spread your fingers in different directions to enlarge the image, we need to preventDefault\n // to prevent the page from being enlarged as a whole.\n this.registryImageWrapRef = ref => {\n if (this.imageWrapRef) {\n this.imageWrapRef.removeEventListener(\"wheel\", this.handleWheel);\n }\n if (ref) {\n ref.addEventListener(\"wheel\", this.handleWheel, {\n passive: false\n });\n }\n this.imageWrapRef = ref;\n };\n this.state = {\n imgSrc: [],\n imgLoadStatus: new Map(),\n zoom: 0.1,\n currentIndex: 0,\n ratio: \"adaptation\",\n rotation: 0,\n viewerVisible: true,\n visible: false,\n preloadAfterVisibleChange: true,\n direction: \"\"\n };\n this.foundation = new PreviewInnerFoundation(this.adapter);\n this.bodyOverflow = '';\n this.originBodyWidth = '100%';\n this.scrollBarWidth = 0;\n this.imageWrapRef = null;\n this.imageRef = /*#__PURE__*/React.createRef();\n this.headerRef = /*#__PURE__*/React.createRef();\n this.footerRef = /*#__PURE__*/React.createRef();\n this.leftIconRef = /*#__PURE__*/React.createRef();\n this.rightIconRef = /*#__PURE__*/React.createRef();\n }\n static getDerivedStateFromProps(props, state) {\n const willUpdateStates = {};\n let src = [];\n if (props.visible) {\n // if src in props\n src = Array.isArray(props.src) ? props.src : [props.src];\n }\n if (!_isEqual(src, state.imgSrc)) {\n willUpdateStates.imgSrc = src;\n }\n if (props.visible !== state.visible) {\n willUpdateStates.visible = props.visible;\n if (props.visible) {\n willUpdateStates.preloadAfterVisibleChange = true;\n willUpdateStates.viewerVisible = true;\n willUpdateStates.rotation = 0;\n willUpdateStates.ratio = 'adaptation';\n }\n }\n if (\"currentIndex\" in props && props.currentIndex !== state.currentIndex) {\n willUpdateStates.currentIndex = props.currentIndex;\n // ratio will set to adaptation when change picture, \n // attention: If the ratio is controlled, the ratio should not change as the index changes\n willUpdateStates.ratio = 'adaptation';\n }\n return willUpdateStates;\n }\n componentDidMount() {\n this.scrollBarWidth = getScrollbarWidth();\n this.originBodyWidth = document.body.style.width;\n if (this.props.visible) {\n this.foundation.beforeShow();\n }\n }\n componentDidUpdate(prevProps, prevState) {\n if (prevProps.src !== this.props.src) {\n this.foundation.updateTimer();\n }\n // hide => show\n if (!prevProps.visible && this.props.visible) {\n this.foundation.beforeShow();\n }\n // show => hide\n if (prevProps.visible && !this.props.visible) {\n this.foundation.afterHide();\n }\n }\n componentWillUnmount() {\n this.foundation.clearTimer();\n }\n isInGroup() {\n return Boolean(this.context && this.context.isGroup);\n }\n render() {\n const {\n getPopupContainer,\n closable,\n zIndex,\n visible,\n className,\n style,\n infinite,\n zoomStep,\n crossOrigin,\n prevTip,\n nextTip,\n zoomInTip,\n zoomOutTip,\n rotateTip,\n downloadTip,\n adaptiveTip,\n originTip,\n showTooltip,\n disableDownload,\n renderPreviewMenu,\n renderHeader\n } = this.props;\n const {\n currentIndex,\n imgSrc,\n zoom,\n ratio,\n rotation,\n viewerVisible\n } = this.state;\n let wrapperStyle = {\n zIndex\n };\n if (getPopupContainer) {\n wrapperStyle = {\n zIndex,\n position: \"static\"\n };\n }\n const previewPrefixCls = `${prefixCls}-preview`;\n const previewWrapperCls = cls(previewPrefixCls, {\n [`${prefixCls}-hide`]: !visible,\n [`${previewPrefixCls}-popup`]: getPopupContainer\n }, className);\n const hideViewerCls = !viewerVisible ? `${previewPrefixCls}-hide` : \"\";\n const total = imgSrc.length;\n const showPrev = total !== 1 && (infinite || currentIndex !== 0);\n const showNext = total !== 1 && (infinite || currentIndex !== total - 1);\n return visible && /*#__PURE__*/React.createElement(Portal, {\n getPopupContainer: getPopupContainer,\n style: wrapperStyle\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: previewWrapperCls,\n style: style,\n onMouseDown: this.handleMouseDown,\n onMouseUp: this.handleMouseUp,\n ref: this.registryImageWrapRef,\n onMouseMove: this.handleMouseMove\n }, /*#__PURE__*/React.createElement(Header, {\n ref: this.headerRef,\n className: cls(hideViewerCls),\n onClose: this.handlePreviewClose,\n renderHeader: renderHeader,\n closable: closable\n }), /*#__PURE__*/React.createElement(PreviewImage, {\n ref: this.imageRef,\n src: imgSrc[currentIndex],\n onZoom: this.handleZoomImage,\n disableDownload: disableDownload,\n setRatio: this.handleAdjustRatio,\n zoom: zoom,\n ratio: ratio,\n rotation: rotation,\n crossOrigin: crossOrigin,\n onError: this.onImageError,\n onLoad: this.onImageLoad\n }), showPrev && (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions\n React.createElement(\"div\", {\n ref: this.leftIconRef,\n className: cls(`${previewPrefixCls}-icon`, `${previewPrefixCls}-prev`, hideViewerCls),\n onClick: () => this.handleSwitchImage(\"prev\")\n }, /*#__PURE__*/React.createElement(IconArrowLeft, {\n size: \"large\"\n }))), showNext && (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions\n React.createElement(\"div\", {\n ref: this.rightIconRef,\n className: cls(`${previewPrefixCls}-icon`, `${previewPrefixCls}-next`, hideViewerCls),\n onClick: () => this.handleSwitchImage(\"next\")\n }, /*#__PURE__*/React.createElement(IconArrowRight, {\n size: \"large\"\n }))), /*#__PURE__*/React.createElement(Footer, {\n forwardRef: this.footerRef,\n className: hideViewerCls,\n totalNum: total,\n curPage: currentIndex + 1,\n disabledPrev: !showPrev,\n disabledNext: !showNext,\n zoom: zoom * 100,\n step: zoomStep * 100,\n showTooltip: showTooltip,\n ratio: ratio,\n prevTip: prevTip,\n nextTip: nextTip,\n zIndex: zIndex,\n zoomInTip: zoomInTip,\n zoomOutTip: zoomOutTip,\n rotateTip: rotateTip,\n downloadTip: downloadTip,\n disableDownload: disableDownload,\n adaptiveTip: adaptiveTip,\n originTip: originTip,\n onPrev: () => this.handleSwitchImage(\"prev\"),\n onNext: () => this.handleSwitchImage(\"next\"),\n onZoomIn: this.handleZoomImage,\n onZoomOut: this.handleZoomImage,\n onDownload: this.handleDownload,\n onRotate: this.handleRotateImage,\n onAdjustRatio: this.handleAdjustRatio,\n renderPreviewMenu: renderPreviewMenu\n })));\n }\n}\nPreviewInner.contextType = PreviewContext;\nPreviewInner.propTypes = {\n style: PropTypes.object,\n className: PropTypes.string,\n visible: PropTypes.bool,\n src: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n currentIndex: PropTypes.number,\n defaultCurrentIndex: PropTypes.number,\n defaultVisible: PropTypes.bool,\n maskClosable: PropTypes.bool,\n closable: PropTypes.bool,\n zoomStep: PropTypes.number,\n infinite: PropTypes.bool,\n showTooltip: PropTypes.bool,\n closeOnEsc: PropTypes.bool,\n prevTip: PropTypes.string,\n nextTip: PropTypes.string,\n zoomInTip: PropTypes.string,\n zoomOutTip: PropTypes.string,\n downloadTip: PropTypes.string,\n adaptiveTip: PropTypes.string,\n originTip: PropTypes.string,\n lazyLoad: PropTypes.bool,\n preLoad: PropTypes.bool,\n preLoadGap: PropTypes.number,\n disableDownload: PropTypes.bool,\n viewerVisibleDelay: PropTypes.number,\n zIndex: PropTypes.number,\n maxZoom: PropTypes.number,\n minZoom: PropTypes.number,\n renderHeader: PropTypes.func,\n renderPreviewMenu: PropTypes.func,\n getPopupContainer: PropTypes.func,\n onVisibleChange: PropTypes.func,\n onChange: PropTypes.func,\n onClose: PropTypes.func,\n onZoomIn: PropTypes.func,\n onZoomOut: PropTypes.func,\n onPrev: PropTypes.func,\n onNext: PropTypes.func,\n onDownload: PropTypes.func,\n onRatioChange: PropTypes.func,\n onRotateLeft: PropTypes.func\n};\nPreviewInner.defaultProps = {\n showTooltip: false,\n zoomStep: 0.1,\n infinite: false,\n closeOnEsc: true,\n lazyLoad: false,\n preLoad: true,\n preLoadGap: 2,\n zIndex: numbers.DEFAULT_Z_INDEX,\n maskClosable: true,\n viewerVisibleDelay: 10000,\n maxZoom: 5,\n minZoom: 0.1\n};","import _isObject from \"lodash/isObject\";\nimport BaseFoundation from \"../base/foundation\";\nexport default class ImageFoundation extends BaseFoundation {\n constructor(adapter) {\n super(Object.assign({}, adapter));\n this.handleClick = e => {\n const {\n imageID,\n preview\n } = this.getProps();\n // if preview = false, then it cannot preview\n if (!preview) {\n return;\n }\n // if image in group, then use group's Preview components\n if (this._adapter.getIsInGroup()) {\n const {\n setCurrentIndex,\n handleVisibleChange\n } = this._adapter.getContexts();\n setCurrentIndex(imageID);\n handleVisibleChange(true);\n } else {\n // image isn't in group, then use it's own Preview components\n this.handlePreviewVisibleChange(true);\n }\n };\n this.handleLoaded = e => {\n const {\n onLoad\n } = this.getProps();\n onLoad && onLoad(e);\n this.setState({\n loadStatus: \"success\"\n });\n };\n this.handleError = e => {\n const {\n onError\n } = this.getProps();\n onError && onError(e);\n this.setState({\n loadStatus: \"error\"\n });\n };\n this.handlePreviewVisibleChange = newVisible => {\n const {\n preview\n } = this.getProps();\n if (_isObject(preview)) {\n const {\n onVisibleChange\n } = preview;\n onVisibleChange && onVisibleChange(newVisible);\n if (!(\"visible\" in preview)) {\n this.setState({\n previewVisible: newVisible\n });\n }\n } else {\n this.setState({\n previewVisible: newVisible\n });\n }\n };\n }\n}","import _omit from \"lodash/omit\";\nimport _isUndefined from \"lodash/isUndefined\";\nimport _isObject from \"lodash/isObject\";\nimport _isBoolean from \"lodash/isBoolean\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from \"react\";\nimport BaseComponent from \"../_base/baseComponent\";\nimport PropTypes from \"prop-types\";\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/image/constants';\nimport cls from \"classnames\";\nimport { IconUploadError, IconEyeOpened } from \"@douyinfe/semi-icons\";\nimport PreviewInner from \"./previewInner\";\nimport { PreviewContext } from \"./previewContext\";\nimport ImageFoundation from '@douyinfe/semi-foundation/lib/es/image/imageFoundation';\nimport LocaleConsumer from \"../locale/localeConsumer\";\nimport Skeleton from \"../skeleton\";\nimport '@douyinfe/semi-foundation/lib/es/image/image.css';\nconst prefixCls = cssClasses.PREFIX;\nexport default class Image extends BaseComponent {\n get adapter() {\n return Object.assign(Object.assign({}, super.adapter), {\n getIsInGroup: () => this.isInGroup()\n });\n }\n constructor(props) {\n super(props);\n this.handleClick = e => {\n this.foundation.handleClick(e);\n };\n this.handleLoaded = e => {\n this.foundation.handleLoaded(e);\n };\n this.handleError = e => {\n this.foundation.handleError(e);\n };\n this.handlePreviewVisibleChange = visible => {\n this.foundation.handlePreviewVisibleChange(visible);\n };\n this.renderDefaultLoading = () => {\n const {\n width,\n height\n } = this.props;\n return /*#__PURE__*/React.createElement(Skeleton.Image, {\n style: {\n width,\n height\n }\n });\n };\n this.renderDefaultError = () => {\n const prefixClsName = `${prefixCls}-status`;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: prefixClsName\n }, /*#__PURE__*/React.createElement(IconUploadError, {\n size: \"extra-large\"\n }));\n };\n this.renderLoad = () => {\n const prefixClsName = `${prefixCls}-status`;\n const {\n placeholder\n } = this.props;\n return placeholder ? (/*#__PURE__*/React.createElement(\"div\", {\n className: prefixClsName\n }, placeholder)) : this.renderDefaultLoading();\n };\n this.renderError = () => {\n const {\n fallback\n } = this.props;\n const prefixClsName = `${prefixCls}-status`;\n const fallbackNode = typeof fallback === \"string\" ? (/*#__PURE__*/React.createElement(\"img\", {\n style: {\n width: \"100%\",\n height: \"100%\"\n },\n src: fallback,\n alt: \"fallback\"\n })) : fallback;\n return fallback ? (/*#__PURE__*/React.createElement(\"div\", {\n className: prefixClsName\n }, fallbackNode)) : this.renderDefaultError();\n };\n this.renderExtra = () => {\n const {\n loadStatus\n } = this.state;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-overlay`\n }, loadStatus === \"error\" && this.renderError(), loadStatus === \"loading\" && this.renderLoad());\n };\n this.getLocalTextByKey = key => (/*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Image\"\n }, locale => locale[key]));\n this.renderMask = () => (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-mask`\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-mask-info`\n }, /*#__PURE__*/React.createElement(IconEyeOpened, {\n size: \"extra-large\"\n }), /*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixCls}-mask-info-text`\n }, this.getLocalTextByKey(\"preview\")))));\n this.state = {\n src: \"\",\n loadStatus: \"loading\",\n previewVisible: false\n };\n this.foundation = new ImageFoundation(this.adapter);\n this.imgRef = /*#__PURE__*/React.createRef();\n }\n static getDerivedStateFromProps(props, state) {\n const willUpdateStates = {};\n if (props.src !== state.src) {\n willUpdateStates.src = props.src;\n willUpdateStates.loadStatus = \"loading\";\n }\n if (_isObject(props.preview)) {\n const {\n visible\n } = props.preview;\n if (_isBoolean(visible)) {\n willUpdateStates.previewVisible = visible;\n }\n }\n return willUpdateStates;\n }\n isInGroup() {\n return Boolean(this.context && this.context.isGroup);\n }\n isLazyLoad() {\n if (this.context) {\n return this.context.lazyLoad;\n }\n return false;\n }\n render() {\n var _a;\n const {\n src,\n loadStatus,\n previewVisible\n } = this.state;\n const _b = this.props,\n {\n src: picSrc,\n width,\n height,\n alt,\n style,\n className,\n crossOrigin,\n preview,\n fallback,\n placeholder,\n imageID,\n setDownloadName,\n imgCls,\n imgStyle\n } = _b,\n restProps = __rest(_b, [\"src\", \"width\", \"height\", \"alt\", \"style\", \"className\", \"crossOrigin\", \"preview\", \"fallback\", \"placeholder\", \"imageID\", \"setDownloadName\", \"imgCls\", \"imgStyle\"]);\n const outerStyle = Object.assign({\n width,\n height\n }, style);\n const outerCls = cls(prefixCls, className);\n const canPreview = loadStatus === \"success\" && preview && !this.isInGroup();\n const showPreviewCursor = preview && loadStatus === \"success\";\n const previewSrc = _isObject(preview) ? (_a = preview.src) !== null && _a !== void 0 ? _a : src : src;\n const previewProps = _isObject(preview) && canPreview ? Object.assign(Object.assign({}, _omit(preview, ['className', 'style', 'previewCls', 'previewStyle'])), {\n className: preview === null || preview === void 0 ? void 0 : preview.previewCls,\n style: preview === null || preview === void 0 ? void 0 : preview.previewStyle\n }) : {};\n return /*#__PURE__*/React.createElement(\"div\", {\n style: outerStyle,\n className: outerCls,\n onClick: this.handleClick\n }, /*#__PURE__*/React.createElement(\"img\", Object.assign({\n ref: this.imgRef\n }, restProps, {\n src: this.isInGroup() && this.isLazyLoad() ? undefined : src,\n \"data-src\": src,\n alt: alt,\n style: imgStyle,\n className: cls(`${prefixCls}-img`, {\n [`${prefixCls}-img-preview`]: showPreviewCursor,\n [`${prefixCls}-img-error`]: loadStatus === \"error\",\n [imgCls]: Boolean(imgCls)\n }),\n width: width,\n height: height,\n crossOrigin: crossOrigin,\n onError: this.handleError,\n onLoad: this.handleLoaded\n })), loadStatus !== \"success\" && this.renderExtra(), canPreview && /*#__PURE__*/React.createElement(PreviewInner, Object.assign({}, previewProps, {\n src: previewSrc,\n visible: previewVisible,\n onVisibleChange: this.handlePreviewVisibleChange,\n crossOrigin: !_isUndefined(crossOrigin) ? crossOrigin : previewProps === null || previewProps === void 0 ? void 0 : previewProps.crossOrigin,\n setDownloadName: setDownloadName\n })));\n }\n}\nImage.isSemiImage = true;\nImage.contextType = PreviewContext;\nImage.propTypes = {\n style: PropTypes.object,\n className: PropTypes.string,\n src: PropTypes.string,\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n alt: PropTypes.string,\n placeholder: PropTypes.node,\n fallback: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n preview: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\n onLoad: PropTypes.func,\n onError: PropTypes.func,\n onClick: PropTypes.func,\n crossOrigin: PropTypes.string,\n imageID: PropTypes.number\n};\nImage.defaultProps = {\n preview: true\n};","import Image from \"./image\";\nimport PreviewInner from \"./previewInner\";\nimport Preview from \"./preview\";\nimport '@douyinfe/semi-foundation/lib/es/image/image.css';\nexport default Image;\nexport { PreviewInner, Preview };","import BaseFoundation from \"../base/foundation\";\nexport default class PreviewFoundation extends BaseFoundation {\n constructor() {\n super(...arguments);\n this.handleVisibleChange = newVisible => {\n const {\n visible,\n onVisibleChange\n } = this.getProps();\n if (!(visible in this.getProps())) {\n this.setState({\n visible: newVisible\n });\n }\n onVisibleChange && onVisibleChange(newVisible);\n };\n this.handleCurrentIndexChange = index => {\n const {\n currentIndex,\n onChange\n } = this.getProps();\n if (!(currentIndex in this.getProps())) {\n this.setState({\n currentIndex: index\n });\n }\n onChange && onChange(index);\n };\n }\n}","import _omit from \"lodash/omit\";\nimport _isEqual from \"lodash/isEqual\";\nimport _isObject from \"lodash/isObject\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { isValidElement } from \"react\";\nimport { PreviewContext } from \"./previewContext\";\nimport BaseComponent from \"../_base/baseComponent\";\nimport PropTypes from \"prop-types\";\nimport PreviewInner from \"./previewInner\";\nimport PreviewFoundation from '@douyinfe/semi-foundation/lib/es/image/previewFoundation';\nimport { getUuidShort } from '@douyinfe/semi-foundation/lib/es/utils/uuid';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/image/constants';\nimport '@douyinfe/semi-foundation/lib/es/image/image.css';\nimport cls from \"classnames\";\nconst prefixCls = cssClasses.PREFIX;\nexport default class Preview extends BaseComponent {\n get adapter() {\n return Object.assign({}, super.adapter);\n }\n constructor(props) {\n super(props);\n this.observerImages = () => {\n if (this.previewObserver) {\n // cancel the observation of all elements of the previous observer\n this.previewObserver.disconnect();\n } else {\n this.previewObserver = new IntersectionObserver(entries => {\n entries.forEach(item => {\n var _a;\n const src = (_a = item.target.dataset) === null || _a === void 0 ? void 0 : _a.src;\n if (item.isIntersecting && src) {\n item.target.src = src;\n item.target.removeAttribute(\"data-src\");\n this.previewObserver.unobserve(item.target);\n }\n });\n }, {\n root: document.querySelector(`#${this.previewGroupId}`),\n rootMargin: this.props.lazyLoadMargin\n });\n }\n const allImgElement = document.querySelectorAll(`.${prefixCls}-img`);\n allImgElement.forEach(item => this.previewObserver.observe(item));\n };\n this.handleVisibleChange = newVisible => {\n this.foundation.handleVisibleChange(newVisible);\n };\n this.handleCurrentIndexChange = index => {\n this.foundation.handleCurrentIndexChange(index);\n };\n this.loopImageIndex = () => {\n const {\n children\n } = this.props;\n let index = 0;\n const srcListInChildren = [];\n const titles = [];\n const loop = children => {\n return React.Children.map(children, child => {\n var _a;\n if (child && child.props && child.type) {\n if (child.type.isSemiImage) {\n const {\n src,\n preview,\n alt\n } = child.props;\n if (preview) {\n const previewSrc = _isObject(preview) ? (_a = preview.src) !== null && _a !== void 0 ? _a : src : src;\n srcListInChildren.push(previewSrc);\n titles.push(preview === null || preview === void 0 ? void 0 : preview.previewTitle);\n return /*#__PURE__*/React.cloneElement(child, {\n imageID: index++\n });\n }\n return child;\n }\n }\n if (child && child.props && child.props.children) {\n return /*#__PURE__*/React.cloneElement(child, {\n children: loop(child.props.children)\n });\n }\n return child;\n });\n };\n return {\n srcListInChildren,\n newChildren: loop(children),\n titles\n };\n };\n this.state = {\n currentIndex: props.currentIndex || props.defaultCurrentIndex || 0,\n visible: props.visible || props.currentDefaultVisible || false\n };\n this.foundation = new PreviewFoundation(this.adapter);\n this.previewGroupId = getUuidShort({\n prefix: \"semi-image-preview-group\",\n length: 4\n });\n this.previewRef = /*#__PURE__*/React.createRef();\n }\n componentDidMount() {\n this.props.lazyLoad && this.observerImages();\n }\n componentDidUpdate(prevProps) {\n if (this.props.lazyLoad) {\n const prevChildrenKeys = React.Children.toArray(prevProps.children).map(child => /*#__PURE__*/isValidElement(child) ? child.key : null);\n const currChildrenKeys = React.Children.toArray(this.props.children).map(child => /*#__PURE__*/isValidElement(child) ? child.key : null);\n if (!_isEqual(prevChildrenKeys, currChildrenKeys)) {\n this.observerImages();\n }\n }\n }\n static getDerivedStateFromProps(props, state) {\n const willUpdateStates = {};\n if (\"currentIndex\" in props && props.currentIndex !== state.currentIndex) {\n willUpdateStates.currentIndex = props.currentIndex;\n }\n if (\"visible\" in props && props.visible !== state.visible) {\n willUpdateStates.visible = props.visible;\n }\n return willUpdateStates;\n }\n componentWillUnmount() {\n if (this.previewObserver) {\n this.previewObserver.disconnect();\n this.previewObserver = null;\n }\n }\n render() {\n const _a = this.props,\n {\n src,\n className,\n style,\n lazyLoad,\n setDownloadName\n } = _a,\n restProps = __rest(_a, [\"src\", \"className\", \"style\", \"lazyLoad\", \"setDownloadName\"]);\n const previewInnerProps = Object.assign(Object.assign({}, _omit(restProps, ['previewCls', 'previewStyle'])), {\n className: restProps === null || restProps === void 0 ? void 0 : restProps.previewCls,\n style: restProps === null || restProps === void 0 ? void 0 : restProps.previewStyle\n });\n const {\n currentIndex,\n visible\n } = this.state;\n const {\n srcListInChildren,\n newChildren,\n titles\n } = this.loopImageIndex();\n const srcArr = Array.isArray(src) ? src : typeof src === \"string\" ? [src] : [];\n const finalSrcList = [...srcArr, ...srcListInChildren];\n return /*#__PURE__*/React.createElement(PreviewContext.Provider, {\n value: {\n isGroup: true,\n previewSrc: finalSrcList,\n titles: titles,\n currentIndex,\n visible,\n lazyLoad,\n previewObserver: this.previewObserver,\n setCurrentIndex: this.handleCurrentIndexChange,\n handleVisibleChange: this.handleVisibleChange,\n setDownloadName: setDownloadName\n }\n }, /*#__PURE__*/React.createElement(\"div\", {\n id: this.previewGroupId,\n style: style,\n className: cls(`${prefixCls}-preview-group`, className)\n }, newChildren), /*#__PURE__*/React.createElement(PreviewInner, Object.assign({}, previewInnerProps, {\n ref: this.previewRef,\n src: finalSrcList,\n currentIndex: currentIndex,\n visible: visible,\n onVisibleChange: this.handleVisibleChange\n })));\n }\n}\nPreview.propTypes = {\n style: PropTypes.object,\n className: PropTypes.string,\n visible: PropTypes.bool,\n src: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n currentIndex: PropTypes.number,\n defaultCurrentIndex: PropTypes.number,\n defaultVisible: PropTypes.bool,\n maskClosable: PropTypes.bool,\n closable: PropTypes.bool,\n zoomStep: PropTypes.number,\n infinite: PropTypes.bool,\n showTooltip: PropTypes.bool,\n closeOnEsc: PropTypes.bool,\n prevTip: PropTypes.string,\n nextTip: PropTypes.string,\n zoomInTip: PropTypes.string,\n zoomOutTip: PropTypes.string,\n downloadTip: PropTypes.string,\n adaptiveTip: PropTypes.string,\n originTip: PropTypes.string,\n lazyLoad: PropTypes.bool,\n lazyLoadMargin: PropTypes.string,\n preLoad: PropTypes.bool,\n preLoadGap: PropTypes.number,\n previewCls: PropTypes.string,\n previewStyle: PropTypes.object,\n disableDownload: PropTypes.bool,\n zIndex: PropTypes.number,\n renderHeader: PropTypes.func,\n renderPreviewMenu: PropTypes.func,\n getPopupContainer: PropTypes.func,\n onVisibleChange: PropTypes.func,\n onChange: PropTypes.func,\n onClose: PropTypes.func,\n onZoomIn: PropTypes.func,\n onZoomOut: PropTypes.func,\n onPrev: PropTypes.func,\n onNext: PropTypes.func,\n onDownload: PropTypes.func,\n onRotateLeft: PropTypes.func,\n onRatioChange: PropTypes.func\n};\nPreview.defaultProps = {\n src: [],\n lazyLoad: true,\n lazyLoadMargin: \"0px 100px 100px 0px\",\n closable: true\n};","import React from 'react';\nconst LocaleContext = /*#__PURE__*/React.createContext(null);\nexport default LocaleContext;","import { zhCN } from 'date-fns/locale';\nconst local = {\n code: 'zh-CN',\n dateFnsLocale: zhCN,\n Pagination: {\n pageSize: '每页条数:${pageSize}',\n total: '总页数:${total}',\n jumpTo: '跳至',\n page: '页'\n },\n Modal: {\n confirm: '确定',\n cancel: '取消'\n },\n Tabs: {\n more: \"更多\"\n },\n TimePicker: {\n placeholder: {\n time: '请选择时间',\n timeRange: '请选择时间范围'\n },\n begin: '开始时间',\n end: '结束时间',\n hour: '时',\n minute: '分',\n second: '秒',\n AM: '上午',\n PM: '下午'\n },\n DatePicker: {\n placeholder: {\n date: '请选择日期',\n dateTime: '请选择日期及时间',\n dateRange: ['开始日期', '结束日期'],\n dateTimeRange: ['开始日期', '结束日期'],\n monthRange: ['开始月份', '结束月份']\n },\n presets: '快捷选择',\n footer: {\n confirm: '确定',\n cancel: '取消'\n },\n selectDate: '返回选择日期',\n selectTime: '选择时间',\n year: '年',\n month: '月',\n day: '日',\n monthText: '${year}年 ${month}',\n months: {\n 1: '1月',\n 2: '2月',\n 3: '3月',\n 4: '4月',\n 5: '5月',\n 6: '6月',\n 7: '7月',\n 8: '8月',\n 9: '9月',\n 10: '10月',\n 11: '11月',\n 12: '12月'\n },\n // timepicker scrollwheel里只需要展示[1、2……],所以这里的fullMonths根据UI定制了\n fullMonths: {\n 1: '1',\n 2: '2',\n 3: '3',\n 4: '4',\n 5: '5',\n 6: '6',\n 7: '7',\n 8: '8',\n 9: '9',\n 10: '10',\n 11: '11',\n 12: '12'\n },\n weeks: {\n Mon: '一',\n Tue: '二',\n Wed: '三',\n Thu: '四',\n Fri: '五',\n Sat: '六',\n Sun: '日'\n },\n localeFormatToken: {\n FORMAT_SWITCH_DATE: 'yyyy-MM-dd'\n }\n },\n Navigation: {\n collapseText: '收起侧边栏',\n expandText: '展开侧边栏'\n },\n Popconfirm: {\n confirm: '确定',\n cancel: '取消'\n },\n Table: {\n emptyText: '暂无数据',\n pageText: '显示第 ${currentStart} 条-第 ${currentEnd} 条,共 ${total} 条',\n descend: '点击降序',\n ascend: '点击升序',\n cancelSort: '取消排序'\n },\n Select: {\n emptyText: '暂无数据',\n createText: '创建'\n },\n Cascader: {\n emptyText: '暂无数据'\n },\n Tree: {\n emptyText: '暂无数据',\n searchPlaceholder: '搜索'\n },\n List: {\n emptyText: '暂无数据'\n },\n Calendar: {\n allDay: '全天',\n AM: '上午${time}时',\n PM: '下午${time}时',\n datestring: '日',\n remaining: '还有${remained}项'\n },\n Upload: {\n mainText: '点击上传文件或拖拽文件到这里',\n illegalTips: '不支持此类型文件',\n legalTips: '松手开始上传',\n retry: '重试',\n replace: '替换文件',\n clear: '清空',\n selectedFiles: '已选择文件',\n illegalSize: '文件尺寸不合法',\n fail: '上传失败'\n },\n TreeSelect: {\n searchPlaceholder: '搜索'\n },\n Typography: {\n copy: '复制',\n copied: '复制成功',\n expand: '展开',\n collapse: '收起'\n },\n Transfer: {\n emptyLeft: '暂无数据',\n emptySearch: '无搜索结果',\n emptyRight: '暂无内容,可从左侧勾选',\n placeholder: '搜索',\n clear: '清空',\n selectAll: '全选',\n clearSelectAll: '取消全选',\n total: '总个数:${total}',\n selected: '已选个数:${total}'\n },\n Form: {\n optional: '(可选)'\n },\n Image: {\n preview: '预览',\n loading: '加载中',\n loadError: '加载失败',\n prevTip: '上一张',\n nextTip: '下一张',\n zoomInTip: '放大',\n zoomOutTip: '缩小',\n rotateTip: '旋转',\n downloadTip: '下载',\n adaptiveTip: '适应页面',\n originTip: '原始尺寸'\n },\n Chat: {\n deleteConfirm: '确认删除该会话吗?',\n clearContext: '上下文已清除',\n copySuccess: '复制成功',\n stop: '停止',\n copy: '复制',\n copied: '复制成功',\n dropAreaText: '将文件放到这里'\n }\n};\n// 中文\nexport default local;","import _get from \"lodash/get\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport LocaleContext from './context';\nimport ConfigContext from '../configProvider/context';\nimport DefaultLocale from './source/zh_CN';\nexport default class LocaleConsumer extends Component {\n renderChildren(localeData, children) {\n const {\n componentName\n } = this.props;\n let locale = localeData;\n if (!(localeData === null || localeData === void 0 ? void 0 : localeData.code)) {\n locale = DefaultLocale;\n }\n /**\n * dateFnsLocale is used to format the date into a local date\n * example:\n * import { zhCN } from \"date-fns/locale\";\n * format(new Date(\"2021-04-29\"), \"yyyy-MM-dd EEEE\")\n * => '2021-04-29 Thursday' (默认 locale 为 en-US)\n * format(new Date('2021-04-29'), \"yyyy-MM-dd EEEE\", { locale: zhCN })\n * => '2021-04-29 星期四'\n */\n const defaultFnsLocale = _get(DefaultLocale, 'dateFnsLocale');\n const dateFnsLocale = _get(locale, 'dateFnsLocale', defaultFnsLocale);\n return children(locale[componentName], locale.code, dateFnsLocale);\n }\n render() {\n const {\n children\n } = this.props;\n return /*#__PURE__*/React.createElement(ConfigContext.Consumer, null, _ref => {\n let {\n locale\n } = _ref;\n return /*#__PURE__*/React.createElement(LocaleContext.Consumer, null, localeData => this.renderChildren(locale || localeData, children));\n });\n }\n}\nLocaleConsumer.propTypes = {\n componentName: PropTypes.string.isRequired,\n children: PropTypes.any\n};\nLocaleConsumer.defaultProps = {\n componentName: ''\n};","import _get from \"lodash/get\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { numbers, cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/popover/constants';\nconst Arrow = function () {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n position = '',\n className,\n arrowStyle,\n popStyle\n } = props,\n rest = __rest(props, [\"position\", \"className\", \"arrowStyle\", \"popStyle\"]);\n const isVertical = position.indexOf('top') === 0 || position.indexOf('bottom') === 0;\n const cls = classnames(className, cssClasses.ARROW);\n const borderOpacity = _get(arrowStyle, 'borderOpacity', strings.DEFAULT_ARROW_STYLE.borderOpacity);\n const bgColor = _get(arrowStyle, 'backgroundColor', _get(popStyle, 'backgroundColor', strings.DEFAULT_ARROW_STYLE.backgroundColor));\n const borderColor = _get(arrowStyle, 'borderColor', _get(popStyle, 'borderColor', strings.DEFAULT_ARROW_STYLE.borderColor));\n const wrapProps = Object.assign(Object.assign({}, rest), {\n width: numbers.ARROW_BOUNDING.width,\n height: numbers.ARROW_BOUNDING.height,\n xmlns: 'http://www.w3.org/2000/svg',\n className: cls\n });\n return isVertical ? (/*#__PURE__*/React.createElement(\"svg\", Object.assign({}, wrapProps), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0.5L0 1.5C4 1.5, 5.5 3, 7.5 5S10,8 12,8S14.5 7, 16.5 5S20,1.5 24,1.5L24 0.5L0 0.5z\",\n fill: borderColor,\n opacity: borderOpacity\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0L0 1C4 1, 5.5 2, 7.5 4S10,7 12,7S14.5 6, 16.5 4S20,1 24,1L24 0L0 0z\",\n fill: bgColor\n }))) : (/*#__PURE__*/React.createElement(\"svg\", Object.assign({}, wrapProps), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0.5 0L1.5 0C1.5 4, 3 5.5, 5 7.5S8,10 8,12S7 14.5, 5 16.5S1.5,20 1.5,24L0.5 24L0.5 0z\",\n fill: borderColor,\n opacity: borderOpacity\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0L1 0C1 4, 2 5.5, 4 7.5S7,10 7,12S6 14.5, 4 16.5S1,20 1,24L0 24L0 0z\",\n fill: bgColor\n })));\n};\nArrow.propTypes = {\n position: PropTypes.string,\n className: PropTypes.string,\n arrowStyle: PropTypes.object,\n popStyle: PropTypes.object\n};\nexport default Arrow;","import _noop from \"lodash/noop\";\nimport _isFunction from \"lodash/isFunction\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport ConfigContext from '../configProvider/context';\nimport { cssClasses, strings, numbers } from '@douyinfe/semi-foundation/lib/es/popover/constants';\nimport Tooltip from '../tooltip/index';\nimport Arrow from './Arrow';\nimport '@douyinfe/semi-foundation/lib/es/popover/popover.css';\nimport isNullOrUndefined from '@douyinfe/semi-foundation/lib/es/utils/isNullOrUndefined';\nimport { getDefaultPropsFromGlobalConfig } from \"../_utils\";\nconst positionSet = strings.POSITION_SET;\nconst triggerSet = strings.TRIGGER_SET;\nclass Popover extends React.PureComponent {\n constructor(props) {\n super(props);\n /**\n * focus on tooltip trigger\n */\n this.focusTrigger = () => {\n var _a;\n (_a = this.tooltipRef.current) === null || _a === void 0 ? void 0 : _a.focusTrigger();\n };\n this.renderPopCard = _ref => {\n let {\n initialFocusRef\n } = _ref;\n const {\n content,\n contentClassName,\n prefixCls\n } = this.props;\n const {\n direction\n } = this.context;\n const popCardCls = classNames(prefixCls, contentClassName, {\n [`${prefixCls}-rtl`]: direction === 'rtl'\n });\n const contentNode = this.renderContentNode({\n initialFocusRef,\n content\n });\n return /*#__PURE__*/React.createElement(\"div\", {\n className: popCardCls\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-content`\n }, contentNode));\n };\n this.renderContentNode = props => {\n const {\n initialFocusRef,\n content\n } = props;\n const contentProps = {\n initialFocusRef\n };\n return !_isFunction(content) ? content : content(contentProps);\n };\n this.tooltipRef = /*#__PURE__*/React.createRef();\n }\n render() {\n const _a = this.props,\n {\n children,\n prefixCls,\n showArrow,\n arrowStyle = {},\n arrowBounding,\n position,\n style,\n trigger\n } = _a,\n attr = __rest(_a, [\"children\", \"prefixCls\", \"showArrow\", \"arrowStyle\", \"arrowBounding\", \"position\", \"style\", \"trigger\"]);\n let {\n spacing\n } = this.props;\n const arrowProps = {\n position,\n className: '',\n popStyle: style,\n arrowStyle\n };\n const arrow = showArrow ? /*#__PURE__*/React.createElement(Arrow, Object.assign({}, arrowProps)) : false;\n if (isNullOrUndefined(spacing)) {\n spacing = showArrow ? numbers.SPACING_WITH_ARROW : numbers.SPACING;\n }\n const role = trigger === 'click' || trigger === 'custom' ? 'dialog' : 'tooltip';\n return /*#__PURE__*/React.createElement(Tooltip, Object.assign({\n guardFocus: true,\n ref: this.tooltipRef\n }, attr, {\n trigger: trigger,\n position: position,\n style: style,\n content: this.renderPopCard,\n prefixCls: prefixCls,\n spacing: spacing,\n showArrow: arrow,\n arrowBounding: arrowBounding,\n role: role\n }), children);\n }\n}\nPopover.contextType = ConfigContext;\nPopover.propTypes = {\n children: PropTypes.node,\n content: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n visible: PropTypes.bool,\n autoAdjustOverflow: PropTypes.bool,\n motion: PropTypes.bool,\n position: PropTypes.oneOf(positionSet),\n // getPopupContainer: PropTypes.func,\n margin: PropTypes.oneOfType([PropTypes.number, PropTypes.object]),\n mouseEnterDelay: PropTypes.number,\n mouseLeaveDelay: PropTypes.number,\n trigger: PropTypes.oneOf(triggerSet).isRequired,\n contentClassName: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n onVisibleChange: PropTypes.func,\n onClickOutSide: PropTypes.func,\n style: PropTypes.object,\n spacing: PropTypes.oneOfType([PropTypes.number, PropTypes.object]),\n zIndex: PropTypes.number,\n showArrow: PropTypes.bool,\n arrowStyle: PropTypes.shape({\n borderColor: PropTypes.string,\n backgroundColor: PropTypes.string,\n borderOpacity: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n }),\n arrowPointAtCenter: PropTypes.bool,\n arrowBounding: PropTypes.object,\n prefixCls: PropTypes.string,\n guardFocus: PropTypes.bool,\n disableArrowKeyDown: PropTypes.bool\n};\nPopover.__SemiComponentName__ = \"Popover\";\nPopover.defaultProps = getDefaultPropsFromGlobalConfig(Popover.__SemiComponentName__, {\n arrowBounding: numbers.ARROW_BOUNDING,\n showArrow: false,\n autoAdjustOverflow: true,\n zIndex: numbers.DEFAULT_Z_INDEX,\n motion: true,\n trigger: 'hover',\n cancelText: 'No',\n okText: 'Yes',\n position: 'bottom',\n prefixCls: cssClasses.PREFIX,\n onClickOutSide: _noop,\n onEscKeyDown: _noop,\n closeOnEsc: true,\n returnFocusOnClose: true,\n guardFocus: true,\n disableFocusListener: true\n});\nexport default Popover;","import React from 'react';\nimport { findDOMNode } from 'react-dom';\nimport PropTypes from 'prop-types';\nimport BaseComponent from '../_base/baseComponent';\nexport var ObserverProperty;\n(function (ObserverProperty) {\n ObserverProperty[\"Width\"] = \"width\";\n ObserverProperty[\"Height\"] = \"height\";\n ObserverProperty[\"All\"] = \"all\";\n})(ObserverProperty || (ObserverProperty = {}));\nexport default class ReactResizeObserver extends BaseComponent {\n constructor(props) {\n var _this;\n super(props);\n _this = this;\n this.formerPropertyValue = new Map();\n this.getElement = () => {\n try {\n // using findDOMNode for two reasons:\n // 1. cloning to insert a ref is unwieldy and not performant.\n // 2. ensure that we resolve to an actual DOM node (instead of any JSX ref instance).\n return findDOMNode(this.childNode || this);\n } catch (error) {\n // swallow error if findDOMNode is run on unmounted component.\n return null;\n }\n };\n this.handleResizeEventTriggered = entries => {\n var _a, _b, _c, _d;\n if (this.props.observerProperty === ObserverProperty.All) {\n (_b = (_a = this.props).onResize) === null || _b === void 0 ? void 0 : _b.call(_a, entries);\n } else {\n const finalEntries = [];\n for (const entry of entries) {\n if (this.formerPropertyValue.has(entry.target)) {\n if (entry.contentRect[this.props.observerProperty] !== this.formerPropertyValue.get(entry.target)) {\n this.formerPropertyValue.set(entry.target, entry.contentRect[this.props.observerProperty]);\n finalEntries.push(entry);\n }\n } else {\n this.formerPropertyValue.set(entry.target, entry.contentRect[this.props.observerProperty]);\n finalEntries.push(entry);\n }\n }\n if (finalEntries.length > 0) {\n (_d = (_c = this.props).onResize) === null || _d === void 0 ? void 0 : _d.call(_c, finalEntries);\n }\n }\n };\n this.observeElement = function () {\n let force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n const element = _this.getElement();\n if (!_this.observer) {\n _this.observer = new ResizeObserver(_this.handleResizeEventTriggered);\n }\n if (!(element && element instanceof Element)) {\n // stop everything if not defined\n _this.observer.disconnect();\n return;\n }\n if (element === _this.element && !force) {\n // abort if given same element -- nothing to update (unless forced)\n return;\n } else {\n // clear observer list if new element\n _this.observer.disconnect();\n // remember element reference for next time\n _this.element = element;\n }\n // observer callback is invoked immediately when observing new elements\n _this.observer.observe(element);\n if (_this.props.observeParent && element.parentNode && element.parentNode.ownerDocument && element.parentNode.ownerDocument.defaultView && element.parentNode instanceof element.parentNode.ownerDocument.defaultView.HTMLElement) {\n _this._parentNode = element.parentNode;\n _this.observer.observe(_this._parentNode);\n }\n };\n this.mergeRef = (ref, node) => {\n this.childNode = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (typeof ref === 'object' && ref && 'current' in ref) {\n ref.current = node;\n }\n };\n if (globalThis['ResizeObserver']) {\n this.observer = new ResizeObserver(this.handleResizeEventTriggered);\n }\n }\n componentDidMount() {\n var _a;\n (_a = this.observeElement) === null || _a === void 0 ? void 0 : _a.call(this);\n }\n componentDidUpdate(prevProps) {\n var _a;\n (_a = this.observeElement) === null || _a === void 0 ? void 0 : _a.call(this, this.props.observeParent !== prevProps.observeParent);\n }\n componentWillUnmount() {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n this.element = null;\n }\n }\n render() {\n const child = React.Children.only(this.props.children);\n const {\n ref\n } = child;\n return /*#__PURE__*/React.cloneElement(child, {\n ref: node => this.mergeRef(ref, node)\n });\n }\n}\nReactResizeObserver.propTypes = {\n onResize: PropTypes.func,\n observeParent: PropTypes.bool,\n observerProperty: PropTypes.string,\n delayTick: PropTypes.number\n};\nReactResizeObserver.defaultProps = {\n onResize: () => {},\n observeParent: false,\n observerProperty: \"all\",\n delayTick: 0\n};","import _isEmpty from \"lodash/isEmpty\";\nimport _get from \"lodash/get\";\nimport BaseFoundation from '../base/foundation';\nimport { handlePrevent } from '../utils/a11y';\nconst REGS = {\n TOP: /top/i,\n RIGHT: /right/i,\n BOTTOM: /bottom/i,\n LEFT: /left/i\n};\nconst defaultRect = {\n left: 0,\n top: 0,\n height: 0,\n width: 0,\n scrollLeft: 0,\n scrollTop: 0\n};\nexport default class Tooltip extends BaseFoundation {\n constructor(adapter) {\n var _this;\n super(Object.assign({}, adapter));\n _this = this;\n this.removePortal = () => {\n this._adapter.removePortal();\n };\n this.setDisplayNone = (displayNone, cb) => {\n this._adapter.setDisplayNone(displayNone, cb);\n };\n this.updateStateIfCursorOnTrigger = trigger => {\n var _a, _b;\n if ((_a = trigger === null || trigger === void 0 ? void 0 : trigger.matches) === null || _a === void 0 ? void 0 : _a.call(trigger, \":hover\")) {\n const eventNames = this._adapter.getEventName();\n const triggerEventSet = this.getState(\"triggerEventSet\");\n (_b = triggerEventSet[eventNames.mouseEnter]) === null || _b === void 0 ? void 0 : _b.call(triggerEventSet);\n }\n };\n this.onResize = () => {\n // this.log('resize');\n // rePosition when window resize\n const visible = this.getState('visible');\n if (!visible) {\n return;\n }\n this.calcPosition();\n };\n this.delayShow = () => {\n const mouseEnterDelay = this.getProp('mouseEnterDelay');\n this.clearDelayTimer();\n if (mouseEnterDelay > 0) {\n this._timer = setTimeout(() => {\n this.show();\n this.clearDelayTimer();\n }, mouseEnterDelay);\n } else {\n this.show();\n }\n };\n this.show = () => {\n if (this._adapter.getAnimatingState()) {\n return;\n }\n const content = this.getProp('content');\n const trigger = this.getProp('trigger');\n const clickTriggerToHide = this.getProp('clickTriggerToHide');\n const {\n visible,\n displayNone\n } = this.getStates();\n if (displayNone) {\n this.setDisplayNone(false);\n }\n if (visible) {\n return;\n }\n this.clearDelayTimer();\n /**\n * If you emit an event in setState callback, you need to place the event listener function before setState to execute.\n * This is to avoid event registration being executed later than setState callback when setState is executed in setTimeout.\n * internal-issues:1402#note_38969412\n */\n this._adapter.on('portalInserted', () => {\n this.calcPosition();\n });\n if (trigger === \"hover\") {\n const checkTriggerIsHover = () => {\n var _a;\n const triggerDOM = this._adapter.getTriggerDOM();\n if (trigger && !((_a = triggerDOM === null || triggerDOM === void 0 ? void 0 : triggerDOM.matches) === null || _a === void 0 ? void 0 : _a.call(triggerDOM, \":hover\"))) {\n this.hide();\n }\n this._adapter.off(\"portalInserted\", checkTriggerIsHover);\n };\n this._adapter.on('portalInserted', checkTriggerIsHover);\n }\n this._adapter.on('positionUpdated', () => {\n this._togglePortalVisible(true);\n });\n this._adapter.insertPortal(content, {\n left: -9999,\n top: -9999\n }); // offscreen rendering\n if (trigger === 'custom') {\n this._adapter.registerClickOutsideHandler(() => {});\n }\n /**\n * trigger类型是click时,仅当portal被插入显示后,才绑定clickOutsideHandler\n * 因为handler需要绑定在document上。如果在constructor阶段绑定\n * 当一个页面中有多个容器实例时,一次click会触发多个容器的handler\n *\n * When the trigger type is click, clickOutsideHandler is bound only after the portal is inserted and displayed\n * Because the handler needs to be bound to the document. If you bind during the constructor phase\n * When there are multiple container instances in a page, one click triggers the handler of multiple containers\n */\n if (trigger === 'click' || clickTriggerToHide || trigger === 'contextMenu') {\n this._adapter.registerClickOutsideHandler(this.hide);\n }\n this._bindScrollEvent();\n this._bindResizeEvent();\n };\n /**\n * 耦合的东西比较多,稍微罗列一下:\n *\n * - 根据 trigger 和 wrapper 的 boundingClient 计算当前的 left、top、transform-origin\n * - 根据当前的 position 和 wrapper 的 boundingClient 决定是否需要自动调整位置\n * - 根据当前的 position、trigger 的 boundingClient 以及 motion.handleStyle 调整当前的 style\n *\n * There are many coupling things, a little list:\n *\n * - calculate the current left, top, and transfer-origin according to the boundingClient of trigger and wrapper\n * - decide whether to automatically adjust the position according to the current position and the boundingClient of wrapper\n * - adjust the current style according to the current position, the boundingClient of trigger and motion.handle Style\n */\n this.calcPosition = function (triggerRect, wrapperRect, containerRect) {\n let shouldUpdatePos = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n triggerRect = (_isEmpty(triggerRect) ? _this._adapter.getTriggerBounding() : triggerRect) || Object.assign({}, defaultRect);\n containerRect = (_isEmpty(containerRect) ? _this._adapter.getPopupContainerRect() : containerRect) || Object.assign({}, defaultRect);\n wrapperRect = (_isEmpty(wrapperRect) ? _this._adapter.getWrapperBounding() : wrapperRect) || Object.assign({}, defaultRect);\n // console.log('containerRect: ', containerRect, 'triggerRect: ', triggerRect, 'wrapperRect: ', wrapperRect);\n let style = _this.calcPosStyle({\n triggerRect,\n wrapperRect,\n containerRect\n });\n let position = _this.getProp('position');\n if (_this.getProp('autoAdjustOverflow')) {\n // console.log('style: ', style, '\\ntriggerRect: ', triggerRect, '\\nwrapperRect: ', wrapperRect);\n const {\n position: adjustedPos,\n isHeightOverFlow,\n isWidthOverFlow\n } = _this.adjustPosIfNeed(position, style, triggerRect, wrapperRect, containerRect);\n if (position !== adjustedPos || isHeightOverFlow || isWidthOverFlow) {\n position = adjustedPos;\n style = _this.calcPosStyle({\n triggerRect,\n wrapperRect,\n containerRect,\n position,\n spacing: null,\n isOverFlow: [isHeightOverFlow, isWidthOverFlow]\n });\n }\n }\n if (shouldUpdatePos && _this._mounted) {\n // this._adapter.updatePlacementAttr(style.position);\n _this._adapter.setPosition(Object.assign(Object.assign({}, style), {\n position\n }));\n }\n return style;\n };\n this.delayHide = () => {\n const mouseLeaveDelay = this.getProp('mouseLeaveDelay');\n this.clearDelayTimer();\n if (mouseLeaveDelay > 0) {\n this._timer = setTimeout(() => {\n // console.log('delayHide for ', mouseLeaveDelay, ' ms, ', ...args);\n this.hide();\n this.clearDelayTimer();\n }, mouseLeaveDelay);\n } else {\n this.hide();\n }\n };\n this.hide = () => {\n this.clearDelayTimer();\n this._togglePortalVisible(false);\n this._adapter.off('portalInserted');\n this._adapter.off('positionUpdated');\n };\n this.handleContainerKeydown = event => {\n const {\n guardFocus,\n closeOnEsc\n } = this.getProps();\n switch (event && event.key) {\n case \"Escape\":\n closeOnEsc && this._handleEscKeyDown(event);\n break;\n case \"Tab\":\n if (guardFocus) {\n const container = this._adapter.getContainer();\n const focusableElements = this._adapter.getFocusableElements(container);\n const focusableNum = focusableElements.length;\n if (focusableNum) {\n // Shift + Tab will move focus backward\n if (event.shiftKey) {\n this._handleContainerShiftTabKeyDown(focusableElements, event);\n } else {\n this._handleContainerTabKeyDown(focusableElements, event);\n }\n }\n }\n break;\n default:\n break;\n }\n };\n this._timer = null;\n }\n init() {\n const {\n wrapperId\n } = this.getProps();\n this._mounted = true;\n this._bindEvent();\n this._shouldShow();\n this._initContainerPosition();\n if (!wrapperId) {\n this._adapter.setId();\n }\n }\n destroy() {\n this._mounted = false;\n this.unBindEvent();\n }\n _bindEvent() {\n const trigger = this.getProp('trigger'); // get trigger type\n const {\n triggerEventSet,\n portalEventSet\n } = this._generateEvent(trigger);\n this._bindTriggerEvent(triggerEventSet);\n this._bindPortalEvent(portalEventSet);\n this._bindResizeEvent();\n }\n unBindEvent() {\n this._adapter.unregisterClickOutsideHandler();\n this.unBindResizeEvent();\n this.unBindScrollEvent();\n clearTimeout(this._timer);\n }\n _bindTriggerEvent(triggerEventSet) {\n this._adapter.registerTriggerEvent(triggerEventSet);\n }\n _bindPortalEvent(portalEventSet) {\n this._adapter.registerPortalEvent(portalEventSet);\n }\n _bindResizeEvent() {\n this._adapter.registerResizeHandler(this.onResize);\n }\n unBindResizeEvent() {\n this._adapter.unregisterResizeHandler(this.onResize);\n }\n _adjustPos() {\n let position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n let isVertical = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n let adjustType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'reverse';\n let concatPos = arguments.length > 3 ? arguments[3] : undefined;\n switch (adjustType) {\n case 'reverse':\n return this._reversePos(position, isVertical);\n case 'expand':\n // only happens when position is top/bottom/left/right\n return this._expandPos(position, concatPos);\n case 'reduce':\n // only happens when position other than top/bottom/left/right\n return this._reducePos(position);\n default:\n return this._reversePos(position, isVertical);\n }\n }\n _reversePos() {\n let position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n let isVertical = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (isVertical) {\n if (REGS.TOP.test(position)) {\n return position.replace('top', 'bottom').replace('Top', 'Bottom');\n } else if (REGS.BOTTOM.test(position)) {\n return position.replace('bottom', 'top').replace('Bottom', 'Top');\n }\n } else if (REGS.LEFT.test(position)) {\n return position.replace('left', 'right').replace('Left', 'Right');\n } else if (REGS.RIGHT.test(position)) {\n return position.replace('right', 'left').replace('Right', 'Left');\n }\n return position;\n }\n _expandPos() {\n let position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n let concatPos = arguments.length > 1 ? arguments[1] : undefined;\n return position.concat(concatPos);\n }\n _reducePos() {\n let position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n // if cur position consists of two directions, remove the last position\n const found = ['Top', 'Bottom', 'Left', 'Right'].find(pos => position.endsWith(pos));\n return found ? position.replace(found, '') : position;\n }\n clearDelayTimer() {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n }\n _generateEvent(types) {\n const eventNames = this._adapter.getEventName();\n const triggerEventSet = {\n // bind esc keydown on trigger for a11y\n [eventNames.keydown]: event => {\n this._handleTriggerKeydown(event);\n }\n };\n let portalEventSet = {};\n switch (types) {\n case 'focus':\n triggerEventSet[eventNames.focus] = () => {\n this.delayShow();\n };\n triggerEventSet[eventNames.blur] = () => {\n this.delayHide();\n };\n portalEventSet = triggerEventSet;\n break;\n case 'click':\n triggerEventSet[eventNames.click] = () => {\n // this.delayShow();\n this.show();\n };\n portalEventSet = {};\n // Click outside needs special treatment, can not be directly tied to the trigger Element, need to be bound to the document\n break;\n case 'hover':\n triggerEventSet[eventNames.mouseEnter] = () => {\n // console.log(e);\n this.setCache('isClickToHide', false);\n this.delayShow();\n // this.show('trigger');\n };\n triggerEventSet[eventNames.mouseLeave] = () => {\n // console.log(e);\n this.delayHide();\n // this.hide('trigger');\n };\n // bind focus to hover trigger for a11y\n triggerEventSet[eventNames.focus] = () => {\n const {\n disableFocusListener\n } = this.getProps();\n !disableFocusListener && this.delayShow();\n };\n triggerEventSet[eventNames.blur] = () => {\n const {\n disableFocusListener\n } = this.getProps();\n !disableFocusListener && this.delayHide();\n };\n portalEventSet = Object.assign({}, triggerEventSet);\n if (this.getProp('clickToHide')) {\n portalEventSet[eventNames.click] = () => {\n this.setCache('isClickToHide', true);\n this.hide();\n };\n portalEventSet[eventNames.mouseEnter] = () => {\n if (this.getCache('isClickToHide')) {\n return;\n }\n this.delayShow();\n };\n }\n break;\n case 'custom':\n // when trigger type is 'custom', no need to bind eventHandler\n // show/hide completely depend on props.visible which change by user\n break;\n case 'contextMenu':\n triggerEventSet[eventNames.contextMenu] = e => {\n e.preventDefault();\n this.show();\n };\n // Click outside needs special treatment, can not be directly tied to the trigger Element, need to be bound to the document\n break;\n default:\n break;\n }\n return {\n triggerEventSet,\n portalEventSet\n };\n }\n _shouldShow() {\n const visible = this.getProp('visible');\n if (visible) {\n this.show();\n } else {\n // this.hide();\n }\n }\n _togglePortalVisible(isVisible) {\n const nowVisible = this.getState('visible');\n const isInsert = this.getState(\"isInsert\");\n if (nowVisible !== isVisible || isInsert !== isVisible) {\n this._adapter.togglePortalVisible(isVisible, () => {\n if (isVisible) {\n this._adapter.setInitialFocus();\n }\n this._adapter.notifyVisibleChange(isVisible);\n });\n }\n }\n _roundPixel(pixel) {\n if (typeof pixel === 'number') {\n return Math.round(pixel);\n }\n return pixel;\n }\n calcTransformOrigin(position, triggerRect, translateX, translateY) {\n if (position && triggerRect && translateX != null && translateY != null) {\n if (this.getProp('transformFromCenter')) {\n if (['topLeft', 'bottomLeft'].includes(position)) {\n return `${this._roundPixel(triggerRect.width / 2)}px ${-translateY * 100}%`;\n }\n if (['topRight', 'bottomRight'].includes(position)) {\n return `calc(100% - ${this._roundPixel(triggerRect.width / 2)}px) ${-translateY * 100}%`;\n }\n if (['leftTop', 'rightTop'].includes(position)) {\n return `${-translateX * 100}% ${this._roundPixel(triggerRect.height / 2)}px`;\n }\n if (['leftBottom', 'rightBottom'].includes(position)) {\n return `${-translateX * 100}% calc(100% - ${this._roundPixel(triggerRect.height / 2)}px)`;\n }\n }\n return `${-translateX * 100}% ${-translateY * 100}%`;\n }\n return null;\n }\n calcPosStyle(props) {\n var _a;\n const {\n spacing,\n isOverFlow\n } = props;\n const {\n innerWidth\n } = window;\n const triggerRect = (_isEmpty(props.triggerRect) ? props.triggerRect : this._adapter.getTriggerBounding()) || Object.assign({}, defaultRect);\n const containerRect = (_isEmpty(props.containerRect) ? props.containerRect : this._adapter.getPopupContainerRect()) || Object.assign({}, defaultRect);\n const wrapperRect = (_isEmpty(props.wrapperRect) ? props.wrapperRect : this._adapter.getWrapperBounding()) || Object.assign({}, defaultRect);\n const position = props.position != null ? props.position : this.getProp('position');\n const RAW_SPACING = spacing != null ? spacing : this.getProp('spacing');\n const {\n arrowPointAtCenter,\n showArrow,\n arrowBounding\n } = this.getProps();\n const pointAtCenter = showArrow && arrowPointAtCenter;\n let SPACING = RAW_SPACING;\n let ANO_SPACING = 0;\n if (typeof RAW_SPACING !== 'number') {\n // extended spacing api with {x: number, y: number}, the axes of the spacing is determined based on the position\n const isTopOrBottom = position.includes('top') || position.includes('bottom');\n SPACING = isTopOrBottom ? RAW_SPACING.y : RAW_SPACING.x;\n ANO_SPACING = isTopOrBottom ? RAW_SPACING.x : RAW_SPACING.y;\n }\n const horizontalArrowWidth = _get(arrowBounding, 'width', 24);\n const verticalArrowHeight = _get(arrowBounding, 'width', 24);\n const arrowOffsetY = _get(arrowBounding, 'offsetY', 0);\n const positionOffsetX = 6;\n const positionOffsetY = 6;\n // You must use left/top when rendering, using right/bottom does not render the element position correctly\n // Use left/top + translate to achieve tooltip positioning perfectly without knowing the size of the tooltip expansion layer\n let left;\n let top;\n let translateX = 0; // Container x-direction translation distance\n let translateY = 0; // Container y-direction translation distance\n const middleX = triggerRect.left + triggerRect.width / 2;\n const middleY = triggerRect.top + triggerRect.height / 2;\n const offsetXWithArrow = positionOffsetX + horizontalArrowWidth / 2;\n const offsetYWithArrow = positionOffsetY + verticalArrowHeight / 2;\n const heightDifference = wrapperRect.height - containerRect.height;\n const widthDifference = wrapperRect.width - containerRect.width;\n const offsetHeight = heightDifference > 0 ? heightDifference : 0;\n const offsetWidth = widthDifference > 0 ? widthDifference : 0;\n const isHeightOverFlow = isOverFlow && isOverFlow[0];\n const isWidthOverFlow = isOverFlow && isOverFlow[1];\n const isTriggerNearLeft = middleX - containerRect.left < containerRect.right - middleX;\n const isTriggerNearTop = middleY - containerRect.top < containerRect.bottom - middleY;\n const isWrapperWidthOverflow = wrapperRect.width > innerWidth;\n const scaled = Math.abs((wrapperRect === null || wrapperRect === void 0 ? void 0 : wrapperRect.width) - ((_a = this._adapter.getContainer()) === null || _a === void 0 ? void 0 : _a.clientWidth)) > 1;\n if (scaled) {\n SPACING = SPACING * wrapperRect.width / this._adapter.getContainer().clientWidth;\n }\n switch (position) {\n case 'top':\n // left = middleX;\n // top = triggerRect.top - SPACING;\n left = isWidthOverFlow ? isTriggerNearLeft ? containerRect.left + wrapperRect.width / 2 : containerRect.right - wrapperRect.width / 2 + offsetWidth : middleX + ANO_SPACING;\n top = isHeightOverFlow ? containerRect.bottom + offsetHeight : triggerRect.top - SPACING;\n translateX = -0.5;\n translateY = -1;\n break;\n case 'topLeft':\n // left = pointAtCenter ? middleX - offsetXWithArrow : triggerRect.left;\n // top = triggerRect.top - SPACING;\n left = isWidthOverFlow ? isWrapperWidthOverflow ? containerRect.left : containerRect.right - wrapperRect.width : pointAtCenter ? middleX - offsetXWithArrow + ANO_SPACING : triggerRect.left + ANO_SPACING;\n top = isHeightOverFlow ? containerRect.bottom + offsetHeight : triggerRect.top - SPACING;\n translateY = -1;\n break;\n case 'topRight':\n // left = pointAtCenter ? middleX + offsetXWithArrow : triggerRect.right;\n // top = triggerRect.top - SPACING;\n left = isWidthOverFlow ? containerRect.right + offsetWidth : pointAtCenter ? middleX + offsetXWithArrow + ANO_SPACING : triggerRect.right + ANO_SPACING;\n top = isHeightOverFlow ? containerRect.bottom + offsetHeight : triggerRect.top - SPACING;\n translateY = -1;\n translateX = -1;\n break;\n case 'left':\n // left = triggerRect.left - SPACING;\n // top = middleY;\n // left = isWidthOverFlow? containerRect.right - SPACING : triggerRect.left - SPACING;\n left = isWidthOverFlow ? containerRect.right + offsetWidth - SPACING + offsetXWithArrow : triggerRect.left - SPACING;\n top = isHeightOverFlow ? isTriggerNearTop ? containerRect.top + wrapperRect.height / 2 : containerRect.bottom - wrapperRect.height / 2 + offsetHeight : middleY + ANO_SPACING;\n translateX = -1;\n translateY = -0.5;\n break;\n case 'leftTop':\n // left = triggerRect.left - SPACING;\n // top = pointAtCenter ? middleY - offsetYWithArrow : triggerRect.top;\n left = isWidthOverFlow ? containerRect.right + offsetWidth - SPACING + offsetXWithArrow : triggerRect.left - SPACING;\n top = isHeightOverFlow ? containerRect.top : pointAtCenter ? middleY - offsetYWithArrow + ANO_SPACING : triggerRect.top + ANO_SPACING;\n translateX = -1;\n break;\n case 'leftBottom':\n // left = triggerRect.left - SPACING;\n // top = pointAtCenter ? middleY + offsetYWithArrow : triggerRect.bottom;\n left = isWidthOverFlow ? containerRect.right + offsetWidth - SPACING + offsetXWithArrow : triggerRect.left - SPACING;\n top = isHeightOverFlow ? containerRect.bottom + offsetHeight : pointAtCenter ? middleY + offsetYWithArrow + ANO_SPACING : triggerRect.bottom + ANO_SPACING;\n translateX = -1;\n translateY = -1;\n break;\n case 'bottom':\n // left = middleX;\n // top = triggerRect.top + triggerRect.height + SPACING;\n left = isWidthOverFlow ? isTriggerNearLeft ? containerRect.left + wrapperRect.width / 2 : containerRect.right - wrapperRect.width / 2 + offsetWidth : middleX + ANO_SPACING;\n top = isHeightOverFlow ? containerRect.top + offsetYWithArrow - SPACING : triggerRect.top + triggerRect.height + SPACING;\n translateX = -0.5;\n break;\n case 'bottomLeft':\n // left = pointAtCenter ? middleX - offsetXWithArrow : triggerRect.left;\n // top = triggerRect.bottom + SPACING;\n left = isWidthOverFlow ? isWrapperWidthOverflow ? containerRect.left : containerRect.right - wrapperRect.width : pointAtCenter ? middleX - offsetXWithArrow + ANO_SPACING : triggerRect.left + ANO_SPACING;\n top = isHeightOverFlow ? containerRect.top + offsetYWithArrow - SPACING : triggerRect.top + triggerRect.height + SPACING;\n break;\n case 'bottomRight':\n // left = pointAtCenter ? middleX + offsetXWithArrow : triggerRect.right;\n // top = triggerRect.bottom + SPACING;\n left = isWidthOverFlow ? containerRect.right + offsetWidth : pointAtCenter ? middleX + offsetXWithArrow + ANO_SPACING : triggerRect.right + ANO_SPACING;\n top = isHeightOverFlow ? containerRect.top + offsetYWithArrow - SPACING : triggerRect.top + triggerRect.height + SPACING;\n translateX = -1;\n break;\n case 'right':\n // left = triggerRect.right + SPACING;\n // top = middleY;\n left = isWidthOverFlow ? containerRect.left - SPACING + offsetXWithArrow : triggerRect.right + SPACING;\n top = isHeightOverFlow ? isTriggerNearTop ? containerRect.top + wrapperRect.height / 2 : containerRect.bottom - wrapperRect.height / 2 + offsetHeight : middleY + ANO_SPACING;\n translateY = -0.5;\n break;\n case 'rightTop':\n // left = triggerRect.right + SPACING;\n // top = pointAtCenter ? middleY - offsetYWithArrow : triggerRect.top;\n left = isWidthOverFlow ? containerRect.left - SPACING + offsetXWithArrow : triggerRect.right + SPACING;\n top = isHeightOverFlow ? containerRect.top : pointAtCenter ? middleY - offsetYWithArrow + ANO_SPACING : triggerRect.top + ANO_SPACING;\n break;\n case 'rightBottom':\n // left = triggerRect.right + SPACING;\n // top = pointAtCenter ? middleY + offsetYWithArrow : triggerRect.bottom;\n left = isWidthOverFlow ? containerRect.left - SPACING + offsetXWithArrow : triggerRect.right + SPACING;\n top = isHeightOverFlow ? containerRect.bottom + offsetHeight : pointAtCenter ? middleY + offsetYWithArrow + ANO_SPACING : triggerRect.bottom + ANO_SPACING;\n translateY = -1;\n break;\n case 'leftTopOver':\n left = triggerRect.left - SPACING;\n top = triggerRect.top - SPACING;\n break;\n case 'rightTopOver':\n left = triggerRect.right + SPACING;\n top = triggerRect.top - SPACING;\n translateX = -1;\n break;\n case 'leftBottomOver':\n left = triggerRect.left - SPACING;\n top = triggerRect.bottom + SPACING;\n translateY = -1;\n break;\n case 'rightBottomOver':\n left = triggerRect.right + SPACING;\n top = triggerRect.bottom + SPACING;\n translateX = -1;\n translateY = -1;\n break;\n default:\n break;\n }\n const transformOrigin = this.calcTransformOrigin(position, triggerRect, translateX, translateY); // Transform origin\n const _containerIsBody = this._adapter.containerIsBody();\n // Calculate container positioning relative to window\n left = left - containerRect.left;\n top = top - containerRect.top;\n if (scaled) {\n left /= wrapperRect.width / this._adapter.getContainer().clientWidth;\n }\n if (scaled) {\n top /= wrapperRect.height / this._adapter.getContainer().clientHeight;\n }\n /**\n * container为body时,如果position不为relative或absolute,这时trigger计算出的top/left会根据html定位(initial containing block)\n * 此时如果body有margin,则计算出的位置相对于body会有问题 fix issue #1368\n *\n * When container is body, if position is not relative or absolute, then the top/left calculated by trigger will be positioned according to html\n * At this time, if the body has a margin, the calculated position will have a problem relative to the body fix issue #1368\n */\n if (_containerIsBody && !this._adapter.containerIsRelativeOrAbsolute()) {\n const documentEleRect = this._adapter.getDocumentElementBounding();\n // Represents the left of the body relative to html\n left += containerRect.left - documentEleRect.left;\n // Represents the top of the body relative to html\n top += containerRect.top - documentEleRect.top;\n }\n // ContainerRect.scrollLeft to solve the inner scrolling of the container\n left = _containerIsBody ? left : left + containerRect.scrollLeft;\n top = _containerIsBody ? top : top + containerRect.scrollTop;\n const triggerHeight = triggerRect.height;\n if (this.getProp('showArrow') && !arrowPointAtCenter && triggerHeight <= (verticalArrowHeight / 2 + arrowOffsetY) * 2) {\n const offsetY = triggerHeight / 2 - (arrowOffsetY + verticalArrowHeight / 2);\n if ((position.includes('Top') || position.includes('Bottom')) && !position.includes('Over')) {\n top = position.includes('Top') ? top + offsetY : top - offsetY;\n }\n }\n // The left/top value here must be rounded, otherwise it will cause the small triangle to shake\n const style = {\n left: this._roundPixel(left),\n top: this._roundPixel(top)\n };\n let transform = '';\n if (translateX != null) {\n transform += `translateX(${translateX * 100}%) `;\n Object.defineProperty(style, 'translateX', {\n enumerable: false,\n value: translateX\n });\n }\n if (translateY != null) {\n transform += `translateY(${translateY * 100}%) `;\n Object.defineProperty(style, 'translateY', {\n enumerable: false,\n value: translateY\n });\n }\n if (transformOrigin != null) {\n style.transformOrigin = transformOrigin;\n }\n if (transform) {\n style.transform = transform;\n }\n return style;\n }\n isLR() {\n let position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n return position.includes('left') || position.includes('right');\n }\n isTB() {\n let position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n return position.includes('top') || position.includes('bottom');\n }\n isReverse(rowSpace, reverseSpace, size) {\n // 原空间不足,反向空间足够\n // Insufficient original space, enough reverse space\n return rowSpace < size && reverseSpace > size;\n }\n isOverFlow(rowSpace, reverseSpace, size) {\n // 原空间且反向空间都不足\n // The original space and the reverse space are not enough\n return rowSpace < size && reverseSpace < size;\n }\n isHalfOverFlow(posSpace, negSpace, size) {\n // 正半空间或者负半空间不足,即表示有遮挡,需要偏移\n // Insufficient positive half space or negative half space means that there is occlusion and needs to be offset\n return posSpace < size || negSpace < size;\n }\n isHalfAllEnough(posSpace, negSpace, size) {\n // 正半空间和负半空间都足够,即表示可以从 topLeft/topRight 变成 top\n // Both positive and negative half-spaces are sufficient, which means you can change from topLeft/topRight to top\n return posSpace >= size || negSpace >= size;\n }\n getReverse(viewOverFlow, containerOverFlow, shouldReverseView, shouldReverseContainer) {\n /**\n * 基于视口和容器一起判断,以下几种情况允许从原方向转到反方向,以判断是否应该由top->bottom为例子\n *\n * 1. 视口上下空间不足 且 容器上空间❌下空间✅\n * 2. 视口上空间❌下空间✅\n *\n * Based on the judgment of the viewport and the container, the following situations are allowed to turn from the original direction to the opposite direction\n * to judge whether it should be top->bottom as an example\n * 1. There is insufficient space above and below the viewport and the space above the container ❌ the space below ✅\n * 2. The space above the viewport ❌ the space below ✅ and the space above and below the container is insufficient\n * 3. Viewport upper space ❌ lower space✅ and container upper space ❌ lower space✅\n */\n return viewOverFlow && shouldReverseContainer || shouldReverseView;\n }\n // place the dom correctly\n adjustPosIfNeed(position, style, triggerRect, wrapperRect, containerRect) {\n const {\n innerWidth,\n innerHeight\n } = window;\n const {\n margin\n } = this.getProps();\n const marginLeft = typeof margin === 'number' ? margin : margin.marginLeft;\n const marginTop = typeof margin === 'number' ? margin : margin.marginTop;\n const marginRight = typeof margin === 'number' ? margin : margin.marginRight;\n const marginBottom = typeof margin === 'number' ? margin : margin.marginBottom;\n let isHeightOverFlow = false;\n let isWidthOverFlow = false;\n const raw_spacing = this.getProp('spacing');\n let spacing = raw_spacing;\n let ano_spacing = 0;\n if (typeof raw_spacing !== 'number') {\n // extended spacing api with {x: number, y: number}, the axes of the spacing is determined based on the position\n const isTopOrBottom = position.includes('top') || position.includes('bottom');\n spacing = isTopOrBottom ? raw_spacing.y : raw_spacing.x;\n ano_spacing = isTopOrBottom ? raw_spacing.x : raw_spacing.y;\n }\n if (wrapperRect.width > 0 && wrapperRect.height > 0) {\n // let clientLeft = left + translateX * wrapperRect.width - containerRect.scrollLeft;\n // let clientTop = top + translateY * wrapperRect.height - containerRect.scrollTop;\n // if (this._adapter.containerIsBody() || this._adapter.containerIsRelative()) {\n // clientLeft += containerRect.left;\n // clientTop += containerRect.top;\n // }\n // const clientRight = clientLeft + wrapperRect.width;\n // const clientBottom = clientTop + wrapperRect.height;\n // The relative position of the elements on the screen\n // https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/tooltip-pic.svg\n const clientLeft = triggerRect.left;\n const clientRight = triggerRect.right;\n const clientTop = triggerRect.top;\n const clientBottom = triggerRect.bottom;\n const restClientLeft = innerWidth - clientLeft;\n const restClientTop = innerHeight - clientTop;\n const restClientRight = innerWidth - clientRight;\n const restClientBottom = innerHeight - clientBottom;\n const widthIsBigger = wrapperRect.width > triggerRect.width;\n const heightIsBigger = wrapperRect.height > triggerRect.height;\n // The wrapperR ect.top|bottom equivalent cannot be directly used here for comparison, which is easy to cause jitter\n // 基于视口的微调判断\n // Fine-tuning judgment based on viewport\n const shouldViewReverseTop = clientTop - marginTop < wrapperRect.height + spacing && restClientBottom - marginBottom > wrapperRect.height + spacing;\n const shouldViewReverseLeft = clientLeft - marginLeft < wrapperRect.width + spacing && restClientRight - marginRight > wrapperRect.width + spacing;\n const shouldViewReverseBottom = restClientBottom - marginBottom < wrapperRect.height + spacing && clientTop - marginTop > wrapperRect.height + spacing;\n const shouldViewReverseRight = restClientRight - marginRight < wrapperRect.width + spacing && clientLeft - marginLeft > wrapperRect.width + spacing;\n const shouldViewReverseTopOver = restClientTop - marginBottom < wrapperRect.height + spacing && clientBottom - marginTop > wrapperRect.height + spacing;\n const shouldViewReverseBottomOver = clientBottom - marginTop < wrapperRect.height + spacing && restClientTop - marginBottom > wrapperRect.height + spacing;\n const shouldViewReverseTopSide = restClientTop < wrapperRect.height + ano_spacing && clientBottom > wrapperRect.height + ano_spacing;\n const shouldViewReverseBottomSide = clientBottom < wrapperRect.height + ano_spacing && restClientTop > wrapperRect.height + ano_spacing;\n const shouldViewReverseLeftSide = restClientLeft < wrapperRect.width + ano_spacing && clientRight > wrapperRect.width + ano_spacing;\n const shouldViewReverseRightSide = clientRight < wrapperRect.width + ano_spacing && restClientLeft > wrapperRect.width + ano_spacing;\n const shouldReverseTopOver = restClientTop < wrapperRect.height + spacing && clientBottom > wrapperRect.height + spacing;\n const shouldReverseBottomOver = clientBottom < wrapperRect.height + spacing && restClientTop > wrapperRect.height + spacing;\n const shouldReverseLeftOver = restClientLeft < wrapperRect.width && clientRight > wrapperRect.width;\n const shouldReverseRightOver = clientRight < wrapperRect.width && restClientLeft > wrapperRect.width;\n // 基于容器的微调判断\n // Fine-tuning judgment based on container\n const clientTopInContainer = clientTop - containerRect.top;\n const clientLeftInContainer = clientLeft - containerRect.left;\n const clientBottomInContainer = clientTopInContainer + triggerRect.height;\n const clientRightInContainer = clientLeftInContainer + triggerRect.width;\n const restClientBottomInContainer = containerRect.bottom - clientBottom;\n const restClientRightInContainer = containerRect.right - clientRight;\n const restClientTopInContainer = restClientBottomInContainer + triggerRect.height;\n const restClientLeftInContainer = restClientRightInContainer + triggerRect.width;\n // 当原空间不足,反向空间足够时,可以反向。\n // When the original space is insufficient and the reverse space is sufficient, the reverse can be performed.\n const shouldContainerReverseTop = this.isReverse(clientTopInContainer - marginTop, restClientBottomInContainer - marginBottom, wrapperRect.height + spacing);\n const shouldContainerReverseLeft = this.isReverse(clientLeftInContainer - marginLeft, restClientRightInContainer - marginRight, wrapperRect.width + spacing);\n const shouldContainerReverseBottom = this.isReverse(restClientBottomInContainer - marginBottom, clientTopInContainer - marginTop, wrapperRect.height + spacing);\n const shouldContainerReverseRight = this.isReverse(restClientRightInContainer - marginRight, clientLeftInContainer - marginLeft, wrapperRect.width + spacing);\n const shouldContainerReverseTopOver = this.isReverse(restClientTopInContainer - marginBottom, clientBottomInContainer - marginTop, wrapperRect.height + spacing);\n const shouldContainerReverseBottomOver = this.isReverse(clientBottomInContainer - marginTop, restClientTopInContainer - marginBottom, wrapperRect.height + spacing);\n const shouldContainerReverseTopSide = this.isReverse(restClientTopInContainer, clientBottomInContainer, wrapperRect.height + ano_spacing);\n const shouldContainerReverseBottomSide = this.isReverse(clientBottomInContainer, restClientTopInContainer, wrapperRect.height + ano_spacing);\n const shouldContainerReverseLeftSide = this.isReverse(restClientLeftInContainer, clientRightInContainer, wrapperRect.width + ano_spacing);\n const shouldContainerReverseRightSide = this.isReverse(clientRightInContainer, restClientLeftInContainer, wrapperRect.width + ano_spacing);\n const halfHeight = triggerRect.height / 2;\n const halfWidth = triggerRect.width / 2;\n // 视口, 原空间与反向空间是否都不足判断\n // Viewport, whether the original space and the reverse space are insufficient to judge\n const isViewYOverFlow = this.isOverFlow(clientTop - marginTop, restClientBottom - marginBottom, wrapperRect.height + spacing);\n const isViewXOverFlow = this.isOverFlow(clientLeft - marginLeft, restClientRight - marginRight, wrapperRect.width + spacing);\n const isViewYOverFlowSide = this.isOverFlow(clientBottom - marginTop, restClientTop - marginBottom, wrapperRect.height + spacing);\n const isViewXOverFlowSide = this.isOverFlow(clientRight - marginLeft, restClientLeft - marginRight, wrapperRect.width + spacing);\n const isViewYOverFlowSideHalf = this.isHalfOverFlow(clientBottom - halfHeight, restClientTop - halfHeight, (wrapperRect.height + ano_spacing) / 2);\n const isViewXOverFlowSideHalf = this.isHalfOverFlow(clientRight - halfWidth, restClientLeft - halfWidth, (wrapperRect.width + ano_spacing) / 2);\n const isViewYEnoughSideHalf = this.isHalfAllEnough(clientBottom - halfHeight, restClientTop - halfHeight, (wrapperRect.height + ano_spacing) / 2);\n const isViewXEnoughSideHalf = this.isHalfAllEnough(clientRight - halfWidth, restClientLeft - halfWidth, (wrapperRect.width + ano_spacing) / 2);\n // 容器, 原空间与反向空间是否都不足判断\n // container, whether the original space and the reverse space are insufficient to judge\n const isContainerYOverFlow = this.isOverFlow(clientTopInContainer - marginTop, restClientBottomInContainer - marginBottom, wrapperRect.height + spacing);\n const isContainerXOverFlow = this.isOverFlow(clientLeftInContainer - marginLeft, restClientRightInContainer - marginRight, wrapperRect.width + spacing);\n const isContainerYOverFlowSide = this.isOverFlow(clientBottomInContainer - marginTop, restClientTopInContainer - marginBottom, wrapperRect.height + spacing);\n const isContainerXOverFlowSide = this.isOverFlow(clientRightInContainer - marginLeft, restClientLeftInContainer - marginRight, wrapperRect.width + spacing);\n const isContainerYOverFlowSideHalf = this.isHalfOverFlow(clientBottomInContainer - halfHeight, restClientTopInContainer - halfHeight, (wrapperRect.height + ano_spacing) / 2);\n const isContainerXOverFlowSideHalf = this.isHalfOverFlow(clientRightInContainer - halfWidth, restClientLeftInContainer - halfWidth, (wrapperRect.width + ano_spacing) / 2);\n const isContainerYEnoughSideHalf = this.isHalfAllEnough(clientBottomInContainer - halfHeight, restClientTopInContainer - halfHeight, (wrapperRect.height + ano_spacing) / 2);\n const isContainerXEnoughSideHalf = this.isHalfAllEnough(clientRightInContainer - halfWidth, restClientLeftInContainer - halfWidth, (wrapperRect.width + ano_spacing) / 2);\n // 综合 viewport + container 判断微调,即视口 + 容器都放置不行时才能考虑位置调整\n // Comprehensive viewport + container judgment fine-tuning, that is, the position adjustment can only be considered when the viewport + container cannot be placed.\n const shouldReverseTop = this.getReverse(isViewYOverFlow, isContainerYOverFlow, shouldViewReverseTop, shouldContainerReverseTop);\n const shouldReverseLeft = this.getReverse(isViewXOverFlow, isContainerXOverFlow, shouldViewReverseLeft, shouldContainerReverseLeft);\n const shouldReverseBottom = this.getReverse(isViewYOverFlow, isContainerYOverFlow, shouldViewReverseBottom, shouldContainerReverseBottom);\n const shouldReverseRight = this.getReverse(isViewXOverFlow, isContainerXOverFlow, shouldViewReverseRight, shouldContainerReverseRight);\n // const shouldReverseTopOver = this.getReverse(isViewYOverFlowSide, isContainerYOverFlowSide, shouldViewReverseTopOver, shouldContainerReverseTopOver);\n // const shouldReverseBottomOver = this.getReverse(isViewYOverFlowSide, isContainerYOverFlowSide, shouldViewReverseBottomOver, shouldContainerReverseBottomOver);\n const shouldReverseTopSide = this.getReverse(isViewYOverFlowSide, isContainerYOverFlowSide, shouldViewReverseTopSide, shouldContainerReverseTopSide);\n const shouldReverseBottomSide = this.getReverse(isViewYOverFlowSide, isContainerYOverFlowSide, shouldViewReverseBottomSide, shouldContainerReverseBottomSide);\n const shouldReverseLeftSide = this.getReverse(isViewXOverFlowSide, isContainerXOverFlowSide, shouldViewReverseLeftSide, shouldContainerReverseLeftSide);\n const shouldReverseRightSide = this.getReverse(isViewXOverFlowSide, isContainerXOverFlowSide, shouldViewReverseRightSide, shouldContainerReverseRightSide);\n const isYOverFlowSideHalf = isViewYOverFlowSideHalf && isContainerYOverFlowSideHalf;\n const isXOverFlowSideHalf = isViewXOverFlowSideHalf && isContainerXOverFlowSideHalf;\n switch (position) {\n case 'top':\n if (shouldReverseTop) {\n position = this._adjustPos(position, true);\n }\n if (isXOverFlowSideHalf && (shouldReverseLeftSide || shouldReverseRightSide)) {\n position = this._adjustPos(position, true, 'expand', shouldReverseLeftSide ? 'Right' : 'Left');\n }\n break;\n case 'topLeft':\n if (shouldReverseTop) {\n position = this._adjustPos(position, true);\n }\n if (shouldReverseLeftSide && widthIsBigger) {\n position = this._adjustPos(position);\n }\n if (isWidthOverFlow && (isViewXEnoughSideHalf || isContainerXEnoughSideHalf)) {\n position = this._adjustPos(position, true, 'reduce');\n }\n break;\n case 'topRight':\n if (shouldReverseTop) {\n position = this._adjustPos(position, true);\n }\n if (shouldReverseRightSide && widthIsBigger) {\n position = this._adjustPos(position);\n }\n if (isWidthOverFlow && (isViewXEnoughSideHalf || isContainerXEnoughSideHalf)) {\n position = this._adjustPos(position, true, 'reduce');\n }\n break;\n case 'left':\n if (shouldReverseLeft) {\n position = this._adjustPos(position);\n }\n if (isYOverFlowSideHalf && (shouldReverseTopSide || shouldReverseBottomSide)) {\n position = this._adjustPos(position, false, 'expand', shouldReverseTopSide ? 'Bottom' : 'Top');\n }\n break;\n case 'leftTop':\n if (shouldReverseLeft) {\n position = this._adjustPos(position);\n }\n if (shouldReverseTopSide && heightIsBigger) {\n position = this._adjustPos(position, true);\n }\n if (isHeightOverFlow && (isViewYEnoughSideHalf || isContainerYEnoughSideHalf)) {\n position = this._adjustPos(position, false, 'reduce');\n }\n break;\n case 'leftBottom':\n if (shouldReverseLeft) {\n position = this._adjustPos(position);\n }\n if (shouldReverseBottomSide && heightIsBigger) {\n position = this._adjustPos(position, true);\n }\n if (isHeightOverFlow && (isViewYEnoughSideHalf || isContainerYEnoughSideHalf)) {\n position = this._adjustPos(position, false, 'reduce');\n }\n break;\n case 'bottom':\n if (shouldReverseBottom) {\n position = this._adjustPos(position, true);\n }\n if (isXOverFlowSideHalf && (shouldReverseLeftSide || shouldReverseRightSide)) {\n position = this._adjustPos(position, true, 'expand', shouldReverseLeftSide ? 'Right' : 'Left');\n }\n break;\n case 'bottomLeft':\n if (shouldReverseBottom) {\n position = this._adjustPos(position, true);\n }\n if (shouldReverseLeftSide && widthIsBigger) {\n position = this._adjustPos(position);\n }\n if (isWidthOverFlow && (isViewXEnoughSideHalf || isContainerXEnoughSideHalf)) {\n position = this._adjustPos(position, true, 'reduce');\n }\n break;\n case 'bottomRight':\n if (shouldReverseBottom) {\n position = this._adjustPos(position, true);\n }\n if (shouldReverseRightSide && widthIsBigger) {\n position = this._adjustPos(position);\n }\n if (isWidthOverFlow && (isViewXEnoughSideHalf || isContainerXEnoughSideHalf)) {\n position = this._adjustPos(position, true, 'reduce');\n }\n break;\n case 'right':\n if (shouldReverseRight) {\n position = this._adjustPos(position);\n }\n if (isYOverFlowSideHalf && (shouldReverseTopSide || shouldReverseBottomSide)) {\n position = this._adjustPos(position, false, 'expand', shouldReverseTopSide ? 'Bottom' : 'Top');\n }\n break;\n case 'rightTop':\n if (shouldReverseRight) {\n position = this._adjustPos(position);\n }\n if (shouldReverseTopSide && heightIsBigger) {\n position = this._adjustPos(position, true);\n }\n if (isHeightOverFlow && (isViewYEnoughSideHalf || isContainerYEnoughSideHalf)) {\n position = this._adjustPos(position, false, 'reduce');\n }\n break;\n case 'rightBottom':\n if (shouldReverseRight) {\n position = this._adjustPos(position);\n }\n if (shouldReverseBottomSide && heightIsBigger) {\n position = this._adjustPos(position, true);\n }\n if (isHeightOverFlow && (isViewYEnoughSideHalf || isContainerYEnoughSideHalf)) {\n position = this._adjustPos(position, false, 'reduce');\n }\n break;\n case 'leftTopOver':\n if (shouldReverseTopOver) {\n position = this._adjustPos(position, true);\n }\n if (shouldReverseLeftOver) {\n position = this._adjustPos(position);\n }\n break;\n case 'leftBottomOver':\n if (shouldReverseBottomOver) {\n position = this._adjustPos(position, true);\n }\n if (shouldReverseLeftOver) {\n position = this._adjustPos(position);\n }\n break;\n case 'rightTopOver':\n if (shouldReverseTopOver) {\n position = this._adjustPos(position, true);\n }\n if (shouldReverseRightOver) {\n position = this._adjustPos(position);\n }\n break;\n case 'rightBottomOver':\n if (shouldReverseBottomOver) {\n position = this._adjustPos(position, true);\n }\n if (shouldReverseRightOver) {\n position = this._adjustPos(position);\n }\n break;\n default:\n break;\n }\n // 判断溢出 Judgment overflow\n // 上下方向 top and bottom\n if (this.isTB(position)) {\n isHeightOverFlow = isViewYOverFlow && isContainerYOverFlow;\n // Related PR: https://github.com/DouyinFE/semi-design/pull/1297\n // If clientRight or restClientRight less than 0, means that the left and right parts of the trigger are blocked\n // Then the display of the wrapper will also be affected, make width overflow to offset the wrapper\n if (position === 'top' || position === 'bottom') {\n isWidthOverFlow = isViewXOverFlowSideHalf && isContainerXOverFlowSideHalf || clientRight < 0 || restClientRight < 0;\n } else {\n isWidthOverFlow = isViewXOverFlowSide && isContainerXOverFlowSide || clientRight < 0 || restClientRight < 0;\n }\n }\n // 左右方向 left and right\n if (this.isLR(position)) {\n isWidthOverFlow = isViewXOverFlow && isContainerXOverFlow;\n // If clientTop or restClientTop less than 0, means that the top and bottom parts of the trigger are blocked\n // Then the display of the wrapper will also be affected, make height overflow to offset the wrapper\n if (position === 'left' || position === 'right') {\n isHeightOverFlow = isViewYOverFlowSideHalf && isContainerYOverFlowSideHalf || clientTop < 0 || restClientTop < 0;\n } else {\n isHeightOverFlow = isViewYOverFlowSide && isContainerYOverFlowSide || clientTop < 0 || restClientTop < 0;\n }\n }\n }\n return {\n position,\n isHeightOverFlow,\n isWidthOverFlow\n };\n }\n _bindScrollEvent() {\n this._adapter.registerScrollHandler(() => this.calcPosition());\n // Capture scroll events on the window to determine whether the current scrolling area (e.target) will affect the positioning of the pop-up layer relative to the viewport when scrolling\n // (By determining whether the e.target contains the triggerDom of the current tooltip) If so, the pop-up layer will also be affected and needs to be repositioned\n }\n unBindScrollEvent() {\n this._adapter.unregisterScrollHandler();\n }\n _initContainerPosition() {\n this._adapter.updateContainerPosition();\n }\n _handleTriggerKeydown(event) {\n const {\n closeOnEsc,\n disableArrowKeyDown\n } = this.getProps();\n const container = this._adapter.getContainer();\n const focusableElements = this._adapter.getFocusableElements(container);\n const focusableNum = focusableElements.length;\n switch (event && event.key) {\n case \"Escape\":\n handlePrevent(event);\n closeOnEsc && this._handleEscKeyDown(event);\n break;\n case \"ArrowUp\":\n // when disableArrowKeyDown is true, disable tooltip's arrow keyboard event action\n !disableArrowKeyDown && focusableNum && this._handleTriggerArrowUpKeydown(focusableElements, event);\n break;\n case \"ArrowDown\":\n !disableArrowKeyDown && focusableNum && this._handleTriggerArrowDownKeydown(focusableElements, event);\n break;\n default:\n break;\n }\n }\n /**\n * focus trigger\n *\n * when trigger is 'focus' or 'hover', onFocus is bind to show popup\n * if we focus trigger, popup will show again\n *\n * 如果 trigger 是 focus 或者 hover,则它绑定了 onFocus,这里我们如果重新 focus 的话,popup 会再次打开\n * 因此 returnFocusOnClose 只支持 click trigger\n */\n focusTrigger() {\n const {\n trigger,\n returnFocusOnClose,\n preventScroll\n } = this.getProps();\n if (returnFocusOnClose && trigger !== 'custom') {\n const triggerNode = this._adapter.getTriggerNode();\n if (triggerNode && 'focus' in triggerNode) {\n triggerNode.focus({\n preventScroll\n });\n }\n }\n }\n _handleEscKeyDown(event) {\n const {\n trigger\n } = this.getProps();\n if (trigger !== 'custom') {\n // Move the focus into the trigger first and then close the pop-up layer \n // to avoid the problem of opening the pop-up layer again when the focus returns to the trigger in the case of hover and focus\n this.focusTrigger();\n this.hide();\n }\n this._adapter.notifyEscKeydown(event);\n }\n _handleContainerTabKeyDown(focusableElements, event) {\n const {\n preventScroll\n } = this.getProps();\n const activeElement = this._adapter.getActiveElement();\n const isLastCurrentFocus = focusableElements[focusableElements.length - 1] === activeElement;\n if (isLastCurrentFocus) {\n focusableElements[0].focus({\n preventScroll\n });\n event.preventDefault(); // prevent browser default tab move behavior\n }\n }\n _handleContainerShiftTabKeyDown(focusableElements, event) {\n const {\n preventScroll\n } = this.getProps();\n const activeElement = this._adapter.getActiveElement();\n const isFirstCurrentFocus = focusableElements[0] === activeElement;\n if (isFirstCurrentFocus) {\n focusableElements[focusableElements.length - 1].focus({\n preventScroll\n });\n event.preventDefault(); // prevent browser default tab move behavior\n }\n }\n _handleTriggerArrowDownKeydown(focusableElements, event) {\n const {\n preventScroll\n } = this.getProps();\n focusableElements[0].focus({\n preventScroll\n });\n event.preventDefault(); // prevent browser default scroll behavior\n }\n _handleTriggerArrowUpKeydown(focusableElements, event) {\n const {\n preventScroll\n } = this.getProps();\n focusableElements[focusableElements.length - 1].focus({\n preventScroll\n });\n event.preventDefault(); // prevent browser default scroll behavior\n }\n}","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nconst TriangleArrow = props => {\n const {\n className,\n style\n } = props,\n restProps = __rest(props, [\"className\", \"style\"]);\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n \"aria-hidden\": true,\n className: className,\n style: style\n }, restProps, {\n width: \"24\",\n height: \"7\",\n viewBox: \"0 0 24 7\",\n fill: \"currentColor\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24 0V1C20 1 18.5 2 16.5 4C14.5 6 14 7 12 7C10 7 9.5 6 7.5 4C5.5 2 4 1 0 1V0H24Z\"\n }));\n};\nexport default TriangleArrow;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nconst TriangleArrowVertical = props => {\n const {\n className,\n style\n } = props,\n restProps = __rest(props, [\"className\", \"style\"]);\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n \"aria-hidden\": true,\n className: className,\n style: style\n }, restProps, {\n width: \"7\",\n height: \"24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0L1 0C1 4, 2 5.5, 4 7.5S7,10 7,12S6 14.5, 4 16.5S1,20 1,24L0 24L0 0z\"\n }));\n};\nexport default TriangleArrowVertical;","import PropTypes from 'prop-types';\nexport default PropTypes.shape({\n offsetX: PropTypes.number,\n offsetY: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number\n});","import _isEqual from \"lodash/isEqual\";\nimport _isFunction from \"lodash/isFunction\";\nimport _isEmpty from \"lodash/isEmpty\";\nimport _each from \"lodash/each\";\nimport _omit from \"lodash/omit\";\nimport _get from \"lodash/get\";\nimport _noop from \"lodash/noop\";\nimport _throttle from \"lodash/throttle\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { isValidElement, cloneElement } from 'react';\nimport ReactDOM, { findDOMNode } from 'react-dom';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { BASE_CLASS_PREFIX } from '@douyinfe/semi-foundation/lib/es/base/constants';\nimport warning from '@douyinfe/semi-foundation/lib/es/utils/warning';\nimport Event from '@douyinfe/semi-foundation/lib/es/utils/Event';\nimport { convertDOMRectToObject } from '@douyinfe/semi-foundation/lib/es/utils/dom';\nimport TooltipFoundation from '@douyinfe/semi-foundation/lib/es/tooltip/foundation';\nimport { strings, cssClasses, numbers } from '@douyinfe/semi-foundation/lib/es/tooltip/constants';\nimport { getUuidShort } from '@douyinfe/semi-foundation/lib/es/utils/uuid';\nimport '@douyinfe/semi-foundation/lib/es/tooltip/tooltip.css';\nimport BaseComponent from '../_base/baseComponent';\nimport { isHTMLElement } from '../_base/reactUtils';\nimport { getActiveElement, getDefaultPropsFromGlobalConfig, getFocusableElements, runAfterTicks, stopPropagation } from '../_utils';\nimport Portal from '../_portal/index';\nimport ConfigContext from '../configProvider/context';\nimport TriangleArrow from './TriangleArrow';\nimport TriangleArrowVertical from './TriangleArrowVertical';\nimport ArrowBoundingShape from './ArrowBoundingShape';\nimport CSSAnimation from \"../_cssAnimation\";\nconst prefix = cssClasses.PREFIX;\nconst positionSet = strings.POSITION_SET;\nconst triggerSet = strings.TRIGGER_SET;\nconst blockDisplays = ['flex', 'block', 'table', 'flow-root', 'grid'];\nconst defaultGetContainer = () => document.body;\nexport default class Tooltip extends BaseComponent {\n constructor(props) {\n super(props);\n this.isAnimating = false;\n this.setContainerEl = node => this.containerEl = {\n current: node\n };\n this.isSpecial = elem => {\n if (isHTMLElement(elem)) {\n return Boolean(elem.disabled);\n } else if (/*#__PURE__*/isValidElement(elem)) {\n const disabled = _get(elem, 'props.disabled');\n if (disabled) {\n return strings.STATUS_DISABLED;\n }\n const loading = _get(elem, 'props.loading');\n /* Only judge the loading state of the Button, and no longer judge other components */\n const isButton = !_isEmpty(elem) && !_isEmpty(elem.type) && (_get(elem, 'type.elementType') === 'Button' || _get(elem, 'type.elementType') === 'IconButton');\n if (loading && isButton) {\n return strings.STATUS_LOADING;\n }\n }\n return false;\n };\n // willEnter = () => {\n // this.foundation.calcPosition();\n // this.setState({ visible: true });\n // };\n this.didLeave = () => {\n if (this.props.keepDOM) {\n this.foundation.setDisplayNone(true);\n } else {\n this.foundation.removePortal();\n }\n this.foundation.unBindEvent();\n };\n this.renderIcon = () => {\n const {\n placement\n } = this.state;\n const {\n showArrow,\n prefixCls,\n style\n } = this.props;\n let icon = null;\n const triangleCls = classNames([`${prefixCls}-icon-arrow`]);\n const bgColor = _get(style, 'backgroundColor');\n const iconComponent = (placement === null || placement === void 0 ? void 0 : placement.includes('left')) || (placement === null || placement === void 0 ? void 0 : placement.includes('right')) ? /*#__PURE__*/React.createElement(TriangleArrowVertical, null) : /*#__PURE__*/React.createElement(TriangleArrow, null);\n if (showArrow) {\n if (/*#__PURE__*/isValidElement(showArrow)) {\n icon = showArrow;\n } else {\n icon = /*#__PURE__*/React.cloneElement(iconComponent, {\n className: triangleCls,\n style: {\n color: bgColor,\n fill: 'currentColor'\n }\n });\n }\n }\n return icon;\n };\n this.handlePortalInnerClick = e => {\n if (this.props.clickToHide) {\n this.foundation.hide();\n }\n if (this.props.stopPropagation) {\n stopPropagation(e);\n }\n };\n this.handlePortalMouseDown = e => {\n if (this.props.stopPropagation) {\n stopPropagation(e);\n }\n };\n this.handlePortalFocus = e => {\n if (this.props.stopPropagation) {\n stopPropagation(e);\n }\n };\n this.handlePortalBlur = e => {\n if (this.props.stopPropagation) {\n stopPropagation(e);\n }\n };\n this.handlePortalInnerKeyDown = e => {\n this.foundation.handleContainerKeydown(e);\n };\n this.renderContentNode = content => {\n const contentProps = {\n initialFocusRef: this.initialFocusRef\n };\n return !_isFunction(content) ? content : content(contentProps);\n };\n this.renderPortal = () => {\n const {\n containerStyle = {},\n visible,\n portalEventSet,\n placement,\n displayNone,\n transitionState,\n id,\n isPositionUpdated\n } = this.state;\n const {\n prefixCls,\n content,\n showArrow,\n style,\n motion,\n role,\n zIndex\n } = this.props;\n const contentNode = this.renderContentNode(content);\n const {\n className: propClassName\n } = this.props;\n const direction = this.context.direction;\n const className = classNames(propClassName, {\n [`${prefixCls}-wrapper`]: true,\n [`${prefixCls}-wrapper-show`]: visible,\n [`${prefixCls}-with-arrow`]: Boolean(showArrow),\n [`${prefixCls}-rtl`]: direction === 'rtl'\n });\n const icon = this.renderIcon();\n const portalInnerStyle = _omit(containerStyle, motion ? ['transformOrigin'] : undefined);\n const transformOrigin = _get(containerStyle, 'transformOrigin');\n const userOpacity = _get(style, 'opacity', null);\n const opacity = userOpacity ? userOpacity : 1;\n const inner = /*#__PURE__*/React.createElement(CSSAnimation, {\n fillMode: \"forwards\",\n animationState: transitionState,\n motion: motion && isPositionUpdated,\n startClassName: transitionState === 'enter' ? `${prefix}-animation-show` : `${prefix}-animation-hide`,\n onAnimationStart: () => this.isAnimating = true,\n onAnimationEnd: () => {\n var _a, _b;\n if (transitionState === 'leave') {\n this.didLeave();\n (_b = (_a = this.props).afterClose) === null || _b === void 0 ? void 0 : _b.call(_a);\n }\n this.isAnimating = false;\n }\n }, _ref => {\n let {\n animationStyle,\n animationClassName,\n animationEventsNeedBind\n } = _ref;\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n className: classNames(className, animationClassName),\n style: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, animationStyle), displayNone ? {\n display: \"none\"\n } : {}), {\n transformOrigin\n }), style), userOpacity ? {\n opacity: isPositionUpdated ? opacity : \"0\"\n } : {})\n }, portalEventSet, animationEventsNeedBind, {\n role: role,\n \"x-placement\": placement,\n id: id\n }), /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefix}-content`\n }, contentNode), icon);\n });\n return /*#__PURE__*/React.createElement(Portal, {\n getPopupContainer: this.props.getPopupContainer,\n style: {\n zIndex\n }\n }, /*#__PURE__*/React.createElement(\"div\", {\n // listen keyboard event, don't move tabIndex -1\n tabIndex: -1,\n className: `${BASE_CLASS_PREFIX}-portal-inner`,\n style: portalInnerStyle,\n ref: this.setContainerEl,\n onClick: this.handlePortalInnerClick,\n onFocus: this.handlePortalFocus,\n onBlur: this.handlePortalBlur,\n onMouseDown: this.handlePortalMouseDown,\n onKeyDown: this.handlePortalInnerKeyDown\n }, inner));\n };\n this.wrapSpan = elem => {\n const {\n wrapperClassName\n } = this.props;\n const display = _get(elem, 'props.style.display');\n const block = _get(elem, 'props.block');\n const isStringElem = typeof elem == 'string';\n const style = {};\n if (!isStringElem) {\n style.display = 'inline-block';\n }\n if (block || blockDisplays.includes(display)) {\n style.width = '100%';\n }\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n return /*#__PURE__*/React.createElement(\"span\", {\n className: wrapperClassName,\n style: style\n }, elem);\n };\n this.mergeEvents = (rawEvents, events) => {\n const mergedEvents = {};\n _each(events, (handler, key) => {\n if (typeof handler === 'function') {\n mergedEvents[key] = function () {\n handler(...arguments);\n if (rawEvents && typeof rawEvents[key] === 'function') {\n rawEvents[key](...arguments);\n }\n };\n }\n });\n return mergedEvents;\n };\n this.getPopupId = () => {\n return this.state.id;\n };\n this.state = {\n visible: false,\n /**\n *\n * Note: The transitionState parameter is equivalent to isInsert\n */\n transitionState: '',\n triggerEventSet: {},\n portalEventSet: {},\n containerStyle: {\n // zIndex: props.zIndex,\n },\n isInsert: false,\n placement: props.position || 'top',\n transitionStyle: {},\n isPositionUpdated: false,\n id: props.wrapperId,\n displayNone: false\n };\n this.foundation = new TooltipFoundation(this.adapter);\n this.eventManager = new Event();\n this.triggerEl = /*#__PURE__*/React.createRef();\n this.containerEl = /*#__PURE__*/React.createRef();\n this.initialFocusRef = /*#__PURE__*/React.createRef();\n this.clickOutsideHandler = null;\n this.resizeHandler = null;\n this.isWrapped = false; // Identifies whether a span element is wrapped\n this.containerPosition = undefined;\n }\n get adapter() {\n var _this = this;\n return Object.assign(Object.assign({}, super.adapter), {\n // @ts-ignore\n on: function () {\n return _this.eventManager.on(...arguments);\n },\n // @ts-ignore\n off: function () {\n return _this.eventManager.off(...arguments);\n },\n getAnimatingState: () => this.isAnimating,\n insertPortal: (content, _a) => {\n var {\n position\n } = _a,\n containerStyle = __rest(_a, [\"position\"]);\n this.setState({\n isInsert: true,\n transitionState: 'enter',\n containerStyle: Object.assign(Object.assign({}, this.state.containerStyle), containerStyle)\n }, () => {\n setTimeout(() => {\n this.setState(oldState => {\n if (oldState.transitionState === 'enter') {\n this.eventManager.emit('portalInserted');\n }\n return {};\n });\n // waiting child component mounted\n }, 0);\n });\n },\n removePortal: () => {\n this.setState({\n isInsert: false,\n isPositionUpdated: false\n });\n },\n getEventName: () => ({\n mouseEnter: 'onMouseEnter',\n mouseLeave: 'onMouseLeave',\n mouseOut: 'onMouseOut',\n mouseOver: 'onMouseOver',\n click: 'onClick',\n focus: 'onFocus',\n blur: 'onBlur',\n keydown: 'onKeyDown',\n contextMenu: 'onContextMenu'\n }),\n registerTriggerEvent: triggerEventSet => {\n this.setState({\n triggerEventSet\n });\n },\n registerPortalEvent: portalEventSet => {\n this.setState({\n portalEventSet\n });\n },\n getTriggerBounding: () => {\n // It may be a React component or an html element\n // There is no guarantee that triggerE l.current can get the real dom, so call findDOMNode to ensure that you can get the real dom\n const triggerDOM = this.adapter.getTriggerNode();\n this.triggerEl.current = triggerDOM;\n return triggerDOM && triggerDOM.getBoundingClientRect();\n },\n // Gets the outer size of the specified container\n getPopupContainerRect: () => {\n const container = this.getPopupContainer();\n let rect = null;\n if (container && isHTMLElement(container)) {\n const boundingRect = convertDOMRectToObject(container.getBoundingClientRect());\n rect = Object.assign(Object.assign({}, boundingRect), {\n scrollLeft: container.scrollLeft,\n scrollTop: container.scrollTop\n });\n }\n return rect;\n },\n containerIsBody: () => {\n const container = this.getPopupContainer();\n return container === document.body;\n },\n containerIsRelative: () => {\n const container = this.getPopupContainer();\n const computedStyle = window.getComputedStyle(container);\n return computedStyle.getPropertyValue('position') === 'relative';\n },\n containerIsRelativeOrAbsolute: () => ['relative', 'absolute'].includes(this.containerPosition),\n // Get the size of the pop-up layer\n getWrapperBounding: () => {\n const el = this.containerEl && this.containerEl.current;\n return el && el.getBoundingClientRect();\n },\n getDocumentElementBounding: () => document.documentElement.getBoundingClientRect(),\n setPosition: _a => {\n var {\n position\n } = _a,\n style = __rest(_a, [\"position\"]);\n this.setState({\n containerStyle: Object.assign(Object.assign({}, this.state.containerStyle), style),\n placement: position,\n isPositionUpdated: true\n }, () => {\n this.eventManager.emit('positionUpdated');\n });\n },\n setDisplayNone: (displayNone, cb) => {\n this.setState({\n displayNone\n }, cb);\n },\n updatePlacementAttr: placement => {\n this.setState({\n placement\n });\n },\n togglePortalVisible: (visible, cb) => {\n const willUpdateStates = {};\n willUpdateStates.transitionState = visible ? 'enter' : 'leave';\n willUpdateStates.visible = visible;\n this.mounted && this.setState(willUpdateStates, () => {\n cb();\n });\n },\n registerClickOutsideHandler: cb => {\n if (this.clickOutsideHandler) {\n this.adapter.unregisterClickOutsideHandler();\n }\n this.clickOutsideHandler = e => {\n if (!this.mounted) {\n return false;\n }\n let el = this.triggerEl && this.triggerEl.current;\n let popupEl = this.containerEl && this.containerEl.current;\n el = ReactDOM.findDOMNode(el);\n popupEl = ReactDOM.findDOMNode(popupEl);\n const target = e.target;\n const path = e.composedPath && e.composedPath() || [target];\n const isClickTriggerToHide = this.props.clickTriggerToHide ? el && el.contains(target) || path.includes(el) : false;\n if (el && !el.contains(target) && popupEl && !popupEl.contains(target) && !(path.includes(popupEl) || path.includes(el)) || isClickTriggerToHide) {\n this.props.onClickOutSide(e);\n cb();\n }\n };\n window.addEventListener('mousedown', this.clickOutsideHandler);\n },\n unregisterClickOutsideHandler: () => {\n if (this.clickOutsideHandler) {\n window.removeEventListener('mousedown', this.clickOutsideHandler);\n this.clickOutsideHandler = null;\n }\n },\n registerResizeHandler: cb => {\n if (this.resizeHandler) {\n this.adapter.unregisterResizeHandler();\n }\n this.resizeHandler = _throttle(e => {\n if (!this.mounted) {\n return false;\n }\n cb(e);\n }, 10);\n window.addEventListener('resize', this.resizeHandler, false);\n },\n unregisterResizeHandler: () => {\n if (this.resizeHandler) {\n window.removeEventListener('resize', this.resizeHandler, false);\n this.resizeHandler = null;\n }\n },\n notifyVisibleChange: visible => {\n this.props.onVisibleChange(visible);\n },\n registerScrollHandler: rePositionCb => {\n if (this.scrollHandler) {\n this.adapter.unregisterScrollHandler();\n }\n this.scrollHandler = _throttle(e => {\n if (!this.mounted) {\n return false;\n }\n const triggerDOM = this.adapter.getTriggerNode();\n const isRelativeScroll = e.target.contains(triggerDOM);\n if (isRelativeScroll) {\n const scrollPos = {\n x: e.target.scrollLeft,\n y: e.target.scrollTop\n };\n rePositionCb(scrollPos);\n }\n }, 10); // When it is greater than 16ms, it will be very obvious\n window.addEventListener('scroll', this.scrollHandler, true);\n },\n unregisterScrollHandler: () => {\n if (this.scrollHandler) {\n window.removeEventListener('scroll', this.scrollHandler, true);\n this.scrollHandler = null;\n }\n },\n canMotion: () => Boolean(this.props.motion),\n updateContainerPosition: () => {\n const container = this.getPopupContainer();\n if (container && isHTMLElement(container)) {\n // getComputedStyle need first parameter is Element type\n const computedStyle = window.getComputedStyle(container);\n const position = computedStyle.getPropertyValue('position');\n this.containerPosition = position;\n }\n },\n getContainerPosition: () => this.containerPosition,\n getContainer: () => this.containerEl && this.containerEl.current,\n getTriggerNode: () => {\n let triggerDOM = this.triggerEl.current;\n if (!isHTMLElement(this.triggerEl.current)) {\n triggerDOM = ReactDOM.findDOMNode(this.triggerEl.current);\n }\n return triggerDOM;\n },\n getFocusableElements: node => {\n return getFocusableElements(node);\n },\n getActiveElement: () => {\n return getActiveElement();\n },\n setInitialFocus: () => {\n const {\n preventScroll\n } = this.props;\n const focusRefNode = _get(this, 'initialFocusRef.current');\n if (focusRefNode && 'focus' in focusRefNode) {\n focusRefNode.focus({\n preventScroll\n });\n }\n },\n notifyEscKeydown: event => {\n this.props.onEscKeyDown(event);\n },\n setId: () => {\n this.setState({\n id: getUuidShort()\n });\n },\n getTriggerDOM: () => {\n if (this.triggerEl.current) {\n return ReactDOM.findDOMNode(this.triggerEl.current);\n } else {\n return null;\n }\n }\n });\n }\n componentDidMount() {\n this.mounted = true;\n this.getPopupContainer = this.props.getPopupContainer || this.context.getPopupContainer || defaultGetContainer;\n this.foundation.init();\n runAfterTicks(() => {\n let triggerEle = this.triggerEl.current;\n if (triggerEle) {\n if (!(triggerEle instanceof HTMLElement)) {\n triggerEle = findDOMNode(triggerEle);\n }\n }\n this.foundation.updateStateIfCursorOnTrigger(triggerEle);\n }, 1);\n }\n componentWillUnmount() {\n this.mounted = false;\n this.foundation.destroy();\n }\n /**\n * focus on tooltip trigger\n */\n focusTrigger() {\n this.foundation.focusTrigger();\n }\n /** for transition - end */\n rePosition() {\n return this.foundation.calcPosition();\n }\n componentDidUpdate(prevProps, prevState) {\n warning(this.props.mouseLeaveDelay < this.props.mouseEnterDelay, \"[Semi Tooltip] 'mouseLeaveDelay' cannot be less than 'mouseEnterDelay', which may cause the dropdown layer to not be hidden.\");\n if (prevProps.visible !== this.props.visible) {\n if (['hover', 'focus'].includes(this.props.trigger)) {\n this.props.visible ? this.foundation.delayShow() : this.foundation.delayHide();\n } else {\n this.props.visible ? this.foundation.show() : this.foundation.hide();\n }\n }\n if (!_isEqual(prevProps.rePosKey, this.props.rePosKey)) {\n this.rePosition();\n }\n }\n render() {\n const {\n isInsert,\n triggerEventSet,\n visible,\n id\n } = this.state;\n const {\n wrapWhenSpecial,\n role,\n trigger\n } = this.props;\n let {\n children\n } = this.props;\n const childrenStyle = Object.assign({}, _get(children, 'props.style'));\n const extraStyle = {};\n if (wrapWhenSpecial) {\n const isSpecial = this.isSpecial(children);\n if (isSpecial) {\n childrenStyle.pointerEvents = 'none';\n if (isSpecial === strings.STATUS_DISABLED) {\n extraStyle.cursor = 'not-allowed';\n }\n children = /*#__PURE__*/cloneElement(children, {\n style: childrenStyle\n });\n if (trigger !== 'custom') {\n // no need to wrap span when trigger is custom, cause it don't need bind event\n children = this.wrapSpan(children);\n }\n this.isWrapped = true;\n } else if (! /*#__PURE__*/isValidElement(children)) {\n children = this.wrapSpan(children);\n this.isWrapped = true;\n }\n }\n let ariaAttribute = {};\n // Take effect when used by Popover component\n if (role === 'dialog') {\n ariaAttribute['aria-expanded'] = visible ? 'true' : 'false';\n ariaAttribute['aria-haspopup'] = 'dialog';\n ariaAttribute['aria-controls'] = id;\n } else {\n ariaAttribute['aria-describedby'] = id;\n }\n // The incoming children is a single valid element, otherwise wrap a layer with span\n const newChild = /*#__PURE__*/React.cloneElement(children, Object.assign(Object.assign(Object.assign(Object.assign({}, ariaAttribute), children.props), this.mergeEvents(children.props, triggerEventSet)), {\n style: Object.assign(Object.assign({}, _get(children, 'props.style')), extraStyle),\n className: classNames(_get(children, 'props.className')),\n // to maintain refs with callback\n ref: node => {\n // Keep your own reference\n this.triggerEl.current = node;\n // Call the original ref, if any\n const {\n ref\n } = children;\n // this.log('tooltip render() - get ref', ref);\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref && typeof ref === 'object') {\n ref.current = node;\n }\n },\n tabIndex: children.props.tabIndex || 0,\n 'data-popupid': id\n }));\n // If you do not add a layer of div, in order to bind the events and className in the tooltip, you need to cloneElement children, but this time it may overwrite the children's original ref reference\n // So if the user adds ref to the content, you need to use callback ref: https://github.com/facebook/react/issues/8873\n return /*#__PURE__*/React.createElement(React.Fragment, null, isInsert ? this.renderPortal() : null, newChild);\n }\n}\nTooltip.contextType = ConfigContext;\nTooltip.propTypes = {\n children: PropTypes.node,\n motion: PropTypes.bool,\n autoAdjustOverflow: PropTypes.bool,\n position: PropTypes.oneOf(positionSet),\n getPopupContainer: PropTypes.func,\n mouseEnterDelay: PropTypes.number,\n mouseLeaveDelay: PropTypes.number,\n trigger: PropTypes.oneOf(triggerSet).isRequired,\n className: PropTypes.string,\n wrapperClassName: PropTypes.string,\n clickToHide: PropTypes.bool,\n // used with trigger === hover, private\n clickTriggerToHide: PropTypes.bool,\n visible: PropTypes.bool,\n style: PropTypes.object,\n content: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n prefixCls: PropTypes.string,\n onVisibleChange: PropTypes.func,\n onClickOutSide: PropTypes.func,\n spacing: PropTypes.oneOfType([PropTypes.number, PropTypes.object]),\n margin: PropTypes.oneOfType([PropTypes.number, PropTypes.object]),\n showArrow: PropTypes.oneOfType([PropTypes.bool, PropTypes.node]),\n zIndex: PropTypes.number,\n rePosKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n arrowBounding: ArrowBoundingShape,\n transformFromCenter: PropTypes.bool,\n arrowPointAtCenter: PropTypes.bool,\n stopPropagation: PropTypes.bool,\n // private\n role: PropTypes.string,\n wrapWhenSpecial: PropTypes.bool,\n guardFocus: PropTypes.bool,\n returnFocusOnClose: PropTypes.bool,\n preventScroll: PropTypes.bool,\n keepDOM: PropTypes.bool\n};\nTooltip.__SemiComponentName__ = \"Tooltip\";\nTooltip.defaultProps = getDefaultPropsFromGlobalConfig(Tooltip.__SemiComponentName__, {\n arrowBounding: numbers.ARROW_BOUNDING,\n autoAdjustOverflow: true,\n arrowPointAtCenter: true,\n trigger: 'hover',\n transformFromCenter: true,\n position: 'top',\n prefixCls: prefix,\n role: 'tooltip',\n mouseEnterDelay: numbers.MOUSE_ENTER_DELAY,\n mouseLeaveDelay: numbers.MOUSE_LEAVE_DELAY,\n motion: true,\n onVisibleChange: _noop,\n onClickOutSide: _noop,\n spacing: numbers.SPACING,\n margin: numbers.MARGIN,\n showArrow: true,\n wrapWhenSpecial: true,\n zIndex: numbers.DEFAULT_Z_INDEX,\n closeOnEsc: false,\n guardFocus: false,\n returnFocusOnClose: false,\n onEscKeyDown: _noop,\n disableFocusListener: false,\n disableArrowKeyDown: false,\n keepDOM: false\n});","import * as React from 'react';\nimport { convertIcon } from '../components/Icon';\nfunction SvgComponent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n focusable: false,\n \"aria-hidden\": true\n }, props), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7 4c0-1.1.9-2 2-2h11a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2h-1V8c0-2-1-3-3-3H7V4Z\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5 7a2 2 0 0 0-2 2v10c0 1.1.9 2 2 2h10a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2H5Z\",\n fill: \"currentColor\"\n }));\n}\nconst IconComponent = convertIcon(SvgComponent, 'copy');\nexport default IconComponent;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Tooltip from '../tooltip/index';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/typography/constants';\nimport copy from 'copy-text-to-clipboard';\nimport cls from 'classnames';\nimport { noop } from '@douyinfe/semi-foundation/lib/es/utils/function';\nimport LocaleConsumer from '../locale/localeConsumer';\nimport { IconCopy, IconTick } from '@douyinfe/semi-icons';\nimport isEnterPress from '@douyinfe/semi-foundation/lib/es/utils/isEnterPress';\nconst prefixCls = cssClasses.PREFIX;\nexport class Copyable extends React.PureComponent {\n constructor(props) {\n super(props);\n this.copy = e => {\n const {\n content,\n duration,\n onCopy\n } = this.props;\n const res = copy(content);\n onCopy && onCopy(e, content, res);\n this.setCopied(content, duration);\n };\n this.setCopied = (item, timer) => {\n this.setState({\n copied: true,\n item\n });\n this._timeId = setTimeout(() => {\n this.resetCopied();\n }, timer * 1000);\n };\n this.resetCopied = () => {\n if (this._timeId) {\n clearTimeout(this._timeId);\n this._timeId = null;\n this.setState({\n copied: false,\n item: ''\n });\n }\n };\n this.renderSuccessTip = () => {\n const {\n successTip\n } = this.props;\n if (typeof successTip !== 'undefined') {\n return successTip;\n }\n return /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Typography\"\n }, locale => (/*#__PURE__*/React.createElement(\"span\", null, /*#__PURE__*/React.createElement(IconTick, null), locale.copied)));\n };\n this.renderCopyIcon = () => {\n const {\n icon\n } = this.props;\n const copyProps = {\n role: \"button\",\n tabIndex: 0,\n onClick: this.copy,\n onKeyPress: e => isEnterPress(e) && this.copy(e)\n };\n {/* TODO: replace `a` tag with `span` in next major version\n NOTE: may have effect on style */\n }\n const defaultIcon =\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\n React.createElement(\"a\", {\n className: `${prefixCls}-action-copy-icon`\n }, /*#__PURE__*/React.createElement(IconCopy, Object.assign({\n onClick: this.copy\n }, copyProps)));\n return /*#__PURE__*/React.isValidElement(icon) ? /*#__PURE__*/React.cloneElement(icon, copyProps) : defaultIcon;\n };\n this.state = {\n copied: false,\n item: ''\n };\n }\n componentWillUnmount() {\n if (this._timeId) {\n clearTimeout(this._timeId);\n this._timeId = null;\n }\n }\n render() {\n const {\n style,\n className,\n forwardRef,\n copyTip,\n render\n } = this.props;\n const {\n copied\n } = this.state;\n const finalCls = cls(className, {\n [`${prefixCls}-action-copy`]: !copied,\n [`${prefixCls}-action-copied`]: copied\n });\n if (render) {\n return render(copied, this.copy, this.props);\n }\n return /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Typography\"\n }, locale => (/*#__PURE__*/React.createElement(\"span\", {\n style: Object.assign({\n marginLeft: '4px'\n }, style),\n className: finalCls,\n ref: forwardRef\n }, copied ? this.renderSuccessTip() : (/*#__PURE__*/React.createElement(Tooltip, {\n content: typeof copyTip !== 'undefined' ? copyTip : locale.copy\n }, this.renderCopyIcon())))));\n }\n}\nCopyable.propTypes = {\n content: PropTypes.string,\n onCopy: PropTypes.func,\n successTip: PropTypes.node,\n copyTip: PropTypes.node,\n duration: PropTypes.number,\n style: PropTypes.object,\n className: PropTypes.string,\n icon: PropTypes.node\n};\nCopyable.defaultProps = {\n content: '',\n onCopy: noop,\n duration: 3,\n style: {},\n className: ''\n};\nexport default Copyable;","import _omit from \"lodash/omit\";\nimport ReactDOM from 'react-dom';\nimport React from 'react';\n/**\n * The logic of JS for text truncation is referenced from antd typography\n * https://github.com/ant-design/ant-design/blob/master/components/typography/util.tsx\n *\n * For more thinking and analysis about this function, please refer to Feishu document\n * https://bytedance.feishu.cn/docs/doccnqovjjyoKm2U5O13bj30aTh\n */\nlet ellipsisContainer;\nfunction pxToNumber(value) {\n if (!value) {\n return 0;\n }\n const match = value.match(/^\\d*(\\.\\d*)?/);\n return match ? Number(match[0]) : 0;\n}\nfunction styleToString(style) {\n // There are some different behavior between Firefox & Chrome.\n // We have to handle this ourself.\n const styleNames = Array.prototype.slice.apply(style);\n return styleNames.map(name => `${name}: ${style.getPropertyValue(name)};`).join('');\n}\nconst getRenderText = function (originEle, rows) {\n let content = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n let fixedContent = arguments.length > 3 ? arguments[3] : undefined;\n let ellipsisStr = arguments.length > 4 ? arguments[4] : undefined;\n let suffix = arguments.length > 5 ? arguments[5] : undefined;\n let ellipsisPos = arguments.length > 6 ? arguments[6] : undefined;\n let isStrong = arguments.length > 7 ? arguments[7] : undefined;\n if (content.length === 0) {\n return '';\n }\n if (!ellipsisContainer) {\n ellipsisContainer = document.createElement('div');\n ellipsisContainer.setAttribute('aria-hidden', 'true');\n document.body.appendChild(ellipsisContainer);\n }\n // Get origin style\n const originStyle = window.getComputedStyle(originEle);\n const originCSS = styleToString(originStyle);\n const lineHeight = pxToNumber(originStyle.lineHeight);\n const maxHeight = Math.round(lineHeight * (rows + 1) + pxToNumber(originStyle.paddingTop) + pxToNumber(originStyle.paddingBottom));\n // Set shadow\n ellipsisContainer.setAttribute('style', originCSS);\n ellipsisContainer.style.position = 'fixed';\n ellipsisContainer.style.left = '0';\n // 当 window.getComputedStyle 得到的 width 值为 auto 时,通过 getBoundingClientRect 得到准确宽度\n // When the width value obtained by window.getComputedStyle is auto, get the exact width through getBoundingClientRect\n if (originStyle.getPropertyValue('width') === 'auto') {\n ellipsisContainer.style.width = `${originEle.offsetWidth}px`;\n }\n ellipsisContainer.style.height = 'auto';\n ellipsisContainer.style.top = '-999999px';\n ellipsisContainer.style.zIndex = '-1000';\n isStrong && (ellipsisContainer.style.fontWeight = '600');\n // clean up css overflow\n ellipsisContainer.style.textOverflow = 'clip';\n ellipsisContainer.style.webkitLineClamp = 'none';\n // Render fake container\n ReactDOM.render(/*#__PURE__*/React.createElement(React.Fragment, null), ellipsisContainer);\n // Check if ellipsis in measure div is enough for content\n function inRange() {\n // If content does not wrap due to line break strategy, width should be judged to determine whether it's in range\n const widthInRange = ellipsisContainer.scrollWidth <= ellipsisContainer.offsetWidth;\n const heightInRange = ellipsisContainer.scrollHeight < maxHeight;\n return rows === 1 ? widthInRange && heightInRange : heightInRange;\n }\n // ========================= Find match ellipsis content =========================\n // Create origin content holder\n const ellipsisContentHolder = document.createElement('span');\n const textNode = document.createTextNode(content);\n ellipsisContentHolder.appendChild(textNode);\n if (suffix.length > 0) {\n const ellipsisTextNode = document.createTextNode(suffix);\n ellipsisContentHolder.appendChild(ellipsisTextNode);\n }\n ellipsisContainer.appendChild(ellipsisContentHolder);\n // Expand node needs to be added only when text needTruncated\n Object.values(_omit(fixedContent, 'expand')).map(node => node && ellipsisContainer.appendChild(node.cloneNode(true)));\n function appendExpandNode() {\n ellipsisContainer.innerHTML = '';\n ellipsisContainer.appendChild(ellipsisContentHolder);\n Object.values(fixedContent).map(node => node && ellipsisContainer.appendChild(node.cloneNode(true)));\n }\n function getCurrentText(text, pos) {\n const end = text.length;\n if (!pos) {\n return ellipsisStr;\n }\n if (ellipsisPos === 'end') {\n return text.slice(0, pos) + ellipsisStr;\n }\n return text.slice(0, pos) + ellipsisStr + text.slice(end - pos, end);\n }\n // Get maximum text\n function measureText(textNode, fullText) {\n let startLoc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n let endLoc = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : fullText.length;\n let lastSuccessLoc = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n const midLoc = Math.floor((startLoc + endLoc) / 2);\n const currentText = getCurrentText(fullText, midLoc);\n textNode.textContent = currentText;\n // console.log('calculating....', currentText);\n if (startLoc >= endLoc - 1 && endLoc > 0) {\n // Loop when step is small\n for (let step = endLoc; step >= startLoc; step -= 1) {\n const currentStepText = getCurrentText(fullText, step);\n textNode.textContent = currentStepText;\n if (inRange()) {\n return currentStepText;\n }\n }\n } else if (endLoc === 0) {\n return ellipsisStr;\n }\n if (inRange()) {\n return measureText(textNode, fullText, midLoc, endLoc, midLoc);\n }\n return measureText(textNode, fullText, startLoc, midLoc, lastSuccessLoc);\n }\n let resText = content;\n // First judge whether the total length of fullText, plus suffix (possible)\n // and copied icon (possible) meets expectations? \n // If it does not meet expectations, add an expand button to find the largest content that meets size limit\n // 首先判断总文本长度,加上可能有的 suffix,复制按钮长度,看结果是否符合预期\n // 如果不符合预期,则再加上展开按钮,找最大符合尺寸的内容\n if (!inRange()) {\n appendExpandNode();\n resText = measureText(textNode, content, 0, ellipsisPos === 'middle' ? Math.floor(content.length / 2) : content.length);\n }\n ellipsisContainer.innerHTML = '';\n return resText;\n};\nexport default getRenderText;","import React from 'react';\nconst SizeContext = /*#__PURE__*/React.createContext('normal');\nexport default SizeContext;","import _isFunction from \"lodash/isFunction\";\nimport _isNull from \"lodash/isNull\";\nimport _isString from \"lodash/isString\";\nimport _merge from \"lodash/merge\";\nimport _omit from \"lodash/omit\";\nimport _isUndefined from \"lodash/isUndefined\";\nvar __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { Component } from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/typography/constants';\nimport Typography from './typography';\nimport Copyable from './copyable';\nimport Tooltip from '../tooltip/index';\nimport Popover from '../popover/index';\nimport getRenderText from './util';\nimport warning from '@douyinfe/semi-foundation/lib/es/utils/warning';\nimport isEnterPress from '@douyinfe/semi-foundation/lib/es/utils/isEnterPress';\nimport LocaleConsumer from '../locale/localeConsumer';\nimport { isSemiIcon, runAfterTicks } from '../_utils';\nimport SizeContext from './context';\nimport ResizeObserver, { ObserverProperty } from '../resizeObserver';\nconst prefixCls = cssClasses.PREFIX;\nconst ELLIPSIS_STR = '...';\nconst wrapperDecorations = (props, content) => {\n const {\n mark,\n code,\n underline,\n strong,\n link,\n disabled\n } = props;\n let wrapped = content;\n const wrap = (isNeeded, tag) => {\n let wrapProps = {};\n if (!isNeeded) {\n return;\n }\n if (typeof isNeeded === 'object') {\n wrapProps = Object.assign({}, isNeeded);\n }\n wrapped = /*#__PURE__*/React.createElement(tag, wrapProps, wrapped);\n };\n wrap(mark, 'mark');\n wrap(code, 'code');\n wrap(underline && !link, 'u');\n wrap(strong, 'strong');\n wrap(props.delete, 'del');\n wrap(link, disabled ? 'span' : 'a');\n return wrapped;\n};\nexport default class Base extends Component {\n constructor(props) {\n super(props);\n this.observerTakingEffect = false;\n this.onResize = entries => __awaiter(this, void 0, void 0, function* () {\n if (this.rafId) {\n window.cancelAnimationFrame(this.rafId);\n }\n return new Promise(resolve => {\n this.rafId = window.requestAnimationFrame(() => __awaiter(this, void 0, void 0, function* () {\n yield this.getEllipsisState();\n resolve();\n }));\n });\n });\n // if it needs to use js overflowed:\n // 1. text is expandable 2. expandText need to be shown 3. has extra operation 4. text need to ellipse from mid\n this.canUseCSSEllipsis = () => {\n const {\n copyable\n } = this.props;\n const {\n expandable,\n expandText,\n pos,\n suffix\n } = this.getEllipsisOpt();\n return !expandable && _isUndefined(expandText) && !copyable && pos === 'end' && !suffix.length;\n };\n /**\n * whether truncated\n * rows < = 1 if there is overflow content, return true\n * rows > 1 if there is overflow height, return true\n * @param {Number} rows\n * @returns {Boolean}\n */\n this.shouldTruncated = rows => {\n if (!rows || rows < 1) {\n return false;\n }\n const updateOverflow = rows <= 1 ? this.compareSingleRow() : this.wrapperRef.current.scrollHeight > this.wrapperRef.current.offsetHeight;\n return updateOverflow;\n };\n /**\n * 通过将 content 给到 Range 对象,借助 Range 的 getBoundingClientRect 拿到 content 的准确 width\n * 不受 css ellipsis 与否的影响\n * By giving the content to the Range object, get the exact width of the content with the help of Range's getBoundingClientRect\n * Not affected by css ellipsis or not\n * https://github.com/DouyinFE/semi-design/issues/1731\n */\n this.compareSingleRow = () => {\n if (!(document && document.createRange)) {\n return false;\n }\n const containerNode = this.wrapperRef.current;\n const containerWidth = containerNode.getBoundingClientRect().width;\n const childNodes = Array.from(containerNode.childNodes);\n const range = document.createRange();\n const contentWidth = childNodes.reduce((acc, node) => {\n var _a;\n range.selectNodeContents(node);\n return acc + ((_a = range.getBoundingClientRect().width) !== null && _a !== void 0 ? _a : 0);\n }, 0);\n range.detach();\n return contentWidth > containerWidth;\n };\n this.showTooltip = () => {\n var _a, _b;\n const {\n isOverflowed,\n isTruncated,\n expanded\n } = this.state;\n const {\n showTooltip,\n expandable,\n expandText\n } = this.getEllipsisOpt();\n const canUseCSSEllipsis = this.canUseCSSEllipsis();\n // If the css is truncated, use isOverflowed to judge. If the css is truncated, use isTruncated to judge.\n const overflowed = !expanded && (canUseCSSEllipsis ? isOverflowed : isTruncated);\n const noExpandText = !expandable && _isUndefined(expandText);\n const show = noExpandText && overflowed && showTooltip;\n if (!show) {\n return show;\n }\n const defaultOpts = {\n type: 'tooltip'\n };\n if (typeof showTooltip === 'object') {\n if (showTooltip.type && showTooltip.type.toLowerCase() === 'popover') {\n return _merge({\n opts: {\n // style: { width: '240px' },\n showArrow: true\n }\n }, showTooltip, {\n opts: {\n className: cls({\n [`${prefixCls}-ellipsis-popover`]: true,\n [(_a = showTooltip === null || showTooltip === void 0 ? void 0 : showTooltip.opts) === null || _a === void 0 ? void 0 : _a.className]: Boolean((_b = showTooltip === null || showTooltip === void 0 ? void 0 : showTooltip.opts) === null || _b === void 0 ? void 0 : _b.className)\n })\n }\n });\n }\n return Object.assign(Object.assign({}, defaultOpts), showTooltip);\n }\n return defaultOpts;\n };\n this.onHover = () => {\n const canUseCSSEllipsis = this.canUseCSSEllipsis();\n if (canUseCSSEllipsis) {\n const {\n rows,\n suffix,\n pos\n } = this.getEllipsisOpt();\n const updateOverflow = this.shouldTruncated(rows);\n // isOverflowed needs to be updated to show tooltip when using css ellipsis\n this.setState({\n isOverflowed: updateOverflow,\n isTruncated: false\n });\n return undefined;\n }\n };\n this.getEllipsisState = () => __awaiter(this, void 0, void 0, function* () {\n const {\n rows,\n suffix,\n pos\n } = this.getEllipsisOpt();\n const {\n children,\n strong\n } = this.props;\n // wait until element mounted\n if (!this.wrapperRef || !this.wrapperRef.current) {\n yield this.onResize();\n return;\n }\n const {\n expanded\n } = this.state;\n const canUseCSSEllipsis = this.canUseCSSEllipsis();\n if (canUseCSSEllipsis) {\n // const updateOverflow = this.shouldTruncated(rows);\n // // isOverflowed needs to be updated to show tooltip when using css ellipsis\n // this.setState({\n // isOverflowed: updateOverflow,\n // isTruncated: false\n // });\n return;\n }\n // If children is null, css/js truncated flag isTruncate is false\n if (_isNull(children)) {\n return new Promise(resolve => {\n this.setState({\n isTruncated: false,\n isOverflowed: false\n }, resolve);\n });\n }\n // Currently only text truncation is supported, if there is non-text, \n // both css truncation and js truncation should throw a warning\n warning('children' in this.props && typeof children !== 'string', \"[Semi Typography] Only children with pure text could be used with ellipsis at this moment.\");\n if (!rows || rows < 0 || expanded) {\n return;\n }\n const extraNode = {\n expand: this.expandRef.current,\n copy: this.copyRef && this.copyRef.current\n };\n // Perform type conversion on children to prevent component crash due to non-string type of children\n // https://github.com/DouyinFE/semi-design/issues/2167\n const realChildren = Array.isArray(children) ? children.join('') : String(children);\n const content = getRenderText(this.wrapperRef.current, rows, realChildren, extraNode, ELLIPSIS_STR, suffix, pos, strong);\n return new Promise(resolve => {\n this.setState({\n isOverflowed: false,\n ellipsisContent: content,\n isTruncated: realChildren !== content\n }, resolve);\n });\n });\n /**\n * Triggered when the fold button is clicked to save the latest expanded state\n * @param {Event} e\n */\n this.toggleOverflow = e => {\n const {\n onExpand,\n expandable,\n collapsible\n } = this.getEllipsisOpt();\n const {\n expanded\n } = this.state;\n onExpand && onExpand(!expanded, e);\n if (expandable && !expanded || collapsible && expanded) {\n this.setState({\n expanded: !expanded\n });\n }\n };\n this.getEllipsisOpt = () => {\n const {\n ellipsis\n } = this.props;\n if (!ellipsis) {\n return {};\n }\n const opt = Object.assign({\n rows: 1,\n expandable: false,\n pos: 'end',\n suffix: '',\n showTooltip: false,\n collapsible: false,\n expandText: ellipsis.expandable ? this.expandStr : undefined,\n collapseText: ellipsis.collapsible ? this.collapseStr : undefined\n }, typeof ellipsis === 'object' ? ellipsis : null);\n return opt;\n };\n this.renderExpandable = () => {\n const {\n expanded,\n isTruncated\n } = this.state;\n if (!isTruncated) return null;\n const {\n expandText,\n expandable,\n collapseText,\n collapsible\n } = this.getEllipsisOpt();\n const noExpandText = !expandable && _isUndefined(expandText);\n const noCollapseText = !collapsible && _isUndefined(collapseText);\n let text;\n if (!expanded && !noExpandText) {\n text = expandText;\n } else if (expanded && !noCollapseText) {\n text = collapseText;\n }\n if (!noExpandText || !noCollapseText) {\n return (\n /*#__PURE__*/\n // TODO: replace `a` tag with `span` in next major version\n // NOTE: may have effect on style\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\n React.createElement(\"a\", {\n role: \"button\",\n tabIndex: 0,\n className: `${prefixCls}-ellipsis-expand`,\n key: \"expand\",\n ref: this.expandRef,\n \"aria-label\": text,\n onClick: this.toggleOverflow,\n onKeyPress: e => isEnterPress(e) && this.toggleOverflow(e)\n }, text)\n );\n }\n return null;\n };\n /**\n * 获取文本的缩略class和style\n *\n * 截断类型:\n * - 当设置中间截断(pos='middle')、可展开(expandable)、有后缀(suffix 非空)、可复制(copyable),启用 JS 截断策略\n * - 非以上场景,启用 CSS 截断策略\n * 相关变量\n * props:\n * - ellipsis:\n * - rows\n * - expandable\n * - pos\n * - suffix\n * state:\n * - isOverflowed,文本是否处于overflow状态\n * - expanded,文本是否处于折叠状态\n * - isTruncated,文本是否被js截断\n *\n * Get the abbreviated class and style of the text\n *\n * Truncation type:\n * -When setting middle ellipsis (pos='middle')、expandable、suffix is not empty、copyable, the JS ellipsis strategy is enabled\n * -Otherwise, enable the CSS ellipsis strategy\n * related variables\n * props:\n * -ellipsis:\n * -rows\n * -expandable\n * -pos\n * -suffix\n * state:\n * -isOverflowed, whether the text is in an overflow state\n * -expanded, whether the text is in a collapsed state\n * -isTruncated, whether the text is truncated by js\n * @returns {Object}\n */\n this.getEllipsisStyle = () => {\n const {\n ellipsis,\n component\n } = this.props;\n if (!ellipsis) {\n return {\n ellipsisCls: '',\n ellipsisStyle: {}\n // ellipsisAttr: {}\n };\n }\n const {\n rows\n } = this.getEllipsisOpt();\n const {\n expanded\n } = this.state;\n const useCSS = !expanded && this.canUseCSSEllipsis();\n const ellipsisCls = cls({\n [`${prefixCls}-ellipsis`]: true,\n [`${prefixCls}-ellipsis-single-line`]: rows === 1,\n [`${prefixCls}-ellipsis-multiple-line`]: rows > 1,\n // component === 'span', Text component, It should be externally displayed inline\n [`${prefixCls}-ellipsis-multiple-line-text`]: rows > 1 && component === 'span',\n [`${prefixCls}-ellipsis-overflow-ellipsis`]: rows === 1 && useCSS,\n // component === 'span', Text component, It should be externally displayed inline\n [`${prefixCls}-ellipsis-overflow-ellipsis-text`]: rows === 1 && useCSS && component === 'span'\n });\n const ellipsisStyle = useCSS && rows > 1 ? {\n WebkitLineClamp: rows\n } : {};\n return {\n ellipsisCls,\n ellipsisStyle\n };\n };\n this.renderEllipsisText = opt => {\n const {\n suffix\n } = opt;\n const {\n children\n } = this.props;\n const {\n isTruncated,\n expanded,\n ellipsisContent\n } = this.state;\n if (expanded || !isTruncated) {\n return /*#__PURE__*/React.createElement(\"span\", {\n onMouseEnter: this.onHover\n }, children, suffix && suffix.length ? suffix : null);\n }\n return /*#__PURE__*/React.createElement(\"span\", {\n onMouseEnter: this.onHover\n }, ellipsisContent, suffix);\n };\n this.state = {\n editable: false,\n copied: false,\n // ellipsis\n // if text is overflow in container\n isOverflowed: false,\n ellipsisContent: props.children,\n expanded: false,\n // if text is truncated with js\n isTruncated: false,\n prevChildren: null\n };\n this.wrapperRef = /*#__PURE__*/React.createRef();\n this.expandRef = /*#__PURE__*/React.createRef();\n this.copyRef = /*#__PURE__*/React.createRef();\n }\n componentDidMount() {\n if (this.props.ellipsis) {\n // runAfterTicks: make sure start observer on the next tick\n this.onResize().then(() => runAfterTicks(() => this.observerTakingEffect = true, 1));\n }\n }\n static getDerivedStateFromProps(props, prevState) {\n const {\n prevChildren\n } = prevState;\n const newState = {};\n newState.prevChildren = props.children;\n if (props.ellipsis && prevChildren !== props.children) {\n // reset ellipsis state if children update\n newState.isOverflowed = false;\n newState.ellipsisContent = props.children;\n newState.expanded = false;\n newState.isTruncated = true;\n }\n return newState;\n }\n componentDidUpdate(prevProps) {\n // Render was based on outdated refs and needs to be rerun\n if (this.props.children !== prevProps.children) {\n this.forceUpdate();\n if (this.props.ellipsis) {\n this.onResize();\n }\n }\n }\n componentWillUnmount() {\n if (this.rafId) {\n window.cancelAnimationFrame(this.rafId);\n }\n }\n renderOperations() {\n return /*#__PURE__*/React.createElement(React.Fragment, null, this.renderExpandable(), this.renderCopy());\n }\n renderCopy() {\n var _a;\n const {\n copyable,\n children\n } = this.props;\n if (!copyable) {\n return null;\n }\n // If it is configured in the content of copyable, the copied content will be the content in copyable\n const willCopyContent = (_a = copyable === null || copyable === void 0 ? void 0 : copyable.content) !== null && _a !== void 0 ? _a : children;\n let copyContent;\n let hasObject = false;\n if (Array.isArray(willCopyContent)) {\n copyContent = '';\n willCopyContent.forEach(value => {\n if (typeof value === 'object') {\n hasObject = true;\n }\n copyContent += String(value);\n });\n } else if (typeof willCopyContent !== 'object') {\n copyContent = String(willCopyContent);\n } else {\n hasObject = true;\n copyContent = String(willCopyContent);\n }\n warning(hasObject, 'Content to be copied in Typography is a object, it will case a [object Object] mistake when copy to clipboard.');\n const copyConfig = Object.assign({\n content: copyContent,\n duration: 3\n }, typeof copyable === 'object' ? copyable : null);\n return /*#__PURE__*/React.createElement(Copyable, Object.assign({}, copyConfig, {\n forwardRef: this.copyRef\n }));\n }\n renderIcon() {\n const {\n icon,\n size\n } = this.props;\n const realSize = size === 'inherit' ? this.context : size;\n if (!icon) {\n return null;\n }\n const iconSize = realSize === 'small' ? 'small' : 'default';\n return /*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixCls}-icon`,\n \"x-semi-prop\": \"icon\"\n }, isSemiIcon(icon) ? /*#__PURE__*/React.cloneElement(icon, {\n size: iconSize\n }) : icon);\n }\n renderContent() {\n const _a = this.props,\n {\n component,\n children,\n className,\n type,\n spacing,\n disabled,\n style,\n ellipsis,\n icon,\n size,\n link,\n heading,\n weight\n } = _a,\n rest = __rest(_a, [\"component\", \"children\", \"className\", \"type\", \"spacing\", \"disabled\", \"style\", \"ellipsis\", \"icon\", \"size\", \"link\", \"heading\", \"weight\"]);\n const textProps = _omit(rest, ['strong', 'editable', 'mark', 'copyable', 'underline', 'code',\n // 'link',\n 'delete']);\n const realSize = size === 'inherit' ? this.context : size;\n const iconNode = this.renderIcon();\n const ellipsisOpt = this.getEllipsisOpt();\n const {\n ellipsisCls,\n ellipsisStyle\n } = this.getEllipsisStyle();\n let textNode = ellipsis ? this.renderEllipsisText(ellipsisOpt) : children;\n const linkCls = cls({\n [`${prefixCls}-link-text`]: link,\n [`${prefixCls}-link-underline`]: this.props.underline && link\n });\n textNode = wrapperDecorations(this.props, /*#__PURE__*/React.createElement(React.Fragment, null, iconNode, this.props.link ? /*#__PURE__*/React.createElement(\"span\", {\n className: linkCls\n }, textNode) : textNode));\n const hTagReg = /^h[1-6]$/;\n const isHeader = _isString(heading) && hTagReg.test(heading);\n const wrapperCls = cls(className, ellipsisCls, {\n // [`${prefixCls}-primary`]: !type || type === 'primary',\n [`${prefixCls}-${type}`]: type && !link,\n [`${prefixCls}-${realSize}`]: realSize,\n [`${prefixCls}-link`]: link,\n [`${prefixCls}-disabled`]: disabled,\n [`${prefixCls}-${spacing}`]: spacing,\n [`${prefixCls}-${heading}`]: isHeader,\n [`${prefixCls}-${heading}-weight-${weight}`]: isHeader && weight && isNaN(Number(weight))\n });\n const textStyle = Object.assign(Object.assign({}, isNaN(Number(weight)) ? {} : {\n fontWeight: weight\n }), style);\n return /*#__PURE__*/React.createElement(Typography, Object.assign({\n className: wrapperCls,\n style: Object.assign(Object.assign({}, textStyle), ellipsisStyle),\n component: component,\n forwardRef: this.wrapperRef\n }, textProps), textNode, this.renderOperations());\n }\n renderTipWrapper() {\n const {\n children\n } = this.props;\n const showTooltip = this.showTooltip();\n const content = this.renderContent();\n if (showTooltip) {\n const {\n type,\n opts,\n renderTooltip\n } = showTooltip;\n if (_isFunction(renderTooltip)) {\n return renderTooltip(children, content);\n } else if (type.toLowerCase() === 'popover') {\n return /*#__PURE__*/React.createElement(Popover, Object.assign({\n content: children,\n position: \"top\"\n }, opts), content);\n }\n return /*#__PURE__*/React.createElement(Tooltip, Object.assign({\n content: children,\n position: \"top\"\n }, opts), content);\n } else {\n return content;\n }\n }\n render() {\n var _this = this;\n const {\n size\n } = this.props;\n const realSize = size === 'inherit' ? this.context : size;\n const content = /*#__PURE__*/React.createElement(SizeContext.Provider, {\n value: realSize\n }, /*#__PURE__*/React.createElement(LocaleConsumer, {\n componentName: \"Typography\"\n }, locale => {\n this.expandStr = locale.expand;\n this.collapseStr = locale.collapse;\n return this.renderTipWrapper();\n }));\n if (this.props.ellipsis) {\n return /*#__PURE__*/React.createElement(ResizeObserver, {\n onResize: function () {\n if (_this.observerTakingEffect) {\n _this.onResize(...arguments);\n }\n },\n observeParent: true,\n observerProperty: ObserverProperty.Width\n }, content);\n }\n return content;\n }\n}\nBase.propTypes = {\n children: PropTypes.node,\n copyable: PropTypes.oneOfType([PropTypes.shape({\n text: PropTypes.string,\n onCopy: PropTypes.func,\n successTip: PropTypes.node,\n copyTip: PropTypes.node\n }), PropTypes.bool]),\n delete: PropTypes.bool,\n disabled: PropTypes.bool,\n // editable: PropTypes.bool,\n ellipsis: PropTypes.oneOfType([PropTypes.shape({\n rows: PropTypes.number,\n expandable: PropTypes.bool,\n expandText: PropTypes.string,\n onExpand: PropTypes.func,\n suffix: PropTypes.string,\n showTooltip: PropTypes.oneOfType([PropTypes.shape({\n type: PropTypes.string,\n opts: PropTypes.object\n }), PropTypes.bool]),\n collapsible: PropTypes.bool,\n collapseText: PropTypes.string,\n pos: PropTypes.oneOf(['end', 'middle'])\n }), PropTypes.bool]),\n mark: PropTypes.bool,\n underline: PropTypes.bool,\n link: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n spacing: PropTypes.oneOf(strings.SPACING),\n strong: PropTypes.bool,\n size: PropTypes.oneOf(strings.SIZE),\n type: PropTypes.oneOf(strings.TYPE),\n style: PropTypes.object,\n className: PropTypes.string,\n icon: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),\n heading: PropTypes.string,\n component: PropTypes.string\n};\nBase.defaultProps = {\n children: null,\n copyable: false,\n delete: false,\n disabled: false,\n // editable: false,\n ellipsis: false,\n icon: '',\n mark: false,\n underline: false,\n strong: false,\n link: false,\n type: 'primary',\n spacing: 'normal',\n size: 'normal',\n style: {},\n className: ''\n};\nBase.contextType = SizeContext;","import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport cls from 'classnames';\nimport { strings, cssClasses } from '@douyinfe/semi-foundation/lib/es/typography/constants';\nimport Base from './base';\nconst prefixCls = cssClasses.PREFIX;\nexport default class Paragraph extends PureComponent {\n render() {\n const {\n className\n } = this.props;\n const paragraphCls = cls(className, `${prefixCls}-paragraph`);\n return /*#__PURE__*/React.createElement(Base, Object.assign({\n component: 'p'\n }, this.props, {\n className: paragraphCls\n }));\n }\n}\nParagraph.propTypes = {\n copyable: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n delete: PropTypes.bool,\n disabled: PropTypes.bool,\n // editable: PropTypes.bool,\n ellipsis: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n mark: PropTypes.bool,\n link: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n underline: PropTypes.bool,\n strong: PropTypes.bool,\n type: PropTypes.oneOf(strings.TYPE),\n size: PropTypes.oneOf(strings.SIZE),\n spacing: PropTypes.oneOf(strings.SPACING),\n style: PropTypes.object,\n className: PropTypes.string,\n component: PropTypes.string\n};\nParagraph.defaultProps = {\n copyable: false,\n delete: false,\n disabled: false,\n // editable: false,\n ellipsis: false,\n mark: false,\n underline: false,\n strong: false,\n link: false,\n type: 'primary',\n size: 'normal',\n spacing: 'normal',\n style: {},\n className: ''\n};","import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { strings } from '@douyinfe/semi-foundation/lib/es/typography/constants';\nimport Base from './base';\nexport default class Text extends PureComponent {\n render() {\n return /*#__PURE__*/React.createElement(Base, Object.assign({\n component: 'span'\n }, this.props));\n }\n}\nText.propTypes = {\n copyable: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n delete: PropTypes.bool,\n disabled: PropTypes.bool,\n icon: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),\n ellipsis: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n mark: PropTypes.bool,\n underline: PropTypes.bool,\n link: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n strong: PropTypes.bool,\n type: PropTypes.oneOf(strings.TYPE),\n size: PropTypes.oneOf(strings.SIZE),\n style: PropTypes.object,\n className: PropTypes.string,\n code: PropTypes.bool,\n component: PropTypes.string,\n weight: PropTypes.number\n};\nText.defaultProps = {\n copyable: false,\n delete: false,\n disabled: false,\n icon: '',\n // editable: false,\n ellipsis: false,\n mark: false,\n underline: false,\n strong: false,\n link: false,\n type: 'primary',\n style: {},\n size: 'normal',\n className: ''\n};","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { strings } from '@douyinfe/semi-foundation/lib/es/typography/constants';\nimport Base from './base';\nexport default class Title extends PureComponent {\n render() {\n const _a = this.props,\n {\n heading\n } = _a,\n rest = __rest(_a, [\"heading\"]);\n const component = strings.HEADING.indexOf(heading) !== -1 ? `h${heading}` : 'h1';\n // Passing headings to support custom components\n return /*#__PURE__*/React.createElement(Base, Object.assign({\n component: component,\n heading: component\n }, rest));\n }\n}\nTitle.propTypes = {\n copyable: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n delete: PropTypes.bool,\n disabled: PropTypes.bool,\n // editable: PropTypes.bool,\n ellipsis: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n mark: PropTypes.bool,\n link: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n underline: PropTypes.bool,\n strong: PropTypes.bool,\n type: PropTypes.oneOf(strings.TYPE),\n heading: PropTypes.oneOf(strings.HEADING),\n style: PropTypes.object,\n className: PropTypes.string,\n component: PropTypes.string,\n weight: PropTypes.oneOfType([PropTypes.oneOf(strings.WEIGHT), PropTypes.number])\n};\nTitle.defaultProps = {\n copyable: false,\n delete: false,\n disabled: false,\n // editable: false,\n ellipsis: false,\n mark: false,\n underline: false,\n strong: false,\n link: false,\n type: 'primary',\n heading: 1,\n style: {},\n className: ''\n};","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { PureComponent } from 'react';\nimport cls from 'classnames';\nimport PropTypes from 'prop-types';\nimport { cssClasses } from '@douyinfe/semi-foundation/lib/es/typography/constants';\nimport '@douyinfe/semi-foundation/lib/es/typography/typography.css';\nconst prefixCls = cssClasses.PREFIX;\nclass Typography extends PureComponent {\n render() {\n const _a = this.props,\n {\n component,\n className,\n children,\n forwardRef\n } = _a,\n rest = __rest(_a, [\"component\", \"className\", \"children\", \"forwardRef\"]);\n const Component = component;\n const classNames = cls(prefixCls, className);\n return /*#__PURE__*/React.createElement(Component, Object.assign({\n className: classNames,\n ref: forwardRef\n }, rest), children);\n }\n}\nTypography.defaultProps = {\n component: 'article',\n style: {},\n className: ''\n};\nTypography.propTypes = {\n component: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string\n};\nexport default Typography;","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\n\nimport { handleRef, RefProps } from './utils';\n\n// ========================================================\n// react/packages/react-reconciler/src/ReactFiber.js\n// ========================================================\n\ntype Fiber = {\n // Tag identifying the type of fiber.\n tag: string;\n // The resolved function/class/ associated with this fiber.\n type: any;\n};\n\n/**\n * Detects if a passed element is a Fiber object instead of an element. Is needed as `ReactDOM.findDOMNode()` returns\n * a Fiber in `react-test-renderer` that can cause issues with tests. Is used only in non-production env.\n *\n * @see https://github.com/facebook/react/issues/7371#issuecomment-317396864\n * @see https://github.com/Semantic-Org/Semantic-UI-React/issues/4061#issuecomment-694895617\n */\nfunction isFiberRef(node: Element | Fiber | Text | null): boolean {\n if (node === null) {\n return false;\n }\n\n if (node instanceof Element || node instanceof Text) {\n return false;\n }\n\n return !!(node.type && node.tag);\n}\n\nexport class RefFindNode extends React.Component {\n prevNode?: Node | null;\n\n componentDidMount() {\n let currentNode = ReactDOM.findDOMNode(this);\n\n if (process.env.NODE_ENV !== 'production') {\n if (isFiberRef(currentNode)) {\n currentNode = null;\n }\n }\n\n this.prevNode = currentNode;\n handleRef(this.props.innerRef, currentNode);\n }\n\n componentDidUpdate(prevProps: RefProps) {\n let currentNode = ReactDOM.findDOMNode(this);\n\n if (process.env.NODE_ENV !== 'production') {\n if (isFiberRef(currentNode)) {\n currentNode = null;\n }\n }\n\n if (this.prevNode !== currentNode) {\n this.prevNode = currentNode;\n handleRef(this.props.innerRef, currentNode);\n }\n\n if (prevProps.innerRef !== this.props.innerRef) {\n handleRef(this.props.innerRef, currentNode);\n }\n }\n\n componentWillUnmount() {\n handleRef(this.props.innerRef, null);\n\n delete this.prevNode;\n }\n\n render() {\n const { children } = this.props;\n\n return children;\n }\n}\n","import * as React from 'react';\nimport { handleRef, RefProps } from './utils';\n\nexport class RefForward extends React.Component {\n currentNode?: Node | null;\n\n handleRefOverride = (node: HTMLElement) => {\n const { children, innerRef } = this.props;\n\n handleRef((children as React.ReactElement & { ref: React.Ref }).ref, node);\n handleRef(innerRef, node);\n\n this.currentNode = node;\n };\n\n componentDidUpdate(prevProps: RefProps) {\n if (prevProps.innerRef !== this.props.innerRef) {\n handleRef(this.props.innerRef, this.currentNode);\n }\n }\n\n componentWillUnmount() {\n delete this.currentNode;\n }\n\n render() {\n const { children } = this.props;\n\n return React.cloneElement(children, {\n ref: this.handleRefOverride,\n });\n }\n}\n","import * as React from 'react';\nimport * as ReactIs from 'react-is';\n\nimport { RefFindNode } from './RefFindNode';\nimport { RefForward } from './RefForward';\nimport { RefProps } from './utils';\n\nexport const Ref: React.FunctionComponent = props => {\n const { children, innerRef, ...rest } = props;\n\n const child = React.Children.only(children);\n const ElementType = ReactIs.isForwardRef(child) ? RefForward : RefFindNode;\n const childWithProps = child && rest && Object.keys(rest).length > 0 ? React.cloneElement(child, rest) : child;\n\n return {childWithProps};\n};\n","import * as React from 'react';\n\nexport interface RefProps {\n children: React.ReactElement;\n\n /**\n * Called when a child component will be mounted or updated.\n *\n * @param node - Referred node.\n */\n innerRef: React.Ref;\n}\n\n/**\n * The function that correctly handles passing refs.\n *\n * @param ref - An ref object or function\n * @param node - A node that should be passed by ref\n */\nexport const handleRef = (ref: React.Ref | undefined, node: N) => {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof ref === 'string') {\n throw new Error(\n 'We do not support refs as string, this is a legacy API and will be likely to be removed in one of the future releases of React.',\n );\n }\n }\n\n if (typeof ref === 'function') {\n ref(node);\n return;\n }\n\n if (ref !== null && typeof ref === 'object') {\n // The `current` property is defined as readonly, however it's a valid way because\n // `ref` is a mutable object\n (ref as React.MutableRefObject).current = node;\n }\n};\n\n/** Checks that the passed object is a valid React ref object. */\nexport const isRefObject = (ref: any): ref is React.RefObject =>\n // https://github.com/facebook/react/blob/v16.8.2/packages/react-reconciler/src/ReactFiberCommitWork.js#L665\n ref !== null && typeof ref === 'object' && ref.hasOwnProperty('current');\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:!0});var env=require(\"exenv\");require(\"prop-types\");var React=require(\"react\");function _typeof(e){return(_typeof=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function _defineProperties(e,t){for(var n=0;n=0;r-=1)this.handlers[r].called||(this.handlers[r].called=!0,this.handlers[r](e));for(var o=n;o>=0;o-=1)this.handlers[o].called=!1}else{(0,this.handlers[n])(e)}}},{key:\"hasHandlers\",value:function(){return this.handlers.length>0}},{key:\"removeHandlers\",value:function(t){for(var n=[],r=this.handlers.length,o=0;o0;var t=this.handlerSets.get(e);return!!t&&t.hasHandlers()}},{key:\"removeHandlers\",value:function(t,n){var r=cloneMap(this.handlerSets);if(!r.has(t))return new e(this.poolName,r);var o=r.get(t).removeHandlers(n);return o.hasHandlers()?r.set(t,o):r.delete(t),new e(this.poolName,r)}}]),e}();_defineProperty(EventPool,\"createByType\",function(e,t,n){var r=new Map;return r.set(t,new EventSet(n)),new EventPool(e,r)});var EventTarget=function(){function e(t){var n=this;_classCallCheck(this,e),_defineProperty(this,\"handlers\",new Map),_defineProperty(this,\"pools\",new Map),_defineProperty(this,\"target\",void 0),_defineProperty(this,\"createEmitter\",function(e){return function(t){n.pools.forEach(function(n){n.dispatchEvent(e,t)})}}),this.target=t}return _createClass(e,[{key:\"addHandlers\",value:function(e,t,n){if(this.pools.has(e)){var r=this.pools.get(e);this.pools.set(e,r.addHandlers(t,n))}else this.pools.set(e,EventPool.createByType(e,t,n));this.handlers.has(t)||this.addTargetHandler(t)}},{key:\"hasHandlers\",value:function(){return this.handlers.size>0}},{key:\"removeHandlers\",value:function(e,t,n){if(this.pools.has(e)){var r=this.pools.get(e).removeHandlers(t,n);r.hasHandlers()?this.pools.set(e,r):this.pools.delete(e);var o=!1;this.pools.forEach(function(e){return o=o||e.hasHandlers(t)}),o||this.removeTargetHandler(t)}}},{key:\"addTargetHandler\",value:function(e){var t=this.createEmitter(e);this.handlers.set(e,t),this.target.addEventListener(e,t,!0)}},{key:\"removeTargetHandler\",value:function(e){this.handlers.has(e)&&(this.target.removeEventListener(e,this.handlers.get(e),!0),this.handlers.delete(e))}}]),e}(),EventStack=function(){function e(){var t=this;_classCallCheck(this,e),_defineProperty(this,\"targets\",new Map),_defineProperty(this,\"getTarget\",function(e){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=normalizeTarget(e);if(t.targets.has(r))return t.targets.get(r);if(!n)return null;var o=new EventTarget(r);return t.targets.set(r,o),o}),_defineProperty(this,\"removeTarget\",function(e){t.targets.delete(normalizeTarget(e))})}return _createClass(e,[{key:\"sub\",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(env.canUseDOM){var r=n.target,o=void 0===r?document:r,a=n.pool,s=void 0===a?\"default\":a;this.getTarget(o).addHandlers(s,e,normalizeHandlers(t))}}},{key:\"unsub\",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(env.canUseDOM){var r=n.target,o=void 0===r?document:r,a=n.pool,s=void 0===a?\"default\":a,i=this.getTarget(o,!1);i&&(i.removeHandlers(s,e,normalizeHandlers(t)),i.hasHandlers()||this.removeTarget(o))}}}]),e}(),instance=new EventStack,EventStack$1=function(e){function t(){return _classCallCheck(this,t),_possibleConstructorReturn(this,_getPrototypeOf(t).apply(this,arguments))}return _inherits(t,React.PureComponent),_createClass(t,[{key:\"componentDidMount\",value:function(){this.subscribe(this.props)}},{key:\"componentDidUpdate\",value:function(e){this.unsubscribe(e),this.subscribe(this.props)}},{key:\"componentWillUnmount\",value:function(){this.unsubscribe(this.props)}},{key:\"subscribe\",value:function(e){var t=e.name,n=e.on,r=e.pool,o=e.target;instance.sub(t,n,{pool:r,target:o})}},{key:\"unsubscribe\",value:function(e){var t=e.name,n=e.on,r=e.pool,o=e.target;instance.unsub(t,n,{pool:r,target:o})}},{key:\"render\",value:function(){return null}}]),t}();_defineProperty(EventStack$1,\"defaultProps\",{pool:\"default\",target:\"document\"}),EventStack$1.propTypes={},exports.instance=instance,exports.default=EventStack$1;\n","\n'use strict';\n\nvar stack;\n\nif (process.env.NODE_ENV === 'production') {\n stack = require('./cjs/event-stack.production.js');\n} else {\n stack = require('./cjs/event-stack.development.js');\n}\n\nmodule.exports = stack.default;\nmodule.exports.instance = stack.instance;\n","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar transitionalDefaults = require('../defaults/transitional');\nvar AxiosError = require('../core/AxiosError');\nvar CanceledError = require('../cancel/CanceledError');\nvar parseProtocol = require('../helpers/parseProtocol');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n var onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n var transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = function(cancel) {\n if (!request) {\n return;\n }\n reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n var protocol = parseProtocol(fullPath);\n\n if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = require('./cancel/CanceledError');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\naxios.toFormData = require('./helpers/toFormData');\n\n// Expose AxiosError class\naxios.AxiosError = require('../lib/core/AxiosError');\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\nvar CanceledError = require('./CanceledError');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(function(cancel) {\n if (!token._listeners) return;\n\n var i;\n var l = token._listeners.length;\n\n for (i = 0; i < l; i++) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = function(onfulfilled) {\n var _resolve;\n // eslint-disable-next-line func-names\n var promise = new Promise(function(resolve) {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n var index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\nvar AxiosError = require('../core/AxiosError');\nvar utils = require('../utils');\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction CanceledError(message) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nmodule.exports = CanceledError;\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar buildFullPath = require('./buildFullPath');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n var fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url: url,\n data: data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nvar prototype = AxiosError.prototype;\nvar descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED'\n// eslint-disable-next-line func-names\n].forEach(function(code) {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = function(error, code, config, request, response, customProps) {\n var axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nmodule.exports = AxiosError;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar CanceledError = require('../cancel/CanceledError');\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(prop) {\n if (prop in config2) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n var mergeMap = {\n 'url': valueFromConfig2,\n 'method': valueFromConfig2,\n 'data': valueFromConfig2,\n 'baseURL': defaultToConfig2,\n 'transformRequest': defaultToConfig2,\n 'transformResponse': defaultToConfig2,\n 'paramsSerializer': defaultToConfig2,\n 'timeout': defaultToConfig2,\n 'timeoutMessage': defaultToConfig2,\n 'withCredentials': defaultToConfig2,\n 'adapter': defaultToConfig2,\n 'responseType': defaultToConfig2,\n 'xsrfCookieName': defaultToConfig2,\n 'xsrfHeaderName': defaultToConfig2,\n 'onUploadProgress': defaultToConfig2,\n 'onDownloadProgress': defaultToConfig2,\n 'decompress': defaultToConfig2,\n 'maxContentLength': defaultToConfig2,\n 'maxBodyLength': defaultToConfig2,\n 'beforeRedirect': defaultToConfig2,\n 'transport': defaultToConfig2,\n 'httpAgent': defaultToConfig2,\n 'httpsAgent': defaultToConfig2,\n 'cancelToken': defaultToConfig2,\n 'socketPath': defaultToConfig2,\n 'responseEncoding': defaultToConfig2,\n 'validateStatus': mergeDirectKeys\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n var merge = mergeMap[prop] || mergeDeepProperties;\n var configValue = merge(prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n};\n","'use strict';\n\nvar AxiosError = require('./AxiosError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\nvar AxiosError = require('../core/AxiosError');\nvar transitionalDefaults = require('./transitional');\nvar toFormData = require('../helpers/toFormData');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n\n var isObjectPayload = utils.isObject(data);\n var contentType = headers && headers['Content-Type'];\n\n var isFileList;\n\n if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {\n var _FormData = this.env && this.env.FormData;\n return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());\n } else if (isObjectPayload || contentType === 'application/json') {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional || defaults.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: require('./env/FormData')\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nmodule.exports = {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","module.exports = {\n \"version\": \"0.27.2\"\n};","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","// eslint-disable-next-line strict\nmodule.exports = null;\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nmodule.exports = function parseProtocol(url) {\n var match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Convert a data object to FormData\n * @param {Object} obj\n * @param {?Object} [formData]\n * @returns {Object}\n **/\n\nfunction toFormData(obj, formData) {\n // eslint-disable-next-line no-param-reassign\n formData = formData || new FormData();\n\n var stack = [];\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n function build(data, parentKey) {\n if (utils.isPlainObject(data) || utils.isArray(data)) {\n if (stack.indexOf(data) !== -1) {\n throw Error('Circular reference detected in ' + parentKey);\n }\n\n stack.push(data);\n\n utils.forEach(data, function each(value, key) {\n if (utils.isUndefined(value)) return;\n var fullKey = parentKey ? parentKey + '.' + key : key;\n var arr;\n\n if (value && !parentKey && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {\n // eslint-disable-next-line func-names\n arr.forEach(function(el) {\n !utils.isUndefined(el) && formData.append(fullKey, convertValue(el));\n });\n return;\n }\n }\n\n build(value, fullKey);\n });\n\n stack.pop();\n } else {\n formData.append(parentKey, convertValue(data));\n }\n }\n\n build(obj);\n\n return formData;\n}\n\nmodule.exports = toFormData;\n","'use strict';\n\nvar VERSION = require('../env/data').version;\nvar AxiosError = require('../core/AxiosError');\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nmodule.exports = {\n assertOptions: assertOptions,\n validators: validators\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n// eslint-disable-next-line func-names\nvar kindOf = (function(cache) {\n // eslint-disable-next-line func-names\n return function(thing) {\n var str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n };\n})(Object.create(null));\n\nfunction kindOfTest(type) {\n type = type.toLowerCase();\n return function isKindOf(thing) {\n return kindOf(thing) === type;\n };\n}\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return Array.isArray(val);\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nvar isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nvar isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nvar isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} thing The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(thing) {\n var pattern = '[object FormData]';\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) ||\n toString.call(thing) === pattern ||\n (isFunction(thing.toString) && thing.toString() === pattern)\n );\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nvar isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n */\n\nfunction inherits(constructor, superConstructor, props, descriptors) {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function} [filter]\n * @returns {Object}\n */\n\nfunction toFlatObject(sourceObj, destObj, filter) {\n var props;\n var i;\n var prop;\n var merged = {};\n\n destObj = destObj || {};\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if (!merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = Object.getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/*\n * determines whether a string ends with the characters of a specified string\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n * @returns {boolean}\n */\nfunction endsWith(str, searchString, position) {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n var lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object\n * @param {*} [thing]\n * @returns {Array}\n */\nfunction toArray(thing) {\n if (!thing) return null;\n var i = thing.length;\n if (isUndefined(i)) return null;\n var arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n// eslint-disable-next-line func-names\nvar isTypedArray = (function(TypedArray) {\n // eslint-disable-next-line func-names\n return function(thing) {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM,\n inherits: inherits,\n toFlatObject: toFlatObject,\n kindOf: kindOf,\n kindOfTest: kindOfTest,\n endsWith: endsWith,\n toArray: toArray,\n isTypedArray: isTypedArray,\n isFileList: isFileList\n};\n","/**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n */\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nvar NEWTON_ITERATIONS = 4;\nvar NEWTON_MIN_SLOPE = 0.001;\nvar SUBDIVISION_PRECISION = 0.0000001;\nvar SUBDIVISION_MAX_ITERATIONS = 10;\n\nvar kSplineTableSize = 11;\nvar kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\nvar float32ArraySupported = typeof Float32Array === 'function';\n\nfunction A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\nfunction B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\nfunction C (aA1) { return 3.0 * aA1; }\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; }\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); }\n\nfunction binarySubdivide (aX, aA, aB, mX1, mX2) {\n var currentX, currentT, i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n}\n\nfunction newtonRaphsonIterate (aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n}\n\nfunction LinearEasing (x) {\n return x;\n}\n\nmodule.exports = function bezier (mX1, mY1, mX2, mY2) {\n if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) {\n throw new Error('bezier x values must be in [0, 1] range');\n }\n\n if (mX1 === mY1 && mX2 === mY2) {\n return LinearEasing;\n }\n\n // Precompute samples table\n var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n for (var i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n\n function getTForX (aX) {\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n\n var initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n }\n\n return function BezierEasing (x) {\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0) {\n return 0;\n }\n if (x === 1) {\n return 1;\n }\n return calcBezier(getTForX(x), mY1, mY2);\n };\n};\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t {\n\tconst element = document.createElement('textarea');\n\tconst previouslyFocusedElement = document.activeElement;\n\n\telement.value = input;\n\n\t// Prevent keyboard from showing on mobile\n\telement.setAttribute('readonly', '');\n\n\telement.style.contain = 'strict';\n\telement.style.position = 'absolute';\n\telement.style.left = '-9999px';\n\telement.style.fontSize = '12pt'; // Prevent zooming on iOS\n\n\tconst selection = document.getSelection();\n\tlet originalRange = false;\n\tif (selection.rangeCount > 0) {\n\t\toriginalRange = selection.getRangeAt(0);\n\t}\n\n\ttarget.append(element);\n\telement.select();\n\n\t// Explicit selection workaround for iOS\n\telement.selectionStart = 0;\n\telement.selectionEnd = input.length;\n\n\tlet isSuccess = false;\n\ttry {\n\t\tisSuccess = document.execCommand('copy');\n\t} catch (_) {}\n\n\telement.remove();\n\n\tif (originalRange) {\n\t\tselection.removeAllRanges();\n\t\tselection.addRange(originalRange);\n\t}\n\n\t// Get the focus back on the previously focused element, if any\n\tif (previouslyFocusedElement) {\n\t\tpreviouslyFocusedElement.focus();\n\t}\n\n\treturn isSuccess;\n};\n\nmodule.exports = copyTextToClipboard;\n// TODO: Remove this for the next major release\nmodule.exports.default = copyTextToClipboard;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = addLeadingZeros;\nfunction addLeadingZeros(number, targetLength) {\n var sign = number < 0 ? '-' : '';\n var output = Math.abs(number).toString();\n while (output.length < targetLength) {\n output = '0' + output;\n }\n return sign + output;\n}\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = assign;\nfunction assign(target, object) {\n if (target == null) {\n throw new TypeError('assign requires that input parameter not be null or undefined');\n }\n for (var property in object) {\n if (Object.prototype.hasOwnProperty.call(object, property)) {\n ;\n target[property] = object[property];\n }\n }\n return target;\n}\nmodule.exports = exports.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = cloneObject;\nvar _index = _interopRequireDefault(require(\"../assign/index.js\"));\nfunction cloneObject(object) {\n return (0, _index.default)({}, object);\n}\nmodule.exports = exports.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _index = _interopRequireDefault(require(\"../../locale/en-US/index.js\"));\nvar _default = _index.default;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getDefaultOptions = getDefaultOptions;\nexports.setDefaultOptions = setDefaultOptions;\nvar defaultOptions = {};\nfunction getDefaultOptions() {\n return defaultOptions;\n}\nfunction setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _index = _interopRequireDefault(require(\"../../../_lib/getUTCDayOfYear/index.js\"));\nvar _index2 = _interopRequireDefault(require(\"../../../_lib/getUTCISOWeek/index.js\"));\nvar _index3 = _interopRequireDefault(require(\"../../../_lib/getUTCISOWeekYear/index.js\"));\nvar _index4 = _interopRequireDefault(require(\"../../../_lib/getUTCWeek/index.js\"));\nvar _index5 = _interopRequireDefault(require(\"../../../_lib/getUTCWeekYear/index.js\"));\nvar _index6 = _interopRequireDefault(require(\"../../addLeadingZeros/index.js\"));\nvar _index7 = _interopRequireDefault(require(\"../lightFormatters/index.js\"));\nvar dayPeriodEnum = {\n am: 'am',\n pm: 'pm',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n};\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nvar formatters = {\n // Era\n G: function G(date, token, localize) {\n var era = date.getUTCFullYear() > 0 ? 1 : 0;\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return localize.era(era, {\n width: 'abbreviated'\n });\n // A, B\n case 'GGGGG':\n return localize.era(era, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n case 'GGGG':\n default:\n return localize.era(era, {\n width: 'wide'\n });\n }\n },\n // Year\n y: function y(date, token, localize) {\n // Ordinal number\n if (token === 'yo') {\n var signedYear = date.getUTCFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, {\n unit: 'year'\n });\n }\n return _index7.default.y(date, token);\n },\n // Local week-numbering year\n Y: function Y(date, token, localize, options) {\n var signedWeekYear = (0, _index5.default)(date, options);\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n // Two digit year\n if (token === 'YY') {\n var twoDigitYear = weekYear % 100;\n return (0, _index6.default)(twoDigitYear, 2);\n }\n\n // Ordinal number\n if (token === 'Yo') {\n return localize.ordinalNumber(weekYear, {\n unit: 'year'\n });\n }\n\n // Padding\n return (0, _index6.default)(weekYear, token.length);\n },\n // ISO week-numbering year\n R: function R(date, token) {\n var isoWeekYear = (0, _index3.default)(date);\n\n // Padding\n return (0, _index6.default)(isoWeekYear, token.length);\n },\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function u(date, token) {\n var year = date.getUTCFullYear();\n return (0, _index6.default)(year, token.length);\n },\n // Quarter\n Q: function Q(date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n return String(quarter);\n // 01, 02, 03, 04\n case 'QQ':\n return (0, _index6.default)(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case 'Qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n case 'QQQ':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case 'QQQQQ':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n case 'QQQQ':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone quarter\n q: function q(date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n return String(quarter);\n // 01, 02, 03, 04\n case 'qq':\n return (0, _index6.default)(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case 'qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n case 'qqq':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case 'qqqqq':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n case 'qqqq':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Month\n M: function M(date, token, localize) {\n var month = date.getUTCMonth();\n switch (token) {\n case 'M':\n case 'MM':\n return _index7.default.M(date, token);\n // 1st, 2nd, ..., 12th\n case 'Mo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n case 'MMM':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // J, F, ..., D\n case 'MMMMM':\n return localize.month(month, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n case 'MMMM':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone month\n L: function L(date, token, localize) {\n var month = date.getUTCMonth();\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return String(month + 1);\n // 01, 02, ..., 12\n case 'LL':\n return (0, _index6.default)(month + 1, 2);\n // 1st, 2nd, ..., 12th\n case 'Lo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n case 'LLL':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // J, F, ..., D\n case 'LLLLL':\n return localize.month(month, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n case 'LLLL':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Local week of year\n w: function w(date, token, localize, options) {\n var week = (0, _index4.default)(date, options);\n if (token === 'wo') {\n return localize.ordinalNumber(week, {\n unit: 'week'\n });\n }\n return (0, _index6.default)(week, token.length);\n },\n // ISO week of year\n I: function I(date, token, localize) {\n var isoWeek = (0, _index2.default)(date);\n if (token === 'Io') {\n return localize.ordinalNumber(isoWeek, {\n unit: 'week'\n });\n }\n return (0, _index6.default)(isoWeek, token.length);\n },\n // Day of the month\n d: function d(date, token, localize) {\n if (token === 'do') {\n return localize.ordinalNumber(date.getUTCDate(), {\n unit: 'date'\n });\n }\n return _index7.default.d(date, token);\n },\n // Day of year\n D: function D(date, token, localize) {\n var dayOfYear = (0, _index.default)(date);\n if (token === 'Do') {\n return localize.ordinalNumber(dayOfYear, {\n unit: 'dayOfYear'\n });\n }\n return (0, _index6.default)(dayOfYear, token.length);\n },\n // Day of week\n E: function E(date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n case 'EEEEE':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n case 'EEEEEE':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n case 'EEEE':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Local day of week\n e: function e(date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case 'e':\n return String(localDayOfWeek);\n // Padded numerical value\n case 'ee':\n return (0, _index6.default)(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n case 'eo':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n case 'eee':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n case 'eeeee':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n case 'eeeeee':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n case 'eeee':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone local day of week\n c: function c(date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (same as in `e`)\n case 'c':\n return String(localDayOfWeek);\n // Padded numerical value\n case 'cc':\n return (0, _index6.default)(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n case 'co':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n case 'ccc':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // T\n case 'ccccc':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n case 'cccccc':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'standalone'\n });\n // Tuesday\n case 'cccc':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // ISO day of week\n i: function i(date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n switch (token) {\n // 2\n case 'i':\n return String(isoDayOfWeek);\n // 02\n case 'ii':\n return (0, _index6.default)(isoDayOfWeek, token.length);\n // 2nd\n case 'io':\n return localize.ordinalNumber(isoDayOfWeek, {\n unit: 'day'\n });\n // Tue\n case 'iii':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n case 'iiiii':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n case 'iiiiii':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n case 'iiii':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM or PM\n a: function a(date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n switch (token) {\n case 'a':\n case 'aa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n case 'aaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n case 'aaaaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n case 'aaaa':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM, PM, midnight, noon\n b: function b(date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n }\n switch (token) {\n case 'b':\n case 'bb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n case 'bbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n case 'bbbbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n case 'bbbb':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // in the morning, in the afternoon, in the evening, at night\n B: function B(date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n case 'BBBBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n case 'BBBB':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Hour [1-12]\n h: function h(date, token, localize) {\n if (token === 'ho') {\n var hours = date.getUTCHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n return _index7.default.h(date, token);\n },\n // Hour [0-23]\n H: function H(date, token, localize) {\n if (token === 'Ho') {\n return localize.ordinalNumber(date.getUTCHours(), {\n unit: 'hour'\n });\n }\n return _index7.default.H(date, token);\n },\n // Hour [0-11]\n K: function K(date, token, localize) {\n var hours = date.getUTCHours() % 12;\n if (token === 'Ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n return (0, _index6.default)(hours, token.length);\n },\n // Hour [1-24]\n k: function k(date, token, localize) {\n var hours = date.getUTCHours();\n if (hours === 0) hours = 24;\n if (token === 'ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n return (0, _index6.default)(hours, token.length);\n },\n // Minute\n m: function m(date, token, localize) {\n if (token === 'mo') {\n return localize.ordinalNumber(date.getUTCMinutes(), {\n unit: 'minute'\n });\n }\n return _index7.default.m(date, token);\n },\n // Second\n s: function s(date, token, localize) {\n if (token === 'so') {\n return localize.ordinalNumber(date.getUTCSeconds(), {\n unit: 'second'\n });\n }\n return _index7.default.s(date, token);\n },\n // Fraction of second\n S: function S(date, token) {\n return _index7.default.S(date, token);\n },\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function X(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n if (timezoneOffset === 0) {\n return 'Z';\n }\n switch (token) {\n // Hours and optional minutes\n case 'X':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n case 'XXXX':\n case 'XX':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n case 'XXXXX':\n case 'XXX': // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function x(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n switch (token) {\n // Hours and optional minutes\n case 'x':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n case 'xxxx':\n case 'xx':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n case 'xxxxx':\n case 'xxx': // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (GMT)\n O: function O(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n switch (token) {\n // Short\n case 'O':\n case 'OO':\n case 'OOO':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n case 'OOOO':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (specific non-location)\n z: function z(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n switch (token) {\n // Short\n case 'z':\n case 'zz':\n case 'zzz':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n case 'zzzz':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Seconds timestamp\n t: function t(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = Math.floor(originalDate.getTime() / 1000);\n return (0, _index6.default)(timestamp, token.length);\n },\n // Milliseconds timestamp\n T: function T(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = originalDate.getTime();\n return (0, _index6.default)(timestamp, token.length);\n }\n};\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = Math.floor(absOffset / 60);\n var minutes = absOffset % 60;\n if (minutes === 0) {\n return sign + String(hours);\n }\n var delimiter = dirtyDelimiter || '';\n return sign + String(hours) + delimiter + (0, _index6.default)(minutes, 2);\n}\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {\n if (offset % 60 === 0) {\n var sign = offset > 0 ? '-' : '+';\n return sign + (0, _index6.default)(Math.abs(offset) / 60, 2);\n }\n return formatTimezone(offset, dirtyDelimiter);\n}\nfunction formatTimezone(offset, dirtyDelimiter) {\n var delimiter = dirtyDelimiter || '';\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = (0, _index6.default)(Math.floor(absOffset / 60), 2);\n var minutes = (0, _index6.default)(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\nvar _default = formatters;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _index = _interopRequireDefault(require(\"../../addLeadingZeros/index.js\"));\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nvar formatters = {\n // Year\n y: function y(date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n var signedYear = date.getUTCFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return (0, _index.default)(token === 'yy' ? year % 100 : year, token.length);\n },\n // Month\n M: function M(date, token) {\n var month = date.getUTCMonth();\n return token === 'M' ? String(month + 1) : (0, _index.default)(month + 1, 2);\n },\n // Day of the month\n d: function d(date, token) {\n return (0, _index.default)(date.getUTCDate(), token.length);\n },\n // AM or PM\n a: function a(date, token) {\n var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am';\n switch (token) {\n case 'a':\n case 'aa':\n return dayPeriodEnumValue.toUpperCase();\n case 'aaa':\n return dayPeriodEnumValue;\n case 'aaaaa':\n return dayPeriodEnumValue[0];\n case 'aaaa':\n default:\n return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.';\n }\n },\n // Hour [1-12]\n h: function h(date, token) {\n return (0, _index.default)(date.getUTCHours() % 12 || 12, token.length);\n },\n // Hour [0-23]\n H: function H(date, token) {\n return (0, _index.default)(date.getUTCHours(), token.length);\n },\n // Minute\n m: function m(date, token) {\n return (0, _index.default)(date.getUTCMinutes(), token.length);\n },\n // Second\n s: function s(date, token) {\n return (0, _index.default)(date.getUTCSeconds(), token.length);\n },\n // Fraction of second\n S: function S(date, token) {\n var numberOfDigits = token.length;\n var milliseconds = date.getUTCMilliseconds();\n var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3));\n return (0, _index.default)(fractionalSeconds, token.length);\n }\n};\nvar _default = formatters;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar dateLongFormatter = function dateLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'P':\n return formatLong.date({\n width: 'short'\n });\n case 'PP':\n return formatLong.date({\n width: 'medium'\n });\n case 'PPP':\n return formatLong.date({\n width: 'long'\n });\n case 'PPPP':\n default:\n return formatLong.date({\n width: 'full'\n });\n }\n};\nvar timeLongFormatter = function timeLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'p':\n return formatLong.time({\n width: 'short'\n });\n case 'pp':\n return formatLong.time({\n width: 'medium'\n });\n case 'ppp':\n return formatLong.time({\n width: 'long'\n });\n case 'pppp':\n default:\n return formatLong.time({\n width: 'full'\n });\n }\n};\nvar dateTimeLongFormatter = function dateTimeLongFormatter(pattern, formatLong) {\n var matchResult = pattern.match(/(P+)(p+)?/) || [];\n var datePattern = matchResult[1];\n var timePattern = matchResult[2];\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n var dateTimeFormat;\n switch (datePattern) {\n case 'P':\n dateTimeFormat = formatLong.dateTime({\n width: 'short'\n });\n break;\n case 'PP':\n dateTimeFormat = formatLong.dateTime({\n width: 'medium'\n });\n break;\n case 'PPP':\n dateTimeFormat = formatLong.dateTime({\n width: 'long'\n });\n break;\n case 'PPPP':\n default:\n dateTimeFormat = formatLong.dateTime({\n width: 'full'\n });\n break;\n }\n return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));\n};\nvar longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter\n};\nvar _default = longFormatters;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = getTimezoneOffsetInMilliseconds;\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nfunction getTimezoneOffsetInMilliseconds(date) {\n var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n utcDate.setUTCFullYear(date.getFullYear());\n return date.getTime() - utcDate.getTime();\n}\nmodule.exports = exports.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = getUTCDayOfYear;\nvar _index = _interopRequireDefault(require(\"../../toDate/index.js\"));\nvar _index2 = _interopRequireDefault(require(\"../requiredArgs/index.js\"));\nvar MILLISECONDS_IN_DAY = 86400000;\nfunction getUTCDayOfYear(dirtyDate) {\n (0, _index2.default)(1, arguments);\n var date = (0, _index.default)(dirtyDate);\n var timestamp = date.getTime();\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n var startOfYearTimestamp = date.getTime();\n var difference = timestamp - startOfYearTimestamp;\n return Math.floor(difference / MILLISECONDS_IN_DAY) + 1;\n}\nmodule.exports = exports.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = getUTCISOWeek;\nvar _index = _interopRequireDefault(require(\"../../toDate/index.js\"));\nvar _index2 = _interopRequireDefault(require(\"../startOfUTCISOWeek/index.js\"));\nvar _index3 = _interopRequireDefault(require(\"../startOfUTCISOWeekYear/index.js\"));\nvar _index4 = _interopRequireDefault(require(\"../requiredArgs/index.js\"));\nvar MILLISECONDS_IN_WEEK = 604800000;\nfunction getUTCISOWeek(dirtyDate) {\n (0, _index4.default)(1, arguments);\n var date = (0, _index.default)(dirtyDate);\n var diff = (0, _index2.default)(date).getTime() - (0, _index3.default)(date).getTime();\n\n // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}\nmodule.exports = exports.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = getUTCISOWeekYear;\nvar _index = _interopRequireDefault(require(\"../../toDate/index.js\"));\nvar _index2 = _interopRequireDefault(require(\"../requiredArgs/index.js\"));\nvar _index3 = _interopRequireDefault(require(\"../startOfUTCISOWeek/index.js\"));\nfunction getUTCISOWeekYear(dirtyDate) {\n (0, _index2.default)(1, arguments);\n var date = (0, _index.default)(dirtyDate);\n var year = date.getUTCFullYear();\n var fourthOfJanuaryOfNextYear = new Date(0);\n fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = (0, _index3.default)(fourthOfJanuaryOfNextYear);\n var fourthOfJanuaryOfThisYear = new Date(0);\n fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = (0, _index3.default)(fourthOfJanuaryOfThisYear);\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\nmodule.exports = exports.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = getUTCWeek;\nvar _index = _interopRequireDefault(require(\"../../toDate/index.js\"));\nvar _index2 = _interopRequireDefault(require(\"../startOfUTCWeek/index.js\"));\nvar _index3 = _interopRequireDefault(require(\"../startOfUTCWeekYear/index.js\"));\nvar _index4 = _interopRequireDefault(require(\"../requiredArgs/index.js\"));\nvar MILLISECONDS_IN_WEEK = 604800000;\nfunction getUTCWeek(dirtyDate, options) {\n (0, _index4.default)(1, arguments);\n var date = (0, _index.default)(dirtyDate);\n var diff = (0, _index2.default)(date, options).getTime() - (0, _index3.default)(date, options).getTime();\n\n // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}\nmodule.exports = exports.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = getUTCWeekYear;\nvar _index = _interopRequireDefault(require(\"../../toDate/index.js\"));\nvar _index2 = _interopRequireDefault(require(\"../requiredArgs/index.js\"));\nvar _index3 = _interopRequireDefault(require(\"../startOfUTCWeek/index.js\"));\nvar _index4 = _interopRequireDefault(require(\"../toInteger/index.js\"));\nvar _index5 = require(\"../defaultOptions/index.js\");\nfunction getUTCWeekYear(dirtyDate, options) {\n var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n (0, _index2.default)(1, arguments);\n var date = (0, _index.default)(dirtyDate);\n var year = date.getUTCFullYear();\n var defaultOptions = (0, _index5.getDefaultOptions)();\n var firstWeekContainsDate = (0, _index4.default)((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n\n // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n var firstWeekOfNextYear = new Date(0);\n firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = (0, _index3.default)(firstWeekOfNextYear, options);\n var firstWeekOfThisYear = new Date(0);\n firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = (0, _index3.default)(firstWeekOfThisYear, options);\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isProtectedDayOfYearToken = isProtectedDayOfYearToken;\nexports.isProtectedWeekYearToken = isProtectedWeekYearToken;\nexports.throwProtectedError = throwProtectedError;\nvar protectedDayOfYearTokens = ['D', 'DD'];\nvar protectedWeekYearTokens = ['YY', 'YYYY'];\nfunction isProtectedDayOfYearToken(token) {\n return protectedDayOfYearTokens.indexOf(token) !== -1;\n}\nfunction isProtectedWeekYearToken(token) {\n return protectedWeekYearTokens.indexOf(token) !== -1;\n}\nfunction throwProtectedError(token, format, input) {\n if (token === 'YYYY') {\n throw new RangeError(\"Use `yyyy` instead of `YYYY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n } else if (token === 'YY') {\n throw new RangeError(\"Use `yy` instead of `YY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n } else if (token === 'D') {\n throw new RangeError(\"Use `d` instead of `D` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n } else if (token === 'DD') {\n throw new RangeError(\"Use `dd` instead of `DD` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = requiredArgs;\nfunction requiredArgs(required, args) {\n if (args.length < required) {\n throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n }\n}\nmodule.exports = exports.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = startOfUTCISOWeek;\nvar _index = _interopRequireDefault(require(\"../../toDate/index.js\"));\nvar _index2 = _interopRequireDefault(require(\"../requiredArgs/index.js\"));\nfunction startOfUTCISOWeek(dirtyDate) {\n (0, _index2.default)(1, arguments);\n var weekStartsOn = 1;\n var date = (0, _index.default)(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}\nmodule.exports = exports.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = startOfUTCISOWeekYear;\nvar _index = _interopRequireDefault(require(\"../getUTCISOWeekYear/index.js\"));\nvar _index2 = _interopRequireDefault(require(\"../startOfUTCISOWeek/index.js\"));\nvar _index3 = _interopRequireDefault(require(\"../requiredArgs/index.js\"));\nfunction startOfUTCISOWeekYear(dirtyDate) {\n (0, _index3.default)(1, arguments);\n var year = (0, _index.default)(dirtyDate);\n var fourthOfJanuary = new Date(0);\n fourthOfJanuary.setUTCFullYear(year, 0, 4);\n fourthOfJanuary.setUTCHours(0, 0, 0, 0);\n var date = (0, _index2.default)(fourthOfJanuary);\n return date;\n}\nmodule.exports = exports.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = startOfUTCWeek;\nvar _index = _interopRequireDefault(require(\"../../toDate/index.js\"));\nvar _index2 = _interopRequireDefault(require(\"../requiredArgs/index.js\"));\nvar _index3 = _interopRequireDefault(require(\"../toInteger/index.js\"));\nvar _index4 = require(\"../defaultOptions/index.js\");\nfunction startOfUTCWeek(dirtyDate, options) {\n var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n (0, _index2.default)(1, arguments);\n var defaultOptions = (0, _index4.getDefaultOptions)();\n var weekStartsOn = (0, _index3.default)((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n var date = (0, _index.default)(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}\nmodule.exports = exports.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = startOfUTCWeekYear;\nvar _index = _interopRequireDefault(require(\"../getUTCWeekYear/index.js\"));\nvar _index2 = _interopRequireDefault(require(\"../requiredArgs/index.js\"));\nvar _index3 = _interopRequireDefault(require(\"../startOfUTCWeek/index.js\"));\nvar _index4 = _interopRequireDefault(require(\"../toInteger/index.js\"));\nvar _index5 = require(\"../defaultOptions/index.js\");\nfunction startOfUTCWeekYear(dirtyDate, options) {\n var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n (0, _index2.default)(1, arguments);\n var defaultOptions = (0, _index5.getDefaultOptions)();\n var firstWeekContainsDate = (0, _index4.default)((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n var year = (0, _index.default)(dirtyDate, options);\n var firstWeek = new Date(0);\n firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setUTCHours(0, 0, 0, 0);\n var date = (0, _index3.default)(firstWeek, options);\n return date;\n}\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = toInteger;\nfunction toInteger(dirtyNumber) {\n if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n return NaN;\n }\n var number = Number(dirtyNumber);\n if (isNaN(number)) {\n return number;\n }\n return number < 0 ? Math.ceil(number) : Math.floor(number);\n}\nmodule.exports = exports.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = addMilliseconds;\nvar _index = _interopRequireDefault(require(\"../_lib/toInteger/index.js\"));\nvar _index2 = _interopRequireDefault(require(\"../toDate/index.js\"));\nvar _index3 = _interopRequireDefault(require(\"../_lib/requiredArgs/index.js\"));\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\nfunction addMilliseconds(dirtyDate, dirtyAmount) {\n (0, _index3.default)(2, arguments);\n var timestamp = (0, _index2.default)(dirtyDate).getTime();\n var amount = (0, _index.default)(dirtyAmount);\n return new Date(timestamp + amount);\n}\nmodule.exports = exports.default;","var defaultOptions = {};\nexport function getDefaultOptions() {\n return defaultOptions;\n}\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}","export default function requiredArgs(required, args) {\n if (args.length < required) {\n throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n }\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function startOfUTCWeek(dirtyDate, options) {\n var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n requiredArgs(1, arguments);\n var defaultOptions = getDefaultOptions();\n var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}","export default function toInteger(dirtyNumber) {\n if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n return NaN;\n }\n var number = Number(dirtyNumber);\n if (isNaN(number)) {\n return number;\n }\n return number < 0 ? Math.ceil(number) : Math.floor(number);\n}","export default function buildFormatLongFn(args) {\n return function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // TODO: Remove String()\n var width = options.width ? String(options.width) : args.defaultWidth;\n var format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}","export default function buildLocalizeFn(args) {\n return function (dirtyIndex, options) {\n var context = options !== null && options !== void 0 && options.context ? String(options.context) : 'standalone';\n var valuesArray;\n if (context === 'formatting' && args.formattingValues) {\n var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth;\n valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n var _defaultWidth = args.defaultWidth;\n var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth;\n valuesArray = args.values[_width] || args.values[_defaultWidth];\n }\n var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex;\n // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}","export default function buildMatchFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var width = options.width;\n var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];\n var matchResult = string.match(matchPattern);\n if (!matchResult) {\n return null;\n }\n var matchedString = matchResult[0];\n var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];\n var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n }) : findKey(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n });\n var value;\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}\nfunction findKey(object, predicate) {\n for (var key in object) {\n if (object.hasOwnProperty(key) && predicate(object[key])) {\n return key;\n }\n }\n return undefined;\n}\nfunction findIndex(array, predicate) {\n for (var key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}","export default function buildMatchPatternFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n var matchedString = matchResult[0];\n var parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}","var formatDistanceLocale = {\n lessThanXSeconds: {\n one: '不到 1 秒',\n other: '不到 {{count}} 秒'\n },\n xSeconds: {\n one: '1 秒',\n other: '{{count}} 秒'\n },\n halfAMinute: '半分钟',\n lessThanXMinutes: {\n one: '不到 1 分钟',\n other: '不到 {{count}} 分钟'\n },\n xMinutes: {\n one: '1 分钟',\n other: '{{count}} 分钟'\n },\n xHours: {\n one: '1 小时',\n other: '{{count}} 小时'\n },\n aboutXHours: {\n one: '大约 1 小时',\n other: '大约 {{count}} 小时'\n },\n xDays: {\n one: '1 天',\n other: '{{count}} 天'\n },\n aboutXWeeks: {\n one: '大约 1 个星期',\n other: '大约 {{count}} 个星期'\n },\n xWeeks: {\n one: '1 个星期',\n other: '{{count}} 个星期'\n },\n aboutXMonths: {\n one: '大约 1 个月',\n other: '大约 {{count}} 个月'\n },\n xMonths: {\n one: '1 个月',\n other: '{{count}} 个月'\n },\n aboutXYears: {\n one: '大约 1 年',\n other: '大约 {{count}} 年'\n },\n xYears: {\n one: '1 年',\n other: '{{count}} 年'\n },\n overXYears: {\n one: '超过 1 年',\n other: '超过 {{count}} 年'\n },\n almostXYears: {\n one: '将近 1 年',\n other: '将近 {{count}} 年'\n }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === 'string') {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace('{{count}}', String(count));\n }\n if (options !== null && options !== void 0 && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return result + '内';\n } else {\n return result + '前';\n }\n }\n return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: \"y'年'M'月'd'日' EEEE\",\n long: \"y'年'M'月'd'日'\",\n medium: 'yyyy-MM-dd',\n short: 'yy-MM-dd'\n};\nvar timeFormats = {\n full: 'zzzz a h:mm:ss',\n long: 'z a h:mm:ss',\n medium: 'a h:mm:ss',\n short: 'a h:mm'\n};\nvar dateTimeFormats = {\n full: '{{date}} {{time}}',\n long: '{{date}} {{time}}',\n medium: '{{date}} {{time}}',\n short: '{{date}} {{time}}'\n};\nvar formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: 'full'\n }),\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: 'full'\n }),\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: 'full'\n })\n};\nexport default formatLong;","import isSameUTCWeek from \"../../../../_lib/isSameUTCWeek/index.js\";\nfunction checkWeek(date, baseDate, options) {\n var baseFormat = 'eeee p';\n if (isSameUTCWeek(date, baseDate, options)) {\n return baseFormat; // in same week\n } else if (date.getTime() > baseDate.getTime()) {\n return \"'下个'\" + baseFormat; // in next week\n }\n\n return \"'上个'\" + baseFormat; // in last week\n}\n\nvar formatRelativeLocale = {\n lastWeek: checkWeek,\n // days before yesterday, maybe in this week or last week\n yesterday: \"'昨天' p\",\n today: \"'今天' p\",\n tomorrow: \"'明天' p\",\n nextWeek: checkWeek,\n // days after tomorrow, maybe in this week or next week\n other: 'PP p'\n};\nvar formatRelative = function formatRelative(token, date, baseDate, options) {\n var format = formatRelativeLocale[token];\n if (typeof format === 'function') {\n return format(date, baseDate, options);\n }\n return format;\n};\nexport default formatRelative;","import requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nexport default function isSameUTCWeek(dirtyDateLeft, dirtyDateRight, options) {\n requiredArgs(2, arguments);\n var dateLeftStartOfWeek = startOfUTCWeek(dirtyDateLeft, options);\n var dateRightStartOfWeek = startOfUTCWeek(dirtyDateRight, options);\n return dateLeftStartOfWeek.getTime() === dateRightStartOfWeek.getTime();\n}","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['前', '公元'],\n abbreviated: ['前', '公元'],\n wide: ['公元前', '公元']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['第一季', '第二季', '第三季', '第四季'],\n wide: ['第一季度', '第二季度', '第三季度', '第四季度']\n};\nvar monthValues = {\n narrow: ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二'],\n abbreviated: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],\n wide: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']\n};\nvar dayValues = {\n narrow: ['日', '一', '二', '三', '四', '五', '六'],\n short: ['日', '一', '二', '三', '四', '五', '六'],\n abbreviated: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],\n wide: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']\n};\nvar dayPeriodValues = {\n narrow: {\n am: '上',\n pm: '下',\n midnight: '凌晨',\n noon: '午',\n morning: '早',\n afternoon: '下午',\n evening: '晚',\n night: '夜'\n },\n abbreviated: {\n am: '上午',\n pm: '下午',\n midnight: '凌晨',\n noon: '中午',\n morning: '早晨',\n afternoon: '中午',\n evening: '晚上',\n night: '夜间'\n },\n wide: {\n am: '上午',\n pm: '下午',\n midnight: '凌晨',\n noon: '中午',\n morning: '早晨',\n afternoon: '中午',\n evening: '晚上',\n night: '夜间'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: '上',\n pm: '下',\n midnight: '凌晨',\n noon: '午',\n morning: '早',\n afternoon: '下午',\n evening: '晚',\n night: '夜'\n },\n abbreviated: {\n am: '上午',\n pm: '下午',\n midnight: '凌晨',\n noon: '中午',\n morning: '早晨',\n afternoon: '中午',\n evening: '晚上',\n night: '夜间'\n },\n wide: {\n am: '上午',\n pm: '下午',\n midnight: '凌晨',\n noon: '中午',\n morning: '早晨',\n afternoon: '中午',\n evening: '晚上',\n night: '夜间'\n }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n var number = Number(dirtyNumber);\n switch (options === null || options === void 0 ? void 0 : options.unit) {\n case 'date':\n return number.toString() + '日';\n case 'hour':\n return number.toString() + '时';\n case 'minute':\n return number.toString() + '分';\n case 'second':\n return number.toString() + '秒';\n default:\n return '第 ' + number.toString();\n }\n};\nvar localize = {\n ordinalNumber: ordinalNumber,\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: 'wide'\n }),\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: 'wide',\n argumentCallback: function argumentCallback(quarter) {\n return quarter - 1;\n }\n }),\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: 'wide'\n }),\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: 'wide'\n }),\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: 'wide',\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: 'wide'\n })\n};\nexport default localize;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Chinese Simplified locale.\n * @language Chinese Simplified\n * @iso-639-2 zho\n * @author Changyu Geng [@KingMario]{@link https://github.com/KingMario}\n * @author Song Shuoyun [@fnlctrl]{@link https://github.com/fnlctrl}\n * @author sabrinaM [@sabrinamiao]{@link https://github.com/sabrinamiao}\n * @author Carney Wu [@cubicwork]{@link https://github.com/cubicwork}\n * @author Terrence Lam [@skyuplam]{@link https://github.com/skyuplam}\n */\nvar locale = {\n code: 'zh-CN',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1 /* Monday */,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(第\\s*)?\\d+(日|时|分|秒)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(前)/i,\n abbreviated: /^(前)/i,\n wide: /^(公元前|公元)/i\n};\nvar parseEraPatterns = {\n any: [/^(前)/i, /^(公元)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^第[一二三四]刻/i,\n wide: /^第[一二三四]刻钟/i\n};\nvar parseQuarterPatterns = {\n any: [/(1|一)/i, /(2|二)/i, /(3|三)/i, /(4|四)/i]\n};\nvar matchMonthPatterns = {\n narrow: /^(一|二|三|四|五|六|七|八|九|十[二一])/i,\n abbreviated: /^(一|二|三|四|五|六|七|八|九|十[二一]|\\d|1[12])月/i,\n wide: /^(一|二|三|四|五|六|七|八|九|十[二一])月/i\n};\nvar parseMonthPatterns = {\n narrow: [/^一/i, /^二/i, /^三/i, /^四/i, /^五/i, /^六/i, /^七/i, /^八/i, /^九/i, /^十(?!(一|二))/i, /^十一/i, /^十二/i],\n any: [/^一|1/i, /^二|2/i, /^三|3/i, /^四|4/i, /^五|5/i, /^六|6/i, /^七|7/i, /^八|8/i, /^九|9/i, /^十(?!(一|二))|10/i, /^十一|11/i, /^十二|12/i]\n};\nvar matchDayPatterns = {\n narrow: /^[一二三四五六日]/i,\n short: /^[一二三四五六日]/i,\n abbreviated: /^周[一二三四五六日]/i,\n wide: /^星期[一二三四五六日]/i\n};\nvar parseDayPatterns = {\n any: [/日/i, /一/i, /二/i, /三/i, /四/i, /五/i, /六/i]\n};\nvar matchDayPeriodPatterns = {\n any: /^(上午?|下午?|午夜|[中正]午|早上?|下午|晚上?|凌晨|)/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^上午?/i,\n pm: /^下午?/i,\n midnight: /^午夜/i,\n noon: /^[中正]午/i,\n morning: /^早上/i,\n afternoon: /^下午/i,\n evening: /^晚上?/i,\n night: /^凌晨/i\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value, 10);\n }\n }),\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseEraPatterns,\n defaultParseWidth: 'any'\n }),\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: 'any',\n valueCallback: function valueCallback(index) {\n return index + 1;\n }\n }),\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: 'any'\n }),\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseDayPatterns,\n defaultParseWidth: 'any'\n }),\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: 'any',\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: 'any'\n })\n};\nexport default match;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport default function toDate(argument) {\n requiredArgs(1, arguments);\n var argStr = Object.prototype.toString.call(argument);\n\n // Clone the date\n if (argument instanceof Date || _typeof(argument) === 'object' && argStr === '[object Date]') {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime());\n } else if (typeof argument === 'number' || argStr === '[object Number]') {\n return new Date(argument);\n } else {\n if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments\");\n // eslint-disable-next-line no-console\n console.warn(new Error().stack);\n }\n return new Date(NaN);\n }\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = format;\nvar _index = _interopRequireDefault(require(\"../isValid/index.js\"));\nvar _index2 = _interopRequireDefault(require(\"../subMilliseconds/index.js\"));\nvar _index3 = _interopRequireDefault(require(\"../toDate/index.js\"));\nvar _index4 = _interopRequireDefault(require(\"../_lib/format/formatters/index.js\"));\nvar _index5 = _interopRequireDefault(require(\"../_lib/format/longFormatters/index.js\"));\nvar _index6 = _interopRequireDefault(require(\"../_lib/getTimezoneOffsetInMilliseconds/index.js\"));\nvar _index7 = require(\"../_lib/protectedTokens/index.js\");\nvar _index8 = _interopRequireDefault(require(\"../_lib/toInteger/index.js\"));\nvar _index9 = _interopRequireDefault(require(\"../_lib/requiredArgs/index.js\"));\nvar _index10 = require(\"../_lib/defaultOptions/index.js\");\nvar _index11 = _interopRequireDefault(require(\"../_lib/defaultLocale/index.js\"));\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\n\nfunction format(dirtyDate, dirtyFormatStr, options) {\n var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4;\n (0, _index9.default)(2, arguments);\n var formatStr = String(dirtyFormatStr);\n var defaultOptions = (0, _index10.getDefaultOptions)();\n var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : _index11.default;\n var firstWeekContainsDate = (0, _index8.default)((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1);\n\n // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n var weekStartsOn = (0, _index8.default)((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0);\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n if (!locale.localize) {\n throw new RangeError('locale must contain localize property');\n }\n if (!locale.formatLong) {\n throw new RangeError('locale must contain formatLong property');\n }\n var originalDate = (0, _index3.default)(dirtyDate);\n if (!(0, _index.default)(originalDate)) {\n throw new RangeError('Invalid time value');\n }\n\n // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n var timezoneOffset = (0, _index6.default)(originalDate);\n var utcDate = (0, _index2.default)(originalDate, timezoneOffset);\n var formatterOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale,\n _originalDate: originalDate\n };\n var result = formatStr.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n if (firstCharacter === 'p' || firstCharacter === 'P') {\n var longFormatter = _index5.default[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n }).join('').match(formattingTokensRegExp).map(function (substring) {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return \"'\";\n }\n var firstCharacter = substring[0];\n if (firstCharacter === \"'\") {\n return cleanEscapedString(substring);\n }\n var formatter = _index4.default[firstCharacter];\n if (formatter) {\n if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && (0, _index7.isProtectedWeekYearToken)(substring)) {\n (0, _index7.throwProtectedError)(substring, dirtyFormatStr, String(dirtyDate));\n }\n if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && (0, _index7.isProtectedDayOfYearToken)(substring)) {\n (0, _index7.throwProtectedError)(substring, dirtyFormatStr, String(dirtyDate));\n }\n return formatter(utcDate, substring, locale.localize, formatterOptions);\n }\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n }\n return substring;\n }).join('');\n return result;\n}\nfunction cleanEscapedString(input) {\n var matched = input.match(escapedStringRegExp);\n if (!matched) {\n return input;\n }\n return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\nmodule.exports = exports.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isDate;\nvar _typeof2 = _interopRequireDefault(require(\"@babel/runtime/helpers/typeof\"));\nvar _index = _interopRequireDefault(require(\"../_lib/requiredArgs/index.js\"));\n/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param {*} value - the value to check\n * @returns {boolean} true if the given value is a date\n * @throws {TypeError} 1 arguments required\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nfunction isDate(value) {\n (0, _index.default)(1, arguments);\n return value instanceof Date || (0, _typeof2.default)(value) === 'object' && Object.prototype.toString.call(value) === '[object Date]';\n}\nmodule.exports = exports.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isValid;\nvar _index = _interopRequireDefault(require(\"../isDate/index.js\"));\nvar _index2 = _interopRequireDefault(require(\"../toDate/index.js\"));\nvar _index3 = _interopRequireDefault(require(\"../_lib/requiredArgs/index.js\"));\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nfunction isValid(dirtyDate) {\n (0, _index3.default)(1, arguments);\n if (!(0, _index.default)(dirtyDate) && typeof dirtyDate !== 'number') {\n return false;\n }\n var date = (0, _index2.default)(dirtyDate);\n return !isNaN(Number(date));\n}\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = buildFormatLongFn;\nfunction buildFormatLongFn(args) {\n return function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // TODO: Remove String()\n var width = options.width ? String(options.width) : args.defaultWidth;\n var format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = buildLocalizeFn;\nfunction buildLocalizeFn(args) {\n return function (dirtyIndex, options) {\n var context = options !== null && options !== void 0 && options.context ? String(options.context) : 'standalone';\n var valuesArray;\n if (context === 'formatting' && args.formattingValues) {\n var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth;\n valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n var _defaultWidth = args.defaultWidth;\n var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth;\n valuesArray = args.values[_width] || args.values[_defaultWidth];\n }\n var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex;\n // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = buildMatchFn;\nfunction buildMatchFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var width = options.width;\n var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];\n var matchResult = string.match(matchPattern);\n if (!matchResult) {\n return null;\n }\n var matchedString = matchResult[0];\n var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];\n var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n }) : findKey(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n });\n var value;\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}\nfunction findKey(object, predicate) {\n for (var key in object) {\n if (object.hasOwnProperty(key) && predicate(object[key])) {\n return key;\n }\n }\n return undefined;\n}\nfunction findIndex(array, predicate) {\n for (var key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = buildMatchPatternFn;\nfunction buildMatchPatternFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n var matchedString = matchResult[0];\n var parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'less than a second',\n other: 'less than {{count}} seconds'\n },\n xSeconds: {\n one: '1 second',\n other: '{{count}} seconds'\n },\n halfAMinute: 'half a minute',\n lessThanXMinutes: {\n one: 'less than a minute',\n other: 'less than {{count}} minutes'\n },\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n aboutXHours: {\n one: 'about 1 hour',\n other: 'about {{count}} hours'\n },\n xHours: {\n one: '1 hour',\n other: '{{count}} hours'\n },\n xDays: {\n one: '1 day',\n other: '{{count}} days'\n },\n aboutXWeeks: {\n one: 'about 1 week',\n other: 'about {{count}} weeks'\n },\n xWeeks: {\n one: '1 week',\n other: '{{count}} weeks'\n },\n aboutXMonths: {\n one: 'about 1 month',\n other: 'about {{count}} months'\n },\n xMonths: {\n one: '1 month',\n other: '{{count}} months'\n },\n aboutXYears: {\n one: 'about 1 year',\n other: 'about {{count}} years'\n },\n xYears: {\n one: '1 year',\n other: '{{count}} years'\n },\n overXYears: {\n one: 'over 1 year',\n other: 'over {{count}} years'\n },\n almostXYears: {\n one: 'almost 1 year',\n other: 'almost {{count}} years'\n }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === 'string') {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace('{{count}}', count.toString());\n }\n if (options !== null && options !== void 0 && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return 'in ' + result;\n } else {\n return result + ' ago';\n }\n }\n return result;\n};\nvar _default = formatDistance;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _index = _interopRequireDefault(require(\"../../../_lib/buildFormatLongFn/index.js\"));\nvar dateFormats = {\n full: 'EEEE, MMMM do, y',\n long: 'MMMM do, y',\n medium: 'MMM d, y',\n short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n full: 'h:mm:ss a zzzz',\n long: 'h:mm:ss a z',\n medium: 'h:mm:ss a',\n short: 'h:mm a'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: '{{date}}, {{time}}',\n short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n date: (0, _index.default)({\n formats: dateFormats,\n defaultWidth: 'full'\n }),\n time: (0, _index.default)({\n formats: timeFormats,\n defaultWidth: 'full'\n }),\n dateTime: (0, _index.default)({\n formats: dateTimeFormats,\n defaultWidth: 'full'\n })\n};\nvar _default = formatLong;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\nvar _default = formatRelative;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _index = _interopRequireDefault(require(\"../../../_lib/buildLocalizeFn/index.js\"));\nvar eraValues = {\n narrow: ['B', 'A'],\n abbreviated: ['BC', 'AD'],\n wide: ['Before Christ', 'Anno Domini']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar dayValues = {\n narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n var number = Number(dirtyNumber);\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n var rem100 = number % 100;\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + 'st';\n case 2:\n return number + 'nd';\n case 3:\n return number + 'rd';\n }\n }\n return number + 'th';\n};\nvar localize = {\n ordinalNumber: ordinalNumber,\n era: (0, _index.default)({\n values: eraValues,\n defaultWidth: 'wide'\n }),\n quarter: (0, _index.default)({\n values: quarterValues,\n defaultWidth: 'wide',\n argumentCallback: function argumentCallback(quarter) {\n return quarter - 1;\n }\n }),\n month: (0, _index.default)({\n values: monthValues,\n defaultWidth: 'wide'\n }),\n day: (0, _index.default)({\n values: dayValues,\n defaultWidth: 'wide'\n }),\n dayPeriod: (0, _index.default)({\n values: dayPeriodValues,\n defaultWidth: 'wide',\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: 'wide'\n })\n};\nvar _default = localize;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _index = _interopRequireDefault(require(\"../../../_lib/buildMatchFn/index.js\"));\nvar _index2 = _interopRequireDefault(require(\"../../../_lib/buildMatchPatternFn/index.js\"));\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i\n};\nvar parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n};\nvar parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i\n }\n};\nvar match = {\n ordinalNumber: (0, _index2.default)({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value, 10);\n }\n }),\n era: (0, _index.default)({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseEraPatterns,\n defaultParseWidth: 'any'\n }),\n quarter: (0, _index.default)({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: 'any',\n valueCallback: function valueCallback(index) {\n return index + 1;\n }\n }),\n month: (0, _index.default)({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: 'any'\n }),\n day: (0, _index.default)({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseDayPatterns,\n defaultParseWidth: 'any'\n }),\n dayPeriod: (0, _index.default)({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: 'any',\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: 'any'\n })\n};\nvar _default = match;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _index = _interopRequireDefault(require(\"./_lib/formatDistance/index.js\"));\nvar _index2 = _interopRequireDefault(require(\"./_lib/formatLong/index.js\"));\nvar _index3 = _interopRequireDefault(require(\"./_lib/formatRelative/index.js\"));\nvar _index4 = _interopRequireDefault(require(\"./_lib/localize/index.js\"));\nvar _index5 = _interopRequireDefault(require(\"./_lib/match/index.js\"));\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n code: 'en-US',\n formatDistance: _index.default,\n formatLong: _index2.default,\n formatRelative: _index3.default,\n localize: _index4.default,\n match: _index5.default,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1\n }\n};\nvar _default = locale;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = subMilliseconds;\nvar _index = _interopRequireDefault(require(\"../addMilliseconds/index.js\"));\nvar _index2 = _interopRequireDefault(require(\"../_lib/requiredArgs/index.js\"));\nvar _index3 = _interopRequireDefault(require(\"../_lib/toInteger/index.js\"));\n/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\nfunction subMilliseconds(dirtyDate, dirtyAmount) {\n (0, _index2.default)(2, arguments);\n var amount = (0, _index3.default)(dirtyAmount);\n return (0, _index.default)(dirtyDate, -amount);\n}\nmodule.exports = exports.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = toDate;\nvar _typeof2 = _interopRequireDefault(require(\"@babel/runtime/helpers/typeof\"));\nvar _index = _interopRequireDefault(require(\"../_lib/requiredArgs/index.js\"));\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nfunction toDate(argument) {\n (0, _index.default)(1, arguments);\n var argStr = Object.prototype.toString.call(argument);\n\n // Clone the date\n if (argument instanceof Date || (0, _typeof2.default)(argument) === 'object' && argStr === '[object Date]') {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime());\n } else if (typeof argument === 'number' || argStr === '[object Number]') {\n return new Date(argument);\n } else {\n if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments\");\n // eslint-disable-next-line no-console\n console.warn(new Error().stack);\n }\n return new Date(NaN);\n }\n}\nmodule.exports = exports.default;","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","/*!\n Copyright (c) 2015 Jed Watson.\n Based on code that is Copyright 2013-2015, Facebook, Inc.\n All rights reserved.\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar canUseDOM = !!(\n\t\ttypeof window !== 'undefined' &&\n\t\twindow.document &&\n\t\twindow.document.createElement\n\t);\n\n\tvar ExecutionEnvironment = {\n\n\t\tcanUseDOM: canUseDOM,\n\n\t\tcanUseWorkers: typeof Worker !== 'undefined',\n\n\t\tcanUseEventListeners:\n\t\t\tcanUseDOM && !!(window.addEventListener || window.attachEvent),\n\n\t\tcanUseViewport: canUseDOM && !!window.screen\n\n\t};\n\n\tif (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\tdefine(function () {\n\t\t\treturn ExecutionEnvironment;\n\t\t});\n\t} else if (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = ExecutionEnvironment;\n\t} else {\n\t\twindow.ExecutionEnvironment = ExecutionEnvironment;\n\t}\n\n}());\n","'use strict'\n\nvar isObject = function isObject(val) {\n return val !== null && !Array.isArray(val) && typeof val === 'object'\n}\n\nvar codes = {\n // ----------------------------------------\n // By Code\n // ----------------------------------------\n 3: 'Cancel',\n 6: 'Help',\n 8: 'Backspace',\n 9: 'Tab',\n 12: 'Clear',\n 13: 'Enter',\n 16: 'Shift',\n 17: 'Control',\n 18: 'Alt',\n 19: 'Pause',\n 20: 'CapsLock',\n 27: 'Escape',\n 28: 'Convert',\n 29: 'NonConvert',\n 30: 'Accept',\n 31: 'ModeChange',\n 32: ' ',\n 33: 'PageUp',\n 34: 'PageDown',\n 35: 'End',\n 36: 'Home',\n 37: 'ArrowLeft',\n 38: 'ArrowUp',\n 39: 'ArrowRight',\n 40: 'ArrowDown',\n 41: 'Select',\n 42: 'Print',\n 43: 'Execute',\n 44: 'PrintScreen',\n 45: 'Insert',\n 46: 'Delete',\n 48: ['0', ')'],\n 49: ['1', '!'],\n 50: ['2', '@'],\n 51: ['3', '#'],\n 52: ['4', '$'],\n 53: ['5', '%'],\n 54: ['6', '^'],\n 55: ['7', '&'],\n 56: ['8', '*'],\n 57: ['9', '('],\n 91: 'OS',\n 93: 'ContextMenu',\n 144: 'NumLock',\n 145: 'ScrollLock',\n 181: 'VolumeMute',\n 182: 'VolumeDown',\n 183: 'VolumeUp',\n 186: [';', ':'],\n 187: ['=', '+'],\n 188: [',', '<'],\n 189: ['-', '_'],\n 190: ['.', '>'],\n 191: ['/', '?'],\n 192: ['`', '~'],\n 219: ['[', '{'],\n 220: ['\\\\', '|'],\n 221: [']', '}'],\n 222: [\"'\", '\"'],\n 224: 'Meta',\n 225: 'AltGraph',\n 246: 'Attn',\n 247: 'CrSel',\n 248: 'ExSel',\n 249: 'EraseEof',\n 250: 'Play',\n 251: 'ZoomOut',\n}\n\n// Function Keys (F1-24)\nfor (var i = 0; i < 24; i += 1) {\n codes[112 + i] = 'F' + (i + 1)\n}\n\n// Alphabet (a-Z)\nfor (var j = 0; j < 26; j += 1) {\n var n = j + 65\n codes[n] = [String.fromCharCode(n + 32), String.fromCharCode(n)]\n}\n\nvar keyboardKey = {\n codes: codes,\n\n /**\n * Get the `keyCode` or `which` value from a keyboard event or `key` name.\n * @param {string|object} eventOrKey A keyboard event-like object or `key` name.\n * @param {string} [eventOrKey.key] If object, it must have one of these keys.\n * @param {number} [eventOrKey.keyCode] If object, it must have one of these keys.\n * @param {number} [eventOrKey.which] If object, it must have one of these keys.\n * @returns {number|undefined}\n */\n getCode: function getCode(eventOrKey) {\n if (isObject(eventOrKey)) {\n return eventOrKey.keyCode || eventOrKey.which || this[eventOrKey.key]\n }\n return this[eventOrKey]\n },\n\n /**\n * Get the key name from a keyboard event, `keyCode`, or `which` value.\n * @param {number|object} eventOrCode A keyboard event-like object or key code.\n * @param {string} [eventOrCode.key] If object with a `key` name, it will be returned.\n * @param {number} [eventOrCode.keyCode] If object, it must have one of these keys.\n * @param {number} [eventOrCode.which] If object, it must have one of these keys.\n * @param {boolean} [eventOrCode.shiftKey] If object, it must have one of these keys.\n * @returns {string|undefined}\n */\n getKey: function getKey(eventOrCode) {\n var isEvent = isObject(eventOrCode)\n\n // handle events with a `key` already defined\n if (isEvent && eventOrCode.key) {\n return eventOrCode.key\n }\n\n var name = codes[isEvent ? eventOrCode.keyCode || eventOrCode.which : eventOrCode]\n\n if (Array.isArray(name)) {\n if (isEvent) {\n name = name[eventOrCode.shiftKey ? 1 : 0]\n } else {\n name = name[0]\n }\n }\n\n return name\n },\n\n // ----------------------------------------\n // By Name\n // ----------------------------------------\n // declare these manually for static analysis\n Cancel: 3,\n Help: 6,\n Backspace: 8,\n Tab: 9,\n Clear: 12,\n Enter: 13,\n Shift: 16,\n Control: 17,\n Alt: 18,\n Pause: 19,\n CapsLock: 20,\n Escape: 27,\n Convert: 28,\n NonConvert: 29,\n Accept: 30,\n ModeChange: 31,\n ' ': 32,\n PageUp: 33,\n PageDown: 34,\n End: 35,\n Home: 36,\n ArrowLeft: 37,\n ArrowUp: 38,\n ArrowRight: 39,\n ArrowDown: 40,\n Select: 41,\n Print: 42,\n Execute: 43,\n PrintScreen: 44,\n Insert: 45,\n Delete: 46,\n 0: 48,\n ')': 48,\n 1: 49,\n '!': 49,\n 2: 50,\n '@': 50,\n 3: 51,\n '#': 51,\n 4: 52,\n $: 52,\n 5: 53,\n '%': 53,\n 6: 54,\n '^': 54,\n 7: 55,\n '&': 55,\n 8: 56,\n '*': 56,\n 9: 57,\n '(': 57,\n a: 65,\n A: 65,\n b: 66,\n B: 66,\n c: 67,\n C: 67,\n d: 68,\n D: 68,\n e: 69,\n E: 69,\n f: 70,\n F: 70,\n g: 71,\n G: 71,\n h: 72,\n H: 72,\n i: 73,\n I: 73,\n j: 74,\n J: 74,\n k: 75,\n K: 75,\n l: 76,\n L: 76,\n m: 77,\n M: 77,\n n: 78,\n N: 78,\n o: 79,\n O: 79,\n p: 80,\n P: 80,\n q: 81,\n Q: 81,\n r: 82,\n R: 82,\n s: 83,\n S: 83,\n t: 84,\n T: 84,\n u: 85,\n U: 85,\n v: 86,\n V: 86,\n w: 87,\n W: 87,\n x: 88,\n X: 88,\n y: 89,\n Y: 89,\n z: 90,\n Z: 90,\n OS: 91,\n ContextMenu: 93,\n F1: 112,\n F2: 113,\n F3: 114,\n F4: 115,\n F5: 116,\n F6: 117,\n F7: 118,\n F8: 119,\n F9: 120,\n F10: 121,\n F11: 122,\n F12: 123,\n F13: 124,\n F14: 125,\n F15: 126,\n F16: 127,\n F17: 128,\n F18: 129,\n F19: 130,\n F20: 131,\n F21: 132,\n F22: 133,\n F23: 134,\n F24: 135,\n NumLock: 144,\n ScrollLock: 145,\n VolumeMute: 181,\n VolumeDown: 182,\n VolumeUp: 183,\n ';': 186,\n ':': 186,\n '=': 187,\n '+': 187,\n ',': 188,\n '<': 188,\n '-': 189,\n _: 189,\n '.': 190,\n '>': 190,\n '/': 191,\n '?': 191,\n '`': 192,\n '~': 192,\n '[': 219,\n '{': 219,\n '\\\\': 220,\n '|': 220,\n ']': 221,\n '}': 221,\n \"'\": 222,\n '\"': 222,\n Meta: 224,\n AltGraph: 225,\n Attn: 246,\n CrSel: 247,\n ExSel: 248,\n EraseEof: 249,\n Play: 250,\n ZoomOut: 251,\n}\n\n// ----------------------------------------\n// By Alias\n// ----------------------------------------\n// provide dot-notation accessible keys for all key names\nkeyboardKey.Spacebar = keyboardKey[' ']\nkeyboardKey.Digit0 = keyboardKey['0']\nkeyboardKey.Digit1 = keyboardKey['1']\nkeyboardKey.Digit2 = keyboardKey['2']\nkeyboardKey.Digit3 = keyboardKey['3']\nkeyboardKey.Digit4 = keyboardKey['4']\nkeyboardKey.Digit5 = keyboardKey['5']\nkeyboardKey.Digit6 = keyboardKey['6']\nkeyboardKey.Digit7 = keyboardKey['7']\nkeyboardKey.Digit8 = keyboardKey['8']\nkeyboardKey.Digit9 = keyboardKey['9']\nkeyboardKey.Tilde = keyboardKey['~']\nkeyboardKey.GraveAccent = keyboardKey['`']\nkeyboardKey.ExclamationPoint = keyboardKey['!']\nkeyboardKey.AtSign = keyboardKey['@']\nkeyboardKey.PoundSign = keyboardKey['#']\nkeyboardKey.PercentSign = keyboardKey['%']\nkeyboardKey.Caret = keyboardKey['^']\nkeyboardKey.Ampersand = keyboardKey['&']\nkeyboardKey.PlusSign = keyboardKey['+']\nkeyboardKey.MinusSign = keyboardKey['-']\nkeyboardKey.EqualsSign = keyboardKey['=']\nkeyboardKey.DivisionSign = keyboardKey['/']\nkeyboardKey.MultiplicationSign = keyboardKey['*']\nkeyboardKey.Comma = keyboardKey[',']\nkeyboardKey.Decimal = keyboardKey['.']\nkeyboardKey.Colon = keyboardKey[':']\nkeyboardKey.Semicolon = keyboardKey[';']\nkeyboardKey.Pipe = keyboardKey['|']\nkeyboardKey.BackSlash = keyboardKey['\\\\']\nkeyboardKey.QuestionMark = keyboardKey['?']\nkeyboardKey.SingleQuote = keyboardKey[\"'\"]\nkeyboardKey.DoubleQuote = keyboardKey['\"']\nkeyboardKey.LeftCurlyBrace = keyboardKey['{']\nkeyboardKey.RightCurlyBrace = keyboardKey['}']\nkeyboardKey.LeftParenthesis = keyboardKey['(']\nkeyboardKey.RightParenthesis = keyboardKey[')']\nkeyboardKey.LeftAngleBracket = keyboardKey['<']\nkeyboardKey.RightAngleBracket = keyboardKey['>']\nkeyboardKey.LeftSquareBracket = keyboardKey['[']\nkeyboardKey.RightSquareBracket = keyboardKey[']']\n\nmodule.exports = keyboardKey\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n","var baseProperty = require('./_baseProperty');\n\n/**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nvar asciiSize = baseProperty('length');\n\nmodule.exports = asciiSize;\n","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\nmodule.exports = asciiToArray;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignMergeValue;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var copyObject = require('./_copyObject'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignValue = require('./_assignValue'),\n baseAssign = require('./_baseAssign'),\n baseAssignIn = require('./_baseAssignIn'),\n cloneBuffer = require('./_cloneBuffer'),\n copyArray = require('./_copyArray'),\n copySymbols = require('./_copySymbols'),\n copySymbolsIn = require('./_copySymbolsIn'),\n getAllKeys = require('./_getAllKeys'),\n getAllKeysIn = require('./_getAllKeysIn'),\n getTag = require('./_getTag'),\n initCloneArray = require('./_initCloneArray'),\n initCloneByTag = require('./_initCloneByTag'),\n initCloneObject = require('./_initCloneObject'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isMap = require('./isMap'),\n isObject = require('./isObject'),\n isSet = require('./isSet'),\n keys = require('./keys'),\n keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nmodule.exports = baseClone;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nmodule.exports = baseCreate;\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n arrayMap = require('./_arrayMap'),\n baseUnary = require('./_baseUnary'),\n cacheHas = require('./_cacheHas');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseDifference;\n","var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","var isSymbol = require('./isSymbol');\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseExtremum;\n","var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n}\n\nmodule.exports = baseFilter;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseFindIndex;\n","var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\nfunction baseGt(value, other) {\n return value > other;\n}\n\nmodule.exports = baseGt;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nmodule.exports = baseHas;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIsNaN = require('./_baseIsNaN'),\n strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","/**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseIndexOfWith;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar dateTag = '[object Date]';\n\n/**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\nfunction baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n}\n\nmodule.exports = baseIsDate;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar regexpTag = '[object RegExp]';\n\n/**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\nfunction baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n}\n\nmodule.exports = baseIsRegExp;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n","var baseEach = require('./_baseEach'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nmodule.exports = baseMap;\n","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n","var Stack = require('./_Stack'),\n assignMergeValue = require('./_assignMergeValue'),\n baseFor = require('./_baseFor'),\n baseMergeDeep = require('./_baseMergeDeep'),\n isObject = require('./isObject'),\n keysIn = require('./keysIn'),\n safeGet = require('./_safeGet');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nmodule.exports = baseMerge;\n","var assignMergeValue = require('./_assignMergeValue'),\n cloneBuffer = require('./_cloneBuffer'),\n cloneTypedArray = require('./_cloneTypedArray'),\n copyArray = require('./_copyArray'),\n initCloneObject = require('./_initCloneObject'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLikeObject = require('./isArrayLikeObject'),\n isBuffer = require('./isBuffer'),\n isFunction = require('./isFunction'),\n isObject = require('./isObject'),\n isPlainObject = require('./isPlainObject'),\n isTypedArray = require('./isTypedArray'),\n safeGet = require('./_safeGet'),\n toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n","var basePickBy = require('./_basePickBy'),\n hasIn = require('./hasIn');\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n}\n\nmodule.exports = basePick;\n","var baseGet = require('./_baseGet'),\n baseSet = require('./_baseSet'),\n castPath = require('./_castPath');\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nmodule.exports = basePickBy;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n","var arrayMap = require('./_arrayMap'),\n baseIndexOf = require('./_baseIndexOf'),\n baseIndexOfWith = require('./_baseIndexOfWith'),\n baseUnary = require('./_baseUnary'),\n copyArray = require('./_copyArray');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\nfunction basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n}\n\nmodule.exports = basePullAll;\n","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nmodule.exports = baseSlice;\n","var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n}\n\nmodule.exports = baseSome;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n cacheHas = require('./_cacheHas'),\n createSet = require('./_createSet'),\n setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseUniq;\n","var castPath = require('./_castPath'),\n last = require('./last'),\n parent = require('./_parent'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n}\n\nmodule.exports = baseUnset;\n","var arrayMap = require('./_arrayMap');\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\nmodule.exports = baseValues;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var baseSlice = require('./_baseSlice');\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nmodule.exports = castSlice;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n","var copyObject = require('./_copyObject'),\n getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var copyObject = require('./_copyObject'),\n getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","var baseIteratee = require('./_baseIteratee'),\n isArrayLike = require('./isArrayLike'),\n keys = require('./keys');\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n}\n\nmodule.exports = createFind;\n","var Set = require('./_Set'),\n noop = require('./noop'),\n setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nmodule.exports = createSet;\n","var isPlainObject = require('./isPlainObject');\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n}\n\nmodule.exports = customOmitClone;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n","var flatten = require('./flatten'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nmodule.exports = hasUnicode;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nmodule.exports = initCloneArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nmodule.exports = initCloneByTag;\n","var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n","var Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n","var baseGet = require('./_baseGet'),\n baseSlice = require('./_baseSlice');\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nmodule.exports = parent;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nmodule.exports = safeGet;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = strictIndexOf;\n","var asciiSize = require('./_asciiSize'),\n hasUnicode = require('./_hasUnicode'),\n unicodeSize = require('./_unicodeSize');\n\n/**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\nfunction stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n}\n\nmodule.exports = stringSize;\n","var asciiToArray = require('./_asciiToArray'),\n hasUnicode = require('./_hasUnicode'),\n unicodeToArray = require('./_unicodeToArray');\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\nmodule.exports = stringToArray;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nfunction unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n}\n\nmodule.exports = unicodeSize;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n\nmodule.exports = unicodeToArray;\n","var assignValue = require('./_assignValue'),\n copyObject = require('./_copyObject'),\n createAssigner = require('./_createAssigner'),\n isArrayLike = require('./isArrayLike'),\n isPrototype = require('./_isPrototype'),\n keys = require('./keys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\nvar assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n});\n\nmodule.exports = assign;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = clone;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\nfunction cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n}\n\nmodule.exports = cloneDeepWith;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","var baseDifference = require('./_baseDifference'),\n baseFlatten = require('./_baseFlatten'),\n baseRest = require('./_baseRest'),\n isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\nvar difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n});\n\nmodule.exports = difference;\n","module.exports = require('./forEach');\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var arrayFilter = require('./_arrayFilter'),\n baseFilter = require('./_baseFilter'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\nfunction filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = filter;\n","var createFind = require('./_createFind'),\n findIndex = require('./findIndex');\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nmodule.exports = find;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIteratee = require('./_baseIteratee'),\n toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nmodule.exports = findIndex;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIteratee = require('./_baseIteratee'),\n toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\nfunction findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index, true);\n}\n\nmodule.exports = findLastIndex;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","var baseFlatten = require('./_baseFlatten');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\nfunction flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n}\n\nmodule.exports = flattenDeep;\n","var arrayEach = require('./_arrayEach'),\n baseEach = require('./_baseEach'),\n castFunction = require('./_castFunction'),\n isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nmodule.exports = forEach;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","var baseHas = require('./_baseHas'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nmodule.exports = has;\n","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","var baseIndexOf = require('./_baseIndexOf'),\n isArrayLike = require('./isArrayLike'),\n isString = require('./isString'),\n toInteger = require('./toInteger'),\n values = require('./values');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\nfunction includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n}\n\nmodule.exports = includes;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var isArrayLike = require('./isArrayLike'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]';\n\n/**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\nfunction isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n}\n\nmodule.exports = isBoolean;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseIsDate = require('./_baseIsDate'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsDate = nodeUtil && nodeUtil.isDate;\n\n/**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\nvar isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\nmodule.exports = isDate;\n","var baseKeys = require('./_baseKeys'),\n getTag = require('./_getTag'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLike = require('./isArrayLike'),\n isBuffer = require('./isBuffer'),\n isPrototype = require('./_isPrototype'),\n isTypedArray = require('./isTypedArray');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = isEmpty;\n","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\nfunction isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n}\n\nmodule.exports = isEqualWith;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var isNumber = require('./isNumber');\n\n/**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\nfunction isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n}\n\nmodule.exports = isNaN;\n","/**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\nfunction isNull(value) {\n return value === null;\n}\n\nmodule.exports = isNull;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","var baseIsRegExp = require('./_baseIsRegExp'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsRegExp = nodeUtil && nodeUtil.isRegExp;\n\n/**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\nvar isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\nmodule.exports = isRegExp;\n","var baseIsSet = require('./_baseIsSet'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nmodule.exports = isUndefined;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n","var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n baseMap = require('./_baseMap'),\n isArray = require('./isArray');\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nmodule.exports = map;\n","var baseExtremum = require('./_baseExtremum'),\n baseGt = require('./_baseGt'),\n identity = require('./identity');\n\n/**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\nfunction max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n}\n\nmodule.exports = max;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var baseMerge = require('./_baseMerge'),\n createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nmodule.exports = merge;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = noop;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","var arrayMap = require('./_arrayMap'),\n baseClone = require('./_baseClone'),\n baseUnset = require('./_baseUnset'),\n castPath = require('./_castPath'),\n copyObject = require('./_copyObject'),\n customOmitClone = require('./_customOmitClone'),\n flatRest = require('./_flatRest'),\n getAllKeysIn = require('./_getAllKeysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n});\n\nmodule.exports = omit;\n","var basePick = require('./_basePick'),\n flatRest = require('./_flatRest');\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n});\n\nmodule.exports = pick;\n","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","var baseRest = require('./_baseRest'),\n pullAll = require('./pullAll');\n\n/**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\nvar pull = baseRest(pullAll);\n\nmodule.exports = pull;\n","var basePullAll = require('./_basePullAll');\n\n/**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\nfunction pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n}\n\nmodule.exports = pullAll;\n","var baseSet = require('./_baseSet');\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n","var baseKeys = require('./_baseKeys'),\n getTag = require('./_getTag'),\n isArrayLike = require('./isArrayLike'),\n isString = require('./isString'),\n stringSize = require('./_stringSize');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\nfunction size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n}\n\nmodule.exports = size;\n","var baseSlice = require('./_baseSlice'),\n isIterateeCall = require('./_isIterateeCall'),\n toInteger = require('./toInteger');\n\n/**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n}\n\nmodule.exports = slice;\n","var arraySome = require('./_arraySome'),\n baseIteratee = require('./_baseIteratee'),\n baseSome = require('./_baseSome'),\n isArray = require('./isArray'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\nfunction some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = some;\n","var baseToString = require('./_baseToString'),\n castSlice = require('./_castSlice'),\n hasUnicode = require('./_hasUnicode'),\n isIterateeCall = require('./_isIterateeCall'),\n isRegExp = require('./isRegExp'),\n stringToArray = require('./_stringToArray'),\n toString = require('./toString');\n\n/** Used as references for the maximum length and index of an array. */\nvar MAX_ARRAY_LENGTH = 4294967295;\n\n/**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\nfunction split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n}\n\nmodule.exports = split;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","/**\n * This method returns `true`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `true`.\n * @example\n *\n * _.times(2, _.stubTrue);\n * // => [true, true]\n */\nfunction stubTrue() {\n return true;\n}\n\nmodule.exports = stubTrue;\n","var debounce = require('./debounce'),\n isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n","var baseTimes = require('./_baseTimes'),\n castFunction = require('./_castFunction'),\n toInteger = require('./toInteger');\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used as references for the maximum length and index of an array. */\nvar MAX_ARRAY_LENGTH = 4294967295;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/**\n * Invokes the iteratee `n` times, returning an array of the results of\n * each invocation. The iteratee is invoked with one argument; (index).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.times(3, String);\n * // => ['0', '1', '2']\n *\n * _.times(4, _.constant(0));\n * // => [0, 0, 0, 0]\n */\nfunction times(n, iteratee) {\n n = toInteger(n);\n if (n < 1 || n > MAX_SAFE_INTEGER) {\n return [];\n }\n var index = MAX_ARRAY_LENGTH,\n length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n iteratee = castFunction(iteratee);\n n -= MAX_ARRAY_LENGTH;\n\n var result = baseTimes(length, iteratee);\n while (++index < n) {\n iteratee(index);\n }\n return result;\n}\n\nmodule.exports = times;\n","var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n","var toFinite = require('./toFinite');\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var arrayMap = require('./_arrayMap'),\n copyArray = require('./_copyArray'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol'),\n stringToPath = require('./_stringToPath'),\n toKey = require('./_toKey'),\n toString = require('./toString');\n\n/**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\nfunction toPath(value) {\n if (isArray(value)) {\n return arrayMap(value, toKey);\n }\n return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n}\n\nmodule.exports = toPath;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var baseUniq = require('./_baseUniq');\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n}\n\nmodule.exports = uniq;\n","var baseUnset = require('./_baseUnset');\n\n/**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\nfunction unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n}\n\nmodule.exports = unset;\n","var baseValues = require('./_baseValues'),\n keys = require('./keys');\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n}\n\nmodule.exports = values;\n","var baseDifference = require('./_baseDifference'),\n baseRest = require('./_baseRest'),\n isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\nvar without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n});\n\nmodule.exports = without;\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a>=g;e-=g;rg=1<<32-oc(b)+e|c<w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;ww?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&Ng(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=Lg(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Tg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Rg(f.type,f.key,f.props,null,a.mode,h),h.ref=Lg(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=Sg(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);Mg(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=Qg(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Ug=Og(!0),Vg=Og(!1),Wg=Uf(null),Xg=null,Yg=null,Zg=null;function $g(){Zg=Yg=Xg=null}function ah(a){var b=Wg.current;E(Wg);a._currentValue=b}function bh(a,b,c){for(;null!==a;){var d=a.alternate;(a.childLanes&b)!==b?(a.childLanes|=b,null!==d&&(d.childLanes|=b)):null!==d&&(d.childLanes&b)!==b&&(d.childLanes|=b);if(a===c)break;a=a.return}}\nfunction ch(a,b){Xg=a;Zg=Yg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(dh=!0),a.firstContext=null)}function eh(a){var b=a._currentValue;if(Zg!==a)if(a={context:a,memoizedValue:b,next:null},null===Yg){if(null===Xg)throw Error(p(308));Yg=a;Xg.dependencies={lanes:0,firstContext:a}}else Yg=Yg.next=a;return b}var fh=null;function gh(a){null===fh?fh=[a]:fh.push(a)}\nfunction hh(a,b,c,d){var e=b.interleaved;null===e?(c.next=c,gh(b)):(c.next=e.next,e.next=c);b.interleaved=c;return ih(a,d)}function ih(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}var jh=!1;function kh(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}\nfunction lh(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function mh(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}\nfunction nh(a,b,c){var d=a.updateQueue;if(null===d)return null;d=d.shared;if(0!==(K&2)){var e=d.pending;null===e?b.next=b:(b.next=e.next,e.next=b);d.pending=b;return ih(a,c)}e=d.interleaved;null===e?(b.next=b,gh(d)):(b.next=e.next,e.next=b);d.interleaved=b;return ih(a,c)}function oh(a,b,c){b=b.updateQueue;if(null!==b&&(b=b.shared,0!==(c&4194240))){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nfunction ph(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=\nb;c.lastBaseUpdate=b}\nfunction qh(a,b,c,d){var e=a.updateQueue;jh=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var m=a.alternate;null!==m&&(m=m.updateQueue,h=m.lastBaseUpdate,h!==g&&(null===h?m.firstBaseUpdate=l:h.next=l,m.lastBaseUpdate=k))}if(null!==f){var q=e.baseState;g=0;m=l=k=null;h=f;do{var r=h.lane,y=h.eventTime;if((d&r)===r){null!==m&&(m=m.next={eventTime:y,lane:0,tag:h.tag,payload:h.payload,callback:h.callback,\nnext:null});a:{var n=a,t=h;r=b;y=c;switch(t.tag){case 1:n=t.payload;if(\"function\"===typeof n){q=n.call(y,q,r);break a}q=n;break a;case 3:n.flags=n.flags&-65537|128;case 0:n=t.payload;r=\"function\"===typeof n?n.call(y,q,r):n;if(null===r||void 0===r)break a;q=A({},q,r);break a;case 2:jh=!0}}null!==h.callback&&0!==h.lane&&(a.flags|=64,r=e.effects,null===r?e.effects=[h]:r.push(h))}else y={eventTime:y,lane:r,tag:h.tag,payload:h.payload,callback:h.callback,next:null},null===m?(l=m=y,k=q):m=m.next=y,g|=r;\nh=h.next;if(null===h)if(h=e.shared.pending,null===h)break;else r=h,h=r.next,r.next=null,e.lastBaseUpdate=r,e.shared.pending=null}while(1);null===m&&(k=q);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=m;b=e.shared.interleaved;if(null!==b){e=b;do g|=e.lane,e=e.next;while(e!==b)}else null===f&&(e.shared.lanes=0);rh|=g;a.lanes=g;a.memoizedState=q}}\nfunction sh(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;bc?c:4;a(!0);var d=Gh.transition;Gh.transition={};try{a(!1),b()}finally{C=c,Gh.transition=d}}function wi(){return Uh().memoizedState}\nfunction xi(a,b,c){var d=yi(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,c);else if(c=hh(a,b,c,d),null!==c){var e=R();gi(c,a,d,e);Bi(c,b,d)}}\nfunction ii(a,b,c){var d=yi(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,gh(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=hh(a,b,e,d);null!==c&&(e=R(),gi(c,a,d,e),Bi(c,b,d))}}\nfunction zi(a){var b=a.alternate;return a===M||null!==b&&b===M}function Ai(a,b){Jh=Ih=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Bi(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar Rh={readContext:eh,useCallback:P,useContext:P,useEffect:P,useImperativeHandle:P,useInsertionEffect:P,useLayoutEffect:P,useMemo:P,useReducer:P,useRef:P,useState:P,useDebugValue:P,useDeferredValue:P,useTransition:P,useMutableSource:P,useSyncExternalStore:P,useId:P,unstable_isNewReconciler:!1},Oh={readContext:eh,useCallback:function(a,b){Th().memoizedState=[a,void 0===b?null:b];return a},useContext:eh,useEffect:mi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ki(4194308,\n4,pi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ki(4194308,4,a,b)},useInsertionEffect:function(a,b){return ki(4,2,a,b)},useMemo:function(a,b){var c=Th();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=xi.bind(null,M,a);return[d.memoizedState,a]},useRef:function(a){var b=\nTh();a={current:a};return b.memoizedState=a},useState:hi,useDebugValue:ri,useDeferredValue:function(a){return Th().memoizedState=a},useTransition:function(){var a=hi(!1),b=a[0];a=vi.bind(null,a[1]);Th().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=M,e=Th();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===Q)throw Error(p(349));0!==(Hh&30)||di(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;mi(ai.bind(null,d,\nf,a),[a]);d.flags|=2048;bi(9,ci.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=Th(),b=Q.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Kh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;zj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eGj&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304)}else{if(!d)if(a=Ch(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Dj(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Gj&&1073741824!==c&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=L.current,G(L,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Hj(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(fj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Ij(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return zh(),E(Wf),E(H),Eh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Bh(b),null;case 13:E(L);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(L),null;case 4:return zh(),null;case 10:return ah(b.type._context),null;case 22:case 23:return Hj(),\nnull;case 24:return null;default:return null}}var Jj=!1,U=!1,Kj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Lj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Mj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Nj=!1;\nfunction Oj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Ci(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Nj;Nj=!1;return n}\nfunction Pj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Mj(b,c,f)}e=e.next}while(e!==d)}}function Qj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Rj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Sj(a){var b=a.alternate;null!==b&&(a.alternate=null,Sj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Tj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Uj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Tj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Vj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Vj(a,b,c),a=a.sibling;null!==a;)Vj(a,b,c),a=a.sibling}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}var X=null,Xj=!1;function Yj(a,b,c){for(c=c.child;null!==c;)Zj(a,b,c),c=c.sibling}\nfunction Zj(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Lj(c,b);case 6:var d=X,e=Xj;X=null;Yj(a,b,c);X=d;Xj=e;null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Xj;X=c.stateNode.containerInfo;Xj=!0;\nYj(a,b,c);X=d;Xj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Mj(c,b,g):0!==(f&4)&&Mj(c,b,g));e=e.next}while(e!==d)}Yj(a,b,c);break;case 1:if(!U&&(Lj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Yj(a,b,c);break;case 21:Yj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Yj(a,b,c),U=d):Yj(a,b,c);break;default:Yj(a,b,c)}}function ak(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Kj);b.forEach(function(b){var d=bk.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction ck(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*lk(d/1960))-d;if(10a?16:a;if(null===wk)var d=!1;else{a=wk;wk=null;xk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-fk?Kk(a,0):rk|=c);Dk(a,b)}function Yk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=R();a=ih(a,b);null!==a&&(Ac(a,b,c),Dk(a,c))}function uj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Yk(a,c)}\nfunction bk(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Yk(a,c)}var Vk;\nVk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)dh=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return dh=!1,yj(a,b,c);dh=0!==(a.flags&131072)?!0:!1}else dh=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;ij(a,b);a=b.pendingProps;var e=Yf(b,H.current);ch(b,c);e=Nh(null,b,d,a,e,c);var f=Sh();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,kh(b),e.updater=Ei,b.stateNode=e,e._reactInternals=b,Ii(b,d,a,c),b=jj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Xi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{ij(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=Zk(d);a=Ci(d,a);switch(e){case 0:b=cj(null,b,d,a,c);break a;case 1:b=hj(null,b,d,a,c);break a;case 11:b=Yi(null,b,d,a,c);break a;case 14:b=$i(null,b,d,Ci(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),cj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),hj(a,b,d,e,c);case 3:a:{kj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;lh(a,b);qh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ji(Error(p(423)),b);b=lj(a,b,d,c,e);break a}else if(d!==e){e=Ji(Error(p(424)),b);b=lj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Vg(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=Zi(a,b,c);break a}Xi(a,b,d,c)}b=b.child}return b;case 5:return Ah(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\ngj(a,b),Xi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return oj(a,b,c);case 4:return yh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Ug(b,null,d,c):Xi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),Yi(a,b,d,e,c);case 7:return Xi(a,b,b.pendingProps,c),b.child;case 8:return Xi(a,b,b.pendingProps.children,c),b.child;case 12:return Xi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Wg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=Zi(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=mh(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);bh(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);bh(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Xi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,ch(b,c),e=eh(e),d=d(e),b.flags|=1,Xi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Ci(d,b.pendingProps),e=Ci(d.type,e),$i(a,b,d,e,c);case 15:return bj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),ij(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,ch(b,c),Gi(b,d,e),Ii(b,d,e,c),jj(null,b,d,!0,a,c);case 19:return xj(a,b,c);case 22:return dj(a,b,c)}throw Error(p(156,b.tag));};function Fk(a,b){return ac(a,b)}\nfunction $k(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new $k(a,b,c,d)}function aj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction Zk(a){if(\"function\"===typeof a)return aj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction Pg(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Rg(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)aj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Tg(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return pj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Tg(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function pj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function Qg(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction Sg(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction al(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function bl(a,b,c,d,e,f,g,h,k){a=new al(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};kh(f);return a}function cl(a,b,c){var d=3= 0) continue; target[key] = source[key]; } return target; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n// The base component.\n// This component does not have state and relies on the parent to set its props based on callback data.\nvar Resizable = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(Resizable, _React$Component);\n function Resizable() {\n var _this;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.handleRefs = {};\n _this.lastHandleRect = null;\n _this.slack = null;\n return _this;\n }\n var _proto = Resizable.prototype;\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.resetData();\n };\n _proto.resetData = function resetData() {\n this.lastHandleRect = this.slack = null;\n }\n\n // Clamp width and height within provided constraints\n ;\n _proto.runConstraints = function runConstraints(width, height) {\n var _this$props = this.props,\n minConstraints = _this$props.minConstraints,\n maxConstraints = _this$props.maxConstraints,\n lockAspectRatio = _this$props.lockAspectRatio;\n // short circuit\n if (!minConstraints && !maxConstraints && !lockAspectRatio) return [width, height];\n\n // If constraining to min and max, we need to also fit width and height to aspect ratio.\n if (lockAspectRatio) {\n var ratio = this.props.width / this.props.height;\n var deltaW = width - this.props.width;\n var deltaH = height - this.props.height;\n\n // Find which coordinate was greater and should push the other toward it.\n // E.g.:\n // ratio = 1, deltaW = 10, deltaH = 5, deltaH should become 10.\n // ratio = 2, deltaW = 10, deltaH = 6, deltaW should become 12.\n if (Math.abs(deltaW) > Math.abs(deltaH * ratio)) {\n height = width / ratio;\n } else {\n width = height * ratio;\n }\n }\n var oldW = width,\n oldH = height;\n\n // Add slack to the values used to calculate bound position. This will ensure that if\n // we start removing slack, the element won't react to it right away until it's been\n // completely removed.\n var _ref = this.slack || [0, 0],\n slackW = _ref[0],\n slackH = _ref[1];\n width += slackW;\n height += slackH;\n if (minConstraints) {\n width = Math.max(minConstraints[0], width);\n height = Math.max(minConstraints[1], height);\n }\n if (maxConstraints) {\n width = Math.min(maxConstraints[0], width);\n height = Math.min(maxConstraints[1], height);\n }\n\n // If the width or height changed, we must have introduced some slack. Record it for the next iteration.\n this.slack = [slackW + (oldW - width), slackH + (oldH - height)];\n return [width, height];\n }\n\n /**\n * Wrapper around drag events to provide more useful data.\n *\n * @param {String} handlerName Handler name to wrap.\n * @return {Function} Handler function.\n */;\n _proto.resizeHandler = function resizeHandler(handlerName, axis) {\n var _this2 = this;\n return function (e, _ref2) {\n var node = _ref2.node,\n deltaX = _ref2.deltaX,\n deltaY = _ref2.deltaY;\n // Reset data in case it was left over somehow (should not be possible)\n if (handlerName === 'onResizeStart') _this2.resetData();\n\n // Axis restrictions\n var canDragX = (_this2.props.axis === 'both' || _this2.props.axis === 'x') && axis !== 'n' && axis !== 's';\n var canDragY = (_this2.props.axis === 'both' || _this2.props.axis === 'y') && axis !== 'e' && axis !== 'w';\n // No dragging possible.\n if (!canDragX && !canDragY) return;\n\n // Decompose axis for later use\n var axisV = axis[0];\n var axisH = axis[axis.length - 1]; // intentionally not axis[1], so that this catches axis === 'w' for example\n\n // Track the element being dragged to account for changes in position.\n // If a handle's position is changed between callbacks, we need to factor this in to the next callback.\n // Failure to do so will cause the element to \"skip\" when resized upwards or leftwards.\n var handleRect = node.getBoundingClientRect();\n if (_this2.lastHandleRect != null) {\n // If the handle has repositioned on either axis since last render,\n // we need to increase our callback values by this much.\n // Only checking 'n', 'w' since resizing by 's', 'w' won't affect the overall position on page,\n if (axisH === 'w') {\n var deltaLeftSinceLast = handleRect.left - _this2.lastHandleRect.left;\n deltaX += deltaLeftSinceLast;\n }\n if (axisV === 'n') {\n var deltaTopSinceLast = handleRect.top - _this2.lastHandleRect.top;\n deltaY += deltaTopSinceLast;\n }\n }\n // Storage of last rect so we know how much it has really moved.\n _this2.lastHandleRect = handleRect;\n\n // Reverse delta if using top or left drag handles.\n if (axisH === 'w') deltaX = -deltaX;\n if (axisV === 'n') deltaY = -deltaY;\n\n // Update w/h by the deltas. Also factor in transformScale.\n var width = _this2.props.width + (canDragX ? deltaX / _this2.props.transformScale : 0);\n var height = _this2.props.height + (canDragY ? deltaY / _this2.props.transformScale : 0);\n\n // Run user-provided constraints.\n var _this2$runConstraints = _this2.runConstraints(width, height);\n width = _this2$runConstraints[0];\n height = _this2$runConstraints[1];\n var dimensionsChanged = width !== _this2.props.width || height !== _this2.props.height;\n\n // Call user-supplied callback if present.\n var cb = typeof _this2.props[handlerName] === 'function' ? _this2.props[handlerName] : null;\n // Don't call 'onResize' if dimensions haven't changed.\n var shouldSkipCb = handlerName === 'onResize' && !dimensionsChanged;\n if (cb && !shouldSkipCb) {\n e.persist == null ? void 0 : e.persist();\n cb(e, {\n node: node,\n size: {\n width: width,\n height: height\n },\n handle: axis\n });\n }\n\n // Reset internal data\n if (handlerName === 'onResizeStop') _this2.resetData();\n };\n }\n\n // Render a resize handle given an axis & DOM ref. Ref *must* be attached for\n // the underlying draggable library to work properly.\n ;\n _proto.renderResizeHandle = function renderResizeHandle(handleAxis, ref) {\n var handle = this.props.handle;\n // No handle provided, make the default\n if (!handle) {\n return /*#__PURE__*/React.createElement(\"span\", {\n className: \"react-resizable-handle react-resizable-handle-\" + handleAxis,\n ref: ref\n });\n }\n // Handle is a function, such as:\n // `handle={(handleAxis) => }`\n if (typeof handle === 'function') {\n return handle(handleAxis, ref);\n }\n // Handle is a React component (composite or DOM).\n var isDOMElement = typeof handle.type === 'string';\n var props = _objectSpread({\n ref: ref\n }, isDOMElement ? {} : {\n handleAxis: handleAxis\n });\n return /*#__PURE__*/React.cloneElement(handle, props);\n };\n _proto.render = function render() {\n var _this3 = this;\n // Pass along only props not meant for the ``.`\n // eslint-disable-next-line no-unused-vars\n var _this$props2 = this.props,\n children = _this$props2.children,\n className = _this$props2.className,\n draggableOpts = _this$props2.draggableOpts,\n width = _this$props2.width,\n height = _this$props2.height,\n handle = _this$props2.handle,\n handleSize = _this$props2.handleSize,\n lockAspectRatio = _this$props2.lockAspectRatio,\n axis = _this$props2.axis,\n minConstraints = _this$props2.minConstraints,\n maxConstraints = _this$props2.maxConstraints,\n onResize = _this$props2.onResize,\n onResizeStop = _this$props2.onResizeStop,\n onResizeStart = _this$props2.onResizeStart,\n resizeHandles = _this$props2.resizeHandles,\n transformScale = _this$props2.transformScale,\n p = _objectWithoutPropertiesLoose(_this$props2, _excluded);\n\n // What we're doing here is getting the child of this element, and cloning it with this element's props.\n // We are then defining its children as:\n // 1. Its original children (resizable's child's children), and\n // 2. One or more draggable handles.\n return (0, _utils.cloneElement)(children, _objectSpread(_objectSpread({}, p), {}, {\n className: (className ? className + \" \" : '') + \"react-resizable\",\n children: [].concat(children.props.children, resizeHandles.map(function (handleAxis) {\n var _this3$handleRefs$han;\n // Create a ref to the handle so that `` doesn't have to use ReactDOM.findDOMNode().\n var ref = (_this3$handleRefs$han = _this3.handleRefs[handleAxis]) != null ? _this3$handleRefs$han : _this3.handleRefs[handleAxis] = /*#__PURE__*/React.createRef();\n return /*#__PURE__*/React.createElement(_reactDraggable.DraggableCore, _extends({}, draggableOpts, {\n nodeRef: ref,\n key: \"resizableHandle-\" + handleAxis,\n onStop: _this3.resizeHandler('onResizeStop', handleAxis),\n onStart: _this3.resizeHandler('onResizeStart', handleAxis),\n onDrag: _this3.resizeHandler('onResize', handleAxis)\n }), _this3.renderResizeHandle(handleAxis, ref));\n }))\n }));\n };\n return Resizable;\n}(React.Component);\nexports.default = Resizable;\nResizable.propTypes = _propTypes.resizableProps;\nResizable.defaultProps = {\n axis: 'both',\n handleSize: [20, 20],\n lockAspectRatio: false,\n minConstraints: [20, 20],\n maxConstraints: [Infinity, Infinity],\n resizeHandles: ['se'],\n transformScale: 1\n};","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\nvar React = _interopRequireWildcard(require(\"react\"));\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\nvar _Resizable = _interopRequireDefault(require(\"./Resizable\"));\nvar _propTypes2 = require(\"./propTypes\");\nvar _excluded = [\"handle\", \"handleSize\", \"onResize\", \"onResizeStart\", \"onResizeStop\", \"draggableOpts\", \"minConstraints\", \"maxConstraints\", \"lockAspectRatio\", \"axis\", \"width\", \"height\", \"resizeHandles\", \"style\", \"transformScale\"];\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nvar ResizableBox = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(ResizableBox, _React$Component);\n function ResizableBox() {\n var _this;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.state = {\n width: _this.props.width,\n height: _this.props.height,\n propsWidth: _this.props.width,\n propsHeight: _this.props.height\n };\n _this.onResize = function (e, data) {\n var size = data.size;\n if (_this.props.onResize) {\n e.persist == null ? void 0 : e.persist();\n _this.setState(size, function () {\n return _this.props.onResize && _this.props.onResize(e, data);\n });\n } else {\n _this.setState(size);\n }\n };\n return _this;\n }\n ResizableBox.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) {\n // If parent changes height/width, set that in our state.\n if (state.propsWidth !== props.width || state.propsHeight !== props.height) {\n return {\n width: props.width,\n height: props.height,\n propsWidth: props.width,\n propsHeight: props.height\n };\n }\n return null;\n };\n var _proto = ResizableBox.prototype;\n _proto.render = function render() {\n // Basic wrapper around a Resizable instance.\n // If you use Resizable directly, you are responsible for updating the child component\n // with a new width and height.\n var _this$props = this.props,\n handle = _this$props.handle,\n handleSize = _this$props.handleSize,\n onResize = _this$props.onResize,\n onResizeStart = _this$props.onResizeStart,\n onResizeStop = _this$props.onResizeStop,\n draggableOpts = _this$props.draggableOpts,\n minConstraints = _this$props.minConstraints,\n maxConstraints = _this$props.maxConstraints,\n lockAspectRatio = _this$props.lockAspectRatio,\n axis = _this$props.axis,\n width = _this$props.width,\n height = _this$props.height,\n resizeHandles = _this$props.resizeHandles,\n style = _this$props.style,\n transformScale = _this$props.transformScale,\n props = _objectWithoutPropertiesLoose(_this$props, _excluded);\n return /*#__PURE__*/React.createElement(_Resizable.default, {\n axis: axis,\n draggableOpts: draggableOpts,\n handle: handle,\n handleSize: handleSize,\n height: this.state.height,\n lockAspectRatio: lockAspectRatio,\n maxConstraints: maxConstraints,\n minConstraints: minConstraints,\n onResizeStart: onResizeStart,\n onResize: this.onResize,\n onResizeStop: onResizeStop,\n resizeHandles: resizeHandles,\n transformScale: transformScale,\n width: this.state.width\n }, /*#__PURE__*/React.createElement(\"div\", _extends({}, props, {\n style: _objectSpread(_objectSpread({}, style), {}, {\n width: this.state.width + 'px',\n height: this.state.height + 'px'\n })\n })));\n };\n return ResizableBox;\n}(React.Component);\nexports.default = ResizableBox;\n// PropTypes are identical to , except that children are not strictly required to be present.\nResizableBox.propTypes = _objectSpread(_objectSpread({}, _propTypes2.resizableProps), {}, {\n children: _propTypes.default.element\n});","\"use strict\";\n\nexports.__esModule = true;\nexports.resizableProps = void 0;\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\nvar _reactDraggable = require(\"react-draggable\");\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nvar resizableProps = {\n /*\n * Restricts resizing to a particular axis (default: 'both')\n * 'both' - allows resizing by width or height\n * 'x' - only allows the width to be changed\n * 'y' - only allows the height to be changed\n * 'none' - disables resizing altogether\n * */\n axis: _propTypes.default.oneOf(['both', 'x', 'y', 'none']),\n className: _propTypes.default.string,\n /*\n * Require that one and only one child be present.\n * */\n children: _propTypes.default.element.isRequired,\n /*\n * These will be passed wholesale to react-draggable's DraggableCore\n * */\n draggableOpts: _propTypes.default.shape({\n allowAnyClick: _propTypes.default.bool,\n cancel: _propTypes.default.string,\n children: _propTypes.default.node,\n disabled: _propTypes.default.bool,\n enableUserSelectHack: _propTypes.default.bool,\n offsetParent: _propTypes.default.node,\n grid: _propTypes.default.arrayOf(_propTypes.default.number),\n handle: _propTypes.default.string,\n nodeRef: _propTypes.default.object,\n onStart: _propTypes.default.func,\n onDrag: _propTypes.default.func,\n onStop: _propTypes.default.func,\n onMouseDown: _propTypes.default.func,\n scale: _propTypes.default.number\n }),\n /*\n * Initial height\n * */\n height: function height() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n var props = args[0];\n // Required if resizing height or both\n if (props.axis === 'both' || props.axis === 'y') {\n var _PropTypes$number;\n return (_PropTypes$number = _propTypes.default.number).isRequired.apply(_PropTypes$number, args);\n }\n return _propTypes.default.number.apply(_propTypes.default, args);\n },\n /*\n * Customize cursor resize handle\n * */\n handle: _propTypes.default.oneOfType([_propTypes.default.node, _propTypes.default.func]),\n /*\n * If you change this, be sure to update your css\n * */\n handleSize: _propTypes.default.arrayOf(_propTypes.default.number),\n lockAspectRatio: _propTypes.default.bool,\n /*\n * Max X & Y measure\n * */\n maxConstraints: _propTypes.default.arrayOf(_propTypes.default.number),\n /*\n * Min X & Y measure\n * */\n minConstraints: _propTypes.default.arrayOf(_propTypes.default.number),\n /*\n * Called on stop resize event\n * */\n onResizeStop: _propTypes.default.func,\n /*\n * Called on start resize event\n * */\n onResizeStart: _propTypes.default.func,\n /*\n * Called on resize event\n * */\n onResize: _propTypes.default.func,\n /*\n * Defines which resize handles should be rendered (default: 'se')\n * 's' - South handle (bottom-center)\n * 'w' - West handle (left-center)\n * 'e' - East handle (right-center)\n * 'n' - North handle (top-center)\n * 'sw' - Southwest handle (bottom-left)\n * 'nw' - Northwest handle (top-left)\n * 'se' - Southeast handle (bottom-right)\n * 'ne' - Northeast handle (top-center)\n * */\n resizeHandles: _propTypes.default.arrayOf(_propTypes.default.oneOf(['s', 'w', 'e', 'n', 'sw', 'nw', 'se', 'ne'])),\n /*\n * If `transform: scale(n)` is set on the parent, this should be set to `n`.\n * */\n transformScale: _propTypes.default.number,\n /*\n * Initial width\n */\n width: function width() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n var props = args[0];\n // Required if resizing width or both\n if (props.axis === 'both' || props.axis === 'x') {\n var _PropTypes$number2;\n return (_PropTypes$number2 = _propTypes.default.number).isRequired.apply(_PropTypes$number2, args);\n }\n return _propTypes.default.number.apply(_propTypes.default, args);\n }\n};\nexports.resizableProps = resizableProps;","\"use strict\";\n\nexports.__esModule = true;\nexports.cloneElement = cloneElement;\nvar _react = _interopRequireDefault(require(\"react\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n// React.addons.cloneWithProps look-alike that merges style & className.\nfunction cloneElement(element, props) {\n if (props.style && element.props.style) {\n props.style = _objectSpread(_objectSpread({}, element.props.style), props.style);\n }\n if (props.className && element.props.className) {\n props.className = element.props.className + \" \" + props.className;\n }\n return /*#__PURE__*/_react.default.cloneElement(element, props);\n}","'use strict';\nmodule.exports = function() {\n throw new Error(\"Don't instantiate Resizable directly! Use require('react-resizable').Resizable\");\n};\n\nmodule.exports.Resizable = require('./build/Resizable').default;\nmodule.exports.ResizableBox = require('./build/ResizableBox').default;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"DraggableCore\", {\n enumerable: true,\n get: function () {\n return _DraggableCore.default;\n }\n});\nexports.default = void 0;\nvar React = _interopRequireWildcard(require(\"react\"));\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\nvar _clsx = _interopRequireDefault(require(\"clsx\"));\nvar _domFns = require(\"./utils/domFns\");\nvar _positionFns = require(\"./utils/positionFns\");\nvar _shims = require(\"./utils/shims\");\nvar _DraggableCore = _interopRequireDefault(require(\"./DraggableCore\"));\nvar _log = _interopRequireDefault(require(\"./utils/log\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); } /*:: import type {ControlPosition, PositionOffsetControlPosition, DraggableCoreProps, DraggableCoreDefaultProps} from './DraggableCore';*/\n/*:: import type {Bounds, DraggableEventHandler} from './utils/types';*/\n/*:: import type {Element as ReactElement} from 'react';*/\n/*:: type DraggableState = {\n dragging: boolean,\n dragged: boolean,\n x: number, y: number,\n slackX: number, slackY: number,\n isElementSVG: boolean,\n prevPropsPosition: ?ControlPosition,\n};*/\n/*:: export type DraggableDefaultProps = {\n ...DraggableCoreDefaultProps,\n axis: 'both' | 'x' | 'y' | 'none',\n bounds: Bounds | string | false,\n defaultClassName: string,\n defaultClassNameDragging: string,\n defaultClassNameDragged: string,\n defaultPosition: ControlPosition,\n scale: number,\n};*/\n/*:: export type DraggableProps = {\n ...DraggableCoreProps,\n ...DraggableDefaultProps,\n positionOffset: PositionOffsetControlPosition,\n position: ControlPosition,\n};*/\n//\n// Define \n//\nclass Draggable extends React.Component /*:: */{\n // React 16.3+\n // Arity (props, state)\n static getDerivedStateFromProps(_ref /*:: */, _ref2 /*:: */) /*: ?Partial*/{\n let {\n position\n } /*: DraggableProps*/ = _ref /*: DraggableProps*/;\n let {\n prevPropsPosition\n } /*: DraggableState*/ = _ref2 /*: DraggableState*/;\n // Set x/y if a new position is provided in props that is different than the previous.\n if (position && (!prevPropsPosition || position.x !== prevPropsPosition.x || position.y !== prevPropsPosition.y)) {\n (0, _log.default)('Draggable: getDerivedStateFromProps %j', {\n position,\n prevPropsPosition\n });\n return {\n x: position.x,\n y: position.y,\n prevPropsPosition: {\n ...position\n }\n };\n }\n return null;\n }\n constructor(props /*: DraggableProps*/) {\n super(props);\n _defineProperty(this, \"onDragStart\", (e, coreData) => {\n (0, _log.default)('Draggable: onDragStart: %j', coreData);\n\n // Short-circuit if user's callback killed it.\n const shouldStart = this.props.onStart(e, (0, _positionFns.createDraggableData)(this, coreData));\n // Kills start event on core as well, so move handlers are never bound.\n if (shouldStart === false) return false;\n this.setState({\n dragging: true,\n dragged: true\n });\n });\n _defineProperty(this, \"onDrag\", (e, coreData) => {\n if (!this.state.dragging) return false;\n (0, _log.default)('Draggable: onDrag: %j', coreData);\n const uiData = (0, _positionFns.createDraggableData)(this, coreData);\n const newState = {\n x: uiData.x,\n y: uiData.y,\n slackX: 0,\n slackY: 0\n };\n\n // Keep within bounds.\n if (this.props.bounds) {\n // Save original x and y.\n const {\n x,\n y\n } = newState;\n\n // Add slack to the values used to calculate bound position. This will ensure that if\n // we start removing slack, the element won't react to it right away until it's been\n // completely removed.\n newState.x += this.state.slackX;\n newState.y += this.state.slackY;\n\n // Get bound position. This will ceil/floor the x and y within the boundaries.\n const [newStateX, newStateY] = (0, _positionFns.getBoundPosition)(this, newState.x, newState.y);\n newState.x = newStateX;\n newState.y = newStateY;\n\n // Recalculate slack by noting how much was shaved by the boundPosition handler.\n newState.slackX = this.state.slackX + (x - newState.x);\n newState.slackY = this.state.slackY + (y - newState.y);\n\n // Update the event we fire to reflect what really happened after bounds took effect.\n uiData.x = newState.x;\n uiData.y = newState.y;\n uiData.deltaX = newState.x - this.state.x;\n uiData.deltaY = newState.y - this.state.y;\n }\n\n // Short-circuit if user's callback killed it.\n const shouldUpdate = this.props.onDrag(e, uiData);\n if (shouldUpdate === false) return false;\n this.setState(newState);\n });\n _defineProperty(this, \"onDragStop\", (e, coreData) => {\n if (!this.state.dragging) return false;\n\n // Short-circuit if user's callback killed it.\n const shouldContinue = this.props.onStop(e, (0, _positionFns.createDraggableData)(this, coreData));\n if (shouldContinue === false) return false;\n (0, _log.default)('Draggable: onDragStop: %j', coreData);\n const newState /*: Partial*/ = {\n dragging: false,\n slackX: 0,\n slackY: 0\n };\n\n // If this is a controlled component, the result of this operation will be to\n // revert back to the old position. We expect a handler on `onDragStop`, at the least.\n const controlled = Boolean(this.props.position);\n if (controlled) {\n const {\n x,\n y\n } = this.props.position;\n newState.x = x;\n newState.y = y;\n }\n this.setState(newState);\n });\n this.state = {\n // Whether or not we are currently dragging.\n dragging: false,\n // Whether or not we have been dragged before.\n dragged: false,\n // Current transform x and y.\n x: props.position ? props.position.x : props.defaultPosition.x,\n y: props.position ? props.position.y : props.defaultPosition.y,\n prevPropsPosition: {\n ...props.position\n },\n // Used for compensating for out-of-bounds drags\n slackX: 0,\n slackY: 0,\n // Can only determine if SVG after mounting\n isElementSVG: false\n };\n if (props.position && !(props.onDrag || props.onStop)) {\n // eslint-disable-next-line no-console\n console.warn('A `position` was applied to this , without drag handlers. This will make this ' + 'component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the ' + '`position` of this element.');\n }\n }\n componentDidMount() {\n // Check to see if the element passed is an instanceof SVGElement\n if (typeof window.SVGElement !== 'undefined' && this.findDOMNode() instanceof window.SVGElement) {\n this.setState({\n isElementSVG: true\n });\n }\n }\n componentWillUnmount() {\n this.setState({\n dragging: false\n }); // prevents invariant if unmounted while dragging\n }\n\n // React Strict Mode compatibility: if `nodeRef` is passed, we will use it instead of trying to find\n // the underlying DOM node ourselves. See the README for more information.\n findDOMNode() /*: ?HTMLElement*/{\n var _this$props$nodeRef$c, _this$props;\n return (_this$props$nodeRef$c = (_this$props = this.props) === null || _this$props === void 0 || (_this$props = _this$props.nodeRef) === null || _this$props === void 0 ? void 0 : _this$props.current) !== null && _this$props$nodeRef$c !== void 0 ? _this$props$nodeRef$c : _reactDom.default.findDOMNode(this);\n }\n render() /*: ReactElement*/{\n const {\n axis,\n bounds,\n children,\n defaultPosition,\n defaultClassName,\n defaultClassNameDragging,\n defaultClassNameDragged,\n position,\n positionOffset,\n scale,\n ...draggableCoreProps\n } = this.props;\n let style = {};\n let svgTransform = null;\n\n // If this is controlled, we don't want to move it - unless it's dragging.\n const controlled = Boolean(position);\n const draggable = !controlled || this.state.dragging;\n const validPosition = position || defaultPosition;\n const transformOpts = {\n // Set left if horizontal drag is enabled\n x: (0, _positionFns.canDragX)(this) && draggable ? this.state.x : validPosition.x,\n // Set top if vertical drag is enabled\n y: (0, _positionFns.canDragY)(this) && draggable ? this.state.y : validPosition.y\n };\n\n // If this element was SVG, we use the `transform` attribute.\n if (this.state.isElementSVG) {\n svgTransform = (0, _domFns.createSVGTransform)(transformOpts, positionOffset);\n } else {\n // Add a CSS transform to move the element around. This allows us to move the element around\n // without worrying about whether or not it is relatively or absolutely positioned.\n // If the item you are dragging already has a transform set, wrap it in a so \n // has a clean slate.\n style = (0, _domFns.createCSSTransform)(transformOpts, positionOffset);\n }\n\n // Mark with class while dragging\n const className = (0, _clsx.default)(children.props.className || '', defaultClassName, {\n [defaultClassNameDragging]: this.state.dragging,\n [defaultClassNameDragged]: this.state.dragged\n });\n\n // Reuse the child provided\n // This makes it flexible to use whatever element is wanted (div, ul, etc)\n return /*#__PURE__*/React.createElement(_DraggableCore.default, _extends({}, draggableCoreProps, {\n onStart: this.onDragStart,\n onDrag: this.onDrag,\n onStop: this.onDragStop\n }), /*#__PURE__*/React.cloneElement(React.Children.only(children), {\n className: className,\n style: {\n ...children.props.style,\n ...style\n },\n transform: svgTransform\n }));\n }\n}\nexports.default = Draggable;\n_defineProperty(Draggable, \"displayName\", 'Draggable');\n_defineProperty(Draggable, \"propTypes\", {\n // Accepts all props accepts.\n ..._DraggableCore.default.propTypes,\n /**\n * `axis` determines which axis the draggable can move.\n *\n * Note that all callbacks will still return data as normal. This only\n * controls flushing to the DOM.\n *\n * 'both' allows movement horizontally and vertically.\n * 'x' limits movement to horizontal axis.\n * 'y' limits movement to vertical axis.\n * 'none' limits all movement.\n *\n * Defaults to 'both'.\n */\n axis: _propTypes.default.oneOf(['both', 'x', 'y', 'none']),\n /**\n * `bounds` determines the range of movement available to the element.\n * Available values are:\n *\n * 'parent' restricts movement within the Draggable's parent node.\n *\n * Alternatively, pass an object with the following properties, all of which are optional:\n *\n * {left: LEFT_BOUND, right: RIGHT_BOUND, bottom: BOTTOM_BOUND, top: TOP_BOUND}\n *\n * All values are in px.\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return (\n * \n *
Content
\n *
\n * );\n * }\n * });\n * ```\n */\n bounds: _propTypes.default.oneOfType([_propTypes.default.shape({\n left: _propTypes.default.number,\n right: _propTypes.default.number,\n top: _propTypes.default.number,\n bottom: _propTypes.default.number\n }), _propTypes.default.string, _propTypes.default.oneOf([false])]),\n defaultClassName: _propTypes.default.string,\n defaultClassNameDragging: _propTypes.default.string,\n defaultClassNameDragged: _propTypes.default.string,\n /**\n * `defaultPosition` specifies the x and y that the dragged item should start at\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return (\n * \n *
I start with transformX: 25px and transformY: 25px;
\n *
\n * );\n * }\n * });\n * ```\n */\n defaultPosition: _propTypes.default.shape({\n x: _propTypes.default.number,\n y: _propTypes.default.number\n }),\n positionOffset: _propTypes.default.shape({\n x: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),\n y: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string])\n }),\n /**\n * `position`, if present, defines the current position of the element.\n *\n * This is similar to how form elements in React work - if no `position` is supplied, the component\n * is uncontrolled.\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return (\n * \n *
I start with transformX: 25px and transformY: 25px;
\n *
\n * );\n * }\n * });\n * ```\n */\n position: _propTypes.default.shape({\n x: _propTypes.default.number,\n y: _propTypes.default.number\n }),\n /**\n * These properties should be defined on the child, not here.\n */\n className: _shims.dontSetMe,\n style: _shims.dontSetMe,\n transform: _shims.dontSetMe\n});\n_defineProperty(Draggable, \"defaultProps\", {\n ..._DraggableCore.default.defaultProps,\n axis: 'both',\n bounds: false,\n defaultClassName: 'react-draggable',\n defaultClassNameDragging: 'react-draggable-dragging',\n defaultClassNameDragged: 'react-draggable-dragged',\n defaultPosition: {\n x: 0,\n y: 0\n },\n scale: 1\n});","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar React = _interopRequireWildcard(require(\"react\"));\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\nvar _domFns = require(\"./utils/domFns\");\nvar _positionFns = require(\"./utils/positionFns\");\nvar _shims = require(\"./utils/shims\");\nvar _log = _interopRequireDefault(require(\"./utils/log\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/*:: import type {EventHandler, MouseTouchEvent} from './utils/types';*/\n/*:: import type {Element as ReactElement} from 'react';*/\n// Simple abstraction for dragging events names.\nconst eventsFor = {\n touch: {\n start: 'touchstart',\n move: 'touchmove',\n stop: 'touchend'\n },\n mouse: {\n start: 'mousedown',\n move: 'mousemove',\n stop: 'mouseup'\n }\n};\n\n// Default to mouse events.\nlet dragEventFor = eventsFor.mouse;\n/*:: export type DraggableData = {\n node: HTMLElement,\n x: number, y: number,\n deltaX: number, deltaY: number,\n lastX: number, lastY: number,\n};*/\n/*:: export type DraggableEventHandler = (e: MouseEvent, data: DraggableData) => void | false;*/\n/*:: export type ControlPosition = {x: number, y: number};*/\n/*:: export type PositionOffsetControlPosition = {x: number|string, y: number|string};*/\n/*:: export type DraggableCoreDefaultProps = {\n allowAnyClick: boolean,\n disabled: boolean,\n enableUserSelectHack: boolean,\n onStart: DraggableEventHandler,\n onDrag: DraggableEventHandler,\n onStop: DraggableEventHandler,\n onMouseDown: (e: MouseEvent) => void,\n scale: number,\n};*/\n/*:: export type DraggableCoreProps = {\n ...DraggableCoreDefaultProps,\n cancel: string,\n children: ReactElement,\n offsetParent: HTMLElement,\n grid: [number, number],\n handle: string,\n nodeRef?: ?React.ElementRef,\n};*/\n//\n// Define .\n//\n// is for advanced usage of . It maintains minimal internal state so it can\n// work well with libraries that require more control over the element.\n//\n\nclass DraggableCore extends React.Component /*:: */{\n constructor() {\n super(...arguments);\n _defineProperty(this, \"dragging\", false);\n // Used while dragging to determine deltas.\n _defineProperty(this, \"lastX\", NaN);\n _defineProperty(this, \"lastY\", NaN);\n _defineProperty(this, \"touchIdentifier\", null);\n _defineProperty(this, \"mounted\", false);\n _defineProperty(this, \"handleDragStart\", e => {\n // Make it possible to attach event handlers on top of this one.\n this.props.onMouseDown(e);\n\n // Only accept left-clicks.\n if (!this.props.allowAnyClick && typeof e.button === 'number' && e.button !== 0) return false;\n\n // Get nodes. Be sure to grab relative document (could be iframed)\n const thisNode = this.findDOMNode();\n if (!thisNode || !thisNode.ownerDocument || !thisNode.ownerDocument.body) {\n throw new Error(' not mounted on DragStart!');\n }\n const {\n ownerDocument\n } = thisNode;\n\n // Short circuit if handle or cancel prop was provided and selector doesn't match.\n if (this.props.disabled || !(e.target instanceof ownerDocument.defaultView.Node) || this.props.handle && !(0, _domFns.matchesSelectorAndParentsTo)(e.target, this.props.handle, thisNode) || this.props.cancel && (0, _domFns.matchesSelectorAndParentsTo)(e.target, this.props.cancel, thisNode)) {\n return;\n }\n\n // Prevent scrolling on mobile devices, like ipad/iphone.\n // Important that this is after handle/cancel.\n if (e.type === 'touchstart') e.preventDefault();\n\n // Set touch identifier in component state if this is a touch event. This allows us to\n // distinguish between individual touches on multitouch screens by identifying which\n // touchpoint was set to this element.\n const touchIdentifier = (0, _domFns.getTouchIdentifier)(e);\n this.touchIdentifier = touchIdentifier;\n\n // Get the current drag point from the event. This is used as the offset.\n const position = (0, _positionFns.getControlPosition)(e, touchIdentifier, this);\n if (position == null) return; // not possible but satisfies flow\n const {\n x,\n y\n } = position;\n\n // Create an event object with all the data parents need to make a decision here.\n const coreEvent = (0, _positionFns.createCoreData)(this, x, y);\n (0, _log.default)('DraggableCore: handleDragStart: %j', coreEvent);\n\n // Call event handler. If it returns explicit false, cancel.\n (0, _log.default)('calling', this.props.onStart);\n const shouldUpdate = this.props.onStart(e, coreEvent);\n if (shouldUpdate === false || this.mounted === false) return;\n\n // Add a style to the body to disable user-select. This prevents text from\n // being selected all over the page.\n if (this.props.enableUserSelectHack) (0, _domFns.addUserSelectStyles)(ownerDocument);\n\n // Initiate dragging. Set the current x and y as offsets\n // so we know how much we've moved during the drag. This allows us\n // to drag elements around even if they have been moved, without issue.\n this.dragging = true;\n this.lastX = x;\n this.lastY = y;\n\n // Add events to the document directly so we catch when the user's mouse/touch moves outside of\n // this element. We use different events depending on whether or not we have detected that this\n // is a touch-capable device.\n (0, _domFns.addEvent)(ownerDocument, dragEventFor.move, this.handleDrag);\n (0, _domFns.addEvent)(ownerDocument, dragEventFor.stop, this.handleDragStop);\n });\n _defineProperty(this, \"handleDrag\", e => {\n // Get the current drag point from the event. This is used as the offset.\n const position = (0, _positionFns.getControlPosition)(e, this.touchIdentifier, this);\n if (position == null) return;\n let {\n x,\n y\n } = position;\n\n // Snap to grid if prop has been provided\n if (Array.isArray(this.props.grid)) {\n let deltaX = x - this.lastX,\n deltaY = y - this.lastY;\n [deltaX, deltaY] = (0, _positionFns.snapToGrid)(this.props.grid, deltaX, deltaY);\n if (!deltaX && !deltaY) return; // skip useless drag\n x = this.lastX + deltaX, y = this.lastY + deltaY;\n }\n const coreEvent = (0, _positionFns.createCoreData)(this, x, y);\n (0, _log.default)('DraggableCore: handleDrag: %j', coreEvent);\n\n // Call event handler. If it returns explicit false, trigger end.\n const shouldUpdate = this.props.onDrag(e, coreEvent);\n if (shouldUpdate === false || this.mounted === false) {\n try {\n // $FlowIgnore\n this.handleDragStop(new MouseEvent('mouseup'));\n } catch (err) {\n // Old browsers\n const event = ((document.createEvent('MouseEvents') /*: any*/) /*: MouseTouchEvent*/);\n // I see why this insanity was deprecated\n // $FlowIgnore\n event.initMouseEvent('mouseup', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n this.handleDragStop(event);\n }\n return;\n }\n this.lastX = x;\n this.lastY = y;\n });\n _defineProperty(this, \"handleDragStop\", e => {\n if (!this.dragging) return;\n const position = (0, _positionFns.getControlPosition)(e, this.touchIdentifier, this);\n if (position == null) return;\n let {\n x,\n y\n } = position;\n\n // Snap to grid if prop has been provided\n if (Array.isArray(this.props.grid)) {\n let deltaX = x - this.lastX || 0;\n let deltaY = y - this.lastY || 0;\n [deltaX, deltaY] = (0, _positionFns.snapToGrid)(this.props.grid, deltaX, deltaY);\n x = this.lastX + deltaX, y = this.lastY + deltaY;\n }\n const coreEvent = (0, _positionFns.createCoreData)(this, x, y);\n\n // Call event handler\n const shouldContinue = this.props.onStop(e, coreEvent);\n if (shouldContinue === false || this.mounted === false) return false;\n const thisNode = this.findDOMNode();\n if (thisNode) {\n // Remove user-select hack\n if (this.props.enableUserSelectHack) (0, _domFns.removeUserSelectStyles)(thisNode.ownerDocument);\n }\n (0, _log.default)('DraggableCore: handleDragStop: %j', coreEvent);\n\n // Reset the el.\n this.dragging = false;\n this.lastX = NaN;\n this.lastY = NaN;\n if (thisNode) {\n // Remove event handlers\n (0, _log.default)('DraggableCore: Removing handlers');\n (0, _domFns.removeEvent)(thisNode.ownerDocument, dragEventFor.move, this.handleDrag);\n (0, _domFns.removeEvent)(thisNode.ownerDocument, dragEventFor.stop, this.handleDragStop);\n }\n });\n _defineProperty(this, \"onMouseDown\", e => {\n dragEventFor = eventsFor.mouse; // on touchscreen laptops we could switch back to mouse\n\n return this.handleDragStart(e);\n });\n _defineProperty(this, \"onMouseUp\", e => {\n dragEventFor = eventsFor.mouse;\n return this.handleDragStop(e);\n });\n // Same as onMouseDown (start drag), but now consider this a touch device.\n _defineProperty(this, \"onTouchStart\", e => {\n // We're on a touch device now, so change the event handlers\n dragEventFor = eventsFor.touch;\n return this.handleDragStart(e);\n });\n _defineProperty(this, \"onTouchEnd\", e => {\n // We're on a touch device now, so change the event handlers\n dragEventFor = eventsFor.touch;\n return this.handleDragStop(e);\n });\n }\n componentDidMount() {\n this.mounted = true;\n // Touch handlers must be added with {passive: false} to be cancelable.\n // https://developers.google.com/web/updates/2017/01/scrolling-intervention\n const thisNode = this.findDOMNode();\n if (thisNode) {\n (0, _domFns.addEvent)(thisNode, eventsFor.touch.start, this.onTouchStart, {\n passive: false\n });\n }\n }\n componentWillUnmount() {\n this.mounted = false;\n // Remove any leftover event handlers. Remove both touch and mouse handlers in case\n // some browser quirk caused a touch event to fire during a mouse move, or vice versa.\n const thisNode = this.findDOMNode();\n if (thisNode) {\n const {\n ownerDocument\n } = thisNode;\n (0, _domFns.removeEvent)(ownerDocument, eventsFor.mouse.move, this.handleDrag);\n (0, _domFns.removeEvent)(ownerDocument, eventsFor.touch.move, this.handleDrag);\n (0, _domFns.removeEvent)(ownerDocument, eventsFor.mouse.stop, this.handleDragStop);\n (0, _domFns.removeEvent)(ownerDocument, eventsFor.touch.stop, this.handleDragStop);\n (0, _domFns.removeEvent)(thisNode, eventsFor.touch.start, this.onTouchStart, {\n passive: false\n });\n if (this.props.enableUserSelectHack) (0, _domFns.removeUserSelectStyles)(ownerDocument);\n }\n }\n\n // React Strict Mode compatibility: if `nodeRef` is passed, we will use it instead of trying to find\n // the underlying DOM node ourselves. See the README for more information.\n findDOMNode() /*: ?HTMLElement*/{\n var _this$props, _this$props2;\n return (_this$props = this.props) !== null && _this$props !== void 0 && _this$props.nodeRef ? (_this$props2 = this.props) === null || _this$props2 === void 0 || (_this$props2 = _this$props2.nodeRef) === null || _this$props2 === void 0 ? void 0 : _this$props2.current : _reactDom.default.findDOMNode(this);\n }\n render() /*: React.Element*/{\n // Reuse the child provided\n // This makes it flexible to use whatever element is wanted (div, ul, etc)\n return /*#__PURE__*/React.cloneElement(React.Children.only(this.props.children), {\n // Note: mouseMove handler is attached to document so it will still function\n // when the user drags quickly and leaves the bounds of the element.\n onMouseDown: this.onMouseDown,\n onMouseUp: this.onMouseUp,\n // onTouchStart is added on `componentDidMount` so they can be added with\n // {passive: false}, which allows it to cancel. See\n // https://developers.google.com/web/updates/2017/01/scrolling-intervention\n onTouchEnd: this.onTouchEnd\n });\n }\n}\nexports.default = DraggableCore;\n_defineProperty(DraggableCore, \"displayName\", 'DraggableCore');\n_defineProperty(DraggableCore, \"propTypes\", {\n /**\n * `allowAnyClick` allows dragging using any mouse button.\n * By default, we only accept the left button.\n *\n * Defaults to `false`.\n */\n allowAnyClick: _propTypes.default.bool,\n children: _propTypes.default.node.isRequired,\n /**\n * `disabled`, if true, stops the from dragging. All handlers,\n * with the exception of `onMouseDown`, will not fire.\n */\n disabled: _propTypes.default.bool,\n /**\n * By default, we add 'user-select:none' attributes to the document body\n * to prevent ugly text selection during drag. If this is causing problems\n * for your app, set this to `false`.\n */\n enableUserSelectHack: _propTypes.default.bool,\n /**\n * `offsetParent`, if set, uses the passed DOM node to compute drag offsets\n * instead of using the parent node.\n */\n offsetParent: function (props /*: DraggableCoreProps*/, propName /*: $Keys*/) {\n if (props[propName] && props[propName].nodeType !== 1) {\n throw new Error('Draggable\\'s offsetParent must be a DOM Node.');\n }\n },\n /**\n * `grid` specifies the x and y that dragging should snap to.\n */\n grid: _propTypes.default.arrayOf(_propTypes.default.number),\n /**\n * `handle` specifies a selector to be used as the handle that initiates drag.\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return (\n * \n *
\n *
Click me to drag
\n *
This is some other content
\n *
\n *
\n * );\n * }\n * });\n * ```\n */\n handle: _propTypes.default.string,\n /**\n * `cancel` specifies a selector to be used to prevent drag initialization.\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return(\n * \n *
\n *
You can't drag from here
\n *
Dragging here works fine
\n *
\n *
\n * );\n * }\n * });\n * ```\n */\n cancel: _propTypes.default.string,\n /* If running in React Strict mode, ReactDOM.findDOMNode() is deprecated.\n * Unfortunately, in order for to work properly, we need raw access\n * to the underlying DOM node. If you want to avoid the warning, pass a `nodeRef`\n * as in this example:\n *\n * function MyComponent() {\n * const nodeRef = React.useRef(null);\n * return (\n * \n *
Example Target
\n *
\n * );\n * }\n *\n * This can be used for arbitrarily nested components, so long as the ref ends up\n * pointing to the actual child DOM node and not a custom component.\n */\n nodeRef: _propTypes.default.object,\n /**\n * Called when dragging starts.\n * If this function returns the boolean false, dragging will be canceled.\n */\n onStart: _propTypes.default.func,\n /**\n * Called while dragging.\n * If this function returns the boolean false, dragging will be canceled.\n */\n onDrag: _propTypes.default.func,\n /**\n * Called when dragging stops.\n * If this function returns the boolean false, the drag will remain active.\n */\n onStop: _propTypes.default.func,\n /**\n * A workaround option which can be passed if onMouseDown needs to be accessed,\n * since it'll always be blocked (as there is internal use of onMouseDown)\n */\n onMouseDown: _propTypes.default.func,\n /**\n * `scale`, if set, applies scaling while dragging an element\n */\n scale: _propTypes.default.number,\n /**\n * These properties should be defined on the child, not here.\n */\n className: _shims.dontSetMe,\n style: _shims.dontSetMe,\n transform: _shims.dontSetMe\n});\n_defineProperty(DraggableCore, \"defaultProps\", {\n allowAnyClick: false,\n // by default only accept left click\n disabled: false,\n enableUserSelectHack: true,\n onStart: function () {},\n onDrag: function () {},\n onStop: function () {},\n onMouseDown: function () {},\n scale: 1\n});","\"use strict\";\n\nconst {\n default: Draggable,\n DraggableCore\n} = require('./Draggable');\n\n// Previous versions of this lib exported as the root export. As to no-// them, or TypeScript, we export *both* as the root and as 'default'.\n// See https://github.com/mzabriskie/react-draggable/pull/254\n// and https://github.com/mzabriskie/react-draggable/issues/266\nmodule.exports = Draggable;\nmodule.exports.default = Draggable;\nmodule.exports.DraggableCore = DraggableCore;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.addClassName = addClassName;\nexports.addEvent = addEvent;\nexports.addUserSelectStyles = addUserSelectStyles;\nexports.createCSSTransform = createCSSTransform;\nexports.createSVGTransform = createSVGTransform;\nexports.getTouch = getTouch;\nexports.getTouchIdentifier = getTouchIdentifier;\nexports.getTranslation = getTranslation;\nexports.innerHeight = innerHeight;\nexports.innerWidth = innerWidth;\nexports.matchesSelector = matchesSelector;\nexports.matchesSelectorAndParentsTo = matchesSelectorAndParentsTo;\nexports.offsetXYFromParent = offsetXYFromParent;\nexports.outerHeight = outerHeight;\nexports.outerWidth = outerWidth;\nexports.removeClassName = removeClassName;\nexports.removeEvent = removeEvent;\nexports.removeUserSelectStyles = removeUserSelectStyles;\nvar _shims = require(\"./shims\");\nvar _getPrefix = _interopRequireWildcard(require(\"./getPrefix\"));\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n/*:: import type {ControlPosition, PositionOffsetControlPosition, MouseTouchEvent} from './types';*/\nlet matchesSelectorFunc = '';\nfunction matchesSelector(el /*: Node*/, selector /*: string*/) /*: boolean*/{\n if (!matchesSelectorFunc) {\n matchesSelectorFunc = (0, _shims.findInArray)(['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector'], function (method) {\n // $FlowIgnore: Doesn't think elements are indexable\n return (0, _shims.isFunction)(el[method]);\n });\n }\n\n // Might not be found entirely (not an Element?) - in that case, bail\n // $FlowIgnore: Doesn't think elements are indexable\n if (!(0, _shims.isFunction)(el[matchesSelectorFunc])) return false;\n\n // $FlowIgnore: Doesn't think elements are indexable\n return el[matchesSelectorFunc](selector);\n}\n\n// Works up the tree to the draggable itself attempting to match selector.\nfunction matchesSelectorAndParentsTo(el /*: Node*/, selector /*: string*/, baseNode /*: Node*/) /*: boolean*/{\n let node = el;\n do {\n if (matchesSelector(node, selector)) return true;\n if (node === baseNode) return false;\n // $FlowIgnore[incompatible-type]\n node = node.parentNode;\n } while (node);\n return false;\n}\nfunction addEvent(el /*: ?Node*/, event /*: string*/, handler /*: Function*/, inputOptions /*: Object*/) /*: void*/{\n if (!el) return;\n const options = {\n capture: true,\n ...inputOptions\n };\n // $FlowIgnore[method-unbinding]\n if (el.addEventListener) {\n el.addEventListener(event, handler, options);\n } else if (el.attachEvent) {\n el.attachEvent('on' + event, handler);\n } else {\n // $FlowIgnore: Doesn't think elements are indexable\n el['on' + event] = handler;\n }\n}\nfunction removeEvent(el /*: ?Node*/, event /*: string*/, handler /*: Function*/, inputOptions /*: Object*/) /*: void*/{\n if (!el) return;\n const options = {\n capture: true,\n ...inputOptions\n };\n // $FlowIgnore[method-unbinding]\n if (el.removeEventListener) {\n el.removeEventListener(event, handler, options);\n } else if (el.detachEvent) {\n el.detachEvent('on' + event, handler);\n } else {\n // $FlowIgnore: Doesn't think elements are indexable\n el['on' + event] = null;\n }\n}\nfunction outerHeight(node /*: HTMLElement*/) /*: number*/{\n // This is deliberately excluding margin for our calculations, since we are using\n // offsetTop which is including margin. See getBoundPosition\n let height = node.clientHeight;\n const computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n height += (0, _shims.int)(computedStyle.borderTopWidth);\n height += (0, _shims.int)(computedStyle.borderBottomWidth);\n return height;\n}\nfunction outerWidth(node /*: HTMLElement*/) /*: number*/{\n // This is deliberately excluding margin for our calculations, since we are using\n // offsetLeft which is including margin. See getBoundPosition\n let width = node.clientWidth;\n const computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n width += (0, _shims.int)(computedStyle.borderLeftWidth);\n width += (0, _shims.int)(computedStyle.borderRightWidth);\n return width;\n}\nfunction innerHeight(node /*: HTMLElement*/) /*: number*/{\n let height = node.clientHeight;\n const computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n height -= (0, _shims.int)(computedStyle.paddingTop);\n height -= (0, _shims.int)(computedStyle.paddingBottom);\n return height;\n}\nfunction innerWidth(node /*: HTMLElement*/) /*: number*/{\n let width = node.clientWidth;\n const computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n width -= (0, _shims.int)(computedStyle.paddingLeft);\n width -= (0, _shims.int)(computedStyle.paddingRight);\n return width;\n}\n/*:: interface EventWithOffset {\n clientX: number, clientY: number\n}*/\n// Get from offsetParent\nfunction offsetXYFromParent(evt /*: EventWithOffset*/, offsetParent /*: HTMLElement*/, scale /*: number*/) /*: ControlPosition*/{\n const isBody = offsetParent === offsetParent.ownerDocument.body;\n const offsetParentRect = isBody ? {\n left: 0,\n top: 0\n } : offsetParent.getBoundingClientRect();\n const x = (evt.clientX + offsetParent.scrollLeft - offsetParentRect.left) / scale;\n const y = (evt.clientY + offsetParent.scrollTop - offsetParentRect.top) / scale;\n return {\n x,\n y\n };\n}\nfunction createCSSTransform(controlPos /*: ControlPosition*/, positionOffset /*: PositionOffsetControlPosition*/) /*: Object*/{\n const translation = getTranslation(controlPos, positionOffset, 'px');\n return {\n [(0, _getPrefix.browserPrefixToKey)('transform', _getPrefix.default)]: translation\n };\n}\nfunction createSVGTransform(controlPos /*: ControlPosition*/, positionOffset /*: PositionOffsetControlPosition*/) /*: string*/{\n const translation = getTranslation(controlPos, positionOffset, '');\n return translation;\n}\nfunction getTranslation(_ref /*:: */, positionOffset /*: PositionOffsetControlPosition*/, unitSuffix /*: string*/) /*: string*/{\n let {\n x,\n y\n } /*: ControlPosition*/ = _ref /*: ControlPosition*/;\n let translation = \"translate(\".concat(x).concat(unitSuffix, \",\").concat(y).concat(unitSuffix, \")\");\n if (positionOffset) {\n const defaultX = \"\".concat(typeof positionOffset.x === 'string' ? positionOffset.x : positionOffset.x + unitSuffix);\n const defaultY = \"\".concat(typeof positionOffset.y === 'string' ? positionOffset.y : positionOffset.y + unitSuffix);\n translation = \"translate(\".concat(defaultX, \", \").concat(defaultY, \")\") + translation;\n }\n return translation;\n}\nfunction getTouch(e /*: MouseTouchEvent*/, identifier /*: number*/) /*: ?{clientX: number, clientY: number}*/{\n return e.targetTouches && (0, _shims.findInArray)(e.targetTouches, t => identifier === t.identifier) || e.changedTouches && (0, _shims.findInArray)(e.changedTouches, t => identifier === t.identifier);\n}\nfunction getTouchIdentifier(e /*: MouseTouchEvent*/) /*: ?number*/{\n if (e.targetTouches && e.targetTouches[0]) return e.targetTouches[0].identifier;\n if (e.changedTouches && e.changedTouches[0]) return e.changedTouches[0].identifier;\n}\n\n// User-select Hacks:\n//\n// Useful for preventing blue highlights all over everything when dragging.\n\n// Note we're passing `document` b/c we could be iframed\nfunction addUserSelectStyles(doc /*: ?Document*/) {\n if (!doc) return;\n let styleEl = doc.getElementById('react-draggable-style-el');\n if (!styleEl) {\n styleEl = doc.createElement('style');\n styleEl.type = 'text/css';\n styleEl.id = 'react-draggable-style-el';\n styleEl.innerHTML = '.react-draggable-transparent-selection *::-moz-selection {all: inherit;}\\n';\n styleEl.innerHTML += '.react-draggable-transparent-selection *::selection {all: inherit;}\\n';\n doc.getElementsByTagName('head')[0].appendChild(styleEl);\n }\n if (doc.body) addClassName(doc.body, 'react-draggable-transparent-selection');\n}\nfunction removeUserSelectStyles(doc /*: ?Document*/) {\n if (!doc) return;\n try {\n if (doc.body) removeClassName(doc.body, 'react-draggable-transparent-selection');\n // $FlowIgnore: IE\n if (doc.selection) {\n // $FlowIgnore: IE\n doc.selection.empty();\n } else {\n // Remove selection caused by scroll, unless it's a focused input\n // (we use doc.defaultView in case we're in an iframe)\n const selection = (doc.defaultView || window).getSelection();\n if (selection && selection.type !== 'Caret') {\n selection.removeAllRanges();\n }\n }\n } catch (e) {\n // probably IE\n }\n}\nfunction addClassName(el /*: HTMLElement*/, className /*: string*/) {\n if (el.classList) {\n el.classList.add(className);\n } else {\n if (!el.className.match(new RegExp(\"(?:^|\\\\s)\".concat(className, \"(?!\\\\S)\")))) {\n el.className += \" \".concat(className);\n }\n }\n}\nfunction removeClassName(el /*: HTMLElement*/, className /*: string*/) {\n if (el.classList) {\n el.classList.remove(className);\n } else {\n el.className = el.className.replace(new RegExp(\"(?:^|\\\\s)\".concat(className, \"(?!\\\\S)\"), 'g'), '');\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.browserPrefixToKey = browserPrefixToKey;\nexports.browserPrefixToStyle = browserPrefixToStyle;\nexports.default = void 0;\nexports.getPrefix = getPrefix;\nconst prefixes = ['Moz', 'Webkit', 'O', 'ms'];\nfunction getPrefix() /*: string*/{\n var _window$document;\n let prop /*: string*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';\n // Ensure we're running in an environment where there is actually a global\n // `window` obj\n if (typeof window === 'undefined') return '';\n\n // If we're in a pseudo-browser server-side environment, this access\n // path may not exist, so bail out if it doesn't.\n const style = (_window$document = window.document) === null || _window$document === void 0 || (_window$document = _window$document.documentElement) === null || _window$document === void 0 ? void 0 : _window$document.style;\n if (!style) return '';\n if (prop in style) return '';\n for (let i = 0; i < prefixes.length; i++) {\n if (browserPrefixToKey(prop, prefixes[i]) in style) return prefixes[i];\n }\n return '';\n}\nfunction browserPrefixToKey(prop /*: string*/, prefix /*: string*/) /*: string*/{\n return prefix ? \"\".concat(prefix).concat(kebabToTitleCase(prop)) : prop;\n}\nfunction browserPrefixToStyle(prop /*: string*/, prefix /*: string*/) /*: string*/{\n return prefix ? \"-\".concat(prefix.toLowerCase(), \"-\").concat(prop) : prop;\n}\nfunction kebabToTitleCase(str /*: string*/) /*: string*/{\n let out = '';\n let shouldCapitalize = true;\n for (let i = 0; i < str.length; i++) {\n if (shouldCapitalize) {\n out += str[i].toUpperCase();\n shouldCapitalize = false;\n } else if (str[i] === '-') {\n shouldCapitalize = true;\n } else {\n out += str[i];\n }\n }\n return out;\n}\n\n// Default export is the prefix itself, like 'Moz', 'Webkit', etc\n// Note that you may have to re-test for certain things; for instance, Chrome 50\n// can handle unprefixed `transform`, but not unprefixed `user-select`\nvar _default = exports.default = (getPrefix() /*: string*/);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = log;\n/*eslint no-console:0*/\nfunction log() {\n if (undefined) console.log(...arguments);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.canDragX = canDragX;\nexports.canDragY = canDragY;\nexports.createCoreData = createCoreData;\nexports.createDraggableData = createDraggableData;\nexports.getBoundPosition = getBoundPosition;\nexports.getControlPosition = getControlPosition;\nexports.snapToGrid = snapToGrid;\nvar _shims = require(\"./shims\");\nvar _domFns = require(\"./domFns\");\n/*:: import type Draggable from '../Draggable';*/\n/*:: import type {Bounds, ControlPosition, DraggableData, MouseTouchEvent} from './types';*/\n/*:: import type DraggableCore from '../DraggableCore';*/\nfunction getBoundPosition(draggable /*: Draggable*/, x /*: number*/, y /*: number*/) /*: [number, number]*/{\n // If no bounds, short-circuit and move on\n if (!draggable.props.bounds) return [x, y];\n\n // Clone new bounds\n let {\n bounds\n } = draggable.props;\n bounds = typeof bounds === 'string' ? bounds : cloneBounds(bounds);\n const node = findDOMNode(draggable);\n if (typeof bounds === 'string') {\n const {\n ownerDocument\n } = node;\n const ownerWindow = ownerDocument.defaultView;\n let boundNode;\n if (bounds === 'parent') {\n boundNode = node.parentNode;\n } else {\n boundNode = ownerDocument.querySelector(bounds);\n }\n if (!(boundNode instanceof ownerWindow.HTMLElement)) {\n throw new Error('Bounds selector \"' + bounds + '\" could not find an element.');\n }\n const boundNodeEl /*: HTMLElement*/ = boundNode; // for Flow, can't seem to refine correctly\n const nodeStyle = ownerWindow.getComputedStyle(node);\n const boundNodeStyle = ownerWindow.getComputedStyle(boundNodeEl);\n // Compute bounds. This is a pain with padding and offsets but this gets it exactly right.\n bounds = {\n left: -node.offsetLeft + (0, _shims.int)(boundNodeStyle.paddingLeft) + (0, _shims.int)(nodeStyle.marginLeft),\n top: -node.offsetTop + (0, _shims.int)(boundNodeStyle.paddingTop) + (0, _shims.int)(nodeStyle.marginTop),\n right: (0, _domFns.innerWidth)(boundNodeEl) - (0, _domFns.outerWidth)(node) - node.offsetLeft + (0, _shims.int)(boundNodeStyle.paddingRight) - (0, _shims.int)(nodeStyle.marginRight),\n bottom: (0, _domFns.innerHeight)(boundNodeEl) - (0, _domFns.outerHeight)(node) - node.offsetTop + (0, _shims.int)(boundNodeStyle.paddingBottom) - (0, _shims.int)(nodeStyle.marginBottom)\n };\n }\n\n // Keep x and y below right and bottom limits...\n if ((0, _shims.isNum)(bounds.right)) x = Math.min(x, bounds.right);\n if ((0, _shims.isNum)(bounds.bottom)) y = Math.min(y, bounds.bottom);\n\n // But above left and top limits.\n if ((0, _shims.isNum)(bounds.left)) x = Math.max(x, bounds.left);\n if ((0, _shims.isNum)(bounds.top)) y = Math.max(y, bounds.top);\n return [x, y];\n}\nfunction snapToGrid(grid /*: [number, number]*/, pendingX /*: number*/, pendingY /*: number*/) /*: [number, number]*/{\n const x = Math.round(pendingX / grid[0]) * grid[0];\n const y = Math.round(pendingY / grid[1]) * grid[1];\n return [x, y];\n}\nfunction canDragX(draggable /*: Draggable*/) /*: boolean*/{\n return draggable.props.axis === 'both' || draggable.props.axis === 'x';\n}\nfunction canDragY(draggable /*: Draggable*/) /*: boolean*/{\n return draggable.props.axis === 'both' || draggable.props.axis === 'y';\n}\n\n// Get {x, y} positions from event.\nfunction getControlPosition(e /*: MouseTouchEvent*/, touchIdentifier /*: ?number*/, draggableCore /*: DraggableCore*/) /*: ?ControlPosition*/{\n const touchObj = typeof touchIdentifier === 'number' ? (0, _domFns.getTouch)(e, touchIdentifier) : null;\n if (typeof touchIdentifier === 'number' && !touchObj) return null; // not the right touch\n const node = findDOMNode(draggableCore);\n // User can provide an offsetParent if desired.\n const offsetParent = draggableCore.props.offsetParent || node.offsetParent || node.ownerDocument.body;\n return (0, _domFns.offsetXYFromParent)(touchObj || e, offsetParent, draggableCore.props.scale);\n}\n\n// Create an data object exposed by 's events\nfunction createCoreData(draggable /*: DraggableCore*/, x /*: number*/, y /*: number*/) /*: DraggableData*/{\n const isStart = !(0, _shims.isNum)(draggable.lastX);\n const node = findDOMNode(draggable);\n if (isStart) {\n // If this is our first move, use the x and y as last coords.\n return {\n node,\n deltaX: 0,\n deltaY: 0,\n lastX: x,\n lastY: y,\n x,\n y\n };\n } else {\n // Otherwise calculate proper values.\n return {\n node,\n deltaX: x - draggable.lastX,\n deltaY: y - draggable.lastY,\n lastX: draggable.lastX,\n lastY: draggable.lastY,\n x,\n y\n };\n }\n}\n\n// Create an data exposed by 's events\nfunction createDraggableData(draggable /*: Draggable*/, coreData /*: DraggableData*/) /*: DraggableData*/{\n const scale = draggable.props.scale;\n return {\n node: coreData.node,\n x: draggable.state.x + coreData.deltaX / scale,\n y: draggable.state.y + coreData.deltaY / scale,\n deltaX: coreData.deltaX / scale,\n deltaY: coreData.deltaY / scale,\n lastX: draggable.state.x,\n lastY: draggable.state.y\n };\n}\n\n// A lot faster than stringify/parse\nfunction cloneBounds(bounds /*: Bounds*/) /*: Bounds*/{\n return {\n left: bounds.left,\n top: bounds.top,\n right: bounds.right,\n bottom: bounds.bottom\n };\n}\nfunction findDOMNode(draggable /*: Draggable | DraggableCore*/) /*: HTMLElement*/{\n const node = draggable.findDOMNode();\n if (!node) {\n throw new Error(': Unmounted during event!');\n }\n // $FlowIgnore we can't assert on HTMLElement due to tests... FIXME\n return node;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.dontSetMe = dontSetMe;\nexports.findInArray = findInArray;\nexports.int = int;\nexports.isFunction = isFunction;\nexports.isNum = isNum;\n// @credits https://gist.github.com/rogozhnikoff/a43cfed27c41e4e68cdc\nfunction findInArray(array /*: Array | TouchList*/, callback /*: Function*/) /*: any*/{\n for (let i = 0, length = array.length; i < length; i++) {\n if (callback.apply(callback, [array[i], i, array])) return array[i];\n }\n}\nfunction isFunction(func /*: any*/) /*: boolean %checks*/{\n // $FlowIgnore[method-unbinding]\n return typeof func === 'function' || Object.prototype.toString.call(func) === '[object Function]';\n}\nfunction isNum(num /*: any*/) /*: boolean %checks*/{\n return typeof num === 'number' && !isNaN(num);\n}\nfunction int(a /*: string*/) /*: number*/{\n return parseInt(a, 10);\n}\nfunction dontSetMe(props /*: Object*/, propName /*: string*/, componentName /*: string*/) /*: ?Error*/{\n if (props[propName]) {\n return new Error(\"Invalid prop \".concat(propName, \" passed to \").concat(componentName, \" - do not set this, set it on the child.\"));\n }\n}","module.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=0)}([function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(e,t){for(var r=0;rQ.length&&Q.push(a)}\nfunction T(a,b,c,e){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return c(e,a,\"\"===b?\".\"+U(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;k Promise;\n\n// Functions responsible for loading the turnstile api, while also making sure\n// to only load it once\nlet turnstileLoad: {\n resolve: (value?: any) => void;\n reject: (reason?: any) => void;\n};\nconst turnstileLoadPromise = new Promise((resolve, reject) => {\n turnstileLoad = { resolve, reject };\n if (turnstileState === \"ready\") resolve(undefined);\n});\n\n{\n const TURNSTILE_LOAD_FUNCTION = \"cf__reactTurnstileOnLoad\";\n const TURNSTILE_SRC = \"https://challenges.cloudflare.com/turnstile/v0/api.js\";\n\n ensureTurnstile = () => {\n if (turnstileState === \"unloaded\") {\n turnstileState = \"loading\";\n globalNamespace[TURNSTILE_LOAD_FUNCTION] = () => {\n turnstileLoad.resolve();\n turnstileState = \"ready\";\n delete globalNamespace[TURNSTILE_LOAD_FUNCTION];\n };\n const url = `${TURNSTILE_SRC}?onload=${TURNSTILE_LOAD_FUNCTION}&render=explicit`;\n const script = document.createElement(\"script\");\n script.src = url;\n script.async = true;\n script.addEventListener(\"error\", () => {\n turnstileLoad.reject(\"Failed to load Turnstile.\");\n delete globalNamespace[TURNSTILE_LOAD_FUNCTION];\n });\n document.head.appendChild(script);\n }\n return turnstileLoadPromise;\n };\n}\n\nexport default function Turnstile({\n id,\n className,\n style: customStyle,\n sitekey,\n action,\n cData,\n theme,\n language,\n tabIndex,\n responseField,\n responseFieldName,\n size,\n fixedSize,\n retry,\n retryInterval,\n refreshExpired,\n appearance,\n execution,\n userRef,\n onVerify,\n onSuccess,\n onLoad,\n onError,\n onExpire,\n onTimeout,\n onAfterInteractive,\n onBeforeInteractive,\n onUnsupported,\n}: TurnstileProps) {\n const ownRef = useRef(null);\n const inplaceState = useState({\n onVerify,\n onSuccess,\n onLoad,\n onError,\n onExpire,\n onTimeout,\n onAfterInteractive,\n onBeforeInteractive,\n onUnsupported,\n })[0];\n\n const ref = userRef ?? ownRef;\n\n const style = fixedSize\n ? {\n width:\n size === \"compact\" ? \"130px\" : size === \"flexible\" ? \"100%\" : \"300px\",\n height: size === \"compact\" ? \"120px\" : \"65px\",\n ...customStyle,\n }\n : customStyle;\n\n useEffect(() => {\n if (!ref.current) return;\n let cancelled = false;\n let widgetId = \"\";\n (async () => {\n // load turnstile\n if (turnstileState !== \"ready\") {\n try {\n await ensureTurnstile();\n } catch (e) {\n inplaceState.onError?.(e);\n return;\n }\n }\n if (cancelled || !ref.current) return;\n let boundTurnstileObject: BoundTurnstileObject;\n const turnstileOptions: RenderParameters = {\n sitekey,\n action,\n cData,\n theme,\n language,\n tabindex: tabIndex,\n \"response-field\": responseField,\n \"response-field-name\": responseFieldName,\n size,\n retry,\n \"retry-interval\": retryInterval,\n \"refresh-expired\": refreshExpired,\n appearance,\n execution,\n callback: (token: string, preClearanceObtained: boolean) => {\n inplaceState.onVerify?.(token, boundTurnstileObject);\n inplaceState.onSuccess?.(\n token,\n preClearanceObtained,\n boundTurnstileObject\n );\n },\n \"error-callback\": (error?: any) =>\n inplaceState.onError?.(error, boundTurnstileObject),\n \"expired-callback\": (token: string) =>\n inplaceState.onExpire?.(token, boundTurnstileObject),\n \"timeout-callback\": () =>\n inplaceState.onTimeout?.(boundTurnstileObject),\n \"after-interactive-callback\": () =>\n inplaceState.onAfterInteractive?.(boundTurnstileObject),\n \"before-interactive-callback\": () =>\n inplaceState.onBeforeInteractive?.(boundTurnstileObject),\n \"unsupported-callback\": () =>\n inplaceState.onUnsupported?.(boundTurnstileObject),\n };\n\n widgetId = window.turnstile.render(ref.current, turnstileOptions);\n boundTurnstileObject = createBoundTurnstileObject(widgetId);\n inplaceState.onLoad?.(widgetId, boundTurnstileObject);\n })();\n return () => {\n cancelled = true;\n if (widgetId) window.turnstile.remove(widgetId);\n };\n }, [\n sitekey,\n action,\n cData,\n theme,\n language,\n tabIndex,\n responseField,\n responseFieldName,\n size,\n retry,\n retryInterval,\n refreshExpired,\n appearance,\n execution,\n ]);\n useEffect(() => {\n inplaceState.onVerify = onVerify;\n inplaceState.onSuccess = onSuccess;\n inplaceState.onLoad = onLoad;\n inplaceState.onError = onError;\n inplaceState.onExpire = onExpire;\n inplaceState.onTimeout = onTimeout;\n inplaceState.onAfterInteractive = onAfterInteractive;\n inplaceState.onBeforeInteractive = onBeforeInteractive;\n inplaceState.onUnsupported = onUnsupported;\n }, [\n onVerify,\n onSuccess,\n onLoad,\n onError,\n onExpire,\n onTimeout,\n onAfterInteractive,\n onBeforeInteractive,\n onUnsupported,\n ]);\n\n return
;\n}\n\nexport interface TurnstileProps extends TurnstileCallbacks {\n sitekey: string;\n action?: string;\n cData?: string;\n theme?: \"light\" | \"dark\" | \"auto\";\n language?: SupportedLanguages | \"auto\";\n tabIndex?: number;\n responseField?: boolean;\n responseFieldName?: string;\n size?: \"normal\" | \"compact\" | \"flexible\" | \"invisible\";\n fixedSize?: boolean;\n retry?: \"auto\" | \"never\";\n retryInterval?: number;\n refreshExpired?: \"auto\" | \"manual\" | \"never\";\n appearance?: \"always\" | \"execute\" | \"interaction-only\";\n execution?: \"render\" | \"execute\";\n id?: string;\n userRef?: React.MutableRefObject;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport interface TurnstileCallbacks {\n onVerify?: (token: string, boundTurnstile: BoundTurnstileObject) => void;\n onSuccess?: (\n token: string,\n preClearanceObtained: boolean,\n boundTurnstile: BoundTurnstileObject\n ) => void;\n onLoad?: (widgetId: string, boundTurnstile: BoundTurnstileObject) => void;\n onError?: (\n error?: Error | any,\n boundTurnstile?: BoundTurnstileObject\n ) => void;\n onExpire?: (token: string, boundTurnstile: BoundTurnstileObject) => void;\n onTimeout?: (boundTurnstile: BoundTurnstileObject) => void;\n onAfterInteractive?: (boundTurnstile: BoundTurnstileObject) => void;\n onBeforeInteractive?: (boundTurnstile: BoundTurnstileObject) => void;\n onUnsupported?: (boundTurnstile: BoundTurnstileObject) => void;\n}\n\nexport interface BoundTurnstileObject {\n execute: (options?: RenderParameters) => void;\n reset: () => void;\n getResponse: () => void;\n isExpired: () => boolean;\n}\n\nfunction createBoundTurnstileObject(widgetId: string): BoundTurnstileObject {\n return {\n execute: (options) => window.turnstile.execute(widgetId, options),\n reset: () => window.turnstile.reset(widgetId),\n getResponse: () => window.turnstile.getResponse(widgetId),\n isExpired: () => window.turnstile.isExpired(widgetId),\n };\n}\n\nexport function useTurnstile(): TurnstileObject {\n // we are using state here to trigger a component re-render once turnstile\n // loads, so the component using this hook gets the object once its loaded\n const [_, setState] = useState(turnstileState);\n\n useEffect(() => {\n if (turnstileState === \"ready\") return;\n turnstileLoadPromise.then(() => setState(turnstileState));\n }, []);\n\n return globalNamespace.turnstile;\n}\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","import _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport _invoke from \"lodash-es/invoke\";\nimport { handleRef, Ref } from '@fluentui/react-component-ref';\nimport PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport { createPortal } from 'react-dom';\nimport { customPropTypes, isBrowser } from '../../lib';\n\n/**\n * An inner component that allows you to render children outside their parent.\n */\nvar PortalInner = /*#__PURE__*/function (_Component) {\n _inheritsLoose(PortalInner, _Component);\n\n function PortalInner() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n\n _this.handleRef = function (c) {\n handleRef(_this.props.innerRef, c);\n };\n\n return _this;\n }\n\n var _proto = PortalInner.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n _invoke(this.props, 'onMount', null, this.props);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n _invoke(this.props, 'onUnmount', null, this.props);\n };\n\n _proto.render = function render() {\n if (!isBrowser()) return null;\n var _this$props = this.props,\n children = _this$props.children,\n _this$props$mountNode = _this$props.mountNode,\n mountNode = _this$props$mountNode === void 0 ? document.body : _this$props$mountNode;\n return /*#__PURE__*/createPortal( /*#__PURE__*/React.createElement(Ref, {\n innerRef: this.handleRef\n }, children), mountNode);\n };\n\n return PortalInner;\n}(Component);\n\nPortalInner.handledProps = [\"children\", \"innerRef\", \"mountNode\", \"onMount\", \"onUnmount\"];\nPortalInner.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /** Primary content. */\n children: PropTypes.node.isRequired,\n\n /** Called with a ref to the inner node. */\n innerRef: customPropTypes.ref,\n\n /** The node where the portal should mount. */\n mountNode: PropTypes.any,\n\n /**\n * Called when the portal is mounted on the DOM\n *\n * @param {null}\n * @param {object} data - All props.\n */\n onMount: PropTypes.func,\n\n /**\n * Called when the portal is unmounted from the DOM\n *\n * @param {null}\n * @param {object} data - All props.\n */\n onUnmount: PropTypes.func\n} : {};\nexport default PortalInner;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport _invoke from \"lodash-es/invoke\";\nimport EventStack from '@semantic-ui-react/event-stack';\nimport { handleRef, Ref } from '@fluentui/react-component-ref';\nimport keyboardKey from 'keyboard-key';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { ModernAutoControlledComponent as Component, customPropTypes, doesNodeContainClick } from '../../lib';\nimport validateTrigger from './utils/validateTrigger';\nimport PortalInner from './PortalInner';\n\n/**\n * A component that allows you to render children outside their parent.\n * @see Modal\n * @see Popup\n * @see Dimmer\n * @see Confirm\n */\nvar Portal = /*#__PURE__*/function (_Component) {\n _inheritsLoose(Portal, _Component);\n\n function Portal() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n _this.contentRef = /*#__PURE__*/React.createRef();\n _this.triggerRef = /*#__PURE__*/React.createRef();\n _this.latestDocumentMouseDownEvent = null;\n\n _this.handleDocumentMouseDown = function (e) {\n _this.latestDocumentMouseDownEvent = e;\n };\n\n _this.handleDocumentClick = function (e) {\n var closeOnDocumentClick = _this.props.closeOnDocumentClick;\n var currentMouseDownEvent = _this.latestDocumentMouseDownEvent;\n _this.latestDocumentMouseDownEvent = null;\n\n if (!_this.contentRef.current || // no portal\n doesNodeContainClick(_this.triggerRef.current, e) || // event happened in trigger (delegate to trigger handlers)\n currentMouseDownEvent && doesNodeContainClick(_this.contentRef.current, currentMouseDownEvent) || // event originated in the portal but was ended outside\n doesNodeContainClick(_this.contentRef.current, e) // event happened in the portal\n ) {\n return;\n } // ignore the click\n\n\n if (closeOnDocumentClick) {\n _this.close(e);\n }\n };\n\n _this.handleEscape = function (e) {\n if (!_this.props.closeOnEscape) return;\n if (keyboardKey.getCode(e) !== keyboardKey.Escape) return;\n\n _this.close(e);\n };\n\n _this.handlePortalMouseLeave = function (e) {\n var _this$props = _this.props,\n closeOnPortalMouseLeave = _this$props.closeOnPortalMouseLeave,\n mouseLeaveDelay = _this$props.mouseLeaveDelay;\n if (!closeOnPortalMouseLeave) return; // Do not close the portal when 'mouseleave' is triggered by children\n\n if (e.target !== _this.contentRef.current) return;\n _this.mouseLeaveTimer = _this.closeWithTimeout(e, mouseLeaveDelay);\n };\n\n _this.handlePortalMouseEnter = function () {\n // In order to enable mousing from the trigger to the portal, we need to\n // clear the mouseleave timer that was set when leaving the trigger.\n var closeOnPortalMouseLeave = _this.props.closeOnPortalMouseLeave;\n if (!closeOnPortalMouseLeave) return;\n clearTimeout(_this.mouseLeaveTimer);\n };\n\n _this.handleTriggerBlur = function (e) {\n var _this$props2 = _this.props,\n trigger = _this$props2.trigger,\n closeOnTriggerBlur = _this$props2.closeOnTriggerBlur; // Call original event handler\n\n for (var _len2 = arguments.length, rest = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n rest[_key2 - 1] = arguments[_key2];\n }\n\n _invoke.apply(void 0, [trigger, 'props.onBlur', e].concat(rest)); // IE 11 doesn't work with relatedTarget in blur events\n\n\n var target = e.relatedTarget || document.activeElement; // do not close if focus is given to the portal\n\n var didFocusPortal = _invoke(_this.contentRef.current, 'contains', target);\n\n if (!closeOnTriggerBlur || didFocusPortal) return;\n\n _this.close(e);\n };\n\n _this.handleTriggerClick = function (e) {\n var _this$props3 = _this.props,\n trigger = _this$props3.trigger,\n closeOnTriggerClick = _this$props3.closeOnTriggerClick,\n openOnTriggerClick = _this$props3.openOnTriggerClick;\n var open = _this.state.open; // Call original event handler\n\n for (var _len3 = arguments.length, rest = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n rest[_key3 - 1] = arguments[_key3];\n }\n\n _invoke.apply(void 0, [trigger, 'props.onClick', e].concat(rest));\n\n if (open && closeOnTriggerClick) {\n _this.close(e);\n } else if (!open && openOnTriggerClick) {\n _this.open(e);\n }\n };\n\n _this.handleTriggerFocus = function (e) {\n var _this$props4 = _this.props,\n trigger = _this$props4.trigger,\n openOnTriggerFocus = _this$props4.openOnTriggerFocus; // Call original event handler\n\n for (var _len4 = arguments.length, rest = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n rest[_key4 - 1] = arguments[_key4];\n }\n\n _invoke.apply(void 0, [trigger, 'props.onFocus', e].concat(rest));\n\n if (!openOnTriggerFocus) return;\n\n _this.open(e);\n };\n\n _this.handleTriggerMouseLeave = function (e) {\n clearTimeout(_this.mouseEnterTimer);\n var _this$props5 = _this.props,\n trigger = _this$props5.trigger,\n closeOnTriggerMouseLeave = _this$props5.closeOnTriggerMouseLeave,\n mouseLeaveDelay = _this$props5.mouseLeaveDelay; // Call original event handler\n\n for (var _len5 = arguments.length, rest = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n rest[_key5 - 1] = arguments[_key5];\n }\n\n _invoke.apply(void 0, [trigger, 'props.onMouseLeave', e].concat(rest));\n\n if (!closeOnTriggerMouseLeave) return;\n _this.mouseLeaveTimer = _this.closeWithTimeout(e, mouseLeaveDelay);\n };\n\n _this.handleTriggerMouseEnter = function (e) {\n clearTimeout(_this.mouseLeaveTimer);\n var _this$props6 = _this.props,\n trigger = _this$props6.trigger,\n mouseEnterDelay = _this$props6.mouseEnterDelay,\n openOnTriggerMouseEnter = _this$props6.openOnTriggerMouseEnter; // Call original event handler\n\n for (var _len6 = arguments.length, rest = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n rest[_key6 - 1] = arguments[_key6];\n }\n\n _invoke.apply(void 0, [trigger, 'props.onMouseEnter', e].concat(rest));\n\n if (!openOnTriggerMouseEnter) return;\n _this.mouseEnterTimer = _this.openWithTimeout(e, mouseEnterDelay);\n };\n\n _this.open = function (e) {\n _invoke(_this.props, 'onOpen', e, _extends({}, _this.props, {\n open: true\n }));\n\n _this.setState({\n open: true\n });\n };\n\n _this.openWithTimeout = function (e, delay) {\n // React wipes the entire event object and suggests using e.persist() if\n // you need the event for async access. However, even with e.persist\n // certain required props (e.g. currentTarget) are null so we're forced to clone.\n var eventClone = _extends({}, e);\n\n return setTimeout(function () {\n return _this.open(eventClone);\n }, delay || 0);\n };\n\n _this.close = function (e) {\n _this.setState({\n open: false\n });\n\n _invoke(_this.props, 'onClose', e, _extends({}, _this.props, {\n open: false\n }));\n };\n\n _this.closeWithTimeout = function (e, delay) {\n // React wipes the entire event object and suggests using e.persist() if\n // you need the event for async access. However, even with e.persist\n // certain required props (e.g. currentTarget) are null so we're forced to clone.\n var eventClone = _extends({}, e);\n\n return setTimeout(function () {\n return _this.close(eventClone);\n }, delay || 0);\n };\n\n _this.handleMount = function () {\n _invoke(_this.props, 'onMount', null, _this.props);\n };\n\n _this.handleUnmount = function () {\n _invoke(_this.props, 'onUnmount', null, _this.props);\n };\n\n _this.handleTriggerRef = function (c) {\n _this.triggerRef.current = c;\n handleRef(_this.props.triggerRef, c);\n };\n\n return _this;\n }\n\n var _proto = Portal.prototype;\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n // Clean up timers\n clearTimeout(this.mouseEnterTimer);\n clearTimeout(this.mouseLeaveTimer);\n } // ----------------------------------------\n // Document Event Handlers\n // ----------------------------------------\n ;\n\n _proto.render = function render() {\n var _this$props7 = this.props,\n children = _this$props7.children,\n eventPool = _this$props7.eventPool,\n mountNode = _this$props7.mountNode,\n trigger = _this$props7.trigger;\n var open = this.state.open;\n /* istanbul ignore else */\n\n if (process.env.NODE_ENV !== 'production') {\n validateTrigger(trigger);\n }\n\n return /*#__PURE__*/React.createElement(React.Fragment, null, open && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(PortalInner, {\n innerRef: this.contentRef,\n mountNode: mountNode,\n onMount: this.handleMount,\n onUnmount: this.handleUnmount\n }, children), /*#__PURE__*/React.createElement(EventStack, {\n name: \"mouseleave\",\n on: this.handlePortalMouseLeave,\n pool: eventPool,\n target: this.contentRef\n }), /*#__PURE__*/React.createElement(EventStack, {\n name: \"mouseenter\",\n on: this.handlePortalMouseEnter,\n pool: eventPool,\n target: this.contentRef\n }), /*#__PURE__*/React.createElement(EventStack, {\n name: \"mousedown\",\n on: this.handleDocumentMouseDown,\n pool: eventPool\n }), /*#__PURE__*/React.createElement(EventStack, {\n name: \"click\",\n on: this.handleDocumentClick,\n pool: eventPool\n }), /*#__PURE__*/React.createElement(EventStack, {\n name: \"keydown\",\n on: this.handleEscape,\n pool: eventPool\n })), trigger && /*#__PURE__*/React.createElement(Ref, {\n innerRef: this.handleTriggerRef\n }, /*#__PURE__*/React.cloneElement(trigger, {\n onBlur: this.handleTriggerBlur,\n onClick: this.handleTriggerClick,\n onFocus: this.handleTriggerFocus,\n onMouseLeave: this.handleTriggerMouseLeave,\n onMouseEnter: this.handleTriggerMouseEnter\n })));\n };\n\n return Portal;\n}(Component);\n\nPortal.handledProps = [\"children\", \"closeOnDocumentClick\", \"closeOnEscape\", \"closeOnPortalMouseLeave\", \"closeOnTriggerBlur\", \"closeOnTriggerClick\", \"closeOnTriggerMouseLeave\", \"defaultOpen\", \"eventPool\", \"mountNode\", \"mouseEnterDelay\", \"mouseLeaveDelay\", \"onClose\", \"onMount\", \"onOpen\", \"onUnmount\", \"open\", \"openOnTriggerClick\", \"openOnTriggerFocus\", \"openOnTriggerMouseEnter\", \"trigger\", \"triggerRef\"];\nPortal.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /** Primary content. */\n children: PropTypes.node.isRequired,\n\n /** Controls whether or not the portal should close when the document is clicked. */\n closeOnDocumentClick: PropTypes.bool,\n\n /** Controls whether or not the portal should close when escape is pressed is displayed. */\n closeOnEscape: PropTypes.bool,\n\n /**\n * Controls whether or not the portal should close when mousing out of the portal.\n * NOTE: This will prevent `closeOnTriggerMouseLeave` when mousing over the\n * gap from the trigger to the portal.\n */\n closeOnPortalMouseLeave: PropTypes.bool,\n\n /** Controls whether or not the portal should close on blur of the trigger. */\n closeOnTriggerBlur: PropTypes.bool,\n\n /** Controls whether or not the portal should close on click of the trigger. */\n closeOnTriggerClick: PropTypes.bool,\n\n /** Controls whether or not the portal should close when mousing out of the trigger. */\n closeOnTriggerMouseLeave: PropTypes.bool,\n\n /** Initial value of open. */\n defaultOpen: PropTypes.bool,\n\n /** Event pool namespace that is used to handle component events */\n eventPool: PropTypes.string,\n\n /** The node where the portal should mount. */\n mountNode: PropTypes.any,\n\n /** Milliseconds to wait before opening on mouse over */\n mouseEnterDelay: PropTypes.number,\n\n /** Milliseconds to wait before closing on mouse leave */\n mouseLeaveDelay: PropTypes.number,\n\n /**\n * Called when a close event happens\n *\n * @param {SyntheticEvent} event - React's original SyntheticEvent.\n * @param {object} data - All props.\n */\n onClose: PropTypes.func,\n\n /**\n * Called when the portal is mounted on the DOM.\n *\n * @param {null}\n * @param {object} data - All props.\n */\n onMount: PropTypes.func,\n\n /**\n * Called when an open event happens\n *\n * @param {SyntheticEvent} event - React's original SyntheticEvent.\n * @param {object} data - All props.\n */\n onOpen: PropTypes.func,\n\n /**\n * Called when the portal is unmounted from the DOM.\n *\n * @param {null}\n * @param {object} data - All props.\n */\n onUnmount: PropTypes.func,\n\n /** Controls whether or not the portal is displayed. */\n open: PropTypes.bool,\n\n /** Controls whether or not the portal should open when the trigger is clicked. */\n openOnTriggerClick: PropTypes.bool,\n\n /** Controls whether or not the portal should open on focus of the trigger. */\n openOnTriggerFocus: PropTypes.bool,\n\n /** Controls whether or not the portal should open when mousing over the trigger. */\n openOnTriggerMouseEnter: PropTypes.bool,\n\n /** Element to be rendered in-place where the portal is defined. */\n trigger: PropTypes.node,\n\n /** Called with a ref to the trigger node. */\n triggerRef: customPropTypes.ref\n} : {};\nPortal.defaultProps = {\n closeOnDocumentClick: true,\n closeOnEscape: true,\n eventPool: 'default',\n openOnTriggerClick: true\n};\nPortal.autoControlledProps = ['open'];\nPortal.Inner = PortalInner;\nexport default Portal;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport cx from 'clsx';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { childrenUtils, createShorthandFactory, customPropTypes, getElementType, getUnhandledProps } from '../../lib';\n/**\n * Headers may contain subheaders.\n */\n\nfunction HeaderSubheader(props) {\n var children = props.children,\n className = props.className,\n content = props.content;\n var classes = cx('sub header', className);\n var rest = getUnhandledProps(HeaderSubheader, props);\n var ElementType = getElementType(HeaderSubheader, props);\n return /*#__PURE__*/React.createElement(ElementType, _extends({}, rest, {\n className: classes\n }), childrenUtils.isNil(children) ? content : children);\n}\n\nHeaderSubheader.handledProps = [\"as\", \"children\", \"className\", \"content\"];\nHeaderSubheader.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /** An element type to render as (string or function). */\n as: PropTypes.elementType,\n\n /** Primary content. */\n children: PropTypes.node,\n\n /** Additional classes. */\n className: PropTypes.string,\n\n /** Shorthand for primary content. */\n content: customPropTypes.contentShorthand\n} : {};\nHeaderSubheader.create = createShorthandFactory(HeaderSubheader, function (content) {\n return {\n content: content\n };\n});\nexport default HeaderSubheader;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport cx from 'clsx';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { childrenUtils, customPropTypes, getElementType, getUnhandledProps } from '../../lib';\n/**\n * Header content wraps the main content when there is an adjacent Icon or Image.\n */\n\nfunction HeaderContent(props) {\n var children = props.children,\n className = props.className,\n content = props.content;\n var classes = cx('content', className);\n var rest = getUnhandledProps(HeaderContent, props);\n var ElementType = getElementType(HeaderContent, props);\n return /*#__PURE__*/React.createElement(ElementType, _extends({}, rest, {\n className: classes\n }), childrenUtils.isNil(children) ? content : children);\n}\n\nHeaderContent.handledProps = [\"as\", \"children\", \"className\", \"content\"];\nHeaderContent.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /** An element type to render as (string or function). */\n as: PropTypes.elementType,\n\n /** Primary content. */\n children: PropTypes.node,\n\n /** Additional classes. */\n className: PropTypes.string,\n\n /** Shorthand for primary content. */\n content: customPropTypes.contentShorthand\n} : {};\nexport default HeaderContent;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _without from \"lodash-es/without\";\nimport cx from 'clsx';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { childrenUtils, customPropTypes, getElementType, getUnhandledProps, SUI, useValueAndKey, useTextAlignProp, useKeyOrValueAndKey, useKeyOnly } from '../../lib';\nimport Icon from '../Icon';\nimport Image from '../Image';\nimport HeaderSubheader from './HeaderSubheader';\nimport HeaderContent from './HeaderContent';\n/**\n * A header provides a short summary of content\n */\n\nfunction Header(props) {\n var attached = props.attached,\n block = props.block,\n children = props.children,\n className = props.className,\n color = props.color,\n content = props.content,\n disabled = props.disabled,\n dividing = props.dividing,\n floated = props.floated,\n icon = props.icon,\n image = props.image,\n inverted = props.inverted,\n size = props.size,\n sub = props.sub,\n subheader = props.subheader,\n textAlign = props.textAlign;\n var classes = cx('ui', color, size, useKeyOnly(block, 'block'), useKeyOnly(disabled, 'disabled'), useKeyOnly(dividing, 'dividing'), useValueAndKey(floated, 'floated'), useKeyOnly(icon === true, 'icon'), useKeyOnly(image === true, 'image'), useKeyOnly(inverted, 'inverted'), useKeyOnly(sub, 'sub'), useKeyOrValueAndKey(attached, 'attached'), useTextAlignProp(textAlign), 'header', className);\n var rest = getUnhandledProps(Header, props);\n var ElementType = getElementType(Header, props);\n\n if (!childrenUtils.isNil(children)) {\n return /*#__PURE__*/React.createElement(ElementType, _extends({}, rest, {\n className: classes\n }), children);\n }\n\n var iconElement = Icon.create(icon, {\n autoGenerateKey: false\n });\n var imageElement = Image.create(image, {\n autoGenerateKey: false\n });\n var subheaderElement = HeaderSubheader.create(subheader, {\n autoGenerateKey: false\n });\n\n if (iconElement || imageElement) {\n return /*#__PURE__*/React.createElement(ElementType, _extends({}, rest, {\n className: classes\n }), iconElement || imageElement, (content || subheaderElement) && /*#__PURE__*/React.createElement(HeaderContent, null, content, subheaderElement));\n }\n\n return /*#__PURE__*/React.createElement(ElementType, _extends({}, rest, {\n className: classes\n }), content, subheaderElement);\n}\n\nHeader.handledProps = [\"as\", \"attached\", \"block\", \"children\", \"className\", \"color\", \"content\", \"disabled\", \"dividing\", \"floated\", \"icon\", \"image\", \"inverted\", \"size\", \"sub\", \"subheader\", \"textAlign\"];\nHeader.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /** An element type to render as (string or function). */\n as: PropTypes.elementType,\n\n /** Attach header to other content, like a segment. */\n attached: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['top', 'bottom'])]),\n\n /** Format header to appear inside a content block. */\n block: PropTypes.bool,\n\n /** Primary content. */\n children: PropTypes.node,\n\n /** Additional classes. */\n className: PropTypes.string,\n\n /** Color of the header. */\n color: PropTypes.oneOf(SUI.COLORS),\n\n /** Shorthand for primary content. */\n content: customPropTypes.contentShorthand,\n\n /** Show that the header is inactive. */\n disabled: PropTypes.bool,\n\n /** Divide header from the content below it. */\n dividing: PropTypes.bool,\n\n /** Header can sit to the left or right of other content. */\n floated: PropTypes.oneOf(SUI.FLOATS),\n\n /** Add an icon by icon name or pass an Icon. */\n icon: customPropTypes.every([customPropTypes.disallow(['image']), PropTypes.oneOfType([PropTypes.bool, customPropTypes.itemShorthand])]),\n\n /** Add an image by img src or pass an Image. */\n image: customPropTypes.every([customPropTypes.disallow(['icon']), PropTypes.oneOfType([PropTypes.bool, customPropTypes.itemShorthand])]),\n\n /** Inverts the color of the header for dark backgrounds. */\n inverted: PropTypes.bool,\n\n /** Content headings are sized with em and are based on the font-size of their container. */\n size: PropTypes.oneOf(_without(SUI.SIZES, 'big', 'massive', 'mini')),\n\n /** Headers may be formatted to label smaller or de-emphasized content. */\n sub: PropTypes.bool,\n\n /** Shorthand for Header.Subheader. */\n subheader: customPropTypes.itemShorthand,\n\n /** Align header content. */\n textAlign: PropTypes.oneOf(SUI.TEXT_ALIGNMENTS)\n} : {};\nHeader.Content = HeaderContent;\nHeader.Subheader = HeaderSubheader;\nexport default Header;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _without from \"lodash-es/without\";\nimport cx from 'clsx';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { childrenUtils, customPropTypes, getElementType, getUnhandledProps, SUI } from '../../lib';\n/**\n * Several icons can be used together as a group.\n */\n\nfunction IconGroup(props) {\n var children = props.children,\n className = props.className,\n content = props.content,\n size = props.size;\n var classes = cx(size, 'icons', className);\n var rest = getUnhandledProps(IconGroup, props);\n var ElementType = getElementType(IconGroup, props);\n return /*#__PURE__*/React.createElement(ElementType, _extends({}, rest, {\n className: classes\n }), childrenUtils.isNil(children) ? content : children);\n}\n\nIconGroup.handledProps = [\"as\", \"children\", \"className\", \"content\", \"size\"];\nIconGroup.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /** An element type to render as (string or function). */\n as: PropTypes.elementType,\n\n /** Primary content. */\n children: PropTypes.node,\n\n /** Additional classes. */\n className: PropTypes.string,\n\n /** Shorthand for primary content. */\n content: customPropTypes.contentShorthand,\n\n /** Size of the icon group. */\n size: PropTypes.oneOf(_without(SUI.SIZES, 'medium'))\n} : {};\nIconGroup.defaultProps = {\n as: 'i'\n};\nexport default IconGroup;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport _without from \"lodash-es/without\";\nimport _invoke from \"lodash-es/invoke\";\nimport _isNil from \"lodash-es/isNil\";\nimport cx from 'clsx';\nimport PropTypes from 'prop-types';\nimport React, { PureComponent } from 'react';\nimport { createShorthandFactory, customPropTypes, getElementType, getUnhandledProps, SUI, useKeyOnly, useKeyOrValueAndKey, useValueAndKey } from '../../lib';\nimport IconGroup from './IconGroup';\n/**\n * An icon is a glyph used to represent something else.\n * @see Image\n */\n\nvar Icon = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(Icon, _PureComponent);\n\n function Icon() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _PureComponent.call.apply(_PureComponent, [this].concat(args)) || this;\n\n _this.handleClick = function (e) {\n var disabled = _this.props.disabled;\n\n if (disabled) {\n e.preventDefault();\n return;\n }\n\n _invoke(_this.props, 'onClick', e, _this.props);\n };\n\n return _this;\n }\n\n var _proto = Icon.prototype;\n\n _proto.getIconAriaOptions = function getIconAriaOptions() {\n var ariaOptions = {};\n var _this$props = this.props,\n ariaLabel = _this$props['aria-label'],\n ariaHidden = _this$props['aria-hidden'];\n\n if (_isNil(ariaLabel)) {\n ariaOptions['aria-hidden'] = 'true';\n } else {\n ariaOptions['aria-label'] = ariaLabel;\n }\n\n if (!_isNil(ariaHidden)) {\n ariaOptions['aria-hidden'] = ariaHidden;\n }\n\n return ariaOptions;\n };\n\n _proto.render = function render() {\n var _this$props2 = this.props,\n bordered = _this$props2.bordered,\n circular = _this$props2.circular,\n className = _this$props2.className,\n color = _this$props2.color,\n corner = _this$props2.corner,\n disabled = _this$props2.disabled,\n fitted = _this$props2.fitted,\n flipped = _this$props2.flipped,\n inverted = _this$props2.inverted,\n link = _this$props2.link,\n loading = _this$props2.loading,\n name = _this$props2.name,\n rotated = _this$props2.rotated,\n size = _this$props2.size;\n var classes = cx(color, name, size, useKeyOnly(bordered, 'bordered'), useKeyOnly(circular, 'circular'), useKeyOnly(disabled, 'disabled'), useKeyOnly(fitted, 'fitted'), useKeyOnly(inverted, 'inverted'), useKeyOnly(link, 'link'), useKeyOnly(loading, 'loading'), useKeyOrValueAndKey(corner, 'corner'), useValueAndKey(flipped, 'flipped'), useValueAndKey(rotated, 'rotated'), 'icon', className);\n var rest = getUnhandledProps(Icon, this.props);\n var ElementType = getElementType(Icon, this.props);\n var ariaOptions = this.getIconAriaOptions();\n return /*#__PURE__*/React.createElement(ElementType, _extends({}, rest, ariaOptions, {\n className: classes,\n onClick: this.handleClick\n }));\n };\n\n return Icon;\n}(PureComponent);\n\nIcon.handledProps = [\"aria-hidden\", \"aria-label\", \"as\", \"bordered\", \"circular\", \"className\", \"color\", \"corner\", \"disabled\", \"fitted\", \"flipped\", \"inverted\", \"link\", \"loading\", \"name\", \"rotated\", \"size\"];\nIcon.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /** An element type to render as (string or function). */\n as: PropTypes.elementType,\n\n /** Formatted to appear bordered. */\n bordered: PropTypes.bool,\n\n /** Icon can formatted to appear circular. */\n circular: PropTypes.bool,\n\n /** Additional classes. */\n className: PropTypes.string,\n\n /** Color of the icon. */\n color: PropTypes.oneOf(SUI.COLORS),\n\n /** Icons can display a smaller corner icon. */\n corner: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['top left', 'top right', 'bottom left', 'bottom right'])]),\n\n /** Show that the icon is inactive. */\n disabled: PropTypes.bool,\n\n /** Fitted, without space to left or right of Icon. */\n fitted: PropTypes.bool,\n\n /** Icon can be flipped. */\n flipped: PropTypes.oneOf(['horizontally', 'vertically']),\n\n /** Formatted to have its colors inverted for contrast. */\n inverted: PropTypes.bool,\n\n /** Icon can be formatted as a link. */\n link: PropTypes.bool,\n\n /** Icon can be used as a simple loader. */\n loading: PropTypes.bool,\n\n /** Name of the icon. */\n name: customPropTypes.suggest(SUI.ALL_ICONS_IN_ALL_CONTEXTS),\n\n /** Icon can rotated. */\n rotated: PropTypes.oneOf(['clockwise', 'counterclockwise']),\n\n /** Size of the icon. */\n size: PropTypes.oneOf(_without(SUI.SIZES, 'medium')),\n\n /** Icon can have an aria label. */\n 'aria-hidden': PropTypes.string,\n\n /** Icon can have an aria label. */\n 'aria-label': PropTypes.string\n} : {};\nIcon.defaultProps = {\n as: 'i'\n};\nIcon.Group = IconGroup;\nIcon.create = createShorthandFactory(Icon, function (value) {\n return {\n name: value\n };\n});\nexport default Icon;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport cx from 'clsx';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { childrenUtils, customPropTypes, getElementType, getUnhandledProps, SUI } from '../../lib';\n/**\n * A group of images.\n */\n\nfunction ImageGroup(props) {\n var children = props.children,\n className = props.className,\n content = props.content,\n size = props.size;\n var classes = cx('ui', size, className, 'images');\n var rest = getUnhandledProps(ImageGroup, props);\n var ElementType = getElementType(ImageGroup, props);\n return /*#__PURE__*/React.createElement(ElementType, _extends({}, rest, {\n className: classes\n }), childrenUtils.isNil(children) ? content : children);\n}\n\nImageGroup.handledProps = [\"as\", \"children\", \"className\", \"content\", \"size\"];\nImageGroup.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /** An element type to render as (string or function). */\n as: PropTypes.elementType,\n\n /** Primary content. */\n children: PropTypes.node,\n\n /** Additional classes. */\n className: PropTypes.string,\n\n /** Shorthand for primary content. */\n content: customPropTypes.contentShorthand,\n\n /** A group of images can be formatted to have the same size. */\n size: PropTypes.oneOf(SUI.SIZES)\n} : {};\nexport default ImageGroup;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _isNil from \"lodash-es/isNil\";\nimport cx from 'clsx';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { childrenUtils, createShorthandFactory, customPropTypes, getElementType, getUnhandledProps, htmlImageProps, partitionHTMLProps, SUI, useKeyOnly, useKeyOrValueAndKey, useValueAndKey, useVerticalAlignProp } from '../../lib';\nimport Dimmer from '../../modules/Dimmer';\nimport Label from '../Label/Label';\nimport ImageGroup from './ImageGroup';\n/**\n * An image is a graphic representation of something.\n * @see Icon\n */\n\nfunction Image(props) {\n var avatar = props.avatar,\n bordered = props.bordered,\n centered = props.centered,\n children = props.children,\n circular = props.circular,\n className = props.className,\n content = props.content,\n dimmer = props.dimmer,\n disabled = props.disabled,\n floated = props.floated,\n fluid = props.fluid,\n hidden = props.hidden,\n href = props.href,\n inline = props.inline,\n label = props.label,\n rounded = props.rounded,\n size = props.size,\n spaced = props.spaced,\n verticalAlign = props.verticalAlign,\n wrapped = props.wrapped,\n ui = props.ui;\n var classes = cx(useKeyOnly(ui, 'ui'), size, useKeyOnly(avatar, 'avatar'), useKeyOnly(bordered, 'bordered'), useKeyOnly(circular, 'circular'), useKeyOnly(centered, 'centered'), useKeyOnly(disabled, 'disabled'), useKeyOnly(fluid, 'fluid'), useKeyOnly(hidden, 'hidden'), useKeyOnly(inline, 'inline'), useKeyOnly(rounded, 'rounded'), useKeyOrValueAndKey(spaced, 'spaced'), useValueAndKey(floated, 'floated'), useVerticalAlignProp(verticalAlign, 'aligned'), 'image', className);\n var rest = getUnhandledProps(Image, props);\n\n var _partitionHTMLProps = partitionHTMLProps(rest, {\n htmlProps: htmlImageProps\n }),\n imgTagProps = _partitionHTMLProps[0],\n rootProps = _partitionHTMLProps[1];\n\n var ElementType = getElementType(Image, props, function () {\n if (!_isNil(dimmer) || !_isNil(label) || !_isNil(wrapped) || !childrenUtils.isNil(children)) {\n return 'div';\n }\n });\n\n if (!childrenUtils.isNil(children)) {\n return /*#__PURE__*/React.createElement(ElementType, _extends({}, rest, {\n className: classes\n }), children);\n }\n\n if (!childrenUtils.isNil(content)) {\n return /*#__PURE__*/React.createElement(ElementType, _extends({}, rest, {\n className: classes\n }), content);\n }\n\n if (ElementType === 'img') {\n return /*#__PURE__*/React.createElement(ElementType, _extends({}, rootProps, imgTagProps, {\n className: classes\n }));\n }\n\n return /*#__PURE__*/React.createElement(ElementType, _extends({}, rootProps, {\n className: classes,\n href: href\n }), Dimmer.create(dimmer, {\n autoGenerateKey: false\n }), Label.create(label, {\n autoGenerateKey: false\n }), /*#__PURE__*/React.createElement(\"img\", imgTagProps));\n}\n\nImage.handledProps = [\"as\", \"avatar\", \"bordered\", \"centered\", \"children\", \"circular\", \"className\", \"content\", \"dimmer\", \"disabled\", \"floated\", \"fluid\", \"hidden\", \"href\", \"inline\", \"label\", \"rounded\", \"size\", \"spaced\", \"ui\", \"verticalAlign\", \"wrapped\"];\nImage.Group = ImageGroup;\nImage.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /** An element type to render as (string or function). */\n as: PropTypes.elementType,\n\n /** An image may be formatted to appear inline with text as an avatar. */\n avatar: PropTypes.bool,\n\n /** An image may include a border to emphasize the edges of white or transparent content. */\n bordered: PropTypes.bool,\n\n /** An image can appear centered in a content block. */\n centered: PropTypes.bool,\n\n /** Primary content. */\n children: PropTypes.node,\n\n /** An image may appear circular. */\n circular: PropTypes.bool,\n\n /** Additional classes. */\n className: PropTypes.string,\n\n /** Shorthand for primary content. */\n content: customPropTypes.contentShorthand,\n\n /** An image can show that it is disabled and cannot be selected. */\n disabled: PropTypes.bool,\n\n /** Shorthand for Dimmer. */\n dimmer: customPropTypes.itemShorthand,\n\n /** An image can sit to the left or right of other content. */\n floated: PropTypes.oneOf(SUI.FLOATS),\n\n /** An image can take up the width of its container. */\n fluid: customPropTypes.every([PropTypes.bool, customPropTypes.disallow(['size'])]),\n\n /** An image can be hidden. */\n hidden: PropTypes.bool,\n\n /** Renders the Image as an tag with this href. */\n href: PropTypes.string,\n\n /** An image may appear inline. */\n inline: PropTypes.bool,\n\n /** Shorthand for Label. */\n label: customPropTypes.itemShorthand,\n\n /** An image may appear rounded. */\n rounded: PropTypes.bool,\n\n /** An image may appear at different sizes. */\n size: PropTypes.oneOf(SUI.SIZES),\n\n /** An image can specify that it needs an additional spacing to separate it from nearby content. */\n spaced: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['left', 'right'])]),\n\n /** Whether or not to add the ui className. */\n ui: PropTypes.bool,\n\n /** An image can specify its vertical alignment. */\n verticalAlign: PropTypes.oneOf(SUI.VERTICAL_ALIGNMENTS),\n\n /** An image can render wrapped in a `div.ui.image` as alternative HTML markup. */\n wrapped: PropTypes.bool\n} : {};\nImage.defaultProps = {\n as: 'img',\n ui: true\n};\nImage.create = createShorthandFactory(Image, function (value) {\n return {\n src: value\n };\n});\nexport default Image;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport cx from 'clsx';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { childrenUtils, createShorthandFactory, customPropTypes, getElementType, getUnhandledProps } from '../../lib';\n\nfunction LabelDetail(props) {\n var children = props.children,\n className = props.className,\n content = props.content;\n var classes = cx('detail', className);\n var rest = getUnhandledProps(LabelDetail, props);\n var ElementType = getElementType(LabelDetail, props);\n return /*#__PURE__*/React.createElement(ElementType, _extends({}, rest, {\n className: classes\n }), childrenUtils.isNil(children) ? content : children);\n}\n\nLabelDetail.handledProps = [\"as\", \"children\", \"className\", \"content\"];\nLabelDetail.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /** An element type to render as (string or function). */\n as: PropTypes.elementType,\n\n /** Primary content. */\n children: PropTypes.node,\n\n /** Additional classes. */\n className: PropTypes.string,\n\n /** Shorthand for primary content. */\n content: customPropTypes.contentShorthand\n} : {};\nLabelDetail.create = createShorthandFactory(LabelDetail, function (val) {\n return {\n content: val\n };\n});\nexport default LabelDetail;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport cx from 'clsx';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { childrenUtils, customPropTypes, getElementType, getUnhandledProps, SUI, useKeyOnly } from '../../lib';\n/**\n * A label can be grouped.\n */\n\nfunction LabelGroup(props) {\n var children = props.children,\n circular = props.circular,\n className = props.className,\n color = props.color,\n content = props.content,\n size = props.size,\n tag = props.tag;\n var classes = cx('ui', color, size, useKeyOnly(circular, 'circular'), useKeyOnly(tag, 'tag'), 'labels', className);\n var rest = getUnhandledProps(LabelGroup, props);\n var ElementType = getElementType(LabelGroup, props);\n return /*#__PURE__*/React.createElement(ElementType, _extends({}, rest, {\n className: classes\n }), childrenUtils.isNil(children) ? content : children);\n}\n\nLabelGroup.handledProps = [\"as\", \"children\", \"circular\", \"className\", \"color\", \"content\", \"size\", \"tag\"];\nLabelGroup.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /** An element type to render as (string or function). */\n as: PropTypes.elementType,\n\n /** Primary content. */\n children: PropTypes.node,\n\n /** Labels can share shapes. */\n circular: PropTypes.bool,\n\n /** Additional classes. */\n className: PropTypes.string,\n\n /** Label group can share colors together. */\n color: PropTypes.oneOf(SUI.COLORS),\n\n /** Shorthand for primary content. */\n content: customPropTypes.contentShorthand,\n\n /** Label group can share sizes together. */\n size: PropTypes.oneOf(SUI.SIZES),\n\n /** Label group can share tag formatting. */\n tag: PropTypes.bool\n} : {};\nexport default LabelGroup;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport _isUndefined from \"lodash-es/isUndefined\";\nimport _invoke from \"lodash-es/invoke\";\nimport cx from 'clsx';\nimport PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport { childrenUtils, createShorthandFactory, customPropTypes, getElementType, getUnhandledProps, SUI, useKeyOnly, useKeyOrValueAndKey, useValueAndKey } from '../../lib';\nimport Icon from '../Icon/Icon';\nimport Image from '../Image/Image';\nimport LabelDetail from './LabelDetail';\nimport LabelGroup from './LabelGroup';\n/**\n * A label displays content classification.\n */\n\nvar Label = /*#__PURE__*/function (_Component) {\n _inheritsLoose(Label, _Component);\n\n function Label() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n\n _this.handleClick = function (e) {\n var onClick = _this.props.onClick;\n if (onClick) onClick(e, _this.props);\n };\n\n _this.handleIconOverrides = function (predefinedProps) {\n return {\n onClick: function onClick(e) {\n _invoke(predefinedProps, 'onClick', e);\n\n _invoke(_this.props, 'onRemove', e, _this.props);\n }\n };\n };\n\n return _this;\n }\n\n var _proto = Label.prototype;\n\n _proto.render = function render() {\n var _this$props = this.props,\n active = _this$props.active,\n attached = _this$props.attached,\n basic = _this$props.basic,\n children = _this$props.children,\n circular = _this$props.circular,\n className = _this$props.className,\n color = _this$props.color,\n content = _this$props.content,\n corner = _this$props.corner,\n detail = _this$props.detail,\n empty = _this$props.empty,\n floating = _this$props.floating,\n horizontal = _this$props.horizontal,\n icon = _this$props.icon,\n image = _this$props.image,\n onRemove = _this$props.onRemove,\n pointing = _this$props.pointing,\n prompt = _this$props.prompt,\n removeIcon = _this$props.removeIcon,\n ribbon = _this$props.ribbon,\n size = _this$props.size,\n tag = _this$props.tag;\n var pointingClass = pointing === true && 'pointing' || (pointing === 'left' || pointing === 'right') && pointing + \" pointing\" || (pointing === 'above' || pointing === 'below') && \"pointing \" + pointing;\n var classes = cx('ui', color, pointingClass, size, useKeyOnly(active, 'active'), useKeyOnly(basic, 'basic'), useKeyOnly(circular, 'circular'), useKeyOnly(empty, 'empty'), useKeyOnly(floating, 'floating'), useKeyOnly(horizontal, 'horizontal'), useKeyOnly(image === true, 'image'), useKeyOnly(prompt, 'prompt'), useKeyOnly(tag, 'tag'), useKeyOrValueAndKey(corner, 'corner'), useKeyOrValueAndKey(ribbon, 'ribbon'), useValueAndKey(attached, 'attached'), 'label', className);\n var rest = getUnhandledProps(Label, this.props);\n var ElementType = getElementType(Label, this.props);\n\n if (!childrenUtils.isNil(children)) {\n return /*#__PURE__*/React.createElement(ElementType, _extends({}, rest, {\n className: classes,\n onClick: this.handleClick\n }), children);\n }\n\n var removeIconShorthand = _isUndefined(removeIcon) ? 'delete' : removeIcon;\n return /*#__PURE__*/React.createElement(ElementType, _extends({\n className: classes,\n onClick: this.handleClick\n }, rest), Icon.create(icon, {\n autoGenerateKey: false\n }), typeof image !== 'boolean' && Image.create(image, {\n autoGenerateKey: false\n }), content, LabelDetail.create(detail, {\n autoGenerateKey: false\n }), onRemove && Icon.create(removeIconShorthand, {\n autoGenerateKey: false,\n overrideProps: this.handleIconOverrides\n }));\n };\n\n return Label;\n}(Component);\n\nLabel.handledProps = [\"active\", \"as\", \"attached\", \"basic\", \"children\", \"circular\", \"className\", \"color\", \"content\", \"corner\", \"detail\", \"empty\", \"floating\", \"horizontal\", \"icon\", \"image\", \"onClick\", \"onRemove\", \"pointing\", \"prompt\", \"removeIcon\", \"ribbon\", \"size\", \"tag\"];\nexport { Label as default };\nLabel.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /** An element type to render as (string or function). */\n as: PropTypes.elementType,\n\n /** A label can be active. */\n active: PropTypes.bool,\n\n /** A label can attach to a content segment. */\n attached: PropTypes.oneOf(['top', 'bottom', 'top right', 'top left', 'bottom left', 'bottom right']),\n\n /** A label can reduce its complexity. */\n basic: PropTypes.bool,\n\n /** Primary content. */\n children: PropTypes.node,\n\n /** A label can be circular. */\n circular: PropTypes.bool,\n\n /** Additional classes. */\n className: PropTypes.string,\n\n /** Color of the label. */\n color: PropTypes.oneOf(SUI.COLORS),\n\n /** Shorthand for primary content. */\n content: customPropTypes.contentShorthand,\n\n /** A label can position itself in the corner of an element. */\n corner: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['left', 'right'])]),\n\n /** Shorthand for LabelDetail. */\n detail: customPropTypes.itemShorthand,\n\n /** Formats the label as a dot. */\n empty: customPropTypes.every([PropTypes.bool, customPropTypes.demand(['circular'])]),\n\n /** Float above another element in the upper right corner. */\n floating: PropTypes.bool,\n\n /** A horizontal label is formatted to label content along-side it horizontally. */\n horizontal: PropTypes.bool,\n\n /** Shorthand for Icon. */\n icon: customPropTypes.itemShorthand,\n\n /** A label can be formatted to emphasize an image or prop can be used as shorthand for Image. */\n image: PropTypes.oneOfType([PropTypes.bool, customPropTypes.itemShorthand]),\n\n /**\n * Called on click.\n *\n * @param {SyntheticEvent} event - React's original SyntheticEvent.\n * @param {object} data - All props.\n */\n onClick: PropTypes.func,\n\n /**\n * Adds an \"x\" icon, called when \"x\" is clicked.\n *\n * @param {SyntheticEvent} event - React's original SyntheticEvent.\n * @param {object} data - All props.\n */\n onRemove: PropTypes.func,\n\n /** A label can point to content next to it. */\n pointing: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['above', 'below', 'left', 'right'])]),\n\n /** A label can prompt for an error in your forms. */\n prompt: PropTypes.bool,\n\n /** Shorthand for Icon to appear as the last child and trigger onRemove. */\n removeIcon: customPropTypes.itemShorthand,\n\n /** A label can appear as a ribbon attaching itself to an element. */\n ribbon: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['right'])]),\n\n /** A label can have different sizes. */\n size: PropTypes.oneOf(SUI.SIZES),\n\n /** A label can appear as a tag. */\n tag: PropTypes.bool\n} : {};\nLabel.Detail = LabelDetail;\nLabel.Group = LabelGroup;\nLabel.create = createShorthandFactory(Label, function (value) {\n return {\n content: value\n };\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _without from \"lodash-es/without\";\nimport cx from 'clsx';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { childrenUtils, customPropTypes, getElementType, getUnhandledProps, SUI, useKeyOnly } from '../../lib';\n/**\n * A group of segments can be formatted to appear together.\n */\n\nfunction SegmentGroup(props) {\n var children = props.children,\n className = props.className,\n compact = props.compact,\n content = props.content,\n horizontal = props.horizontal,\n piled = props.piled,\n raised = props.raised,\n size = props.size,\n stacked = props.stacked;\n var classes = cx('ui', size, useKeyOnly(compact, 'compact'), useKeyOnly(horizontal, 'horizontal'), useKeyOnly(piled, 'piled'), useKeyOnly(raised, 'raised'), useKeyOnly(stacked, 'stacked'), 'segments', className);\n var rest = getUnhandledProps(SegmentGroup, props);\n var ElementType = getElementType(SegmentGroup, props);\n return /*#__PURE__*/React.createElement(ElementType, _extends({}, rest, {\n className: classes\n }), childrenUtils.isNil(children) ? content : children);\n}\n\nSegmentGroup.handledProps = [\"as\", \"children\", \"className\", \"compact\", \"content\", \"horizontal\", \"piled\", \"raised\", \"size\", \"stacked\"];\nSegmentGroup.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /** An element type to render as (string or function). */\n as: PropTypes.elementType,\n\n /** Primary content. */\n children: PropTypes.node,\n\n /** Additional classes. */\n className: PropTypes.string,\n\n /** A segment may take up only as much space as is necessary. */\n compact: PropTypes.bool,\n\n /** Shorthand for primary content. */\n content: customPropTypes.contentShorthand,\n\n /** Formats content to be aligned horizontally. */\n horizontal: PropTypes.bool,\n\n /** Formatted to look like a pile of pages. */\n piled: PropTypes.bool,\n\n /** A segment group may be formatted to raise above the page. */\n raised: PropTypes.bool,\n\n /** A segment group can have different sizes. */\n size: PropTypes.oneOf(_without(SUI.SIZES, 'medium')),\n\n /** Formatted to show it contains multiple pages. */\n stacked: PropTypes.bool\n} : {};\nexport default SegmentGroup;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport cx from 'clsx';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { childrenUtils, customPropTypes, getElementType, getUnhandledProps } from '../../lib';\n/**\n * A placeholder segment can be inline.\n */\n\nfunction SegmentInline(props) {\n var children = props.children,\n className = props.className,\n content = props.content;\n var classes = cx('inline', className);\n var rest = getUnhandledProps(SegmentInline, props);\n var ElementType = getElementType(SegmentInline, props);\n return /*#__PURE__*/React.createElement(ElementType, _extends({}, rest, {\n className: classes\n }), childrenUtils.isNil(children) ? content : children);\n}\n\nSegmentInline.handledProps = [\"as\", \"children\", \"className\", \"content\"];\nSegmentInline.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /** An element type to render as (string or function). */\n as: PropTypes.elementType,\n\n /** Primary content. */\n children: PropTypes.node,\n\n /** Additional classes. */\n className: PropTypes.string,\n\n /** Shorthand for primary content. */\n content: customPropTypes.contentShorthand\n} : {};\nexport default SegmentInline;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _without from \"lodash-es/without\";\nimport cx from 'clsx';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { childrenUtils, customPropTypes, getElementType, getUnhandledProps, SUI, useKeyOnly, useKeyOrValueAndKey, useTextAlignProp, useValueAndKey } from '../../lib';\nimport SegmentGroup from './SegmentGroup';\nimport SegmentInline from './SegmentInline';\n/**\n * A segment is used to create a grouping of related content.\n */\n\nfunction Segment(props) {\n var attached = props.attached,\n basic = props.basic,\n children = props.children,\n circular = props.circular,\n className = props.className,\n clearing = props.clearing,\n color = props.color,\n compact = props.compact,\n content = props.content,\n disabled = props.disabled,\n floated = props.floated,\n inverted = props.inverted,\n loading = props.loading,\n placeholder = props.placeholder,\n padded = props.padded,\n piled = props.piled,\n raised = props.raised,\n secondary = props.secondary,\n size = props.size,\n stacked = props.stacked,\n tertiary = props.tertiary,\n textAlign = props.textAlign,\n vertical = props.vertical;\n var classes = cx('ui', color, size, useKeyOnly(basic, 'basic'), useKeyOnly(circular, 'circular'), useKeyOnly(clearing, 'clearing'), useKeyOnly(compact, 'compact'), useKeyOnly(disabled, 'disabled'), useKeyOnly(inverted, 'inverted'), useKeyOnly(loading, 'loading'), useKeyOnly(placeholder, 'placeholder'), useKeyOnly(piled, 'piled'), useKeyOnly(raised, 'raised'), useKeyOnly(secondary, 'secondary'), useKeyOnly(stacked, 'stacked'), useKeyOnly(tertiary, 'tertiary'), useKeyOnly(vertical, 'vertical'), useKeyOrValueAndKey(attached, 'attached'), useKeyOrValueAndKey(padded, 'padded'), useTextAlignProp(textAlign), useValueAndKey(floated, 'floated'), 'segment', className);\n var rest = getUnhandledProps(Segment, props);\n var ElementType = getElementType(Segment, props);\n return /*#__PURE__*/React.createElement(ElementType, _extends({}, rest, {\n className: classes\n }), childrenUtils.isNil(children) ? content : children);\n}\n\nSegment.handledProps = [\"as\", \"attached\", \"basic\", \"children\", \"circular\", \"className\", \"clearing\", \"color\", \"compact\", \"content\", \"disabled\", \"floated\", \"inverted\", \"loading\", \"padded\", \"piled\", \"placeholder\", \"raised\", \"secondary\", \"size\", \"stacked\", \"tertiary\", \"textAlign\", \"vertical\"];\nSegment.Group = SegmentGroup;\nSegment.Inline = SegmentInline;\nSegment.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /** An element type to render as (string or function). */\n as: PropTypes.elementType,\n\n /** Attach segment to other content, like a header. */\n attached: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['top', 'bottom'])]),\n\n /** A basic segment has no special formatting. */\n basic: PropTypes.bool,\n\n /** Primary content. */\n children: PropTypes.node,\n\n /** A segment can be circular. */\n circular: PropTypes.bool,\n\n /** Additional classes. */\n className: PropTypes.string,\n\n /** A segment can clear floated content. */\n clearing: PropTypes.bool,\n\n /** Segment can be colored. */\n color: PropTypes.oneOf(SUI.COLORS),\n\n /** A segment may take up only as much space as is necessary. */\n compact: PropTypes.bool,\n\n /** Shorthand for primary content. */\n content: customPropTypes.contentShorthand,\n\n /** A segment may show its content is disabled. */\n disabled: PropTypes.bool,\n\n /** Segment content can be floated to the left or right. */\n floated: PropTypes.oneOf(SUI.FLOATS),\n\n /** A segment can have its colors inverted for contrast. */\n inverted: PropTypes.bool,\n\n /** A segment may show its content is being loaded. */\n loading: PropTypes.bool,\n\n /** A segment can increase its padding. */\n padded: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['very'])]),\n\n /** A segment can be used to reserve space for conditionally displayed content. */\n placeholder: PropTypes.bool,\n\n /** Formatted to look like a pile of pages. */\n piled: PropTypes.bool,\n\n /** A segment may be formatted to raise above the page. */\n raised: PropTypes.bool,\n\n /** A segment can be formatted to appear less noticeable. */\n secondary: PropTypes.bool,\n\n /** A segment can have different sizes. */\n size: PropTypes.oneOf(_without(SUI.SIZES, 'medium')),\n\n /** Formatted to show it contains multiple pages. */\n stacked: PropTypes.bool,\n\n /** A segment can be formatted to appear even less noticeable. */\n tertiary: PropTypes.bool,\n\n /** Formats content to be aligned as part of a vertical group. */\n textAlign: PropTypes.oneOf(_without(SUI.TEXT_ALIGNMENTS, 'justified')),\n\n /** Formats content to be aligned vertically. */\n vertical: PropTypes.bool\n} : {};\nexport default Segment;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport _isUndefined from \"lodash-es/isUndefined\";\nimport _startsWith from \"lodash-es/startsWith\";\nimport _filter from \"lodash-es/filter\";\nimport _isEmpty from \"lodash-es/isEmpty\";\nimport _keys from \"lodash-es/keys\";\nimport _intersection from \"lodash-es/intersection\";\nimport _has from \"lodash-es/has\";\nimport _each from \"lodash-es/each\";\nimport _invoke from \"lodash-es/invoke\";\nimport React from 'react';\n\nvar getDefaultPropName = function getDefaultPropName(prop) {\n return \"default\" + (prop[0].toUpperCase() + prop.slice(1));\n};\n/**\n * Return the auto controlled state value for a give prop. The initial value is chosen in this order:\n * - regular props\n * - then, default props\n * - then, initial state\n * - then, `checked` defaults to false\n * - then, `value` defaults to '' or [] if props.multiple\n * - else, undefined\n *\n * @param {string} propName A prop name\n * @param {object} [props] A props object\n * @param {object} [state] A state object\n * @param {boolean} [includeDefaults=false] Whether or not to heed the default props or initial state\n */\n\n\nvar getAutoControlledStateValue = function getAutoControlledStateValue(propName, props, state, includeDefaults) {\n if (includeDefaults === void 0) {\n includeDefaults = false;\n }\n\n // regular props\n var propValue = props[propName];\n if (propValue !== undefined) return propValue;\n\n if (includeDefaults) {\n // defaultProps\n var defaultProp = props[getDefaultPropName(propName)];\n if (defaultProp !== undefined) return defaultProp; // initial state - state may be null or undefined\n\n if (state) {\n var initialState = state[propName];\n if (initialState !== undefined) return initialState;\n }\n } // React doesn't allow changing from uncontrolled to controlled components,\n // default checked/value if they were not present.\n\n\n if (propName === 'checked') return false;\n if (propName === 'value') return props.multiple ? [] : ''; // otherwise, undefined\n};\n\nvar ModernAutoControlledComponent = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(ModernAutoControlledComponent, _React$Component);\n\n function ModernAutoControlledComponent() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n var _this$constructor = _this.constructor,\n autoControlledProps = _this$constructor.autoControlledProps,\n getAutoControlledStateFromProps = _this$constructor.getAutoControlledStateFromProps;\n var state = _invoke(_assertThisInitialized(_this), 'getInitialAutoControlledState', _this.props) || {};\n\n if (process.env.NODE_ENV !== 'production') {\n var _this$constructor2 = _this.constructor,\n defaultProps = _this$constructor2.defaultProps,\n name = _this$constructor2.name,\n propTypes = _this$constructor2.propTypes,\n getDerivedStateFromProps = _this$constructor2.getDerivedStateFromProps; // require usage of getAutoControlledStateFromProps()\n\n if (getDerivedStateFromProps !== ModernAutoControlledComponent.getDerivedStateFromProps) {\n /* eslint-disable-next-line no-console */\n console.error(\"Auto controlled \" + name + \" must specify a static getAutoControlledStateFromProps() instead of getDerivedStateFromProps().\");\n } // require propTypes\n\n\n _each(autoControlledProps, function (prop) {\n var defaultProp = getDefaultPropName(prop); // regular prop\n\n if (!_has(propTypes, defaultProp)) {\n console.error(name + \" is missing \\\"\" + defaultProp + \"\\\" propTypes validation for auto controlled prop \\\"\" + prop + \"\\\".\");\n } // its default prop\n\n\n if (!_has(propTypes, prop)) {\n console.error(name + \" is missing propTypes validation for auto controlled prop \\\"\" + prop + \"\\\".\");\n }\n }); // prevent autoControlledProps in defaultProps\n //\n // When setting state, auto controlled props values always win (so the parent can manage them).\n // It is not reasonable to decipher the difference between props from the parent and defaultProps.\n // Allowing defaultProps results in trySetState always deferring to the defaultProp value.\n // Auto controlled props also listed in defaultProps can never be updated.\n //\n // To set defaults for an AutoControlled prop, you can set the initial state in the\n // constructor or by using an ES7 property initializer:\n // https://babeljs.io/blog/2015/06/07/react-on-es6-plus#property-initializers\n\n\n var illegalDefaults = _intersection(autoControlledProps, _keys(defaultProps));\n\n if (!_isEmpty(illegalDefaults)) {\n console.error(['Do not set defaultProps for autoControlledProps. You can set defaults by', 'setting state in the constructor or using an ES7 property initializer', '(https://babeljs.io/blog/2015/06/07/react-on-es6-plus#property-initializers)', \"See \" + name + \" props: \\\"\" + illegalDefaults + \"\\\".\"].join(' '));\n } // prevent listing defaultProps in autoControlledProps\n //\n // Default props are automatically handled.\n // Listing defaults in autoControlledProps would result in allowing defaultDefaultValue props.\n\n\n var illegalAutoControlled = _filter(autoControlledProps, function (prop) {\n return _startsWith(prop, 'default');\n });\n\n if (!_isEmpty(illegalAutoControlled)) {\n console.error(['Do not add default props to autoControlledProps.', 'Default props are automatically handled.', \"See \" + name + \" autoControlledProps: \\\"\" + illegalAutoControlled + \"\\\".\"].join(' '));\n }\n } // Auto controlled props are copied to state.\n // Set initial state by copying auto controlled props to state.\n // Also look for the default prop for any auto controlled props (foo => defaultFoo)\n // so we can set initial values from defaults.\n\n\n var initialAutoControlledState = autoControlledProps.reduce(function (acc, prop) {\n acc[prop] = getAutoControlledStateValue(prop, _this.props, state, true);\n\n if (process.env.NODE_ENV !== 'production') {\n var defaultPropName = getDefaultPropName(prop);\n var _name = _this.constructor.name; // prevent defaultFoo={} along side foo={}\n\n if (!_isUndefined(_this.props[defaultPropName]) && !_isUndefined(_this.props[prop])) {\n console.error(_name + \" prop \\\"\" + prop + \"\\\" is auto controlled. Specify either \" + defaultPropName + \" or \" + prop + \", but not both.\");\n }\n }\n\n return acc;\n }, {});\n _this.state = _extends({}, state, initialAutoControlledState, {\n autoControlledProps: autoControlledProps,\n getAutoControlledStateFromProps: getAutoControlledStateFromProps\n });\n return _this;\n }\n\n ModernAutoControlledComponent.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) {\n var autoControlledProps = state.autoControlledProps,\n getAutoControlledStateFromProps = state.getAutoControlledStateFromProps; // Solve the next state for autoControlledProps\n\n var newStateFromProps = autoControlledProps.reduce(function (acc, prop) {\n var isNextDefined = !_isUndefined(props[prop]); // if next is defined then use its value\n\n if (isNextDefined) acc[prop] = props[prop];\n return acc;\n }, {}); // Due to the inheritance of the AutoControlledComponent we should call its\n // getAutoControlledStateFromProps() and merge it with the existing state\n\n if (getAutoControlledStateFromProps) {\n var computedState = getAutoControlledStateFromProps(props, _extends({}, state, newStateFromProps), state); // We should follow the idea of getDerivedStateFromProps() and return only modified state\n\n return _extends({}, newStateFromProps, computedState);\n }\n\n return newStateFromProps;\n }\n /**\n * Override this method to use getDerivedStateFromProps() in child components.\n */\n ;\n\n ModernAutoControlledComponent.getAutoControlledStateFromProps = function getAutoControlledStateFromProps() {\n return null;\n };\n\n return ModernAutoControlledComponent;\n}(React.Component);\n\nexport { ModernAutoControlledComponent as default };","import _find from \"lodash-es/find\";\nimport _some from \"lodash-es/some\";\nimport { Children } from 'react';\n/**\n * Determine if child by type exists in children.\n * @param {Object} children The children prop of a component.\n * @param {string|Function} type An html tag name string or React component.\n * @returns {Boolean}\n */\n\nexport var someByType = function someByType(children, type) {\n return _some(Children.toArray(children), {\n type: type\n });\n};\n/**\n * Find child by type.\n * @param {Object} children The children prop of a component.\n * @param {string|Function} type An html tag name string or React component.\n * @returns {undefined|Object}\n */\n\nexport var findByType = function findByType(children, type) {\n return _find(Children.toArray(children), {\n type: type\n });\n};\n/**\n * Tests if children are nil in React and Preact.\n * @param {Object} children The children prop of a component.\n * @returns {Boolean}\n */\n\nexport var isNil = function isNil(children) {\n return children === null || children === undefined || Array.isArray(children) && children.length === 0;\n};","export var numberToWordMap = {\n 1: 'one',\n 2: 'two',\n 3: 'three',\n 4: 'four',\n 5: 'five',\n 6: 'six',\n 7: 'seven',\n 8: 'eight',\n 9: 'nine',\n 10: 'ten',\n 11: 'eleven',\n 12: 'twelve',\n 13: 'thirteen',\n 14: 'fourteen',\n 15: 'fifteen',\n 16: 'sixteen'\n};\n/**\n * Return the number word for numbers 1-16.\n * Returns strings or numbers as is if there is no corresponding word.\n * Returns an empty string if value is not a string or number.\n * @param {string|number} value The value to convert to a word.\n * @returns {string}\n */\n\nexport function numberToWord(value) {\n var type = typeof value;\n\n if (type === 'string' || type === 'number') {\n return numberToWordMap[value] || value;\n }\n\n return '';\n}","import { numberToWord } from './numberToWord';\n/*\n * There are 3 prop patterns used to build up the className for a component.\n * Each utility here is meant for use in a classnames() argument.\n *\n * There is no util for valueOnly() because it would simply return val.\n * Use the prop value inline instead.\n *
\n *
\n *\n * \n *
\n *\n * @example\n * \n *
\n */\n\nexport var useWidthProp = function useWidthProp(val, widthClass, canEqual) {\n if (widthClass === void 0) {\n widthClass = '';\n }\n\n if (canEqual === void 0) {\n canEqual = false;\n }\n\n if (canEqual && val === 'equal') {\n return 'equal width';\n }\n\n var valType = typeof val;\n\n if ((valType === 'string' || valType === 'number') && widthClass) {\n return numberToWord(val) + \" \" + widthClass;\n }\n\n return numberToWord(val);\n};","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\nfunction baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n}\n\nexport default baseInRange;\n","import baseInRange from './_baseInRange.js';\nimport toFinite from './toFinite.js';\nimport toNumber from './toNumber.js';\n\n/**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\nfunction inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n}\n\nexport default inRange;\n","/**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\nfunction head(array) {\n return (array && array.length) ? array[0] : undefined;\n}\n\nexport default head;\n","import _inRange from \"lodash-es/inRange\";\nimport _first from \"lodash-es/first\";\nimport _invoke from \"lodash-es/invoke\";\nimport _isNil from \"lodash-es/isNil\";\nimport _some from \"lodash-es/some\";\n\n/**\n * Determines if a click's coordinates are within the bounds of a node.\n *\n * @see https://github.com/Semantic-Org/Semantic-UI-React/pull/2384\n *\n * @param {object} node - A DOM node.\n * @param {object} e - A SyntheticEvent or DOM Event.\n * @returns {boolean}\n */\nvar doesNodeContainClick = function doesNodeContainClick(node, e) {\n if (_some([e, node], _isNil)) return false; // if there is an e.target and it is in the document, use a simple node.contains() check\n\n if (e.target) {\n _invoke(e.target, 'setAttribute', 'data-suir-click-target', true);\n\n if (document.querySelector('[data-suir-click-target=true]')) {\n _invoke(e.target, 'removeAttribute', 'data-suir-click-target');\n\n return node.contains(e.target);\n }\n } // Below logic handles cases where the e.target is no longer in the document.\n // The result of the click likely has removed the e.target node.\n // Instead of node.contains(), we'll identify the click by X/Y position.\n // return early if the event properties aren't available\n // prevent measuring the node and repainting if we don't need to\n\n\n var clientX = e.clientX,\n clientY = e.clientY;\n if (_some([clientX, clientY], _isNil)) return false; // false if the node is not visible\n\n var clientRects = node.getClientRects(); // Heads Up!\n // getClientRects returns a DOMRectList, not an array nor a plain object\n // We explicitly avoid _.isEmpty and check .length to cover all possible shapes\n\n if (!node.offsetWidth || !node.offsetHeight || !clientRects || !clientRects.length) return false; // false if the node doesn't have a valid bounding rect\n\n var _first2 = _first(clientRects),\n top = _first2.top,\n bottom = _first2.bottom,\n left = _first2.left,\n right = _first2.right;\n\n if (_some([top, bottom, left, right], _isNil)) return false; // we add a small decimal to the upper bound just to make it inclusive\n // don't add an whole pixel (1) as the event/node values may be decimal sensitive\n\n return _inRange(clientY, top, bottom + 0.001) && _inRange(clientX, left, right + 0.001);\n};\n\nexport default doesNodeContainClick;","import baseUniq from './_baseUniq.js';\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n}\n\nexport default uniq;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nexport default isNumber;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]';\n\n/**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\nfunction isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n}\n\nexport default isBoolean;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _uniq from \"lodash-es/uniq\";\nimport _isArray from \"lodash-es/isArray\";\nimport _isPlainObject from \"lodash-es/isPlainObject\";\nimport _isFunction from \"lodash-es/isFunction\";\nimport _isNumber from \"lodash-es/isNumber\";\nimport _isString from \"lodash-es/isString\";\nimport _isBoolean from \"lodash-es/isBoolean\";\nimport _isNil from \"lodash-es/isNil\";\nimport cx from 'clsx';\nimport * as React from 'react';\nvar DEPRECATED_CALLS = {}; // ============================================================\n// Factories\n// ============================================================\n\n/**\n * A more robust React.createElement. It can create elements from primitive values.\n *\n * @param {function|string} Component A ReactClass or string\n * @param {function} mapValueToProps A function that maps a primitive value to the Component props\n * @param {string|object|function} val The value to create a ReactElement from\n * @param {Object} [options={}]\n * @param {object} [options.defaultProps={}] Default props object\n * @param {object|function} [options.overrideProps={}] Override props object or function (called with regular props)\n * @param {boolean} [options.autoGenerateKey=true] Whether or not automatic key generation is allowed\n * @returns {object|null}\n */\n\nexport function createShorthand(Component, mapValueToProps, val, options) {\n if (options === void 0) {\n options = {};\n }\n\n if (typeof Component !== 'function' && typeof Component !== 'string') {\n throw new Error('createShorthand() Component must be a string or function.');\n } // short circuit noop values\n\n\n if (_isNil(val) || _isBoolean(val)) {\n return null;\n }\n\n var valIsString = _isString(val);\n\n var valIsNumber = _isNumber(val);\n\n var valIsFunction = _isFunction(val);\n\n var valIsReactElement = /*#__PURE__*/React.isValidElement(val);\n\n var valIsPropsObject = _isPlainObject(val);\n\n var valIsPrimitiveValue = valIsString || valIsNumber || _isArray(val); // unhandled type return null\n\n /* eslint-disable no-console */\n\n\n if (!valIsFunction && !valIsReactElement && !valIsPropsObject && !valIsPrimitiveValue) {\n if (process.env.NODE_ENV !== 'production') {\n console.error(['Shorthand value must be a string|number|array|object|ReactElement|function.', ' Use null|undefined|boolean for none', \" Received \" + typeof val + \".\"].join(''));\n }\n\n return null;\n }\n /* eslint-enable no-console */\n // ----------------------------------------\n // Build up props\n // ----------------------------------------\n\n\n var _options = options,\n _options$defaultProps = _options.defaultProps,\n defaultProps = _options$defaultProps === void 0 ? {} : _options$defaultProps; // User's props\n\n var usersProps = valIsReactElement && val.props || valIsPropsObject && val || valIsPrimitiveValue && mapValueToProps(val); // Override props\n\n var _options2 = options,\n _options2$overridePro = _options2.overrideProps,\n overrideProps = _options2$overridePro === void 0 ? {} : _options2$overridePro;\n overrideProps = _isFunction(overrideProps) ? overrideProps(_extends({}, defaultProps, usersProps)) : overrideProps; // Merge props\n\n /* eslint-disable react/prop-types */\n\n var props = _extends({}, defaultProps, usersProps, overrideProps); // Merge className\n\n\n if (defaultProps.className || overrideProps.className || usersProps.className) {\n var mergedClassesNames = cx(defaultProps.className, overrideProps.className, usersProps.className);\n props.className = _uniq(mergedClassesNames.split(' ')).join(' ');\n } // Merge style\n\n\n if (defaultProps.style || overrideProps.style || usersProps.style) {\n props.style = _extends({}, defaultProps.style, usersProps.style, overrideProps.style);\n } // ----------------------------------------\n // Get key\n // ----------------------------------------\n // Use key, childKey, or generate key\n\n\n if (_isNil(props.key)) {\n var childKey = props.childKey;\n var _options3 = options,\n _options3$autoGenerat = _options3.autoGenerateKey,\n autoGenerateKey = _options3$autoGenerat === void 0 ? true : _options3$autoGenerat;\n\n if (!_isNil(childKey)) {\n // apply and consume the childKey\n props.key = typeof childKey === 'function' ? childKey(props) : childKey;\n delete props.childKey;\n } else if (autoGenerateKey && (valIsString || valIsNumber)) {\n // use string/number shorthand values as the key\n props.key = val;\n }\n } // ----------------------------------------\n // Create Element\n // ----------------------------------------\n // Clone ReactElements\n\n\n if (valIsReactElement) {\n return /*#__PURE__*/React.cloneElement(val, props);\n }\n\n if (typeof props.children === 'function') {\n return props.children(Component, _extends({}, props, {\n children: undefined\n }));\n } // Create ReactElements from built up props\n\n\n if (valIsPrimitiveValue || valIsPropsObject) {\n return /*#__PURE__*/React.createElement(Component, props);\n } // Call functions with args similar to createElement()\n // TODO: V3 remove the implementation\n\n\n if (valIsFunction) {\n if (process.env.NODE_ENV !== 'production') {\n if (!DEPRECATED_CALLS[Component]) {\n DEPRECATED_CALLS[Component] = true; // eslint-disable-next-line no-console\n\n console.warn(\"Warning: There is a deprecated shorthand function usage for \\\"\" + Component + \"\\\". It is deprecated and will be removed in v3 release. Please follow our upgrade guide: https://github.com/Semantic-Org/Semantic-UI-React/pull/4029\");\n }\n }\n\n return val(Component, props, props.children);\n }\n /* eslint-enable react/prop-types */\n\n} // ============================================================\n// Factory Creators\n// ============================================================\n\n/**\n * Creates a `createShorthand` function that is waiting for a value and options.\n *\n * @param {function|string} Component A ReactClass or string\n * @param {function} mapValueToProps A function that maps a primitive value to the Component props\n * @returns {function} A shorthand factory function waiting for `val` and `defaultProps`.\n */\n\nexport function createShorthandFactory(Component, mapValueToProps) {\n if (typeof Component !== 'function' && typeof Component !== 'string') {\n throw new Error('createShorthandFactory() Component must be a string or function.');\n }\n\n return function (val, options) {\n return createShorthand(Component, mapValueToProps, val, options);\n };\n} // ============================================================\n// HTML Factories\n// ============================================================\n\nexport var createHTMLDivision = /* #__PURE__ */createShorthandFactory('div', function (val) {\n return {\n children: val\n };\n});\nexport var createHTMLIframe = /* #__PURE__ */createShorthandFactory('iframe', function (src) {\n return {\n src: src\n };\n});\nexport var createHTMLImage = /* #__PURE__ */createShorthandFactory('img', function (val) {\n return {\n src: val\n };\n});\nexport var createHTMLInput = /* #__PURE__ */createShorthandFactory('input', function (val) {\n return {\n type: val\n };\n});\nexport var createHTMLLabel = /* #__PURE__ */createShorthandFactory('label', function (val) {\n return {\n children: val\n };\n});\nexport var createHTMLParagraph = /* #__PURE__ */createShorthandFactory('p', function (val) {\n return {\n children: val\n };\n});","/**\n * Returns a createElement() type based on the props of the Component.\n * Useful for calculating what type a component should render as.\n *\n * @param {function} Component A function or ReactClass.\n * @param {object} props A ReactElement props object\n * @param {function} [getDefault] A function that returns a default element type.\n * @returns {string|function} A ReactElement type\n */\nfunction getElementType(Component, props, getDefault) {\n var _Component$defaultPro = Component.defaultProps,\n defaultProps = _Component$defaultPro === void 0 ? {} : _Component$defaultPro; // ----------------------------------------\n // user defined \"as\" element type\n\n if (props.as && props.as !== defaultProps.as) return props.as; // ----------------------------------------\n // computed default element type\n\n if (getDefault) {\n var computedDefault = getDefault();\n if (computedDefault) return computedDefault;\n } // ----------------------------------------\n // infer anchor links\n\n\n if (props.href) return 'a'; // ----------------------------------------\n // use defaultProp or 'div'\n\n return defaultProps.as || 'div';\n}\n\nexport default getElementType;","/**\n * Returns an object consisting of props beyond the scope of the Component.\n * Useful for getting and spreading unknown props from the user.\n * @param {function} Component A function or ReactClass.\n * @param {object} props A ReactElement props object\n * @returns {{}} A shallow copy of the prop object\n */\nvar getUnhandledProps = function getUnhandledProps(Component, props) {\n // Note that `handledProps` are generated automatically during build with `babel-plugin-transform-react-handled-props`\n var _Component$handledPro = Component.handledProps,\n handledProps = _Component$handledPro === void 0 ? [] : _Component$handledPro;\n return Object.keys(props).reduce(function (acc, prop) {\n if (prop === 'childKey') return acc;\n if (handledProps.indexOf(prop) === -1) acc[prop] = props[prop];\n return acc;\n }, {});\n};\n\nexport default getUnhandledProps;","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n","import identity from './identity.js';\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nexport default castFunction;\n","import arrayEach from './_arrayEach.js';\nimport baseEach from './_baseEach.js';\nimport castFunction from './_castFunction.js';\nimport isArray from './isArray.js';\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nexport default forEach;\n","import _includes from \"lodash-es/includes\";\nimport _forEach from \"lodash-es/forEach\";\nexport var htmlInputAttrs = [// REACT\n'selected', 'defaultValue', 'defaultChecked', // LIMITED HTML PROPS\n'accept', 'autoCapitalize', 'autoComplete', 'autoCorrect', 'autoFocus', 'checked', 'disabled', 'enterKeyHint', 'form', 'id', 'inputMode', 'lang', 'list', 'max', 'maxLength', 'min', 'minLength', 'multiple', 'name', 'pattern', 'placeholder', 'readOnly', 'required', 'step', 'title', 'type', 'value'];\nexport var htmlInputEvents = [// EVENTS\n// keyboard\n'onKeyDown', 'onKeyPress', 'onKeyUp', // focus\n'onFocus', 'onBlur', // form\n'onChange', 'onInput', // mouse\n'onClick', 'onContextMenu', 'onDrag', 'onDragEnd', 'onDragEnter', 'onDragExit', 'onDragLeave', 'onDragOver', 'onDragStart', 'onDrop', 'onMouseDown', 'onMouseEnter', 'onMouseLeave', 'onMouseMove', 'onMouseOut', 'onMouseOver', 'onMouseUp', // selection\n'onSelect', // touch\n'onTouchCancel', 'onTouchEnd', 'onTouchMove', 'onTouchStart'];\nexport var htmlInputProps = [].concat(htmlInputAttrs, htmlInputEvents);\nexport var htmlImageProps = ['alt', 'height', 'src', 'srcSet', 'width', 'loading'];\n/**\n * Returns an array of objects consisting of: props of html input element and rest.\n * @param {object} props A ReactElement props object\n * @param {Object} [options={}]\n * @param {Array} [options.htmlProps] An array of html input props\n * @param {boolean} [options.includeAria] Includes all input props that starts with \"aria-\"\n * @returns {[{}, {}]} An array of objects\n */\n\nexport var partitionHTMLProps = function partitionHTMLProps(props, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$htmlProps = _options.htmlProps,\n htmlProps = _options$htmlProps === void 0 ? htmlInputProps : _options$htmlProps,\n _options$includeAria = _options.includeAria,\n includeAria = _options$includeAria === void 0 ? true : _options$includeAria;\n var inputProps = {};\n var rest = {};\n\n _forEach(props, function (val, prop) {\n var possibleAria = includeAria && (/^aria-.*$/.test(prop) || prop === 'role');\n var target = _includes(htmlProps, prop) || possibleAria ? inputProps : rest;\n target[prop] = val;\n });\n\n return [inputProps, rest];\n};","import _isNil from \"lodash-es/isNil\";\nvar hasDocument = typeof document === 'object' && document !== null;\nvar hasWindow = typeof window === 'object' && window !== null && window.self === window; // eslint-disable-next-line no-confusing-arrow\n\nvar isBrowser = function isBrowser() {\n return !_isNil(isBrowser.override) ? isBrowser.override : hasDocument && hasWindow;\n};\n\nexport default isBrowser;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport cx from 'clsx';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { childrenUtils, customPropTypes, getElementType, getUnhandledProps, useKeyOnly } from '../../lib';\n/**\n * A dimmable sub-component for Dimmer.\n */\n\nfunction DimmerDimmable(props) {\n var blurring = props.blurring,\n className = props.className,\n children = props.children,\n content = props.content,\n dimmed = props.dimmed;\n var classes = cx(useKeyOnly(blurring, 'blurring'), useKeyOnly(dimmed, 'dimmed'), 'dimmable', className);\n var rest = getUnhandledProps(DimmerDimmable, props);\n var ElementType = getElementType(DimmerDimmable, props);\n return /*#__PURE__*/React.createElement(ElementType, _extends({}, rest, {\n className: classes\n }), childrenUtils.isNil(children) ? content : children);\n}\n\nDimmerDimmable.handledProps = [\"as\", \"blurring\", \"children\", \"className\", \"content\", \"dimmed\"];\nDimmerDimmable.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /** An element type to render as (string or function). */\n as: PropTypes.elementType,\n\n /** A dimmable element can blur its contents. */\n blurring: PropTypes.bool,\n\n /** Primary content. */\n children: PropTypes.node,\n\n /** Additional classes. */\n className: PropTypes.string,\n\n /** Shorthand for primary content. */\n content: customPropTypes.contentShorthand,\n\n /** Controls whether or not the dim is displayed. */\n dimmed: PropTypes.bool\n} : {};\nexport default DimmerDimmable;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport _invoke from \"lodash-es/invoke\";\nimport { Ref } from '@fluentui/react-component-ref';\nimport cx from 'clsx';\nimport PropTypes from 'prop-types';\nimport React, { Component, createRef } from 'react';\nimport { childrenUtils, customPropTypes, doesNodeContainClick, getElementType, getUnhandledProps, useKeyOnly, useVerticalAlignProp } from '../../lib';\n/**\n * An inner element for a Dimmer.\n */\n\nvar DimmerInner = /*#__PURE__*/function (_Component) {\n _inheritsLoose(DimmerInner, _Component);\n\n function DimmerInner() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n _this.containerRef = /*#__PURE__*/createRef();\n _this.contentRef = /*#__PURE__*/createRef();\n\n _this.handleClick = function (e) {\n var contentRef = _this.contentRef.current;\n\n _invoke(_this.props, 'onClick', e, _this.props);\n\n if (contentRef && contentRef !== e.target && doesNodeContainClick(contentRef, e)) {\n return;\n }\n\n _invoke(_this.props, 'onClickOutside', e, _this.props);\n };\n\n return _this;\n }\n\n var _proto = DimmerInner.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var active = this.props.active;\n this.toggleStyles(active);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var currentActive = this.props.active;\n var prevActive = prevProps.active;\n if (prevActive !== currentActive) this.toggleStyles(currentActive);\n };\n\n _proto.toggleStyles = function toggleStyles(active) {\n var containerRef = this.containerRef.current;\n if (!containerRef || !containerRef.style) return;\n\n if (active) {\n containerRef.style.setProperty('display', 'flex', 'important');\n } else {\n containerRef.style.removeProperty('display');\n }\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n active = _this$props.active,\n children = _this$props.children,\n className = _this$props.className,\n content = _this$props.content,\n disabled = _this$props.disabled,\n inverted = _this$props.inverted,\n page = _this$props.page,\n simple = _this$props.simple,\n verticalAlign = _this$props.verticalAlign;\n var classes = cx('ui', useKeyOnly(active, 'active transition visible'), useKeyOnly(disabled, 'disabled'), useKeyOnly(inverted, 'inverted'), useKeyOnly(page, 'page'), useKeyOnly(simple, 'simple'), useVerticalAlignProp(verticalAlign), 'dimmer', className);\n var rest = getUnhandledProps(DimmerInner, this.props);\n var ElementType = getElementType(DimmerInner, this.props);\n var childrenContent = childrenUtils.isNil(children) ? content : children;\n return /*#__PURE__*/React.createElement(Ref, {\n innerRef: this.containerRef\n }, /*#__PURE__*/React.createElement(ElementType, _extends({}, rest, {\n className: classes,\n onClick: this.handleClick\n }), childrenContent && /*#__PURE__*/React.createElement(\"div\", {\n className: \"content\",\n ref: this.contentRef\n }, childrenContent)));\n };\n\n return DimmerInner;\n}(Component);\n\nDimmerInner.handledProps = [\"active\", \"as\", \"children\", \"className\", \"content\", \"disabled\", \"inverted\", \"onClick\", \"onClickOutside\", \"page\", \"simple\", \"verticalAlign\"];\nexport { DimmerInner as default };\nDimmerInner.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /** An element type to render as (string or function). */\n as: PropTypes.elementType,\n\n /** An active dimmer will dim its parent container. */\n active: PropTypes.bool,\n\n /** Primary content. */\n children: PropTypes.node,\n\n /** Additional classes. */\n className: PropTypes.string,\n\n /** Shorthand for primary content. */\n content: customPropTypes.contentShorthand,\n\n /** A disabled dimmer cannot be activated */\n disabled: PropTypes.bool,\n\n /**\n * Called on click.\n *\n * @param {SyntheticEvent} event - React's original SyntheticEvent.\n * @param {object} data - All props.\n */\n onClick: PropTypes.func,\n\n /**\n * Handles click outside Dimmer's content, but inside Dimmer area.\n *\n * @param {SyntheticEvent} event - React's original SyntheticEvent.\n * @param {object} data - All props.\n */\n onClickOutside: PropTypes.func,\n\n /** A dimmer can be formatted to have its colors inverted. */\n inverted: PropTypes.bool,\n\n /** A dimmer can be formatted to be fixed to the page. */\n page: PropTypes.bool,\n\n /** A dimmer can be controlled with simple prop. */\n simple: PropTypes.bool,\n\n /** A dimmer can have its content top or bottom aligned. */\n verticalAlign: PropTypes.oneOf(['bottom', 'top'])\n} : {};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport { createShorthandFactory, getUnhandledProps, isBrowser } from '../../lib';\nimport Portal from '../../addons/Portal';\nimport DimmerDimmable from './DimmerDimmable';\nimport DimmerInner from './DimmerInner';\n/**\n * A dimmer hides distractions to focus attention on particular content.\n */\n\nvar Dimmer = /*#__PURE__*/function (_Component) {\n _inheritsLoose(Dimmer, _Component);\n\n function Dimmer() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n\n _this.handlePortalMount = function () {\n if (!isBrowser()) return; // Heads up, IE doesn't support second argument in add()\n\n document.body.classList.add('dimmed');\n document.body.classList.add('dimmable');\n };\n\n _this.handlePortalUnmount = function () {\n if (!isBrowser()) return; // Heads up, IE doesn't support second argument in add()\n\n document.body.classList.remove('dimmed');\n document.body.classList.remove('dimmable');\n };\n\n return _this;\n }\n\n var _proto = Dimmer.prototype;\n\n _proto.render = function render() {\n var _this$props = this.props,\n active = _this$props.active,\n page = _this$props.page;\n var rest = getUnhandledProps(Dimmer, this.props);\n\n if (page) {\n return /*#__PURE__*/React.createElement(Portal, {\n closeOnEscape: false,\n closeOnDocumentClick: false,\n onMount: this.handlePortalMount,\n onUnmount: this.handlePortalUnmount,\n open: active,\n openOnTriggerClick: false\n }, /*#__PURE__*/React.createElement(DimmerInner, _extends({}, rest, {\n active: active,\n page: page\n })));\n }\n\n return /*#__PURE__*/React.createElement(DimmerInner, _extends({}, rest, {\n active: active,\n page: page\n }));\n };\n\n return Dimmer;\n}(Component);\n\nDimmer.handledProps = [\"active\", \"page\"];\nexport { Dimmer as default };\nDimmer.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /** An active dimmer will dim its parent container. */\n active: PropTypes.bool,\n\n /** A dimmer can be formatted to be fixed to the page. */\n page: PropTypes.bool\n} : {};\nDimmer.Dimmable = DimmerDimmable;\nDimmer.Inner = DimmerInner;\nDimmer.create = createShorthandFactory(Dimmer, function (value) {\n return {\n content: value\n };\n});","//\n\nmodule.exports = function shallowEqual(objA, objB, compare, compareContext) {\n var ret = compare ? compare.call(compareContext, objA, objB) : void 0;\n\n if (ret !== void 0) {\n return !!ret;\n }\n\n if (objA === objB) {\n return true;\n }\n\n if (typeof objA !== \"object\" || !objA || typeof objB !== \"object\" || !objB) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);\n\n // Test for A's keys different from B.\n for (var idx = 0; idx < keysA.length; idx++) {\n var key = keysA[idx];\n\n if (!bHasOwnProperty(key)) {\n return false;\n }\n\n var valueA = objA[key];\n var valueB = objB[key];\n\n ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n\n if (ret === false || (ret === void 0 && valueA !== valueB)) {\n return false;\n }\n }\n\n return true;\n};\n","var simplify = require('simplify-geometry')\n\nmodule.exports = function (geojson, tolerance, dontClone) {\n if (!dontClone) geojson = JSON.parse(JSON.stringify(geojson)) // clone obj\n if (geojson.features) return simplifyFeatureCollection(geojson, tolerance)\n else if (geojson.type && geojson.type === 'Feature') return simplifyFeature(geojson, tolerance)\n else return new Error('FeatureCollection or individual Feature required')\n}\n\nmodule.exports.simplify = function (coordinates, tolerance) {\n return simplify(coordinates, tolerance)\n}\n\n// modifies in-place\nfunction simplifyFeature (feat, tolerance) {\n var geom = feat.geometry\n var type = geom.type\n if (type === 'LineString') {\n geom.coordinates = module.exports.simplify(geom.coordinates, tolerance)\n } else if (type === 'Polygon' || type === 'MultiLineString') {\n for (var j = 0; j < geom.coordinates.length; j++) {\n geom.coordinates[j] = module.exports.simplify(geom.coordinates[j], tolerance)\n }\n } else if (type === 'MultiPolygon') {\n for (var k = 0; k < geom.coordinates.length; k++) {\n for (var l = 0; l < geom.coordinates[k].length; l++) {\n geom.coordinates[k][l] = module.exports.simplify(geom.coordinates[k][l], tolerance)\n }\n }\n }\n return feat\n}\n\n// modifies in-place\nfunction simplifyFeatureCollection (fc, tolerance) {\n // process all LineString features, skip non LineStrings\n for (var i = 0; i < fc.features.length; i++) {\n fc.features[i] = simplifyFeature(fc.features[i], tolerance)\n }\n return fc\n}\n","var Line = require('./line');\n\nvar simplifyGeometry = function(points, tolerance){\n\n var dmax = 0;\n var index = 0;\n\n for (var i = 1; i <= points.length - 2; i++){\n var d = new Line(points[0], points[points.length - 1]).perpendicularDistance(points[i]);\n if (d > dmax){\n index = i;\n dmax = d;\n }\n }\n\n if (dmax > tolerance){\n var results_one = simplifyGeometry(points.slice(0, index), tolerance);\n var results_two = simplifyGeometry(points.slice(index, points.length), tolerance);\n\n var results = results_one.concat(results_two);\n\n }\n\n else if (points.length > 1) {\n\n results = [points[0], points[points.length - 1]];\n\n }\n\n else {\n\n results = [points[0]];\n\n }\n\n return results;\n\n\n}\n\nmodule.exports = simplifyGeometry;\n","var Line = function(p1, p2){\n\n this.p1 = p1;\n this.p2 = p2;\n\n};\n\nLine.prototype.rise = function() {\n\n return this.p2[1] - this.p1[1];\n\n};\n\nLine.prototype.run = function() {\n\n return this.p2[0] - this.p1[0];\n\n};\n\nLine.prototype.slope = function(){\n\n return this.rise() / this.run();\n\n};\n\nLine.prototype.yIntercept = function(){\n\n return this.p1[1] - (this.p1[0] * this.slope(this.p1, this.p2));\n\n};\n\nLine.prototype.isVertical = function() {\n\n return !isFinite(this.slope());\n\n};\n\nLine.prototype.isHorizontal = function() {\n\n return this.p1[1] == this.p2[1];\n\n};\n\nLine.prototype._perpendicularDistanceHorizontal = function(point){\n\n return Math.abs(this.p1[1] - point[1]);\n\n};\n\nLine.prototype._perpendicularDistanceVertical = function(point){\n\n return Math.abs(this.p1[0] - point[0]);\n\n};\n\nLine.prototype._perpendicularDistanceHasSlope = function(point){\n var slope = this.slope();\n var y_intercept = this.yIntercept();\n\n return Math.abs((slope * point[0]) - point[1] + y_intercept) / Math.sqrt((Math.pow(slope, 2)) + 1);\n\n};\n\nLine.prototype.perpendicularDistance = function(point){\n if (this.isVertical()) {\n\n return this._perpendicularDistanceVertical(point);\n\n }\n\n else if (this.isHorizontal()){\n\n return this._perpendicularDistanceHorizontal(point);\n\n }\n\n else {\n\n return this._perpendicularDistanceHasSlope(point);\n\n }\n\n};\n\nmodule.exports = Line;\n","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _interopRequireDefault(e) {\n return e && e.__esModule ? e : {\n \"default\": e\n };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var defineProperty = require(\"./defineProperty.js\");\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nmodule.exports = _objectSpread2, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose.js\");\nfunction _objectWithoutProperties(e, t) {\n if (null == e) return {};\n var o,\n r,\n i = objectWithoutPropertiesLoose(e, t);\n if (Object.getOwnPropertySymbols) {\n var s = Object.getOwnPropertySymbols(e);\n for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n }\n return i;\n}\nmodule.exports = _objectWithoutProperties, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (e.includes(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = newDateUTC;\n\n/**\n * Use instead of `new Date(Date.UTC(...))` to support years below 100 which doesn't work\n * otherwise due to the nature of the\n * [`Date` constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#interpretation_of_two-digit_years.\n *\n * For `Date.UTC(...)`, use `newDateUTC(...).getTime()`.\n */\nfunction newDateUTC(fullYear, month, day, hour, minute, second, millisecond) {\n var utcDate = new Date(0);\n utcDate.setUTCFullYear(fullYear, month, day);\n utcDate.setUTCHours(hour, minute, second, millisecond);\n return utcDate;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = tzIntlTimeZoneName;\n\n/**\n * Returns the formatted time zone name of the provided `timeZone` or the current\n * system time zone if omitted, accounting for DST according to the UTC value of\n * the date.\n */\nfunction tzIntlTimeZoneName(length, date, options) {\n var dtf = getDTF(length, options.timeZone, options.locale);\n return dtf.formatToParts ? partsTimeZone(dtf, date) : hackyTimeZone(dtf, date);\n}\n\nfunction partsTimeZone(dtf, date) {\n var formatted = dtf.formatToParts(date);\n\n for (var i = formatted.length - 1; i >= 0; --i) {\n if (formatted[i].type === 'timeZoneName') {\n return formatted[i].value;\n }\n }\n}\n\nfunction hackyTimeZone(dtf, date) {\n var formatted = dtf.format(date).replace(/\\u200E/g, '');\n var tzNameMatch = / [\\w-+ ]+$/.exec(formatted);\n return tzNameMatch ? tzNameMatch[0].substr(1) : '';\n} // If a locale has been provided `en-US` is used as a fallback in case it is an\n// invalid locale, otherwise the locale is left undefined to use the system locale.\n\n\nfunction getDTF(length, timeZone, locale) {\n if (locale && !locale.code) {\n throw new Error(\"date-fns-tz error: Please set a language code on the locale object imported from date-fns, e.g. `locale.code = 'en-US'`\");\n }\n\n return new Intl.DateTimeFormat(locale ? [locale.code, 'en-US'] : undefined, {\n timeZone: timeZone,\n timeZoneName: length\n });\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = tzParseTimezone;\n\nvar _index = _interopRequireDefault(require(\"../tzTokenizeDate/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../newDateUTC/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar MILLISECONDS_IN_HOUR = 3600000;\nvar MILLISECONDS_IN_MINUTE = 60000;\nvar patterns = {\n timezone: /([Z+-].*)$/,\n timezoneZ: /^(Z)$/,\n timezoneHH: /^([+-]\\d{2})$/,\n timezoneHHMM: /^([+-]\\d{2}):?(\\d{2})$/\n}; // Parse various time zone offset formats to an offset in milliseconds\n\nfunction tzParseTimezone(timezoneString, date, isUtcDate) {\n var token;\n var absoluteOffset; // Empty string\n\n if (!timezoneString) {\n return 0;\n } // Z\n\n\n token = patterns.timezoneZ.exec(timezoneString);\n\n if (token) {\n return 0;\n }\n\n var hours; // ±hh\n\n token = patterns.timezoneHH.exec(timezoneString);\n\n if (token) {\n hours = parseInt(token[1], 10);\n\n if (!validateTimezone(hours)) {\n return NaN;\n }\n\n return -(hours * MILLISECONDS_IN_HOUR);\n } // ±hh:mm or ±hhmm\n\n\n token = patterns.timezoneHHMM.exec(timezoneString);\n\n if (token) {\n hours = parseInt(token[1], 10);\n var minutes = parseInt(token[2], 10);\n\n if (!validateTimezone(hours, minutes)) {\n return NaN;\n }\n\n absoluteOffset = Math.abs(hours) * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE;\n return hours > 0 ? -absoluteOffset : absoluteOffset;\n } // IANA time zone\n\n\n if (isValidTimezoneIANAString(timezoneString)) {\n date = new Date(date || Date.now());\n var utcDate = isUtcDate ? date : toUtcDate(date);\n var offset = calcOffset(utcDate, timezoneString);\n var fixedOffset = isUtcDate ? offset : fixOffset(date, offset, timezoneString);\n return -fixedOffset;\n }\n\n return NaN;\n}\n\nfunction toUtcDate(date) {\n return (0, _index2.default)(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n}\n\nfunction calcOffset(date, timezoneString) {\n var tokens = (0, _index.default)(date, timezoneString); // ms dropped because it's not provided by tzTokenizeDate\n\n var asUTC = (0, _index2.default)(tokens[0], tokens[1] - 1, tokens[2], tokens[3] % 24, tokens[4], tokens[5], 0).getTime();\n var asTS = date.getTime();\n var over = asTS % 1000;\n asTS -= over >= 0 ? over : 1000 + over;\n return asUTC - asTS;\n}\n\nfunction fixOffset(date, offset, timezoneString) {\n var localTS = date.getTime(); // Our UTC time is just a guess because our offset is just a guess\n\n var utcGuess = localTS - offset; // Test whether the zone matches the offset for this ts\n\n var o2 = calcOffset(new Date(utcGuess), timezoneString); // If so, offset didn't change, and we're done\n\n if (offset === o2) {\n return offset;\n } // If not, change the ts by the difference in the offset\n\n\n utcGuess -= o2 - offset; // If that gives us the local time we want, we're done\n\n var o3 = calcOffset(new Date(utcGuess), timezoneString);\n\n if (o2 === o3) {\n return o2;\n } // If it's different, we're in a hole time. The offset has changed, but we don't adjust the time\n\n\n return Math.max(o2, o3);\n}\n\nfunction validateTimezone(hours, minutes) {\n return -23 <= hours && hours <= 23 && (minutes == null || 0 <= minutes && minutes <= 59);\n}\n\nvar validIANATimezoneCache = {};\n\nfunction isValidTimezoneIANAString(timeZoneString) {\n if (validIANATimezoneCache[timeZoneString]) return true;\n\n try {\n new Intl.DateTimeFormat(undefined, {\n timeZone: timeZoneString\n });\n validIANATimezoneCache[timeZoneString] = true;\n return true;\n } catch (error) {\n return false;\n }\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n/** Regex to identify the presence of a time zone specifier in a date string */\nvar tzPattern = /(Z|[+-]\\d{2}(?::?\\d{2})?| UTC| [a-zA-Z]+\\/[a-zA-Z_]+(?:\\/[a-zA-Z_]+)?)$/;\nvar _default = tzPattern;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = tzTokenizeDate;\n\n/**\n * Returns the [year, month, day, hour, minute, seconds] tokens of the provided\n * `date` as it will be rendered in the `timeZone`.\n */\nfunction tzTokenizeDate(date, timeZone) {\n var dtf = getDateTimeFormat(timeZone);\n return dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date);\n}\n\nvar typeToPos = {\n year: 0,\n month: 1,\n day: 2,\n hour: 3,\n minute: 4,\n second: 5\n};\n\nfunction partsOffset(dtf, date) {\n try {\n var formatted = dtf.formatToParts(date);\n var filled = [];\n\n for (var i = 0; i < formatted.length; i++) {\n var pos = typeToPos[formatted[i].type];\n\n if (pos >= 0) {\n filled[pos] = parseInt(formatted[i].value, 10);\n }\n }\n\n return filled;\n } catch (error) {\n if (error instanceof RangeError) {\n return [NaN];\n }\n\n throw error;\n }\n}\n\nfunction hackyOffset(dtf, date) {\n var formatted = dtf.format(date).replace(/\\u200E/g, '');\n var parsed = /(\\d+)\\/(\\d+)\\/(\\d+),? (\\d+):(\\d+):(\\d+)/.exec(formatted); // var [, fMonth, fDay, fYear, fHour, fMinute, fSecond] = parsed\n // return [fYear, fMonth, fDay, fHour, fMinute, fSecond]\n\n return [parsed[3], parsed[1], parsed[2], parsed[4], parsed[5], parsed[6]];\n} // Get a cached Intl.DateTimeFormat instance for the IANA `timeZone`. This can be used\n// to get deterministic local date/time output according to the `en-US` locale which\n// can be used to extract local time parts as necessary.\n\n\nvar dtfCache = {};\n\nfunction getDateTimeFormat(timeZone) {\n if (!dtfCache[timeZone]) {\n // New browsers use `hourCycle`, IE and Chrome <73 does not support it and uses `hour12`\n var testDateFormatted = new Intl.DateTimeFormat('en-US', {\n hour12: false,\n timeZone: 'America/New_York',\n year: 'numeric',\n month: 'numeric',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit'\n }).format(new Date('2014-06-25T04:00:00.123Z'));\n var hourCycleSupported = testDateFormatted === '06/25/2014, 00:00:00' || testDateFormatted === '‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00';\n dtfCache[timeZone] = hourCycleSupported ? new Intl.DateTimeFormat('en-US', {\n hour12: false,\n timeZone: timeZone,\n year: 'numeric',\n month: 'numeric',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit'\n }) : new Intl.DateTimeFormat('en-US', {\n hourCycle: 'h23',\n timeZone: timeZone,\n year: 'numeric',\n month: 'numeric',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit'\n });\n }\n\n return dtfCache[timeZone];\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _index = _interopRequireDefault(require(\"../../_lib/tzIntlTimeZoneName/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../../_lib/tzParseTimezone/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar MILLISECONDS_IN_MINUTE = 60 * 1000;\nvar formatters = {\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (date, token, localize, options) {\n var timezoneOffset = getTimeZoneOffset(options.timeZone, options._originalDate || date);\n\n if (timezoneOffset === 0) {\n return 'Z';\n }\n\n switch (token) {\n // Hours and optional minutes\n case 'X':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimeter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n\n case 'XXXX':\n case 'XX':\n // Hours and minutes without `:` delimeter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimeter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n\n case 'XXXXX':\n case 'XXX': // Hours and minutes with `:` delimeter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function (date, token, localize, options) {\n var timezoneOffset = getTimeZoneOffset(options.timeZone, options._originalDate || date);\n\n switch (token) {\n // Hours and optional minutes\n case 'x':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimeter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n\n case 'xxxx':\n case 'xx':\n // Hours and minutes without `:` delimeter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimeter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n\n case 'xxxxx':\n case 'xxx': // Hours and minutes with `:` delimeter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (GMT)\n O: function (date, token, localize, options) {\n var timezoneOffset = getTimeZoneOffset(options.timeZone, options._originalDate || date);\n\n switch (token) {\n // Short\n case 'O':\n case 'OO':\n case 'OOO':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'OOOO':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (specific non-location)\n z: function (date, token, localize, options) {\n var originalDate = options._originalDate || date;\n\n switch (token) {\n // Short\n case 'z':\n case 'zz':\n case 'zzz':\n return (0, _index.default)('short', originalDate, options);\n // Long\n\n case 'zzzz':\n default:\n return (0, _index.default)('long', originalDate, options);\n }\n }\n};\n\nfunction getTimeZoneOffset(timeZone, originalDate) {\n var timeZoneOffset = timeZone ? (0, _index2.default)(timeZone, originalDate, true) / MILLISECONDS_IN_MINUTE : originalDate.getTimezoneOffset();\n\n if (Number.isNaN(timeZoneOffset)) {\n throw new RangeError('Invalid time zone specified: ' + timeZone);\n }\n\n return timeZoneOffset;\n}\n\nfunction addLeadingZeros(number, targetLength) {\n var sign = number < 0 ? '-' : '';\n var output = Math.abs(number).toString();\n\n while (output.length < targetLength) {\n output = '0' + output;\n }\n\n return sign + output;\n}\n\nfunction formatTimezone(offset, dirtyDelimeter) {\n var delimeter = dirtyDelimeter || '';\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = addLeadingZeros(Math.floor(absOffset / 60), 2);\n var minutes = addLeadingZeros(Math.floor(absOffset % 60), 2);\n return sign + hours + delimeter + minutes;\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimeter) {\n if (offset % 60 === 0) {\n var sign = offset > 0 ? '-' : '+';\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n\n return formatTimezone(offset, dirtyDelimeter);\n}\n\nfunction formatTimezoneShort(offset, dirtyDelimeter) {\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = Math.floor(absOffset / 60);\n var minutes = absOffset % 60;\n\n if (minutes === 0) {\n return sign + String(hours);\n }\n\n var delimeter = dirtyDelimeter || '';\n return sign + String(hours) + delimeter + addLeadingZeros(minutes, 2);\n}\n\nvar _default = formatters;\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = format;\n\nvar _index = _interopRequireDefault(require(\"date-fns/format/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"./formatters/index.js\"));\n\nvar _index3 = _interopRequireDefault(require(\"../toDate/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar tzFormattingTokensRegExp = /([xXOz]+)|''|'(''|[^'])+('|$)/g;\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 8 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 8 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Su | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Su | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Su | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Su | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | AM, PM | a..aaa | AM, PM | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bbb | AM, PM, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 1, 2, ..., 11, 0 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 0001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | PDT, EST, CEST | 6 |\n * | | zzzz | Pacific Daylight Time | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 05/29/1453 | 7 |\n * | | PP | May 29, 1453 | 7 |\n * | | PPP | May 29th, 1453 | 7 |\n * | | PPPP | Sunday, May 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 05/29/1453, 12:00 AM | 7 |\n * | | PPpp | May 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | May 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Sunday, May 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are created using the Intl browser API. The output is determined by the\n * preferred standard of the current locale (en-US by default) which may not always give the expected result.\n * For this reason it is recommended to supply a `locale` in the format options when formatting a time zone name.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. These tokens are often confused with others. See: https://git.io/fxCyr\n *\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole\n * library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The second argument is now required for the sake of explicitness.\n *\n * ```javascript\n * // Before v2.0.0\n * format(new Date(2016, 0, 1))\n *\n * // v2.0.0 onward\n * format(new Date(2016, 0, 1), \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\")\n * ```\n *\n * - New format string API for `format` function\n * which is based on [Unicode Technical Standard\n * #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table). See [this\n * post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details.\n *\n * - Characters are now escaped using single quote symbols (`'`) instead of square brackets.\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {OptionsWithTZ} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link\n * https://date-fns.org/docs/toDate}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See\n * [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {Boolean} [options.awareOfUnicodeTokens=false] - if true, allows usage of Unicode tokens causes confusion:\n * - Some of the day of year tokens (`D`, `DD`) that are confused with the day of month tokens (`d`, `dd`).\n * - Some of the local week-numbering year tokens (`YY`, `YYYY`) that are confused with the calendar year tokens\n * (`yy`, `yyyy`). See: https://git.io/fxCyr\n * @param {String} [options.timeZone=''] - used to specify the IANA time zone offset of a date String.\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.awareOfUnicodeTokens` must be set to `true` to use `XX` token; see:\n * https://git.io/fxCyr\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * var result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * var result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\n\nfunction format(dirtyDate, dirtyFormatStr, dirtyOptions) {\n var formatStr = String(dirtyFormatStr);\n var options = dirtyOptions || {};\n var matches = formatStr.match(tzFormattingTokensRegExp);\n\n if (matches) {\n var date = (0, _index3.default)(dirtyDate, options); // Work through each match and replace the tz token in the format string with the quoted\n // formatted time zone so the remaining tokens can be filled in by date-fns#format.\n\n formatStr = matches.reduce(function (result, token) {\n if (token[0] === \"'\") {\n return result; // This is a quoted portion, matched only to ensure we don't match inside it\n }\n\n var pos = result.indexOf(token);\n var precededByQuotedSection = result[pos - 1] === \"'\";\n var replaced = result.replace(token, \"'\" + _index2.default[token[0]](date, token, null, options) + \"'\"); // If the replacement results in two adjoining quoted strings, the back to back quotes\n // are removed, so it doesn't look like an escaped quote.\n\n return precededByQuotedSection ? replaced.substring(0, pos - 1) + replaced.substring(pos + 1) : replaced;\n }, formatStr);\n }\n\n return (0, _index.default)(dirtyDate, formatStr, options);\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = formatInTimeZone;\n\nvar _index = _interopRequireDefault(require(\"date-fns/_lib/cloneObject/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../format/index.js\"));\n\nvar _index3 = _interopRequireDefault(require(\"../utcToZonedTime/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @name formatInTimeZone\n * @category Time Zone Helpers\n * @summary Gets the offset in milliseconds between the time zone and Universal Coordinated Time (UTC)\n *\n * @param {Date|String|Number} date - the date representing the local time / real UTC time\n * @param {String} timeZone - the time zone this date should be formatted for; can be an offset or IANA time zone\n * @param {String} formatStr - the string of tokens\n * @param {OptionsWithTZ} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link\n * https://date-fns.org/docs/toDate}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See\n * [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {Boolean} [options.awareOfUnicodeTokens=false] - if true, allows usage of Unicode tokens causes confusion:\n * - Some of the day of year tokens (`D`, `DD`) that are confused with the day of month tokens (`d`, `dd`).\n * - Some of the local week-numbering year tokens (`YY`, `YYYY`) that are confused with the calendar year tokens\n * (`yy`, `yyyy`). See: https://git.io/fxCyr\n * @param {String} [options.timeZone=''] - used to specify the IANA time zone offset of a date String.\n * @returns {String} the formatted date string\n */\nfunction formatInTimeZone(date, timeZone, formatStr, options) {\n var extendedOptions = (0, _index.default)(options);\n extendedOptions.timeZone = timeZone;\n return (0, _index2.default)((0, _index3.default)(date, timeZone), formatStr, extendedOptions);\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = getTimezoneOffset;\n\nvar _index = _interopRequireDefault(require(\"../_lib/tzParseTimezone/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @name getTimezoneOffset\n * @category Time Zone Helpers\n * @summary Gets the offset in milliseconds between the time zone and Universal Coordinated Time (UTC)\n *\n * @description\n * Returns the time zone offset from UTC time in milliseconds for IANA time zones as well\n * as other time zone offset string formats.\n *\n * For time zones where daylight savings time is applicable a `Date` should be passed on\n * the second parameter to ensure the offset correctly accounts for DST at that time of\n * year. When omitted, the current date is used.\n *\n * @param {String} timeZone - the time zone of this local time, can be an offset or IANA time zone\n * @param {Date|Number} [date] - the date with values representing the local time\n * @returns {Number} the time zone offset in milliseconds\n *\n * @example\n * const result = getTimezoneOffset('-07:00')\n * //=> -18000000 (-7 * 60 * 60 * 1000)\n * const result = getTimezoneOffset('Africa/Johannesburg')\n * //=> 7200000 (2 * 60 * 60 * 1000)\n * const result = getTimezoneOffset('America/New_York', new Date(2016, 0, 1))\n * //=> -18000000 (-5 * 60 * 60 * 1000)\n * const result = getTimezoneOffset('America/New_York', new Date(2016, 6, 1))\n * //=> -14400000 (-4 * 60 * 60 * 1000)\n */\nfunction getTimezoneOffset(timeZone, date) {\n return -(0, _index.default)(timeZone, date);\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\n// This file is generated automatically by `scripts/build/indices.js`. Please, don't change it.\nmodule.exports = {\n format: require('./format/index.js'),\n formatInTimeZone: require('./formatInTimeZone/index.js'),\n getTimezoneOffset: require('./getTimezoneOffset/index.js'),\n toDate: require('./toDate/index.js'),\n utcToZonedTime: require('./utcToZonedTime/index.js'),\n zonedTimeToUtc: require('./zonedTimeToUtc/index.js')\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = toDate;\n\nvar _index = _interopRequireDefault(require(\"date-fns/_lib/toInteger/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"date-fns/_lib/getTimezoneOffsetInMilliseconds/index.js\"));\n\nvar _index3 = _interopRequireDefault(require(\"../_lib/tzParseTimezone/index.js\"));\n\nvar _index4 = _interopRequireDefault(require(\"../_lib/tzPattern/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar MILLISECONDS_IN_HOUR = 3600000;\nvar MILLISECONDS_IN_MINUTE = 60000;\nvar DEFAULT_ADDITIONAL_DIGITS = 2;\nvar patterns = {\n dateTimePattern: /^([0-9W+-]+)(T| )(.*)/,\n datePattern: /^([0-9W+-]+)(.*)/,\n plainTime: /:/,\n // year tokens\n YY: /^(\\d{2})$/,\n YYY: [/^([+-]\\d{2})$/, // 0 additional digits\n /^([+-]\\d{3})$/, // 1 additional digit\n /^([+-]\\d{4})$/ // 2 additional digits\n ],\n YYYY: /^(\\d{4})/,\n YYYYY: [/^([+-]\\d{4})/, // 0 additional digits\n /^([+-]\\d{5})/, // 1 additional digit\n /^([+-]\\d{6})/ // 2 additional digits\n ],\n // date tokens\n MM: /^-(\\d{2})$/,\n DDD: /^-?(\\d{3})$/,\n MMDD: /^-?(\\d{2})-?(\\d{2})$/,\n Www: /^-?W(\\d{2})$/,\n WwwD: /^-?W(\\d{2})-?(\\d{1})$/,\n HH: /^(\\d{2}([.,]\\d*)?)$/,\n HHMM: /^(\\d{2}):?(\\d{2}([.,]\\d*)?)$/,\n HHMMSS: /^(\\d{2}):?(\\d{2}):?(\\d{2}([.,]\\d*)?)$/,\n // time zone tokens (to identify the presence of a tz)\n timeZone: _index4.default\n};\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If an argument is a string, the function tries to parse it.\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n * If the function cannot parse the string or the values are invalid, it returns Invalid Date.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n * All *date-fns* functions will throw `RangeError` if `options.additionalDigits` is not 0, 1, 2 or undefined.\n *\n * @param {Date|String|Number} argument - the value to convert\n * @param {OptionsWithTZ} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @param {String} [options.timeZone=''] - used to specify the IANA time zone offset of a date String.\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * var result = toDate('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * var result = toDate('+02014101', {additionalDigits: 1})\n * //=> Fri Apr 11 2014 00:00:00\n */\n\nfunction toDate(argument, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError('1 argument required, but only ' + arguments.length + ' present');\n }\n\n if (argument === null) {\n return new Date(NaN);\n }\n\n var options = dirtyOptions || {};\n var additionalDigits = options.additionalDigits == null ? DEFAULT_ADDITIONAL_DIGITS : (0, _index.default)(options.additionalDigits);\n\n if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {\n throw new RangeError('additionalDigits must be 0, 1 or 2');\n } // Clone the date\n\n\n if (argument instanceof Date || typeof argument === 'object' && Object.prototype.toString.call(argument) === '[object Date]') {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime());\n } else if (typeof argument === 'number' || Object.prototype.toString.call(argument) === '[object Number]') {\n return new Date(argument);\n } else if (!(typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]')) {\n return new Date(NaN);\n }\n\n var dateStrings = splitDateString(argument);\n var parseYearResult = parseYear(dateStrings.date, additionalDigits);\n var year = parseYearResult.year;\n var restDateString = parseYearResult.restDateString;\n var date = parseDate(restDateString, year);\n\n if (isNaN(date)) {\n return new Date(NaN);\n }\n\n if (date) {\n var timestamp = date.getTime();\n var time = 0;\n var offset;\n\n if (dateStrings.time) {\n time = parseTime(dateStrings.time);\n\n if (isNaN(time)) {\n return new Date(NaN);\n }\n }\n\n if (dateStrings.timeZone || options.timeZone) {\n offset = (0, _index3.default)(dateStrings.timeZone || options.timeZone, new Date(timestamp + time));\n\n if (isNaN(offset)) {\n return new Date(NaN);\n }\n } else {\n // get offset accurate to hour in time zones that change offset\n offset = (0, _index2.default)(new Date(timestamp + time));\n offset = (0, _index2.default)(new Date(timestamp + time + offset));\n }\n\n return new Date(timestamp + time + offset);\n } else {\n return new Date(NaN);\n }\n}\n\nfunction splitDateString(dateString) {\n var dateStrings = {};\n var parts = patterns.dateTimePattern.exec(dateString);\n var timeString;\n\n if (!parts) {\n parts = patterns.datePattern.exec(dateString);\n\n if (parts) {\n dateStrings.date = parts[1];\n timeString = parts[2];\n } else {\n dateStrings.date = null;\n timeString = dateString;\n }\n } else {\n dateStrings.date = parts[1];\n timeString = parts[3];\n }\n\n if (timeString) {\n var token = patterns.timeZone.exec(timeString);\n\n if (token) {\n dateStrings.time = timeString.replace(token[1], '');\n dateStrings.timeZone = token[1].trim();\n } else {\n dateStrings.time = timeString;\n }\n }\n\n return dateStrings;\n}\n\nfunction parseYear(dateString, additionalDigits) {\n var patternYYY = patterns.YYY[additionalDigits];\n var patternYYYYY = patterns.YYYYY[additionalDigits];\n var token; // YYYY or ±YYYYY\n\n token = patterns.YYYY.exec(dateString) || patternYYYYY.exec(dateString);\n\n if (token) {\n var yearString = token[1];\n return {\n year: parseInt(yearString, 10),\n restDateString: dateString.slice(yearString.length)\n };\n } // YY or ±YYY\n\n\n token = patterns.YY.exec(dateString) || patternYYY.exec(dateString);\n\n if (token) {\n var centuryString = token[1];\n return {\n year: parseInt(centuryString, 10) * 100,\n restDateString: dateString.slice(centuryString.length)\n };\n } // Invalid ISO-formatted year\n\n\n return {\n year: null\n };\n}\n\nfunction parseDate(dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) {\n return null;\n }\n\n var token;\n var date;\n var month;\n var week; // YYYY\n\n if (dateString.length === 0) {\n date = new Date(0);\n date.setUTCFullYear(year);\n return date;\n } // YYYY-MM\n\n\n token = patterns.MM.exec(dateString);\n\n if (token) {\n date = new Date(0);\n month = parseInt(token[1], 10) - 1;\n\n if (!validateDate(year, month)) {\n return new Date(NaN);\n }\n\n date.setUTCFullYear(year, month);\n return date;\n } // YYYY-DDD or YYYYDDD\n\n\n token = patterns.DDD.exec(dateString);\n\n if (token) {\n date = new Date(0);\n var dayOfYear = parseInt(token[1], 10);\n\n if (!validateDayOfYearDate(year, dayOfYear)) {\n return new Date(NaN);\n }\n\n date.setUTCFullYear(year, 0, dayOfYear);\n return date;\n } // yyyy-MM-dd or YYYYMMDD\n\n\n token = patterns.MMDD.exec(dateString);\n\n if (token) {\n date = new Date(0);\n month = parseInt(token[1], 10) - 1;\n var day = parseInt(token[2], 10);\n\n if (!validateDate(year, month, day)) {\n return new Date(NaN);\n }\n\n date.setUTCFullYear(year, month, day);\n return date;\n } // YYYY-Www or YYYYWww\n\n\n token = patterns.Www.exec(dateString);\n\n if (token) {\n week = parseInt(token[1], 10) - 1;\n\n if (!validateWeekDate(year, week)) {\n return new Date(NaN);\n }\n\n return dayOfISOWeekYear(year, week);\n } // YYYY-Www-D or YYYYWwwD\n\n\n token = patterns.WwwD.exec(dateString);\n\n if (token) {\n week = parseInt(token[1], 10) - 1;\n var dayOfWeek = parseInt(token[2], 10) - 1;\n\n if (!validateWeekDate(year, week, dayOfWeek)) {\n return new Date(NaN);\n }\n\n return dayOfISOWeekYear(year, week, dayOfWeek);\n } // Invalid ISO-formatted date\n\n\n return null;\n}\n\nfunction parseTime(timeString) {\n var token;\n var hours;\n var minutes; // hh\n\n token = patterns.HH.exec(timeString);\n\n if (token) {\n hours = parseFloat(token[1].replace(',', '.'));\n\n if (!validateTime(hours)) {\n return NaN;\n }\n\n return hours % 24 * MILLISECONDS_IN_HOUR;\n } // hh:mm or hhmm\n\n\n token = patterns.HHMM.exec(timeString);\n\n if (token) {\n hours = parseInt(token[1], 10);\n minutes = parseFloat(token[2].replace(',', '.'));\n\n if (!validateTime(hours, minutes)) {\n return NaN;\n }\n\n return hours % 24 * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE;\n } // hh:mm:ss or hhmmss\n\n\n token = patterns.HHMMSS.exec(timeString);\n\n if (token) {\n hours = parseInt(token[1], 10);\n minutes = parseInt(token[2], 10);\n var seconds = parseFloat(token[3].replace(',', '.'));\n\n if (!validateTime(hours, minutes, seconds)) {\n return NaN;\n }\n\n return hours % 24 * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE + seconds * 1000;\n } // Invalid ISO-formatted time\n\n\n return null;\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n week = week || 0;\n day = day || 0;\n var date = new Date(0);\n date.setUTCFullYear(isoWeekYear, 0, 4);\n var fourthOfJanuaryDay = date.getUTCDay() || 7;\n var diff = week * 7 + day + 1 - fourthOfJanuaryDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n} // Validation functions\n\n\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}\n\nfunction validateDate(year, month, date) {\n if (month < 0 || month > 11) {\n return false;\n }\n\n if (date != null) {\n if (date < 1) {\n return false;\n }\n\n var isLeapYear = isLeapYearIndex(year);\n\n if (isLeapYear && date > DAYS_IN_MONTH_LEAP_YEAR[month]) {\n return false;\n }\n\n if (!isLeapYear && date > DAYS_IN_MONTH[month]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n if (dayOfYear < 1) {\n return false;\n }\n\n var isLeapYear = isLeapYearIndex(year);\n\n if (isLeapYear && dayOfYear > 366) {\n return false;\n }\n\n if (!isLeapYear && dayOfYear > 365) {\n return false;\n }\n\n return true;\n}\n\nfunction validateWeekDate(year, week, day) {\n if (week < 0 || week > 52) {\n return false;\n }\n\n if (day != null && (day < 0 || day > 6)) {\n return false;\n }\n\n return true;\n}\n\nfunction validateTime(hours, minutes, seconds) {\n if (hours != null && (hours < 0 || hours >= 25)) {\n return false;\n }\n\n if (minutes != null && (minutes < 0 || minutes >= 60)) {\n return false;\n }\n\n if (seconds != null && (seconds < 0 || seconds >= 60)) {\n return false;\n }\n\n return true;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = utcToZonedTime;\n\nvar _index = _interopRequireDefault(require(\"../_lib/tzParseTimezone/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../toDate/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @name utcToZonedTime\n * @category Time Zone Helpers\n * @summary Get a date/time representing local time in a given time zone from the UTC date\n *\n * @description\n * Returns a date instance with values representing the local time in the time zone\n * specified of the UTC time from the date provided. In other words, when the new date\n * is formatted it will show the equivalent hours in the target time zone regardless\n * of the current system time zone.\n *\n * @param {Date|String|Number} date - the date with the relevant UTC time\n * @param {String} timeZone - the time zone to get local time for, can be an offset or IANA time zone\n * @param {OptionsWithTZ} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @returns {Date} the new date with the equivalent time in the time zone\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // In June 10am UTC is 6am in New York (-04:00)\n * const result = utcToZonedTime('2014-06-25T10:00:00.000Z', 'America/New_York')\n * //=> Jun 25 2014 06:00:00\n */\nfunction utcToZonedTime(dirtyDate, timeZone, options) {\n var date = (0, _index2.default)(dirtyDate, options);\n var offsetMilliseconds = (0, _index.default)(timeZone, date, true);\n var d = new Date(date.getTime() - offsetMilliseconds);\n var resultDate = new Date(0);\n resultDate.setFullYear(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate());\n resultDate.setHours(d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds());\n return resultDate;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = zonedTimeToUtc;\n\nvar _index = _interopRequireDefault(require(\"date-fns/_lib/cloneObject/index.js\"));\n\nvar _index2 = _interopRequireDefault(require(\"../toDate/index.js\"));\n\nvar _index3 = _interopRequireDefault(require(\"../_lib/tzPattern/index.js\"));\n\nvar _index4 = _interopRequireDefault(require(\"../_lib/tzParseTimezone/index.js\"));\n\nvar _index5 = _interopRequireDefault(require(\"../_lib/newDateUTC/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @name zonedTimeToUtc\n * @category Time Zone Helpers\n * @summary Get the UTC date/time from a date representing local time in a given time zone\n *\n * @description\n * Returns a date instance with the UTC time of the provided date of which the values\n * represented the local time in the time zone specified. In other words, if the input\n * date represented local time in time time zone, the timestamp of the output date will\n * give the equivalent UTC of that local time regardless of the current system time zone.\n *\n * @param {Date|String|Number} date - the date with values representing the local time\n * @param {String} timeZone - the time zone of this local time, can be an offset or IANA time zone\n * @param {OptionsWithTZ} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @returns {Date} the new date with the equivalent time in the time zone\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // In June 10am in Los Angeles is 5pm UTC\n * const result = zonedTimeToUtc(new Date(2014, 5, 25, 10, 0, 0), 'America/Los_Angeles')\n * //=> 2014-06-25T17:00:00.000Z\n */\nfunction zonedTimeToUtc(date, timeZone, options) {\n if (typeof date === 'string' && !date.match(_index3.default)) {\n var extendedOptions = (0, _index.default)(options);\n extendedOptions.timeZone = timeZone;\n return (0, _index2.default)(date, extendedOptions);\n }\n\n var d = (0, _index2.default)(date, options);\n var utc = (0, _index5.default)(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds()).getTime();\n var offsetMilliseconds = (0, _index4.default)(timeZone, new Date(utc));\n return new Date(utc + offsetMilliseconds);\n}\n\nmodule.exports = exports.default;","function _assertThisInitialized(e) {\n if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n}\nexport { _assertThisInitialized as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inheritsLoose(t, o) {\n t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);\n}\nexport { _inheritsLoose as default };","import defineProperty from \"./defineProperty.js\";\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nexport { _objectSpread2 as default };","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nfunction _objectWithoutProperties(e, t) {\n if (null == e) return {};\n var o,\n r,\n i = objectWithoutPropertiesLoose(e, t);\n if (Object.getOwnPropertySymbols) {\n var s = Object.getOwnPropertySymbols(e);\n for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n }\n return i;\n}\nexport { _objectWithoutProperties as default };","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (e.includes(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","function _setPrototypeOf(t, e) {\n return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nexport default arrayIncludes;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nexport default arrayIncludesWith;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n","import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nexport default baseEach;\n","import isArrayLike from './isArrayLike.js';\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nexport default createBaseEach;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport default baseFindIndex;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nexport default baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nexport default strictIndexOf;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nexport default baseIsMatch;\n","import isObject from './isObject.js';\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nexport default isStrictComparable;\n","import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nexport default getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nexport default matchesStrictComparable;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nexport default baseMatches;\n","import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nexport default baseMatchesProperty;\n","import baseGet from './_baseGet.js';\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nexport default basePropertyDeep;\n","import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nexport default property;\n","import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nexport default baseIteratee;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default baseProperty;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nexport default baseSlice;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import Set from './_Set.js';\nimport noop from './noop.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nexport default createSet;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport cacheHas from './_cacheHas.js';\nimport createSet from './_createSet.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseUniq;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nexport default get;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n","import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","import arrayMap from './_arrayMap.js';\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\nexport default baseValues;\n","import baseValues from './_baseValues.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n}\n\nexport default values;\n","import baseIndexOf from './_baseIndexOf.js';\nimport isArrayLike from './isArrayLike.js';\nimport isString from './isString.js';\nimport toInteger from './toInteger.js';\nimport values from './values.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\nfunction includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n}\n\nexport default includes;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n","import baseGet from './_baseGet.js';\nimport baseSlice from './_baseSlice.js';\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nexport default parent;\n","import apply from './_apply.js';\nimport castPath from './_castPath.js';\nimport last from './last.js';\nimport parent from './_parent.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\nfunction baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n}\n\nexport default baseInvoke;\n","import baseInvoke from './_baseInvoke.js';\nimport baseRest from './_baseRest.js';\n\n/**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\nvar invoke = baseRest(baseInvoke);\n\nexport default invoke;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","/**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\nfunction isNil(value) {\n return value == null;\n}\n\nexport default isNil;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nexport default isUndefined;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nexport default noop;\n","import baseEach from './_baseEach.js';\n\n/**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n}\n\nexport default baseSome;\n","import arraySome from './_arraySome.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseSome from './_baseSome.js';\nimport isArray from './isArray.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\nfunction some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, baseIteratee(predicate, 3));\n}\n\nexport default some;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","/**\n * marked v4.3.0 - a markdown parser\n * Copyright (c) 2011-2023, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction getDefaults() {\n return {\n async: false,\n baseUrl: null,\n breaks: false,\n extensions: null,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n hooks: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartypants: false,\n tokenizer: null,\n walkTokens: null,\n xhtml: false\n };\n}\n\nlet defaults = getDefaults();\n\nfunction changeDefaults(newDefaults) {\n defaults = newDefaults;\n}\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = new RegExp(escapeTest.source, 'g');\nconst escapeTestNoEncode = /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/;\nconst escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g');\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\n/**\n * @param {string} html\n */\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nconst caret = /(^|[^\\[])\\^/g;\n\n/**\n * @param {string | RegExp} regex\n * @param {string} opt\n */\nfunction edit(regex, opt) {\n regex = typeof regex === 'string' ? regex : regex.source;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: () => {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n}\n\nconst nonWordAndColonTest = /[^\\w:]/g;\nconst originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\n\n/**\n * @param {boolean} sanitize\n * @param {string} base\n * @param {string} href\n */\nfunction cleanUrl(sanitize, base, href) {\n if (sanitize) {\n let prot;\n try {\n prot = decodeURIComponent(unescape(href))\n .replace(nonWordAndColonTest, '')\n .toLowerCase();\n } catch (e) {\n return null;\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n return href;\n}\n\nconst baseUrls = {};\nconst justDomain = /^[^:]+:\\/*[^/]*$/;\nconst protocol = /^([^:]+:)[\\s\\S]*$/;\nconst domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\n/**\n * @param {string} base\n * @param {string} href\n */\nfunction resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n base = baseUrls[' ' + base];\n const relativeBase = base.indexOf(':') === -1;\n\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n}\n\nconst noopTest = { exec: function noopTest() {} };\n\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false,\n curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n let i = 0;\n\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) { cells.shift(); }\n if (cells.length > 0 && !cells[cells.length - 1].trim()) { cells.pop(); }\n\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param {string} str\n * @param {string} c\n * @param {boolean} invert Remove suffix of non-c chars instead. Default falsey.\n */\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.slice(0, l - suffLen);\n}\n\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n const l = str.length;\n let level = 0,\n i = 0;\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n}\n\n// copied from https://stackoverflow.com/a/5450113/806777\n/**\n * @param {string} pattern\n * @param {number} count\n */\nfunction repeatString(pattern, count) {\n if (count < 1) {\n return '';\n }\n let result = '';\n while (count > 1) {\n if (count & 1) {\n result += pattern;\n }\n count >>= 1;\n pattern += pattern;\n }\n return result + pattern;\n}\n\nfunction outputLink(cap, link, raw, lexer) {\n const href = link.href;\n const title = link.title ? escape(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n if (cap[0].charAt(0) !== '!') {\n lexer.state.inLink = true;\n const token = {\n type: 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text)\n };\n lexer.state.inLink = false;\n return token;\n }\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape(text)\n };\n}\n\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nclass Tokenizer {\n constructor(options) {\n this.options = options || defaults;\n }\n\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n }\n\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text\n };\n }\n }\n\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline._escapes, '$1') : cap[2],\n text\n };\n }\n }\n\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ *>[ \\t]?/gm, '');\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n const tokens = this.lexer.blockTokens(text);\n this.lexer.state.top = top;\n return {\n type: 'blockquote',\n raw: cap[0],\n tokens,\n text\n };\n }\n }\n\n list(src) {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let raw, istask, ischecked, indent, i, blankLine, endsWithBlankLine,\n line, nextLine, rawLine, itemContents, endEarly;\n\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n\n const list = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n\n // Get next list item\n const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`);\n\n // Check if current bullet point can start a new List Item\n while (src) {\n endEarly = false;\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n\n raw = cap[0];\n src = src.substring(raw.length);\n\n line = cap[2].split('\\n', 1)[0].replace(/^\\t+/, (t) => ' '.repeat(3 * t.length));\n nextLine = src.split('\\n', 1)[0];\n\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimLeft();\n } else {\n indent = cap[2].search(/[^ ]/); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n\n blankLine = false;\n\n if (!line && /^ *$/.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n\n if (!endEarly) {\n const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`);\n const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`);\n const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`);\n const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`);\n\n // Check if following lines should be included in List Item\n while (src) {\n rawLine = src.split('\\n', 1)[0];\n nextLine = rawLine;\n\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' ');\n }\n\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n\n // Horizontal rule found\n if (hrRegex.test(src)) {\n break;\n }\n\n if (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLine.slice(indent);\n } else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n\n // paragraph continuation unless last line was a different block level element\n if (line.search(/[^ ]/) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n\n itemContents += '\\n' + nextLine;\n }\n\n if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n blankLine = true;\n }\n\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLine.slice(indent);\n }\n }\n\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n } else if (/\\n *\\n *$/.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== '[ ] ';\n itemContents = itemContents.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents\n });\n\n list.raw += raw;\n }\n\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n list.items[list.items.length - 1].raw = raw.trimRight();\n list.items[list.items.length - 1].text = itemContents.trimRight();\n list.raw = list.raw.trimRight();\n\n const l = list.items.length;\n\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (i = 0; i < l; i++) {\n this.lexer.state.top = false;\n list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n\n if (!list.loose) {\n // Check if list should be loose\n const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => /\\n.*\\n/.test(t.raw));\n\n list.loose = hasMultipleLineBreaks;\n }\n }\n\n // Set all items to loose if list is loose\n if (list.loose) {\n for (i = 0; i < l; i++) {\n list.items[i].loose = true;\n }\n }\n\n return list;\n }\n }\n\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token = {\n type: 'html',\n raw: cap[0],\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: cap[0]\n };\n if (this.options.sanitize) {\n const text = this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]);\n token.type = 'paragraph';\n token.text = text;\n token.tokens = this.lexer.inline(text);\n }\n return token;\n }\n }\n\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n const href = cap[2] ? cap[2].replace(/^<(.*)>$/, '$1').replace(this.rules.inline._escapes, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline._escapes, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href,\n title\n };\n }\n }\n\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells(cap[1]).map(c => { return { text: c }; }),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n rows: cap[3] && cap[3].trim() ? cap[3].replace(/\\n[ \\t]*$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n item.raw = cap[0];\n\n let l = item.align.length;\n let i, j, k, row;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.rows.length;\n for (i = 0; i < l; i++) {\n item.rows[i] = splitCells(item.rows[i], item.header.length).map(c => { return { text: c }; });\n }\n\n // parse child tokens inside headers and cells\n\n // header child tokens\n l = item.header.length;\n for (j = 0; j < l; j++) {\n item.header[j].tokens = this.lexer.inline(item.header[j].text);\n }\n\n // cell child tokens\n l = item.rows.length;\n for (j = 0; j < l; j++) {\n row = item.rows[j];\n for (k = 0; k < row.length; k++) {\n row[k].tokens = this.lexer.inline(row[k].text);\n }\n }\n\n return item;\n }\n }\n }\n\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1])\n };\n }\n }\n\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0])\n };\n }\n }\n\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape(cap[1])\n };\n }\n }\n\n tag(src) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && /^
/i.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n\n return {\n type: this.options.sanitize\n ? 'text'\n : 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n text: this.options.sanitize\n ? (this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape(cap[0]))\n : cap[0]\n };\n }\n }\n\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^$/.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (/^$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0], this.lexer);\n }\n }\n\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n let link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0], this.lexer);\n }\n }\n\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrong.lDelim.exec(src);\n if (!match) return;\n\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u)) return;\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || (nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) {\n const lLength = match[0].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // skip single * in __abc*abc__\n\n rLength = rDelim.length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n\n const raw = src.slice(0, lLength + match.index + (match[0].length - rDelim.length) + rLength);\n\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n }\n }\n\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2])\n };\n }\n }\n\n autolink(src, mangle) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape(this.options.mangle ? mangle(cap[1]) : cap[1]);\n href = 'mailto:' + text;\n } else {\n text = escape(cap[1]);\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n url(src, mangle) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape(this.options.mangle ? mangle(cap[0]) : cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n text = escape(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n } else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n inlineText(src, smartypants) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (this.lexer.state.inRawBlock) {\n text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0])) : cap[0];\n } else {\n text = escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n}\n\n/**\n * Block-Level Grammar\n */\nconst block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,\n hr: /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|\\\\n*|$)' // (4)\n + '|\\\\n*|$)' // (5)\n + '|)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (6)\n + '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) open tag\n + '|(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *(?:\\n *)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/,\n table: noopTest,\n lheading: /^((?:.|\\n(?!\\n))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n};\n\nblock._label = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nblock.listItemStart = edit(/^( *)(bull) */)\n .replace('bull', block.bullet)\n .getRegex();\n\nblock.list = edit(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\n\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'\n + '|track|ul';\nblock._comment = /|$)/;\nblock.html = edit(block.html, 'i')\n .replace('comment', block._comment)\n .replace('tag', block._tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nblock.paragraph = edit(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.blockquote = edit(block.blockquote)\n .replace('paragraph', block.paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = { ...block };\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = {\n ...block.normal,\n table: '^ *([^\\\\n ].*\\\\|.*)\\\\n' // Header\n + ' {0,3}(?:\\\\| *)?(:?-+:? *(?:\\\\| *:?-+:? *)*)(?:\\\\| *)?' // Align\n + '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n};\n\nblock.gfm.table = edit(block.gfm.table)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.gfm.paragraph = edit(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('table', block.gfm.table) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nblock.pedantic = {\n ...block.normal,\n html: edit(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+? *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', block._comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(block.normal._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', block.lheading)\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .getRegex()\n};\n\n/**\n * Inline-Level Grammar\n */\nconst inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest,\n tag: '^comment'\n + '|^' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. \n + '|^' // declaration, e.g. \n + '|^', // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(ref)\\]/,\n nolink: /^!?\\[(ref)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n emStrong: {\n lDelim: /^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,\n // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.\n // () Skip orphan inside strong () Consume to delim (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a\n rDelimAst: /^(?:[^_*\\\\]|\\\\.)*?\\_\\_(?:[^_*\\\\]|\\\\.)*?\\*(?:[^_*\\\\]|\\\\.)*?(?=\\_\\_)|(?:[^*\\\\]|\\\\.)+(?=[^*])|[punct_](\\*+)(?=[\\s]|$)|(?:[^punct*_\\s\\\\]|\\\\.)(\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|(?:[^punct*_\\s\\\\]|\\\\.)(\\*+)(?=[^punct*_\\s])/,\n rDelimUnd: /^(?:[^_*\\\\]|\\\\.)*?\\*\\*(?:[^_*\\\\]|\\\\.)*?\\_(?:[^_*\\\\]|\\\\.)*?(?=\\*\\*)|(?:[^_\\\\]|\\\\.)+(?=[^_])|[punct*](\\_+)(?=[\\s]|$)|(?:[^punct*_\\s\\\\]|\\\\.)(\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/ // ^- Not allowed for _\n },\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\?@\\\\[\\\\]`^{|}~';\ninline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();\n\n// sequences em should skip over [title](link), `code`, \ninline.blockSkip = /\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g;\n// lookbehind is not available on Safari as of version 16\n// inline.escapedEmSt = /(?<=(?:^|[^\\\\)(?:\\\\[^])*)\\\\[*_]/g;\ninline.escapedEmSt = /(?:^|[^\\\\])(?:\\\\\\\\)*\\\\[*_]/g;\n\ninline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex();\n\ninline.emStrong.lDelim = edit(inline.emStrong.lDelim)\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimAst = edit(inline.emStrong.rDelimAst, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimUnd = edit(inline.emStrong.rDelimUnd, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit(inline.autolink)\n .replace('scheme', inline._scheme)\n .replace('email', inline._email)\n .getRegex();\n\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n\ninline.tag = edit(inline.tag)\n .replace('comment', inline._comment)\n .replace('attribute', inline._attribute)\n .getRegex();\n\ninline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n\ninline.link = edit(inline.link)\n .replace('label', inline._label)\n .replace('href', inline._href)\n .replace('title', inline._title)\n .getRegex();\n\ninline.reflink = edit(inline.reflink)\n .replace('label', inline._label)\n .replace('ref', block._label)\n .getRegex();\n\ninline.nolink = edit(inline.nolink)\n .replace('ref', block._label)\n .getRegex();\n\ninline.reflinkSearch = edit(inline.reflinkSearch, 'g')\n .replace('reflink', inline.reflink)\n .replace('nolink', inline.nolink)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = { ...inline };\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = {\n ...inline.normal,\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', inline._label)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', inline._label)\n .getRegex()\n};\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = {\n ...inline.normal,\n escape: edit(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\ 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n}\n\n/**\n * Block Lexer\n */\nclass Lexer {\n constructor(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || defaults;\n this.options.tokenizer = this.options.tokenizer || new Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true\n };\n\n const rules = {\n block: block.normal,\n inline: inline.normal\n };\n\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new Lexer(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new Lexer(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n');\n\n this.blockTokens(src, this.tokens);\n\n let next;\n while (next = this.inlineQueue.shift()) {\n this.inlineTokens(next.src, next.tokens);\n }\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src, tokens = []) {\n if (this.options.pedantic) {\n src = src.replace(/\\t/g, ' ').replace(/^ +$/gm, '');\n } else {\n src = src.replace(/^( *)(\\t+)/gm, (_, leading, tabs) => {\n return leading + ' '.repeat(tabs.length);\n });\n }\n\n let token, lastToken, cutSrc, lastParagraphClipped;\n\n while (src) {\n if (this.options.extensions\n && this.options.extensions.block\n && this.options.extensions.block.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.raw.length === 1 && tokens.length > 0) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unecessary paragraph tags\n tokens[tokens.length - 1].raw += '\\n';\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach(function(getStartIndex) {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n lastToken = tokens[tokens.length - 1];\n if (lastParagraphClipped && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = (cutSrc.length !== src.length);\n src = src.substring(token.raw.length);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n this.state.top = true;\n return tokens;\n }\n\n inline(src, tokens = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = []) {\n let token, lastToken, cutSrc;\n\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out escaped em & strong delimiters\n while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index + match[0].length - 2) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);\n this.tokenizer.rules.inline.escapedEmSt.lastIndex--;\n }\n\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n // extensions\n if (this.options.extensions\n && this.options.extensions.inline\n && this.options.extensions.inline.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src, mangle)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach(function(getStartIndex) {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc, smartypants)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n}\n\n/**\n * Renderer\n */\nclass Renderer {\n constructor(options) {\n this.options = options || defaults;\n }\n\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/\\S*/)[0];\n if (this.options.highlight) {\n const out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n code = code.replace(/\\n$/, '') + '\\n';\n\n if (!lang) {\n return '
'\n        + (escaped ? code : escape(code, true))\n        + '
\\n';\n }\n\n return '
'\n      + (escaped ? code : escape(code, true))\n      + '
\\n';\n }\n\n /**\n * @param {string} quote\n */\n blockquote(quote) {\n return `
\\n${quote}
\\n`;\n }\n\n html(html) {\n return html;\n }\n\n /**\n * @param {string} text\n * @param {string} level\n * @param {string} raw\n * @param {any} slugger\n */\n heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n const id = this.options.headerPrefix + slugger.slug(raw);\n return `${text}\\n`;\n }\n\n // ignore IDs\n return `${text}\\n`;\n }\n\n hr() {\n return this.options.xhtml ? '
\\n' : '
\\n';\n }\n\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul',\n startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '\\n';\n }\n\n /**\n * @param {string} text\n */\n listitem(text) {\n return `
  • ${text}
  • \\n`;\n }\n\n checkbox(checked) {\n return ' ';\n }\n\n /**\n * @param {string} text\n */\n paragraph(text) {\n return `

    ${text}

    \\n`;\n }\n\n /**\n * @param {string} header\n * @param {string} body\n */\n table(header, body) {\n if (body) body = `${body}`;\n\n return '\\n'\n + '\\n'\n + header\n + '\\n'\n + body\n + '
    \\n';\n }\n\n /**\n * @param {string} content\n */\n tablerow(content) {\n return `\\n${content}\\n`;\n }\n\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? `<${type} align=\"${flags.align}\">`\n : `<${type}>`;\n return tag + content + `\\n`;\n }\n\n /**\n * span level renderer\n * @param {string} text\n */\n strong(text) {\n return `${text}`;\n }\n\n /**\n * @param {string} text\n */\n em(text) {\n return `${text}`;\n }\n\n /**\n * @param {string} text\n */\n codespan(text) {\n return `${text}`;\n }\n\n br() {\n return this.options.xhtml ? '
    ' : '
    ';\n }\n\n /**\n * @param {string} text\n */\n del(text) {\n return `${text}`;\n }\n\n /**\n * @param {string} href\n * @param {string} title\n * @param {string} text\n */\n link(href, title, text) {\n href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n let out = '
    ';\n return out;\n }\n\n /**\n * @param {string} href\n * @param {string} title\n * @param {string} text\n */\n image(href, title, text) {\n href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n\n let out = `\"${text}\"`;\n' : '>';\n return out;\n }\n\n text(text) {\n return text;\n }\n}\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nclass TextRenderer {\n // no need for block level renderers\n strong(text) {\n return text;\n }\n\n em(text) {\n return text;\n }\n\n codespan(text) {\n return text;\n }\n\n del(text) {\n return text;\n }\n\n html(text) {\n return text;\n }\n\n text(text) {\n return text;\n }\n\n link(href, title, text) {\n return '' + text;\n }\n\n image(href, title, text) {\n return '' + text;\n }\n\n br() {\n return '';\n }\n}\n\n/**\n * Slugger generates header id\n */\nclass Slugger {\n constructor() {\n this.seen = {};\n }\n\n /**\n * @param {string} value\n */\n serialize(value) {\n return value\n .toLowerCase()\n .trim()\n // remove html tags\n .replace(/<[!\\/a-z].*?>/ig, '')\n // remove unwanted chars\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '')\n .replace(/\\s/g, '-');\n }\n\n /**\n * Finds the next safe (unique) slug to use\n * @param {string} originalSlug\n * @param {boolean} isDryRun\n */\n getNextSafeSlug(originalSlug, isDryRun) {\n let slug = originalSlug;\n let occurenceAccumulator = 0;\n if (this.seen.hasOwnProperty(slug)) {\n occurenceAccumulator = this.seen[originalSlug];\n do {\n occurenceAccumulator++;\n slug = originalSlug + '-' + occurenceAccumulator;\n } while (this.seen.hasOwnProperty(slug));\n }\n if (!isDryRun) {\n this.seen[originalSlug] = occurenceAccumulator;\n this.seen[slug] = 0;\n }\n return slug;\n }\n\n /**\n * Convert string to unique id\n * @param {object} [options]\n * @param {boolean} [options.dryrun] Generates the next unique slug without\n * updating the internal accumulator.\n */\n slug(value, options = {}) {\n const slug = this.serialize(value);\n return this.getNextSafeSlug(slug, options.dryrun);\n }\n}\n\n/**\n * Parsing & Compiling\n */\nclass Parser {\n constructor(options) {\n this.options = options || defaults;\n this.options.renderer = this.options.renderer || new Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new TextRenderer();\n this.slugger = new Slugger();\n }\n\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new Parser(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new Parser(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '',\n i,\n j,\n k,\n l2,\n l3,\n row,\n cell,\n header,\n body,\n token,\n ordered,\n start,\n loose,\n itemBody,\n item,\n checked,\n task,\n checkbox,\n ret;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) {\n out += ret || '';\n continue;\n }\n }\n\n switch (token.type) {\n case 'space': {\n continue;\n }\n case 'hr': {\n out += this.renderer.hr();\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(\n this.parseInline(token.tokens),\n token.depth,\n unescape(this.parseInline(token.tokens, this.textRenderer)),\n this.slugger);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token.text,\n token.lang,\n token.escaped);\n continue;\n }\n case 'table': {\n header = '';\n\n // header\n cell = '';\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n cell += this.renderer.tablecell(\n this.parseInline(token.header[j].tokens),\n { header: true, align: token.align[j] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n body = '';\n l2 = token.rows.length;\n for (j = 0; j < l2; j++) {\n row = token.rows[j];\n\n cell = '';\n l3 = row.length;\n for (k = 0; k < l3; k++) {\n cell += this.renderer.tablecell(\n this.parseInline(row[k].tokens),\n { header: false, align: token.align[k] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote': {\n body = this.parse(token.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list': {\n ordered = token.ordered;\n start = token.start;\n loose = token.loose;\n l2 = token.items.length;\n\n body = '';\n for (j = 0; j < l2; j++) {\n item = token.items[j];\n checked = item.checked;\n task = item.task;\n\n itemBody = '';\n if (item.task) {\n checkbox = this.renderer.checkbox(checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox\n });\n }\n } else {\n itemBody += checkbox;\n }\n }\n\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, checked);\n }\n\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n // TODO parse inline content if parameter markdown=1\n out += this.renderer.html(token.text);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(this.parseInline(token.tokens));\n continue;\n }\n case 'text': {\n body = token.tokens ? this.parseInline(token.tokens) : token.text;\n while (i + 1 < l && tokens[i + 1].type === 'text') {\n token = tokens[++i];\n body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '',\n i,\n token,\n ret;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {\n out += ret || '';\n continue;\n }\n }\n\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token.text);\n break;\n }\n case 'html': {\n out += renderer.html(token.text);\n break;\n }\n case 'link': {\n out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n break;\n }\n case 'image': {\n out += renderer.image(token.href, token.title, token.text);\n break;\n }\n case 'strong': {\n out += renderer.strong(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'em': {\n out += renderer.em(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n out += renderer.del(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'text': {\n out += renderer.text(token.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n}\n\nclass Hooks {\n constructor(options) {\n this.options = options || defaults;\n }\n\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess'\n ]);\n\n /**\n * Process markdown before marked\n */\n preprocess(markdown) {\n return markdown;\n }\n\n /**\n * Process HTML after marked is finished\n */\n postprocess(html) {\n return html;\n }\n}\n\nfunction onError(silent, async, callback) {\n return (e) => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n if (silent) {\n const msg = '

    An error occurred:

    '\n        + escape(e.message + '', true)\n        + '
    ';\n if (async) {\n return Promise.resolve(msg);\n }\n if (callback) {\n callback(null, msg);\n return;\n }\n return msg;\n }\n\n if (async) {\n return Promise.reject(e);\n }\n if (callback) {\n callback(e);\n return;\n }\n throw e;\n };\n}\n\nfunction parseMarkdown(lexer, parser) {\n return (src, opt, callback) => {\n if (typeof opt === 'function') {\n callback = opt;\n opt = null;\n }\n\n const origOpt = { ...opt };\n opt = { ...marked.defaults, ...origOpt };\n const throwError = onError(opt.silent, opt.async, callback);\n\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n\n checkSanitizeDeprecation(opt);\n\n if (opt.hooks) {\n opt.hooks.options = opt;\n }\n\n if (callback) {\n const highlight = opt.highlight;\n let tokens;\n\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src);\n }\n tokens = lexer(src, opt);\n } catch (e) {\n return throwError(e);\n }\n\n const done = function(err) {\n let out;\n\n if (!err) {\n try {\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n out = parser(tokens, opt);\n if (opt.hooks) {\n out = opt.hooks.postprocess(out);\n }\n } catch (e) {\n err = e;\n }\n }\n\n opt.highlight = highlight;\n\n return err\n ? throwError(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!tokens.length) return done();\n\n let pending = 0;\n marked.walkTokens(tokens, function(token) {\n if (token.type === 'code') {\n pending++;\n setTimeout(() => {\n highlight(token.text, token.lang, function(err, code) {\n if (err) {\n return done(err);\n }\n if (code != null && code !== token.text) {\n token.text = code;\n token.escaped = true;\n }\n\n pending--;\n if (pending === 0) {\n done();\n }\n });\n }, 0);\n }\n });\n\n if (pending === 0) {\n done();\n }\n\n return;\n }\n\n if (opt.async) {\n return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)\n .then(src => lexer(src, opt))\n .then(tokens => opt.walkTokens ? Promise.all(marked.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)\n .then(tokens => parser(tokens, opt))\n .then(html => opt.hooks ? opt.hooks.postprocess(html) : html)\n .catch(throwError);\n }\n\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src);\n }\n const tokens = lexer(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n } catch (e) {\n return throwError(e);\n }\n };\n}\n\n/**\n * Marked\n */\nfunction marked(src, opt, callback) {\n return parseMarkdown(Lexer.lex, Parser.parse)(src, opt, callback);\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n marked.defaults = { ...marked.defaults, ...opt };\n changeDefaults(marked.defaults);\n return marked;\n};\n\nmarked.getDefaults = getDefaults;\n\nmarked.defaults = defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(...args) {\n const extensions = marked.defaults.extensions || { renderers: {}, childTokens: {} };\n\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack };\n\n // set async to true if it was set to true before\n opts.async = marked.defaults.async || opts.async || false;\n\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if (ext.renderer) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function(...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if (ext.tokenizer) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n if (extensions[ext.level]) {\n extensions[ext.level].unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if (ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = marked.defaults.renderer || new Renderer();\n for (const prop in pack.renderer) {\n const prevRenderer = renderer[prop];\n // Replace renderer with func to run extension, but fall back if false\n renderer[prop] = (...args) => {\n let ret = pack.renderer[prop].apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret;\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = marked.defaults.tokenizer || new Tokenizer();\n for (const prop in pack.tokenizer) {\n const prevTokenizer = tokenizer[prop];\n // Replace tokenizer with func to run extension, but fall back if false\n tokenizer[prop] = (...args) => {\n let ret = pack.tokenizer[prop].apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = marked.defaults.hooks || new Hooks();\n for (const prop in pack.hooks) {\n const prevHook = hooks[prop];\n if (Hooks.passThroughHooks.has(prop)) {\n hooks[prop] = (arg) => {\n if (marked.defaults.async) {\n return Promise.resolve(pack.hooks[prop].call(hooks, arg)).then(ret => {\n return prevHook.call(hooks, ret);\n });\n }\n\n const ret = pack.hooks[prop].call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n } else {\n hooks[prop] = (...args) => {\n let ret = pack.hooks[prop].apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = marked.defaults.walkTokens;\n opts.walkTokens = function(token) {\n let values = [];\n values.push(pack.walkTokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n\n marked.setOptions(opts);\n });\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens, callback) {\n let values = [];\n for (const token of tokens) {\n values = values.concat(callback.call(marked, token));\n switch (token.type) {\n case 'table': {\n for (const cell of token.header) {\n values = values.concat(marked.walkTokens(cell.tokens, callback));\n }\n for (const row of token.rows) {\n for (const cell of row) {\n values = values.concat(marked.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n values = values.concat(marked.walkTokens(token.items, callback));\n break;\n }\n default: {\n if (marked.defaults.extensions && marked.defaults.extensions.childTokens && marked.defaults.extensions.childTokens[token.type]) { // Walk any extensions\n marked.defaults.extensions.childTokens[token.type].forEach(function(childTokens) {\n values = values.concat(marked.walkTokens(token[childTokens], callback));\n });\n } else if (token.tokens) {\n values = values.concat(marked.walkTokens(token.tokens, callback));\n }\n }\n }\n }\n return values;\n};\n\n/**\n * Parse Inline\n * @param {string} src\n */\nmarked.parseInline = parseMarkdown(Lexer.lexInline, Parser.parseInline);\n\n/**\n * Expose\n */\nmarked.Parser = Parser;\nmarked.parser = Parser.parse;\nmarked.Renderer = Renderer;\nmarked.TextRenderer = TextRenderer;\nmarked.Lexer = Lexer;\nmarked.lexer = Lexer.lex;\nmarked.Tokenizer = Tokenizer;\nmarked.Slugger = Slugger;\nmarked.Hooks = Hooks;\nmarked.parse = marked;\n\nconst options = marked.options;\nconst setOptions = marked.setOptions;\nconst use = marked.use;\nconst walkTokens = marked.walkTokens;\nconst parseInline = marked.parseInline;\nconst parse = marked;\nconst parser = Parser.parse;\nconst lexer = Lexer.lex;\n\nexport { Hooks, Lexer, Parser, Renderer, Slugger, TextRenderer, Tokenizer, defaults, getDefaults, lexer, marked, options, parse, parseInline, parser, setOptions, use, walkTokens };\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + {\"151\":\"89efcaf3\",\"585\":\"8c17dc8f\"}[chunkId] + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"react-template:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkreact_template\"] = self[\"webpackChunkreact_template\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","import type { Parser } from '@visactor/vdataset';\n\n/**\n * dataView数据 解析器\n * @param data\n * @param options\n * @param dataView\n * @returns\n */\nexport const arrayParser: Parser = (array: []) => {\n return array;\n};\n","import type { IFillMarkSpec, IImageMarkSpec } from '../visual';\nimport type { LayoutCallBack } from '../../layout/interface';\nimport type { IElement, srIOption3DType } from '@visactor/vgrammar-core';\nimport type {\n DataSet,\n DataView,\n ISimplifyOptions,\n IFieldsOptions,\n IFilterOptions,\n IFoldOptions,\n IDsvParserOptions\n} from '@visactor/vdataset';\nimport type { IRegionSpec } from '../../region/interface';\nimport type { IHoverSpec, ISelectSpec, ITriggerSpec } from '../../interaction/interface';\nimport type { IRenderOption } from '../../compile/interface';\nimport type { ITooltipSpec } from '../../component/tooltip/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ILayoutSpec } from '../../layout/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type {\n ConvertToMarkStyleSpec,\n IArc3dMarkSpec,\n IArcMarkSpec,\n IAreaMarkSpec,\n IBoxPlotMarkSpec,\n ICommonSpec,\n IGroupMarkSpec,\n ILineMarkSpec,\n ILinkPathMarkSpec,\n IPathMarkSpec,\n IPolygonMarkSpec,\n IProgressArcMarkSpec,\n IPyramid3dMarkSpec,\n IRect3dMarkSpec,\n IRectMarkSpec,\n IRuleMarkSpec,\n ISymbolMarkSpec,\n IRippleMarkSpec,\n ITextMarkSpec,\n IVisualSpecScale\n} from '../visual';\nimport type { StateValue } from '../../compile/mark';\nimport type { ISeriesStyle, SeriesType } from '../../series/interface';\nimport type { Datum, StringOrNumber } from '../common';\nimport type { IInvalidType } from '../data';\nimport type { IMorphSeriesSpec } from '../../animation/spec';\nimport type { IPlayer } from '../../component/player';\nimport type { IMarkProgressiveConfig, MarkTypeEnum } from '../../mark/interface';\nimport type { IDataZoomSpec, IScrollBarSpec } from '../../component/data-zoom';\nimport type { ICrosshairSpec } from '../../component/crosshair/interface';\nimport type { ITheme } from '../../theme';\nimport type { ITitleSpec } from '../../component/title/interface';\nimport type { IBrushSpec } from '../../component/brush';\nimport type { ITotalLabelSpec } from '../../component/label';\nimport type { ILegendSpec } from '../../component/legend';\nimport type { ILayoutOrientPadding, ILayoutPaddingSpec } from '../layout';\nimport type { ICustomPath2D } from '@visactor/vrender-core';\nimport type { ICommonAxisSpec } from '../../component/axis';\nimport type { IMediaQuerySpec } from '..';\n\nexport type IChartPadding = ILayoutOrientPadding | number;\n\n/** chart option */\nexport interface IInitOption extends Omit {\n /**\n * **仅生效于浏览器环境。**\n * 图表挂载的父容器,可以直接指定容器 id,也可以传入 dom 对象\n */\n dom?: string | HTMLElement;\n /**\n * 除去选择 dom 属性进行挂载父容器,也可以使用 renderCanvas 属性直接传入 canvas 实例/ canvasId\n * 小程序/小组件环境请直接传入 id\n */\n renderCanvas?: string | HTMLCanvasElement;\n /** 数据集 */\n dataSet?: DataSet;\n /** 是否自适应容器大小 */\n autoFit?: boolean;\n /**\n * 性能测试钩子\n */\n performanceHook?: IPerformanceHook;\n /**\n * 是否开启动画\n */\n animation?: boolean;\n /**\n * 3d配置\n */\n options3d?: srIOption3DType;\n\n /**\n * 自定义布局函数\n */\n layout?: LayoutCallBack;\n\n /**\n * 当文本省略时,鼠标 hover 到文本上时是否显示 poptip\n * @default true\n */\n poptip?: boolean;\n\n /**\n * 报错的回调函数\n * @since 1.2.0\n */\n onError?: (...args: any[]) => void;\n\n /**\n * 默认主题(支持完整主题对象或者主题名称,主题名称需要提前在 `ThemeManager` 中注册)\n * @since 1.3.0\n */\n theme?: string | ITheme;\n\n /**\n * 是否关闭交互效果\n * @since 1.9.0\n * @default false\n */\n disableTriggerEvent?: boolean;\n}\n\nexport enum RenderModeEnum {\n 'desktop-browser' = 'desktop-browser',\n 'mobile-browser' = 'mobile-browser',\n 'node' = 'node',\n 'worker' = 'worker',\n 'miniApp' = 'miniApp',\n 'wx' = 'wx',\n 'desktop-miniApp' = 'desktop-miniApp',\n 'lynx' = 'lynx'\n}\nexport type RenderMode = keyof typeof RenderModeEnum;\n\n/** chart spec */\nexport interface IChartSpec {\n /** 图表类型 */\n type: string;\n /** 数据 */\n data?: IData;\n /** 画布宽度 */\n width?: number;\n /** 画布高度 */\n height?: number;\n /**\n * 图表宽高是否自适应容器,浏览器环境下默认为 true。\n * 该配置的优先级高于构造函数中的 autoFit 配置。\n * 如果用户配置了 width,则以用户配置的 width 为准,height 同理。\n */\n autoFit?: boolean;\n /**\n * 图表整体 padding 设置\n */\n padding?: ILayoutPaddingSpec;\n /**\n * 图表色系配置\n */\n color?: string[] | Omit, 'id'>;\n /**\n * 系列\n * @description 仅在组合图中使用, 文档中除组合图外均未透出该配置\n */\n series?: ISeriesSpec[];\n /**\n * 系列样式\n * @description 仅在图表配置了seriesField时生效\n */\n seriesStyle?: ISeriesStyle;\n\n /**\n * 自动关闭动画的阀值,对应的是单系列data的长度\n * @since 1.2.0\n */\n animationThreshold?: number;\n\n /** hover 交互 */\n hover?: boolean | IHoverSpec;\n /** select 交互 */\n select?: boolean | ISelectSpec;\n\n /** region配置 */\n region?: IRegionSpec[];\n /** 图表标题配置 */\n title?: ITitleSpec;\n /** 布局配置 */\n layout?: ILayoutSpec;\n /** 图例配置 */\n legends?: ILegendSpec | ILegendSpec[];\n /** 十字辅助线配置 */\n crosshair?: ICrosshairSpec | ICrosshairSpec[];\n /** tooltip配置 */\n tooltip?: ITooltipSpec;\n /** 播放器配置 */\n player?: IPlayer;\n /** 缩略轴配置 */\n dataZoom?: IDataZoomSpec | IDataZoomSpec[];\n /** 滚动条配置 */\n scrollBar?: IScrollBarSpec | IScrollBarSpec[];\n /** 框选配置 */\n brush?: IBrushSpec;\n /** 全局 scale 配置 */\n scales?: IVisualSpecScale[];\n /** 自定义mark */\n customMark?: ICustomMarkSpec[];\n /** 轴 */\n axes?: ICommonAxisSpec[];\n /**\n * 图表上的主题定义。\n * 可以直接配置主题名,前提是该主题名已经注册\n */\n theme?: Omit | string;\n /**\n * 图表背景色配置,优先级高于构造函数中的 background 配置\n */\n background?: IBackgroundSpec;\n\n // TODO:后续开放,现在仍有问题\n // poptip?: PopTipAttributes;\n // TODO: 补充动画配置\n\n /**\n * 堆积时是否逆序\n * @default false\n * @since 1.4.0\n */\n stackInverse?: boolean;\n /**\n * 媒体查询配置\n * @since 1.8.0\n */\n media?: IMediaQuerySpec;\n}\n\nexport type IBackgroundStyleSpec = ConvertToMarkStyleSpec> & {\n image?: IRectMarkSpec['background'];\n cornerRadius?: IRectMarkSpec['cornerRadius'];\n};\n\nexport type IBackgroundSpec = string | IBackgroundStyleSpec;\n\n/** data */\nexport type IDataType = IDataValues | DataView;\nexport type IData = IDataType | IDataType[];\nexport type DataKeyType = string | string[] | ((data: Datum, index: number) => string);\nexport type BuildInTransformOptions =\n | {\n /** 地理数据简化 */\n type: 'simplify';\n options: ISimplifyOptions;\n }\n | {\n /** 数据维度处理,包括排序,逆序,数据筛选能力 */\n type: 'fields';\n options: IFieldsOptions;\n }\n | {\n /** 使用回调的自定义筛选 */\n type: 'filter';\n options: IFilterOptions;\n }\n | {\n /** 数据展开 */\n type: 'fold';\n options: IFoldOptions;\n };\n\nexport interface IFieldsMeta {\n /** TODO: 字段通用format, 暂时先不支持 */\n // format?: (datum: Datum, index: number) => unknown;\n /** 字段别名 */\n alias?: string;\n /** 字段取值范围 */\n domain?: StringOrNumber[];\n /** 是否使用 domain 锁定统计信息。默认为 false */\n lockStatisticsByDomain?: boolean;\n /** 连续型 还是 离散型 */\n type?: 'ordinal' | 'linear';\n /** 排序顺序 不设置的话当前维度不进行排序 */\n sortIndex?: number;\n /** 排序时是否反转 默认为 false */\n sortReverse?: boolean;\n}\n\nexport interface SheetParseOptions extends CommonParseOptions {\n type: 'csv' | 'dsv' | 'tsv';\n options?: IDsvParserOptions;\n}\n\nexport interface CommonParseOptions {\n /**\n * 是否需要对数据进行 clone,默认为 true。\n * 如果考虑性能,你可以将其关闭,但是这会带了一些副作用,即我们会对传入的数据进行修改(不会对原有字段及值修改,只会在原有数据基础上添加一些字段)。\n * @default true\n * @since 1.3.0\n */\n clone?: boolean;\n}\n\nexport interface IDataValues {\n /**\n * 数据唯一标识\n */\n id?: StringOrNumber;\n /**\n * 数据\n */\n values: Datum[] | string;\n /**\n * 引用的数据索引\n */\n fromDataIndex?: number;\n /**\n * 引用的数据 id\n */\n fromDataId?: StringOrNumber;\n /**\n * 数据 transform 配置\n */\n transforms?: BuildInTransformOptions[];\n /**\n * 数据字段相关配置\n */\n fields?: Record<\n /** 字段key */\n string,\n IFieldsMeta\n >;\n\n parser?: SheetParseOptions | CommonParseOptions;\n}\n\nexport type IHierarchyNodeData = {\n value?: number;\n children?: IHierarchyNodeData[];\n} & Datum;\n\nexport interface IHierarchyDataValues extends Omit {\n values: IHierarchyNodeData;\n}\n\nexport type IHierarchyData = DataView | IHierarchyDataValues;\n\n/** series */\nexport interface ISeriesSpec extends ITriggerSpec {\n /** 系列类型 */\n type: SeriesType;\n\n /** 系列名称 */\n name?: string;\n\n /** 用户自定义的 series id */\n id?: StringOrNumber;\n /**\n * 系列数据\n * @description 系列可以配置自身的数据,也可以从chart.data中获取数据\n */\n data?: IDataType;\n /**\n * 系列关联的数据索引\n * @default 0\n */\n dataIndex?: number;\n /**\n * 系列关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * dataKey用于绑定数据与Mark的关系, 该配置在动画中非常重要.\n */\n dataKey?: DataKeyType;\n\n /**\n * 系列关联的region索引\n * @default 0\n */\n regionIndex?: number;\n /** 系列关联的region id */\n regionId?: StringOrNumber;\n /**\n * 分组字段\n */\n seriesField?: string;\n /**\n * 系列样式\n * @description 仅在图表配置了seriesField时生效\n */\n seriesStyle?: ISeriesStyle;\n\n /** 是否对数据进行堆叠处理 */\n stack?: boolean;\n\n /**\n * 堆叠时的分组值\n * stackValue 相等的系列将在一起堆积。没有配置的系列将在一组\n * @since 1.4.0\n */\n stackValue?: StringOrNumber;\n\n /** 堆叠汇总标签\n * @since 1.3.0\n */\n totalLabel?: ITotalLabelSpec;\n\n /** 是否对数据进行百分比处理 */\n percent?: boolean;\n\n /** 是否围绕中心轴偏移轮廓 */\n stackOffsetSilhouette?: boolean;\n\n /**\n * 非合规数据点连接方式\n * @description null,undefined等非法数据点连接方式。\n * @default 'break'\n * 'break'指在该数据点处断开\n * 'link' 指忽略该点保持连续\n * 'zero' 指该点默认数值为0\n * 'ignore' 指不处理\n */\n invalidType?: IInvalidType;\n\n /** 提示信息 */\n tooltip?: ITooltipSpec;\n\n /**\n * 是否开启系列动画\n */\n animation?: boolean;\n /**\n * 自动关闭动画的阀值,对应的是单系列data的长度\n * @since 1.2.0\n */\n animationThreshold?: number;\n\n /**\n * 是否支持3d视角\n */\n support3d?: boolean;\n /**\n * morph 动画配置\n */\n morph?: IMorphSeriesSpec;\n\n /**\n * 扩展mark\n */\n extensionMark?: (IExtensionMarkSpec> | IExtensionGroupMarkSpec)[];\n\n /**\n * series background\n * 作用是支持系列的图形对系列背景进行 mask,或者切分等效果。不是作为背景图\n * 暂时不开放api,避免出现break change\n */\n // background?: IBackgroundSpec;\n}\n\nexport type IChartExtendsSeriesSpec = Omit;\n\nexport type AdaptiveSpec = {\n [key in Exclude]: T[key];\n} & { [key in K]: any };\n\n/** markSpec */\nexport type IMarkSpec = {\n /**\n * 用户id\n */\n id?: StringOrNumber;\n /**\n * 是否响应交互\n */\n interactive?: boolean;\n // /**\n // * 是否会被region区域裁减\n // * @todo 暂未支持\n // */\n // clip?: boolean;\n /**\n * 与其他mark元素的层级\n */\n zIndex?: number;\n /**\n * mark 层 是否显示配置\n */\n visible?: boolean;\n /** 默认样式设置 */\n style?: ConvertToMarkStyleSpec;\n /** 不同状态下的样式配置 */\n state?: Record | IMarkStateStyleSpec>;\n\n /* 是否是3d视角的mark */\n support3d?: boolean;\n /* customized shape of mark */\n customShape?: (datum: any[], attrs: any, path: ICustomPath2D) => ICustomPath2D;\n} & IMarkProgressiveConfig;\n\nexport type IMarkStateFilter =\n | {\n /** 维度筛选 */\n fields: { [key in string]: { type: 'ordinal' | 'linear'; domain: StringOrNumber[] } };\n }\n | {\n /** 筛选数据 */\n datums: Datum[];\n /** 筛选数据 */\n datumKeys: string[];\n }\n | {\n /** 筛选 item */\n items: IElement[];\n }\n /** 筛选函数 */\n | ((datum: Datum, options: Record) => boolean);\n\nexport interface IMarkStateSpec {\n /** 筛选器 */\n filter?: IMarkStateFilter;\n /** 状态优先级 */\n level?: number | undefined;\n style: ConvertToMarkStyleSpec;\n}\n\nexport type IMarkStateStyleSpec = ConvertToMarkStyleSpec;\n\nexport type IMarkTheme = {\n /**\n * mark 层 是否显示配置\n */\n visible?: boolean;\n /** 默认样式设置 */\n style?: T;\n /** 不同状态下的样式配置 */\n state?: Record;\n /**\n * 可交互的开关\n */\n interactive?: boolean;\n};\n\nexport interface IPerformanceHook {\n // InitRender\n // ├── InitializeChart\n // ├── CompileToVGrammar\n // ├── ParseView\n // | └── ParseExpression\n // ├── (new View)\n // | ├── CreateRuntime\n // | └── (view.initialize)\n // | └── CreateVRenderStage\n // └── SrViewEvaluateAsync / SrViewRunAsync\n // ├── MarkTransform\n // ├── FacetTransform\n // ├── CreateVRenderMark\n // └── VRenderDraw\n\n // 初始化图表配置\n beforeInitializeChart?: () => void;\n afterInitializeChart?: () => void;\n\n // 编译\n beforeCompileToVGrammar?: () => void;\n afterCompileToVGrammar?: () => void;\n // 各个图表模块编译\n beforeRegionCompile?: () => void;\n afterRegionCompile?: () => void;\n beforeSeriesCompile?: () => void;\n afterSeriesCompile?: () => void;\n beforeComponentCompile?: () => void;\n afterComponentCompile?: () => void;\n\n // resize的时候的钩子\n beforeResizeWithUpdate?: () => void;\n afterResizeWithUpdate?: () => void;\n\n // LayoutWithSceneGraph 二次布局\n beforeLayoutWithSceneGraph?: () => void;\n afterLayoutWithSceneGraph?: () => void;\n\n // VGrammar 解析spec\n beforeParseView?: () => void;\n afterParseView?: () => void;\n\n // 初始化runtime\n beforeCreateRuntime?: () => void;\n afterCreateRuntime?: () => void;\n\n // VGrammar EvaluateAsync 时间\n beforeSrViewEvaluateAsync?: () => void;\n afterSrViewEvaluateAsync?: () => void;\n\n // VGrammar RunAsync 时间\n beforeSrViewRunAsync?: () => void;\n afterSrViewRunAsync?: () => void;\n\n // transform测量\n beforeTransform?: (name: string) => void;\n afterTransform?: (name: string) => void;\n\n // Create VRender Stage 时间\n beforeCreateVRenderStage?: () => void;\n afterCreateVRenderStage?: () => void;\n\n // Create VRender Mark 时间\n beforeCreateVRenderMark?: () => void;\n afterCreateVRenderMark?: () => void;\n\n // VRender Draw 时间\n beforeVRenderDraw?: () => void;\n afterVRenderDraw?: () => void;\n}\n\nexport type IBuildinMarkSpec = {\n [MarkTypeEnum.group]: IGroupMarkSpec;\n\n [MarkTypeEnum.symbol]: ISymbolMarkSpec;\n [MarkTypeEnum.rule]: IRuleMarkSpec;\n [MarkTypeEnum.line]: ILineMarkSpec;\n [MarkTypeEnum.text]: ITextMarkSpec;\n [MarkTypeEnum.rect]: IRectMarkSpec;\n [MarkTypeEnum.rect3d]: IRect3dMarkSpec;\n [MarkTypeEnum.image]: IImageMarkSpec;\n [MarkTypeEnum.path]: IPathMarkSpec;\n [MarkTypeEnum.area]: IAreaMarkSpec;\n [MarkTypeEnum.arc]: IArcMarkSpec;\n [MarkTypeEnum.arc3d]: IArc3dMarkSpec;\n [MarkTypeEnum.polygon]: IPolygonMarkSpec;\n [MarkTypeEnum.pyramid3d]: IPyramid3dMarkSpec;\n [MarkTypeEnum.boxPlot]: IBoxPlotMarkSpec;\n [MarkTypeEnum.linkPath]: ILinkPathMarkSpec;\n [MarkTypeEnum.progressArc]: IProgressArcMarkSpec;\n [MarkTypeEnum.ripple]: IRippleMarkSpec;\n};\nexport type EnableMarkType = keyof IBuildinMarkSpec;\nexport interface ICustomMarkSpec extends IMarkSpec {\n type: T;\n /**\n * 关联的数据索引\n * @default 与系列使用同一份数据\n */\n dataIndex?: number;\n /**\n * 关联的数据id\n */\n dataId?: StringOrNumber;\n}\nexport interface ICustomMarkGroupSpec extends ICustomMarkSpec {\n children?: ICustomMarkSpec[];\n}\n\nexport interface IExtensionMarkSpec> extends ICustomMarkSpec {\n /**\n * 关联的数据索引\n * @default 与系列使用同一份数据\n */\n dataIndex?: number;\n /**\n * 关联的数据id\n */\n dataId?: StringOrNumber;\n}\n\nexport interface IExtensionGroupMarkSpec extends ICustomMarkSpec {\n /**\n * 支持子节点\n */\n children?: ICustomMarkSpec[];\n}\n","export type ComponentType = keyof typeof ComponentTypeEnum | string;\n\nexport enum ComponentTypeEnum {\n cartesianAxis = 'cartesianAxis',\n cartesianBandAxis = 'cartesianAxis-band',\n cartesianLinearAxis = 'cartesianAxis-linear',\n cartesianTimeAxis = 'cartesianAxis-time',\n cartesianLogAxis = 'cartesianAxis-log',\n cartesianSymlogAxis = 'cartesianAxis-symlog',\n polarAxis = 'polarAxis',\n polarBandAxis = 'polarAxis-band',\n polarLinearAxis = 'polarAxis-linear',\n crosshair = 'crosshair',\n cartesianCrosshair = 'cartesianCrosshair',\n polarCrosshair = 'polarCrosshair',\n dataZoom = 'dataZoom',\n geoCoordinate = 'geoCoordinate',\n indicator = 'indicator',\n discreteLegend = 'discreteLegend',\n continuousLegend = 'continuousLegend',\n colorLegend = 'colorLegend',\n sizeLegend = 'sizeLegend',\n mapLabel = 'mapLabel',\n markLine = 'markLine',\n markArea = 'markArea',\n markPoint = 'markPoint',\n tooltip = 'tooltip',\n title = 'title',\n player = 'player',\n scrollBar = 'scrollBar',\n label = 'label',\n totalLabel = 'totalLabel',\n\n brush = 'brush',\n\n poptip = 'poptip',\n\n customMark = 'customMark'\n}\n","/**\n * check value type\n * @param value the value to check\n * @param type type\n * @returns\n */\nconst isType = (value: any, type: string): boolean => Object.prototype.toString.call(value) === `[object ${type}]`;\n\nexport default isType;\n","import isType from './isType';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `Number.isFinite` method.\n *\n * @param {*} value The value to check.\n * @param {boolean} fuzzy Whether to perform fuzzy judgment, for better performance,default to `false`.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * isNumber(3)\n * // => true\n *\n * isNumber(Number.MIN_VALUE)\n * // => true\n *\n * isNumber(Infinity)\n * // => true\n *\n * isNumber('3')\n * // => false\n */\nconst isNumber = (value: any, fuzzy: boolean = false): value is number => {\n const type = typeof value;\n if (fuzzy) {\n return type === 'number';\n }\n return type === 'number' || isType(value, 'Number');\n};\n\nexport default isNumber;\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-util/src/logger.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { isNumber } from './common';\nimport type { ILogger } from './type';\n\n// check console\nconst hasConsole = typeof console !== 'undefined';\n\nfunction log(method: string, level: any, input: any) {\n const args = [level].concat([].slice.call(input));\n\n if (hasConsole) {\n // eslint-disable-next-line prefer-spread, no-undef\n console[method].apply(console, args); // eslint-disable-line no-console\n }\n}\n\nexport enum LoggerLevel {\n None = 0,\n Error = 1,\n Warn = 2,\n Info = 3,\n Debug = 4\n}\n\ntype ErrorHandler = (...args: any[]) => void;\n\nexport class Logger implements ILogger {\n private static _instance: ILogger = null;\n\n static getInstance(level?: number, method?: string) {\n if (Logger._instance && isNumber(level)) {\n Logger._instance.level(level);\n } else if (!Logger._instance) {\n Logger._instance = new Logger(level, method);\n }\n return Logger._instance;\n }\n static setInstance(logger: ILogger) {\n return (Logger._instance = logger);\n }\n\n static setInstanceLevel(level: number) {\n if (Logger._instance) {\n Logger._instance.level(level);\n } else {\n Logger._instance = new Logger(level);\n }\n }\n\n static clearInstance() {\n Logger._instance = null;\n }\n\n private _level: number;\n\n private _method: string;\n\n private _onErrorHandler: ErrorHandler[] = [];\n\n constructor(level: number = LoggerLevel.None, method?: string) {\n this._level = level;\n this._method = method;\n }\n\n addErrorHandler(handler: ErrorHandler) {\n if (this._onErrorHandler.find(h => h === handler)) {\n return;\n }\n this._onErrorHandler.push(handler);\n }\n\n removeErrorHandler(handler: ErrorHandler) {\n const index = this._onErrorHandler.findIndex(h => h === handler);\n if (index < 0) {\n return;\n }\n this._onErrorHandler.splice(index, 1);\n }\n\n callErrorHandler(...args: any[]) {\n this._onErrorHandler.forEach(h => h(...args));\n }\n\n canLogInfo() {\n return this._level >= LoggerLevel.Info;\n }\n\n canLogDebug() {\n return this._level >= LoggerLevel.Debug;\n }\n\n canLogError() {\n return this._level >= LoggerLevel.Error;\n }\n\n canLogWarn() {\n return this._level >= LoggerLevel.Warn;\n }\n\n level(): number;\n level(levelValue: number): this;\n level(levelValue?: number) {\n if (arguments.length) {\n this._level = +levelValue;\n return this;\n }\n\n return this._level;\n }\n\n error(...args: any[]) {\n if (this._level >= LoggerLevel.Error) {\n if (this._onErrorHandler.length) {\n this.callErrorHandler(...args);\n } else {\n log(this._method ?? 'error', 'ERROR', args);\n }\n }\n return this;\n }\n\n warn(...args: any[]) {\n if (this._level >= LoggerLevel.Warn) {\n log(this._method || 'warn', 'WARN', args);\n }\n return this;\n }\n\n info(...args: any[]) {\n if (this._level >= LoggerLevel.Info) {\n log(this._method || 'log', 'INFO', args);\n }\n return this;\n }\n\n debug(...args: any[]) {\n if (this._level >= LoggerLevel.Debug) {\n log(this._method || 'log', 'DEBUG', args);\n }\n return this;\n }\n}\n","/**\n * 生成唯一ID。 如果提供了 prefix ,会被添加到ID前缀上。\n * @param prefix 默认 dataset\n * @returns\n */\nlet idIndex: number = 0;\nconst maxId = 100000000;\nexport function getUUID(prefix: string = 'dataset'): string {\n if (idIndex > maxId) {\n idIndex = 0;\n }\n return prefix + '_' + idIndex++;\n}\n","import type { ILogger } from '@visactor/vutils';\nimport { EventEmitter, Logger } from '@visactor/vutils';\nimport type { DataView } from './data-view';\nimport { getUUID } from './utils/uuid';\nimport type { Transform } from './transform';\nimport type { IParserOptions, Parser } from './parser';\n\ninterface IDataSetOptions {\n name?: string;\n logger?: Logger;\n}\n\n/**\n * 数据集\n */\nexport class DataSet {\n isDataSet: boolean = true;\n\n /**\n * 已注册的 Transform(key-value 对)\n */\n transformMap: Record = {};\n\n /**\n * 已注册的 Parser(key-value 对)\n */\n parserMap: Record = {};\n\n /**\n * 所有挂在数据集上的数据视图(key-value 对)\n */\n dataViewMap: Record = {};\n\n name: string;\n\n /**\n * 消息的监听与触发\n */\n target: any = new EventEmitter();\n\n /**\n * 多 DataView消息监听工具\n */\n // eslint-disable-next-line @typescript-eslint/ban-types\n _callMap: Map void>;\n\n protected _logger: ILogger;\n\n constructor(public options?: IDataSetOptions) {\n let name;\n if (options?.name) {\n name = options.name;\n } else {\n name = getUUID('dataset');\n }\n this.name = name;\n\n this._logger = options?.logger ?? Logger.getInstance();\n }\n\n setLogger(logger: Logger) {\n this._logger = logger;\n }\n\n /**\n * 根据name 获取 dataView\n * @param name - name\n */\n getDataView(name: string | number): DataView {\n return this.dataViewMap[name];\n }\n\n /**\n * 设置 dataView\n * @param name - 名称\n * @param dataView - data dataView\n */\n setDataView(name: string | number, dataView: DataView): void {\n if (this.dataViewMap[name]) {\n this._logger?.error(`Error: dataView ${name} 之前已存在,请重新命名`);\n }\n this.dataViewMap[name] = dataView;\n }\n\n /**\n * 移除 dataview\n * @param name\n */\n removeDataView(name: string | number) {\n this.dataViewMap[name] = null;\n\n delete this.dataViewMap[name];\n }\n\n /**\n * 注册一个数据解析器\n * @param name - 类型\n * @param parser - 解析逻辑\n */\n registerParser(name: string, parser: Parser): void {\n if (this.parserMap[name]) {\n this._logger?.warn(`Warn: transform ${name} 之前已注册,执行覆盖逻辑`);\n }\n this.parserMap[name] = parser;\n }\n\n /**\n * 移除 parser\n * @param name\n */\n removeParser(name: string) {\n this.parserMap[name] = null;\n delete this.parserMap[name];\n }\n\n /**\n * 根据名称获取数据解析器\n * @param name\n * @returns\n */\n getParser(name: string): Parser {\n return this.parserMap[name] || this.parserMap.default;\n }\n\n /**\n * 注册一个数据处理函数\n * @param name\n * @param transform\n */\n registerTransform(name: string, transform: Transform): void {\n if (this.transformMap[name]) {\n this._logger?.warn(`Warn: transform ${name} 之前已注册,执行覆盖逻辑`);\n }\n this.transformMap[name] = transform;\n }\n\n /**\n * 移除 transform\n * @param name\n */\n removeTransform(name: string) {\n this.transformMap[name] = null;\n delete this.transformMap[name];\n }\n\n /**\n * 根据名称获取数据处理函数\n * @param name\n * @returns\n */\n getTransform(name?: string): Transform {\n return this.transformMap[name];\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n multipleDataViewAddListener(list: DataView[], event: string, call: Function) {\n if (!this._callMap) {\n this._callMap = new Map();\n }\n\n let callAd = this._callMap.get(call);\n if (!callAd) {\n callAd = () => {\n if (list.some(l => l.isRunning)) {\n return;\n }\n call();\n };\n }\n list.forEach(l => {\n l.target.addListener(event, callAd);\n });\n this._callMap.set(call, callAd);\n }\n\n allDataViewAddListener(event: string, call: () => void) {\n this.multipleDataViewAddListener(Object.values(this.dataViewMap), event, call);\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n multipleDataViewRemoveListener(list: DataView[], event: string, call: Function) {\n if (this._callMap) {\n const callAd = this._callMap.get(call);\n if (callAd) {\n list.forEach(l => {\n l.target.removeListener(event, callAd);\n });\n }\n this._callMap.delete(call);\n }\n }\n\n multipleDataViewUpdateInParse(newData: { name: string; data: any; options?: IParserOptions }[]) {\n newData.forEach(d => this.getDataView(d.name)?.markRunning());\n newData.forEach(d => this.getDataView(d.name)?.parseNewData(d.data, d.options));\n }\n\n multipleDataViewUpdateInRawData(newData: { name: string; data: any; options?: IParserOptions }[]) {\n newData.forEach(d => this.getDataView(d.name)?.markRunning());\n newData.forEach(d => this.getDataView(d.name)?.updateRawData(d.data, d.options));\n }\n\n destroy() {\n this.transformMap = null;\n this.parserMap = null;\n this.dataViewMap = null;\n this._callMap = null;\n this.target.removeAllListeners();\n }\n}\n","import isType from './isType';\n\n/**\n * Checks if `value` is classified as a boolean primitive or object.\n * @param {*} value The value to check.\n * @param {boolean} fuzzy Whether to perform fuzzy judgment, for better performance,default to `false`.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * isBoolean(false)\n * // => true\n *\n * isBoolean(null)\n * // => false\n */\nconst isBoolean = (value: any, fuzzy: boolean = false): value is boolean => {\n if (fuzzy) {\n return typeof value === 'boolean';\n }\n return value === true || value === false || isType(value, 'Boolean');\n};\n\nexport default isBoolean;\n","import isType from './isType';\n\nconst isArray = (value: any): value is Array => {\n return Array.isArray ? Array.isArray(value) : isType(value, 'Array');\n};\n\nexport default isArray;\n","import type { DataView } from '../data-view';\nimport type { Parser } from '.';\nimport { isBoolean, isArray } from '@visactor/vutils';\n\nexport interface IDataViewParserOptions {\n dependencyUpdate?: boolean; // 是否依赖更新\n}\n\n/**\n * dataView数据 解析器\n * @param data\n * @param options\n * @param dataView\n * @returns\n */\nexport const dataViewParser: Parser = (data: DataView[], options: IDataViewParserOptions, dataView: DataView) => {\n const dependencyUpdate = isBoolean(options?.dependencyUpdate) ? options?.dependencyUpdate : true;\n\n if (!data || !isArray(data)) {\n throw new TypeError('Invalid data: must be DataView array!');\n }\n if (isArray(dataView.rawData)) {\n (dataView.rawData).forEach(rd => {\n if (rd.target) {\n rd.target.removeListener('change', dataView.reRunAllTransform);\n rd.target.removeListener('markRunning', dataView.markRunning);\n }\n });\n }\n\n if (dependencyUpdate) {\n data.forEach(d => {\n d.target.addListener('change', dataView.reRunAllTransform);\n d.target.addListener('markRunning', dataView.markRunning);\n });\n }\n return data;\n};\n","import isType from './isType';\n\nconst isDate = (value: any): value is Date => {\n return isType(value, 'Date');\n};\n\nexport default isDate;\n","import isType from './isType';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n * @param {*} value The value to check.\n * @param {boolean} fuzzy Whether to perform fuzzy judgment, for better performance,default to `false`.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * isString('abc')\n * // => true\n *\n * isString(1)\n * // => false\n */\nconst isString = (value: any, fuzzy: boolean = false): value is string => {\n const type = typeof value;\n if (fuzzy) {\n return type === 'string';\n }\n\n return type === 'string' || isType(value, 'String');\n};\n\nexport default isString;\n","const isValid = (value: T): value is NonNullable => {\n return value !== null && value !== undefined;\n};\n\nexport default isValid;\n","import isArray from './isArray';\nimport isBoolean from './isBoolean';\nimport isDate from './isDate';\nimport isNumber from './isNumber';\nimport isString from './isString';\nimport isValid from './isValid';\n\nexport default function cloneDeep(value: any): any {\n let result;\n if (!isValid(value) || typeof value !== 'object') {\n return value;\n }\n\n const isArr = isArray(value);\n const length = value.length;\n // 不考虑特殊数组的额外处理\n if (isArr) {\n result = new Array(length);\n }\n // 不考虑 buffer / arguments 类型的处理以及 prototype 的额外处理\n else if (typeof value === 'object') {\n result = {};\n }\n // 不建议使用作为 Boolean / Number / String 作为构造器\n else if (isBoolean(value) || isNumber(value) || isString(value)) {\n result = value;\n } else if (isDate(value)) {\n result = new Date(+value);\n }\n // 不考虑 ArrayBuffer / DataView / TypedArray / map / set / regexp / symbol 类型\n else {\n result = undefined;\n }\n\n // 不考虑 map / set / TypedArray 类型的赋值\n\n // 不考虑对象的 symbol 属性\n const props = isArr ? undefined : Object.keys(Object(value));\n\n let index = -1;\n if (result) {\n while (++index < (props || value).length) {\n const key = props ? props[index] : index;\n const subValue = value[key];\n result[key] = cloneDeep(subValue);\n }\n }\n return result;\n}\n","const isArrayLike = function (value: any): boolean {\n return value !== null && typeof value !== 'function' && Number.isFinite(value.length);\n};\n\nexport default isArrayLike;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * isObjectLike({})\n * // => true\n *\n * isObjectLike([1, 2, 3])\n * // => true\n *\n * isObjectLike(Function)\n * // => false\n *\n * isObjectLike(null)\n * // => false\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nconst isObjectLike = (value: any): value is object | Function | Array => {\n return typeof value === 'object' && value !== null;\n};\n\nexport default isObjectLike;\n","import isObjectLike from './isObjectLike';\nimport isType from './isType';\n\n/**\n * @see https://github.com/lodash/lodash/blob/master/isPlainObject.js\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1\n * }\n *\n * isPlainObject(new Foo)\n * // => false\n *\n * isPlainObject([1, 2, 3])\n * // => false\n *\n * isPlainObject({ 'x': 0, 'y': 0 })\n * // => true\n *\n * isPlainObject(Object.create(null))\n * // => true\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nconst isPlainObject = function (value: any): value is object {\n if (!isObjectLike(value) || !isType(value, 'Object')) {\n return false;\n }\n if (Object.getPrototypeOf(value) === null) {\n return true;\n }\n let proto = value;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(value) === proto;\n};\n\nexport default isPlainObject;\n","import isArray from './isArray';\nimport isArrayLike from './isArrayLike';\nimport isPlainObject from './isPlainObject';\nimport isValid from './isValid';\n\nfunction baseMerge(target: any, source: any, shallowArray: boolean = false) {\n if (source) {\n if (target === source) {\n return;\n }\n if (isValid(source) && typeof source === 'object') {\n // baseFor\n const iterable = Object(source);\n const props = [];\n // keysIn\n for (const key in iterable) {\n props.push(key);\n }\n let { length } = props;\n let propIndex = -1;\n while (length--) {\n const key = props[++propIndex];\n if (isValid(iterable[key]) && typeof iterable[key] === 'object') {\n baseMergeDeep(target, source, key, shallowArray);\n } else {\n assignMergeValue(target, key, iterable[key]);\n }\n }\n }\n }\n}\n\n// 由于目前 ChartSpace 内部对 spec 会先执行一次深拷贝,merge 暂时不考虑 source 中有环的问题\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction baseMergeDeep(target: object, source: object, key: string, shallowArray: boolean = false) {\n const objValue = target[key];\n const srcValue = source[key];\n let newValue = source[key];\n let isCommon = true;\n // 不考虑 buffer / typedArray 类型\n if (isArray(srcValue)) {\n if (shallowArray) {\n // 依据参数对数组做浅拷贝\n newValue = [];\n } else if (isArray(objValue)) {\n newValue = objValue;\n } else if (isArrayLike(objValue)) {\n // 如果 source 为数组,则 target 的 arrayLike 对象也视作为数组处理\n newValue = new Array(objValue.length);\n let index = -1;\n const length = objValue.length;\n while (++index < length) {\n newValue[index] = objValue[index];\n }\n }\n }\n // else if (isArray(srcValue) && shallowArray) {\n // newValue = [];\n // }\n // 不考虑 argument 类型\n else if (isPlainObject(srcValue)) {\n newValue = objValue;\n // 不考虑 prototype 的额外处理\n if (typeof objValue === 'function' || typeof objValue !== 'object') {\n newValue = {};\n }\n } else {\n isCommon = false;\n }\n // 对 class 等复杂对象或者浅拷贝的 array 不做拷贝处理\n if (isCommon) {\n baseMerge(newValue, srcValue, shallowArray);\n }\n assignMergeValue(target, key, newValue);\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction assignMergeValue(target: object, key: string, value: any) {\n if ((value !== undefined && !eq(target[key], value)) || (value === undefined && !(key in target))) {\n // 不考虑 __proto__ 的赋值处理\n target[key] = value;\n }\n}\n\nfunction eq(value: any, other: any) {\n return value === other || (Number.isNaN(value) && Number.isNaN(other));\n}\n\n// 与原生的 lodash merge 差异在于对数组是否应用最后一个 source 的结果\n// 例如 lineDash 等 spec 的 merge 使用这一操作更合适\nexport default function merge(target: any, ...sources: any[]): any {\n let sourceIndex = -1;\n const length = sources.length;\n while (++sourceIndex < length) {\n const source = sources[sourceIndex];\n baseMerge(target, source, true);\n }\n return target;\n}\n","const isNil = (value: any): value is null | undefined => {\n return value === null || value === undefined;\n};\n\nexport default isNil;\n","import type { IFields } from '../data-view';\nimport type { IFieldsMeta } from '../data-view';\nimport type { Transform } from '.';\n\ntype SortInfoType = {\n key: string;\n type: 'ordinal' | 'linear';\n index: number;\n sortIndex: { [key: string]: number };\n sortReverse: boolean;\n sortIndexCount: number;\n};\n\nexport interface IFieldsOptions {\n fields: IFields;\n}\n\ninterface IFieldsMetaTemp extends IFieldsMeta {\n _domainCache: { [key: string]: number };\n alias?: string;\n}\ninterface IFieldsTemp extends IFields {\n [key: string]: IFieldsMetaTemp;\n}\n\n/**\n * 数据过滤\n * @param data\n * @param options\n * @returns\n */\nexport const fields: Transform = (data: Array, options: IFieldsOptions) => {\n if (!options?.fields) {\n return data;\n }\n if (data.length === 0) {\n return data;\n }\n const fields = options.fields;\n const dataTemp = data[0];\n const filterFields: IFieldsTemp = {};\n const sortFields: SortInfoType[] = [];\n for (const key in fields) {\n if (Object.prototype.hasOwnProperty.call(fields, key)) {\n const fieldInfo = fields[key] as IFieldsMetaTemp;\n if (!fieldInfo.type) {\n let dataCheck = dataTemp;\n if (!(key in dataTemp)) {\n dataCheck = data.find(d => key in d) ?? dataTemp;\n }\n fieldInfo.type = typeof dataCheck[key] === 'number' ? 'linear' : 'ordinal';\n }\n let sortInfo: SortInfoType;\n if (typeof fieldInfo.sortIndex === 'number') {\n sortInfo = {\n key,\n type: fieldInfo.type,\n index: fieldInfo.sortIndex,\n sortIndex: {},\n sortIndexCount: 0,\n sortReverse: fieldInfo.sortReverse === true\n };\n sortFields.push(sortInfo);\n }\n // if has domain & type = ordinal, make domain cache\n if (fieldInfo.domain?.length > 0) {\n if (fieldInfo.type === 'ordinal') {\n fieldInfo._domainCache = {};\n filterFields[key] = fieldInfo;\n // for sort\n const _domainCache = {};\n fieldInfo.domain.forEach((d, i) => {\n _domainCache[d] = i;\n fieldInfo._domainCache[d] = i;\n });\n if (sortInfo) {\n sortInfo.sortIndex = _domainCache;\n sortInfo.sortIndexCount = fieldInfo.domain.length;\n }\n } else if (fieldInfo.domain.length >= 2) {\n filterFields[key] = fieldInfo;\n }\n }\n }\n }\n // domain filter and sort\n const filterKeys = Object.keys(filterFields);\n if (filterKeys.length > 0) {\n data = data.filter(d => {\n for (const key in filterFields) {\n const fieldInfo = filterFields[key];\n if (fieldInfo.type === 'ordinal') {\n if (!(d[key] in fieldInfo._domainCache)) {\n return false;\n }\n } else {\n if (fieldInfo.domain[0] > d[key] || fieldInfo.domain[1] < d[key]) {\n return false;\n }\n }\n }\n return true;\n });\n }\n\n sortFields.sort((a, b) => a.index - b.index);\n\n data.sort((a, b) => sortData(a, b, sortFields));\n\n return data;\n};\n\nfunction sortData(a: object, b: object, sortFields: SortInfoType[]) {\n for (let i = 0; i < sortFields.length; i++) {\n const sortInfo = sortFields[i];\n let v = 0;\n if (sortInfo.type === 'ordinal') {\n // eslint-disable-next-line no-undefined\n if (sortInfo.sortIndex[b[sortInfo.key]] === undefined) {\n sortInfo.sortIndex[b[sortInfo.key]] = sortInfo.sortIndexCount++;\n }\n // eslint-disable-next-line no-undefined\n if (sortInfo.sortIndex[a[sortInfo.key]] === undefined) {\n sortInfo.sortIndex[a[sortInfo.key]] = sortInfo.sortIndexCount++;\n }\n v = sortInfo.sortIndex[a[sortInfo.key]] - sortInfo.sortIndex[b[sortInfo.key]];\n } else if (sortInfo.type === 'linear') {\n v = a[sortInfo.key] - b[sortInfo.key];\n }\n if (sortInfo.sortReverse) {\n v = -v;\n }\n if (v === 0) {\n continue;\n }\n return v;\n }\n return 0;\n}\n","import { cloneDeep, EventEmitter, merge, isNil } from '@visactor/vutils';\nimport type { DataSet } from './data-set';\nimport type { ITransformOptions } from './transform';\nimport type { DATAVIEW_TYPE } from './constants';\nimport { getUUID } from './utils/uuid';\nimport type { IParserOptions } from './parser';\nimport { fields } from './transform/fields';\nexport interface IDataViewOptions {\n name?: string | number; // dataview 名称\n history?: boolean; // 是否启用 historyData 字段存储全部历史变化数据,默认false 不存储\n diffKeys?: string[]; // 用于指定该数据视图监听的 `states` 状态量的。默认监听所有状态量(也就是任何状态量变更都会导致数据视图重新计算),如果指定为空数组 [],则不监听任何状态量,如果指定为非空数组,则只监听数组元素对应的状态量变更。\n fields?: IFields;\n}\n\nexport interface IFieldsMeta {\n type?: 'ordinal' | 'linear';\n domain?: any[];\n sortIndex?: number;\n sortReverse?: boolean;\n [key: string]: unknown;\n}\n\nexport interface IFields {\n [key: string]: IFieldsMeta;\n}\n\nexport const DataViewDiffRank = '_data-view-diff-rank';\n\n/**\n * 数据视图\n * @public\n */\nexport class DataView {\n isDataView: boolean = true;\n\n type: DATAVIEW_TYPE;\n\n name: string | number;\n\n target: any = new EventEmitter();\n\n /**\n * 当前parser\n */\n parseOption: IParserOptions = null;\n\n /**\n * 已应用的 transform\n */\n transformsArr: Array = [];\n\n /**\n * 是否正在运行 parse 和 transform\n */\n isRunning: boolean = false;\n\n /**\n * 原始数据\n */\n rawData: any = {};\n\n history: boolean = false;\n /**\n * 中间态数据,默认 history false 不存储\n */\n historyData: any[];\n\n /**\n * parser后的数据\n */\n parserData: any = {};\n\n /**\n * 最终数据\n */\n latestData: any = {};\n\n /**\n * 数据维度信息\n */\n protected _fields: IFields = null;\n\n // diff用数据id\n private _diffData: boolean;\n private _diffKeys: string[];\n _diffMap: Map;\n _diffRank: number;\n\n // tag\n\n latestDataAUD: {\n add: any;\n update: any;\n del: any;\n };\n\n constructor(public dataSet: DataSet, public options?: IDataViewOptions) {\n let name;\n if (options?.name) {\n name = options.name;\n } else {\n name = getUUID('dataview');\n }\n this.name = name;\n\n if (options?.history) {\n this.history = options.history;\n this.historyData = [];\n }\n\n this.dataSet.setDataView(name, this);\n this.setFields(options?.fields);\n }\n\n /**\n * 解析数据\n * todo: parse instanceof DataView\n * todo: parse ['dataview1', 'dataview2']\n * @param data\n * @param options\n * @returns\n */\n parse(data: any, options?: IParserOptions, emit: boolean = false): DataView {\n this.isRunning = true;\n if (emit) {\n this.target.emit('beforeParse', []);\n }\n options && (this.parseOption = options);\n const cloneData = this.cloneParseData(data, options);\n if (options?.type) {\n // 默认bytejson\n const parserFn = this.dataSet.getParser(options.type) ?? this.dataSet.getParser('bytejson');\n\n const parserData = parserFn(cloneData, options.options, this);\n\n this.rawData = cloneData;\n this.parserData = parserData;\n\n if (this.history) {\n this.historyData.push(cloneData, parserData);\n }\n\n this.latestData = parserData;\n } else {\n this.parserData = cloneData;\n this.rawData = cloneData;\n\n if (this.history) {\n this.historyData.push(cloneData);\n }\n this.latestData = cloneData;\n }\n\n this.isRunning = false;\n if (emit) {\n this.target.emit('afterParse', []);\n }\n return this;\n }\n /**\n * 执行数据处理数据\n * @param options\n */\n transform(options: ITransformOptions, execute: boolean = true): DataView {\n this.isRunning = true;\n if (options && options.type) {\n // special transform\n let pushOption = true;\n if (options.type === 'fields') {\n this._fields = options.options.fields;\n // make sure only one fields\n const index = this.transformsArr.findIndex(_op => _op.type === options.type);\n if (index >= 0) {\n pushOption = false;\n this.transformsArr[index].options.fields = this._fields;\n }\n }\n pushOption && this.transformsArr.push(options);\n if (execute) {\n const lastTag = this.isLastTransform(options);\n\n this.executeTransform(options);\n if (lastTag) {\n this.diffLastData();\n }\n }\n }\n // 每次新增transform都要进行一次排序\n this.sortTransform();\n this.isRunning = false;\n return this;\n }\n private isLastTransform(options: ITransformOptions) {\n return this.transformsArr[this.transformsArr.length - 1] === options;\n }\n\n sortTransform() {\n if (this.transformsArr.length >= 2) {\n this.transformsArr.sort((a, b) => (a.level ?? 0) - (b.level ?? 0));\n }\n }\n\n private executeTransform(\n options: ITransformOptions,\n opt: { pushHistory: boolean; emitMessage: boolean } = {\n pushHistory: true,\n emitMessage: true\n }\n ) {\n const { pushHistory, emitMessage } = opt;\n const transformFn = this.dataSet.getTransform(options.type);\n const transformData = transformFn(this.latestData, options.options);\n\n if (this.history && pushHistory !== false) {\n this.historyData.push(transformData);\n }\n\n this.latestData = transformData;\n emitMessage !== false && this.target.emit('change', []);\n }\n\n private resetTransformData() {\n this.latestData = this.parserData;\n if (this.history) {\n this.historyData.length = 0;\n this.historyData.push(this.rawData, this.parserData);\n }\n }\n\n reRunAllTransform = (\n opt: { pushHistory: boolean; emitMessage: boolean } = {\n pushHistory: true,\n emitMessage: true\n }\n ) => {\n this.isRunning = true;\n this.resetTransformData();\n this.transformsArr.forEach(t => {\n this.executeTransform(t, { pushHistory: opt.pushHistory, emitMessage: false });\n if (this.isLastTransform(t)) {\n this.diffLastData();\n }\n });\n this.isRunning = false;\n\n opt.emitMessage !== false && this.target.emit('change', []);\n return this;\n };\n\n enableDiff(keys: string[]) {\n this._diffData = true;\n this._diffKeys = keys;\n\n this._diffMap = new Map();\n this._diffRank = 0;\n }\n\n disableDiff() {\n this._diffData = false;\n this._diffMap = null;\n this._diffRank = null;\n }\n\n resetDiff() {\n this._diffMap = new Map();\n this._diffRank = 0;\n }\n\n protected diffLastData() {\n if (!this._diffData) {\n return;\n }\n if (!this.latestData.forEach) {\n return;\n }\n if (!this._diffKeys?.length) {\n return;\n }\n const next = this._diffRank + 1;\n if (this._diffRank === 0) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n this.latestData.forEach((d: Object) => {\n d[DataViewDiffRank] = next;\n this._diffMap.set(\n this._diffKeys.reduce((pre, k) => pre + d[k], ''),\n d\n );\n });\n this.latestDataAUD = {\n add: Array.from(this.latestData),\n del: [],\n update: []\n };\n } else {\n this.latestDataAUD = {\n add: [],\n del: [],\n update: []\n };\n let tempKey;\n // eslint-disable-next-line @typescript-eslint/ban-types\n this.latestData.forEach((d: Object) => {\n d[DataViewDiffRank] = next;\n tempKey = this._diffKeys.reduce((pre, k) => pre + d[k], '');\n if (this._diffMap.get(tempKey)) {\n this.latestDataAUD.update.push(d);\n } else {\n this.latestDataAUD.add.push(d);\n }\n this._diffMap.set(tempKey, d);\n });\n this._diffMap.forEach((v, k) => {\n if (v[DataViewDiffRank] < next) {\n this.latestDataAUD.del.push(v);\n this._diffMap.delete(k);\n }\n });\n }\n this._diffRank = next;\n }\n\n private cloneParseData(data: any, options?: IParserOptions) {\n let clone = false;\n if (!(data instanceof DataView) && options?.clone === true) {\n clone = true;\n }\n return clone ? cloneDeep(data) : data;\n }\n\n parseNewData(data: any, options?: IParserOptions) {\n this.parse(data, options || this.parseOption);\n this.reRunAllTransform();\n }\n\n updateRawData(data: any, options?: IParserOptions) {\n const cloneData = this.cloneParseData(data, options);\n this.rawData = cloneData;\n this.parserData = cloneData;\n this.latestData = cloneData;\n this.reRunAllTransform();\n }\n\n // updateParseData(data: any) {\n // // this.parse(data, this.parseOption);\n // this.parserData = data;\n // this.reRunAllTransform();\n // }\n // AddParseData(data: any) {\n // this.parse(data, this.parseOption);\n // this.reRunAllTransform();\n // }\n // RemParseData(data: any) {\n // this.parse(data, this.parseOption);\n // this.reRunAllTransform();\n // }\n\n markRunning = () => {\n this.isRunning = true;\n this.target.emit('markRunning', []);\n };\n\n getFields() {\n if (this._fields) {\n return this._fields;\n }\n if (this.parseOption?.type === 'dataview' && this.rawData.length === 1 && this.rawData[0].getFields) {\n return this.rawData[0].getFields();\n }\n return null;\n }\n\n setFields(f: IFields, foreMerge: boolean = false) {\n if (f && foreMerge) {\n this._fields = merge({}, this._fields, f);\n } else {\n this._fields = f;\n }\n\n const fieldsOption = this.transformsArr.find(_op => _op.type === 'fields');\n if (!isNil(this._fields) && isNil(fieldsOption)) {\n // add\n this.dataSet.registerTransform('fields', fields);\n this.transform(\n {\n type: 'fields',\n options: {\n fields: this._fields\n }\n },\n false\n );\n } else if (fieldsOption) {\n // update\n fieldsOption.options.fields = this._fields;\n }\n }\n\n destroy() {\n this.dataSet.removeDataView(this.name);\n this._diffMap = null;\n this._diffRank = null;\n this.latestData = null;\n this.rawData = null;\n this.parserData = null;\n this.transformsArr = null;\n this.target = null;\n }\n}\n","const isObject = value => {\n const type = typeof value;\n return null !== value && \"object\" === type || \"function\" === type;\n};\n\nexport default isObject;","import isNumber from './isNumber';\n\nconst isValidNumber = (value: any): value is number => {\n // isFinate 包含来 isNaN 的判断\n return isNumber(value) && Number.isFinite(value);\n};\n\nexport default isValidNumber;\n","/**\n * @see https://github.com/lodash/lodash/blob/master/debounce.js\n */\nimport isObject from './isObject';\nimport isValidNumber from './isValidNumber';\n\nexport type FunctionControlOptions = {\n // 是否在等待开始时调用\n leading?: boolean;\n // 是否在等待结束后调用\n trailing?: boolean;\n // 最长等待时间\n maxWait?: number;\n};\n\nlet hasRaf: boolean = false;\ntry {\n hasRaf = typeof requestAnimationFrame === 'function' && typeof cancelAnimationFrame === 'function';\n} catch (err) {\n hasRaf = false;\n}\nhasRaf = false;\n\nfunction debounce(\n func: (...args: T[]) => S,\n wait: number,\n options?: FunctionControlOptions\n): (...args: T[]) => S {\n let lastArgs: any;\n let lastThis: any;\n let maxWait: number;\n let result: any;\n // eslint-disable-next-line no-undef\n let timerId: number | NodeJS.Timeout | undefined;\n let lastCallTime: number | undefined;\n\n let lastInvokeTime = 0;\n let leading = false;\n let maxing = false;\n let trailing = true;\n\n // Bypass `requestAnimationFrame` by explicitly setting `wait=0`.\n const useRAF = !wait && wait !== 0 && hasRaf;\n\n if (typeof func !== 'function') {\n throw new TypeError('Expected a function');\n }\n wait = +wait || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n if (maxing) {\n maxWait = Math.max(isValidNumber(options.maxWait) ? options.maxWait : 0, wait);\n }\n\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time: number) {\n const args = lastArgs;\n const thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function startTimer(pendingFunc: any, wait: number) {\n if (useRAF) {\n cancelAnimationFrame(timerId as number);\n return requestAnimationFrame(pendingFunc);\n }\n return setTimeout(pendingFunc, wait);\n }\n\n function cancelTimer(id: number) {\n if (useRAF) {\n return cancelAnimationFrame(id);\n }\n clearTimeout(id);\n }\n\n function leadingEdge(time: number) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = startTimer(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time: number) {\n const timeSinceLastCall = time - (lastCallTime as number);\n const timeSinceLastInvoke = time - lastInvokeTime;\n const timeWaiting = wait - timeSinceLastCall;\n\n return maxing ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;\n }\n\n function shouldInvoke(time: number) {\n const timeSinceLastCall = time - (lastCallTime as number);\n const timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (\n lastCallTime === undefined ||\n timeSinceLastCall >= wait ||\n timeSinceLastCall < 0 ||\n (maxing && timeSinceLastInvoke >= maxWait)\n );\n }\n\n function timerExpired() {\n const time = Date.now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = startTimer(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time: number) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n cancelTimer(timerId as number);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(Date.now());\n }\n\n function pending() {\n return timerId !== undefined;\n }\n\n function debounced(...args: any[]) {\n const time = Date.now();\n const isInvoking = shouldInvoke(time);\n\n lastArgs = args;\n // @ts-ignore\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = startTimer(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = startTimer(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n debounced.pending = pending;\n return debounced;\n}\n\nexport default debounce;\n","import type { ISeriesSpec } from '../../typings';\nimport { isArray, isPlainObject, isString } from '@visactor/vutils';\n\n// todo 以目前的场景来看,并没有递归的需要。\n// 考虑到不确定性,还是递归处理spec对象,时间消耗很少\nexport function specTransform(\n spec: unknown,\n special: {\n [key: string]: (v: unknown) => unknown;\n } = {\n data: v => v\n }\n): unknown {\n if (!spec) {\n return spec;\n }\n // 如果是普通对象\n if (spec.constructor === Object) {\n const result: any = {};\n for (const key in spec as any) {\n if (Object.prototype.hasOwnProperty.call(spec, key)) {\n // todo 特殊处理怎样更合理?\n if (special[key]) {\n result[key] = special[key](spec[key]);\n continue;\n }\n result[key] = specTransform(spec[key], special);\n }\n }\n return result;\n }\n // 如果是数组\n if (isArray(spec)) {\n return spec.map(s => specTransform(s, special));\n }\n return spec;\n}\n\n/**\n * functionTransform is used to replace the function registered by the instance\n * @param spec\n * @returns\n */\nexport function functionTransform(spec: ISeriesSpec, VChart: any): any {\n if (!spec) {\n return spec;\n }\n // 如果是普通对象\n if (isPlainObject(spec)) {\n const result: any = {};\n for (const key in spec as any) {\n if (Object.prototype.hasOwnProperty.call(spec, key)) {\n // 如果使用了注册函数\n if (isString(spec[key]) && VChart.getFunction(spec[key])) {\n result[key] = VChart.getFunction(spec[key]);\n continue;\n }\n result[key] = functionTransform(spec[key], VChart);\n }\n }\n return result;\n }\n // 如果是数组\n if (isArray(spec)) {\n return (spec as ISeriesSpec[]).map((s: ISeriesSpec) => functionTransform(s, VChart));\n }\n return spec;\n}\n","import isArray from './isArray';\nimport isArrayLike from './isArrayLike';\nimport isValid from './isValid';\n\n/**\n * 将传入数据转换为数组格式\n * @param arr 入参。\n * @returns 数组\n */\nexport function array(arr?: T | T[]): T[] {\n if (isValid(arr)) {\n return isArray(arr) ? arr : [arr];\n }\n return [];\n}\n\n/**\n * 获取数组的最后一个值,如果传入的参数为非数组,则返回 undefined\n * @param val any\n * @returns\n */\nexport function last(val: T | T[]): T | undefined {\n if (isArrayLike(val)) {\n const arr = val as ArrayLike;\n return arr[arr.length - 1];\n }\n return undefined;\n}\n\n/**\n * 获取数组第一项与最后一项的差值,如果数组为空\b则返回 0\n * @param arr\n * @returns\n */\nexport const span = (arr: number[]) => {\n if (arr.length <= 1) {\n return 0;\n }\n return (last(arr) as number) - arr[0];\n};\n\n/**\n * 获取数组中的最大值\n * @param arr 数组\n * @param compareFn 比较函数,返回正数表示 a > b,返回负数表示 a < b,返回 0 表示相等\n * @returns\n */\nexport const maxInArray = (arr: T[], compareFn?: (a: T, b: T) => number): T | undefined => {\n if (arr.length === 0) {\n return undefined;\n }\n let max = arr[0];\n for (let i = 1; i < arr.length; i++) {\n const value = arr[i];\n if (compareFn?.(value, max) ?? (value as number) - (max as number) > 0) {\n max = value;\n }\n }\n return max;\n};\n\n/**\n * 获取数组中的最小值\n * @param arr 数组\n * @param compareFn 比较函数,返回正数表示 a > b,返回负数表示 a < b,返回 0 表示相等\n * @returns\n */\nexport const minInArray = (arr: T[], compareFn?: (a: T, b: T) => number): T | undefined => {\n if (arr.length === 0) {\n return undefined;\n }\n let min = arr[0];\n for (let i = 1; i < arr.length; i++) {\n const value = arr[i];\n if (compareFn?.(value, min) ?? (value as number) - (min as number) < 0) {\n min = value;\n }\n }\n return min;\n};\n\n/**\n * 判断两个数组是否相同\n * @param a\n * @param b\n * @returns\n */\nexport function arrayEqual(a: any, b: any): boolean {\n if (!isArray(a) || !isArray(b)) {\n return false;\n }\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * 封装并返回无重复的数组\n * @param arr\n * @returns\n */\nexport function uniqArray(arr: T | T[]): T | T[] {\n if (!arr || !isArray(arr)) {\n return arr;\n }\n return Array.from(new Set(array(arr)));\n}\n\n// Based on http://jsfromhell.com/array/shuffle\nexport function shuffleArray(arr: T[], random: () => number = Math.random): T[] {\n let j;\n let x;\n let i = arr.length;\n\n while (i) {\n j = Math.floor(random() * i);\n x = arr[--i];\n arr[i] = arr[j];\n arr[j] = x;\n }\n return arr;\n}\n\n/**\n * 展开多层数组,非数组内容将变为 [input]\n * @param arr\n * @returns\n */\nexport function flattenArray(arr: any): any[] {\n if (!isArray(arr)) {\n return [arr];\n }\n const result = [];\n for (const value of arr) {\n result.push(...flattenArray(value));\n }\n return result;\n}\n","let VChartId = 0;\nconst VChartIdMax = 9999999;\n\nexport function createID(): number {\n VChartId >= VChartIdMax && (VChartId = 0);\n return VChartId++;\n}\n\nexport function resetID() {\n VChartId = 0;\n}\n","import {\n isObject,\n isFunction,\n isArray,\n isString,\n isNumber,\n isRegExp,\n isBoolean,\n isDate,\n isUndefined,\n isNull,\n isNil,\n isValid,\n isArrayLike,\n isValidNumber,\n isPlainObject\n} from '@visactor/vutils';\nimport type { IDataDomainSpec } from '../typings';\n\nexport {\n isObject,\n isFunction,\n isArray,\n isString,\n isNumber,\n isRegExp,\n isBoolean,\n isDate,\n isUndefined,\n isNull,\n isNil,\n isValid,\n isArrayLike,\n isValidNumber,\n isPlainObject\n};\n\nexport function couldBeValidNumber(v: any) {\n if (v === null || v === undefined || v === '') {\n return false;\n }\n if (isNumber(v)) {\n return true;\n }\n // eslint-disable-next-line no-self-compare\n return +v === +v;\n}\n\nexport function toValidNumber(v: any) {\n if (isValidNumber(v)) {\n return v;\n }\n const value = +v;\n return isValidNumber(value) ? value : 0;\n}\n\n/**\n * 检测一段字符串为合法数值\n */\nexport function isNumeric(value: string): boolean {\n if (typeof value !== 'string') {\n return false;\n }\n return !isNaN(Number(value)) && !isNaN(parseFloat(value));\n}\n\nexport function isDataDomainSpec(domain: any): domain is IDataDomainSpec[] {\n if (!domain || domain.length === 0) {\n return false;\n }\n if (isNil(domain[0]) || isNil(domain[0].dataId)) {\n return false;\n }\n return isArray(domain[0].fields);\n}\n","/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * isFunction(class Any{})\n * // => true\n *\n * isFunction(() => {})\n * // => true\n *\n * isFunction(async () => {})\n * // => true\n *\n * isFunction(function * Any() {})\n * // => true\n *\n * isFunction(Math.round)\n * // => true\n *\n * isFunction(/abc/)\n * // => false\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nconst isFunction = (value: any): value is Function => {\n return typeof value === 'function';\n};\n\nexport default isFunction;\n","import { isArray, type IBoundsLike } from '@visactor/vutils';\nimport { isNumber, isNil, isString, isFunction, couldBeValidNumber, isObject } from './type';\nimport type { IPadding, IRect } from '../typings/space';\nimport type { IPoint } from '../typings/coordinate';\nimport type {\n ILayoutNumber,\n ILayoutRect,\n IPercent,\n IPercentOffset,\n ILayoutPaddingSpec,\n ILayoutOrientPadding\n} from '../typings/layout';\n\nexport function isValidOrient(orient: string): boolean {\n switch (orient) {\n case 'left':\n case 'right':\n case 'top':\n case 'bottom':\n return true;\n default:\n return false;\n }\n}\n\nexport function isPercent(v: any): v is IPercent {\n if (!isString(v)) {\n return false;\n }\n if (!v.endsWith('%')) {\n return false;\n }\n return couldBeValidNumber(v.substring(0, v.length - 1));\n}\n\nexport function isPercentOffset(v: any): v is IPercentOffset {\n if (!isObject(v)) {\n return false;\n }\n if ('percent' in v || 'offset' in v) {\n return true;\n }\n return false;\n}\n\nexport function calcLayoutNumber(\n v: ILayoutNumber | undefined,\n size: number,\n callOp?: ILayoutRect //如果是函数类型的话,函数的参数\n) {\n if (isNumber(v)) {\n return v;\n }\n if (isPercent(v)) {\n return (Number(v.substring(0, v.length - 1)) * size) / 100;\n }\n if (isFunction(v)) {\n return v(callOp);\n }\n if (isObject(v)) {\n return size * (v.percent ?? 0) + (v.offset ?? 0);\n }\n return 0;\n}\n\nexport function calcPadding(\n paddingSpec: ILayoutOrientPadding,\n rect: ILayoutRect,\n callOp: ILayoutRect //如果是函数类型的话,函数的参数\n): IPadding {\n const result: IPadding = {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n };\n if (Object.values(paddingSpec).every(value => isNumber(value))) {\n result.top = (paddingSpec).top ?? 0;\n result.right = (paddingSpec).right ?? 0;\n result.bottom = (paddingSpec).bottom ?? 0;\n result.left = (paddingSpec).left ?? 0;\n return result;\n }\n const paddings = [\n {\n orients: ['left', 'right'],\n size: rect.width\n },\n {\n orients: ['top', 'bottom'],\n size: rect.height\n }\n ];\n paddings.forEach(p => {\n p.orients.forEach(o => {\n result[o] = calcLayoutNumber(paddingSpec[o], p.size, callOp);\n });\n });\n return result;\n}\n\nexport function boundsInRect(bounds: IBoundsLike, rect: ILayoutRect): ILayoutRect {\n if (!bounds) {\n return { width: 0, height: 0 };\n }\n return {\n width: Math.ceil(Math.min(bounds.x2 - bounds.x1, rect.width)),\n height: Math.ceil(Math.min(bounds.y2 - bounds.y1, rect.height))\n };\n}\n\nexport function normalizeLayoutPaddingSpec(spec: ILayoutPaddingSpec): ILayoutOrientPadding {\n let result: ILayoutOrientPadding = {};\n if (isArray(spec)) {\n if (!isNil(spec[0])) {\n result.top = result.left = result.bottom = result.right = spec[0];\n }\n if (!isNil(spec[1])) {\n result.left = result.right = spec[1];\n }\n if (!isNil(spec[2])) {\n result.bottom = spec[2];\n }\n if (!isNil(spec[3])) {\n result.left = spec[3];\n }\n return result;\n }\n if (isNumber(spec) || isPercent(spec) || isFunction(spec) || isPercentOffset(spec)) {\n result.top = result.left = result.bottom = result.right = spec;\n return result;\n }\n if (isObject(spec)) {\n result = { ...spec };\n return result;\n }\n return result;\n}\n\nexport function convertPoint(point: IPoint, relativePoint: IPoint, convert: boolean) {\n if (convert) {\n return {\n x: point.x + relativePoint.x,\n y: point.y + relativePoint.y\n };\n }\n return point;\n}\n\n/**\n * 将相对数值转换为绝对数值\n * @param originValue 原始值(相对值或绝对值)\n * @param total 总体值\n * @returns 实际绝对数值\n */\nexport const getActualNumValue = (originValue: number | string, total: number): number => {\n const originNumValue = Number(originValue);\n const originStrValue = originValue.toString();\n if (isNaN(originNumValue) && originStrValue[originStrValue.length - 1] === '%') {\n return total * (Number(originStrValue.slice(0, originStrValue.length - 1)) / 100);\n }\n return originNumValue;\n};\n","export class Application {}\n\nexport const application = new Application;","import { application } from './application';\n\nlet _isBrowserEnv: boolean | undefined;\n\n/**\n * 仅能判断是否是浏览器环境和NodeJS环境,其他环境不一定判断出来\n * @returns\n */\nfunction initIsBrowserEnv() {\n if (_isBrowserEnv != null) {\n return;\n }\n try {\n // @ts-ignore\n _isBrowserEnv = globalThis === window;\n if (_isBrowserEnv) {\n _isBrowserEnv = !!document.createElement;\n }\n } catch (err: any) {\n _isBrowserEnv = false;\n }\n}\n\nexport function isBrowserEnv(): boolean {\n initIsBrowserEnv();\n const env = application.global && application.global.env;\n return env ? env === 'browser' : _isBrowserEnv;\n}\n\nexport function isNodeEnv() {\n initIsBrowserEnv();\n const env = application.global && application.global.env;\n return env ? env === 'node' : !_isBrowserEnv;\n}\n\nexport function getCurrentEnv(): 'browser' | 'node' {\n return isBrowserEnv() ? 'browser' : 'node';\n}\n","import { isBrowserEnv } from '@visactor/vrender-core';\nimport type { RenderMode } from '../typings/spec';\n\nexport const isBrowser = isBrowserEnv();\nexport const domDocument = isBrowser && globalThis ? globalThis.document : undefined;\n\n// Taro 会模拟实现 DOM,所以还是加上 mode 的判断\nexport function isTrueBrowser(mode: RenderMode): boolean {\n return (mode === 'desktop-browser' || mode === 'mobile-browser') && isBrowser;\n}\n\nexport function isPcLikeMode(mode: RenderMode) {\n return mode === 'desktop-miniApp' || mode === 'desktop-browser';\n}\n\nexport function isMobileLikeMode(mode: RenderMode) {\n return isMiniAppLikeMode(mode) || mode === 'mobile-browser';\n}\n\nexport function isMiniAppLikeMode(mode: RenderMode) {\n return mode.includes('miniApp') || mode === 'lynx' || mode === 'wx';\n}\n","import { Logger, isFunction } from '@visactor/vutils';\n\nexport const log = (msg: string, ...args: any[]) => {\n if (!config.silent) {\n return Logger.getInstance().info(msg, ...args);\n }\n return null;\n};\n\nexport const warn = (msg: string, detail?: any) => {\n if (isFunction(config.warnHandler)) {\n config.warnHandler.call(null, msg, detail);\n }\n if (detail) {\n return Logger.getInstance().warn(`[VChart warn]: ${msg}`, detail);\n }\n return Logger.getInstance().warn(`[VChart warn]: ${msg}`);\n};\n\nexport const error = (msg: string, detail?: any, err?: Error) => {\n if (config.silent) {\n return;\n }\n if (isFunction(config.errorHandler)) {\n config.errorHandler.call(null, msg, detail);\n return;\n }\n throw new Error(msg);\n};\n\nexport const config = {\n silent: false,\n warnHandler: false,\n errorHandler: false\n} as unknown as IConfig;\n\nexport interface IConfig {\n /**\n * 是否开启控制台告警\n */\n silent: boolean;\n /**\n * 错误处理\n */\n errorHandler?: (msg: string, detail?: any) => void;\n /**\n * 警告处理\n */\n warnHandler?: (msg: string, detail?: any) => void;\n}\n","import { isArray, isArrayLike, isObject, isPlainObject, isValid } from '@visactor/vutils';\nimport type { StringOrNumber } from '../../typings';\n\nfunction baseMerge(target: any, source: any, shallowArray: boolean = false) {\n if (source) {\n if (target === source) {\n return;\n }\n if (isValid(source) && typeof source === 'object') {\n // baseFor\n const iterable = Object(source);\n const props = [];\n // keysIn\n for (const key in iterable) {\n props.push(key);\n }\n let { length } = props;\n let propIndex = -1;\n while (length--) {\n const key = props[++propIndex];\n if (\n isValid(iterable[key]) &&\n typeof iterable[key] === 'object' &&\n !isArray(target[key]) // VChart 特有逻辑\n ) {\n baseMergeDeep(target, source, key, shallowArray);\n } else {\n assignMergeValue(target, key, iterable[key]);\n }\n }\n }\n }\n}\n\n// 由于目前 VChart 内部对 spec 会先执行一次深拷贝,merge 暂时不考虑 source 中有环的问题\nfunction baseMergeDeep(target: object, source: object, key: string, shallowArray: boolean = false) {\n const objValue = target[key];\n const srcValue = source[key];\n let newValue = source[key];\n let isCommon = true;\n // 不考虑 buffer / typedArray 类型\n if (isArray(srcValue)) {\n if (shallowArray) {\n // 依据参数对数组做浅拷贝\n newValue = [];\n } else if (isArray(objValue)) {\n newValue = objValue;\n } else if (isArrayLike(objValue)) {\n // 如果 source 为数组,则 target 的 arrayLike 对象也视作为数组处理\n newValue = new Array(objValue.length);\n let index = -1;\n const length = objValue.length;\n while (++index < length) {\n newValue[index] = objValue[index];\n }\n }\n }\n // else if (isArray(srcValue) && shallowArray) {\n // newValue = [];\n // }\n // 不考虑 argument 类型\n else if (isPlainObject(srcValue)) {\n newValue = objValue ?? {};\n // 不考虑 prototype 的额外处理\n if (typeof objValue === 'function' || typeof objValue !== 'object') {\n newValue = {};\n }\n } else {\n isCommon = false;\n }\n // 对 class 等复杂对象或者浅拷贝的 array 不做拷贝处理\n if (isCommon) {\n baseMerge(newValue, srcValue, shallowArray);\n }\n assignMergeValue(target, key, newValue);\n}\n\nfunction assignMergeValue(target: object, key: string, value: any) {\n if ((value !== undefined && !eq(target[key], value)) || (value === undefined && !(key in target))) {\n // 不考虑 __proto__ 的赋值处理\n target[key] = value;\n }\n}\n\nfunction eq(value: any, other: any) {\n return value === other || (Number.isNaN(value) && Number.isNaN(other));\n}\n\n/* 与原生的 lodash merge 差异在于对数组是否应用最后一个 source 的结果\n * 以及对一些特殊情况的处理,比如对数组类型 padding 和对象类型的 padding 的 merge\n */\nexport function mergeSpec(target: any, ...sources: any[]): any {\n let sourceIndex = -1;\n const length = sources.length;\n while (++sourceIndex < length) {\n const source = sources[sourceIndex];\n baseMerge(target, source, true);\n }\n return target;\n}\n\nexport function mergeSpecWithFilter(\n target: any,\n filter: string | { type: string; index: number },\n spec: any,\n forceMerge: boolean\n) {\n Object.keys(target).forEach(k => {\n if (isObject(filter)) {\n if (filter.type === k) {\n if (isArray(target[k])) {\n if (target[k].length >= filter.index) {\n target[k][filter.index] = forceMerge ? mergeSpec({}, target[k][filter.index], spec) : spec;\n }\n } else {\n target[k] = forceMerge ? mergeSpec({}, target[k], spec) : spec;\n }\n }\n } else {\n // filter === user id\n if (isArray(target[k])) {\n const index = target[k].findIndex((_s: { id: StringOrNumber }) => _s.id === filter);\n if (index >= 0) {\n target[k][index] = forceMerge ? mergeSpec({}, target[k][index], spec) : spec;\n }\n } else if (target.id === filter) {\n target[k] = forceMerge ? mergeSpec({}, target[k], spec) : spec;\n }\n }\n });\n}\n","import type { DataSchemeItem, ProgressiveDataScheme } from '../interface';\n\n/** 标准色板 */\nexport const dataScheme: ProgressiveDataScheme = [\n // 第一档颜色(数据项 <= 10)\n {\n maxDomainLength: 10,\n scheme: [\n '#1664FF',\n '#1AC6FF',\n '#FF8A00',\n '#3CC780',\n '#7442D4',\n '#FFC400',\n '#304D77',\n '#B48DEB',\n '#009488',\n '#FF7DDA'\n ]\n },\n // 第二档颜色(数据项 > 10)\n {\n scheme: [\n '#1664FF',\n '#B2CFFF',\n '#1AC6FF',\n '#94EFFF',\n '#FF8A00',\n '#FFCE7A',\n '#3CC780',\n '#B9EDCD',\n '#7442D4',\n '#DDC5FA',\n '#FFC400',\n '#FAE878',\n '#304D77',\n '#8B959E',\n '#B48DEB',\n '#EFE3FF',\n '#009488',\n '#59BAA8',\n '#FF7DDA',\n '#FFCFEE'\n ]\n }\n];\n","import type { IThemeColorScheme } from '../../color-scheme/interface';\nimport { dataScheme } from '../../color-scheme/builtin/default';\nimport type { BuiltinColorPalette } from '../../color-scheme/builtin/interface';\n\nexport const colorScheme: IThemeColorScheme = {\n default: {\n dataScheme,\n palette: {\n /** 背景色 */\n backgroundColor: '#ffffff',\n /** 图表边框色 */\n borderColor: '#e3e5e8',\n /** 默认阴影颜色 */\n shadowColor: 'rgba(33,37,44,0.1)',\n /** 鼠标 hover 项背景颜色 */\n hoverBackgroundColor: '#f1f2f5',\n /** 滑块类组件背景条填充颜色 */\n sliderRailColor: '#f1f3f4',\n /** 滑块类组件滑块填充颜色 */\n sliderHandleColor: '#ffffff',\n /** 滑块类组件已选范围填充颜色 */\n sliderTrackColor: '#0040ff',\n /** 浮层背景区域颜色 */\n popupBackgroundColor: '#ffffff',\n\n /** 主要字色 */\n primaryFontColor: '#21252c',\n /** 次要字色 */\n secondaryFontColor: '#606773',\n /** 第三字色 */\n tertiaryFontColor: '#89909d',\n /** 轴标签字色 */\n axisLabelFontColor: '#89909d',\n /** 禁用字色 */\n disableFontColor: '#bcc1cb',\n /** 轴高亮标记字色 */\n axisMarkerFontColor: '#ffffff',\n\n /** 轴网格线颜色 */\n axisGridColor: '#f1f2f5',\n /** 轴线颜色 */\n axisDomainColor: '#d9dde4',\n\n /** 缩略轴滑块描边颜色 */\n dataZoomHandleStrokeColor: '#aeb5be',\n /** 缩略轴图表区域颜色 */\n dataZoomChartColor: '#c9ced8',\n\n /** 播放器控制器填充颜色 */\n playerControllerColor: '#0040ff',\n\n /** 滚动条滑块颜色 */\n scrollBarSliderColor: 'rgba(0,0,0,0.3)',\n\n /** 轴高亮标记背景色 */\n axisMarkerBackgroundColor: '#21252c',\n /** 标注标签背景颜色 */\n markLabelBackgroundColor: '#f1f2f5',\n /** 标注线颜色 */\n markLineStrokeColor: '#606773',\n\n /** 危险色 */\n dangerColor: '#e33232',\n /** 警告色 */\n warningColor: '#ffc528',\n /** 成功色 */\n successColor: '#07a35a',\n /** 信息色 */\n infoColor: '#3073f2'\n } as BuiltinColorPalette\n }\n};\n","import type { IThemeConstants } from '../../interface';\n\nexport const THEME_CONSTANTS: IThemeConstants = {\n defaultFontFamily:\n // eslint-disable-next-line max-len\n 'PingFang SC,Helvetica Neue,Microsoft Yahei,system-ui,-apple-system,segoe ui,Roboto,Helvetica,Arial,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol',\n defaultFontSize: 14,\n\n l1FontSize: 32,\n l1LineHeight: '150%',\n\n l2FontSize: 20,\n l2LineHeight: '140%',\n\n l3FontSize: 16,\n l3LineHeight: '150%',\n\n l4FontSize: 14,\n l4LineHeight: '150%',\n\n l5FontSize: 12,\n l5LineHeight: '130%',\n\n l6FontSize: 10,\n l6LineHeight: '120%',\n\n axisTickSize: 4,\n\n areaOpacity: 0.2\n};\n","import type { IDotSeriesTheme } from '../../../../series/dot/interface';\nimport { THEME_CONSTANTS } from '../constants';\n\nexport const dot: IDotSeriesTheme = {\n dot: {\n style: {\n size: 10,\n fillOpacity: 1\n }\n },\n symbol: {\n style: {\n size: 10\n }\n },\n title: {\n style: {\n textAlign: 'left',\n textBaseline: 'middle',\n fontSize: THEME_CONSTANTS.l5FontSize,\n lineHeight: THEME_CONSTANTS.l5LineHeight\n }\n },\n subTitle: {\n style: {\n textAlign: 'left',\n textBaseline: 'top',\n fontSize: THEME_CONSTANTS.l5FontSize,\n lineHeight: THEME_CONSTANTS.l5LineHeight\n }\n }\n};\n","import type { IFunnelSeriesTheme } from '../../../../series/funnel/interface';\nimport { THEME_CONSTANTS } from '../constants';\n\nexport const funnel: IFunnelSeriesTheme = {\n transform: {\n style: {\n fill: { type: 'palette', key: 'axisGridColor' }\n }\n },\n label: {\n style: {\n fill: 'white',\n textBaseline: 'middle',\n lineWidth: 2\n }\n },\n outerLabel: {\n style: {\n fontSize: THEME_CONSTANTS.l4FontSize,\n lineHeight: THEME_CONSTANTS.l4LineHeight,\n\n fill: { type: 'palette', key: 'secondaryFontColor' }\n },\n line: {\n style: {\n stroke: { type: 'palette', key: 'axisDomainColor' }\n }\n }\n },\n transformLabel: {\n style: {\n fontSize: THEME_CONSTANTS.l4FontSize,\n lineHeight: THEME_CONSTANTS.l4LineHeight,\n\n fill: { type: 'palette', key: 'secondaryFontColor' },\n textBaseline: 'middle'\n }\n }\n};\n","import type { IFunnel3dSeriesTheme } from '../../../../series/funnel/interface';\nimport { THEME_CONSTANTS } from '../constants';\n\nexport const funnel3d: IFunnel3dSeriesTheme = {\n transform3d: {\n style: {\n fill: '#f5f5f5'\n }\n },\n label: {\n style: {\n fill: 'white',\n textBaseline: 'middle',\n lineWidth: 2\n }\n },\n outerLabel: {\n style: {\n fontSize: THEME_CONSTANTS.l4FontSize,\n lineHeight: THEME_CONSTANTS.l4LineHeight,\n\n fill: '#707070'\n },\n line: {\n style: {\n stroke: { type: 'palette', key: 'axisDomainColor' }\n }\n }\n },\n transformLabel: {\n style: {\n fontSize: THEME_CONSTANTS.l4FontSize,\n lineHeight: THEME_CONSTANTS.l4LineHeight,\n\n fill: '#707070',\n textBaseline: 'middle'\n }\n }\n};\n","import type { IGaugePointerSeriesTheme } from '../../../../series/gauge';\n\nconst pointerPath =\n // eslint-disable-next-line max-len\n 'M-0.020059 -0.978425 C-0.018029 -0.9888053 -0.013378 -1 0 -1 C0.01342 -1 0.01812 -0.989146 0.0201 -0.978425 C0.02161 -0.9702819 0.0692 -0.459505 0.09486 -0.184807 C0.10298 -0.097849 0.1089 -0.034548 0.11047 -0.018339 C0.11698 0.04908 0.07373 0.11111 0.00002 0.11111 C-0.07369 0.11111 -0.117184 0.04991 -0.110423 -0.018339 C-0.103662 -0.086591 -0.022089 -0.9680447 -0.020059 -0.978425Z';\nconst circlePath =\n // eslint-disable-next-line max-len\n 'M1 0 C1 0.55228 0.55228 1 0 1 C-0.552285 1 -1 0.55228 -1 0 C-1 -0.552285 -0.552285 -1 0 -1 C0.55228 -1 1 -0.552285 1 0Z';\n\nexport const gaugePointer: IGaugePointerSeriesTheme = {\n pointer: {\n type: 'path',\n width: 0.4,\n height: 0.4,\n style: {\n path: pointerPath\n }\n },\n pin: {\n width: 0.025,\n height: 0.025,\n style: {\n path: circlePath,\n fill: '#888'\n }\n },\n pinBackground: {\n width: 0.06,\n height: 0.06,\n style: {\n path: circlePath,\n fill: '#ddd'\n }\n }\n};\n","import type { IMapSeriesTheme } from '../../../../series/map/interface';\nimport { THEME_CONSTANTS } from '../constants';\n\nexport const map: IMapSeriesTheme = {\n defaultFillColor: '#f3f3f3',\n area: {\n style: {\n lineWidth: 0.5,\n strokeOpacity: 1,\n stroke: 'black',\n fillOpacity: 1\n }\n },\n label: {\n interactive: false,\n style: {\n fontSize: THEME_CONSTANTS.l6FontSize,\n lineHeight: THEME_CONSTANTS.l6LineHeight,\n textBaseline: 'middle',\n fill: { type: 'palette', key: 'secondaryFontColor', default: '#89909d' },\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n }\n};\n","import type { IWaterfallSeriesTheme } from '../../../../series/waterfall/interface';\nimport { THEME_CONSTANTS } from '../constants';\n\nexport const waterfall: IWaterfallSeriesTheme = {\n seriesFieldName: {\n total: 'total',\n increase: 'increase',\n decrease: 'decrease'\n },\n leaderLine: {\n style: {\n stroke: 'black',\n lineWidth: 1,\n lineDash: [4, 4]\n }\n },\n stackLabel: {\n visible: true,\n offset: 12,\n position: 'withChange',\n style: {\n fill: 'black',\n fontSize: THEME_CONSTANTS.l4FontSize,\n lineHeight: THEME_CONSTANTS.l4LineHeight\n }\n },\n label: {\n visible: false,\n offset: 12,\n position: 'inside'\n }\n};\n","import type { ITreemapSeriesTheme } from '../../../../series/treemap/interface';\nimport { THEME_CONSTANTS } from '../constants';\n\nexport const treemap: ITreemapSeriesTheme = {\n gapWidth: 1,\n nodePadding: [5],\n nonLeaf: {\n visible: false,\n style: {\n fillOpacity: 0.5\n }\n },\n label: {\n style: {\n fill: 'white',\n textBaseline: 'middle',\n textAlign: 'center',\n fontSize: THEME_CONSTANTS.l5FontSize,\n lineHeight: THEME_CONSTANTS.l5LineHeight\n }\n },\n nonLeafLabel: {\n padding: THEME_CONSTANTS.l5FontSize * 2,\n style: {\n fill: 'black',\n stroke: { type: 'palette', key: 'backgroundColor' },\n lineWidth: 2,\n fontSize: THEME_CONSTANTS.l5FontSize,\n lineHeight: THEME_CONSTANTS.l5LineHeight,\n textBaseline: 'middle',\n textAlign: 'center'\n }\n }\n};\n","export const PREFIX = '__VCHART';\n\nexport const DEFAULT_CHART_WIDTH = 500;\nexport const DEFAULT_CHART_HEIGHT = 500;\n","import { PREFIX } from './base';\n\nexport const ARC_TRANSFORM_VALUE = `${PREFIX}_ARC_TRANSFORM_VALUE`;\nexport const ARC_RATIO = `${PREFIX}_ARC_RATIO`;\nexport const ARC_START_ANGLE = `${PREFIX}_ARC_START_ANGLE`;\nexport const ARC_END_ANGLE = `${PREFIX}_ARC_END_ANGLE`;\nexport const ARC_K = `${PREFIX}_ARC_K`;\nexport const ARC_MIDDLE_ANGLE = `${PREFIX}_ARC_MIDDLE_ANGLE`;\nexport const ARC_QUADRANT = `${PREFIX}_ARC_QUADRANT`;\nexport const ARC_RADIAN = `${PREFIX}_ARC_RADIAN`;\n\nexport const POLAR_START_RADIAN = -Math.PI / 2;\nexport const POLAR_END_RADIAN = (3 * Math.PI) / 2;\n\nexport const POLAR_START_ANGLE = -90;\nexport const POLAR_END_ANGLE = 270;\n\nexport const POLAR_DEFAULT_RADIUS = 0.6;\n","import type { ISeriesTheme } from '../../../../series/interface';\nimport { area } from './area';\nimport { bar } from './bar';\nimport { bar3d } from './bar3d';\nimport { circularProgress } from './circular-progress';\nimport { dot } from './dot';\nimport { funnel } from './funnel';\nimport { funnel3d } from './funnel3d';\nimport { gauge } from './gauge';\nimport { gaugePointer } from './gauge-pointer';\nimport { line } from './line';\nimport { linearProgress } from './linear-progress';\nimport { link } from './link';\nimport { map } from './map';\nimport { pie } from './pie';\nimport { pie3d } from './pie3d';\nimport { radar } from './radar';\nimport { scatter } from './scatter';\nimport { waterfall } from './waterfall';\nimport { wordCloud } from './word-cloud';\nimport { wordCloud3d } from './word-cloud3d';\nimport { treemap } from './treemap';\nimport { sunburst } from './sunburst';\nimport { rangeColumn } from './rangeColumn';\nimport { circlePacking } from './circle-packing';\nimport { heatmap } from './heatmap';\nimport { sankey } from './sankey';\nimport { rose } from './rose';\nimport { boxPlot } from './box-plot';\nimport { correlation } from './correlation';\n\nexport const series: ISeriesTheme = {\n scatter,\n line,\n area,\n bar,\n bar3d,\n pie,\n pie3d,\n map,\n radar,\n dot,\n link,\n wordCloud,\n wordCloud3d,\n funnel,\n funnel3d,\n linearProgress,\n circularProgress,\n waterfall,\n gauge,\n gaugePointer,\n treemap,\n sunburst,\n rangeColumn,\n circlePacking,\n heatmap,\n sankey,\n rose,\n boxPlot,\n correlation\n};\n","import type { IScatterSeriesTheme } from '../../../../series/scatter/interface';\n\nexport const scatter: IScatterSeriesTheme = {\n point: {\n style: {\n size: 8,\n symbolType: 'circle',\n lineWidth: 0,\n fillOpacity: 0.8\n }\n },\n label: {\n visible: false,\n offset: 5,\n position: 'top',\n style: {\n lineWidth: 2,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n }\n};\n","import type { ILineSeriesTheme } from '../../../../series/line/interface';\n\nexport const line: ILineSeriesTheme = {\n label: {\n visible: false,\n position: 'top',\n offset: 5,\n style: {\n lineWidth: 2,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n },\n point: {\n style: {\n symbolType: 'circle'\n }\n }\n};\n","import type { IAreaSeriesTheme } from '../../../../series/area/interface';\n\nexport const area: IAreaSeriesTheme = {\n label: {\n visible: false,\n offset: 5,\n position: 'top',\n style: {\n stroke: { type: 'palette', key: 'backgroundColor' },\n lineWidth: 2\n }\n },\n point: {\n style: {\n symbolType: 'circle'\n }\n }\n};\n","import type { IBarSeriesTheme } from '../../../../series/bar/interface';\n\nexport const bar: IBarSeriesTheme = {\n label: {\n visible: false,\n position: 'outside',\n offset: 5,\n style: {\n lineWidth: 2,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n }\n};\n","import type { IBar3dSeriesTheme } from '../../../../series/bar/interface';\n\nexport const bar3d: IBar3dSeriesTheme = {\n bar3d: {\n style: {\n length: 3\n }\n },\n label: {\n visible: false,\n style: {\n offset: 12,\n position: 'outside'\n }\n }\n};\n","import type { IPieSeriesTheme } from '../../../../series/pie/interface';\n\nexport const pie: IPieSeriesTheme = {\n outerRadius: 0.6,\n pie: {\n style: {\n fillOpacity: 1\n }\n },\n label: {\n visible: false,\n position: 'outside',\n style: {\n fontWeight: 'normal',\n stroke: { type: 'palette', key: 'backgroundColor' },\n fillOpacity: 1\n }\n },\n innerLabel: {\n style: {\n lineWidth: 2\n }\n }\n};\n","import type { IPie3dSeriesTheme } from '../../../../series/pie/interface';\n\nexport const pie3d: IPie3dSeriesTheme = {\n outerRadius: 0.6,\n pie3d: {\n style: {\n height: 10,\n fillOpacity: 1\n }\n },\n label: {\n visible: false,\n position: 'outside'\n }\n};\n","import type { IRadarSeriesTheme } from '../../../../series/radar/interface';\n\nexport const radar: IRadarSeriesTheme = {\n label: {\n visible: false,\n offset: 5,\n style: {\n lineWidth: 2,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n },\n point: {\n style: {\n symbolType: 'circle'\n }\n }\n};\n","import type { ILinkSeriesTheme } from '../../../../series/link/interface';\n\nexport const link: ILinkSeriesTheme = {\n arrow: {\n style: {\n size: 10\n }\n }\n};\n","import type { IWordCloudSeriesTheme } from '../../../../series/word-cloud/interface';\n\nexport const wordCloud: IWordCloudSeriesTheme = {\n word: {\n padding: 1,\n style: {\n textAlign: 'center',\n textBaseline: 'alphabetic'\n }\n }\n};\n","import type { IWordCloud3dSeriesTheme } from '../../../../series/word-cloud/interface';\n\nexport const wordCloud3d: IWordCloud3dSeriesTheme = {\n word: {\n padding: 1,\n style: {\n textAlign: 'center',\n textBaseline: 'alphabetic'\n }\n }\n};\n","import type { ILinearProgressSeriesTheme } from '../../../../series/progress/linear/interface';\n\nexport const linearProgress: ILinearProgressSeriesTheme = {\n bandWidth: 30,\n progress: {\n style: {\n fillOpacity: 1\n }\n },\n track: {\n style: {\n fill: '#E7EBED',\n fillOpacity: 1\n }\n }\n};\n","import type { ICircularProgressSeriesTheme } from '../../../../series/progress/circular/interface';\n\nexport const circularProgress: ICircularProgressSeriesTheme = {\n outerRadius: 0.8,\n innerRadius: 0.6,\n progress: {\n style: {\n fillOpacity: 1\n }\n },\n track: {\n style: {\n fillOpacity: 0.2\n }\n },\n tickMask: {\n visible: false,\n angle: 3,\n offsetAngle: 0,\n forceAlign: true\n }\n};\n","import type { IGaugeSeriesTheme } from '../../../../series/gauge';\n\nexport const gauge: IGaugeSeriesTheme = {\n outerRadius: 0.8,\n innerRadius: 0.6,\n padAngle: 1.146,\n segment: {\n style: {\n fillOpacity: 1\n }\n },\n tickMask: {\n visible: false,\n angle: 3,\n offsetAngle: 0,\n forceAlign: true\n }\n};\n","import { POLAR_END_ANGLE, POLAR_START_ANGLE } from '../../../../constant';\nimport type { ISunburstSeriesTheme } from '../../../../series/sunburst/interface';\nimport { THEME_CONSTANTS } from '../constants';\n\nexport const sunburst: ISunburstSeriesTheme = {\n innerRadius: 0,\n outerRadius: 1,\n startAngle: POLAR_START_ANGLE,\n endAngle: POLAR_END_ANGLE,\n gap: 0,\n labelLayout: {\n align: 'center',\n offset: 0,\n rotate: 'radial'\n },\n sunburst: {\n style: {\n stroke: { type: 'palette', key: 'backgroundColor' },\n fillOpacity: 1,\n cursor: 'pointer'\n }\n },\n label: {\n visible: true,\n style: {\n cursor: 'pointer',\n fill: { type: 'palette', key: 'primaryFontColor' },\n fontSize: THEME_CONSTANTS.l5FontSize,\n lineHeight: THEME_CONSTANTS.l5LineHeight\n }\n }\n};\n","import { minMaxPositionEnum, type IRangeColumnSeriesTheme } from '../../../../series/range-column/interface';\n\nexport const rangeColumn: IRangeColumnSeriesTheme = {\n label: {\n visible: false,\n offset: 5,\n position: 'inside',\n style: {\n fill: { type: 'palette', key: 'axisMarkerFontColor' }\n },\n minLabel: {\n position: minMaxPositionEnum.end\n },\n maxLabel: {\n position: minMaxPositionEnum.start\n }\n }\n};\n","import type { ICirclePackingSeriesTheme } from '../../../../series/circle-packing/interface';\nimport { THEME_CONSTANTS } from '../constants';\n\nexport const circlePacking: ICirclePackingSeriesTheme = {\n layoutPadding: 5,\n circlePacking: {\n visible: true,\n style: {\n cursor: 'pointer',\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n },\n label: {\n visible: true,\n style: {\n cursor: 'pointer',\n fill: 'black',\n stroke: { type: 'palette', key: 'backgroundColor' },\n lineWidth: 2,\n fontSize: THEME_CONSTANTS.l5FontSize,\n lineHeight: THEME_CONSTANTS.l5LineHeight\n }\n }\n};\n","import type { IHeatmapSeriesTheme } from '../../../../series/heatmap/interface';\n\nexport const heatmap: IHeatmapSeriesTheme = {\n cell: {\n style: {\n shape: 'square',\n fillOpacity: 1\n }\n },\n cellBackground: {\n visible: false\n }\n};\n","import type { ISankeySeriesTheme } from '../../../../series/sankey/interface';\n\nexport const sankey: ISankeySeriesTheme = {\n link: {\n style: {\n // lineWidth: 0,\n fillOpacity: 0.15,\n round: true\n }\n }\n};\n","import type { IRoseSeriesTheme } from '../../../../series/rose/interface';\n\nexport const rose: IRoseSeriesTheme = {\n rose: {\n style: {\n fillOpacity: 1\n }\n },\n label: {\n style: {\n lineWidth: 2,\n stroke: { type: 'palette', key: 'backgroundColor' },\n textAlign: 'center',\n textBaseline: 'middle'\n }\n }\n};\n","import type { IBoxPlotSeriesTheme } from '../../../../series/box-plot/interface';\n\nexport const boxPlot: IBoxPlotSeriesTheme = {\n boxPlot: {\n style: {\n lineWidth: 1\n }\n }\n};\n","import type { ICorrelationSeriesTheme } from '../../../../series/correlation/interface';\n\nexport const correlation: ICorrelationSeriesTheme = {\n centerLabel: {\n visible: true,\n position: 'center',\n style: {\n fill: '#fff',\n text: ''\n }\n },\n label: {\n visible: true,\n position: 'bottom',\n style: {\n fill: '#000'\n }\n }\n};\n","import type { IGlobalMarkThemeByName, IGlobalMarkThemeByType } from '../../interface';\nimport { THEME_CONSTANTS } from './constants';\n\nexport const markByType: IGlobalMarkThemeByType = {\n text: {\n style: {\n fontSize: THEME_CONSTANTS.l4FontSize,\n lineHeight: THEME_CONSTANTS.l4LineHeight,\n\n fontWeight: 'normal',\n fillOpacity: 1\n }\n }\n};\n\nexport const markByName: IGlobalMarkThemeByName = {\n label: {\n style: {\n fontSize: THEME_CONSTANTS.l4FontSize,\n fontWeight: 'normal',\n fillOpacity: 1\n }\n },\n area: {\n style: {\n fillOpacity: THEME_CONSTANTS.areaOpacity\n }\n },\n line: {\n style: {\n lineWidth: 2,\n lineCap: 'round',\n lineJoin: 'round'\n }\n },\n point: {\n style: {\n size: 8,\n stroke: { type: 'palette', key: 'backgroundColor' },\n lineWidth: 1,\n fillOpacity: 1\n }\n },\n word: {\n style: {\n fontSize: null\n }\n },\n fillingWord: {\n style: {\n fontSize: null\n }\n },\n sunburst: {\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n },\n circlePacking: {\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n },\n funnel3d: {\n style: {\n stroke: false\n }\n },\n barBackground: {\n visible: false,\n style: {\n fill: { type: 'palette', key: 'primaryFontColor', a: 0.06 }\n }\n }\n};\n","import type { ICartesianAxisCommonTheme } from '../../../../../component/axis/cartesian/interface';\nimport { THEME_CONSTANTS } from '../../constants';\n\nexport const axisX: ICartesianAxisCommonTheme = {\n label: {\n space: 8\n },\n title: {\n space: 8\n },\n maxHeight: '30%',\n unit: {\n visible: false,\n style: {\n fontSize: THEME_CONSTANTS.l5FontSize,\n fill: { type: 'palette', key: 'axisLabelFontColor' },\n fontWeight: 'normal',\n fillOpacity: 1\n }\n }\n};\n\nexport const axisY: ICartesianAxisCommonTheme = {\n label: {\n space: 12,\n autoLimit: true\n },\n title: {\n space: 12,\n autoRotate: true\n },\n maxWidth: '30%',\n unit: {\n visible: false,\n style: {\n fontSize: THEME_CONSTANTS.l5FontSize,\n fill: { type: 'palette', key: 'axisLabelFontColor' },\n fontWeight: 'normal',\n fillOpacity: 1\n }\n }\n};\n\nexport const axisZ: ICartesianAxisCommonTheme = {\n ...axisX,\n label: {\n space: 0\n }\n};\n","import type { IAxisCommonTheme } from '../../../../../component/axis';\nimport { THEME_CONSTANTS } from '../../constants';\n\nexport const commonAxis: IAxisCommonTheme = {\n domainLine: {\n visible: true,\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'axisDomainColor' },\n strokeOpacity: 1\n }\n },\n grid: {\n visible: true,\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'axisGridColor' },\n strokeOpacity: 1,\n lineDash: []\n }\n },\n subGrid: {\n visible: false,\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'axisGridColor' },\n strokeOpacity: 1,\n lineDash: [4, 4]\n }\n },\n tick: {\n visible: true,\n inside: false,\n tickSize: THEME_CONSTANTS.axisTickSize,\n alignWithLabel: true,\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'axisDomainColor' },\n strokeOpacity: 1\n }\n },\n subTick: {\n visible: false,\n tickSize: THEME_CONSTANTS.axisTickSize / 2,\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'axisDomainColor' },\n strokeOpacity: 1\n }\n },\n label: {\n visible: true,\n inside: false,\n space: 10,\n style: {\n fontSize: THEME_CONSTANTS.l5FontSize,\n fill: { type: 'palette', key: 'axisLabelFontColor' },\n fontWeight: 'normal',\n fillOpacity: 1\n }\n },\n title: {\n space: 10,\n padding: 0,\n style: {\n fontSize: THEME_CONSTANTS.l5FontSize,\n lineHeight: THEME_CONSTANTS.l5LineHeight,\n fill: { type: 'palette', key: 'secondaryFontColor' },\n fontWeight: 'normal',\n fillOpacity: 1\n }\n }\n};\n","import type {\n ICrosshairLineSpec,\n ICrosshairRectSpec,\n ICrosshairValueFieldSpec,\n ICrosshairCategoryFieldSpec,\n ICrosshairLabelSpec,\n ICrosshairTheme\n} from '../../../../component/crosshair/interface';\nimport { THEME_CONSTANTS } from '../constants';\n\nconst getLabelSpec = (): ICrosshairLabelSpec => ({\n visible: false,\n style: {\n fontWeight: 'normal',\n fill: { type: 'palette', key: 'axisMarkerFontColor' },\n fontSize: THEME_CONSTANTS.l5FontSize\n //lineHeight: THEME_CONSTANTS.l5LineHeight,\n },\n labelBackground: {\n padding: {\n bottom: 0,\n top: 0,\n left: 2,\n right: 2\n },\n style: {\n fill: { type: 'palette', key: 'axisMarkerBackgroundColor' },\n cornerRadius: 1\n }\n }\n});\n\nconst getBandField = (): ICrosshairCategoryFieldSpec => ({\n visible: false,\n line: {\n type: 'rect',\n visible: true,\n style: {\n fill: { type: 'palette', key: 'axisGridColor' },\n opacity: 0.7,\n lineDash: []\n }\n } as ICrosshairRectSpec,\n label: getLabelSpec()\n});\n\nconst getLinearField = (): ICrosshairValueFieldSpec => ({\n visible: false,\n line: {\n type: 'line',\n visible: true,\n style: {\n stroke: { type: 'palette', key: 'markLineStrokeColor' },\n fill: { type: 'palette', key: 'axisGridColor' },\n opacity: 0.7,\n lineDash: [2, 3]\n }\n } as ICrosshairLineSpec,\n label: getLabelSpec()\n});\n\nexport const crosshair: ICrosshairTheme = {\n trigger: 'hover',\n bandField: getBandField(),\n linearField: getLinearField()\n};\n","import type { IDataZoomTheme } from '../../../../component/data-zoom';\nimport { THEME_CONSTANTS } from '../constants';\n\n// eslint-disable-next-line max-len\nconst DataZoomHandlerSymbolType = `M-0.5-2.4h0.9c0.4,0,0.7,0.3,0.7,0.7v3.3c0,0.4-0.3,0.7-0.7,0.7h-0.9c-0.4,0-0.7-0.3-0.7-0.7v-3.3\nC-1.2-2-0.9-2.4-0.5-2.4z M-0.4-1.4L-0.4-1.4c0,0,0,0.1,0,0.1v2.6c0,0.1,0,0.1,0,0.1l0,0c0,0,0-0.1,0-0.1v-2.6\nC-0.4-1.4-0.4-1.4-0.4-1.4z M0.3-1.4L0.3-1.4c0,0,0,0.1,0,0.1v2.6c0,0.1,0,0.1,0,0.1l0,0c0,0,0-0.1,0-0.1v-2.6\nC0.3-1.4,0.3-1.4,0.3-1.4z;`;\n\nexport const dataZoom: IDataZoomTheme = {\n padding: [12, 0],\n showDetail: 'auto',\n brushSelect: false,\n middleHandler: {\n visible: false,\n background: {\n size: 6,\n style: {\n stroke: { type: 'palette', key: 'dataZoomHandleStrokeColor' },\n cornerRadius: 2\n }\n },\n icon: {\n style: {\n size: 4,\n fill: { type: 'palette', key: 'sliderHandleColor' },\n stroke: { type: 'palette', key: 'dataZoomHandleStrokeColor' },\n symbolType:\n // eslint-disable-next-line max-len\n 'M 0.3 -0.5 C 0.41 -0.5 0.5 -0.41 0.5 -0.3 C 0.5 -0.3 0.5 0.3 0.5 0.3 C 0.5 0.41 0.41 0.5 0.3 0.5 C 0.3 0.5 -0.3 0.5 -0.3 0.5 C -0.41 0.5 -0.5 0.41 -0.5 0.3 C -0.5 0.3 -0.5 -0.3 -0.5 -0.3 C -0.5 -0.41 -0.41 -0.5 -0.3 -0.5 C -0.3 -0.5 0.3 -0.5 0.3 -0.5 Z',\n lineWidth: 0.5\n }\n }\n },\n background: {\n size: 20,\n style: {\n fill: { type: 'palette', key: 'sliderRailColor' },\n lineWidth: 0\n }\n },\n selectedBackground: {\n style: {\n fill: { type: 'palette', key: 'sliderTrackColor' },\n fillOpacity: 0.1,\n outerBorder: {\n stroke: { type: 'palette', key: 'sliderTrackColor' },\n strokeOpacity: 0.2,\n distance: -0.5,\n lineWidth: 1\n }\n }\n },\n selectedBackgroundChart: {\n area: {\n style: {\n visible: false,\n stroke: false,\n fill: { type: 'palette', key: 'dataZoomChartColor' }\n }\n },\n line: {\n style: {\n visible: false,\n stroke: { type: 'palette', key: 'dataZoomChartColor' },\n lineWidth: 1\n }\n }\n },\n startHandler: {\n style: {\n symbolType: DataZoomHandlerSymbolType,\n fill: { type: 'palette', key: 'sliderHandleColor' },\n scaleX: 1.2,\n scaleY: 1.2,\n stroke: { type: 'palette', key: 'dataZoomHandleStrokeColor' },\n lineWidth: 1\n }\n },\n endHandler: {\n style: {\n symbolType: DataZoomHandlerSymbolType,\n fill: { type: 'palette', key: 'sliderHandleColor' },\n scaleX: 1.2,\n scaleY: 1.2,\n stroke: { type: 'palette', key: 'dataZoomHandleStrokeColor' },\n lineWidth: 1\n }\n },\n startText: {\n padding: 8,\n style: {\n fontSize: THEME_CONSTANTS.l5FontSize,\n lineHeight: THEME_CONSTANTS.l5LineHeight,\n\n fill: { type: 'palette', key: 'secondaryFontColor', default: '#89909d' }\n }\n },\n endText: {\n padding: 8,\n style: {\n fontSize: THEME_CONSTANTS.l5FontSize,\n lineHeight: THEME_CONSTANTS.l5LineHeight,\n\n fill: { type: 'palette', key: 'secondaryFontColor', default: '#89909d' }\n }\n },\n backgroundChart: {\n area: {\n style: {\n stroke: false,\n fill: { type: 'palette', key: 'dataZoomChartColor' }\n }\n },\n line: {\n style: {\n stroke: { type: 'palette', key: 'dataZoomChartColor' },\n lineWidth: 1\n }\n }\n }\n};\n","import type { IIndicatorTheme } from '../../../../component/indicator/interface';\nimport { THEME_CONSTANTS } from '../constants';\n\nexport const indicator: IIndicatorTheme = {\n title: {\n visible: true,\n autoLimit: false,\n autoFit: false,\n style: {\n fontSize: THEME_CONSTANTS.l1FontSize,\n fill: { type: 'palette', key: 'primaryFontColor' },\n fontWeight: 'normal',\n fillOpacity: 1,\n textBaseline: 'top',\n textAlign: 'center'\n }\n },\n content: {\n visible: true,\n style: {\n fontSize: THEME_CONSTANTS.l2FontSize,\n fill: { type: 'palette', key: 'tertiaryFontColor' },\n fontWeight: 'normal',\n fillOpacity: 1,\n textBaseline: 'top',\n textAlign: 'center'\n }\n }\n};\n","import type { IContinuousLegendTheme } from '../../../../../component/legend';\nimport { THEME_CONSTANTS } from '../../constants';\n\nexport const DEFAULT_CONTINUOUS_LEGEND_THEME: IContinuousLegendTheme = {\n orient: 'right',\n position: 'middle',\n padding: [16, 24],\n title: {\n visible: false,\n padding: 0,\n textStyle: {\n fontSize: THEME_CONSTANTS.l5FontSize,\n lineHeight: THEME_CONSTANTS.l5LineHeight,\n\n fontWeight: 'normal',\n fill: { type: 'palette', key: 'primaryFontColor' }\n },\n space: 12\n },\n handler: {\n visible: true\n },\n startText: {\n style: {\n fontSize: THEME_CONSTANTS.l5FontSize,\n lineHeight: THEME_CONSTANTS.l5LineHeight,\n\n fontWeight: 'normal',\n fill: { type: 'palette', key: 'secondaryFontColor', default: '#89909d' }\n },\n space: 6\n },\n endText: {\n style: {\n fontSize: THEME_CONSTANTS.l5FontSize,\n lineHeight: THEME_CONSTANTS.l5LineHeight,\n\n fontWeight: 'normal',\n fill: { type: 'palette', key: 'secondaryFontColor', default: '#89909d' }\n },\n space: 6\n },\n handlerText: {\n style: {\n fontSize: THEME_CONSTANTS.l5FontSize,\n lineHeight: THEME_CONSTANTS.l5LineHeight,\n\n fontWeight: 'normal',\n fill: { type: 'palette', key: 'secondaryFontColor', default: '#89909d' }\n },\n space: 6\n }\n};\n","import type { IColorLegendTheme, IContinuousLegendTheme } from '../../../../../component/legend';\nimport { DEFAULT_CONTINUOUS_LEGEND_THEME } from './continuous';\n\nconst handlerTheme: IContinuousLegendTheme['handler'] = {\n style: {\n symbolType: 'circle',\n lineWidth: 0,\n outerBorder: {\n lineWidth: 2,\n distance: 0.8,\n stroke: '#ffffff'\n },\n shadowBlur: 12,\n shadowOffsetX: 0,\n shadowOffsetY: 4,\n shadowColor: { type: 'palette', key: 'shadowColor' }\n }\n};\n\nexport const colorLegend: IColorLegendTheme = {\n horizontal: {\n ...DEFAULT_CONTINUOUS_LEGEND_THEME,\n rail: {\n width: 200,\n height: 8,\n style: {\n fill: { type: 'palette', key: 'sliderRailColor' }\n }\n },\n handler: handlerTheme\n },\n vertical: {\n ...DEFAULT_CONTINUOUS_LEGEND_THEME,\n rail: {\n width: 8,\n height: 200,\n style: {\n fill: { type: 'palette', key: 'sliderRailColor' }\n }\n },\n handler: handlerTheme\n }\n};\n","import type { IDiscreteLegendTheme } from '../../../../../component/legend';\nimport { THEME_CONSTANTS } from '../../constants';\n\nexport const discreteLegend: IDiscreteLegendTheme = {\n orient: 'bottom',\n position: 'middle',\n padding: [16, 24],\n title: {\n visible: false,\n padding: 0,\n textStyle: {\n fontSize: THEME_CONSTANTS.l5FontSize,\n lineHeight: THEME_CONSTANTS.l5LineHeight,\n\n fill: { type: 'palette', key: 'primaryFontColor' },\n fontWeight: 'normal'\n },\n space: 12\n },\n item: {\n visible: true,\n spaceCol: 10,\n spaceRow: 6,\n padding: 2,\n background: {\n state: {\n selectedHover: {\n fill: { type: 'palette', key: 'hoverBackgroundColor' }\n },\n unSelectedHover: {\n fill: { type: 'palette', key: 'hoverBackgroundColor' }\n }\n }\n },\n shape: {\n space: 6,\n style: {\n lineWidth: 0,\n fillOpacity: 1,\n opacity: 1 // 覆盖 vrender-components 里的默认值\n },\n state: {\n unSelected: {\n fillOpacity: 0.2,\n opacity: 1 // 覆盖 vrender-components 里的默认值\n }\n }\n },\n label: {\n space: 6,\n style: {\n fill: { type: 'palette', key: 'secondaryFontColor', default: '#89909d' },\n fontSize: THEME_CONSTANTS.l5FontSize,\n lineHeight: THEME_CONSTANTS.l5LineHeight,\n\n opacity: 1 // 覆盖 vrender-components 里的默认值\n },\n state: {\n unSelected: {\n fill: { type: 'palette', key: 'disableFontColor' },\n opacity: 1 // 覆盖 vrender-components 里的默认值\n }\n }\n }\n },\n allowAllCanceled: false\n};\n","import type { IContinuousLegendTheme, ISizeLegendTheme } from '../../../../../component/legend';\nimport { DEFAULT_CONTINUOUS_LEGEND_THEME } from './continuous';\n\nconst handlerTheme: IContinuousLegendTheme['handler'] = {\n style: {\n symbolType: 'circle',\n lineWidth: 0,\n outerBorder: {\n lineWidth: 2,\n distance: 0.8,\n stroke: { type: 'palette', key: 'sliderTrackColor' }\n },\n fill: { type: 'palette', key: 'sliderHandleColor' }\n /*\n shadowBlur: 12,\n shadowOffsetX: 0,\n shadowOffsetY: 4,\n shadowColor: { type: 'palette', key: 'shadowColor' }\n */\n }\n};\n\nexport const sizeLegend: ISizeLegendTheme = {\n horizontal: {\n ...DEFAULT_CONTINUOUS_LEGEND_THEME,\n sizeBackground: {\n fill: { type: 'palette', key: 'dataZoomChartColor' }\n },\n track: {\n style: {\n fill: { type: 'palette', key: 'sliderTrackColor', a: 0.8 }\n }\n },\n rail: {\n width: 200,\n height: 4,\n style: {\n fill: { type: 'palette', key: 'sliderRailColor' }\n }\n },\n handler: handlerTheme\n },\n vertical: {\n ...DEFAULT_CONTINUOUS_LEGEND_THEME,\n sizeBackground: {\n fill: { type: 'palette', key: 'dataZoomChartColor' }\n },\n track: {\n style: {\n fill: { type: 'palette', key: 'sliderTrackColor', a: 0.8 }\n }\n },\n rail: {\n width: 4,\n height: 200,\n style: {\n fill: { type: 'palette', key: 'sliderRailColor' }\n }\n },\n handler: handlerTheme\n }\n};\n","/**\n * 主题的命名,不要使用类似 arco,default 等字段,应该要以主题的特征来,颜色/场景特征(light, dark)\n *\n * 1. 对除了 color 外的一些主题设置,应该要有专门的设计,**不要直接复制**\n * 2. 原则上来讲,默认值尽量都放主题中,但是也可根据情况自行判断\n * 3. 目前主题只到系列,不到系列的 mark,对于这个分界没有太清楚,后续根据需求再做开放\n */\nimport type { ITheme } from '../../interface';\nimport { colorScheme } from './color-scheme';\nimport { series } from '../common/series';\nimport { markByName, markByType } from '../common/mark';\nimport { THEME_CONSTANTS } from '../common/constants';\nimport { component } from '../common/component';\n\nexport const lightTheme: ITheme = {\n name: 'light',\n background: { type: 'palette', key: 'backgroundColor' },\n padding: 20,\n fontFamily: THEME_CONSTANTS.defaultFontFamily,\n colorScheme,\n mark: markByType,\n markByName,\n series,\n component,\n animationThreshold: 2000\n};\n","import type { IComponentTheme } from '../../../../component/interface';\nimport { axisBand } from './axis/band-axis';\nimport { axisX, axisY, axisZ } from './axis/cartesian-axis';\nimport { commonAxis } from './axis/common-axis';\nimport { axisLinear } from './axis/linear-axis';\nimport { axisAngle, axisRadius } from './axis/polar-axis';\nimport { brush } from './brush';\nimport { crosshair } from './crosshair';\nimport { dataZoom } from './data-zoom';\nimport { indicator } from './indicator';\nimport { colorLegend } from './legend/color-legend';\nimport { discreteLegend } from './legend/discrete-legend';\nimport { sizeLegend } from './legend/size-legend';\nimport { mapLabel } from './map-label';\nimport { markArea } from './mark-area';\nimport { markLine } from './mark-line';\nimport { markPoint } from './mark-point';\nimport { player } from './player';\nimport { title } from './title';\nimport { tooltip } from './tooltip';\nimport { poptip } from './poptip';\nimport { totalLabel } from './total-label';\nimport { scrollBar } from './scroll-bar';\n\nexport const component: IComponentTheme = {\n discreteLegend,\n colorLegend,\n sizeLegend,\n axis: commonAxis,\n axisBand,\n axisLinear,\n axisX,\n axisY,\n axisZ,\n axisAngle,\n axisRadius,\n markLine,\n markArea,\n markPoint,\n tooltip,\n dataZoom,\n crosshair,\n player,\n brush,\n indicator,\n title,\n mapLabel,\n poptip,\n totalLabel,\n scrollBar\n};\n","import type { IBandAxisTheme } from '../../../../../component/axis';\n\nexport const axisBand: IBandAxisTheme = {\n domainLine: {\n visible: true\n },\n grid: {\n visible: false\n },\n subGrid: {\n visible: false\n },\n tick: {\n visible: true\n },\n subTick: {\n visible: false\n }\n};\n","import type { IAxisCommonTheme } from '../../../../../component/axis';\n\nexport const axisLinear: IAxisCommonTheme = {\n domainLine: {\n visible: false\n },\n grid: {\n visible: true\n },\n subGrid: {\n visible: false\n },\n tick: {\n visible: false\n },\n subTick: {\n visible: false\n }\n};\n","import type { IPolarAxisCommonTheme } from '../../../../../component/axis/polar/interface/theme';\n\nexport const axisRadius: IPolarAxisCommonTheme = {\n grid: {\n smooth: true,\n visible: true\n },\n subGrid: {\n smooth: true,\n visible: false\n }\n};\n\nexport const axisAngle: IPolarAxisCommonTheme = {\n grid: {\n visible: true,\n style: {\n lineDash: [6, 6]\n }\n },\n label: {\n space: 5\n }\n};\n","import type { IMarkLineTheme } from '../../../../component/marker/mark-line/interface';\nimport { THEME_CONSTANTS } from '../constants';\n\nexport const markLine: IMarkLineTheme = {\n line: {\n style: {\n lineDash: [3, 3],\n stroke: { type: 'palette', key: 'markLineStrokeColor' }\n }\n },\n startSymbol: {\n visible: false,\n symbolType: 'triangle',\n size: 10,\n style: {\n fill: { type: 'palette', key: 'markLineStrokeColor' },\n stroke: null,\n lineWidth: 0\n }\n },\n endSymbol: {\n visible: true,\n symbolType: 'triangle',\n size: 10,\n style: {\n fill: { type: 'palette', key: 'markLineStrokeColor' },\n stroke: null,\n lineWidth: 0\n }\n },\n label: {\n refY: 5,\n style: {\n fontSize: THEME_CONSTANTS.l4FontSize,\n fontWeight: 'normal',\n fontStyle: 'normal',\n fill: { type: 'palette', key: 'primaryFontColor' }\n },\n labelBackground: {\n padding: {\n top: 2,\n bottom: 2,\n right: 4,\n left: 4\n },\n style: {\n cornerRadius: 3,\n fill: { type: 'palette', key: 'markLabelBackgroundColor' }\n }\n }\n }\n};\n","import type { IMarkAreaTheme } from '../../../../component/marker/mark-area/interface';\nimport { THEME_CONSTANTS } from '../constants';\n\nexport const markArea: IMarkAreaTheme = {\n area: {\n style: {\n fill: { type: 'palette', key: 'axisDomainColor', a: 0.25 }\n }\n },\n label: {\n style: {\n fontSize: THEME_CONSTANTS.l4FontSize,\n fontWeight: 'normal',\n fontStyle: 'normal',\n fill: { type: 'palette', key: 'primaryFontColor' }\n },\n labelBackground: {\n padding: {\n top: 2,\n bottom: 2,\n right: 4,\n left: 4\n },\n style: {\n cornerRadius: 3,\n fill: { type: 'palette', key: 'markLabelBackgroundColor' }\n }\n }\n }\n};\n","import type { IMarkPointTheme } from '../../../../component/marker/mark-point/interface';\n\nexport const markPoint: IMarkPointTheme = {\n itemLine: {\n decorativeLine: {\n visible: false\n },\n startSymbol: {\n size: 5,\n visible: true,\n style: {\n fill: { type: 'palette', key: 'markLineStrokeColor' },\n stroke: null,\n lineWidth: 0\n }\n },\n endSymbol: {\n style: {\n fill: { type: 'palette', key: 'markLineStrokeColor' },\n stroke: null,\n lineWidth: 0\n }\n },\n line: {\n style: {\n stroke: { type: 'palette', key: 'markLineStrokeColor' }\n }\n }\n },\n itemContent: {\n offsetY: -50\n }\n};\n","import type { ITooltipTheme } from '../../../../component/tooltip/interface';\nimport type { IColorKey } from '../../../color-scheme';\nimport { THEME_CONSTANTS } from '../constants';\n\nexport const tooltip: ITooltipTheme = {\n offset: {\n x: 10,\n y: 10\n },\n panel: {\n padding: {\n top: 10,\n left: 10,\n right: 10,\n bottom: 10\n },\n backgroundColor: { type: 'palette', key: 'popupBackgroundColor' },\n border: {\n color: { type: 'palette', key: 'popupBackgroundColor' },\n width: 0,\n radius: 3\n },\n shadow: {\n x: 0,\n y: 4,\n blur: 12,\n spread: 0,\n color: { type: 'palette', key: 'shadowColor' }\n }\n },\n spaceRow: 6,\n titleLabel: {\n fontSize: THEME_CONSTANTS.l4FontSize,\n lineHeight: THEME_CONSTANTS.l4LineHeight,\n\n fontColor: { type: 'palette', key: 'primaryFontColor' },\n fontWeight: 'bold',\n textAlign: 'left',\n textBaseline: 'middle',\n spacing: 0\n },\n shape: {\n size: 8,\n spacing: 6\n },\n keyLabel: {\n fontSize: THEME_CONSTANTS.l4FontSize,\n lineHeight: THEME_CONSTANTS.l4LineHeight,\n\n fontColor: { type: 'palette', key: 'secondaryFontColor' },\n textAlign: 'left',\n textBaseline: 'middle',\n spacing: 26\n },\n valueLabel: {\n fontSize: THEME_CONSTANTS.l4FontSize,\n lineHeight: THEME_CONSTANTS.l4LineHeight,\n\n fontColor: { type: 'palette', key: 'primaryFontColor' },\n fontWeight: 'bold',\n textBaseline: 'middle',\n spacing: 0\n }\n};\n","import type { IPlayerTheme } from '../../../../component/player';\n\nexport const player: IPlayerTheme = {\n visible: true,\n position: 'start',\n padding: {\n top: 20,\n bottom: 20\n },\n slider: {\n space: 10,\n trackStyle: {\n fill: { type: 'palette', key: 'sliderTrackColor' },\n fillOpacity: 0.8\n },\n railStyle: {\n fill: { type: 'palette', key: 'sliderRailColor' }\n },\n handlerStyle: {\n size: 15,\n stroke: { type: 'palette', key: 'backgroundColor' },\n lineWidth: 2,\n fill: { type: 'palette', key: 'playerControllerColor' }\n }\n },\n controller: {\n start: {\n order: 0,\n space: 0,\n style: {\n size: 25,\n fill: { type: 'palette', key: 'playerControllerColor' },\n fillOpacity: 0.8\n }\n },\n pause: {\n order: 0,\n space: 0,\n style: {\n size: 25,\n fill: { type: 'palette', key: 'playerControllerColor' },\n fillOpacity: 0.8\n }\n },\n backward: {\n order: 0,\n space: 10,\n position: 'start',\n style: {\n size: 12,\n fill: { type: 'palette', key: 'playerControllerColor' },\n fillOpacity: 0.8\n }\n },\n forward: {\n order: 0,\n space: 10,\n position: 'end',\n style: {\n size: 12,\n fill: { type: 'palette', key: 'playerControllerColor' },\n fillOpacity: 0.8\n }\n }\n }\n};\n","import type { IBrushTheme } from '../../../../component/brush';\n\nexport const brush: IBrushTheme = {\n style: {\n fill: '#B0C8F9',\n fillOpacity: 0.2,\n stroke: '#B0C8F9',\n lineWidth: 2\n },\n brushMode: 'single',\n brushType: 'rect',\n brushMoved: true,\n removeOnClick: true,\n delayType: 'throttle',\n delayTime: 0\n};\n","import type { ITitleTheme } from '../../../../component/title/interface';\nimport { THEME_CONSTANTS } from '../constants';\n\nexport const title: ITitleTheme = {\n padding: {\n top: 4,\n bottom: 20\n },\n textStyle: {\n fontSize: THEME_CONSTANTS.l3FontSize,\n lineHeight: THEME_CONSTANTS.l3LineHeight as any, // FIXME: vrender 支持行高字符串后删除 any\n\n fill: { type: 'palette', key: 'primaryFontColor' }\n },\n subtextStyle: {\n fontSize: THEME_CONSTANTS.l4FontSize,\n lineHeight: THEME_CONSTANTS.l4LineHeight as any, // FIXME: vrender 支持行高字符串后删除 any\n\n fill: { type: 'palette', key: 'tertiaryFontColor' }\n }\n};\n","import type { IMapLabelTheme } from '../../../../component/map-label';\nimport { THEME_CONSTANTS } from '../constants';\n\nexport const mapLabel: IMapLabelTheme = {\n visible: true,\n offset: 12,\n position: 'top',\n space: 10,\n nameLabel: {\n visible: true,\n style: {\n textBaseline: 'middle',\n textAlign: 'left',\n fill: 'black',\n fontSize: THEME_CONSTANTS.l6FontSize\n }\n },\n valueLabel: {\n visible: true,\n style: {\n textBaseline: 'middle',\n textAlign: 'left',\n fill: 'black',\n fontSize: THEME_CONSTANTS.l6FontSize\n }\n },\n background: {\n visible: true,\n padding: { top: 4, bottom: 4, left: 6, right: 6 },\n style: {\n cornerRadius: 2,\n lineWidth: 1,\n fill: 'white',\n stroke: 'grey'\n }\n },\n leader: {\n visible: false,\n style: {\n lineWidth: 1,\n stroke: 'red'\n }\n }\n};\n","import type { IPoptipTheme } from '../../../../component/poptip/interface';\nimport { THEME_CONSTANTS } from '../constants';\n\nexport const poptip: IPoptipTheme = {\n visible: true,\n position: 'auto',\n padding: 8,\n titleStyle: {\n fontSize: THEME_CONSTANTS.l5FontSize,\n fontWeight: 'bold',\n fill: { type: 'palette', key: 'primaryFontColor' }\n },\n contentStyle: {\n fontSize: THEME_CONSTANTS.l5FontSize,\n fill: { type: 'palette', key: 'primaryFontColor' }\n },\n panel: {\n visible: true,\n fill: { type: 'palette', key: 'popupBackgroundColor' },\n cornerRadius: 3,\n lineWidth: 0,\n shadowBlur: 12,\n shadowOffsetX: 0,\n shadowOffsetY: 4,\n shadowColor: { type: 'palette', key: 'shadowColor' },\n size: 0,\n space: 12\n }\n};\n","import type { ITotalLabelTheme } from '../../../../component/label';\nimport { THEME_CONSTANTS } from '../constants';\n\nexport const totalLabel: ITotalLabelTheme = {\n visible: false,\n offset: 5,\n overlap: {\n clampForce: true,\n strategy: []\n },\n smartInvert: false,\n animation: false,\n style: {\n fontSize: THEME_CONSTANTS.l4FontSize,\n fill: { type: 'palette', key: 'primaryFontColor' }\n }\n};\n","import type { IScrollBarTheme } from '../../../../component/data-zoom';\n\nexport const scrollBar: IScrollBarTheme = {\n horizontal: {\n height: 10,\n slider: {\n style: {\n fill: { type: 'palette', key: 'scrollBarSliderColor' }\n }\n }\n },\n vertical: {\n width: 10,\n slider: {\n style: {\n fill: { type: 'palette', key: 'scrollBarSliderColor' }\n }\n }\n }\n};\n","const clamp = function (input: number, min: number, max: number): number {\n if (input < min) {\n return min;\n } else if (input > max) {\n return max;\n }\n return input;\n};\n\nexport default clamp;\n","export default function hslToRgb(h: number, s: number, l: number) {\n s /= 100;\n l /= 100;\n\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n const m = l - c / 2;\n let r = 0;\n let g = 0;\n let b = 0;\n\n if (0 <= h && h < 60) {\n r = c;\n g = x;\n b = 0;\n } else if (60 <= h && h < 120) {\n r = x;\n g = c;\n b = 0;\n } else if (120 <= h && h < 180) {\n r = 0;\n g = c;\n b = x;\n } else if (180 <= h && h < 240) {\n r = 0;\n g = x;\n b = c;\n } else if (240 <= h && h < 300) {\n r = x;\n g = 0;\n b = c;\n } else if (300 <= h && h < 360) {\n r = c;\n g = 0;\n b = x;\n }\n r = Math.round((r + m) * 255);\n g = Math.round((g + m) * 255);\n b = Math.round((b + m) * 255);\n return { r, g, b };\n}\n","export default function rgbToHsl(r: number, g: number, b: number) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n // Find greatest and smallest channel values\n const cMin = Math.min(r, g, b);\n const cMax = Math.max(r, g, b);\n const delta = cMax - cMin;\n let h = 0;\n let s = 0;\n let l = 0;\n\n if (delta === 0) {\n h = 0;\n }\n // Red is max\n else if (cMax === r) {\n h = ((g - b) / delta) % 6;\n }\n // Green is max\n else if (cMax === g) {\n h = (b - r) / delta + 2;\n }\n // Blue is max\n else {\n h = (r - g) / delta + 4;\n }\n\n h = Math.round(h * 60);\n if (h < 0) {\n h += 360;\n }\n l = (cMax + cMin) / 2;\n\n // Calculate saturation\n s = delta === 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));\n\n // Multiply l and s by 100\n s = +(s * 100).toFixed(1);\n l = +(l * 100).toFixed(1);\n return {\n h,\n s,\n l\n };\n}\n","/*\nCopyright (c) 2013, Jason Davies.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n * The name Jason Davies may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL JASON DAVIES BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\nOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\nADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n// Mike Bostock, https://github.com/d3/d3-color\n/**\n * 参考 d3-color 实现。用于颜色转化\n * 16进制/rgb 转化为r,g,b, o\n */\nimport { clamp, isArray, isNil, isNumber, isValid } from '../common';\nimport hslToRgb from './hslToRgb';\nimport rgbToHsl from './rgbToHsl';\n\nconst REG_HEX = /^#([0-9a-f]{3,8})$/;\n\nconst DEFAULT_COLORS_OPACITY = {\n transparent: 0xffffff00\n};\n\nexport const DEFAULT_COLORS = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\nfunction hex(value: number) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? '0' : '') + value.toString(16);\n}\n\nfunction rgb(value: number | number[]): RGB {\n if (isNumber(value)) {\n return new RGB((value as number) >> 16, ((value as number) >> 8) & 0xff, (value as number) & 0xff, 1);\n } else if (isArray(value)) {\n return new RGB(value[0], value[1], value[2]);\n }\n\n // default return\n return new RGB(255, 255, 255);\n}\n\nfunction rgba(value: number | number[]): RGB {\n if (isNumber(value)) {\n return new RGB(\n (value as number) >>> 24,\n ((value as number) >>> 16) & 0xff,\n ((value as number) >>> 8) & 0xff,\n (value as number) & 0xff\n );\n } else if (isArray(value)) {\n return new RGB(value[0], value[1], value[2], value[3]);\n }\n\n // default return\n return new RGB(255, 255, 255, 1);\n}\n\nfunction SRGBToLinear(c: number) {\n return c < 0.04045 ? c * 0.0773993808 : Math.pow(c * 0.9478672986 + 0.0521327014, 2.4);\n}\n\nfunction LinearToSRGB(c: number) {\n return c < 0.0031308 ? c * 12.92 : 1.055 * Math.pow(c, 0.41666) - 0.055;\n}\n\nexport class Color {\n color!: RGB;\n\n static Brighter(source: string, b = 1) {\n if (b === 1) {\n return source;\n }\n return new Color(source).brighter(b).toRGBA();\n }\n\n static SetOpacity(source: string, o = 1) {\n if (o === 1) {\n return source;\n }\n return new Color(source).setOpacity(o).toRGBA();\n }\n\n static getColorBrightness(source: string | Color, model: 'hsv' | 'hsl' | 'lum' | 'lum2' | 'lum3' = 'hsl') {\n const color = source instanceof Color ? source : new Color(source);\n switch (model) {\n case 'hsv':\n return color.getHSVBrightness();\n case 'hsl':\n return color.getHSLBrightness();\n case 'lum':\n return color.getLuminance();\n case 'lum2':\n return color.getLuminance2();\n case 'lum3':\n return color.getLuminance3();\n default:\n return color.getHSVBrightness();\n }\n }\n\n static parseColorString(value: string) {\n // case0: transparent\n if (isValid(DEFAULT_COLORS_OPACITY[value])) {\n return rgba(DEFAULT_COLORS_OPACITY[value]);\n }\n\n // case1: 简写 ['blue','red']\n if (isValid(DEFAULT_COLORS[value])) {\n return rgb(DEFAULT_COLORS[value]);\n }\n const formatValue = `${value}`.trim().toLowerCase();\n const isHex = REG_HEX.exec(formatValue);\n\n // case2: 16进制\n if (isHex) {\n const hex = parseInt(isHex[1], 16);\n const hexLength = isHex[1].length;\n // #fff\n if (hexLength === 3) {\n return new RGB(\n ((hex >> 8) & 0xf) + (((hex >> 8) & 0xf) << 4),\n ((hex >> 4) & 0xf) + (((hex >> 4) & 0xf) << 4),\n (hex & 0xf) + ((hex & 0xf) << 4),\n 1\n );\n }\n // #ffffff\n if (hexLength === 6) {\n return rgb(hex);\n }\n // #ffffffaa\n else if (hexLength === 8) {\n return new RGB((hex >> 24) & 0xff, (hex >> 16) & 0xff, (hex >> 8) & 0xff, (hex & 0xff) / 0xff);\n }\n\n return;\n }\n\n // case3 : rgb\n if (/^(rgb|RGB|rgba|RGBA)/.test(formatValue)) {\n const aColor = formatValue.replace(/(?:\\(|\\)|rgba|RGBA|rgb|RGB)*/g, '').split(',');\n return new RGB(parseInt(aColor[0], 10), parseInt(aColor[1], 10), parseInt(aColor[2], 10), parseFloat(aColor[3]));\n }\n\n // case4: hsl\n if (/^(hsl|HSL|hsla|HSLA)/.test(formatValue)) {\n const aColor = formatValue.replace(/(?:\\(|\\)|hsla|HSLA|hsl|HSL)*/g, '').split(',');\n const rgb = hslToRgb(parseInt(aColor[0], 10), parseInt(aColor[1], 10), parseInt(aColor[2], 10));\n\n return new RGB(rgb.r, rgb.g, rgb.b, parseFloat(aColor[3]));\n }\n\n return;\n }\n\n constructor(value: string) {\n const color = Color.parseColorString(value);\n\n // case0: transparent\n if (color) {\n this.color = color;\n } else {\n // default: 白色\n console.warn(`Warn: 传入${value}无法解析为Color`);\n this.color = new RGB(255, 255, 255);\n }\n }\n toRGBA() {\n return this.color.formatRgb();\n }\n toString() {\n return this.color.formatRgb();\n }\n toHex() {\n return this.color.formatHex();\n }\n toHsl() {\n return this.color.formatHsl();\n }\n\n brighter(k: number) {\n const { r, g, b } = this.color;\n this.color.r = Math.max(0, Math.min(255, Math.floor(r * k)));\n this.color.g = Math.max(0, Math.min(255, Math.floor(g * k)));\n this.color.b = Math.max(0, Math.min(255, Math.floor(b * k)));\n return this;\n }\n\n add(color: Color) {\n const { r, g, b } = this.color;\n this.color.r += Math.min(255, r + color.color.r);\n this.color.g += Math.min(255, g + color.color.g);\n this.color.b += Math.min(255, b + color.color.b);\n return this;\n }\n\n sub(color: Color) {\n this.color.r = Math.max(0, this.color.r - color.color.r);\n this.color.g = Math.max(0, this.color.g - color.color.g);\n this.color.b = Math.max(0, this.color.b - color.color.b);\n return this;\n }\n\n multiply(color: Color) {\n const { r, g, b } = this.color;\n this.color.r = Math.max(0, Math.min(255, Math.floor(r * color.color.r)));\n this.color.g = Math.max(0, Math.min(255, Math.floor(g * color.color.g)));\n this.color.b = Math.max(0, Math.min(255, Math.floor(b * color.color.b)));\n return this;\n }\n\n // todo: 这里亮度计算都没考虑alpha通道\n getHSVBrightness() {\n return Math.max(this.color.r, this.color.g, this.color.b) / 255;\n }\n\n getHSLBrightness() {\n return (\n (Math.max(this.color.r, this.color.g, this.color.b) / 255 +\n Math.min(this.color.r, this.color.g, this.color.b) / 255) *\n 0.5\n );\n }\n\n setHsl(h?: number | null | undefined, s?: number | null | undefined, l?: number | null | undefined) {\n const opacity = this.color.opacity;\n const hsl = rgbToHsl(this.color.r, this.color.g, this.color.b);\n\n const rgb = hslToRgb(\n isNil(h) ? hsl.h : clamp(h as number, 0, 360),\n isNil(s) ? hsl.s : s >= 0 && s <= 1 ? s * 100 : s,\n isNil(l) ? hsl.l : l <= 1 && l >= 0 ? l * 100 : l\n );\n this.color = new RGB(rgb.r, rgb.g, rgb.b, opacity);\n\n return this;\n }\n\n setRGB(r: number, g: number, b: number) {\n !isNil(r) && (this.color.r = r);\n !isNil(g) && (this.color.g = g);\n !isNil(b) && (this.color.b = b);\n\n return this;\n }\n\n setHex(value: string) {\n const formatValue = `${value}`.trim().toLowerCase();\n const isHex = REG_HEX.exec(formatValue);\n\n const hex = parseInt(isHex[1], 16);\n const hexLength = isHex[1].length;\n // #fff\n if (hexLength === 3) {\n return new RGB(\n ((hex >> 8) & 0xf) + (((hex >> 8) & 0xf) << 4),\n ((hex >> 4) & 0xf) + (((hex >> 4) & 0xf) << 4),\n (hex & 0xf) + ((hex & 0xf) << 4),\n 1\n );\n }\n // #ffffff\n if (hexLength === 6) {\n return rgb(hex);\n }\n // #ffffffaa\n else if (hexLength === 8) {\n return new RGB((hex >> 24) & 0xff, (hex >> 16) & 0xff, (hex >> 8) & 0xff, (hex & 0xff) / 0xff);\n }\n return this;\n }\n\n setColorName(name: string) {\n // color keywords\n const hex = DEFAULT_COLORS[name.toLowerCase()];\n\n if (typeof hex !== 'undefined') {\n // red\n this.setHex(hex);\n } else {\n // unknown color\n console.warn('THREE.Color: Unknown color ' + name);\n }\n\n return this;\n }\n\n setScalar(scalar: number) {\n this.color.r = scalar;\n this.color.g = scalar;\n this.color.b = scalar;\n return this;\n }\n\n setOpacity(o = 1) {\n this.color.opacity = o;\n return this;\n }\n\n getLuminance() {\n return (0.2126 * this.color.r + 0.7152 * this.color.g + 0.0722 * this.color.b) / 255;\n }\n\n getLuminance2() {\n return (0.2627 * this.color.r + 0.678 * this.color.g + 0.0593 * this.color.b) / 255;\n }\n\n getLuminance3() {\n return (0.299 * this.color.r + 0.587 * this.color.g + 0.114 * this.color.b) / 255;\n }\n\n clone() {\n return new Color(this.color.toString());\n }\n\n copyGammaToLinear(color: Color, gammaFactor = 2.0) {\n this.color.r = Math.pow(color.color.r, gammaFactor);\n this.color.g = Math.pow(color.color.g, gammaFactor);\n this.color.b = Math.pow(color.color.b, gammaFactor);\n return this;\n }\n\n copyLinearToGamma(color: Color, gammaFactor = 2.0) {\n const safeInverse = gammaFactor > 0 ? 1.0 / gammaFactor : 1.0;\n\n this.color.r = Math.pow(color.color.r, safeInverse);\n this.color.g = Math.pow(color.color.g, safeInverse);\n this.color.b = Math.pow(color.color.b, safeInverse);\n\n return this;\n }\n\n convertGammaToLinear(gammaFactor: number) {\n this.copyGammaToLinear(this, gammaFactor);\n return this;\n }\n\n convertLinearToGamma(gammaFactor: number) {\n this.copyLinearToGamma(this, gammaFactor);\n return this;\n }\n\n copySRGBToLinear(color: Color) {\n this.color.r = SRGBToLinear(color.color.r);\n this.color.g = SRGBToLinear(color.color.g);\n this.color.b = SRGBToLinear(color.color.b);\n return this;\n }\n\n copyLinearToSRGB(color: Color) {\n this.color.r = LinearToSRGB(color.color.r);\n this.color.g = LinearToSRGB(color.color.g);\n this.color.b = LinearToSRGB(color.color.b);\n return this;\n }\n\n convertSRGBToLinear() {\n this.copySRGBToLinear(this);\n return this;\n }\n\n convertLinearToSRGB() {\n this.copyLinearToSRGB(this);\n return this;\n }\n}\n\nexport class RGB {\n r: number;\n g: number;\n b: number;\n opacity: number;\n constructor(r: number, g: number, b: number, opacity?: number) {\n this.r = isNaN(+r) ? 255 : Math.max(0, Math.min(255, +r));\n this.g = isNaN(+g) ? 255 : Math.max(0, Math.min(255, +g));\n this.b = isNaN(+b) ? 255 : Math.max(0, Math.min(255, +b));\n\n if (isValid(opacity)) {\n this.opacity = isNaN(+(opacity as number)) ? 1 : Math.max(0, Math.min(1, +(opacity as number)));\n } else {\n this.opacity = 1;\n }\n }\n // 转为16进制\n formatHex() {\n return `#${hex(this.r) + hex(this.g) + hex(this.b) + (this.opacity === 1 ? '' : hex(this.opacity * 255))}`;\n }\n formatRgb() {\n const opacity = this.opacity;\n return `${opacity === 1 ? 'rgb(' : 'rgba('}${this.r},${this.g},${this.b}${opacity === 1 ? ')' : `,${opacity})`}`;\n }\n\n formatHsl() {\n const opacity = this.opacity;\n const { h, s, l } = rgbToHsl(this.r, this.g, this.b);\n\n return `${opacity === 1 ? 'hsl(' : 'hsla('}${h},${s}%,${l}%${opacity === 1 ? ')' : `,${opacity})`}`;\n }\n // 转为16进制\n toString() {\n return this.formatHex();\n }\n}\n","export type SeriesType = keyof typeof SeriesTypeEnum | string;\n\nexport enum SeriesTypeEnum {\n area = 'area',\n line = 'line',\n bar = 'bar',\n bar3d = 'bar3d',\n rangeColumn = 'rangeColumn',\n rangeColumn3d = 'rangeColumn3d',\n rangeArea = 'rangeArea',\n dot = 'dot',\n geo = 'geo',\n link = 'link',\n map = 'map',\n pie = 'pie',\n pie3d = 'pie3d',\n radar = 'radar',\n rose = 'rose',\n scatter = 'scatter',\n circularProgress = 'circularProgress',\n wordCloud = 'wordCloud',\n wordCloud3d = 'wordCloud3d',\n funnel = 'funnel',\n funnel3d = 'funnel3d',\n linearProgress = 'linearProgress',\n boxPlot = 'boxPlot',\n sankey = 'sankey',\n gaugePointer = 'gaugePointer',\n gauge = 'gauge',\n treemap = 'treemap',\n sunburst = 'sunburst',\n circlePacking = 'circlePacking',\n waterfall = 'waterfall',\n heatmap = 'heatmap',\n correlation = 'correlation'\n}\n\nexport const enum SeriesMarkNameEnum {\n label = 'label',\n point = 'point',\n line = 'line',\n area = 'area',\n bar = 'bar',\n bar3d = 'bar3d',\n boxPlot = 'boxPlot',\n outlier = 'outlier',\n circlePacking = 'circlePacking',\n group = 'group',\n gridBackground = 'gridBackground',\n grid = 'grid',\n dot = 'dot',\n title = 'title',\n subTitle = 'subTitle',\n symbol = 'symbol',\n funnel = 'funnel',\n funnel3d = 'funnel3d',\n transform = 'transform',\n transform3d = 'transform3d',\n transformLabel = 'transformLabel',\n outerLabel = 'outerLabel',\n outerLabelLine = 'outerLabelLine',\n pin = 'pin',\n pinBackground = 'pinBackground',\n pointer = 'pointer',\n segment = 'segment',\n track = 'track',\n cell = 'cell',\n cellBackground = 'cellBackground',\n link = 'link',\n arrow = 'arrow',\n pie = 'pie',\n pie3d = 'pie3d',\n labelLine = 'labelLine',\n progress = 'progress',\n minLabel = 'minLabel',\n maxLabel = 'maxLabel',\n rose = 'rose',\n node = 'node',\n sunburst = 'sunburst',\n nonLeaf = 'nonLeaf',\n leaf = 'leaf',\n nonLeafLabel = 'nonLeafLabel',\n leaderLine = 'leaderLine',\n stackLabel = 'stackLabel',\n word = 'word',\n fillingWord = 'fillingWord',\n nodePoint = 'nodePoint',\n ripplePoint = 'ripplePoint',\n centerPoint = 'centerPoint',\n centerLabel = 'centerLabel',\n barBackground = 'barBackground',\n lineLabel = 'lineLabel',\n areaLabel = 'areaLabel'\n}\n","import type { DirectionType, ISeriesSpec } from '../../typings';\nimport type { ICartesianSeriesSpec } from '../cartesian';\nimport { SeriesTypeEnum } from '../interface';\nimport type { ISankeySeriesSpec } from '../sankey/interface';\n\nexport function getDirectionFromSeriesSpec(spec: ISeriesSpec): DirectionType {\n const { type } = spec;\n\n if (type === SeriesTypeEnum.sankey) {\n return (spec as ISankeySeriesSpec).direction ?? 'horizontal';\n }\n\n return (spec as ICartesianSeriesSpec).direction ?? 'vertical';\n}\n","// FIXME: token 兼容策略,照目前的设计不应该硬编码。\n// 后续需要二选一:\n// - 主题模块指定唯一一套支持的 token(可以保留这段硬编码)\n// - 在默认主题中做声明式的兼容(需要删除这段硬编码,并在 IColorKey 中支持新属性)\n\nimport type { BuiltinColorPalette } from './builtin';\nimport type { ColorSchemeItem, IColorSchemeStruct } from './interface';\n\nexport const newTokenToLegacyToken: Record = {\n primaryFontColor: 'titleFontColor',\n tertiaryFontColor: 'labelFontColor',\n axisLabelFontColor: 'axisFontColor',\n axisMarkerFontColor: 'labelReverseFontColor',\n dataZoomHandleStrokeColor: 'dataZoomHandlerStrokeColor',\n sliderHandleColor: 'dataZoomHandlerFillColor',\n sliderRailColor: 'dataZoomBackgroundColor',\n sliderTrackColor: 'dataZoomSelectedColor',\n playerControllerColor: 'dataZoomSelectedColor',\n popupBackgroundColor: 'tooltipBackgroundColor',\n hoverBackgroundColor: 'axisGridColor'\n // 以下两个新 token 不做兼容策略,因为其对应的 legacy token 仍在使用\n // axisMarkerBackgroundColor: 'primaryFontColor',\n // markLineStrokeColor: 'primaryFontColor',\n};\n\nexport const legacyTokenToNewToken: Record = {\n titleFontColor: 'primaryFontColor',\n labelFontColor: 'tertiaryFontColor',\n axisFontColor: 'axisLabelFontColor',\n labelReverseFontColor: 'axisMarkerFontColor',\n dataZoomHandlerStrokeColor: 'dataZoomHandleStrokeColor',\n dataZoomHandlerFillColor: 'sliderHandleColor',\n dataZoomBackgroundColor: 'sliderRailColor',\n dataZoomSelectedColor: 'sliderTrackColor',\n tooltipBackgroundColor: 'popupBackgroundColor'\n};\n\nexport function getUpgradedTokenValue(palette: IColorSchemeStruct['palette'], key: string): ColorSchemeItem {\n // 情况一:用户定义了包含旧 token 的新色板\n const legacyKey = newTokenToLegacyToken[key];\n if (legacyKey && palette[legacyKey]) {\n return palette[legacyKey];\n }\n // 情况二:默认情况,用户尝试取色(大部分情况下在此退出)\n if (palette[key]) {\n return palette[key];\n }\n // 情况三:用户没有取到颜色,判断用户是否在尝试用旧 token 取色\n const newKey = legacyTokenToNewToken[key];\n if (newKey) {\n return palette[newKey];\n }\n // 情况四:真的取不到颜色\n return undefined;\n}\n","import { isArray, isFunction, isObject, isString, isValid, Color, isNil, rgbToHsl, hslToRgb } from '@visactor/vutils';\nimport type {\n ColorScheme,\n ColorSchemeItem,\n IColorKey,\n IColorSchemeStruct,\n IProgressiveDataSchemeCase,\n IThemeColorScheme,\n ProgressiveDataScheme\n} from './interface';\nimport type { ISeriesSpec } from '../../typings';\nimport { getDirectionFromSeriesSpec } from '../../series/util/spec';\nimport { getUpgradedTokenValue } from './legacy';\n\n/**\n * 从色板中获取数据色板(在此步骤中替换语义色值)\n * @param colorScheme\n * @param seriesType\n * @returns\n */\nexport function getDataScheme(\n colorScheme?: IThemeColorScheme,\n seriesSpec?: ISeriesSpec\n): Array | ProgressiveDataScheme {\n if (!colorScheme) {\n return [];\n }\n const scheme = getColorSchemeBySeries(colorScheme, seriesSpec);\n if (!scheme || isArray(scheme)) {\n // 不带语义色板,直接输出\n return (scheme as Array | ProgressiveDataScheme) ?? [];\n } else if (isObject(scheme)) {\n // 带语义色板,转换颜色后输出\n const { dataScheme } = scheme as IColorSchemeStruct;\n if (!dataScheme) {\n return [];\n }\n // 渐进式色板的情况\n if (isProgressiveDataColorScheme(dataScheme)) {\n return dataScheme.map(item => ({\n ...item,\n scheme: item.scheme\n .map(color => {\n if (isColorKey(color)) {\n return queryColorFromColorScheme(colorScheme, color, seriesSpec);\n }\n return color;\n })\n .filter(isValid)\n }));\n }\n // 普通色板的情况\n return dataScheme\n .map(color => {\n if (isColorKey(color)) {\n return queryColorFromColorScheme(colorScheme, color, seriesSpec);\n }\n return color;\n })\n .filter(isValid);\n }\n return [];\n}\n\n/**\n * 计算最终数据色板(在此步骤中获得渐进式色板的最终色板)\n * @param colorScheme\n * @param seriesType\n * @returns\n */\nexport function computeActualDataScheme(\n dataScheme: Array | ProgressiveDataScheme,\n colorDomain: any[]\n): Array {\n if (isProgressiveDataColorScheme(dataScheme)) {\n return (\n dataScheme.find(item => {\n if (isValid(item.isAvailable)) {\n if (isFunction(item.isAvailable)) {\n return item.isAvailable(colorDomain);\n }\n return !!item.isAvailable;\n } else if (isValid(item.maxDomainLength)) {\n return colorDomain?.length <= item.maxDomainLength;\n }\n return true;\n })?.scheme ?? dataScheme[dataScheme.length - 1].scheme\n );\n }\n return dataScheme;\n}\n\n/**\n * 根据色板和色值索引生成颜色\n * @param colorScheme\n * @param colorKey\n * @param seriesType\n * @returns\n */\nexport function queryColorFromColorScheme(\n colorScheme: IThemeColorScheme,\n colorKey: IColorKey,\n seriesSpec?: ISeriesSpec\n): ColorSchemeItem | undefined {\n const scheme = getColorSchemeBySeries(colorScheme, seriesSpec);\n if (!scheme) {\n return undefined;\n }\n let color;\n const { palette } = scheme as IColorSchemeStruct;\n if (isObject(palette)) {\n color = getUpgradedTokenValue(palette, colorKey.key) ?? colorKey.default;\n }\n if (!color) {\n return undefined;\n }\n if ((isNil(colorKey.a) && isNil(colorKey.l)) || !isString(color)) {\n return color;\n }\n let c = new Color(color);\n if (isValid(colorKey.l)) {\n const { r, g, b } = c.color;\n const { h, s } = rgbToHsl(r, g, b);\n const rgb = hslToRgb(h, s, colorKey.l);\n const newColor = new Color(`rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`);\n newColor.setOpacity(c.color.opacity);\n c = newColor;\n }\n if (isValid(colorKey.a)) {\n c.setOpacity(colorKey.a);\n }\n return c.toRGBA();\n}\n\n/** 查询语义化颜色 */\nexport const getActualColor = (value: any, colorScheme?: IThemeColorScheme, seriesSpec?: ISeriesSpec) => {\n if (colorScheme && isColorKey(value)) {\n const color = queryColorFromColorScheme(colorScheme, value, seriesSpec);\n if (color) {\n return color;\n }\n }\n return value;\n};\n\nexport function isColorKey(obj: any): obj is IColorKey {\n return obj && (obj as IColorKey).type === 'palette' && !!(obj as IColorKey).key;\n}\n\nexport function isProgressiveDataColorScheme(obj: any): obj is ProgressiveDataScheme {\n if (!isArray(obj) || obj.length === 0) {\n return false;\n }\n return obj.every(item => {\n return isValid((item as IProgressiveDataSchemeCase).scheme);\n });\n}\n\n/** 将色板转化为标准形式 */\nexport function transformColorSchemeToStandardStruct(colorScheme: ColorScheme): IColorSchemeStruct {\n if (isArray(colorScheme)) {\n return {\n dataScheme: colorScheme\n };\n }\n return colorScheme;\n}\n\nexport function getColorSchemeBySeries(\n colorScheme?: IThemeColorScheme,\n seriesSpec?: ISeriesSpec\n): ColorScheme | undefined {\n const { type: seriesType } = seriesSpec ?? {};\n let scheme: ColorScheme | undefined;\n if (!seriesSpec || isNil(seriesType)) {\n scheme = colorScheme?.default;\n } else {\n const direction = getDirectionFromSeriesSpec(seriesSpec);\n scheme = colorScheme?.[`${seriesType}_${direction}`] ?? colorScheme?.[seriesType] ?? colorScheme?.default;\n }\n return scheme;\n}\n","import { MarkTypeEnum } from '../../mark/interface/type';\nimport { SeriesMarkNameEnum } from '../interface/type';\nimport type { SeriesMarkMap } from '../interface/common';\nimport { PREFIX } from '../../constant';\n\nexport const baseSeriesMark: SeriesMarkMap = {\n [SeriesMarkNameEnum.label]: { name: SeriesMarkNameEnum.label, type: MarkTypeEnum.text }\n};\n\nexport const RECT_X = `${PREFIX}_rect_x`;\nexport const RECT_X1 = `${PREFIX}_rect_x1`;\nexport const RECT_Y = `${PREFIX}_rect_y`;\nexport const RECT_Y1 = `${PREFIX}_rect_y1`;\n","import { MarkTypeEnum } from '../../mark/interface/type';\nimport { baseSeriesMark } from '../base/constant';\nimport type { SeriesMarkMap } from '../interface/common';\nimport { SeriesMarkNameEnum } from '../interface/type';\n\nexport const barSeriesMark: SeriesMarkMap = {\n ...baseSeriesMark,\n [SeriesMarkNameEnum.bar]: { name: SeriesMarkNameEnum.bar, type: MarkTypeEnum.rect },\n [SeriesMarkNameEnum.barBackground]: { name: SeriesMarkNameEnum.barBackground, type: MarkTypeEnum.rect }\n};\n\nexport const bar3dSeriesMark: SeriesMarkMap = {\n ...baseSeriesMark,\n [SeriesMarkNameEnum.bar3d]: { name: SeriesMarkNameEnum.bar3d, type: MarkTypeEnum.rect3d }\n};\n","import { MarkTypeEnum } from '../../mark/interface/type';\nimport type { SeriesMarkMap } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesMarkNameEnum } from '../interface/type';\n\nexport const lineLikeSeriesMark: SeriesMarkMap = {\n [SeriesMarkNameEnum.point]: { name: SeriesMarkNameEnum.point, type: MarkTypeEnum.symbol },\n [SeriesMarkNameEnum.line]: { name: SeriesMarkNameEnum.line, type: MarkTypeEnum.line }\n};\n","import { MarkTypeEnum } from '../../mark/interface/type';\nimport { baseSeriesMark } from '../base/constant';\nimport type { SeriesMarkMap } from '../interface/common';\nimport { SeriesMarkNameEnum } from '../interface/type';\n\nexport const pieSeriesMark: SeriesMarkMap = {\n ...baseSeriesMark,\n [SeriesMarkNameEnum.pie]: { name: SeriesMarkNameEnum.pie, type: MarkTypeEnum.arc },\n [SeriesMarkNameEnum.labelLine]: { name: SeriesMarkNameEnum.labelLine, type: MarkTypeEnum.path }\n};\n\nexport const pie3dSeriesMark: SeriesMarkMap = {\n ...baseSeriesMark,\n [SeriesMarkNameEnum.pie3d]: { name: SeriesMarkNameEnum.pie3d, type: MarkTypeEnum.arc3d },\n [SeriesMarkNameEnum.labelLine]: { name: SeriesMarkNameEnum.labelLine, type: MarkTypeEnum.path }\n};\n","import { MarkTypeEnum } from '../../mark/interface/type';\nimport { baseSeriesMark } from '../base/constant';\nimport type { SeriesMarkMap } from '../interface/common';\nimport { SeriesMarkNameEnum } from '../interface/type';\n\nexport const funnelSeriesMark: SeriesMarkMap = {\n ...baseSeriesMark,\n [SeriesMarkNameEnum.funnel]: { name: SeriesMarkNameEnum.funnel, type: MarkTypeEnum.polygon },\n [SeriesMarkNameEnum.transform]: { name: SeriesMarkNameEnum.transform, type: MarkTypeEnum.polygon },\n [SeriesMarkNameEnum.transformLabel]: { name: SeriesMarkNameEnum.transformLabel, type: MarkTypeEnum.text },\n [SeriesMarkNameEnum.outerLabel]: { name: SeriesMarkNameEnum.outerLabel, type: MarkTypeEnum.text },\n [SeriesMarkNameEnum.outerLabelLine]: { name: SeriesMarkNameEnum.outerLabelLine, type: MarkTypeEnum.rule }\n};\n\nexport const funnel3dSeriesMark: SeriesMarkMap = {\n ...baseSeriesMark,\n [SeriesMarkNameEnum.funnel3d]: { name: SeriesMarkNameEnum.funnel3d, type: MarkTypeEnum.pyramid3d },\n [SeriesMarkNameEnum.transform3d]: { name: SeriesMarkNameEnum.transform3d, type: MarkTypeEnum.pyramid3d },\n [SeriesMarkNameEnum.transformLabel]: { name: SeriesMarkNameEnum.transformLabel, type: MarkTypeEnum.text },\n [SeriesMarkNameEnum.outerLabel]: { name: SeriesMarkNameEnum.outerLabel, type: MarkTypeEnum.text },\n [SeriesMarkNameEnum.outerLabelLine]: { name: SeriesMarkNameEnum.outerLabelLine, type: MarkTypeEnum.rule }\n};\n","import { MarkTypeEnum } from '../../mark/interface/type';\nimport { bar3dSeriesMark, barSeriesMark } from '../bar/constant';\nimport type { SeriesMarkMap } from '../interface/common';\nimport { SeriesMarkNameEnum } from '../interface/type';\n\nexport const rangeColumnSeriesMark: SeriesMarkMap = {\n ...barSeriesMark,\n [SeriesMarkNameEnum.minLabel]: { name: SeriesMarkNameEnum.minLabel, type: MarkTypeEnum.text },\n [SeriesMarkNameEnum.maxLabel]: { name: SeriesMarkNameEnum.maxLabel, type: MarkTypeEnum.text }\n};\n\nexport const rangeColumn3dSeriesMark: SeriesMarkMap = {\n ...bar3dSeriesMark,\n [SeriesMarkNameEnum.minLabel]: { name: SeriesMarkNameEnum.minLabel, type: MarkTypeEnum.text },\n [SeriesMarkNameEnum.maxLabel]: { name: SeriesMarkNameEnum.maxLabel, type: MarkTypeEnum.text }\n};\n","import type { IWaterfallSeriesTheme } from '../waterfall/interface';\nimport type { IBoxPlotSeriesTheme } from '../box-plot/interface';\nimport type { IBar3dSeriesTheme, IBarSeriesTheme } from '../bar/interface';\nimport type { ILineSeriesTheme } from '../line/interface';\nimport type { IScatterSeriesTheme } from '../scatter/interface';\nimport type { IAreaSeriesTheme } from '../area/interface';\nimport type { IRadarSeriesTheme } from '../radar/interface';\nimport type { IPie3dSeriesTheme, IPieSeriesTheme } from '../pie/interface';\nimport type { IRoseSeriesTheme } from '../rose/interface';\nimport type { IMapSeriesTheme } from '../map/interface';\nimport type { ICircularProgressSeriesTheme } from '../progress/circular/interface';\nimport type { ILinkSeriesTheme } from '../link/interface';\nimport type { IDotSeriesTheme } from '../dot/interface';\nimport type { IWordCloud3dSeriesTheme, IWordCloudSeriesTheme } from '../word-cloud/interface';\nimport type { IFunnel3dSeriesTheme, IFunnelSeriesTheme } from '../funnel/interface';\nimport type { ILinearProgressSeriesTheme } from '../progress/linear/interface';\nimport type { IGaugePointerSeriesTheme, IGaugeSeriesTheme } from '../gauge';\nimport type { ISankeySeriesTheme } from '../sankey/interface';\nimport type { ITreemapSeriesTheme } from '../treemap/interface';\nimport type { ISunburstSeriesTheme } from '../sunburst/interface';\nimport type { IRangeColumnSeriesTheme } from '../range-column/interface';\nimport type { ICirclePackingSeriesTheme } from '../circle-packing/interface';\nimport type { IHeatmapSeriesTheme } from '../heatmap/interface';\nimport type { ICorrelationSeriesTheme } from '../correlation/interface';\nimport { SeriesTypeEnum } from './type';\nimport type { SeriesMarkMap } from './common';\nimport { bar3dSeriesMark, barSeriesMark } from '../bar/constant';\nimport { lineSeriesMark } from '../line/constant';\nimport { scatterSeriesMark } from '../scatter/constant';\nimport { areaSeriesMark } from '../area/constant';\nimport { radarSeriesMark } from '../radar/constant';\nimport { pie3dSeriesMark, pieSeriesMark } from '../pie/constant';\nimport { roseSeriesMark } from '../rose/constant';\nimport { mapSeriesMark } from '../map/constant';\nimport { circularProgressSeriesMark } from '../progress/circular/constant';\nimport { linkSeriesMark } from '../link/constant';\nimport { dotSeriesMark } from '../dot/constant';\nimport { wordCloudSeriesMark } from '../word-cloud/constant';\nimport { funnel3dSeriesMark, funnelSeriesMark } from '../funnel/constant';\nimport { linearProgressSeriesMark } from '../progress/linear/constant';\nimport { waterfallSeriesMark } from '../waterfall/constant';\nimport { boxPlotSeriesMark } from '../box-plot/constant';\nimport { treemapSeriesMark } from '../treemap/constant';\nimport { sankeySeriesMark } from '../sankey/constant';\nimport { gaugePointerSeriesMark, gaugeSeriesMark } from '../gauge/constant';\nimport { sunburstSeriesMark } from '../sunburst/constant';\nimport { rangeColumn3dSeriesMark, rangeColumnSeriesMark } from '../range-column/constant';\nimport { circlePackingSeriesMark } from '../circle-packing/constant';\nimport { heatmapSeriesMark } from '../heatmap/constant';\nimport { correlationSeriesMark } from '../correlation/constant';\nimport { rangeAreaSeriesMark } from '../range-area/constant';\nimport type { IRangeAreaSeriesTheme } from '../range-area/interface';\nimport { baseSeriesMark } from '../base/constant';\n\nexport interface ISeriesTheme {\n [SeriesTypeEnum.bar]?: IBarSeriesTheme;\n [SeriesTypeForThemeEnum.bar_vertical]?: IBarSeriesTheme;\n [SeriesTypeForThemeEnum.bar_horizontal]?: IBarSeriesTheme;\n\n [SeriesTypeEnum.bar3d]?: IBar3dSeriesTheme;\n [SeriesTypeForThemeEnum.bar3d_vertical]?: IBar3dSeriesTheme;\n [SeriesTypeForThemeEnum.bar3d_horizontal]?: IBar3dSeriesTheme;\n\n [SeriesTypeEnum.line]?: ILineSeriesTheme;\n [SeriesTypeForThemeEnum.line_vertical]?: ILineSeriesTheme;\n [SeriesTypeForThemeEnum.line_horizontal]?: ILineSeriesTheme;\n\n [SeriesTypeEnum.area]?: IAreaSeriesTheme;\n [SeriesTypeForThemeEnum.area_vertical]?: IAreaSeriesTheme;\n [SeriesTypeForThemeEnum.area_horizontal]?: IAreaSeriesTheme;\n\n [SeriesTypeEnum.rangeColumn]?: IRangeColumnSeriesTheme;\n [SeriesTypeForThemeEnum.rangeColumn_vertical]?: IRangeColumnSeriesTheme;\n [SeriesTypeForThemeEnum.rangeColumn_horizontal]?: IRangeColumnSeriesTheme;\n\n [SeriesTypeEnum.rangeArea]?: IRangeAreaSeriesTheme;\n [SeriesTypeForThemeEnum.rangeArea_vertical]?: IRangeAreaSeriesTheme;\n [SeriesTypeForThemeEnum.rangeArea_horizontal]?: IRangeAreaSeriesTheme;\n\n [SeriesTypeEnum.linearProgress]?: ILinearProgressSeriesTheme;\n [SeriesTypeForThemeEnum.linearProgress_vertical]?: ILinearProgressSeriesTheme;\n [SeriesTypeForThemeEnum.linearProgress_horizontal]?: ILinearProgressSeriesTheme;\n\n [SeriesTypeEnum.boxPlot]?: IBoxPlotSeriesTheme;\n [SeriesTypeForThemeEnum.boxPlot_vertical]?: IBoxPlotSeriesTheme;\n [SeriesTypeForThemeEnum.boxPlot_horizontal]?: IBoxPlotSeriesTheme;\n\n [SeriesTypeEnum.sankey]?: ISankeySeriesTheme;\n [SeriesTypeForThemeEnum.sankey_vertical]?: ISankeySeriesTheme;\n [SeriesTypeForThemeEnum.sankey_horizontal]?: ISankeySeriesTheme;\n\n [SeriesTypeEnum.waterfall]?: IWaterfallSeriesTheme;\n [SeriesTypeForThemeEnum.waterfall_vertical]?: IWaterfallSeriesTheme;\n [SeriesTypeForThemeEnum.waterfall_horizontal]?: IWaterfallSeriesTheme;\n\n [SeriesTypeEnum.scatter]?: IScatterSeriesTheme;\n [SeriesTypeEnum.radar]?: IRadarSeriesTheme;\n [SeriesTypeEnum.pie]?: IPieSeriesTheme;\n [SeriesTypeEnum.pie3d]?: IPie3dSeriesTheme;\n [SeriesTypeEnum.rose]?: IRoseSeriesTheme;\n [SeriesTypeEnum.map]?: IMapSeriesTheme;\n [SeriesTypeEnum.circularProgress]?: ICircularProgressSeriesTheme;\n [SeriesTypeEnum.link]?: ILinkSeriesTheme;\n [SeriesTypeEnum.dot]?: IDotSeriesTheme;\n [SeriesTypeEnum.wordCloud]?: IWordCloudSeriesTheme;\n [SeriesTypeEnum.wordCloud3d]?: IWordCloud3dSeriesTheme;\n [SeriesTypeEnum.funnel]?: IFunnelSeriesTheme;\n [SeriesTypeEnum.funnel3d]?: IFunnel3dSeriesTheme;\n [SeriesTypeEnum.treemap]?: ITreemapSeriesTheme;\n [SeriesTypeEnum.gauge]?: IGaugeSeriesTheme;\n [SeriesTypeEnum.gaugePointer]?: IGaugePointerSeriesTheme;\n [SeriesTypeEnum.sunburst]?: ISunburstSeriesTheme;\n [SeriesTypeEnum.circlePacking]?: ICirclePackingSeriesTheme;\n [SeriesTypeEnum.heatmap]?: IHeatmapSeriesTheme;\n [SeriesTypeEnum.correlation]?: ICorrelationSeriesTheme;\n}\n\n/** 带有方向信息的系列类型,作为主题相关的补充类型 */\nexport enum SeriesTypeForThemeEnum {\n area_horizontal = 'area_horizontal',\n area_vertical = 'area_vertical',\n\n line_horizontal = 'line_horizontal',\n line_vertical = 'line_vertical',\n\n bar_horizontal = 'bar_horizontal',\n bar_vertical = 'bar_vertical',\n\n bar3d_horizontal = 'bar3d_horizontal',\n bar3d_vertical = 'bar3d_vertical',\n\n rangeColumn_horizontal = 'rangeColumn_horizontal',\n rangeColumn_vertical = 'rangeColumn_vertical',\n\n rangeColumn3d_horizontal = 'rangeColumn3d_horizontal',\n rangeColumn3d_vertical = 'rangeColumn3d_vertical',\n\n rangeArea_horizontal = 'rangeArea_horizontal',\n rangeArea_vertical = 'rangeArea_vertical',\n\n linearProgress_horizontal = 'linearProgress_horizontal',\n linearProgress_vertical = 'linearProgress_vertical',\n\n boxPlot_horizontal = 'boxPlot_horizontal',\n boxPlot_vertical = 'boxPlot_vertical',\n\n sankey_horizontal = 'sankey_horizontal',\n sankey_vertical = 'sankey_vertical',\n\n waterfall_horizontal = 'waterfall_horizontal',\n waterfall_vertical = 'waterfall_vertical'\n}\n\nexport const seriesMarkInfoMap: Record = {\n [SeriesTypeEnum.bar]: barSeriesMark,\n [SeriesTypeEnum.bar3d]: bar3dSeriesMark,\n [SeriesTypeEnum.line]: lineSeriesMark,\n [SeriesTypeEnum.scatter]: scatterSeriesMark,\n [SeriesTypeEnum.area]: areaSeriesMark,\n [SeriesTypeEnum.radar]: radarSeriesMark,\n [SeriesTypeEnum.pie]: pieSeriesMark,\n [SeriesTypeEnum.pie3d]: pie3dSeriesMark,\n [SeriesTypeEnum.rose]: roseSeriesMark,\n [SeriesTypeEnum.geo]: baseSeriesMark,\n [SeriesTypeEnum.map]: mapSeriesMark,\n [SeriesTypeEnum.circularProgress]: circularProgressSeriesMark,\n [SeriesTypeEnum.link]: linkSeriesMark,\n [SeriesTypeEnum.dot]: dotSeriesMark,\n [SeriesTypeEnum.wordCloud]: wordCloudSeriesMark,\n [SeriesTypeEnum.wordCloud3d]: wordCloudSeriesMark,\n [SeriesTypeEnum.funnel]: funnelSeriesMark,\n [SeriesTypeEnum.funnel3d]: funnel3dSeriesMark,\n [SeriesTypeEnum.linearProgress]: linearProgressSeriesMark,\n [SeriesTypeEnum.waterfall]: waterfallSeriesMark,\n [SeriesTypeEnum.boxPlot]: boxPlotSeriesMark,\n [SeriesTypeEnum.treemap]: treemapSeriesMark,\n [SeriesTypeEnum.sankey]: sankeySeriesMark,\n [SeriesTypeEnum.gauge]: gaugeSeriesMark,\n [SeriesTypeEnum.gaugePointer]: gaugePointerSeriesMark,\n [SeriesTypeEnum.sunburst]: sunburstSeriesMark,\n [SeriesTypeEnum.rangeColumn]: rangeColumnSeriesMark,\n [SeriesTypeEnum.rangeColumn3d]: rangeColumn3dSeriesMark,\n [SeriesTypeEnum.circlePacking]: circlePackingSeriesMark,\n [SeriesTypeEnum.heatmap]: heatmapSeriesMark,\n [SeriesTypeEnum.correlation]: correlationSeriesMark,\n [SeriesTypeEnum.rangeArea]: rangeAreaSeriesMark\n};\n","import { type Maybe, array } from '@visactor/vutils';\nimport type { IGlobalMarkThemeByName, IGlobalMarkThemeByType, ITheme } from '../../theme';\nimport { transformColorSchemeToStandardStruct } from '../../theme/color-scheme/util';\nimport type { IThemeColorScheme } from '../../theme/color-scheme/interface';\nimport type { ISeriesTheme } from '../../series/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ISeriesMarkInfo } from '../../series/interface/common';\nimport { seriesMarkInfoMap } from '../../series/interface/theme';\nimport { mergeSpec } from './merge-spec';\n\nexport function mergeTheme(target: Maybe, ...sources: Maybe[]): Maybe {\n return mergeSpec(transformThemeToMerge(target), ...sources.map(transformThemeToMerge));\n}\n\nfunction transformThemeToMerge(theme?: Maybe): Maybe {\n if (!theme) {\n return theme;\n }\n\n // 将色板转化为标准形式\n const colorScheme = transformColorSchemeToMerge(theme.colorScheme);\n\n // 将全局 mark 主题 merge 进系列主题\n const { series } = theme;\n const { mark: markByType, markByName } = theme;\n let newSeriesTheme;\n if (markByType || markByName) {\n newSeriesTheme = Object.keys(seriesMarkInfoMap).reduce((newSeriesTheme, key) => {\n const value = series?.[key] ?? {};\n newSeriesTheme[key] = transformSeriesThemeToMerge(value, key, markByType, markByName);\n return newSeriesTheme;\n }, {} as ISeriesTheme);\n }\n\n return Object.assign({}, theme, {\n colorScheme,\n series: Object.assign({}, theme.series, newSeriesTheme)\n });\n}\n\n/** 将色板转化为标准形式 */\nexport function transformColorSchemeToMerge(colorScheme?: Maybe): Maybe {\n if (colorScheme) {\n colorScheme = Object.keys(colorScheme).reduce((scheme, key) => {\n const value = colorScheme[key];\n scheme[key] = transformColorSchemeToStandardStruct(value);\n return scheme;\n }, {} as IThemeColorScheme);\n }\n return colorScheme;\n}\n\n/** 将全局 mark 主题 merge 进系列主题 */\nexport function transformSeriesThemeToMerge(\n seriesTheme: any,\n seriesType: string,\n markByType: IGlobalMarkThemeByType,\n markByName: IGlobalMarkThemeByName\n): any {\n if (!seriesMarkInfoMap[seriesType]) {\n return seriesTheme;\n }\n const newTheme: any = {};\n Object.values(seriesMarkInfoMap[seriesType]).forEach(({ type, name }) => {\n newTheme[name] = mergeSpec({}, markByType?.[array(type)[0]], markByName?.[name], seriesTheme?.[name]);\n });\n return {\n ...seriesTheme,\n ...newTheme\n };\n}\n","import { isPlainObject } from '@visactor/vutils';\nimport type { IThemeColorScheme } from '../../theme/color-scheme/interface';\nimport { getActualColor, isColorKey } from '../../theme/color-scheme/util';\nimport type { ISeriesSpec } from '../../typings';\n\nconst IGNORE_KEYS = ['animationThreshold', 'colorScheme', 'fontFamily', 'name', 'padding'];\n\nexport function preprocessTheme(obj: any, colorScheme?: IThemeColorScheme, seriesSpec?: ISeriesSpec): any {\n if (!obj) {\n return obj;\n }\n\n const newObj = {};\n Object.keys(obj).forEach(key => {\n const value = obj[key];\n if (IGNORE_KEYS.includes(key)) {\n newObj[key] = value;\n } else if (isPlainObject(value)) {\n if (isColorKey(value)) {\n // 查询、替换语义化颜色\n newObj[key] = getActualColor(value, colorScheme, seriesSpec);\n } else {\n newObj[key] = preprocessTheme(value, colorScheme, seriesSpec);\n }\n } else {\n newObj[key] = value;\n }\n });\n\n return newObj;\n}\n","export * from './light';\nexport * from './dark';\n\nimport { isString } from '@visactor/vutils';\nimport { mergeTheme } from '../../util/spec/merge-theme';\nimport type { ITheme } from '../interface';\nimport { lightTheme } from './light';\n// import { darkTheme } from './dark';\nimport { preprocessTheme } from '../../util/spec/preprocess';\n\n/** 声明内置主题(含 token 未转换) */\nexport const builtinThemes: Record = {\n [lightTheme.name]: lightTheme\n // [darkTheme.name]: darkTheme\n};\n/** 默认主题名称 */\nexport const defaultThemeName = lightTheme.name;\n\n/** 全局主题 map (包含用户新注册的主题)(含 token 未转换) */\nexport const themes: Map = new Map(Object.keys(builtinThemes).map(key => [key, builtinThemes[key]]));\n\n/** 全局已将 token 转换的主题 map (包含用户新注册的主题) */\nconst transformedThemes: Map = new Map(\n Object.keys(builtinThemes).map(key => [key, preprocessTheme(builtinThemes[key], builtinThemes[key].colorScheme)])\n);\n\n/** 主题 map 中的元素是否 merge 过默认主题 (非默认主题的其他内置主题没有 merge 过默认主题) */\nexport const hasThemeMerged: Map = new Map(\n Object.keys(builtinThemes).map(key => [key, key === defaultThemeName])\n);\n\n/** 注册主题 */\nexport const registerTheme = (name: string, theme: Partial) => {\n if (!name) {\n return;\n }\n // 所有主题基于默认主题扩展,保证基础值\n const mergedTheme = getMergedTheme(theme);\n themes.set(name, mergedTheme);\n transformedThemes.set(name, preprocessTheme(mergedTheme, mergedTheme.colorScheme));\n hasThemeMerged.set(name, true);\n};\n/**\n * 获取注册过的主题\n * @param name 主题名称\n * @param transformed 是否获取 token 转换后的主题\n * @returns 返回主题\n */\nexport const getTheme = (name: string = defaultThemeName, transformed: boolean = false) => {\n if (hasThemeMerged.has(name) && !hasThemeMerged.get(name)) {\n // 重新 merge 默认主题\n registerTheme(name, themes.get(name));\n }\n\n if (transformed) {\n return transformedThemes.get(name);\n }\n\n return themes.get(name);\n};\n\n/** 删除主题 */\nexport const removeTheme = (name: string): boolean => {\n return themes.delete(name) && transformedThemes.delete(name) && hasThemeMerged.delete(name);\n};\n\n/** 主题是否存在 */\nexport const themeExist = (name: any) => {\n if (!isString(name)) {\n return false;\n }\n return themes.has(name);\n};\n\n/** 使新主题基于默认主题扩展,保证基础值 */\nexport const getMergedTheme = (theme: Partial): ITheme => {\n const baseThemeName = theme.type ?? defaultThemeName;\n const baseTheme = getTheme(baseThemeName);\n return mergeTheme({}, baseTheme, theme);\n};\n","import { array } from '@visactor/vutils';\nimport type { MaybeArray } from '../typings';\nimport type { IVChart } from './interface';\n\n/** vchart 全局实例管理类,为了防止与 ThemeManager 循环依赖,单独从 VChart 类抽出 */\nexport class InstanceManager {\n /** 全局实例 map */\n static readonly instances: Map = new Map();\n /** 注册实例 */\n static registerInstance(instance: IVChart) {\n InstanceManager.instances.set(instance.id, instance);\n }\n /** 注销实例 */\n static unregisterInstance(instance: IVChart) {\n InstanceManager.instances.delete(instance.id);\n }\n /**\n * 根据 vChart 实例的 id 获取 vChart 实例\n * @param id VChart 实例的 id,通过 vChart.id 获取\n * @returns\n */\n static getInstance(id: number): IVChart | undefined {\n return InstanceManager.instances.get(id);\n }\n /**\n * 根据图表 id 判断实例是否存在\n * @param id VChart 实例的 id,通过 vChart.id 获取\n * @returns\n */\n static instanceExist(id: number): boolean {\n return InstanceManager.instances.has(id);\n }\n\n static forEach(\n callbackfn: (instance: IVChart, id: number, map: Map) => void,\n excludeId: MaybeArray = [],\n thisArg?: any\n ) {\n const excludeIdList = array(excludeId);\n return InstanceManager.instances.forEach((instance: IVChart, id: number, map: Map) => {\n if (excludeIdList.includes(id)) {\n return;\n }\n callbackfn(instance, id, map);\n }, thisArg);\n }\n}\n","import { defaultThemeName, getTheme, registerTheme, removeTheme, themeExist, themes } from './builtin';\nimport type { ITheme } from './interface';\nimport { InstanceManager } from '../core/instance-manager';\nimport type { IVChart } from '../core/interface';\n\nexport class ThemeManager {\n /** 主题字典 */\n static readonly themes = themes;\n\n private static _currentThemeName: string = defaultThemeName; // 设置缺省为默认主题\n\n /**\n * 注册主题\n * @param name 主题名称\n * @param theme 主题配置\n * @returns\n */\n static registerTheme(name: string, theme: Partial) {\n registerTheme(name, theme);\n }\n\n /**\n * 获取主题\n * @param name 主题名称\n * @returns\n */\n static getTheme(name: string, transformed: boolean = false) {\n return getTheme(name, transformed);\n }\n\n /**\n * 移除主题\n * @param name 主题名称\n * @returns 是否移除成功\n */\n static removeTheme(name: string): boolean {\n return removeTheme(name);\n }\n\n /**\n * 判断主题是否存在\n * @param name 主题名称\n * @returns 是否存在\n */\n static themeExist(name: any) {\n return themeExist(name);\n }\n\n /** 获取图表默认主题(非用户配置) */\n static getDefaultTheme(): ITheme {\n return ThemeManager.themes.get(defaultThemeName);\n }\n\n /** 设置当前主题(所有实例生效) */\n static setCurrentTheme(name: string) {\n if (!ThemeManager.themeExist(name)) {\n return;\n }\n ThemeManager._currentThemeName = name;\n InstanceManager.forEach((instance: IVChart) => instance?.setCurrentTheme(name));\n }\n\n /** 获取当前主题(只能获取用户通过`setCurrentTheme`方法设置过的主题,默认值为默认主题) */\n static getCurrentTheme(): ITheme {\n return ThemeManager.getTheme(ThemeManager._currentThemeName);\n }\n\n /** 获取当前主题名称(只能获取用户通过`setCurrentTheme`方法设置过的主题,默认值为默认主题) */\n static getCurrentThemeName(): string {\n return ThemeManager._currentThemeName;\n }\n}\n","import { DataView } from '@visactor/vdataset';\nimport { ThemeManager, type ITheme } from '../../theme';\nimport { isObject, isString } from '@visactor/vutils';\n\nexport function isDataView(obj: any): obj is DataView {\n return obj instanceof DataView;\n}\n\nexport function isHTMLElement(obj: any): obj is Element {\n try {\n return obj instanceof Element;\n } catch {\n // 跨端 plan B\n const htmlElementKeys: (keyof Element)[] = [\n 'children',\n 'innerHTML',\n 'classList',\n 'setAttribute',\n 'tagName',\n 'getBoundingClientRect'\n ];\n const keys = Object.keys(obj);\n return htmlElementKeys.every(key => keys.includes(key));\n }\n}\n\nexport function getThemeObject(theme?: string | ITheme, transformed?: boolean): ITheme {\n if (isString(theme)) {\n if (ThemeManager.themeExist(theme)) {\n return ThemeManager.getTheme(theme, transformed);\n }\n return {};\n } else if (isObject(theme)) {\n return theme;\n }\n return {};\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport { cloneDeep, isObject } from '@visactor/vutils';\n\n/**\n * 深拷贝\n * @param target 目标对象\n * @param sources 来源对象\n * @returns\n */\nexport const mergeDeepImmer = function (target: Object, ...sources: Array) {\n return mergeOption(cloneDeep(target), ...sources);\n};\n\nfunction _mergeOptionDeep(target: Object, source: Object, key: string) {\n const sourceValue = source[key];\n if (sourceValue === undefined) {\n target[key] = null; // undefined 转为 null 并且也覆盖\n } else if (isObject(sourceValue)) {\n if (!isObject(target[key])) {\n target[key] = {};\n }\n for (const _key in sourceValue) {\n _mergeOptionDeep(target[key], sourceValue, _key);\n }\n } else {\n // 其余类型全部替换\n target[key] = sourceValue;\n }\n}\n\nfunction _mergeOptionBase(target: Object, source: Object) {\n if (!isObject(source)) {\n return;\n }\n if (target === source) {\n return;\n }\n // keysIn\n for (const key in source) {\n _mergeOptionDeep(target, source, key);\n }\n}\n\nfunction mergeOption(target: Object, ...sources: Array): any {\n if (!target) {\n target = {};\n }\n let sourceIndex = -1;\n const length = sources.length;\n while (++sourceIndex < length) {\n const source = sources[sourceIndex];\n _mergeOptionBase(target, source);\n }\n return target;\n}\n","import geoSimplify from 'simplify-geojson';\nimport type { FeatureCollection } from '@turf/helpers';\nimport { mergeDeepImmer } from '../../utils/js';\nimport type { Transform } from '..';\n\nexport interface ISimplifyOptions {\n tolerance?: number; // 简化容差,默认0.01\n}\n\nconst DEFAULT_SIMPLIFY_OPTIONS: ISimplifyOptions = {\n tolerance: 0.01\n};\n/**\n * 简化\n * @param data\n * @param options\n * @returns\n */\nexport const simplify: Transform = (data: FeatureCollection, options?: ISimplifyOptions): FeatureCollection => {\n const mergeOptions = mergeDeepImmer(DEFAULT_SIMPLIFY_OPTIONS, options);\n const { tolerance } = mergeOptions;\n return geoSimplify(data, tolerance);\n};\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","import dsv from \"./dsv.js\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\nexport var csvFormatRow = csv.formatRow;\nexport var csvFormatValue = csv.formatValue;\n","export var DATAVIEW_TYPE;\n\n!function(DATAVIEW_TYPE) {\n DATAVIEW_TYPE.DSV = \"dsv\", DATAVIEW_TYPE.TREE = \"tree\", DATAVIEW_TYPE.GEO = \"geo\", \n DATAVIEW_TYPE.BYTE = \"bytejson\", DATAVIEW_TYPE.HEX = \"hex\", DATAVIEW_TYPE.GRAPH = \"graph\", \n DATAVIEW_TYPE.TABLE = \"table\", DATAVIEW_TYPE.GEO_GRATICULE = \"geo-graticule\";\n}(DATAVIEW_TYPE || (DATAVIEW_TYPE = {}));\n\nexport const STATISTICS_METHODS = [ \"max\", \"mean\", \"median\", \"min\", \"mode\", \"product\", \"standardDeviation\", \"sum\", \"sumSimple\", \"variance\" ];","import dsv from \"./dsv.js\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\nexport var tsvFormatRow = tsv.formatRow;\nexport var tsvFormatValue = tsv.formatValue;\n","import { dsvFormat, csvParse, tsvParse } from 'd3-dsv';\nimport { isString } from '@visactor/vutils';\nimport { DATAVIEW_TYPE } from '../constants';\nimport type { DataView } from '../data-view';\nimport { mergeDeepImmer } from '../utils/js';\nimport type { Parser } from '.';\n\nexport interface IDsvParserOptions {\n delimiter?: string; // delimiter 必须是一个单字符\n}\n\nconst DEFAULT_DSV_PARSER_OPTIONS = {\n delimiter: ',' // delimiter参数值默认为半角逗号,即默认将被处理文件视为CSV,当delimiter='\\t'时,被处理文件就是TSV。\n};\n\n/**\n * 根据指定的 delimiter 构造一个新的 DSV(支持范式的分隔符分隔值文件,delimiter-separated values)解析以及格式化。\n * @param data\n * @param options\n * @returns\n */\nexport const dsvParser: Parser = (data: string, options: IDsvParserOptions = {}, dataView: DataView) => {\n dataView.type = DATAVIEW_TYPE.DSV;\n\n const mergeOptions = mergeDeepImmer(DEFAULT_DSV_PARSER_OPTIONS, options) as IDsvParserOptions;\n\n const { delimiter } = mergeOptions;\n if (!isString(delimiter)) {\n throw new TypeError('Invalid delimiter: must be a string!');\n }\n return dsvFormat(delimiter).parse(data);\n};\n\n/**\n * 解析指定的 CSV 字符串并返回对象数组\n * @param data\n * @returns\n */\nexport const csvParser: Parser = (data: string, options: IDsvParserOptions = {}, dataView: DataView) => {\n dataView.type = DATAVIEW_TYPE.DSV;\n return csvParse(data);\n};\n\n/**\n * 解析指定的 TSV 字符串并返回对象数组\n * @param data\n * @returns\n */\nexport const tsvParser: Parser = (data: string, options: IDsvParserOptions = {}, dataView: DataView) => {\n dataView.type = DATAVIEW_TYPE.DSV;\n return tsvParse(data);\n};\n","import type {\n IChartConstructor,\n IChartOption,\n IChart,\n IChartSpecTransformerOption,\n IChartSpecTransformer\n} from '../chart/interface';\nimport type { ISeriesConstructor, ISeriesMarkInfo, ISeriesOption, SeriesMarkNameEnum } from '../series/interface';\nimport type { IComponentConstructor } from '../component/interface';\nimport type { IMarkConstructor, IMarkOption, MarkConstructor } from '../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from '../mark/interface/type';\nimport type { IRegion, IRegionConstructor } from '../region/interface';\nimport type { IBaseModelSpecTransformer, IBaseModelSpecTransformerOption, IModelOption } from '../model/interface';\nimport type { Transform, Parser } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport { fields, filter, simplify, fold, csvParser, dsvParser, tsvParser } from '@visactor/vdataset';\nimport type { ILayoutConstructor } from '../layout/interface';\nimport type { MarkAnimationSpec } from '@visactor/vgrammar-core';\nimport type { IChartPluginConstructor } from '../plugin/chart/interface';\n\nexport class Factory {\n private static _charts: { [key: string]: IChartConstructor } = {};\n private static _series: { [key: string]: ISeriesConstructor } = {};\n private static _components: { [key: string]: { cmp: IComponentConstructor; alwaysCheck?: boolean } } = {};\n private static _marks: { [key: string]: MarkConstructor } = {};\n private static _regions: { [key: string]: IRegionConstructor } = {};\n private static _animations: { [key: string]: (params?: any, preset?: any) => MarkAnimationSpec } = {};\n private static _implements: { [key: string]: (...args: any) => void } = {};\n private static _chartPlugin: { [key: string]: IChartPluginConstructor } = {};\n\n static transforms: { [key: string]: Transform } = {\n // buildIn transforms\n simplify: simplify,\n fields: fields,\n filter: filter,\n fold: fold\n };\n static dataParser: { [key: string]: Parser } = {\n // buildIn parser\n csv: csvParser,\n dsv: dsvParser,\n tsv: tsvParser\n };\n static _layout: { [key: string]: ILayoutConstructor } = {};\n\n static registerChart(key: string, chart: IChartConstructor) {\n Factory._charts[key] = chart;\n }\n static registerSeries(key: string, series: ISeriesConstructor) {\n Factory._series[key] = series;\n }\n static registerComponent(key: string, cmp: IComponentConstructor, alwaysCheck?: boolean) {\n Factory._components[key] = { cmp, alwaysCheck };\n }\n static registerMark(key: string, mark: MarkConstructor) {\n Factory._marks[key] = mark;\n }\n static registerRegion(key: string, region: IRegionConstructor) {\n Factory._regions[key] = region;\n }\n static registerTransform(key: string, transform: Transform) {\n Factory.transforms[key] = transform;\n }\n static registerLayout(key: string, layout: ILayoutConstructor) {\n Factory._layout[key] = layout;\n }\n static registerAnimation(key: string, animation: (params?: any, preset?: any) => MarkAnimationSpec) {\n Factory._animations[key] = animation;\n }\n static registerImplement(key: string, implement: (...args: any) => void) {\n Factory._implements[key] = implement;\n }\n static registerChartPlugin(key: string, plugin: IChartPluginConstructor) {\n Factory._chartPlugin[key] = plugin;\n }\n\n static createChart(chartType: string, spec: any, options: IChartOption): IChart | null {\n if (!Factory._charts[chartType]) {\n return null;\n }\n const ChartConstructor = Factory._charts[chartType];\n return new ChartConstructor(spec, options);\n }\n\n static createChartSpecTransformer(\n chartType: string,\n option: IChartSpecTransformerOption\n ): IChartSpecTransformer | null {\n if (!Factory._charts[chartType]) {\n return null;\n }\n const ChartConstructor = Factory._charts[chartType];\n const ChartSpecTransformerConstructor = ChartConstructor.transformerConstructor;\n return new ChartSpecTransformerConstructor({\n seriesType: ChartConstructor.seriesType,\n ...option\n });\n }\n\n static createRegion(regionType: string, spec: any, options: IModelOption): IRegion | null {\n if (!Factory._regions[regionType]) {\n return null;\n }\n const RegionConstructor = Factory._regions[regionType];\n return new RegionConstructor(spec, options);\n }\n\n static createRegionSpecTransformer(\n regionType: string,\n options: IBaseModelSpecTransformerOption\n ): IBaseModelSpecTransformer | null {\n if (!Factory._regions[regionType]) {\n return null;\n }\n const RegionConstructor = Factory._regions[regionType];\n const RegionSpecTransformerConstructor = RegionConstructor.transformerConstructor;\n return new RegionSpecTransformerConstructor(options);\n }\n\n static createSeries(seriesType: string, spec: any, options: ISeriesOption) {\n if (!Factory._series[seriesType]) {\n return null;\n }\n const SeriesConstructor = Factory._series[seriesType];\n return new SeriesConstructor(spec, options);\n }\n\n static createSeriesSpecTransformer(\n seriesType: string,\n options: IBaseModelSpecTransformerOption\n ): IBaseModelSpecTransformer | null {\n if (!Factory._series[seriesType]) {\n return null;\n }\n const SeriesConstructor = Factory._series[seriesType];\n const SeriesSpecTransformerConstructor = SeriesConstructor.transformerConstructor;\n return new SeriesSpecTransformerConstructor(options);\n }\n\n static createMark(markType: string, name: string, options: IMarkOption) {\n if (!Factory._marks[markType]) {\n return null;\n }\n const MarkConstructor = Factory._marks[markType] as IMarkConstructor;\n const markInstance = new MarkConstructor(name, options);\n if (markInstance.type === MarkTypeEnum.group) {\n // group 目前关闭交互,不参与事件拾取\n markInstance.setInteractive(false);\n }\n return markInstance;\n }\n\n static getComponents() {\n return Object.values(Factory._components);\n }\n\n static getComponentInKey(name: string) {\n return Factory._components[name].cmp;\n }\n\n static getLayout() {\n return Object.values(Factory._layout);\n }\n\n static getLayoutInKey(name: string) {\n return Factory._layout[name];\n }\n\n static getSeries() {\n return Object.values(Factory._series);\n }\n\n static getSeriesInType(type: string) {\n return Factory._series[type];\n }\n\n static getRegionInType(type: string) {\n return Factory._regions[type];\n }\n\n static getAnimationInKey(key: string) {\n return Factory._animations[key];\n }\n\n static getImplementInKey(key: string) {\n return Factory._implements[key];\n }\n\n static getSeriesMarkMap(seriesType: string): Partial> {\n if (!Factory._series[seriesType]) {\n return {};\n }\n return Factory._series[seriesType].mark;\n }\n\n static getChartPlugins() {\n return Object.values(Factory._chartPlugin);\n }\n}\n","import type { BaseEventParams } from '../../interface';\nimport type { ISeries } from '../../../series/interface';\nimport type { Datum } from '../../../typings';\nimport type { AxisComponent } from '../../../component/axis/base-axis';\n\nexport enum DimensionEventEnum {\n dimensionHover = 'dimensionHover',\n dimensionClick = 'dimensionClick'\n}\n\nexport interface IDimensionInfo {\n /** 维度项索引,在连续轴上不存在 */\n index?: number;\n /** 维度项原始值,在离散轴上为维度标签,在连续轴上为数字 */\n value: string | number;\n /** 维度项所在轴 */\n axis?: AxisComponent;\n /** 维度项对应数据 */\n data: IDimensionData[];\n}\n\nexport interface IDimensionData {\n /** 图元上的原始数据(考虑到有多个图元的情况,实际为数组类型) */\n datum: Datum[];\n /** 图元所在的系列实例 */\n series: ISeries;\n}\n\nexport type DimensionEventParams = BaseEventParams & {\n action: 'enter' | 'leave' | 'move' | 'click';\n dimensionInfo: IDimensionInfo[];\n};\n","export enum ScaleEnum {\n // identity scale\n Identity = 'identity',\n\n // continuous scales\n Linear = 'linear',\n // LinearFactory = 'linearfactory',\n Log = 'log',\n Pow = 'pow',\n Sqrt = 'sqrt',\n Symlog = 'symlog',\n Time = 'time',\n // UTC = 'utc',\n\n // sequential scales\n // Sequential = 'sequential',\n // Diverging = 'diverging',\n\n // discretizing scales\n Quantile = 'quantile',\n Quantize = 'quantize',\n Threshold = 'threshold',\n\n // discrete scales\n Ordinal = 'ordinal',\n Point = 'point',\n Band = 'band'\n // BinOrdinal = 'bin-ordinal',\n}\n\nconst EnableScaleMap = {};\nObject.values(ScaleEnum).forEach(v => {\n EnableScaleMap[v] = true;\n});\n\nexport function isContinuous(type: string) {\n switch (type) {\n case ScaleEnum.Linear:\n case ScaleEnum.Log:\n case ScaleEnum.Pow:\n case ScaleEnum.Sqrt:\n case ScaleEnum.Symlog:\n case ScaleEnum.Time:\n return true;\n default:\n return false;\n }\n}\n\nexport function isValidScaleType(type: string) {\n return !!EnableScaleMap[type];\n}\n\nexport function isDiscrete(type: string) {\n switch (type) {\n case ScaleEnum.Ordinal:\n case ScaleEnum.Point:\n case ScaleEnum.Band:\n return true;\n default:\n return false;\n }\n}\n\nexport function isDiscretizing(type: string) {\n switch (type) {\n case ScaleEnum.Quantile:\n case ScaleEnum.Quantize:\n case ScaleEnum.Threshold:\n return true;\n default:\n return false;\n }\n}\nexport function supportRangeFactor(type: string) {\n switch (type) {\n case ScaleEnum.Linear:\n case ScaleEnum.Log:\n case ScaleEnum.Pow:\n case ScaleEnum.Sqrt:\n case ScaleEnum.Symlog:\n case ScaleEnum.Time:\n case ScaleEnum.Band:\n case ScaleEnum.Point:\n return true;\n default:\n return false;\n }\n}\n","import type { Transform } from '.';\n\nexport interface IFilterOptions {\n callback?: (item: any) => boolean;\n}\n\n/**\n * 数据过滤\n * @param data\n * @param options\n * @returns\n */\nexport const filter: Transform = (data: Array, options?: IFilterOptions) => {\n const { callback } = options;\n if (callback) {\n data = data.filter(callback);\n }\n return data;\n};\n","import type { Transform } from '.';\n\nexport interface IFoldOptions {\n fields: string[]; // 展开字段集\n key: string; // key字段\n value: string; // value字段\n retains?: string[]; // 保留字段集,默认为除 fields 以外的所有字段\n}\n\n/**\n *\n * @param data 数据展开\n * @param options\n * @returns\n */\nexport const fold: Transform = (data: Array, options?: IFoldOptions) => {\n const { fields, key, value, retains } = options;\n const results: any[] = [];\n for (let i = 0; i < data.length; i++) {\n fields.forEach(field => {\n const item = {};\n item[key] = field;\n item[value] = data[i][field];\n if (retains) {\n retains.forEach(retain => {\n item[retain] = data[i][retain];\n });\n } else {\n for (const prop in data[i]) {\n if (fields.indexOf(prop) === -1) {\n item[prop] = data[i][prop];\n }\n }\n }\n\n results.push(item);\n });\n }\n return results;\n};\n","/* eslint-disable max-depth */\nimport type { IChart } from '../../../../chart/interface';\nimport type { IDimensionData, IDimensionInfo } from '../interface';\nimport { isNil, array, isValid, isValidNumber } from '@visactor/vutils';\nimport type { AxisComponent } from '../../../../component/axis/base-axis';\nimport type { CoordinateType, ILayoutPoint } from '../../../../typings';\nimport { isDiscrete } from '@visactor/vscale';\nimport type { ICartesianLinearAxisSpec } from '../../../../component';\nimport type { Maybe } from '@visactor/vutils';\n\nconst isInBound = (pos: ILayoutPoint, min: ILayoutPoint, max: ILayoutPoint): boolean =>\n pos.x >= min.x && pos.x <= max.x && pos.y >= min.y && pos.y <= max.y;\n\nexport const isInRegionBound = (chart: IChart, axis: AxisComponent, pos: ILayoutPoint) => {\n const regionList = chart.getRegionsInIds(array(axis.layout.layoutBindRegionID));\n return regionList?.some(region => {\n const rect = region.getLayoutRect();\n const startPoint = region.getLayoutStartPoint();\n return isInBound(\n pos,\n { x: startPoint.x, y: startPoint.y },\n { x: rect.width + startPoint.x, y: rect.height + startPoint.y }\n );\n });\n};\n\nexport const isSameDimensionInfo = (a?: IDimensionInfo, b?: IDimensionInfo): boolean => {\n if (a === b) {\n return true;\n }\n if (isNil(a) || isNil(b)) {\n return false;\n }\n if (a.value !== b.value) {\n return false;\n }\n if (a.axis?.id !== b.axis?.id) {\n return false;\n }\n return true;\n};\n\n/** 给定维度项的值,获取对应维度数据 */\nexport const getDimensionData = (\n value: any,\n axis: AxisComponent,\n coordinate: CoordinateType,\n getDimensionField: (series: any) => string | string[]\n): IDimensionData[] => {\n const scale = axis.getScale();\n const isDiscreteAxis = isDiscrete(scale.type);\n\n const data: IDimensionData[] = [];\n const regions = axis.getRegions(); // TODO: 直接从轴里取系列\n for (const region of regions) {\n const seriesList = region.getSeries();\n for (const series of seriesList) {\n if (series.coordinate === coordinate) {\n const dimensionField = array(getDimensionField(series));\n const viewData = series.getViewData()?.latestData;\n if (dimensionField && viewData) {\n if (isDiscreteAxis) {\n data.push({\n series,\n datum: viewData.filter(\n (datum: any) => datum[dimensionField[0]]?.toString() === value?.toString() // 获取该维度项所对应的数据\n )\n });\n } else {\n // 连续轴\n if (isValid(dimensionField[1])) {\n // 直方图情况,根据范围取 datum\n data.push({\n series,\n datum: viewData.filter((datum: any) => {\n if (datum[dimensionField[0]]?.toString() === value?.toString()) {\n return true;\n }\n return (\n isValid(datum[dimensionField[0]]) &&\n isValid(datum[dimensionField[1]]) &&\n value >= datum[dimensionField[0]] &&\n value < datum[dimensionField[1]]\n );\n })\n });\n } else {\n // 散点图情况,依据轴上的配置判断\n const range = (axis.getSpec() as ICartesianLinearAxisSpec).tooltipFilterRange;\n const rangeArr = (isValidNumber(range) ? [-range, range] : range) as Maybe<[number, number]>;\n let datums: any[] = [];\n if (rangeArr) {\n // 根据范围取 datum\n viewData.forEach((datum: any) => {\n if (isValid(datum[dimensionField[0]])) {\n const delta = datum[dimensionField[0]] - value;\n if (delta >= rangeArr[0] && delta <= rangeArr[1]) {\n datums.push(datum);\n }\n }\n });\n } else {\n // 根据最近距离取 datum\n let minDelta = Infinity;\n let deltaSign = 0;\n viewData.forEach((datum: any) => {\n if (isValid(datum[dimensionField[0]])) {\n const delta = Math.abs(datum[dimensionField[0]] - value);\n const sign = Math.sign(datum[dimensionField[0]] - value);\n if (delta < minDelta) {\n minDelta = delta;\n datums = [datum];\n deltaSign = sign;\n } else if (delta === minDelta && sign === deltaSign) {\n datums.push(datum);\n }\n }\n });\n }\n data.push({\n series,\n datum: datums\n });\n }\n }\n }\n }\n }\n }\n return data;\n};\n\nexport const getAxis = (\n chart: IChart,\n filter: (cmp: T) => boolean,\n pos: ILayoutPoint\n): T[] | null => {\n const axesComponents = chart\n .getAllComponents()\n .filter(c => c.specKey === 'axes' && filter(c as T) && isInRegionBound(chart, c as T, pos)) as T[];\n if (!axesComponents.length) {\n return null;\n }\n return axesComponents;\n};\n","import { isNil } from '@visactor/vutils';\n\n/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-statistics/src/regression/ols.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\nexport function ordinaryLeastSquares(uX: number, uY: number, uXY: number, uX2: number) {\n const delta = uX2 - uX * uX;\n const slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta;\n const intercept = uY - slope * uX;\n\n return [intercept, slope];\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nexport function visitPoints(\n data: any[],\n x: (datum: any) => number,\n y: (datum: any) => number,\n callback: (x: number, y: number, index: number) => void\n) {\n let i = -1;\n let u;\n let v;\n\n data.forEach(d => {\n u = x(d);\n v = y(d);\n if (!isNil(u) && (u = +u) >= u && !isNil(v) && (v = +v) >= v) {\n callback(u, v, ++i);\n }\n });\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nexport function rSquared(\n data: any[],\n x: (datum: any) => number,\n y: (datum: any) => number,\n uY: number,\n predict: (x: number) => number\n) {\n let SSE = 0;\n let SST = 0;\n\n visitPoints(data, x, y, (dx, dy) => {\n const sse = dy - predict(dx);\n const sst = dy - uY;\n\n SSE += sse * sse;\n SST += sst * sst;\n });\n\n return 1 - SSE / SST;\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nexport function regressionLinear(\n data: any[],\n x: (datum: any) => number = datum => datum.x,\n y: (datum: any) => number = datum => datum.y\n) {\n let X = 0;\n let Y = 0;\n let XY = 0;\n let X2 = 0;\n let n = 0;\n\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n\n const coef = ordinaryLeastSquares(X, Y, XY, X2);\n const predict = (x: number) => coef[0] + coef[1] * x;\n\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n","export function ascending(a: number, b: number) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export function toNumber(a: any) {\n return Number(a);\n}\n","import { ascending } from './ascending';\nimport { quantileSorted } from './quantileSorted';\n\nexport const median = (values: number[], isSorted?: boolean) => {\n let sorted = values;\n if (isSorted !== true) {\n sorted = values.sort(ascending);\n }\n\n return quantileSorted(sorted, 0.5);\n};\n","import { toNumber } from './toNumber';\n\nexport function quantileSorted(\n values: any[],\n percent: number,\n valueof: (entry: any, index: number, arr: any[]) => number = toNumber\n) {\n const n = values.length;\n if (!n) {\n return;\n }\n if (percent <= 0 || n < 2) {\n return valueof(values[0], 0, values);\n }\n if (percent >= 1) {\n return valueof(values[n - 1], n - 1, values);\n }\n const i = (n - 1) * percent;\n const i0 = Math.floor(i);\n const value0 = valueof(values[i0], i0, values);\n const value1 = valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\nexport const NEWTON_ITERATIONS = 4;\nexport const NEWTON_MIN_SLOPE = 0.001;\nexport const SUBDIVISION_PRECISION = 0.0000001;\nexport const SUBDIVISION_MAX_ITERATIONS = 10;\nexport const pi2 = Math.PI * 2;\n\nexport type vec2 = [number, number] | Float32Array;\nexport type vec3 = [number, number, number] | Float32Array;\nexport type vec4 = [number, number, number, number] | Float32Array;\nexport type vec8 = [number, number, number, number, number, number, number, number] | Float32Array;\nexport type mat4 =\n | [\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number\n ]\n | Float32Array;\n\nexport const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\nexport const pow = Math.pow;\n\nexport function acos(x: number) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x: number) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n\n/**\n * 根据比例获直线上的点\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n * @param {number} t 指定比例\n * @return {object} 包含 x, y 的点\n */\nexport function pointAt(\n x1: number | null | undefined,\n y1: number | null | undefined,\n x2: number | null | undefined,\n y2: number | null | undefined,\n t: number\n): {\n x: undefined | number;\n y: undefined | number;\n} {\n let x: number | undefined;\n let y: number | undefined;\n if (typeof x1 === 'number' && typeof x2 === 'number') {\n x = (1 - t) * x1 + t * x2;\n }\n if (typeof y1 === 'number' && typeof y2 === 'number') {\n y = (1 - t) * y1 + t * y2;\n }\n return {\n x,\n y\n };\n}\n\nexport function lengthFromPointToLine(\n point: { x: number; y: number },\n point1: { x: number; y: number },\n point2: { x: number; y: number }\n): number {\n // 面积\n const dir1X = point2.x - point1.x;\n const dir1Y = point2.y - point1.y;\n const dir2X = point.x - point1.x;\n const dir2Y = point.y - point1.y;\n const s = Math.abs(dir1X * dir2Y - dir2X * dir1Y);\n const length = Math.sqrt(dir1X * dir1X + dir1Y * dir1Y);\n return s / length;\n}\n\nexport function crossProduct(dir1: vec2, dir2: vec2): number {\n return dir1[0] * dir2[1] - dir1[1] * dir2[0];\n}\n\nexport function crossProductPoint(dir1: { x: number; y: number }, dir2: { x: number; y: number }): number {\n return dir1.x * dir2.y - dir1.y * dir2.x;\n}\n\nexport function fuzzyEqualNumber(a: number, b: number): boolean {\n return abs(a - b) < epsilon;\n}\n\nexport function fuzzyEqualVec(a: vec2, b: vec2): boolean {\n return abs(a[0] - b[0]) + abs(a[1] - b[1]) < epsilon;\n}\n\nexport function fixPrecision(num: number, precision = 10) {\n return Math.round(num * precision) / precision;\n}\n\nexport function getDecimalPlaces(n: number): number {\n const dStr = n.toString().split(/[eE]/);\n const s = (dStr[0].split('.')[1] || '').length - (+dStr[1] || 0);\n return s > 0 ? s : 0;\n}\n\nexport function precisionAdd(a: number, b: number) {\n return fixPrecision(a + b, 10 ** Math.max(getDecimalPlaces(a), getDecimalPlaces(b)));\n}\n\nexport function precisionSub(a: number, b: number) {\n return fixPrecision(a - b, 10 ** Math.max(getDecimalPlaces(a), getDecimalPlaces(b)));\n}\n","import isNumber from '../common/isNumber';\nimport { pow, sqrt } from '../math';\n\nexport interface IPoint {\n x: number;\n y: number;\n x1?: number;\n y1?: number;\n defined?: boolean; // defined表示这个点是否存在\n context?: any; // context stores addition information for point\n\n clone: () => IPoint;\n copyFrom: (p: IPointLike) => IPoint;\n set: (x: number, y: number) => IPoint;\n add: (point: IPointLike | number) => IPoint;\n sub: (point: IPointLike | number) => IPoint;\n multi: (point: IPointLike | number) => IPoint;\n div: (point: IPointLike | number) => IPoint;\n}\n\nexport type IPointLike = Pick;\n\nexport class Point implements IPoint {\n /**\n * 面积图的下点\n */\n x: number = 0;\n y: number = 0;\n x1?: number;\n y1?: number;\n defined?: boolean;\n context?: any;\n\n constructor(x: number = 0, y: number = 0, x1?: number, y1?: number) {\n this.x = x;\n this.y = y;\n this.x1 = x1;\n this.y1 = y1;\n }\n\n clone(): Point {\n return new Point(this.x, this.y);\n }\n\n copyFrom(p: IPointLike): this {\n this.x = p.x;\n this.y = p.y;\n this.x1 = p.x1;\n this.y1 = p.y1;\n this.defined = p.defined;\n this.context = p.context;\n return this;\n }\n\n set(x: number, y: number): this {\n this.x = x;\n this.y = y;\n return this;\n }\n\n add(point: IPointLike | number): IPoint {\n if (isNumber(point)) {\n this.x += point as number;\n this.y += point as number;\n return;\n }\n this.x += (point).x;\n this.y += (point).y;\n return this;\n }\n sub(point: IPointLike | number): IPoint {\n if (isNumber(point)) {\n this.x -= point as number;\n this.y -= point as number;\n return;\n }\n this.x -= (point).x;\n this.y -= (point).y;\n return this;\n }\n multi(point: IPointLike | number): IPoint {\n throw new Error('暂不支持');\n }\n div(point: IPointLike | number): IPoint {\n throw new Error('暂不支持');\n }\n}\n\nexport class PointService {\n /* distance */\n static distancePP(p1: IPointLike, p2: IPointLike): number {\n return sqrt(pow(p1.x - p2.x, 2) + pow(p1.y - p2.y, 2));\n }\n static distanceNN(x: number, y: number, x1: number, y1: number) {\n return sqrt(pow(x - x1, 2) + pow(y - y1, 2));\n }\n static distancePN(point: IPointLike, x: number, y: number) {\n return sqrt(pow(x - point.x, 2) + pow(y - point.y, 2));\n }\n\n /* point at */\n static pointAtPP(p1: IPointLike, p2: IPointLike, t: number): IPoint {\n return new Point((p2.x - p1.x) * t + p1.x, (p2.y - p1.y) * t + p1.y);\n }\n}\n\nexport interface IPolarPoint {\n r: number;\n theta: number;\n r1?: number;\n theta1?: number;\n defined?: boolean;\n context?: any;\n\n clone: () => IPolarPoint;\n copyFrom: (p: IPolarPoint) => IPolarPoint;\n set: (x: number, y: number) => IPolarPoint;\n // TODO: support if needed\n // add: (point: IPolarPoint | number) => IPolarPoint;\n // sub: (point: IPolarPoint | number) => IPolarPoint;\n // multi: (point: IPolarPoint | number) => IPolarPoint;\n // div: (point: IPolarPoint | number) => IPolarPoint;\n}\n\nexport declare type IPolarPointLike = Pick;\n\nexport class PolarPoint implements IPolarPoint {\n r: number = 0;\n theta: number = 0;\n r1?: number;\n theta1?: number;\n defined?: boolean;\n context?: any;\n\n constructor(r: number = 0, theta: number = 0, r1?: number, theta1?: number) {\n this.r = r;\n this.theta = theta;\n this.r1 = r1;\n this.theta1 = theta1;\n }\n\n clone(): PolarPoint {\n return new PolarPoint(this.r, this.theta);\n }\n\n copyFrom(p: IPolarPointLike): this {\n this.r = p.r;\n this.theta = p.theta;\n this.r1 = p.r1;\n this.theta1 = p.theta1;\n this.defined = p.defined;\n this.context = p.context;\n return this;\n }\n\n set(r: number, theta: number): this {\n this.r = r;\n this.theta = theta;\n return this;\n }\n}\n","import type { TextAlignType, TextBaselineType } from '@visactor/vrender-core';\n\n/**\n * 角度标准化处理\n * @param angle 弧度角\n */\nexport function normalizeAngle(angle: number): number {\n while (angle < 0) {\n angle += Math.PI * 2;\n }\n while (angle >= Math.PI * 2) {\n angle -= Math.PI * 2;\n }\n return angle;\n}\n\n/**\n * 计算对应角度下的角度轴标签定位属性\n * @param angle 弧度角,需要注意是逆时针计算的\n * @returns\n */\nexport function angleLabelOrientAttribute(angle: number) {\n let align: TextAlignType = 'center';\n let baseline: TextBaselineType = 'middle';\n\n angle = normalizeAngle(angle);\n\n // left: 5/3 - 1/3; right: 2/3 - 4/3; center: 5/3 - 1/3 & 2/3 - 4/3\n if (angle >= Math.PI * (5 / 3) || angle <= Math.PI * (1 / 3)) {\n align = 'left';\n } else if (angle >= Math.PI * (2 / 3) && angle <= Math.PI * (4 / 3)) {\n align = 'right';\n } else {\n align = 'center';\n }\n\n // bottom: 7/6 - 11/6; top: 1/6 - 5/6; middle: 11/6 - 1/6 & 5/6 - 7/6\n if (angle >= Math.PI * (7 / 6) && angle <= Math.PI * (11 / 6)) {\n baseline = 'bottom';\n } else if (angle >= Math.PI * (1 / 6) && angle <= Math.PI * (5 / 6)) {\n baseline = 'top';\n } else {\n baseline = 'middle';\n }\n\n return { align, baseline };\n}\n","import type { IBoundsLike } from '@visactor/vutils';\nimport type { IPoint, IPolarPoint, Quadrant, TextAlign, TextBaseLine } from '../typings';\nimport type { Datum } from '@visactor/vgrammar-core';\nimport { isValidNumber } from './type';\nimport { regressionLinear } from '@visactor/vgrammar-util';\nimport {\n isNumberClose,\n isGreater,\n isLess,\n isValid,\n PointService,\n median as visMedian,\n maxInArray,\n minInArray\n} from '@visactor/vutils';\nimport { normalizeAngle, angleLabelOrientAttribute } from '@visactor/vutils-extension';\nexport const isClose = isNumberClose;\nexport { isGreater, isLess, normalizeAngle, angleLabelOrientAttribute };\n\n/**\n * 极坐标系 -> 直角坐标系\n * @param point\n * @returns\n */\nexport function polarToCartesian(point: IPolarPoint): IPoint {\n if (!point.radius) {\n return { x: 0, y: 0 };\n }\n return {\n x: Math.cos(point.angle) * point.radius,\n y: Math.sin(point.angle) * point.radius\n };\n}\n\n/**\n * 根据角度计算象限\n * 计算角度所在象限\n * @param angle\n * @returns\n */\nexport function computeQuadrant(angle: number): Quadrant {\n angle = normalizeAngle(angle);\n if (angle > 0 && angle <= Math.PI / 2) {\n return 2;\n } else if (angle > Math.PI / 2 && angle <= Math.PI) {\n return 3;\n } else if (angle > Math.PI && angle <= (3 * Math.PI) / 2) {\n return 4;\n }\n return 1;\n}\n\n/**\n * 将角度轴起始角度 & 终结角度标准化\n * @param start\n * @param end\n * @returns\n */\nexport function normalizeStartEndAngle(\n start: number | null,\n end: number | null\n): { startAngle: number; endAngle: number } {\n let startAngle: number = 0;\n let endAngle: number = Math.PI * 2;\n const isStartValid = isValid(start);\n const isEndValid = isValid(end);\n if (!isStartValid && !isEndValid) {\n startAngle = 0;\n endAngle = Math.PI * 2;\n } else if (!isEndValid) {\n startAngle = start as number;\n endAngle = (start as number) + Math.PI * 2;\n } else if (!isStartValid) {\n startAngle = (end as number) - Math.PI * 2;\n endAngle = end as number;\n } else {\n startAngle = start as number;\n endAngle = end as number;\n }\n\n while (endAngle <= startAngle) {\n endAngle += Math.PI * 2;\n }\n while (startAngle > Math.PI * 2) {\n startAngle -= Math.PI * 2;\n endAngle -= Math.PI * 2;\n }\n while (endAngle < 0) {\n startAngle += Math.PI * 2;\n endAngle += Math.PI * 2;\n }\n return { startAngle, endAngle };\n}\n\nexport function outOfBounds(bounds: IBoundsLike, x: number, y: number) {\n return bounds.x1 > x || bounds.x2 < x || bounds.y1 > y || bounds.y2 < y;\n}\nexport function min(data: any[], field?: string): number {\n const dataArray: any[] = [];\n data.forEach(d => {\n const value = +d[field];\n if (isValidNumber(value)) {\n dataArray.push(value);\n }\n });\n if (dataArray.length === 0) {\n return null;\n }\n return minInArray(dataArray);\n}\n\nexport function max(data: any[], field?: string): number {\n const dataArray: any[] = [];\n data.forEach(d => {\n const value = +d[field];\n if (isValidNumber(value)) {\n dataArray.push(value);\n }\n });\n if (dataArray.length === 0) {\n return null;\n }\n return maxInArray(dataArray);\n}\n\nexport function sum(data: any[], field?: string): number {\n return data.reduce((pre, _cur) => {\n const cur = field ? +_cur[field] : +_cur;\n if (isValidNumber(cur)) {\n pre += cur;\n }\n return pre;\n }, 0);\n}\n\nexport function average(data: any[], field?: string): number {\n let sum = 0;\n let count = 0;\n data.forEach((x: any) => {\n const v = field ? +x[field] : +x;\n if (isValidNumber(v)) {\n sum += v;\n count++;\n }\n });\n\n const average = sum / count;\n return average;\n}\n\nexport function variance(data: any[], field?: string): number {\n const averageNumber = average(data, field);\n\n if (data.length <= 1) {\n return 0;\n }\n\n const total = data.reduce((sum, cur) => sum + (field ? +cur[field] : +cur - averageNumber) ** 2, 0);\n const value = total / (data.length - 1);\n return value;\n}\n\nexport function standardDeviation(data: any[], field?: string): number {\n const value = Math.sqrt(variance(data, field));\n return value;\n}\n\nexport function median(data: any[], field?: string): number {\n const value = visMedian(data.map((datum: Datum) => datum[field]));\n return value;\n}\n\nexport function regression(data: any[], fieldX?: string, fieldY?: string): any[] {\n const { predict } = regressionLinear(\n data,\n datum => datum[fieldX],\n datum => datum[fieldY]\n );\n // 计算回归线起点和终点\n const x1 = min(data, fieldX);\n const x2 = max(data, fieldX);\n\n const predict1 = predict(x1);\n const predict2 = predict(x2);\n return [\n {\n [fieldX]: x1,\n [fieldY]: predict1\n },\n {\n [fieldX]: x2,\n [fieldY]: predict2\n }\n ];\n}\n\n/**\n * 计算对应角度下的半径轴标签定位属性\n * @param angle 弧度角,需要注意是逆时针计算的\n * @returns\n */\nexport function radiusLabelOrientAttribute(angle: number) {\n let align: TextAlign = 'center';\n let baseline: TextBaseLine = 'middle';\n\n angle = normalizeAngle(angle);\n\n // right: 7/6 - 11/6; left: 1/6 - 5/6; center: 11/6 - 1/6 & 5/6 - 7/6\n if (angle >= Math.PI * (7 / 6) && angle <= Math.PI * (11 / 6)) {\n align = 'right';\n } else if (angle >= Math.PI * (1 / 6) && angle <= Math.PI * (5 / 6)) {\n align = 'left';\n } else {\n align = 'center';\n }\n\n // bottom: 5/3 - 1/3; top: 2/3 - 4/3; middle: 5/3 - 1/3 & 2/3 - 4/3\n if (angle >= Math.PI * (5 / 3) || angle <= Math.PI * (1 / 3)) {\n baseline = 'bottom';\n } else if (angle >= Math.PI * (2 / 3) && angle <= Math.PI * (4 / 3)) {\n baseline = 'top';\n } else {\n baseline = 'middle';\n }\n\n return { align, baseline };\n}\n\n/** 求一个向量顺时针旋转到另一个向量的角度,带正负号 */\nexport function vectorAngle(v1: IPoint, v2: IPoint) {\n const v1Length = distance(v1);\n const v2Length = distance(v2);\n // 叉乘\n const rho = Math.asin((v1.x * v2.y - v2.x * v1.y) / v1Length / v2Length);\n // 点乘\n const theta = Math.acos((v1.x * v2.x + v1.y * v2.y) / v1Length / v2Length);\n if (rho < 0) {\n return -theta;\n }\n return theta;\n}\n\n/** 求两个点的距离 */\nexport function distance(p1: IPoint, p2: IPoint = { x: 0, y: 0 }) {\n return PointService.distancePP(p1, p2);\n}\n","import type { IChart } from '../chart/interface';\nimport type { IRegion, ISeriesFilter } from '../region/interface';\nimport type { ISeries } from '../series/interface';\nimport { isFunction } from './type';\n\nexport function eachSeries(regions: IRegion[], callback: (s: ISeries) => boolean | void, filter?: ISeriesFilter) {\n let flag = false;\n if (callback && isFunction(callback)) {\n for (const r of regions) {\n for (const s of r.getSeries(filter)) {\n flag = !!callback.call(null, s);\n if (flag) {\n return flag;\n }\n }\n }\n }\n return flag;\n}\n\nexport function getSeries(regions: IRegion[], filter?: ISeriesFilter) {\n const result: ISeries[] = [];\n for (const r of regions) {\n for (const s of r.getSeries(filter)) {\n result.push(s);\n }\n }\n return result;\n}\n\nexport const getFirstSeries = (regions: IRegion[], coordinateType?: 'cartesian' | 'polar') => {\n for (let i = 0; i < regions.length; i++) {\n const r = regions[i];\n const series = r.getSeries();\n for (let j = 0; j < series.length; j++) {\n const s = series[j];\n if (coordinateType && s && s.coordinate === coordinateType) {\n return s;\n }\n if (!coordinateType && s) {\n return s;\n }\n }\n }\n return null;\n};\n","import type { IChart } from '../../../../chart/interface';\nimport type { IDimensionInfo } from '../interface';\nimport { isDiscrete } from '@visactor/vscale';\nimport { getAxis, getDimensionData } from './common';\nimport type { IPolarSeries } from '../../../../series/interface';\nimport { isNil, maxInArray, minInArray } from '@visactor/vutils';\nimport { distance, vectorAngle } from '../../../../util/math';\nimport type { ILayoutPoint } from '../../../../typings/layout';\nimport type { PolarAxis } from '../../../../component';\nimport { getFirstSeries } from '../../../../util/model';\n\n/** 将角度标准化为 range 范围内的角度 */\nconst angleStandardize = (angle: number, range: [number, number]) => {\n const unit = Math.PI * 2;\n const min = minInArray(range);\n const max = maxInArray(range);\n if (angle < min) {\n angle += Math.ceil((min - angle) / unit) * unit;\n } else if (angle > max) {\n angle -= Math.ceil((angle - max) / unit) * unit;\n }\n return angle;\n};\n\nexport const getPolarDimensionInfo = (chart: IChart | undefined, pos: ILayoutPoint): IDimensionInfo[] | null => {\n if (!chart) {\n return null;\n }\n const series = getFirstSeries(chart.getRegionsInIndex(), 'polar');\n if (!series) {\n return null;\n }\n\n const { x, y } = pos;\n const angleAxisList = getAxis(chart, (cmp: PolarAxis) => cmp.getOrient() === 'angle', pos);\n const radiusAxisList = getAxis(chart, (cmp: PolarAxis) => cmp.getOrient() === 'radius', pos);\n const targetAxisInfo: IDimensionInfo[] = [];\n\n const getDimensionField = (series: IPolarSeries) => series.getDimensionField()[0];\n\n if (angleAxisList) {\n angleAxisList.forEach(axis => {\n const angleScale = axis.getScale();\n // 限定为离散轴\n if (angleScale && isDiscrete(angleScale.type)) {\n const angleDomain = angleScale.domain();\n const angleRange = angleScale.range();\n const center = axis.getCenter();\n const vector = {\n x: x - axis.getLayoutStartPoint().x - center.x,\n y: y - axis.getLayoutStartPoint().y - center.y\n };\n\n // 计算顺时针角度\n let angle = vectorAngle({ x: 1, y: 0 }, vector);\n angle = angleStandardize(angle, angleRange);\n\n // 计算半径\n const radius = distance(vector);\n const radiusScale = radiusAxisList[0]?.getScale(); // FIXME: 想办法获取到和当前角度轴对应的径向轴,而不是取第一个\n const radiusRange = radiusScale?.range();\n\n // 判断是否在 range 范围内\n if (\n (angle - angleRange?.[0]) * (angle - angleRange?.[1]) > 0 ||\n (radius - radiusRange?.[0]) * (radius - radiusRange?.[1]) > 0\n ) {\n return;\n }\n\n const value = axis.invert(angle);\n if (isNil(value)) {\n return;\n }\n let index: number | undefined = angleDomain.findIndex((v: any) => v?.toString() === value.toString());\n if (index < 0) {\n index = undefined;\n }\n\n const data = getDimensionData(value, axis, 'polar', getDimensionField);\n targetAxisInfo.push({ index, value, axis, data });\n }\n });\n }\n if (radiusAxisList) {\n radiusAxisList.forEach(axis => {\n const radiusScale = axis.getScale();\n const radiusRange = radiusScale?.range();\n\n // 限定为离散轴\n if (radiusScale && isDiscrete(radiusScale.type)) {\n const center = axis.getCenter();\n const vector = {\n x: x - axis.getLayoutStartPoint().x - center.x,\n y: y - axis.getLayoutStartPoint().y - center.y\n };\n\n // 计算顺时针角度\n let angle = vectorAngle({ x: 1, y: 0 }, vector);\n if (angle < -Math.PI / 2) {\n angle = Math.PI * 2 + angle;\n }\n\n // 计算半径\n const radius = distance(vector);\n const angleScale = angleAxisList[0]?.getScale(); // FIXME: 想办法获取到和当前径向轴对应的角度轴,而不是取第一个\n const angleRange = angleScale?.range();\n\n // 判断是否在 range 范围内\n if (\n (angle - angleRange?.[0]) * (angle - angleRange?.[1]) > 0 ||\n (radius - radiusRange?.[0]) * (radius - radiusRange?.[1]) > 0\n ) {\n return;\n }\n\n const value = radiusScale.invert(radius);\n if (isNil(value)) {\n return;\n }\n const domain = radiusScale.domain();\n let index: number | undefined = domain.findIndex((v: any) => v?.toString() === value.toString());\n if (index < 0) {\n index = undefined;\n }\n\n const data = getDimensionData(value, axis, 'polar', getDimensionField);\n targetAxisInfo.push({ index, value, axis, data });\n }\n });\n }\n if (!targetAxisInfo.length) {\n return null;\n }\n return targetAxisInfo;\n};\n","import type { IOrientType } from '../../../../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../../../typings/space';\nimport { isValid } from '@visactor/vutils';\nimport { isValidOrient } from '../../../../util/space';\nimport type { ICartesianAxisCommonSpec } from '../interface';\nimport { ComponentTypeEnum } from '../../../interface';\n\nexport function isXAxis(orient: IOrientType) {\n return orient === 'bottom' || orient === 'top';\n}\n\nexport function isYAxis(orient: IOrientType) {\n return orient === 'left' || orient === 'right';\n}\n\nexport function isZAxis(orient: IOrientType) {\n return orient === 'z';\n}\n\n// 自动推断轴类型,现在根据orient来判断\n// TODO:后续可以根据数据特征推断\nexport function autoAxisType(orient: IOrientType, isHorizontal: boolean) {\n if (isHorizontal) {\n return isXAxis(orient) ? 'linear' : 'band';\n }\n return isXAxis(orient) ? 'band' : 'linear';\n}\n\nexport function getOrient(spec: ICartesianAxisCommonSpec, whiteList?: string[]): IOrientType {\n return isValidOrient(spec.orient) || (whiteList && whiteList.includes(spec.orient)) ? spec.orient : 'left';\n}\n\nexport function getDirectionByOrient(orient: IOrientType) {\n return orient === 'top' || orient === 'bottom' ? Direction.horizontal : Direction.vertical;\n}\n\nexport function isOrientInSameDirection(orient1: IOrientType, orient2: IOrientType) {\n return getDirectionByOrient(orient1) === getDirectionByOrient(orient2);\n}\n\nexport function transformInverse(spec: ICartesianAxisCommonSpec, isHorizontal: boolean) {\n // 这里处理下 direction === 'horizontal' 下的 Y 轴\n // 因为 Y 轴绘制的时候默认是从下至上绘制的,但是在 direction === 'horizontal' 场景下,图表应该是按照从上至下阅读的\n // 所以这里在这种场景下坐标轴会默认 inverse 已达到效果\n let inverse = spec.inverse;\n if (isHorizontal && !isXAxis(spec.orient)) {\n inverse = isValid(spec.inverse) ? !spec.inverse : true;\n }\n return inverse;\n}\n\nexport function getCartesianAxisInfo(spec: ICartesianAxisCommonSpec, isHorizontal?: boolean) {\n const axisType = spec.type ?? autoAxisType(spec.orient, isHorizontal);\n const componentName = `${ComponentTypeEnum.cartesianAxis}-${axisType}`;\n return { axisType, componentName };\n}\n","import type { IChart } from '../../../../chart/interface';\nimport type { IDimensionInfo } from '../interface';\nimport { isDiscrete } from '@visactor/vscale';\nimport { getDimensionData, getAxis } from './common';\nimport type { CartesianAxis } from '../../../../component/axis/cartesian';\nimport type { ICartesianSeries } from '../../../../series/interface';\nimport { isNil } from '@visactor/vutils';\nimport { isXAxis, isYAxis } from '../../../../component/axis/cartesian/util/common';\nimport { Direction } from '../../../../typings/space';\nimport type { ILayoutPoint } from '../../../../typings/layout';\nimport { getFirstSeries } from '../../../../util/model';\n\nconst discreteXAxisGetDimensionField = (series: ICartesianSeries) => series.fieldX[0];\nconst discreteYAxisGetDimensionField = (series: ICartesianSeries) => series.fieldY[0];\nconst continuousXAxisGetDimensionField = (series: ICartesianSeries) => [series.fieldX[0], series.fieldX2];\nconst continuousYAxisGetDimensionField = (series: ICartesianSeries) => [series.fieldY[0], series.fieldY2];\n\nexport const getCartesianDimensionInfo = (chart: IChart | undefined, pos: ILayoutPoint): IDimensionInfo[] | null => {\n if (!chart) {\n return null;\n }\n const series = getFirstSeries(chart.getRegionsInIndex(), 'cartesian');\n if (!series) {\n return null;\n }\n\n const { x, y } = pos;\n const xAxisList = getAxis(chart, (cmp: CartesianAxis) => isXAxis(cmp.getOrient()), pos) ?? [];\n const yAxisList = getAxis(chart, (cmp: CartesianAxis) => isYAxis(cmp.getOrient()), pos) ?? [];\n\n const bandAxisSet: Set = new Set();\n const linearAxisSet: Set = new Set();\n [xAxisList, yAxisList].forEach(axisList =>\n axisList.forEach(axis => {\n const isDiscreteAxis = isDiscrete(axis.getScale().type);\n if (isDiscreteAxis) {\n bandAxisSet.add(axis);\n } else {\n linearAxisSet.add(axis);\n }\n })\n );\n\n const targetAxisInfo: IDimensionInfo[] = [];\n\n const addAxisDimensionInfo = (orient: 'x' | 'y', isDiscrete: boolean) => {\n (orient === 'x' ? xAxisList : yAxisList).forEach(axis => {\n if ((isDiscrete ? bandAxisSet : linearAxisSet).has(axis)) {\n const info = getDimensionInfoByPosition(\n axis,\n orient === 'x' ? x : y,\n orient,\n orient === 'x'\n ? isDiscrete\n ? discreteXAxisGetDimensionField\n : continuousXAxisGetDimensionField\n : isDiscrete\n ? discreteYAxisGetDimensionField\n : continuousYAxisGetDimensionField\n );\n info && targetAxisInfo.push(info);\n }\n });\n };\n\n // 优先筛选 band 轴,其次按照 direction 判断\n if (chart.getSpec().direction === Direction.horizontal) {\n addAxisDimensionInfo('y', bandAxisSet.size > 0);\n if (targetAxisInfo.length === 0) {\n addAxisDimensionInfo('x', bandAxisSet.size > 0);\n }\n } else {\n addAxisDimensionInfo('x', bandAxisSet.size > 0);\n if (targetAxisInfo.length === 0) {\n addAxisDimensionInfo('y', bandAxisSet.size > 0);\n }\n }\n\n if (!targetAxisInfo.length) {\n return null;\n }\n return targetAxisInfo;\n};\n\nexport const getDimensionInfoByPosition = (\n axis: CartesianAxis,\n posValue: number,\n posKey: 'x' | 'y',\n getDimensionField: (series: ICartesianSeries) => string | string[]\n): IDimensionInfo | null => {\n const scale = axis.getScale();\n const scalePos = posValue - axis.getLayoutStartPoint()[posKey];\n // 判断是否在 range 范围内\n if ((scalePos - scale.range()[0]) * (scalePos - scale.range()[1]) > 0) {\n return null;\n }\n\n const value = scale.invert(scalePos);\n return getDimensionInfoByValue(axis, value, getDimensionField);\n};\n\nexport const getDimensionInfoByValue = (\n axis: CartesianAxis,\n value: any,\n getDimensionField?: (series: ICartesianSeries) => string | string[]\n): IDimensionInfo | null => {\n const scale = axis.getScale();\n\n if (isNil(value)) {\n return null;\n }\n const domain = scale.domain();\n let index: number | undefined = domain.findIndex((v: any) => v?.toString() === value.toString());\n if (index < 0) {\n index = undefined;\n }\n\n const data = getDimensionData(\n value,\n axis,\n 'cartesian',\n getDimensionField ?? (isXAxis(axis.getOrient()) ? discreteXAxisGetDimensionField : discreteYAxisGetDimensionField)\n );\n return { index, value, axis, data };\n};\n","import { error } from '../../../util/debug';\nimport type { IAxis } from '../../../component/axis/interface';\nimport type { RenderMode } from '../../../typings/spec/common';\nimport type {\n BaseEventParams,\n EventHandler,\n EventParamsDefinition,\n IComposedEvent,\n IEventDispatcher\n} from '../../interface';\nimport type { IChart } from '../../../chart/interface';\nimport type { IDimensionInfo } from './interface';\nimport { getPolarDimensionInfo } from './util/polar';\nimport { getCartesianDimensionInfo, getDimensionInfoByValue } from './util/cartesian';\nimport type { Maybe } from '../../../typings';\nimport { isDiscrete } from '@visactor/vscale';\n\nexport class DimensionEvent implements IComposedEvent {\n protected _eventDispatcher: IEventDispatcher;\n protected _mode: RenderMode;\n\n protected _callback!: (params: BaseEventParams) => void;\n\n protected _chart: Maybe;\n\n constructor(eventDispatcher: IEventDispatcher, mode: RenderMode) {\n this._eventDispatcher = eventDispatcher;\n this._mode = mode;\n }\n\n private get chart() {\n if (!this._chart) {\n this._chart = this._eventDispatcher.globalInstance.getChart?.();\n }\n return this._chart;\n }\n\n register(eType: Evt, handler: EventHandler): void {\n (this.chart?.getOption().onError ?? error)('Method not implemented.');\n }\n unregister(): void {\n (this.chart?.getOption().onError ?? error)('Method not implemented.');\n }\n\n protected getTargetDimensionInfo(x: number, y: number): IDimensionInfo[] | null {\n const cartesianInfo = getCartesianDimensionInfo(this.chart, { x, y }) ?? [];\n const polarInfo = getPolarDimensionInfo(this.chart, { x, y }) ?? [];\n\n const result = [].concat(cartesianInfo, polarInfo);\n if (result.length === 0) {\n return null;\n }\n\n return result;\n }\n\n dispatch(v: unknown, opt: { filter?: (axis: IAxis) => boolean }) {\n // get all enable axis\n const axis = this.chart?.getAllComponents().filter(c => {\n if (c.specKey !== 'axes') {\n return false;\n }\n const scale = (c).getScale();\n if (!isDiscrete(scale.type)) {\n return false;\n }\n if (opt?.filter) {\n return opt.filter(c);\n }\n return true;\n }) as IAxis[];\n const dimensionInfo: IDimensionInfo[] = [];\n axis.forEach(a => {\n const info = getDimensionInfoByValue(a as unknown as any, v);\n if (info) {\n dimensionInfo.push(info);\n }\n });\n this._callback.call(null, {\n action: 'enter',\n dimensionInfo\n } as unknown as BaseEventParams);\n return dimensionInfo;\n }\n}\n","export { HOOK_EVENT as VGRAMMAR_HOOK_EVENT } from '@visactor/vgrammar-core';\n\nexport const BASE_EVENTS = [\n 'pointerdown',\n 'pointerup',\n 'pointerupoutside',\n 'pointertap', // pointerEvent 下的 click 事件\n 'pointerover',\n 'pointermove',\n 'pointerenter',\n 'pointerleave',\n 'pointerout',\n 'mousedown',\n 'mouseup',\n 'mouseupoutside',\n 'rightdown',\n 'rightup',\n 'rightupoutside',\n 'click',\n 'dblclick',\n 'mousemove',\n 'mouseover',\n 'mouseout',\n 'mouseenter',\n 'mouseleave',\n 'wheel',\n 'touchstart',\n 'touchend',\n 'touchendoutside',\n 'touchmove',\n 'touchcancel',\n 'tap',\n 'dragstart',\n 'drag',\n 'dragenter',\n 'dragleave',\n 'dragover',\n 'dragend',\n 'drop',\n // 手势事件\n 'pan',\n 'panstart',\n 'panend',\n 'press',\n 'pressup',\n 'pressend',\n 'pinch',\n 'pinchstart',\n 'pinchend',\n 'swipe'\n];\n\nexport enum ChartEvent {\n initialized = 'initialized', // 图表实例初始化完成\n rendered = 'rendered', // 图表渲染方法被调用时触发,表明图表已经执行过渲染逻辑,只会触发一次\n renderFinished = 'renderFinished', // 每次画布渲染完成触发的事件,不包含动画结束\n animationFinished = 'animationFinished', // 图表动画结束时触发的事件\n // region\n regionSeriesDataFilterOver = 'regionSeriesDataFilterOver',\n // series start\n // series.liftCircle\n afterInitData = 'afterInitData',\n afterInitEvent = 'afterInitEvent',\n afterInitMark = 'afterInitMark',\n // series.data\n rawDataUpdate = 'rawDataUpdate',\n viewDataFilterOver = 'viewDataFilterOver',\n viewDataUpdate = 'viewDataUpdate',\n viewDataStatisticsUpdate = 'viewDataStatisticsUpdate',\n // dot series\n markDeltaYUpdate = 'markDeltaYUpdate',\n // pie series\n viewDataLabelUpdate = 'viewDataLabelUpdate',\n /** series end */\n // scale\n scaleDomainUpdate = 'scaleDomainUpdate',\n scaleUpdate = 'scaleUpdate',\n // datazoom\n dataZoomChange = 'dataZoomChange',\n // Hierarchy\n drill = 'drill',\n layoutStart = 'layoutStart',\n layoutEnd = 'layoutEnd',\n layoutRectUpdate = 'layoutRectUpdate',\n\n // player\n playerPlay = 'playerPlay',\n playerPause = 'playerPause',\n playerEnd = 'playerEnd',\n playerChange = 'playerChange',\n playerForward = 'playerForward',\n playerBackward = 'playerBackward',\n // scrollBar\n scrollBarChange = 'scrollBarChange',\n // brush\n brushStart = 'brushStart',\n brushChange = 'brushChange',\n brushEnd = 'brushEnd',\n brushClear = 'brushClear',\n // legend\n legendSelectedDataChange = 'legendSelectedDataChange',\n legendFilter = 'legendFilter',\n legendItemClick = 'legendItemClick',\n legendItemHover = 'legendItemHover',\n legendItemUnHover = 'legendItemUnHover',\n // tooltip\n tooltipShow = 'tooltipShow',\n tooltipHide = 'tooltipHide',\n tooltipRelease = 'tooltipRelease',\n // resize\n afterResize = 'afterResize',\n afterRender = 'afterRender',\n // layout\n afterLayout = 'afterLayout'\n}\n\nexport enum Event_Source_Type {\n chart = 'chart',\n window = 'window',\n canvas = 'canvas'\n}\n\nexport enum Event_Bubble_Level {\n vchart = 'vchart',\n chart = 'chart',\n model = 'model',\n mark = 'mark'\n}\n","import { DimensionHoverEvent, DimensionEventEnum, DimensionClickEvent } from './dimension';\n\nexport * from './dimension';\n\nexport const ComposedEventMapper = {\n [DimensionEventEnum.dimensionHover]: DimensionHoverEvent,\n [DimensionEventEnum.dimensionClick]: DimensionClickEvent\n};\n","import { isMobileLikeMode } from '../../../util/env';\nimport type { BaseEventParams, EventHandler, EventParamsDefinition, EventType } from '../../interface';\nimport { DimensionEvent } from './base';\nimport { isSameDimensionInfo } from './util/common';\nimport { Event_Source_Type } from '../../../constant';\nimport type { IDimensionInfo } from './interface';\n\nexport class DimensionHoverEvent extends DimensionEvent {\n private _cacheDimensionInfo: IDimensionInfo[] | null = null;\n\n register(eType: Evt, handler: EventHandler) {\n this._callback = handler.callback;\n\n this._eventDispatcher.register<'pointermove'>('pointermove', {\n query: { ...handler.query, source: Event_Source_Type.chart },\n callback: this.onMouseMove\n });\n\n this._eventDispatcher.register<'pointerout'>('pointerout', {\n query: { ...handler.query, source: Event_Source_Type.canvas },\n callback: this.onMouseOut\n });\n\n if (isMobileLikeMode(this._mode)) {\n // 移动端点按也触发 hover\n this._eventDispatcher.register<'pointerdown'>('pointerdown', {\n query: { ...handler.query, source: Event_Source_Type.chart },\n callback: this.onMouseMove\n });\n }\n }\n\n unregister() {\n this._eventDispatcher.unregister('pointermove', {\n query: null,\n callback: this.onMouseMove\n });\n\n if (isMobileLikeMode(this._mode)) {\n // 移动端点按也出发 hover\n this._eventDispatcher.unregister('pointerdown', {\n query: null,\n callback: this.onMouseMove\n });\n }\n }\n\n private onMouseMove = (params: BaseEventParams) => {\n if (!params) {\n return;\n }\n const x = (params.event as any).viewX;\n const y = (params.event as any).viewY;\n const targetDimensionInfo = this.getTargetDimensionInfo(x, y);\n if (targetDimensionInfo === null && this._cacheDimensionInfo !== null) {\n // 鼠标移出某维度\n this._callback.call(null, {\n ...params,\n action: 'leave',\n dimensionInfo: this._cacheDimensionInfo.slice()\n });\n this._cacheDimensionInfo = targetDimensionInfo;\n } else if (\n targetDimensionInfo !== null &&\n (this._cacheDimensionInfo === null ||\n targetDimensionInfo.length !== this._cacheDimensionInfo.length ||\n targetDimensionInfo.some((info, i) => !isSameDimensionInfo(info, this._cacheDimensionInfo![i])))\n ) {\n // 鼠标移入某维度\n this._callback.call(null, {\n ...params,\n action: 'enter',\n dimensionInfo: targetDimensionInfo.slice()\n });\n this._cacheDimensionInfo = targetDimensionInfo;\n } else if (targetDimensionInfo !== null) {\n // 鼠标在某维度上滑动\n this._callback.call(null, {\n ...params,\n action: 'move',\n dimensionInfo: targetDimensionInfo.slice()\n });\n }\n };\n\n private onMouseOut = (params: BaseEventParams) => {\n if (!params) {\n return;\n }\n // 鼠标移出某维度\n this._callback.call(null, {\n ...params,\n action: 'leave',\n dimensionInfo: this._cacheDimensionInfo ? this._cacheDimensionInfo.slice() : []\n });\n this._cacheDimensionInfo = null;\n };\n}\n","import { Event_Source_Type } from '../../../constant';\nimport type { BaseEventParams, EventHandler, EventParamsDefinition, EventType } from '../../interface';\nimport { DimensionEvent } from './base';\n\nexport class DimensionClickEvent extends DimensionEvent {\n register(eType: Evt, handler: EventHandler) {\n this._callback = handler.callback;\n\n this._eventDispatcher.register<'pointertap'>('pointertap', {\n query: { ...handler.query, source: Event_Source_Type.chart },\n callback: this.onClick\n });\n }\n\n unregister() {\n this._eventDispatcher.unregister('pointertap', {\n query: null,\n callback: this.onClick\n });\n }\n\n private onClick = (params: BaseEventParams) => {\n if (!params) {\n return;\n }\n const x = (params.event as any).viewX;\n const y = (params.event as any).viewY;\n const targetDimensionInfo = this.getTargetDimensionInfo(x, y);\n if (!targetDimensionInfo) {\n return;\n }\n this._callback.call(null, {\n ...params,\n action: 'click',\n dimensionInfo: targetDimensionInfo.slice()\n });\n };\n}\n","/*eslint no-dupe-class-members: \"off\"*/\n\nimport type { RenderMode } from '../typings/spec/common';\nimport { ComposedEventMapper } from './events';\nimport type {\n EventType,\n EventQuery,\n EventCallback,\n EventParamsDefinition,\n IEvent,\n IEventDispatcher,\n IComposedEvent,\n EventParams,\n EventHandler,\n EventBubbleLevel\n} from './interface';\n\nexport class Event implements IEvent {\n private _eventDispatcher: IEventDispatcher;\n private _mode: RenderMode;\n\n private _composedEventMap: Map, { eventType: EventType; event: IComposedEvent }> =\n new Map();\n getComposedEventMap() {\n return this._composedEventMap;\n }\n\n constructor(eventDispatcher: IEventDispatcher, mode: RenderMode) {\n this._eventDispatcher = eventDispatcher;\n this._mode = mode;\n }\n\n on(eType: Evt, callback: EventCallback): this;\n on(eType: Evt, query: EventQuery, callback: EventCallback): this;\n on(\n eType: Evt,\n query: EventQuery | EventCallback,\n callback?: EventCallback\n ): this {\n const handler =\n typeof query === 'function'\n ? { query: null, callback: query }\n : {\n query,\n callback: callback as EventCallback\n };\n\n if (ComposedEventMapper[eType as string]) {\n const composedEvent = new ComposedEventMapper[eType as string](\n this._eventDispatcher,\n this._mode\n ) as IComposedEvent;\n composedEvent.register(eType, handler);\n this._composedEventMap.set(callback as EventCallback, {\n eventType: eType,\n event: composedEvent\n });\n } else {\n this._eventDispatcher.register(eType, handler);\n }\n\n return this;\n }\n\n off(eType: Evt, callback?: EventCallback): this;\n off(eType: Evt, query: EventQuery, callback: EventCallback): this;\n off(\n eType: Evt,\n query?: EventQuery | EventCallback,\n cb?: EventCallback\n ): this {\n const callback = (cb ?? query) as EventCallback;\n if (ComposedEventMapper[eType as string]) {\n if (callback) {\n this._composedEventMap.get(callback)?.event.unregister();\n this._composedEventMap.delete(callback);\n } else {\n for (const entry of this._composedEventMap.entries()) {\n if (entry[1].eventType === eType) {\n this._composedEventMap.get(entry[0])?.event.unregister();\n this._composedEventMap.delete(entry[0]);\n }\n }\n }\n } else {\n if (callback) {\n const handler: EventHandler = {\n callback,\n query: null,\n // 卸载事件时无需处理 source 以外的参数\n filter: {\n nodeName: null,\n type: eType,\n level: null,\n source: (query as EventQuery).source,\n markName: null,\n filter: null,\n userId: null\n }\n };\n this._eventDispatcher.unregister(eType, handler);\n } else {\n this._eventDispatcher.unregister(eType);\n }\n }\n return this;\n }\n\n emit(eType: Evt, params: EventParamsDefinition[Evt], level?: EventBubbleLevel): this {\n this._eventDispatcher.dispatch(eType, params, level);\n return this;\n }\n\n release(): void {\n this._eventDispatcher.release();\n this._composedEventMap.clear();\n }\n}\n","import { Event_Bubble_Level } from '../constant';\nimport type { EventCallback, EventHandler, EventParams, EventBubbleLevel } from './interface';\n\nexport type BubbleNode = {\n handler: EventHandler;\n level: EventBubbleLevel;\n};\n\nexport class Bubble {\n private _map: Map, BubbleNode> = new Map();\n private _levelNodes: Map = new Map();\n\n constructor() {\n this._levelNodes.set(Event_Bubble_Level.vchart, []);\n this._levelNodes.set(Event_Bubble_Level.chart, []);\n this._levelNodes.set(Event_Bubble_Level.model, []);\n this._levelNodes.set(Event_Bubble_Level.mark, []);\n }\n\n addHandler(handler: EventHandler, level: EventBubbleLevel): this {\n const node: BubbleNode = { level, handler };\n this._levelNodes.get(level)?.push(node);\n this._map.set(handler.callback, node);\n return this;\n }\n\n removeHandler(handler: EventHandler): this {\n const node = this._map.get(handler.callback);\n if (!node) {\n return this;\n }\n this._map.delete(handler.callback);\n const nodes = this._levelNodes.get(node.level);\n // 由于顶层 API 封装不是 handler 形式,因此通过 callback 唯一判断\n const index = nodes?.findIndex(n => n.handler.callback === handler.callback);\n index !== undefined && index >= 0 && nodes?.splice(index, 1);\n return this;\n }\n\n getHandlers(level: EventBubbleLevel): EventHandler[] {\n return this._levelNodes.get(level)?.map(node => node.handler) || [];\n }\n\n getCount() {\n return this._map.size;\n }\n\n release() {\n this._map.clear();\n this._levelNodes.clear();\n }\n}\n","import type { Dict } from '../type';\nimport isString from './isString';\n\nconst get = (obj: Dict, path: string | string[], defaultValue?: any): any => {\n const paths = isString(path) ? (path as string).split('.') : path;\n\n for (let p = 0; p < paths.length; p++) {\n obj = obj ? obj[paths[p]] : undefined;\n }\n return obj === undefined ? defaultValue : obj;\n};\n\nexport default get;\n","/**\n * @see https://github.com/lodash/lodash/blob/master/throttle.js\n */\nimport debounce from './debounce';\nimport isObject from './isObject';\n\nfunction throttle(\n func: (...args: T[]) => S,\n wait: number,\n options?: { leading?: boolean; trailing?: boolean }\n): (...args: T[]) => S {\n let leading = true;\n let trailing = true;\n\n if (typeof func !== 'function') {\n throw new TypeError('Expected a function');\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n leading,\n trailing,\n maxWait: wait\n });\n}\n\nexport default throttle;\n","/**\n * @file\n * Don't import any type, this may lead to CIRCULAR_DEPENDENCY\n */\n\nexport enum BuiltInEncodeNames {\n enter = 'enter',\n update = 'update',\n exit = 'exit',\n group = 'group'\n}\n\n/**\n * state of diff\n */\nexport enum DiffState {\n enter = 'enter',\n update = 'update',\n exit = 'exit',\n unChange = 'unChange'\n}\n/**\n * mark类型\n */\nexport enum GrammarMarkType {\n // basic mark\n arc = 'arc',\n arc3d = 'arc3d',\n area = 'area',\n image = 'image',\n line = 'line',\n path = 'path',\n rect = 'rect',\n rect3d = 'rect3d',\n rule = 'rule',\n shape = 'shape',\n symbol = 'symbol',\n text = 'text',\n richtext = 'richtext',\n polygon = 'polygon',\n pyramid3d = 'pyramid3d',\n circle = 'circle',\n\n // grammer mark\n cell = 'cell',\n interval = 'interval',\n\n // group mark\n group = 'group',\n\n // glyph mark\n glyph = 'glyph',\n\n // component mark\n component = 'component',\n\n // large mark\n largeRects = 'largeRects',\n largeSymbols = 'largeSymbols'\n}\n\n/**\n * built-in component type\n */\nexport enum ComponentEnum {\n axis = 'axis',\n grid = 'grid',\n legend = 'legend',\n slider = 'slider',\n label = 'label',\n datazoom = 'datazoom',\n player = 'player',\n title = 'title',\n scrollbar = 'scrollbar'\n}\n\nexport enum DataFilterRank {\n player = 1,\n rollUp = 2,\n drillDown = 3,\n slider = 4,\n datazoom = 5,\n legend = 6,\n scrollbar = 7,\n brush = 8,\n normal = 9\n}\n\nexport enum AxisEnum {\n lineAxis = 'lineAxis',\n circleAxis = 'circleAxis'\n}\n\nexport enum GridEnum {\n lineAxisGrid = 'lineAxisGrid',\n circleAxisGrid = 'circleAxisGrid'\n}\n\nexport enum LegendEnum {\n discreteLegend = 'discreteLegend',\n colorLegend = 'colorLegend',\n sizeLegend = 'sizeLegend'\n}\n\nexport enum CrosshairEnum {\n lineCrosshair = 'lineCrosshair',\n rectCrosshair = 'rectCrosshair',\n sectorCrosshair = 'sectorCrosshair',\n circleCrosshair = 'circleCrosshair',\n polygonCrosshair = 'polygonCrosshair',\n ringCrosshair = 'ringCrosshair'\n}\n\nexport enum LabelEnum {\n symbolLabel = 'symbolLabel',\n rectLabel = 'rectLabel',\n lineLabel = 'lineLabel',\n dataLabel = 'dataLabel'\n}\n\nexport enum PlayerEnum {\n continuousPlayer = 'continuousPlayer',\n discretePlayer = 'discretePlayer'\n}\n\n/** 布局阶段 */\nexport enum LayoutState {\n before = 'before',\n layouting = 'layouting',\n reevaluate = 'reevaluate',\n after = 'after'\n}\n\nexport enum HOOK_EVENT {\n BEFORE_EVALUATE_DATA = 'beforeEvaluateData',\n AFTER_EVALUATE_DATA = 'afterEvaluateData',\n\n BEFORE_EVALUATE_SCALE = 'beforeEvaluateScale',\n AFTER_EVALUATE_SCALE = 'afterEvaluateScale',\n\n BEFORE_PARSE_VIEW = 'beforeParseView',\n AFTER_PARSE_VIEW = 'afterParseView',\n\n BEFORE_TRANSFORM = 'beforeTransform',\n AFTER_TRANSFORM = 'afterTransform',\n\n BEFORE_CREATE_VRENDER_STAGE = 'beforeCreateVRenderStage',\n AFTER_CREATE_VRENDER_STAGE = 'afterCreateVRenderStage',\n\n BEFORE_CREATE_VRENDER_LAYER = 'beforeCreateVRenderLayer',\n AFTER_CREATE_VRENDER_LAYER = 'afterCreateVRenderLayer',\n\n BEFORE_STAGE_RESIZE = 'beforeStageResize',\n AFTER_STAGE_RESIZE = 'afterStageResize',\n\n BEFORE_VRENDER_DRAW = 'beforeVRenderDraw',\n AFTER_VRENDER_DRAW = 'afterVRenderDraw',\n\n BEFORE_MARK_JOIN = 'beforeMarkJoin',\n AFTER_MARK_JOIN = 'afterMarkJoin',\n BEFORE_MARK_UPDATE = 'beforeMarkUpdate',\n AFTER_MARK_UPDATE = 'afterMarkUpdate',\n BEFORE_MARK_STATE = 'beforeMarkState',\n AFTER_MARK_STATE = 'afterMarkState',\n BEFORE_MARK_ENCODE = 'beforeMarkEncode',\n AFTER_MARK_ENCODE = 'afterMarkEncode',\n\n BEFORE_DO_LAYOUT = 'beforeDoLayout',\n AFTER_DO_LAYOUT = 'afterDoLayout',\n\n BEFORE_MARK_LAYOUT_END = 'beforeMarkLayoutEnd',\n AFTER_MARK_LAYOUT_END = 'afterMarkLayoutEnd',\n\n BEFORE_DO_RENDER = 'beforeDoRender',\n AFTER_DO_RENDER = 'afterDoRender',\n\n BEFORE_MARK_RENDER_END = 'beforeMarkRenderEnd',\n AFTER_MARK_RENDER_END = 'afterMarkRenderEnd',\n\n BEFORE_CREATE_VRENDER_MARK = 'beforeCreateVRenderMark',\n AFTER_CREATE_VRENDER_MARK = 'afterCreateVRenderMark',\n\n BEFORE_ADD_VRENDER_MARK = 'beforeAddVRenderMark',\n AFTER_ADD_VRENDER_MARK = 'afterAddVRenderMark',\n\n AFTER_VRENDER_NEXT_RENDER = 'afterVRenderNextRender',\n\n BEFORE_ELEMENT_UPDATE_DATA = 'beforeElementUpdateData',\n AFTER_ELEMENT_UPDATE_DATA = 'afterElementUpdateData',\n\n BEFORE_ELEMENT_STATE = 'beforeElementState',\n AFTER_ELEMENT_STATE = 'afterElementState',\n\n BEFORE_ELEMENT_ENCODE = 'beforeElementEncode',\n AFTER_ELEMENT_ENCODE = 'afterElementEncode',\n\n ANIMATION_START = 'animationStart',\n ANIMATION_END = 'animationEnd',\n\n ELEMENT_ANIMATION_START = 'elementAnimationStart',\n ELEMENT_ANIMATION_END = 'elementAnimationEnd',\n\n ALL_ANIMATION_START = 'allAnimationStart',\n ALL_ANIMATION_END = 'allAnimationEnd'\n}\n\nexport enum GrammarTypeEnum {\n signal = 'signal',\n data = 'data',\n scale = 'scale',\n coordinate = 'coordinate',\n mark = 'mark'\n}\n\nexport enum InteractionStateEnum {\n active = 'active',\n selected = 'selected',\n highlight = 'highlight',\n blur = 'blur'\n}\n","import { Bubble } from \"./bubble\";\n\nimport { isValid, debounce, throttle, get, isFunction } from \"@visactor/vutils\";\n\nimport { BASE_EVENTS, ChartEvent, Event_Bubble_Level, Event_Source_Type, VGRAMMAR_HOOK_EVENT } from \"../constant/event\";\n\nconst componentTypeMap = {\n cartesianAxis: \"axis\",\n \"cartesianAxis-band\": \"axis\",\n \"cartesianAxis-linear\": \"axis\",\n \"cartesianAxis-time\": \"axis\",\n polarAxis: \"axis\",\n \"polarAxis-band\": \"axis\",\n \"polarAxis-linear\": \"axis\",\n discreteLegend: \"legend\",\n continuousLegend: \"legend\",\n colorLegend: \"legend\",\n sizeLegend: \"legend\",\n label: \"label\"\n};\n\nexport class EventDispatcher {\n constructor(vchart, compiler) {\n this._viewBubbles = new Map, this._windowBubbles = new Map, this._canvasBubbles = new Map, \n this._viewListeners = new Map, this._windowListeners = new Map, this._canvasListeners = new Map, \n this.globalInstance = vchart, this._compiler = compiler;\n }\n register(eType, handler) {\n var _a, _b, _c, _d;\n this._parseQuery(handler);\n const bubbles = this.getEventBubble((null === (_a = handler.filter) || void 0 === _a ? void 0 : _a.source) || Event_Source_Type.chart), listeners = this.getEventListeners((null === (_b = handler.filter) || void 0 === _b ? void 0 : _b.source) || Event_Source_Type.chart);\n bubbles.get(eType) || bubbles.set(eType, new Bubble);\n if (bubbles.get(eType).addHandler(handler, null === (_c = handler.filter) || void 0 === _c ? void 0 : _c.level), \n this._isValidEvent(eType) && !listeners.has(eType)) {\n const callback = this._onDelegate.bind(this);\n this._compiler.addEventListener(null === (_d = handler.filter) || void 0 === _d ? void 0 : _d.source, eType, callback), \n listeners.set(eType, callback);\n }\n return this;\n }\n unregister(eType, handler) {\n var _a, _b, _c, _d;\n let clean = !1;\n const bubbles = this.getEventBubble((null === (_a = null == handler ? void 0 : handler.filter) || void 0 === _a ? void 0 : _a.source) || Event_Source_Type.chart), listeners = this.getEventListeners((null === (_b = null == handler ? void 0 : handler.filter) || void 0 === _b ? void 0 : _b.source) || Event_Source_Type.chart);\n if (handler) {\n const bubble = bubbles.get(eType);\n null == bubble || bubble.removeHandler(handler), 0 === (null == bubble ? void 0 : bubble.getCount()) && (null == bubble || bubble.release(), \n bubbles.delete(eType), clean = !0), (null === (_c = null == handler ? void 0 : handler.wrappedCallback) || void 0 === _c ? void 0 : _c.cancel) && handler.wrappedCallback.cancel();\n } else {\n const bubble = bubbles.get(eType);\n null == bubble || bubble.release(), bubbles.delete(eType), clean = !0;\n }\n if (clean && this._isValidEvent(eType)) {\n const callback = listeners.get(eType);\n this._compiler.removeEventListener((null === (_d = null == handler ? void 0 : handler.filter) || void 0 === _d ? void 0 : _d.source) || Event_Source_Type.chart, eType, callback), \n listeners.delete(eType);\n }\n return this;\n }\n dispatch(eType, params, level) {\n const bubble = this.getEventBubble(params.source || Event_Source_Type.chart).get(eType);\n if (!bubble) return this;\n let stopBubble = !1;\n if (level) {\n const handlers = bubble.getHandlers(level);\n stopBubble = this._invoke(handlers, eType, params);\n } else {\n const handlers = bubble.getHandlers(Event_Bubble_Level.mark);\n if (stopBubble = this._invoke(handlers, eType, params), !stopBubble) {\n const handlers = bubble.getHandlers(Event_Bubble_Level.model);\n stopBubble = this._invoke(handlers, eType, params);\n }\n if (!stopBubble) {\n const handlers = bubble.getHandlers(Event_Bubble_Level.chart);\n stopBubble = this._invoke(handlers, eType, params);\n }\n if (!stopBubble) {\n const handlers = bubble.getHandlers(Event_Bubble_Level.vchart);\n stopBubble = this._invoke(handlers, eType, params);\n }\n }\n return this;\n }\n release() {\n for (const entry of this._viewListeners.entries()) this._compiler.removeEventListener(Event_Source_Type.chart, entry[0], entry[1]);\n this._viewListeners.clear();\n for (const entry of this._windowListeners.entries()) this._compiler.removeEventListener(Event_Source_Type.window, entry[0], entry[1]);\n this._windowListeners.clear();\n for (const entry of this._canvasListeners.entries()) this._compiler.removeEventListener(Event_Source_Type.canvas, entry[0], entry[1]);\n this._canvasListeners.clear();\n for (const bubble of this._viewBubbles.values()) bubble.release();\n this._viewBubbles.clear();\n for (const bubble of this._windowBubbles.values()) bubble.release();\n this._windowBubbles.clear();\n for (const bubble of this._canvasBubbles.values()) bubble.release();\n this._canvasBubbles.clear();\n }\n _filter(filter, evt, params) {\n var _a, _b, _c;\n if (isFunction(filter.filter) && !filter.filter(params)) return !1;\n if (filter.nodeName && get(params, \"node.name\") !== filter.nodeName) return !1;\n if (filter.markName && (null === (_a = null == params ? void 0 : params.mark) || void 0 === _a ? void 0 : _a.name) !== filter.markName) return !1;\n let modelType = null === (_b = params.model) || void 0 === _b ? void 0 : _b.type;\n return componentTypeMap[modelType] && (modelType = componentTypeMap[modelType]), \n (!filter.type || modelType === filter.type) && (!(\"mark\" === filter.level && !filter.type && !(null == params ? void 0 : params.mark)) && (!(\"model\" === filter.level && !filter.type && !(null == params ? void 0 : params.model)) && (!isValid(filter.userId) || (null === (_c = params.model) || void 0 === _c ? void 0 : _c.userId) === filter.userId)));\n }\n _prepareParams(filter, params) {\n if (filter.markName && params.mark && params.itemMap) {\n const markId = params.mark.getProductId(), item = params.itemMap.get(markId), datum = null == item ? void 0 : item.getDatum();\n return Object.assign(Object.assign({}, params), {\n item: item,\n datum: datum\n });\n }\n return Object.assign({}, params);\n }\n _onDelegate(listenerParams) {\n var _a;\n const chart = this.globalInstance.getChart(), model = isValid(listenerParams.modelId) && (null == chart ? void 0 : chart.getModelById(listenerParams.modelId)) || void 0, mark = isValid(listenerParams.markId) && (null == chart ? void 0 : chart.getMarkById(listenerParams.markId)) || null, itemMap = new Map;\n let targetMark = null === (_a = listenerParams.item) || void 0 === _a ? void 0 : _a.mark;\n for (targetMark && isValid(targetMark.id()) && itemMap.set(targetMark.id(), listenerParams.item); null == targetMark ? void 0 : targetMark.elements; ) {\n const id = targetMark.id();\n isValid(id) && !itemMap.has(id) && itemMap.set(id, targetMark.elements[0]), targetMark = targetMark.group;\n }\n const params = {\n event: listenerParams.event,\n item: listenerParams.item,\n datum: listenerParams.datum,\n source: listenerParams.source,\n itemMap: itemMap,\n chart: chart,\n model: model,\n mark: null != mark ? mark : void 0,\n node: get(listenerParams.event, \"target\")\n };\n this.dispatch(listenerParams.type, params);\n }\n _invoke(handlers, type, params) {\n return handlers.map((handler => {\n var _a, _b, _c;\n const filter = handler.filter;\n if (!handler.query || this._filter(filter, type, params)) {\n const stopBubble = (handler.wrappedCallback || handler.callback).call(null, this._prepareParams(filter, params)), doStopBubble = null != stopBubble ? stopBubble : null === (_a = handler.query) || void 0 === _a ? void 0 : _a.consume;\n return doStopBubble && (null === (_b = params.event) || void 0 === _b || _b.stopPropagation(), \n null === (_c = params.event) || void 0 === _c || _c.preventDefault()), !!doStopBubble;\n }\n })).some((r => !0 === r));\n }\n _getQueryLevel(query) {\n return query ? query.level ? query.level : isValid(query.id) ? Event_Bubble_Level.model : Event_Bubble_Level.vchart : Event_Bubble_Level.vchart;\n }\n _parseQuery(handler) {\n var _a;\n const query = handler.query;\n (null == query ? void 0 : query.throttle) ? handler.wrappedCallback = throttle(handler.callback, query.throttle) : (null == query ? void 0 : query.debounce) && (handler.wrappedCallback = debounce(handler.callback, query.debounce));\n let level = this._getQueryLevel(query), type = null, source = Event_Source_Type.chart, nodeName = null, markName = null, userId = null;\n return (null == query ? void 0 : query.nodeName) && (nodeName = query.nodeName), \n (null == query ? void 0 : query.markName) && (markName = query.markName), !(null == query ? void 0 : query.type) || level !== Event_Bubble_Level.model && level !== Event_Bubble_Level.mark || (type = query.type), \n (null == query ? void 0 : query.source) && (source = query.source), isValid(null == query ? void 0 : query.id) && (userId = null == query ? void 0 : query.id, \n level = Event_Bubble_Level.model), handler.filter = {\n level: level,\n markName: markName,\n type: type,\n source: source,\n nodeName: nodeName,\n userId: userId,\n filter: null !== (_a = null == query ? void 0 : query.filter) && void 0 !== _a ? _a : null\n }, handler;\n }\n getEventBubble(source) {\n switch (source) {\n case Event_Source_Type.chart:\n return this._viewBubbles;\n\n case Event_Source_Type.window:\n return this._windowBubbles;\n\n case Event_Source_Type.canvas:\n return this._canvasBubbles;\n\n default:\n return this._viewBubbles;\n }\n }\n getEventListeners(source) {\n switch (source) {\n case Event_Source_Type.chart:\n return this._viewListeners;\n\n case Event_Source_Type.window:\n return this._windowListeners;\n\n case Event_Source_Type.canvas:\n return this._canvasListeners;\n\n default:\n return this._viewListeners;\n }\n }\n _isValidEvent(eType) {\n return BASE_EVENTS.includes(eType) || Object.values(VGRAMMAR_HOOK_EVENT).includes(eType) || Object.values(ChartEvent).includes(eType);\n }\n}","export default function(x) {\n return x;\n}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nexport default function() {\n return new Adder;\n}\n\nfunction Adder() {\n this.reset();\n}\n\nAdder.prototype = {\n constructor: Adder,\n reset: function() {\n this.s = // rounded value\n this.t = 0; // exact error\n },\n add: function(y) {\n add(temp, y, this.t);\n add(this, temp.s, this.s);\n if (this.s) this.t += temp.t;\n else this.s = temp.t;\n },\n valueOf: function() {\n return this.s;\n }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n var x = adder.s = a + b,\n bv = x - a,\n av = x - bv;\n adder.t = (a - av) + (b - bv);\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","import adder from \"../adder.js\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = adder(),\n areaRingSum = adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum.reset();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum.reset();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n};\n","import adder from \"../adder.js\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum.reset();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n this._string = [];\n}\n\nPathString.prototype = {\n _radius: 4.5,\n _circle: circle(4.5),\n pointRadius: function(_) {\n if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n return this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._string.push(\"Z\");\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._string.push(\"M\", x, \",\", y);\n this._point = 1;\n break;\n }\n case 1: {\n this._string.push(\"L\", x, \",\", y);\n break;\n }\n default: {\n if (this._circle == null) this._circle = circle(this._radius);\n this._string.push(\"M\", x, \",\", y, this._circle);\n break;\n }\n }\n },\n result: function() {\n if (this._string.length) {\n var result = this._string.join(\"\");\n this._string = [];\n return result;\n } else {\n return null;\n }\n }\n};\n\nfunction circle(radius) {\n return \"m0,\" + radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n + \"z\";\n}\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n var pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n return path.projection(projection).context(context);\n}\n","/**\n * Returns a cloned copy of the passed GeoJSON Object, including possible 'Foreign Members'.\n * ~3-5x faster than the common JSON.parse + JSON.stringify combo method.\n *\n * @name clone\n * @param {GeoJSON} geojson GeoJSON Object\n * @returns {GeoJSON} cloned GeoJSON Object\n * @example\n * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]], {color: 'red'});\n *\n * var lineCloned = turf.clone(line);\n */\nfunction clone(geojson) {\n if (!geojson) {\n throw new Error(\"geojson is required\");\n }\n switch (geojson.type) {\n case \"Feature\":\n return cloneFeature(geojson);\n case \"FeatureCollection\":\n return cloneFeatureCollection(geojson);\n case \"Point\":\n case \"LineString\":\n case \"Polygon\":\n case \"MultiPoint\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n case \"GeometryCollection\":\n return cloneGeometry(geojson);\n default:\n throw new Error(\"unknown GeoJSON type\");\n }\n}\n/**\n * Clone Feature\n *\n * @private\n * @param {Feature} geojson GeoJSON Feature\n * @returns {Feature} cloned Feature\n */\nfunction cloneFeature(geojson) {\n var cloned = { type: \"Feature\" };\n // Preserve Foreign Members\n Object.keys(geojson).forEach(function (key) {\n switch (key) {\n case \"type\":\n case \"properties\":\n case \"geometry\":\n return;\n default:\n cloned[key] = geojson[key];\n }\n });\n // Add properties & geometry last\n cloned.properties = cloneProperties(geojson.properties);\n cloned.geometry = cloneGeometry(geojson.geometry);\n return cloned;\n}\n/**\n * Clone Properties\n *\n * @private\n * @param {Object} properties GeoJSON Properties\n * @returns {Object} cloned Properties\n */\nfunction cloneProperties(properties) {\n var cloned = {};\n if (!properties) {\n return cloned;\n }\n Object.keys(properties).forEach(function (key) {\n var value = properties[key];\n if (typeof value === \"object\") {\n if (value === null) {\n // handle null\n cloned[key] = null;\n }\n else if (Array.isArray(value)) {\n // handle Array\n cloned[key] = value.map(function (item) {\n return item;\n });\n }\n else {\n // handle generic Object\n cloned[key] = cloneProperties(value);\n }\n }\n else {\n cloned[key] = value;\n }\n });\n return cloned;\n}\n/**\n * Clone Feature Collection\n *\n * @private\n * @param {FeatureCollection} geojson GeoJSON Feature Collection\n * @returns {FeatureCollection} cloned Feature Collection\n */\nfunction cloneFeatureCollection(geojson) {\n var cloned = { type: \"FeatureCollection\" };\n // Preserve Foreign Members\n Object.keys(geojson).forEach(function (key) {\n switch (key) {\n case \"type\":\n case \"features\":\n return;\n default:\n cloned[key] = geojson[key];\n }\n });\n // Add features\n cloned.features = geojson.features.map(function (feature) {\n return cloneFeature(feature);\n });\n return cloned;\n}\n/**\n * Clone Geometry\n *\n * @private\n * @param {Geometry} geometry GeoJSON Geometry\n * @returns {Geometry} cloned Geometry\n */\nfunction cloneGeometry(geometry) {\n var geom = { type: geometry.type };\n if (geometry.bbox) {\n geom.bbox = geometry.bbox;\n }\n if (geometry.type === \"GeometryCollection\") {\n geom.geometries = geometry.geometries.map(function (g) {\n return cloneGeometry(g);\n });\n return geom;\n }\n geom.coordinates = deepSlice(geometry.coordinates);\n return geom;\n}\n/**\n * Deep Slice coordinates\n *\n * @private\n * @param {Coordinates} coords Coordinates\n * @returns {Coordinates} all coordinates sliced\n */\nfunction deepSlice(coords) {\n var cloned = coords;\n if (typeof cloned[0] !== \"object\") {\n return cloned.slice();\n }\n return cloned.map(function (coord) {\n return deepSlice(coord);\n });\n}\nexport default clone;\n","/**\n * @module helpers\n */\n/**\n * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.\n *\n * @memberof helpers\n * @type {number}\n */\nexport var earthRadius = 6371008.8;\n/**\n * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.\n *\n * @memberof helpers\n * @type {Object}\n */\nexport var factors = {\n centimeters: earthRadius * 100,\n centimetres: earthRadius * 100,\n degrees: earthRadius / 111325,\n feet: earthRadius * 3.28084,\n inches: earthRadius * 39.37,\n kilometers: earthRadius / 1000,\n kilometres: earthRadius / 1000,\n meters: earthRadius,\n metres: earthRadius,\n miles: earthRadius / 1609.344,\n millimeters: earthRadius * 1000,\n millimetres: earthRadius * 1000,\n nauticalmiles: earthRadius / 1852,\n radians: 1,\n yards: earthRadius * 1.0936,\n};\n/**\n * Units of measurement factors based on 1 meter.\n *\n * @memberof helpers\n * @type {Object}\n */\nexport var unitsFactors = {\n centimeters: 100,\n centimetres: 100,\n degrees: 1 / 111325,\n feet: 3.28084,\n inches: 39.37,\n kilometers: 1 / 1000,\n kilometres: 1 / 1000,\n meters: 1,\n metres: 1,\n miles: 1 / 1609.344,\n millimeters: 1000,\n millimetres: 1000,\n nauticalmiles: 1 / 1852,\n radians: 1 / earthRadius,\n yards: 1.0936133,\n};\n/**\n * Area of measurement factors based on 1 square meter.\n *\n * @memberof helpers\n * @type {Object}\n */\nexport var areaFactors = {\n acres: 0.000247105,\n centimeters: 10000,\n centimetres: 10000,\n feet: 10.763910417,\n hectares: 0.0001,\n inches: 1550.003100006,\n kilometers: 0.000001,\n kilometres: 0.000001,\n meters: 1,\n metres: 1,\n miles: 3.86e-7,\n millimeters: 1000000,\n millimetres: 1000000,\n yards: 1.195990046,\n};\n/**\n * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.\n *\n * @name feature\n * @param {Geometry} geometry input geometry\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a GeoJSON Feature\n * @example\n * var geometry = {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 50]\n * };\n *\n * var feature = turf.feature(geometry);\n *\n * //=feature\n */\nexport function feature(geom, properties, options) {\n if (options === void 0) { options = {}; }\n var feat = { type: \"Feature\" };\n if (options.id === 0 || options.id) {\n feat.id = options.id;\n }\n if (options.bbox) {\n feat.bbox = options.bbox;\n }\n feat.properties = properties || {};\n feat.geometry = geom;\n return feat;\n}\n/**\n * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.\n * For GeometryCollection type use `helpers.geometryCollection`\n *\n * @name geometry\n * @param {string} type Geometry Type\n * @param {Array} coordinates Coordinates\n * @param {Object} [options={}] Optional Parameters\n * @returns {Geometry} a GeoJSON Geometry\n * @example\n * var type = \"Point\";\n * var coordinates = [110, 50];\n * var geometry = turf.geometry(type, coordinates);\n * // => geometry\n */\nexport function geometry(type, coordinates, _options) {\n if (_options === void 0) { _options = {}; }\n switch (type) {\n case \"Point\":\n return point(coordinates).geometry;\n case \"LineString\":\n return lineString(coordinates).geometry;\n case \"Polygon\":\n return polygon(coordinates).geometry;\n case \"MultiPoint\":\n return multiPoint(coordinates).geometry;\n case \"MultiLineString\":\n return multiLineString(coordinates).geometry;\n case \"MultiPolygon\":\n return multiPolygon(coordinates).geometry;\n default:\n throw new Error(type + \" is invalid\");\n }\n}\n/**\n * Creates a {@link Point} {@link Feature} from a Position.\n *\n * @name point\n * @param {Array} coordinates longitude, latitude position (each in decimal degrees)\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a Point feature\n * @example\n * var point = turf.point([-75.343, 39.984]);\n *\n * //=point\n */\nexport function point(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n if (!coordinates) {\n throw new Error(\"coordinates is required\");\n }\n if (!Array.isArray(coordinates)) {\n throw new Error(\"coordinates must be an Array\");\n }\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be at least 2 numbers long\");\n }\n if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) {\n throw new Error(\"coordinates must contain numbers\");\n }\n var geom = {\n type: \"Point\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.\n *\n * @name points\n * @param {Array>} coordinates an array of Points\n * @param {Object} [properties={}] Translate these properties to each Feature\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} Point Feature\n * @example\n * var points = turf.points([\n * [-75, 39],\n * [-80, 45],\n * [-78, 50]\n * ]);\n *\n * //=points\n */\nexport function points(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return point(coords, properties);\n }), options);\n}\n/**\n * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.\n *\n * @name polygon\n * @param {Array>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} Polygon Feature\n * @example\n * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });\n *\n * //=polygon\n */\nexport function polygon(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {\n var ring = coordinates_1[_i];\n if (ring.length < 4) {\n throw new Error(\"Each LinearRing of a Polygon must have 4 or more Positions.\");\n }\n for (var j = 0; j < ring[ring.length - 1].length; j++) {\n // Check if first point of Polygon contains two numbers\n if (ring[ring.length - 1][j] !== ring[0][j]) {\n throw new Error(\"First and last Position are not equivalent.\");\n }\n }\n }\n var geom = {\n type: \"Polygon\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.\n *\n * @name polygons\n * @param {Array>>>} coordinates an array of Polygon coordinates\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} Polygon FeatureCollection\n * @example\n * var polygons = turf.polygons([\n * [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],\n * [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],\n * ]);\n *\n * //=polygons\n */\nexport function polygons(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return polygon(coords, properties);\n }), options);\n}\n/**\n * Creates a {@link LineString} {@link Feature} from an Array of Positions.\n *\n * @name lineString\n * @param {Array>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} LineString Feature\n * @example\n * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});\n * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});\n *\n * //=linestring1\n * //=linestring2\n */\nexport function lineString(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be an array of two or more positions\");\n }\n var geom = {\n type: \"LineString\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.\n *\n * @name lineStrings\n * @param {Array>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} LineString FeatureCollection\n * @example\n * var linestrings = turf.lineStrings([\n * [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],\n * [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]\n * ]);\n *\n * //=linestrings\n */\nexport function lineStrings(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return lineString(coords, properties);\n }), options);\n}\n/**\n * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.\n *\n * @name featureCollection\n * @param {Feature[]} features input features\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {FeatureCollection} FeatureCollection of Features\n * @example\n * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});\n * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});\n * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});\n *\n * var collection = turf.featureCollection([\n * locationA,\n * locationB,\n * locationC\n * ]);\n *\n * //=collection\n */\nexport function featureCollection(features, options) {\n if (options === void 0) { options = {}; }\n var fc = { type: \"FeatureCollection\" };\n if (options.id) {\n fc.id = options.id;\n }\n if (options.bbox) {\n fc.bbox = options.bbox;\n }\n fc.features = features;\n return fc;\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiLineString\n * @param {Array>>} coordinates an array of LineStrings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a MultiLineString feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);\n *\n * //=multiLine\n */\nexport function multiLineString(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiLineString\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPoint\n * @param {Array>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a MultiPoint feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPt = turf.multiPoint([[0,0],[10,10]]);\n *\n * //=multiPt\n */\nexport function multiPoint(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiPoint\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPolygon\n * @param {Array>>>} coordinates an array of Polygons\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a multipolygon feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);\n *\n * //=multiPoly\n *\n */\nexport function multiPolygon(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiPolygon\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name geometryCollection\n * @param {Array} geometries an array of GeoJSON Geometries\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a GeoJSON GeometryCollection Feature\n * @example\n * var pt = turf.geometry(\"Point\", [100, 0]);\n * var line = turf.geometry(\"LineString\", [[101, 0], [102, 1]]);\n * var collection = turf.geometryCollection([pt, line]);\n *\n * // => collection\n */\nexport function geometryCollection(geometries, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"GeometryCollection\",\n geometries: geometries,\n };\n return feature(geom, properties, options);\n}\n/**\n * Round number to precision\n *\n * @param {number} num Number\n * @param {number} [precision=0] Precision\n * @returns {number} rounded number\n * @example\n * turf.round(120.4321)\n * //=120\n *\n * turf.round(120.4321, 2)\n * //=120.43\n */\nexport function round(num, precision) {\n if (precision === void 0) { precision = 0; }\n if (precision && !(precision >= 0)) {\n throw new Error(\"precision must be a positive number\");\n }\n var multiplier = Math.pow(10, precision || 0);\n return Math.round(num * multiplier) / multiplier;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name radiansToLength\n * @param {number} radians in radians across the sphere\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} distance\n */\nexport function radiansToLength(radians, units) {\n if (units === void 0) { units = \"kilometers\"; }\n var factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return radians * factor;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name lengthToRadians\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} radians\n */\nexport function lengthToRadians(distance, units) {\n if (units === void 0) { units = \"kilometers\"; }\n var factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return distance / factor;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet\n *\n * @name lengthToDegrees\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} degrees\n */\nexport function lengthToDegrees(distance, units) {\n return radiansToDegrees(lengthToRadians(distance, units));\n}\n/**\n * Converts any bearing angle from the north line direction (positive clockwise)\n * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line\n *\n * @name bearingToAzimuth\n * @param {number} bearing angle, between -180 and +180 degrees\n * @returns {number} angle between 0 and 360 degrees\n */\nexport function bearingToAzimuth(bearing) {\n var angle = bearing % 360;\n if (angle < 0) {\n angle += 360;\n }\n return angle;\n}\n/**\n * Converts an angle in radians to degrees\n *\n * @name radiansToDegrees\n * @param {number} radians angle in radians\n * @returns {number} degrees between 0 and 360 degrees\n */\nexport function radiansToDegrees(radians) {\n var degrees = radians % (2 * Math.PI);\n return (degrees * 180) / Math.PI;\n}\n/**\n * Converts an angle in degrees to radians\n *\n * @name degreesToRadians\n * @param {number} degrees angle between 0 and 360 degrees\n * @returns {number} angle in radians\n */\nexport function degreesToRadians(degrees) {\n var radians = degrees % 360;\n return (radians * Math.PI) / 180;\n}\n/**\n * Converts a length to the requested unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @param {number} length to be converted\n * @param {Units} [originalUnit=\"kilometers\"] of the length\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted length\n */\nexport function convertLength(length, originalUnit, finalUnit) {\n if (originalUnit === void 0) { originalUnit = \"kilometers\"; }\n if (finalUnit === void 0) { finalUnit = \"kilometers\"; }\n if (!(length >= 0)) {\n throw new Error(\"length must be a positive number\");\n }\n return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);\n}\n/**\n * Converts a area to the requested unit.\n * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches, hectares\n * @param {number} area to be converted\n * @param {Units} [originalUnit=\"meters\"] of the distance\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted area\n */\nexport function convertArea(area, originalUnit, finalUnit) {\n if (originalUnit === void 0) { originalUnit = \"meters\"; }\n if (finalUnit === void 0) { finalUnit = \"kilometers\"; }\n if (!(area >= 0)) {\n throw new Error(\"area must be a positive number\");\n }\n var startFactor = areaFactors[originalUnit];\n if (!startFactor) {\n throw new Error(\"invalid original units\");\n }\n var finalFactor = areaFactors[finalUnit];\n if (!finalFactor) {\n throw new Error(\"invalid final units\");\n }\n return (area / startFactor) * finalFactor;\n}\n/**\n * isNumber\n *\n * @param {*} num Number to validate\n * @returns {boolean} true/false\n * @example\n * turf.isNumber(123)\n * //=true\n * turf.isNumber('foo')\n * //=false\n */\nexport function isNumber(num) {\n return !isNaN(num) && num !== null && !Array.isArray(num);\n}\n/**\n * isObject\n *\n * @param {*} input variable to validate\n * @returns {boolean} true/false\n * @example\n * turf.isObject({elevation: 10})\n * //=true\n * turf.isObject('foo')\n * //=false\n */\nexport function isObject(input) {\n return !!input && input.constructor === Object;\n}\n/**\n * Validate BBox\n *\n * @private\n * @param {Array} bbox BBox to validate\n * @returns {void}\n * @throws Error if BBox is not valid\n * @example\n * validateBBox([-180, -40, 110, 50])\n * //=OK\n * validateBBox([-180, -40])\n * //=Error\n * validateBBox('Foo')\n * //=Error\n * validateBBox(5)\n * //=Error\n * validateBBox(null)\n * //=Error\n * validateBBox(undefined)\n * //=Error\n */\nexport function validateBBox(bbox) {\n if (!bbox) {\n throw new Error(\"bbox is required\");\n }\n if (!Array.isArray(bbox)) {\n throw new Error(\"bbox must be an Array\");\n }\n if (bbox.length !== 4 && bbox.length !== 6) {\n throw new Error(\"bbox must be an Array of 4 or 6 numbers\");\n }\n bbox.forEach(function (num) {\n if (!isNumber(num)) {\n throw new Error(\"bbox must only contain numbers\");\n }\n });\n}\n/**\n * Validate Id\n *\n * @private\n * @param {string|number} id Id to validate\n * @returns {void}\n * @throws Error if Id is not valid\n * @example\n * validateId([-180, -40, 110, 50])\n * //=Error\n * validateId([-180, -40])\n * //=Error\n * validateId('Foo')\n * //=OK\n * validateId(5)\n * //=OK\n * validateId(null)\n * //=Error\n * validateId(undefined)\n * //=Error\n */\nexport function validateId(id) {\n if (!id) {\n throw new Error(\"id is required\");\n }\n if ([\"string\", \"number\"].indexOf(typeof id) === -1) {\n throw new Error(\"id must be a number or a string\");\n }\n}\n","import { isNumber, } from \"@turf/helpers\";\n/**\n * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate.\n *\n * @name getCoord\n * @param {Array|Geometry|Feature} coord GeoJSON Point or an Array of numbers\n * @returns {Array} coordinates\n * @example\n * var pt = turf.point([10, 10]);\n *\n * var coord = turf.getCoord(pt);\n * //= [10, 10]\n */\nexport function getCoord(coord) {\n if (!coord) {\n throw new Error(\"coord is required\");\n }\n if (!Array.isArray(coord)) {\n if (coord.type === \"Feature\" &&\n coord.geometry !== null &&\n coord.geometry.type === \"Point\") {\n return coord.geometry.coordinates;\n }\n if (coord.type === \"Point\") {\n return coord.coordinates;\n }\n }\n if (Array.isArray(coord) &&\n coord.length >= 2 &&\n !Array.isArray(coord[0]) &&\n !Array.isArray(coord[1])) {\n return coord;\n }\n throw new Error(\"coord must be GeoJSON Point or an Array of numbers\");\n}\n/**\n * Unwrap coordinates from a Feature, Geometry Object or an Array\n *\n * @name getCoords\n * @param {Array|Geometry|Feature} coords Feature, Geometry Object or an Array\n * @returns {Array} coordinates\n * @example\n * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]);\n *\n * var coords = turf.getCoords(poly);\n * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]\n */\nexport function getCoords(coords) {\n if (Array.isArray(coords)) {\n return coords;\n }\n // Feature\n if (coords.type === \"Feature\") {\n if (coords.geometry !== null) {\n return coords.geometry.coordinates;\n }\n }\n else {\n // Geometry\n if (coords.coordinates) {\n return coords.coordinates;\n }\n }\n throw new Error(\"coords must be GeoJSON Feature, Geometry Object or an Array\");\n}\n/**\n * Checks if coordinates contains a number\n *\n * @name containsNumber\n * @param {Array} coordinates GeoJSON Coordinates\n * @returns {boolean} true if Array contains a number\n */\nexport function containsNumber(coordinates) {\n if (coordinates.length > 1 &&\n isNumber(coordinates[0]) &&\n isNumber(coordinates[1])) {\n return true;\n }\n if (Array.isArray(coordinates[0]) && coordinates[0].length) {\n return containsNumber(coordinates[0]);\n }\n throw new Error(\"coordinates must only contain numbers\");\n}\n/**\n * Enforce expectations about types of GeoJSON objects for Turf.\n *\n * @name geojsonType\n * @param {GeoJSON} value any GeoJSON object\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} if value is not the expected type.\n */\nexport function geojsonType(value, type, name) {\n if (!type || !name) {\n throw new Error(\"type and name required\");\n }\n if (!value || value.type !== type) {\n throw new Error(\"Invalid input to \" +\n name +\n \": must be a \" +\n type +\n \", given \" +\n value.type);\n }\n}\n/**\n * Enforce expectations about types of {@link Feature} inputs for Turf.\n * Internally this uses {@link geojsonType} to judge geometry types.\n *\n * @name featureOf\n * @param {Feature} feature a feature with an expected geometry type\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} error if value is not the expected type.\n */\nexport function featureOf(feature, type, name) {\n if (!feature) {\n throw new Error(\"No feature passed\");\n }\n if (!name) {\n throw new Error(\".featureOf() requires a name\");\n }\n if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n throw new Error(\"Invalid input to \" + name + \", Feature with geometry required\");\n }\n if (!feature.geometry || feature.geometry.type !== type) {\n throw new Error(\"Invalid input to \" +\n name +\n \": must be a \" +\n type +\n \", given \" +\n feature.geometry.type);\n }\n}\n/**\n * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.\n * Internally this uses {@link geojsonType} to judge geometry types.\n *\n * @name collectionOf\n * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} if value is not the expected type.\n */\nexport function collectionOf(featureCollection, type, name) {\n if (!featureCollection) {\n throw new Error(\"No featureCollection passed\");\n }\n if (!name) {\n throw new Error(\".collectionOf() requires a name\");\n }\n if (!featureCollection || featureCollection.type !== \"FeatureCollection\") {\n throw new Error(\"Invalid input to \" + name + \", FeatureCollection required\");\n }\n for (var _i = 0, _a = featureCollection.features; _i < _a.length; _i++) {\n var feature = _a[_i];\n if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n throw new Error(\"Invalid input to \" + name + \", Feature with geometry required\");\n }\n if (!feature.geometry || feature.geometry.type !== type) {\n throw new Error(\"Invalid input to \" +\n name +\n \": must be a \" +\n type +\n \", given \" +\n feature.geometry.type);\n }\n }\n}\n/**\n * Get Geometry from Feature or Geometry Object\n *\n * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object\n * @returns {Geometry|null} GeoJSON Geometry Object\n * @throws {Error} if geojson is not a Feature or Geometry Object\n * @example\n * var point = {\n * \"type\": \"Feature\",\n * \"properties\": {},\n * \"geometry\": {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 40]\n * }\n * }\n * var geom = turf.getGeom(point)\n * //={\"type\": \"Point\", \"coordinates\": [110, 40]}\n */\nexport function getGeom(geojson) {\n if (geojson.type === \"Feature\") {\n return geojson.geometry;\n }\n return geojson;\n}\n/**\n * Get GeoJSON object's type, Geometry type is prioritize.\n *\n * @param {GeoJSON} geojson GeoJSON object\n * @param {string} [name=\"geojson\"] name of the variable to display in error message (unused)\n * @returns {string} GeoJSON type\n * @example\n * var point = {\n * \"type\": \"Feature\",\n * \"properties\": {},\n * \"geometry\": {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 40]\n * }\n * }\n * var geom = turf.getType(point)\n * //=\"Point\"\n */\nexport function getType(geojson, _name) {\n if (geojson.type === \"FeatureCollection\") {\n return \"FeatureCollection\";\n }\n if (geojson.type === \"GeometryCollection\") {\n return \"GeometryCollection\";\n }\n if (geojson.type === \"Feature\" && geojson.geometry !== null) {\n return geojson.geometry.type;\n }\n return geojson.type;\n}\n","import { getCoords } from \"@turf/invariant\";\n/**\n * Takes a ring and return true or false whether or not the ring is clockwise or counter-clockwise.\n *\n * @name booleanClockwise\n * @param {Feature|LineString|Array>} line to be evaluated\n * @returns {boolean} true/false\n * @example\n * var clockwiseRing = turf.lineString([[0,0],[1,1],[1,0],[0,0]]);\n * var counterClockwiseRing = turf.lineString([[0,0],[1,0],[1,1],[0,0]]);\n *\n * turf.booleanClockwise(clockwiseRing)\n * //=true\n * turf.booleanClockwise(counterClockwiseRing)\n * //=false\n */\nexport default function booleanClockwise(line) {\n var ring = getCoords(line);\n var sum = 0;\n var i = 1;\n var prev;\n var cur;\n while (i < ring.length) {\n prev = cur || ring[0];\n cur = ring[i];\n sum += (cur[0] - prev[0]) * (cur[1] + prev[1]);\n i++;\n }\n return sum > 0;\n}\n","import { feature, lineString, isObject, point } from '@turf/helpers';\n\n/**\n * Callback for coordEach\n *\n * @callback coordEachCallback\n * @param {Array} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Iterate over coordinates in any GeoJSON object, similar to Array.forEach()\n *\n * @name coordEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentCoord, coordIndex, featureIndex, multiFeatureIndex)\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordEach(features, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=currentCoord\n * //=coordIndex\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * });\n */\nfunction coordEach(geojson, callback, excludeWrapCoord) {\n // Handles null Geometry -- Skips this GeoJSON\n if (geojson === null) return;\n var j,\n k,\n l,\n geometry,\n stopG,\n coords,\n geometryMaybeCollection,\n wrapShrink = 0,\n coordIndex = 0,\n isGeometryCollection,\n type = geojson.type,\n isFeatureCollection = type === \"FeatureCollection\",\n isFeature = type === \"Feature\",\n stop = isFeatureCollection ? geojson.features.length : 1;\n\n // This logic may look a little weird. The reason why it is that way\n // is because it's trying to be fast. GeoJSON supports multiple kinds\n // of objects at its root: FeatureCollection, Features, Geometries.\n // This function has the responsibility of handling all of them, and that\n // means that some of the `for` loops you see below actually just don't apply\n // to certain inputs. For instance, if you give this just a\n // Point geometry, then both loops are short-circuited and all we do\n // is gradually rename the input until it's called 'geometry'.\n //\n // This also aims to allocate as few resources as possible: just a\n // few numbers and booleans, rather than any temporary arrays as would\n // be required with the normalization approach.\n for (var featureIndex = 0; featureIndex < stop; featureIndex++) {\n geometryMaybeCollection = isFeatureCollection\n ? geojson.features[featureIndex].geometry\n : isFeature\n ? geojson.geometry\n : geojson;\n isGeometryCollection = geometryMaybeCollection\n ? geometryMaybeCollection.type === \"GeometryCollection\"\n : false;\n stopG = isGeometryCollection\n ? geometryMaybeCollection.geometries.length\n : 1;\n\n for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {\n var multiFeatureIndex = 0;\n var geometryIndex = 0;\n geometry = isGeometryCollection\n ? geometryMaybeCollection.geometries[geomIndex]\n : geometryMaybeCollection;\n\n // Handles null Geometry -- Skips this geometry\n if (geometry === null) continue;\n coords = geometry.coordinates;\n var geomType = geometry.type;\n\n wrapShrink =\n excludeWrapCoord &&\n (geomType === \"Polygon\" || geomType === \"MultiPolygon\")\n ? 1\n : 0;\n\n switch (geomType) {\n case null:\n break;\n case \"Point\":\n if (\n callback(\n coords,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n multiFeatureIndex++;\n break;\n case \"LineString\":\n case \"MultiPoint\":\n for (j = 0; j < coords.length; j++) {\n if (\n callback(\n coords[j],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n if (geomType === \"MultiPoint\") multiFeatureIndex++;\n }\n if (geomType === \"LineString\") multiFeatureIndex++;\n break;\n case \"Polygon\":\n case \"MultiLineString\":\n for (j = 0; j < coords.length; j++) {\n for (k = 0; k < coords[j].length - wrapShrink; k++) {\n if (\n callback(\n coords[j][k],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n }\n if (geomType === \"MultiLineString\") multiFeatureIndex++;\n if (geomType === \"Polygon\") geometryIndex++;\n }\n if (geomType === \"Polygon\") multiFeatureIndex++;\n break;\n case \"MultiPolygon\":\n for (j = 0; j < coords.length; j++) {\n geometryIndex = 0;\n for (k = 0; k < coords[j].length; k++) {\n for (l = 0; l < coords[j][k].length - wrapShrink; l++) {\n if (\n callback(\n coords[j][k][l],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n }\n geometryIndex++;\n }\n multiFeatureIndex++;\n }\n break;\n case \"GeometryCollection\":\n for (j = 0; j < geometry.geometries.length; j++)\n if (\n coordEach(geometry.geometries[j], callback, excludeWrapCoord) ===\n false\n )\n return false;\n break;\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n }\n}\n\n/**\n * Callback for coordReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback coordReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Array} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Reduce coordinates in any GeoJSON object, similar to Array.reduce()\n *\n * @name coordReduce\n * @param {FeatureCollection|Geometry|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentCoord, coordIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordReduce(features, function (previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=previousValue\n * //=currentCoord\n * //=coordIndex\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * return currentCoord;\n * });\n */\nfunction coordReduce(geojson, callback, initialValue, excludeWrapCoord) {\n var previousValue = initialValue;\n coordEach(\n geojson,\n function (\n currentCoord,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) {\n if (coordIndex === 0 && initialValue === undefined)\n previousValue = currentCoord;\n else\n previousValue = callback(\n previousValue,\n currentCoord,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n },\n excludeWrapCoord\n );\n return previousValue;\n}\n\n/**\n * Callback for propEach\n *\n * @callback propEachCallback\n * @param {Object} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over properties in any GeoJSON object, similar to Array.forEach()\n *\n * @name propEach\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentProperties, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propEach(features, function (currentProperties, featureIndex) {\n * //=currentProperties\n * //=featureIndex\n * });\n */\nfunction propEach(geojson, callback) {\n var i;\n switch (geojson.type) {\n case \"FeatureCollection\":\n for (i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i].properties, i) === false) break;\n }\n break;\n case \"Feature\":\n callback(geojson.properties, 0);\n break;\n }\n}\n\n/**\n * Callback for propReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback propReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {*} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce properties in any GeoJSON object into a single value,\n * similar to how Array.reduce works. However, in this case we lazily run\n * the reduction, so an array of all properties is unnecessary.\n *\n * @name propReduce\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentProperties, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propReduce(features, function (previousValue, currentProperties, featureIndex) {\n * //=previousValue\n * //=currentProperties\n * //=featureIndex\n * return currentProperties\n * });\n */\nfunction propReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n propEach(geojson, function (currentProperties, featureIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentProperties;\n else\n previousValue = callback(previousValue, currentProperties, featureIndex);\n });\n return previousValue;\n}\n\n/**\n * Callback for featureEach\n *\n * @callback featureEachCallback\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name featureEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.featureEach(features, function (currentFeature, featureIndex) {\n * //=currentFeature\n * //=featureIndex\n * });\n */\nfunction featureEach(geojson, callback) {\n if (geojson.type === \"Feature\") {\n callback(geojson, 0);\n } else if (geojson.type === \"FeatureCollection\") {\n for (var i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i], i) === false) break;\n }\n }\n}\n\n/**\n * Callback for featureReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback featureReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name featureReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.featureReduce(features, function (previousValue, currentFeature, featureIndex) {\n * //=previousValue\n * //=currentFeature\n * //=featureIndex\n * return currentFeature\n * });\n */\nfunction featureReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n featureEach(geojson, function (currentFeature, featureIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentFeature;\n else previousValue = callback(previousValue, currentFeature, featureIndex);\n });\n return previousValue;\n}\n\n/**\n * Get all coordinates from any GeoJSON object.\n *\n * @name coordAll\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @returns {Array>} coordinate position array\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * var coords = turf.coordAll(features);\n * //= [[26, 37], [36, 53]]\n */\nfunction coordAll(geojson) {\n var coords = [];\n coordEach(geojson, function (coord) {\n coords.push(coord);\n });\n return coords;\n}\n\n/**\n * Callback for geomEach\n *\n * @callback geomEachCallback\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Iterate over each geometry in any GeoJSON object, similar to Array.forEach()\n *\n * @name geomEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomEach(features, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n * //=currentGeometry\n * //=featureIndex\n * //=featureProperties\n * //=featureBBox\n * //=featureId\n * });\n */\nfunction geomEach(geojson, callback) {\n var i,\n j,\n g,\n geometry,\n stopG,\n geometryMaybeCollection,\n isGeometryCollection,\n featureProperties,\n featureBBox,\n featureId,\n featureIndex = 0,\n isFeatureCollection = geojson.type === \"FeatureCollection\",\n isFeature = geojson.type === \"Feature\",\n stop = isFeatureCollection ? geojson.features.length : 1;\n\n // This logic may look a little weird. The reason why it is that way\n // is because it's trying to be fast. GeoJSON supports multiple kinds\n // of objects at its root: FeatureCollection, Features, Geometries.\n // This function has the responsibility of handling all of them, and that\n // means that some of the `for` loops you see below actually just don't apply\n // to certain inputs. For instance, if you give this just a\n // Point geometry, then both loops are short-circuited and all we do\n // is gradually rename the input until it's called 'geometry'.\n //\n // This also aims to allocate as few resources as possible: just a\n // few numbers and booleans, rather than any temporary arrays as would\n // be required with the normalization approach.\n for (i = 0; i < stop; i++) {\n geometryMaybeCollection = isFeatureCollection\n ? geojson.features[i].geometry\n : isFeature\n ? geojson.geometry\n : geojson;\n featureProperties = isFeatureCollection\n ? geojson.features[i].properties\n : isFeature\n ? geojson.properties\n : {};\n featureBBox = isFeatureCollection\n ? geojson.features[i].bbox\n : isFeature\n ? geojson.bbox\n : undefined;\n featureId = isFeatureCollection\n ? geojson.features[i].id\n : isFeature\n ? geojson.id\n : undefined;\n isGeometryCollection = geometryMaybeCollection\n ? geometryMaybeCollection.type === \"GeometryCollection\"\n : false;\n stopG = isGeometryCollection\n ? geometryMaybeCollection.geometries.length\n : 1;\n\n for (g = 0; g < stopG; g++) {\n geometry = isGeometryCollection\n ? geometryMaybeCollection.geometries[g]\n : geometryMaybeCollection;\n\n // Handle null Geometry\n if (geometry === null) {\n if (\n callback(\n null,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n continue;\n }\n switch (geometry.type) {\n case \"Point\":\n case \"LineString\":\n case \"MultiPoint\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\": {\n if (\n callback(\n geometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n break;\n }\n case \"GeometryCollection\": {\n for (j = 0; j < geometry.geometries.length; j++) {\n if (\n callback(\n geometry.geometries[j],\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n }\n break;\n }\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n // Only increase `featureIndex` per each feature\n featureIndex++;\n }\n}\n\n/**\n * Callback for geomReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback geomReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Reduce geometry in any GeoJSON object, similar to Array.reduce().\n *\n * @name geomReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomReduce(features, function (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n * //=previousValue\n * //=currentGeometry\n * //=featureIndex\n * //=featureProperties\n * //=featureBBox\n * //=featureId\n * return currentGeometry\n * });\n */\nfunction geomReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n geomEach(\n geojson,\n function (\n currentGeometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentGeometry;\n else\n previousValue = callback(\n previousValue,\n currentGeometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for flattenEach\n *\n * @callback flattenEachCallback\n * @param {Feature} currentFeature The current flattened feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Iterate over flattened features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name flattenEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex, multiFeatureIndex)\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenEach(features, function (currentFeature, featureIndex, multiFeatureIndex) {\n * //=currentFeature\n * //=featureIndex\n * //=multiFeatureIndex\n * });\n */\nfunction flattenEach(geojson, callback) {\n geomEach(geojson, function (geometry, featureIndex, properties, bbox, id) {\n // Callback for single geometry\n var type = geometry === null ? null : geometry.type;\n switch (type) {\n case null:\n case \"Point\":\n case \"LineString\":\n case \"Polygon\":\n if (\n callback(\n feature(geometry, properties, { bbox: bbox, id: id }),\n featureIndex,\n 0\n ) === false\n )\n return false;\n return;\n }\n\n var geomType;\n\n // Callback for multi-geometry\n switch (type) {\n case \"MultiPoint\":\n geomType = \"Point\";\n break;\n case \"MultiLineString\":\n geomType = \"LineString\";\n break;\n case \"MultiPolygon\":\n geomType = \"Polygon\";\n break;\n }\n\n for (\n var multiFeatureIndex = 0;\n multiFeatureIndex < geometry.coordinates.length;\n multiFeatureIndex++\n ) {\n var coordinate = geometry.coordinates[multiFeatureIndex];\n var geom = {\n type: geomType,\n coordinates: coordinate,\n };\n if (\n callback(feature(geom, properties), featureIndex, multiFeatureIndex) ===\n false\n )\n return false;\n }\n });\n}\n\n/**\n * Callback for flattenReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback flattenReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Reduce flattened features in any GeoJSON object, similar to Array.reduce().\n *\n * @name flattenReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex, multiFeatureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenReduce(features, function (previousValue, currentFeature, featureIndex, multiFeatureIndex) {\n * //=previousValue\n * //=currentFeature\n * //=featureIndex\n * //=multiFeatureIndex\n * return currentFeature\n * });\n */\nfunction flattenReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n flattenEach(\n geojson,\n function (currentFeature, featureIndex, multiFeatureIndex) {\n if (\n featureIndex === 0 &&\n multiFeatureIndex === 0 &&\n initialValue === undefined\n )\n previousValue = currentFeature;\n else\n previousValue = callback(\n previousValue,\n currentFeature,\n featureIndex,\n multiFeatureIndex\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for segmentEach\n *\n * @callback segmentEachCallback\n * @param {Feature} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n * @returns {void}\n */\n\n/**\n * Iterate over 2-vertex line segment in any GeoJSON object, similar to Array.forEach()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex)\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentEach(polygon, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n * //=currentSegment\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * //=segmentIndex\n * });\n *\n * // Calculate the total number of segments\n * var total = 0;\n * turf.segmentEach(polygon, function () {\n * total++;\n * });\n */\nfunction segmentEach(geojson, callback) {\n flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n var segmentIndex = 0;\n\n // Exclude null Geometries\n if (!feature.geometry) return;\n // (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n var type = feature.geometry.type;\n if (type === \"Point\" || type === \"MultiPoint\") return;\n\n // Generate 2-vertex line segments\n var previousCoords;\n var previousFeatureIndex = 0;\n var previousMultiIndex = 0;\n var prevGeomIndex = 0;\n if (\n coordEach(\n feature,\n function (\n currentCoord,\n coordIndex,\n featureIndexCoord,\n multiPartIndexCoord,\n geometryIndex\n ) {\n // Simulating a meta.coordReduce() since `reduce` operations cannot be stopped by returning `false`\n if (\n previousCoords === undefined ||\n featureIndex > previousFeatureIndex ||\n multiPartIndexCoord > previousMultiIndex ||\n geometryIndex > prevGeomIndex\n ) {\n previousCoords = currentCoord;\n previousFeatureIndex = featureIndex;\n previousMultiIndex = multiPartIndexCoord;\n prevGeomIndex = geometryIndex;\n segmentIndex = 0;\n return;\n }\n var currentSegment = lineString(\n [previousCoords, currentCoord],\n feature.properties\n );\n if (\n callback(\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n ) === false\n )\n return false;\n segmentIndex++;\n previousCoords = currentCoord;\n }\n ) === false\n )\n return false;\n });\n}\n\n/**\n * Callback for segmentReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback segmentReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n */\n\n/**\n * Reduce 2-vertex line segment in any GeoJSON object, similar to Array.reduce()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (previousValue, currentSegment, currentIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentReduce(polygon, function (previousSegment, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n * //= previousSegment\n * //= currentSegment\n * //= featureIndex\n * //= multiFeatureIndex\n * //= geometryIndex\n * //= segmentIndex\n * return currentSegment\n * });\n *\n * // Calculate the total number of segments\n * var initialValue = 0\n * var total = turf.segmentReduce(polygon, function (previousValue) {\n * previousValue++;\n * return previousValue;\n * }, initialValue);\n */\nfunction segmentReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n var started = false;\n segmentEach(\n geojson,\n function (\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n ) {\n if (started === false && initialValue === undefined)\n previousValue = currentSegment;\n else\n previousValue = callback(\n previousValue,\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n );\n started = true;\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for lineEach\n *\n * @callback lineEachCallback\n * @param {Feature} currentLine The current LineString|LinearRing being processed\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Iterate over line or ring coordinates in LineString, Polygon, MultiLineString, MultiPolygon Features or Geometries,\n * similar to Array.forEach.\n *\n * @name lineEach\n * @param {Geometry|Feature} geojson object\n * @param {Function} callback a method that takes (currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @example\n * var multiLine = turf.multiLineString([\n * [[26, 37], [35, 45]],\n * [[36, 53], [38, 50], [41, 55]]\n * ]);\n *\n * turf.lineEach(multiLine, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=currentLine\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * });\n */\nfunction lineEach(geojson, callback) {\n // validation\n if (!geojson) throw new Error(\"geojson is required\");\n\n flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n if (feature.geometry === null) return;\n var type = feature.geometry.type;\n var coords = feature.geometry.coordinates;\n switch (type) {\n case \"LineString\":\n if (callback(feature, featureIndex, multiFeatureIndex, 0, 0) === false)\n return false;\n break;\n case \"Polygon\":\n for (\n var geometryIndex = 0;\n geometryIndex < coords.length;\n geometryIndex++\n ) {\n if (\n callback(\n lineString(coords[geometryIndex], feature.properties),\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n }\n break;\n }\n });\n}\n\n/**\n * Callback for lineReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback lineReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentLine The current LineString|LinearRing being processed.\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name lineReduce\n * @param {Geometry|Feature} geojson object\n * @param {Function} callback a method that takes (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var multiPoly = turf.multiPolygon([\n * turf.polygon([[[12,48],[2,41],[24,38],[12,48]], [[9,44],[13,41],[13,45],[9,44]]]),\n * turf.polygon([[[5, 5], [0, 0], [2, 2], [4, 4], [5, 5]]])\n * ]);\n *\n * turf.lineReduce(multiPoly, function (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=previousValue\n * //=currentLine\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * return currentLine\n * });\n */\nfunction lineReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n lineEach(\n geojson,\n function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentLine;\n else\n previousValue = callback(\n previousValue,\n currentLine,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Finds a particular 2-vertex LineString Segment from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n * Point & MultiPoint will always return null.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.segmentIndex=0] Segment Index\n * @param {Object} [options.properties={}] Translate Properties to output LineString\n * @param {BBox} [options.bbox={}] Translate BBox to output LineString\n * @param {number|string} [options.id={}] Translate Id to output LineString\n * @returns {Feature} 2-vertex GeoJSON Feature LineString\n * @example\n * var multiLine = turf.multiLineString([\n * [[10, 10], [50, 30], [30, 40]],\n * [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findSegment(multiLine);\n * // => Feature>\n *\n * // First Segment of 2nd Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: 1});\n * // => Feature>\n *\n * // Last Segment of Last Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: -1, segmentIndex: -1});\n * // => Feature>\n */\nfunction findSegment(geojson, options) {\n // Optional Parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var segmentIndex = options.segmentIndex || 0;\n\n // Find FeatureIndex\n var properties = options.properties;\n var geometry;\n\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n\n // Find SegmentIndex\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1;\n return lineString(\n [coords[segmentIndex], coords[segmentIndex + 1]],\n properties,\n options\n );\n case \"Polygon\":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[geometryIndex].length + segmentIndex - 1;\n return lineString(\n [\n coords[geometryIndex][segmentIndex],\n coords[geometryIndex][segmentIndex + 1],\n ],\n properties,\n options\n );\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1;\n return lineString(\n [\n coords[multiFeatureIndex][segmentIndex],\n coords[multiFeatureIndex][segmentIndex + 1],\n ],\n properties,\n options\n );\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex =\n coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1;\n return lineString(\n [\n coords[multiFeatureIndex][geometryIndex][segmentIndex],\n coords[multiFeatureIndex][geometryIndex][segmentIndex + 1],\n ],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\n\n/**\n * Finds a particular Point from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.coordIndex=0] Coord Index\n * @param {Object} [options.properties={}] Translate Properties to output Point\n * @param {BBox} [options.bbox={}] Translate BBox to output Point\n * @param {number|string} [options.id={}] Translate Id to output Point\n * @returns {Feature} 2-vertex GeoJSON Feature Point\n * @example\n * var multiLine = turf.multiLineString([\n * [[10, 10], [50, 30], [30, 40]],\n * [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findPoint(multiLine);\n * // => Feature>\n *\n * // First Segment of the 2nd Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: 1});\n * // => Feature>\n *\n * // Last Segment of last Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: -1, coordIndex: -1});\n * // => Feature>\n */\nfunction findPoint(geojson, options) {\n // Optional Parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var coordIndex = options.coordIndex || 0;\n\n // Find FeatureIndex\n var properties = options.properties;\n var geometry;\n\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n\n // Find Coord Index\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n return point(coords, properties, options);\n case \"MultiPoint\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n return point(coords[multiFeatureIndex], properties, options);\n case \"LineString\":\n if (coordIndex < 0) coordIndex = coords.length + coordIndex;\n return point(coords[coordIndex], properties, options);\n case \"Polygon\":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (coordIndex < 0)\n coordIndex = coords[geometryIndex].length + coordIndex;\n return point(coords[geometryIndex][coordIndex], properties, options);\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (coordIndex < 0)\n coordIndex = coords[multiFeatureIndex].length + coordIndex;\n return point(coords[multiFeatureIndex][coordIndex], properties, options);\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (coordIndex < 0)\n coordIndex =\n coords[multiFeatureIndex][geometryIndex].length - coordIndex;\n return point(\n coords[multiFeatureIndex][geometryIndex][coordIndex],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\n\nexport { coordAll, coordEach, coordReduce, featureEach, featureReduce, findPoint, findSegment, flattenEach, flattenReduce, geomEach, geomReduce, lineEach, lineReduce, propEach, propReduce, segmentEach, segmentReduce };\n","import clone from '@turf/clone';\nimport booleanClockwise from '@turf/boolean-clockwise';\nimport { featureEach, geomEach } from '@turf/meta';\nimport { getCoords } from '@turf/invariant';\nimport { isObject, featureCollection } from '@turf/helpers';\n\n/**\n * Rewind {@link LineString|(Multi)LineString} or {@link Polygon|(Multi)Polygon} outer ring counterclockwise and inner rings clockwise (Uses {@link http://en.wikipedia.org/wiki/Shoelace_formula|Shoelace Formula}).\n *\n * @name rewind\n * @param {GeoJSON} geojson input GeoJSON Polygon\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.reverse=false] enable reverse winding\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)\n * @returns {GeoJSON} rewind Polygon\n * @example\n * var polygon = turf.polygon([[[121, -29], [138, -29], [138, -18], [121, -18], [121, -29]]]);\n *\n * var rewind = turf.rewind(polygon);\n *\n * //addToMap\n * var addToMap = [rewind];\n */\nfunction rewind(geojson, options) {\n // Optional parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var reverse = options.reverse || false;\n var mutate = options.mutate || false;\n\n // validation\n if (!geojson) throw new Error(\" is required\");\n if (typeof reverse !== \"boolean\")\n throw new Error(\" must be a boolean\");\n if (typeof mutate !== \"boolean\")\n throw new Error(\" must be a boolean\");\n\n // prevent input mutation\n if (mutate === false) geojson = clone(geojson);\n\n // Support Feature Collection or Geometry Collection\n var results = [];\n switch (geojson.type) {\n case \"GeometryCollection\":\n geomEach(geojson, function (geometry) {\n rewindFeature(geometry, reverse);\n });\n return geojson;\n case \"FeatureCollection\":\n featureEach(geojson, function (feature) {\n featureEach(rewindFeature(feature, reverse), function (result) {\n results.push(result);\n });\n });\n return featureCollection(results);\n }\n // Support Feature or Geometry Objects\n return rewindFeature(geojson, reverse);\n}\n\n/**\n * Rewind\n *\n * @private\n * @param {Geometry|Feature} geojson Geometry or Feature\n * @param {Boolean} [reverse=false] enable reverse winding\n * @returns {Geometry|Feature} rewind Geometry or Feature\n */\nfunction rewindFeature(geojson, reverse) {\n var type = geojson.type === \"Feature\" ? geojson.geometry.type : geojson.type;\n\n // Support all GeoJSON Geometry Objects\n switch (type) {\n case \"GeometryCollection\":\n geomEach(geojson, function (geometry) {\n rewindFeature(geometry, reverse);\n });\n return geojson;\n case \"LineString\":\n rewindLineString(getCoords(geojson), reverse);\n return geojson;\n case \"Polygon\":\n rewindPolygon(getCoords(geojson), reverse);\n return geojson;\n case \"MultiLineString\":\n getCoords(geojson).forEach(function (lineCoords) {\n rewindLineString(lineCoords, reverse);\n });\n return geojson;\n case \"MultiPolygon\":\n getCoords(geojson).forEach(function (lineCoords) {\n rewindPolygon(lineCoords, reverse);\n });\n return geojson;\n case \"Point\":\n case \"MultiPoint\":\n return geojson;\n }\n}\n\n/**\n * Rewind LineString - outer ring clockwise\n *\n * @private\n * @param {Array>} coords GeoJSON LineString geometry coordinates\n * @param {Boolean} [reverse=false] enable reverse winding\n * @returns {void} mutates coordinates\n */\nfunction rewindLineString(coords, reverse) {\n if (booleanClockwise(coords) === reverse) coords.reverse();\n}\n\n/**\n * Rewind Polygon - outer ring counterclockwise and inner rings clockwise.\n *\n * @private\n * @param {Array>>} coords GeoJSON Polygon geometry coordinates\n * @param {Boolean} [reverse=false] enable reverse winding\n * @returns {void} mutates coordinates\n */\nfunction rewindPolygon(coords, reverse) {\n // outer ring\n if (booleanClockwise(coords[0]) !== reverse) {\n coords[0].reverse();\n }\n // inner rings\n for (var i = 1; i < coords.length; i++) {\n if (booleanClockwise(coords[i]) === reverse) {\n coords[i].reverse();\n }\n }\n}\n\nexport default rewind;\n","import { flattenEach } from '@turf/meta';\nimport { featureCollection } from '@turf/helpers';\n\n/**\n * Flattens any {@link GeoJSON} to a {@link FeatureCollection} inspired by [geojson-flatten](https://github.com/tmcw/geojson-flatten).\n *\n * @name flatten\n * @param {GeoJSON} geojson any valid GeoJSON Object\n * @returns {FeatureCollection} all Multi-Geometries are flattened into single Features\n * @example\n * var multiGeometry = turf.multiPolygon([\n * [[[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]]],\n * [[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]],\n * [[100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2]]]\n * ]);\n *\n * var flatten = turf.flatten(multiGeometry);\n *\n * //addToMap\n * var addToMap = [flatten]\n */\nfunction flatten(geojson) {\n if (!geojson) throw new Error(\"geojson is required\");\n\n var results = [];\n flattenEach(geojson, function (feature) {\n results.push(feature);\n });\n return featureCollection(results);\n}\n\nexport default flatten;\n","import { geoPath } from 'd3-geo';\nimport { DATAVIEW_TYPE } from '../../constants';\nimport type { DataView } from '../../data-view';\nimport type { Parser } from '..';\nimport { mergeDeepImmer } from '../../utils/js';\nimport trufRewind from '@turf/rewind';\nimport flatten from '@turf/flatten';\nimport { isObject } from '@visactor/vutils';\n\nconst geoPathInstance = geoPath();\nexport interface IGeoJSONOptions {\n centroid?: boolean;\n name?: boolean;\n bbox?: boolean;\n rewind?:\n | boolean\n | {\n reverse?: boolean;\n };\n}\n\nexport const DEFAULT_GEOJSON_OPTIONS = {\n centroid: false,\n name: false,\n bbox: false,\n rewind: false\n};\nexport const MultiToSingle = (feature: any) => {\n if (feature.geometry.type.startsWith('Multi')) {\n const f = flatten(feature).features[0];\n return { ...f, ...f.properties };\n }\n return { ...feature, ...feature.properties };\n};\nexport const flattenFeature = (data: any[]) => {\n const featuresArr: any[] = [];\n data.forEach((item: any) => {\n if (item.type === 'FeatureCollection') {\n // featureCollection\n item.features.forEach((feature: any) => {\n featuresArr.push(MultiToSingle(feature));\n });\n } else {\n // feature\n featuresArr.push(MultiToSingle(item));\n }\n });\n return featuresArr;\n};\n\n/**\n * 解析geojson\n * @param data\n * @param _options\n * @param dataView\n * @returns\n */\nexport const geoJSONParser: Parser = (data: any, options: IGeoJSONOptions = {}, dataView: DataView) => {\n dataView.type = DATAVIEW_TYPE.GEO;\n\n const mergeOptions: IGeoJSONOptions = mergeDeepImmer(DEFAULT_GEOJSON_OPTIONS, options);\n\n const { centroid, name, bbox, rewind } = mergeOptions;\n if (Array.isArray(data)) {\n return flattenFeature(data);\n }\n let features: any[] = data.features;\n if (rewind) {\n features = trufRewind(data, { reverse: isObject(rewind) ? rewind.reverse : true }).features;\n }\n features.forEach(feature => {\n if (centroid) {\n const centroid = geoPathInstance.centroid(feature);\n feature.centroidX = centroid[0];\n feature.centroidY = centroid[1];\n }\n\n if (name) {\n feature.name = feature.properties.name;\n }\n\n if (bbox) {\n const bbox = geoPathInstance.bounds(feature);\n feature.bbox = bbox;\n }\n });\n\n data.features = features;\n return data;\n};\n","export default function(x) {\n return x;\n}\n","import reverse from \"./reverse.js\";\nimport transform from \"./transform.js\";\n\nexport default function(topology, o) {\n if (typeof o === \"string\") o = topology.objects[o];\n return o.type === \"GeometryCollection\"\n ? {type: \"FeatureCollection\", features: o.geometries.map(function(o) { return feature(topology, o); })}\n : feature(topology, o);\n}\n\nfunction feature(topology, o) {\n var id = o.id,\n bbox = o.bbox,\n properties = o.properties == null ? {} : o.properties,\n geometry = object(topology, o);\n return id == null && bbox == null ? {type: \"Feature\", properties: properties, geometry: geometry}\n : bbox == null ? {type: \"Feature\", id: id, properties: properties, geometry: geometry}\n : {type: \"Feature\", id: id, bbox: bbox, properties: properties, geometry: geometry};\n}\n\nexport function object(topology, o) {\n var transformPoint = transform(topology.transform),\n arcs = topology.arcs;\n\n function arc(i, points) {\n if (points.length) points.pop();\n for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n points.push(transformPoint(a[k], k));\n }\n if (i < 0) reverse(points, n);\n }\n\n function point(p) {\n return transformPoint(p);\n }\n\n function line(arcs) {\n var points = [];\n for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n if (points.length < 2) points.push(points[0]); // This should never happen per the specification.\n return points;\n }\n\n function ring(arcs) {\n var points = line(arcs);\n while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points.\n return points;\n }\n\n function polygon(arcs) {\n return arcs.map(ring);\n }\n\n function geometry(o) {\n var type = o.type, coordinates;\n switch (type) {\n case \"GeometryCollection\": return {type: type, geometries: o.geometries.map(geometry)};\n case \"Point\": coordinates = point(o.coordinates); break;\n case \"MultiPoint\": coordinates = o.coordinates.map(point); break;\n case \"LineString\": coordinates = line(o.arcs); break;\n case \"MultiLineString\": coordinates = o.arcs.map(line); break;\n case \"Polygon\": coordinates = polygon(o.arcs); break;\n case \"MultiPolygon\": coordinates = o.arcs.map(polygon); break;\n default: return null;\n }\n return {type: type, coordinates: coordinates};\n }\n\n return geometry(o);\n}\n","import identity from \"./identity.js\";\n\nexport default function(transform) {\n if (transform == null) return identity;\n var x0,\n y0,\n kx = transform.scale[0],\n ky = transform.scale[1],\n dx = transform.translate[0],\n dy = transform.translate[1];\n return function(input, i) {\n if (!i) x0 = y0 = 0;\n var j = 2, n = input.length, output = new Array(n);\n output[0] = (x0 += input[0]) * kx + dx;\n output[1] = (y0 += input[1]) * ky + dy;\n while (j < n) output[j] = input[j], ++j;\n return output;\n };\n}\n","export default function(array, n) {\n var t, j = array.length, i = j - n;\n while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}\n","import { feature } from 'topojson-client';\nimport type { Topology } from 'topojson-specification';\nimport { isString } from '@visactor/vutils';\nimport { DATAVIEW_TYPE } from '../../constants';\nimport type { DataView } from '../../data-view';\nimport type { Parser } from '..';\nimport { mergeDeepImmer } from '../../utils/js';\nimport type { IGeoJSONOptions } from './geojson';\nimport { DEFAULT_GEOJSON_OPTIONS, geoJSONParser } from './geojson';\n\nexport interface ITopoJsonParserOptions extends IGeoJSONOptions {\n object: string; // TopoJSON 相当于多个 GeoJSON 合并起来做了压缩,其中每一个 object 都相当于一份 GeoJSON 数据,指定 object 就是从中提取一份 Geo 数据\n}\n\nconst DEFAULT_TOPOJSON_OPTIONS = {};\n/**s\n * topojson 数据解析\n * @param data\n * @param options\n * @param dataView\n * @returns\n */\nexport const topoJSONParser: Parser = (data: Topology, options: ITopoJsonParserOptions, dataView: DataView) => {\n dataView.type = DATAVIEW_TYPE.GEO;\n const mergeOptions = mergeDeepImmer(DEFAULT_GEOJSON_OPTIONS, DEFAULT_TOPOJSON_OPTIONS, options);\n const { object } = mergeOptions;\n if (!isString(object)) {\n throw new TypeError('Invalid object: must be a string!');\n }\n const geoData = feature(data, data.objects[object]);\n return geoJSONParser(geoData, mergeOptions, dataView);\n};\n","import type { DataSet, Parser, Transform } from '@visactor/vdataset';\n\nexport function registerDataSetInstanceTransform(dataSet: DataSet, name: string, transform: Transform) {\n if (!dataSet.getTransform(name)) {\n dataSet.registerTransform(name, transform);\n }\n}\n\nexport function registerDataSetInstanceParser(dataSet: DataSet, name: string, parse: Parser) {\n if (!dataSet.getParser(name)) {\n dataSet.registerParser(name, parse);\n }\n}\n","import { DataSet, DataView, geoJSONParser, simplify, topoJSONParser } from '@visactor/vdataset';\nimport { warn } from '../../util/debug';\nimport type { GeoSourceType } from '../../typings/geo';\nimport { registerDataSetInstanceParser, registerDataSetInstanceTransform } from '../../data/register';\nimport { merge } from '@visactor/vutils';\n\nexport interface IGeoJsonOption {\n type: 'geojson';\n /** 计算中心点 */\n /** @default true */\n centroid?: boolean;\n /** 地图简化 */\n /** @default false */\n simplify?: boolean;\n /** 逆时针回绕(Multi)LineString或(Multi)Polygon的外部环,内部环顺时针。*/\n /** @default false */\n rewind?:\n | boolean\n | {\n /** 启用反向绕行 */\n /** @default false */\n reverse?: boolean;\n };\n}\n\nexport interface ITopoJsonOption extends Omit {\n type: 'topojson';\n object: string;\n}\n\nexport type GeoSourceOption = IGeoJsonOption | ITopoJsonOption;\n\nexport const geoSourceMap = new Map();\n\nlet mapDataSet: DataSet | null;\n\nfunction initMapDataSet() {\n if (mapDataSet) {\n return;\n }\n mapDataSet = new DataSet();\n registerDataSetInstanceParser(mapDataSet, 'geojson', geoJSONParser);\n registerDataSetInstanceParser(mapDataSet, 'topojson', topoJSONParser);\n registerDataSetInstanceTransform(mapDataSet, 'simplify', simplify);\n}\n\n/**\n * 1. 这个和mapSeries强绑定,后续可以考虑动态注册API\n * 2. 存成dataView而不是原始数据,是考虑减少parser的开销\n */\nexport function registerMapSource(\n key: string,\n source: GeoSourceType,\n option: GeoSourceOption = { type: 'geojson', centroid: true }\n) {\n if (geoSourceMap.has(key)) {\n warn(`map type of '${key}' already exists, will be overwritten.`);\n }\n initMapDataSet();\n const dataView = new DataView(mapDataSet!);\n const options: GeoSourceOption = merge({}, { centroid: true, simplify: false }, option);\n if (option.type === 'topojson') {\n dataView.parse(source, {\n type: 'topojson',\n options\n });\n } else {\n dataView.parse(source, {\n type: 'geojson',\n options\n });\n }\n\n if (option.simplify === true) {\n dataView.transform({ type: 'simplify' });\n }\n\n geoSourceMap.set(key, dataView);\n}\n\nexport function unregisterMapSource(key: string) {\n if (!geoSourceMap.has(key)) {\n warn(`map type of '${key}' does not exists.`);\n return;\n }\n geoSourceMap.delete(key);\n}\n\nexport function getMapSource(type: string) {\n return geoSourceMap.get(type);\n}\n\nexport function clearMapSource() {\n geoSourceMap.clear();\n mapDataSet = null;\n}\n","import { cloneDeep } from '@visactor/vutils';\nimport { DataView } from '@visactor/vdataset';\n\nfunction copyOneDataView(d: DataView, deep = false) {\n let _deep = deep;\n if (d.latestData instanceof DataView) {\n _deep = false;\n }\n if (_deep) {\n return cloneDeep(d.latestData);\n }\n\n return d.latestData.slice();\n}\n\n/**\n * 聚合统计主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果\n * @param data\n * @param options\n * @returns\n */\nexport const copyDataView = (data: Array, options?: ICopyDataViewOption) => {\n if (data.length === 0) {\n return [];\n }\n if (data.length === 1) {\n return copyOneDataView(data[0], options?.deep);\n }\n return data.map(d => copyOneDataView(d, options?.deep));\n};\n\nexport interface ICopyDataViewOption {\n deep?: boolean;\n}\n","import type { utilFunctionCtx } from '../typings/params';\nimport { warn, error } from '../util/debug';\nimport { isString, merge, cloneDeep } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { DataSet, DataView } from '@visactor/vdataset';\nimport type { IDataViewOptions, IFields, ITransformOptions } from '@visactor/vdataset';\nimport type { IDataValues, SheetParseOptions } from '../typings/spec/common';\nimport { registerDataSetInstanceTransform } from './register';\nimport { copyDataView } from './transforms/copy-data-view';\nimport type { IParserOptions } from '@visactor/vdataset/es/parser';\n\nexport function initializeData() {\n // todo\n}\n\nexport function initCSVData() {\n // todo\n}\n\nexport function initData() {\n // todo\n}\n\nexport function initFoldData() {\n // todo\n}\n\nexport function dataViewFromDataView(rawData: DataView, dataSet?: DataSet, op?: IDataViewOptions) {\n dataSet = dataSet instanceof DataSet ? dataSet : rawData.dataSet;\n registerDataSetInstanceTransform(dataSet, 'copyDataView', copyDataView);\n const viewData = new DataView(dataSet, op);\n viewData.parse([rawData], {\n type: 'dataview'\n });\n viewData.transform({\n type: 'copyDataView',\n level: TransformLevel.copyDataView\n });\n return viewData;\n}\n\n/**\n * 将数据实例化为 DataView\n * @param data 数据\n * @param dataSet 数据集\n * @returns\n */\nexport function dataToDataView(\n data: DataView | IDataValues,\n dataSet: DataSet,\n sourceDataViews: DataView[] = [],\n ctx: utilFunctionCtx = {}\n) {\n if (data instanceof DataView) {\n return data;\n }\n\n const { id, values = [], fromDataIndex, fromDataId, transforms = [] } = data;\n const parser = (data.parser ? cloneDeep(data.parser) : { clone: true }) as IParserOptions;\n const fields = cloneDeep(data.fields);\n // set parser.clone default value to true\n parser.clone = !(parser.clone === false);\n let dataView: DataView;\n const existDataView = sourceDataViews.find(dv => dv.name === id);\n if (existDataView) {\n dataView = existDataView;\n } else {\n const initOption: IDataViewOptions = { name: id };\n // fields 支持在dataView初始化参数中传入\n if (fields) {\n initOption.fields = fields as IFields;\n }\n dataView = new DataView(dataSet, initOption);\n if (typeof fromDataId === 'string') {\n // 使用id查找上游dataview\n const fromDataView = sourceDataViews.find(dv => dv.name === fromDataId);\n if (!fromDataView) {\n (ctx.onError ?? error)(`no data matches fromDataId ${fromDataId}`);\n return null;\n }\n\n dataView.parse([fromDataView], {\n type: 'dataview'\n });\n dataView.transform({\n type: 'copyDataView'\n });\n } else if (typeof fromDataIndex === 'number') {\n // 使用index查找上游dataview\n const fromDataView = sourceDataViews[fromDataIndex];\n if (!fromDataView) {\n (ctx.onError ?? error)(`no data matches fromDataIndex ${fromDataIndex}`);\n return null;\n }\n\n dataView.parse([fromDataView], {\n type: 'dataview'\n });\n dataView.transform({\n type: 'copyDataView'\n });\n } else if (Array.isArray(values)) {\n dataView.parse(values, parser);\n } else if (isString(values) && (!parser || ['csv', 'dsv', 'tsv'].includes((parser as SheetParseOptions).type))) {\n // 内置 csv parser\n dataView.parse(values, (parser as SheetParseOptions) ?? { type: 'csv' });\n } else {\n // 如果 values 不符合要求,则默认设置为 [],同时打印错误信息\n dataView.parse([]);\n warn('values should be array');\n }\n // 处理transform\n if (transforms && transforms.length) {\n transforms.forEach((transform: ITransformOptions) => {\n if (dataSet.getTransform(transform.type)) {\n dataView.transform(transform);\n }\n });\n }\n }\n\n return dataView;\n}\n\nexport function updateDataViewInData(dataView: DataView, data: IDataValues, forceMerge: boolean) {\n if (!dataView) {\n return;\n }\n if (data.fields) {\n dataView.setFields(data.fields as any, forceMerge);\n }\n dataView.parseNewData(data.values, data.parser as any);\n}\n\nexport enum TransformLevel {\n copyDataView = -10,\n\n treemapFilter = -8,\n treemapFlatten = -7,\n\n dotObjFlat = -7,\n linkDotInfo = -7,\n sankeyLayout = -7,\n\n dataZoomFilter = -6,\n legendFilter = -5\n}\n","import type { ISeriesStackData, ISeriesStackDataLeaf, ISeriesStackDataNode } from '../../series/interface';\nimport { isNil } from '@visactor/vutils';\nimport type { DataView } from '@visactor/vdataset';\nimport type { Datum } from '../../typings';\n\nexport interface IStackOption {\n fields: string[];\n}\n\nexport const stackSplit = (data: Array, op: IStackOption) => {\n const result: ISeriesStackData = {\n nodes: {}\n };\n const { fields } = op;\n if (!fields?.length) {\n return result;\n }\n const lastFieldIndex = fields.length - 1;\n let temp: ISeriesStackDataNode = result;\n let nextNode: ISeriesStackDataNode;\n let leaf: ISeriesStackDataLeaf;\n data.forEach(dv => {\n dv.latestData.forEach((d: Datum) => {\n temp = result;\n for (let i = 0; i < fields.length; i++) {\n const f = fields[i];\n const fV = d[f];\n if (isNil(fV)) {\n break;\n }\n if (!temp.nodes[fV]) {\n if (i === lastFieldIndex) {\n temp.nodes[fV] = { values: [] };\n } else {\n nextNode = { nodes: {} };\n temp.nodes[fV] = nextNode;\n }\n }\n if (i === lastFieldIndex) {\n leaf = temp.nodes[fV] as ISeriesStackDataLeaf;\n leaf.values.push(d);\n } else {\n temp = temp.nodes[fV] as ISeriesStackDataNode;\n }\n }\n });\n });\n return result;\n};\n","export type { MarkAnimationSpec } from '@visactor/vgrammar-core';\nimport type { ICompilable } from '../compile/interface';\n\nexport enum AnimationStateEnum {\n appear = 'appear',\n disappear = 'disappear',\n enter = 'enter',\n update = 'update',\n state = 'state',\n exit = 'exit',\n normal = 'normal',\n // for hack\n none = 'none'\n}\n\nexport type IAnimationState = keyof typeof AnimationStateEnum;\n\nexport interface IAnimateState {\n animationState: { callback: (datum: any, element: any) => AnimationStateEnum };\n}\n\nexport interface IAnimate extends ICompilable {\n id: number;\n updateAnimateState: (state: AnimationStateEnum, noRender?: boolean) => void;\n getAnimationStateSignalName: () => string;\n // TODO: animation control\n // pause: () => void;\n // resume: () => void;\n}\n\nexport interface ICartesianGroupAnimationParams {\n direction: () => 'x' | 'y';\n orient: () => 'positive' | 'negative';\n width: () => number;\n height: () => number;\n}\n","import type { IPointLike } from './data-structure';\n\nexport function getContainerSize(el: HTMLElement | null, defaultWidth: number = 0, defaultHeight: number = 0) {\n if (!el) {\n return { width: defaultWidth, height: defaultHeight };\n }\n\n let getComputedStyle;\n try {\n getComputedStyle = window?.getComputedStyle;\n } catch (e) {\n getComputedStyle = () => {\n return {} as CSSStyleDeclaration;\n };\n }\n\n const style = getComputedStyle(el);\n\n // clientWidth/clientHeight: 默认整数,会向上取整,导致canvas > container\n // getBoundingClientRect:默认小数,但是在container上有css类似 transform: scale(0.5)时,获取结果不对\n // getComputedStyle:默认小数,获取最终结果,但是会包含padding;\n\n if (/^(\\d*\\.?\\d+)(px)$/.exec(style.width)) {\n // 当dom元素的 display: 'none' 的时候,获取到的宽高会变成原始的样式配置,而不是计算后的像素值\n const computedWidth =\n parseFloat(style.width) - parseFloat(style.paddingLeft) - parseFloat(style.paddingRight) || el.clientWidth - 1;\n\n const computedHeight =\n parseFloat(style.height) - parseFloat(style.paddingTop) - parseFloat(style.paddingBottom) || el.clientHeight - 1;\n\n // 理论上不用向下取整,目前没加。\n return {\n width: computedWidth <= 0 ? defaultWidth : computedWidth,\n height: computedHeight <= 0 ? defaultHeight : computedHeight\n };\n }\n\n return { width: defaultWidth, height: defaultHeight };\n}\n\n/**\n * 获取元素的绝对位置坐标(相对于页面左上角)\n * @param element\n * @returns\n */\nexport function getElementAbsolutePosition(element: HTMLElement): IPointLike {\n const { x, y } = element.getBoundingClientRect();\n return { x, y };\n}\n\n/**\n * 获取元素的相对位置坐标(相对于其他dom元素)\n * @param element\n * @returns\n */\nexport function getElementRelativePosition(element: HTMLElement, base: HTMLElement): IPointLike {\n const posElement = getElementAbsolutePosition(element);\n const posBase = getElementAbsolutePosition(base);\n return { x: posElement.x - posBase.x, y: posElement.y - posBase.y };\n}\n\nexport const getScrollLeft = (element: HTMLElement) => {\n if (element === globalThis?.document?.body) {\n return globalThis?.document?.documentElement?.scrollLeft || element.scrollLeft;\n } else if (element.tagName.toLowerCase() === 'html') {\n return 0;\n }\n return element.scrollLeft;\n};\nexport const getScrollTop = (element: HTMLElement) => {\n if (element === globalThis?.document?.body) {\n return globalThis?.document?.documentElement?.scrollTop || element.scrollTop;\n } else if (element.tagName.toLowerCase() === 'html') {\n return 0;\n }\n return element.scrollTop;\n};\n\nexport const getScaleX = (element: HTMLElement) => {\n return element.getBoundingClientRect().width / element.offsetWidth;\n};\n\nexport const getScaleY = (element: HTMLElement) => {\n return element.getBoundingClientRect().height / element.offsetHeight;\n};\n\n/**\n * 获取目标元素的缩放因数\n * @param element 目标 dom 元素\n * @returns\n */\nexport const getScale = (element: HTMLElement) => {\n if (element.offsetWidth > 0) {\n return getScaleX(element);\n }\n return getScaleY(element);\n};\n\n/**\n * 判断是否是元素的父元素\n * @param element 从其父元素开始查找的 DOM 元素\n * @param target 要查找的目标父元素\n * @returns boolean, true 代表查找到,false 表示未找到\n */\nexport function hasParentElement(element: HTMLElement, target: HTMLElement): boolean {\n let parent = element.parentNode;\n\n while (parent !== null) {\n if (parent === target) {\n return true;\n }\n parent = parent.parentNode;\n }\n\n return false;\n}\n","export class Generator {\n private static auto_increment_id: number = 0;\n\n static GenAutoIncrementId(): number {\n return Generator.auto_increment_id++;\n }\n}\n","import { Generator } from '../generator';\nimport type { interfaces } from '../inversify-lite';\n\nexport class ContainerModule {\n id: number;\n registry: interfaces.ContainerModuleCallBack;\n\n constructor(registry: interfaces.ContainerModuleCallBack) {\n this.id = Generator.GenAutoIncrementId();\n this.registry = registry;\n }\n}\n","// Used for named bindings\nexport const NAMED_TAG = 'named';\n\n// The name of the target at design time\nexport const NAME_TAG = 'name';\n\n// The for unmanaged injections (in base classes when using inheritance)\nexport const UNMANAGED_TAG = 'unmanaged';\n\n// The for optional injections\nexport const OPTIONAL_TAG = 'optional';\n\n// The type of the binding at design time\nexport const INJECT_TAG = 'inject';\n\n// The type of the binding at design type for multi-injections\nexport const MULTI_INJECT_TAG = 'multi_inject';\n\n// used to store constructor arguments tags\nexport const TAGGED = 'inversify:tagged';\n\n// used to store class properties tags\nexport const TAGGED_PROP = 'inversify:tagged_props';\n\n// used to store types to be injected\nexport const PARAM_TYPES = 'inversify:paramtypes';\n\n// used to access design time types\nexport const DESIGN_PARAM_TYPES = 'design:paramtypes';\n\n// used to identify preDestroy functions\nexport const PRE_DESTROY = 'pre_destroy';\n\nfunction getNonCustomTagKeys(): string[] {\n return [INJECT_TAG, MULTI_INJECT_TAG, NAME_TAG, UNMANAGED_TAG, NAMED_TAG, OPTIONAL_TAG];\n}\n\nexport const NON_CUSTOM_TAG_KEYS: string[] = getNonCustomTagKeys();\n","export default (function(Reflect) {\n var target, previous;\n return function(exporter) {\n const hasOwn = Object.prototype.hasOwnProperty, supportsSymbol = \"function\" == typeof Symbol, toPrimitiveSymbol = supportsSymbol && void 0 !== Symbol.toPrimitive ? Symbol.toPrimitive : \"@@toPrimitive\", iteratorSymbol = supportsSymbol && void 0 !== Symbol.iterator ? Symbol.iterator : \"@@iterator\", supportsCreate = \"function\" == typeof Object.create, supportsProto = {\n __proto__: []\n } instanceof Array, downLevel = !supportsCreate && !supportsProto, HashMap = {\n create: supportsCreate ? function() {\n return MakeDictionary(Object.create(null));\n } : supportsProto ? function() {\n return MakeDictionary({\n __proto__: null\n });\n } : function() {\n return MakeDictionary({});\n },\n has: downLevel ? function(map, key) {\n return hasOwn.call(map, key);\n } : function(map, key) {\n return key in map;\n },\n get: downLevel ? function(map, key) {\n return hasOwn.call(map, key) ? map[key] : void 0;\n } : function(map, key) {\n return map[key];\n }\n }, functionPrototype = Object.getPrototypeOf(Function), usePolyfill = \"object\" == typeof process && process.env && \"true\" === process.env.REFLECT_METADATA_USE_MAP_POLYFILL, _Map = usePolyfill || \"function\" != typeof Map || \"function\" != typeof Map.prototype.entries ? CreateMapPolyfill() : Map, Metadata = (usePolyfill || \"function\" != typeof Set || \"function\" != typeof Set.prototype.entries ? CreateSetPolyfill() : Set, \n new (usePolyfill || \"function\" != typeof WeakMap ? CreateWeakMapPolyfill() : WeakMap));\n function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\n if (!IsObject(target)) throw new TypeError;\n return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n function hasMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target)) throw new TypeError;\n return IsUndefined(propertyKey) || (propertyKey = ToPropertyKey(propertyKey)), OrdinaryHasMetadata(metadataKey, target, propertyKey);\n }\n function hasOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target)) throw new TypeError;\n return IsUndefined(propertyKey) || (propertyKey = ToPropertyKey(propertyKey)), OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\n }\n function getMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target)) throw new TypeError;\n return IsUndefined(propertyKey) || (propertyKey = ToPropertyKey(propertyKey)), OrdinaryGetMetadata(metadataKey, target, propertyKey);\n }\n function GetOrCreateMetadataMap(O, P, Create) {\n let targetMetadata = Metadata.get(O);\n if (IsUndefined(targetMetadata)) {\n if (!Create) return;\n targetMetadata = new _Map, Metadata.set(O, targetMetadata);\n }\n let metadataMap = targetMetadata.get(P);\n if (IsUndefined(metadataMap)) {\n if (!Create) return;\n metadataMap = new _Map, targetMetadata.set(P, metadataMap);\n }\n return metadataMap;\n }\n function OrdinaryHasMetadata(MetadataKey, O, P) {\n if (OrdinaryHasOwnMetadata(MetadataKey, O, P)) return !0;\n const parent = OrdinaryGetPrototypeOf(O);\n return !IsNull(parent) && OrdinaryHasMetadata(MetadataKey, parent, P);\n }\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n const metadataMap = GetOrCreateMetadataMap(O, P, !1);\n return !IsUndefined(metadataMap) && ToBoolean(metadataMap.has(MetadataKey));\n }\n function OrdinaryGetMetadata(MetadataKey, O, P) {\n if (OrdinaryHasOwnMetadata(MetadataKey, O, P)) return OrdinaryGetOwnMetadata(MetadataKey, O, P);\n const parent = OrdinaryGetPrototypeOf(O);\n return IsNull(parent) ? void 0 : OrdinaryGetMetadata(MetadataKey, parent, P);\n }\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n const metadataMap = GetOrCreateMetadataMap(O, P, !1);\n if (!IsUndefined(metadataMap)) return metadataMap.get(MetadataKey);\n }\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n GetOrCreateMetadataMap(O, P, !0).set(MetadataKey, MetadataValue);\n }\n function Type(x) {\n if (null === x) return 1;\n switch (typeof x) {\n case \"undefined\":\n return 0;\n\n case \"boolean\":\n return 2;\n\n case \"string\":\n return 3;\n\n case \"symbol\":\n return 4;\n\n case \"number\":\n return 5;\n\n case \"object\":\n return null === x ? 1 : 6;\n\n default:\n return 6;\n }\n }\n function IsUndefined(x) {\n return void 0 === x;\n }\n function IsNull(x) {\n return null === x;\n }\n function IsSymbol(x) {\n return \"symbol\" == typeof x;\n }\n function IsObject(x) {\n return \"object\" == typeof x ? null !== x : \"function\" == typeof x;\n }\n function ToPrimitive(input, PreferredType) {\n switch (Type(input)) {\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n return input;\n }\n const hint = 3 === PreferredType ? \"string\" : 5 === PreferredType ? \"number\" : \"default\", exoticToPrim = GetMethod(input, toPrimitiveSymbol);\n if (void 0 !== exoticToPrim) {\n const result = exoticToPrim.call(input, hint);\n if (IsObject(result)) throw new TypeError;\n return result;\n }\n return OrdinaryToPrimitive(input, \"default\" === hint ? \"number\" : hint);\n }\n function OrdinaryToPrimitive(O, hint) {\n if (\"string\" === hint) {\n const toString_1 = O.toString;\n if (IsCallable(toString_1)) {\n const result = toString_1.call(O);\n if (!IsObject(result)) return result;\n }\n const valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n const result = valueOf.call(O);\n if (!IsObject(result)) return result;\n }\n } else {\n const valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n const result = valueOf.call(O);\n if (!IsObject(result)) return result;\n }\n const toString_2 = O.toString;\n if (IsCallable(toString_2)) {\n const result = toString_2.call(O);\n if (!IsObject(result)) return result;\n }\n }\n throw new TypeError;\n }\n function ToBoolean(argument) {\n return !!argument;\n }\n function ToString(argument) {\n return \"\" + argument;\n }\n function ToPropertyKey(argument) {\n const key = ToPrimitive(argument, 3);\n return IsSymbol(key) ? key : ToString(key);\n }\n function IsCallable(argument) {\n return \"function\" == typeof argument;\n }\n function GetMethod(V, P) {\n const func = V[P];\n if (null != func) {\n if (!IsCallable(func)) throw new TypeError;\n return func;\n }\n }\n function OrdinaryGetPrototypeOf(O) {\n const proto = Object.getPrototypeOf(O);\n if (\"function\" != typeof O || O === functionPrototype) return proto;\n if (proto !== functionPrototype) return proto;\n const prototype = O.prototype, prototypeProto = prototype && Object.getPrototypeOf(prototype);\n if (null == prototypeProto || prototypeProto === Object.prototype) return proto;\n const constructor = prototypeProto.constructor;\n return \"function\" != typeof constructor || constructor === O ? proto : constructor;\n }\n function CreateMapPolyfill() {\n const cacheSentinel = {}, arraySentinel = [], MapIterator = function() {\n function MapIterator(keys, values, selector) {\n this._index = 0, this._keys = keys, this._values = values, this._selector = selector;\n }\n return MapIterator.prototype[\"@@iterator\"] = function() {\n return this;\n }, MapIterator.prototype[iteratorSymbol] = function() {\n return this;\n }, MapIterator.prototype.next = function() {\n const index = this._index;\n if (index >= 0 && index < this._keys.length) {\n const result = this._selector(this._keys[index], this._values[index]);\n return index + 1 >= this._keys.length ? (this._index = -1, this._keys = arraySentinel, \n this._values = arraySentinel) : this._index++, {\n value: result,\n done: !1\n };\n }\n return {\n value: void 0,\n done: !0\n };\n }, MapIterator.prototype.throw = function(error) {\n throw this._index >= 0 && (this._index = -1, this._keys = arraySentinel, this._values = arraySentinel), \n error;\n }, MapIterator.prototype.return = function(value) {\n return this._index >= 0 && (this._index = -1, this._keys = arraySentinel, this._values = arraySentinel), \n {\n value: value,\n done: !0\n };\n }, MapIterator;\n }();\n return function() {\n function Map() {\n this._keys = [], this._values = [], this._cacheKey = cacheSentinel, this._cacheIndex = -2;\n }\n return Object.defineProperty(Map.prototype, \"size\", {\n get: function() {\n return this._keys.length;\n },\n enumerable: !0,\n configurable: !0\n }), Map.prototype.has = function(key) {\n return this._find(key, !1) >= 0;\n }, Map.prototype.get = function(key) {\n const index = this._find(key, !1);\n return index >= 0 ? this._values[index] : void 0;\n }, Map.prototype.set = function(key, value) {\n const index = this._find(key, !0);\n return this._values[index] = value, this;\n }, Map.prototype.delete = function(key) {\n const index = this._find(key, !1);\n if (index >= 0) {\n const size = this._keys.length;\n for (let i = index + 1; i < size; i++) this._keys[i - 1] = this._keys[i], this._values[i - 1] = this._values[i];\n return this._keys.length--, this._values.length--, key === this._cacheKey && (this._cacheKey = cacheSentinel, \n this._cacheIndex = -2), !0;\n }\n return !1;\n }, Map.prototype.clear = function() {\n this._keys.length = 0, this._values.length = 0, this._cacheKey = cacheSentinel, \n this._cacheIndex = -2;\n }, Map.prototype.keys = function() {\n return new MapIterator(this._keys, this._values, getKey);\n }, Map.prototype.values = function() {\n return new MapIterator(this._keys, this._values, getValue);\n }, Map.prototype.entries = function() {\n return new MapIterator(this._keys, this._values, getEntry);\n }, Map.prototype[\"@@iterator\"] = function() {\n return this.entries();\n }, Map.prototype[iteratorSymbol] = function() {\n return this.entries();\n }, Map.prototype._find = function(key, insert) {\n return this._cacheKey !== key && (this._cacheIndex = this._keys.indexOf(this._cacheKey = key)), \n this._cacheIndex < 0 && insert && (this._cacheIndex = this._keys.length, this._keys.push(key), \n this._values.push(void 0)), this._cacheIndex;\n }, Map;\n }();\n function getKey(key, _) {\n return key;\n }\n function getValue(_, value) {\n return value;\n }\n function getEntry(key, value) {\n return [ key, value ];\n }\n }\n function CreateSetPolyfill() {\n return function() {\n function Set() {\n this._map = new _Map;\n }\n return Object.defineProperty(Set.prototype, \"size\", {\n get: function() {\n return this._map.size;\n },\n enumerable: !0,\n configurable: !0\n }), Set.prototype.has = function(value) {\n return this._map.has(value);\n }, Set.prototype.add = function(value) {\n return this._map.set(value, value), this;\n }, Set.prototype.delete = function(value) {\n return this._map.delete(value);\n }, Set.prototype.clear = function() {\n this._map.clear();\n }, Set.prototype.keys = function() {\n return this._map.keys();\n }, Set.prototype.values = function() {\n return this._map.values();\n }, Set.prototype.entries = function() {\n return this._map.entries();\n }, Set.prototype[\"@@iterator\"] = function() {\n return this.keys();\n }, Set.prototype[iteratorSymbol] = function() {\n return this.keys();\n }, Set;\n }();\n }\n function CreateWeakMapPolyfill() {\n const UUID_SIZE = 16, keys = HashMap.create(), rootKey = CreateUniqueKey();\n return function() {\n function WeakMap() {\n this._key = CreateUniqueKey();\n }\n return WeakMap.prototype.has = function(target) {\n const table = GetOrCreateWeakMapTable(target, !1);\n return void 0 !== table && HashMap.has(table, this._key);\n }, WeakMap.prototype.get = function(target) {\n const table = GetOrCreateWeakMapTable(target, !1);\n return void 0 !== table ? HashMap.get(table, this._key) : void 0;\n }, WeakMap.prototype.set = function(target, value) {\n return GetOrCreateWeakMapTable(target, !0)[this._key] = value, this;\n }, WeakMap.prototype.delete = function(target) {\n const table = GetOrCreateWeakMapTable(target, !1);\n return void 0 !== table && delete table[this._key];\n }, WeakMap.prototype.clear = function() {\n this._key = CreateUniqueKey();\n }, WeakMap;\n }();\n function CreateUniqueKey() {\n let key;\n do {\n key = \"@@WeakMap@@\" + CreateUUID();\n } while (HashMap.has(keys, key));\n return keys[key] = !0, key;\n }\n function GetOrCreateWeakMapTable(target, create) {\n if (!hasOwn.call(target, rootKey)) {\n if (!create) return;\n Object.defineProperty(target, rootKey, {\n value: HashMap.create()\n });\n }\n return target[rootKey];\n }\n function FillRandomBytes(buffer, size) {\n for (let i = 0; i < size; ++i) buffer[i] = 255 * Math.random() | 0;\n return buffer;\n }\n function GenRandomBytes(size) {\n return \"function\" == typeof Uint8Array ? \"undefined\" != typeof crypto ? crypto.getRandomValues(new Uint8Array(size)) : FillRandomBytes(new Uint8Array(size), size) : FillRandomBytes(new Array(size), size);\n }\n function CreateUUID() {\n const data = GenRandomBytes(UUID_SIZE);\n data[6] = 79 & data[6] | 64, data[8] = 191 & data[8] | 128;\n let result = \"\";\n for (let offset = 0; offset < UUID_SIZE; ++offset) {\n const byte = data[offset];\n 4 !== offset && 6 !== offset && 8 !== offset || (result += \"-\"), byte < 16 && (result += \"0\"), \n result += byte.toString(16).toLowerCase();\n }\n return result;\n }\n }\n function MakeDictionary(obj) {\n return obj.__ = void 0, delete obj.__, obj;\n }\n exporter(\"defineMetadata\", defineMetadata), exporter(\"hasMetadata\", hasMetadata), \n exporter(\"hasOwnMetadata\", hasOwnMetadata), exporter(\"getMetadata\", getMetadata);\n }((target = Reflect, function(key, value) {\n \"function\" != typeof target[key] && Object.defineProperty(target, key, {\n configurable: !0,\n writable: !0,\n value: value\n }), previous && previous(key, value);\n })), Reflect;\n}({}));","import * as METADATA_KEY from '../metadata_keys';\nimport Reflect from '../../Reflect-metadata';\n\nexport function injectable() {\n return function unknown>(target: T) {\n (Reflect as any).defineMetadata(METADATA_KEY.PARAM_TYPES, null, target);\n\n return target;\n };\n}\n","import { NAMED_TAG } from './metadata_keys';\n\nexport class Metadata {\n key: string | number | symbol;\n value: unknown;\n\n constructor(key: string | number | symbol, value: unknown) {\n this.key = key;\n this.value = value;\n }\n\n toString() {\n if (this.key === NAMED_TAG) {\n return `named: ${String(this.value).toString()} `;\n }\n return `tagged: { key:${this.key.toString()}, value: ${String(this.value)} }`;\n }\n}\n","import { Metadata } from '../meta-data';\nimport { TAGGED } from '../metadata_keys';\nimport Reflect from '../../Reflect-metadata';\n\nfunction _tagParameterOrProperty(\n metadataKey: string,\n annotationTarget: NewableFunction,\n key: string | symbol,\n metadata: Metadata\n) {\n const metadatas: Metadata[] = [metadata];\n\n let paramsOrPropertiesMetadata: Record = {};\n // read metadata if available\n if ((Reflect as any).hasOwnMetadata(metadataKey, annotationTarget)) {\n paramsOrPropertiesMetadata = (Reflect as any).getMetadata(metadataKey, annotationTarget);\n }\n\n let paramOrPropertyMetadata: Metadata[] | undefined = paramsOrPropertiesMetadata[key as string];\n\n if (paramOrPropertyMetadata === undefined) {\n paramOrPropertyMetadata = [];\n }\n\n // set metadata\n paramOrPropertyMetadata.push(...metadatas);\n paramsOrPropertiesMetadata[key] = paramOrPropertyMetadata;\n (Reflect as any).defineMetadata(metadataKey, paramsOrPropertiesMetadata, annotationTarget);\n}\n\nfunction tagParameter(\n annotationTarget: DecoratorTarget,\n parameterName: string | symbol | undefined,\n parameterIndex: number,\n metadata: Metadata\n) {\n _tagParameterOrProperty(TAGGED, annotationTarget as ConstructorFunction, parameterIndex.toString(), metadata);\n}\n\nexport function createTaggedDecorator(metadata: Metadata) {\n return (target: DecoratorTarget, targetKey?: string | symbol, indexOrPropertyDescriptor?: number) => {\n tagParameter(target, targetKey, indexOrPropertyDescriptor, metadata);\n };\n}\n\ntype Prototype = {\n [Property in keyof T]: T[Property] extends NewableFunction ? T[Property] : T[Property] | undefined;\n} & { constructor: NewableFunction };\n\ninterface ConstructorFunction> {\n new (...args: unknown[]): T;\n prototype: Prototype;\n}\n\nexport type DecoratorTarget = ConstructorFunction | Prototype;\n\nexport function injectBase(metadataKey: string) {\n return (serviceIdentifier: any) => {\n return (target: DecoratorTarget, targetKey?: string | symbol, indexOrPropertyDescriptor?: number) => {\n return createTaggedDecorator(new Metadata(metadataKey, serviceIdentifier))(\n target,\n targetKey,\n indexOrPropertyDescriptor\n );\n };\n };\n}\n","import type { interfaces } from '../common/inversify-lite';\nimport type { IContributionProvider } from '../interface';\n\nexport const ContributionProvider = Symbol('ContributionProvider');\n\nclass ContributionProviderCache implements IContributionProvider {\n protected caches?: T[];\n protected serviceIdentifier: interfaces.ServiceIdentifier;\n protected container: interfaces.Container;\n\n constructor(serviceIdentifier: interfaces.ServiceIdentifier, container: interfaces.Container) {\n this.serviceIdentifier = serviceIdentifier;\n this.container = container;\n }\n\n getContributions(): T[] {\n if (!this.caches) {\n this.caches = [];\n this.container &&\n this.container.isBound(this.serviceIdentifier) &&\n this.caches.push(...this.container.getAll(this.serviceIdentifier));\n }\n return this.caches;\n }\n}\n\nexport function bindContributionProvider(bind: interfaces.Bind, id: any): void {\n bind(ContributionProvider)\n .toDynamicValue(({ container }) => new ContributionProviderCache(id, container))\n .inSingletonScope()\n .whenTargetNamed(id);\n}\n\nexport function bindContributionProviderNoSingletonScope(bind: interfaces.Bind, id: any): void {\n bind(ContributionProvider)\n .toDynamicValue(({ container }) => new ContributionProviderCache(id, container))\n .whenTargetNamed(id);\n}\n","import type { AsArray, FullTap, IfSet, Tap, UnsetAdditionalOptions } from '../interface';\n\n/**\n * 参考 https://github.com/webpack/tapable\n * The MIT License\n\n Copyright JS Foundation and other contributors\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\nexport abstract class Hook {\n private _args: string[];\n readonly name?: string;\n taps: FullTap[];\n\n constructor(args: string[], name?: string) {\n this._args = args;\n this.name = name;\n this.taps = [];\n // this.interceptors = [];\n // this._call = CALL_DELEGATE;\n // this.call = CALL_DELEGATE;\n // this._callAsync = CALL_ASYNC_DELEGATE;\n // this.callAsync = CALL_ASYNC_DELEGATE;\n // this._promise = PROMISE_DELEGATE;\n // this.promise = PROMISE_DELEGATE;\n // this._x = undefined;\n\n // this.tapAsync = this.tapAsync;\n // this.tapPromise = this.tapPromise;\n }\n\n // abstract compile(options: ICompileOptions): void;\n\n tap(options: string | (Tap & IfSet), fn: (...args: AsArray) => R): void {\n this._tap('sync', options, fn);\n }\n\n unTap(options: string | (Tap & IfSet), fn?: (...args: AsArray) => R): void {\n const name = typeof options === 'string' ? options.trim() : options.name;\n\n if (name) {\n this.taps = this.taps.filter(tap => tap.name !== name && (!fn || tap.fn === fn));\n }\n }\n\n private _parseOptions(\n type: string,\n options: string | (Tap & IfSet),\n fn: (...args: AsArray) => R\n ) {\n let _options: FullTap;\n if (typeof options === 'string') {\n _options = {\n name: options.trim()\n } as any;\n } else if (typeof options !== 'object' || options === null) {\n throw new Error('Invalid tap options');\n }\n if (typeof _options.name !== 'string' || _options.name === '') {\n throw new Error('Missing name for tap');\n }\n _options = Object.assign({ type, fn }, _options);\n\n return _options;\n }\n\n private _tap(type: string, options: string | (Tap & IfSet), fn: (...args: AsArray) => R) {\n this._insert(this._parseOptions(type, options, fn));\n }\n\n private _insert(item: FullTap) {\n let before;\n if (typeof item.before === 'string') {\n before = new Set([item.before]);\n } else if (Array.isArray(item.before)) {\n before = new Set(item.before);\n }\n let stage = 0;\n if (typeof item.stage === 'number') {\n stage = item.stage;\n }\n let i = this.taps.length;\n while (i > 0) {\n i--;\n const x = this.taps[i];\n this.taps[i + 1] = x;\n const xStage = x.stage || 0;\n if (before) {\n if (before.has(x.name)) {\n before.delete(x.name);\n continue;\n }\n if (before.size > 0) {\n continue;\n }\n }\n if (xStage > stage) {\n continue;\n }\n i++;\n break;\n }\n this.taps[i] = item;\n }\n}\n","import type { AsArray, ISyncHook, UnsetAdditionalOptions } from '../interface';\nimport { Hook } from './Hook';\n\n/**\n * 参考 https://github.com/webpack/tapable\n * The MIT License\n\n Copyright JS Foundation and other contributors\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\nexport class SyncHook\n extends Hook\n implements ISyncHook\n{\n call(...args: AsArray): R {\n const cbs = this.taps.map(t => t.fn);\n cbs.forEach(cb => cb(...args));\n return undefined;\n }\n}\n","export const EnvContribution = Symbol.for('EnvContribution');\nexport const VGlobal = Symbol.for('VGlobal');\n","import { inject, injectable, named } from '../common/inversify-lite';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../common/contribution-provider';\nimport type {\n CreateDOMParamsType,\n EnvType,\n IContributionProvider,\n ICreateCanvasParams,\n IEnvContribution,\n IEnvParamsMap,\n IGlobal,\n ISyncHook\n} from '../interface';\nimport { SyncHook } from '../tapable';\nimport { EnvContribution } from '../constants';\nimport type { IAABBBoundsLike } from '@visactor/vutils';\nimport { container } from '../container';\nimport { Generator } from '../common/generator';\n\nconst defaultEnv: EnvType = 'browser';\n@injectable()\nexport class DefaultGlobal implements IGlobal {\n readonly id: number;\n private _env: EnvType;\n private _isSafari?: boolean;\n private _isChrome?: boolean;\n get env(): EnvType {\n return this._env;\n }\n private envContribution: IEnvContribution;\n\n get devicePixelRatio(): number {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getDevicePixelRatio();\n }\n\n get supportEvent(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.supportEvent;\n }\n\n set supportEvent(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.supportEvent = support;\n }\n\n get supportsTouchEvents(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.supportsTouchEvents;\n }\n\n set supportsTouchEvents(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.supportsTouchEvents = support;\n }\n\n get supportsPointerEvents(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.supportsPointerEvents;\n }\n\n set supportsPointerEvents(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.supportsPointerEvents = support;\n }\n\n get supportsMouseEvents(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.supportsMouseEvents;\n }\n\n set supportsMouseEvents(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.supportsMouseEvents = support;\n }\n\n get applyStyles(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.applyStyles;\n }\n\n set applyStyles(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.applyStyles = support;\n }\n\n // 是否在不显示canvas的时候停止绘图操作,默认false\n optimizeVisible: boolean;\n\n envParams?: any;\n declare measureTextMethod: 'native' | 'simple' | 'quick';\n declare hooks: {\n onSetEnv: ISyncHook<[EnvType | undefined, EnvType, IGlobal]>;\n };\n\n constructor(\n // todo: 不需要创建,动态获取就行?\n @inject(ContributionProvider)\n @named(EnvContribution)\n protected readonly contributions: IContributionProvider\n ) {\n this.id = Generator.GenAutoIncrementId();\n this.hooks = {\n onSetEnv: new SyncHook<[EnvType | undefined, EnvType, IGlobal]>(['lastEnv', 'env', 'global'])\n };\n this.measureTextMethod = 'native';\n this.optimizeVisible = false;\n }\n\n protected bindContribution(params?: any): void | Promise {\n const promiseArr: any[] = [];\n this.contributions.getContributions().forEach(contribution => {\n const data = contribution.configure(this, params);\n if ((data as any) && (data as any).then) {\n promiseArr.push(data);\n }\n });\n if (promiseArr.length) {\n return Promise.all(promiseArr);\n }\n }\n\n /**\n * 获取动态canvas的数量,offscreenCanvas或者framebuffer\n */\n getDynamicCanvasCount(): number {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getDynamicCanvasCount();\n }\n\n /**\n * 获取静态canvas的数量,纯粹canvas\n */\n getStaticCanvasCount(): number {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getStaticCanvasCount();\n }\n\n /**\n * 设置当前环境\n * @param env\n * @param params 环境参数\n * 默认重复设置不生效,但如果params.force为true那么每次设置env都会重复执行初始化逻辑\n * @returns\n */\n setEnv(env: EnvType, params?: IEnvParamsMap[EnvType]): void | Promise {\n // 如果环境设置过了,但是没有设置force为true,就直接跳过\n if (!(params && params.force === true) && this._env === env) {\n return;\n }\n this.deactiveCurrentEnv();\n return this.activeEnv(env, params);\n }\n\n protected deactiveCurrentEnv() {\n this.envContribution && this.envContribution.release();\n }\n\n protected activeEnv(env: EnvType, params?: IEnvParamsMap[EnvType]): void | Promise {\n const lastEnv = this._env;\n this._env = env;\n const data = this.bindContribution(params);\n if (data && data.then) {\n return data.then(() => {\n this.envParams = params;\n this.hooks.onSetEnv.call(lastEnv, env, this);\n });\n }\n this.envParams = params;\n this.hooks.onSetEnv.call(lastEnv, env, this);\n }\n\n setActiveEnvContribution(contribution: IEnvContribution) {\n this.envContribution = contribution;\n }\n\n createCanvas(params: ICreateCanvasParams) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.createCanvas(params);\n }\n\n createOffscreenCanvas(params: ICreateCanvasParams) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.createOffscreenCanvas(params);\n }\n\n releaseCanvas(canvas: HTMLCanvasElement | string | any) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.releaseCanvas(canvas);\n }\n\n addEventListener(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void;\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions\n ): void {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.addEventListener(type, listener, options);\n }\n removeEventListener(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions\n ): void {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.removeEventListener(type, listener, options);\n }\n dispatchEvent(event: any): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.dispatchEvent(event);\n }\n\n getRequestAnimationFrame() {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getRequestAnimationFrame();\n }\n\n getCancelAnimationFrame() {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getCancelAnimationFrame();\n }\n\n getElementById(str: string): HTMLElement | null {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n if (!this.envContribution.getElementById) {\n return null;\n }\n return this.envContribution.getElementById(str);\n }\n\n getRootElement(): HTMLElement | null {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n if (!this.envContribution.getRootElement) {\n return null;\n }\n return this.envContribution.getRootElement();\n }\n\n getDocument(): Document | null {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n if (!this.envContribution.getDocument) {\n return null;\n }\n return this.envContribution.getDocument();\n }\n\n mapToCanvasPoint(event: any, domElement?: any) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n if (!this.envContribution.mapToCanvasPoint) {\n return null;\n }\n return this.envContribution.mapToCanvasPoint(event, domElement);\n }\n\n loadImage(url: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadImage(url);\n }\n\n loadSvg(str: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadSvg(str);\n }\n\n loadJson(url: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadJson(url);\n }\n\n loadArrayBuffer(url: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadArrayBuffer(url);\n }\n\n loadBlob(url: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadBlob(url);\n }\n\n isChrome(): boolean {\n if (this._isChrome != null) {\n return this._isChrome;\n }\n if (!this._env) {\n this.setEnv('browser');\n }\n this._isChrome = this._env === 'browser' && navigator.userAgent.indexOf('Chrome') > -1;\n return this._isChrome;\n }\n\n isSafari(): boolean {\n if (this._isSafari != null) {\n return this._isSafari;\n }\n if (!this._env) {\n this.setEnv('browser');\n }\n this._isSafari =\n this._env === 'browser' && /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent);\n return this._isSafari;\n }\n\n getNativeAABBBounds(dom: string | HTMLElement | any): IAABBBoundsLike {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.getNativeAABBBounds(dom);\n }\n\n removeDom(dom: HTMLElement): boolean {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.removeDom(dom);\n }\n\n createDom(params: CreateDOMParamsType): HTMLElement | null {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.createDom(params);\n }\n\n getElementTop(dom: any, baseWindow: boolean = false): number {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.getElementTop(dom, baseWindow);\n }\n getElementLeft(dom: any, baseWindow: boolean = false): number {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.getElementLeft(dom, baseWindow);\n }\n getElementTopLeft(dom: any, baseWindow: boolean = false): { top: number; left: number } {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.getElementTopLeft(dom, baseWindow);\n }\n}\n","import { tau } from \"./math\";\n\nexport function degreeToRadian(degree) {\n return degree * (Math.PI / 180);\n}\n\nexport function radianToDegree(radian) {\n return 180 * radian / Math.PI;\n}\n\nexport const clampRadian = (angle = 0) => {\n if (angle < 0) for (;angle < -tau; ) angle += tau; else if (angle > 0) for (;angle > tau; ) angle -= tau;\n return angle;\n};\n\nexport const clampAngleByRadian = clampRadian;\n\nexport const clampDegree = (a = 0) => a > 360 || a < -360 ? a % 360 : a;\n\nexport const clampAngleByDegree = clampDegree;\n\nexport function polarToCartesian(center, radius, angleInRadian) {\n return {\n x: center.x + radius * Math.cos(angleInRadian),\n y: center.y + radius * Math.sin(angleInRadian)\n };\n}\n\nexport function getAngleByPoint(center, point) {\n return Math.atan2(point.y - center.y, point.x - center.x);\n}","import { radianToDegree } from '../angle';\nimport type { vec2 } from '../math';\nimport { cos, sin } from '../math';\nimport type { IPointLike } from './point';\n\nexport interface IMatrixLike {\n a: number;\n /**\n * skew y\n */\n b: number;\n /**\n * skewx\n */\n c: number;\n /**\n * scale y\n */\n d: number;\n /**\n * translate x\n */\n e: number;\n /**\n * translate y\n */\n f: number;\n}\n\n// 不建议用户直接操作matrix\nexport interface IMatrix {\n /**\n * scale x\n */\n a: number;\n /**\n * skew y\n */\n b: number;\n /**\n * skewx\n */\n c: number;\n /**\n * scale y\n */\n d: number;\n /**\n * translate x\n */\n e: number;\n /**\n * translate y\n */\n f: number;\n\n setValue: (a: number, b: number, c: number, d: number, e: number, f: number) => IMatrix;\n /**\n * 获取当前矩阵的逆矩阵\n */\n getInverse: () => IMatrix;\n rotate: (rad: number) => IMatrix;\n rotateByCenter: (rad: number, cx: number, cy: number) => IMatrix;\n scale: (sx: number, sy: number) => IMatrix;\n setScale: (sx: number, sy: number) => IMatrix;\n transform: (a: number, b: number, c: number, d: number, e: number, f: number) => IMatrix;\n translate: (x: number, y: number) => IMatrix;\n transpose: () => IMatrix;\n equalToMatrix: (m2: IMatrixLike) => boolean;\n equalTo: (a2: number, b2: number, c2: number, d2: number, e2: number, f2: number) => boolean;\n /**\n * 矩阵相乘\n * @param matrix\n */\n multiply: (a2: number, b2: number, c2: number, d2: number, e2: number, f2: number) => IMatrix;\n /**\n * 插值计算\n * @param m2\n * @param t\n */\n interpolate: (m2: IMatrix, t: number) => IMatrix;\n\n // 将point转到当前矩阵的坐标空间中\n transformPoint: (source: IPointLike, target: IPointLike) => void;\n\n reset: () => IMatrix;\n\n // 是否只有translate\n onlyTranslate: (scale?: number) => boolean;\n\n clone: () => IMatrix;\n\n toTransformAttrs: () => {\n x: number;\n y: number;\n scaleX: number;\n scaleY: number;\n skewX: number;\n skewY: number;\n rotateDeg: number;\n };\n}\n\nexport class Matrix implements IMatrix {\n /**\n * scale x\n */\n a: number;\n /**\n * skew y\n */\n b: number;\n /**\n * skewx\n */\n c: number;\n /**\n * scale y\n */\n d: number;\n /**\n * translate x\n */\n e: number;\n /**\n * translate y\n */\n f: number;\n\n constructor(a: number = 1, b: number = 0, c: number = 0, d: number = 1, e: number = 0, f: number = 0) {\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n }\n\n equalToMatrix(m2: IMatrixLike): boolean {\n // ef -> ad -> bc\n return !(\n this.e !== m2.e ||\n this.f !== m2.f ||\n this.a !== m2.a ||\n this.d !== m2.d ||\n this.b !== m2.b ||\n this.c !== m2.c\n );\n }\n equalTo(a: number, b: number, c: number, d: number, e: number, f: number): boolean {\n // ef -> ad -> bc\n return !(this.e !== e || this.f !== f || this.a !== a || this.d !== d || this.b !== b || this.c !== c);\n }\n\n setValue(a: number, b: number, c: number, d: number, e: number, f: number) {\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n return this;\n }\n\n reset(): this {\n this.a = 1;\n this.b = 0;\n this.c = 0;\n this.d = 1;\n this.e = 0;\n this.f = 0;\n return this;\n }\n\n /**\n * 获取当前矩阵的逆矩阵\n */\n getInverse() {\n const a = this.a;\n const b = this.b;\n const c = this.c;\n const d = this.d;\n const e = this.e;\n const f = this.f;\n const m = new Matrix();\n const dt = a * d - b * c;\n\n m.a = d / dt;\n m.b = -b / dt;\n m.c = -c / dt;\n m.d = a / dt;\n m.e = (c * f - d * e) / dt;\n m.f = -(a * f - b * e) / dt;\n\n return m;\n }\n\n rotate(rad: number) {\n const c = Math.cos(rad);\n const s = Math.sin(rad);\n const m11 = this.a * c + this.c * s;\n const m12 = this.b * c + this.d * s;\n const m21 = this.a * -s + this.c * c;\n const m22 = this.b * -s + this.d * c;\n this.a = m11;\n this.b = m12;\n this.c = m21;\n this.d = m22;\n return this;\n }\n\n rotateByCenter(rad: number, cx: number, cy: number) {\n /** rotate matrix\n * | cos -sin (1-cos)*cx+sin*cy |\n * | sin cos (1-cos)*cy-sin*cx |\n * | 0 0 1 |\n * after multiply\n * m13 = (1-cos)*cx+sin*cy;\n * m23 = (1-cos)*cy-sin*cx;\n * | cos*a-sin*b cos*c-sin*d cos*e-sin*f+m13 |\n * | sin*a+cos*b sin*c+cos*d sin*e+cos*f+m23 |\n * | 0 0 1 |\n */\n const cos = Math.cos(rad);\n const sin = Math.sin(rad);\n const rotateM13 = (1 - cos) * cx + sin * cy;\n const rotateM23 = (1 - cos) * cy - sin * cx;\n const m11 = cos * this.a - sin * this.b;\n const m21 = sin * this.a + cos * this.b;\n const m12 = cos * this.c - sin * this.d;\n const m22 = sin * this.c + cos * this.d;\n const m13 = cos * this.e - sin * this.f + rotateM13;\n const m23 = sin * this.e + cos * this.f + rotateM23;\n this.a = m11;\n this.b = m21;\n this.c = m12;\n this.d = m22;\n this.e = m13;\n this.f = m23;\n return this;\n }\n\n scale(sx: number, sy: number) {\n this.a *= sx;\n this.b *= sx;\n this.c *= sy;\n this.d *= sy;\n return this;\n }\n\n setScale(sx: number, sy: number) {\n this.b = (this.b / this.a) * sx;\n this.c = (this.c / this.d) * sy;\n this.a = sx;\n this.d = sy;\n return this;\n }\n\n transform(a: number, b: number, c: number, d: number, e: number, f: number) {\n this.multiply(a, b, c, d, e, f);\n return this;\n }\n\n translate(x: number, y: number) {\n this.e += this.a * x + this.c * y;\n this.f += this.b * x + this.d * y;\n return this;\n }\n\n transpose() {\n /** transpose matrix\n * | 0 1 0 |\n * | 1 0 0 |\n * | 0 0 1 |\n * after multiply\n * | b d f |\n * | a c e |\n * | 0 0 1 |\n */\n const { a, b, c, d, e, f } = this;\n this.a = b;\n this.b = a;\n this.c = d;\n this.d = c;\n this.e = f;\n this.f = e;\n return this;\n }\n\n /**\n * 矩阵相乘\n * @param matrix\n */\n multiply(a2: number, b2: number, c2: number, d2: number, e2: number, f2: number) {\n const a1 = this.a;\n const b1 = this.b;\n const c1 = this.c;\n const d1 = this.d;\n const e1 = this.e;\n const f1 = this.f;\n\n const m11 = a1 * a2 + c1 * b2;\n const m12 = b1 * a2 + d1 * b2;\n const m21 = a1 * c2 + c1 * d2;\n const m22 = b1 * c2 + d1 * d2;\n const dx = a1 * e2 + c1 * f2 + e1;\n const dy = b1 * e2 + d1 * f2 + f1;\n\n this.a = m11;\n this.b = m12;\n this.c = m21;\n this.d = m22;\n this.e = dx;\n this.f = dy;\n return this;\n }\n\n /**\n * 插值计算\n * @param m2\n * @param t\n */\n interpolate(m2: Matrix, t: number) {\n const m = new Matrix();\n\n m.a = this.a + (m2.a - this.a) * t;\n m.b = this.b + (m2.b - this.b) * t;\n m.c = this.c + (m2.c - this.c) * t;\n m.d = this.d + (m2.d - this.d) * t;\n m.e = this.e + (m2.e - this.e) * t;\n m.f = this.f + (m2.f - this.f) * t;\n\n return m;\n }\n\n /**\n * 将point转到当前矩阵的坐标空间中\n * @param source\n * @param target\n */\n transformPoint(source: IPointLike, target: IPointLike) {\n const { a, b, c, d, e, f } = this;\n const dt = a * d - b * c;\n\n const nextA = d / dt;\n const nextB = -b / dt;\n const nextC = -c / dt;\n const nextD = a / dt;\n const nextE = (c * f - d * e) / dt;\n const nextF = -(a * f - b * e) / dt;\n\n const { x, y } = source;\n target.x = x * nextA + y * nextC + nextE;\n target.y = x * nextB + y * nextD + nextF;\n }\n\n // 只有translate\n onlyTranslate(scale: number = 1): boolean {\n return this.a === scale && this.b === 0 && this.c === 0 && this.d === scale;\n }\n\n clone(): Matrix {\n return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n }\n\n toTransformAttrs() {\n const a = this.a;\n const b = this.b;\n const c = this.c;\n const d = this.d;\n const e = this.e;\n const f = this.f;\n\n const delta = a * d - b * c;\n\n const result = {\n x: e,\n y: f,\n rotateDeg: 0,\n scaleX: 0,\n scaleY: 0,\n skewX: 0,\n skewY: 0\n };\n\n // Apply the QR-like decomposition.\n if (a !== 0 || b !== 0) {\n const r = Math.sqrt(a * a + b * b);\n result.rotateDeg = b > 0 ? Math.acos(a / r) : -Math.acos(a / r);\n result.scaleX = r;\n result.scaleY = delta / r;\n result.skewX = (a * c + b * d) / delta;\n result.skewY = 0;\n } else if (c !== 0 || d !== 0) {\n const s = Math.sqrt(c * c + d * d);\n result.rotateDeg = Math.PI / 2 - (d > 0 ? Math.acos(-c / s) : -Math.acos(c / s));\n result.scaleX = delta / s;\n result.scaleY = s;\n result.skewX = 0;\n result.skewY = (a * c + b * d) / delta;\n } else {\n // a = b = c = d = 0\n }\n\n result.rotateDeg = radianToDegree(result.rotateDeg);\n\n return result;\n }\n}\n\n/**\n * 对matrix进行通常的变换(基于rotateCenter进行旋转的同时进行translate和scale)\n * @param out\n * @param origin\n * @param x\n * @param y\n * @param scaleX\n * @param scaleY\n * @param angle\n * @param rotateCenter\n */\nexport function normalTransform(\n out: Matrix,\n origin: Matrix,\n x: number,\n y: number,\n scaleX: number,\n scaleY: number,\n angle: number,\n rotateCenter?: vec2\n) {\n const oa = origin.a;\n const ob = origin.b;\n const oc = origin.c;\n const od = origin.d;\n const oe = origin.e;\n const of = origin.f;\n const cosTheta = cos(angle);\n const sinTheta = sin(angle);\n let rotateCenterX: number;\n let rotateCenterY: number;\n if (rotateCenter) {\n rotateCenterX = rotateCenter[0];\n rotateCenterY = rotateCenter[1];\n } else {\n rotateCenterX = x;\n rotateCenterY = y;\n }\n const offsetX = rotateCenterX - x;\n const offsetY = rotateCenterY - y;\n\n const a1 = oa * cosTheta + oc * sinTheta;\n const b1 = ob * cosTheta + od * sinTheta;\n const c1 = oc * cosTheta - oa * sinTheta;\n const d1 = od * cosTheta - ob * sinTheta;\n out.a = scaleX * a1;\n out.b = scaleX * b1;\n out.c = scaleY * c1;\n out.d = scaleY * d1;\n\n out.e = oe + oa * rotateCenterX + oc * rotateCenterY - a1 * offsetX - c1 * offsetY;\n out.f = of + ob * rotateCenterX + od * rotateCenterY - b1 * offsetX - d1 * offsetY;\n}\n","import type { IBounds } from '@visactor/vutils';\nimport { halfPi, tau } from '@visactor/vutils';\nimport type { IPath2D } from '../interface';\n\nconst circleThreshold = tau - 1e-8;\n\n/**\n * 借鉴 https://github.com/vega/vega/blob/b45cf431cd6c0d0c0e1567f087f9b3b55bc236fa/packages/vega-scenegraph/src/bound/boundContext.js\n * Copyright (c) 2015-2023, University of Washington Interactive Data Lab\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n 3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nexport class BoundsContext implements IPath2D {\n bounds: IBounds;\n constructor(bounds: IBounds) {\n this.init(bounds);\n }\n\n init(bounds: IBounds) {\n this.bounds = bounds;\n }\n\n // @ts-ignore\n arc(cx: number, cy: number, r: number, sa: number, ea: number, ccw: boolean) {\n if (Math.abs(ea - sa) > circleThreshold) {\n this.bounds.add(cx - r, cy - r);\n this.bounds.add(cx + r, cy + r);\n return;\n }\n\n let xmin = Infinity;\n let xmax = -Infinity;\n let ymin = Infinity;\n let ymax = -Infinity;\n let s;\n let i;\n let x;\n let y;\n\n function update(a: number) {\n x = r * Math.cos(a);\n y = r * Math.sin(a);\n if (x < xmin) {\n xmin = x;\n }\n if (x > xmax) {\n xmax = x;\n }\n if (y < ymin) {\n ymin = y;\n }\n if (y > ymax) {\n ymax = y;\n }\n }\n\n // Sample end points and interior points aligned with 90 degrees\n update(sa);\n update(ea);\n\n if (ea !== sa) {\n sa = sa % tau;\n if (sa < 0) {\n sa += tau;\n }\n ea = ea % tau;\n if (ea < 0) {\n ea += tau;\n }\n\n if (ea < sa) {\n ccw = !ccw; // flip direction\n s = sa;\n sa = ea;\n ea = s; // swap end-points\n }\n\n if (ccw) {\n ea -= tau;\n s = sa - (sa % halfPi);\n for (i = 0; i < 4 && s > ea; ++i, s -= halfPi) {\n update(s);\n }\n } else {\n s = sa - (sa % halfPi) + halfPi;\n for (i = 0; i < 4 && s < ea; ++i, s = s + halfPi) {\n update(s);\n }\n }\n }\n\n this.bounds.add(cx + xmin, cy + ymin);\n this.bounds.add(cx + xmax, cy + ymax);\n }\n // @ts-ignore\n arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void {\n throw new Error('不支持arcTo');\n }\n // @ts-ignore\n bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void {\n this.bounds.add(cp1x, cp1y);\n this.bounds.add(cp2x, cp2y);\n this.bounds.add(x, y);\n }\n // @ts-ignore\n closePath(): void {\n // do nothing\n }\n // @ts-ignore\n ellipse(): void {\n throw new Error('不支持ellipse');\n }\n // @ts-ignore\n lineTo(x: number, y: number): void {\n this.bounds.add(x, y);\n }\n // @ts-ignore\n moveTo(x: number, y: number): void {\n this.bounds.add(x, y);\n }\n // @ts-ignore\n quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void {\n this.bounds.add(cpx, cpy);\n this.bounds.add(x, y);\n }\n // @ts-ignore\n rect(x: number, y: number, w: number, h: number): void {\n this.bounds.add(x, y);\n this.bounds.add(x + w, y + h);\n }\n\n clear() {\n this.bounds.clear();\n }\n\n release(...params: any): void {\n // 不需要dispose\n return;\n }\n}\n","import { isArray } from '../common';\nimport type { vec4, vec8 } from '../math';\nimport { abs, epsilon } from '../math';\nimport type { IMatrix } from './matrix';\nimport type { IPointLike } from './point';\n\nexport type IBoundsLike = Pick;\nexport type IAABBBoundsLike = IBoundsLike;\nexport type IOBBBoundsLike = Pick;\n\nexport interface IBounds {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n clone: () => IBounds;\n clear: () => IBounds;\n empty: () => boolean;\n equals: (b: IBounds) => boolean;\n set: (x1: number, y1: number, x2: number, y2: number) => IBounds;\n setValue: (x1: number, y1: number, x2: number, y2: number) => IBounds;\n add: (x: number, y: number) => IBounds;\n expand: (d: number) => IBounds;\n round: () => IBounds;\n translate: (dx: number, dy: number) => IBounds;\n rotate: (angle: number, x: number, y: number) => IBounds;\n scale: (sx: number, sy: number, x: number, y: number) => IBounds;\n /**\n * 并集\n * @param b\n * @returns\n */\n union: (b: IBoundsLike) => IBounds;\n /**\n * 交集\n * @param b\n * @returns\n */\n intersect: (b: IBoundsLike) => IBounds;\n /**\n * 是否包含b\n * @param b\n * @returns\n */\n encloses: (b: IBoundsLike) => boolean;\n /**\n * 是否共边\n * @param b\n * @returns\n */\n alignsWith: (b: IBoundsLike) => boolean;\n /**\n * 是否相交\n * @param b\n * @returns\n */\n intersects: (b: IBoundsLike) => boolean;\n /**\n * 是否包含\n * @param x\n * @param y\n * @returns\n */\n contains: (x: number, y: number) => boolean;\n containsPoint: (p: IPointLike) => boolean;\n width: () => number;\n height: () => number;\n scaleX: (s: number) => IBounds;\n scaleY: (s: number) => IBounds;\n\n copy: (b: IBoundsLike) => IBounds;\n\n transformWithMatrix: (matrix: IMatrix) => IBounds;\n}\n\nexport type IAABBBounds = IBounds;\n\nexport interface IOBBBounds extends IBounds {\n angle: number;\n}\n\nexport function transformBoundsWithMatrix(out: IBounds, bounds: IBounds, matrix: IMatrix): IBounds {\n const { x1, y1, x2, y2 } = bounds;\n // 如果没有旋转和缩放,那就直接translate\n if (matrix.onlyTranslate()) {\n if (out !== bounds) {\n out.setValue(bounds.x1, bounds.y1, bounds.x2, bounds.y2);\n }\n out.translate(matrix.e, matrix.f);\n return bounds;\n }\n out.clear();\n out.add(matrix.a * x1 + matrix.c * y1 + matrix.e, matrix.b * x1 + matrix.d * y1 + matrix.f);\n out.add(matrix.a * x2 + matrix.c * y1 + matrix.e, matrix.b * x2 + matrix.d * y1 + matrix.f);\n out.add(matrix.a * x2 + matrix.c * y2 + matrix.e, matrix.b * x2 + matrix.d * y2 + matrix.f);\n out.add(matrix.a * x1 + matrix.c * y2 + matrix.e, matrix.b * x1 + matrix.d * y2 + matrix.f);\n return bounds;\n}\n\n/**\n * 依据graphic的属性对bounds进行变换\n * @param bounds\n * @param x\n * @param y\n * @param scaleX\n * @param scaleY\n * @param angle\n * @param rotateCenter\n */\nexport function transformBounds(\n bounds: IBounds,\n x: number,\n y: number,\n scaleX: number,\n scaleY: number,\n angle: number,\n rotateCenter?: [number, number]\n) {\n if (abs(scaleX) <= epsilon || abs(scaleY) <= epsilon) {\n return;\n }\n\n scaleX !== 1 && bounds.scaleX(scaleX);\n scaleY !== 1 && bounds.scaleY(scaleY);\n\n if (isFinite(angle) && Math.abs(angle) > epsilon) {\n let rx = 0;\n let ry = 0;\n if (rotateCenter !== undefined) {\n rx = rotateCenter[0];\n ry = rotateCenter[1];\n }\n bounds.rotate(angle, rx, ry);\n }\n\n bounds.translate(x, y);\n}\n\n/**\nCopyright (c) 2015-2021, University of Washington Interactive Data Lab\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n// 基于Vega的Bounds重构\n// https://github.com/vega/vega/blob/825bfaba6ccfe3306183df22b8c955a07bb30714/packages/vega-scenegraph/src/Bounds.js\nexport class Bounds implements IBounds {\n // 默认初始值是Number.MAX_VALUE\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n\n constructor(bounds?: Bounds) {\n if (bounds) {\n this.setValue(bounds.x1, bounds.y1, bounds.x2, bounds.y2);\n } else {\n this.clear();\n }\n }\n\n clone() {\n return new Bounds(this);\n }\n\n clear(): Bounds {\n this.x1 = +Number.MAX_VALUE;\n this.y1 = +Number.MAX_VALUE;\n this.x2 = -Number.MAX_VALUE;\n this.y2 = -Number.MAX_VALUE;\n return this;\n }\n empty(): boolean {\n return (\n this.x1 === +Number.MAX_VALUE &&\n this.y1 === +Number.MAX_VALUE &&\n this.x2 === -Number.MAX_VALUE &&\n this.y2 === -Number.MAX_VALUE\n );\n }\n equals(b: IBoundsLike): boolean {\n return this.x1 === b.x1 && this.y1 === b.y1 && this.x2 === b.x2 && this.y2 === b.y2;\n }\n setValue(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0): Bounds {\n this.x1 = x1;\n this.y1 = y1;\n this.x2 = x2;\n this.y2 = y2;\n return this;\n }\n set(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0): Bounds {\n if (x2 < x1) {\n this.x2 = x1;\n this.x1 = x2;\n } else {\n this.x1 = x1;\n this.x2 = x2;\n }\n if (y2 < y1) {\n this.y2 = y1;\n this.y1 = y2;\n } else {\n this.y1 = y1;\n this.y2 = y2;\n }\n return this;\n }\n add(x: number = 0, y: number = 0): Bounds {\n if (x < this.x1) {\n this.x1 = x;\n }\n if (y < this.y1) {\n this.y1 = y;\n }\n if (x > this.x2) {\n this.x2 = x;\n }\n if (y > this.y2) {\n this.y2 = y;\n }\n return this;\n }\n expand(d: number | [number, number, number, number] = 0): Bounds {\n if (isArray(d)) {\n this.y1 -= d[0];\n this.x2 += d[1];\n this.y2 += d[2];\n this.x1 -= d[3];\n } else {\n this.x1 -= d;\n this.y1 -= d;\n this.x2 += d;\n this.y2 += d;\n }\n return this;\n }\n round(): Bounds {\n this.x1 = Math.floor(this.x1);\n this.y1 = Math.floor(this.y1);\n this.x2 = Math.ceil(this.x2);\n this.y2 = Math.ceil(this.y2);\n return this;\n }\n translate(dx: number = 0, dy: number = 0): Bounds {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n }\n rotate(angle: number = 0, x: number = 0, y: number = 0) {\n const p = this.rotatedPoints(angle, x, y);\n return this.clear().add(p[0], p[1]).add(p[2], p[3]).add(p[4], p[5]).add(p[6], p[7]);\n }\n scale(sx: number = 0, sy: number = 0, x: number = 0, y: number = 0) {\n const p = this.scalePoints(sx, sy, x, y);\n return this.clear().add(p[0], p[1]).add(p[2], p[3]);\n }\n /**\n * 并集\n * @param b\n * @returns\n */\n union(b: IBoundsLike): Bounds {\n if (b.x1 < this.x1) {\n this.x1 = b.x1;\n }\n if (b.y1 < this.y1) {\n this.y1 = b.y1;\n }\n if (b.x2 > this.x2) {\n this.x2 = b.x2;\n }\n if (b.y2 > this.y2) {\n this.y2 = b.y2;\n }\n return this;\n }\n /**\n * 交集\n * @param b\n * @returns\n */\n intersect(b: IBoundsLike): Bounds {\n if (b.x1 > this.x1) {\n this.x1 = b.x1;\n }\n if (b.y1 > this.y1) {\n this.y1 = b.y1;\n }\n if (b.x2 < this.x2) {\n this.x2 = b.x2;\n }\n if (b.y2 < this.y2) {\n this.y2 = b.y2;\n }\n return this;\n }\n /**\n * 是否包含b\n * @param b\n * @returns\n */\n encloses(b: IBoundsLike): boolean {\n return b && this.x1 <= b.x1 && this.x2 >= b.x2 && this.y1 <= b.y1 && this.y2 >= b.y2;\n }\n /**\n * 是否共边\n * @param b\n * @returns\n */\n alignsWith(b: IBoundsLike): boolean {\n return b && (this.x1 === b.x1 || this.x2 === b.x2 || this.y1 === b.y1 || this.y2 === b.y2);\n }\n /**\n * 是否相交\n * @param b\n * @returns\n */\n intersects(b: IBoundsLike): boolean {\n return b && !(this.x2 < b.x1 || this.x1 > b.x2 || this.y2 < b.y1 || this.y1 > b.y2);\n }\n /**\n * 是否包含\n * @param x\n * @param y\n * @returns\n */\n contains(x: number = 0, y: number = 0): boolean {\n return !(x < this.x1 || x > this.x2 || y < this.y1 || y > this.y2);\n }\n containsPoint(p: IPointLike): boolean {\n return !(p.x < this.x1 || p.x > this.x2 || p.y < this.y1 || p.y > this.y2);\n }\n width(): number {\n if (this.empty()) {\n return 0;\n }\n return this.x2 - this.x1;\n }\n height(): number {\n if (this.empty()) {\n return 0;\n }\n return this.y2 - this.y1;\n }\n scaleX(s: number = 0): Bounds {\n this.x1 *= s;\n this.x2 *= s;\n return this;\n }\n\n scaleY(s: number = 0): Bounds {\n this.y1 *= s;\n this.y2 *= s;\n return this;\n }\n\n transformWithMatrix(matrix: IMatrix): Bounds {\n transformBoundsWithMatrix(this, this, matrix);\n return this;\n }\n\n copy(b: IBoundsLike) {\n this.x1 = b.x1;\n this.y1 = b.y1;\n this.x2 = b.x2;\n this.y2 = b.y2;\n return this;\n }\n private rotatedPoints(angle: number, x: number, y: number): vec8 {\n const { x1, y1, x2, y2 } = this;\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const cx = x - x * cos + y * sin;\n const cy = y - x * sin - y * cos;\n\n return [\n cos * x1 - sin * y1 + cx,\n sin * x1 + cos * y1 + cy,\n cos * x1 - sin * y2 + cx,\n sin * x1 + cos * y2 + cy,\n cos * x2 - sin * y1 + cx,\n sin * x2 + cos * y1 + cy,\n cos * x2 - sin * y2 + cx,\n sin * x2 + cos * y2 + cy\n ];\n }\n private scalePoints(sx: number, sy: number, x: number, y: number): vec4 {\n const { x1, y1, x2, y2 } = this;\n\n return [sx * x1 + (1 - sx) * x, sy * y1 + (1 - sy) * y, sx * x2 + (1 - sx) * x, sy * y2 + (1 - sy) * y];\n }\n}\n\nexport class AABBBounds extends Bounds {}\nexport class OBBBounds extends Bounds {\n angle: number;\n}\n","import type { IAABBBounds, IPoint, IPointLike } from '@visactor/vutils';\nimport { AABBBounds } from '@visactor/vutils';\nimport type { ICurvePath, ICurve } from '../../../interface';\n\nexport class CurvePath implements ICurvePath {\n curves: ICurve[];\n bounds: IAABBBounds;\n constructor() {\n this.curves = [];\n this.bounds = new AABBBounds();\n }\n getCurveLengths(): number[] {\n return this.curves.map(curve => curve.getLength());\n }\n getPointAt(t: number): IPointLike {\n return { x: 0, y: 0 };\n }\n getLength(): number {\n return 0;\n }\n getBounds() {\n return this.bounds;\n }\n}\n","/**\n * 基于fabric.js https://github.com/fabricjs/fabric.js/blob/a709d3be8e5bbdf520ae385ff28bca17a9566d76/src/util/path.js\n * Copyright (c) 2008-2015 Printio (Juriy Zaytsev, Maxim Chernyak)\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n */\nconst rePathCommand = /([-+]?((\\d+\\.\\d+)|((\\d+)|(\\.\\d+)))(?:[eE][-+]?\\d+)?)/gi;\nconst commandLengths: Record = {\n m: 2,\n l: 2,\n h: 1,\n v: 1,\n c: 6,\n s: 4,\n q: 4,\n t: 2,\n a: 7,\n M: 2,\n L: 2,\n H: 1,\n V: 1,\n C: 6,\n S: 4,\n Q: 4,\n T: 2,\n A: 7\n};\n\nexport const enumCommandMap = {\n A: 0,\n AT: 1,\n C: 2,\n Z: 3,\n E: 4,\n L: 5,\n M: 6,\n Q: 7,\n R: 8\n};\n\ntype char = string;\nlet currPath: string;\nlet coordsStr: string;\nlet commandChar: char;\nlet coordStr: string;\nlet coordNumber: number;\nlet standardCommandLen: number;\nexport function parseSvgPath(str: string): Array[] {\n if (!str) {\n return [];\n }\n // parse str到命令数组\n const paths = str.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi);\n if (paths === null) {\n return [];\n }\n\n let currCommandData: (string | number)[];\n let coordsStrArr: RegExpMatchArray | null;\n const result: (string | number)[][] = [];\n for (let i = 0, len = paths.length; i < len; i++) {\n currPath = paths[i];\n coordsStr = currPath.slice(1);\n commandChar = currPath[0];\n currCommandData = [commandChar];\n\n coordsStrArr = coordsStr.match(rePathCommand);\n if (coordsStrArr === null) {\n result.push(currCommandData);\n continue;\n }\n\n // 转到number\n for (let i = 0, len = coordsStrArr.length; i < len; i++) {\n coordStr = coordsStrArr[i];\n coordNumber = parseFloat(coordStr);\n if (!Number.isNaN(coordNumber)) {\n currCommandData.push(coordNumber);\n }\n }\n\n // 当前命令的参数长度,svg可能会合并多个相同的命令\n standardCommandLen = commandLengths[commandChar];\n if (currCommandData.length - 1 > standardCommandLen) {\n // 如果命令长度超过默认长度,就拆分为多个命令\n let subCommand: (string | number)[];\n for (let i = 1, len = currCommandData.length; i < len; i += standardCommandLen) {\n subCommand = [commandChar];\n for (let j = i, subLen = i + standardCommandLen; j < subLen; j++) {\n subCommand.push(currCommandData[j]);\n }\n result.push(subCommand);\n }\n } else {\n result.push(currCommandData);\n }\n }\n\n return result;\n}\n","export enum UpdateTag {\n NONE = 0b00000000,\n UPDATE_BOUNDS = 0b00000001, // bounds有更新\n UPDATE_SHAPE = 0b00000010, // shape有更新\n CLEAR_SHAPE = 0b11111101,\n UPDATE_SHAPE_AND_BOUNDS = 0b00000011, // shape&bounds有更新\n INIT = 0b10110011,\n CLEAR_BOUNDS = 0b11111110, // 清除bounds更新位\n UPDATE_GLOBAL_MATRIX = 0b00100000, // 更新全局matrix\n CLEAR_GLOBAL_MATRIX = 0b11011111, // 清除全局matrix\n UPDATE_LOCAL_MATRIX = 0b00010000, // 更新局部matrix\n CLEAR_LOCAL_MATRIX = 0b11101111, // 清除局部matrix\n UPDATE_GLOBAL_LOCAL_MATRIX = 0b00110000, // 更新全局和局部matrix\n UPDATE_LAYOUT = 0b10000000, // 布局需要更新\n CLEAR_LAYOUT = 0b01111111 // 清楚布局更新\n}\n\nexport enum IContainPointMode {\n GLOBAL = 0b00000001, // 传入的点是全局坐标\n LOCAL = 0b00010000, // 传入的点是局部坐标\n GLOBAL_ACCURATE = 0b00000011, // 使用精确的全局匹配\n LOCAL_ACCURATE = 0b00110000 // 使用精确的局部匹配\n}\n\nexport enum AttributeUpdateType {\n INIT = 0,\n DEFAULT = 1,\n STATE = 2,\n\n ANIMATE_BIND = 10,\n ANIMATE_PLAY = 11,\n ANIMATE_START = 12,\n ANIMATE_UPDATE = 13,\n ANIMATE_END = 14,\n\n TRANSLATE = 20,\n TRANSLATE_TO = 21,\n SCALE = 22,\n SCALE_TO = 23,\n ROTATE = 24,\n ROTATE_TO = 25\n}\n\nexport enum AnimateStatus {\n INITIAL = 0,\n RUNNING = 1,\n PAUSED = 2,\n END = 3\n}\n\nexport enum AnimateMode {\n NORMAL = 0b0000,\n SET_ATTR_IMMEDIATELY = 0b0001\n}\n\nexport enum AnimateStepType {\n 'wait' = 'wait',\n 'from' = 'from',\n 'to' = 'to',\n 'customAnimate' = 'customAnimate'\n}\n\nexport enum Direction {\n ROW = 1,\n COLUMN = 2\n}\n\nexport enum CurveTypeEnum {\n CubicBezierCurve = 0,\n QuadraticBezierCurve = 1,\n ArcCurve = 2,\n LineCurve = 3,\n EllipseCurve = 4,\n MoveCurve = 5\n}\n\nexport enum BaseRenderContributionTime {\n beforeFillStroke,\n afterFillStroke\n}\n","import { degreeToRadian, halfPi, tau } from '@visactor/vutils';\nimport type { ICustomPath2D } from '../../interface';\n\n// const segmentCache: Record = {};\n// const bezierCache: Record = {};\n\n/**\n * 部分源码参考 https://github.com/d3/d3-shape/\n * Copyright 2010-2022 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n// 基于d3-shape重构\n// const join = [].join;\n\n// Copied from Inkscape svgtopdf, thanks!\nexport function segments(\n x: number,\n y: number,\n rx: number,\n ry: number,\n large: number,\n sweep: number,\n rotateX: number,\n ox: number,\n oy: number\n) {\n // const key = join.call([x, y, rx, ry, large, sweep, rotateX, ox, oy]);\n // if (segmentCache[key]) {\n // return segmentCache[key];\n // }\n\n const th = degreeToRadian(rotateX);\n const sin_th = Math.sin(th);\n const cos_th = Math.cos(th);\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n const px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\n const py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\n let pl = (px * px) / (rx * rx) + (py * py) / (ry * ry);\n if (pl > 1) {\n pl = Math.sqrt(pl);\n rx *= pl;\n ry *= pl;\n }\n\n const a00 = cos_th / rx;\n const a01 = sin_th / rx;\n const a10 = -sin_th / ry;\n const a11 = cos_th / ry;\n const x0 = a00 * ox + a01 * oy;\n const y0 = a10 * ox + a11 * oy;\n const x1 = a00 * x + a01 * y;\n const y1 = a10 * x + a11 * y;\n\n const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\n let sfactor_sq = 1 / d - 0.25;\n if (sfactor_sq < 0) {\n sfactor_sq = 0;\n }\n let sfactor = Math.sqrt(sfactor_sq);\n if (sweep === large) {\n sfactor = -sfactor;\n }\n const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\n const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\n\n const th0 = Math.atan2(y0 - yc, x0 - xc);\n const th1 = Math.atan2(y1 - yc, x1 - xc);\n\n let th_arc = th1 - th0;\n if (th_arc < 0 && sweep === 1) {\n th_arc += tau;\n } else if (th_arc > 0 && sweep === 0) {\n th_arc -= tau;\n }\n\n const segs = Math.ceil(Math.abs(th_arc / (halfPi + 0.001)));\n const result = [];\n for (let i = 0; i < segs; ++i) {\n const th2 = th0 + (i * th_arc) / segs;\n const th3 = th0 + ((i + 1) * th_arc) / segs;\n result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\n }\n\n return result;\n}\n\nexport function bezier(params: number[]) {\n // const key = join.call(params);\n // if (bezierCache[key]) {\n // return bezierCache[key];\n // }\n\n const cx = params[0];\n const cy = params[1];\n const th0 = params[2];\n const th1 = params[3];\n const rx = params[4];\n const ry = params[5];\n const sin_th = params[6];\n const cos_th = params[7];\n\n const a00 = cos_th * rx;\n const a01 = -sin_th * ry;\n const a10 = sin_th * rx;\n const a11 = cos_th * ry;\n\n const cos_th0 = Math.cos(th0);\n const sin_th0 = Math.sin(th0);\n const cos_th1 = Math.cos(th1);\n const sin_th1 = Math.sin(th1);\n\n const th_half = 0.5 * (th1 - th0);\n const sin_th_h2 = Math.sin(th_half * 0.5);\n const t = ((8 / 3) * sin_th_h2 * sin_th_h2) / Math.sin(th_half);\n const x1 = cx + cos_th0 - t * sin_th0;\n const y1 = cy + sin_th0 + t * cos_th0;\n const x3 = cx + cos_th1;\n const y3 = cy + sin_th1;\n const x2 = x3 + t * sin_th1;\n const y2 = y3 - t * cos_th1;\n\n return [\n a00 * x1 + a01 * y1,\n a10 * x1 + a11 * y1,\n a00 * x2 + a01 * y2,\n a10 * x2 + a11 * y2,\n a00 * x3 + a01 * y3,\n a10 * x3 + a11 * y3\n ];\n}\n\nexport function drawArc(\n context: ICustomPath2D,\n x: number,\n y: number,\n coords: [number, number, number, number, number, number, number]\n) {\n const seg = segments(\n coords[5], // end x\n coords[6], // end y\n coords[0], // radius x\n coords[1], // radius y\n coords[3], // large flag\n coords[4], // sweep flag\n coords[2], // rotation\n x,\n y\n );\n for (let i = 0; i < seg.length; ++i) {\n const bez = bezier(seg[i]);\n context.bezierCurveTo(bez[0], bez[1], bez[2], bez[3], bez[4], bez[5]);\n }\n}\n\n/* Adapted from zrender by ecomfe\n * https://github.com/ecomfe/zrender\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/ecomfe/zrender/blob/master/src/tool/morphPath.ts\n * License: https://github.com/ecomfe/zrender/blob/master/LICENSE\n * @license\n */\n\nexport const addArcToBezierPath = (\n bezierPath: number[],\n startAngle: number,\n endAngle: number,\n cx: number,\n cy: number,\n rx: number,\n ry: number\n) => {\n // https://stackoverflow.com/questions/1734745/how-to-create-circle-with-b%C3%A9zier-curves\n const delta = Math.abs(endAngle - startAngle);\n const len = (Math.tan(delta / 4) * 4) / 3;\n const dir = endAngle < startAngle ? -1 : 1;\n\n const c1 = Math.cos(startAngle);\n const s1 = Math.sin(startAngle);\n const c2 = Math.cos(endAngle);\n const s2 = Math.sin(endAngle);\n\n const x1 = c1 * rx + cx;\n const y1 = s1 * ry + cy;\n\n const x4 = c2 * rx + cx;\n const y4 = s2 * ry + cy;\n\n const hx = rx * len * dir;\n const hy = ry * len * dir;\n\n bezierPath.push(\n // Move control points on tangent.\n x1 - hx * s1,\n y1 + hy * c1,\n x4 + hx * s2,\n y4 - hy * c2,\n x4,\n y4\n );\n};\n","import type { CommandType, IPath2D } from '../interface';\n\nconst commandFuncs: Array<\n (command: CommandType, context: IPath2D, x: number, y: number, sx: number, sy: number, z?: number) => void\n> = [\n (command: CommandType, context: IPath2D, x: number, y: number, sx: number, sy: number, z?: number) =>\n context.arc(\n (command[1] as number) * sx + x,\n (command[2] as number) * sy + y,\n ((command[3] as number) * (sx + sy)) / 2,\n command[4] as number,\n command[5] as number,\n command[6] as boolean,\n z\n ),\n (command: CommandType, context: IPath2D, x: number, y: number, sx: number, sy: number, z?: number) =>\n context.arcTo(\n (command[1] as number) * sx + x,\n (command[2] as number) * sy + y,\n (command[3] as number) * sx + x,\n (command[4] as number) * sy + y,\n ((command[5] as number) * (sx + sy)) / 2,\n z\n ),\n (command: CommandType, context: IPath2D, x: number, y: number, sx: number, sy: number, z?: number) =>\n context.bezierCurveTo(\n (command[1] as number) * sx + x,\n (command[2] as number) * sy + y,\n (command[3] as number) * sx + x,\n (command[4] as number) * sy + y,\n (command[5] as number) * sx + x,\n (command[6] as number) * sy + y,\n z\n ),\n (command: CommandType, context: IPath2D, x: number, y: number) => context.closePath(),\n (command: CommandType, context: IPath2D, x: number, y: number, sx: number, sy: number) =>\n context.ellipse(\n (command[1] as number) * sx + x,\n (command[2] as number) * sy + y,\n (command[3] as number) * sx,\n (command[4] as number) * sy,\n command[5] as number,\n command[6] as number,\n command[7] as number,\n command[8] as boolean\n ),\n (command: CommandType, context: IPath2D, x: number, y: number, sx: number, sy: number, z?: number) =>\n context.lineTo((command[1] as number) * sx + x, (command[2] as number) * sy + y, z),\n (command: CommandType, context: IPath2D, x: number, y: number, sx: number, sy: number, z?: number) =>\n context.moveTo((command[1] as number) * sx + x, (command[2] as number) * sy + y, z),\n (command: CommandType, context: IPath2D, x: number, y: number, sx: number, sy: number, z?: number) =>\n context.quadraticCurveTo(\n (command[1] as number) * sx + x,\n (command[2] as number) * sy + y,\n (command[3] as number) * sx + x,\n (command[4] as number) * sy + y,\n z\n ),\n (command: CommandType, context: IPath2D, x: number, y: number, sx: number, sy: number, z?: number) =>\n context.rect(\n (command[1] as number) * sx + x,\n (command[2] as number) * sy + y,\n (command[3] as number) * sx,\n (command[4] as number) * sy,\n z\n )\n];\n\nexport function renderCommandList(\n commandList: CommandType[],\n context: IPath2D,\n x: number = 0,\n y: number = 0,\n sx: number = 1,\n sy: number = 1,\n z?: number\n) {\n for (let i = 0; i < commandList.length; i++) {\n const command = commandList[i];\n commandFuncs[command[0]](command, context, x, y, sx, sy, z);\n }\n}\n","import type { IPoint, IPointLike } from '@visactor/vutils';\nimport type { IDirection, ICurve } from '../../../interface';\n\nexport abstract class Curve implements ICurve {\n type: number;\n readonly p0: IPoint;\n defined: boolean;\n\n protected length: number;\n abstract getPointAt(t: number): IPointLike;\n abstract getAngleAt(t: number): number;\n getLength(direction?: IDirection): number {\n if (direction != null) {\n return this.calcProjLength(direction);\n }\n if (Number.isFinite(this.length)) {\n return this.length;\n }\n this.length = this.calcLength();\n return this.length;\n }\n protected abstract calcLength(): number;\n protected abstract calcProjLength(direction: IDirection): number;\n}\n","import type { IPointLike, IPoint } from '@visactor/vutils';\nimport { PointService, Point } from '@visactor/vutils';\nexport function snapLength(xArr: number[], yArr: number[]) {\n let totalLength = 0;\n const count = xArr.length;\n for (let i = 0; i < count; i++) {\n const x = xArr[i];\n const y = yArr[i];\n const nextX = xArr[(i + 1) % count];\n const nextY = yArr[(i + 1) % count];\n totalLength += PointService.distanceNN(x, y, nextX, nextY);\n }\n return totalLength / 2;\n}\n\n/**\n * 计算贝塞尔曲线的长度\n * @param p0 起点\n * @param p1 控制点1\n * @param p2 控制点2\n * @param p3 终点\n * @param iterationCount\n */\nexport function cubicLength(p0: IPointLike, p1: IPointLike, p2: IPointLike, p3: IPointLike, iterationCount: number) {\n return snapLength([p0.x, p1.x, p2.x, p3.x], [p0.y, p1.y, p2.y, p3.y]);\n}\n\nexport function cubicCalc(p0: number, p1: number, p2: number, p3: number, t: number): number {\n const one = 1 - t;\n return one * one * one * p0 + 3 * p1 * t * one * one + 3 * p2 * t * t * one + p3 * t * t * t;\n}\n\n/**\n * 根据t计算三次贝塞尔的点\n * example:\n * x: cubicAt(x1, x2, x3, x4, t),\n * y: cubicAt(y1, y2, y3, y4, t),\n * @param p0 起点坐标\n * @param p1 控制点1\n * @param p2 控制点2\n * @param p3 终点坐标\n * @param t\n */\nexport function cubicPointAt(p0: IPointLike, p1: IPointLike, p2: IPointLike, p3: IPointLike, t: number): IPoint {\n const x = cubicCalc(p0.x, p1.x, p2.x, p3.x, t);\n const y = cubicCalc(p0.y, p1.y, p2.y, p3.y, t);\n return new Point(x, y);\n}\n","import type { IPoint, IPointLike } from '@visactor/vutils';\nimport { abs, atan2, max, min, PointService } from '@visactor/vutils';\nimport type { ICubicBezierCurve, IDirection } from '../../../interface';\nimport { Curve } from './base';\nimport { CurveTypeEnum, Direction } from '../../enums';\nimport { cubicLength, cubicPointAt } from '../../bezier-utils';\n\n/**\n * 对三次贝塞尔曲线进行分割\n * @param p0 起点\n * @param p1 控制点1\n * @param p2 控制点2\n * @param p3 终点\n * @param t\n */\nexport function divideCubic(curve: ICubicBezierCurve, t: number): ICubicBezierCurve[] {\n const { p0, p1, p2, p3 } = curve;\n\n // 划分点\n const pt = cubicPointAt(p0, p1, p2, p3, t);\n // const xt = pt.x;\n // const yt = pt.y;\n\n // 计算两点之间的差值点\n const c1 = PointService.pointAtPP(p0, p1, t);\n const c2 = PointService.pointAtPP(p1, p2, t);\n const c3 = PointService.pointAtPP(p2, p3, t);\n const c12 = PointService.pointAtPP(c1, c2, t);\n const c23 = PointService.pointAtPP(c2, c3, t);\n // const direction = p1.x1 ? p1.y > p0.y ? 0 : 1 : p1.x > p0.x ? 0 : 1;\n\n const curve1 = new CubicBezierCurve(p0, c1, c12, pt);\n const curve2 = new CubicBezierCurve(pt, c23, c3, p3);\n\n return [curve1, curve2];\n}\n\nexport class CubicBezierCurve extends Curve implements ICubicBezierCurve {\n type: number = CurveTypeEnum.CubicBezierCurve;\n declare originP1?: IPointLike;\n declare originP2?: IPointLike;\n declare readonly p0: IPoint;\n declare readonly p1: IPoint;\n declare readonly p2: IPoint;\n declare readonly p3: IPoint;\n constructor(p0: IPoint, p1: IPoint, p2: IPoint, p3: IPoint) {\n super();\n this.p0 = p0;\n this.p1 = p1;\n this.p2 = p2;\n this.p3 = p3;\n }\n\n protected _validPoint(): boolean {\n return Number.isFinite(\n this.p0.x + this.p0.y + this.p1.x + this.p1.y + this.p2.x + this.p2.y + this.p3.x + this.p3.y\n );\n }\n getPointAt(t: number): IPointLike {\n if (this.defined !== false) {\n return cubicPointAt(this.p0, this.p1, this.p2, this.p3, t);\n }\n throw new Error('defined为false的点不能getPointAt');\n }\n protected calcLength(): number {\n // throw new Error('CubicBezierCurve暂不支持updateLength');\n if (this._validPoint()) {\n return cubicLength(this.p0, this.p1, this.p2, this.p3, 0);\n }\n // return distance(this.p0.x || 0, this.p0.y || 0, this.p3.x || 0, this.p3.y || 0);\n // 默认长度不好给\n return 60;\n }\n\n protected calcProjLength(direction: IDirection): number {\n if (direction === Direction.ROW) {\n return abs(this.p0.x - this.p3.x);\n } else if (direction === Direction.COLUMN) {\n return abs(this.p0.y - this.p3.y);\n }\n return 0;\n }\n getAngleAt(t: number): number {\n const minT = max(t - 0.01, 0);\n const maxT = min(t + 0.01, 1);\n const minP = this.getPointAt(minT);\n const maxP = this.getPointAt(maxT);\n return atan2(maxP.y - minP.y, maxP.x - minP.x);\n }\n}\n","import type { IPoint, IPointLike } from '@visactor/vutils';\nimport { abs, atan2, PointService } from '@visactor/vutils';\nimport type { ILineCurve, IDirection } from '../../../interface';\nimport { Curve } from './base';\nimport { CurveTypeEnum, Direction } from '../../enums';\n\nexport function divideLinear(curve: ILineCurve, t: number): ILineCurve[] {\n const { p0, p1 } = curve;\n\n // 计算两点之间的差值点\n const c1 = PointService.pointAtPP(p0, p1, t);\n // const direction = p1.x1 ? p1.y > p0.y ? 0 : 1 : p1.x > p0.x ? 0 : 1;\n\n const curve1 = new LineCurve(p0, c1);\n const curve2 = new LineCurve(c1, p1);\n\n return [curve1, curve2];\n}\n\nexport class LineCurve extends Curve implements ILineCurve {\n type: number = CurveTypeEnum.LineCurve;\n declare originP1?: IPointLike;\n declare originP2?: IPointLike;\n declare p0: IPoint;\n declare p1: IPoint;\n declare angle: number;\n constructor(p0: IPoint, p1: IPoint) {\n super();\n this.p0 = p0;\n this.p1 = p1;\n }\n getPointAt(t: number): IPointLike {\n if (this.defined !== false) {\n return PointService.pointAtPP(this.p0, this.p1, t);\n }\n throw new Error('defined为false的点不能getPointAt');\n }\n\n getAngleAt(t: number): number {\n if (this.angle == null) {\n this.angle = atan2(this.p1.y - this.p0.y, this.p1.x - this.p0.x);\n }\n return this.angle;\n }\n\n protected _validPoint() {\n return Number.isFinite(this.p0.x + this.p0.y + this.p1.x + this.p1.y);\n }\n\n protected calcLength(): number {\n if (this._validPoint()) {\n return PointService.distancePP(this.p0, this.p1);\n }\n // TODO 默认长度不好给,只能给个差不多的长度\n return 60;\n }\n\n protected calcProjLength(direction: IDirection): number {\n if (direction === Direction.ROW) {\n return abs(this.p0.x - this.p1.x);\n } else if (direction === Direction.COLUMN) {\n return abs(this.p0.y - this.p1.y);\n }\n return 0;\n }\n}\n","import type { IPoint, IPointLike } from '@visactor/vutils';\nimport { abs, Point } from '@visactor/vutils';\nimport type { ICubicBezierCurve, ICurve, ICurveType, IDirection, ILineCurve, ISegPath2D } from '../interface';\nimport { Direction } from './enums';\nimport { CubicBezierCurve } from './segment/curve/cubic-bezier';\nimport { LineCurve } from './segment/curve/line';\n\n/**\n * 部分逻辑参考d3-shape:https://github.com/d3/d3-shape/blob/8ec82658454750cfa29efb1e0ea514e3dd9b2297/src/curve/monotone.js\n * Copyright 2010-2022 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n\n/**\n * 缓存segment的context\n */\nexport class SegContext implements ISegPath2D {\n private _lastX: number;\n private _lastY: number;\n private _startX: number;\n private _startY: number;\n private _lastOriginP?: IPointLike;\n private _startOriginP?: IPointLike;\n\n get endX(): number {\n return this._lastX;\n }\n get endY(): number {\n return this._lastY;\n }\n\n curves: ICurve[];\n direction: IDirection;\n curveType: ICurveType;\n length: number;\n\n constructor(curveType: ICurveType, direction: IDirection) {\n this.init(curveType, direction);\n }\n\n init(curveType: ICurveType, direction: IDirection) {\n this._lastX = this._lastY = this._startX = this._startY = 0;\n this.curveType = curveType;\n this.direction = direction;\n this.curves = [];\n }\n // @ts-ignore\n bezierCurveTo(\n cp1x: number,\n cp1y: number,\n cp2x: number,\n cp2y: number,\n x: number,\n y: number,\n defined: boolean,\n p: IPointLike\n ): void {\n const curve: ICubicBezierCurve = new CubicBezierCurve(\n new Point(this._lastX, this._lastY),\n new Point(cp1x, cp1y),\n new Point(cp2x, cp2y),\n new Point(x, y)\n );\n curve.originP1 = this._lastOriginP;\n curve.originP2 = p;\n curve.defined = defined;\n this.curves.push(curve);\n this._lastX = x;\n this._lastY = y;\n this._lastOriginP = p;\n }\n closePath(): void {\n if (this.curves.length < 2) {\n return;\n }\n const lastCurve = this.curves[this.curves.length - 1];\n this.lineTo(this._startX, this._startY, lastCurve.defined, this._startOriginP);\n }\n // @ts-ignore\n ellipse(): void {\n throw new Error('SegContext不支持调用ellipse');\n }\n lineTo(x: number, y: number, defined: boolean, p: IPointLike): void {\n const curve = this.addLinearCurve(x, y, defined, this._lastOriginP, p);\n this.curves.push(curve);\n this._lastX = x;\n this._lastY = y;\n this._lastOriginP = p;\n }\n moveTo(x: number, y: number, p: IPointLike): ISegPath2D {\n this._lastX = this._startX = x;\n this._lastY = this._startY = y;\n this._lastOriginP = p;\n this._startOriginP = p;\n return this;\n }\n // @ts-ignore\n quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void {\n throw new Error('SegContext不支持调用quadraticCurveTo');\n }\n\n clear() {\n this.curves = [];\n this.length = NaN;\n }\n\n tryUpdateLength(direction?: IDirection): number {\n return this.getLength(direction);\n }\n\n // linear\n protected addLinearCurve(x: number, y: number, defined: boolean, p1: IPointLike, p2: IPointLike): ILineCurve {\n const curve = new LineCurve(new Point(this._lastX, this._lastY), new Point(x, y));\n curve.originP1 = p1;\n curve.originP2 = p2;\n curve.defined = defined;\n return curve;\n }\n\n getPointAt(t: number): IPoint {\n throw new Error('暂未实现');\n }\n getCurveLengths(): number[] {\n return [];\n }\n getLength(direction?: IDirection): number {\n if (direction === Direction.COLUMN) {\n if (!this.curves.length) {\n return 0;\n }\n const sc = this.curves[0];\n const ec = this.curves[this.curves.length - 1];\n const endP = ec.p3 ?? ec.p1;\n return abs(sc.p0.y - endP.y);\n } else if (direction === Direction.ROW) {\n if (!this.curves.length) {\n return 0;\n }\n const sc = this.curves[0];\n const ec = this.curves[this.curves.length - 1];\n const endP = ec.p3 ?? ec.p1;\n return abs(sc.p0.x - endP.x);\n }\n if (Number.isFinite(this.length)) {\n return this.length;\n }\n this.length = this.curves.reduce((l, c) => l + c.getLength(), 0);\n return this.length;\n }\n}\n\n/**\n * 用于monotoneY等类型的segment\n */\nexport class ReflectSegContext extends SegContext {\n // @ts-ignore\n bezierCurveTo(\n cp1x: number,\n cp1y: number,\n cp2x: number,\n cp2y: number,\n x: number,\n y: number,\n defined: boolean,\n p: IPointLike\n ): void {\n return super.bezierCurveTo(cp1y, cp1x, cp2y, cp2x, y, x, defined, p);\n }\n lineTo(x: number, y: number, defined: boolean, p: IPointLike): void {\n return super.lineTo(y, x, defined, p);\n }\n moveTo(x: number, y: number, p: IPointLike): ISegPath2D {\n return super.moveTo(y, x, p);\n }\n clear() {\n return super.clear();\n }\n}\n\n// export class ReflectContextWrap implements IPath {\n// ctx: IPath;\n// constructor(path: IPath) {\n// this.ctx = path;\n// }\n\n// // @ts-ignore\n// arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void {\n// return this.ctx.arc(y, x, radius, startAngle, endAngle, counterclockwise);\n// }\n// // @ts-ignore\n// arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void {\n// return this.ctx.arcTo(y1, x1, y2, x2, radius);\n// }\n// // @ts-ignore\n// bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void {\n// return this.ctx.bezierCurveTo(cp1y, cp1x, cp2y, cp2x, y, x);\n// }\n// closePath(): void {\n// return this.ctx.closePath();\n// }\n// // @ts-ignore\n// ellipse(\n// x: number,\n// y: number,\n// radiusX: number,\n// radiusY: number,\n// rotation: number,\n// startAngle: number,\n// endAngle: number,\n// counterclockwise?: boolean\n// ): void {\n// return this.ctx.ellipse(y, x, radiusY, radiusX, rotation, startAngle, endAngle, counterclockwise);\n// }\n// lineTo(x: number, y: number): void {\n// return this.ctx.lineTo(y, x);\n// }\n// moveTo(x: number, y: number): void {\n// return this.ctx.moveTo(y, x);\n// }\n// // @ts-ignore\n// quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void {\n// return this.ctx.quadraticCurveTo(cpy, cpx, y, x);\n// }\n// // @ts-ignore\n// rect(x: number, y: number, w: number, h: number): void {\n// return this.rect(y, x, w, h);\n// }\n// }\n","import { abs, type IPointLike } from '@visactor/vutils';\nimport type { ILinearSegment } from '../../interface/curve';\nimport type { ICurveType, IDirection } from '../../interface';\nimport { ReflectSegContext, SegContext } from '../seg-context';\nimport { Direction } from '../enums';\n\n/**\n * 部分源码参考 https://github.com/d3/d3-shape/\n * Copyright 2010-2022 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n\n/**\n * 公用的绘制curve的方法\n * @param path\n * @param points\n * @param step\n */\nexport function genCurveSegments(path: ILinearSegment, points: IPointLike[], step: number = 1): void {\n let defined0 = false;\n for (let i = 0, n = points.length; i <= n; i++) {\n if (i >= n === defined0) {\n if ((defined0 = !defined0)) {\n path.lineStart();\n } else {\n path.lineEnd();\n }\n }\n if (defined0) {\n path.point(points[i]);\n }\n }\n}\n\nexport function genSegContext(curveType: ICurveType, direction: IDirection, points: IPointLike[]) {\n const curveDirection =\n direction ??\n (abs(points[points.length - 1].x - points[0].x) > abs(points[points.length - 1].y - points[0].y)\n ? Direction.ROW\n : Direction.COLUMN);\n\n if (curveType === 'monotoneY') {\n return new ReflectSegContext(curveType, curveDirection);\n }\n\n return new SegContext(curveType, curveDirection);\n}\n","import type { IPointLike } from '@visactor/vutils';\nimport { genCurveSegments, genSegContext } from './common';\nimport type { IGenSegmentParams, ILinearSegment, ISegPath2D } from '../../interface/curve';\n\n/**\n * 部分源码参考 https://github.com/d3/d3-shape/\n * Copyright 2010-2022 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n\n// 基于d3-shape重构,定义绘制线段的方法\n// https://github.com/d3/d3-shape/blob/main/src/curve/linear.js\nexport class Linear implements ILinearSegment {\n declare context: ISegPath2D;\n protected _lastDefined?: boolean;\n\n protected startPoint?: IPointLike;\n\n constructor(context: ISegPath2D, startPoint?: IPointLike) {\n this.context = context;\n startPoint && (this.startPoint = startPoint);\n }\n _x: number;\n _y: number;\n _x0: number;\n _x1: number;\n _y0: number;\n _y1: number;\n _line: number;\n _point: number;\n\n areaStart() {\n this._line = 0;\n }\n areaEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._point = 0;\n this.startPoint && this.point(this.startPoint);\n }\n lineEnd() {\n if (this._line || (this._line !== 0 && this._point === 1)) {\n this.context.closePath();\n }\n this._line = 1 - this._line;\n }\n point(p: IPointLike): void {\n const x = p.x;\n const y = p.y;\n switch (this._point) {\n case 0:\n this._point = 1;\n this._line\n ? this.context.lineTo(x, y, this._lastDefined !== false && p.defined !== false, p)\n : this.context.moveTo(x, y, p);\n break;\n case 1:\n this._point = 2; // falls through\n default:\n this.context.lineTo(x, y, this._lastDefined !== false && p.defined !== false, p);\n break;\n }\n\n this._lastDefined = p.defined;\n }\n\n tryUpdateLength(): number {\n return this.context.tryUpdateLength();\n }\n}\n\nexport function genLinearSegments(points: IPointLike[], params: IGenSegmentParams = {}): ISegPath2D | null {\n const { direction, startPoint } = params;\n if (points.length < 2 - Number(!!startPoint)) {\n return null;\n }\n\n const segContext = genSegContext('linear', direction, points);\n\n const linear = new Linear(segContext, startPoint);\n\n genLinearTypeSegments(linear, points);\n\n return segContext;\n}\n\nexport function genLinearTypeSegments(path: ILinearSegment, points: IPointLike[]): void {\n return genCurveSegments(path, points, 1);\n}\n","import type { IPointLike } from '@visactor/vutils';\nimport { genLinearSegments } from './linear';\nimport { genCurveSegments, genSegContext } from './common';\nimport type { ICurvedSegment, IGenSegmentParams, ILinearSegment, ISegPath2D } from '../../interface/curve';\n\n/**\n * 部分源码参考 https://github.com/d3/d3-shape/\n * Copyright 2010-2022 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n\n// 基于d3-shape重构\n// https://github.com/d3/d3-shape/blob/main/src/curve/basis.js\nexport function point(curveClass: Basis, x: number, y: number, defined: boolean, p: IPointLike) {\n curveClass.context.bezierCurveTo(\n (2 * curveClass._x0 + curveClass._x1) / 3,\n (2 * curveClass._y0 + curveClass._y1) / 3,\n (curveClass._x0 + 2 * curveClass._x1) / 3,\n (curveClass._y0 + 2 * curveClass._y1) / 3,\n (curveClass._x0 + 4 * curveClass._x1 + x) / 6,\n (curveClass._y0 + 4 * curveClass._y1 + y) / 6,\n defined,\n curveClass.lastPoint1\n );\n}\n\nexport class Basis implements ICurvedSegment {\n private _lastDefined1?: boolean;\n private _lastDefined2?: boolean;\n declare context: ISegPath2D;\n\n protected startPoint?: IPointLike;\n lastPoint0?: IPointLike;\n lastPoint1?: IPointLike;\n\n constructor(context: ISegPath2D, startPoint?: IPointLike) {\n this.context = context;\n this.startPoint = startPoint;\n }\n _x: number;\n _y: number;\n _x0: number;\n _x1: number;\n _y0: number;\n _y1: number;\n _line: number;\n _point: number;\n\n areaStart() {\n this._line = 0;\n }\n areaEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._x0 = this._x1 = this._y0 = this._y1 = NaN;\n this._point = 0;\n this.startPoint && this.point(this.startPoint);\n }\n lineEnd() {\n switch (this._point) {\n case 2:\n point(\n this,\n this._x1 * 6 - (this._x0 + 4 * this._x1),\n this._y1 * 6 - (this._y0 + 4 * this._y1),\n this._lastDefined1 !== false && this._lastDefined2 !== false,\n this.lastPoint1\n ); // falls through\n // case 2: this.context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) {\n this.context.closePath();\n }\n this._line = 1 - this._line;\n }\n point(p: IPointLike): void {\n const x = p.x;\n const y = p.y;\n switch (this._point) {\n case 0:\n this._point = 1;\n this._line\n ? this.context.lineTo(x, y, this._lastDefined1 !== false && this._lastDefined2 !== false, p)\n : this.context.moveTo(x, y, p);\n break;\n case 1:\n this._point = 2;\n break;\n // case 2: this._point = 3; this.context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6, i, defined1, defined2); // falls through\n default:\n point(this, x, y, this._lastDefined1 !== false && this._lastDefined2 !== false, p);\n break;\n }\n (this._x0 = this._x1), (this._x1 = x);\n (this._y0 = this._y1), (this._y1 = y);\n this._lastDefined1 = this._lastDefined2;\n this._lastDefined2 = p.defined;\n this.lastPoint0 = this.lastPoint1;\n this.lastPoint1 = p;\n }\n\n tryUpdateLength(): number {\n return this.context.tryUpdateLength();\n }\n}\n\nexport function genBasisTypeSegments(path: ILinearSegment, points: IPointLike[]): void {\n return genCurveSegments(path, points, 2);\n}\n\nexport function genBasisSegments(points: IPointLike[], params: IGenSegmentParams = {}): ISegPath2D | null {\n const { direction, startPoint } = params;\n if (points.length < 2 - Number(!!startPoint)) {\n return null;\n }\n if (points.length < 3 - Number(!!startPoint)) {\n return genLinearSegments(points, params);\n }\n\n const segContext = genSegContext('basis', direction, points);\n\n const basis = new Basis(segContext, startPoint);\n\n genBasisTypeSegments(basis, points);\n\n return segContext;\n}\n","import type { IPointLike } from '@visactor/vutils';\nimport { genLinearSegments } from './linear';\nimport { genCurveSegments, genSegContext } from './common';\nimport type { ICurvedSegment, IGenSegmentParams, ISegPath2D } from '../../interface/curve';\n\n/**\n * 部分源码参考 https://github.com/d3/d3-shape/\n * Copyright 2010-2022 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n\n// 基于d3-shape重构\n// https://github.com/d3/d3-shape/blob/main/src/curve/monotone.js\nfunction sign(x: number): number {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(curveClass: MonotoneX | MonotoneY, x2: number, y2: number) {\n const h0 = curveClass._x1 - curveClass._x0;\n const h1 = x2 - curveClass._x1;\n const s0 = (curveClass._y1 - curveClass._y0) / (h0 || Number(h1 < 0 && -0));\n const s1 = (y2 - curveClass._y1) / (h1 || Number(h0 < 0 && -0));\n const p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(curveClass: MonotoneX | MonotoneY, t: number) {\n const h = curveClass._x1 - curveClass._x0;\n return h ? ((3 * (curveClass._y1 - curveClass._y0)) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(curveClass: MonotoneX | MonotoneY, t0: number, t1: number, defined: boolean, p: IPointLike) {\n const x0 = curveClass._x0;\n const y0 = curveClass._y0;\n const x1 = curveClass._x1;\n const y1 = curveClass._y1;\n const dx = (x1 - x0) / 3;\n curveClass.context.bezierCurveTo(\n x0 + dx,\n y0 + dx * t0,\n x1 - dx,\n y1 - dx * t1,\n x1,\n y1,\n defined,\n curveClass.lastPoint1\n );\n}\n\nexport class MonotoneX implements ICurvedSegment {\n protected _lastDefined1?: boolean;\n protected _lastDefined2?: boolean;\n declare context: ISegPath2D;\n declare _t0: number;\n\n protected startPoint?: IPointLike;\n lastPoint0?: IPointLike;\n lastPoint1?: IPointLike;\n\n constructor(context: ISegPath2D, startPoint?: IPointLike) {\n this.context = context;\n this.startPoint = startPoint;\n }\n _x: number;\n _y: number;\n _x0: number;\n _x1: number;\n _y0: number;\n _y1: number;\n _line: number;\n _point: number;\n\n areaStart() {\n this._line = 0;\n }\n areaEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._x0 = this._x1 = this._y0 = this._y1 = this._t0 = NaN;\n this._point = 0;\n this.startPoint && this.point(this.startPoint);\n }\n lineEnd() {\n switch (this._point) {\n case 2:\n this.context.lineTo(\n this._x1,\n this._y1,\n this._lastDefined1 !== false && this._lastDefined2 !== false,\n this.lastPoint1\n );\n break;\n case 3:\n point(\n this,\n this._t0,\n slope2(this, this._t0),\n this._lastDefined1 !== false && this._lastDefined2 !== false,\n this.lastPoint1\n );\n break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) {\n this.context.closePath();\n }\n this._line = 1 - this._line;\n }\n point(p: IPointLike): void {\n let t1 = NaN;\n const x = p.x;\n const y = p.y;\n // if (x === this._x1 && y === this._y1) {\n // return;\n // } // Ignore coincident points.\n switch (this._point) {\n case 0:\n this._point = 1;\n this._line\n ? this.context.lineTo(x, y, this._lastDefined1 !== false && this._lastDefined2 !== false, p)\n : this.context.moveTo(x, y, p);\n break;\n case 1:\n this._point = 2;\n break;\n case 2:\n this._point = 3;\n point(\n this,\n slope2(this, (t1 = slope3(this, x, y))),\n t1,\n this._lastDefined1 !== false && this._lastDefined2 !== false,\n p\n );\n break;\n default:\n point(\n this,\n this._t0,\n (t1 = slope3(this, x, y)),\n this._lastDefined1 !== false && this._lastDefined2 !== false,\n p\n );\n break;\n }\n\n (this._x0 = this._x1), (this._x1 = x);\n (this._y0 = this._y1), (this._y1 = y);\n this._t0 = t1;\n this._lastDefined1 = this._lastDefined2;\n this._lastDefined2 = p.defined !== false;\n this.lastPoint0 = this.lastPoint1;\n this.lastPoint1 = p;\n }\n\n tryUpdateLength(): number {\n return this.context.tryUpdateLength();\n }\n}\n\nexport class MonotoneY extends MonotoneX {\n declare context: ISegPath2D;\n\n protected declare startPoint?: IPointLike;\n\n constructor(context: ISegPath2D, startPoint?: IPointLike) {\n super(context, startPoint);\n }\n\n point(p: IPointLike): void {\n return super.point({ y: p.x, x: p.y, defined: p.defined } as any);\n }\n}\n\nexport function genMonotoneXTypeSegments(path: MonotoneX, points: IPointLike[]): void {\n return genCurveSegments(path, points, 2);\n}\n\nexport function genMonotoneXSegments(points: IPointLike[], params: IGenSegmentParams = {}): ISegPath2D | null {\n const { direction, startPoint } = params;\n\n if (points.length < 2 - Number(!!startPoint)) {\n return null;\n }\n if (points.length < 3 - Number(!!startPoint)) {\n return genLinearSegments(points, params);\n }\n const segContext = genSegContext('monotoneX', direction, points);\n\n const monotoneX = new MonotoneX(segContext, startPoint);\n\n genMonotoneXTypeSegments(monotoneX, points);\n\n return segContext;\n}\n\nexport function genMonotoneYTypeSegments(path: MonotoneX, points: IPointLike[]): void {\n return genCurveSegments(path, points, 2);\n}\n\nexport function genMonotoneYSegments(points: IPointLike[], params: IGenSegmentParams = {}): ISegPath2D | null {\n const { direction, startPoint } = params;\n if (points.length < 2 - Number(!!startPoint)) {\n return null;\n }\n if (points.length < 3 - Number(!!startPoint)) {\n return genLinearSegments(points, params);\n }\n const segContext = genSegContext('monotoneY', direction, points);\n const monotoneY = new MonotoneY(segContext, startPoint);\n\n genMonotoneYTypeSegments(monotoneY, points);\n\n return segContext;\n}\n","import type { IPointLike } from '@visactor/vutils';\nimport { abs } from '@visactor/vutils';\nimport { SegContext } from '../seg-context';\nimport { genCurveSegments } from './common';\nimport { Direction } from '../enums';\nimport type { ICurvedSegment, IGenSegmentParams, ILinearSegment, ISegPath2D } from '../../interface/curve';\n\n/**\n * 部分源码参考 https://github.com/d3/d3-shape/\n * Copyright 2010-2022 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n\n// 基于d3-shape重构\n// https://github.com/d3/d3-shape/blob/main/src/curve/step.js\nexport class Step implements ICurvedSegment {\n declare context: ISegPath2D;\n declare _t: number;\n private _lastDefined?: boolean;\n\n protected startPoint?: IPointLike;\n protected lastPoint?: IPointLike;\n\n constructor(context: ISegPath2D, t: number = 0.5, startPoint?: IPointLike) {\n this.context = context;\n this._t = t;\n this.startPoint = startPoint;\n }\n _x: number;\n _y: number;\n _x0: number;\n _x1: number;\n _y0: number;\n _y1: number;\n _line: number;\n _point: number;\n\n areaStart() {\n this._line = 0;\n }\n areaEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._x = this._y = NaN;\n this._point = 0;\n this.startPoint && this.point(this.startPoint);\n }\n lineEnd() {\n if (0 < this._t && this._t < 1 && this._point === 2) {\n this.context.lineTo(this._x, this._y, this._lastDefined !== false, this.lastPoint);\n }\n if (this._line || (this._line !== 0 && this._point === 1)) {\n this.context.closePath();\n }\n if (this._line >= 0) {\n (this._t = 1 - this._t), (this._line = 1 - this._line);\n }\n }\n point(p: IPointLike): void {\n const x = p.x;\n const y = p.y;\n\n switch (this._point) {\n case 0:\n this._point = 1;\n this._line\n ? this.context.lineTo(x, y, this._lastDefined !== false && p.defined !== false, p)\n : this.context.moveTo(x, y, p);\n break;\n case 1:\n this._point = 2; // falls through\n default: {\n if (this._t <= 0) {\n this.context.lineTo(this._x, y, this._lastDefined !== false && p.defined !== false, this.lastPoint);\n this.context.lineTo(x, y, this._lastDefined !== false && p.defined !== false, p);\n } else {\n const x1 = this._x * (1 - this._t) + x * this._t;\n this.context.lineTo(x1, this._y, this._lastDefined !== false && p.defined !== false, this.lastPoint);\n this.context.lineTo(x1, y, this._lastDefined !== false && p.defined !== false, p);\n }\n break;\n }\n }\n this._lastDefined = p.defined;\n (this._x = x), (this._y = y);\n this.lastPoint = p;\n }\n\n tryUpdateLength(): number {\n return this.context.tryUpdateLength();\n }\n}\n\nexport function genStepSegments(points: IPointLike[], t: number, params: IGenSegmentParams = {}): ISegPath2D | null {\n const { direction, startPoint } = params;\n if (points.length < 2 - Number(!!startPoint)) {\n return null;\n }\n const segContext = new SegContext(\n 'step',\n direction ??\n (abs(points[points.length - 1].x - points[0].x) > abs(points[points.length - 1].y - points[0].y)\n ? Direction.ROW\n : Direction.COLUMN)\n );\n const step = new Step(segContext, t, startPoint);\n\n genStepTypeSegments(step, points);\n\n return segContext;\n}\n\nexport function genStepTypeSegments(path: ILinearSegment, points: IPointLike[]): void {\n return genCurveSegments(path, points, 1);\n}\n","import type { IPointLike } from '@visactor/vutils';\nimport { genCurveSegments, genSegContext } from './common';\nimport type { IGenSegmentParams, ILinearSegment, ISegPath2D } from '../../interface/curve';\nimport { Linear } from './linear';\n\n/**\n * 部分源码参考 https://github.com/d3/d3-shape/\n * Copyright 2010-2022 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n\n// 基于d3-shape重构,定义绘制线段的方法\n// https://github.com/d3/d3-shape/blob/main/src/curve/linear.js\nexport class LinearClosed extends Linear implements ILinearSegment {\n declare context: ISegPath2D;\n\n protected startPoint?: IPointLike;\n\n lineEnd() {\n this.context.closePath();\n }\n}\n\nexport function genLinearClosedSegments(points: IPointLike[], params: IGenSegmentParams = {}): ISegPath2D | null {\n const { direction, startPoint } = params;\n if (points.length < 2 - Number(!!startPoint)) {\n return null;\n }\n\n const segContext = genSegContext('linear', direction, points);\n\n const linear = new LinearClosed(segContext, startPoint);\n\n genLinearClosedTypeSegments(linear, points);\n\n return segContext;\n}\n\nexport function genLinearClosedTypeSegments(path: ILinearSegment, points: IPointLike[]): void {\n return genCurveSegments(path, points, 1);\n}\n","import type { IPointLike } from '@visactor/vutils';\nimport type { ICurveType, ISegPath2D } from '../../interface';\nimport { genLinearSegments } from './linear';\nimport { genBasisSegments } from './basis';\nimport { genMonotoneXSegments, genMonotoneYSegments } from './monotone';\nimport { genStepSegments } from './step';\nimport { genLinearClosedSegments } from './linear-closed';\n\nexport * from './linear';\nexport * from './linear-closed';\nexport * from './basis';\nexport * from './monotone';\nexport * from './step';\nexport * from './curve/curve-context';\n\nexport function calcLineCache(\n points: IPointLike[],\n curveType: ICurveType,\n params?: { startPoint: IPointLike }\n): ISegPath2D | null {\n switch (curveType) {\n case 'linear':\n return genLinearSegments(points, params);\n case 'basis':\n return genBasisSegments(points, params);\n case 'monotoneX':\n return genMonotoneXSegments(points, params);\n case 'monotoneY':\n return genMonotoneYSegments(points, params);\n case 'step':\n return genStepSegments(points, 0.5, params);\n case 'stepBefore':\n return genStepSegments(points, 0, params);\n case 'stepAfter':\n return genStepSegments(points, 1, params);\n case 'linearClosed':\n return genLinearClosedSegments(points, params);\n default:\n return genLinearSegments(points, params);\n }\n}\n","import { BoundsContext } from './bounds-context';\nimport type { CommandStrType, CommandType, ICurve, ICustomPath2D, IDirection, ILine, IPath2D } from '../interface';\nimport { CurvePath } from './segment/curve/path';\nimport { enumCommandMap, parseSvgPath } from './path-svg';\nimport type { IPoint, IPointLike } from '@visactor/vutils';\nimport { abs } from '@visactor/vutils';\nimport { Direction } from './enums';\nimport { drawArc, addArcToBezierPath } from './shape/arc';\nimport { renderCommandList } from './render-command-list';\nimport { calcLineCache } from './segment';\n\n/**\n * 部分源码参考 https://github.com/d3/d3-shape/\n * Copyright 2010-2022 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n// 基于d3-shape重构\n// https://github.com/vega/vega/blob/master/packages/vega-scenegraph/src/path/render.js\n\nexport class CustomPath2D extends CurvePath implements ICustomPath2D {\n commandList: CommandType[] = [];\n _boundsContext: IPath2D;\n _ctx?: IPath2D;\n direction?: IDirection;\n protected transformCbList?: ((cmd: CommandType, x: number, y: number, sx: number, sy: number) => void)[];\n protected toStringCbList?: ((cmd: CommandType) => string)[];\n\n constructor(ctx?: IPath2D) {\n super();\n if (ctx) {\n this._ctx = ctx;\n }\n this._boundsContext = new BoundsContext(this.bounds);\n }\n\n setCtx(ctx?: IPath2D) {\n this._ctx = ctx;\n }\n\n moveTo(x: number, y: number) {\n this.commandList.push([enumCommandMap.M, x, y]);\n this._ctx && this._ctx.moveTo(x, y);\n return this;\n }\n lineTo(x: number, y: number) {\n this.commandList.push([enumCommandMap.L, x, y]);\n this._ctx && this._ctx.lineTo(x, y);\n return this;\n }\n quadraticCurveTo(aCPx: number, aCPy: number, aX: number, aY: number) {\n this.commandList.push([enumCommandMap.Q, aCPx, aCPy, aX, aY]);\n this._ctx && this._ctx.quadraticCurveTo(aCPx, aCPy, aX, aY);\n return this;\n }\n bezierCurveTo(aCP1x: number, aCP1y: number, aCP2x: number, aCP2y: number, aX: number, aY: number) {\n this.commandList.push([enumCommandMap.C, aCP1x, aCP1y, aCP2x, aCP2y, aX, aY]);\n this._ctx && this._ctx.bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY);\n return this;\n }\n arcTo(aX1: number, aY1: number, aX2: number, aY2: number, aRadius: number) {\n this.commandList.push([enumCommandMap.AT, aX1, aY1, aX2, aY2, aRadius]);\n this._ctx && this._ctx.arcTo(aX1, aY1, aX2, aY2, aRadius);\n return this;\n }\n ellipse(\n aX: number,\n aY: number,\n xRadius: number,\n yRadius: number,\n aRotation: number,\n aStartAngle: number,\n aEndAngle: number,\n aClockwise: boolean\n ) {\n this.commandList.push([enumCommandMap.E, aX, aY, xRadius, yRadius, aRotation, aStartAngle, aEndAngle, aClockwise]);\n this._ctx && this._ctx.ellipse(aX, aY, xRadius, yRadius, aRotation, aStartAngle, aEndAngle, aClockwise);\n return this;\n }\n rect(x: number, y: number, w: number, h: number) {\n this.commandList.push([enumCommandMap.R, x, y, w, h]);\n this._ctx && this._ctx.rect(x, y, w, h);\n return this;\n }\n arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean) {\n this.commandList.push([enumCommandMap.A, x, y, radius, startAngle, endAngle, counterclockwise]);\n this._ctx && this._ctx.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n closePath() {\n this.commandList.push([enumCommandMap.Z]);\n this._ctx && this._ctx.closePath();\n return this;\n }\n\n addCurve(curve: ICurve) {\n this.curves.push(curve);\n // todo parse curve\n }\n clear() {\n this.transformCbList = null;\n this.commandList.length = 0;\n this.curves.length = 0;\n }\n\n toString(): string {\n if (!this.toStringCbList) {\n const list: ((cmd: CommandType) => string)[] = [];\n list[enumCommandMap.M] = (cmd: CommandType) => `M${cmd[1]} ${cmd[2]}`;\n list[enumCommandMap.L] = (cmd: CommandType) => `L${cmd[1]} ${cmd[2]}`;\n list[enumCommandMap.Q] = (cmd: CommandType) => `Q${cmd[1]} ${cmd[2]} ${cmd[3]} ${cmd[4]}`;\n list[enumCommandMap.C] = (cmd: CommandType) => `C${cmd[1]} ${cmd[2]} ${cmd[3]} ${cmd[4]} ${cmd[5]} ${cmd[6]}`;\n list[enumCommandMap.A] = (cmd: CommandType) => {\n const bezierPathList: number[] = [];\n addArcToBezierPath(\n bezierPathList,\n cmd[4] as number,\n cmd[5] as number,\n cmd[1] as number,\n cmd[2] as number,\n cmd[3] as number,\n cmd[3] as number\n );\n let path = '';\n for (let i = 0; i < bezierPathList.length; i += 6) {\n path += `C${bezierPathList[i]} ${bezierPathList[i + 1]} ${bezierPathList[i + 2]} ${bezierPathList[i + 3]} ${\n bezierPathList[i + 4]\n } ${bezierPathList[i + 5]}`;\n }\n return path;\n };\n // list[enumCommandMap.AT] = this.arcToTransform;\n // list[enumCommandMap.E] = this.ellipseTransform;\n // list[enumCommandMap.R] = this.rectTransform;\n // list[enumCommandMap.A] = this.arcTransform;\n list[enumCommandMap.Z] = (cmd: CommandType) => `Z`;\n this.toStringCbList = list;\n }\n\n const list = this.toStringCbList;\n let path = '';\n this.commandList.forEach(c => {\n path += list[c[0]](c);\n });\n return path;\n }\n\n fromString(str: string, x?: number, y?: number, sX?: number, sY?: number) {\n this.clear();\n\n // 解析path字符串\n const commandStrList = parseSvgPath(str) as CommandStrType[]; // TODO: 目前正则性能较差,后续需要加上回调函数供用户直接操作绘图命令\n this._runCommandStrList(commandStrList, x, y, sX, sY);\n\n // 更新bounds\n this._updateBounds();\n return this;\n }\n fromLine(line: ILine) {\n const { points, curveType, clipRangeByDimension } = line.attribute;\n if (!points) {\n return;\n }\n const cache = calcLineCache(points, curveType);\n if (clipRangeByDimension === 'x') {\n this.direction = Direction.ROW;\n } else if (clipRangeByDimension === 'y') {\n this.direction = Direction.COLUMN;\n } else if (clipRangeByDimension === 'auto') {\n this.direction = cache.direction;\n }\n this.curves = cache.curves;\n }\n fromCustomPath2D(path: ICustomPath2D, x?: number, y?: number, sX?: number, sY?: number) {\n this.clear();\n this._runCommandList(path.commandList as CommandType[], x, y, sX, sY);\n\n // 更新bounds\n this._updateBounds();\n return this;\n }\n transform(x: number, y: number, sx: number, sy: number) {\n const commandList = this.commandList;\n if (!this.transformCbList) {\n const list: ((cmd: CommandType, x: number, y: number, sx: number, sy: number) => void)[] = [];\n list[enumCommandMap.M] = this.moveToTransform;\n list[enumCommandMap.L] = this.lineToTransform;\n list[enumCommandMap.Q] = this.quadraticCurveToTransform;\n list[enumCommandMap.C] = this.bezierCurveToTransform;\n list[enumCommandMap.AT] = this.arcToTransform;\n list[enumCommandMap.E] = this.ellipseTransform;\n list[enumCommandMap.R] = this.rectTransform;\n list[enumCommandMap.A] = this.arcTransform;\n list[enumCommandMap.Z] = this.closePathTransform;\n this.transformCbList = list;\n }\n commandList.forEach(cmd => {\n this.transformCbList[cmd[0]](cmd, x, y, sx, sy);\n });\n this._updateBounds();\n }\n\n protected moveToTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n }\n protected lineToTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n }\n protected quadraticCurveToTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n cmd[3] = (cmd[3] as number) * sx + x;\n cmd[4] = (cmd[4] as number) * sy + y;\n }\n protected bezierCurveToTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n cmd[3] = (cmd[3] as number) * sx + x;\n cmd[4] = (cmd[4] as number) * sy + y;\n cmd[5] = (cmd[5] as number) * sx + x;\n cmd[6] = (cmd[6] as number) * sy + y;\n }\n arcToTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n cmd[3] = (cmd[3] as number) * sx + x;\n cmd[4] = (cmd[4] as number) * sy + y;\n cmd[5] = ((cmd[5] as number) * (sx + sy)) / 2;\n }\n ellipseTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n cmd[3] = (cmd[3] as number) * sx;\n cmd[4] = (cmd[4] as number) * sy;\n }\n rectTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n cmd[3] = (cmd[3] as number) * sx;\n cmd[4] = (cmd[4] as number) * sy;\n }\n arcTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n cmd[3] = ((cmd[3] as number) * (sx + sy)) / 2;\n }\n closePathTransform() {\n return;\n }\n protected _runCommandStrList(\n commandStrList: CommandStrType[],\n l: number = 0,\n t: number = 0,\n sX: number = 1,\n sY: number = 1\n ) {\n let current; // current instruction\n let previous = null;\n let x = 0; // current x\n let y = 0; // current y\n // let sX = 0;\n // let sY = 0;\n let controlX = 0; // current control point x\n let controlY = 0; // current control point y\n let tempX;\n let tempY;\n let tempControlX;\n let tempControlY;\n\n // if (isNil(l)) l = 0;\n // if (isNil(t)) t = 0;\n // if (isNil(sX)) sX = 1;\n // if (isNil(sY)) sY = sX;\n\n for (let i = 0, len = commandStrList.length; i < len; ++i) {\n current = commandStrList[i];\n if (sX !== 1 || sY !== 1) {\n current = scale(current, sX, sY);\n }\n\n switch (\n current[0] // first letter\n ) {\n case 'l': // lineto, relative\n x += current[1] as number;\n y += current[2] as number;\n this.lineTo(x + l, y + t);\n break;\n\n case 'L': // lineto, absolute\n x = current[1] as number;\n y = current[2] as number;\n this.lineTo(x + l, y + t);\n break;\n\n case 'h': // horizontal lineto, relative\n x += current[1] as number;\n this.lineTo(x + l, y + t);\n break;\n\n case 'H': // horizontal lineto, absolute\n x = current[1] as number;\n this.lineTo(x + l, y + t);\n break;\n\n case 'v': // vertical lineto, relative\n y += current[1] as number;\n this.lineTo(x + l, y + t);\n break;\n\n case 'V': // verical lineto, absolute\n y = current[1] as number;\n this.lineTo(x + l, y + t);\n break;\n\n case 'm': // moveTo, relative\n x += current[1] as number;\n y += current[2] as number;\n this.moveTo(x + l, y + t);\n break;\n\n case 'M': // moveTo, absolute\n x = current[1] as number;\n y = current[2] as number;\n this.moveTo(x + l, y + t);\n break;\n\n case 'c': // bezierCurveTo, relative\n tempX = x + (current[5] as number);\n tempY = y + (current[6] as number);\n controlX = x + (current[3] as number);\n controlY = y + (current[4] as number);\n this.bezierCurveTo(\n x + (current[1] as number) + l, // x1\n y + (current[2] as number) + t, // y1\n controlX + l, // x2\n controlY + t, // y2\n tempX + l,\n tempY + t\n );\n x = tempX;\n y = tempY;\n break;\n\n case 'C': // bezierCurveTo, absolute\n x = current[5] as number;\n y = current[6] as number;\n controlX = current[3] as number;\n controlY = current[4] as number;\n this.bezierCurveTo(\n (current[1] as number) + l,\n (current[2] as number) + t,\n controlX + l,\n controlY + t,\n x + l,\n y + t\n );\n break;\n\n case 's': // shorthand cubic bezierCurveTo, relative\n // transform to absolute x,y\n tempX = x + (current[3] as number);\n tempY = y + (current[4] as number);\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n this.bezierCurveTo(\n controlX + l,\n controlY + t,\n x + (current[1] as number) + l,\n y + (current[2] as number) + t,\n tempX + l,\n tempY + t\n );\n\n // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n controlX = x + (current[1] as number);\n controlY = y + (current[2] as number);\n\n x = tempX;\n y = tempY;\n break;\n\n case 'S': // shorthand cubic bezierCurveTo, absolute\n tempX = current[3] as number;\n tempY = current[4] as number;\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n this.bezierCurveTo(\n controlX + l,\n controlY + t,\n (current[1] as number) + l,\n (current[2] as number) + t,\n tempX + l,\n tempY + t\n );\n x = tempX;\n y = tempY;\n // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n controlX = current[1] as number;\n controlY = current[2] as number;\n\n break;\n\n case 'q': // quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + (current[3] as number);\n tempY = y + (current[4] as number);\n\n controlX = x + (current[1] as number);\n controlY = y + (current[2] as number);\n\n this.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n tempX = current[3] as number;\n tempY = current[4] as number;\n\n this.quadraticCurveTo((current[1] as number) + l, (current[2] as number) + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = current[1] as number;\n controlY = current[2] as number;\n break;\n\n case 't': // shorthand quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + (current[1] as number);\n tempY = y + (current[2] as number);\n\n if ((previous![0] as string).match(/[QqTt]/) === null) {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n } else if (previous![0] === 't') {\n // calculate reflection of previous control points for t\n controlX = 2 * x - (tempControlX as number);\n controlY = 2 * y - (tempControlY as number);\n } else if (previous![0] === 'q') {\n // calculate reflection of previous control points for q\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n\n tempControlX = controlX;\n tempControlY = controlY;\n\n this.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = x + (current[1] as number);\n controlY = y + (current[2] as number);\n break;\n\n case 'T':\n tempX = current[1] as number;\n tempY = current[2] as number;\n\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n this.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n\n case 'a':\n drawArc(this, x + l, y + t, [\n current[1] as number,\n current[2] as number,\n current[3] as number,\n current[4] as number,\n current[5] as number,\n (current[6] as number) + x + l,\n (current[7] as number) + y + t\n ]);\n x += current[6] as number;\n y += current[7] as number;\n break;\n\n case 'A':\n drawArc(this, x + l, y + t, [\n current[1] as number,\n current[2] as number,\n current[3] as number,\n current[4] as number,\n current[5] as number,\n (current[6] as number) + l,\n (current[7] as number) + t\n ]);\n x = current[6] as number;\n y = current[7] as number;\n break;\n\n case 'z':\n case 'Z':\n this.closePath();\n break;\n }\n previous = current;\n }\n }\n\n protected _runCommandList(commandList: CommandType[], l: number = 0, t: number = 0, sX: number = 1, sY: number = 1) {\n if (l === 0 && t === 0 && sX === 1 && sY === 1) {\n this.commandList = commandList.map(entry => entry.slice() as CommandType);\n return;\n }\n\n for (let i = 0, len = commandList.length; i < len; ++i) {\n const current = commandList[i].slice() as CommandType;\n\n switch (\n current[0] // first letter\n ) {\n case enumCommandMap.L:\n this.lineToTransform(current, l, t, sX, sY);\n break;\n\n case enumCommandMap.M:\n this.moveToTransform(current, l, t, sX, sY);\n break;\n\n case enumCommandMap.C:\n this.bezierCurveToTransform(current, l, t, sX, sY);\n break;\n\n case enumCommandMap.Q:\n this.quadraticCurveToTransform(current, l, t, sX, sY);\n break;\n\n case enumCommandMap.A:\n this.arcToTransform(current, l, t, sX, sY);\n break;\n case enumCommandMap.E:\n this.ellipseTransform(current, l, t, sX, sY);\n break;\n case enumCommandMap.R:\n this.rectTransform(current, l, t, sX, sY);\n break;\n case enumCommandMap.AT:\n this.arcToTransform(current, l, t, sX, sY);\n break;\n case enumCommandMap.Z:\n this.closePath();\n break;\n }\n }\n }\n private _updateBounds() {\n this.bounds.clear();\n renderCommandList(this.commandList, this._boundsContext as unknown as ICustomPath2D);\n }\n\n release(): void {\n this.commandList = [];\n this._boundsContext = null;\n this._ctx = null;\n }\n\n getLength(): number {\n if (this.direction === Direction.COLUMN) {\n if (!this.curves.length) {\n return 0;\n }\n const sc = this.curves[0];\n const ec = this.curves[this.curves.length - 1];\n return abs(sc.p0.y - ec.p1.y);\n } else if (this.direction === Direction.ROW) {\n if (!this.curves.length) {\n return 0;\n }\n const sc = this.curves[0];\n const ec = this.curves[this.curves.length - 1];\n return abs(sc.p0.x - ec.p1.x);\n }\n return this.curves.reduce((l, c) => l + c.getLength(), 0);\n }\n\n getAttrAt(distance: number): { pos: IPointLike; angle: number } {\n if (!this.curves) {\n return { pos: { x: 0, y: 0 }, angle: 0 };\n }\n let _dis = 0;\n let curve: ICurve;\n for (let i = 0; i < this.curves.length; i++) {\n curve = this.curves[i];\n const cl = curve.getLength(this.direction);\n if (_dis + cl >= distance) {\n break;\n } else {\n _dis += cl;\n }\n }\n const t = (distance - _dis) / curve.getLength(this.direction);\n const pos = curve.getPointAt(t);\n const angle = curve.getAngleAt(t);\n return { pos, angle };\n }\n}\n\nconst temp = ['l', 0, 0, 0, 0, 0, 0, 0];\n\nfunction scale(current: CommandStrType, sX: number, sY: number) {\n const c = (temp[0] = current[0]);\n if (c === 'a' || c === 'A') {\n temp[1] = sX * (current[1] as number);\n temp[2] = sY * (current[2] as number);\n temp[3] = current[3] as number;\n temp[4] = current[4] as number;\n temp[5] = current[5] as number;\n temp[6] = sX * (current[6] as number);\n temp[7] = sY * (current[7] as number);\n } else if (c === 'h' || c === 'H') {\n temp[1] = sX * (current[1] as number);\n } else if (c === 'v' || c === 'V') {\n temp[1] = sY * (current[1] as number);\n } else {\n for (let i = 1, n = current.length; i < n; ++i) {\n temp[i] = (i % 2 === 1 ? sX : sY) * (current[i] as number);\n }\n }\n return temp;\n}\n","// 存放公共属性\nimport { Logger, Matrix, pi2 } from '@visactor/vutils';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport type {\n IArcGraphicAttribute,\n IAreaGraphicAttribute,\n IGraphicAttribute,\n ICircleGraphicAttribute,\n IFillStyle,\n IGlyphGraphicAttribute,\n IGroupGraphicAttribute,\n IImageGraphicAttribute,\n ILineGraphicAttribute,\n IPathGraphicAttribute,\n IPolygonGraphicAttribute,\n IRect3dGraphicAttribute,\n IRectGraphicAttribute,\n IStrokeStyle,\n IGraphicStyle,\n ISymbolGraphicAttribute,\n ITextAttribute,\n ITextGraphicAttribute,\n IRichTextGraphicAttribute,\n ITransform,\n RichTextWordBreak,\n RichTextVerticalDirection,\n RichTextGlobalAlignType,\n RichTextGlobalBaselineType,\n IRichTextIconGraphicAttribute,\n IConnectedStyle,\n ILayout,\n IDebugType,\n IPickStyle\n} from '../interface';\n\nexport const DefaultLayout: ILayout = {\n alignSelf: 'auto'\n};\n\nexport const DefaultTransform: ITransform = {\n x: 0,\n y: 0,\n z: 0,\n dx: 0,\n dy: 0,\n dz: 0,\n scrollX: 0,\n scrollY: 0,\n scaleX: 1,\n scaleY: 1,\n scaleZ: 1,\n angle: 0,\n alpha: 0,\n beta: 0,\n scaleCenter: [0, 0],\n anchor: [0, 0],\n anchor3d: [0, 0],\n postMatrix: new Matrix()\n};\n\nexport const DefaultFillStyle: IFillStyle = {\n fillOpacity: 1,\n fill: false,\n shadowBlur: 0,\n shadowColor: 'black',\n shadowOffsetX: 0,\n shadowOffsetY: 0\n};\n\nconst commonStroke: Omit = {\n strokeOpacity: 1,\n lineDash: [],\n lineDashOffset: 0,\n lineWidth: 1,\n lineCap: 'butt',\n lineJoin: 'miter',\n miterLimit: 10,\n strokeBoundsBuffer: 2,\n stroke: false\n};\n\nexport const DefaultStrokeStyle: IStrokeStyle = {\n outerBorder: { ...commonStroke, distance: 0 },\n innerBorder: { ...commonStroke, distance: 0 },\n ...commonStroke\n};\n\nexport const DefaultTextStyle: Required = {\n text: '',\n maxLineWidth: Infinity,\n textAlign: 'left',\n textBaseline: 'alphabetic',\n fontSize: 16,\n // @ts-ignore\n fontFamily: `PingFang SC,Microsoft Yahei,system-ui,-apple-system,segoe ui,\n Roboto,Helvetica,Arial,sans-serif, apple color emoji,segoe ui emoji,segoe ui symbol`,\n fontWeight: '',\n ellipsis: '…',\n fontVariant: '',\n fontStyle: '',\n lineHeight: undefined,\n underline: 0,\n lineThrough: 0,\n scaleIn3d: false,\n direction: 'horizontal',\n wordBreak: 'break-all',\n ignoreBuf: false,\n verticalMode: 0,\n wrap: false,\n whiteSpace: 'no-wrap',\n heightLimit: Infinity,\n lineClamp: Infinity,\n suffixPosition: 'end',\n disableAutoClipedPoptip: undefined\n};\n\nexport const DefaultPickStyle: IPickStyle = {\n pickStrokeBuffer: 0\n};\n\nexport const DefaultStyle: IGraphicStyle = {\n opacity: 1,\n background: null,\n texture: null,\n textureColor: 'black',\n textureSize: 10,\n texturePadding: 2,\n backgroundMode: 'no-repeat',\n backgroundFit: true,\n blur: 0,\n cursor: null,\n html: null,\n ...DefaultFillStyle,\n ...DefaultStrokeStyle,\n ...DefaultLayout,\n ...DefaultPickStyle\n};\n\nexport const DefaultConnectAttribute: Required = {\n connectedType: 'none',\n // connectedStyle: {\n // stroke: DefaultStrokeStyle.stroke,\n // strokeOpacity: DefaultStrokeStyle.strokeOpacity,\n // lineDash: DefaultStrokeStyle.lineDash,\n // lineDashOffset: DefaultStrokeStyle.lineDashOffset,\n // lineCap: DefaultStrokeStyle.lineCap,\n // lineJoin: DefaultStrokeStyle.lineJoin,\n // lineWidth: DefaultStrokeStyle.lineWidth,\n // fill: DefaultFillStyle.fill,\n // fillOpacity: DefaultFillStyle.fillOpacity\n // },\n connectedStyle: {}, // 默认全都继承父属性\n connectedX: NaN,\n connectedY: NaN\n} as IConnectedStyle;\n\nexport const DefaultDebugAttribute: Required = {\n _debug_bounds: false\n};\n\nexport const DefaultAttribute: Required = {\n strokeSeg: null,\n pickable: true,\n childrenPickable: true,\n fillPickable: true,\n strokePickable: true,\n visible: true,\n zIndex: 0,\n layout: null,\n boundsPadding: 0,\n pickMode: 'accurate',\n customPickShape: null,\n boundsMode: 'accurate',\n keepDirIn3d: true,\n shadowRootIdx: 1,\n globalZIndex: 1,\n globalCompositeOperation: '',\n overflow: 'hidden',\n ...DefaultDebugAttribute,\n ...DefaultStyle,\n ...DefaultTransform\n};\n\nexport function addAttributeToPrototype(obj: Record, c: any, keys: string[]) {\n keys.forEach(key => {\n c.prototype[key] = obj[key];\n });\n}\nexport function rewriteProto(obj: Record, c: Record) {\n Object.setPrototypeOf(obj, c);\n}\n\nexport const DefaultArcAttribute: Required = {\n ...DefaultAttribute,\n startAngle: 0,\n endAngle: pi2,\n innerRadius: 0,\n outerRadius: 1,\n cornerRadius: 0,\n padRadius: 0,\n padAngle: 0,\n cap: false,\n forceShowCap: false\n};\n\nexport const DefaultAreaAttribute: Required = {\n ...DefaultAttribute,\n ...DefaultConnectAttribute,\n points: [],\n segments: [],\n curveType: 'linear',\n clipRange: 1,\n closePath: false\n};\n\nexport const DefaultCircleAttribute: Required = {\n ...DefaultAttribute,\n radius: 1,\n startAngle: 0,\n endAngle: pi2\n};\n\nexport const DefaultGroupAttribute: Required = {\n ...DefaultAttribute,\n width: 0,\n height: 0,\n cornerRadius: 0,\n path: [],\n clip: false,\n visibleAll: true,\n display: 'relative',\n flexDirection: 'row',\n flexWrap: 'wrap',\n justifyContent: 'flex-start',\n alignItems: 'flex-start',\n alignContent: 'flex-start'\n};\n\nexport const DefaultGlyphAttribute: Required = {\n ...DefaultAttribute,\n path: '',\n width: 0,\n height: 0,\n cornerRadius: 0,\n clip: false\n};\n\nexport const DefaultLineAttribute: Required = {\n ...DefaultAttribute,\n ...DefaultConnectAttribute,\n points: [],\n segments: [],\n curveType: 'linear',\n clipRange: 1,\n clipRangeByDimension: 'default',\n closePath: false\n};\n\nexport const DefaultPathAttribute: Required = {\n ...DefaultAttribute,\n path: new CustomPath2D(),\n customPath: () => {\n Logger.getInstance().warn('空函数');\n }\n};\n\nexport const DefaultPolygonAttribute: Required = {\n ...DefaultAttribute,\n points: [],\n cornerRadius: 0,\n closePath: true\n};\n\nexport const DefaultRectAttribute: Required = {\n ...DefaultAttribute,\n width: 0,\n height: 0,\n x1: 0,\n y1: 0,\n strokeBoundsBuffer: 0,\n cornerRadius: 0\n};\n\nexport const DefaultRect3dAttribute: Required = {\n ...DefaultAttribute,\n width: 0,\n height: 0,\n x1: 0,\n y1: 0,\n cornerRadius: 0,\n length: 0\n};\n\nexport const DefaultSymbolAttribute: Required = {\n ...DefaultAttribute,\n symbolType: 'circle',\n size: 10, // 外接**正方形**的边长\n keepDirIn3d: true\n};\n\nexport const DefaultTextAttribute: Required = {\n ...DefaultAttribute,\n ...DefaultTextStyle,\n strokeBoundsBuffer: 0,\n keepDirIn3d: true\n};\n\nexport const DefaultRichTextAttribute: Required = {\n ...DefaultAttribute,\n width: 300,\n height: 300,\n ellipsis: true,\n wordBreak: 'break-word' as RichTextWordBreak,\n verticalDirection: 'top' as RichTextVerticalDirection,\n textAlign: 'left' as RichTextGlobalAlignType,\n textBaseline: 'top' as RichTextGlobalBaselineType,\n layoutDirection: 'horizontal',\n textConfig: [],\n maxHeight: undefined,\n maxWidth: undefined,\n singleLine: false\n};\n\nexport const DefaultImageAttribute: Required = {\n repeatX: 'no-repeat',\n repeatY: 'no-repeat',\n image: '',\n width: 0,\n height: 0,\n ...DefaultAttribute,\n fill: true,\n cornerRadius: 0\n};\n\nexport const DefaultRichTextIconAttribute: Required = {\n ...DefaultImageAttribute,\n backgroundShowMode: 'never',\n backgroundWidth: 0,\n backgroundHeight: 0,\n textAlign: 'left',\n textBaseline: 'middle',\n direction: 'horizontal',\n margin: 0,\n id: '',\n\n width: 20,\n height: 20,\n backgroundFill: 'rgba(101, 117, 168, 0.1)',\n backgroundFillOpacity: 1,\n backgroundStroke: false,\n backgroundStrokeOpacity: 1,\n backgroundRadius: 4,\n opacity: 1\n};\n","import { application } from '../../application';\nimport type { IContext2d, ITextStyleParams, IRichTextParagraphCharacter } from '../../interface';\n\nexport const DIRECTION_KEY = {\n horizontal: {\n width: 'width',\n height: 'height',\n left: 'left',\n top: 'top',\n x: 'x',\n y: 'y',\n bottom: 'bottom'\n },\n vertical: {\n width: 'height',\n height: 'width',\n left: 'top',\n top: 'left',\n x: 'y',\n y: 'x',\n bottom: 'right'\n }\n};\n\nconst defaultFormatting = {\n fontSize: 16,\n fontFamily: 'sans-serif',\n fill: true,\n stroke: false,\n fontWeight: 'normal',\n lineHeight: 'normal',\n fontStyle: 'normal', // normal, italic, oblique\n textDecoration: 'none', // none, underline, line-through\n textAlign: 'left', // left, right, center\n script: 'normal' // normal, sub, super\n};\nconst nbsp = String.fromCharCode(160);\n\nexport const regLetter = /\\w|\\(|\\)|-/;\nconst regPunctuation = /[.?!,;:/,。?!、;:]/;\nexport const regFirstSpace = /\\S/;\n// Applies the style of a run to the canvas context\nexport function applyFillStyle(ctx: IContext2d, character: IRichTextParagraphCharacter) {\n const fillStyle = (character && (character.fill as string)) || defaultFormatting.fill;\n if (!fillStyle) {\n ctx.globalAlpha = 0;\n return;\n }\n ctx.globalAlpha = 1;\n ctx.fillStyle = fillStyle as string;\n\n let fontSize = character.fontSize || 16;\n switch (character.script) {\n case 'super':\n case 'sub':\n fontSize *= 0.8;\n break;\n }\n\n ctx.setTextStyle({\n textAlign: 'left',\n textBaseline: character.textBaseline || 'alphabetic',\n fontStyle: character.fontStyle || '',\n fontWeight: character.fontWeight || '',\n fontSize,\n fontFamily: character.fontFamily || 'sans-serif'\n } as ITextStyleParams);\n}\n\nexport function applyStrokeStyle(ctx: IContext2d, character: IRichTextParagraphCharacter) {\n const strokeStyle = (character && (character.stroke as string)) || (defaultFormatting.stroke as any);\n if (!strokeStyle) {\n ctx.globalAlpha = 0;\n return;\n }\n ctx.globalAlpha = 1;\n ctx.lineWidth = character && typeof character.lineHeight === 'number' ? character.lineHeight : 1;\n ctx.strokeStyle = strokeStyle as string;\n\n let fontSize = character.fontSize || 16;\n switch (character.script) {\n case 'super':\n case 'sub':\n fontSize *= 0.8;\n break;\n }\n\n ctx.setTextStyle({\n textAlign: 'left',\n textBaseline: character.textBaseline || 'alphabetic',\n fontStyle: character.fontStyle || '',\n fontWeight: character.fontWeight || '',\n fontSize,\n fontFamily: character.fontFamily || 'sans-serif'\n } as ITextStyleParams);\n}\n\nexport function prepareContext(ctx: IContext2d) {\n ctx.setTextStyle({\n textAlign: 'left',\n textBaseline: 'bottom'\n });\n}\n\n// 确认达到availableWidth的字符串截取index\nexport function getStrByWithDom(\n desc: string,\n width: number,\n style: string,\n guessIndex: number,\n needTestLetter?: boolean\n): number {\n desc = desc.replace(/\\s/g, nbsp);\n\n // 测量用DOM\n const span = document.createElement('span');\n span.setAttribute('style', style);\n span.style.visibility = 'hidden';\n span.style.whiteSpace = 'nowrap';\n document.body.appendChild(span);\n\n // 测量从头到当前位置宽度以及从头到下一个字符位置宽度\n let index = guessIndex;\n let temp = desc.slice(0, index);\n span.innerText = temp;\n let tempWidth = span.offsetWidth;\n\n let tempNext = desc.slice(0, index + 1);\n span.innerText = tempNext;\n let tempWidthNext = span.offsetWidth;\n\n // 到当前位置宽度 < width && 到下一个字符位置宽度 > width时,认为找到准确阶段位置\n while (tempWidth > width || tempWidthNext <= width) {\n if (tempWidth > width) {\n index--;\n } else {\n index++;\n }\n\n temp = desc.slice(0, index);\n span.innerText = temp;\n tempWidth = span.offsetWidth;\n\n tempNext = desc.slice(0, index + 1);\n span.innerText = tempNext;\n tempWidthNext = span.offsetWidth;\n }\n\n // 处理特殊情况\n if (needTestLetter) {\n index = testLetter(desc, index);\n }\n\n document.body.removeChild(span);\n return index;\n}\nexport function getStrByWithCanvas(\n desc: string,\n width: number,\n character: IRichTextParagraphCharacter,\n // ctx: IContext2d,\n guessIndex: number,\n needTestLetter?: boolean\n): number {\n if (!width || width <= 0) {\n return 0;\n }\n const textMeasure = application.graphicUtil.textMeasure;\n // const measurement = textMeasure.measureText(text, character);\n\n // 测量从头到当前位置宽度以及从头到下一个字符位置宽度\n let index = guessIndex;\n let temp = desc.slice(0, index);\n let tempWidth = Math.floor(textMeasure.measureText(temp, character).width);\n\n let tempNext = desc.slice(0, index + 1);\n let tempWidthNext = Math.floor(textMeasure.measureText(tempNext, character).width);\n\n // 到当前位置宽度 < width && 到下一个字符位置宽度 > width时,认为找到准确阶段位置\n while (tempWidth > width || tempWidthNext <= width) {\n if (tempWidth > width) {\n index--;\n } else {\n index++;\n }\n\n if (index > desc.length) {\n index = desc.length;\n break;\n } else if (index < 0) {\n index = 0;\n break;\n }\n\n temp = desc.slice(0, index);\n tempWidth = Math.floor(textMeasure.measureText(temp, character).width);\n\n tempNext = desc.slice(0, index + 1);\n tempWidthNext = Math.floor(textMeasure.measureText(tempNext, character).width);\n }\n\n // 处理特殊情况\n if (needTestLetter) {\n index = testLetter(desc, index);\n }\n\n return index;\n}\n\nexport function testLetter(string: string, index: number): number {\n let i = index;\n // 切分前后都是英文字母数字下划线,向前找到非英文字母处换行\n while (\n (regLetter.test(string[i - 1]) && regLetter.test(string[i])) ||\n // 行首标点符号处理\n regPunctuation.test(string[i])\n ) {\n i--;\n // 无法满足所有条件,放弃匹配,直接截断,避免陷入死循环\n if (i <= 0) {\n return index;\n }\n }\n return i;\n}\n\n// 测量文字详细信息\nexport function measureTextDom(\n text: string,\n style: string\n): { ascent?: number; height?: number; descent?: number; width?: number } {\n let div;\n\n const span = document.createElement('span');\n const block = document.createElement('div');\n div = document.createElement('div');\n\n block.style.display = 'inline-block';\n block.style.width = '1px';\n block.style.height = '0';\n\n div.style.visibility = 'hidden';\n div.style.position = 'absolute';\n div.style.top = '0';\n div.style.left = '0';\n div.style.width = '500px';\n div.style.height = '200px';\n div.style.whiteSpace = 'nowrap';\n\n div.appendChild(span);\n div.appendChild(block);\n document.body.appendChild(div);\n\n const result: { ascent?: number; height?: number; descent?: number; width?: number } = {};\n try {\n span.setAttribute('style', style);\n span.style.whiteSpace = 'nowrap';\n span.style.display = 'inline-block';\n\n span.innerHTML = '';\n span.appendChild(document.createTextNode(text.replace(/\\s/g, nbsp)));\n\n block.style.verticalAlign = 'baseline';\n result.ascent = block.offsetTop - span.offsetTop;\n block.style.verticalAlign = 'bottom';\n result.height = block.offsetTop - span.offsetTop;\n result.descent = result.height - result.ascent;\n result.width = span.offsetWidth;\n } finally {\n div.parentNode?.removeChild(div);\n div = null;\n }\n return result;\n}\n\n// 测量文字详细信息\nexport function measureTextCanvas(\n text: string,\n character: IRichTextParagraphCharacter\n): { ascent: number; height: number; descent: number; width: number } {\n const textMeasure = application.graphicUtil.textMeasure;\n const measurement = textMeasure.measureText(text, character) as TextMetrics;\n const result: { ascent: number; height: number; descent: number; width: number } = {\n ascent: 0,\n height: 0,\n descent: 0,\n width: 0\n };\n if (\n typeof measurement.actualBoundingBoxAscent !== 'number' ||\n typeof measurement.actualBoundingBoxDescent !== 'number'\n ) {\n result.width = Math.floor(measurement.width);\n result.height = character.fontSize || 0;\n result.ascent = result.height;\n result.descent = 0;\n } else {\n result.width = Math.floor(measurement.width);\n result.height = Math.floor(measurement.actualBoundingBoxAscent + measurement.actualBoundingBoxDescent);\n result.ascent = Math.floor(measurement.actualBoundingBoxAscent);\n result.descent = result.height - result.ascent;\n }\n return result;\n}\n\nexport function getFontString(character: IRichTextParagraphCharacter, ctx: IContext2d | null) {\n let fontSize = (character && character.fontSize) || defaultFormatting.fontSize;\n\n if (character) {\n switch (character.script) {\n case 'super':\n case 'sub':\n fontSize *= 0.8;\n break;\n }\n }\n\n return (\n ((character && character.fontStyle) || '') +\n ' ' +\n ((character && character.fontWeight) || '') +\n ' ' +\n (fontSize || 12) +\n 'px ' +\n ((character && character.fontFamily) || defaultFormatting.fontFamily)\n );\n}\n","import { injectable } from '../../../common/inversify-lite';\nimport type { IGraphicUtil } from '../../../interface/core';\nimport type { ICanvas, IContext2d, EnvType } from '../../../interface';\nimport type { TextOptionsType, ITextMeasure } from '../../../interface/text';\nimport { DefaultTextAttribute, DefaultTextStyle } from '../../../graphic/config';\nimport { testLetter } from '../../../graphic/richtext/utils';\n\n@injectable()\nexport class ATextMeasure implements ITextMeasure {\n release: (...params: any) => void;\n protected canvas?: ICanvas;\n protected context?: IContext2d | null;\n\n configure(service: IGraphicUtil, env: EnvType): void {\n this.canvas = service.canvas;\n this.context = service.context;\n service.bindTextMeasure(this);\n }\n\n /**\n * 获取text宽度,measureText.width\n * @param text\n * @param options\n */\n measureTextWidth(text: string, options: TextOptionsType): number {\n if (!this.context) {\n return this.estimate(text, options).width;\n }\n this.context.setTextStyleWithoutAlignBaseline(options);\n const textMeasure = this.context.measureText(text);\n return textMeasure.width;\n }\n\n // 估算文字长度\n estimate(\n text: string,\n { fontSize = DefaultTextAttribute.fontSize }: TextOptionsType\n ): { width: number; height: number } {\n // 假设只有英文和中文字符\n let eCharLen = 0; // 英文字符\n let cCharLen = 0; // 中文字符\n // 判断ascii码,如果是\n for (let i = 0; i < text.length; i++) {\n text.charCodeAt(i) < 128 ? eCharLen++ : cCharLen++;\n }\n return {\n width: ~~(0.8 * eCharLen * fontSize + cCharLen * fontSize),\n height: fontSize\n };\n }\n\n /**\n * 获取text像素高度,基于actualBoundingBoxAscent和actualBoundingBoxDescent\n * @param text\n * @param options\n */\n measureTextPixelHeight(text: string, options: TextOptionsType): number {\n if (!this.context) {\n return options.fontSize ?? DefaultTextStyle.fontSize;\n }\n this.context.setTextStyleWithoutAlignBaseline(options);\n const textMeasure = this.context.measureText(text);\n return Math.abs((textMeasure as any).actualBoundingBoxAscent - (textMeasure as any).actualBoundingBoxDescent);\n }\n\n /**\n * 获取text包围盒的高度,基于fontBoundingBoxAscent和fontBoundingBoxDescent\n * @param text\n * @param options\n */\n measureTextBoundHieght(text: string, options: TextOptionsType): number {\n if (!this.context) {\n return options.fontSize ?? DefaultTextStyle.fontSize;\n }\n this.context.setTextStyleWithoutAlignBaseline(options);\n const textMeasure = this.context.measureText(text);\n return Math.abs((textMeasure as any).fontBoundingBoxAscent - (textMeasure as any).fontBoundingBoxDescent);\n }\n\n /**\n * 获取text测量对象\n * @param text\n * @param options\n */\n measureText(text: string, options: TextOptionsType): TextMetrics | { width: number } {\n if (!this.context) {\n return this.estimate(text, options);\n }\n this.context.setTextStyleWithoutAlignBaseline(options);\n return this.context.measureText(text);\n }\n\n clipTextVertical(\n verticalList: { text: string; width?: number; direction: number }[],\n options: TextOptionsType,\n width: number,\n wordBreak: boolean\n ): {\n verticalList: { text: string; width?: number; direction: number }[];\n width: number;\n } {\n if (verticalList.length === 0) {\n return { verticalList, width: 0 };\n }\n const { fontSize = 12 } = options;\n // 计算每一个区域的width\n verticalList.forEach(item => {\n item.width = item.direction === 0 ? fontSize : this.measureTextWidth(item.text, options);\n });\n const out: { text: string; width?: number; direction: number }[] = [];\n let length = 0;\n let i = 0;\n for (; i < verticalList.length; i++) {\n if (length + verticalList[i].width < width) {\n length += verticalList[i].width;\n out.push(verticalList[i]);\n } else {\n break;\n }\n }\n if (verticalList[i] && verticalList[i].text.length > 1) {\n const clipedData = this._clipText(\n verticalList[i].text,\n options,\n width - length,\n 0,\n verticalList[i].text.length - 1,\n 'end',\n false\n );\n if (wordBreak && clipedData.str !== verticalList[i].text) {\n let text = '';\n let length = 0;\n for (let j = 0; j < i; j++) {\n const item = verticalList[j];\n text += item.text;\n length += item.text.length;\n }\n text += verticalList[i].text;\n const totalLength = length + clipedData.str.length;\n let index = testLetter(text, totalLength);\n index = index - length;\n if (index !== clipedData.str.length - 1) {\n clipedData.str = clipedData.str.substring(0, index);\n clipedData.width = this.measureTextWidth(clipedData.str, options);\n }\n }\n out.push({ ...verticalList[i], text: clipedData.str, width: clipedData.width });\n length += clipedData.width;\n }\n\n return {\n verticalList: out,\n width: length\n };\n }\n\n /**\n * 将文本裁剪到width宽\n * @param text\n * @param options\n * @param width\n */\n clipText(\n text: string,\n options: TextOptionsType,\n width: number,\n wordBreak: boolean\n ): {\n str: string;\n width: number;\n } {\n if (text.length === 0) {\n return { str: '', width: 0 };\n }\n let length = this.measureTextWidth(text, options);\n if (length <= width) {\n return { str: text, width: length };\n }\n length = this.measureTextWidth(text[0], options);\n if (length > width) {\n return { str: '', width: 0 };\n }\n const data = this._clipText(text, options, width, 0, text.length - 1, 'end', false);\n // 如果需要文字截断\n if (wordBreak && data.str !== text) {\n const index = testLetter(text, data.str.length);\n if (index !== data.str.length) {\n data.str = text.substring(0, index);\n data.width = this.measureTextWidth(data.str, options);\n }\n }\n return data;\n }\n\n // 二分法找到最佳宽\n // TODO: 后续考虑代码合并\n private _clipText(\n text: string,\n options: TextOptionsType,\n width: number,\n leftIdx: number,\n rightIdx: number,\n position: 'start' | 'end' | 'middle',\n suffix: string | false\n ): { str: string; width: number; result?: string } {\n let data: { str: string; width: number; result?: string };\n if (position === 'start') {\n data = this._clipTextStart(text, options, width, leftIdx, rightIdx);\n suffix && (data.result = suffix + data.str);\n } else if (position === 'middle') {\n const d = this._clipTextMiddle(text, options, width, '', '', 0, 0, 1);\n data = { str: 'none', width: d.width, result: d.left + suffix + d.right };\n } else {\n data = this._clipTextEnd(text, options, width, leftIdx, rightIdx);\n suffix && (data.result = data.str + suffix);\n }\n return data;\n }\n\n private _clipTextEnd(\n text: string,\n options: TextOptionsType,\n width: number,\n leftIdx: number,\n rightIdx: number\n ): { str: string; width: number } {\n const middleIdx = Math.floor((leftIdx + rightIdx) / 2);\n const subText = text.substring(0, middleIdx + 1);\n const strWidth = this.measureTextWidth(subText, options);\n let length: number;\n if (strWidth > width) {\n // 如果字符串的宽度大于限制宽度\n if (subText.length <= 1) {\n return { str: '', width: 0 };\n } // 如果子字符串长度小于1,而且大于给定宽的话,返回空字符串\n // 先判断是不是左侧的那个字符\n const str = text.substring(0, middleIdx);\n // 如果到左侧的字符小于或等于width,那么说明就是左侧的字符\n length = this.measureTextWidth(str, options);\n if (length <= width) {\n return { str, width: length };\n }\n // 返回leftIdx到middleIdx\n return this._clipTextEnd(text, options, width, leftIdx, middleIdx);\n } else if (strWidth < width) {\n // 如果字符串的宽度小于限制宽度\n if (middleIdx >= text.length - 1) {\n return { str: text, width: this.measureTextWidth(text, options) };\n } // 如果已经到结尾了,返回text\n // 先判断是不是右侧的那个字符\n const str = text.substring(0, middleIdx + 2);\n // 如果到右侧的字符大于或等于width,那么说明就是这个字符串\n length = this.measureTextWidth(str, options);\n if (length >= width) {\n return { str: subText, width: strWidth };\n }\n // 返回middleIdx到rightIdx\n return this._clipTextEnd(text, options, width, middleIdx, rightIdx);\n }\n // 如果相同,那么就找到text\n return { str: subText, width: strWidth };\n }\n\n private _clipTextStart(\n text: string,\n options: TextOptionsType,\n width: number,\n leftIdx: number,\n rightIdx: number\n ): { str: string; width: number } {\n const middleIdx = Math.ceil((leftIdx + rightIdx) / 2);\n const subText = text.substring(middleIdx - 1, text.length - 1);\n const strWidth = this.measureTextWidth(subText, options);\n let length: number;\n if (strWidth > width) {\n // 如果字符串的宽度大于限制宽度\n if (subText.length <= 1) {\n return { str: '', width: 0 };\n } // 如果子字符串长度小于1,而且大于给定宽的话,返回空字符串\n // 先判断是不是左侧的那个字符\n const str = text.substring(middleIdx, text.length - 1);\n // 如果到左侧的字符小于或等于width,那么说明就是左侧的字符\n length = this.measureTextWidth(str, options);\n if (length <= width) {\n return { str, width: length };\n }\n // 返回leftIdx到middleIdx\n return this._clipTextStart(text, options, width, middleIdx, text.length - 1);\n } else if (strWidth < width) {\n // 如果字符串的宽度小于限制宽度\n if (middleIdx <= 0) {\n return { str: text, width: this.measureTextWidth(text, options) };\n } // 如果已经到结尾了,返回text\n // 先判断是不是右侧的那个字符\n const str = text.substring(middleIdx - 2, text.length - 1);\n // 如果到右侧的字符大于或等于width,那么说明就是这个字符串\n length = this.measureTextWidth(str, options);\n if (length >= width) {\n return { str: subText, width: strWidth };\n }\n // 返回middleIdx到rightIdx\n return this._clipTextStart(text, options, width, leftIdx, middleIdx);\n }\n // 如果相同,那么就找到text\n return { str: subText, width: strWidth };\n }\n\n private _clipTextMiddle(\n text: string,\n options: TextOptionsType,\n width: number,\n left: string,\n right: string,\n leftW: number,\n rightW: number,\n buffer: number\n ): { left: string; right: string; width: number } {\n const subLeftText = text.substring(0, buffer);\n const strLeftWidth = this.measureTextWidth(subLeftText, options);\n if (strLeftWidth + rightW > width) {\n return { left, right, width: leftW + rightW };\n }\n const subRightText = text.substring(text.length - buffer, text.length);\n const strRightWidth = this.measureTextWidth(subRightText, options);\n if (strLeftWidth + strRightWidth > width) {\n return { left: subLeftText, right, width: strLeftWidth + rightW };\n }\n return this._clipTextMiddle(\n text,\n options,\n width,\n subLeftText,\n subRightText,\n strLeftWidth,\n strRightWidth,\n buffer + 1\n );\n }\n\n clipTextWithSuffixVertical(\n verticalList: { text: string; width?: number; direction: number }[],\n options: TextOptionsType,\n width: number,\n suffix: string,\n wordBreak: boolean,\n suffixPosition: 'start' | 'end' | 'middle'\n ): {\n verticalList: { text: string; width?: number; direction: number }[];\n width: number;\n } {\n if (suffix === '') {\n return this.clipTextVertical(verticalList, options, width, wordBreak);\n }\n if (verticalList.length === 0) {\n return { verticalList, width: 0 };\n }\n\n const output = this.clipTextVertical(verticalList, options, width, wordBreak);\n if (\n output.verticalList.length === verticalList.length &&\n output.verticalList[output.verticalList.length - 1].width === verticalList[verticalList.length - 1].width\n ) {\n return output;\n }\n\n const suffixWidth = this.measureTextWidth(suffix, options);\n if (suffixWidth > width) {\n return output;\n }\n\n width -= suffixWidth;\n\n let out;\n if (suffixPosition === 'start') {\n const nextVerticalList = this.revertVerticalList(verticalList);\n out = this.clipTextVertical(nextVerticalList, options, width, wordBreak);\n const v = this.revertVerticalList(out.verticalList);\n v.unshift({\n text: suffix,\n direction: 1,\n width: suffixWidth\n });\n out.verticalList = v;\n } else if (suffixPosition === 'middle') {\n const leftOut = this.clipTextVertical(verticalList, options, width / 2, wordBreak);\n const nextVerticalList = this.revertVerticalList(verticalList);\n const rightOut = this.clipTextVertical(nextVerticalList, options, width / 2, wordBreak);\n // 添加suffix\n leftOut.verticalList.push({\n text: suffix,\n direction: 1,\n width: suffixWidth\n });\n this.revertVerticalList(rightOut.verticalList).forEach(v => leftOut.verticalList.push(v));\n out = {\n verticalList: leftOut.verticalList,\n width: leftOut.width + rightOut.width\n };\n } else {\n out = this.clipTextVertical(verticalList, options, width, wordBreak);\n out.verticalList.push({\n text: suffix,\n direction: 1,\n width: suffixWidth\n });\n }\n out.width += suffixWidth;\n return out;\n }\n\n revertVerticalList(\n verticalList: {\n text: string;\n width?: number;\n direction: number;\n }[]\n ) {\n return verticalList.reverse().map(l => {\n const t = l.text.split('').reverse().join('');\n return {\n ...l,\n text: t\n };\n });\n }\n\n clipTextWithSuffix(\n text: string,\n options: TextOptionsType,\n width: number,\n suffix: string,\n wordBreak: boolean,\n position: 'start' | 'end' | 'middle'\n ): {\n str: string;\n width: number;\n } {\n if (suffix === '') {\n return this.clipText(text, options, width, wordBreak);\n }\n if (text.length === 0) {\n return { str: '', width: 0 };\n }\n const length = this.measureTextWidth(text, options);\n if (length <= width) {\n return { str: text, width: length };\n }\n const suffixWidth = this.measureTextWidth(suffix, options);\n if (suffixWidth > width) {\n return { str: '', width: 0 };\n }\n width -= suffixWidth;\n const data = this._clipText(text, options, width, 0, text.length - 1, position, suffix);\n\n // 如果需要文字截断\n if (wordBreak && data.str !== text) {\n const index = testLetter(text, data.str.length);\n if (index !== data.str.length) {\n data.str = text.substring(0, index);\n data.width = this.measureTextWidth(data.str, options);\n }\n }\n data.str = data.result!;\n data.width += suffixWidth;\n return data;\n }\n}\n","import { injectable } from '../../../common/inversify-lite';\nimport { ATextMeasure } from './AtextMeasure';\n\nexport const TextMeasureContribution = Symbol.for('TextMeasureContribution');\n\n@injectable()\nexport class DefaultTextMeasureContribution extends ATextMeasure {}\n","export default function stringWidth(string: string, ambiguousCharacterIsNarrow: boolean = true) {\n if (typeof string !== 'string' || string.length === 0) {\n return 0;\n }\n\n string = stripAnsi(string);\n\n if (string.length === 0) {\n return 0;\n }\n\n string = string.replace(emojiRegex(), ' ');\n\n const ambiguousCharacterWidth = ambiguousCharacterIsNarrow ? 1 : 2;\n let width = 0;\n\n for (const character of string) {\n const codePoint = character.codePointAt(0)!;\n\n // Ignore control characters\n if (codePoint <= 0x1f || (codePoint >= 0x7f && codePoint <= 0x9f)) {\n continue;\n }\n\n // Ignore combining characters\n if (codePoint >= 0x300 && codePoint <= 0x36f) {\n continue;\n }\n\n const code = eastAsianCharacterInfo(character);\n switch (code) {\n case 'F':\n case 'W':\n width += 2;\n break;\n case 'A':\n width += ambiguousCharacterWidth;\n break;\n default:\n width += 1;\n }\n }\n\n return width;\n}\n\nconst stripAnsi = (string: string) => {\n if (typeof string !== 'string') {\n throw new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n }\n\n return string.replace(ansiRegex(), '');\n};\n\nconst ansiRegex = ({ onlyFirst = false } = {}) => {\n const pattern = [\n // eslint-disable-next-line max-len\n '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n '(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))'\n ].join('|');\n\n return new RegExp(pattern, onlyFirst ? undefined : 'g');\n};\n\nexport const eastAsianCharacterInfo = (character: string) => {\n let x = character.charCodeAt(0);\n let y = character.length === 2 ? character.charCodeAt(1) : 0;\n let codePoint = x;\n if (0xd800 <= x && x <= 0xdbff && 0xdc00 <= y && y <= 0xdfff) {\n x &= 0x3ff;\n y &= 0x3ff;\n codePoint = (x << 10) | y;\n codePoint += 0x10000;\n }\n\n if (\n 0x3000 === codePoint ||\n (0xff01 <= codePoint && codePoint <= 0xff60) ||\n (0xffe0 <= codePoint && codePoint <= 0xffe6)\n ) {\n return 'F';\n }\n if (\n 0x20a9 === codePoint ||\n (0xff61 <= codePoint && codePoint <= 0xffbe) ||\n (0xffc2 <= codePoint && codePoint <= 0xffc7) ||\n (0xffca <= codePoint && codePoint <= 0xffcf) ||\n (0xffd2 <= codePoint && codePoint <= 0xffd7) ||\n (0xffda <= codePoint && codePoint <= 0xffdc) ||\n (0xffe8 <= codePoint && codePoint <= 0xffee)\n ) {\n return 'H';\n }\n if (\n (0x1100 <= codePoint && codePoint <= 0x115f) ||\n (0x11a3 <= codePoint && codePoint <= 0x11a7) ||\n (0x11fa <= codePoint && codePoint <= 0x11ff) ||\n (0x2329 <= codePoint && codePoint <= 0x232a) ||\n (0x2e80 <= codePoint && codePoint <= 0x2e99) ||\n (0x2e9b <= codePoint && codePoint <= 0x2ef3) ||\n (0x2f00 <= codePoint && codePoint <= 0x2fd5) ||\n (0x2ff0 <= codePoint && codePoint <= 0x2ffb) ||\n (0x3001 <= codePoint && codePoint <= 0x303e) ||\n (0x3041 <= codePoint && codePoint <= 0x3096) ||\n (0x3099 <= codePoint && codePoint <= 0x30ff) ||\n (0x3105 <= codePoint && codePoint <= 0x312d) ||\n (0x3131 <= codePoint && codePoint <= 0x318e) ||\n (0x3190 <= codePoint && codePoint <= 0x31ba) ||\n (0x31c0 <= codePoint && codePoint <= 0x31e3) ||\n (0x31f0 <= codePoint && codePoint <= 0x321e) ||\n (0x3220 <= codePoint && codePoint <= 0x3247) ||\n (0x3250 <= codePoint && codePoint <= 0x32fe) ||\n (0x3300 <= codePoint && codePoint <= 0x4dbf) ||\n (0x4e00 <= codePoint && codePoint <= 0xa48c) ||\n (0xa490 <= codePoint && codePoint <= 0xa4c6) ||\n (0xa960 <= codePoint && codePoint <= 0xa97c) ||\n (0xac00 <= codePoint && codePoint <= 0xd7a3) ||\n (0xd7b0 <= codePoint && codePoint <= 0xd7c6) ||\n (0xd7cb <= codePoint && codePoint <= 0xd7fb) ||\n (0xf900 <= codePoint && codePoint <= 0xfaff) ||\n (0xfe10 <= codePoint && codePoint <= 0xfe19) ||\n (0xfe30 <= codePoint && codePoint <= 0xfe52) ||\n (0xfe54 <= codePoint && codePoint <= 0xfe66) ||\n (0xfe68 <= codePoint && codePoint <= 0xfe6b) ||\n (0x1b000 <= codePoint && codePoint <= 0x1b001) ||\n (0x1f200 <= codePoint && codePoint <= 0x1f202) ||\n (0x1f210 <= codePoint && codePoint <= 0x1f23a) ||\n (0x1f240 <= codePoint && codePoint <= 0x1f248) ||\n (0x1f250 <= codePoint && codePoint <= 0x1f251) ||\n (0x20000 <= codePoint && codePoint <= 0x2f73f) ||\n (0x2b740 <= codePoint && codePoint <= 0x2fffd) ||\n (0x30000 <= codePoint && codePoint <= 0x3fffd)\n ) {\n return 'W';\n }\n if (\n (0x0020 <= codePoint && codePoint <= 0x007e) ||\n (0x00a2 <= codePoint && codePoint <= 0x00a3) ||\n (0x00a5 <= codePoint && codePoint <= 0x00a6) ||\n 0x00ac === codePoint ||\n 0x00af === codePoint ||\n (0x27e6 <= codePoint && codePoint <= 0x27ed) ||\n (0x2985 <= codePoint && codePoint <= 0x2986)\n ) {\n return 'Na';\n }\n if (\n 0x00a1 === codePoint ||\n 0x00a4 === codePoint ||\n (0x00a7 <= codePoint && codePoint <= 0x00a8) ||\n 0x00aa === codePoint ||\n (0x00ad <= codePoint && codePoint <= 0x00ae) ||\n (0x00b0 <= codePoint && codePoint <= 0x00b4) ||\n (0x00b6 <= codePoint && codePoint <= 0x00ba) ||\n (0x00bc <= codePoint && codePoint <= 0x00bf) ||\n 0x00c6 === codePoint ||\n 0x00d0 === codePoint ||\n (0x00d7 <= codePoint && codePoint <= 0x00d8) ||\n (0x00de <= codePoint && codePoint <= 0x00e1) ||\n 0x00e6 === codePoint ||\n (0x00e8 <= codePoint && codePoint <= 0x00ea) ||\n (0x00ec <= codePoint && codePoint <= 0x00ed) ||\n 0x00f0 === codePoint ||\n (0x00f2 <= codePoint && codePoint <= 0x00f3) ||\n (0x00f7 <= codePoint && codePoint <= 0x00fa) ||\n 0x00fc === codePoint ||\n 0x00fe === codePoint ||\n 0x0101 === codePoint ||\n 0x0111 === codePoint ||\n 0x0113 === codePoint ||\n 0x011b === codePoint ||\n (0x0126 <= codePoint && codePoint <= 0x0127) ||\n 0x012b === codePoint ||\n (0x0131 <= codePoint && codePoint <= 0x0133) ||\n 0x0138 === codePoint ||\n (0x013f <= codePoint && codePoint <= 0x0142) ||\n 0x0144 === codePoint ||\n (0x0148 <= codePoint && codePoint <= 0x014b) ||\n 0x014d === codePoint ||\n (0x0152 <= codePoint && codePoint <= 0x0153) ||\n (0x0166 <= codePoint && codePoint <= 0x0167) ||\n 0x016b === codePoint ||\n 0x01ce === codePoint ||\n 0x01d0 === codePoint ||\n 0x01d2 === codePoint ||\n 0x01d4 === codePoint ||\n 0x01d6 === codePoint ||\n 0x01d8 === codePoint ||\n 0x01da === codePoint ||\n 0x01dc === codePoint ||\n 0x0251 === codePoint ||\n 0x0261 === codePoint ||\n 0x02c4 === codePoint ||\n 0x02c7 === codePoint ||\n (0x02c9 <= codePoint && codePoint <= 0x02cb) ||\n 0x02cd === codePoint ||\n 0x02d0 === codePoint ||\n (0x02d8 <= codePoint && codePoint <= 0x02db) ||\n 0x02dd === codePoint ||\n 0x02df === codePoint ||\n (0x0300 <= codePoint && codePoint <= 0x036f) ||\n (0x0391 <= codePoint && codePoint <= 0x03a1) ||\n (0x03a3 <= codePoint && codePoint <= 0x03a9) ||\n (0x03b1 <= codePoint && codePoint <= 0x03c1) ||\n (0x03c3 <= codePoint && codePoint <= 0x03c9) ||\n 0x0401 === codePoint ||\n (0x0410 <= codePoint && codePoint <= 0x044f) ||\n 0x0451 === codePoint ||\n 0x2010 === codePoint ||\n (0x2013 <= codePoint && codePoint <= 0x2016) ||\n (0x2018 <= codePoint && codePoint <= 0x2019) ||\n (0x201c <= codePoint && codePoint <= 0x201d) ||\n (0x2020 <= codePoint && codePoint <= 0x2022) ||\n (0x2024 <= codePoint && codePoint <= 0x2027) ||\n 0x2030 === codePoint ||\n (0x2032 <= codePoint && codePoint <= 0x2033) ||\n 0x2035 === codePoint ||\n 0x203b === codePoint ||\n 0x203e === codePoint ||\n 0x2074 === codePoint ||\n 0x207f === codePoint ||\n (0x2081 <= codePoint && codePoint <= 0x2084) ||\n 0x20ac === codePoint ||\n 0x2103 === codePoint ||\n 0x2105 === codePoint ||\n 0x2109 === codePoint ||\n 0x2113 === codePoint ||\n 0x2116 === codePoint ||\n (0x2121 <= codePoint && codePoint <= 0x2122) ||\n 0x2126 === codePoint ||\n 0x212b === codePoint ||\n (0x2153 <= codePoint && codePoint <= 0x2154) ||\n (0x215b <= codePoint && codePoint <= 0x215e) ||\n (0x2160 <= codePoint && codePoint <= 0x216b) ||\n (0x2170 <= codePoint && codePoint <= 0x2179) ||\n 0x2189 === codePoint ||\n (0x2190 <= codePoint && codePoint <= 0x2199) ||\n (0x21b8 <= codePoint && codePoint <= 0x21b9) ||\n 0x21d2 === codePoint ||\n 0x21d4 === codePoint ||\n 0x21e7 === codePoint ||\n 0x2200 === codePoint ||\n (0x2202 <= codePoint && codePoint <= 0x2203) ||\n (0x2207 <= codePoint && codePoint <= 0x2208) ||\n 0x220b === codePoint ||\n 0x220f === codePoint ||\n 0x2211 === codePoint ||\n 0x2215 === codePoint ||\n 0x221a === codePoint ||\n (0x221d <= codePoint && codePoint <= 0x2220) ||\n 0x2223 === codePoint ||\n 0x2225 === codePoint ||\n (0x2227 <= codePoint && codePoint <= 0x222c) ||\n 0x222e === codePoint ||\n (0x2234 <= codePoint && codePoint <= 0x2237) ||\n (0x223c <= codePoint && codePoint <= 0x223d) ||\n 0x2248 === codePoint ||\n 0x224c === codePoint ||\n 0x2252 === codePoint ||\n (0x2260 <= codePoint && codePoint <= 0x2261) ||\n (0x2264 <= codePoint && codePoint <= 0x2267) ||\n (0x226a <= codePoint && codePoint <= 0x226b) ||\n (0x226e <= codePoint && codePoint <= 0x226f) ||\n (0x2282 <= codePoint && codePoint <= 0x2283) ||\n (0x2286 <= codePoint && codePoint <= 0x2287) ||\n 0x2295 === codePoint ||\n 0x2299 === codePoint ||\n 0x22a5 === codePoint ||\n 0x22bf === codePoint ||\n 0x2312 === codePoint ||\n (0x2460 <= codePoint && codePoint <= 0x24e9) ||\n (0x24eb <= codePoint && codePoint <= 0x254b) ||\n (0x2550 <= codePoint && codePoint <= 0x2573) ||\n (0x2580 <= codePoint && codePoint <= 0x258f) ||\n (0x2592 <= codePoint && codePoint <= 0x2595) ||\n (0x25a0 <= codePoint && codePoint <= 0x25a1) ||\n (0x25a3 <= codePoint && codePoint <= 0x25a9) ||\n (0x25b2 <= codePoint && codePoint <= 0x25b3) ||\n (0x25b6 <= codePoint && codePoint <= 0x25b7) ||\n (0x25bc <= codePoint && codePoint <= 0x25bd) ||\n (0x25c0 <= codePoint && codePoint <= 0x25c1) ||\n (0x25c6 <= codePoint && codePoint <= 0x25c8) ||\n 0x25cb === codePoint ||\n (0x25ce <= codePoint && codePoint <= 0x25d1) ||\n (0x25e2 <= codePoint && codePoint <= 0x25e5) ||\n 0x25ef === codePoint ||\n (0x2605 <= codePoint && codePoint <= 0x2606) ||\n 0x2609 === codePoint ||\n (0x260e <= codePoint && codePoint <= 0x260f) ||\n (0x2614 <= codePoint && codePoint <= 0x2615) ||\n 0x261c === codePoint ||\n 0x261e === codePoint ||\n 0x2640 === codePoint ||\n 0x2642 === codePoint ||\n (0x2660 <= codePoint && codePoint <= 0x2661) ||\n (0x2663 <= codePoint && codePoint <= 0x2665) ||\n (0x2667 <= codePoint && codePoint <= 0x266a) ||\n (0x266c <= codePoint && codePoint <= 0x266d) ||\n 0x266f === codePoint ||\n (0x269e <= codePoint && codePoint <= 0x269f) ||\n (0x26be <= codePoint && codePoint <= 0x26bf) ||\n (0x26c4 <= codePoint && codePoint <= 0x26cd) ||\n (0x26cf <= codePoint && codePoint <= 0x26e1) ||\n 0x26e3 === codePoint ||\n (0x26e8 <= codePoint && codePoint <= 0x26ff) ||\n 0x273d === codePoint ||\n 0x2757 === codePoint ||\n (0x2776 <= codePoint && codePoint <= 0x277f) ||\n (0x2b55 <= codePoint && codePoint <= 0x2b59) ||\n (0x3248 <= codePoint && codePoint <= 0x324f) ||\n (0xe000 <= codePoint && codePoint <= 0xf8ff) ||\n (0xfe00 <= codePoint && codePoint <= 0xfe0f) ||\n 0xfffd === codePoint ||\n (0x1f100 <= codePoint && codePoint <= 0x1f10a) ||\n (0x1f110 <= codePoint && codePoint <= 0x1f12d) ||\n (0x1f130 <= codePoint && codePoint <= 0x1f169) ||\n (0x1f170 <= codePoint && codePoint <= 0x1f19a) ||\n (0xe0100 <= codePoint && codePoint <= 0xe01ef) ||\n (0xf0000 <= codePoint && codePoint <= 0xffffd) ||\n (0x100000 <= codePoint && codePoint <= 0x10fffd)\n ) {\n return 'A';\n }\n\n return 'N';\n};\n\nconst emojiRegex = () => {\n // https://mths.be/emoji\n // eslint-disable-next-line max-len\n return /[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26F9(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC3\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC08\\uDC26](?:\\u200D\\u2B1B)?|[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC6F(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDD75(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC2\\uDECE-\\uDEDB\\uDEE0-\\uDEE8]|\\uDD3C(?:\\u200D[\\u2640\\u2642]\\uFE0F?|\\uD83C[\\uDFFB-\\uDFFF])?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g;\n};\n","import { isArray, isNil, isString, isValid } from '../../../common';\nimport type { Maybe } from '../../../type';\nimport { eastAsianCharacterInfo } from '../stringWidth';\nimport type { ITextMeasureOption, ITextMeasureSpec, ITextSize, TextMeasureInput, TextMeasureMethod } from './interface';\nimport { getContextFont } from './util';\n\nexport class TextMeasure> {\n /** 英文字母集 */\n static readonly ALPHABET_CHAR_SET = 'abcdefghijklmnopqrstuvwxyz';\n\n /** 数字集 */\n static readonly NUMBERS_CHAR_SET = '0123456789';\n\n /** 全角字符 */\n static readonly FULL_SIZE_CHAR = '字';\n\n /** 数字大小缓存 */\n _numberCharSize: Maybe = null;\n\n /** 全角字符大小缓存 */\n _fullCharSize: Maybe = null;\n\n /** 字母大小缓存 */\n _letterCharSize: Maybe = null;\n\n /** 特殊字符缓存 */\n _specialCharSizeMap: Record = {};\n\n /** 内置测量 canvas */\n protected _canvas: Maybe = null;\n protected _context: Maybe = null;\n protected _contextSaved: boolean = false;\n\n /** 是否不支持 canvas */\n protected _notSupportCanvas: boolean = false;\n /** 是否不支持 vrender */\n protected _notSupportVRender: boolean = false;\n\n /** 文字 spec */\n protected readonly _userSpec: Partial = {};\n textSpec: ITextMeasureSpec;\n\n protected readonly _option: ITextMeasureOption;\n\n /** 标准测量方法 */\n protected readonly _standardMethod: (text: TextMeasureInput) => ITextSize;\n\n /** 特殊字符集 */\n specialCharSet: string = '-/: .,@%\\'\"~';\n\n constructor(option: ITextMeasureOption, textSpec?: Partial) {\n this._option = option;\n this._userSpec = textSpec ?? {};\n this.textSpec = this._initSpec();\n if (isValid(option.specialCharSet)) {\n this.specialCharSet = option.specialCharSet;\n }\n this._standardMethod = isValid(option.getTextBounds)\n ? this.fullMeasure.bind(this)\n : this.measureWithNaiveCanvas.bind(this);\n }\n\n /** 初始化测量相关上下文 */\n initContext() {\n if (this._notSupportCanvas) {\n return false;\n }\n if (isNil(this._canvas)) {\n if (isValid(this._option.getCanvasForMeasure)) {\n this._canvas = this._option.getCanvasForMeasure();\n }\n if (\n isNil(this._canvas) &&\n typeof window !== 'undefined' &&\n typeof window.document !== 'undefined' &&\n globalThis &&\n isValid(globalThis.document)\n ) {\n // 默认创建方法\n this._canvas = globalThis.document.createElement('canvas');\n }\n }\n if (isNil(this._context) && isValid(this._canvas)) {\n const context = this._canvas.getContext('2d');\n if (isValid(context)) {\n context.save();\n context.font = getContextFont(this.textSpec);\n this._contextSaved = true;\n this._context = context;\n }\n }\n if (isNil(this._context)) {\n this._notSupportCanvas = true;\n return false;\n }\n return true;\n }\n\n protected _initSpec(): ITextMeasureSpec {\n const { defaultFontParams = {} } = this._option;\n const {\n fontStyle = defaultFontParams.fontStyle,\n fontVariant = defaultFontParams.fontVariant,\n fontWeight = defaultFontParams.fontWeight ?? 'normal',\n fontSize = defaultFontParams.fontSize ?? 12,\n fontFamily = defaultFontParams.fontFamily ?? 'sans-serif',\n align,\n textAlign = align ?? 'center',\n baseline,\n textBaseline = baseline ?? 'middle',\n ellipsis,\n limit\n } = this._userSpec;\n\n let { lineHeight = fontSize } = this._userSpec;\n if (isString(lineHeight) && lineHeight[lineHeight.length - 1] === '%') {\n const scale = Number.parseFloat(lineHeight.substring(0, lineHeight.length - 1)) / 100;\n lineHeight = fontSize * scale;\n }\n\n return {\n fontStyle,\n fontVariant,\n fontFamily,\n fontSize,\n fontWeight,\n textAlign,\n textBaseline,\n ellipsis,\n limit,\n lineHeight\n };\n }\n\n /** 计算文本宽高 */\n measure(text: TextMeasureInput, method?: TextMeasureMethod): ITextSize {\n switch (method) {\n case 'vrender':\n case 'canopus' as any:\n return this.fullMeasure(text);\n case 'canvas':\n return this.measureWithNaiveCanvas(text);\n case 'simple':\n return this.quickMeasureWithoutCanvas(text);\n case 'quick':\n default:\n return this.quickMeasure(text);\n }\n }\n\n /** 精确计算文本宽高 */\n fullMeasure(text: TextMeasureInput): ITextSize {\n if (isNil(text)) {\n return { width: 0, height: 0 };\n }\n if (isNil(this._option.getTextBounds) || !this._notSupportVRender) {\n return this.measureWithNaiveCanvas(text); // 降级\n }\n const { fontFamily, fontSize, fontWeight, textAlign, textBaseline, ellipsis, limit, lineHeight } = this.textSpec;\n let size: ITextSize;\n try {\n const bounds = this._option.getTextBounds({\n text,\n fontFamily,\n fontSize,\n fontWeight,\n textAlign,\n textBaseline,\n ellipsis: !!ellipsis,\n maxLineWidth: limit || Infinity,\n lineHeight\n });\n size = { width: bounds.width(), height: bounds.height() };\n } catch (e) {\n this._notSupportVRender = true;\n size = this.measureWithNaiveCanvas(text); // 降级\n }\n return size;\n }\n\n /** 通过原生 canvas 精确计算文本宽度,高度为估算 */\n measureWithNaiveCanvas(text: TextMeasureInput): ITextSize {\n return this._measureReduce(text, this._measureWithNaiveCanvas.bind(this));\n }\n protected _measureWithNaiveCanvas(text: string): ITextSize {\n if (!this.initContext()) {\n return this._quickMeasureWithoutCanvas(text); // 降级\n }\n const metrics = this._context!.measureText(text);\n const { fontSize, lineHeight } = this.textSpec;\n return { width: metrics.width, height: (lineHeight as number) ?? fontSize };\n }\n\n /** 快速估算文本宽高 */\n quickMeasure(text: TextMeasureInput): ITextSize {\n return this._measureReduce(text, this._quickMeasure.bind(this));\n }\n protected _quickMeasure(text: string): ITextSize {\n const totalSize: ITextSize = {\n width: 0,\n height: 0\n };\n\n for (let i = 0; i < text.length; i++) {\n const char = text[i];\n // 先判断是否特殊字符\n let size = this._measureSpecialChar(char);\n // 再判断是否数字\n if (isNil(size) && TextMeasure.NUMBERS_CHAR_SET.includes(char)) {\n size = this._measureNumberChar();\n }\n // 再判断全角字符\n if (isNil(size) && ['F', 'W'].includes(eastAsianCharacterInfo(char))) {\n size = this._measureFullSizeChar();\n }\n // 最后按半角字符处理\n if (isNil(size)) {\n size = this._measureLetterChar();\n }\n totalSize.width += size.width;\n totalSize.height = Math.max(totalSize.height, size.height);\n }\n return totalSize;\n }\n\n /** 不使用 canvas 来快速估算文本宽高 */\n quickMeasureWithoutCanvas(text: TextMeasureInput): ITextSize {\n return this._measureReduce(text, this._quickMeasureWithoutCanvas.bind(this));\n }\n protected _quickMeasureWithoutCanvas(text: string): ITextSize {\n const totalSize: ITextSize = {\n width: 0,\n height: 0\n };\n\n const { fontSize, lineHeight } = this.textSpec;\n for (let i = 0; i < text.length; i++) {\n const char = text[i];\n // 判断全角字符\n const size = ['F', 'W'].includes(eastAsianCharacterInfo(char)) ? 1 : 0.53;\n totalSize.width += size * fontSize;\n }\n totalSize.height = (lineHeight as number) ?? fontSize;\n return totalSize;\n }\n\n protected _measureReduce(text: TextMeasureInput, processor: (str: string) => ITextSize): ITextSize {\n const { fontSize, lineHeight } = this.textSpec;\n const defaultResult = { width: 0, height: 0 };\n\n if (isNil(text)) {\n return defaultResult;\n } else if (isArray(text)) {\n const textArr = text.filter(isValid).map(s => s.toString());\n if (textArr.length === 0) {\n return defaultResult;\n } else if (textArr.length === 1) {\n return processor(textArr[0]);\n }\n return {\n width: textArr.reduce((maxWidth, cur) => Math.max(maxWidth, processor(cur).width), 0),\n height: textArr.length * (((lineHeight as number) ?? fontSize) + 1) + 1 // 经验值\n };\n }\n return processor(text.toString());\n }\n\n /** 测量一个数字 */\n protected _measureNumberChar(): ITextSize {\n if (isNil(this._numberCharSize)) {\n const numberBounds = this._standardMethod(TextMeasure.NUMBERS_CHAR_SET);\n this._numberCharSize = {\n width: numberBounds.width / TextMeasure.NUMBERS_CHAR_SET.length, // 宽度取均值\n height: numberBounds.height\n };\n }\n return this._numberCharSize;\n }\n\n /** 测量一个全角字符 */\n protected _measureFullSizeChar(): ITextSize {\n if (isNil(this._fullCharSize)) {\n this._fullCharSize = this._standardMethod(TextMeasure.FULL_SIZE_CHAR);\n }\n return this._fullCharSize;\n }\n\n /** 测量一个英文字符 */\n protected _measureLetterChar(): ITextSize {\n if (isNil(this._letterCharSize)) {\n const alphabetBounds = this._standardMethod(TextMeasure.ALPHABET_CHAR_SET);\n this._letterCharSize = {\n width: alphabetBounds.width / TextMeasure.ALPHABET_CHAR_SET.length, // 宽度取均值\n height: alphabetBounds.height\n };\n }\n return this._letterCharSize;\n }\n\n /** 测量一个特殊字符 */\n protected _measureSpecialChar(char: string): Maybe {\n if (isValid(this._specialCharSizeMap[char])) {\n return this._specialCharSizeMap[char];\n }\n if (this.specialCharSet.includes(char)) {\n this._specialCharSizeMap[char] = this._standardMethod(char);\n return this._specialCharSizeMap[char];\n }\n return null;\n }\n\n release() {\n if (isValid(this._canvas)) {\n this._canvas = null;\n }\n if (isValid(this._context)) {\n if (this._contextSaved) {\n this._context.restore();\n this._contextSaved = false;\n }\n this._context = null;\n }\n }\n}\n","import type { ITextFontParams } from './interface';\n\n// FIXME: from VRender\nexport function getContextFont(text: Partial, defaultAttr: Partial = {}): string {\n const {\n fontStyle = defaultAttr.fontStyle,\n fontVariant = defaultAttr.fontVariant,\n fontWeight = defaultAttr.fontWeight,\n fontSize = defaultAttr.fontSize,\n fontFamily = defaultAttr.fontFamily\n } = text;\n return (\n '' +\n (fontStyle ? fontStyle + ' ' : '') +\n (fontVariant ? fontVariant + ' ' : '') +\n (fontWeight ? fontWeight + ' ' : '') +\n fontSize +\n 'px ' +\n (fontFamily ? fontFamily : 'sans-serif')\n );\n}\n","import type { interfaces } from './interfaces';\n\nconst BindingScopeEnum: interfaces.BindingScopeEnum = {\n Singleton: 'Singleton',\n Transient: 'Transient'\n};\n\nconst BindingTypeEnum: interfaces.BindingTypeEnum = {\n ConstantValue: 'ConstantValue',\n Constructor: 'Constructor',\n DynamicValue: 'DynamicValue',\n Factory: 'Factory',\n Function: 'Function',\n Instance: 'Instance',\n Invalid: 'Invalid',\n Provider: 'Provider'\n};\n\nconst TargetTypeEnum: interfaces.TargetTypeEnum = {\n ClassProperty: 'ClassProperty',\n ConstructorArgument: 'ConstructorArgument',\n Variable: 'Variable'\n};\n\nexport { BindingScopeEnum, BindingTypeEnum, TargetTypeEnum };\n","import { Generator } from '../generator';\nimport type { interfaces } from './interfaces';\nimport { BindingScopeEnum, BindingTypeEnum } from './literal_types';\n\nclass Binding implements interfaces.Binding {\n id: number;\n moduleId!: interfaces.ContainerModuleBase['id'];\n\n // Determines weather the bindings has been already activated\n // The activation action takes place when an instance is resolved\n // If the scope is singleton it only happens once\n activated: boolean;\n\n // A runtime identifier because at runtime we don't have interfaces\n serviceIdentifier: interfaces.ServiceIdentifier;\n\n // constructor from binding to or toConstructor\n implementationType: interfaces.Newable | TActivated | null;\n\n // Cache used to allow singleton scope and BindingType.ConstantValue bindings\n cache: TActivated | null;\n\n // Cache used to allow BindingType.DynamicValue bindings\n dynamicValue: interfaces.DynamicValue | null;\n\n // The scope mode to be used\n scope: interfaces.BindingScope;\n\n // The kind of binding\n type: interfaces.BindingType;\n\n // A factory method used in BindingType.Factory bindings\n factory: interfaces.FactoryCreator | null;\n\n // An async factory method used in BindingType.Provider bindings\n provider: interfaces.ProviderCreator | null;\n\n // A constraint used to limit the contexts in which this binding is applicable\n constraint: interfaces.ConstraintFunction;\n\n // // On activation handler (invoked just before an instance is added to cache and injected)\n // onActivation: interfaces.BindingActivation | null;\n\n // // On deactivation handler (invoked just before an instance is unbinded and removed from container)\n // onDeactivation: interfaces.BindingDeactivation | null;\n\n constructor(serviceIdentifier: interfaces.ServiceIdentifier, scope: interfaces.BindingScope) {\n this.id = Generator.GenAutoIncrementId();\n this.activated = false;\n this.serviceIdentifier = serviceIdentifier;\n this.scope = scope;\n this.type = BindingTypeEnum.Invalid;\n this.constraint = (request: interfaces.Request | null) => true;\n this.implementationType = null;\n this.cache = null;\n this.factory = null;\n this.provider = null;\n // this.onActivation = null;\n // this.onDeactivation = null;\n this.dynamicValue = null;\n }\n\n clone(): interfaces.Binding {\n const clone = new Binding(this.serviceIdentifier, this.scope);\n clone.activated = clone.scope === BindingScopeEnum.Singleton ? this.activated : false;\n clone.implementationType = this.implementationType;\n clone.dynamicValue = this.dynamicValue;\n clone.scope = this.scope;\n clone.type = this.type;\n // clone.factory = this.factory;\n clone.provider = this.provider;\n clone.constraint = this.constraint;\n // clone.onActivation = this.onActivation;\n // clone.onDeactivation = this.onDeactivation;\n clone.cache = this.cache;\n return clone;\n }\n}\n\nexport { Binding };\n","import type { interfaces } from './interfaces';\nimport Reflect from '../Reflect-metadata';\nimport { PARAM_TYPES, TAGGED, TAGGED_PROP } from './metadata_keys';\n\nclass MetadataReader implements interfaces.MetadataReader {\n getConstructorMetadata(constructorFunc: NewableFunction): interfaces.ConstructorMetadata {\n // TypeScript compiler generated annotations\n const compilerGeneratedMetadata = (Reflect as any).getMetadata(PARAM_TYPES, constructorFunc);\n\n // User generated constructor annotations\n const userGeneratedMetadata = (Reflect as any).getMetadata(TAGGED, constructorFunc);\n\n return {\n compilerGeneratedMetadata,\n userGeneratedMetadata: userGeneratedMetadata || {}\n };\n }\n\n getPropertiesMetadata(constructorFunc: NewableFunction): interfaces.MetadataMap {\n // // User generated properties annotations\n // const userGeneratedMetadata = (Reflect as any).getMetadata(TAGGED_PROP, constructorFunc) || [];\n // return userGeneratedMetadata;\n throw new Error('暂未实现');\n }\n}\n\nexport { MetadataReader };\n","import type { interfaces } from '../interfaces';\nimport { Metadata } from '../meta-data';\nimport { NAMED_TAG } from '../metadata_keys';\n\nconst taggedConstraint = (key: string | number | symbol) => (value: unknown) => {\n const constraint: interfaces.ConstraintFunction = (request: any) => {\n if (request == null) {\n return false;\n }\n if (request.key === key && request.value === value) {\n return true;\n }\n if (request.constructorArgsMetadata == null) {\n return false;\n }\n const constructorArgsMetadata = request.constructorArgsMetadata;\n for (let i = 0; i < constructorArgsMetadata.length; i++) {\n if (constructorArgsMetadata[i].key === key && constructorArgsMetadata[i].value === value) {\n return true;\n }\n }\n return false;\n };\n // request !== null && request.target !== null && request.target.matchesTag(key)(value);\n\n constraint.metaData = new Metadata(key, value);\n\n return constraint;\n};\n\nexport const namedConstraint = taggedConstraint(NAMED_TAG);\n","import type { interfaces } from '../interfaces';\nimport { BindingScopeEnum } from '../literal_types';\nimport { namedConstraint } from './constraint_helpers';\n\nclass BindingInSyntax implements interfaces.BindingInSyntax {\n private _binding: interfaces.Binding;\n\n constructor(binding: interfaces.Binding) {\n this._binding = binding;\n }\n\n inRequestScope(): interfaces.BindingInSyntax {\n // this._binding.scope = BindingScopeEnum.Request;\n // return new BindingWhenOnSyntax(this._binding);\n throw new Error('暂未实现');\n }\n\n inSingletonScope(): interfaces.BindingInSyntax {\n this._binding.scope = BindingScopeEnum.Singleton;\n return this;\n }\n\n inTransientScope(): interfaces.BindingInSyntax {\n this._binding.scope = BindingScopeEnum.Transient;\n return this;\n }\n\n whenTargetNamed(name: string | number | symbol): interfaces.BindingOnSyntax {\n this._binding.constraint = namedConstraint(name);\n return this;\n }\n}\n\nexport { BindingInSyntax };\n","import type { interfaces } from '../interfaces';\nimport { BindingScopeEnum, BindingTypeEnum } from '../literal_types';\nimport { BindingInSyntax } from './binding_in_syntax';\n\nclass BindingToSyntax implements interfaces.BindingToSyntax {\n // TODO: Implement an internal type `_BindingToSyntax` wherein this member\n // can be public. Let `BindingToSyntax` be the presentational type that\n // depends on it, and does not expose this member as public.\n private _binding: interfaces.Binding;\n\n constructor(binding: interfaces.Binding) {\n this._binding = binding;\n }\n\n to(constructor: interfaces.Newable): interfaces.BindingInWhenOnSyntax {\n this._binding.type = BindingTypeEnum.Instance;\n this._binding.implementationType = constructor;\n return new BindingInSyntax(this._binding);\n }\n\n toSelf(): interfaces.BindingInWhenOnSyntax {\n const self = this._binding.serviceIdentifier;\n return this.to(self as any);\n }\n\n toDynamicValue(func: interfaces.DynamicValue): interfaces.BindingInWhenOnSyntax {\n this._binding.type = BindingTypeEnum.DynamicValue;\n this._binding.cache = null;\n this._binding.dynamicValue = func;\n this._binding.implementationType = null;\n return new BindingInSyntax(this._binding);\n }\n\n toConstantValue(value: T): interfaces.BindingInSyntax {\n this._binding.type = BindingTypeEnum.ConstantValue;\n this._binding.cache = value;\n this._binding.dynamicValue = null;\n this._binding.implementationType = null;\n this._binding.scope = BindingScopeEnum.Singleton;\n return new BindingInSyntax(this._binding);\n }\n\n toFactory(factory: interfaces.FactoryCreator): interfaces.BindingInWhenOnSyntax {\n this._binding.type = BindingTypeEnum.Factory;\n this._binding.factory = factory;\n this._binding.scope = BindingScopeEnum.Singleton;\n return new BindingInSyntax(this._binding);\n }\n\n toService(service: string | symbol | interfaces.Newable | interfaces.Abstract): void {\n this.toDynamicValue(context => context.container.get(service));\n }\n}\n\nexport { BindingToSyntax };\n","import { Generator } from '../generator';\nimport { Binding } from './binding';\nimport type { interfaces } from './interfaces';\nimport { BindingScopeEnum, BindingTypeEnum } from './literal_types';\nimport { Metadata } from './meta-data';\nimport { INJECT_TAG, MULTI_INJECT_TAG, NAMED_TAG } from './metadata_keys';\nimport { MetadataReader } from './metadata_reader';\nimport { BindingToSyntax } from './syntax/binding_to_syntax';\n\ninterface IChildRequest {\n injectIdentifier: any;\n metadata: interfaces.Metadata[];\n bindings: Binding[];\n}\n\ninterface GetArgs {\n avoidConstraints: boolean;\n isMultiInject: boolean;\n serviceIdentifier: interfaces.ServiceIdentifier;\n key: string | symbol;\n value: any;\n}\n\nexport class Container {\n id: number;\n readonly options: interfaces.ContainerOptions;\n private _bindingDictionary: Map[]>;\n private _metadataReader: interfaces.MetadataReader;\n\n constructor(containerOptions?: interfaces.ContainerOptions) {\n const options = containerOptions || {};\n options.defaultScope = options.defaultScope || BindingScopeEnum.Transient;\n // console.log(this);\n this.options = options;\n this.id = Generator.GenAutoIncrementId();\n this._bindingDictionary = new Map();\n this._metadataReader = new MetadataReader();\n }\n\n load(module: interfaces.ContainerModule) {\n const getHelpers = this._getContainerModuleHelpersFactory();\n\n const containerModuleHelpers = getHelpers(module.id);\n\n module.registry(\n containerModuleHelpers.bindFunction as interfaces.Bind,\n containerModuleHelpers.unbindFunction,\n containerModuleHelpers.isboundFunction,\n containerModuleHelpers.rebindFunction as interfaces.Rebind\n );\n }\n\n get(serviceIdentifier: interfaces.ServiceIdentifier): T {\n const getArgs = this._getNotAllArgs(serviceIdentifier, false);\n\n return this._get(getArgs) as T;\n }\n\n getAll(serviceIdentifier: interfaces.ServiceIdentifier): T[] {\n const getArgs = this._getAllArgs(serviceIdentifier);\n\n return this._get(getArgs) as T[];\n }\n\n getTagged(serviceIdentifier: interfaces.ServiceIdentifier, key: string | number | symbol, value: unknown): T {\n const getArgs = this._getNotAllArgs(serviceIdentifier, false, key, value);\n\n return this._get(getArgs) as T;\n }\n\n getNamed(serviceIdentifier: interfaces.ServiceIdentifier, named: string | number | symbol): T {\n return this.getTagged(serviceIdentifier, NAMED_TAG, named);\n }\n\n isBound(serviceIdentifier: interfaces.ServiceIdentifier): boolean {\n return this._bindingDictionary.has(serviceIdentifier);\n }\n\n // Registers a type binding\n bind(serviceIdentifier: interfaces.ServiceIdentifier): interfaces.BindingToSyntax {\n const scope = this.options.defaultScope;\n const binding = new Binding(serviceIdentifier, scope);\n const list = this._bindingDictionary.get(serviceIdentifier) || [];\n list.push(binding);\n this._bindingDictionary.set(serviceIdentifier, list);\n return new BindingToSyntax(binding);\n }\n\n unbind(serviceIdentifier: interfaces.ServiceIdentifier): void {\n this._bindingDictionary.delete(serviceIdentifier);\n }\n\n rebind(serviceIdentifier: interfaces.ServiceIdentifier): interfaces.BindingToSyntax {\n this.unbind(serviceIdentifier);\n return this.bind(serviceIdentifier);\n }\n\n private _getContainerModuleHelpersFactory() {\n const setModuleId = (\n bindingToSyntax: interfaces.BindingToSyntax,\n moduleId: interfaces.ContainerModuleBase['id']\n ) => {\n // TODO: Implement an internal type `_BindingToSyntax` wherein this member\n // can be public. Let `BindingToSyntax` be the presentational type that\n // depends on it, and does not expose this member as public.\n (\n bindingToSyntax as unknown as { _binding: { moduleId: interfaces.ContainerModuleBase['id'] } }\n )._binding.moduleId = moduleId;\n };\n\n const getBindFunction =\n (moduleId: interfaces.ContainerModuleBase['id']) =>\n (serviceIdentifier: interfaces.ServiceIdentifier) => {\n const bindingToSyntax = this.bind(serviceIdentifier);\n setModuleId(bindingToSyntax, moduleId);\n return bindingToSyntax as BindingToSyntax;\n };\n\n const getUnbindFunction = () => (serviceIdentifier: interfaces.ServiceIdentifier) => {\n return this.unbind(serviceIdentifier);\n };\n\n const getUnbindAsyncFunction = () => (serviceIdentifier: interfaces.ServiceIdentifier) => {\n return null as any;\n // return this.unbindAsync(serviceIdentifier);\n };\n\n const getIsboundFunction = () => (serviceIdentifier: interfaces.ServiceIdentifier) => {\n return this.isBound(serviceIdentifier);\n };\n\n const getRebindFunction =\n (moduleId: interfaces.ContainerModuleBase['id']) =>\n (serviceIdentifier: interfaces.ServiceIdentifier) => {\n const bindingToSyntax = this.rebind(serviceIdentifier);\n setModuleId(bindingToSyntax, moduleId);\n return bindingToSyntax as BindingToSyntax;\n };\n return (mId: interfaces.ContainerModuleBase['id']) => ({\n bindFunction: getBindFunction(mId),\n isboundFunction: getIsboundFunction(),\n rebindFunction: getRebindFunction(mId),\n unbindFunction: getUnbindFunction(),\n unbindAsyncFunction: getUnbindAsyncFunction()\n });\n }\n\n private _getNotAllArgs(\n serviceIdentifier: interfaces.ServiceIdentifier,\n isMultiInject: boolean,\n key?: string | number | symbol | undefined,\n value?: unknown\n ): any {\n return {\n avoidConstraints: false,\n isMultiInject,\n serviceIdentifier,\n key,\n value\n };\n }\n\n private _getAllArgs(serviceIdentifier: interfaces.ServiceIdentifier): any {\n return {\n avoidConstraints: true,\n isMultiInject: true,\n serviceIdentifier\n };\n }\n\n private _get(getArgs: GetArgs): T | T[] {\n const result: T[] = [];\n const bindings = this._bindingDictionary.get(getArgs.serviceIdentifier).filter(b => {\n return b.constraint(getArgs as any);\n }) as Binding[];\n bindings.forEach(binding => {\n result.push(this._resolveFromBinding(binding));\n });\n\n return !getArgs.isMultiInject && result.length === 1 ? result[0] : result;\n }\n\n private _getChildRequest(binding: Binding) {\n const constr = binding.implementationType;\n const { userGeneratedMetadata } = this._metadataReader.getConstructorMetadata(constr as any);\n const keys = Object.keys(userGeneratedMetadata);\n const arr = [];\n for (let i = 0; i < keys.length; i++) {\n const constructorArgsMetadata = userGeneratedMetadata[i];\n const targetMetadataMap = {};\n constructorArgsMetadata.forEach(md => {\n targetMetadataMap[md.key] = md.value;\n });\n const metadata = {\n inject: targetMetadataMap[INJECT_TAG],\n multiInject: targetMetadataMap[MULTI_INJECT_TAG]\n };\n const injectIdentifier = metadata.inject || metadata.multiInject;\n const target = {\n serviceIdentifier: injectIdentifier,\n constructorArgsMetadata\n };\n const bindings = this._bindingDictionary.get(injectIdentifier).filter(b => {\n return b.constraint(target as any);\n });\n const request = {\n injectIdentifier,\n metadata: constructorArgsMetadata,\n bindings\n };\n\n arr.push(request);\n }\n\n return arr;\n }\n\n private _resolveFromBinding(binding: Binding): T {\n const result = this._getResolvedFromBinding(binding);\n\n this._saveToScope(binding, result);\n\n return result;\n }\n\n private _getResolvedFromBinding(binding: Binding) {\n let result: T;\n switch (binding.type) {\n case BindingTypeEnum.ConstantValue:\n case BindingTypeEnum.Function:\n result = binding.cache as T;\n break;\n case BindingTypeEnum.Instance:\n result = this._resolveInstance(binding, binding.implementationType as interfaces.Newable);\n break;\n default:\n result = binding.dynamicValue({ container: this } as any);\n }\n\n return result;\n }\n\n private _resolveInstance(binding: Binding, constr: interfaces.Newable): T {\n if (binding.activated) {\n return binding.cache;\n }\n\n const childRequests = this._getChildRequest(binding);\n return this._createInstance(constr, childRequests);\n }\n\n private _createInstance(constr: interfaces.Newable, childRequests: IChildRequest[]) {\n if (childRequests.length) {\n const resolved = this._resolveRequests(childRequests);\n const obj = new constr(...resolved);\n return obj;\n }\n const obj = new constr();\n return obj;\n }\n\n private _resolveRequests(childRequests: IChildRequest[]): any[] {\n return childRequests.map(request => {\n return request.bindings.length > 1\n ? request.bindings.map(binding => this._resolveFromBinding(binding))\n : this._resolveFromBinding(request.bindings[0]);\n });\n }\n\n private _saveToScope(binding: Binding, result: any) {\n if (binding.scope === BindingScopeEnum.Singleton) {\n binding.cache = result;\n binding.activated = true;\n }\n }\n}\n","export const CanvasFactory = Symbol.for('CanvasFactory');\nexport const Context2dFactory = Symbol.for('Context2dFactory');\n","import type { IPointLike, vec2 } from '@visactor/vutils';\nimport { pi, pi2 } from '@visactor/vutils';\nimport { enumCommandMap as CMD } from '../common/path-svg';\nimport type { CommandType, IContext2d } from '../interface';\nimport { container } from '../container';\nimport { application } from '../application';\nimport { CanvasFactory, Context2dFactory } from './constants';\nimport type { CanvasConfigType, ICanvas, ICanvasFactory, IContext2dFactory } from '../interface';\n\nexport function wrapCanvas(params: CanvasConfigType) {\n return container.getNamed(CanvasFactory, application.global.env)(params);\n}\n\nexport function wrapContext(canvas: ICanvas, dpr: number) {\n return container.getNamed(Context2dFactory, application.global.env)(canvas, dpr);\n}\n// 源码参考 http://pomax.github.io/bezierinfo/#projections\n/**\n * 源码参考zrender https://github.com/ecomfe/zrender/\n * BSD 3-Clause License\n\n Copyright (c) 2017, Baidu Inc.\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n * Neither the name of the copyright holder nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n// todo: 优化逻辑\n\nconst EPSILON_NUMERIC = 1e-4;\n\nconst THREE_SQRT = Math.sqrt(3);\nconst ONE_THIRD = 1 / 3;\nfunction isAroundZero(val: number) {\n return val > -EPSILON && val < EPSILON;\n}\nfunction isNotAroundZero(val: number) {\n return val > EPSILON || val < -EPSILON;\n}\nexport function vec2Equals(d1: vec2, d2: vec2): boolean {\n return Math.abs(d1[0] - d2[0]) + Math.abs(d1[1] - d2[1]) < 1e-10;\n}\n\nexport function isNumber(data: any): boolean {\n return typeof data === 'number' && Number.isFinite(data);\n}\n\nconst _v0: [number, number] = [0, 0];\nconst _v1: [number, number] = [0, 0];\nconst _v2: [number, number] = [0, 0];\n\nfunction distanceSquare(v1: [number, number], v2: [number, number]): number {\n return (v1[0] - v2[0]) * (v1[0] - v2[0]) + (v1[1] - v2[1]) * (v1[1] - v2[1]);\n}\n\n/**\n * 计算二次方贝塞尔值\n */\nexport function quadraticAt(p0: number, p1: number, p2: number, t: number): number {\n const onet = 1 - t;\n return onet * (onet * p0 + 2 * t * p1) + t * t * p2;\n}\n\n/**\n * 计算三次贝塞尔值\n */\nexport function cubicAt(p0: number, p1: number, p2: number, p3: number, t: number): number {\n const onet = 1 - t;\n return onet * onet * (onet * p0 + 3 * t * p1) + t * t * (t * p3 + 3 * onet * p2);\n}\n\n/**\n * 计算二次方贝塞尔方程根\n * @return 有效根数目\n */\nexport function quadraticRootAt(p0: number, p1: number, p2: number, val: number, roots: number[]): number {\n const a = p0 - 2 * p1 + p2;\n const b = 2 * (p1 - p0);\n const c = p0 - val;\n\n let n = 0;\n if (isAroundZero(a)) {\n if (isNotAroundZero(b)) {\n const t1 = -c / b;\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n } else {\n const disc = b * b - 4 * a * c;\n if (isAroundZero(disc)) {\n const t1 = -b / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n } else if (disc > 0) {\n const discSqrt = Math.sqrt(disc);\n const t1 = (-b + discSqrt) / (2 * a);\n const t2 = (-b - discSqrt) / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n }\n }\n return n;\n}\n\n/**\n * 计算二次贝塞尔方程极限值\n */\nexport function quadraticExtremum(p0: number, p1: number, p2: number): number {\n const divider = p0 + p2 - 2 * p1;\n if (divider === 0) {\n // p1 is center of p0 and p2\n return 0.5;\n }\n\n return (p0 - p1) / divider;\n}\n\n/**\n * 投射点到二次贝塞尔曲线上,返回投射距离。\n * 投射点有可能会有一个或者多个,这里只返回其中距离最短的一个。\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n * @param {Array.} out 投射点\n * @return {number}\n */\nexport function quadraticProjectPoint(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x: number,\n y: number,\n out: [number, number] | null\n): number {\n // http://pomax.github.io/bezierinfo/#projections\n let t: number = 0;\n let interval = 0.005;\n let d = Infinity;\n\n _v0[0] = x;\n _v0[1] = y;\n\n // 先粗略估计一下可能的最小距离的 t 值\n // PENDING\n for (let _t = 0; _t < 1; _t += 0.05) {\n _v1[0] = quadraticAt(x0, x1, x2, _t);\n _v1[1] = quadraticAt(y0, y1, y2, _t);\n const d1 = distanceSquare(_v0, _v1);\n if (d1 < d) {\n t = _t;\n d = d1;\n }\n }\n d = Infinity;\n\n // At most 32 iteration\n for (let i = 0; i < 32; i++) {\n if (interval < EPSILON_NUMERIC) {\n break;\n }\n const prev = t - interval;\n const next = t + interval;\n // t - interval\n _v1[0] = quadraticAt(x0, x1, x2, prev);\n _v1[1] = quadraticAt(y0, y1, y2, prev);\n\n const d1 = distanceSquare(_v1, _v0);\n\n if (prev >= 0 && d1 < d) {\n t = prev;\n d = d1;\n } else {\n // t + interval\n _v2[0] = quadraticAt(x0, x1, x2, next);\n _v2[1] = quadraticAt(y0, y1, y2, next);\n const d2 = distanceSquare(_v2, _v0);\n if (next <= 1 && d2 < d) {\n t = next;\n d = d2;\n } else {\n interval *= 0.5;\n }\n }\n }\n // t\n if (out) {\n out[0] = quadraticAt(x0, x1, x2, t);\n out[1] = quadraticAt(y0, y1, y2, t);\n }\n\n return Math.sqrt(d);\n}\n\n/**\n * 投射点到三次贝塞尔曲线上,返回投射距离。\n * 投射点有可能会有一个或者多个,这里只返回其中距离最短的一个。\n */\nexport function cubicProjectPoint(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n x: number,\n y: number,\n out: [number, number] | null\n): number {\n // http://pomax.github.io/bezierinfo/#projections\n let t: number = 0;\n let interval = 0.005;\n let d = Infinity;\n let prev;\n let next;\n let d1;\n let d2;\n\n _v0[0] = x;\n _v0[1] = y;\n\n // 先粗略估计一下可能的最小距离的 t 值\n // PENDING\n for (let _t = 0; _t < 1; _t += 0.05) {\n _v1[0] = cubicAt(x0, x1, x2, x3, _t);\n _v1[1] = cubicAt(y0, y1, y2, y3, _t);\n d1 = distanceSquare(_v0, _v1);\n if (d1 < d) {\n t = _t;\n d = d1;\n }\n }\n d = Infinity;\n\n // At most 32 iteration\n for (let i = 0; i < 32; i++) {\n if (interval < EPSILON_NUMERIC) {\n break;\n }\n prev = t - interval;\n next = t + interval;\n // t - interval\n _v1[0] = cubicAt(x0, x1, x2, x3, prev);\n _v1[1] = cubicAt(y0, y1, y2, y3, prev);\n\n d1 = distanceSquare(_v1, _v0);\n\n if (prev >= 0 && d1 < d) {\n t = prev;\n d = d1;\n } else {\n // t + interval\n _v2[0] = cubicAt(x0, x1, x2, x3, next);\n _v2[1] = cubicAt(y0, y1, y2, y3, next);\n d2 = distanceSquare(_v2, _v0);\n\n if (next <= 1 && d2 < d) {\n t = next;\n d = d2;\n } else {\n interval *= 0.5;\n }\n }\n }\n // t\n if (out) {\n out[0] = cubicAt(x0, x1, x2, x3, t);\n out[1] = cubicAt(y0, y1, y2, y3, t);\n }\n // console.log(interval, i);\n return Math.sqrt(d);\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/util.ts\nexport function normalizeRadian(angle: number): number {\n angle %= pi2;\n if (angle < 0) {\n angle += pi2;\n }\n return angle;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/windingLine.ts\nexport default function windingLine(x0: number, y0: number, x1: number, y1: number, x: number, y: number): number {\n if ((y > y0 && y > y1) || (y < y0 && y < y1)) {\n return 0;\n }\n // Ignore horizontal line\n if (y1 === y0) {\n return 0;\n }\n const t = (y - y0) / (y1 - y0);\n\n let dir = y1 < y0 ? 1 : -1;\n // Avoid winding error when intersection point is the connect point of two line of polygon\n if (t === 1 || t === 0) {\n dir = y1 < y0 ? 0.5 : -0.5;\n }\n\n const x_ = t * (x1 - x0) + x0;\n\n // If (x, y) on the line, considered as \"contain\".\n return x_ === x ? Infinity : x_ > x ? dir : 0;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/quadratic.ts\nexport function containQuadStroke(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n lineWidth: number,\n x: number,\n y: number\n): boolean {\n if (lineWidth === 0) {\n return false;\n }\n const _l = lineWidth;\n // Quick reject\n if (\n (y > y0 + _l && y > y1 + _l && y > y2 + _l) ||\n (y < y0 - _l && y < y1 - _l && y < y2 - _l) ||\n (x > x0 + _l && x > x1 + _l && x > x2 + _l) ||\n (x < x0 - _l && x < x1 - _l && x < x2 - _l)\n ) {\n return false;\n }\n const d = quadraticProjectPoint(x0, y0, x1, y1, x2, y2, x, y, null);\n return d <= _l / 2;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/cubic.ts\n/**\n * 三次贝塞尔曲线描边包含判断\n */\nexport function containCubicStroke(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n lineWidth: number,\n x: number,\n y: number\n): boolean {\n if (lineWidth === 0) {\n return false;\n }\n const _l = lineWidth;\n // Quick reject\n if (\n (y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l) ||\n (y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l) ||\n (x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l) ||\n (x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l)\n ) {\n return false;\n }\n const d = cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, null);\n return d <= _l / 2;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/arc.ts\n/**\n * 圆弧描边包含判断\n */\nexport function containArcStroke(\n cx: number,\n cy: number,\n r: number,\n startAngle: number,\n endAngle: number,\n anticlockwise: boolean,\n lineWidth: number,\n x: number,\n y: number\n): boolean {\n if (lineWidth === 0) {\n return false;\n }\n const _l = lineWidth;\n\n x -= cx;\n y -= cy;\n const d = Math.sqrt(x * x + y * y);\n\n if (d - _l > r || d + _l < r) {\n return false;\n }\n // TODO\n if (Math.abs(startAngle - endAngle) % pi2 < 1e-4) {\n // Is a circle\n return true;\n }\n if (anticlockwise) {\n const tmp = startAngle;\n startAngle = normalizeRadian(endAngle);\n endAngle = normalizeRadian(tmp);\n } else {\n startAngle = normalizeRadian(startAngle);\n endAngle = normalizeRadian(endAngle);\n }\n if (startAngle > endAngle) {\n endAngle += pi2;\n }\n\n let angle = Math.atan2(y, x);\n if (angle < 0) {\n angle += pi2;\n }\n return (angle >= startAngle && angle <= endAngle) || (angle + pi2 >= startAngle && angle + pi2 <= endAngle);\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/line.ts\n/**\n * 线段包含判断\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} lineWidth\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n */\nexport function containLineStroke(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n lineWidth: number,\n x: number,\n y: number\n): boolean {\n if (lineWidth === 0) {\n return false;\n }\n const _l = lineWidth;\n const _halfL = lineWidth / 2;\n let _a = 0;\n let _b = x0;\n // Quick reject\n if (\n (y > y0 + _halfL && y > y1 + _halfL) ||\n (y < y0 - _halfL && y < y1 - _halfL) ||\n (x > x0 + _halfL && x > x1 + _halfL) ||\n (x < x0 - _halfL && x < x1 - _halfL)\n ) {\n return false;\n }\n\n if (x0 !== x1) {\n _a = (y0 - y1) / (x0 - x1);\n _b = (x0 * y1 - x1 * y0) / (x0 - x1);\n } else {\n return Math.abs(x - x0) <= _l / 2;\n }\n const tmp = _a * x - y + _b;\n const _s = (tmp * tmp) / (_a * _a + 1);\n return _s <= ((_l / 2) * _l) / 2;\n}\n\nconst globalPoint: IPointLike = { x: 0, y: 0 };\nexport function transformPoint(pos: IPointLike, ctx: IContext2d, out?: IPointLike): IPointLike {\n const matrix = ctx.currentMatrix.getInverse();\n out = out || globalPoint;\n out.x = pos.x * matrix.a + pos.y * matrix.c + matrix.e;\n out.y = pos.x * matrix.b + pos.y * matrix.d + matrix.f;\n return out;\n}\n\nconst EPSILON = 1e-4;\n\n/**\n * 计算三次贝塞尔方程根,使用盛金公式\n */\nexport function cubicRootAt(p0: number, p1: number, p2: number, p3: number, val: number, roots: number[]): number {\n // Evaluate roots of cubic functions\n const a = p3 + 3 * (p1 - p2) - p0;\n const b = 3 * (p2 - p1 * 2 + p0);\n const c = 3 * (p1 - p0);\n const d = p0 - val;\n\n const A = b * b - 3 * a * c;\n const B = b * c - 9 * a * d;\n const C = c * c - 3 * b * d;\n\n let n = 0;\n\n if (isAroundZero(A) && isAroundZero(B)) {\n if (isAroundZero(b)) {\n roots[0] = 0;\n } else {\n const t1 = -c / b; //t1, t2, t3, b is not zero\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n } else {\n const disc = B * B - 4 * A * C;\n\n if (isAroundZero(disc)) {\n const K = B / A;\n const t1 = -b / a + K; // t1, a is not zero\n const t2 = -K / 2; // t2, t3\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n } else if (disc > 0) {\n const discSqrt = Math.sqrt(disc);\n let Y1 = A * b + 1.5 * a * (-B + discSqrt);\n let Y2 = A * b + 1.5 * a * (-B - discSqrt);\n if (Y1 < 0) {\n Y1 = -Math.pow(-Y1, ONE_THIRD);\n } else {\n Y1 = Math.pow(Y1, ONE_THIRD);\n }\n if (Y2 < 0) {\n Y2 = -Math.pow(-Y2, ONE_THIRD);\n } else {\n Y2 = Math.pow(Y2, ONE_THIRD);\n }\n const t1 = (-b - (Y1 + Y2)) / (3 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n } else {\n const T = (2 * A * b - 3 * a * B) / (2 * Math.sqrt(A * A * A));\n const theta = Math.acos(T) / 3;\n const ASqrt = Math.sqrt(A);\n const tmp = Math.cos(theta);\n\n const t1 = (-b - 2 * ASqrt * tmp) / (3 * a);\n const t2 = (-b + ASqrt * (tmp + THREE_SQRT * Math.sin(theta))) / (3 * a);\n const t3 = (-b + ASqrt * (tmp - THREE_SQRT * Math.sin(theta))) / (3 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n if (t3 >= 0 && t3 <= 1) {\n roots[n++] = t3;\n }\n }\n }\n return n;\n}\n\n/**\n * 计算三次贝塞尔方程极限值的位置\n * @return 有效数目\n */\nexport function cubicExtrema(p0: number, p1: number, p2: number, p3: number, extrema: number[]): number {\n const b = 6 * p2 - 12 * p1 + 6 * p0;\n const a = 9 * p1 + 3 * p3 - 3 * p0 - 9 * p2;\n const c = 3 * p1 - 3 * p0;\n\n let n = 0;\n if (isAroundZero(a)) {\n if (isNotAroundZero(b)) {\n const t1 = -c / b;\n if (t1 >= 0 && t1 <= 1) {\n extrema[n++] = t1;\n }\n }\n } else {\n const disc = b * b - 4 * a * c;\n if (isAroundZero(disc)) {\n extrema[0] = -b / (2 * a);\n } else if (disc > 0) {\n const discSqrt = Math.sqrt(disc);\n const t1 = (-b + discSqrt) / (2 * a);\n const t2 = (-b - discSqrt) / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n extrema[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n extrema[n++] = t2;\n }\n }\n }\n return n;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\nfunction isAroundEqual(a: number, b: number) {\n return Math.abs(a - b) < EPSILON;\n}\n\n// 临时数组\nconst roots = [-1, -1, -1];\nconst extrema = [-1, -1];\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\nfunction swapExtrema() {\n const tmp = extrema[0];\n extrema[0] = extrema[1];\n extrema[1] = tmp;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\nfunction windingCubic(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n x: number,\n y: number\n): number {\n // Quick reject\n if ((y > y0 && y > y1 && y > y2 && y > y3) || (y < y0 && y < y1 && y < y2 && y < y3)) {\n return 0;\n }\n const nRoots = cubicRootAt(y0, y1, y2, y3, y, roots);\n if (nRoots === 0) {\n return 0;\n }\n\n let w = 0;\n let nExtrema = -1;\n let y0_ = 0;\n let y1_ = 0;\n for (let i = 0; i < nRoots; i++) {\n const t = roots[i];\n\n // Avoid winding error when intersection point is the connect point of two line of polygon\n const unit = t === 0 || t === 1 ? 0.5 : 1;\n\n const x_ = cubicAt(x0, x1, x2, x3, t);\n if (x_ < x) {\n // Quick reject\n continue;\n }\n if (nExtrema < 0) {\n nExtrema = cubicExtrema(y0, y1, y2, y3, extrema);\n if (extrema[1] < extrema[0] && nExtrema > 1) {\n swapExtrema();\n }\n y0_ = cubicAt(y0, y1, y2, y3, extrema[0]);\n if (nExtrema > 1) {\n y1_ = cubicAt(y0, y1, y2, y3, extrema[1]);\n }\n }\n if (nExtrema === 2) {\n // 分成三段单调函数\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n } else if (t < extrema[1]) {\n w += y1_ < y0_ ? unit : -unit;\n } else {\n w += y3 < y1_ ? unit : -unit;\n }\n } else {\n // 分成两段单调函数\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n } else {\n w += y3 < y0_ ? unit : -unit;\n }\n }\n }\n return w;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\nfunction windingQuadratic(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x: number,\n y: number\n): number {\n // Quick reject\n if ((y > y0 && y > y1 && y > y2) || (y < y0 && y < y1 && y < y2)) {\n return 0;\n }\n const nRoots = quadraticRootAt(y0, y1, y2, y, roots);\n if (nRoots === 0) {\n return 0;\n }\n\n const t = quadraticExtremum(y0, y1, y2);\n if (t >= 0 && t <= 1) {\n let w = 0;\n const y_ = quadraticAt(y0, y1, y2, t);\n for (let i = 0; i < nRoots; i++) {\n // Remove one endpoint.\n const unit = roots[i] === 0 || roots[i] === 1 ? 0.5 : 1;\n\n const x_ = quadraticAt(x0, x1, x2, roots[i]);\n if (x_ < x) {\n // Quick reject\n continue;\n }\n if (roots[i] < t) {\n w += y_ < y0 ? unit : -unit;\n } else {\n w += y2 < y_ ? unit : -unit;\n }\n }\n return w;\n }\n\n // Remove one endpoint.\n const unit = roots[0] === 0 || roots[0] === 1 ? 0.5 : 1;\n\n const x_ = quadraticAt(x0, x1, x2, roots[0]);\n if (x_ < x) {\n // Quick reject\n return 0;\n }\n return y2 < y0 ? unit : -unit;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\n// TODO\n// Arc 旋转\n// startAngle, endAngle has been normalized by normalizeArcAngles\nfunction windingArc(\n cx: number,\n cy: number,\n r: number,\n startAngle: number,\n endAngle: number,\n anticlockwise: boolean,\n x: number,\n y: number\n) {\n y -= cy;\n if (y > r || y < -r) {\n return 0;\n }\n const tmp = Math.sqrt(r * r - y * y);\n roots[0] = -tmp;\n roots[1] = tmp;\n\n const dTheta = Math.abs(startAngle - endAngle);\n if (dTheta < 1e-4) {\n return 0;\n }\n if (dTheta >= pi2 - 1e-4) {\n // Is a circle\n startAngle = 0;\n endAngle = pi2;\n const dir = anticlockwise ? 1 : -1;\n if (x >= roots[0] + cx && x <= roots[1] + cx) {\n return dir;\n }\n\n return 0;\n }\n\n if (startAngle > endAngle) {\n // Swap, make sure startAngle is smaller than endAngle.\n const tmp = startAngle;\n startAngle = endAngle;\n endAngle = tmp;\n }\n // endAngle - startAngle is normalized to 0 - 2*pi.\n // So following will normalize them to 0 - 4*pi\n if (startAngle < 0) {\n startAngle += pi2;\n endAngle += pi2;\n }\n\n let w = 0;\n for (let i = 0; i < 2; i++) {\n const x_ = roots[i];\n if (x_ + cx > x) {\n let angle = Math.atan2(y, x_);\n let dir = anticlockwise ? 1 : -1;\n if (angle < 0) {\n angle = pi2 + angle;\n }\n if ((angle >= startAngle && angle <= endAngle) || (angle + pi2 >= startAngle && angle + pi2 <= endAngle)) {\n if (angle > pi / 2 && angle < pi * 1.5) {\n dir = -dir;\n }\n w += dir;\n }\n }\n }\n return w;\n}\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/core/PathProxy.ts\nfunction modpi2(radian: number) {\n const n = Math.round((radian / pi) * 1e8) / 1e8;\n return (n % 2) * pi;\n}\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/core/PathProxy.ts\nfunction normalizeArcAngles(angles: [number, number], anticlockwise: boolean) {\n let newStartAngle = modpi2(angles[0]);\n if (newStartAngle < 0) {\n newStartAngle += pi2;\n }\n const delta = newStartAngle - angles[0];\n let newEndAngle = angles[1];\n newEndAngle += delta;\n if (!anticlockwise && newEndAngle - newStartAngle >= pi2) {\n newEndAngle = newStartAngle + pi2;\n } else if (anticlockwise && newStartAngle - newEndAngle >= pi2) {\n newEndAngle = newStartAngle - pi2;\n } else if (!anticlockwise && newStartAngle > newEndAngle) {\n newEndAngle = newStartAngle + (pi2 - modpi2(newStartAngle - newEndAngle));\n } else if (anticlockwise && newStartAngle < newEndAngle) {\n newEndAngle = newStartAngle - (pi2 - modpi2(newEndAngle - newStartAngle));\n }\n angles[0] = newStartAngle;\n angles[1] = newEndAngle;\n}\n\nconst tmpAngles: [number, number] = [0, 0];\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\nfunction containPath(commands: CommandType[], lineWidth: number, isStroke: boolean, x: number, y: number): boolean {\n const data = commands;\n const len = commands.length;\n let w = 0;\n let xi = 0;\n let yi = 0;\n let x0 = 0;\n let y0 = 0;\n let x1;\n let y1;\n\n for (let i = 0; i < len; i++) {\n const command = data[i];\n const isFirst = i === 0;\n // Begin a new subpath\n if (command[0] === CMD.M && i > 1) {\n // Close previous subpath\n if (!isStroke) {\n w += windingLine(xi, yi, x0, y0, x, y);\n }\n }\n if (isFirst) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n //\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n xi = command[1] as number;\n yi = command[2] as number;\n\n x0 = xi;\n y0 = yi;\n }\n\n const c0 = command[0];\n const c1 = command[1] as number;\n const c2 = command[2] as number;\n const c3 = command[3] as number;\n const c4 = command[4] as number;\n const c5 = command[5] as number;\n const c6 = command[6] as number;\n\n // TODO Arc 判断的开销比较大\n let startAngle = c4;\n let endAngle = c5;\n tmpAngles[0] = startAngle;\n tmpAngles[1] = endAngle;\n normalizeArcAngles(tmpAngles, Boolean(command[6]));\n startAngle = tmpAngles[0];\n endAngle = tmpAngles[1];\n const theta = startAngle;\n const dTheta = endAngle - startAngle;\n const anticlockwise = !!(1 - (command[6] ? 0 : 1));\n const _x = ((x - c1) * c3) / c3 + c1;\n switch (c0) {\n case CMD.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n x0 = c1;\n y0 = c2;\n xi = x0;\n yi = y0;\n break;\n case CMD.L:\n if (isStroke) {\n if (containLineStroke(xi, yi, c1, c2, lineWidth, x, y)) {\n return true;\n }\n } else {\n // NOTE 在第一个命令为 L, C, Q 的时候会计算出 NaN\n w += windingLine(xi, yi, c1, c2, x, y) || 0;\n }\n xi = c1;\n yi = c2;\n break;\n case CMD.C:\n if (isStroke) {\n if (containCubicStroke(xi, yi, c1, c2, c3, c4, c5, c6, lineWidth, x, y)) {\n return true;\n }\n } else {\n w += windingCubic(xi, yi, c1, c2, c3, c4, c5, c6, x, y) || 0;\n }\n xi = c5;\n yi = c6;\n break;\n case CMD.Q:\n if (isStroke) {\n if (containQuadStroke(xi, yi, c1, c2, c3, c4, lineWidth, x, y)) {\n return true;\n }\n } else {\n w += windingQuadratic(xi, yi, c1, c2, c3, c4, x, y) || 0;\n }\n xi = c3;\n yi = c4;\n break;\n case CMD.A:\n // TODO Arc 旋转\n x1 = Math.cos(theta) * c3 + c1;\n y1 = Math.sin(theta) * c3 + c2;\n // 不是直接使用 arc 命令\n if (!isFirst) {\n w += windingLine(xi, yi, x1, y1, x, y);\n } else {\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n }\n // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放\n if (isStroke) {\n if (containArcStroke(c1, c2, c3, theta, theta + dTheta, anticlockwise, lineWidth, _x, y)) {\n return true;\n }\n } else {\n w += windingArc(c1, c2, c3, theta, theta + dTheta, anticlockwise, _x, y);\n }\n xi = Math.cos(theta + dTheta) * c3 + c1;\n yi = Math.sin(theta + dTheta) * c3 + c2;\n break;\n case CMD.R:\n x0 = xi = c1;\n y0 = yi = c2;\n x1 = x0 + c3;\n y1 = y0 + c4;\n if (isStroke) {\n if (\n containLineStroke(x0, y0, x1, y0, lineWidth, x, y) ||\n containLineStroke(x1, y0, x1, y1, lineWidth, x, y) ||\n containLineStroke(x1, y1, x0, y1, lineWidth, x, y) ||\n containLineStroke(x0, y1, x0, y0, lineWidth, x, y)\n ) {\n return true;\n }\n } else {\n // FIXME Clockwise ?\n w += windingLine(x1, y0, x1, y1, x, y);\n w += windingLine(x0, y1, x0, y0, x, y);\n }\n break;\n case CMD.Z:\n if (isStroke) {\n if (containLineStroke(xi, yi, x0, y0, lineWidth, x, y)) {\n return true;\n }\n } else {\n // Close a subpath\n w += windingLine(xi, yi, x0, y0, x, y);\n // 如果被任何一个 subpath 包含\n // FIXME subpaths may overlap\n // if (w !== 0) {\n // return true;\n // }\n }\n xi = x0;\n yi = y0;\n break;\n }\n }\n if (!isStroke && !isAroundEqual(yi, y0)) {\n w += windingLine(xi, yi, x0, y0, x, y) || 0;\n }\n return w !== 0;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\nexport function contain(commands: CommandType[], x: number, y: number): boolean {\n return containPath(commands, 0, false, x, y);\n}\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\nexport function containStroke(commands: CommandType[], lineWidth: number, x: number, y: number): boolean {\n return containPath(commands, lineWidth, true, x, y);\n}\n","import { application } from '../application';\nimport type { ICanvas, Releaseable, IAllocate } from '../interface';\nimport { wrapCanvas } from '../canvas/util';\n\nexport class DefaultCanvasAllocate implements IAllocate, Releaseable {\n protected pools: ICanvas[] = [];\n protected _commonCanvas: any;\n // 已经被分配出去的canvas\n protected allocatedCanvas: ICanvas[] = [];\n shareCanvas(): ICanvas {\n if (this.allocatedCanvas.length) {\n return this.allocatedCanvas[0];\n }\n return this.getCommonCanvas();\n }\n getCommonCanvas(): ICanvas {\n if (!this._commonCanvas) {\n this._commonCanvas = this.allocate({ width: 100, height: 100, dpr: 2 });\n }\n return this._commonCanvas;\n }\n allocate(data: { width: number; height: number; dpr: number }): ICanvas {\n if (!this.pools.length) {\n const c = wrapCanvas({\n nativeCanvas: application.global.createCanvas(data),\n ...data\n });\n this.allocatedCanvas.push(c);\n return c;\n }\n const m = this.pools.pop();\n m.resize(data.width, data.height);\n m.dpr = data.dpr;\n return m;\n }\n allocateByObj(canvas: ICanvas): ICanvas {\n if (!this.pools.length) {\n const data = {\n width: canvas.width / canvas.dpr,\n height: canvas.height / canvas.dpr,\n dpr: canvas.dpr\n };\n const c = wrapCanvas({\n nativeCanvas: application.global.createCanvas(data),\n ...data\n });\n this.allocatedCanvas.push(c);\n return c;\n }\n const m = this.pools.pop();\n m.width = canvas.width;\n m.height = canvas.height;\n return m;\n }\n free(d: ICanvas) {\n this.pools.push(d);\n }\n get length(): number {\n return this.pools.length;\n }\n release(...params: any): void {\n this.pools = [];\n }\n}\n\nexport const canvasAllocate = new DefaultCanvasAllocate();\n","import { inject, injectable } from '../common/inversify-lite';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport { Generator } from '../common/generator';\nimport type {\n ICanvas,\n IContext2d,\n IDomRectLike,\n IGlobal,\n IWindow,\n IWindowHandlerContribution,\n IWindowParams\n} from '../interface';\nimport { container } from '../container';\nimport { SyncHook } from '../tapable';\nimport { application } from '../application';\n\nexport const VWindow = Symbol.for('VWindow');\n\nexport const WindowHandlerContribution = Symbol.for('WindowHandlerContribution');\n\n/**\n * 窗口\n * 对于浏览器,就是管理某个Stage影响的Canvas\n * 对于原生,就是管理这个系统窗口\n */\n@injectable()\nexport class DefaultWindow implements IWindow {\n protected _width: number;\n protected _height: number;\n protected _handler: IWindowHandlerContribution;\n\n hooks = {\n onChange: new SyncHook<[number, number, number, number]>(['x', 'y', 'width', 'height'])\n };\n\n // 父窗口(容器),对于浏览器来说就是container dom\n declare parent: Window;\n // 窗口的大小\n get width(): number {\n if (this._handler) {\n const wh = this._handler.getWH();\n return (this._width = wh.width);\n }\n return this._width;\n }\n get height(): number {\n if (this._handler) {\n const wh = this._handler.getWH();\n return (this._height = wh.height);\n }\n return this._height;\n }\n // 窗口的位置\n // declare x: number;\n // declare y: number;\n declare _uid: number;\n // 窗口操作配置\n declare resizable: boolean;\n declare minHeight: number;\n declare minWidth: number;\n declare maxHeight: number;\n declare maxWidth: number;\n // 窗口配置\n declare title: string;\n\n /* 浏览器环境配置 */\n // 这是主体canvas,对于单图层来说就是绘图canvas\n // 对于多图层画布来说,就是用户传入的或者默认的一个canvas\n declare mainCanvas: ICanvas;\n declare layerCanvas: ICanvas[];\n declare actived: boolean;\n declare global: IGlobal;\n get dpr(): number {\n return this._handler.getDpr();\n }\n\n constructor() {\n this._uid = Generator.GenAutoIncrementId();\n this.global = application.global;\n this.postInit();\n }\n\n protected postInit() {\n this.global.hooks.onSetEnv.tap('window', () => {\n this.active();\n });\n this.active();\n }\n\n protected active() {\n const global = this.global;\n if (!global.env || this.actived) {\n return;\n }\n const handler = container.getNamed(WindowHandlerContribution, global.env);\n handler.configure(this, global);\n // this.contributions.getContributions().forEach((handlerContribution) => {\n // handlerContribution.configure(this, this.global);\n // });\n this.actived = true;\n }\n\n get style(): CSSStyleDeclaration | Record {\n return this._handler.getStyle();\n }\n\n set style(style: CSSStyleDeclaration | Record) {\n this._handler.setStyle(style);\n }\n\n create(params: IWindowParams): void {\n // 通过handler创建窗口\n this._handler.createWindow(params);\n\n // 使用window的wh\n const windowWH = this._handler.getWH();\n this._width = windowWH.width;\n this._height = windowWH.height;\n // 使用window的xy\n // const windowXY = this._handler.getXY();\n // this.x = windowXY.x;\n // this.y = windowXY.y;\n // 使用window的title\n this.title = this._handler.getTitle();\n this.resizable = true;\n }\n\n setWindowHandler(handler: IWindowHandlerContribution) {\n this._handler = handler;\n }\n\n setDpr(dpr: number): void {\n return this._handler.setDpr(dpr);\n }\n resize(w: number, h: number): void {\n return this._handler.resizeWindow(w, h);\n }\n configure(): void {\n throw new Error('暂不支持');\n }\n release(): void {\n return this._handler.releaseWindow();\n }\n getContext(): IContext2d {\n return this._handler.getContext();\n }\n getNativeHandler(): ICanvas {\n return this._handler.getNativeHandler();\n }\n getImageBuffer(type?: string): any {\n if (!this._handler.getImageBuffer) {\n return null;\n }\n return this._handler.getImageBuffer(type);\n }\n\n addEventListener(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void;\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions\n ): void {\n return this._handler.addEventListener(type, listener, options);\n }\n removeEventListener(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions\n ): void {\n return this._handler.removeEventListener(type, listener, options);\n }\n\n dispatchEvent(event: any): boolean {\n return this._handler.dispatchEvent(event);\n }\n\n getBoundingClientRect(): IDomRectLike {\n return this._handler.getBoundingClientRect();\n }\n\n getContainer(): HTMLElement | any {\n return this._handler.container;\n }\n\n clearViewBox(viewBox: IBoundsLike, color?: string) {\n this._handler.clearViewBox(viewBox, color);\n }\n\n isVisible(bbox?: IBoundsLike): boolean {\n return this._handler.isVisible(bbox);\n }\n\n onVisibleChange(cb: (currentVisible: boolean) => void) {\n return this._handler.onVisibleChange(cb);\n }\n\n getTopLeft(baseWindow?: boolean): { top: number; left: number } {\n return this._handler.getTopLeft(baseWindow);\n }\n}\n","import { injectable, inject, named } from '../common/inversify-lite';\nimport type {\n ICanvas,\n IContext2d,\n EnvType,\n IGlobal,\n ITextAttribute,\n IContributionProvider,\n IGraphic,\n IGraphicAttribute,\n IStage,\n IWindow\n} from '../interface';\nimport type { ITextMeasure, TextOptionsType } from '../interface/text';\nimport { TextMeasureContribution } from './contributions/textMeasure/textMeasure-contribution';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../common/contribution-provider';\nimport { DefaultTextStyle } from '../graphic/config';\nimport type { IMatrix, IPointLike, ITextMeasureOption } from '@visactor/vutils';\nimport { Matrix, TextMeasure } from '@visactor/vutils';\nimport type { IGraphicUtil, ITransformUtil, TransformType } from '../interface/core';\nimport { canvasAllocate } from '../allocator/canvas-allocate';\nimport { application } from '../application';\nimport { container } from '../container';\nimport { VWindow } from './window';\nimport { graphicCreator } from '../graphic';\n\n@injectable()\nexport class DefaultGraphicUtil implements IGraphicUtil {\n get canvas(): ICanvas {\n this.tryInitCanvas();\n return this._canvas;\n }\n get context(): IContext2d | null {\n this.tryInitCanvas();\n return this._context;\n }\n _canvas?: ICanvas;\n _context?: IContext2d | null;\n _textMeasure: ITextMeasure;\n configured: boolean;\n global: IGlobal;\n\n constructor(\n @inject(ContributionProvider)\n @named(TextMeasureContribution)\n protected readonly contributions: IContributionProvider\n ) {\n this.configured = false;\n this.global = application.global;\n this.global.hooks.onSetEnv.tap('graphic-util', (lastEnv, env, global) => {\n this.configured = false;\n this.configure(global, env);\n });\n }\n\n get textMeasure(): ITextMeasure {\n if (!this._textMeasure) {\n this.configure(this.global, this.global.env);\n }\n return this._textMeasure;\n }\n\n configure(global: IGlobal, env: EnvType) {\n if (this.configured) {\n return;\n }\n this.contributions.getContributions().forEach(contribution => {\n contribution.configure(this, env);\n });\n this.configured = true;\n }\n\n tryInitCanvas() {\n if (!this._canvas) {\n const canvas = canvasAllocate.shareCanvas();\n this._canvas = canvas;\n this._context = canvas.getContext('2d');\n }\n }\n\n bindTextMeasure(tm: ITextMeasure) {\n this._textMeasure = tm;\n }\n\n measureText(\n text: string,\n tc: TextOptionsType,\n method: 'native' | 'simple' | 'quick' = 'native'\n ): { width: number; height: number } {\n this.configure(this.global, this.global.env);\n const m = this.global.measureTextMethod;\n this.global.measureTextMethod = method;\n const data = {\n width: this._textMeasure.measureTextWidth(text, tc),\n height: tc.fontSize ?? DefaultTextStyle.fontSize\n };\n this.global.measureTextMethod = m;\n return data;\n }\n\n createTextMeasureInstance(\n textSpec?: Partial,\n option?: Partial,\n getCanvasForMeasure?: () => any\n ) {\n this.configure(this.global, this.global.env);\n return new TextMeasure(\n {\n defaultFontParams: {\n fontFamily: DefaultTextStyle.fontFamily,\n fontSize: DefaultTextStyle.fontSize\n },\n getCanvasForMeasure: getCanvasForMeasure || (() => this.canvas),\n getTextBounds: undefined,\n specialCharSet: '-/: .,@%\\'\"~' + TextMeasure.ALPHABET_CHAR_SET + TextMeasure.ALPHABET_CHAR_SET.toUpperCase(),\n ...(option ?? {})\n },\n textSpec\n );\n }\n\n drawGraphicToCanvas(\n graphic: IGraphic>,\n stage: IStage,\n canvas?: HTMLCanvasElement\n ): HTMLCanvasElement | null | Promise {\n if (!stage.defaultLayer) {\n return null;\n }\n const window = container.get(VWindow);\n const bounds = graphic.AABBBounds;\n const width = bounds.width();\n const height = bounds.height();\n window.create({\n width,\n height,\n canvas,\n dpr: stage.window.dpr,\n canvasControled: true,\n offscreen: true,\n title: ''\n });\n\n const x = -bounds.x1;\n const y = -bounds.y1;\n const disableCheckGraphicWidthOutRange = stage.params.optimize.disableCheckGraphicWidthOutRange;\n // 关掉dirtyBounds检测\n stage.params.optimize.disableCheckGraphicWidthOutRange = true;\n stage.defaultLayer.getNativeHandler().drawTo(window, [graphic as any], {\n x,\n y,\n width,\n height,\n stage,\n layer: stage.defaultLayer,\n renderService: stage.renderService,\n background: 'transparent',\n clear: true, // 第一个layer需要clear\n updateBounds: false\n });\n stage.params.optimize.disableCheckGraphicWidthOutRange = disableCheckGraphicWidthOutRange;\n\n const c = window.getNativeHandler();\n if (c.nativeCanvas) {\n return c.nativeCanvas;\n }\n return null;\n }\n}\n\nenum TransformMode {\n transform = 0,\n matrix = 1\n}\n\nconst _matrix = new Matrix();\n\n@injectable()\nexport class DefaultTransformUtil implements ITransformUtil {\n private matrix: IMatrix;\n private originTransform: TransformType;\n\n private outSourceMatrix: IMatrix;\n private outTargetMatrix: IMatrix;\n\n private mode: TransformMode;\n constructor() {\n this.matrix = new Matrix();\n }\n init(origin: TransformType): this {\n this.mode = TransformMode.transform;\n this.originTransform = origin;\n this.matrix.reset();\n return this;\n }\n fromMatrix(source: IMatrix, target: IMatrix): this {\n this.mode = TransformMode.matrix;\n this.outSourceMatrix = source;\n this.outTargetMatrix = target;\n return this;\n }\n\n // translate: (x: number, y: number) => Transform;\n // translateTo: (x: number, y: number) => Transform;\n private scaleMatrix(sx: number, sy: number, center?: IPointLike): this {\n // if (this.outSourceMatrix !== this.outTargetMatrix) {\n // // copy\n // const m = this.outSourceMatrix;\n // this.outTargetMatrix.setValue(m.a, m.b, m.c, m.d, m.e, m.f);\n // }\n const sMatrix = this.outSourceMatrix;\n _matrix.setValue(sMatrix.a, sMatrix.b, sMatrix.c, sMatrix.d, sMatrix.e, sMatrix.f);\n this.outTargetMatrix.reset();\n if (center) {\n const { x, y } = center;\n this.outTargetMatrix.translate(x, y);\n this.outTargetMatrix.scale(sx, sy);\n this.outTargetMatrix.translate(-x, -y);\n } else {\n this.outTargetMatrix.scale(sx, sy);\n }\n\n // _matrix.reset();\n // if (center) {\n // const { x, y } = center;\n // _matrix.translate(x, y);\n // _matrix.scale(sx, sy);\n // _matrix.translate(-x, -y);\n // } else {\n // _matrix.scale(sx, sy);\n // }\n this.outTargetMatrix.multiply(_matrix.a, _matrix.b, _matrix.c, _matrix.d, _matrix.e, _matrix.f);\n return this;\n }\n\n private rotateMatrix(angle: number, center?: IPointLike): this {\n const sMatrix = this.outSourceMatrix;\n _matrix.setValue(sMatrix.a, sMatrix.b, sMatrix.c, sMatrix.d, sMatrix.e, sMatrix.f);\n this.outTargetMatrix.reset();\n if (center) {\n const { x, y } = center;\n this.outTargetMatrix.translate(x, y);\n this.outTargetMatrix.rotate(angle);\n this.outTargetMatrix.translate(-x, -y);\n } else {\n this.outTargetMatrix.rotate(angle);\n }\n\n this.outTargetMatrix.multiply(_matrix.a, _matrix.b, _matrix.c, _matrix.d, _matrix.e, _matrix.f);\n return this;\n }\n scale(sx: number, sy: number, center?: IPointLike): this {\n if (this.mode === TransformMode.matrix) {\n return this.scaleMatrix(sx, sy, center);\n }\n return this;\n }\n rotate(angle: number, center?: IPointLike): this {\n if (this.mode === TransformMode.matrix) {\n return this.rotateMatrix(angle, center);\n }\n return this;\n }\n private translateMatrix(dx: number, dy: number): this {\n // if (this.outSourceMatrix !== this.outTargetMatrix) {\n // // copy\n // const m = this.outSourceMatrix;\n // this.outTargetMatrix.setValue(m.a, m.b, m.c, m.d, m.e, m.f);\n // }\n const sMatrix = this.outSourceMatrix;\n _matrix.setValue(sMatrix.a, sMatrix.b, sMatrix.c, sMatrix.d, sMatrix.e, sMatrix.f);\n this.outTargetMatrix.reset();\n this.outTargetMatrix.translate(dx, dy);\n\n this.outTargetMatrix.multiply(_matrix.a, _matrix.b, _matrix.c, _matrix.d, _matrix.e, _matrix.f);\n return this;\n }\n translate(dx: number, dy: number): this {\n if (this.mode === TransformMode.matrix) {\n return this.translateMatrix(dx, dy);\n }\n return this;\n }\n // scaleTo: (sx: number, sy: number, center: IPointLike) => Transform;\n // rotate: (rx: number, ry: number, center: IPointLike) => Transform;\n // rotateTo: (rx: number, ry: number, center: IPointLike) => Transform;\n // 语法糖\n // interactive: (dx: number, dy: number, dsx: number, dsy: number, drx: number, dry: number) => Transform;\n // // 扩展padding像素,用于外描边,内描边\n // extend: (origin: TransformType, padding: number) => Transform;\n // 将所有的transform生成为一次的transform\n simplify(target: TransformType): this {\n if (this.mode === TransformMode.matrix) {\n return this.simplifyMatrix(target);\n }\n return this;\n }\n private simplifyMatrix(target: TransformType): this {\n // let { a, b, c, d, e, f } = this.outTargetMatrix;\n // if (a === 0 || d === 0) return this;\n // const { dx=0, dy=0 } = target;\n // // 不处理dx和dy\n // e -= dx;\n // f -= dy;\n // const tanTheta = b / a;\n // const angle = Math.atan(tanTheta);\n // const cosTheta = cos(angle);\n // const sinTheta = sin(angle);\n // const sx = cosTheta !== 0 ? (a / cosTheta) : (b / sinTheta);\n // const sy = sinTheta !== 0 ? (-c / sinTheta) : (d / cosTheta);\n // const x = e;\n // const y = f;\n // target.x = x;\n // target.y = y;\n // target.dx = dx;\n return this;\n }\n}\n","import { Logger, clone } from '@visactor/vutils';\nimport type { IGraphicAttribute, IFullThemeSpec, IGraphic, IGroup, ITheme, IThemeSpec } from '../interface';\nimport {\n DefaultArcAttribute,\n DefaultAreaAttribute,\n DefaultCircleAttribute,\n DefaultGlyphAttribute,\n DefaultGroupAttribute,\n DefaultImageAttribute,\n DefaultLineAttribute,\n DefaultPathAttribute,\n DefaultPolygonAttribute,\n DefaultRect3dAttribute,\n DefaultRectAttribute,\n DefaultSymbolAttribute,\n DefaultTextAttribute,\n DefaultRichTextAttribute,\n DefaultRichTextIconAttribute\n} from './config';\n\nconst defaultThemeObj = {\n arc: DefaultArcAttribute,\n area: DefaultAreaAttribute,\n circle: DefaultCircleAttribute,\n line: DefaultLineAttribute,\n path: DefaultPathAttribute,\n symbol: DefaultSymbolAttribute,\n text: DefaultTextAttribute,\n rect: DefaultRectAttribute,\n rect3d: DefaultRect3dAttribute,\n polygon: DefaultPolygonAttribute,\n richtext: DefaultRichTextAttribute,\n richtextIcon: DefaultRichTextIconAttribute,\n image: DefaultImageAttribute,\n group: DefaultGroupAttribute,\n glyph: DefaultGlyphAttribute\n};\n\nconst themeKeys = Object.keys(defaultThemeObj);\n\nexport function newThemeObj(): IFullThemeSpec {\n return {\n arc: Object.assign({}, defaultThemeObj.arc),\n area: Object.assign({}, defaultThemeObj.area),\n circle: Object.assign({}, defaultThemeObj.circle),\n line: Object.assign({}, defaultThemeObj.line),\n path: Object.assign({}, defaultThemeObj.path),\n symbol: Object.assign({}, defaultThemeObj.symbol),\n text: Object.assign({}, defaultThemeObj.text),\n rect: Object.assign({}, defaultThemeObj.rect),\n rect3d: Object.assign({}, defaultThemeObj.rect3d),\n polygon: Object.assign({}, defaultThemeObj.polygon),\n richtext: Object.assign({}, defaultThemeObj.richtext),\n richtextIcon: Object.assign({}, defaultThemeObj.richtextIcon),\n image: Object.assign({}, defaultThemeObj.image),\n group: Object.assign({}, defaultThemeObj.group),\n glyph: Object.assign({}, defaultThemeObj.glyph)\n };\n}\n\n// /**\n// * 将t合并到out中\n// * @param out\n// * @param t\n// * @param rewrite 是否重写out的属性\n// * @returns\n// */\n// function combineTheme(out: IThemeSpec, t: IThemeSpec, rewrite: boolean = true) {\n// if (!t) {\n// return;\n// }\n// if (rewrite) {\n// Object.keys(t).forEach(k => {\n// if (out[k]) {\n// Object.assign(out[k], t[k]);\n// } else {\n// out[k] = t[k];\n// }\n// });\n// } else {\n// Object.keys(t).forEach(k => {\n// if (out[k]) {\n// // Object.assign(out[k], t[k]);\n// const outItem = out[k];\n// const tItem = t[k];\n// Object.keys(t[k]).forEach(kItem => {\n// if (outItem[kItem] === undefined) {\n// outItem[kItem] = tItem[kItem];\n// }\n// });\n// } else {\n// out[k] = t[k];\n// }\n// });\n// }\n// }\n\nfunction combine(out: Record, t: Record) {\n Object.keys(t).forEach(k => {\n out[k] = t[k];\n });\n}\n\nconst globalThemeObj = newThemeObj();\n\n// // 性能优化,没有修改的theme都使用这个\n// const defaultCommontTheme = newThemeObj();\n\n// function combineTheme(out: IThemeSpec, userTheme: IThemeSpec, defaultTheme: IFullThemeSpec) {\n\n// }\n\n// 优先级:\n// 1. userTheme\n// 2. commonTheme\n// 3. parentTheme\n// 4. defaultTheme\n\n// 使用原型链来保存主题,避免大量的merge操作\nexport class Theme implements ITheme {\n // 当前的总theme,最终合并后的theme\n combinedTheme: IFullThemeSpec;\n // 记录累计应用的所有用户设置上的theme\n userTheme?: IThemeSpec;\n\n protected _defaultTheme: IFullThemeSpec;\n\n dirty: boolean;\n\n constructor() {\n this.initTheme();\n this.dirty = false;\n }\n\n initTheme() {\n this._defaultTheme = {} as any;\n themeKeys.forEach(key => {\n this._defaultTheme[key] = Object.create(globalThemeObj[key]);\n });\n this.combinedTheme = this._defaultTheme;\n }\n\n /**\n * 获取group上应该有的主题配置\n * @param group\n * @returns\n */\n getTheme(group?: IGroup) {\n if (!group) {\n return this.combinedTheme;\n }\n if (!this.dirty) {\n return this.combinedTheme;\n }\n let parentTheme = {};\n const parentGroup = this.getParentWithTheme(group);\n if (parentGroup) {\n parentTheme = parentGroup.theme;\n }\n this.applyTheme(group, parentTheme);\n return this.combinedTheme;\n }\n\n // 获取具有主题的parent\n getParentWithTheme(group: IGroup) {\n while (group.parent) {\n group = group.parent;\n if (group.theme) {\n return group;\n }\n }\n return null;\n }\n\n // 应用主题,从根节点一直触发到当前节点(如果上层节点需要的话)\n applyTheme(group: IGroup, pt: IThemeSpec, force: boolean = false): IThemeSpec {\n if (this.dirty) {\n const parentGroup = this.getParentWithTheme(group);\n if (parentGroup) {\n const parentTheme = parentGroup.theme;\n if (parentTheme.dirty || force) {\n // 强制apply所有的上层\n parentTheme.applyTheme(parentGroup, pt, true);\n }\n }\n // 如果当前节点没有userTheme的话,直接复用上层的combinedTheme\n // 或者直接用默认的theme\n if (!this.userTheme) {\n if (parentGroup) {\n this.combinedTheme = parentGroup.theme.combinedTheme;\n } else {\n this.combinedTheme = this._defaultTheme;\n Logger.getInstance().warn('未知错误,走到不应该走的区域里');\n }\n this.dirty = false;\n } else {\n this.doCombine(parentGroup && parentGroup.theme.combinedTheme);\n }\n }\n\n return this.combinedTheme;\n }\n\n // 合并userTheme到combinedTheme\n protected doCombine(parentCombinedTheme?: IThemeSpec) {\n const userTheme = this.userTheme;\n const combinedTheme = this.combinedTheme;\n\n // 1. userTheme\n // 2. combinedTheme\n // 3. parentCombinedTheme\n // 4. defaultTheme\n themeKeys.forEach(k => {\n // init defaultTheme\n const obj = Object.create(globalThemeObj[k]);\n // merge parentCombinedTheme\n if (parentCombinedTheme && parentCombinedTheme[k]) {\n combine(obj, parentCombinedTheme[k]);\n }\n // merge combinedTheme\n if (combinedTheme[k]) {\n combine(obj, combinedTheme[k]);\n }\n // merge userTheme\n if (userTheme[k]) {\n combine(obj, userTheme[k]);\n }\n this.combinedTheme[k] = obj;\n });\n if (userTheme.common) {\n themeKeys.forEach(k => {\n combine(this.combinedTheme[k], userTheme.common);\n });\n }\n this.dirty = false;\n }\n\n setTheme(t: IThemeSpec, g: IGroup) {\n // 设置自己的nextTheme\n let userTheme = this.userTheme;\n if (userTheme) {\n Object.keys(t).forEach(k => {\n if (userTheme[k]) {\n Object.assign(userTheme[k], t[k]);\n } else {\n // todo,这里调用次数不多,应该问题不大\n userTheme[k] = Object.assign({}, t[k]);\n }\n });\n } else {\n userTheme = t;\n }\n this.userTheme = userTheme;\n // 设置自己和子节点的theme都为dirty\n this.dirty = true;\n this.dirtyChildren(g);\n }\n\n resetTheme(t: IThemeSpec, g: IGroup) {\n this.userTheme = t;\n // 设置自己和子节点的theme都为dirty\n this.dirty = true;\n this.dirtyChildren(g);\n }\n\n dirtyChildren(g: IGroup) {\n g.forEachChildren(item => {\n if ((item as IGroup).isContainer) {\n if ((item as IGroup).theme) {\n (item as IGroup).theme.dirty = true;\n }\n this.dirtyChildren(item as IGroup);\n }\n });\n }\n}\n\nexport const globalTheme = new Theme();\n\nexport function getTheme(graphic: IGraphic, theme?: IFullThemeSpec): IFullThemeSpec {\n if (graphic.glyphHost) {\n return getTheme(graphic.glyphHost);\n }\n if (theme) {\n if (graphic.isContainer) {\n // 暂时不支持Group\n return theme;\n }\n return theme;\n }\n\n return getThemeFromGroup(graphic) || globalTheme.getTheme();\n}\n\nexport function getThemeFromGroup(graphic: IGraphic): IFullThemeSpec | null {\n let g: IGroup;\n if (graphic.isContainer) {\n // 找到存在theme的group\n g = graphic as IGroup;\n } else {\n g = graphic.parent;\n }\n\n if (g) {\n while (g) {\n if (g.theme) {\n break;\n }\n g = g.parent;\n }\n if (!g) {\n return globalTheme.getTheme();\n }\n if (!g.theme) {\n g.createTheme();\n }\n return g.theme.getTheme(g as IGroup);\n }\n return null;\n}\n","import type { Dict } from './../type';\n\n/** Used to check objects for own properties. */\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Checks if `key` is a direct property of `object`.\n *\n * @param {Object} object The object to query.\n * @param {string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n * @example\n *\n * const object = { 'a': { 'b': 2 } }\n * const other = create({ 'a': create({ 'b': 2 }) })\n *\n * has(object, 'a')\n * // => true\n *\n * has(other, 'a')\n * // => false\n */\nconst has = (object: Dict, key: any): boolean => {\n return object != null && hasOwnProperty.call(object, key);\n};\n\nexport default has;\n","export const isValidUrl = (value: string) => {\n // TODO: 匹配其他形式的 url\n const exp = /^(http(s)?:\\/\\/)\\w+[^\\s]+(\\.[^\\s]+){1,}$/;\n const urlPattern = new RegExp(exp);\n return urlPattern.test(value);\n};\n\nexport default isValidUrl;\n","/**\n * 迁移至 sirius\n * Checks if `value` is classified as a `Base64` string;\n * @param {string} The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n */\nconst isBase64 = (value: string): boolean => {\n const exp = /^data:image\\/(?:gif|png|jpeg|bmp|webp|svg\\+xml)(?:;charset=utf-8)?;base64,(?:[A-Za-z0-9]|[+/])+={0,2}/g;\n const urlPattern = new RegExp(exp);\n return urlPattern.test(value);\n};\n\nexport default isBase64;\n","import type { Dict, LooseFunction } from '@visactor/vutils';\nimport { EventEmitter, Logger, isBoolean, isFunction, isObject } from '@visactor/vutils';\nimport { Generator } from '../common/generator';\nimport type { INode, IGroup } from '../interface';\n\nexport class Node extends EventEmitter implements INode {\n parent: any;\n declare name: string;\n declare id: string | number;\n\n declare _uid: number;\n _prev?: INode;\n _next?: INode;\n protected _firstChild: INode | null;\n protected _lastChild: INode | null;\n protected _idMap?: Map;\n protected _count: number;\n // protected _dirty?: boolean; // dirty表示属性是否有修改\n protected _structEdit?: boolean; // 树的结构是否发生修改\n protected _nodeList?: INode[]; // 用于有顺序的插入(正常情况用不到)\n\n declare _ignoreWarn?: boolean;\n\n get previousSibling(): INode | null {\n return this._prev;\n }\n\n get nextSibling(): INode | null {\n return this._next;\n }\n\n get children(): INode[] {\n return this.getChildren();\n }\n get firstChild(): INode | null {\n return this._firstChild;\n }\n get lastChild(): INode | null {\n return this._lastChild;\n }\n get count(): number {\n return this._count;\n }\n get childrenCount(): number {\n if (!this._idMap) {\n return 0;\n }\n return this._idMap.size;\n }\n // get dirty(): boolean {\n // return !!this._dirty;\n // }\n\n constructor() {\n super();\n this._uid = Generator.GenAutoIncrementId();\n this._firstChild = null;\n this._lastChild = null;\n this.parent = null;\n this._count = 1;\n }\n\n forEachChildren(cb: (item: T, index: number) => void | boolean, reverse: boolean = false) {\n if (reverse) {\n let child = this._lastChild;\n let i = 0;\n while (child) {\n const breakTag = cb(child as T, i++);\n if (breakTag) {\n return;\n }\n child = child._prev;\n }\n } else {\n let child = this._firstChild;\n let i = 0;\n while (child) {\n const breakTag = cb(child as T, i++);\n if (breakTag) {\n return;\n }\n child = child._next;\n }\n }\n }\n\n async forEachChildrenAsync(\n cb: (item: T, index: number) => Promise | void | boolean,\n reverse: boolean = false\n ) {\n if (reverse) {\n let child = this._lastChild;\n let i = 0;\n while (child) {\n let breakTag = cb(child as T, i++);\n if ((breakTag as any).then) {\n breakTag = await breakTag;\n }\n if (breakTag) {\n return;\n }\n child = child._prev;\n }\n } else {\n let child = this._firstChild;\n let i = 0;\n while (child) {\n let breakTag = cb(child as T, i++);\n if ((breakTag as any).then) {\n breakTag = await breakTag;\n }\n if (breakTag) {\n return;\n }\n child = child._next;\n }\n }\n }\n\n forEach(cb: (item: T, index: number) => void): void {\n return this.forEachChildren(cb);\n }\n\n /**\n * 方法将一个节点附加到指定父节点的子节点列表的末尾处。\n * 如果将被插入的节点已经存在于当前文档的文档树中,那么 appendChild() 只会将它从原先的位置移动到新的位置(不需要事先移除要移动的节点)。\n * 不能append父级元素\n * @param node 要插入的节点\n */\n appendChild(node: INode, highPerformance: boolean = true): INode | null {\n if (this._uid === node._uid) {\n return null;\n }\n if (!highPerformance && node.isAncestorsOf(this)) {\n throw new Error('【Node::appendChild】不能将父辈元素append为子元素');\n }\n\n // 清理该节点的上次关系\n node.parent && node.parent.removeChild(node);\n node.parent = this as unknown as Node;\n\n if (!this._lastChild) {\n this._firstChild = this._lastChild = node;\n node._prev = node._next = null;\n } else {\n this._lastChild._next = node;\n node._prev = this._lastChild;\n this._lastChild = node;\n }\n if (!this._idMap) {\n this._idMap = new Map();\n }\n this._idMap.set(node._uid, node);\n\n this.setCount(node.count);\n\n this._structEdit = true;\n return node;\n }\n\n /**\n * 方法将一个节点数组附加到指定父节点的子节点列表的末尾处。\n * 不会判断元素是否是自身以及是否是父元素或者是否是其他节点的子元素\n * @param nodes 要插入的节点数组\n */\n appendChildArrHighPerformance(nodes: INode[], replace: boolean = false): INode[] | null {\n console.error('暂不支持该函数');\n\n return nodes;\n }\n\n /**\n * 方法在参考节点之前插入一个拥有指定父节点的子节点。\n * 如果给定的子节点是对文档中现有节点的引用,\n * insertBefore() 会将其从当前位置移动到新位置(在将节点附加到其他节点之前,不需要从其父节点删除该节点)。\n * 不能insert父级元素\n * @param newNode 要插入的节点\n * @param referenceNode 插入到referenceNode之前\n */\n insertBefore(newNode: INode, referenceNode: INode | undefined): INode | null {\n if (!referenceNode) {\n return this.appendChild(newNode);\n }\n if (this._uid === newNode._uid) {\n return null;\n }\n if (newNode.isAncestorsOf(this)) {\n throw new Error('【Node::insertBefore】不能将父辈元素insert为子元素');\n }\n if (referenceNode.parent !== (this as unknown as Node)) {\n return null;\n }\n\n newNode.parent && newNode.parent.removeChild(newNode);\n newNode.parent = this as unknown as Node;\n\n newNode._prev = referenceNode._prev;\n if (!referenceNode._prev) {\n this._firstChild = newNode;\n } else {\n referenceNode._prev._next = newNode;\n }\n referenceNode._prev = newNode;\n newNode._next = referenceNode;\n if (!this._idMap) {\n this._idMap = new Map();\n }\n this._idMap.set(newNode._uid, newNode);\n\n this._structEdit = true;\n this.setCount(newNode.count);\n\n return newNode;\n }\n\n /**\n * 方法在参考节点之后插入一个拥有指定父节点的子节点。\n * 如果给定的子节点是对文档中现有节点的引用,\n * insertAfter() 会将其从当前位置移动到新位置(在将节点附加到其他节点之前,不需要从其父节点删除该节点)。\n * 不能insert父级元素\n * @param newNode 要插入的节点\n * @param referenceNode 插入到referenceNode之后\n */\n insertAfter(newNode: INode, referenceNode: INode | undefined): INode | null {\n if (!referenceNode) {\n return this.appendChild(newNode);\n }\n if (this._uid === newNode._uid) {\n return null;\n }\n if (newNode.isAncestorsOf(this)) {\n throw new Error('【Node::insertAfter】不能将父辈元素insert为子元素');\n }\n if (referenceNode.parent !== (this as unknown as Node)) {\n return null;\n }\n\n newNode.parent && newNode.parent.removeChild(newNode);\n newNode.parent = this as unknown as Node;\n\n if (!referenceNode._next) {\n this._lastChild = newNode;\n } else {\n referenceNode._next._prev = newNode;\n newNode._next = referenceNode._next;\n }\n referenceNode._next = newNode;\n newNode._prev = referenceNode;\n if (!this._idMap) {\n this._idMap = new Map();\n }\n this._idMap.set(newNode._uid, newNode);\n\n this._structEdit = true;\n this.setCount(newNode.count);\n\n return newNode;\n }\n\n /**\n * 方法在参考节点之前插入一个拥有指定父节点的子节点。\n * 如果给定的子节点是对文档中现有节点的引用,\n * insertBefore() 会将其从当前位置移动到新位置(在将节点附加到其他节点之前,不需要从其父节点删除该节点)。\n * 不能insert父级元素\n * @param newNode 要插入的节点\n * @param referenceNode 插入到referenceNode之前\n */\n insertInto(newNode: INode, idx: number): INode | null {\n if (!this._ignoreWarn && this._nodeList) {\n Logger.getInstance().warn('insertIntoKeepIdx和insertInto混用可能会存在错误');\n }\n if (idx >= this.childrenCount) {\n return this.appendChild(newNode);\n }\n if (this._uid === newNode._uid) {\n return null;\n }\n if (newNode.isAncestorsOf(this)) {\n throw new Error('【Node::insertBefore】不能将父辈元素insert为子元素');\n }\n\n newNode.parent && newNode.parent.removeChild(newNode);\n newNode.parent = this as unknown as Node;\n\n if (idx === 0) {\n newNode._next = this._firstChild;\n this._firstChild && (this._firstChild._prev = newNode);\n newNode._prev = null;\n this._firstChild = newNode;\n } else {\n let child = this._firstChild;\n for (let i = 0; i < idx; i++) {\n if (!child) {\n return null;\n }\n if (i > 0) {\n child = child._next;\n }\n }\n if (!child) {\n return null;\n }\n newNode._next = child._next;\n newNode._prev = child;\n child._next = newNode;\n if (newNode._next) {\n newNode._next._prev = newNode;\n }\n }\n if (!this._idMap) {\n this._idMap = new Map();\n }\n this._idMap.set(newNode._uid, newNode);\n\n // // 预期不会执行\n // if (idx === this.childrenCount) {\n // this._lastChild = newNode;\n // }\n this._structEdit = true;\n this.setCount(newNode.count);\n\n return newNode;\n }\n\n /**\n * 相比于insertInto,会保持idx顺序,举例:\n * 先插入idx:6的元素,再插入idx:2的元素,此时idx:2的元素会放置在idx为6的元素之前\n */\n insertIntoKeepIdx(newNode: INode, idx: number): INode | null {\n if (!this._nodeList) {\n this._nodeList = this.children;\n }\n // 如果这个位置有了,那就将这个位置之前的元素向后移动\n if (this._nodeList[idx]) {\n const node = this._nodeList[idx];\n this._nodeList.splice(idx, 0, newNode);\n return this.insertBefore(newNode, node);\n }\n // 查找idx之前的元素,插入到其后面\n this._nodeList[idx] = newNode;\n let node: INode | undefined;\n for (let i = idx - 1; i >= 0; i--) {\n node = this._nodeList[i];\n if (node) {\n break;\n }\n }\n if (node) {\n return node._next ? this.insertBefore(newNode, node._next) : this.appendChild(newNode);\n }\n this._ignoreWarn = true;\n const data = this.insertInto(newNode, 0);\n this._ignoreWarn = false;\n return data;\n }\n\n /**\n * 方法从DOM中删除一个子节点。返回删除的节点。\n * @param child 要删除的子节点\n */\n removeChild(child: INode): INode | null {\n if (!this._idMap) {\n return null;\n }\n if (!this._idMap.has(child._uid)) {\n return null;\n }\n this._idMap.delete(child._uid);\n if (this._nodeList) {\n // 找到idx\n const idx = this._nodeList.findIndex(n => n === child);\n if (idx > 0) {\n this._nodeList.splice(idx, 1);\n }\n }\n\n if (!child._prev) {\n this._firstChild = child._next;\n } else {\n child._prev._next = child._next;\n }\n if (child._next) {\n child._next._prev = child._prev;\n } else {\n this._lastChild = child._prev;\n }\n\n // 重置属性\n child.parent = null;\n child._prev = null;\n child._next = null;\n\n this._structEdit = true;\n this.setCount(-child.count);\n\n return child;\n }\n\n /**\n * 从当前节点的父节点删除当前节点\n */\n delete() {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n }\n\n /**\n * 删除所有的孩子节点\n */\n removeAllChild() {\n if (!this._idMap) {\n return;\n }\n let child = this._firstChild;\n while (child) {\n child.parent = null;\n // child._rootNode = child;\n child._prev = null;\n child._next = null;\n child = child._next;\n }\n\n this._firstChild = null;\n this._lastChild = null;\n this._idMap.clear();\n\n this._structEdit = true;\n this.setCount(-this._count + 1);\n }\n\n /**\n * 方法用指定的节点替换当前节点的一个子节点,并返回被替换掉的节点。\n * 如果该节点已经存在于DOM树中,则它首先会被从原始位置删除。\n * 不能replace父级元素\n * @param newChild 新节点\n * @param oldChild 旧节点\n */\n replaceChild(newChild: INode, oldChild: INode): INode | null {\n throw new Error('暂不支持');\n }\n\n /**\n * 根据自定义逻辑查找元素,返回单一图形元素\n * @param callback 自定义查找过滤器\n * @param deep 是否进行深度查找,默认为 false\n * @returns 返回匹配的图形元素\n */\n find(callback: (node: T, index: number) => boolean, deep: boolean = false): T | null {\n let target: T | null = null;\n this.forEachChildren((node: T, index: number) => {\n if (node !== (this as unknown as INode) && callback(node, index)) {\n target = node;\n return true; // 提前退出循环\n }\n return false;\n });\n\n if (deep) {\n this.forEachChildren(child => {\n if ((child as IGroup).isContainer) {\n const node = (child as IGroup).find(callback, true) as T;\n if (node) {\n target = node;\n return true; // 提前退出循环\n }\n }\n return false;\n });\n }\n\n return target;\n }\n\n /**\n * 根据自定义逻辑查找元素,返回匹配的元素集合\n * @param callback 自定义查找过滤器\n * @param deep 是否进行深度查找,默认为 false\n * @returns 返回匹配的图形元素集合\n */\n findAll(callback: (node: T, index: number) => boolean, deep: boolean = false): T[] {\n let nodes: T[] = [];\n this.forEachChildren((node: T, index) => {\n if (node !== (this as unknown as INode) && callback(node, index)) {\n nodes.push(node);\n }\n });\n\n if (deep) {\n this.forEachChildren(child => {\n if ((child as IGroup).isContainer) {\n const targets = (child as IGroup).findAll(callback, true) as T[];\n if (targets.length) {\n nodes = nodes.concat(targets);\n }\n }\n });\n }\n return nodes;\n }\n\n /**\n * 通过用户设置的 id 查找对应的图形元素\n * @param id 子节点的 id\n */\n getElementById(id: string | number): INode | null {\n return this.find(node => node.id === id, true);\n }\n\n /**\n * @alias getElementById\n * 通过用户设置的 id 查找对应的图形元素\n * @param id 子节点的 id\n */\n findChildById(id: string | number): INode | null {\n return this.getElementById(id);\n }\n\n /**\n * 通过内部生成的节点 id:_uid 查找对应的图形元素\n * @param id 子节点的key\n */\n findChildByUid(uid: number): INode | null {\n if (!this._idMap) {\n return null;\n }\n return this._idMap.get(uid) || null;\n }\n\n /**\n * 根据用户传入的 name 查找元素,返回匹配的元素集合\n * @param name 用户设置的图形名称\n * @returns 匹配 name 的元素集合\n */\n getElementsByName(name: string) {\n return this.findAll(node => node.name === name, true);\n }\n\n /**\n * @alias getElementsByName\n * 根据用户传入的 name 查找元素,返回匹配的元素集合\n * @param name 用户设置的图形名称\n * @returns 匹配 name 的元素集合\n */\n findChildrenByName(name: string) {\n return this.getElementsByName(name);\n }\n /**\n * 根据用户传入的 type 查找元素,返回匹配的元素集合\n * @param type 用户设置的图形类型\n * @returns 匹配 type 的元素集合\n */\n getElementsByType(type: string) {\n return this.findAll(node => node.type === type, true);\n }\n\n /**\n * 根据名字查找元素,只返回第一个查找到的元素\n * @deprecated 待 vis-component & chartspace 修改之后删除\n * @param name\n * @param deep\n * @returns\n */\n getChildByName(name: string, deep: boolean = false) {\n return this.find(node => node.name === name, deep);\n }\n\n getChildAt(idx: number): INode | null {\n let c = this._firstChild;\n if (!c) {\n return null;\n }\n for (let i = 0; i < idx; i++) {\n if (!c._next) {\n return null;\n }\n c = c._next;\n }\n return c;\n }\n\n at(idx: number): INode | null {\n return this.getChildAt(idx);\n }\n\n /**\n * 返回的是一个布尔值,来表示传入的节点是否为该节点的后代节点。\n * @param node 判断是否包含的节点\n */\n containNode(node: INode): boolean {\n if (!this._idMap) {\n return false;\n }\n if (this._idMap.has(node._uid)) {\n return true;\n }\n let child = this._firstChild;\n while (child) {\n if (child.containNode(node)) {\n return true;\n }\n child = child._next;\n }\n return false;\n }\n\n /**\n * 方法返回上下文中的根节点,不常用\n */\n getRootNode(): INode {\n let parent = this.parent;\n while (parent?.parent) {\n parent = parent.parent;\n }\n return parent || this;\n }\n\n /**\n * 方法返回一个布尔值,表明当前节点是否包含有子节点.\n */\n hasChildNodes(): boolean {\n return this._firstChild !== null;\n }\n\n /* 语法糖 */\n addChild(node: INode): INode | null {\n return this.appendChild(node);\n }\n add(node: INode): INode | null {\n return this.appendChild(node);\n }\n getChildren(): INode[] {\n const nodes: INode[] = [];\n let child = this._firstChild;\n while (child) {\n nodes.push(child);\n child = child._next;\n }\n return nodes;\n }\n\n /**\n * 判断该节点是否是node的子节点\n * @param node\n */\n isChildOf(node: INode): boolean {\n if (!this.parent) {\n return false;\n }\n return this.parent._uid === node._uid;\n }\n\n /**\n * 判断该节点是否是node的父节点\n * @param node\n */\n isParentOf(node: INode): boolean {\n return node.isChildOf(this);\n }\n\n /**\n * 判断节点是否是node的后代节点\n * @param node\n */\n isDescendantsOf(node: INode): boolean {\n let parent = this.parent;\n if (!parent) {\n return false;\n }\n do {\n if (parent._uid === node._uid) {\n return true;\n }\n parent = parent.parent;\n } while (parent !== null);\n\n return false;\n }\n\n /**\n * 判断节点是否是node的祖先节点\n * @param node\n */\n isAncestorsOf(node: INode): boolean {\n return node.isDescendantsOf(this);\n }\n\n getAncestor(idx: number): INode {\n throw new Error('暂不支持');\n }\n\n /**\n * 设置该节点的所有后代节点某个属性\n * @param propsName 属性名\n * @param propsValue 属性值\n */\n setAllDescendantsProps(propsName: string, propsValue: any) {\n let child = this._firstChild;\n while (child) {\n child[propsName] = propsValue;\n child.setAllDescendantsProps(propsName, propsValue);\n child = child._next;\n }\n }\n /**\n * 设置当前节点的count属性,会更改父节点的count属性\n * @param deltaCount delta count\n */\n private setCount(deltaCount: number): void {\n this._count += deltaCount;\n let parent = this.parent;\n if (!parent) {\n return;\n }\n do {\n parent._count += deltaCount;\n parent = parent.parent;\n } while (parent !== null);\n }\n\n clone(): INode {\n throw new Error('暂不支持');\n }\n\n /**\n * clone to node\n * @param node\n */\n cloneTo(node: INode): void {\n throw new Error('暂不支持');\n }\n\n /***************语法糖***************/\n getParent(): INode | null {\n return this.parent;\n }\n\n del(child: INode): INode | null {\n return this.removeChild(child);\n }\n\n // 事件相关别名\n /**\n * @alias on\n * @param type\n * @param listener\n * @param options\n */\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject | LooseFunction,\n options?: AddEventListenerOptions | boolean\n ) {\n const capture =\n (isBoolean(options, true) && options) || (isObject(options) && (options as AddEventListenerOptions).capture);\n const once = isObject(options) && (options as AddEventListenerOptions).once;\n const context = isFunction(listener) ? undefined : listener;\n\n type = capture ? `${type}capture` : type;\n listener = isFunction(listener) ? (listener as LooseFunction) : (listener as EventListenerObject).handleEvent;\n\n if (once) {\n super.once(type, listener, context);\n } else {\n super.on(type, listener, context);\n }\n return this;\n }\n\n on(\n type: string,\n listener: EventListenerOrEventListenerObject | LooseFunction,\n options?: AddEventListenerOptions | boolean\n ) {\n return this.addEventListener(type, listener, options);\n }\n\n /**\n * @alias off\n * @param type\n * @param listener\n * @param options\n * @returns\n */\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject | LooseFunction,\n options?: AddEventListenerOptions | boolean\n ) {\n const capture =\n (isBoolean(options, true) && options) || (isObject(options) && (options as AddEventListenerOptions).capture);\n const context = isFunction(listener) ? undefined : listener;\n\n type = capture ? `${type}capture` : type;\n listener = isFunction(listener) ? (listener as LooseFunction) : (listener as EventListenerObject).handleEvent;\n\n const once = isObject(options) && (options as AddEventListenerOptions).once;\n super.off(type, listener, context, once);\n\n return this;\n }\n\n /**\n * @alias off\n * @param type\n * @param listener\n * @param options\n * @returns\n */\n off(\n type: string,\n listener: EventListenerOrEventListenerObject | LooseFunction,\n options?: AddEventListenerOptions | boolean\n ) {\n return this.removeEventListener(type, listener, options);\n }\n\n once(\n type: string,\n listener: EventListenerOrEventListenerObject | LooseFunction,\n options?: AddEventListenerOptions | boolean\n ) {\n if (isObject(options)) {\n options.once = true;\n return this.addEventListener(type, listener, options);\n }\n return this.addEventListener(type, listener, { once: true });\n }\n\n removeAllEventListeners() {\n super.removeAllListeners();\n return this;\n }\n\n removeAllListeners(): this {\n return this.removeAllEventListeners();\n }\n\n dispatchEvent(event: any, ...args: any) {\n super.emit(event.type, event, ...args);\n return !event.defaultPrevented;\n }\n\n emit(event: any, data?: Dict) {\n return this.dispatchEvent(event, data);\n }\n\n release() {\n // 卸载事件\n this.removeAllListeners();\n }\n}\n","import type { EventPoint, IEventTarget } from '../../interface/event';\nimport type { EventManager } from '../event-manager';\n\n/**\n * 代码参考自 https://github.com/pixijs/pixijs\n * The MIT License\n\n Copyright (c) 2013-2023 Mathew Groves, Chad Engler\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\n/**\n * An DOM-compatible synthetic event implementation that is \"forwarded\" on behalf of an original\n * FederatedEvent or native {@link https://dom.spec.whatwg.org/#event Event}.\n */\nexport class FederatedEvent implements Event {\n /** Flags whether this event bubbles. This will take effect only if it is set before propagation. */\n bubbles = true;\n\n cancelBubble = true;\n\n /**\n * Flags whether this event can be canceled using `FederatedEvent.preventDefault`. This is always\n * false (for now).\n */\n readonly cancelable = false;\n\n /**\n * Flag added for compatibility with DOM Event. It is not used in the Federated Events\n * API.\n * @see https://dom.spec.whatwg.org/#dom-event-composed\n */\n readonly composed = false;\n\n /** The listeners of the event target that are being notified. */\n currentTarget: IEventTarget | null;\n\n /** Flags whether the default response of the user agent was prevent through this event. */\n defaultPrevented = false;\n\n /**\n * The propagation phase.\n */\n eventPhase = FederatedEvent.prototype.NONE;\n\n /** Flags whether this is a user-trusted event */\n isTrusted: boolean;\n\n returnValue: boolean;\n srcElement: IEventTarget;\n\n /** The event target that this will be dispatched to. */\n target: IEventTarget | null;\n\n /** The timestamp of when the event was created. */\n timeStamp: number;\n\n /** The type of event, e.g. `pointerup`, `mousedown`. */\n type: string;\n\n /** The native event that caused the foremost original event. */\n nativeEvent: N;\n\n /** The original event that caused this event, if any. */\n originalEvent: FederatedEvent | null;\n\n /** Flags whether propagation was stopped. */\n propagationStopped = false;\n\n /** Flags whether propagation was immediately stopped. */\n propagationImmediatelyStopped = false;\n\n /** The composed path of the event's propagation. */\n path: IEventTarget[];\n\n /** The EventManager that manages this event. Null for root events. */\n readonly manager?: EventManager;\n\n /** Event-specific detail */\n detail: any;\n\n /** The global Window object. */\n view: any;\n\n /** The coordinates of the event relative to the nearest DOM layer. This is a non-standard property. */\n layer: EventPoint = {\n x: 0,\n y: 0\n };\n get layerX(): number {\n return this.layer.x;\n }\n get layerY(): number {\n return this.layer.y;\n }\n\n /** The coordinates of the event relative to the DOM document. This is a non-standard property. */\n page: EventPoint = {\n x: 0,\n y: 0\n };\n get pageX(): number {\n return this.page.x;\n }\n get pageY(): number {\n return this.page.y;\n }\n\n /** The coordinates of the event relative to the canvas(origin is left-top). This is a non-standard property. */\n canvas: EventPoint = {\n x: 0,\n y: 0\n };\n get x(): number {\n return this.canvas.x;\n }\n get y(): number {\n return this.canvas.y;\n }\n get canvasX(): number {\n return this.canvas.x;\n }\n get canvasY(): number {\n return this.canvas.y;\n }\n\n /**\n * The coordinates of the event relative to the Viewport\n */\n viewport: EventPoint = {\n x: 0,\n y: 0\n };\n get viewX(): number {\n return this.viewport.x;\n }\n get viewY(): number {\n return this.viewport.y;\n }\n\n /**\n * @param ? - Which manages this event. Propagation can only occur\n * within the ?'s jurisdiction.\n */\n constructor(manager?: EventManager) {\n this.manager = manager;\n }\n\n /** The propagation path for this event.*/\n composedPath(): IEventTarget[] {\n // Find the propagation path if it isn't cached or if the target has changed since the last evaluation.\n if (this.manager && (!this.path || this.path[this.path.length - 1] !== this.target)) {\n this.path = this.target ? this.manager.propagationPath(this.target) : [];\n }\n\n return this.path;\n }\n\n preventDefault(): void {\n if (this.nativeEvent instanceof Event && this.nativeEvent.cancelable) {\n this.nativeEvent.preventDefault();\n }\n\n this.defaultPrevented = true;\n }\n\n stopImmediatePropagation(): void {\n this.propagationImmediatelyStopped = true;\n }\n\n stopPropagation(): void {\n if (this.nativeEvent instanceof Event && this.nativeEvent.cancelable) {\n this.nativeEvent.stopPropagation();\n }\n\n this.propagationStopped = true;\n }\n\n initEvent(): void {\n return;\n }\n initUIEvent(): void {\n return;\n }\n\n clone() {\n throw new Error('Method not implemented.');\n }\n\n which: number;\n readonly NONE = 0;\n readonly CAPTURING_PHASE = 1;\n readonly AT_TARGET = 2;\n readonly BUBBLING_PHASE = 3;\n}\n","import { FederatedEvent } from './base-event';\n/**\n * 代码参考自 https://github.com/pixijs/pixijs\n * The MIT License\n\n Copyright (c) 2013-2023 Mathew Groves, Chad Engler\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\nexport class CustomEvent extends FederatedEvent {\n constructor(eventName: string, object?: any) {\n super();\n\n this.type = eventName;\n this.detail = object;\n }\n}\n","import type { Dict } from '@visactor/vutils';\nimport type { INode } from '../interface/node-tree';\nimport type { IEventTarget } from '../interface/event';\n\nimport { FederatedEvent, CustomEvent } from './federated-event';\n\n/**\n * 代码参考自 https://github.com/pixijs/pixijs\n * The MIT License\n\n Copyright (c) 2013-2023 Mathew Groves, Chad Engler\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\nexport const EventTarget: Omit> = {\n pickable: true,\n visible: true,\n // attribute: {},\n\n /**\n * @override\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent\n * @param e\n * @returns\n */\n dispatchEvent(e: T): boolean {\n if (!(e instanceof FederatedEvent)) {\n throw new Error('DisplayObject cannot propagate events outside of the Federated Events API');\n }\n\n e.defaultPrevented = false;\n e.path = [];\n e.target = this as IEventTarget;\n e?.manager?.dispatchEvent(e);\n\n return !e.defaultPrevented;\n },\n\n /**\n * @deprecated\n * @alias dispatchEvent\n */\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n emit(eventName: string, object: Dict) {\n return this.dispatchEvent(new CustomEvent(eventName, object));\n }\n};\n","/**\n * The MIT License (MIT)\n\n Copyright (c) 2014 gskinner.com, inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n */\n\n// 参考TweenJS\n// https://github.com/CreateJS/TweenJS/tree/master/src/tweenjs\nimport { pi2 } from '@visactor/vutils';\n\n/**\n * 代码迁移自createjs\n * 部分缓动函数参考https://easings.net/\n */\nexport class Easing {\n private constructor() {\n // do nothing\n }\n\n static linear(t: number): number {\n return t;\n }\n\n static none() {\n return this.linear;\n }\n\n /**\n * 获取缓动函数,amount指示这个缓动函数的插值方式\n * @param amount\n * @returns\n */\n static get(amount: number) {\n if (amount < -1) {\n amount = -1;\n } else if (amount > 1) {\n amount = 1;\n }\n\n return function (t: number) {\n if (amount === 0) {\n return t;\n }\n if (amount < 0) {\n return t * (t * -amount + 1 + amount);\n }\n return t * ((2 - t) * amount + (1 - amount));\n };\n }\n\n /* 语法糖 */\n static getPowIn(pow: number) {\n return function (t: number) {\n return Math.pow(t, pow);\n };\n }\n\n static getPowOut(pow: number) {\n return function (t: number) {\n return 1 - Math.pow(1 - t, pow);\n };\n }\n\n static getPowInOut(pow: number) {\n return function (t: number) {\n if ((t *= 2) < 1) {\n return 0.5 * Math.pow(t, pow);\n }\n return 1 - 0.5 * Math.abs(Math.pow(2 - t, pow));\n };\n }\n\n // 插值函数\n static quadIn = Easing.getPowIn(2);\n static quadOut = Easing.getPowOut(2);\n\n static quadInOut = Easing.getPowInOut(2);\n static cubicIn = Easing.getPowIn(3);\n static cubicOut = Easing.getPowOut(3);\n static cubicInOut = Easing.getPowInOut(3);\n static quartIn = Easing.getPowIn(4);\n static quartOut = Easing.getPowOut(4);\n static quartInOut = Easing.getPowInOut(4);\n static quintIn = Easing.getPowIn(5);\n static quintOut = Easing.getPowOut(5);\n static quintInOut = Easing.getPowInOut(5);\n\n /* 语法糖 */\n static getBackIn(amount: number) {\n return function (t: number) {\n return t * t * ((amount + 1) * t - amount);\n };\n }\n static getBackOut(amount: number) {\n return function (t: number) {\n return --t * t * ((amount + 1) * t + amount) + 1;\n };\n }\n static getBackInOut(amount: number) {\n amount *= 1.525;\n return function (t: number) {\n if ((t *= 2) < 1) {\n return 0.5 * (t * t * ((amount + 1) * t - amount));\n }\n return 0.5 * ((t -= 2) * t * ((amount + 1) * t + amount) + 2);\n };\n }\n\n // 插值函数\n static backIn = Easing.getBackIn(1.7);\n static backOut = Easing.getBackOut(1.7);\n static backInOut = Easing.getBackInOut(1.7);\n\n static sineIn(t: number): number {\n return 1 - Math.cos((t * Math.PI) / 2);\n }\n\n static sineOut(t: number): number {\n return Math.sin((t * Math.PI) / 2);\n }\n\n static sineInOut(t: number): number {\n return -(Math.cos(Math.PI * t) - 1) / 2;\n }\n\n static expoIn(t: number): number {\n return t === 0 ? 0 : Math.pow(2, 10 * t - 10);\n }\n\n static expoOut(t: number): number {\n return t === 1 ? 1 : 1 - Math.pow(2, -10 * t);\n }\n\n static expoInOut(t: number): number {\n return t === 0 ? 0 : t === 1 ? 1 : t < 0.5 ? Math.pow(2, 20 * t - 10) / 2 : (2 - Math.pow(2, -20 * t + 10)) / 2;\n }\n\n // 插值函数\n static circIn(t: number) {\n return -(Math.sqrt(1 - t * t) - 1);\n }\n\n static circOut(t: number) {\n return Math.sqrt(1 - --t * t);\n }\n\n static circInOut(t: number) {\n if ((t *= 2) < 1) {\n return -0.5 * (Math.sqrt(1 - t * t) - 1);\n }\n return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n }\n static bounceOut(t: number) {\n if (t < 1 / 2.75) {\n return 7.5625 * t * t;\n } else if (t < 2 / 2.75) {\n return 7.5625 * (t -= 1.5 / 2.75) * t + 0.75;\n } else if (t < 2.5 / 2.75) {\n return 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375;\n }\n return 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;\n }\n static bounceIn(t: number) {\n return 1 - Easing.bounceOut(1 - t);\n }\n\n static bounceInOut(t: number) {\n if (t < 0.5) {\n return Easing.bounceIn(t * 2) * 0.5;\n }\n return Easing.bounceOut(t * 2 - 1) * 0.5 + 0.5;\n }\n\n /* 语法糖 */\n static getElasticIn(amplitude: number, period: number) {\n return function (t: number) {\n if (t === 0 || t === 1) {\n return t;\n }\n const s = (period / pi2) * Math.asin(1 / amplitude);\n return -(amplitude * Math.pow(2, 10 * (t -= 1)) * Math.sin(((t - s) * pi2) / period));\n };\n }\n static getElasticOut(amplitude: number, period: number) {\n return function (t: number) {\n if (t === 0 || t === 1) {\n return t;\n }\n const s = (period / pi2) * Math.asin(1 / amplitude);\n return amplitude * Math.pow(2, -10 * t) * Math.sin(((t - s) * pi2) / period) + 1;\n };\n }\n static getElasticInOut(amplitude: number, period: number) {\n return function (t: number) {\n const s = (period / pi2) * Math.asin(1 / amplitude);\n if ((t *= 2) < 1) {\n return -0.5 * (amplitude * Math.pow(2, 10 * (t -= 1)) * Math.sin(((t - s) * pi2) / period));\n }\n return amplitude * Math.pow(2, -10 * (t -= 1)) * Math.sin(((t - s) * pi2) / period) * 0.5 + 1;\n };\n }\n\n // 插值函数\n static elasticIn = Easing.getElasticIn(1, 0.3);\n static elasticOut = Easing.getElasticOut(1, 0.3);\n static elasticInOut = Easing.getElasticInOut(1, 0.3 * 1.5);\n}\n","import { AnimateStatus } from '../common/enums';\nimport { Generator } from '../common/generator';\nimport type { IAnimate, ITimeline } from '../interface';\n\n// 管理一组动画\nexport class DefaultTimeline implements ITimeline {\n declare id: number;\n protected declare animateHead: IAnimate | null;\n protected declare animateTail: IAnimate | null;\n protected declare ticker: any;\n declare animateCount: number;\n protected declare paused: boolean;\n\n constructor() {\n this.id = Generator.GenAutoIncrementId();\n this.animateHead = null;\n this.animateTail = null;\n this.animateCount = 0;\n this.paused = false;\n }\n\n addAnimate(animate: IAnimate) {\n if (!this.animateTail) {\n this.animateHead = animate;\n this.animateTail = animate;\n } else {\n this.animateTail.nextAnimate = animate;\n animate.prevAnimate = this.animateTail;\n this.animateTail = animate;\n animate.nextAnimate = null;\n }\n this.animateCount++;\n }\n\n pause() {\n this.paused = true;\n }\n resume() {\n this.paused = false;\n }\n\n tick(delta: number) {\n if (this.paused) {\n return;\n }\n let animate = this.animateHead;\n this.animateCount = 0;\n while (animate) {\n if (animate.status === AnimateStatus.END) {\n this.removeAnimate(animate);\n } else if (animate.status === AnimateStatus.RUNNING || animate.status === AnimateStatus.INITIAL) {\n this.animateCount++;\n animate.advance(delta);\n } else if (animate.status === AnimateStatus.PAUSED) {\n // 暂停\n this.animateCount++;\n }\n animate = animate.nextAnimate;\n }\n }\n\n clear() {\n let animate = this.animateHead;\n while (animate) {\n animate.release();\n animate = animate.nextAnimate;\n }\n this.animateHead = null;\n this.animateTail = null;\n this.animateCount = 0;\n }\n\n removeAnimate(animate: IAnimate, release: boolean = true) {\n animate._onRemove && animate._onRemove.forEach(cb => cb());\n if (animate === this.animateHead) {\n this.animateHead = animate.nextAnimate;\n if (animate === this.animateTail) {\n // 只有一个元素\n this.animateTail = null;\n } else {\n // 有多个元素\n this.animateHead.prevAnimate = null;\n }\n } else if (animate === this.animateTail) {\n // 有多个元素\n this.animateTail = animate.prevAnimate;\n this.animateTail.nextAnimate = null;\n // animate.prevAnimate = null;\n } else {\n animate.prevAnimate.nextAnimate = animate.nextAnimate;\n animate.nextAnimate.prevAnimate = animate.prevAnimate;\n // animate不支持二次复用,不需要重置\n // animate.prevAnimate = null;\n // animate.nextAnimate = null;\n }\n release && animate.release();\n\n return;\n }\n}\n\nexport const defaultTimeline = new DefaultTimeline();\n","import type {\n EasingType,\n EasingTypeFunc,\n IAnimate,\n IAnimateStepType,\n IAnimateTarget,\n ICustomAnimate,\n IGraphic,\n IStep,\n IStepConfig,\n ISubAnimate,\n ITimeline\n} from '../interface';\nimport { AnimateMode, AnimateStatus, AnimateStepType, AttributeUpdateType } from '../common/enums';\nimport { Easing } from './easing';\nimport { Logger, max } from '@visactor/vutils';\nimport { defaultTimeline } from './timeline';\nimport { Generator } from '../common/generator';\n\n// 参考TweenJS\n// https://github.com/CreateJS/TweenJS/tree/master/src/tweenjs\n/**\n * The MIT License (MIT)\n\n Copyright (c) 2014 gskinner.com, inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n */\nexport abstract class ACustomAnimate implements ICustomAnimate {\n declare from: T;\n declare to: T;\n declare duration: number;\n declare easing: EasingType;\n declare params: any;\n declare target: IAnimateTarget;\n declare updateCount: number;\n declare subAnimate: ISubAnimate;\n declare step?: IStep;\n declare mode?: AnimateMode;\n\n // 用于判断是否一致\n declare _endProps?: any;\n declare _mergedEndProps?: any;\n\n constructor(from: T, to: T, duration: number, easing: EasingType, params?: any) {\n this.from = from;\n this.to = to;\n this.duration = duration;\n this.easing = easing;\n this.params = params;\n this.updateCount = 0;\n }\n\n bind(target: IAnimateTarget, subAni: ISubAnimate) {\n this.target = target;\n this.subAnimate = subAni;\n this.onBind();\n }\n\n // 在第一次调用的时候触发\n onBind() {\n return;\n }\n\n // 第一次执行的时候调用\n onFirstRun() {\n return;\n }\n\n // 开始执行的时候调用(如果有循环,那每个周期都会调用)\n onStart() {\n return;\n }\n\n // 结束执行的时候调用(如果有循环,那每个周期都会调用)\n onEnd() {\n return;\n }\n\n getEndProps(): Record | void {\n return;\n }\n\n getFromProps(): Record | void {\n return this.from;\n }\n\n getMergedEndProps(): Record | void {\n const thisEndProps = this.getEndProps();\n if (thisEndProps) {\n if (this._endProps === thisEndProps) {\n return this._mergedEndProps;\n }\n this._endProps = thisEndProps;\n this._mergedEndProps = Object.assign({}, this.step.prev.getLastProps() ?? {}, thisEndProps);\n return;\n }\n return this.step.prev ? this.step.prev.getLastProps() : thisEndProps;\n }\n\n // abstract getFromValue(key: string): any;\n // abstract getToValue(key: string): any;\n\n abstract onUpdate(end: boolean, ratio: number, out: Record): void;\n\n update(end: boolean, ratio: number, out: Record): void {\n if (this.updateCount === 0) {\n this.onFirstRun();\n // out添加之前的props\n const props = this.step.getLastProps();\n Object.keys(props).forEach(k => {\n if (this.subAnimate.animate.validAttr(k)) {\n out[k] = props[k];\n }\n });\n }\n this.updateCount += 1;\n this.onUpdate(end, ratio, out);\n if (end) {\n this.onEnd();\n }\n }\n}\n\nexport class CbAnimate extends ACustomAnimate {\n cb: () => void;\n\n constructor(cb: () => void) {\n super(null, null, 0, 'linear');\n this.cb = cb;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n return;\n }\n\n onStart(): void {\n this.cb();\n }\n}\n\ntype InterpolateFunc = (\n key: string,\n ratio: number,\n from: any,\n to: any,\n target: IAnimateTarget,\n out: Record\n) => boolean;\n\nexport class Animate implements IAnimate {\n static mode: AnimateMode = AnimateMode.NORMAL;\n declare target: IAnimateTarget;\n declare timeline: ITimeline;\n declare nextAnimate?: IAnimate;\n declare prevAnimate?: IAnimate;\n // 当前Animate的状态,正常,暂停,结束\n declare status: AnimateStatus;\n declare readonly id: string | number;\n // 开始时间\n protected declare _startTime: number;\n protected declare _duringTime: number;\n declare subAnimates: SubAnimate[];\n declare tailAnimate: SubAnimate;\n\n // 绝对的位置\n declare rawPosition: number;\n // 时间倍速缩放\n declare timeScale: number;\n\n declare interpolateFunc: (key: string, ratio: number, from: any, to: any, nextAttributes: any) => boolean;\n\n declare _onStart?: (() => void)[];\n declare _onFrame?: ((step: IStep, ratio: number) => void)[];\n declare _onEnd?: (() => void)[];\n declare _onRemove?: (() => void)[];\n declare _preventAttrs?: Set;\n static interpolateMap: Map = new Map();\n\n constructor(id: string | number = Generator.GenAutoIncrementId(), timeline: ITimeline = defaultTimeline) {\n this.id = id;\n this.timeline = timeline;\n this.status = AnimateStatus.INITIAL;\n this.tailAnimate = new SubAnimate(this);\n this.subAnimates = [this.tailAnimate];\n this.timeScale = 1;\n this.rawPosition = -1;\n this._startTime = 0;\n this._duringTime = 0;\n this.timeline.addAnimate(this);\n }\n\n setTimeline(timeline: ITimeline) {\n if (timeline === this.timeline) {\n return;\n }\n this.timeline.removeAnimate(this, false);\n timeline.addAnimate(this);\n }\n\n getStartTime(): number {\n return this._startTime;\n }\n\n getDuration(): number {\n return this.subAnimates.reduce((t, subAnimate) => t + subAnimate.totalDuration, 0);\n }\n\n after(animate: IAnimate) {\n const t = animate.getDuration();\n this._startTime = t;\n return this;\n }\n\n afterAll(list: IAnimate[]) {\n let maxT = -Infinity;\n list.forEach(a => {\n maxT = max(a.getDuration(), maxT);\n });\n this._startTime = maxT;\n return this;\n }\n\n parallel(animate: IAnimate) {\n this._startTime = animate.getStartTime();\n return this;\n }\n\n static AddInterpolate(name: string, cb: InterpolateFunc) {\n Animate.interpolateMap.set(name, cb);\n }\n\n play(customAnimate: ICustomAnimate) {\n this.tailAnimate.play(customAnimate);\n // todo: 考虑使用绑定的ticker执行\n if (this.target) {\n const stage = (this.target as IGraphic).stage;\n stage && stage.renderNextFrame();\n }\n if (this.subAnimates.length === 1 && this.tailAnimate.duration === customAnimate.duration) {\n this.trySetAttribute(customAnimate.getFromProps(), customAnimate.mode);\n }\n return this;\n }\n\n trySetAttribute(attr: Record | void, mode: AnimateMode = Animate.mode) {\n if (attr && mode & AnimateMode.SET_ATTR_IMMEDIATELY) {\n (this.target as any).setAttributes &&\n (this.target as any).setAttributes(attr, false, { type: AttributeUpdateType.ANIMATE_PLAY });\n }\n }\n\n runCb(cb: (a: IAnimate, step: IStep) => void) {\n // this.tailAnimate.runCb(cb);\n const customAnimate = new CbAnimate(() => {\n cb(this, customAnimate.step.prev);\n });\n this.tailAnimate.play(customAnimate);\n return this;\n }\n\n /**\n * 自定义插值,返回false表示没有匹配上\n * @param key\n * @param from\n * @param to\n */\n customInterpolate(\n key: string,\n ratio: number,\n from: any,\n to: any,\n target: IAnimateTarget,\n ret: Record\n ): boolean {\n const func = Animate.interpolateMap.get(key) || Animate.interpolateMap.get('');\n if (!func) {\n return false;\n }\n return func(key, ratio, from, to, target, ret);\n }\n\n pause() {\n if (this.status === AnimateStatus.RUNNING) {\n this.status = AnimateStatus.PAUSED;\n }\n }\n\n resume() {\n if (this.status === AnimateStatus.PAUSED) {\n this.status = AnimateStatus.RUNNING;\n }\n }\n\n to(props: Record, duration: number, easing: EasingType, params?: IStepConfig) {\n this.tailAnimate.to(props, duration, easing, params);\n // 默认开始动画\n // todo: 考虑使用绑定的ticker执行\n if (this.target) {\n const stage = (this.target as IGraphic).stage;\n stage && stage.renderNextFrame();\n }\n // if (this.subAnimates.length === 1 && this.tailAnimate.duration === duration) {\n // this.trySetAttribute(props);\n // }\n return this;\n }\n from(props: Record, duration: number, easing: EasingType, params?: IStepConfig) {\n this.tailAnimate.from(props, duration, easing, params);\n // todo: 考虑使用绑定的ticker执行\n if (this.target) {\n const stage = (this.target as IGraphic).stage;\n stage && stage.renderNextFrame();\n }\n return this;\n }\n wait(duration: number) {\n this.tailAnimate.wait(duration);\n // todo: 考虑使用绑定的ticker执行\n if (this.target) {\n const stage = (this.target as IGraphic).stage;\n stage && stage.renderNextFrame();\n }\n return this;\n }\n startAt(t: number) {\n this.tailAnimate.startAt(t);\n // todo: 考虑使用绑定的ticker执行\n if (this.target) {\n const stage = (this.target as IGraphic).stage;\n stage && stage.renderNextFrame();\n }\n return this;\n }\n\n loop(l: number) {\n this.tailAnimate.loop = l;\n // todo: 考虑使用绑定的ticker执行\n if (this.target) {\n const stage = (this.target as IGraphic).stage;\n stage && stage.renderNextFrame();\n }\n return this;\n }\n\n reversed(r: boolean) {\n this.tailAnimate.reversed = r;\n // todo: 考虑使用绑定的ticker执行\n if (this.target) {\n const stage = (this.target as IGraphic).stage;\n stage && stage.renderNextFrame();\n }\n return this;\n }\n\n bounce(b: boolean) {\n this.tailAnimate.bounce = b;\n // todo: 考虑使用绑定的ticker执行\n if (this.target) {\n const stage = (this.target as IGraphic).stage;\n stage && stage.renderNextFrame();\n }\n return this;\n }\n\n subAnimate() {\n const sa = new SubAnimate(this, this.tailAnimate);\n this.tailAnimate = sa;\n this.subAnimates.push(sa);\n sa.bind(this.target);\n return this;\n }\n\n getStartProps(): Record {\n return this.subAnimates[0].getStartProps();\n }\n\n getEndProps(): Record {\n return this.tailAnimate.getEndProps();\n }\n\n depreventAttr(key: string) {\n if (!this._preventAttrs) {\n return;\n }\n this._preventAttrs.delete(key);\n }\n preventAttr(key: string) {\n if (!this._preventAttrs) {\n this._preventAttrs = new Set();\n }\n this._preventAttrs.add(key);\n }\n preventAttrs(keys: string[]) {\n keys.forEach(key => this.preventAttr(key));\n }\n validAttr(key: string): boolean {\n if (!this._preventAttrs) {\n return true;\n }\n return !this._preventAttrs.has(key);\n }\n\n bind(target: IAnimateTarget) {\n this.target = target;\n\n if (this.target.onAnimateBind) {\n this.target.onAnimateBind(this);\n }\n\n this.subAnimates.forEach(sa => {\n sa.bind(target);\n });\n return this;\n }\n\n advance(delta: number) {\n // startTime之前的时间不计入耗时\n if (this._duringTime < this._startTime) {\n if (this._duringTime + delta * this.timeScale < this._startTime) {\n this._duringTime += delta * this.timeScale;\n return;\n }\n delta = this._duringTime + delta * this.timeScale - this._startTime;\n this._duringTime = this._startTime;\n }\n // 执行advance\n if (this.status === AnimateStatus.INITIAL) {\n this.status = AnimateStatus.RUNNING;\n this._onStart && this._onStart.forEach(cb => cb());\n }\n const end = this.setPosition(this.rawPosition + delta * this.timeScale);\n if (end && this.status === AnimateStatus.RUNNING) {\n this.status = AnimateStatus.END;\n this._onEnd && this._onEnd.forEach(cb => cb());\n }\n }\n\n setPosition(rawPosition: number): boolean {\n let d = 0;\n let sa: SubAnimate | undefined;\n const prevRawPos = this.rawPosition;\n const maxRawPos = this.subAnimates.reduce((a, b) => a + b.totalDuration, 0);\n\n if (rawPosition < 0) {\n rawPosition = 0;\n }\n\n const end = rawPosition >= maxRawPos;\n\n if (end) {\n rawPosition = maxRawPos;\n }\n\n if (rawPosition === prevRawPos) {\n return end;\n }\n\n // 查找对应的subAnimate\n for (let i = 0; i < this.subAnimates.length; i++) {\n sa = this.subAnimates[i];\n if (d + sa.totalDuration >= rawPosition) {\n break;\n } else {\n d += sa.totalDuration;\n sa = undefined;\n }\n }\n this.rawPosition = rawPosition;\n sa.setPosition(rawPosition - d);\n\n return end;\n }\n\n onStart(cb: () => void) {\n if (!this._onStart) {\n this._onStart = [];\n }\n this._onStart.push(cb);\n }\n onEnd(cb: () => void) {\n if (!this._onEnd) {\n this._onEnd = [];\n }\n this._onEnd.push(cb);\n }\n onRemove(cb: () => void) {\n if (!this._onRemove) {\n this._onRemove = [];\n }\n this._onRemove.push(cb);\n }\n onFrame(cb: (step: IStep, ratio: number) => void) {\n if (!this._onFrame) {\n this._onFrame = [];\n }\n this._onFrame.push(cb);\n }\n release() {\n this.status = AnimateStatus.END;\n return;\n }\n\n stop(nextVal?: 'start' | 'end' | Record) {\n if (!nextVal) {\n this.target.onStop();\n }\n if (nextVal === 'start') {\n this.target.onStop(this.getStartProps());\n } else if (nextVal === 'end') {\n this.target.onStop(this.getEndProps());\n } else {\n this.target.onStop(nextVal);\n }\n this.release();\n }\n}\n\n// Animate.mode |= AnimateMode.SET_ATTR_IMMEDIATELY;\n\nexport class SubAnimate implements ISubAnimate {\n declare target: IAnimateTarget;\n declare animate: IAnimate;\n // 默认的初始step,一定存在,且stepHead的props一定保存整个subAnimate阶段所有属性的最初\n protected declare stepHead: Step;\n protected declare stepTail: Step;\n // 结束时反转动画\n declare bounce: boolean;\n // 是否reverse\n declare reversed: boolean;\n // 循环次数,0为执行一次,1为执行两次,Infinity为无限循环\n declare loop: number;\n // 持续时间,不包括循环\n declare duration: number;\n // 位置,在[0, duration]之间\n declare position: number;\n // 绝对的位置,在[0, loops * duration]之间\n declare rawPosition: number;\n declare dirty: boolean;\n\n declare _totalDuration: number;\n declare _startAt: number;\n declare _lastStep: IStep;\n declare _deltaPosition: number;\n\n get totalDuration(): number {\n this.calcAttr();\n return this._totalDuration + this._startAt;\n }\n\n constructor(animate: IAnimate, lastSubAnimate?: SubAnimate) {\n this.rawPosition = -1;\n this.position = 0;\n this.loop = 0;\n this.duration = 0;\n this.animate = animate;\n if (lastSubAnimate) {\n this.stepHead = new Step(0, 0, Object.assign({}, lastSubAnimate.stepTail.props));\n } else {\n this.stepHead = new Step(0, 0, {});\n }\n this.stepTail = this.stepHead;\n this.dirty = true;\n this._startAt = 0;\n }\n\n // 计算按需计算的属性\n protected calcAttr() {\n if (!this.dirty) {\n return;\n }\n\n this._totalDuration = this.duration * (this.loop + 1);\n }\n\n bind(target: IAnimateTarget) {\n this.target = target;\n return this;\n }\n\n play(customAnimate: ICustomAnimate) {\n let duration = customAnimate.duration;\n if (duration == null || duration < 0) {\n duration = 0;\n }\n const easing = customAnimate.easing;\n const easingFunc = typeof easing === 'string' ? Easing[easing] : easing;\n const step = this._addStep(duration, null, easingFunc);\n step.type = AnimateStepType.customAnimate;\n this._appendProps(customAnimate.getEndProps(), step, false);\n this._appendCustomAnimate(customAnimate, step);\n return this;\n }\n\n // _appendPlayProps(step: IStep) {\n\n // return;\n // }\n\n to(props: Record, duration: number, easing: EasingType, params?: IStepConfig) {\n if (duration == null || duration < 0) {\n duration = 0;\n }\n\n const easingFunc = typeof easing === 'string' ? Easing[easing] : easing;\n\n const step = this._addStep(duration, null, easingFunc);\n step.type = AnimateStepType.to;\n this._appendProps(props, step, params ? params.tempProps : false);\n // this._appendPlayProps(step);\n\n if (!step.propKeys) {\n step.propKeys = Object.keys(step.props);\n }\n if (!(params && params.noPreventAttrs)) {\n this.target.animates.forEach(a => {\n if (a.id !== this.animate.id) {\n a.preventAttrs(step.propKeys);\n }\n });\n }\n return this;\n }\n\n from(props: Record, duration: number, easing: EasingType, params?: IStepConfig) {\n this.to(props, 0, easing, params);\n const toProps = {};\n if (!this.stepTail.propKeys) {\n this.stepTail.propKeys = Object.keys(this.stepTail.props);\n }\n this.stepTail.propKeys.forEach(k => {\n toProps[k] = this.getLastPropByName(k, this.stepTail);\n });\n this.to(toProps, duration, easing, params);\n this.stepTail.type = AnimateStepType.from;\n }\n\n startAt(t: number) {\n if (t < 0) {\n t = 0;\n }\n this._startAt = t;\n return this;\n }\n\n getStartProps() {\n return this.stepHead?.props;\n }\n\n getEndProps() {\n return this.stepTail.props;\n }\n\n getLastStep() {\n return this._lastStep;\n }\n\n wait(duration: number) {\n if (duration > 0) {\n const step = this._addStep(+duration, null);\n\n step.type = AnimateStepType.wait;\n // TODO 这里如果跳帧的话会存在bug\n if (step.prev.customAnimate) {\n step.props = step.prev.customAnimate.getEndProps();\n } else {\n step.props = step.prev.props;\n }\n if (this.target.onAddStep) {\n this.target.onAddStep(step);\n }\n // this._appendPlayProps(step);\n }\n return this;\n }\n\n protected _addStep(duration: number, props: any, easingFunc?: EasingTypeFunc) {\n const step = new Step(this.duration, duration, props, easingFunc);\n this.duration += duration;\n this.stepTail.append(step);\n this.stepTail = step;\n return step;\n }\n\n protected _appendProps(props: any, step: Step, tempProps?: boolean) {\n if (tempProps) {\n step.props = props;\n } else {\n // todo: 是否需要深拷贝props\n step.props = Object.assign({}, props);\n }\n let lastStep = step.prev;\n const _props = step.props;\n // 将undefined的属性设置到默认值\n if (!step.propKeys) {\n step.propKeys = Object.keys(step.props);\n }\n step.propKeys.forEach(k => {\n if (step.props[k] === undefined) {\n step.props[k] = this.target.getDefaultAttribute(k);\n }\n });\n // 拷贝之前的step阶段属性\n while (lastStep.prev) {\n if (lastStep.props) {\n if (!lastStep.propKeys) {\n lastStep.propKeys = Object.keys(lastStep.props);\n }\n lastStep.propKeys.forEach(key => {\n if (_props[key] === undefined) {\n _props[key] = lastStep.props[key];\n }\n });\n }\n // 重置propKeys\n step.propKeys = Object.keys(step.props);\n lastStep = lastStep.prev;\n }\n\n // 设置最初的props属性\n const initProps = this.stepHead.props;\n if (!step.propKeys) {\n step.propKeys = Object.keys(_props);\n }\n step.propKeys.forEach(key => {\n if (initProps[key] === undefined) {\n const parentAnimateInitProps = this.animate.getStartProps();\n initProps[key] = parentAnimateInitProps[key] = this.target.getComputedAttribute(key);\n }\n });\n\n if (this.target.onAddStep) {\n this.target.onAddStep(step);\n }\n }\n\n protected _appendCustomAnimate(customAnimate: ICustomAnimate, step: Step) {\n step.customAnimate = customAnimate;\n customAnimate.step = step;\n customAnimate.bind(this.target, this);\n }\n\n setPosition(rawPosition: number) {\n const d = this.duration;\n const loopCount = this.loop;\n const prevRawPos = this.rawPosition;\n let end = false;\n let loop: number; // 当前是第几次循环\n let position: number; // 当前周期的时间\n const startAt = this._startAt ?? 0;\n\n if (rawPosition < 0) {\n rawPosition = 0;\n }\n if (rawPosition < startAt) {\n this.rawPosition = rawPosition;\n return false;\n }\n rawPosition = rawPosition - startAt;\n if (d <= 0) {\n // 如果不用执行,跳过\n end = true;\n return end;\n }\n loop = Math.floor(rawPosition / d);\n position = rawPosition - loop * d;\n\n // 计算rawPosition\n end = rawPosition >= loopCount * d + d;\n // 如果结束,跳过\n if (end) {\n position = d;\n loop = loopCount;\n rawPosition = position * loop + d;\n }\n\n if (rawPosition === prevRawPos) {\n return end;\n }\n\n // reverse动画\n const rev = !this.reversed !== !(this.bounce && loop % 2);\n if (rev) {\n position = d - position;\n }\n\n this._deltaPosition = position - this.position;\n this.position = position;\n this.rawPosition = rawPosition + startAt;\n\n this.updatePosition(end, rev);\n\n return end;\n }\n\n protected updatePosition(end: boolean, rev: boolean) {\n if (!this.stepHead) {\n return;\n }\n let step = this.stepHead.next;\n const position = this.position;\n const duration = this.duration;\n if (this.target && step) {\n let stepNext = step.next;\n while (stepNext && stepNext.position <= position) {\n step = stepNext;\n stepNext = step.next;\n }\n let ratio = end ? (duration === 0 ? 1 : position / duration) : (position - step.position) / step.duration; // TODO: revisit this.\n if (step.easing) {\n ratio = step.easing(ratio);\n }\n // 判断这次和上次过程中是否经历了自定义step,如果跳过了自定义step那么执行自定义step的onEnd\n this.tryCallCustomAnimateLifeCycle(step, this._lastStep || (rev ? this.stepTail : this.stepHead), rev);\n // if (step !== this._lastStep) {\n // if (this._deltaPosition > 0) {\n // let _step = step.prev;\n // while (_step && _step !== this._lastStep) {\n // if (_step.customAnimate) {\n // _step.customAnimate.onEnd();\n // }\n // _step = _step.prev;\n // }\n // if (_step && _step.customAnimate) {\n // _step.customAnimate.onEnd();\n // }\n // } else if (this._deltaPosition < 0) {\n // let _step = step.next;\n // while (_step && _step !== this._lastStep) {\n // if (_step.customAnimate) {\n // _step.customAnimate.onEnd();\n // }\n // _step = _step.next;\n // }\n // if (_step && _step.customAnimate) {\n // _step.customAnimate.onEnd();\n // }\n // }\n // }\n this.updateTarget(step, ratio, end);\n this._lastStep = step;\n\n this.animate._onFrame && this.animate._onFrame.forEach(cb => cb(step, ratio));\n }\n }\n\n // 如果动画卡顿跳过了自定义动画,那么尝试执行自定义动画的生命周期\n tryCallCustomAnimateLifeCycle(step: IStep, lastStep: IStep, rev: boolean) {\n if (step === lastStep) {\n return;\n }\n if (rev) {\n let _step = lastStep.prev;\n while (_step && _step !== step) {\n if (_step.customAnimate) {\n _step.customAnimate.onStart && _step.customAnimate.onStart();\n _step.customAnimate.onEnd && _step.customAnimate.onEnd();\n }\n _step = step.prev;\n }\n // 执行lastStep的onEnd和currentStep的onStart\n if (lastStep && lastStep.customAnimate) {\n lastStep.customAnimate.onEnd && lastStep.customAnimate.onEnd();\n }\n if (step && step.customAnimate) {\n step.customAnimate.onStart && step.customAnimate.onStart();\n }\n } else {\n let _step = lastStep.next;\n while (_step && _step !== step) {\n if (_step.customAnimate) {\n _step.customAnimate.onStart && _step.customAnimate.onStart();\n _step.customAnimate.onEnd && _step.customAnimate.onEnd();\n }\n _step = _step.next;\n }\n // 执行lastStep的onEnd和currentStep的onStart\n if (lastStep && lastStep.customAnimate) {\n lastStep.customAnimate.onEnd && lastStep.customAnimate.onEnd();\n }\n if (step && step.customAnimate) {\n step.customAnimate.onStart && step.customAnimate.onStart();\n }\n }\n }\n\n /**\n * 获取这个属性的上一个值\n * @param name\n * @param step\n * @returns\n */\n getLastPropByName(name: string, step: Step): any {\n let lastStep = step.prev;\n while (lastStep) {\n if (lastStep.props && lastStep.props[name] !== undefined) {\n return lastStep.props[name];\n } else if (lastStep.customAnimate) {\n const val = lastStep.customAnimate.getEndProps()[name];\n if (val !== undefined) {\n return val;\n }\n }\n lastStep = lastStep.prev;\n }\n\n Logger.getInstance().warn('未知错误,step中找不到属性');\n return step.props[name];\n }\n\n protected updateTarget(step: Step, ratio: number, end: boolean) {\n if (step.props == null && step.customAnimate == null) {\n return;\n }\n this.target.onStep(this, this.animate, step, ratio, end);\n }\n}\n\n// export class Animate implements IAnimate {\n// declare target: IAnimateTarget;\n// declare timeline: ITimeline;\n// protected declare stepHead: Step;\n// protected declare stepTail: Step;\n// declare nextAnimate?: Animate;\n// declare prevAnimate?: Animate;\n// // 结束时反转动画\n// declare bounce: boolean;\n// // 是否reverse\n// declare reversed: boolean;\n// // 循环次数,0为执行一次,1为执行两次,Infinity为无限循环\n// declare loop: number;\n// // 持续时间,不包括循环\n// declare duration: number;\n// // 当前Animate的状态,正常,暂停,结束\n// declare status: AnimateStatus;\n// // 位置,在[0, duration]之间\n// declare position: number;\n// // 绝对的位置,在[0, loops * duration]之间\n// declare rawPosition: number;\n// // 开始时间\n// protected declare _startAt: number;\n// // 时间的缩放,例如2表示2倍速\n// declare timeScale: number;\n// declare props: Record;\n// declare readonly id: string | number;\n\n// protected declare _onStart?: (() => void)[];\n// protected declare _onFrame?: ((step: IStep, ratio: number) => void)[];\n// protected declare _onEnd?: (() => void)[];\n// declare _onRemove?: (() => void)[];\n// declare _preventAttrs?: Set;\n\n// constructor(id: string | number = Generator.GenAutoIncrementId(), timeline: ITimeline = defaultTimeline) {\n// this.timeline = timeline;\n// this.status = AnimateStatus.INITIAL;\n// this.rawPosition = -1;\n// this.position = 0;\n// this.loop = 0;\n// this.timeline.addAnimate(this);\n// this.timeScale = 1;\n// this.id = id;\n// this.props = {};\n// this.stepHead = new Step(0, 0, {});\n// this.stepTail = this.stepHead;\n// }\n\n// preventAttr(key: string) {\n// if (!this._preventAttrs) {\n// this._preventAttrs = new Set();\n// }\n// this._preventAttrs.add(key);\n// }\n// preventAttrs(keys: string[]) {\n// keys.forEach(key => this.preventAttr(key));\n// }\n// validAttr(key: string): boolean {\n// if (!this._preventAttrs) {\n// return true;\n// }\n// return !this._preventAttrs.has(key);\n// }\n\n// getLastPropByName(name: string, step: Step): any {\n// let lastStep = step.prev;\n// while (lastStep) {\n// if (lastStep.props && lastStep.props[name] !== undefined) {\n// return lastStep.props[name];\n// }\n// lastStep = lastStep.prev;\n// }\n// let val = this.props[name];\n// if (!val) {\n// console.warn('未知错误,step中找不到属性');\n// val = this.target.getComputedAttribute(name);\n// this.props[name] = val;\n// }\n\n// return val;\n// }\n\n// bind(target: IAnimateTarget) {\n// this.target = target;\n// this.duration = 0;\n// return this;\n// }\n\n// startAt(t: number) {\n// if (t < 0) {\n// return this;\n// }\n// this._startAt = t;\n// return this;\n// }\n\n// to(props: Record, duration: number, easing: EasingType, params?: IStepConfig) {\n// if (duration == null || duration < 0) {\n// duration = 0;\n// }\n\n// const easingFunc = typeof easing === 'string' ? Easing[easing] : easing;\n\n// const step = this._addStep(duration, null, easingFunc);\n// this._appendProps(props, step, params ? params.tempProps : false);\n// return this;\n// }\n\n// wait(duration: number) {\n// if (duration > 0) {\n// const step = this._addStep(+duration, null);\n// if (step.prev) {\n// step.props = step.prev.props;\n// }\n// if (this.target.onAddStep) {\n// this.target.onAddStep(step);\n// }\n// }\n// return this;\n// }\n\n// protected _addStep(duration: number, props: any, easingFunc?: EasingTypeFunc) {\n// const step = new Step(this.duration, duration, props, easingFunc);\n// this.duration += duration;\n// this.stepTail.append(step);\n// this.stepTail = step;\n// return step;\n// }\n\n// protected _appendProps(props: any, step: Step, tempProps?: boolean) {\n// if (tempProps) {\n// step.props = props;\n// } else {\n// // todo: 是否需要深拷贝props\n// step.props = Object.assign({}, props);\n// }\n// let lastStep = step.prev;\n// const _props = step.props;\n// // 拷贝之前的step阶段属性\n// while (lastStep.prev) {\n// if (lastStep.props) {\n// if (!lastStep.propKeys) {\n// lastStep.propKeys = Object.keys(lastStep.props);\n// }\n// lastStep.propKeys.forEach(key => {\n// if (_props[key] === undefined) {\n// _props[key] = lastStep.props[key];\n// }\n// });\n// }\n// lastStep = lastStep.prev;\n// }\n\n// // 设置最初的props属性\n// const initProps = this.stepHead.props;\n// if (!step.propKeys) {\n// step.propKeys = Object.keys(_props);\n// step.propKeys.forEach(key => {\n// initProps[key] = this.target.getComputedAttribute(key);\n// });\n// }\n\n// if (this.target.onAddStep) {\n// this.target.onAddStep(step);\n// }\n// }\n\n// advance(delta: number) {\n// if (this.status === AnimateStatus.INITIAL) {\n// this.status = AnimateStatus.RUNNING;\n// this._onStart && this._onStart.forEach(cb => cb());\n// }\n// const end = this.setPosition(this.rawPosition + delta * this.timeScale);\n// if (end && this.status === AnimateStatus.RUNNING) {\n// this.status = AnimateStatus.END;\n// this._onEnd && this._onEnd.forEach(cb => cb());\n// }\n// }\n\n// setPosition(rawPosition: number) {\n// const d = this.duration;\n// const loopCount = this.loop;\n// const prevRawPos = this.rawPosition;\n// let end = false;\n// let loop: number; // 当前是第几次循环\n// let position: number; // 当前周期的时间\n// const startAt = this._startAt ?? 0;\n\n// if (rawPosition < 0) {\n// rawPosition = 0;\n// }\n// if (rawPosition < startAt) {\n// this.rawPosition = rawPosition;\n// return false;\n// }\n// rawPosition = rawPosition - startAt;\n// if (d <= 0) {\n// // 如果不用执行,跳过\n// end = true;\n// return end;\n// }\n// loop = Math.floor(rawPosition / d);\n// position = rawPosition - loop * d;\n\n// // 计算rawPosition\n// end = rawPosition >= loopCount * d + d;\n// // 如果结束,跳过\n// if (end) {\n// position = d;\n// loop = loopCount;\n// rawPosition = position * loop + d;\n// }\n\n// if (rawPosition === prevRawPos) {\n// return end;\n// }\n\n// // reverse动画\n// const rev = !this.reversed !== !(this.bounce && loop % 2);\n// if (rev) {\n// position = d - position;\n// }\n\n// this.position = position;\n// this.rawPosition = rawPosition + startAt;\n\n// this.updatePosition(end);\n\n// return end;\n// }\n\n// protected updatePosition(end: boolean) {\n// if (!this.stepHead) {\n// return;\n// }\n// let step = this.stepHead;\n// const position = this.position;\n// const duration = this.duration;\n// if (this.target && step) {\n// let stepNext = step.next;\n// while (stepNext && stepNext.position <= position) {\n// step = step.next;\n// stepNext = step.next;\n// }\n// let ratio = end ? (duration === 0 ? 1 : position / duration) : (position - step.position) / step.duration; // TODO: revisit this.\n// if (step.easing) {\n// ratio = step.easing(ratio);\n// }\n// this.updateTarget(step, ratio, end);\n// this._onFrame && this._onFrame.forEach(cb => cb(step, ratio));\n// }\n// }\n\n// protected updateTarget(step: Step, ratio: number, end: boolean) {\n// if (step.props == null) {\n// return;\n// }\n// this.target.onStep(this, step, ratio, end);\n// }\n\n// onStart(cb: () => void) {\n// if (!this._onStart) {\n// this._onStart = [];\n// }\n// this._onStart.push(cb);\n// }\n// onEnd(cb: () => void) {\n// if (!this._onEnd) {\n// this._onEnd = [];\n// }\n// this._onEnd.push(cb);\n// }\n// onRemove(cb: () => void) {\n// if (!this._onRemove) {\n// this._onRemove = [];\n// }\n// this._onRemove.push(cb);\n// }\n// onFrame(cb: (step: IStep, ratio: number) => void) {\n// if (!this._onFrame) {\n// this._onFrame = [];\n// }\n// this._onFrame.push(cb);\n// }\n\n// getStartProps() {\n// return this.stepHead?.props;\n// }\n\n// getEndProps(target: Record = {}) {\n// let step = this.stepHead;\n// while (step) {\n// if (step.props) {\n// Object.assign(target, step.props);\n// }\n// step = step.next;\n// }\n\n// return target;\n// }\n\n// stop(nextVal?: 'start' | 'end' | Record) {\n// this.status = AnimateStatus.END;\n// if (!nextVal) {\n// this.target.onStop();\n// }\n// if (nextVal === 'start') {\n// this.target.onStop(this.getStartProps());\n// } else if (nextVal === 'end') {\n// this.target.onStop(this.getEndProps());\n// } else {\n// this.target.onStop(nextVal);\n// }\n// }\n\n// release() {\n// this.status = AnimateStatus.END;\n// return;\n// }\n// }\n\nclass Step implements IStep {\n declare prev?: Step;\n // 持续时间\n declare duration: number;\n // 在animate中的位置\n declare position: number;\n declare next?: Step;\n declare props: any;\n // 保存解析后的props,用于性能优化\n declare parsedProps?: any;\n declare propKeys?: string[];\n declare easing?: EasingTypeFunc;\n declare customAnimate?: ICustomAnimate;\n // passive: boolean;\n // index: number;\n type: IAnimateStepType;\n\n constructor(position: number, duration: number, props?: any, easing?: EasingTypeFunc) {\n this.duration = duration;\n this.position = position;\n this.props = props;\n this.easing = easing;\n }\n\n append(step: Step) {\n step.prev = this;\n step.next = this.next;\n this.next = step;\n }\n\n getLastProps() {\n let step = this.prev;\n while (step) {\n if (step.props) {\n return step.props;\n } else if (step.customAnimate) {\n return step.customAnimate.getMergedEndProps();\n }\n step = step.prev as any;\n }\n return null;\n }\n}\n","export const DefaultStateAnimateConfig = {\n duration: 200,\n easing: \"cubicOut\"\n};\n\nexport const DefaultMorphingAnimateConfig = {\n duration: 1e3,\n easing: \"quadInOut\"\n};","import { Color } from '@visactor/vutils';\n\nexport function colorEqual(color1: string, color2: string): boolean {\n const c1 = Color.parseColorString(color1);\n const c2 = Color.parseColorString(color2);\n return c1 && c2 ? c1.r === c2.r && c1.g === c2.g && c1.b === c2.b && c1.opacity === c2.opacity : false;\n}\n\nexport enum ColorType {\n Color255 = 0,\n Color1 = 1\n}\n\nexport class ColorStore {\n private static store255: { [id: string]: [number, number, number, number] } = {};\n private static store1: { [id: string]: [number, number, number, number] } = {};\n static Get(\n str: string,\n size: number = ColorType.Color1,\n arr: [number, number, number, number] = [0, 0, 0, 1]\n ): [number, number, number, number] {\n if (size === ColorType.Color1) {\n const color: any = ColorStore.store1[str];\n if (color) {\n arr[0] = color[0];\n arr[1] = color[1];\n arr[2] = color[2];\n arr[3] = color[3];\n return arr;\n }\n const c = Color.parseColorString(str);\n if (c) {\n const data: [number, number, number, number] = [c.r / 255, c.g / 255, c.b / 255, c.opacity];\n ColorStore.store1[str] = data;\n // value[3] *= 255;\n ColorStore.store255[str] = [c.r, c.g, c.b, c.opacity];\n arr[0] = data[0];\n arr[1] = data[1];\n arr[2] = data[2];\n arr[3] = data[3];\n }\n return arr;\n }\n const color: any = ColorStore.store255[str];\n if (color) {\n arr[0] = color[0];\n arr[1] = color[1];\n arr[2] = color[2];\n arr[3] = color[3];\n return arr;\n }\n\n const c = Color.parseColorString(str);\n if (c) {\n ColorStore.store1[str] = [c.r / 255, c.g / 255, c.b / 255, c.opacity];\n // value[3] *= 255;\n ColorStore.store255[str] = [c.r, c.g, c.b, c.opacity];\n arr[0] = c.r;\n arr[1] = c.g;\n arr[2] = c.b;\n arr[3] = c.opacity;\n }\n return arr;\n }\n\n static Set(str: string, size: number, arr: [number, number, number, number]) {\n if (size === ColorType.Color1) {\n if (ColorStore.store1[str]) {\n return;\n }\n ColorStore.store1[str] = arr;\n ColorStore.store255[str] = [\n Math.floor(arr[0] * 255),\n Math.floor(arr[1] * 255),\n Math.floor(arr[2] * 255),\n Math.floor(arr[3] * 255)\n ];\n } else {\n if (ColorStore.store255[str]) {\n return;\n }\n ColorStore.store255[str] = arr;\n ColorStore.store1[str] = [arr[0] / 255, arr[1] / 255, arr[2] / 255, arr[3]];\n }\n }\n}\n","import { ColorStore, ColorType } from './store';\nimport type { IGradientColor, ILinearGradient, IRadialGradient, IConicalGradient } from '../interface';\n\nfunction colorArrayToString(\n color: string | IGradientColor | [number, number, number, number],\n alphaChannel: boolean = false\n) {\n if (Array.isArray(color)) {\n return alphaChannel\n ? `rgb(${Math.round(color[0])},${Math.round(color[1])},${Math.round(color[2])},${color[3].toFixed(2)})`\n : `rgb(${Math.round(color[0])},${Math.round(color[1])},${Math.round(color[2])})`;\n }\n return color;\n}\n\nexport function interpolateColor(\n from: [number, number, number, number] | string | IGradientColor,\n to: [number, number, number, number] | string | IGradientColor,\n ratio: number,\n alphaChannel: boolean,\n cb?: (fromArray: [number, number, number, number], toArray: [number, number, number, number]) => void\n): false | string | IGradientColor {\n if (!(from && to)) {\n return (from && colorArrayToString(from)) || (to && colorArrayToString(to)) || false;\n }\n let fromArray: [number, number, number, number];\n let toArray: [number, number, number, number];\n let fromGradient: boolean = false;\n let toGradient: boolean = false;\n if (Array.isArray(from)) {\n fromArray = from as [number, number, number, number];\n } else if (typeof from === 'string') {\n fromArray = ColorStore.Get(from, ColorType.Color255);\n } else {\n fromGradient = true;\n }\n if (Array.isArray(to)) {\n toArray = to as [number, number, number, number];\n } else if (typeof to === 'string') {\n toArray = ColorStore.Get(to, ColorType.Color255);\n } else {\n toGradient = true;\n }\n if (fromGradient !== toGradient) {\n // 纯色到渐变色,那就将纯色转成渐变色\n const gradient: IGradientColor = (fromGradient ? from : to) as IGradientColor;\n const pure = (fromGradient ? to : from) as string | [number, number, number, number];\n const gradientFromPure: IGradientColor = {\n ...gradient,\n stops: gradient.stops.map(v => ({ ...v, color: colorArrayToString(pure) as string }))\n };\n return fromGradient\n ? interpolateColor(gradient, gradientFromPure, ratio, alphaChannel, cb)\n : interpolateColor(gradientFromPure, gradient, ratio, alphaChannel, cb);\n }\n\n if (fromGradient) {\n if ((from as IGradientColor).gradient === (to as IGradientColor).gradient) {\n const fc: IGradientColor = from as IGradientColor;\n const tc: IGradientColor = to as IGradientColor;\n // 渐变色插值,只支持相同数量stopColor的插值,并且认为当前的stopColor数量是和from、to相同\n const fromStops = fc.stops;\n const toStops = tc.stops;\n if (fromStops.length !== toStops.length) {\n return false;\n }\n if (fc.gradient === 'linear') {\n return interpolateGradientLinearColor(fc, tc as ILinearGradient, ratio);\n } else if (fc.gradient === 'radial') {\n return interpolateGradientRadialColor(fc, tc as IRadialGradient, ratio);\n } else if (fc.gradient === 'conical') {\n return interpolateGradientConicalColor(fc, tc as IConicalGradient, ratio);\n }\n }\n return false;\n }\n cb && cb(fromArray, toArray);\n const result = interpolatePureColorArray(fromArray, toArray, ratio);\n return colorArrayToString(result, alphaChannel);\n}\n\nexport function interpolateGradientLinearColor(\n fc: ILinearGradient,\n tc: ILinearGradient,\n ratio: number\n): false | ILinearGradient {\n const fStops = fc.stops;\n const tStops = tc.stops;\n const color: ILinearGradient = {\n gradient: 'linear',\n x0: fc.x0 + (tc.x0 - fc.x0) * ratio,\n x1: fc.x1 + (tc.x1 - fc.x1) * ratio,\n y0: fc.y0 + (tc.y0 - fc.y0) * ratio,\n y1: fc.y1 + (tc.y1 - fc.y1) * ratio,\n stops: new Array(fStops.length).fill(0).map((_, i) => {\n return {\n color: colorStringInterpolationToStr(fStops[i].color, tStops[i].color, ratio),\n offset: fStops[i].offset + (tStops[i].offset - fStops[i].offset) * ratio\n };\n })\n };\n return color;\n}\n\nexport function interpolateGradientRadialColor(\n fc: IRadialGradient,\n tc: IRadialGradient,\n ratio: number\n): false | IRadialGradient {\n const fStops = fc.stops;\n const tStops = tc.stops;\n const color: IRadialGradient = {\n gradient: 'radial',\n x0: fc.x0 + (tc.x0 - fc.x0) * ratio,\n x1: fc.x1 + (tc.x1 - fc.x1) * ratio,\n y0: fc.y0 + (tc.y0 - fc.y0) * ratio,\n y1: fc.y1 + (tc.y1 - fc.y1) * ratio,\n r0: fc.r0 + (tc.r0 - fc.r0) * ratio,\n r1: fc.r1 + (tc.r1 - fc.r1) * ratio,\n stops: new Array(fStops.length).fill(0).map((_, i) => {\n return {\n color: colorStringInterpolationToStr(fStops[i].color, tStops[i].color, ratio),\n offset: fStops[i].offset + (tStops[i].offset - fStops[i].offset) * ratio\n };\n })\n };\n return color;\n}\n\nexport function interpolateGradientConicalColor(\n fc: IConicalGradient,\n tc: IConicalGradient,\n ratio: number\n): false | IConicalGradient {\n const fStops = fc.stops;\n const tStops = tc.stops;\n const color: IConicalGradient = {\n gradient: 'conical',\n startAngle: fc.startAngle + (tc.startAngle - fc.startAngle) * ratio,\n endAngle: fc.endAngle + (tc.endAngle - fc.endAngle) * ratio,\n x: fc.x + (tc.x - fc.x) * ratio,\n y: fc.y + (tc.y - fc.y) * ratio,\n stops: new Array(fStops.length).fill(0).map((_, i) => {\n return {\n color: colorStringInterpolationToStr(fStops[i].color, tStops[i].color, ratio),\n offset: fStops[i].offset + (tStops[i].offset - fStops[i].offset) * ratio\n };\n })\n };\n return color;\n}\n\nexport function interpolatePureColorArray(\n from: [number, number, number, number],\n to: [number, number, number, number],\n ratio: number\n): [number, number, number, number] {\n return [\n from[0] + (to[0] - from[0]) * ratio,\n from[1] + (to[1] - from[1]) * ratio,\n from[2] + (to[2] - from[2]) * ratio,\n from[3] + (to[3] - from[3]) * ratio\n ];\n}\n\nconst _fromColorRGB: [number, number, number, number] = [0, 0, 0, 0];\nconst _toColorRGB: [number, number, number, number] = [0, 0, 0, 0];\nexport function colorStringInterpolationToStr(fromColor: string, toColor: string, ratio: number): string {\n ColorStore.Get(fromColor, ColorType.Color255, _fromColorRGB);\n ColorStore.Get(toColor, ColorType.Color255, _toColorRGB);\n return `rgba(${Math.round(_fromColorRGB[0] + (_toColorRGB[0] - _fromColorRGB[0]) * ratio)},${Math.round(\n _fromColorRGB[1] + (_toColorRGB[1] - _fromColorRGB[1]) * ratio\n )},${Math.round(_fromColorRGB[2] + (_toColorRGB[2] - _fromColorRGB[2]) * ratio)},${\n _fromColorRGB[3] + (_toColorRGB[3] - _fromColorRGB[3]) * ratio\n })`;\n}\n","import type { IImage, ImagePayload, ResourceData } from '../interface';\nimport { application } from '../application';\n\nexport class ResourceLoader {\n private static cache: Map = new Map();\n\n static GetImage(url: string, mark: ImagePayload) {\n let data = ResourceLoader.cache.get(url);\n if (data) {\n // 存在缓存\n if (data.loadState === 'fail') {\n // 资源请求失败,修改mark状态\n application.global.getRequestAnimationFrame()(() => {\n mark.imageLoadFail(url);\n });\n } else if (data.loadState === 'init' || data.loadState === 'loading') {\n // 资源padding队列加入mark信息\n data.waitingMark?.push(mark);\n } else if (mark) {\n mark.imageLoadSuccess(url, data.data as HTMLImageElement);\n }\n } else {\n data = { type: 'image', loadState: 'init' };\n ResourceLoader.cache.set(url, data);\n\n data.dataPromise = application.global.loadImage(url);\n if (!data.dataPromise) {\n // 无法获取资源,修改缓存和mark状态\n data.loadState = 'fail';\n mark.imageLoadFail(url);\n } else {\n // 资源padding队列加入mark信息\n data.waitingMark = [mark];\n\n data.dataPromise.then(res => {\n data.loadState = res?.data ? 'success' : 'fail';\n data.data = res?.data;\n // 遍历资源padding队列,更新mark信息\n data.waitingMark?.map((mark: IImage, index) => {\n if (res?.data) {\n data.loadState = 'success';\n data.data = res.data;\n mark.imageLoadSuccess(url, res.data as HTMLImageElement);\n } else {\n data.loadState = 'fail';\n mark.imageLoadFail(url);\n }\n });\n });\n }\n }\n }\n\n static GetSvg(svgStr: string, mark: IImage) {\n let data = ResourceLoader.cache.get(svgStr);\n if (data) {\n // 存在缓存\n if (data.loadState === 'fail') {\n // 资源请求失败,修改mark状态\n application.global.getRequestAnimationFrame()(() => {\n mark.imageLoadFail(svgStr);\n });\n } else if (data.loadState === 'init' || data.loadState === 'loading') {\n // 资源padding队列加入mark信息\n data.waitingMark?.push(mark);\n } else if (mark) {\n application.global.getRequestAnimationFrame()(() => {\n mark.imageLoadSuccess(svgStr, data.data as HTMLImageElement);\n });\n }\n } else {\n data = { type: 'image', loadState: 'init' };\n ResourceLoader.cache.set(svgStr, data);\n\n data.dataPromise = application.global.loadSvg(svgStr);\n if (!data.dataPromise) {\n // 无法获取资源,修改缓存和mark状态\n data.loadState = 'fail';\n mark.imageLoadFail(svgStr);\n } else {\n // 资源padding队列加入mark信息\n data.waitingMark = [mark];\n\n data.dataPromise.then(res => {\n data.loadState = res?.data ? 'success' : 'fail';\n data.data = res?.data;\n // 遍历资源padding队列,更新mark信息\n data.waitingMark?.map((mark: IImage, index) => {\n if (res?.data) {\n data.loadState = 'success';\n data.data = res.data;\n mark.imageLoadSuccess(svgStr, res.data as HTMLImageElement);\n } else {\n data.loadState = 'fail';\n mark.imageLoadFail(svgStr);\n }\n });\n });\n }\n }\n }\n\n static GetFile(url: string, type: 'json' | 'arrayBuffer' | 'blob') {\n let data = ResourceLoader.cache.get(url);\n if (data) {\n // 存在缓存\n if (data.loadState === 'init' || data.loadState === 'fail') {\n return Promise.reject();\n } else if (data.loadState === 'loading') {\n return data.dataPromise.then(data => data.data);\n }\n return Promise.resolve(data.data);\n }\n data = { type, loadState: 'init' };\n ResourceLoader.cache.set(url, data);\n\n if (type === 'arrayBuffer') {\n data.dataPromise = application.global.loadArrayBuffer(url);\n } else if (type === 'blob') {\n data.dataPromise = application.global.loadBlob(url);\n } else if (type === 'json') {\n data.dataPromise = application.global.loadJson(url);\n }\n\n return data.dataPromise.then(data => data.data);\n }\n}\n","import type { ICustomPath2D } from './../interface/path';\nimport type { OBBBounds, Dict, IPointLike, IAABBBounds } from '@visactor/vutils';\nimport {\n AABBBounds,\n Matrix,\n normalTransform,\n Point,\n isNil,\n has,\n isString,\n isValidUrl,\n isBase64,\n isObject\n} from '@visactor/vutils';\nimport type {\n GraphicType,\n IAnimateConfig,\n IGraphicAttribute,\n IGraphic,\n IGraphicAnimateParams,\n IGraphicJson,\n ISetAttributeContext,\n ITransform,\n GraphicReleaseStatus\n} from '../interface/graphic';\nimport { Node } from './node-tree';\nimport type {\n IAnimate,\n IAnimateTarget,\n IGlyphGraphicAttribute,\n IGroup,\n ILayer,\n IPickerService,\n IShadowRoot,\n IStage,\n IStep,\n ISubAnimate\n} from '../interface';\nimport { EventTarget, CustomEvent } from '../event';\nimport { DefaultTransform } from './config';\nimport { application } from '../application';\nimport { Animate, DefaultStateAnimateConfig } from '../animate';\nimport { interpolateColor } from '../color-string/interpolate';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { getTheme } from './theme';\nimport { ResourceLoader } from '../resource-loader/loader';\nimport { AttributeUpdateType, IContainPointMode, UpdateTag } from '../common/enums';\n\n/**\n * pathProxy参考自zrender\n * BSD 3-Clause License\n\n Copyright (c) 2017, Baidu Inc.\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n * Neither the name of the copyright holder nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nconst tempMatrix = new Matrix();\nconst tempBounds = new AABBBounds();\n\nexport const PURE_STYLE_KEY = [\n 'stroke',\n 'opacity',\n 'strokeOpacity',\n 'lineDash',\n 'lineDashOffset',\n 'lineCap',\n 'lineJoin',\n 'miterLimit',\n 'fill',\n 'fillOpacity'\n];\n\nexport const GRAPHIC_UPDATE_TAG_KEY = [\n 'lineWidth',\n // 'lineCap',\n // 'lineJoin',\n // 'miterLimit',\n 'scaleX',\n 'scaleY',\n 'angle',\n 'anchor',\n 'visible'\n];\n\nconst tempConstantXYKey = ['x', 'y'];\nconst tempConstantScaleXYKey = ['scaleX', 'scaleY'];\nconst tempConstantAngleKey = ['angle'];\n\nconst point = new Point();\n\nexport const NOWORK_ANIMATE_ATTR = {\n strokeSeg: 1,\n boundsPadding: 2,\n pickMode: 1,\n boundsMode: 1,\n customPickShape: 1,\n pickable: 1,\n childrenPickable: 1,\n visible: 1,\n zIndex: 1,\n layout: 1,\n keepDirIn3d: 1,\n\n outerBorder: 1,\n innerBorder: 1,\n lineDash: 1,\n lineCap: 1,\n lineJoin: 1,\n miterLimit: 2,\n strokeBoundsBuffer: 2,\n\n scaleCenter: 1,\n anchor: 1,\n anchor3d: 1,\n postMatrix: 1,\n\n backgroundMode: 2,\n background: 1,\n texture: 1,\n cursor: 1,\n html: 1\n};\n\n/**\n * globalTransMatrix更新逻辑\n * 1. group的transform修改,会下发到所有下层group,将所有下层的tag修改\n * 2. 叶子graphic每次获取globalTransMatrix都重新计算\n * 3. 所有节点的transform修改,或者globalTransform修改,都会下发到自己的shadowRoot上\n */\n\nexport abstract class Graphic = Partial>\n extends Node\n implements IGraphic, IAnimateTarget\n{\n /**\n * Mixes all enumerable properties and methods from a source object to Element.\n * @param source - The source of properties and methods to mix in.\n */\n static mixin(source: Dict): void {\n // in ES8/ES2017, this would be really easy:\n // Object.defineProperties(Element.prototype, Object.getOwnPropertyDescriptors(source));\n\n // get all the enumerable property keys\n const keys = Object.keys(source);\n\n // loop through properties\n for (let i = 0; i < keys.length; ++i) {\n const propertyName = keys[i];\n\n // Set the property using the property descriptor - this works for accessors and normal value properties\n Object.defineProperty(\n Graphic.prototype,\n propertyName,\n Object.getOwnPropertyDescriptor(source, propertyName) as PropertyDecorator\n );\n }\n }\n\n declare _events?: any;\n\n declare onBeforeAttributeUpdate?: (\n val: any,\n attributes: Partial,\n key: null | string | string[],\n context?: ISetAttributeContext\n ) => T | undefined;\n declare parent: any;\n\n declare resources?: Map<\n string,\n { state: 'init' | 'loading' | 'success' | 'fail'; data?: HTMLImageElement | HTMLCanvasElement }\n >;\n declare backgroundImg?: boolean;\n\n declare type: GraphicType;\n declare prefixed: string;\n declare numberType: number;\n declare isContainer?: boolean;\n declare valid: boolean;\n declare stage?: IStage;\n declare layer?: ILayer;\n declare incremental?: number;\n declare glyphHost?: IGraphic;\n declare _onSetStage?: (g: IGraphic, stage: IStage, layer: ILayer) => void;\n // declare _beforeAttributeUpdate?: (key: string | string, value: any) => void;\n // 标记是否是在3d模式下\n declare in3dMode?: boolean;\n\n // aabbBounds,所有图形都需要有,所以初始化即赋值\n protected declare _AABBBounds: AABBBounds;\n get AABBBounds(): AABBBounds {\n return this.tryUpdateAABBBounds(this.attribute.boundsMode === 'imprecise');\n }\n // 具有旋转的包围盒,部分图元需要,动态初始化\n protected declare _OBBBounds?: OBBBounds;\n get OBBBounds(): OBBBounds {\n return this.tryUpdateOBBBounds();\n }\n protected declare _globalAABBBounds: AABBBounds;\n // 全局包围盒,部分图元需要,动态初始化,建议使用AABBBounds\n get globalAABBBounds(): AABBBounds {\n return this.tryUpdateGlobalAABBBounds();\n }\n protected declare _transMatrix: Matrix;\n get transMatrix(): Matrix {\n return this.tryUpdateLocalTransMatrix(true);\n }\n protected declare _globalTransMatrix: Matrix;\n get globalTransMatrix(): Matrix {\n return this.tryUpdateGlobalTransMatrix(true);\n }\n protected declare _updateTag: number;\n\n // 上次更新的stamp\n declare stamp?: number;\n\n declare attribute: T;\n\n declare shadowRoot?: IShadowRoot;\n\n declare releaseStatus?: GraphicReleaseStatus;\n\n /** 记录state对应的图形属性 */\n declare states?: Record>;\n /** 当前state值 */\n declare currentStates?: string[];\n /** TODO: state更新对应的动画配置 */\n declare stateAnimateConfig?: IAnimateConfig;\n /** 记录应用state之前,attribute对应的原始图形属性 */\n declare normalAttrs?: Partial;\n /** 获取state图形属性的方法 */\n declare stateProxy?: (stateName: string, targetStates?: string[]) => T;\n declare animates: Map;\n\n declare nextAttrs?: T;\n declare prevAttrs?: T;\n declare finalAttrs?: T;\n\n declare pathProxy?: ICustomPath2D;\n\n constructor(params: T = {} as T) {\n super();\n this._AABBBounds = new AABBBounds();\n this._updateTag = UpdateTag.INIT;\n this.attribute = params;\n this.valid = this.isValid();\n if (params.background) {\n this.loadImage((params.background as any).background ?? params.background, true);\n }\n }\n\n setMode(mode: '2d' | '3d') {\n mode === '3d' ? this.set3dMode() : this.set2dMode();\n }\n\n set3dMode() {\n this.in3dMode = true;\n }\n set2dMode() {\n this.in3dMode = false;\n }\n getOffsetXY(attr?: ITransform, includeScroll: boolean = false) {\n const { dx = attr.dx, dy = attr.dy } = this.attribute;\n if (includeScroll && this.parent) {\n // const groupTheme = getTheme(this.parent).group;\n const attribute = this.parent.attribute;\n point.x = dx + (attribute.scrollX ?? 0);\n point.y = dy + (attribute.scrollY ?? 0);\n } else {\n point.x = dx;\n point.y = dy;\n }\n return point;\n }\n\n onAnimateBind(animate: IAnimate | ISubAnimate) {\n this._emitCustomEvent('animate-bind', animate);\n }\n\n protected tryUpdateAABBBounds(full?: boolean): AABBBounds {\n if (!this.shouldUpdateAABBBounds()) {\n return this._AABBBounds;\n }\n if (!this.valid) {\n this._AABBBounds.clear();\n return this._AABBBounds;\n }\n\n application.graphicService.beforeUpdateAABBBounds(this, this.stage, true, this._AABBBounds);\n const bounds = this.doUpdateAABBBounds(full);\n this.addUpdateLayoutTag();\n application.graphicService.afterUpdateAABBBounds(this, this.stage, this._AABBBounds, this, true);\n return bounds;\n }\n\n protected combindShadowAABBBounds(bounds: IAABBBounds) {\n // 合并shadowRoot的Bounds\n if (this.shadowRoot) {\n const b = this.shadowRoot.AABBBounds.clone();\n bounds.union(b);\n }\n }\n\n protected abstract doUpdateAABBBounds(full?: boolean): AABBBounds;\n\n protected abstract tryUpdateOBBBounds(): OBBBounds;\n\n protected tryUpdateGlobalAABBBounds(): AABBBounds {\n if (!this._globalAABBBounds) {\n this._globalAABBBounds = this.AABBBounds.clone();\n } else {\n this._globalAABBBounds.setValue(\n this._AABBBounds.x1,\n this._AABBBounds.y1,\n this._AABBBounds.x2,\n this._AABBBounds.y2\n );\n }\n // 使用parent的grloalAABBBounds\n // todo: 考虑是否需要性能优化\n if (this.parent) {\n this._globalAABBBounds.transformWithMatrix((this.parent as IGroup).globalTransMatrix);\n }\n return this._globalAABBBounds;\n }\n\n /**\n * 这里都是叶子节点的UpdateGlobalTransMatrix函数,只要走进来就直接计算\n * @param clearTag\n * @returns\n */\n protected tryUpdateGlobalTransMatrix(clearTag: boolean = true): Matrix {\n if (!this._globalTransMatrix) {\n this._globalTransMatrix = this.parent\n ? (this.parent as IGroup).globalTransMatrix.clone()\n : this.transMatrix.clone();\n } else if (this.parent) {\n const m = (this.parent as IGroup).globalTransMatrix;\n this._globalTransMatrix.setValue(m.a, m.b, m.c, m.d, m.e, m.f);\n }\n if (this.shouldUpdateGlobalMatrix()) {\n this.doUpdateGlobalMatrix();\n }\n return this._globalTransMatrix;\n }\n\n shouldUpdateGlobalMatrix(): boolean {\n return true;\n }\n\n protected tryUpdateLocalTransMatrix(clearTag: boolean = true) {\n if (!this._transMatrix) {\n this._transMatrix = new Matrix();\n }\n if (this.shouldUpdateLocalMatrix()) {\n this.doUpdateLocalMatrix();\n clearTag && this.clearUpdateLocalPositionTag();\n }\n return this._transMatrix;\n }\n\n shouldUpdateAABBBounds(): boolean {\n // 如果存在shadowRoot,那么判断shadowRoot是否需要更新\n if (this.shadowRoot) {\n return !!(this._updateTag & UpdateTag.UPDATE_BOUNDS) || this.shadowRoot.shouldUpdateAABBBounds();\n }\n return !!(this._updateTag & UpdateTag.UPDATE_BOUNDS);\n }\n\n // 自身变化导致的AABBBounds的变化\n shouldSelfChangeUpdateAABBBounds(): boolean {\n // 如果存在shadowRoot,那么判断shadowRoot是否需要更新\n if (this.shadowRoot) {\n return !!(this._updateTag & UpdateTag.UPDATE_BOUNDS) || this.shadowRoot.shouldUpdateAABBBounds();\n }\n return !!(this._updateTag & UpdateTag.UPDATE_BOUNDS);\n }\n\n protected shouldUpdateLocalMatrix(): boolean {\n return !!(this._updateTag & UpdateTag.UPDATE_LOCAL_MATRIX);\n }\n\n isValid(): boolean {\n const attribute = this.attribute;\n return Number.isFinite((attribute.x ?? 0) + (attribute.y ?? 0));\n }\n\n protected _validNumber(num?: number) {\n return num == null || Number.isFinite(num);\n }\n\n shouldUpdateShape(): boolean {\n return !!(this._updateTag & UpdateTag.UPDATE_SHAPE);\n }\n clearUpdateShapeTag() {\n this._updateTag &= UpdateTag.CLEAR_SHAPE;\n }\n\n /**\n * 是否包含某个点(点需要是全局坐标系)\n * @param x\n * @param y\n * @param mode\n * @returns\n */\n containsPoint(x: number, y: number, mode: IContainPointMode, picker?: IPickerService): boolean {\n if (!picker) {\n return false;\n }\n if (mode === IContainPointMode.GLOBAL) {\n // 转换x,y更精准\n const point = new Point(x, y);\n if (this.parent) {\n this.parent.globalTransMatrix.transformPoint(point, point);\n }\n x = point.x;\n y = point.y;\n }\n return picker.containsPoint(this, { x, y });\n }\n\n setAttributes(params: Partial, forceUpdateTag: boolean = false, context?: ISetAttributeContext) {\n params =\n (this.onBeforeAttributeUpdate && this.onBeforeAttributeUpdate(params, this.attribute, null, context)) || params;\n\n if (params.background) {\n this.loadImage(params.background, true);\n }\n\n this._setAttributes(params, forceUpdateTag, context);\n }\n\n _setAttributes(params: Partial, forceUpdateTag: boolean = false, context?: ISetAttributeContext) {\n const keys = Object.keys(params);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n\n this.attribute[key] = params[key];\n }\n this.valid = this.isValid();\n // 没有设置shape&bounds的tag\n if (!this.updateShapeAndBoundsTagSetted() && (forceUpdateTag || this.needUpdateTags(keys))) {\n this.addUpdateShapeAndBoundsTag();\n } else {\n this.addUpdateBoundTag();\n }\n this.addUpdatePositionTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n }\n\n setAttribute(key: string, value: any, forceUpdateTag?: boolean, context?: ISetAttributeContext) {\n const params =\n this.onBeforeAttributeUpdate && this.onBeforeAttributeUpdate({ [key]: value }, this.attribute, key, context);\n if (!params) {\n if (!isNil(this.normalAttrs?.[key])) {\n this.normalAttrs[key] = value;\n } else {\n this.attribute[key] = value;\n this.valid = this.isValid();\n if (!this.updateShapeAndBoundsTagSetted() && (forceUpdateTag || this.needUpdateTag(key))) {\n this.addUpdateShapeAndBoundsTag();\n } else {\n this.addUpdateBoundTag();\n }\n this.addUpdatePositionTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n }\n } else {\n this._setAttributes(params, forceUpdateTag, context);\n }\n if (key === 'background') {\n this.loadImage(value, true);\n }\n }\n\n protected needUpdateTags(keys: string[], k: string[] = GRAPHIC_UPDATE_TAG_KEY): boolean {\n for (let i = 0; i < k.length; i++) {\n const attrKey = k[i];\n if (keys.indexOf(attrKey) !== -1) {\n return true;\n }\n }\n return false;\n }\n\n protected needUpdateTag(key: string, k: string[] = GRAPHIC_UPDATE_TAG_KEY): boolean {\n for (let i = 0; i < k.length; i++) {\n const attrKey = k[i];\n if (key === attrKey) {\n return true;\n }\n }\n return false;\n }\n\n initAttributes(params: T) {\n // this.setAttributes(params, true);\n const context = { type: AttributeUpdateType.INIT };\n params =\n (this.onBeforeAttributeUpdate && this.onBeforeAttributeUpdate(params, this.attribute, null, context)) || params;\n this.attribute = params;\n if (params.background) {\n this.loadImage(params.background, true);\n }\n this._updateTag = UpdateTag.INIT;\n this.valid = this.isValid();\n this.onAttributeUpdate(context);\n }\n\n translate(x: number, y: number) {\n if (x === 0 && y === 0) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.TRANSLATE\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ x, y }, this.attribute, tempConstantXYKey, context);\n if (params) {\n x = params.x;\n y = params.y;\n delete params.x;\n delete params.y;\n this._setAttributes(params);\n }\n const attribute = this.attribute;\n const postMatrix = attribute.postMatrix;\n if (!postMatrix) {\n attribute.x = (attribute.x ?? DefaultTransform.x) + x;\n attribute.y = (attribute.y ?? DefaultTransform.y) + y;\n } else {\n application.transformUtil.fromMatrix(postMatrix, postMatrix).translate(x, y);\n }\n\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n translateTo(x: number, y: number) {\n const attribute = this.attribute;\n if (attribute.x === x && attribute.y === y) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.TRANSLATE_TO\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ x, y }, this.attribute, tempConstantXYKey, context);\n if (params) {\n this._setAttributes(params, false, context);\n return this;\n }\n attribute.x = x;\n attribute.y = y;\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n scale(scaleX: number, scaleY: number, scaleCenter?: IPointLike) {\n if (scaleX === 1 && scaleY === 1) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.SCALE\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ scaleX, scaleY, scaleCenter }, this.attribute, tempConstantScaleXYKey, context);\n if (params) {\n scaleX = params.scaleX;\n scaleY = params.scaleY;\n delete params.scaleX;\n delete params.scaleY;\n this._setAttributes(params);\n }\n const attribute = this.attribute;\n if (!scaleCenter) {\n attribute.scaleX = (attribute.scaleX ?? DefaultTransform.scaleX) * scaleX;\n attribute.scaleY = (attribute.scaleY ?? DefaultTransform.scaleY) * scaleY;\n } else {\n let { postMatrix } = this.attribute;\n if (!postMatrix) {\n postMatrix = new Matrix();\n attribute.postMatrix = postMatrix;\n }\n application.transformUtil.fromMatrix(postMatrix, postMatrix).scale(scaleX, scaleY, scaleCenter);\n }\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n scaleTo(scaleX: number, scaleY: number) {\n const attribute = this.attribute;\n if (attribute.scaleX === scaleX && attribute.scaleY === scaleY) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.SCALE_TO\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ scaleX, scaleY }, this.attribute, tempConstantScaleXYKey, context);\n if (params) {\n this._setAttributes(params, false, context);\n return this;\n }\n attribute.scaleX = scaleX;\n attribute.scaleY = scaleY;\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n rotate(angle: number, rotateCenter?: IPointLike) {\n if (angle === 0) {\n return this;\n }\n const context = { type: AttributeUpdateType.ROTATE };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ angle, rotateCenter }, this.attribute, tempConstantAngleKey, context);\n if (params) {\n delete params.angle;\n this._setAttributes(params, false, context);\n // return this;\n }\n const attribute = this.attribute;\n if (!rotateCenter) {\n attribute.angle = (attribute.angle ?? DefaultTransform.angle) + angle;\n } else {\n let { postMatrix } = this.attribute;\n if (!postMatrix) {\n postMatrix = new Matrix();\n attribute.postMatrix = postMatrix;\n }\n application.transformUtil.fromMatrix(postMatrix, postMatrix).rotate(angle, rotateCenter);\n }\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n rotateTo(angle: number) {\n const attribute = this.attribute;\n if (attribute.angle === angle) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.ROTATE_TO\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate(angle, this.attribute, tempConstantAngleKey, context);\n if (params) {\n this._setAttributes(params, false, context);\n return this;\n }\n attribute.angle = angle;\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n skewTo(b: number, c: number) {\n return this;\n }\n\n animate(params?: IGraphicAnimateParams) {\n if (!this.animates) {\n this.animates = new Map();\n }\n const animate = new Animate(params?.id).bind(this);\n if (params) {\n const { onStart, onFrame, onEnd, onRemove } = params;\n onStart != null && animate.onStart(onStart);\n onFrame != null && animate.onFrame(onFrame);\n onEnd != null && animate.onEnd(onEnd);\n onRemove != null && animate.onRemove(onRemove);\n animate.interpolateFunc = params.interpolate;\n }\n this.animates.set(animate.id, animate);\n animate.onRemove(() => {\n this.animates.delete(animate.id);\n });\n\n return animate;\n }\n\n onAttributeUpdate(context?: ISetAttributeContext) {\n if (context && context.skipUpdateCallback) {\n return;\n }\n application.graphicService.onAttributeUpdate(this);\n this._emitCustomEvent('afterAttributeUpdate', context);\n }\n\n // hasListener(event: string) {\n // const prefix = this.prefixed;\n // var evt = prefix ? prefix + event : event;\n // return this._events[evt];\n // }\n\n update(d?: { bounds: boolean; trans: boolean }) {\n if (d) {\n d.bounds && this.tryUpdateAABBBounds(this.attribute.boundsMode === 'imprecise');\n d.trans && this.tryUpdateLocalTransMatrix();\n } else {\n this.tryUpdateAABBBounds(this.attribute.boundsMode === 'imprecise');\n this.tryUpdateLocalTransMatrix();\n }\n }\n\n hasState(stateName?: string) {\n if (!this.currentStates || !this.currentStates.length) {\n return false;\n }\n\n if (!isNil(stateName)) {\n return this.currentStates.includes(stateName);\n }\n\n return true;\n }\n getState(stateName: string) {\n return this.states?.[stateName];\n }\n\n applyStateAttrs(attrs: Partial, stateNames: string[], hasAnimation?: boolean, isClear?: boolean) {\n if (hasAnimation) {\n const keys = Object.keys(attrs);\n const noWorkAAttr = this.getNoWorkAnimateAttr();\n const animateAttrs: Partial = {};\n let noAnimateAttrs: Partial | undefined;\n if (isClear) {\n keys.forEach(key => {\n if (!noWorkAAttr[key]) {\n animateAttrs[key] = attrs[key] === undefined ? this.getDefaultAttribute(key) : attrs[key];\n } else {\n if (!noAnimateAttrs) {\n noAnimateAttrs = {};\n }\n noAnimateAttrs[key] = attrs[key];\n }\n });\n } else {\n keys.forEach(key => {\n if (!noWorkAAttr[key]) {\n animateAttrs[key] = attrs[key];\n } else {\n if (!noAnimateAttrs) {\n noAnimateAttrs = {};\n }\n noAnimateAttrs[key] = attrs[key];\n }\n });\n }\n\n const animate = this.animate();\n (animate as any).stateNames = stateNames;\n animate.to(\n animateAttrs,\n this.stateAnimateConfig?.duration ?? DefaultStateAnimateConfig.duration,\n this.stateAnimateConfig?.easing ?? DefaultStateAnimateConfig.easing\n );\n noAnimateAttrs && this.setAttributes(noAnimateAttrs, false, { type: AttributeUpdateType.STATE });\n } else {\n this.setAttributes(attrs, false, { type: AttributeUpdateType.STATE });\n }\n }\n\n updateNormalAttrs(stateAttrs: Partial) {\n const newNormalAttrs = {};\n if (this.normalAttrs) {\n Object.keys(stateAttrs).forEach(key => {\n if (key in this.normalAttrs) {\n newNormalAttrs[key] = this.normalAttrs[key];\n delete this.normalAttrs[key];\n } else {\n newNormalAttrs[key] = this.getNormalAttribute(key);\n }\n });\n Object.keys(this.normalAttrs).forEach(key => {\n stateAttrs[key] = this.normalAttrs[key];\n });\n } else {\n Object.keys(stateAttrs).forEach(key => {\n newNormalAttrs[key] = this.getNormalAttribute(key);\n });\n }\n\n this.normalAttrs = newNormalAttrs;\n }\n\n private getNormalAttribute(key: string) {\n let value = this.attribute[key];\n\n if (this.animates) {\n this.animates.forEach(animate => {\n if ((animate as any).stateNames) {\n const endProps = animate.getEndProps();\n\n if (has(endProps, key)) {\n value = endProps[key];\n }\n }\n });\n }\n\n return value;\n }\n\n clearStates(hasAnimation?: boolean) {\n if (this.hasState() && this.normalAttrs) {\n this.currentStates = [];\n this.applyStateAttrs(this.normalAttrs, this.currentStates, hasAnimation, true);\n } else {\n this.currentStates = [];\n }\n this.normalAttrs = null;\n }\n\n removeState(stateName: string, hasAnimation?: boolean) {\n const index = this.currentStates ? this.currentStates.indexOf(stateName) : -1;\n\n if (index >= 0) {\n const currentStates = this.currentStates.filter(state => state !== stateName);\n\n this.useStates(currentStates, hasAnimation);\n }\n }\n\n toggleState(stateName: string, hasAnimation?: boolean) {\n if (this.hasState(stateName)) {\n this.removeState(stateName, hasAnimation);\n } else {\n const index = this.currentStates ? this.currentStates.indexOf(stateName) : -1;\n if (index < 0) {\n const nextStates = this.currentStates ? this.currentStates.slice() : [];\n nextStates.push(stateName);\n this.useStates(nextStates, hasAnimation);\n }\n }\n }\n\n addState(stateName: string, keepCurrentStates?: boolean, hasAnimation?: boolean) {\n if (\n this.currentStates &&\n this.currentStates.includes(stateName) &&\n (keepCurrentStates || this.currentStates.length === 1)\n ) {\n return;\n }\n\n const newStates =\n keepCurrentStates && this.currentStates?.length ? this.currentStates.concat([stateName]) : [stateName];\n\n this.useStates(newStates, hasAnimation);\n }\n\n useStates(states: string[], hasAnimation?: boolean) {\n if (!states.length) {\n this.clearStates(hasAnimation);\n return;\n }\n\n const isChange =\n this.currentStates?.length !== states.length ||\n states.some((stateName, index) => this.currentStates[index] !== stateName);\n\n if (!isChange) {\n return;\n }\n\n const stateAttrs = {};\n states.forEach(stateName => {\n const attrs = this.stateProxy ? this.stateProxy(stateName, states) : this.states?.[stateName];\n\n if (attrs) {\n Object.assign(stateAttrs, attrs);\n }\n });\n\n this.updateNormalAttrs(stateAttrs);\n\n this.currentStates = states;\n this.applyStateAttrs(stateAttrs, states, hasAnimation);\n }\n\n addUpdateBoundTag() {\n this._updateTag |= UpdateTag.UPDATE_BOUNDS; // for bounds\n if (this.parent) {\n this.parent.addChildUpdateBoundTag();\n }\n if (this.glyphHost) {\n this.glyphHost.addUpdateBoundTag();\n }\n }\n\n addUpdateShapeTag() {\n this._updateTag |= UpdateTag.UPDATE_SHAPE; // for shape\n }\n\n addUpdateShapeAndBoundsTag() {\n this._updateTag |= UpdateTag.UPDATE_SHAPE_AND_BOUNDS; // for shape&bounds\n if (this.parent) {\n this.parent.addChildUpdateBoundTag();\n }\n if (this.glyphHost) {\n this.glyphHost.addUpdateBoundTag();\n }\n }\n\n protected updateShapeAndBoundsTagSetted(): boolean {\n return (this._updateTag & UpdateTag.UPDATE_SHAPE_AND_BOUNDS) === UpdateTag.UPDATE_SHAPE_AND_BOUNDS;\n }\n\n protected clearUpdateBoundTag() {\n this._updateTag &= UpdateTag.CLEAR_BOUNDS;\n }\n /**\n * 更新位置tag,包括全局tag和局部tag\n */\n addUpdatePositionTag() {\n // 更新shadowRoot的全局位置\n this.shadowRoot && this.shadowRoot.addUpdateGlobalPositionTag();\n this._updateTag |= UpdateTag.UPDATE_GLOBAL_LOCAL_MATRIX;\n }\n /**\n * 更新全局位置tag\n */\n addUpdateGlobalPositionTag() {\n // 更新shadowRoot的全局位置\n this.shadowRoot && this.shadowRoot.addUpdateGlobalPositionTag();\n this._updateTag |= UpdateTag.UPDATE_GLOBAL_MATRIX;\n }\n /**\n * 清除局部位置tag\n */\n protected clearUpdateLocalPositionTag() {\n this._updateTag &= UpdateTag.CLEAR_LOCAL_MATRIX;\n }\n /**\n * 清除全局位置tag\n */\n protected clearUpdateGlobalPositionTag() {\n this._updateTag &= UpdateTag.CLEAR_GLOBAL_MATRIX;\n }\n\n addUpdateLayoutTag() {\n this._updateTag |= UpdateTag.UPDATE_LAYOUT;\n }\n\n protected clearUpdateLayoutTag() {\n this._updateTag &= UpdateTag.CLEAR_LAYOUT;\n }\n\n protected needUpdateLayout(): boolean {\n return !!(this._updateTag & UpdateTag.UPDATE_LAYOUT);\n }\n\n protected getAnchor(anchor: [string | number, string | number], params: { b?: IAABBBounds }) {\n const _anchor: [number, number] = [0, 0];\n const getBounds = () => {\n if (params.b) {\n return params.b;\n }\n const { scaleX, scaleY, angle } = this.attribute;\n // 拷贝一份,避免计算bounds的过程中计算matrix,然后matrix又修改了bounds\n tempBounds.copy(this._AABBBounds);\n // @ts-ignore\n this.setAttributes({ scaleX: 1, scaleY: 1, angle: 0 });\n params.b = this.AABBBounds.clone();\n this._AABBBounds.copy(tempBounds);\n // @ts-ignore\n this.setAttributes({ scaleX, scaleY, angle });\n return params.b;\n };\n if (typeof anchor[0] === 'string') {\n const ratio = parseFloat(anchor[0]) / 100;\n const bounds = getBounds();\n _anchor[0] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[0] = anchor[0];\n }\n if (typeof anchor[1] === 'string') {\n const ratio = parseFloat(anchor[1]) / 100;\n const bounds = getBounds();\n _anchor[1] = bounds.y1 + (bounds.y2 - bounds.y1) * ratio;\n } else {\n _anchor[1] = anchor[1];\n }\n\n return _anchor;\n }\n\n /**\n * 更新局部matrix的具体函数\n */\n protected doUpdateLocalMatrix() {\n const {\n x = DefaultTransform.x,\n y = DefaultTransform.y,\n scaleX = DefaultTransform.scaleX,\n scaleY = DefaultTransform.scaleY,\n angle = DefaultTransform.angle,\n scaleCenter,\n anchor,\n postMatrix\n } = this.attribute;\n let _anchor: [number, number] = [0, 0];\n const params = {};\n if (anchor) {\n _anchor = this.getAnchor(anchor, params);\n }\n if (scaleCenter && (scaleX !== 1 || scaleY !== 1)) {\n const m = this._transMatrix;\n m.reset();\n m.translate(_anchor[0], _anchor[1]);\n m.rotate(angle);\n m.translate(-_anchor[0], -_anchor[1]);\n\n m.translate(x, y);\n // m.translate(scaleCenter[0] * scaleX, scaleCenter[1] * scaleY);\n // 计算bounds\n _anchor = this.getAnchor(scaleCenter, params);\n application.transformUtil.fromMatrix(m, m).scale(scaleX, scaleY, { x: _anchor[0], y: _anchor[1] });\n // m.translate(-scaleCenter[0], -scaleCenter[1]);\n } else {\n normalTransform(this._transMatrix, this._transMatrix.reset(), x, y, scaleX, scaleY, angle, anchor && _anchor);\n }\n const p = this.getOffsetXY(DefaultTransform);\n this._transMatrix.e += p.x;\n this._transMatrix.f += p.y;\n\n if (postMatrix) {\n const m1 = tempMatrix.setValue(\n postMatrix.a,\n postMatrix.b,\n postMatrix.c,\n postMatrix.d,\n postMatrix.e,\n postMatrix.f\n );\n const m2 = this._transMatrix;\n m1.multiply(m2.a, m2.b, m2.c, m2.d, m2.e, m2.f);\n m2.setValue(m1.a, m1.b, m1.c, m1.d, m1.e, m1.f);\n }\n }\n /**\n * 更新全局matrix的具体函数\n */\n protected doUpdateGlobalMatrix() {\n // 基于parent的matrix修改\n if (this.parent) {\n this._globalTransMatrix.multiply(\n this.transMatrix.a,\n this.transMatrix.b,\n this.transMatrix.c,\n this.transMatrix.d,\n this.transMatrix.e,\n this.transMatrix.f\n );\n const { scrollX = 0, scrollY = 0 } = this.parent.attribute;\n this._globalTransMatrix.translate(scrollX, scrollY);\n }\n }\n\n setStage(stage?: IStage, layer?: ILayer) {\n if (this.stage !== stage) {\n this.stage = stage;\n this.layer = layer;\n this.setStageToShadowRoot(stage, layer);\n if (this.animates && this.animates.size) {\n const timeline = stage.getTimeline();\n this.animates.forEach(a => {\n a.setTimeline(timeline);\n });\n }\n this._onSetStage && this._onSetStage(this, stage, layer);\n application.graphicService.onSetStage(this, stage);\n }\n }\n\n setStageToShadowRoot(stage?: IStage, layer?: ILayer) {\n if (this.shadowRoot) {\n this.shadowRoot.setStage(stage, layer);\n }\n }\n\n onAddStep(step: IStep) {\n return;\n }\n onStop(props?: Partial): void {\n if (props) {\n this.setAttributes(props, false, { type: AttributeUpdateType.ANIMATE_END });\n }\n }\n // step时调用\n onStep(subAnimate: ISubAnimate, animate: IAnimate, step: IStep, ratio: number, end: boolean) {\n const nextAttributes = {};\n if (step.customAnimate) {\n step.customAnimate.update(end, ratio, nextAttributes);\n } else {\n const nextProps = step.props;\n const nextParsedProps = step.parsedProps;\n const propKeys = step.propKeys;\n this.stepInterpolate(\n subAnimate,\n animate,\n nextAttributes,\n step,\n ratio,\n end,\n nextProps,\n undefined,\n nextParsedProps,\n propKeys\n );\n }\n this.setAttributes(nextAttributes, false, {\n type: AttributeUpdateType.ANIMATE_UPDATE,\n animationState: {\n ratio,\n end,\n step,\n isFirstFrameOfStep: subAnimate.getLastStep() !== step\n }\n });\n this.stage && this.stage.renderNextFrame();\n }\n\n stepInterpolate(\n subAnimate: ISubAnimate,\n animate: IAnimate,\n nextAttributes: Record,\n step: IStep,\n ratio: number,\n end: boolean,\n nextProps: Record,\n lastProps?: Record,\n nextParsedProps?: any,\n propKeys?: string[]\n ) {\n if (!propKeys) {\n propKeys = Object.keys(nextProps);\n step.propKeys = propKeys;\n }\n if (end) {\n step.propKeys.forEach(key => {\n if (!animate.validAttr(key)) {\n return;\n }\n nextAttributes[key] = nextProps[key];\n });\n } else {\n propKeys.forEach(key => {\n // 如果属性不合法,那直接return\n if (!animate.validAttr(key)) {\n return;\n }\n const nextStepVal = nextProps[key];\n const lastStepVal = (lastProps && lastProps[key]) ?? subAnimate.getLastPropByName(key, step);\n if (nextStepVal == null || lastStepVal == null) {\n // 用户直接调用stepInterpolate可能会走进来,如果传入的参数出现null或者undefined,直接赋值最终的值\n nextAttributes[key] = nextStepVal;\n return;\n }\n let match: boolean;\n match =\n animate.interpolateFunc && animate.interpolateFunc(key, ratio, lastStepVal, nextStepVal, nextAttributes);\n if (match) {\n return;\n }\n match = animate.customInterpolate(key, ratio, lastStepVal, nextStepVal, this, nextAttributes);\n if (match) {\n return;\n }\n if (!this.defaultInterpolate(nextStepVal, lastStepVal, key, nextAttributes, nextParsedProps, ratio)) {\n this._interpolate(key, ratio, lastStepVal, nextStepVal, nextAttributes);\n }\n });\n }\n\n step.parsedProps = nextParsedProps;\n }\n\n defaultInterpolate(\n nextStepVal: any,\n lastStepVal: any,\n key: string,\n nextAttributes: Record,\n nextParsedProps: any,\n ratio: number\n ) {\n if (Number.isFinite(nextStepVal)) {\n nextAttributes[key] = lastStepVal + (nextStepVal - lastStepVal) * ratio;\n return true;\n } else if (key === 'fill') {\n if (!nextParsedProps) {\n nextParsedProps = {};\n }\n // 保存解析的结果到step\n const fillColorArray: [number, number, number, number] = nextParsedProps.fillColorArray;\n const color = interpolateColor(lastStepVal, fillColorArray ?? nextStepVal, ratio, false, (fArray, tArray) => {\n nextParsedProps.fillColorArray = tArray;\n });\n if (color) {\n nextAttributes[key] = color;\n }\n return true;\n } else if (key === 'stroke') {\n if (!nextParsedProps) {\n nextParsedProps = {};\n }\n // 保存解析的结果到step\n const strokeColorArray: [number, number, number, number] = nextParsedProps.strokeColorArray;\n const color = interpolateColor(lastStepVal, strokeColorArray ?? nextStepVal, ratio, false, (fArray, tArray) => {\n nextParsedProps.strokeColorArray = tArray;\n });\n if (color) {\n nextAttributes[key] = color;\n }\n return true;\n } else if (key === 'shadowColor') {\n if (!nextParsedProps) {\n nextParsedProps = {};\n }\n // 保存解析的结果到step\n const shadowColorArray: [number, number, number, number] = nextParsedProps.shadowColorArray;\n const color = interpolateColor(lastStepVal, shadowColorArray ?? nextStepVal, ratio, true, (fArray, tArray) => {\n nextParsedProps.shadowColorArray = tArray;\n });\n if (color) {\n nextAttributes[key] = color;\n }\n\n return true;\n }\n\n return false;\n }\n\n protected _interpolate(key: string, ratio: number, lastStepVal: any, nextStepVal: any, nextAttributes: any) {\n return;\n }\n\n getDefaultAttribute(name: string) {\n return getTheme(this as any)[this.type][name];\n }\n\n // 获取属性\n getComputedAttribute(name: string) {\n return this.attribute[name] ?? this.getDefaultAttribute(name);\n }\n /**\n * 添加onSetStage钩子\n * @param cb 回调函数\n * @param immediate 是否立刻执行,如果在回调添加之前stage就已经绑定,那么如果第二个参数为true就立刻执行回调\n */\n onSetStage(cb: (g: IGraphic, stage: IStage) => void, immediate: boolean = false) {\n this._onSetStage = cb;\n if (immediate && this.stage) {\n cb(this, this.stage);\n }\n }\n\n /******************** shadow graphic *********************/\n attachShadow(shadowRoot?: IShadowRoot) {\n if (shadowRoot) {\n shadowRoot.shadowHost = this;\n }\n\n this.shadowRoot = shadowRoot ?? application.graphicService.creator.shadowRoot(this);\n this.addUpdateBoundTag();\n this.shadowRoot.setStage(this.stage, this.layer);\n return this.shadowRoot;\n }\n\n detachShadow() {\n if (this.shadowRoot) {\n this.addUpdateBoundTag();\n this.shadowRoot = null;\n }\n }\n\n toJson(): IGraphicJson {\n return {\n attribute: this.attribute,\n _uid: this._uid,\n type: this.type,\n name: this.name,\n children: this.children.map((item: IGraphic) => item.toJson())\n };\n }\n\n createPathProxy(path?: string) {\n if (isString(path, true)) {\n this.pathProxy = new CustomPath2D().fromString(path as string);\n } else {\n this.pathProxy = new CustomPath2D();\n }\n\n return this.pathProxy;\n }\n\n loadImage(image: any, background: boolean = false) {\n if (!image || (background && backgroundNotImage(image))) {\n return;\n }\n const url = image;\n if (!this.resources) {\n this.resources = new Map();\n }\n const cache: {\n state: 'loading' | 'success' | 'init' | 'fail';\n data: any;\n } = {\n data: 'init',\n state: null\n };\n this.resources.set(url, cache);\n if (typeof image === 'string') {\n cache.state = 'loading';\n if (image.startsWith(' void) {\n // 更新属性\n // this.resourceState = 'success';\n // this.resource = image;\n if (!this.resources) {\n return;\n }\n const res = this.resources.get(url);\n if (!res) {\n return;\n }\n res.state = 'success';\n res.data = image;\n\n cb && cb();\n\n // 触发重绘\n // 暂时全量,TODO 启动局部重绘\n // this.stage.enableDirtyBounds();\n // this.stage.dirty(this.AABBBounds);\n this.addUpdateBoundTag(); // 添加bounds更新tag重绘才会绘制这个mark\n this.stage && this.stage.renderNextFrame();\n }\n\n imageLoadFail(url: string, cb?: () => void) {\n if (!this.resources) {\n return;\n }\n const res = this.resources.get(url);\n if (!res) {\n return;\n }\n res.state = 'fail';\n\n cb && cb();\n }\n\n private _stopAnimates(animates: Map) {\n if (animates) {\n animates.forEach(animate => {\n animate.stop();\n });\n }\n }\n\n stopAnimates(stopChildren: boolean = false) {\n this._stopAnimates(this.animates);\n\n if (this.shadowRoot) {\n // 停止所有影子节点的动画\n this.shadowRoot.stopAnimates(true);\n }\n if (this.isContainer && stopChildren) {\n this.forEachChildren((c: IGraphic) => {\n c.stopAnimates(stopChildren);\n });\n }\n }\n\n release(): void {\n this.releaseStatus = 'released';\n application.graphicService.onRelease(this);\n }\n\n protected _emitCustomEvent(type: string, context?: any) {\n if (this._events && type in this._events) {\n const changeEvent = new CustomEvent(type, context);\n changeEvent.bubbles = false;\n\n (changeEvent as any).manager = (this.stage as any)?.eventSystem?.manager;\n this.dispatchEvent(changeEvent);\n }\n }\n\n abstract getNoWorkAnimateAttr(): Record;\n\n abstract clone(): Graphic;\n}\n\nGraphic.mixin(EventTarget);\n\nfunction backgroundNotImage(image: any) {\n if (image.fill || image.stroke) {\n return true;\n }\n return false;\n}\n","import type { IBounds, IPointLike } from '@visactor/vutils';\nimport { isBoolean, halfPi, pi, pi2, sin, cos, isArray, pointAt, Point, isString } from '@visactor/vutils';\nimport type { IGraphicAttribute, IStrokeStyle } from '../interface';\n\n// todo: 迁移到@visactor/vutils\n\nexport enum Edge {\n Top = 0b000001,\n Right = 0b000010,\n Bottom = 0b000100,\n Left = 0b001000,\n\n ALL = 0b001111\n}\n\n// 公共的stroke数组,避免大量数组生成\nconst _strokeVec4: [boolean | string, boolean | string, boolean | string, boolean | string] = [\n false,\n false,\n false,\n false\n];\n/**\n * 解析stroke配置\n * @param stroke\n * @returns\n */\nexport const parseStroke = (\n stroke: IStrokeStyle['stroke']\n): {\n isFullStroke: boolean;\n stroke: (boolean | string)[];\n} => {\n let isFullStroke: boolean = true;\n // 首先判断\n if (isBoolean(stroke, true)) {\n for (let i = 0; i < 4; i++) {\n _strokeVec4[i] = stroke as boolean;\n isFullStroke &&= !!(_strokeVec4[i] ?? true);\n }\n isFullStroke = stroke as boolean;\n } else if (Array.isArray(stroke)) {\n // array\n for (let i = 0; i < 4; i++) {\n _strokeVec4[i] = !!stroke[i];\n isFullStroke &&= !!_strokeVec4[i];\n }\n } else {\n _strokeVec4[0] = false;\n _strokeVec4[1] = false;\n _strokeVec4[2] = false;\n _strokeVec4[3] = false;\n }\n\n return {\n isFullStroke,\n stroke: _strokeVec4\n };\n};\n\n// 公共的padding数组,避免大量数组生成\nconst _paddingVec4: [number, number, number, number] = [0, 0, 0, 0];\n/**\n * 解析padding配置\n * @param padding\n * @returns\n */\nexport const parsePadding = (\n padding: IGraphicAttribute['boundsPadding']\n): number | [number, number, number, number] => {\n if (!padding) {\n return 0;\n }\n if (isArray(padding)) {\n if (padding.length === 0) {\n return 0;\n } else if (padding.length === 1) {\n return padding[0];\n } else if (padding.length === 2) {\n _paddingVec4[0] = padding[0];\n _paddingVec4[2] = padding[0];\n _paddingVec4[1] = padding[1];\n _paddingVec4[3] = padding[1];\n return _paddingVec4;\n }\n // 不考虑三个数的情况,三个数是用户传错了\n return padding as [number, number, number, number];\n }\n\n return padding as number;\n};\n\nconst _coords: [IPointLike, IPointLike, IPointLike, IPointLike] = [\n { x: 0, y: 0 },\n { x: 0, y: 0 },\n { x: 0, y: 0 },\n { x: 0, y: 0 }\n];\nconst indexList = [1, 2, 3, 0, 1, 2, 3, 0];\n/**\n * 计算circle一段弧线的bounds\n * @param startAngle 小于2pi\n * @param endAngle\n * @param radius\n * @param bounds\n */\nexport function circleBounds(startAngle: number, endAngle: number, radius: number, bounds: IBounds) {\n // startAngle小于2pi\n // endAngle - startAngle小于2pi\n while (startAngle >= pi2) {\n startAngle -= pi2;\n }\n while (startAngle < 0) {\n startAngle += pi2;\n }\n while (startAngle > endAngle) {\n endAngle += pi2;\n }\n _coords[0].x = radius;\n // _coords[0].y = 0;\n // _coords[1].x = 0;\n _coords[1].y = radius;\n _coords[2].x = -radius;\n // _coords[2].y = -radius;\n // _coords[3].x = 0;\n _coords[3].y = -radius;\n\n // (0,pi/2], (pi/2, pi], (pi, pi/2*3], (pi/2*3, 2pi]\n // 1, 2, 3, 0\n const startIdx = Math.ceil(startAngle / halfPi) % 4;\n const endIdx = Math.ceil(endAngle / halfPi) % 4;\n // console.log(startAngle, endAngle, cos(startAngle), sin(startAngle), cos(endAngle), sin(endAngle));\n bounds.add(cos(startAngle) * radius, sin(startAngle) * radius);\n bounds.add(cos(endAngle) * radius, sin(endAngle) * radius);\n if (startIdx !== endIdx || endAngle - startAngle > pi) {\n let match = false;\n for (let i = 0; i < indexList.length; i++) {\n if (!match && startIdx === indexList[i]) {\n match = true;\n const p = _coords[startIdx];\n bounds.add(p.x, p.y);\n continue;\n } else if (match && endIdx === indexList[i]) {\n break;\n }\n if (match) {\n const p = _coords[indexList[i]];\n bounds.add(p.x, p.y);\n }\n }\n }\n // const delta = Math.floor((endAngle - startAngle) / halfPi);\n // for (let i = 0; i < delta; i++) {\n // const p = _coords[(startIdx + i) % 4];\n // bounds.add(p.x, p.y);\n // }\n\n // // 计算y1, y2\n // const y2 = halfPi >= startAngle && halfPi <= endAngle ? radius : max(sin(startAngle), sin(endAngle)) * radius;\n // const y1 =\n // halfPi + pi >= startAngle && halfPi + pi <= endAngle ? -radius : min(sin(startAngle), sin(endAngle)) * radius;\n // const x2 = pi2 >= startAngle && pi2 <= endAngle ? radius : max(cos(startAngle), cos(endAngle)) * radius;\n // const x1 = pi >= startAngle && pi <= endAngle ? -radius : min(cos(startAngle), cos(endAngle)) * radius;\n\n // // bounds.set(x1, y1, x2, y2);\n // bounds.add(x1, y1);\n // bounds.add(x2, y2);\n}\n\n/**\n * 比较两个点数组是否相同\n * @param pointsA 数组A\n * @param pointsB 数组B\n */\nexport function pointsEqual(pointsA: IPointLike[] | IPointLike, pointsB: IPointLike[] | IPointLike): boolean {\n if (!pointsA || !pointsB) {\n return false;\n } // 需要传入pointsA和pointsB\n if (Array.isArray(pointsA) && Array.isArray(pointsB)) {\n // 如果pointsA和pointsB是数组\n if (pointsA.length !== pointsB.length) {\n return false;\n }\n return pointsA.every((point, index) => pointEqual(point, pointsB[index]));\n }\n if (!Number.isNaN((pointsA as IPointLike).x + (pointsA as IPointLike).y)) {\n // 如果pointA是IPoint(防止参数是undefined)\n return pointEqual(pointsA as IPointLike, pointsB as IPointLike);\n }\n return false;\n}\n\n/**\n * 比较两个点是否相同\n * @param pointA 点A\n * @param pointB 点B\n */\nexport function pointEqual(pointA: IPointLike, pointB: IPointLike): boolean {\n return (\n pointA.x === pointB.x &&\n pointA.y === pointB.y &&\n pointA.x1 === pointB.x1 &&\n pointA.y1 === pointB.y1 &&\n pointA.defined === pointB.defined\n );\n}\n\n/**\n * 两点插值\n * @param pointA 点A\n * @param pointB 点B\n * @param ratio 比例\n */\nexport function pointInterpolation(pointA: IPointLike, pointB: IPointLike, ratio: number): IPointLike {\n const { x, y } = pointAt(pointA.x, pointA.y, pointB.x, pointB.y, ratio);\n const { x: x1, y: y1 } = pointAt(pointA.x1, pointA.y1, pointB.x1, pointB.y1, ratio);\n const point = new Point(x as number, y as number, x1, y1);\n point.defined = pointB.defined;\n return point;\n}\n\n/**\n * 两点插值\n * @param pointA 点A\n * @param pointB 点B\n * @param ratio 比例\n */\nexport function pointInterpolationHighPerformance(\n pointA: IPointLike,\n pointB: IPointLike,\n ratio: number,\n point: IPointLike\n): IPointLike {\n const { x, y } = pointAt(pointA.x, pointA.y, pointB.x, pointB.y, ratio);\n const { x: x1, y: y1 } = pointAt(pointA.x1, pointA.y1, pointB.x1, pointB.y1, ratio);\n // const point = new Point(x as number, y as number, x1, y1);\n point.x = x as number;\n point.y = y as number;\n point.x1 = x1;\n point.y1 = y1;\n point.defined = pointB.defined;\n return point;\n}\n\n/**\n * 点数组插值\n * @param pointsA 点数组A\n * @param pointsB 点数组B\n * @param ratio 比例\n */\nexport function pointsInterpolation(\n pointsA: IPointLike[] | IPointLike,\n pointsB: IPointLike[] | IPointLike,\n ratio: number\n): IPointLike[] {\n if (!pointsA || !pointsB) {\n return [];\n } // 需要传入pointsA和pointsB\n if (!Array.isArray(pointsA)) {\n pointsA = [pointsA];\n }\n if (!Array.isArray(pointsB)) {\n pointsB = [pointsB];\n }\n\n let points: IPointLike[] = [];\n if (pointsA.length > pointsB.length) {\n // 如果变短了,那么后面点的直接clip\n points = pointsB.map(point => {\n const p = new Point(point.x, point.y, point.x1, point.y1);\n p.defined = point.defined;\n return p;\n });\n for (let i = 0; i < pointsB.length; i++) {\n points[i] = pointInterpolation(pointsA[i], pointsB[i], ratio);\n }\n } else {\n // 如果变长了,加上后面的点\n points = pointsB.map(point => {\n const p = new Point(point.x, point.y, point.x1, point.y1);\n p.defined = point.defined;\n return p;\n });\n for (let i = 0; i < pointsA.length; i++) {\n points[i] = pointInterpolation(pointsA[i], pointsB[i], ratio);\n }\n }\n return points;\n}\n\nexport const transformKeys = [\n 'x',\n 'y',\n 'dx',\n 'dy',\n 'scaleX',\n 'scaleY',\n 'angle',\n 'anchor',\n 'postMatrix',\n 'scrollX',\n 'scrollY'\n];\nexport const isTransformKey = (key: string) => {\n return transformKeys.includes(key);\n};\n\nexport function getAttributeFromDefaultAttrList(attr: Record | Record[], key: string) {\n if (isArray(attr)) {\n let val;\n for (let i = 0; i < attr.length && val === undefined; i++) {\n val = attr[i][key];\n }\n return val;\n }\n return attr[key];\n}\n\nexport class RafBasedSTO {\n static TimeOut = 1000 / 60;\n durations: number[];\n timeout: number;\n lastDate: number;\n durationsListThreshold: number;\n\n constructor() {\n this.durations = [];\n this.timeout = RafBasedSTO.TimeOut;\n this.lastDate = 0;\n this.durationsListThreshold = 30;\n }\n\n call(cb: FrameRequestCallback) {\n this.lastDate = Date.now();\n return setTimeout(\n () => {\n this.appendDuration(Date.now() - this.lastDate);\n cb(0);\n },\n this.timeout,\n true\n );\n }\n\n clear(h: number) {\n clearTimeout(h);\n }\n\n appendDuration(d: number) {\n this.durations.push(d);\n if (this.durations.length > this.durationsListThreshold) {\n this.durations.shift();\n }\n // 最多60fps, 最少30fps\n this.timeout = Math.min(\n Math.max(this.durations.reduce((a, b) => a + b, 0) / this.durations.length, 1000 / 60),\n 1000 / 30\n );\n }\n}\n\nexport const rafBasedSto = new RafBasedSTO();\n\nexport const calculateLineHeight = (lineHeight: string | number, fontSize: number): number => {\n if (isString(lineHeight) && lineHeight[lineHeight.length - 1] === '%') {\n const scale = Number.parseFloat(lineHeight.substring(0, lineHeight.length - 1)) / 100;\n return fontSize * scale;\n }\n return lineHeight as number;\n};\n","import { application } from '../application';\nimport { isXML } from '../common/xml/parser';\nimport type { IGraphic, IGroup, ILayer, IRichTextCharacter, IRichTextImageCharacter, IStage } from '../interface';\nimport { isArray, type IAABBBounds } from '@visactor/vutils';\nimport { XMLParser } from '../common/xml';\n\n// 不触发外部的render\nexport function incrementalAddTo(group: IGroup, graphic: IGraphic) {\n group.incrementalAppendChild(graphic);\n // if (group.layer && group.layer.subLayers) {\n // // const subLayer = group.layer.subLayers.get(group._uid);\n // }\n}\n\nexport async function waitForAllSubLayers(stage: IStage) {\n const promiseList: Promise[] = [];\n const layers = stage.getChildren() as ILayer[];\n await new Promise(resolve => {\n application.global.getRequestAnimationFrame()(() => {\n resolve(null);\n });\n });\n layers.forEach(l => {\n if (l.subLayers.size) {\n l.subLayers.forEach(sl => {\n if (sl.drawContribution && sl.drawContribution.hooks && sl.drawContribution.rendering) {\n promiseList.push(\n new Promise(resolve => {\n sl.drawContribution!.hooks!.completeDraw.tap('outWait', () => {\n sl.drawContribution!.hooks!.completeDraw.taps = sl.drawContribution!.hooks!.completeDraw.taps.filter(\n i => {\n return i.name !== 'outWait';\n }\n );\n resolve(null);\n });\n })\n );\n }\n });\n }\n });\n await Promise.all(promiseList);\n}\n\nexport function boundStroke(bounds: IAABBBounds, halfW: number, miter: boolean, pad = 0) {\n bounds.expand(halfW + (pad / 2 + (miter ? miterAdjustment(miter, halfW) : 0)));\n return bounds;\n}\n\nfunction miterAdjustment(miter: boolean, strokeWidth: number) {\n return miter ? strokeWidth : 0;\n}\n\n// function attachShadow(graphic: Graphic) {\n// graphic.shadowRoot = createShadowRoot(graphic);\n// graphic.addUpdateBoundTag();\n// return graphic.shadowRoot;\n// }\n\n// function detachShadow(graphic: Graphic) {\n// if (graphic.shadowRoot) {\n// graphic.addUpdateBoundTag();\n// graphic.shadowRoot = null;\n// }\n// }\n\nlet NUMBER_TYPE: number = 0;\nexport function genNumberType() {\n return NUMBER_TYPE++;\n}\n\nexport enum TextDirection {\n HORIZONTAL = 0,\n VERTICAL = 1\n}\nexport function verticalLayout(text: string) {\n const nextCharacter: { text: string; direction: TextDirection }[] = [];\n let flag = 0; // 0: 竖排,1: 旋转\n let currStr = '';\n for (let i = 0; i < text.length; i++) {\n if (rotateText(text[i])) {\n if (flag) {\n currStr += text[i];\n } else {\n flag = 1;\n currStr = text[i];\n }\n } else {\n if (flag) {\n nextCharacter.push({\n text: currStr,\n direction: TextDirection.VERTICAL\n });\n currStr = '';\n flag = 0;\n }\n nextCharacter.push({\n text: text[i],\n direction: TextDirection.HORIZONTAL\n });\n }\n }\n\n if (currStr) {\n nextCharacter.push({\n text: currStr,\n direction: TextDirection.VERTICAL\n });\n }\n return nextCharacter;\n}\n\n// ——, ……, (, )\nconst rotateCharList = ['…', '(', ')', '—', '【', '】', '「', '」', '《', '》'];\nconst rotateCharMap = new Map();\nrotateCharList.forEach(c => rotateCharMap.set(c, true));\nconst noRotateCharList = [''];\nconst noRotateCharMap = new Map();\nnoRotateCharList.forEach(c => noRotateCharMap.set(c, true));\n\nfunction rotateText(c: string) {\n if (rotateCharMap.has(c)) {\n return true;\n }\n if (noRotateCharMap.has(c)) {\n return false;\n }\n const cp = c.codePointAt(0);\n let rotate = false;\n // 默认ascii码就旋转\n if (cp < 256) {\n rotate = true;\n }\n return rotate;\n}\n\nexport function xul(str: string | string[]): IRichTextCharacter[] {\n const xmlStr = isArray(str) ? str[0] : str;\n const config: IRichTextCharacter[] = [];\n if (!xmlStr) {\n return config;\n }\n const valid = isXML(xmlStr);\n if (valid === true) {\n const parser = new XMLParser();\n const data = parser.parse(xmlStr);\n data.tc &&\n Object.keys(data.tc).forEach(k => {\n if (k === 'text') {\n config.push(parseRTTextXML(data.tc[k]));\n } else {\n config.push(parseRTImageXML(data.tc[k]));\n }\n });\n }\n return config;\n}\n\nfunction parseRTTextXML(str: string): IRichTextCharacter {\n const output: IRichTextCharacter = { text: '' };\n parseCommonXML(str, output);\n const inlineText = str['#text'];\n if (inlineText) {\n output.text = inlineText;\n }\n\n return output;\n}\n\nfunction parseCommonXML(str: string, output: IRichTextCharacter) {\n const attr = (str as any).attribute;\n if (attr) {\n const attrList = attr.split(';');\n attrList.forEach((attrItem: string) => {\n if (!attrItem) {\n return;\n }\n const kv = attrItem.split(':');\n\n if (kv.length === 2) {\n const val = parseFloat(kv[1]);\n output[kv[0].trim()] = isFinite(val) ? val : kv[1].trim();\n } else {\n let val = '';\n for (let i = 1; i < kv.length; i++) {\n if (i > 1) {\n val += ':';\n }\n val += kv[i].trim();\n }\n output[kv[0].trim()] = val;\n }\n });\n }\n}\n\nfunction parseRTImageXML(str: string): IRichTextCharacter {\n const output: IRichTextImageCharacter = { image: '', width: 0, height: 0 };\n parseCommonXML(str, output);\n const image = output.image as string;\n if (image) {\n output.image = (image as any).replaceAll('"', '\"').replaceAll('<', '<').replaceAll('>', '>');\n }\n return output;\n}\n","import { genNumberType } from './tools';\n\nexport const ARC_NUMBER_TYPE = genNumberType();\nexport const ARC3D_NUMBER_TYPE = genNumberType();\nexport const AREA_NUMBER_TYPE = genNumberType();\nexport const CIRCLE_NUMBER_TYPE = genNumberType();\nexport const GLYPH_NUMBER_TYPE = genNumberType();\nexport const GROUP_NUMBER_TYPE = genNumberType();\nexport const IMAGE_NUMBER_TYPE = genNumberType();\nexport const LINE_NUMBER_TYPE = genNumberType();\nexport const PATH_NUMBER_TYPE = genNumberType();\nexport const POLYGON_NUMBER_TYPE = genNumberType();\nexport const PYRAMID3D_NUMBER_TYPE = genNumberType();\nexport const RECT_NUMBER_TYPE = genNumberType();\nexport const RECT3D_NUMBER_TYPE = genNumberType();\nexport const RICHTEXT_NUMBER_TYPE = genNumberType();\nexport const SYMBOL_NUMBER_TYPE = genNumberType();\nexport const TEXT_NUMBER_TYPE = genNumberType();\n\nexport const GraphicService = Symbol.for('GraphicService');\nexport const GraphicCreator = Symbol.for('GraphicCreator');\n\nexport const SVG_ATTRIBUTE_MAP = {\n 'stroke-linecap': 'lineCap',\n 'stroke-linejoin': 'lineJoin',\n 'stroke-dasharray': 'lineDash',\n 'stroke-dashoffset': 'lineDashOffset',\n 'stroke-width': 'lineWidth',\n 'fill-opacity': 'fillOpacity',\n 'stroke-opacity': 'strokeOpacity'\n};\n\nexport const SVG_ATTRIBUTE_MAP_KEYS = Object.keys(SVG_ATTRIBUTE_MAP);\n\nexport const SVG_PARSE_ATTRIBUTE_MAP = {\n 'stroke-linecap': 'lineCap',\n 'stroke-linejoin': 'lineJoin',\n 'stroke-dasharray': 'lineDash',\n 'stroke-dashoffset': 'lineDashOffset',\n 'stroke-width': 'lineWidth',\n 'fill-opacity': 'fillOpacity',\n 'stroke-opacity': 'strokeOpacity',\n stroke: 'stroke',\n fill: 'fill'\n};\n\nexport const SVG_PARSE_ATTRIBUTE_MAP_KEYS = Object.keys(SVG_PARSE_ATTRIBUTE_MAP);\n","import type { AABBBounds, Matrix, OBBBounds } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { Point } from '@visactor/vutils';\nimport { application } from '../application';\nimport type {\n IStage,\n GraphicAttributeMap,\n INode,\n IGraphic,\n ITheme,\n IThemeSpec,\n ILayer,\n GraphicType\n} from '../interface';\nimport type { IGroup, IGroupGraphicAttribute } from '../interface/graphic/group';\nimport { Graphic, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { getTheme, Theme } from './theme';\nimport { parsePadding } from '../common/utils';\nimport { UpdateTag, IContainPointMode } from '../common/enums';\nimport { GROUP_NUMBER_TYPE } from './constants';\nimport { DefaultTransform } from './config';\n\n// Group更新AABBBounds的策略\nexport enum GroupUpdateAABBBoundsMode {\n // Group较少的情况,不会批量设置所有父层的tag,而是每次都查找\n LESS_GROUP = 0,\n // Group较多的情况,每次都会设置tag到最顶层\n MORE_GROUP = 1\n}\n\nexport class Group extends Graphic implements IGroup {\n type: GraphicType = 'group';\n parent: any = null;\n isContainer: boolean = true;\n // 子元素的更新标记\n declare _childUpdateTag: number;\n\n declare theme?: ITheme;\n\n static NOWORK_ANIMATE_ATTR = NOWORK_ANIMATE_ATTR;\n\n constructor(params: IGroupGraphicAttribute) {\n super(params);\n this.numberType = GROUP_NUMBER_TYPE;\n this._childUpdateTag = UpdateTag.UPDATE_BOUNDS;\n // this.theme = new Theme();\n }\n\n setMode(mode: '2d' | '3d') {\n mode === '3d' ? this.set3dMode() : this.set2dMode();\n }\n\n set3dMode() {\n this.in3dMode = true;\n // this.forEachChildren((c: IGraphic) => {\n // c.setMode('3d');\n // });\n }\n set2dMode() {\n this.in3dMode = false;\n // this.forEachChildren((c: IGraphic) => {\n // c.setMode('2d');\n // });\n }\n\n setTheme(t: IThemeSpec) {\n if (!this.theme) {\n this.theme = new Theme();\n }\n return this.theme.setTheme(t, this);\n }\n\n createTheme() {\n if (!this.theme) {\n this.theme = new Theme();\n }\n }\n\n hideAll() {\n this.setAttribute('visible', false);\n this.forEachChildren((item: IGraphic) => {\n if (item.isContainer && (item as any).hideAll) {\n (item as any).hideAll();\n } else {\n item.setAttribute('visible', false);\n }\n });\n }\n\n showAll() {\n this.setAttribute('visible', true);\n this.forEachChildren((item: IGraphic) => {\n if (item.isContainer && (item as any).showAll) {\n (item as any).showAll();\n } else {\n item.setAttribute('visible', true);\n }\n });\n }\n\n /**\n * 是否包含某个点(点需要是全局坐标系)\n * group containsPoint 只需要判断bounds\n * TODO: group的shape判断\n * @param x\n * @param y\n * @param mode\n * @returns\n */\n containsPoint(x: number, y: number, mode: IContainPointMode): boolean {\n if (mode === IContainPointMode.GLOBAL) {\n // 转换x,y更精准\n const point = new Point(x, y);\n if (this.parent) {\n this.parent.globalTransMatrix.transformPoint(point, point);\n }\n return this.AABBBounds.contains(point.x, point.y);\n }\n return this.AABBBounds.contains(x, y);\n }\n\n shouldUpdateAABBBounds(): boolean {\n // 检索自己是否需要更新\n if (super.shouldUpdateAABBBounds()) {\n return true;\n }\n // 检索叶子节点是否有更新(如果children是叶子节点的话)\n if (this._childUpdateTag & UpdateTag.UPDATE_BOUNDS) {\n return true;\n }\n return false;\n // // 检索是否子group需要更新\n // let needUpdate = false;\n // this.forEachChildren((node: IGraphic) => {\n // // 只查找group层级\n // if (node.isContainer && (node as Group).shouldUpdateAABBBounds()) {\n // needUpdate = true;\n // return true;\n // }\n // return false;\n // });\n // return needUpdate;\n }\n\n protected tryUpdateAABBBounds(): AABBBounds {\n if (!this.shouldUpdateAABBBounds()) {\n return this._AABBBounds;\n }\n application.graphicService.beforeUpdateAABBBounds(this, this.stage, true, this._AABBBounds);\n const selfChange = this.shouldSelfChangeUpdateAABBBounds();\n const bounds = this.doUpdateAABBBounds();\n this.addUpdateLayoutTag();\n application.graphicService.afterUpdateAABBBounds(this, this.stage, this._AABBBounds, this, selfChange);\n return bounds;\n }\n\n /**\n * 大部分group不需要更新matrix,这里特殊优化一下\n * 更新局部matrix的具体函数\n */\n protected doUpdateLocalMatrix() {\n const {\n x = DefaultTransform.x,\n y = DefaultTransform.y,\n dx = DefaultTransform.dx,\n dy = DefaultTransform.dy,\n scaleX = DefaultTransform.scaleX,\n scaleY = DefaultTransform.scaleY,\n angle = DefaultTransform.angle,\n postMatrix\n } = this.attribute;\n if (x === 0 && y === 0 && dx === 0 && dy === 0 && scaleX === 1 && scaleY === 1 && angle === 0 && !postMatrix) {\n this._transMatrix.reset();\n return;\n }\n return super.doUpdateLocalMatrix();\n }\n\n protected doUpdateAABBBounds(): AABBBounds {\n const attribute = this.attribute;\n const groupTheme = getTheme(this).group;\n // debugger;\n this._AABBBounds.setValue(Infinity, Infinity, -Infinity, -Infinity);\n const bounds = application.graphicService.updateGroupAABBBounds(\n attribute,\n groupTheme,\n this._AABBBounds,\n this\n ) as AABBBounds;\n\n const { boundsPadding = groupTheme.boundsPadding } = attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray);\n }\n // 更新bounds之后需要设置父节点,否则tag丢失\n this.parent && this.parent.addChildUpdateBoundTag();\n this.clearUpdateBoundTag();\n\n this._emitCustomEvent('AAABBBoundsChange');\n return bounds;\n }\n\n protected clearUpdateBoundTag() {\n this._updateTag &= UpdateTag.CLEAR_BOUNDS;\n this._childUpdateTag &= UpdateTag.CLEAR_BOUNDS;\n }\n\n protected tryUpdateOBBBounds(): OBBBounds {\n throw new Error('暂不支持');\n }\n\n addUpdateBoundTag() {\n this._updateTag |= UpdateTag.UPDATE_BOUNDS; // for bounds\n if (this.parent) {\n this.parent.addChildUpdateBoundTag();\n }\n }\n\n addChildUpdateBoundTag() {\n // 如果已经设置过updateTag,那就不需要设置了\n if (this._childUpdateTag & UpdateTag.UPDATE_BOUNDS) {\n return;\n }\n // 如果没有设置过,那么继续向上设置\n this._childUpdateTag |= UpdateTag.UPDATE_BOUNDS;\n this.parent && this.parent.addChildUpdateBoundTag();\n }\n\n getTheme() {\n return this.theme.getTheme(this);\n }\n\n // getDefaultAttribute(name: string) {\n // return DefaultGroupAttribute[name];\n // }\n\n /* 场景树结构 */\n incrementalAppendChild(node: INode): INode | null {\n const data = super.appendChild(node);\n if (this.stage && data) {\n (data as unknown as this).stage = this.stage;\n (data as unknown as this).layer = this.layer;\n }\n this.addUpdateBoundTag();\n application.graphicService.onAddIncremental(node as unknown as IGraphic, this, this.stage);\n return data;\n }\n incrementalClearChild(): void {\n super.removeAllChild();\n this.addUpdateBoundTag();\n application.graphicService.onClearIncremental(this, this.stage);\n return;\n }\n\n appendChild(node: INode, addStage: boolean = true): INode | null {\n const data = super.appendChild(node);\n if (addStage && this.stage && data) {\n (data as unknown as this).setStage(this.stage, this.layer);\n }\n this.addUpdateBoundTag();\n return data;\n }\n insertBefore(newNode: INode, referenceNode: INode): INode | null {\n const data = super.insertBefore(newNode, referenceNode);\n if (this.stage && data) {\n (data as unknown as this).setStage(this.stage, this.layer);\n }\n this.addUpdateBoundTag();\n return data;\n }\n insertAfter(newNode: INode, referenceNode: INode): INode | null {\n const data = super.insertAfter(newNode, referenceNode);\n if (this.stage && data) {\n (data as unknown as this).setStage(this.stage, this.layer);\n }\n this.addUpdateBoundTag();\n return data;\n }\n insertInto(newNode: INode, idx: number): INode | null {\n const data = super.insertInto(newNode, idx);\n if (this.stage && data) {\n (data as unknown as this).setStage(this.stage, this.layer);\n }\n this.addUpdateBoundTag();\n return data;\n }\n\n removeChild(child: IGraphic): IGraphic {\n const data = super.removeChild(child);\n child.stage = null;\n application.graphicService.onRemove(child);\n this.addUpdateBoundTag();\n return data as IGraphic;\n }\n\n removeAllChild(): void {\n this.forEachChildren((child: IGraphic) => {\n application.graphicService.onRemove(child);\n });\n super.removeAllChild();\n this.addUpdateBoundTag();\n }\n\n setStage(stage?: IStage, layer?: ILayer) {\n if (this.stage !== stage) {\n this.stage = stage;\n this.layer = layer;\n this.setStageToShadowRoot(stage, layer);\n this._onSetStage && this._onSetStage(this, stage, layer);\n application.graphicService.onSetStage(this, stage);\n this.forEachChildren(item => {\n (item as any).setStage(stage, this.layer);\n });\n }\n }\n /**\n * 更新位置tag,包括全局tag和局部tag\n */\n addUpdatePositionTag() {\n super.addUpdatePositionTag();\n // 批量设置底层group的global tag\n this.forEachChildren((g: Group) => {\n if (g.isContainer) {\n g.addUpdateGlobalPositionTag();\n }\n });\n }\n /**\n * 更新全局位置tag\n */\n addUpdateGlobalPositionTag() {\n super.addUpdateGlobalPositionTag();\n // 批量设置底层group的global tag\n this.forEachChildren((g: Group) => {\n if (g.isContainer) {\n g.addUpdateGlobalPositionTag();\n }\n });\n }\n /**\n * group更新全局的transMatrix\n * @param clearTag\n * @returns\n */\n protected tryUpdateGlobalTransMatrix(clearTag: boolean = true): Matrix {\n if (this.shouldUpdateGlobalMatrix()) {\n if (!this._globalTransMatrix) {\n this._globalTransMatrix = this.parent\n ? (this.parent as IGroup).globalTransMatrix.clone()\n : this.transMatrix.clone();\n } else if (this.parent) {\n const m = (this.parent as IGroup).globalTransMatrix;\n this._globalTransMatrix.setValue(m.a, m.b, m.c, m.d, m.e, m.f);\n }\n this.doUpdateGlobalMatrix();\n clearTag && this.clearUpdateGlobalPositionTag();\n }\n return this._globalTransMatrix;\n }\n /**\n * 查找自身更新global的tag,如果存在,就更新\n * @returns\n */\n shouldUpdateGlobalMatrix(): boolean {\n const shouldUpdate = !!(this._updateTag & UpdateTag.UPDATE_GLOBAL_MATRIX);\n return shouldUpdate;\n }\n\n private _getChildByName(name: string, deep?: boolean): T | null {\n return this.find(node => node.name === name, deep);\n }\n\n /**\n * if graphic exist then update attributes, otherwise create a new instance\n * @param graphicName the name of graphic\n * @param attributes the attributes of graphic\n * @param graphicType the type of graphic\n * @returns the graphic instance\n */\n createOrUpdateChild(\n graphicName: string,\n attributes: GraphicAttributeMap[T],\n graphicType: T\n ): INode {\n let graphic = this._getChildByName(graphicName) as IGraphic;\n if (graphic) {\n graphic.setAttributes(attributes);\n } else {\n graphic = application.graphicService.creator[graphicType](attributes as any);\n graphic.name = graphicName;\n this.add(graphic);\n }\n\n return graphic;\n }\n\n clone() {\n return new Group({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record {\n return Group.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createGroup(attributes: IGroupGraphicAttribute): IGroup {\n return new Group(attributes);\n}\n","import type { AABBBounds, IBoundsLike } from '@visactor/vutils';\nimport { application } from '../application';\nimport { container } from '../container';\nimport type {\n IDrawToParams,\n IGraphic,\n IGroup,\n ILayer,\n ILayerDrawParams,\n IStage,\n IGlobal,\n ILayerHandlerContribution,\n IDrawContext,\n ILayerHandlerDrawParams,\n IDrawContribution,\n IWindow,\n ILayerParams,\n LayerMode\n} from '../interface';\nimport { Theme } from '../graphic/theme';\nimport { Group } from '../graphic/group';\n\ntype BlendMode = 'normal';\n\n// layer需要有多个,对于Canvas来说,layer可以绑定一个canvas或一个ImageData\n// 对于WebGL来说,layer对应一个FrameBuffer\n// 对于Native来说,layer保留一个FrameBufferHandler\nexport class Layer extends Group implements ILayer {\n declare parent: any;\n\n declare _dpr: number;\n declare main: boolean;\n declare renderCount: number;\n\n declare afterDrawCbs: ((l: this) => void)[];\n\n declare imageData?: ImageData;\n // 混合模式,用于多图层混合\n declare blendMode: BlendMode;\n\n declare background: string;\n declare opacity: number;\n\n declare layer: this;\n declare subLayers: Map<\n number,\n { layer: ILayer; group?: IGroup; zIndex: number; drawContribution?: IDrawContribution }\n >;\n\n get offscreen(): boolean {\n return this.layerHandler.offscreen;\n }\n\n get layerMode(): LayerMode {\n return this.layerHandler.type;\n }\n\n // stage控制\n // width: number;\n // height: number;\n get width(): number {\n if (!this.stage) {\n return 0;\n }\n return this.stage.width;\n }\n get height(): number {\n if (!this.stage) {\n return 0;\n }\n return this.stage.height;\n }\n get viewWidth(): number {\n if (!this.stage) {\n return 0;\n }\n return this.stage.viewWidth;\n }\n get viewHeight(): number {\n if (!this.stage) {\n return 0;\n }\n return this.stage.viewHeight;\n }\n declare pickable: boolean;\n\n get dirtyBound(): AABBBounds {\n // this.getRootNode();\n throw new Error('暂不支持');\n }\n\n get dpr(): number {\n return this._dpr;\n }\n\n declare stage?: IStage;\n protected declare global: IGlobal;\n protected declare window: IWindow;\n protected declare layerHandler: ILayerHandlerContribution;\n\n constructor(stage: IStage, global: IGlobal, window: IWindow, params: ILayerParams) {\n super({});\n this.stage = stage;\n this.global = global;\n this.window = window;\n this.main = params.main;\n this.layerHandler = params.layerHandler;\n // this.layerHandler = container.get(LayerHandlerContribution);\n this.layerHandler.init(this, window, {\n main: params.main,\n canvasId: params.canvasId,\n width: this.viewWidth,\n height: this.viewHeight,\n zIndex: params.zIndex ?? 0\n });\n this.layer = this;\n this.subLayers = new Map();\n this.theme = new Theme();\n this.background = 'rgba(0, 0, 0, 0)';\n this.afterDrawCbs = [];\n }\n\n combineSubLayer(removeIncrementalKey: boolean = true) {\n const subLayers = Array.from(this.subLayers.values()).sort((a, b) => {\n return a.zIndex - b.zIndex;\n });\n this.layerHandler.merge(\n subLayers.map(l => {\n if (l.layer.subLayers.size) {\n l.layer.combineSubLayer(removeIncrementalKey);\n }\n return l.layer.getNativeHandler();\n })\n );\n if (removeIncrementalKey) {\n subLayers.forEach(l => {\n l.group && (l.group.incremental = 0);\n });\n }\n subLayers.forEach(l => {\n // l.layer.release();\n application.layerService.releaseLayer(this.stage, l.layer);\n });\n this.subLayers.clear();\n }\n\n getNativeHandler(): ILayerHandlerContribution {\n return this.layerHandler;\n }\n\n setStage(stage?: IStage, layer?: ILayer) {\n super.setStage(stage, this);\n }\n\n // 选中图层中的节点\n pick(x: number, y: number): { graphic?: IGraphic; group?: IGroup } | false {\n throw new Error('暂不支持');\n }\n // 绘制依赖的副layer\n protected tryRenderSecondaryLayer(params: ILayerDrawParams, userParams?: Partial) {\n if (this.layerHandler.secondaryHandlers && this.layerHandler.secondaryHandlers.length) {\n this.layerHandler.secondaryHandlers.forEach(h => {\n h.layer.renderCount = this.renderCount;\n h.layer.render(params, userParams);\n });\n }\n }\n // 绘制图层\n render(params: ILayerDrawParams, userParams?: Partial) {\n const stage = this.stage;\n this.layerHandler.render(\n [this],\n {\n renderService: params.renderService,\n x: stage.x,\n y: stage.y,\n width: this.viewWidth,\n height: this.viewHeight,\n stage: this.stage,\n layer: this,\n // TODO: 多图层时不应该再用默认background\n background: params.background ?? this.background,\n updateBounds: params.updateBounds\n },\n userParams\n );\n this.afterDrawCbs.forEach(c => c(this));\n this.tryRenderSecondaryLayer(params, userParams);\n }\n resize(w: number, h: number) {\n this.layerHandler.resize(w, h);\n }\n resizeView(w: number, h: number) {\n this.layerHandler.resizeView(w, h);\n }\n setDpr(dpr: number) {\n this.layerHandler.setDpr(dpr);\n }\n afterDraw(cb: (l: this) => void) {\n this.afterDrawCbs.push(cb);\n }\n\n // 动画相关\n startAnimate(t: number) {\n throw new Error('暂不支持');\n }\n\n setToFrame(t: number) {\n throw new Error('暂不支持');\n }\n\n prepare(dirtyBounds: IBoundsLike, params: ILayerHandlerDrawParams) {\n return;\n }\n\n // 合并到某个target上\n combineTo(target: IWindow, params: IDrawToParams) {\n if (this.offscreen) {\n this.layerHandler.drawTo(target, [this], {\n // TODO: 多图层时不应该再用默认background\n background: params.background ?? this.background,\n renderService: params.renderService,\n x: params.x ?? this.stage.x,\n y: params.y ?? this.stage.y,\n width: this.viewWidth,\n height: this.viewHeight,\n stage: this.stage,\n layer: this,\n ...params\n });\n this.afterDrawCbs.forEach(c => c(this));\n }\n }\n\n release(): void {\n super.release();\n this.layerHandler.release();\n if (this.subLayers) {\n this.subLayers.forEach(l => {\n // l.layer.release();\n application.layerService.releaseLayer(this.stage, l.layer);\n });\n }\n }\n\n drawTo(target: IWindow, params: IDrawToParams) {\n this.layerHandler.drawTo(target, [this], {\n // TODO: 多图层时不应该再用默认background\n background: params.background ?? this.background,\n renderService: params.renderService,\n x: params.x ?? this.stage.x,\n y: params.y ?? this.stage.y,\n width: this.viewWidth,\n height: this.viewHeight,\n stage: this.stage,\n layer: this,\n ...params\n });\n this.afterDrawCbs.forEach(c => c(this));\n }\n}\n","export const TransformUtil = Symbol.for('TransformUtil');\nexport const GraphicUtil = Symbol.for('GraphicUtil');\nexport const LayerService = Symbol.for('LayerService');\nexport const StaticLayerHandlerContribution = Symbol.for('StaticLayerHandlerContribution');\nexport const DynamicLayerHandlerContribution = Symbol.for('DynamicLayerHandlerContribution');\nexport const VirtualLayerHandlerContribution = Symbol.for('VirtualLayerHandlerContribution');\n","import { inject, injectable } from '../common/inversify-lite';\nimport type { ILayer, IStage, IGlobal, ILayerParams, LayerMode, ILayerHandlerContribution } from '../interface';\nimport { Layer } from './layer';\nimport type { ILayerService } from '../interface/core';\nimport { container } from '../container';\nimport {\n DynamicLayerHandlerContribution,\n StaticLayerHandlerContribution,\n VirtualLayerHandlerContribution\n} from './constants';\nimport { application } from '../application';\n\n@injectable()\nexport class DefaultLayerService implements ILayerService {\n declare layerMap: Map;\n declare staticLayerCountInEnv: number;\n declare dynamicLayerCountInEnv: number;\n declare inited: boolean;\n declare global: IGlobal;\n static idprefix: string = 'visactor_layer';\n static prefix_count: number = 0;\n\n static GenerateLayerId() {\n return `${DefaultLayerService.idprefix}_${DefaultLayerService.prefix_count++}`;\n }\n\n constructor() {\n this.layerMap = new Map();\n this.global = application.global;\n }\n\n tryInit() {\n if (!this.inited) {\n this.staticLayerCountInEnv = this.global.getStaticCanvasCount();\n this.dynamicLayerCountInEnv = this.global.getDynamicCanvasCount();\n this.inited = true;\n }\n }\n\n getStageLayer(stage: IStage) {\n return this.layerMap.get(stage);\n }\n\n getRecommendedLayerType(layerMode?: LayerMode): LayerMode {\n if (layerMode) {\n return layerMode;\n }\n // 默认推荐实体canvas,不行就推荐离屏canvas,最次才是virtual\n if (this.staticLayerCountInEnv !== 0) {\n return 'static';\n } else if (this.dynamicLayerCountInEnv !== 0) {\n return 'dynamic';\n }\n return 'virtual';\n }\n\n getLayerHandler(layerMode: LayerMode) {\n let layerHandler: ILayerHandlerContribution;\n if (layerMode === 'static') {\n layerHandler = container.get(StaticLayerHandlerContribution);\n } else if (layerMode === 'dynamic') {\n layerHandler = container.get(DynamicLayerHandlerContribution);\n } else {\n layerHandler = container.get(VirtualLayerHandlerContribution);\n }\n return layerHandler;\n }\n\n createLayer(stage: IStage, options: Partial = { main: false }): ILayer {\n this.tryInit();\n let layerMode = this.getRecommendedLayerType(options.layerMode);\n layerMode = options.main ? 'static' : options.canvasId ? 'static' : layerMode;\n const layerHandler = this.getLayerHandler(layerMode);\n const layer = new Layer(stage, this.global, stage.window, {\n main: false,\n ...options,\n layerMode,\n canvasId: options.canvasId ?? DefaultLayerService.GenerateLayerId(),\n layerHandler\n });\n const stageLayers = this.layerMap.get(stage) || [];\n stageLayers.push(layer);\n this.layerMap.set(stage, stageLayers);\n this.staticLayerCountInEnv--;\n return layer;\n }\n\n prepareStageLayer(stage: IStage) {\n let mainHandler: ILayerHandlerContribution;\n stage.forEachChildren((l: ILayer) => {\n const handler = l.getNativeHandler();\n if (handler.type === 'virtual') {\n handler.mainHandler = mainHandler;\n mainHandler.secondaryHandlers.push(handler);\n } else {\n mainHandler = handler;\n mainHandler.secondaryHandlers = [];\n }\n });\n }\n\n releaseLayer(stage: IStage, layer: ILayer): void {\n layer.release();\n const stageLayers = this.layerMap.get(stage) || [];\n this.layerMap.set(\n stage,\n stageLayers.filter(l => l !== layer)\n );\n }\n\n layerCount(stage: IStage): number {\n return (this.layerMap.get(stage) || []).length;\n }\n restLayerCount(stage: IStage): number {\n // TODO: 设置精确的值\n if (this.global.env === 'browser') {\n return 10;\n }\n return 0;\n }\n}\n","export const IncrementalDrawContribution = Symbol.for('IncrementalDrawContribution');\nexport const ArcRender = Symbol.for('ArcRender');\nexport const Arc3dRender = Symbol.for('Arc3dRender');\nexport const AreaRender = Symbol.for('AreaRender');\nexport const CircleRender = Symbol.for('CircleRender');\nexport const GraphicRender = Symbol.for('GraphicRender');\nexport const GroupRender = Symbol.for('GroupRender');\nexport const LineRender = Symbol.for('LineRender');\nexport const PathRender = Symbol.for('PathRender');\nexport const PolygonRender = Symbol.for('PolygonRender');\nexport const RectRender = Symbol.for('RectRender');\nexport const Rect3DRender = Symbol.for('Rect3DRender');\nexport const SymbolRender = Symbol.for('SymbolRender');\nexport const TextRender = Symbol.for('TextRender');\nexport const RichTextRender = Symbol.for('RichTextRender');\nexport const Pyramid3dRender = Symbol.for('Pyramid3dRender');\nexport const GlyphRender = Symbol.for('GlyphRender');\nexport const ImageRender = Symbol.for('ImageRender');\nexport const RenderSelector = Symbol.for('RenderSelector');\nexport const DrawContribution = Symbol.for('DrawContribution');\n","import { injectable, inject } from '../common/inversify-lite';\nimport type { IAABBBounds, IBounds } from '@visactor/vutils';\nimport type { IGroup, IGraphic, IRenderService, IRenderServiceDrawParams, IDrawContribution } from '../interface';\nimport { DrawContribution } from './contributions/render';\n\nexport const RenderService = Symbol.for('RenderService');\nexport const BeforeRenderConstribution = Symbol.for('BeforeRenderConstribution');\n\n/**\n * 渲染用的service,通常和stage一一绑定,\n * 并不是单例模式,所以会绑定此次渲染的一些数据\n */\n@injectable()\nexport class DefaultRenderService implements IRenderService {\n // 每次render都会变的数据\n dirtyBounds: IBounds;\n renderTreeRoots: IGraphic[]; // 此次render的数组\n renderLists: IGraphic[];\n drawParams: IRenderServiceDrawParams;\n\n constructor(\n @inject(DrawContribution)\n private readonly drawContribution: IDrawContribution\n ) {}\n\n // 渲染前准备工作,计算bounds等逻辑\n prepare(updateBounds: boolean): void {\n // 如果不需要计算Bounds,那么transMatrix也不需要计算\n // TODO 后期可能存在依赖transMatrix的插件,但目前不存在\n if (!updateBounds) {\n return;\n }\n this.renderTreeRoots.forEach(g => {\n this._prepare(g, updateBounds);\n });\n return;\n }\n protected _prepare(g: IGraphic, updateBounds: boolean) {\n g.forEachChildren(g => {\n this._prepare(g as IGraphic, updateBounds);\n });\n g.update({ bounds: updateBounds, trans: true });\n }\n // 获取要渲染的list,可能存在一些不用渲染的内容,以及外描边\n prepareRenderList(): void {\n return;\n }\n // 渲染前流程\n beforeDraw(params: IRenderServiceDrawParams): void {\n return;\n }\n // 具体渲染\n draw(params: IRenderServiceDrawParams): void {\n this.drawContribution.draw(this, { ...this.drawParams });\n }\n // 渲染后流程\n afterDraw(params: IRenderServiceDrawParams): void {\n this.drawContribution.afterDraw && this.drawContribution.afterDraw(this, { ...this.drawParams });\n return;\n }\n // 对外暴露的绘制方法\n render(groups: IGroup[], params: IRenderServiceDrawParams): void {\n this.renderTreeRoots = groups;\n this.drawParams = params;\n const updateBounds = params.updateBounds;\n this.prepare(updateBounds);\n this.prepareRenderList();\n this.beforeDraw(params);\n this.draw(params);\n this.afterDraw(params);\n }\n}\n","import { ContainerModule } from '../common/inversify-lite';\nimport { DefaultRenderService, RenderService } from './render-service';\n\nexport default new ContainerModule(bind => {\n bind(RenderService).to(DefaultRenderService).inSingletonScope();\n});\n","export const GraphicPicker = Symbol.for('GraphicPicker');\nexport const PickerService = Symbol.for('PickerService');\n\nexport const BoundsPicker = Symbol.for('BoundsPicker');\nexport const GlobalPickerService = Symbol.for('GlobalPickerService');\n","import type { IMatrix, IMatrixLike } from '@visactor/vutils';\nimport { Matrix } from '@visactor/vutils';\nimport type { mat4, Releaseable, IAllocate } from '../interface';\n\nexport const MatrixAllocate = Symbol.for('MatrixAllocate');\nexport const Mat4Allocate = Symbol.for('Mat4Allocate');\n\nexport function createMat4(): mat4 {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n}\n\nexport class DefaultMatrixAllocate implements IAllocate, Releaseable {\n protected pools: IMatrix[] = [];\n allocate(a: number, b: number, c: number, d: number, e: number, f: number): IMatrix {\n if (!this.pools.length) {\n return new Matrix(a, b, c, d, e, f);\n }\n const m = this.pools.pop() as any;\n m.a = a;\n m.b = b;\n m.c = c;\n m.d = d;\n m.e = e;\n m.f = f;\n return m;\n }\n allocateByObj(matrix: IMatrixLike): IMatrix {\n if (!this.pools.length) {\n return new Matrix(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f);\n }\n const m = this.pools.pop() as any;\n m.a = matrix.a;\n m.b = matrix.b;\n m.c = matrix.c;\n m.d = matrix.d;\n m.e = matrix.e;\n m.f = matrix.f;\n return m;\n }\n free(d: Matrix) {\n this.pools.push(d);\n }\n get length(): number {\n return this.pools.length;\n }\n release(...params: any): void {\n this.pools = [];\n }\n}\n\nexport class DefaultMat4Allocate implements IAllocate, Releaseable {\n protected pools: mat4[] = [];\n\n static identity(out: mat4) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n }\n\n allocate(): mat4 {\n if (!this.pools.length) {\n return createMat4();\n }\n const m = this.pools.pop() as mat4;\n DefaultMat4Allocate.identity(m);\n return m;\n }\n allocateByObj(d: mat4): mat4 {\n let m: mat4;\n if (!this.pools.length) {\n m = createMat4();\n } else {\n m = this.pools.pop() as mat4;\n }\n for (let i = 0; i < m.length; i++) {\n m[i] = d[i];\n }\n return m;\n }\n free(m: mat4) {\n m && this.pools.push(m);\n }\n get length(): number {\n return this.pools.length;\n }\n release(...params: any): void {\n this.pools = [];\n }\n}\n\nexport const matrixAllocate = new DefaultMatrixAllocate();\nexport const mat4Allocate = new DefaultMat4Allocate();\n","import type { IMatrix, IPointLike } from '@visactor/vutils';\nimport { Point, pi2 } from '@visactor/vutils';\nimport { injectable } from '../common/inversify-lite';\nimport { ARC3D_NUMBER_TYPE } from '../graphic/constants';\nimport type {\n IArc,\n IContext2d,\n IGraphic,\n IGroup,\n IPickItemInterceptorContribution,\n IPickParams,\n IPickerService,\n PickResult\n} from '../interface';\nimport { matrixAllocate } from '../allocator/matrix-allocate';\n\n// 拦截器\nexport const PickItemInterceptor = Symbol.for('PickItemInterceptor');\n\n/**\n * 影子节点拦截器,用于渲染影子节点\n */\n@injectable()\nexport class ShadowRootPickItemInterceptorContribution implements IPickItemInterceptorContribution {\n order: number = 1;\n afterPickItem(\n graphic: IGraphic,\n pickerService: IPickerService,\n point: IPointLike,\n pickParams: IPickParams,\n params?: {\n parentMatrix: IMatrix;\n }\n ): null | PickResult {\n if (graphic.attribute.shadowRootIdx > 0 || !graphic.attribute.shadowRootIdx) {\n return this._pickItem(graphic, pickerService, point, pickParams, params);\n }\n return null;\n }\n\n beforePickItem(\n graphic: IGraphic,\n pickerService: IPickerService,\n point: IPointLike,\n pickParams: IPickParams,\n params?: {\n parentMatrix: IMatrix;\n }\n ): null | PickResult {\n if (graphic.attribute.shadowRootIdx < 0) {\n return this._pickItem(graphic, pickerService, point, pickParams, params);\n }\n return null;\n }\n\n protected _pickItem(\n graphic: IGraphic,\n pickerService: IPickerService,\n point: IPointLike,\n pickParams: IPickParams,\n params?: {\n parentMatrix: IMatrix;\n }\n ): PickResult | null {\n if (!graphic.shadowRoot) {\n return null;\n }\n const { parentMatrix } = params || {};\n if (!parentMatrix) {\n return null;\n }\n\n const context = pickerService.pickContext;\n context.highPerformanceSave();\n\n const g = graphic.shadowRoot;\n const currentGroupMatrix = matrixAllocate.allocateByObj(parentMatrix);\n const newPoint = new Point(\n currentGroupMatrix.a * point.x + currentGroupMatrix.c * point.y + currentGroupMatrix.e,\n currentGroupMatrix.b * point.x + currentGroupMatrix.d * point.y + currentGroupMatrix.f\n );\n // const transMatrix = graphic.transMatrix;\n // currentGroupMatrix.multiply(\n // transMatrix.a,\n // transMatrix.b,\n // transMatrix.c,\n // transMatrix.d,\n // transMatrix.e,\n // transMatrix.f\n // );\n\n // currentGroupMatrix.transformPoint(newPoint, newPoint);\n const result = pickerService.pickGroup(g, newPoint, currentGroupMatrix, pickParams);\n\n context.highPerformanceRestore();\n\n return result;\n }\n}\n\n@injectable()\nexport class InteractivePickItemInterceptorContribution implements IPickItemInterceptorContribution {\n order: number = 1;\n\n beforePickItem(\n graphic: IGraphic,\n pickerService: IPickerService,\n point: IPointLike,\n pickParams: IPickParams,\n params?: {\n parentMatrix: IMatrix;\n }\n ): null | PickResult {\n const originGraphic = graphic.baseGraphic;\n if (originGraphic && originGraphic.parent) {\n const newPoint = new Point(point.x, point.y);\n const context = pickerService.pickContext;\n context.highPerformanceSave();\n const parentMatrix = originGraphic.parent.globalTransMatrix;\n parentMatrix.transformPoint(newPoint, newPoint);\n\n const result = originGraphic.isContainer\n ? pickerService.pickGroup(originGraphic, newPoint.clone(), parentMatrix, pickParams)\n : pickerService.pickItem(originGraphic, newPoint.clone(), parentMatrix, pickParams);\n context.highPerformanceRestore();\n return result;\n }\n return null;\n }\n}\n\n/**\n * 3d拦截器,用于渲染3d视角\n */\n@injectable()\nexport class Canvas3DPickItemInterceptor implements IPickItemInterceptorContribution {\n // canvas?: ICanvas;\n order: number = 1;\n\n beforePickItem(\n graphic: IGraphic,\n pickerService: IPickerService,\n point: IPointLike,\n pickParams: IPickParams,\n params?: {\n parentMatrix: IMatrix;\n }\n ) {\n if (!graphic.in3dMode || pickParams.in3dInterceptor) {\n return null;\n }\n\n const context = pickerService.pickContext;\n const stage = graphic.stage;\n if (!(context && stage)) {\n return null;\n }\n pickParams.in3dInterceptor = true;\n\n // 使用3d模式渲染\n context.save();\n this.initCanvasCtx(context);\n context.camera = stage.camera;\n\n // 设置context的transform到上一个节点\n if (graphic.isContainer) {\n // hack逻辑,如果是饼图的话,需要依次绘制不同的边\n let isPie: boolean = false;\n let is3d: boolean = false;\n graphic.forEachChildren((c: IGraphic) => {\n isPie = c.numberType === ARC3D_NUMBER_TYPE;\n return !isPie;\n });\n graphic.forEachChildren((c: IGraphic) => {\n is3d = !!c.findFace;\n return !is3d;\n });\n\n let result: PickResult;\n if (isPie) {\n const children = graphic.getChildren() as IArc[];\n // 绘制内层\n // drawContext.hack_pieFace = 'inside';\n // drawContribution.renderGroup(graphic as IGroup, drawContext);\n // 绘制底部\n // drawContext.hack_pieFace = 'bottom';\n // drawContribution.renderGroup(graphic as IGroup, drawContext);\n // 绘制外部\n // 排序一下\n const sortedChildren = [...children];\n sortedChildren.sort((a, b) => {\n let angle1 = (a.attribute.startAngle ?? 0 + a.attribute.endAngle ?? 0) / 2;\n let angle2 = (b.attribute.startAngle ?? 0 + b.attribute.endAngle ?? 0) / 2;\n while (angle1 < 0) {\n angle1 += pi2;\n }\n while (angle2 < 0) {\n angle2 += pi2;\n }\n return angle2 - angle1;\n });\n sortedChildren.forEach(c => {\n c._next = null;\n c._prev = null;\n });\n graphic.removeAllChild();\n graphic.update();\n sortedChildren.forEach(c => {\n graphic.appendChild(c);\n });\n pickParams.hack_pieFace = 'outside';\n result = pickerService.pickGroup(graphic as IGroup, point, params.parentMatrix, pickParams);\n if (!result.graphic) {\n // 绘制内部\n pickParams.hack_pieFace = 'inside';\n result = pickerService.pickGroup(graphic as IGroup, point, params.parentMatrix, pickParams);\n }\n if (!result.graphic) {\n // 绘制顶部\n pickParams.hack_pieFace = 'top';\n result = pickerService.pickGroup(graphic as IGroup, point, params.parentMatrix, pickParams);\n }\n graphic.removeAllChild();\n children.forEach(c => {\n c._next = null;\n c._prev = null;\n });\n children.forEach(c => {\n graphic.appendChild(c);\n });\n } else if (is3d) {\n // 排序这些图元\n const children = graphic.getChildren() as IGraphic[];\n const zChildren = children.map(g => {\n const face3d = g.findFace();\n const vertices = face3d.vertices;\n // 计算每个顶点的view\n const viewdVerticesZ = vertices.map(v => {\n return context.view(v[0], v[1], v[2] + g.attribute.z ?? 0)[2];\n });\n const ave_z = viewdVerticesZ.reduce((a, b) => a + b, 0);\n return {\n ave_z,\n g\n };\n });\n zChildren.sort((a, b) => b.ave_z - a.ave_z);\n graphic.removeAllChild();\n zChildren.forEach(i => {\n i.g._next = null;\n i.g._prev = null;\n });\n graphic.update();\n zChildren.forEach(i => {\n graphic.add(i.g);\n });\n\n result = pickerService.pickGroup(graphic as IGroup, point, params.parentMatrix, pickParams);\n\n graphic.removeAllChild();\n children.forEach(g => {\n g._next = null;\n g._prev = null;\n });\n graphic.update();\n children.forEach(g => {\n graphic.add(g);\n });\n } else {\n result = pickerService.pickGroup(graphic as IGroup, point, params.parentMatrix, pickParams);\n }\n\n context.camera = null;\n\n pickParams.in3dInterceptor = false;\n context.restore();\n return result;\n }\n context.restore();\n return null;\n }\n\n initCanvasCtx(context: IContext2d) {\n context.setTransformForCurrent();\n }\n}\n","import { ContainerModule } from '../common/inversify-lite';\nimport { PickerService, GlobalPickerService } from './constants';\nimport { DefaultGlobalPickerService } from './global-picker-service';\n// import { DefaultCanvasPickerService } from './canvas-picker-service';\n// import { DefaultMathPickerService } from './math-picker-service';\nimport {\n Canvas3DPickItemInterceptor,\n InteractivePickItemInterceptorContribution,\n PickItemInterceptor,\n ShadowRootPickItemInterceptorContribution\n} from './pick-interceptor';\nimport { bindContributionProvider } from '../common/contribution-provider';\n\nexport default new ContainerModule((bind, unbind, isBound) => {\n if (!isBound(PickerService)) {\n bind(GlobalPickerService).toSelf();\n bind(PickerService).toService(GlobalPickerService);\n }\n // bind(PickerService).toService(GlobalPickerService);\n\n // bind(DefaultGlobalPickerService).toSelf().inSingletonScope();\n // bind(GlobalPickerService).toService(DefaultGlobalPickerService);\n\n // interceptor\n bind(Canvas3DPickItemInterceptor).toSelf().inSingletonScope();\n bind(PickItemInterceptor).toService(Canvas3DPickItemInterceptor);\n\n // shadow root\n bind(ShadowRootPickItemInterceptorContribution).toSelf().inSingletonScope();\n bind(PickItemInterceptor).toService(ShadowRootPickItemInterceptorContribution);\n\n // interactive\n bind(InteractivePickItemInterceptorContribution).toSelf().inSingletonScope();\n bind(PickItemInterceptor).toService(InteractivePickItemInterceptorContribution);\n bindContributionProvider(bind, PickItemInterceptor);\n});\n","import type { IAABBBounds } from '@visactor/vutils';\nimport type { IGraphicAttribute, IGraphic } from '../../interface';\n\nexport class DefaultOuterBorderBoundsContribution {\n updateBounds(\n attribute: Partial,\n theme: Required,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ): IAABBBounds {\n const { outerBorder, shadowBlur = theme.shadowBlur } = attribute;\n if (outerBorder) {\n const defaultOuterBorder = theme.outerBorder;\n const { distance = defaultOuterBorder.distance, lineWidth = defaultOuterBorder.lineWidth } = outerBorder;\n\n // rect的distance一定是number\n aabbBounds.expand((distance as number) + (shadowBlur + lineWidth) / 2);\n }\n return aabbBounds;\n }\n}\n","import type { IAABBBounds } from '@visactor/vutils';\nimport { boundStroke } from '../tools';\nimport type { IGraphic, ISymbolBoundsContribution, ISymbolGraphicAttribute } from '../../interface';\nimport { DefaultOuterBorderBoundsContribution } from './common-contribution';\n\n// export const SymbolBoundsContribution = Symbol.for('SymbolBoundsContribution');\n\n// @injectable()\nexport class DefaultSymbolOuterBorderBoundsContribution\n extends DefaultOuterBorderBoundsContribution\n implements ISymbolBoundsContribution\n{\n updateBounds(\n attribute: ISymbolGraphicAttribute,\n symbolTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ): IAABBBounds {\n const {\n outerBorder,\n shadowBlur = symbolTheme.shadowBlur,\n strokeBoundsBuffer = symbolTheme.strokeBoundsBuffer\n } = attribute;\n\n if (outerBorder) {\n const defaultOuterBorder = symbolTheme.outerBorder;\n const { distance = defaultOuterBorder.distance, lineWidth = defaultOuterBorder.lineWidth } = outerBorder;\n\n // Symbol的distance一定是number\n boundStroke(aabbBounds, (distance as number) + (shadowBlur + lineWidth) / 2, true, strokeBoundsBuffer);\n }\n return aabbBounds;\n }\n}\n","import { inject, injectable, named } from '../../common/inversify-lite';\nimport type { IAABBBounds, IBounds, IMatrix } from '@visactor/vutils';\nimport { AABBBounds, epsilon, isArray, pi2, transformBoundsWithMatrix } from '@visactor/vutils';\nimport { SyncHook } from '../../tapable';\nimport type {\n mat4,\n vec3,\n IArc,\n IArcGraphicAttribute,\n IArea,\n IAreaGraphicAttribute,\n IGraphicAttribute,\n ICircle,\n ICircleGraphicAttribute,\n IGraphic,\n IGroup,\n IGroupGraphicAttribute,\n ILine,\n ILineGraphicAttribute,\n IPath,\n IPathGraphicAttribute,\n IPolygon,\n IPolygonGraphicAttribute,\n IRectGraphicAttribute,\n IStage,\n ISymbol,\n ISymbolGraphicAttribute,\n IText,\n ITextGraphicAttribute,\n IGlyph,\n IGlyphGraphicAttribute,\n IRichTextGraphicAttribute,\n IRichText,\n IPyramid3dGraphicAttribute,\n IPyramid3d,\n IArc3dGraphicAttribute,\n IArc3d,\n IImageGraphicAttribute,\n ITransform,\n IGraphicService,\n IGraphicCreator,\n ISyncHook,\n IRectBoundsContribution,\n ISymbolBoundsContribution,\n ICircleBoundsContribution,\n IArcBoundsContribution,\n IPathBoundsContribution,\n IContributionProvider\n} from '../../interface';\nimport { textDrawOffsetX } from '../../common/text';\nimport { DefaultSymbolOuterBorderBoundsContribution } from './symbol-contribution';\nimport { boundStroke } from '../tools';\nimport { mat4Allocate } from '../../allocator/matrix-allocate';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../../common/contribution-provider';\nimport { BoundsContext } from '../../common/bounds-context';\nimport { renderCommandList } from '../../common/render-command-list';\nimport { circleBounds } from '../../common/utils';\nimport { GraphicCreator } from '../constants';\nimport { DefaultOuterBorderBoundsContribution } from './common-contribution';\n\n/**\n * 部分代码参考 https://github.com/toji/gl-matrix\n * Copyright (c) 2015-2021, Brandon Jones, Colin MacKenzie IV.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\n// 代码来自gl-matrix https://github.com/toji/gl-matrix\nfunction identity(out: mat4) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/**\n * 代码来自gl-matrix https://github.com/toji/gl-matrix\n * Rotates a matrix by the given angle around the X axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function rotateX(out: mat4, a: mat4, rad: number) {\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n // Perform axis-specific matrix multiplication\n out[4] = a10 * c + a20 * s;\n out[5] = a11 * c + a21 * s;\n out[6] = a12 * c + a22 * s;\n out[7] = a13 * c + a23 * s;\n out[8] = a20 * c - a10 * s;\n out[9] = a21 * c - a11 * s;\n out[10] = a22 * c - a12 * s;\n out[11] = a23 * c - a13 * s;\n return out;\n}\n\n/**\n * 代码来自gl-matrix https://github.com/toji/gl-matrix\n * Rotates a matrix by the given angle around the Y axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function rotateY(out: mat4, a: mat4, rad: number) {\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c - a20 * s;\n out[1] = a01 * c - a21 * s;\n out[2] = a02 * c - a22 * s;\n out[3] = a03 * c - a23 * s;\n out[8] = a00 * s + a20 * c;\n out[9] = a01 * s + a21 * c;\n out[10] = a02 * s + a22 * c;\n out[11] = a03 * s + a23 * c;\n return out;\n}\n\n/**\n * 代码来自gl-matrix https://github.com/toji/gl-matrix\n * Rotates a matrix by the given angle around the Z axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nfunction rotateZ(out: mat4, a: mat4, rad: number) {\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n out[0] = a00 * c + a10 * s;\n out[1] = a01 * c + a11 * s;\n out[2] = a02 * c + a12 * s;\n out[3] = a03 * c + a13 * s;\n out[4] = a10 * c - a00 * s;\n out[5] = a11 * c - a01 * s;\n out[6] = a12 * c - a02 * s;\n out[7] = a13 * c - a03 * s;\n return out;\n}\n\n// 代码来自gl-matrix https://github.com/toji/gl-matrix\nexport function translate(out: mat4, a: mat4, v: vec3) {\n const x = v[0];\n const y = v[1];\n const z = v[2];\n let a00;\n let a01;\n let a02;\n let a03;\n let a10;\n let a11;\n let a12;\n let a13;\n let a20;\n let a21;\n let a22;\n let a23;\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n } else {\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a03;\n out[4] = a10;\n out[5] = a11;\n out[6] = a12;\n out[7] = a13;\n out[8] = a20;\n out[9] = a21;\n out[10] = a22;\n out[11] = a23;\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n return out;\n}\n\nexport function mat3Tomat4(out: mat4, b: IMatrix) {\n out[0] = b.a;\n out[1] = b.b;\n out[2] = 0;\n out[3] = 0;\n out[4] = b.c;\n out[5] = b.d;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = b.e;\n out[13] = b.f;\n out[14] = 0;\n out[15] = 1;\n}\n\n/**\n * 代码来自gl-matrix https://github.com/toji/gl-matrix\n * Multiplies two mat4s\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nexport function multiplyMat4Mat3(out: mat4, a: mat4, b: IMatrix) {\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n const a30 = a[12];\n const a31 = a[13];\n const a32 = a[14];\n const a33 = a[15]; // Cache only the current line of the second matrix\n\n let b0 = b.a;\n let b1 = b.b;\n let b2 = 0;\n let b3 = 0;\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b.c;\n b1 = b.d;\n b2 = 0;\n b3 = 0;\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = 0;\n b1 = 0;\n b2 = 1;\n b3 = 0;\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b.e;\n b1 = b.f;\n b2 = 0;\n b3 = 1;\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n return out;\n}\n\n/**\n * 代码来自gl-matrix https://github.com/toji/gl-matrix\n * Scales the mat4 by the dimensions in the given vec3 not using vectorization\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to scale\n * @param {ReadonlyVec3} v the vec3 to scale the matrix by\n * @returns {mat4} out\n **/\nfunction scale(out: mat4, a: mat4, v: vec3) {\n const x = v[0];\n const y = v[1];\n const z = v[2];\n out[0] = a[0] * x;\n out[1] = a[1] * x;\n out[2] = a[2] * x;\n out[3] = a[3] * x;\n out[4] = a[4] * y;\n out[5] = a[5] * y;\n out[6] = a[6] * y;\n out[7] = a[7] * y;\n out[8] = a[8] * z;\n out[9] = a[9] * z;\n out[10] = a[10] * z;\n out[11] = a[11] * z;\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n\n/**\n * 代码来自gl-matrix https://github.com/toji/gl-matrix\n * Multiplies two mat4s\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\nexport function multiplyMat4Mat4(out: mat4, a: mat4, b: mat4) {\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n const a30 = a[12];\n const a31 = a[13];\n const a32 = a[14];\n const a33 = a[15]; // Cache only the current line of the second matrix\n\n let b0 = b[0];\n let b1 = b[1];\n let b2 = b[2];\n let b3 = b[3];\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[4];\n b1 = b[5];\n b2 = b[6];\n b3 = b[7];\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[8];\n b1 = b[9];\n b2 = b[10];\n b3 = b[11];\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[12];\n b1 = b[13];\n b2 = b[14];\n b3 = b[15];\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n return out;\n}\n\nexport function getExtraModelMatrix(dx: number, dy: number, graphic: IGraphic): mat4 | null {\n const { alpha, beta } = graphic.attribute;\n if (!alpha && !beta) {\n return null;\n }\n const { anchor3d = graphic.attribute.anchor } = graphic.attribute;\n\n const _anchor: [number, number] = [0, 0];\n if (anchor3d) {\n if (typeof anchor3d[0] === 'string') {\n const ratio = parseFloat(anchor3d[0]) / 100;\n const bounds = graphic.AABBBounds;\n _anchor[0] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[0] = anchor3d[0];\n }\n if (typeof anchor3d[1] === 'string') {\n const ratio = parseFloat(anchor3d[1]) / 100;\n const bounds = graphic.AABBBounds;\n _anchor[1] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[1] = anchor3d[1];\n }\n }\n\n if (graphic.type === 'text') {\n const { textAlign } = graphic.attribute as ITextGraphicAttribute;\n // 计算偏移\n _anchor[0] += textDrawOffsetX(textAlign, (graphic as IText).clipedWidth);\n }\n\n // 应用偏移,计算全局的偏移\n _anchor[0] += dx;\n _anchor[1] += dy;\n // matrix.scale(dpr, dpr);\n\n const modelMatrix = mat4Allocate.allocate();\n translate(modelMatrix, modelMatrix, [_anchor[0], _anchor[1], 0]);\n if (beta) {\n rotateX(modelMatrix, modelMatrix, beta);\n }\n if (alpha) {\n rotateY(modelMatrix, modelMatrix, alpha);\n }\n translate(modelMatrix, modelMatrix, [-_anchor[0], -_anchor[1], 0]);\n\n return modelMatrix;\n}\n\n// 计算3d下的模型矩阵\nexport function getModelMatrix(out: mat4, graphic: IGraphic, theme: ITransform) {\n const {\n x = theme.x,\n y = theme.y,\n z = theme.z,\n dx = theme.dx,\n dy = theme.dy,\n dz = theme.dz,\n scaleX = theme.scaleX,\n scaleY = theme.scaleY,\n scaleZ = theme.scaleZ,\n alpha = theme.alpha,\n beta = theme.beta,\n angle = theme.angle,\n anchor3d = graphic.attribute.anchor,\n anchor\n } = graphic.attribute;\n\n const _anchor: [number, number, number] = [0, 0, 0];\n if (anchor3d) {\n if (typeof anchor3d[0] === 'string') {\n const ratio = parseFloat(anchor3d[0]) / 100;\n const bounds = graphic.AABBBounds;\n _anchor[0] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[0] = anchor3d[0];\n }\n if (typeof anchor3d[1] === 'string') {\n const ratio = parseFloat(anchor3d[1]) / 100;\n const bounds = graphic.AABBBounds;\n _anchor[1] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[1] = anchor3d[1];\n }\n _anchor[2] = anchor3d[2] ?? 0;\n }\n\n // if (graphic.type === 'text') {\n // const { textAlign } = graphic.attribute as ITextGraphicAttribute;\n // // 计算偏移\n // _anchor[0] += textDrawOffsetX(textAlign, (graphic as IText).clipedWidth);\n // }\n\n identity(out);\n // 平移\n translate(out, out, [x + dx, y + dy, z + dz]);\n translate(out, out, [_anchor[0], _anchor[1], _anchor[2]]);\n rotateX(out, out, beta);\n rotateY(out, out, alpha);\n // 基于z轴的偏移基于anchor计算\n // rotateZ(out, out, angle);\n translate(out, out, [-_anchor[0], -_anchor[1], _anchor[2]]);\n scale(out, out, [scaleX, scaleY, scaleZ]);\n\n // 计算基于z轴的偏移\n if (angle) {\n const m = mat4Allocate.allocate();\n const _anchor: [number, number] = [0, 0];\n if (anchor) {\n if (typeof anchor3d[0] === 'string') {\n const ratio = parseFloat(anchor3d[0]) / 100;\n const bounds = graphic.AABBBounds;\n _anchor[0] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[0] = anchor3d[0];\n }\n if (typeof anchor3d[1] === 'string') {\n const ratio = parseFloat(anchor3d[1]) / 100;\n const bounds = graphic.AABBBounds;\n _anchor[1] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[1] = anchor3d[1];\n }\n }\n\n translate(m, m, [_anchor[0], _anchor[1], 0]);\n // 基于z轴的偏移基于anchor计算\n rotateZ(m, m, angle);\n translate(m, m, [-_anchor[0], -_anchor[1], 0]);\n\n multiplyMat4Mat4(out, out, m);\n }\n}\n\nexport function shouldUseMat4(graphic: IGraphic) {\n const { alpha, beta } = graphic.attribute;\n return alpha || beta;\n}\n\n// 管理graphic\n@injectable()\nexport class DefaultGraphicService implements IGraphicService {\n declare hooks: {\n onAttributeUpdate: ISyncHook<[IGraphic]>;\n onSetStage: ISyncHook<[IGraphic, IStage]>;\n onRemove: ISyncHook<[IGraphic]>;\n onRelease: ISyncHook<[IGraphic]>;\n onAddIncremental: ISyncHook<[IGraphic, IGroup, IStage]>;\n onClearIncremental: ISyncHook<[IGroup, IStage]>;\n beforeUpdateAABBBounds: ISyncHook<[IGraphic, IStage, boolean, IAABBBounds]>;\n afterUpdateAABBBounds: ISyncHook<[IGraphic, IStage, IAABBBounds, { globalAABBBounds: IAABBBounds }, boolean]>;\n };\n\n protected _rectBoundsContribitions: IRectBoundsContribution[];\n protected _symbolBoundsContribitions: ISymbolBoundsContribution[];\n protected _circleBoundsContribitions: ICircleBoundsContribution[];\n protected _arcBoundsContribitions: IArcBoundsContribution[];\n protected _pathBoundsContribitions: IPathBoundsContribution[];\n // 临时bounds,用作缓存\n protected tempAABBBounds1: AABBBounds;\n protected tempAABBBounds2: AABBBounds;\n constructor(@inject(GraphicCreator) public readonly creator: IGraphicCreator) {\n this.hooks = {\n onAttributeUpdate: new SyncHook<[IGraphic]>(['graphic']),\n onSetStage: new SyncHook<[IGraphic, IStage]>(['graphic', 'stage']),\n onRemove: new SyncHook<[IGraphic]>(['graphic']),\n onRelease: new SyncHook<[IGraphic]>(['graphic']),\n onAddIncremental: new SyncHook<[IGraphic, IGroup, IStage]>(['graphic', 'group', 'stage']),\n onClearIncremental: new SyncHook<[IGroup, IStage]>(['graphic', 'group', 'stage']),\n beforeUpdateAABBBounds: new SyncHook<[IGraphic, IStage, boolean, IAABBBounds]>([\n 'graphic',\n 'stage',\n 'willUpdate',\n 'aabbBounds'\n ]),\n afterUpdateAABBBounds: new SyncHook<[IGraphic, IStage, IAABBBounds, { globalAABBBounds: IAABBBounds }, boolean]>([\n 'graphic',\n 'stage',\n 'aabbBounds',\n 'globalAABBBounds',\n 'selfChange'\n ])\n };\n this.tempAABBBounds1 = new AABBBounds();\n this.tempAABBBounds2 = new AABBBounds();\n this._rectBoundsContribitions = [new DefaultOuterBorderBoundsContribution()];\n this._symbolBoundsContribitions = [new DefaultSymbolOuterBorderBoundsContribution()];\n this._circleBoundsContribitions = [new DefaultOuterBorderBoundsContribution()];\n this._arcBoundsContribitions = [new DefaultOuterBorderBoundsContribution()];\n this._pathBoundsContribitions = [new DefaultOuterBorderBoundsContribution()];\n }\n onAttributeUpdate(graphic: IGraphic) {\n if (this.hooks.onAttributeUpdate.taps.length) {\n this.hooks.onAttributeUpdate.call(graphic);\n }\n }\n onSetStage(graphic: IGraphic, stage: IStage): void {\n if (this.hooks.onSetStage.taps.length) {\n this.hooks.onSetStage.call(graphic, stage);\n }\n }\n onRemove(graphic: IGraphic>): void {\n if (this.hooks.onRemove.taps.length) {\n this.hooks.onRemove.call(graphic);\n }\n }\n onRelease(graphic: IGraphic>): void {\n if (this.hooks.onRelease.taps.length) {\n this.hooks.onRelease.call(graphic);\n }\n }\n onAddIncremental(graphic: IGraphic, group: IGroup, stage: IStage): void {\n if (this.hooks.onAddIncremental.taps.length) {\n this.hooks.onAddIncremental.call(graphic, group, stage);\n }\n }\n onClearIncremental(group: IGroup, stage: IStage): void {\n if (this.hooks.onClearIncremental.taps.length) {\n this.hooks.onClearIncremental.call(group, stage);\n }\n }\n beforeUpdateAABBBounds(graphic: IGraphic, stage: IStage, willUpdate: boolean, bounds: IAABBBounds) {\n if (this.hooks.beforeUpdateAABBBounds.taps.length) {\n this.hooks.beforeUpdateAABBBounds.call(graphic, stage, willUpdate, bounds);\n }\n }\n afterUpdateAABBBounds(\n graphic: IGraphic,\n stage: IStage,\n bounds: IAABBBounds,\n params: { globalAABBBounds: IAABBBounds },\n selfChange: boolean\n ) {\n if (this.hooks.afterUpdateAABBBounds.taps.length) {\n this.hooks.afterUpdateAABBBounds.call(graphic, stage, bounds, params, selfChange);\n }\n }\n\n updatePathProxyAABBBounds(aabbBounds: IAABBBounds, graphic?: IGraphic): boolean {\n const path = typeof graphic.pathProxy === 'function' ? graphic.pathProxy(graphic.attribute) : graphic.pathProxy;\n if (!path) {\n return false;\n }\n const boundsContext = new BoundsContext(aabbBounds);\n renderCommandList(path.commandList, boundsContext, 0, 0);\n return true;\n }\n\n updateRectAABBBounds(\n attribute: IRectGraphicAttribute,\n rectTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ) {\n if (!this._validCheck(attribute, rectTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n let { width, height } = attribute;\n const { x1, y1, x, y } = attribute;\n width = width ?? x1 - x;\n height = height ?? y1 - y;\n aabbBounds.set(0, 0, width || 0, height || 0);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n this._rectBoundsContribitions.length &&\n this._rectBoundsContribitions.forEach(c => {\n c.updateBounds(attribute, rectTheme, tb1, graphic);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n });\n\n this.transformAABBBounds(attribute, aabbBounds, rectTheme, false, graphic);\n return aabbBounds;\n }\n\n updateGroupAABBBounds(\n attribute: IGroupGraphicAttribute,\n groupTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: IGroup\n ) {\n const { width, height, path, clip = groupTheme.clip } = attribute;\n // 添加自身的fill或者clip\n if (path && path.length) {\n path.forEach(g => {\n aabbBounds.union(g.AABBBounds);\n });\n } else if (width != null && height != null) {\n aabbBounds.set(0, 0, width, height);\n }\n if (!clip) {\n // 添加子节点\n graphic.forEachChildren((node: IGraphic) => {\n aabbBounds.union(node.AABBBounds);\n });\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n this.transformAABBBounds(attribute, aabbBounds, groupTheme, false, graphic);\n return aabbBounds;\n }\n\n updateGlyphAABBBounds(\n attribute: IGlyphGraphicAttribute,\n theme: Required,\n aabbBounds: IAABBBounds,\n graphic?: IGlyph\n ) {\n if (!this._validCheck(attribute, theme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n // 添加子节点\n graphic.getSubGraphic().forEach((node: IGraphic) => {\n aabbBounds.union(node.AABBBounds);\n });\n\n // glyph不需要计算AABBBounds\n // this.transformAABBBounds(attribute, aabbBounds, theme, graphic);\n return aabbBounds;\n }\n\n updateRichTextAABBBounds(\n attribute: IRichTextGraphicAttribute,\n richtextTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: IRichText\n ) {\n if (!this._validCheck(attribute, richtextTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!graphic) {\n return aabbBounds;\n }\n\n const {\n width = richtextTheme.width,\n height = richtextTheme.height,\n maxWidth = richtextTheme.maxWidth,\n maxHeight = richtextTheme.maxHeight,\n textAlign = richtextTheme.textAlign,\n textBaseline = richtextTheme.textBaseline\n } = attribute;\n\n if (width > 0 && height > 0) {\n // 外部设置宽高\n aabbBounds.set(0, 0, width, height);\n } else {\n // 获取内容宽高\n const frameCache = graphic.getFrameCache();\n const { width: actualWidth, height: actualHeight } = frameCache.getActualSize();\n let contentWidth = width || actualWidth || 0;\n let contentHeight = height || actualHeight || 0;\n\n contentHeight = typeof maxHeight === 'number' && contentHeight > maxHeight ? maxHeight : contentHeight || 0;\n contentWidth = typeof maxWidth === 'number' && contentWidth > maxWidth ? maxWidth : contentWidth || 0;\n\n aabbBounds.set(0, 0, contentWidth, contentHeight);\n }\n\n // 调整对齐方式\n let deltaY = 0;\n switch (textBaseline) {\n case 'top':\n deltaY = 0;\n break;\n case 'middle':\n deltaY = -aabbBounds.height() / 2;\n break;\n case 'bottom':\n deltaY = -aabbBounds.height();\n break;\n default:\n break;\n }\n let deltaX = 0;\n switch (textAlign) {\n case 'left':\n deltaX = 0;\n break;\n case 'center':\n deltaX = -aabbBounds.width() / 2;\n break;\n case 'right':\n deltaX = -aabbBounds.width();\n break;\n default:\n break;\n }\n aabbBounds.translate(deltaX, deltaY);\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n\n this.transformAABBBounds(attribute, aabbBounds, richtextTheme, false, graphic);\n return aabbBounds;\n }\n\n updateTextAABBBounds(\n attribute: ITextGraphicAttribute,\n textTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: IText\n ) {\n if (!this._validCheck(attribute, textTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!graphic) {\n return aabbBounds;\n }\n const { text = textTheme.text } = graphic.attribute;\n if (Array.isArray(text)) {\n graphic.updateMultilineAABBBounds(text as (number | string)[]);\n } else {\n graphic.updateSingallineAABBBounds(text as number | string);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n\n const {\n scaleX = textTheme.scaleX,\n scaleY = textTheme.scaleY,\n shadowBlur = textTheme.shadowBlur,\n strokeBoundsBuffer = textTheme.strokeBoundsBuffer\n } = attribute;\n if (shadowBlur) {\n const shadowBlurHalfWidth = shadowBlur / Math.abs(scaleX + scaleY);\n boundStroke(tb1, shadowBlurHalfWidth, true, strokeBoundsBuffer);\n aabbBounds.union(tb1);\n }\n // 合并shadowRoot的bounds\n this.combindShadowAABBBounds(aabbBounds, graphic);\n\n transformBoundsWithMatrix(aabbBounds, aabbBounds, graphic.transMatrix);\n return aabbBounds;\n }\n\n updatePathAABBBounds(\n attribute: IPathGraphicAttribute,\n pathTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: IPath\n ) {\n if (!this._validCheck(attribute, pathTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n this.updatePathAABBBoundsImprecise(attribute, pathTheme, aabbBounds, graphic);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n this._pathBoundsContribitions.length &&\n this._pathBoundsContribitions.forEach(c => {\n c.updateBounds(attribute, pathTheme, tb1, graphic);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n });\n const { lineJoin = pathTheme.lineJoin } = attribute;\n this.transformAABBBounds(attribute, aabbBounds, pathTheme, lineJoin === 'miter', graphic);\n return aabbBounds;\n }\n\n protected updatePathAABBBoundsImprecise(\n attribute: IPathGraphicAttribute,\n pathTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: IPath\n ): IAABBBounds {\n if (!graphic) {\n return aabbBounds;\n }\n const pathShape = graphic.getParsedPathShape();\n aabbBounds.union(pathShape.getBounds());\n\n return aabbBounds;\n }\n\n updatePyramid3dAABBBounds(\n attribute: IPyramid3dGraphicAttribute,\n polygonTheme: Required,\n aabbBounds: IBounds,\n graphic?: IPyramid3d\n ) {\n if (!graphic) {\n return aabbBounds;\n }\n\n const stage = graphic.stage;\n if (!stage || !stage.camera) {\n return aabbBounds;\n }\n\n const faces = graphic.findFace();\n // const outP = [0, 0, 0];\n faces.vertices.forEach(v => {\n const x = v[0];\n const y = v[1];\n aabbBounds.add(x, y);\n });\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n\n this.transformAABBBounds(attribute, aabbBounds, polygonTheme, false, graphic);\n return aabbBounds;\n }\n\n updateArc3dAABBBounds(\n attribute: IArc3dGraphicAttribute,\n arcTheme: Required,\n aabbBounds: IBounds,\n graphic?: IArc3d\n ) {\n if (!graphic) {\n return aabbBounds;\n }\n\n const stage = graphic.stage;\n if (!stage || !stage.camera) {\n return aabbBounds;\n }\n\n // 当做一个立方体计算\n const { outerRadius = arcTheme.outerRadius, height = 0 } = attribute;\n const r = outerRadius + height;\n aabbBounds.setValue(-r, -r, r, r);\n // const matrix = getExtraModelMatrix(graphic.globalTransMatrix, 1, graphic);\n // const { outerRadius=arcTheme.outerRadius, height=0 } = attribute;\n // const points = [\n // {x: -outerRadius, y: -outerRadius, z: 0 },\n // {x: outerRadius, y: -outerRadius, z: 0 },\n // {x: outerRadius, y: outerRadius, z: 0 },\n // {x: -outerRadius, y: outerRadius, z: 0 },\n // {x: -outerRadius, y: -outerRadius, z: height },\n // {x: outerRadius, y: -outerRadius, z: height },\n // {x: outerRadius, y: outerRadius, z: height },\n // {x: -outerRadius, y: outerRadius, z: height },\n // ]\n // const outP: vec3 = [0, 0, 0];\n // points.forEach(item => {\n // let x = item.x;\n // let y = item.y;\n // if (stage.camera) {\n // transformMat4(outP, [item.x, item.y, item.z], matrix);\n // const data = stage.camera.vp(outP[0], outP[1], outP[2]);\n // x = data.x;\n // y = data.y;\n // }\n // aabbBounds.add(x, y);\n // });\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n\n this.transformAABBBounds(attribute, aabbBounds, arcTheme, false, graphic);\n return aabbBounds;\n }\n\n updatePolygonAABBBounds(\n attribute: IPolygonGraphicAttribute,\n polygonTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: IPolygon\n ) {\n if (!this._validCheck(attribute, polygonTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n this.updatePolygonAABBBoundsImprecise(attribute, polygonTheme, aabbBounds, graphic);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n // if (!this._pathBoundsContribitions) {\n // this._pathBoundsContribitions = this.pathBoundsContribitions.getContributions() || [];\n // }\n // this._pathBoundsContribitions.length &&\n // this._pathBoundsContribitions.forEach(c => {\n // c.updateBounds(attribute, polygonTheme, tb1, graphic);\n // aabbBounds.union(tb1);\n // tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n // });\n\n const { lineJoin = polygonTheme.lineJoin } = attribute;\n this.transformAABBBounds(attribute, aabbBounds, polygonTheme, lineJoin === 'miter', graphic);\n return aabbBounds;\n }\n\n protected updatePolygonAABBBoundsImprecise(\n attribute: IPolygonGraphicAttribute,\n polygonTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: IPolygon\n ): IAABBBounds {\n const { points = polygonTheme.points } = attribute;\n points.forEach(p => {\n aabbBounds.add(p.x, p.y);\n });\n\n return aabbBounds;\n }\n\n updateLineAABBBounds(\n attribute: ILineGraphicAttribute,\n lineTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: ILine\n ) {\n if (!this._validCheck(attribute, lineTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n attribute.segments\n ? this.updateLineAABBBoundsBySegments(attribute, lineTheme, aabbBounds, graphic)\n : this.updateLineAABBBoundsByPoints(attribute, lineTheme, aabbBounds, graphic);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n // if (!this._rectBoundsContribitions) {\n // this._rectBoundsContribitions = this.rectBoundsContribitions.getContributions() || [];\n // }\n // this._rectBoundsContribitions.length &&\n // this._rectBoundsContribitions.forEach(c => {\n // c.updateBounds(attribute, areaTheme, tb1, graphic);\n // aabbBounds.union(tb1);\n // tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n // });\n\n const { lineJoin = lineTheme.lineJoin } = attribute;\n this.transformAABBBounds(attribute, aabbBounds, lineTheme, lineJoin === 'miter', graphic);\n return aabbBounds;\n }\n\n protected updateLineAABBBoundsByPoints(\n attribute: ILineGraphicAttribute,\n lineTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: ILine\n ): IAABBBounds {\n const { points = lineTheme.points } = attribute;\n const b = aabbBounds;\n points.forEach(p => {\n b.add(p.x, p.y);\n });\n return b;\n }\n protected updateLineAABBBoundsBySegments(\n attribute: ILineGraphicAttribute,\n lineTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: ILine\n ): IAABBBounds {\n const { segments = lineTheme.segments } = attribute;\n const b = aabbBounds;\n segments.forEach(s => {\n s.points.forEach(p => {\n b.add(p.x, p.y);\n });\n });\n return b;\n }\n\n updateAreaAABBBounds(\n attribute: IAreaGraphicAttribute,\n areaTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: IArea\n ) {\n if (!this._validCheck(attribute, areaTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n attribute.segments\n ? this.updateAreaAABBBoundsBySegments(attribute, areaTheme, aabbBounds, graphic)\n : this.updateAreaAABBBoundsByPoints(attribute, areaTheme, aabbBounds, graphic);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n // if (!this._rectBoundsContribitions) {\n // this._rectBoundsContribitions = this.rectBoundsContribitions.getContributions() || [];\n // }\n // this._rectBoundsContribitions.length &&\n // this._rectBoundsContribitions.forEach(c => {\n // c.updateBounds(attribute, areaTheme, tb1, graphic);\n // aabbBounds.union(tb1);\n // tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n // });\n\n const { lineJoin = areaTheme.lineJoin } = attribute;\n this.transformAABBBounds(attribute, aabbBounds, areaTheme, lineJoin === 'miter', graphic);\n return aabbBounds;\n }\n\n protected updateAreaAABBBoundsByPoints(\n attribute: IAreaGraphicAttribute,\n areaTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: IArea\n ): IAABBBounds {\n const { points = areaTheme.points } = attribute;\n const b = aabbBounds;\n points.forEach(p => {\n b.add(p.x, p.y);\n b.add(p.x1 ?? p.x, p.y1 ?? p.y); //面积图特殊性:由三个值构成,横向面积图,x1会省略;纵向面积图,y1会省略\n });\n return b;\n }\n protected updateAreaAABBBoundsBySegments(\n attribute: IAreaGraphicAttribute,\n areaTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: IArea\n ): IAABBBounds {\n const { segments = areaTheme.segments } = attribute;\n const b = aabbBounds;\n segments.forEach(s => {\n s.points.forEach(p => {\n b.add(p.x, p.y);\n b.add(p.x1 ?? p.x, p.y1 ?? p.y); //面积图特殊性:由三个值构成,横向面积图,x1会省略;纵向面积图,y1会省略\n });\n });\n return b;\n }\n\n updateCircleAABBBounds(\n attribute: ICircleGraphicAttribute,\n circleTheme: Required,\n aabbBounds: IAABBBounds,\n full?: boolean,\n graphic?: ICircle\n ) {\n if (!this._validCheck(attribute, circleTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n full\n ? this.updateCircleAABBBoundsImprecise(attribute, circleTheme, aabbBounds, graphic)\n : this.updateCircleAABBBoundsAccurate(attribute, circleTheme, aabbBounds, graphic);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n this._circleBoundsContribitions.length &&\n this._circleBoundsContribitions.forEach(c => {\n c.updateBounds(attribute, circleTheme, tb1, graphic);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n });\n\n this.transformAABBBounds(attribute, aabbBounds, circleTheme, false, graphic);\n\n return aabbBounds;\n }\n\n protected updateCircleAABBBoundsImprecise(\n attribute: ICircleGraphicAttribute,\n circleTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ): IAABBBounds {\n const { radius = circleTheme.radius } = attribute;\n aabbBounds.set(-radius, -radius, radius, radius);\n\n return aabbBounds;\n }\n protected updateCircleAABBBoundsAccurate(\n attribute: ICircleGraphicAttribute,\n circleTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ): IAABBBounds {\n const {\n startAngle = circleTheme.startAngle,\n endAngle = circleTheme.endAngle,\n radius = circleTheme.radius\n } = attribute;\n\n if (endAngle - startAngle > pi2 - epsilon) {\n aabbBounds.set(-radius, -radius, radius, radius);\n } else {\n circleBounds(startAngle, endAngle, radius, aabbBounds);\n }\n\n return aabbBounds;\n }\n\n updateArcAABBBounds(\n attribute: IArcGraphicAttribute,\n arcTheme: Required,\n aabbBounds: IAABBBounds,\n full?: boolean,\n graphic?: IArc\n ) {\n if (!this._validCheck(attribute, arcTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n full\n ? this.updateArcAABBBoundsImprecise(attribute, arcTheme, aabbBounds, graphic)\n : this.updateArcAABBBoundsAccurate(attribute, arcTheme, aabbBounds, graphic);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n this._arcBoundsContribitions.length &&\n this._arcBoundsContribitions.forEach(c => {\n c.updateBounds(attribute, arcTheme, tb1, graphic);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n });\n\n const { lineJoin = arcTheme.lineJoin } = attribute;\n this.transformAABBBounds(attribute, aabbBounds, arcTheme, lineJoin === 'miter', graphic);\n\n return aabbBounds;\n }\n\n protected updateArcAABBBoundsImprecise(\n attribute: IArcGraphicAttribute,\n arcTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ): IAABBBounds {\n const { innerRadius = arcTheme.innerRadius } = attribute;\n let { outerRadius = arcTheme.outerRadius } = attribute;\n if (outerRadius < innerRadius) {\n outerRadius = innerRadius;\n }\n\n aabbBounds.set(-outerRadius, -outerRadius, outerRadius, outerRadius);\n\n return aabbBounds;\n }\n protected updateArcAABBBoundsAccurate(\n attribute: IArcGraphicAttribute,\n arcTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ): IAABBBounds {\n let { outerRadius = arcTheme.outerRadius, innerRadius = arcTheme.innerRadius } = attribute;\n if (outerRadius < innerRadius) {\n // 不用解构,避免性能问题\n const temp = outerRadius;\n outerRadius = innerRadius;\n innerRadius = temp;\n }\n let { endAngle = arcTheme.endAngle, startAngle = arcTheme.startAngle } = attribute;\n\n if (startAngle > endAngle) {\n const temp = startAngle;\n startAngle = endAngle;\n endAngle = temp;\n }\n\n if (outerRadius <= epsilon) {\n aabbBounds.set(0, 0, 0, 0);\n } else if (Math.abs(endAngle - startAngle) > pi2 - epsilon) {\n aabbBounds.set(-outerRadius, -outerRadius, outerRadius, outerRadius);\n } else {\n // 直接内外两个radius叠加即可,不需要更精确\n circleBounds(startAngle, endAngle, outerRadius, aabbBounds);\n circleBounds(startAngle, endAngle, innerRadius, aabbBounds);\n }\n\n return aabbBounds;\n }\n\n updateSymbolAABBBounds(\n attribute: ISymbolGraphicAttribute,\n symbolTheme: Required,\n aabbBounds: IAABBBounds,\n full?: boolean,\n graphic?: ISymbol\n ) {\n if (!this._validCheck(attribute, symbolTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n full\n ? this.updateSymbolAABBBoundsImprecise(attribute, symbolTheme, aabbBounds, graphic)\n : this.updateSymbolAABBBoundsAccurate(attribute, symbolTheme, aabbBounds, graphic);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n this._symbolBoundsContribitions.length &&\n this._symbolBoundsContribitions.forEach(c => {\n c.updateBounds(attribute, symbolTheme, tb1, graphic);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n });\n\n const { lineJoin = symbolTheme.lineJoin } = attribute;\n this.transformAABBBounds(attribute, aabbBounds, symbolTheme, lineJoin === 'miter', graphic);\n return aabbBounds;\n }\n\n protected updateSymbolAABBBoundsImprecise(\n attribute: ISymbolGraphicAttribute,\n symbolTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ): IAABBBounds {\n // 当做正方形计算\n const { size = symbolTheme.size } = attribute;\n\n if (isArray(size)) {\n aabbBounds.set(-size[0] / 2, -size[1] / 2, size[0] / 2, size[1] / 2);\n } else {\n const halfWH = size / 2;\n\n aabbBounds.set(-halfWH, -halfWH, halfWH, halfWH);\n }\n\n return aabbBounds;\n }\n\n protected updateSymbolAABBBoundsAccurate(\n attribute: ISymbolGraphicAttribute,\n symbolTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: ISymbol\n ): IAABBBounds {\n if (!graphic) {\n return aabbBounds;\n }\n const { size = symbolTheme.size } = attribute;\n\n const symbolClass = graphic.getParsedPath();\n symbolClass.bounds(size, aabbBounds);\n\n return aabbBounds;\n }\n\n updateImageAABBBounds(\n attribute: IImageGraphicAttribute,\n imageTheme: Required,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ) {\n if (!this._validCheck(attribute, imageTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n const { width = imageTheme.width, height = imageTheme.height } = attribute;\n aabbBounds.set(0, 0, width, height);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n\n this.transformAABBBounds(attribute, aabbBounds, imageTheme, false, graphic);\n return aabbBounds;\n }\n\n combindShadowAABBBounds(bounds: IAABBBounds, graphic?: IGraphic) {\n // 合并shadowRoot的Bounds\n if (graphic && graphic.shadowRoot) {\n const b = graphic.shadowRoot.AABBBounds;\n bounds.union(b);\n }\n }\n\n transformAABBBounds(\n attribute: Partial,\n aabbBounds: IAABBBounds,\n theme: Required,\n miter: boolean,\n graphic?: IGraphic\n ) {\n const {\n scaleX = theme.scaleX,\n scaleY = theme.scaleY,\n stroke = theme.stroke,\n shadowBlur = theme.shadowBlur,\n lineWidth = theme.lineWidth,\n pickStrokeBuffer = theme.pickStrokeBuffer,\n strokeBoundsBuffer = theme.strokeBoundsBuffer\n } = attribute;\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n if (stroke && lineWidth) {\n const scaledHalfLineWidth = (lineWidth + pickStrokeBuffer) / Math.abs(scaleX + scaleY);\n boundStroke(tb1, scaledHalfLineWidth, miter, strokeBoundsBuffer);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n }\n if (shadowBlur) {\n const { shadowOffsetX = theme.shadowOffsetX, shadowOffsetY = theme.shadowOffsetY } = attribute;\n const shadowBlurWidth = (shadowBlur / Math.abs(scaleX + scaleY)) * 2;\n boundStroke(tb1, shadowBlurWidth, false, strokeBoundsBuffer + 1);\n tb1.translate(shadowOffsetX, shadowOffsetY);\n aabbBounds.union(tb1);\n // tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n }\n\n // 合并shadowRoot的bounds\n this.combindShadowAABBBounds(aabbBounds, graphic);\n\n // 性能优化逻辑,group类型变换较少,不需要矩阵变换\n let updateMatrix = true;\n const m = graphic.transMatrix;\n if (graphic && graphic.isContainer) {\n updateMatrix = !(m.a === 1 && m.b === 0 && m.c === 0 && m.d === 1 && m.e === 0 && m.f === 0);\n }\n updateMatrix && transformBoundsWithMatrix(aabbBounds, aabbBounds, m);\n\n // TODO 加上锚点\n // transformBounds(aabbBounds, x, y, scaleX, scaleY, angle);\n // if (graphic.attribute.postMatrix) {\n // console.log('aaa');\n // transformBoundsWithMatrix(aabbBounds, graphic.attribute.postMatrix);\n // }\n // aabbBounds.translate(dx, dy);\n }\n\n protected _validCheck(\n attribute: Partial,\n theme: Required,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ): boolean {\n if (!graphic) {\n return true;\n }\n if (!graphic.valid) {\n aabbBounds.clear();\n return false;\n }\n const { visible = theme.visible } = attribute;\n if (!visible) {\n aabbBounds.clear();\n return false;\n }\n return true;\n }\n}\n","// import type {\n// IArc,\n// IArcGraphicAttribute,\n// IArea,\n// IAreaGraphicAttribute,\n// ICircle,\n// ICircleGraphicAttribute,\n// IGroup,\n// IGroupGraphicAttribute,\n// IImageGraphicAttribute,\n// ILine,\n// ILineGraphicAttribute,\n// IPath,\n// IPathGraphicAttribute,\n// IPolygonGraphicAttribute,\n// IRect,\n// IRectGraphicAttribute,\n// ISymbolGraphicAttribute,\n// IText,\n// ITextGraphicAttribute,\n// ISymbol,\n// IImage,\n// IPolygon,\n// IShadowRoot,\n// IGraphic,\n// IRichTextGraphicAttribute,\n// IRichText,\n// IGlyph,\n// IGlyphGraphicAttribute,\n// IRect3d,\n// IRect3dGraphicAttribute,\n// IArc3dGraphicAttribute,\n// IPyramid3dGraphicAttribute,\n// IPyramid3d,\n// IWrapTextGraphicAttribute\n// } from '../interface';\n// import { Arc } from './arc';\n// import { Area } from './area';\n// import { Circle } from './circle';\n// import { Group } from './group';\n// import { Image } from './image';\n// import { Line } from './line';\n// import { Path } from './path';\n// import { Polygon } from './polygon';\n// import { Rect } from './rect';\n// // 这里git会将Symbol强行转成小写symbol,先重命名一下\n// import { Symbol as MarkSymbol } from './symbol';\n// import { ShadowRoot as MarkShadowRoot } from './shadow-root';\n// import { Text } from './text';\n// import { RichText } from './richtext';\n// import { Glyph } from './glyph';\n// import { Rect3d } from './rect3d';\n// import { Arc3d } from './arc3d';\n// import { Pyramid3d } from './pyramid3d';\n// import { WrapText } from './wrap-text';\n\nimport type {\n IArc,\n IArcGraphicAttribute,\n IArea,\n IAreaGraphicAttribute,\n ICircle,\n ICircleGraphicAttribute,\n IGroup,\n IGroupGraphicAttribute,\n IImage,\n IImageGraphicAttribute,\n ILine,\n ILineGraphicAttribute,\n IPath,\n IPathGraphicAttribute,\n IPolygon,\n IPolygonGraphicAttribute,\n IRect,\n IRect3d,\n IRect3dGraphicAttribute,\n IRectGraphicAttribute,\n IRichText,\n IRichTextGraphicAttribute,\n IShadowRoot,\n ISymbol,\n ISymbolGraphicAttribute,\n IText,\n ITextGraphicAttribute,\n IWrapTextGraphicAttribute\n} from '../interface';\n\n// export function createArc(attributes: IArcGraphicAttribute): IArc {\n// return new Arc(attributes);\n// }\n// export function createArc3d(attributes: IArc3dGraphicAttribute): IArc {\n// return new Arc3d(attributes);\n// }\n// export function createPyramid3d(attributes: IPyramid3dGraphicAttribute): IPyramid3d {\n// return new Pyramid3d(attributes);\n// }\n// export function createArea(attributes: IAreaGraphicAttribute): IArea {\n// return new Area(attributes);\n// }\n// export function createCircle(attributes: ICircleGraphicAttribute): ICircle {\n// return new Circle(attributes);\n// }\n// export function createGroup(attributes: IGroupGraphicAttribute): IGroup {\n// return new Group(attributes);\n// }\n// export function createLine(attributes: ILineGraphicAttribute): ILine {\n// return new Line(attributes);\n// }\n// export function createPath(attributes: IPathGraphicAttribute): IPath {\n// return new Path(attributes);\n// }\n// export function createRect(attributes: IRectGraphicAttribute): IRect {\n// return new Rect(attributes);\n// }\n// export function createRect3d(attributes: IRect3dGraphicAttribute): IRect3d {\n// return new Rect3d(attributes);\n// }\n// export function createGlyph(attributes: IGlyphGraphicAttribute): IGlyph {\n// return new Glyph(attributes);\n// }\n// export function createText(attributes: ITextGraphicAttribute): IText {\n// return new Text(attributes);\n// }\n// export function createWrapText(attributes: IWrapTextGraphicAttribute): IText {\n// return new WrapText(attributes);\n// }\n// export function createSymbol(attributes: ISymbolGraphicAttribute): ISymbol {\n// return new MarkSymbol(attributes);\n// }\n// export function createImage(attributes: IImageGraphicAttribute): IImage {\n// return new Image(attributes);\n// }\n// export function createPolygon(attributes: IPolygonGraphicAttribute): IPolygon {\n// return new Polygon(attributes);\n// }\n// export function createShadowRoot(graphic?: IGraphic): IShadowRoot {\n// return new MarkShadowRoot(graphic);\n// }\n// export function createRichText(attributes: IRichTextGraphicAttribute): IRichText {\n// return new RichText(attributes);\n// }\n\nclass GraphicCreator {\n declare store: Map;\n declare arc?: (attribute: IArcGraphicAttribute) => IArc;\n declare area?: (attribute: IAreaGraphicAttribute) => IArea;\n declare circle?: (attribute: ICircleGraphicAttribute) => ICircle;\n declare group?: (attribute: IGroupGraphicAttribute) => IGroup;\n declare image?: (attribute: IImageGraphicAttribute) => IImage;\n declare line?: (attribute: ILineGraphicAttribute) => ILine;\n declare path?: (attribute: IPathGraphicAttribute) => IPath;\n declare rect?: (attribute: IRectGraphicAttribute) => IRect;\n declare rect3d?: (attribute: IRect3dGraphicAttribute) => IRect3d;\n declare symbol?: (attribute: ISymbolGraphicAttribute) => ISymbol;\n declare text?: (attribute: ITextGraphicAttribute) => IText;\n declare richtext?: (attribute: IRichTextGraphicAttribute) => IRichText;\n declare polygon?: (attribute: IPolygonGraphicAttribute) => IPolygon;\n declare shadowRoot?: (attribute: IGroupGraphicAttribute) => IShadowRoot;\n declare wraptext?: (attribute: IWrapTextGraphicAttribute) => IText;\n constructor() {\n this.store = new Map();\n }\n\n RegisterGraphicCreator(name: string, cb: any) {\n this.store.set(name, cb);\n this[name] = cb;\n }\n\n CreateGraphic(name: string, params: any) {\n const cb = this.store.get(name);\n if (!cb) {\n return null;\n }\n return cb(params);\n }\n}\n\nexport const graphicCreator = new GraphicCreator();\n\n// export const graphicCreator = {\n// arc: createArc,\n// area: createArea,\n// circle: createCircle,\n// group: createGroup,\n// image: createImage,\n// line: createLine,\n// path: createPath,\n// rect: createRect,\n// rect3d: createRect3d,\n// symbol: createSymbol,\n// text: createText,\n// richtext: createRichText,\n// polygon: createPolygon,\n// shadowRoot: createShadowRoot,\n// wrapText: createWrapText\n// };\n","export const AutoEnablePlugins = Symbol.for('AutoEnablePlugins');\nexport const PluginService = Symbol.for('PluginService');\n","import { injectable, inject, named } from '../common/inversify-lite';\nimport type { IContributionProvider, IPlugin, IPluginService, IStage } from '../interface';\nimport { ContributionProvider } from '../common/contribution-provider';\nimport { AutoEnablePlugins } from './constants';\nimport { container } from '../container';\n\n@injectable()\nexport class DefaultPluginService implements IPluginService {\n declare onStartupFinishedPlugin: IPlugin[];\n declare onRegisterPlugin: IPlugin[];\n declare stage: IStage;\n declare actived: boolean;\n\n constructor(\n @inject(ContributionProvider)\n @named(AutoEnablePlugins)\n protected readonly autoEnablePlugins: IContributionProvider\n ) {\n this.onStartupFinishedPlugin = [];\n this.onRegisterPlugin = [];\n this.actived = false;\n }\n\n active(stage: IStage, params: { pluginList?: string[] }) {\n this.stage = stage;\n this.actived = true;\n\n // 启动插件\n const { pluginList } = params;\n if (pluginList && container.isBound(AutoEnablePlugins)) {\n this.autoEnablePlugins.getContributions().forEach(p => {\n if (pluginList.includes(p.name)) {\n this.register(p);\n }\n });\n }\n }\n\n findPluginsByName(name: string): IPlugin[] {\n const arr: IPlugin[] = [];\n this.onStartupFinishedPlugin.forEach(plugin => {\n if (plugin.name === name) {\n arr.push(plugin);\n }\n });\n this.onRegisterPlugin.forEach(plugin => {\n if (plugin.name === name) {\n arr.push(plugin);\n }\n });\n return arr;\n }\n\n register(plugin: IPlugin) {\n if (plugin.activeEvent === 'onStartupFinished') {\n this.onStartupFinishedPlugin.push(plugin);\n } else if (plugin.activeEvent === 'onRegister') {\n this.onRegisterPlugin.push(plugin);\n plugin.activate(this);\n }\n }\n unRegister(plugin: IPlugin) {\n if (plugin.activeEvent === 'onStartupFinished') {\n this.onStartupFinishedPlugin.splice(this.onStartupFinishedPlugin.indexOf(plugin), 1);\n } else if (plugin.activeEvent === 'onRegister') {\n this.onRegisterPlugin.splice(this.onStartupFinishedPlugin.indexOf(plugin), 1);\n }\n plugin.deactivate(this);\n }\n\n release(...params: any): void {\n this.onStartupFinishedPlugin.forEach(plugin => {\n plugin.deactivate(this);\n });\n this.onStartupFinishedPlugin = [];\n this.onRegisterPlugin.forEach(plugin => {\n plugin.deactivate(this);\n });\n this.onRegisterPlugin = [];\n }\n}\n","import { ContainerModule } from '../../../common/inversify-lite';\nimport { bindContributionProvider } from '../../../common/contribution-provider';\nimport { DefaultTextMeasureContribution, TextMeasureContribution } from './textMeasure-contribution';\n\nexport default new ContainerModule(bind => {\n bind(TextMeasureContribution).to(DefaultTextMeasureContribution).inSingletonScope();\n bindContributionProvider(bind, TextMeasureContribution);\n});\n","import { inject, injectable } from '../../../common/inversify-lite';\nimport { wrapCanvas } from '../../../canvas/util';\nimport type {\n IGlobal,\n ICanvas,\n IContext2d,\n IDrawToParams,\n IGroup,\n ILayer,\n ILayerHandlerContribution,\n IWindow,\n ILayerHandlerInitParams,\n ILayerHandlerDrawParams,\n IDrawContext,\n LayerMode\n} from '../../../interface';\nimport type { IBounds } from '@visactor/vutils';\nimport { application } from '../../../application';\n\n@injectable()\nexport class CanvasLayerHandlerContribution implements ILayerHandlerContribution {\n layer: ILayer;\n canvas: ICanvas;\n context: IContext2d;\n offscreen: boolean;\n main: boolean;\n window: IWindow;\n type: LayerMode = 'static';\n global: IGlobal;\n // 所绑定的副layer handler\n secondaryHandlers: ILayerHandlerContribution[];\n\n constructor() {\n this.offscreen = false;\n this.global = application.global;\n }\n\n setDpr(dpr: number) {\n this.canvas.dpr = dpr;\n return;\n }\n\n init(layer: ILayer, window: IWindow, params: ILayerHandlerInitParams): void {\n this.layer = layer;\n this.window = window;\n // 默认图层,那么直接拿window上的上下文和canvas即可\n if (params.main) {\n this.main = true;\n this.context = window.getContext();\n this.canvas = this.context.getCanvas();\n } else {\n this.main = false;\n let nativeCanvas: HTMLElement;\n if (params.canvasId) {\n nativeCanvas = this.global.getElementById(params.canvasId);\n }\n if (!nativeCanvas) {\n nativeCanvas = this.global.createCanvas({\n width: window.width,\n height: window.height\n });\n }\n // 不是main的话,就穿透点击事件\n if (nativeCanvas.style) {\n nativeCanvas.style['pointer-events'] = 'none';\n }\n const windowContext = window.getContext();\n const windowCanvas = windowContext.getCanvas().nativeCanvas;\n const canvas = wrapCanvas({\n nativeCanvas,\n width: window.width,\n height: window.height,\n dpr: window.dpr,\n id: params.canvasId,\n canvasControled: true,\n container: window.getContainer(),\n x: windowCanvas.offsetLeft,\n y: windowCanvas.offsetTop\n });\n canvas.applyPosition();\n this.canvas = canvas;\n this.context = canvas.getContext();\n }\n }\n\n resize(w: number, h: number) {\n this.canvas.resize(w, h);\n return;\n }\n resizeView(w: number, h: number) {\n return;\n }\n\n render(group: IGroup[], params: ILayerHandlerDrawParams, userParams?: Partial): void {\n // 调整位置\n if (!this.main) {\n const windowContext = this.window.getContext();\n const windowCanvas = windowContext.getCanvas().nativeCanvas;\n if (windowCanvas && (this.canvas.x !== windowCanvas.offsetLeft || this.canvas.y !== windowCanvas.offsetTop)) {\n this.canvas.x = windowCanvas.offsetLeft;\n this.canvas.y = windowCanvas.offsetTop;\n this.canvas.applyPosition();\n }\n }\n params.renderService.render(group, {\n context: this.context,\n clear: params.background ?? '#ffffff',\n ...params,\n ...userParams\n });\n }\n\n merge(layerHandlers: ILayerHandlerContribution[]) {\n layerHandlers.forEach(l => {\n const ctx = l.getContext();\n const canvas = ctx.canvas.nativeCanvas;\n this.context.drawImage(canvas, 0, 0);\n });\n }\n\n prepare(dirtyBounds: IBounds, params: ILayerHandlerDrawParams) {\n return;\n }\n\n drawTo(target: IWindow, group: IGroup[], params: IDrawToParams & ILayerHandlerDrawParams) {\n const context = target.getContext();\n params.renderService.render(group, {\n context,\n ...params,\n clear: params.clear ? params.background ?? '#fff' : undefined\n });\n return;\n }\n\n getContext(): IContext2d {\n return this.context;\n }\n\n release() {\n this.canvas.release();\n }\n}\n","import { inject, injectable } from '../../../common/inversify-lite';\nimport type {\n IGlobal,\n IDrawToParams,\n IGroup,\n ILayer,\n ILayerHandlerContribution,\n IWindow,\n ILayerHandlerInitParams,\n ILayerHandlerDrawParams,\n IDrawContext,\n LayerMode\n} from '../../../interface';\nimport type { IBounds } from '@visactor/vutils';\nimport { application } from '../../../application';\n\n@injectable()\nexport class EmptyLayerHandlerContribution implements ILayerHandlerContribution {\n declare layer: ILayer;\n declare canvas: null;\n declare context: null;\n declare offscreen: boolean;\n declare main: boolean;\n declare window: IWindow;\n declare type: LayerMode;\n // 所依赖的主layer handler\n declare mainHandler: ILayerHandlerContribution;\n declare global: IGlobal;\n\n constructor() {\n this.offscreen = false;\n this.type = 'virtual';\n this.global = application.global;\n }\n\n setDpr(dpr: number) {\n return;\n }\n\n init(layer: ILayer, window: IWindow, params: ILayerHandlerInitParams): void {\n this.layer = layer;\n this.window = window;\n if (params.main) {\n throw new Error('virtual layer不能作为main layer');\n }\n this.main = false;\n this.canvas = null;\n this.context = null;\n }\n\n resize(w: number, h: number) {\n return;\n }\n resizeView(w: number, h: number) {\n return;\n }\n\n render(group: IGroup[], params: ILayerHandlerDrawParams, userParams?: Partial): void {\n this.mainHandler.render(group, params, { ...userParams, clear: false });\n return;\n }\n\n merge(layerHandlers: ILayerHandlerContribution[]) {\n return;\n }\n\n prepare(dirtyBounds: IBounds, params: ILayerHandlerDrawParams) {\n return;\n }\n\n drawTo(target: IWindow, group: IGroup[], params: IDrawToParams & ILayerHandlerDrawParams) {\n const context = target.getContext();\n params.renderService.render(group, {\n context,\n ...params,\n clear: params.clear ? params.background ?? '#fff' : undefined\n });\n return;\n }\n\n getContext(): null {\n return null;\n }\n\n release() {\n return;\n }\n}\n","import { inject, injectable } from '../../../common/inversify-lite';\nimport { wrapCanvas } from '../../../canvas/util';\nimport type {\n IGlobal,\n ICanvas,\n IContext2d,\n IDrawToParams,\n IGroup,\n ILayer,\n ILayerHandlerContribution,\n ILayerHandlerInitParams,\n IWindow,\n ILayerHandlerDrawParams,\n LayerMode\n} from '../../../interface';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport { application } from '../../../application';\n\n@injectable()\nexport class OffscreenLayerHandlerContribution implements ILayerHandlerContribution {\n declare layer: ILayer;\n declare canvas: ICanvas;\n declare context: IContext2d;\n declare offscreen: boolean;\n declare type: LayerMode;\n // 所绑定的副layer handler\n declare secondaryHandlers: ILayerHandlerContribution[];\n declare global: IGlobal;\n\n constructor() {\n this.offscreen = true;\n this.type = 'dynamic';\n this.global = application.global;\n }\n\n setDpr(dpr: number) {\n this.canvas.dpr = dpr;\n return;\n }\n\n init(layer: ILayer, window: IWindow, params: ILayerHandlerInitParams): void {\n this.layer = layer;\n const nativeCanvas = this.global.createOffscreenCanvas({\n width: params.width,\n height: params.height,\n dpr: window.dpr\n });\n const canvas = wrapCanvas({\n nativeCanvas,\n width: params.width,\n height: params.height,\n dpr: window.dpr,\n canvasControled: true\n });\n\n this.canvas = canvas;\n this.context = canvas.getContext();\n }\n\n resize(w: number, h: number) {\n this.canvas.resize(w, h);\n return;\n }\n resizeView(w: number, h: number) {\n this.canvas.resize(w, h);\n return;\n }\n\n render(group: IGroup[], params: ILayerHandlerDrawParams): void {\n params.renderService.render(group, {\n context: this.context,\n ...params,\n x: 0,\n y: 0,\n clear: params.background ?? '#ffffff'\n });\n }\n\n prepare(dirtyBounds: IBoundsLike, params: ILayerHandlerDrawParams) {\n return;\n }\n\n release() {\n this.canvas.release();\n }\n\n getContext(): IContext2d {\n return this.context;\n }\n\n drawTo(target: IWindow, group: IGroup[], params: IDrawToParams & ILayerHandlerDrawParams) {\n const context = target.getContext();\n const targetDpr = target.dpr;\n\n const { x = 0, y = 0, width = this.layer.viewWidth, height = this.layer.viewHeight } = params;\n // 这个context可能是外部的,不要使用内置的状态,直接用原生的context\n context.nativeContext.save();\n context.nativeContext.setTransform(targetDpr, 0, 0, targetDpr, 0, 0);\n if (params.clear) {\n context.clearRect(x, y, width, height);\n }\n context.drawImage(this.canvas.nativeCanvas, 0, 0, this.canvas.width, this.canvas.height, x, y, width, height);\n context.nativeContext.restore();\n }\n\n merge(layerHandlers: ILayerHandlerContribution[]) {\n return;\n }\n}\n","import { ContainerModule } from '../../../common/inversify-lite';\nimport {\n DynamicLayerHandlerContribution,\n StaticLayerHandlerContribution,\n VirtualLayerHandlerContribution\n} from '../../constants';\nimport { CanvasLayerHandlerContribution } from './canvas2d-contribution';\nimport { EmptyLayerHandlerContribution } from './empty-contribution';\nimport { OffscreenLayerHandlerContribution } from './offscreen2d-contribution';\n\nexport default new ContainerModule(bind => {\n bind(CanvasLayerHandlerContribution).toSelf();\n bind(OffscreenLayerHandlerContribution).toSelf();\n bind(EmptyLayerHandlerContribution).toSelf();\n bind(StaticLayerHandlerContribution).toService(CanvasLayerHandlerContribution);\n bind(DynamicLayerHandlerContribution).toService(OffscreenLayerHandlerContribution);\n bind(VirtualLayerHandlerContribution).toService(EmptyLayerHandlerContribution);\n // try {\n // if (typeof OffscreenCanvas === 'function') {\n // bind(LayerHandlerContribution).toService(OffscreenLayerHandlerContribution);\n // }\n // } catch (err) {\n // bind(LayerHandlerContribution).toService(CanvasLayerHandlerContribution);\n // }\n});\n","import type { IGraphic } from '../interface';\n\nexport function foreach(\n graphic: IGraphic,\n defaultZIndex: number,\n cb: (...data: any) => boolean | void,\n reverse: boolean = false,\n sort3d: boolean = false\n) {\n const childMap: { [id: number]: IGraphic[] } = {};\n const zIdxArray: number[] = [];\n // 遍历一遍查看是否有zIndex不同的\n let needSort = false;\n if (sort3d) {\n needSort = true;\n } else {\n let lastZIndex: number;\n graphic.forEachChildren((item: IGraphic, i: number) => {\n const { zIndex = defaultZIndex } = item.attribute;\n if (i === 0) {\n lastZIndex = zIndex;\n } else if (lastZIndex !== zIndex) {\n needSort = true;\n return true;\n }\n return false;\n }, reverse);\n }\n if (needSort) {\n graphic.forEachChildren((item: IGraphic) => {\n const { zIndex = defaultZIndex } = item.attribute;\n if (childMap[zIndex]) {\n childMap[zIndex].push(item);\n } else {\n childMap[zIndex] = [item];\n zIdxArray.push(zIndex);\n }\n }, reverse);\n zIdxArray.sort((a, b) => (reverse ? b - a : a - b));\n let skip = false;\n for (let i = 0; i < zIdxArray.length; i++) {\n if (skip) {\n break;\n }\n const idx = zIdxArray[i];\n const children = childMap[idx];\n // 根据z进行排序\n if (sort3d) {\n children.sort((a, b) => {\n return (reverse ? -1 : 1) * ((b.attribute.z ?? 0) - (a.attribute.z ?? 0));\n });\n }\n for (let i = 0; i < children.length; i++) {\n if (cb(children[i], i)) {\n skip = true;\n break;\n }\n }\n }\n } else {\n graphic.forEachChildren(cb, reverse);\n }\n}\n\nexport async function foreachAsync(\n graphic: IGraphic,\n defaultZIndex: number,\n cb: (data: any, i: number) => boolean | void | Promise,\n reverse: boolean = false\n) {\n // 不支持zIndex\n await graphic.forEachChildrenAsync(cb, reverse);\n // const childMap: { [id: number]: IGraphic[] } = {};\n // const zIdxArray: number[] = [];\n // // 遍历一遍查看是否有zIndex不同的\n // let needSort = false;\n // let lastZIndex: number;\n // graphic.forEachChildren((item: IGraphic, i: number) => {\n // const { zIndex = defaultZIndex } = item.attribute;\n // if (i === 0) {\n // lastZIndex === zIndex;\n // } else if (lastZIndex !== zIndex) {\n // needSort = true;\n // return true;\n // }\n // return false;\n // }, reverse);\n // if (needSort) {\n // graphic.forEachChildren((item: IGraphic) => {\n // const { zIndex = defaultZIndex } = item.attribute;\n // if (childMap[zIndex]) {\n // childMap[zIndex].push(item);\n // } else {\n // childMap[zIndex] = [item];\n // zIdxArray.push(zIndex);\n // }\n // }, reverse);\n // zIdxArray.sort((a, b) => (reverse ? b - a : a - b));\n // let skip = false;\n // for (let i = 0; i < zIdxArray.length; i++) {\n // if (skip) {\n // break;\n // }\n // const idx = zIdxArray[i];\n // const children = childMap[idx];\n // for (let i = 0; i < children.length; i++) {\n // let d = cb(children[i], i);\n // if ((d as any).then) {\n // d = await d;\n // }\n // if (d) {\n // skip = true;\n // break;\n // }\n // }\n // }\n // } else {\n // await graphic.forEachChildrenAsync(cb, reverse);\n // }\n}\n\nexport function findNextGraphic(graphic: IGraphic, id: number, defaultZIndex: number, reverse: boolean = false) {\n const childMap: { [id: number]: IGraphic[] } = {};\n const zIdxArray: number[] = [];\n // 遍历一遍查看是否有zIndex不同的\n let needSort = false;\n let lastZIndex: number;\n graphic.forEachChildren((item: IGraphic, i: number) => {\n const { zIndex = defaultZIndex } = item.attribute;\n if (i === 0) {\n lastZIndex === zIndex;\n } else if (lastZIndex !== zIndex) {\n needSort = true;\n return true;\n }\n return false;\n }, reverse);\n let result: IGraphic | null = null;\n let next: boolean = false;\n if (needSort) {\n graphic.forEachChildren((item: IGraphic) => {\n const { zIndex = defaultZIndex } = item.attribute;\n if (childMap[zIndex]) {\n childMap[zIndex].push(item);\n } else {\n childMap[zIndex] = [item];\n zIdxArray.push(zIndex);\n }\n }, reverse);\n zIdxArray.sort((a, b) => (reverse ? b - a : a - b));\n let skip = false;\n for (let i = 0; i < zIdxArray.length; i++) {\n if (skip) {\n break;\n }\n const idx = zIdxArray[i];\n const children = childMap[idx];\n for (let i = 0; i < children.length; i++) {\n if (next) {\n skip = true;\n result = children[i];\n break;\n }\n if (children[i]._uid === id) {\n next = true;\n continue;\n }\n }\n }\n } else {\n graphic.forEachChildren(item => {\n if (next) {\n result = item as IGraphic;\n return true;\n }\n if (item._uid === id) {\n next = true;\n }\n return false;\n }, reverse);\n }\n\n return result;\n}\n","/* 用于判断2d相交 */\nimport type { IBoundsLike } from '../../data-structure';\nimport type { vec2 } from '../../math';\nimport { pi2, halfPi, crossProduct, fuzzyEqualVec } from '../../math';\nimport type { Point } from './interface';\n\nfunction sub(out: vec2, v1: vec2, v2: vec2) {\n out[0] = v1[0] - v2[0];\n out[1] = v1[1] - v2[1];\n}\n\n// 临时变量\nlet x11: number;\nlet x12: number;\nlet y11: number;\nlet y12: number;\nlet x21: number;\nlet x22: number;\nlet y21: number;\nlet y22: number;\n\n/**\n * 判断直线是否相交,投影法\n * @param left1\n * @param right1\n * @param left2\n * @param right2\n */\nexport function isIntersect(left1: vec2, right1: vec2, left2: vec2, right2: vec2): boolean {\n let min1: number = left1[0];\n let max1: number = right1[0];\n let min2: number = left2[0];\n let max2: number = right2[0];\n let _temp: number;\n if (max1 < min1) {\n _temp = max1;\n (max1 = min1), (min1 = _temp);\n }\n if (max2 < min2) {\n _temp = max2;\n (max2 = min2), (min2 = _temp);\n }\n if (max1 < min2 || max2 < min1) {\n return false;\n }\n\n (min1 = left1[1]), (max1 = right1[1]), (min2 = left2[1]), (max2 = right2[1]);\n if (max1 < min1) {\n _temp = max1;\n (max1 = min1), (min1 = _temp);\n }\n if (max2 < min2) {\n _temp = max2;\n (max2 = min2), (min2 = _temp);\n }\n if (max1 < min2 || max2 < min1) {\n return false;\n }\n\n return true;\n}\n\n/**\n * 获取直线交点\n * 不相交返回false,共线返回true,相交返回交点\n * https://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect/565282#565282\n * @param left1\n * @param right1\n * @param left2\n * @param right2\n */\nexport function getIntersectPoint(left1: vec2, right1: vec2, left2: vec2, right2: vec2): boolean | vec2 {\n if (!isIntersect(left1, right1, left2, right2)) {\n return false;\n }\n const dir1: vec2 = [0, 0];\n const dir2: vec2 = [0, 0];\n const tempVec: vec2 = [0, 0];\n sub(dir1, right1, left1);\n sub(dir2, right2, left2);\n\n // 判断共线\n if (fuzzyEqualVec(dir1, dir2)) {\n return true;\n }\n\n // https://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect/565282#565282\n // line1: left1 + dir1 * t\n // line2: left2 + dir2 * u\n // 当 left1 + dir1 * t = left2 + dir2 * u => (left1 + dir1 * t) x dir2 = (left2 + dir2 * u) x dir2\n // => dir1 x dir2 * t = (left2 - left1) x dir2 => t = (left2 - left1) x dir2 / (dir1 x dir2)\n // 直线不平行,dir1 x dir2 ≠ 0,当0 <= t <= 1时,可以求出交点\n sub(tempVec, left2, left1);\n const t = crossProduct(tempVec, dir2) / crossProduct(dir1, dir2);\n if (t >= 0 && t <= 1) {\n return [left1[0] + dir1[0] * t, left1[1] + dir1[1] * t];\n }\n\n return false;\n}\n\n/**\n * 获取两个rect的相交部分\n * 如果有bbox为null,返回null,如果不相交返回{x1: 0, y1: 0, x2: 0, y2: 0}\n * @param bbox1\n * @param bbox2\n * @param format\n */\nexport function getRectIntersect(\n bbox1: IBoundsLike | null,\n bbox2: IBoundsLike | null,\n format: boolean\n): IBoundsLike | null {\n if (bbox1 === null) {\n return bbox2;\n }\n if (bbox2 === null) {\n return bbox1;\n }\n\n (x11 = bbox1.x1),\n (x12 = bbox1.x2),\n (y11 = bbox1.y1),\n (y12 = bbox1.y2),\n (x21 = bbox2.x1),\n (x22 = bbox2.x2),\n (y21 = bbox2.y1),\n (y22 = bbox2.y2);\n\n if (format) {\n if (x11 > x12) {\n [x11, x12] = [x12, x11];\n }\n if (y11 > y12) {\n [y11, y12] = [y12, y11];\n }\n if (x21 > x22) {\n [x21, x22] = [x22, x21];\n }\n if (y21 > y22) {\n [y21, y22] = [y22, y21];\n }\n }\n\n if (x11 >= x22 || x12 <= x21 || y11 >= y22 || y12 <= y21) {\n return { x1: 0, y1: 0, x2: 0, y2: 0 };\n }\n return { x1: Math.max(x11, x21), y1: Math.max(y11, y21), x2: Math.min(x12, x22), y2: Math.min(y12, y22) };\n}\n\nexport enum InnerBBox {\n NONE = 0,\n BBOX1 = 1,\n BBOX2 = 2\n}\n/**\n * 矩形是否在另一个矩形内部\n * 返回InnerBBox\n * @param bbox1\n * @param bbox2\n * @param format\n */\nexport function rectInsideAnotherRect(\n bbox1: IBoundsLike | null,\n bbox2: IBoundsLike | null,\n format: boolean\n): InnerBBox {\n if (!bbox1 || !bbox2) {\n return InnerBBox.NONE;\n }\n\n (x11 = bbox1.x1),\n (x12 = bbox1.x2),\n (y11 = bbox1.y1),\n (y12 = bbox1.y2),\n (x21 = bbox2.x1),\n (x22 = bbox2.x2),\n (y21 = bbox2.y1),\n (y22 = bbox2.y2);\n\n if (format) {\n if (x11 > x12) {\n [x11, x12] = [x12, x11];\n }\n if (y11 > y12) {\n [y11, y12] = [y12, y11];\n }\n if (x21 > x22) {\n [x21, x22] = [x22, x21];\n }\n if (y21 > y22) {\n [y21, y22] = [y22, y21];\n }\n }\n\n // bbox1在bbox2内部\n if (x11 > x21 && x12 < x22 && y11 > y21 && y12 < y22) {\n return InnerBBox.BBOX1;\n }\n // bbox2在bbox1内部\n if (x21 > x11 && x22 < x12 && y21 > y11 && y22 < y12) {\n return InnerBBox.BBOX2;\n }\n\n return InnerBBox.NONE;\n}\n\n/**\n * 两个矩形是否相交\n * 如果有矩形为null,判断为相交\n * @param bbox1\n * @param bbox2\n * @param format\n */\nexport function isRectIntersect(bbox1: IBoundsLike | null, bbox2: IBoundsLike | null, format: boolean): boolean {\n if (bbox1 && bbox2) {\n if (!format) {\n if (bbox1.x1 > bbox2.x2 || bbox1.x2 < bbox2.x1 || bbox1.y1 > bbox2.y2 || bbox1.y2 < bbox2.y1) {\n return false;\n }\n return true;\n }\n\n (x11 = bbox1.x1),\n (x12 = bbox1.x2),\n (y11 = bbox1.y1),\n (y12 = bbox1.y2),\n (x21 = bbox2.x1),\n (x22 = bbox2.x2),\n (y21 = bbox2.y1),\n (y22 = bbox2.y2);\n if (x11 > x12) {\n [x11, x12] = [x12, x11];\n }\n if (y11 > y12) {\n [y11, y12] = [y12, y11];\n }\n if (x21 > x22) {\n [x21, x22] = [x22, x21];\n }\n if (y21 > y22) {\n [y21, y22] = [y22, y21];\n }\n\n if (x11 > x22 || x12 < x21 || y11 > y22 || y12 < y21) {\n return false;\n }\n return true;\n }\n return true;\n}\n\n/**\n * 点在box内部\n * 如果bbox为null返回true\n * @param point\n * @param bbox\n */\nexport function pointInRect(point: { x: number; y: number }, bbox: IBoundsLike | null, format: boolean): boolean {\n if (!bbox) {\n return true;\n }\n if (!format) {\n return point.x >= bbox.x1 && point.x <= bbox.x2 && point.y >= bbox.y1 && point.y <= bbox.y2;\n }\n (x11 = bbox.x1), (x12 = bbox.x2), (y11 = bbox.y1), (y12 = bbox.y2);\n if (x11 > x12) {\n [x11, x12] = [x12, x11];\n }\n if (y11 > y12) {\n [y11, y12] = [y12, y11];\n }\n return point.x >= x11 && point.x <= x12 && point.y >= y11 && point.y <= y12;\n}\n\n// 参考https://github.com/francecil/leetcode/issues/1\n\n/**\n * 计算投影半径\n * @param {Array(Number)} checkAxis 检测轴 [cosθ,sinθ]\n * @param {Array} axis 目标轴 [x,y]\n */\nfunction getProjectionRadius(checkAxis: [number, number], axis: [number, number]) {\n return Math.abs(axis[0] * checkAxis[0] + axis[1] * checkAxis[1]);\n}\n\nfunction rotate({ x, y }: Point, deg: number, origin = { x: 0, y: 0 }) {\n return {\n x: (x - origin.x) * Math.cos(deg) + (y - origin.y) * Math.sin(deg) + origin.x,\n y: (x - origin.x) * Math.sin(deg) + (origin.y - y) * Math.cos(deg) + origin.y\n };\n}\n\nfunction toDeg(angle: number) {\n return (angle / 180) * Math.PI;\n}\n\nfunction getCenterPoint(box: RotateBound): Point {\n return {\n x: (box.x1 + box.x2) / 2,\n y: (box.y1 + box.y2) / 2\n };\n}\n\ninterface RotateBound extends IBoundsLike {\n angle: number;\n rotateCenter?: { x: number; y: number };\n}\n\n/**\n * 转化为顶点坐标数组\n * @param {Object} box\n */\nfunction toRect(box: RotateBound, isDeg: boolean) {\n const deg = isDeg ? box.angle : toDeg(box.angle);\n const cp = getCenterPoint(box);\n return [\n rotate(\n {\n x: box.x1,\n y: box.y1\n },\n deg,\n cp\n ),\n rotate(\n {\n x: box.x2,\n y: box.y1\n },\n deg,\n cp\n ),\n rotate(\n {\n x: box.x2,\n y: box.y2\n },\n deg,\n cp\n ),\n rotate(\n {\n x: box.x1,\n y: box.y2\n },\n deg,\n cp\n )\n ];\n}\nexport function isRotateAABBIntersect(\n box1: RotateBound,\n box2: RotateBound,\n isDeg = false,\n ctx?: CanvasRenderingContext2D\n) {\n const rect1 = toRect(box1, isDeg);\n const rect2 = toRect(box2, isDeg);\n const vector = (start: Point, end: Point) => {\n return [end.x - start.x, end.y - start.y] as [number, number];\n };\n\n if (ctx) {\n ctx.save();\n ctx.fillStyle = 'red';\n ctx.globalAlpha = 0.6;\n rect1.forEach((item, index) => {\n if (index === 0) {\n ctx.moveTo(item.x, item.y);\n } else {\n ctx.lineTo(item.x, item.y);\n }\n });\n ctx.fill();\n ctx.restore();\n\n ctx.save();\n ctx.fillStyle = 'green';\n ctx.globalAlpha = 0.6;\n rect2.forEach((item, index) => {\n if (index === 0) {\n ctx.moveTo(item.x, item.y);\n } else {\n ctx.lineTo(item.x, item.y);\n }\n });\n ctx.fill();\n ctx.restore();\n }\n\n // 两个矩形的中心点\n const p1 = getCenterPoint(box1);\n const p2 = getCenterPoint(box2);\n\n ctx && ctx.fillRect(p1.x, p1.y, 2, 2);\n ctx && ctx.fillRect(p2.x, p2.y, 2, 2);\n // 向量 p1p2\n const vp1p2 = vector(p1, p2);\n\n //矩形1的两边向量\n const AB = vector(rect1[0], rect1[1]);\n const BC = vector(rect1[1], rect1[2]);\n //矩形2的两边向量\n const A1B1 = vector(rect2[0], rect2[1]);\n const B1C1 = vector(rect2[1], rect2[2]);\n\n // 矩形1 的两个弧度\n const deg11 = isDeg ? box1.angle : toDeg(box1.angle);\n let deg12 = isDeg ? box1.angle + halfPi : toDeg(90 - box1.angle);\n // 矩形2 的两个弧度\n const deg21 = isDeg ? box2.angle : toDeg(box2.angle);\n let deg22 = isDeg ? box2.angle + halfPi : toDeg(90 - box2.angle);\n if (deg12 > pi2) {\n deg12 -= pi2;\n }\n if (deg22 > pi2) {\n deg22 -= pi2;\n }\n\n // 投影重叠\n const isCover = (\n checkAxisRadius: number,\n deg: number,\n targetAxis1: [number, number],\n targetAxis2: [number, number]\n ) => {\n const checkAxis = [Math.cos(deg), Math.sin(deg)] as [number, number];\n const targetAxisRadius =\n (getProjectionRadius(checkAxis, targetAxis1) + getProjectionRadius(checkAxis, targetAxis2)) / 2;\n const centerPointRadius = getProjectionRadius(checkAxis, vp1p2);\n // console.log('abc', `checkAxis:${checkAxis},三个投影:${checkAxisRadius}, ${targetAxisRadius}, ${centerPointRadius}`)\n return checkAxisRadius + targetAxisRadius > centerPointRadius;\n };\n\n return (\n isCover((box1.x2 - box1.x1) / 2, deg11, A1B1, B1C1) &&\n isCover((box1.y2 - box1.y1) / 2, deg12, A1B1, B1C1) &&\n isCover((box2.x2 - box2.x1) / 2, deg21, AB, BC) &&\n isCover((box2.y2 - box2.y1) / 2, deg22, AB, BC)\n );\n}\n","import { injectable } from '../../../common/inversify-lite';\nimport { AABBBounds, pi2 } from '@visactor/vutils';\nimport { graphicCreator, mat3Tomat4, multiplyMat4Mat4 } from '../../../graphic';\nimport type {\n IArc,\n IContext2d,\n IDrawContext,\n IDrawContribution,\n IDrawItemInterceptorContribution,\n IGraphic,\n IGraphicAttribute,\n IGraphicRenderDrawParams,\n IGroup,\n ILayer,\n IRenderService\n} from '../../../interface';\nimport { mat4Allocate } from '../../../allocator/matrix-allocate';\nimport { ARC3D_NUMBER_TYPE } from '../../../graphic/constants';\n\n// 拦截器\nexport const DrawItemInterceptor = Symbol.for('DrawItemInterceptor');\n\n// @injectable()\n// export class DefaultDrawItemInterceptor implements IDrawItemInterceptor {\n// drawItem(graphic: IGraphic, renderService: IRenderService, params?: IGraphicRenderDrawParams): boolean {\n// return false;\n// }\n// }\n\nconst tempDirtyBounds = new AABBBounds();\n/**\n * 影子节点拦截器,用于渲染影子节点\n */\n// @injectable()\nexport class ShadowRootDrawItemInterceptorContribution implements IDrawItemInterceptorContribution {\n order: number = 1;\n afterDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n if (graphic.attribute.shadowRootIdx > 0 || !graphic.attribute.shadowRootIdx) {\n this.drawItem(graphic, renderService, drawContext, drawContribution, params);\n }\n return false;\n }\n\n beforeDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n if (graphic.attribute.shadowRootIdx < 0) {\n this.drawItem(graphic, renderService, drawContext, drawContribution, params);\n }\n return false;\n }\n\n protected drawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n if (!graphic.shadowRoot) {\n return false;\n }\n\n const { context } = drawContext;\n context.highPerformanceSave();\n // 直接transform\n context.transformFromMatrix(graphic.transMatrix, true);\n\n // 变换dirtyBounds\n if (drawContribution.dirtyBounds && drawContribution.backupDirtyBounds) {\n tempDirtyBounds.copy(drawContribution.dirtyBounds);\n const m = graphic.globalTransMatrix.getInverse();\n drawContribution.dirtyBounds.copy(drawContribution.backupDirtyBounds).transformWithMatrix(m);\n }\n\n // 设置context的transform到上一个节点\n drawContribution.renderGroup(graphic.shadowRoot, drawContext, graphic.parent.globalTransMatrix);\n\n context.highPerformanceRestore();\n\n if (drawContribution.dirtyBounds && drawContribution.backupDirtyBounds) {\n drawContribution.dirtyBounds.copy(tempDirtyBounds);\n }\n\n return true;\n }\n}\n\n// @injectable()\nexport class DebugDrawItemInterceptorContribution implements IDrawItemInterceptorContribution {\n order: number = 1;\n\n afterDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n if (graphic.attribute._debug_bounds) {\n this.drawItem(graphic, renderService, drawContext, drawContribution, params);\n }\n return false;\n }\n\n protected drawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n if (!graphic.attribute._debug_bounds) {\n return false;\n }\n\n const { context } = drawContext;\n context.highPerformanceSave();\n // 直接transform\n graphic.parent && context.setTransformFromMatrix(graphic.parent.globalTransMatrix, true);\n graphic.glyphHost &&\n graphic.glyphHost.parent &&\n context.setTransformFromMatrix(graphic.glyphHost.parent.globalTransMatrix, true);\n\n const b = graphic.AABBBounds;\n\n if (graphic.attribute._debug_bounds !== true) {\n graphic.attribute._debug_bounds(context, graphic);\n }\n context.strokeRect(b.x1, b.y1, b.width(), b.height());\n\n context.highPerformanceRestore();\n\n return true;\n }\n}\n\n@injectable()\nexport class CommonDrawItemInterceptorContribution implements IDrawItemInterceptorContribution {\n order: number = 1;\n interceptors: IDrawItemInterceptorContribution[];\n constructor() {\n this.interceptors = [\n new ShadowRootDrawItemInterceptorContribution(),\n new Canvas3DDrawItemInterceptor(),\n new InteractiveDrawItemInterceptorContribution(),\n new DebugDrawItemInterceptorContribution()\n ];\n }\n afterDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n for (let i = 0; i < this.interceptors.length; i++) {\n if (\n this.interceptors[i].afterDrawItem &&\n this.interceptors[i].afterDrawItem(graphic, renderService, drawContext, drawContribution, params)\n ) {\n return true;\n }\n }\n return false;\n }\n\n beforeDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n // 【性能方案】判定写在外层,减少遍历判断耗时,10000条数据减少1ms\n if (\n (!graphic.in3dMode || drawContext.in3dInterceptor) &&\n !graphic.shadowRoot &&\n !(graphic.baseGraphic || graphic.attribute.globalZIndex || graphic.interactiveGraphic)\n ) {\n return false;\n }\n\n for (let i = 0; i < this.interceptors.length; i++) {\n if (\n this.interceptors[i].beforeDrawItem &&\n this.interceptors[i].beforeDrawItem(graphic, renderService, drawContext, drawContribution, params)\n ) {\n return true;\n }\n }\n return false;\n }\n}\n\n/**\n * 交互层节点拦截器,用于支持交互层图元\n */\n// @injectable()\nexport class InteractiveDrawItemInterceptorContribution implements IDrawItemInterceptorContribution {\n order: number = 1;\n processing: boolean;\n // afterDrawItem(\n // graphic: IGraphic,\n // renderService: IRenderService,\n // drawContext: IDrawContext,\n // drawContribution: IDrawContribution,\n // params?: IGraphicRenderDrawParams\n // ): boolean {\n\n // if (graphic.attribute.shadowRootIdx > 0 || !graphic.attribute.shadowRootIdx) {\n // this.drawItem(graphic, renderService, drawContext, drawContribution, params);\n // }\n // return false;\n // }\n\n beforeDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n if (this.processing) {\n return false;\n }\n // 判断是否在交互层\n if (graphic.baseGraphic) {\n return this.beforeDrawInteractive(graphic, renderService, drawContext, drawContribution, params);\n }\n return this.beforeSetInteractive(graphic, renderService, drawContext, drawContribution, params);\n }\n\n /**\n * 用于提升interactive\n * @param graphic\n * @param renderService\n * @param drawContext\n * @param drawContribution\n * @param params\n */\n beforeSetInteractive(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n let interactiveGraphic: IGraphic = graphic.interactiveGraphic;\n if (graphic.attribute.globalZIndex) {\n if (!interactiveGraphic) {\n interactiveGraphic = graphic.clone();\n graphic.interactiveGraphic = interactiveGraphic;\n interactiveGraphic.baseGraphic = graphic;\n }\n // 设置位置\n // const m = graphic.globalTransMatrix;\n interactiveGraphic.setAttributes(\n {\n globalZIndex: 0,\n zIndex: graphic.attribute.globalZIndex\n },\n false,\n { skipUpdateCallback: true }\n );\n // 添加到交互层中\n drawContext.stage.tryInitInteractiveLayer();\n const interactiveLayer = drawContext.stage.getLayer('_builtin_interactive');\n if (interactiveLayer) {\n const shadowRoot = this.getShadowRoot(interactiveLayer);\n shadowRoot.add(interactiveGraphic);\n }\n return true;\n } else if (interactiveGraphic) {\n // 从交互层中删除\n drawContext.stage.tryInitInteractiveLayer();\n const interactiveLayer = drawContext.stage.getLayer('_builtin_interactive');\n if (interactiveLayer) {\n const shadowRoot = this.getShadowRoot(interactiveLayer);\n shadowRoot.removeChild(interactiveGraphic);\n }\n graphic.interactiveGraphic = null;\n interactiveGraphic.baseGraphic = null;\n }\n return false;\n }\n\n /**\n * 用于绘制interactive\n * @param graphic\n * @param renderService\n * @param drawContext\n * @param drawContribution\n * @param params\n */\n beforeDrawInteractive(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n // 默认使用原始的图元\n const baseGraphic = graphic.baseGraphic as IGraphic;\n if (baseGraphic) {\n this.processing = true;\n const { context } = drawContext;\n context.highPerformanceSave();\n // 直接transform\n context.setTransformFromMatrix(baseGraphic.parent.globalTransMatrix, true);\n // context.fillRect(0, 0, 100, 100);\n // 设置context的transform到上一个节点\n baseGraphic.isContainer\n ? drawContribution.renderGroup(baseGraphic as IGroup, drawContext, baseGraphic.parent.globalTransMatrix)\n : drawContribution.renderItem(baseGraphic, drawContext);\n\n context.highPerformanceRestore();\n this.processing = false;\n\n return true;\n }\n return false;\n }\n getShadowRoot(interactiveLayer: ILayer) {\n // 获取绑定影子节点的group\n let group = interactiveLayer.getElementById('_interactive_group') as IGroup;\n if (!group) {\n group = graphicCreator.CreateGraphic('group', {});\n group.id = '_interactive_group';\n interactiveLayer.add(group);\n }\n return group.shadowRoot ?? group.attachShadow();\n }\n}\n\n/**\n * 3d拦截器,用于渲染3d视角\n */\n// @injectable()\nexport class Canvas3DDrawItemInterceptor implements IDrawItemInterceptorContribution {\n // canvas?: ICanvas;\n order: number = 1;\n\n beforeDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ) {\n if (!graphic.in3dMode || drawContext.in3dInterceptor) {\n return false;\n }\n\n drawContext.in3dInterceptor = true;\n const { context, stage } = renderService.drawParams;\n const canvas = context.canvas;\n\n // 使用3d模式渲染\n context.save();\n this.initCanvasCtx(context);\n context.camera = stage.camera;\n\n // 将三维矩阵换成四维矩阵\n const m = context.currentMatrix;\n m.a /= context.dpr;\n m.b /= context.dpr;\n m.c /= context.dpr;\n m.d /= context.dpr;\n m.e /= context.dpr;\n m.f /= context.dpr;\n const matrix = mat4Allocate.allocate();\n mat3Tomat4(matrix, m);\n const lastModelMatrix = context.modelMatrix;\n if (lastModelMatrix) {\n if (matrix) {\n const m = mat4Allocate.allocate();\n context.modelMatrix = multiplyMat4Mat4(m, lastModelMatrix, matrix);\n }\n } else {\n context.modelMatrix = matrix;\n }\n context.setTransform(1, 0, 0, 1, 0, 0, true);\n\n // 设置context的transform到上一个节点\n if (graphic.isContainer) {\n // hack逻辑,如果是饼图的话,需要依次绘制不同的边\n let isPie: boolean = false;\n let is3d: boolean = false;\n graphic.forEachChildren((c: IGraphic) => {\n isPie = c.numberType === ARC3D_NUMBER_TYPE;\n return !isPie;\n });\n graphic.forEachChildren((c: IGraphic) => {\n is3d = !!c.findFace;\n return !is3d;\n });\n if (isPie) {\n const children = graphic.getChildren() as IArc[];\n // 绘制内层\n // drawContext.hack_pieFace = 'inside';\n // drawContribution.renderGroup(graphic as IGroup, drawContext);\n // 绘制底部\n // drawContext.hack_pieFace = 'bottom';\n // drawContribution.renderGroup(graphic as IGroup, drawContext);\n // 绘制外部\n // 排序一下\n const sortedChildren = [...children];\n sortedChildren.sort((a, b) => {\n let angle1 = ((a.attribute.startAngle ?? 0) + (a.attribute.endAngle ?? 0)) / 2;\n let angle2 = ((b.attribute.startAngle ?? 0) + (b.attribute.endAngle ?? 0)) / 2;\n while (angle1 < 0) {\n angle1 += pi2;\n }\n while (angle2 < 0) {\n angle2 += pi2;\n }\n return angle2 - angle1;\n });\n sortedChildren.forEach(c => {\n c._next = null;\n c._prev = null;\n });\n graphic.removeAllChild();\n graphic.update();\n sortedChildren.forEach(c => {\n graphic.appendChild(c);\n });\n const m = graphic.parent.globalTransMatrix;\n drawContext.hack_pieFace = 'outside';\n drawContribution.renderGroup(graphic as IGroup, drawContext, m);\n // 绘制内部\n drawContext.hack_pieFace = 'inside';\n drawContribution.renderGroup(graphic as IGroup, drawContext, m);\n // 绘制顶部\n drawContext.hack_pieFace = 'top';\n drawContribution.renderGroup(graphic as IGroup, drawContext, m);\n graphic.removeAllChild();\n children.forEach(c => {\n c._next = null;\n c._prev = null;\n });\n children.forEach(c => {\n graphic.appendChild(c);\n });\n } else if (is3d) {\n // 排序这些图元\n const children = graphic.getChildren() as IGraphic[];\n const zChildren = children.map(g => {\n const face3d = g.findFace();\n const vertices = face3d.vertices;\n // 计算每个顶点的view\n const viewdVerticesZ = vertices.map(v => {\n return context.view(v[0], v[1], v[2] + g.attribute.z ?? 0)[2];\n });\n const ave_z = viewdVerticesZ.reduce((a, b) => a + b, 0);\n return {\n ave_z,\n g\n };\n });\n zChildren.sort((a, b) => b.ave_z - a.ave_z);\n graphic.removeAllChild();\n zChildren.forEach(i => {\n i.g._next = null;\n i.g._prev = null;\n });\n graphic.update();\n zChildren.forEach(i => {\n graphic.add(i.g);\n });\n\n drawContribution.renderGroup(graphic as IGroup, drawContext, graphic.parent.globalTransMatrix, true);\n\n graphic.removeAllChild();\n children.forEach(g => {\n g._next = null;\n g._prev = null;\n });\n graphic.update();\n children.forEach(g => {\n graphic.add(g);\n });\n } else {\n drawContribution.renderGroup(graphic as IGroup, drawContext, graphic.parent.globalTransMatrix);\n }\n } else {\n drawContribution.renderItem(graphic, drawContext);\n }\n context.camera = null;\n context.restore();\n\n if (context.modelMatrix !== lastModelMatrix) {\n mat4Allocate.free(context.modelMatrix);\n }\n context.modelMatrix = lastModelMatrix;\n\n drawContext.in3dInterceptor = false;\n return true;\n }\n\n initCanvasCtx(context: IContext2d) {\n context.setTransformForCurrent();\n }\n}\n","// 解析字符串gradient-color\n/**\n * The MIT License (MIT)\n\n Copyright (c) 2014 Rafael Carício\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n */\n// Copyright (c) 2014 Rafael Caricio. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport { pi, pi2 } from '@visactor/vutils';\nimport type { IColor, IConicalGradient, ILinearGradient, IRadialGradient } from '../interface';\n\n// @ts-ignore\n\nconst parse = (function () {\n const tokens = {\n linearGradient: /^(linear\\-gradient)/i,\n radialGradient: /^(radial\\-gradient)/i,\n conicGradient: /^(conic\\-gradient)/i,\n sideOrCorner:\n /^to (left (top|bottom)|right (top|bottom)|top (left|right)|bottom (left|right)|left|right|top|bottom)/i,\n extentKeywords: /^(closest\\-side|closest\\-corner|farthest\\-side|farthest\\-corner|contain|cover)/,\n positionKeywords: /^(left|center|right|top|bottom)/i,\n pixelValue: /^(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))px/,\n percentageValue: /^(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))\\%/,\n emValue: /^(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))em/,\n angleValue: /^(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))deg/,\n fromAngleValue: /^from\\s*(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))deg/,\n startCall: /^\\(/,\n endCall: /^\\)/,\n comma: /^,/,\n hexColor: /(^\\#[0-9a-fA-F]+)/,\n literalColor: /^([a-zA-Z]+)/,\n rgbColor: /^(rgb\\(\\d{1,3},\\s*\\d{1,3},\\s*\\d{1,3}\\))/i,\n rgbaColor: /^(rgba\\(\\d{1,3},\\s*\\d{1,3},\\s*\\d{1,3},\\s*((\\d\\.\\d+)|\\d{1,3})\\))/i,\n number: /^(([0-9]*\\.[0-9]+)|([0-9]+\\.?))/\n };\n\n let input = '';\n\n function error(msg: any) {\n const err: any = new Error(input + ': ' + msg);\n err.source = input;\n throw err;\n }\n\n function getAST() {\n const ast = matchListDefinitions();\n\n if (input.length > 0) {\n error('Invalid input not EOF');\n }\n\n return ast;\n }\n\n function matchListDefinitions() {\n return matchListing(matchDefinition);\n }\n\n function matchDefinition() {\n return (\n matchGradient('linear', tokens.linearGradient, matchLinearOrientation) ||\n matchGradient('radial', tokens.radialGradient, matchListRadialOrientations) ||\n matchGradient('conic', tokens.conicGradient, matchConicalOrientation)\n );\n }\n\n function matchGradient(gradientType: string, pattern: RegExp, orientationMatcher: any) {\n return matchCall(pattern, function (captures: any) {\n const orientation = orientationMatcher();\n if (orientation) {\n if (!scan(tokens.comma)) {\n error('Missing comma before color stops');\n }\n }\n\n return {\n type: gradientType,\n orientation: orientation,\n colorStops: matchListing(matchColorStop)\n };\n });\n }\n\n function matchCall(pattern: RegExp, callback: any) {\n const captures = scan(pattern);\n\n if (captures) {\n if (!scan(tokens.startCall)) {\n error('Missing (');\n }\n\n const result = callback(captures);\n\n if (!scan(tokens.endCall)) {\n error('Missing )');\n }\n\n return result;\n }\n }\n\n function matchLinearOrientation() {\n return matchSideOrCorner() || matchAngle();\n }\n function matchConicalOrientation() {\n return matchFromAngle();\n }\n\n function matchSideOrCorner() {\n return match('directional', tokens.sideOrCorner, 1);\n }\n\n function matchAngle() {\n return match('angular', tokens.angleValue, 1);\n }\n function matchFromAngle() {\n return match('angular', tokens.fromAngleValue, 1);\n }\n\n function matchListRadialOrientations() {\n let radialOrientations;\n let radialOrientation = matchRadialOrientation();\n let lookaheadCache;\n\n if (radialOrientation) {\n radialOrientations = [];\n radialOrientations.push(radialOrientation);\n\n lookaheadCache = input;\n if (scan(tokens.comma)) {\n radialOrientation = matchRadialOrientation();\n if (radialOrientation) {\n radialOrientations.push(radialOrientation);\n } else {\n input = lookaheadCache;\n }\n }\n }\n\n return radialOrientations;\n }\n\n function matchRadialOrientation() {\n let radialType: any = matchCircle() || matchEllipse();\n\n if (radialType) {\n radialType.at = matchAtPosition();\n } else {\n const extent = matchExtentKeyword();\n if (extent) {\n radialType = extent;\n const positionAt = matchAtPosition();\n if (positionAt) {\n radialType.at = positionAt;\n }\n } else {\n const defaultPosition = matchPositioning();\n if (defaultPosition) {\n radialType = {\n type: 'default-radial',\n at: defaultPosition\n };\n }\n }\n }\n\n return radialType;\n }\n\n function matchCircle() {\n const circle: any = match('shape', /^(circle)/i, 0);\n\n if (circle) {\n circle.style = matchLength() || matchExtentKeyword();\n }\n\n return circle;\n }\n\n function matchEllipse() {\n const ellipse: any = match('shape', /^(ellipse)/i, 0);\n\n if (ellipse) {\n ellipse.style = matchDistance() || matchExtentKeyword();\n }\n\n return ellipse;\n }\n\n function matchExtentKeyword() {\n return match('extent-keyword', tokens.extentKeywords, 1);\n }\n\n function matchAtPosition() {\n if (match('position', /^at/, 0)) {\n const positioning = matchPositioning();\n\n if (!positioning) {\n error('Missing positioning value');\n }\n\n return positioning;\n }\n }\n\n function matchPositioning() {\n const location = matchCoordinates();\n\n if (location.x || location.y) {\n return {\n type: 'position',\n value: location\n };\n }\n }\n\n function matchCoordinates() {\n return {\n x: matchDistance(),\n y: matchDistance()\n };\n }\n\n function matchListing(matcher: any) {\n let captures = matcher();\n const result = [];\n\n if (captures) {\n result.push(captures);\n while (scan(tokens.comma)) {\n captures = matcher();\n if (captures) {\n result.push(captures);\n } else {\n error('One extra comma');\n }\n }\n }\n\n return result;\n }\n\n function matchColorStop() {\n const color: any = matchColor();\n\n if (!color) {\n error('Expected color definition');\n }\n\n color.length = matchDistance();\n return color;\n }\n\n function matchColor() {\n return matchHexColor() || matchRGBAColor() || matchRGBColor() || matchLiteralColor();\n }\n\n function matchLiteralColor() {\n return match('literal', tokens.literalColor, 0);\n }\n\n function matchHexColor() {\n return match('hex', tokens.hexColor, 1);\n }\n\n function matchRGBColor() {\n return match('rgb', tokens.rgbColor, 1);\n }\n\n function matchRGBAColor() {\n return match('rgba', tokens.rgbaColor, 1);\n }\n\n function matchNumber() {\n return scan(tokens.number)[1];\n }\n\n function matchDistance() {\n return match('%', tokens.percentageValue, 1) || matchPositionKeyword() || matchLength();\n }\n\n function matchPositionKeyword() {\n return match('position-keyword', tokens.positionKeywords, 1);\n }\n\n function matchLength() {\n return match('px', tokens.pixelValue, 1) || match('em', tokens.emValue, 1);\n }\n\n function match(type: string, pattern: RegExp, captureIndex: number) {\n const captures = scan(pattern);\n if (captures) {\n return {\n type: type,\n value: captures[captureIndex]\n };\n }\n }\n\n function scan(regexp: RegExp) {\n const blankCaptures = /^[\\n\\r\\t\\s]+/.exec(input);\n if (blankCaptures) {\n consume(blankCaptures[0].length);\n }\n\n const captures = regexp.exec(input);\n if (captures) {\n consume(captures[0].length);\n }\n\n return captures;\n }\n\n function consume(size: number) {\n input = input.substr(size);\n }\n\n return function (code: string) {\n input = code.toString();\n return getAST();\n };\n})();\n\nexport class GradientParser {\n static IsGradient(c: IColor) {\n return !(typeof c === 'string' && c.length < 10);\n }\n\n static IsGradientStr(c: IColor) {\n return typeof c === 'string' && c.length > 10;\n }\n\n static Parse(c: IColor): IColor {\n if (GradientParser.IsGradientStr(c)) {\n try {\n const data = parse(c as string);\n const datum = data[0];\n if (datum) {\n if (datum.type === 'linear') {\n return GradientParser.ParseLinear(datum);\n } else if (datum.type === 'radial') {\n return GradientParser.ParseRadial(datum);\n } else if (datum.type === 'conic') {\n return GradientParser.ParseConic(datum);\n }\n }\n } catch (err) {\n return c;\n }\n }\n return c;\n }\n private static ParseConic(datum: any): IConicalGradient {\n const { orientation, colorStops = [] } = datum;\n const halfPi = pi / 2;\n const sa = (parseFloat(orientation.value) / 180) * pi - halfPi;\n return {\n gradient: 'conical',\n x: 0.5,\n y: 0.5,\n startAngle: sa,\n endAngle: sa + pi2,\n stops: colorStops.map((item: any) => {\n return {\n color: item.value,\n offset: parseFloat(item.length.value) / 100\n };\n })\n };\n }\n private static ParseRadial(datum: any): IRadialGradient {\n const { colorStops = [] } = datum;\n return {\n gradient: 'radial',\n x0: 0.5,\n y0: 0.5,\n x1: 0.5,\n y1: 0.5,\n r0: 0,\n r1: 1,\n stops: colorStops.map((item: any) => {\n return {\n color: item.value,\n offset: parseFloat(item.length.value) / 100\n };\n })\n };\n }\n private static ParseLinear(datum: any): ILinearGradient {\n const { orientation, colorStops = [] } = datum;\n const halfPi = pi / 2;\n let angle = orientation.type === 'angular' ? (parseFloat(orientation.value) / 180) * pi : 0;\n while (angle < 0) {\n angle += pi2;\n }\n while (angle > pi2) {\n angle -= pi2;\n }\n let x0 = 0;\n let y0 = 0;\n let x1 = 0;\n let y1 = 0;\n if (angle < halfPi) {\n x0 = 0;\n y0 = 1;\n x1 = Math.sin(angle);\n y1 = Math.cos(angle);\n } else if (angle < pi) {\n x0 = 0;\n y0 = 0;\n x1 = Math.cos(angle - halfPi);\n y1 = Math.sin(angle - halfPi);\n } else if (angle < pi + halfPi) {\n x0 = 1;\n y0 = 0;\n x1 = x0 - Math.sin(angle - pi);\n y1 = Math.cos(angle - pi);\n } else {\n x0 = 1;\n y0 - 1;\n x1 = x0 - Math.cos(angle - halfPi - pi);\n y1 = y1 - Math.sin(angle - halfPi - pi);\n }\n return {\n gradient: 'linear',\n x0,\n y0,\n x1,\n y1,\n stops: colorStops.map((item: any) => {\n return {\n color: item.value,\n offset: parseFloat(item.length.value) / 100\n };\n })\n };\n }\n}\n","import type { IColor, IConicalGradient, ILinearGradient, IRadialGradient } from '../interface/color';\nimport type { IContext2d, ITransform } from '../interface';\nimport { ICommonStyleParams } from '../interface';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport { IMatrix, isArray } from '@visactor/vutils';\nimport { GradientParser } from './color-utils';\n\nexport function getScaledStroke(context: IContext2d, width: number, dpr: number) {\n let strokeWidth = width;\n const { a, b, c, d } = context.currentMatrix;\n const scaleX = Math.sign(a) * Math.sqrt(a * a + b * b);\n const scaleY = Math.sign(d) * Math.sqrt(c * c + d * d);\n // 如果没有scaleX和scaleY,那么认为什么都不用绘制\n if (scaleX + scaleY === 0) {\n return 0;\n }\n strokeWidth = (strokeWidth / Math.abs(scaleX + scaleY)) * 2 * dpr;\n return strokeWidth;\n}\n\nexport function createColor(\n context: IContext2d,\n c: string | IColor | Array | boolean,\n params: { AABBBounds?: IBoundsLike; attribute?: Partial },\n offsetX: number,\n offsetY: number\n): string | CanvasGradient {\n if (!c || c === true) {\n return 'black';\n }\n let result: string | CanvasGradient | undefined;\n let color: string | IColor;\n if (isArray(c)) {\n for (let i = 0; i < c.length; i++) {\n color = c[i];\n if (color) {\n break;\n }\n }\n } else {\n color = c;\n }\n color = GradientParser.Parse(color);\n if (typeof color === 'string') {\n return color;\n }\n // TODO 不同scaleCenter有问题\n if (color.gradient === 'linear') {\n result = createLinearGradient(context, color, params, offsetX, offsetY);\n } else if (color.gradient === 'conical') {\n result = createConicGradient(context, color, params, offsetX, offsetY);\n } else if (color.gradient === 'radial') {\n result = createRadialGradient(context, color, params, offsetX, offsetY);\n }\n return result || 'orange';\n}\n\nfunction createLinearGradient(\n context: IContext2d,\n color: ILinearGradient,\n params: { AABBBounds?: IBoundsLike; attribute?: Partial },\n offsetX: number = 0,\n offsetY: number = 0\n) {\n const bounds = params.AABBBounds;\n if (!bounds) {\n return;\n }\n let w = bounds.x2 - bounds.x1;\n let h = bounds.y2 - bounds.y1;\n let x = bounds.x1 - offsetX;\n let y = bounds.y1 - offsetY;\n if (params.attribute) {\n const { scaleX = 1, scaleY = 1 } = params.attribute;\n if (scaleX * scaleY === 0) {\n return;\n }\n w /= scaleX;\n h /= scaleY;\n x /= scaleX;\n y /= scaleY;\n }\n\n const canvasGradient = context.createLinearGradient(\n x + (color.x0 ?? 0) * w,\n y + (color.y0 ?? 0) * h,\n x + (color.x1 ?? 1) * w,\n y + (color.y1 ?? 0) * h\n );\n color.stops.forEach(stop => {\n canvasGradient.addColorStop(stop.offset, stop.color);\n });\n return canvasGradient;\n}\n\nfunction createRadialGradient(\n context: IContext2d,\n color: IRadialGradient,\n params: { AABBBounds?: IBoundsLike; attribute?: Partial },\n offsetX: number = 0,\n offsetY: number = 0\n) {\n const bounds = params.AABBBounds;\n if (!bounds) {\n return;\n }\n let w = bounds.x2 - bounds.x1;\n let h = bounds.y2 - bounds.y1;\n let x = bounds.x1 - offsetX;\n let y = bounds.y1 - offsetY;\n if (params.attribute) {\n const { scaleX = 1, scaleY = 1 } = params.attribute;\n if (scaleX * scaleY === 0) {\n return;\n }\n x /= scaleX;\n y /= scaleY;\n w /= scaleX;\n h /= scaleY;\n }\n const canvasGradient = context.createRadialGradient(\n x + (color.x0 ?? 0.5) * w,\n y + (color.y0 ?? 0.5) * h,\n Math.max(w, h) * (color.r0 ?? 0),\n x + (color.x1 ?? 0.5) * w,\n y + (color.y1 ?? 0.5) * h,\n Math.max(w, h) * (color.r1 ?? 0.5)\n );\n color.stops.forEach(stop => {\n canvasGradient.addColorStop(stop.offset, stop.color);\n });\n return canvasGradient;\n}\n\nfunction createConicGradient(\n context: IContext2d,\n color: IConicalGradient,\n params: { AABBBounds?: IBoundsLike; attribute?: Partial },\n offsetX: number = 0,\n offsetY: number = 0\n) {\n const bounds = params.AABBBounds;\n if (!bounds) {\n return;\n }\n let w = bounds.x2 - bounds.x1;\n let h = bounds.y2 - bounds.y1;\n let x = bounds.x1 - offsetX;\n let y = bounds.y1 - offsetY;\n if (params.attribute) {\n const { scaleX = 1, scaleY = 1 } = params.attribute;\n if (scaleX * scaleY === 0) {\n return;\n }\n w /= scaleX;\n h /= scaleY;\n x /= scaleX;\n y /= scaleY;\n }\n\n const canvasGradient = context.createConicGradient(\n x + (color.x ?? 0) * w,\n y + (color.y ?? 0) * h,\n color.startAngle,\n color.endAngle\n );\n color.stops.forEach(stop => {\n canvasGradient.addColorStop(stop.offset, stop.color);\n });\n\n let deltaAngle;\n return (canvasGradient as any).GetPattern(w + x, h + y, deltaAngle);\n}\n","import type { IAABBBounds, IAABBBoundsLike } from '@visactor/vutils';\nimport { AABBBounds } from '@visactor/vutils';\nimport type { Releaseable, IAllocate } from '../interface';\n\nexport const BoundsAllocate = Symbol.for('BoundsAllocate');\n\nexport class DefaultBoundsAllocate implements IAllocate, Releaseable {\n protected pools: IAABBBounds[] = [];\n constructor() {\n // 默认添加10个\n for (let i = 0; i < 10; i++) {\n this.pools.push(new AABBBounds());\n }\n }\n allocate(x1: number, y1: number, x2: number, y2: number): IAABBBounds {\n if (!this.pools.length) {\n return new AABBBounds().setValue(x1, y1, x2, y2);\n }\n const b = this.pools.pop();\n b.x1 = x1;\n b.y1 = y1;\n b.x2 = x2;\n b.y2 = y2;\n return b;\n }\n allocateByObj(b: IAABBBounds): IAABBBounds {\n if (!this.pools.length) {\n return new AABBBounds(b as any);\n }\n const _b = this.pools.pop() as any;\n _b.x1 = b.x1;\n _b.y1 = b.y1;\n _b.x2 = b.x2;\n _b.y2 = b.y2;\n return _b;\n }\n free(b: IAABBBounds) {\n this.pools.push(b);\n }\n get length(): number {\n return this.pools.length;\n }\n release(...params: any): void {\n this.pools = [];\n }\n}\n\nexport const boundsAllocate = new DefaultBoundsAllocate();\n","import { injectable, inject, named, multiInject } from '../../../common/inversify-lite';\nimport type {\n IContext2d,\n MaybePromise,\n IGraphic,\n IGroup,\n IDrawContext,\n IRenderService,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IContributionProvider,\n IDrawItemInterceptorContribution,\n IDrawContribution,\n IRenderSelector,\n IGlobal\n} from '../../../interface';\nimport { findNextGraphic, foreach } from '../../../common/sort';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport { DefaultAttribute } from '../../../graphic';\nimport type { IAABBBounds, IBounds, IBoundsLike, IMatrix, IMatrixLike } from '@visactor/vutils';\nimport { Bounds, Logger, getRectIntersect, isRectIntersect, last } from '@visactor/vutils';\nimport { LayerService } from '../../../core/constants';\nimport { container } from '../../../container';\nimport { GraphicRender, IncrementalDrawContribution, RenderSelector } from './symbol';\nimport { DrawItemInterceptor } from './draw-interceptor';\nimport { createColor } from '../../../common/canvas-utils';\nimport type { ILayerService } from '../../../interface/core';\nimport { boundsAllocate } from '../../../allocator/bounds-allocate';\nimport { matrixAllocate } from '../../../allocator/matrix-allocate';\nimport { application } from '../../../application';\n\n/**\n * 默认的渲染contribution,基于树状结构针对图元的渲染\n */\n@injectable()\nexport class DefaultDrawContribution implements IDrawContribution {\n declare currentRenderMap: Map;\n declare defaultRenderMap: Map;\n declare styleRenderMap: Map>;\n declare dirtyBounds: IBounds;\n declare backupDirtyBounds: IBounds;\n // 是否使用dirtyBounds\n declare useDirtyBounds: boolean;\n declare currentRenderService: IRenderService;\n declare InterceptorContributions: IDrawItemInterceptorContribution[];\n\n declare global: IGlobal;\n declare layerService: ILayerService;\n\n constructor(\n // @inject(ContributionProvider)\n // @named(GraphicRender)\n // protected readonly contributions: ContributionProvider,\n @multiInject(GraphicRender) protected readonly contributions: IGraphicRender[],\n // @inject(RenderSelector) protected readonly renderSelector: IRenderSelector, // 根据图元类型选择对应的renderItem进行渲染\n // 拦截器\n @inject(ContributionProvider)\n @named(DrawItemInterceptor)\n protected readonly drawItemInterceptorContributions: IContributionProvider\n ) {\n this.currentRenderMap = new Map();\n this.defaultRenderMap = new Map();\n this.styleRenderMap = new Map();\n this.dirtyBounds = new Bounds();\n this.backupDirtyBounds = new Bounds();\n this.global = application.global;\n this.layerService = application.layerService;\n this.init();\n }\n\n init() {\n this.contributions.forEach(item => {\n if (item.style) {\n const map = this.styleRenderMap.get(item.style) || new Map();\n map.set(item.numberType, item);\n this.styleRenderMap.set(item.style, map);\n } else {\n this.defaultRenderMap.set(item.numberType, item);\n }\n });\n this.InterceptorContributions = this.drawItemInterceptorContributions\n .getContributions()\n .sort((a, b) => a.order - b.order);\n }\n\n prepareForDraw(renderService: IRenderService, drawContext: IDrawContext) {\n // 有dirtyBounds用dirtyBounds\n if (drawContext.updateBounds) {\n this.useDirtyBounds = true;\n } else {\n // 没有的话,看看是否需要跳过outRange的渲染\n this.useDirtyBounds = !drawContext.stage.params.optimize.disableCheckGraphicWidthOutRange;\n }\n }\n\n draw(renderService: IRenderService, drawContext: IDrawContext): MaybePromise {\n this.prepareForDraw(renderService, drawContext);\n drawContext.drawContribution = this;\n this.currentRenderMap = this.styleRenderMap.get(drawContext.renderStyle) || this.defaultRenderMap;\n // this.startAtId = drawParams.startAtId;\n this.currentRenderService = renderService;\n // this.drawParams = drawParams;\n const { context, stage, x = 0, y = 0, width, height } = drawContext;\n\n if (!context) {\n return;\n }\n // if (context.drawPromise) {\n // return;\n // }\n const dirtyBounds: IBounds | undefined = this.dirtyBounds.setValue(0, 0, width, height);\n if (stage.dirtyBounds && !stage.dirtyBounds.empty()) {\n const b = getRectIntersect(dirtyBounds, stage.dirtyBounds, false);\n dirtyBounds.x1 = Math.floor(b.x1);\n dirtyBounds.y1 = Math.floor(b.y1);\n dirtyBounds.x2 = Math.ceil(b.x2);\n dirtyBounds.y2 = Math.ceil(b.y2);\n }\n // 如果dpr不是整数或者.5的小数,需要格式化dirtyBounds\n const d = context.dpr % 1;\n if (d || d !== 0.5) {\n dirtyBounds.x1 = Math.floor(dirtyBounds.x1 * context.dpr) / context.dpr;\n dirtyBounds.y1 = Math.floor(dirtyBounds.y1 * context.dpr) / context.dpr;\n dirtyBounds.x2 = Math.ceil(dirtyBounds.x2 * context.dpr) / context.dpr;\n dirtyBounds.y2 = Math.ceil(dirtyBounds.y2 * context.dpr) / context.dpr;\n }\n this.backupDirtyBounds.copy(dirtyBounds);\n context.inuse = true;\n // 初始化context\n context.clearMatrix();\n context.setTransformForCurrent(true);\n\n const drawInArea =\n dirtyBounds.width() * context.dpr < context.canvas.width ||\n dirtyBounds.height() * context.dpr < context.canvas.height;\n context.save();\n\n // 设置translate\n context.translate(x, y, true);\n if (drawInArea) {\n context.beginPath();\n context.rect(dirtyBounds.x1, dirtyBounds.y1, dirtyBounds.width(), dirtyBounds.height());\n context.clip();\n }\n\n // 如果存在3d视角,那么不使用dirtyBounds\n if (stage.camera) {\n this.dirtyBounds.setValue(-Infinity, -Infinity, Infinity, Infinity);\n this.backupDirtyBounds.setValue(-Infinity, -Infinity, Infinity, Infinity);\n }\n\n this.clearScreen(renderService, context, drawContext);\n // // 渲染的时候图元的起始位置就是x,y\n // this.backupDirtyBounds.translate(-x, -y);\n // this.dirtyBounds.translate(-x, -y);\n\n // // 设置translate\n // context.translate(x, y, true);\n\n context.save();\n renderService.renderTreeRoots\n .sort((a, b) => {\n return (a.attribute.zIndex ?? DefaultAttribute.zIndex) - (b.attribute.zIndex ?? DefaultAttribute.zIndex);\n })\n .forEach(group => {\n group.isContainer\n ? this.renderGroup(group as IGroup, drawContext, matrixAllocate.allocate(1, 0, 0, 1, 0, 0))\n : this.renderItem(group as IGraphic, drawContext);\n });\n\n context.restore();\n context.restore();\n context.draw();\n // this.break = false;\n context.inuse = false;\n }\n\n doRegister() {\n throw new Error('暂不支持');\n }\n\n // 找到下一个graphic\n protected _findNextGraphic(group: IGroup): IGraphic | null {\n let parent = group.parent;\n let id = group._uid;\n while (parent) {\n const g = findNextGraphic(parent, id, DefaultAttribute.zIndex);\n if (g) {\n return g;\n }\n id = parent._uid;\n parent = parent.parent;\n }\n return null;\n }\n\n renderGroup(group: IGroup, drawContext: IDrawContext, parentMatrix: IMatrix, skipSort?: boolean) {\n if (drawContext.break || group.attribute.visibleAll === false) {\n return;\n }\n if (group.incremental && (drawContext.startAtId == null || drawContext.startAtId === group._uid)) {\n drawContext.break = true;\n this._increaseRender(group, drawContext);\n return;\n }\n\n if (this.useDirtyBounds && !isRectIntersect(group.AABBBounds, this.dirtyBounds, false)) {\n return;\n }\n\n let nextM: IMatrix = parentMatrix;\n let tempBounds: IBounds;\n\n if (this.useDirtyBounds) {\n tempBounds = boundsAllocate.allocateByObj(this.dirtyBounds);\n // 变换dirtyBounds\n const gm = group.transMatrix;\n nextM = matrixAllocate.allocateByObj(parentMatrix).multiply(gm.a, gm.b, gm.c, gm.d, gm.e, gm.f);\n // const m = group.globalTransMatrix.getInverse();\n this.dirtyBounds.copy(this.backupDirtyBounds).transformWithMatrix(nextM.getInverse());\n }\n\n this.renderItem(group, drawContext, {\n drawingCb: () => {\n skipSort\n ? group.forEachChildren((item: IGraphic) => {\n if (drawContext.break) {\n return;\n }\n if (item.isContainer) {\n this.renderGroup(item as IGroup, drawContext, nextM);\n } else {\n this.renderItem(item, drawContext);\n }\n })\n : foreach(\n group,\n DefaultAttribute.zIndex,\n (item: IGraphic) => {\n if (drawContext.break) {\n return;\n }\n if (item.isContainer) {\n this.renderGroup(item as IGroup, drawContext, nextM);\n } else {\n this.renderItem(item, drawContext);\n }\n },\n false,\n !!drawContext.context?.camera\n );\n }\n });\n\n if (this.useDirtyBounds) {\n this.dirtyBounds.copy(tempBounds);\n boundsAllocate.free(tempBounds);\n matrixAllocate.free(nextM);\n }\n }\n\n protected _increaseRender(group: IGroup, drawContext: IDrawContext) {\n const { layer, stage } = drawContext;\n const { subLayers } = layer;\n // 获取渐进渲染层\n let incrementalLayer = subLayers.get(group._uid);\n if (!incrementalLayer) {\n incrementalLayer = {\n layer: this.layerService.createLayer(stage),\n zIndex: subLayers.size,\n group\n };\n subLayers.set(group._uid, incrementalLayer);\n }\n // 渲染\n const incrementalContext = incrementalLayer.layer.getNativeHandler().getContext();\n const idc = incrementalLayer.drawContribution || container.get(IncrementalDrawContribution);\n idc.dirtyBounds.setValue(-Infinity, -Infinity, Infinity, Infinity);\n idc.backupDirtyBounds.setValue(-Infinity, -Infinity, Infinity, Infinity);\n (idc as any).draw(this.currentRenderService, {\n ...drawContext,\n drawContribution: idc,\n clear: 'transparent',\n layer: incrementalLayer.layer,\n context: incrementalContext,\n startAtId: group._uid,\n break: false\n });\n incrementalLayer.drawContribution = idc;\n // this.draw(this.currentRenderService, {...this.drawParams, startAtId: group._uid})\n // this.draw(this.currentRenderService, {...this.drawParams, clear: 'transparent', layer: incrementalContext.layer, context: incrementalContext, startAtId: group._uid})\n const nextGraphic = this._findNextGraphic(group);\n if (nextGraphic) {\n // 如果是下一个渐进渲染层,那就再来一次\n if (nextGraphic.isContainer && nextGraphic.incremental) {\n this._increaseRender(nextGraphic as IGroup, drawContext);\n } else {\n // 如果不是渐进渲染层,那就默认图层渲染\n let afterLayer = subLayers.get(nextGraphic._uid);\n if (!afterLayer) {\n afterLayer = {\n layer: this.layerService.createLayer(stage),\n zIndex: subLayers.size\n };\n subLayers.set(nextGraphic._uid, afterLayer);\n }\n const afterContext = afterLayer.layer.getNativeHandler().getContext();\n this.draw(this.currentRenderService, {\n ...drawContext,\n drawContribution: idc,\n clear: 'transparent',\n layer: afterLayer.layer,\n context: afterContext,\n startAtId: nextGraphic._uid,\n break: false\n });\n }\n }\n }\n\n getRenderContribution(graphic: IGraphic): IGraphicRender | null {\n // let renderer = this.renderSelector.selector(graphic);\n let renderer;\n if (!renderer) {\n renderer = this.selectRenderByNumberType(graphic.numberType);\n }\n if (!renderer) {\n renderer = this.selectRenderByType(graphic.type);\n }\n return renderer;\n }\n\n renderItem(graphic: IGraphic, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n // 添加拦截器\n if (this.InterceptorContributions.length) {\n for (let i = 0; i < this.InterceptorContributions.length; i++) {\n const drawContribution = this.InterceptorContributions[i];\n if (\n drawContribution.beforeDrawItem &&\n drawContribution.beforeDrawItem(graphic, this.currentRenderService, drawContext, this, params)\n ) {\n return;\n }\n }\n }\n\n const renderer = this.getRenderContribution(graphic);\n if (!renderer) {\n return;\n }\n\n let retrans: boolean = false;\n let tempBounds: IAABBBounds;\n\n if (graphic.parent) {\n const { scrollX = 0, scrollY = 0 } = graphic.parent.attribute;\n retrans = !!(scrollX || scrollY);\n if (retrans) {\n tempBounds = this.dirtyBounds.clone();\n // 变换dirtyBounds\n const m = graphic.globalTransMatrix.getInverse();\n this.dirtyBounds.copy(this.backupDirtyBounds).transformWithMatrix(m);\n this.dirtyBounds.translate(-scrollX, -scrollY);\n }\n }\n\n if (this.useDirtyBounds && !(graphic.isContainer || isRectIntersect(graphic.AABBBounds, this.dirtyBounds, false))) {\n retrans && this.dirtyBounds.copy(tempBounds);\n return;\n }\n\n const skipDraw = drawContext.startAtId != null && graphic._uid !== drawContext.startAtId;\n if (graphic._uid === drawContext.startAtId) {\n drawContext.startAtId = null;\n }\n params && (params.skipDraw = skipDraw);\n if (skipDraw) {\n graphic.isContainer && renderer.draw(graphic, this.currentRenderService, drawContext, params);\n } else {\n renderer.draw(graphic, this.currentRenderService, drawContext, params);\n }\n\n retrans && this.dirtyBounds.copy(tempBounds);\n\n // 添加拦截器\n if (this.InterceptorContributions.length) {\n for (let i = 0; i < this.InterceptorContributions.length; i++) {\n const drawContribution = this.InterceptorContributions[i];\n if (drawContribution.afterDrawItem) {\n if (drawContribution.afterDrawItem(graphic, this.currentRenderService, drawContext, this)) {\n return;\n }\n }\n }\n }\n }\n // 根据type选择对应的render\n protected selectRenderByType(type?: string): IGraphicRender | null {\n Logger.getInstance().warn('未知错误,不应该走到这里');\n return null;\n }\n // 根据type选择对应的render\n protected selectRenderByNumberType(type?: number): IGraphicRender | null {\n return this.currentRenderMap.get(type) || this.defaultRenderMap.get(type);\n }\n\n protected clearScreen(renderService: IRenderService, context: IContext2d, drawContext: IDrawContext) {\n const { clear } = drawContext;\n if (clear) {\n const canvas = context.getCanvas();\n const { width = canvas.width, height = canvas.height } = drawContext;\n const x = 0;\n const y = 0;\n context.clearRect(x, y, width, height);\n const stage = renderService.drawParams?.stage;\n stage && (context.globalAlpha = (stage as any).attribute.opacity ?? 1);\n if (stage && (stage as any).backgroundImg && (stage as any).resources) {\n const res = (stage as any).resources.get(clear);\n if (res && res.state === 'success' && res.data) {\n context.drawImage(res.data, x, y, width, height);\n }\n } else {\n context.fillStyle = createColor(\n context,\n clear,\n {\n AABBBounds: { x1: x, y1: y, x2: x + width, y2: y + height }\n },\n 0,\n 0\n );\n context.fillRect(x, y, width, height);\n }\n }\n }\n\n afterDraw(renderService: IRenderService, drawParams: IDrawContext) {\n return;\n }\n}\n","import type { vec2, vec4 } from '@visactor/vutils';\nimport { isNumber, arrayEqual, pi, abs } from '@visactor/vutils';\nimport type { IContext2d, ICustomPath2D } from '../../interface';\n\nconst halfPi = pi / 2;\n\nexport function createRectPath(\n path: ICustomPath2D | IContext2d,\n x: number,\n y: number,\n width: number,\n height: number,\n rectCornerRadius: number | number[]\n) {\n if (width < 0) {\n x += width;\n width = -width;\n }\n if (height < 0) {\n y += height;\n height = -height;\n }\n // 匹配cornerRadius\n let cornerRadius: vec4;\n if (isNumber(rectCornerRadius, true)) {\n rectCornerRadius = abs(rectCornerRadius);\n cornerRadius = [\n rectCornerRadius,\n rectCornerRadius,\n rectCornerRadius,\n rectCornerRadius\n ];\n } else if (Array.isArray(rectCornerRadius)) {\n const cornerRadiusArr: number[] = rectCornerRadius as number[];\n let cr0;\n let cr1;\n let cr2;\n let cr3;\n switch (cornerRadiusArr.length) {\n case 0:\n cornerRadius = [0, 0, 0, 0];\n break;\n case 1:\n cr0 = abs(cornerRadiusArr[0]);\n cornerRadius = [cr0, cr0, cr0, cr0];\n break;\n case 2:\n case 3:\n cr0 = abs(cornerRadiusArr[0]);\n cr1 = abs(cornerRadiusArr[1]);\n cornerRadius = [cr0, cr1, cr0, cr1];\n break;\n default:\n cornerRadius = cornerRadiusArr as [number, number, number, number];\n cornerRadius[0] = abs(cornerRadius[0]);\n cornerRadius[1] = abs(cornerRadius[1]);\n cornerRadius[2] = abs(cornerRadius[2]);\n cornerRadius[3] = abs(cornerRadius[3]);\n break;\n }\n } else {\n cornerRadius = [0, 0, 0, 0];\n }\n\n // 当宽度小于0 或者 cornerRadius 极小时,不绘制 cornerRadius\n if (width < 0 || cornerRadius[0] + cornerRadius[1] + cornerRadius[2] + cornerRadius[3] < 1e-12) {\n return path.rect(x, y, width, height);\n }\n\n const [leftTop, rightTop, rightBottom, leftBottom]: [vec2, vec2, vec2, vec2] = [\n [x, y],\n [x + width, y],\n [x + width, y + height],\n [x, y + height]\n ];\n //\n // *(leftTopPoint1)******************(rightTopPoint1)\n // (leftTopPoint2) (rightTopPoint2)\n // * *\n // * *\n // (leftBottomPoint2) (rightBottomPoint2)\n // *(leftBottomPoint1)***************(rightBottomPoint1)\n //\n const maxCornerRadius = Math.min(width / 2, height / 2);\n const _cornerRadius: vec4 = [\n Math.min(maxCornerRadius, cornerRadius[0]),\n Math.min(maxCornerRadius, cornerRadius[1]),\n Math.min(maxCornerRadius, cornerRadius[2]),\n Math.min(maxCornerRadius, cornerRadius[3])\n ];\n const leftTopPoint1: vec2 = [leftTop[0] + _cornerRadius[0], leftTop[1]];\n const leftTopPoint2: vec2 = [leftTop[0], leftTop[1] + _cornerRadius[0]];\n const rightTopPoint1: vec2 = [rightTop[0] - _cornerRadius[1], rightTop[1]];\n const rightTopPoint2: vec2 = [rightTop[0], rightTop[1] + _cornerRadius[1]];\n const rightBottomPoint1: vec2 = [rightBottom[0] - _cornerRadius[2], rightBottom[1]];\n const rightBottomPoint2: vec2 = [rightBottom[0], rightBottom[1] - _cornerRadius[2]];\n const leftBottomPoint1: vec2 = [leftBottom[0] + _cornerRadius[3], leftBottom[1]];\n const leftBottomPoint2: vec2 = [leftBottom[0], leftBottom[1] - _cornerRadius[3]];\n\n path.moveTo(leftTopPoint1[0], leftTopPoint1[1]);\n path.lineTo(rightTopPoint1[0], rightTopPoint1[1]);\n if (!arrayEqual(rightTopPoint1, rightTopPoint2)) {\n const centerX = rightTopPoint1[0];\n const centerY = rightTopPoint1[1] + _cornerRadius[1];\n path.arc(\n centerX,\n centerY,\n _cornerRadius[1],\n -halfPi,\n 0,\n // Math.atan2(rightTopPoint1[1] - centerY, rightTopPoint1[0] - centerX),\n // Math.atan2(rightTopPoint2[1] - centerY, rightTopPoint2[0] - centerX),\n false\n );\n // path.arcTo(rightTop[0], rightTop[1], rightTopPoint2[0], rightTopPoint2[1], _cornerRadius[1]);\n }\n\n path.lineTo(rightBottomPoint2[0], rightBottomPoint2[1]);\n if (!arrayEqual(rightBottomPoint1, rightBottomPoint2)) {\n const centerX = rightBottomPoint2[0] - _cornerRadius[2];\n const centerY = rightBottomPoint2[1];\n path.arc(\n centerX,\n centerY,\n _cornerRadius[2],\n 0,\n halfPi,\n // Math.atan2(rightBottomPoint2[1] - centerY, rightBottomPoint2[0] - centerX),\n // Math.atan2(rightBottomPoint1[1] - centerY, rightBottomPoint1[0] - centerX),\n false\n );\n // path.arcTo(rightBottom[0], rightBottom[1], rightBottomPoint1[0], rightBottomPoint1[1], _cornerRadius[2]);\n }\n\n path.lineTo(leftBottomPoint1[0], leftBottomPoint1[1]);\n if (!arrayEqual(leftBottomPoint1, leftBottomPoint2)) {\n const centerX = leftBottomPoint1[0];\n const centerY = leftBottomPoint1[1] - _cornerRadius[3];\n path.arc(\n centerX,\n centerY,\n _cornerRadius[3],\n halfPi,\n pi,\n // Math.atan2(leftBottomPoint1[1] - centerY, leftBottomPoint1[0] - centerX),\n // Math.atan2(leftBottomPoint2[1] - centerY, leftBottomPoint2[0] - centerX),\n false\n );\n // path.arcTo(leftBottom[0], leftBottom[1], leftBottomPoint2[0], leftBottomPoint2[1], _cornerRadius[3]);\n }\n\n path.lineTo(leftTopPoint2[0], leftTopPoint2[1]);\n if (!arrayEqual(leftTopPoint1, leftTopPoint2)) {\n const centerX = leftTopPoint1[0];\n const centerY = leftTopPoint1[1] + _cornerRadius[0];\n path.arc(\n centerX,\n centerY,\n _cornerRadius[0],\n pi,\n pi + halfPi,\n // Math.atan2(leftTopPoint2[1] - centerY, leftTopPoint2[0] - centerX),\n // Math.atan2(leftTopPoint1[1] - centerY, leftTopPoint1[0] - centerX) + Math.PI * 2,\n false\n );\n // path.arcTo(leftTop[0], leftTop[1], leftTopPoint1[0], leftTopPoint1[1], _cornerRadius[0]);\n }\n path.closePath();\n return path;\n}\n","import { isArray, abs, acos, atan2, cos, epsilon, min, pi, sin, sqrt, pi2 } from '@visactor/vutils';\nimport { renderCommandList } from '../../../common/render-command-list';\nimport { getTheme } from '../../../graphic/theme';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IGraphic,\n IMarkAttribute,\n IThemeAttribute,\n IFillType,\n IStrokeType,\n IArc,\n IPath2D,\n IGraphicRenderDrawParams,\n IDrawContext,\n IBackgroundConfig\n} from '../../../interface';\n\n/**\n * 是否需要执行fill逻辑\n * @param fill\n * @returns\n */\nexport function runFill(\n fill: IFillType,\n background?: string | any | HTMLImageElement | HTMLCanvasElement | IBackgroundConfig\n) {\n return !!(fill || background);\n}\n/**\n * 是否需要执行stroke逻辑\n * @param stroke\n * @returns\n */\nexport function runStroke(stroke: IStrokeType | IStrokeType[], lineWidth: number) {\n let s: boolean | number;\n if (isArray(stroke)) {\n s = stroke.some(item => item || item === undefined);\n } else {\n s = !!stroke;\n }\n return s && lineWidth > 0;\n}\n\n/**\n * 是否fill部分可见\n * @param opacity\n * @param fillOpacity\n * @returns\n */\nexport function fillVisible(opacity: number, fillOpacity: number, fill: IFillType) {\n return fill && opacity * fillOpacity > 0;\n}\n\nexport function rectFillVisible(opacity: number, fillOpacity: number, width: number, height: number, fill: IFillType) {\n return fill && opacity * fillOpacity > 0 && width !== 0 && height !== 0;\n}\n\n/**\n * 是否stroke部分可见\n * @param opacity\n * @param strokeOpacity\n * @param lineWidth\n * @returns\n */\nexport function strokeVisible(opacity: number, strokeOpacity: number) {\n return opacity * strokeOpacity > 0;\n}\n\nexport function rectStrokeVisible(opacity: number, strokeOpacity: number, width: number, height: number) {\n return opacity * strokeOpacity > 0 && width !== 0 && height !== 0;\n}\n\nexport function drawPathProxy(\n graphic: IGraphic,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n) {\n if (!graphic.pathProxy) {\n return false;\n }\n\n const themeAttributes = getTheme(graphic, params?.theme)[graphic.type];\n\n const {\n fill = themeAttributes.fill,\n stroke = themeAttributes.stroke,\n opacity = themeAttributes.opacity,\n fillOpacity = themeAttributes.fillOpacity,\n lineWidth = themeAttributes.lineWidth,\n strokeOpacity = themeAttributes.strokeOpacity,\n visible = themeAttributes.visible\n } = graphic.attribute;\n // 不绘制或者透明\n const fVisible = fillVisible(opacity, fillOpacity, fill);\n const sVisible = strokeVisible(opacity, strokeOpacity);\n const doFill = runFill(fill);\n const doStroke = runStroke(stroke, lineWidth);\n\n if (!visible) {\n return true;\n }\n\n if (!(doFill || doStroke)) {\n return true;\n }\n\n // 如果存在fillCb和strokeCb,那就不直接跳过\n if (!(fVisible || sVisible || fillCb || strokeCb)) {\n return true;\n }\n\n context.beginPath();\n const path = typeof graphic.pathProxy === 'function' ? graphic.pathProxy(graphic.attribute) : graphic.pathProxy;\n renderCommandList(path.commandList, context, x, y);\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(graphic, graphic.attribute, themeAttributes);\n\n if (doStroke) {\n if (strokeCb) {\n strokeCb(context, graphic.attribute, themeAttributes);\n } else if (sVisible) {\n context.setStrokeStyle(graphic, graphic.attribute, x, y, themeAttributes);\n context.stroke();\n }\n }\n if (doFill) {\n if (fillCb) {\n fillCb(context, graphic.attribute, themeAttributes);\n } else if (fVisible) {\n context.setCommonStyle(graphic, graphic.attribute, x, y, themeAttributes);\n context.fill();\n }\n }\n return true;\n}\n\n/**\n * 部分源码参考 https://github.com/d3/d3-shape/\n * Copyright 2010-2022 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n\n// 基于d3-shape\n// https://github.com/d3/d3-shape/blob/main/src/arc.js\nexport function intersect(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number\n) {\n const x10 = x1 - x0;\n const y10 = y1 - y0;\n const x32 = x3 - x2;\n const y32 = y3 - y2;\n let t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) {\n return [];\n }\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// 基于d3-shape\n// https://github.com/d3/d3-shape/blob/main/src/arc.js\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nexport function cornerTangents(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n r1: number,\n rc: number,\n clockwise: number\n) {\n const x01 = x0 - x1;\n const y01 = y0 - y1;\n const lo = (clockwise ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01);\n const ox = lo * y01;\n const oy = -lo * x01;\n const x11 = x0 + ox;\n const y11 = y0 + oy;\n const x10 = x1 + ox;\n const y10 = y1 + oy;\n const x00 = (x11 + x10) / 2;\n const y00 = (y11 + y10) / 2;\n const dx = x10 - x11;\n const dy = y10 - y11;\n const d2 = dx * dx + dy * dy;\n const r = r1 - rc;\n const D = x11 * y10 - x10 * y11;\n const d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D));\n let cx0 = (D * dy - dx * d) / d2;\n let cy0 = (-D * dx - dy * d) / d2;\n const cx1 = (D * dy + dx * d) / d2;\n const cy1 = (-D * dx + dy * d) / d2;\n const dx0 = cx0 - x00;\n const dy0 = cy0 - y00;\n const dx1 = cx1 - x00;\n const dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) {\n (cx0 = cx1), (cy0 = cy1);\n }\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\n// 基于d3-shape\n// https://github.com/d3/d3-shape/blob/main/src/arc.js\nexport function drawArcPath(\n arc: IArc,\n context: IContext2d | IPath2D,\n cx: number,\n cy: number,\n outerRadius: number,\n innerRadius: number,\n partStroke?: (boolean | string)[]\n) {\n const { startAngle, endAngle } = arc.getParsedAngle();\n\n const deltaAngle = abs(endAngle - startAngle);\n const clockwise: boolean = endAngle > startAngle;\n let collapsedToLine: boolean = false;\n // 规范化outerRadius和innerRadius\n if (outerRadius < innerRadius) {\n const temp = outerRadius;\n outerRadius = innerRadius;\n innerRadius = temp;\n }\n // Is it a point?\n if (outerRadius <= epsilon) {\n context.moveTo(cx, cy);\n } else if (deltaAngle >= pi2 - epsilon) {\n // 是个完整的圆环\n // Or is it a circle or annulus?\n context.moveTo(cx + outerRadius * cos(startAngle), cy + outerRadius * sin(startAngle));\n context.arc(cx, cy, outerRadius, startAngle, endAngle, !clockwise);\n if (innerRadius > epsilon) {\n context.moveTo(cx + innerRadius * cos(endAngle), cy + innerRadius * sin(endAngle));\n context.arc(cx, cy, innerRadius, endAngle, startAngle, clockwise);\n }\n } else {\n const cornerRadius = arc.getParsedCornerRadius();\n // Or is it a circular or annular sector?\n const { outerDeltaAngle, innerDeltaAngle, outerStartAngle, outerEndAngle, innerEndAngle, innerStartAngle } =\n arc.getParsePadAngle(startAngle, endAngle);\n\n const outerCornerRadiusStart = cornerRadius;\n const outerCornerRadiusEnd = cornerRadius;\n const innerCornerRadiusEnd = cornerRadius;\n const innerCornerRadiusStart = cornerRadius;\n const maxOuterCornerRadius = Math.max(outerCornerRadiusEnd, outerCornerRadiusStart);\n const maxInnerCornerRadius = Math.max(innerCornerRadiusEnd, innerCornerRadiusStart);\n let limitedOcr = maxOuterCornerRadius;\n let limitedIcr = maxInnerCornerRadius;\n\n const xors = outerRadius * cos(outerStartAngle);\n const yors = outerRadius * sin(outerStartAngle);\n const xire = innerRadius * cos(innerEndAngle);\n const yire = innerRadius * sin(innerEndAngle);\n\n // Apply rounded corners?\n let xore: number;\n let yore: number;\n let xirs: number;\n let yirs: number;\n if (maxInnerCornerRadius > epsilon || maxOuterCornerRadius > epsilon) {\n xore = outerRadius * cos(outerEndAngle);\n yore = outerRadius * sin(outerEndAngle);\n xirs = innerRadius * cos(innerStartAngle);\n yirs = innerRadius * sin(innerStartAngle);\n\n // Restrict the corner radius according to the sector angle.\n if (deltaAngle < pi) {\n const oc = intersect(xors, yors, xirs, yirs, xore, yore, xire, yire);\n\n if (oc) {\n const ax = xors - oc[0];\n const ay = yors - oc[1];\n const bx = xore - oc[0];\n const by = yore - oc[1];\n const kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2);\n const lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n\n limitedIcr = min(maxInnerCornerRadius, (innerRadius - lc) / (kc - 1));\n limitedOcr = min(maxOuterCornerRadius, (outerRadius - lc) / (kc + 1));\n }\n }\n }\n\n // Is the sector collapsed to a line?\n // 角度过小,会将acr处理为圆心到半径的一条线\n if (outerDeltaAngle < 0.001) {\n // 如果有左右边的话\n if (partStroke && (partStroke[3] || partStroke[1])) {\n context.moveTo(cx + xors, cy + yors);\n }\n collapsedToLine = true;\n } else if (limitedOcr > epsilon) {\n const cornerRadiusStart = min(outerCornerRadiusStart, limitedOcr);\n const cornerRadiusEnd = min(outerCornerRadiusEnd, limitedOcr);\n // Does the sector’s outer ring have rounded corners?\n const t0 = cornerTangents(xirs, yirs, xors, yors, outerRadius, cornerRadiusStart, Number(clockwise));\n const t1 = cornerTangents(xore, yore, xire, yire, outerRadius, cornerRadiusEnd, Number(clockwise));\n\n // Have the corners merged?\n if (limitedOcr < maxOuterCornerRadius && cornerRadiusStart === cornerRadiusEnd) {\n if (!partStroke || partStroke[0]) {\n context.moveTo(cx + t0.cx + t0.x01, cy + t0.cy + t0.y01);\n context.arc(cx + t0.cx, cy + t0.cy, limitedOcr, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !clockwise);\n } else {\n context.moveTo(\n cx + t0.cx + limitedOcr * cos(atan2(t1.y01, t1.x01)),\n cy + t0.cy + limitedOcr * sin(atan2(t1.y01, t1.x01))\n );\n }\n } else {\n // Otherwise, draw the two corners and the ring.\n if (!partStroke || partStroke[0]) {\n context.moveTo(cx + t0.cx + t0.x01, cy + t0.cy + t0.y01);\n cornerRadiusStart > 0 &&\n context.arc(\n cx + t0.cx,\n cy + t0.cy,\n cornerRadiusStart,\n atan2(t0.y01, t0.x01),\n atan2(t0.y11, t0.x11),\n !clockwise\n );\n context.arc(\n cx,\n cy,\n outerRadius,\n atan2(t0.cy + t0.y11, t0.cx + t0.x11),\n atan2(t1.cy + t1.y11, t1.cx + t1.x11),\n !clockwise\n );\n cornerRadiusEnd > 0 &&\n context.arc(\n cx + t1.cx,\n cy + t1.cy,\n cornerRadiusEnd,\n atan2(t1.y11, t1.x11),\n atan2(t1.y01, t1.x01),\n !clockwise\n );\n } else {\n if (cornerRadiusEnd > 0) {\n context.moveTo(\n cx + t1.cx + cornerRadiusEnd * cos(atan2(t1.y01, t1.x01)),\n cy + t1.cy + cornerRadiusEnd * sin(atan2(t1.y01, t1.x01))\n );\n } else {\n context.moveTo(cx + xore, cy + outerRadius * sin(outerEndAngle));\n }\n }\n }\n } else {\n // Or is the outer ring just a circular arc?\n if (!partStroke || partStroke[0]) {\n context.moveTo(cx + xors, cy + yors);\n context.arc(cx, cy, outerRadius, outerStartAngle, outerEndAngle, !clockwise);\n } else {\n context.moveTo(cx + outerRadius * cos(outerEndAngle), cy + outerRadius * sin(outerEndAngle));\n }\n }\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(innerRadius > epsilon) || innerDeltaAngle < 0.001) {\n if (!partStroke || partStroke[1]) {\n context.lineTo(cx + xire, cy + yire);\n } else {\n context.moveTo(cx + xire, cy + yire);\n }\n collapsedToLine = true;\n } else if (limitedIcr > epsilon) {\n const cornerRadiusStart = min(innerCornerRadiusStart, limitedIcr);\n const cornerRadiusEnd = min(innerCornerRadiusEnd, limitedIcr);\n // Does the sector’s inner ring (or point) have rounded corners?\n const t0 = cornerTangents(xire, yire, xore, yore, innerRadius, -cornerRadiusEnd, Number(clockwise));\n const t1 = cornerTangents(xors, yors, xirs, yirs, innerRadius, -cornerRadiusStart, Number(clockwise));\n\n if (!partStroke || partStroke[1]) {\n context.lineTo(cx + t0.cx + t0.x01, cy + t0.cy + t0.y01);\n } else {\n context.moveTo(cx + t0.cx + t0.x01, cy + t0.cy + t0.y01);\n }\n\n // Have the corners merged?\n if (limitedIcr < maxInnerCornerRadius && cornerRadiusStart === cornerRadiusEnd) {\n const arcEndAngle = atan2(t1.y01, t1.x01);\n if (!partStroke || partStroke[2]) {\n context.arc(cx + t0.cx, cy + t0.cy, limitedIcr, atan2(t0.y01, t0.x01), arcEndAngle, !clockwise);\n } else {\n context.moveTo(cx + t0.cx + cos(arcEndAngle), cy + t0.cy + sin(arcEndAngle));\n }\n } else {\n // Otherwise, draw the two corners and the ring.\n if (!partStroke || partStroke[2]) {\n cornerRadiusEnd > 0 &&\n context.arc(\n cx + t0.cx,\n cy + t0.cy,\n cornerRadiusEnd,\n atan2(t0.y01, t0.x01),\n atan2(t0.y11, t0.x11),\n !clockwise\n );\n context.arc(\n cx,\n cy,\n innerRadius,\n atan2(t0.cy + t0.y11, t0.cx + t0.x11),\n atan2(t1.cy + t1.y11, t1.cx + t1.x11),\n clockwise\n );\n cornerRadiusStart > 0 &&\n context.arc(\n cx + t1.cx,\n cy + t1.cy,\n cornerRadiusStart,\n atan2(t1.y11, t1.x11),\n atan2(t1.y01, t1.x01),\n !clockwise\n );\n } else {\n if (cornerRadiusStart > 0) {\n context.moveTo(\n cx + t1.cx + cornerRadiusStart * cos(atan2(t1.y01, t1.x01)),\n cy + t1.cy + cornerRadiusStart * sin(atan2(t1.y01, t1.x01))\n );\n } else {\n context.moveTo(cx + xirs, cy + yirs);\n }\n }\n }\n } else {\n // Or is the inner ring just a circular arc?\n if (!partStroke || partStroke[1]) {\n context.lineTo(cx + xire, cy + yire);\n } else {\n context.moveTo(cx + xire, cy + yire);\n }\n if (!partStroke || partStroke[2]) {\n context.arc(cx, cy, innerRadius, innerEndAngle, innerStartAngle, clockwise);\n } else {\n context.moveTo(cx + innerRadius * cos(innerStartAngle), cy + innerRadius * sin(innerStartAngle));\n }\n }\n }\n\n if (!partStroke) {\n context.closePath();\n } else if (partStroke[3]) {\n context.lineTo(cx + outerRadius * cos(startAngle), cy + outerRadius * sin(startAngle));\n }\n\n return collapsedToLine;\n}\n","export const ArcRenderContribution = Symbol.for('ArcRenderContribution');\nexport const AreaRenderContribution = Symbol.for('AreaRenderContribution');\nexport const CircleRenderContribution = Symbol.for('CircleRenderContribution');\nexport const GroupRenderContribution = Symbol.for('GroupRenderContribution');\nexport const ImageRenderContribution = Symbol.for('ImageRenderContribution');\nexport const PathRenderContribution = Symbol.for('PathRenderContribution');\nexport const PolygonRenderContribution = Symbol.for('PolygonRenderContribution');\nexport const RectRenderContribution = Symbol.for('RectRenderContribution');\nexport const SymbolRenderContribution = Symbol.for('SymbolRenderContribution');\nexport const TextRenderContribution = Symbol.for('TextRenderContribution');\nexport const CommonRenderContribution = Symbol.for('CommonRenderContribution');\nexport const InteractiveSubRenderContribution = Symbol.for('InteractiveSubRenderContribution');\n","import type {\n IGraphicAttribute,\n IContext2d,\n IGraphic,\n IStage,\n IThemeAttribute,\n IBaseRenderContribution,\n IContributionProvider,\n IDrawContext\n} from '../../../../interface';\nimport type { IBounds } from '@visactor/vutils';\nimport { inject, injectable, named } from '../../../../common/inversify-lite';\nimport { getTheme } from '../../../../graphic';\nimport { canvasAllocate } from '../../../../allocator/canvas-allocate';\nimport { pi2 } from '@visactor/vutils';\nimport { BaseRenderContributionTime } from '../../../../common/enums';\nimport { ContributionProvider } from '../../../../common/contribution-provider';\nimport { InteractiveSubRenderContribution } from './constants';\n\nexport class DefaultBaseBackgroundRenderContribution implements IBaseRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n graphic: IGraphic,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n options?: any\n ) {\n const {\n background,\n backgroundMode = graphicAttribute.backgroundMode,\n backgroundFit = graphicAttribute.backgroundFit\n } = graphic.attribute;\n if (!background) {\n return;\n }\n\n if (graphic.backgroundImg && graphic.resources) {\n const res = graphic.resources.get(background as any);\n if (res.state !== 'success' || !res.data) {\n return;\n }\n\n context.save();\n\n if (graphic.parent && !graphic.transMatrix.onlyTranslate()) {\n const groupAttribute = getTheme(graphic.parent).group;\n const { scrollX = groupAttribute.scrollX, scrollY = groupAttribute.scrollY } = graphic.parent.attribute;\n context.setTransformFromMatrix(graphic.parent.globalTransMatrix, true);\n context.translate(scrollX, scrollY);\n }\n context.clip();\n const b = graphic.AABBBounds;\n context.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute);\n this.doDrawImage(context, res.data, b, backgroundMode, backgroundFit);\n context.restore();\n if (!graphic.transMatrix.onlyTranslate()) {\n context.setTransformForCurrent();\n }\n } else {\n context.highPerformanceSave();\n context.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute);\n context.fillStyle = background as string;\n context.fill();\n context.highPerformanceRestore();\n }\n }\n\n protected doDrawImage(\n context: IContext2d,\n data: any,\n b: IBounds,\n backgroundMode: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat',\n backgroundFit: boolean\n ): void {\n if (backgroundMode === 'no-repeat') {\n context.drawImage(data, b.x1, b.y1, b.width(), b.height());\n } else {\n const targetW = b.width();\n const targetH = b.height();\n let w = targetW;\n let h = targetH;\n // debugger;\n // TODO 考虑缓存\n if (backgroundFit && backgroundMode !== 'repeat' && (data.width || data.height)) {\n const resW = data.width;\n const resH = data.height;\n\n if (backgroundMode === 'repeat-x') {\n // 高度适应\n const ratio = targetH / resH;\n w = resW * ratio;\n h = targetH;\n } else if (backgroundMode === 'repeat-y') {\n // 宽度适应\n const ratio = targetW / resW;\n h = resH * ratio;\n w = targetW;\n }\n\n const dpr = context.dpr;\n const canvas = canvasAllocate.allocate({ width: w, height: h, dpr });\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.inuse = true;\n ctx.clearMatrix();\n ctx.setTransformForCurrent(true);\n ctx.clearRect(0, 0, w, h);\n ctx.drawImage(data, 0, 0, w, h);\n data = canvas.nativeCanvas;\n }\n canvasAllocate.free(canvas);\n }\n const dpr = context.dpr;\n const pattern = context.createPattern(data, backgroundMode);\n pattern.setTransform && pattern.setTransform(new DOMMatrix([1 / dpr, 0, 0, 1 / dpr, 0, 0]));\n context.fillStyle = pattern;\n context.translate(b.x1, b.y1);\n context.fillRect(0, 0, targetW, targetH);\n context.translate(-b.x1, -b.y1);\n }\n }\n}\n\nexport const defaultBaseBackgroundRenderContribution = new DefaultBaseBackgroundRenderContribution();\n\nexport interface IInteractiveSubRenderContribution {\n render: (\n graphic: IGraphic,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n options?: any\n ) => void;\n}\n\n@injectable()\nexport class DefaultBaseInteractiveRenderContribution implements IBaseRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n\n _subRenderContribitions?: IInteractiveSubRenderContribution[];\n constructor(\n @inject(ContributionProvider)\n @named(InteractiveSubRenderContribution)\n protected readonly subRenderContribitions: IContributionProvider\n ) {}\n\n drawShape(\n graphic: IGraphic,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n options?: any\n ) {\n if (!this._subRenderContribitions) {\n this._subRenderContribitions = this.subRenderContribitions.getContributions();\n }\n this._subRenderContribitions.forEach(c => {\n c.render(\n graphic,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n graphicAttribute,\n drawContext,\n fillCb,\n strokeCb,\n options\n );\n });\n }\n}\n\n// const rect1 =\n// // @ts-ignore\n// 'data:image/png;base64,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';\n","import type {\n IGraphicAttribute,\n IContext2d,\n IGroup,\n IThemeAttribute,\n IGroupRenderContribution,\n IDrawContext\n} from '../../../../interface';\nimport { DefaultBaseBackgroundRenderContribution } from './base-contribution-render';\nimport { BaseRenderContributionTime } from '../../../../common/enums';\n\nexport class DefaultGroupBackgroundRenderContribution\n extends DefaultBaseBackgroundRenderContribution\n implements IGroupRenderContribution\n{\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n\n drawShape(\n graphic: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean\n ) {\n const {\n background,\n backgroundMode = graphicAttribute.backgroundMode,\n backgroundFit = graphicAttribute.backgroundFit\n } = graphic.attribute;\n if (!background) {\n return;\n }\n\n if (graphic.backgroundImg && graphic.resources) {\n const res = graphic.resources.get(background as any);\n if (res.state !== 'success' || !res.data) {\n return;\n }\n\n context.highPerformanceSave();\n\n context.setTransformFromMatrix(graphic.parent.globalTransMatrix, true);\n const b = graphic.AABBBounds;\n this.doDrawImage(context, res.data, b, backgroundMode, backgroundFit);\n context.highPerformanceRestore();\n context.setTransformForCurrent();\n } else {\n context.highPerformanceSave();\n context.fillStyle = background as string;\n context.fill();\n context.highPerformanceRestore();\n }\n }\n}\n\nexport const defaultGroupBackgroundRenderContribution = new DefaultGroupBackgroundRenderContribution();\n","import { inject, injectable, named } from '../../../common/inversify-lite';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IGroup,\n IMarkAttribute,\n IThemeAttribute,\n IGroupRenderContribution,\n IDrawContext,\n IRenderService,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IContributionProvider\n} from '../../../interface';\nimport { getModelMatrix, getTheme, multiplyMat4Mat4 } from '../../../graphic';\nimport { isArray } from '@visactor/vutils';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport { createRectPath } from '../../../common/shape/rect';\nimport { rectFillVisible, rectStrokeVisible, runFill, runStroke } from './utils';\nimport { GroupRenderContribution } from './contributions/constants';\nimport { mat4Allocate } from '../../../allocator/matrix-allocate';\nimport { GROUP_NUMBER_TYPE } from '../../../graphic/constants';\nimport { BaseRenderContributionTime } from '../../../common/enums';\nimport { defaultGroupBackgroundRenderContribution } from './contributions';\n\n@injectable()\nexport class DefaultCanvasGroupRender implements IGraphicRender {\n type: 'group';\n numberType: number = GROUP_NUMBER_TYPE;\n\n _groupRenderContribitions: IGroupRenderContribution[];\n\n constructor(\n @inject(ContributionProvider)\n @named(GroupRenderContribution)\n protected readonly groupRenderContribitions: IContributionProvider\n ) {}\n\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // const groupAttribute = graphicService.themeService.getCurrentTheme().groupAttribute;\n const groupAttribute = getTheme(group, params?.theme).group;\n const {\n fill = groupAttribute.fill,\n background,\n stroke = groupAttribute.stroke,\n opacity = groupAttribute.opacity,\n width = groupAttribute.width,\n height = groupAttribute.height,\n clip = groupAttribute.clip,\n fillOpacity = groupAttribute.fillOpacity,\n strokeOpacity = groupAttribute.strokeOpacity,\n cornerRadius = groupAttribute.cornerRadius,\n path = groupAttribute.path,\n lineWidth = groupAttribute.lineWidth,\n visible = groupAttribute.visible\n } = group.attribute;\n\n // 不绘制或者透明\n const fVisible = rectFillVisible(opacity, fillOpacity, width, height, fill);\n const sVisible = rectStrokeVisible(opacity, strokeOpacity, width, height);\n const doFill = runFill(fill, background);\n const doStroke = runStroke(stroke, lineWidth);\n\n if (!(group.valid && visible)) {\n return;\n }\n\n if (!clip) {\n if (!(doFill || doStroke)) {\n return;\n }\n\n // 如果存在fillCb和strokeCb,那就不直接跳过\n if (!(fVisible || sVisible || fillCb || strokeCb || background)) {\n return;\n }\n }\n\n if (path && path.length && drawContext.drawContribution) {\n // 禁用fill和stroke\n const disableFill = context.disableFill;\n const disableStroke = context.disableStroke;\n const disableBeginPath = context.disableBeginPath;\n context.disableFill = true;\n context.disableStroke = true;\n context.disableBeginPath = true;\n path.forEach(g => {\n const rc = drawContext.drawContribution.getRenderContribution(g);\n rc.draw(g, drawContext.renderService, drawContext, params);\n });\n context.disableFill = disableFill;\n context.disableStroke = disableStroke;\n context.disableBeginPath = disableBeginPath;\n } else if (cornerRadius === 0 || (isArray(cornerRadius) && (cornerRadius).every(num => num === 0))) {\n // 不需要处理圆角\n context.beginPath();\n context.rect(x, y, width, height);\n } else {\n context.beginPath();\n // 测试后,cache对于重绘性能提升不大,但是在首屏有一定性能损耗,因此rect不再使用cache\n createRectPath(context, x, y, width, height, cornerRadius);\n }\n\n if (!this._groupRenderContribitions) {\n this._groupRenderContribitions = this.groupRenderContribitions.getContributions() || [];\n this._groupRenderContribitions.push(defaultGroupBackgroundRenderContribution);\n }\n\n const doFillOrStroke = {\n doFill,\n doStroke\n };\n\n this._groupRenderContribitions.forEach(c => {\n if (c.time === BaseRenderContributionTime.beforeFillStroke) {\n // c.useStyle && context.setCommonStyle(group, group.attribute, x, y, groupAttribute);\n c.drawShape(\n group,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n groupAttribute,\n drawContext,\n fillCb,\n strokeCb,\n doFillOrStroke\n );\n }\n });\n\n // beforeFillStroke contribition可以操作clip范围\n if (clip) {\n context.clip();\n }\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(group, group.attribute, groupAttribute);\n\n if (doFillOrStroke.doFill) {\n if (fillCb) {\n fillCb(context, group.attribute, groupAttribute);\n } else if (fVisible) {\n context.setCommonStyle(group, group.attribute, x, y, groupAttribute);\n context.fill();\n }\n }\n if (doFillOrStroke.doStroke) {\n if (strokeCb) {\n strokeCb(context, group.attribute, groupAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(group, group.attribute, x, y, groupAttribute);\n context.stroke();\n }\n }\n\n this._groupRenderContribitions.forEach(c => {\n if (c.time === BaseRenderContributionTime.afterFillStroke) {\n // c.useStyle && context.setCommonStyle(group, group.attribute, x, y, groupAttribute);\n c.drawShape(\n group,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n groupAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n });\n }\n\n draw(group: IGroup, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const { context } = drawContext;\n if (!context) {\n return;\n }\n // debugger;\n const { clip } = group.attribute;\n if (clip) {\n context.save();\n } else {\n context.highPerformanceSave();\n }\n\n const groupAttribute = getTheme(group, params?.theme).group;\n\n // const lastMatrix = context.modelMatrix;\n // if (context.camera) {\n // const m = group.transMatrix;\n // const matrix = createMat4();\n // mat3Tomat4(matrix, m);\n // const lastModelMatrix = context.modelMatrix;\n // if (lastModelMatrix) {\n // if (matrix) {\n // const m = createMat4();\n // context.modelMatrix = multiplyMat4Mat4(m, lastModelMatrix, matrix);\n // }\n // } else {\n // context.modelMatrix = matrix;\n // }\n // } else {\n // // group直接transform\n // context.transformFromMatrix(group.transMatrix, true);\n // }\n const lastModelMatrix = context.modelMatrix;\n const camera = context.camera;\n if (camera) {\n const nextModelMatrix = mat4Allocate.allocate();\n // 计算模型矩阵\n const modelMatrix = mat4Allocate.allocate();\n getModelMatrix(modelMatrix, group, groupAttribute);\n if (lastModelMatrix) {\n multiplyMat4Mat4(nextModelMatrix, lastModelMatrix, modelMatrix);\n } else {\n multiplyMat4Mat4(nextModelMatrix, nextModelMatrix, modelMatrix);\n }\n context.modelMatrix = nextModelMatrix;\n mat4Allocate.free(modelMatrix);\n context.setTransform(1, 0, 0, 1, 0, 0, true);\n } else {\n // group直接transform\n context.transformFromMatrix(group.transMatrix, true);\n }\n\n context.beginPath();\n // 如果跳过绘制,那就不绘制\n if (params.skipDraw) {\n this.drawShape(\n group,\n context,\n 0,\n 0,\n drawContext,\n params,\n () => false,\n () => false\n );\n } else {\n this.drawShape(group, context, 0, 0, drawContext);\n }\n\n // 绘制子元素的时候要添加scroll\n const { scrollX = groupAttribute.scrollX, scrollY = groupAttribute.scrollY } = group.attribute;\n if (scrollX || scrollY) {\n context.translate(scrollX, scrollY);\n }\n let p: any;\n if (params && params.drawingCb) {\n p = params.drawingCb();\n }\n\n if (context.modelMatrix !== lastModelMatrix) {\n mat4Allocate.free(context.modelMatrix);\n }\n context.modelMatrix = lastModelMatrix;\n\n if (p && p.then) {\n p.then(() => {\n if (clip) {\n context.restore();\n } else {\n context.highPerformanceRestore();\n }\n });\n } else {\n if (clip) {\n context.restore();\n } else {\n context.highPerformanceRestore();\n }\n }\n }\n}\n","import type { IPointLike } from '@visactor/vutils';\nimport { injectable } from '../../../common/inversify-lite';\nimport type {\n IGraphicAttribute,\n ICamera,\n IContext2d,\n IGraphic,\n mat4,\n IRenderService,\n IDrawContext,\n IGraphicRenderDrawParams,\n IMarkAttribute,\n IThemeAttribute,\n IContributionProvider,\n ICircleRenderContribution,\n IBaseRenderContribution\n} from '../../../interface';\nimport { getModelMatrix, multiplyMat4Mat4, shouldUseMat4 } from '../../../graphic';\nimport { mat4Allocate } from '../../../allocator/matrix-allocate';\nimport { drawPathProxy, fillVisible, runFill, runStroke, strokeVisible } from './utils';\nimport { BaseRenderContributionTime } from '../../../common/enums';\n\nconst result: IPointLike & { z: number; lastModelMatrix: mat4 } = { x: 0, y: 0, z: 0, lastModelMatrix: null };\n\nexport abstract class BaseRender {\n camera: ICamera;\n declare z: number;\n\n builtinContributions: IBaseRenderContribution[];\n\n // declare renderContribitions: IContributionProvider> | null;\n\n protected _beforeRenderContribitions: IBaseRenderContribution[];\n protected _afterRenderContribitions: IBaseRenderContribution[];\n protected _renderContribitions: IBaseRenderContribution[];\n\n init(contributions?: IContributionProvider>) {\n if (contributions) {\n // this.renderContribitions = contributions;\n this._renderContribitions = contributions.getContributions();\n }\n if (!this._renderContribitions) {\n this._renderContribitions = [];\n }\n this.builtinContributions && this.builtinContributions.forEach(item => this._renderContribitions.push(item));\n if (this._renderContribitions.length) {\n this._renderContribitions.sort((a, b) => b.order - a.order);\n this._beforeRenderContribitions = this._renderContribitions.filter(\n c => c.time === BaseRenderContributionTime.beforeFillStroke\n );\n this._afterRenderContribitions = this._renderContribitions.filter(\n c => c.time === BaseRenderContributionTime.afterFillStroke\n );\n }\n }\n\n beforeRenderStep(\n graphic: T,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n params?: any\n ) {\n this._beforeRenderContribitions &&\n this._beforeRenderContribitions.forEach(c => {\n c.drawShape(\n graphic,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n graphicAttribute,\n drawContext,\n fillCb,\n strokeCb,\n params\n );\n });\n }\n\n afterRenderStep(\n graphic: T,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n params?: any\n ) {\n this._afterRenderContribitions &&\n this._afterRenderContribitions.forEach(c => {\n c.drawShape(\n graphic,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n graphicAttribute,\n drawContext,\n fillCb,\n strokeCb,\n params\n );\n });\n }\n\n valid(graphic: IGraphic, defaultAttribute: IGraphicAttribute, fillCb?: any, strokeCb?: any) {\n const {\n fill = defaultAttribute.fill,\n background,\n stroke = defaultAttribute.stroke,\n opacity = defaultAttribute.opacity,\n fillOpacity = defaultAttribute.fillOpacity,\n lineWidth = defaultAttribute.lineWidth,\n strokeOpacity = defaultAttribute.strokeOpacity,\n visible = defaultAttribute.visible\n } = graphic.attribute;\n const fVisible = fillVisible(opacity, fillOpacity, fill);\n const sVisible = strokeVisible(opacity, strokeOpacity);\n const doFill = runFill(fill, background);\n const doStroke = runStroke(stroke, lineWidth);\n\n if (!(graphic.valid && visible)) {\n return false;\n }\n\n if (!(doFill || doStroke)) {\n return false;\n }\n\n // 如果存在fillCb和strokeCb,以及background那就不直接跳过\n if (!(fVisible || sVisible || fillCb || strokeCb || background)) {\n return false;\n }\n return {\n fVisible,\n sVisible,\n doFill,\n doStroke\n };\n }\n\n /**\n * 进行2d或3d变换\n * @param graphic\n * @param graphicAttribute\n * @param context\n * @param use3dMatrixIn3dMode 是否在3d模式使用3d矩阵\n * @returns\n */\n transform(\n graphic: IGraphic,\n graphicAttribute: IGraphicAttribute,\n context: IContext2d,\n use3dMatrixIn3dMode: boolean = false\n ): IPointLike & { z: number; lastModelMatrix: mat4 } {\n // const transMatrix = graphic.transMatrix;\n const {\n x = graphicAttribute.x,\n y = graphicAttribute.y,\n z = graphicAttribute.z,\n scaleX = graphicAttribute.scaleX,\n scaleY = graphicAttribute.scaleY,\n angle = graphicAttribute.angle,\n postMatrix\n } = graphic.attribute;\n // const onlyTranslate = transMatrix.onlyTranslate() && !postMatrix;\n\n // 存在3d变换的时候,需要计算3d矩阵\n const lastModelMatrix = context.modelMatrix;\n const camera = context.camera;\n // const result: IPointLike & { z: number; lastModelMatrix: mat4 } = { x, y, z, lastModelMatrix };\n result.x = x;\n result.y = y;\n result.z = z;\n result.lastModelMatrix = lastModelMatrix;\n\n // 是否应该进行3d变换\n const shouldTransform3d = camera && (use3dMatrixIn3dMode || shouldUseMat4(graphic));\n\n // 是否仅有translate\n const onlyTranslate = shouldTransform3d\n ? graphic.transMatrix.onlyTranslate() && !postMatrix\n : scaleX === 1 && scaleY === 1 && angle === 0 && !postMatrix;\n\n if (shouldTransform3d) {\n const nextModelMatrix = mat4Allocate.allocate();\n // 计算模型矩阵\n const modelMatrix = mat4Allocate.allocate();\n getModelMatrix(modelMatrix, graphic, graphicAttribute);\n // 合并模型矩阵\n if (lastModelMatrix) {\n multiplyMat4Mat4(nextModelMatrix, lastModelMatrix, modelMatrix);\n } else {\n multiplyMat4Mat4(nextModelMatrix, nextModelMatrix, modelMatrix);\n }\n result.x = 0;\n result.y = 0;\n result.z = 0;\n context.modelMatrix = nextModelMatrix;\n context.setTransform(1, 0, 0, 1, 0, 0, true);\n mat4Allocate.free(modelMatrix);\n // 有旋转的情况下需要手动计算模型矩阵\n // TODO: 这里暂时都使用模型矩阵,因为视角旋转的时候如果当不固定角度那也需要用到模型矩阵\n }\n\n // 如果只有位移,且没计算3d变换矩阵,那么不设置context的2d矩阵\n if (onlyTranslate && !lastModelMatrix) {\n const point = graphic.getOffsetXY(graphicAttribute);\n result.x += point.x;\n result.y += point.y;\n result.z = z;\n // 当前context有rotate/scale,重置matrix\n context.setTransformForCurrent();\n } else if (shouldTransform3d) {\n // 如果计算了3d矩阵,那么就不需要2d矩阵计算了\n result.x = 0;\n result.y = 0;\n result.z = 0;\n context.setTransform(1, 0, 0, 1, 0, 0, true);\n } else {\n if (camera && context.project) {\n const point = graphic.getOffsetXY(graphicAttribute);\n result.x += point.x;\n result.y += point.y;\n // result.x = 0;\n // result.y = 0;\n // 位置直接通过project设置,而2d变换通过变换矩阵完成\n this.transformWithoutTranslate(context, result.x, result.y, result.z, scaleX, scaleY, angle);\n } else {\n // 如果是纯2d的情况,那么直接设置context的2d矩阵\n // 性能较差\n context.transformFromMatrix(graphic.transMatrix, true);\n result.x = 0;\n result.y = 0;\n result.z = 0;\n }\n }\n\n return result;\n }\n\n /**\n * 将3d的transform转成context2d的transform\n * @param graphic\n * @param graphicAttribute\n * @param z\n * @param context\n */\n transformUseContext2d(graphic: IGraphic, graphicAttribute: IGraphicAttribute, z: number, context: IContext2d) {\n const camera = context.camera;\n this.camera = camera;\n if (camera) {\n const bounds = graphic.AABBBounds;\n const width = bounds.x2 - bounds.x1;\n const height = bounds.y2 - bounds.y1;\n const p1 = context.project(0, 0, z);\n const p2 = context.project(width, 0, z);\n const p3 = context.project(width, height, z);\n const _p1 = { x: 0, y: 0 };\n const _p2 = { x: width, y: 0 };\n const _p3 = { x: width, y: height };\n\n context.camera = null;\n\n // 生成3维矩阵\n /* Adapted from phoria.js by ecomfe\n * https://github.com/kevinroast/phoria.js\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/kevinroast/phoria.js/blob/736c6b854a679df180f8a6e689aeb218efa6dc01/scripts/phoria-renderer.js\n * License: https://github.com/kevinroast/phoria.js/blob/master/LICENSE\n * @license\n */\n const denom = 1.0 / (_p1.x * (_p3.y - _p2.y) - _p2.x * _p3.y + _p3.x * _p2.y + (_p2.x - _p3.x) * _p1.y);\n // calculate context transformation matrix\n const m11 = -(_p1.y * (p3.x - p2.x) - _p2.y * p3.x + _p3.y * p2.x + (_p2.y - _p3.y) * p1.x) * denom;\n const m12 = (_p2.y * p3.y + _p1.y * (p2.y - p3.y) - _p3.y * p2.y + (_p3.y - _p2.y) * p1.y) * denom;\n const m21 = (_p1.x * (p3.x - p2.x) - _p2.x * p3.x + _p3.x * p2.x + (_p2.x - _p3.x) * p1.x) * denom;\n const m22 = -(_p2.x * p3.y + _p1.x * (p2.y - p3.y) - _p3.x * p2.y + (_p3.x - _p2.x) * p1.y) * denom;\n const dx =\n (_p1.x * (_p3.y * p2.x - _p2.y * p3.x) +\n _p1.y * (_p2.x * p3.x - _p3.x * p2.x) +\n (_p3.x * _p2.y - _p2.x * _p3.y) * p1.x) *\n denom;\n const dy =\n (_p1.x * (_p3.y * p2.y - _p2.y * p3.y) +\n _p1.y * (_p2.x * p3.y - _p3.x * p2.y) +\n (_p3.x * _p2.y - _p2.x * _p3.y) * p1.y) *\n denom;\n\n context.setTransform(m11, m12, m21, m22, dx, dy, true);\n }\n }\n\n /**\n * transformUseContext2d的后处理\n * @param graphic\n * @param graphicAttribute\n * @param z\n * @param context\n */\n restoreTransformUseContext2d(graphic: IGraphic, graphicAttribute: IGraphicAttribute, z: number, context: IContext2d) {\n if (this.camera) {\n context.camera = this.camera;\n }\n }\n\n protected transformWithoutTranslate(\n context: IContext2d,\n x: number,\n y: number,\n z: number,\n scaleX: number,\n scaleY: number,\n angle: number\n ) {\n const p = context.project(x, y, z);\n context.translate(p.x, p.y, false);\n context.scale(scaleX, scaleY, false);\n context.rotate(angle, false);\n context.translate(-p.x, -p.y, false);\n context.setTransformForCurrent();\n }\n\n _draw(\n graphic: T,\n defaultAttr: IGraphicAttribute,\n computed3dMatrix: boolean,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams\n ) {\n const { context } = drawContext;\n if (!context) {\n return;\n }\n\n context.highPerformanceSave();\n\n const data = this.transform(graphic, defaultAttr, context, computed3dMatrix);\n const { x, y, z, lastModelMatrix } = data;\n\n this.z = z;\n if (drawPathProxy(graphic, context, x, y, drawContext, params)) {\n context.highPerformanceRestore();\n return;\n }\n\n this.drawShape(graphic, context, x, y, drawContext, params);\n this.z = 0;\n\n if (context.modelMatrix !== lastModelMatrix) {\n mat4Allocate.free(context.modelMatrix);\n }\n context.modelMatrix = lastModelMatrix;\n\n context.highPerformanceRestore();\n }\n\n drawShape?(\n path: T,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ): void;\n\n // abstract drawShape(\n // graphic: T,\n // context: IContext2d,\n // x: number,\n // y: number,\n // drawContext: IDrawContext,\n // params?: IGraphicRenderDrawParams,\n // fillCb?: (\n // ctx: IContext2d,\n // markAttribute: Partial,\n // themeAttribute: IThemeAttribute\n // ) => boolean,\n // strokeCb?: (\n // ctx: IContext2d,\n // markAttribute: Partial,\n // themeAttribute: IThemeAttribute\n // ) => boolean\n // ): void;\n\n // drawPathProxy(\n // graphic: T,\n // context: IContext2d,\n // x: number,\n // y: number,\n // drawContext: IDrawContext,\n // params?: IGraphicRenderDrawParams,\n // fillCb?: (\n // ctx: IContext2d,\n // markAttribute: Partial,\n // themeAttribute: IThemeAttribute\n // ) => boolean,\n // strokeCb?: (\n // ctx: IContext2d,\n // markAttribute: Partial,\n // themeAttribute: IThemeAttribute\n // ) => boolean\n // ) {\n // if (!graphic.pathProxy) {\n // return false;\n // }\n\n // const themeAttributes = getTheme(graphic)[graphic.type];\n\n // const {\n // fill = themeAttributes.fill == null ? !!graphic.attribute.fillColor : themeAttributes.fill,\n // stroke = themeAttributes.stroke == null ? !!graphic.attribute.strokeColor : themeAttributes.stroke,\n // opacity = themeAttributes.opacity,\n // fillOpacity = themeAttributes.fillOpacity,\n // lineWidth = themeAttributes.lineWidth,\n // strokeOpacity = themeAttributes.strokeOpacity,\n // visible = themeAttributes.visible\n // } = graphic.attribute;\n // // 不绘制或者透明\n // const fVisible = fillVisible(opacity, fillOpacity);\n // const sVisible = strokeVisible(opacity, strokeOpacity);\n // const doFill = runFill(fill);\n // const doStroke = runStroke(stroke, lineWidth);\n\n // if (!visible) {\n // return true;\n // }\n\n // if (!(doFill || doStroke)) {\n // return true;\n // }\n\n // // 如果存在fillCb和strokeCb,那就不直接跳过\n // if (!(fVisible || sVisible || fillCb || strokeCb)) {\n // return true;\n // }\n\n // context.beginPath();\n\n // const path = typeof graphic.pathProxy === 'function' ? graphic.pathProxy(graphic.attribute) : graphic.pathProxy;\n // renderCommandList(path.commandList, context, x, y);\n\n // // shadow\n // context.setShadowBlendStyle && context.setShadowBlendStyle(graphic, graphic.attribute, themeAttributes);\n\n // if (doStroke) {\n // if (strokeCb) {\n // strokeCb(context, graphic.attribute, themeAttributes);\n // } else if (sVisible) {\n // context.setStrokeStyle(graphic, graphic.attribute, 0, 0, themeAttributes);\n // context.stroke();\n // }\n // }\n // if (doFill) {\n // if (fillCb) {\n // fillCb(context, graphic.attribute, themeAttributes);\n // } else if (fVisible) {\n // context.setCommonStyle(graphic, graphic.attribute, 0, 0, themeAttributes);\n // context.fill();\n // }\n // }\n // return true;\n // }\n}\n","import type { IPoint } from '@visactor/vutils';\nimport type { ICubicBezierCurve, ICurve, IPath2D } from '../interface';\nimport { divideCubic } from './segment/curve/cubic-bezier';\n\n/**\n * 绘制某个segment\n * @param ctx\n * @param seg\n * @param t 绘制这个segment的比例,t > 0从start到end,t < 0从end到start\n */\nexport function drawSegItem(\n ctx: IPath2D,\n curve: ICurve,\n endPercent: number,\n params?: {\n startLenPercent?: number;\n endLenPercent?: number;\n start?: number;\n offsetX?: number;\n offsetY?: number;\n offsetZ?: number;\n }\n) {\n if (!curve.p1) {\n return;\n }\n const { offsetX = 0, offsetY = 0, offsetZ = 0 } = params || {};\n\n // 完全绘制\n if (endPercent === 1) {\n if (curve.p2 && curve.p3) {\n ctx.bezierCurveTo(\n offsetX + curve.p1.x,\n offsetY + curve.p1.y,\n offsetX + curve.p2.x,\n offsetY + curve.p2.y,\n offsetX + curve.p3.x,\n offsetY + curve.p3.y,\n offsetZ\n );\n } else {\n // linear的线段\n ctx.lineTo(offsetX + curve.p1.x, offsetY + curve.p1.y, offsetZ);\n }\n } else {\n // 绘制一部分\n if (curve.p2 && curve.p3) {\n const [curve1] = divideCubic(curve as ICubicBezierCurve, endPercent);\n ctx.bezierCurveTo(\n offsetX + curve1.p1.x,\n offsetY + curve1.p1.y,\n offsetX + curve1.p2.x,\n offsetY + curve1.p2.y,\n offsetX + curve1.p3.x,\n offsetY + curve1.p3.y,\n offsetZ\n );\n } else {\n // linear的线段\n const p = curve.getPointAt(endPercent);\n ctx.lineTo(offsetX + p.x, offsetY + p.y, offsetZ);\n }\n }\n}\n","import { min } from \"@visactor/vutils\";\n\nimport { Direction } from \"./enums\";\n\nimport { drawSegItem } from \"./render-utils\";\n\nexport function drawSegments(path, segPath, percent, clipRangeByDimension, params) {\n var _a;\n const {offsetX: offsetX = 0, offsetY: offsetY = 0, offsetZ: offsetZ = 0, mode: mode = \"none\", drawConnect: drawConnect = !1, zeroX: zeroX = 0, zeroY: zeroY = 0} = params || {};\n if (drawConnect && \"none\" === mode) return;\n if (!segPath) return;\n let needMoveTo = !0;\n const {curves: curves} = segPath;\n if (percent >= 1) {\n if (drawConnect) {\n let lastCurve, defined0 = !0;\n curves.forEach(((curve, i) => {\n var _a;\n let p0 = curve.p0;\n if (curve.originP1 !== curve.originP2) {\n if (lastCurve && lastCurve.originP1 === lastCurve.originP2 && (p0 = lastCurve.p0), \n curve.defined) defined0 || (path.lineTo(p0.x + offsetX, p0.y + offsetY, offsetZ), \n defined0 = !defined0); else {\n const {originP1: originP1, originP2: originP2} = curve;\n let validP;\n if (originP1 && !1 !== originP1.defined ? validP = p0 : originP1 && !1 !== originP2.defined && (validP = null !== (_a = curve.p3) && void 0 !== _a ? _a : curve.p1), \n defined0) {\n defined0 = !defined0;\n const x = validP ? validP.x : curve.p0.x, y = validP ? validP.y : curve.p0.y;\n path.moveTo(x + offsetX, y + offsetY, offsetZ);\n } else validP && (defined0 = !defined0, path.lineTo(validP.x + offsetX, validP.y + offsetY, offsetZ));\n }\n lastCurve = curve;\n } else lastCurve = curve;\n }));\n } else curves.forEach((curve => {\n curve.defined ? (needMoveTo && path.moveTo(curve.p0.x + offsetX, curve.p0.y + offsetY, offsetZ), \n drawSegItem(path, curve, 1, params), needMoveTo = !1) : needMoveTo = !0;\n }));\n return;\n }\n if (percent <= 0) return;\n let direction;\n \"x\" === clipRangeByDimension ? direction = Direction.ROW : \"y\" === clipRangeByDimension ? direction = Direction.COLUMN : \"auto\" === clipRangeByDimension && (direction = segPath.direction);\n const totalDrawLength = percent * segPath.tryUpdateLength(direction);\n let drawedLengthUntilLast = 0, defined0 = !0, lastCurve = null;\n for (let i = 0, n = curves.length; i < n; i++) {\n const curve = curves[i], curCurveLength = curve.getLength(direction), _p = (totalDrawLength - drawedLengthUntilLast) / curCurveLength;\n if (drawedLengthUntilLast += curCurveLength, _p < 0) break;\n if (drawConnect) {\n let p0 = curve.p0;\n if (curve.originP1 === curve.originP2) {\n lastCurve = curve;\n continue;\n }\n if (lastCurve && lastCurve.originP1 === lastCurve.originP2 && (p0 = lastCurve.p0), \n curve.defined) defined0 || (path.lineTo(p0.x + offsetX, p0.y + offsetY, offsetZ), \n defined0 = !defined0); else {\n const {originP1: originP1, originP2: originP2} = curve;\n let validP;\n if (originP1 && !1 !== originP1.defined ? validP = p0 : originP1 && !1 !== originP2.defined && (validP = null !== (_a = curve.p3) && void 0 !== _a ? _a : curve.p1), \n defined0) {\n defined0 = !defined0;\n const x = validP ? validP.x : curve.p0.x, y = validP ? validP.y : curve.p0.y;\n path.moveTo(x + offsetX, y + offsetY, offsetZ);\n } else validP && (defined0 = !defined0, path.lineTo(validP.x + offsetX, validP.y + offsetY, offsetZ));\n }\n lastCurve = curve;\n } else {\n if (!curve.defined) {\n needMoveTo = !0;\n continue;\n }\n needMoveTo && path.moveTo(curve.p0.x + offsetX, curve.p0.y + offsetY, offsetZ), \n drawSegItem(path, curve, min(_p, 1), params), needMoveTo = !1;\n }\n }\n}\n\nexport function drawIncrementalSegments(path, lastSeg, segments, params) {\n const {offsetX: offsetX = 0, offsetY: offsetY = 0} = params || {}, startP = lastSeg ? lastSeg.points[lastSeg.points.length - 1] : segments.points[0];\n path.moveTo(startP.x + offsetX, startP.y + offsetY), segments.points.forEach((p => {\n !1 !== p.defined ? path.lineTo(p.x + offsetX, p.y + offsetY) : path.moveTo(p.x + offsetX, p.y + offsetY);\n }));\n}\n\nexport function drawIncrementalAreaSegments(path, lastSeg, segments, params) {\n const {offsetX: offsetX = 0, offsetY: offsetY = 0} = params || {}, {points: points} = segments, definedPointsList = [];\n let lastIdx = 0;\n for (let i = 0; i < points.length; i++) !1 === points[i].defined && (lastIdx + 1 !== i && definedPointsList.slice(lastIdx, i), \n lastIdx = i);\n definedPointsList.length, definedPointsList.push(points), definedPointsList.forEach(((points, i) => {\n var _a, _b, _c, _d;\n const startP = lastSeg && 0 === i ? lastSeg.points[lastSeg.points.length - 1] : points[0];\n path.moveTo(startP.x + offsetX, startP.y + offsetY), points.forEach((p => {\n !1 !== p.defined ? path.lineTo(p.x + offsetX, p.y + offsetY) : path.moveTo(p.x + offsetX, p.y + offsetY);\n }));\n for (let i = points.length - 1; i >= 0; i--) {\n const p = points[i];\n path.lineTo(null !== (_a = p.x1) && void 0 !== _a ? _a : p.x, null !== (_b = p.y1) && void 0 !== _b ? _b : p.y);\n }\n path.lineTo(null !== (_c = startP.x1) && void 0 !== _c ? _c : startP.x, null !== (_d = startP.y1) && void 0 !== _d ? _d : startP.y), \n path.closePath();\n }));\n}","import type { IPointLike } from '@visactor/vutils';\nimport { min, isArray } from '@visactor/vutils';\nimport { injectable } from '../../../common/inversify-lite';\nimport type {\n IContext2d,\n ILine,\n ILineGraphicAttribute,\n IMarkAttribute,\n IGraphicAttribute,\n IThemeAttribute,\n IClipRangeByDimensionType,\n ISegPath2D,\n IDrawContext,\n IRenderService,\n IGraphicRender,\n IGraphicRenderDrawParams\n} from '../../../interface';\nimport { getTheme } from '../../../graphic/theme';\nimport { LINE_NUMBER_TYPE } from '../../../graphic/constants';\nimport { drawPathProxy, fillVisible, runFill, runStroke, strokeVisible } from './utils';\nimport { BaseRender } from './base-render';\nimport { mat4Allocate } from '../../../allocator/matrix-allocate';\nimport { drawSegments } from '../../../common/render-curve';\nimport { calcLineCache } from '../../../common/segment';\n\n/**\n * 默认的基于canvas的line渲染器\n * 单例\n */\n@injectable()\nexport class DefaultCanvasLineRender extends BaseRender implements IGraphicRender {\n type: 'line';\n numberType: number = LINE_NUMBER_TYPE;\n declare z: number;\n\n draw(line: ILine, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const lineAttribute = getTheme(line, params?.theme).line;\n this._draw(line, lineAttribute, false, drawContext, params);\n }\n\n /**\n * 绘制segment\n * @param context\n * @param cache\n * @param fill\n * @param stroke\n * @param attribute\n * @param defaultAttribute\n * @param clipRange\n * @param offsetX\n * @param offsetY\n * @param fillCb\n * @param strokeCb\n * @returns 返回true代表跳过后续绘制\n */\n protected drawSegmentItem(\n context: IContext2d,\n cache: ISegPath2D,\n fill: boolean,\n stroke: boolean,\n fillOpacity: number,\n strokeOpacity: number,\n attribute: Partial,\n defaultAttribute: Required | Partial[],\n clipRange: number,\n clipRangeByDimension: IClipRangeByDimensionType,\n offsetX: number,\n offsetY: number,\n line: ILine,\n fillCb?: (\n ctx: IContext2d,\n lineAttribute: Partial,\n themeAttribute: IThemeAttribute | IThemeAttribute[]\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n lineAttribute: Partial,\n themeAttribute: IThemeAttribute | IThemeAttribute[]\n ) => boolean\n ): boolean {\n if (!cache) {\n return;\n }\n context.beginPath();\n\n const z = this.z ?? 0;\n\n drawSegments(context.camera ? context : context.nativeContext, cache, clipRange, clipRangeByDimension, {\n offsetX,\n offsetY,\n offsetZ: z\n });\n\n // 如果是一根线,且是Closed,并且没有defined为false的点,需要close\n if (\n line.cache &&\n !isArray(line.cache) &&\n line.cache.curves.every(c => c.defined) &&\n line.attribute.curveType &&\n line.attribute.curveType.includes('Closed')\n ) {\n context.closePath();\n }\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(line, attribute, defaultAttribute);\n\n const { x: originX = 0, x: originY = 0 } = attribute;\n const ret: boolean = false;\n if (fill !== false) {\n if (fillCb) {\n fillCb(context, attribute, defaultAttribute);\n } else if (fillOpacity) {\n context.setCommonStyle(line, attribute, originX - offsetX, originY - offsetY, defaultAttribute);\n context.fill();\n }\n }\n if (stroke !== false) {\n if (strokeCb) {\n strokeCb(context, attribute, defaultAttribute);\n } else if (strokeOpacity) {\n context.setStrokeStyle(line, attribute, originX - offsetX, originY - offsetY, defaultAttribute);\n context.stroke();\n }\n }\n\n // 绘制connect区域\n let { connectedType, connectedX, connectedY, connectedStyle } = attribute;\n if (isArray(defaultAttribute)) {\n connectedType = connectedType ?? defaultAttribute[0].connectedType ?? defaultAttribute[1].connectedType;\n connectedX = connectedX ?? defaultAttribute[0].connectedX ?? defaultAttribute[1].connectedX;\n connectedY = connectedY ?? defaultAttribute[0].connectedY ?? defaultAttribute[1].connectedY;\n connectedStyle = connectedStyle ?? defaultAttribute[0].connectedStyle ?? defaultAttribute[1].connectedStyle;\n } else {\n connectedType = connectedType ?? defaultAttribute.connectedType;\n connectedX = connectedX ?? defaultAttribute.connectedX;\n connectedY = connectedY ?? defaultAttribute.connectedY;\n connectedStyle = connectedStyle ?? defaultAttribute.connectedStyle;\n }\n // 如果有非法值就是none\n if (connectedType !== 'connect' && connectedType !== 'zero') {\n connectedType = 'none';\n }\n if (connectedType !== 'none') {\n context.beginPath();\n drawSegments(context.camera ? context : context.nativeContext, cache, clipRange, clipRangeByDimension, {\n offsetX,\n offsetY,\n offsetZ: z,\n drawConnect: true,\n mode: connectedType,\n zeroX: connectedX,\n zeroY: connectedY\n });\n\n const da = [];\n if (isArray(defaultAttribute)) {\n defaultAttribute.forEach(i => da.push(i));\n } else {\n da.push(defaultAttribute);\n }\n da.push(attribute);\n\n if (fill !== false) {\n if (fillCb) {\n fillCb(context, attribute, defaultAttribute);\n } else if (fillOpacity) {\n context.setCommonStyle(line, connectedStyle, originX - offsetX, originY - offsetY, da);\n context.fill();\n }\n }\n if (stroke !== false) {\n if (strokeCb) {\n strokeCb(context, attribute, defaultAttribute);\n } else if (strokeOpacity) {\n context.setStrokeStyle(line, connectedStyle, originX - offsetX, originY - offsetY, da);\n context.stroke();\n }\n }\n }\n return !!ret;\n }\n\n // 高性能绘制linear line,不用拆分\n drawLinearLineHighPerformance(\n line: ILine,\n context: IContext2d,\n fill: boolean,\n stroke: boolean,\n fillOpacity: number,\n strokeOpacity: number,\n offsetX: number,\n offsetY: number,\n lineAttribute: Required,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n lineAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n lineAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n context.beginPath();\n\n const z = this.z ?? 0;\n const { points } = line.attribute;\n const startP = points[0];\n\n context.moveTo(startP.x + offsetX, startP.y + offsetY, z);\n for (let i = 1; i < points.length; i++) {\n const p = points[i];\n context.lineTo(p.x + offsetX, p.y + offsetY, z);\n }\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(line, line.attribute, lineAttribute);\n\n const { x: originX = 0, x: originY = 0 } = line.attribute;\n if (fill !== false) {\n if (fillCb) {\n fillCb(context, line.attribute, lineAttribute);\n } else if (fillOpacity) {\n context.setCommonStyle(line, line.attribute, originX - offsetX, originY - offsetY, lineAttribute);\n context.fill();\n }\n }\n if (stroke !== false) {\n if (strokeCb) {\n strokeCb(context, line.attribute, lineAttribute);\n } else if (strokeOpacity) {\n context.setStrokeStyle(line, line.attribute, originX - offsetX, originY - offsetY, lineAttribute);\n context.stroke();\n }\n }\n }\n\n drawShape(\n line: ILine,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n lineAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n lineAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // const lineAttribute = graphicService.themeService.getCurrentTheme().lineAttribute;\n const lineAttribute = getTheme(line, params?.theme).line;\n\n const {\n fill = lineAttribute.fill,\n stroke = lineAttribute.stroke,\n fillOpacity = lineAttribute.fillOpacity,\n strokeOpacity = lineAttribute.strokeOpacity,\n segments,\n points,\n closePath\n } = line.attribute;\n\n const data = this.valid(line, lineAttribute, fillCb, strokeCb);\n if (!data) {\n return;\n }\n\n let { curveType = lineAttribute.curveType } = line.attribute;\n if (closePath && curveType === 'linear') {\n curveType = 'linearClosed';\n }\n\n const { clipRange = lineAttribute.clipRange, clipRangeByDimension = lineAttribute.clipRangeByDimension } =\n line.attribute;\n\n if (clipRange === 1 && !segments && !points.some(p => p.defined === false) && curveType === 'linear') {\n return this.drawLinearLineHighPerformance(\n line,\n context,\n !!fill,\n !!stroke,\n fillOpacity,\n strokeOpacity,\n x,\n y,\n lineAttribute,\n drawContext,\n params,\n fillCb,\n strokeCb\n );\n }\n // const { fVisible, sVisible, doFill, doStroke } = data;\n\n // 更新cache\n if (line.shouldUpdateShape()) {\n const { points, segments } = line.attribute;\n\n const _points = points;\n if (segments && segments.length) {\n let startPoint: IPointLike;\n let lastSeg: { endX: number; endY: number; curves: Array<{ defined: boolean }> };\n line.cache = segments\n .map((seg, index) => {\n if (seg.points.length <= 1) {\n // 第一个点的话,直接设置lastTopSeg\n if (index === 0) {\n seg.points[0] &&\n (lastSeg = {\n endX: seg.points[0].x,\n endY: seg.points[0].y,\n curves: [{ defined: seg.points[0].defined !== false }]\n });\n return null;\n }\n }\n // 添加上一个segment结束的点作为这个segment的起始点\n if (index === 1) {\n startPoint = {\n x: lastSeg.endX,\n y: lastSeg.endY,\n defined: lastSeg.curves[lastSeg.curves.length - 1].defined\n };\n } else if (index > 1) {\n startPoint.x = lastSeg.endX;\n startPoint.y = lastSeg.endY;\n startPoint.defined = lastSeg.curves[lastSeg.curves.length - 1].defined;\n }\n const data = calcLineCache(seg.points, curveType, {\n startPoint\n });\n lastSeg = data;\n return data;\n })\n .filter(item => !!item);\n\n // 如果lineClosed,那就绘制到第一个点\n if (curveType === 'linearClosed') {\n let startP: IPointLike;\n for (let i = 0; i < line.cache.length; i++) {\n const cacheItem = line.cache[i];\n for (let i = 0; i < cacheItem.curves.length; i++) {\n if (cacheItem.curves[i].defined) {\n startP = cacheItem.curves[i].p0;\n break;\n }\n }\n if (startP) {\n break;\n }\n }\n line.cache[line.cache.length - 1] && line.cache[line.cache.length - 1].lineTo(startP.x, startP.y, true);\n }\n } else if (points && points.length) {\n line.cache = calcLineCache(_points, curveType);\n } else {\n line.cache = null;\n line.clearUpdateShapeTag();\n return;\n }\n line.clearUpdateShapeTag();\n }\n\n if (Array.isArray(line.cache)) {\n const segments = line.attribute.segments.filter(item => item.points.length);\n // 如果第一个seg只有一个点,那么shift出去\n if (segments[0].points.length === 1) {\n segments.shift();\n }\n if (clipRange === 1) {\n let skip = false;\n // 性能优化,不需要clip的线段不需要计算长度\n line.cache.forEach((cache, index) => {\n if (skip) {\n return;\n }\n skip = this.drawSegmentItem(\n context,\n cache,\n !!fill,\n !!stroke,\n fillOpacity,\n strokeOpacity,\n segments[index],\n [lineAttribute, line.attribute],\n clipRange,\n clipRangeByDimension,\n x,\n y,\n line,\n fillCb,\n strokeCb\n );\n });\n } else {\n // 如果是segments的话,每个clipRange需要重新计算\n // 整个线段的总长度\n const totalLength = line.cache.reduce((l, c) => l + c.getLength(), 0);\n // 总需要绘制的长度\n const totalDrawLength = clipRange * totalLength;\n // 直到上次绘制的长度\n let drawedLengthUntilLast = 0;\n let skip = false;\n line.cache.forEach((cache, index) => {\n if (skip) {\n return;\n }\n const curSegLength = cache.getLength();\n const _cr = (totalDrawLength - drawedLengthUntilLast) / curSegLength;\n drawedLengthUntilLast += curSegLength;\n if (_cr > 0) {\n skip = this.drawSegmentItem(\n context,\n cache,\n !!fill,\n !!stroke,\n fillOpacity,\n strokeOpacity,\n segments[index],\n [lineAttribute, line.attribute],\n min(_cr, 1),\n clipRangeByDimension,\n x,\n y,\n line,\n fillCb,\n strokeCb\n );\n }\n });\n }\n } else {\n this.drawSegmentItem(\n context,\n line.cache as ISegPath2D,\n !!fill,\n !!stroke,\n fillOpacity,\n strokeOpacity,\n line.attribute,\n lineAttribute,\n clipRange,\n clipRangeByDimension,\n x,\n y,\n line,\n fillCb,\n strokeCb\n );\n }\n }\n}\n","import { injectable } from '../../../common/inversify-lite';\nimport type {\n IContext2d,\n ILine,\n ILineGraphicAttribute,\n IMarkAttribute,\n IGraphicAttribute,\n IThemeAttribute,\n ISegment,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IDrawContext\n} from '../../../interface';\nimport { getTheme } from '../../../graphic/theme';\nimport { LINE_NUMBER_TYPE } from '../../../graphic/constants';\nimport { fillVisible, runFill, runStroke, strokeVisible } from './utils';\nimport { DefaultCanvasLineRender } from './line-render';\nimport { drawIncrementalSegments } from '../../../common/render-curve';\n\n/**\n * 默认的基于canvas的line渲染器\n * 单例\n */\n@injectable()\nexport class DefaultIncrementalCanvasLineRender extends DefaultCanvasLineRender implements IGraphicRender {\n declare type: 'line';\n numberType: number = LINE_NUMBER_TYPE;\n\n drawShape(\n line: ILine,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n lineAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n lineAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // console.log(drawContext.multiGraphicOptions)\n if (line.incremental && drawContext.multiGraphicOptions) {\n const { startAtIdx, length } = drawContext.multiGraphicOptions;\n const { segments = [] } = line.attribute;\n if (startAtIdx > segments.length) {\n return;\n }\n\n const lineAttribute = getTheme(line).line;\n\n const {\n fill = lineAttribute.fill,\n stroke = lineAttribute.stroke,\n opacity = lineAttribute.opacity,\n fillOpacity = lineAttribute.fillOpacity,\n strokeOpacity = lineAttribute.strokeOpacity,\n lineWidth = lineAttribute.lineWidth,\n visible = lineAttribute.visible\n } = line.attribute;\n\n // 不绘制或者透明\n const fVisible = fillVisible(opacity, fillOpacity, fill);\n const sVisible = strokeVisible(opacity, strokeOpacity);\n const doFill = runFill(fill);\n const doStroke = runStroke(stroke, lineWidth);\n\n if (!(line.valid && visible)) {\n return;\n }\n\n if (!(doFill || doStroke)) {\n return;\n }\n\n // 如果存在fillCb和strokeCb,那就不直接跳过\n if (!(fVisible || sVisible || fillCb || strokeCb)) {\n return;\n }\n\n const { context } = drawContext;\n // 不支持clipRange,不支持pick,仅支持最基础的线段绘制\n for (let i = startAtIdx; i < startAtIdx + length; i++) {\n this.drawIncreaseSegment(\n line,\n context,\n segments[i - 1],\n segments[i],\n line.attribute.segments[i],\n [lineAttribute, line.attribute],\n x,\n y\n );\n }\n } else {\n super.drawShape(line, context, x, y, drawContext, params, fillCb, strokeCb);\n }\n }\n\n drawIncreaseSegment(\n line: ILine,\n context: IContext2d,\n lastSeg: ISegment,\n seg: ISegment,\n attribute: Partial,\n defaultAttribute: Required | Partial[],\n offsetX: number,\n offsetY: number\n ) {\n if (!seg) {\n return;\n }\n\n context.beginPath();\n drawIncrementalSegments(context.nativeContext, lastSeg, seg, { offsetX, offsetY });\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(line, attribute, defaultAttribute);\n context.setStrokeStyle(line, attribute, offsetX, offsetY, defaultAttribute);\n context.stroke();\n }\n}\n","import type { IPoint } from '@visactor/vutils';\nimport { abs } from '@visactor/vutils';\nimport type { IAreaCacheItem, ICubicBezierCurve, ICurve, IDirection, ILineCurve, IPath2D } from '../interface';\nimport { Direction } from './enums';\nimport { divideCubic } from './segment/curve/cubic-bezier';\nimport { divideLinear } from './segment/curve/line';\nimport { drawSegItem } from './render-utils';\n\n/**\n * 绘制连续的线段\n * 绘制长度为总长度percent的path,drawDirection为绘制的方向,也就是percent的方向\n * @param path\n * @param segPath\n * @param percent\n * @param drawDirection 绘制的方向,用于使用percent绘制\n * @param line 用于获取line相关属性\n */\nexport function drawAreaSegments(\n path: IPath2D,\n segPath: IAreaCacheItem,\n percent: number,\n params?: {\n offsetX?: number;\n offsetY?: number;\n offsetZ?: number;\n direction?: IDirection;\n drawConnect?: boolean; // 是否是绘制connect区域的效果\n mode?: 'none' | 'connect' | 'zero';\n zeroX?: number;\n zeroY?: number;\n }\n) {\n const { drawConnect = false, mode = 'none' } = params || {};\n if (drawConnect && mode === 'none') {\n return;\n }\n // let needMoveTo: boolean = true;\n const { top, bottom } = segPath;\n // 如果top和bottom的curves数量不同,那么就跳过\n if (top.curves.length !== bottom.curves.length) {\n return;\n }\n if (percent >= 1) {\n const topList: ICurve[] = [];\n const bottomList: ICurve[] = [];\n let lastDefined: boolean = true;\n if (drawConnect) {\n let defined0 = true;\n let lastCurve: ICurve;\n let lastBottomCurve: ICurve;\n const n = top.curves.length;\n top.curves.forEach((curve, i) => {\n // step的逻辑\n const bototmCurve = bottom.curves[n - i - 1];\n let currentTopCurve = curve;\n let currentBottomCurve = bototmCurve;\n if (curve.originP1 === curve.originP2) {\n lastCurve = curve;\n lastBottomCurve = bototmCurve;\n return;\n }\n if (lastCurve && lastCurve.originP1 === lastCurve.originP2) {\n currentTopCurve = lastCurve;\n currentBottomCurve = lastBottomCurve;\n }\n if (curve.defined) {\n // 非法变合法需要lineTo,合法变非法需要moveTo,初始非法需要moveTo\n if (!defined0) {\n topList.push(currentTopCurve);\n bottomList.push(currentBottomCurve);\n drawAreaConnectBlock(path, topList, bottomList, params);\n topList.length = 0;\n bottomList.length = 0;\n defined0 = !defined0;\n }\n } else {\n // 找到合法的点\n const { originP1, originP2 } = curve;\n let validTopCurve: ICurve;\n let validBottomCurve: ICurve;\n if (originP1 && originP1.defined !== false) {\n validTopCurve = currentTopCurve;\n validBottomCurve = currentBottomCurve;\n } else if (originP1 && originP2.defined !== false) {\n validTopCurve = curve;\n validBottomCurve = bototmCurve;\n }\n // 合法/(初始)变非法,moveTo\n if (defined0) {\n defined0 = !defined0;\n topList.push(validTopCurve || curve);\n bottomList.push(validBottomCurve || bototmCurve);\n } else {\n // 非法变非法/合法,看情况要不要lineTo\n if (validTopCurve) {\n // 非法变合法,需要lineTo\n defined0 = !defined0;\n topList.push(validTopCurve || curve);\n bottomList.push(validBottomCurve || bototmCurve);\n drawAreaConnectBlock(path, topList, bottomList, params);\n topList.length = 0;\n bottomList.length = 0;\n }\n }\n }\n lastCurve = curve;\n });\n drawAreaConnectBlock(path, topList, bottomList, params);\n } else {\n for (let i = 0, n = top.curves.length; i < n; i++) {\n const topCurve = top.curves[i];\n if (lastDefined !== topCurve.defined) {\n if (lastDefined) {\n drawAreaBlock(path, topList, bottomList, params);\n topList.length = 0;\n bottomList.length = 0;\n } else {\n topList.push(topCurve);\n bottomList.push(bottom.curves[n - i - 1]);\n }\n lastDefined = !lastDefined;\n } else {\n if (lastDefined) {\n topList.push(topCurve);\n bottomList.push(bottom.curves[n - i - 1]);\n }\n }\n }\n drawAreaBlock(path, topList, bottomList, params);\n }\n\n return;\n }\n if (percent <= 0) {\n return;\n }\n\n let { direction } = params || {};\n const { curves: topCurves } = top;\n const endP = topCurves[topCurves.length - 1].p3 ?? topCurves[topCurves.length - 1].p1;\n const xTotalLength = abs(endP.x - topCurves[0].p0.x);\n const yTotalLength = abs(endP.y - topCurves[0].p0.y);\n direction = direction ?? (xTotalLength > yTotalLength ? Direction.ROW : Direction.COLUMN);\n if (!Number.isFinite(xTotalLength)) {\n direction = Direction.COLUMN;\n }\n if (!Number.isFinite(yTotalLength)) {\n direction = Direction.ROW;\n }\n\n // x和y必须始终保持同方向\n // 整个线段的总长度(基于水平、垂直方向)\n const totalLength: number = direction === Direction.ROW ? xTotalLength : yTotalLength;\n\n // 总需要绘制的长度\n const totalDrawLength = percent * totalLength;\n // 直到上次绘制的长度\n let drawedLengthUntilLast = 0;\n let lastDefined: boolean = true;\n const topList: ICurve[] = [];\n const bottomList: ICurve[] = [];\n let defined0 = true;\n let lastTopCurve: ICurve;\n let lastBottomCurve: ICurve;\n for (let i = 0, n = top.curves.length; i < n; i++) {\n const topCurve = top.curves[i];\n const curCurveLength = topCurve.getLength(direction);\n const percent = (totalDrawLength - drawedLengthUntilLast) / curCurveLength;\n if (percent < 0) {\n break;\n }\n drawedLengthUntilLast += curCurveLength;\n\n if (drawConnect) {\n // step的逻辑\n const bototmCurve = bottom.curves[n - i - 1];\n let currentTopCurve = topCurve;\n let currentBottomCurve = bototmCurve;\n if (topCurve.originP1 === topCurve.originP2) {\n lastTopCurve = topCurve;\n lastBottomCurve = bototmCurve;\n continue;\n }\n if (lastTopCurve && lastTopCurve.originP1 === lastTopCurve.originP2) {\n currentTopCurve = lastTopCurve;\n currentBottomCurve = lastBottomCurve;\n }\n if (topCurve.defined) {\n // 非法变合法需要lineTo,合法变非法需要moveTo,初始非法需要moveTo\n if (!defined0) {\n topList.push(currentTopCurve);\n bottomList.push(currentBottomCurve);\n drawAreaConnectBlock(path, topList, bottomList, params);\n topList.length = 0;\n bottomList.length = 0;\n defined0 = !defined0;\n }\n } else {\n // 找到合法的点\n const { originP1, originP2 } = topCurve;\n let validTopCurve: ICurve;\n let validBottomCurve: ICurve;\n if (originP1 && originP1.defined !== false) {\n validTopCurve = currentTopCurve;\n validBottomCurve = currentBottomCurve;\n } else if (originP1 && originP2.defined !== false) {\n validTopCurve = topCurve;\n validBottomCurve = bototmCurve;\n }\n // 合法/(初始)变非法,moveTo\n if (defined0) {\n defined0 = !defined0;\n topList.push(validTopCurve || topCurve);\n bottomList.push(validBottomCurve || bototmCurve);\n } else {\n // 非法变非法/合法,看情况要不要lineTo\n if (validTopCurve) {\n // 非法变合法,需要lineTo\n defined0 = !defined0;\n topList.push(validTopCurve || topCurve);\n bottomList.push(validBottomCurve || bototmCurve);\n drawAreaConnectBlock(path, topList, bottomList, params);\n topList.length = 0;\n bottomList.length = 0;\n }\n }\n }\n lastTopCurve = topCurve;\n // drawAreaBlock(path, topList, bottomList, params);\n } else {\n let tc: ICurve | null = null;\n let bc: ICurve | null = null;\n if (lastDefined !== topCurve.defined) {\n if (lastDefined) {\n drawAreaBlock(path, topList, bottomList, params);\n topList.length = 0;\n bottomList.length = 0;\n } else {\n tc = topCurve;\n bc = bottom.curves[n - i - 1];\n }\n lastDefined = !lastDefined;\n } else {\n if (lastDefined) {\n tc = topCurve;\n bc = bottom.curves[n - i - 1];\n }\n }\n\n if (tc && bc) {\n if (percent < 1) {\n if (tc.p2 && tc.p3) {\n tc = divideCubic(tc as ICubicBezierCurve, percent)[0];\n } else {\n tc = divideLinear(tc as ILineCurve, percent)[0];\n }\n if (bc.p2 && bc.p3) {\n bc = divideCubic(bc as ICubicBezierCurve, 1 - percent)[1];\n } else {\n bc = divideLinear(bc as ILineCurve, 1 - percent)[1];\n }\n }\n tc.defined = lastDefined;\n bc.defined = lastDefined;\n topList.push(tc);\n bottomList.push(bc);\n }\n\n tc = null;\n bc = null;\n }\n }\n\n if (drawConnect) {\n drawAreaConnectBlock(path, topList, bottomList, params);\n } else {\n drawAreaBlock(path, topList, bottomList, params);\n }\n\n // const totalLength = segPath.tryUpdateLength();\n\n // // 直到上次绘制的长度\n // let drawedLengthUntilLast = 0;\n // for (let i = 0, n = curves.length; i < n; i++) {\n // const curve = curves[i];\n // const curCurveLength = curve.getLength();\n // const _p = (totalDrawLength - drawedLengthUntilLast) / curCurveLength;\n // drawedLengthUntilLast += curCurveLength;\n // if (_p < 0) {\n // break;\n // }\n\n // // 跳过这个点\n // if (!curve.defined()) {\n // needMoveTo = true;\n // continue;\n // }\n // if (needMoveTo) {\n // path.moveTo(curve.p0.x + offsetX, curve.p0.y + offsetY);\n // }\n // drawSegItem(path, curve, min(_p, 1), params);\n // needMoveTo = false;\n // }\n}\n\nfunction drawAreaConnectBlock(\n path: IPath2D,\n topList: ICurve[],\n bottomList: ICurve[],\n params?: {\n offsetX?: number;\n offsetY?: number;\n offsetZ?: number;\n mode?: 'none' | 'connect' | 'zero';\n zeroX?: number;\n zeroY?: number;\n }\n) {\n if (topList.length < 2) {\n return;\n }\n const { offsetX = 0, offsetY = 0, offsetZ = 0, mode } = params || {};\n let curve = topList[0];\n // mode不支持zero\n path.moveTo(curve.p0.x + offsetX, curve.p0.y + offsetY, offsetZ);\n curve = topList[topList.length - 1];\n let end = curve.p3 || curve.p1;\n path.lineTo(end.x + offsetX, end.y + offsetY, offsetZ);\n\n curve = bottomList[bottomList.length - 1];\n path.lineTo(curve.p0.x + offsetX, curve.p0.y + offsetY, offsetZ);\n curve = bottomList[0];\n end = curve.p3 || curve.p1;\n path.lineTo(end.x + offsetX, end.y + offsetY, offsetZ);\n\n path.closePath();\n}\n\nfunction drawAreaBlock(\n path: IPath2D,\n topList: ICurve[],\n bottomList: ICurve[],\n params?: {\n offsetX?: number;\n offsetY?: number;\n offsetZ?: number;\n }\n) {\n const { offsetX = 0, offsetY = 0, offsetZ = 0 } = params || {};\n let needMoveTo = true;\n topList.forEach(curve => {\n // 跳过这个点\n if (!curve.defined) {\n needMoveTo = true;\n return;\n }\n if (needMoveTo) {\n path.moveTo(curve.p0.x + offsetX, curve.p0.y + offsetY, offsetZ);\n }\n drawSegItem(path, curve, 1, params);\n needMoveTo = false;\n });\n needMoveTo = true;\n for (let i = bottomList.length - 1; i >= 0; i--) {\n const curve = bottomList[i];\n // 跳过这个点\n if (!curve.defined) {\n needMoveTo = true;\n continue;\n }\n if (needMoveTo) {\n // bottom需要直接line绘制\n path.lineTo(curve.p0.x + offsetX, curve.p0.y + offsetY, offsetZ);\n }\n drawSegItem(path, curve, 1, params);\n needMoveTo = false;\n }\n path.closePath();\n}\n","import { canvasAllocate } from '../../../../allocator/canvas-allocate';\nimport { BaseRenderContributionTime } from '../../../../common/enums';\nimport type {\n IBaseRenderContribution,\n IContext2d,\n IDrawContext,\n IGraphic,\n IGraphicAttribute,\n IStage,\n IThemeAttribute\n} from '../../../../interface';\nimport { pi2 } from '@visactor/vutils';\n\nexport class DefaultBaseTextureRenderContribution implements IBaseRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n textureMap?: Map;\n order: number = 10;\n\n createCommonPattern(\n size: number,\n padding: number,\n color: string,\n targetContext: IContext2d,\n cb: (r: number, targetContext: IContext2d) => void\n ) {\n const r = (size - padding * 2) / 2;\n const dpr = targetContext.dpr;\n const canvas = canvasAllocate.allocate({ width: size, height: size, dpr });\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return null;\n }\n ctx.inuse = true;\n ctx.clearMatrix();\n ctx.setTransformForCurrent(true);\n ctx.clearRect(0, 0, size, size);\n //setup up design for pattern\n cb(r, ctx);\n const pattern = targetContext.createPattern(canvas.nativeCanvas, 'repeat');\n pattern.setTransform && pattern.setTransform(new DOMMatrix([1 / dpr, 0, 0, 1 / dpr, 0, 0]));\n\n canvasAllocate.free(canvas);\n return pattern;\n }\n\n createCirclePattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n ctx.fillStyle = color;\n ctx.arc(r, r, r, 0, pi2);\n ctx.fill();\n });\n }\n\n createDiamondPattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n const x = size / 2;\n const y = x;\n ctx.fillStyle = color;\n ctx.moveTo(x, y - r);\n ctx.lineTo(r + x, y);\n ctx.lineTo(x, y + r);\n ctx.lineTo(x - r, y);\n ctx.closePath();\n ctx.fill();\n });\n }\n\n createRectPattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n const x = padding;\n const y = x;\n ctx.fillStyle = color;\n ctx.fillRect(x, y, r * 2, r * 2);\n });\n }\n\n createVerticalLinePattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n const x = padding;\n const y = 0;\n ctx.fillStyle = color;\n ctx.fillRect(x, y, r * 2, size);\n });\n }\n\n createHorizontalLinePattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n const x = 0;\n const y = padding;\n ctx.fillStyle = color;\n ctx.fillRect(x, y, size, r * 2);\n });\n }\n\n createBiasLRLinePattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n ctx.strokeStyle = color;\n ctx.lineWidth = r;\n ctx.moveTo(0, 0);\n ctx.lineTo(size, size);\n const dx = size / 2;\n const dy = -dx;\n ctx.moveTo(dx, dy);\n ctx.lineTo(dx + size, dy + size);\n ctx.moveTo(-dx, -dy);\n ctx.lineTo(-dx + size, -dy + size);\n ctx.stroke();\n });\n }\n\n createBiasRLLinePattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n ctx.strokeStyle = color;\n ctx.lineWidth = r;\n ctx.moveTo(size, 0);\n ctx.lineTo(0, size);\n const dx = size / 2;\n const dy = dx;\n ctx.moveTo(size + dx, dy);\n ctx.lineTo(dx, dy + size);\n ctx.moveTo(size - dx, -dy);\n ctx.lineTo(-dx, -dy + size);\n ctx.stroke();\n });\n }\n\n createGridPattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n const x = padding;\n const y = x;\n ctx.fillStyle = color;\n ctx.fillRect(x, y, r, r);\n ctx.fillRect(x + r, y + r, r, r);\n });\n }\n\n initTextureMap(ctx: IContext2d, stage: IStage) {\n this.textureMap = new Map();\n // ResourceLoader.GetImage(rect1, {\n // imageLoadFail: () => {\n // return;\n // },\n // imageLoadSuccess: (url, img) => {\n // const pattern = ctx.createPattern(img, 'repeat');\n // this.textureMap.set('rect1', pattern);\n // stage && stage.renderNextFrame();\n // }\n // });\n }\n\n drawShape(\n graphic: IGraphic,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n options?: any\n ) {\n if (!this.textureMap) {\n this.initTextureMap(context, graphic.stage);\n }\n const {\n texture = graphicAttribute.texture,\n textureColor = graphicAttribute.textureColor,\n textureSize = graphicAttribute.textureSize,\n texturePadding = graphicAttribute.texturePadding\n } = graphic.attribute;\n if (!texture) {\n return;\n }\n this.drawTexture(texture, graphic, context, x, y, graphicAttribute, textureColor, textureSize, texturePadding);\n }\n\n protected drawTexture(\n texture: string,\n graphic: IGraphic,\n context: IContext2d,\n x: number,\n y: number,\n graphicAttribute: Required,\n textureColor: string,\n textureSize: number,\n texturePadding: number\n ) {\n let pattern: CanvasPattern = this.textureMap.get(texture);\n\n if (!pattern) {\n switch (texture) {\n case 'circle':\n pattern = this.createCirclePattern(textureSize, texturePadding, textureColor, context);\n break;\n case 'diamond':\n pattern = this.createDiamondPattern(textureSize, texturePadding, textureColor, context);\n break;\n case 'rect':\n pattern = this.createRectPattern(textureSize, texturePadding, textureColor, context);\n break;\n case 'vertical-line':\n pattern = this.createVerticalLinePattern(textureSize, texturePadding, textureColor, context);\n break;\n case 'horizontal-line':\n pattern = this.createHorizontalLinePattern(textureSize, texturePadding, textureColor, context);\n break;\n case 'bias-lr':\n pattern = this.createBiasLRLinePattern(textureSize, texturePadding, textureColor, context);\n break;\n case 'bias-rl':\n pattern = this.createBiasRLLinePattern(textureSize, texturePadding, textureColor, context);\n break;\n case 'grid':\n pattern = this.createGridPattern(textureSize, texturePadding, textureColor, context);\n break;\n }\n }\n\n if (pattern) {\n context.highPerformanceSave();\n context.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute);\n context.fillStyle = pattern;\n context.fill();\n context.highPerformanceRestore();\n }\n }\n}\n\nexport const defaultBaseTextureRenderContribution = new DefaultBaseTextureRenderContribution();\n","import { BaseRenderContributionTime } from '../../../../common/enums';\nimport type {\n IArcGraphicAttribute,\n IArea,\n IAreaRenderContribution,\n IContext2d,\n IDrawContext,\n IGraphicAttribute,\n IThemeAttribute\n} from '../../../../interface';\nimport { DefaultBaseTextureRenderContribution } from './base-texture-contribution-render';\nimport { getAttributeFromDefaultAttrList } from '../../../../common/utils';\n\nexport class DefaultAreaTextureRenderContribution\n extends DefaultBaseTextureRenderContribution\n implements IAreaRenderContribution\n{\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n\n drawShape(\n graphic: IArea,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n options?: {\n attribute?: Partial;\n }\n ) {\n if (!this.textureMap) {\n this.initTextureMap(context, graphic.stage);\n }\n\n const { attribute = graphic.attribute } = options || {};\n\n const {\n texture = graphic.attribute.texture ?? getAttributeFromDefaultAttrList(graphicAttribute, 'texture'),\n textureColor = graphic.attribute.textureColor ??\n getAttributeFromDefaultAttrList(graphicAttribute, 'textureColor'),\n textureSize = graphic.attribute.textureSize ?? getAttributeFromDefaultAttrList(graphicAttribute, 'textureSize'),\n texturePadding = graphic.attribute.texturePadding ??\n getAttributeFromDefaultAttrList(graphicAttribute, 'texturePadding')\n } = attribute;\n if (!texture) {\n return;\n }\n this.drawTexture(texture, graphic, context, x, y, graphicAttribute, textureColor, textureSize, texturePadding);\n }\n}\n","import type { IPointLike } from '@visactor/vutils';\nimport { abs, isArray, min } from '@visactor/vutils';\nimport { inject, injectable, named } from '../../../common/inversify-lite';\nimport type {\n IArea,\n IAreaCacheItem,\n IAreaGraphicAttribute,\n IGraphicAttribute,\n IContext2d,\n ICurveType,\n IMarkAttribute,\n IThemeAttribute,\n ISegPath2D,\n IDirection,\n IAreaRenderContribution,\n IDrawContext,\n IRenderService,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IContributionProvider,\n IStrokeType\n} from '../../../interface';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport {\n genLinearSegments,\n genBasisSegments,\n genMonotoneXSegments,\n genMonotoneYSegments,\n genStepSegments,\n genLinearClosedSegments\n} from '../../../common/segment';\n\nimport { getTheme } from '../../../graphic/theme';\nimport { drawPathProxy, fillVisible, runFill, runStroke, strokeVisible } from './utils';\nimport { AreaRenderContribution } from './contributions/constants';\nimport { BaseRenderContributionTime, Direction } from '../../../common/enums';\nimport { drawAreaSegments } from '../../../common/render-area';\nimport { AREA_NUMBER_TYPE } from '../../../graphic/constants';\nimport { drawSegments } from '../../../common/render-curve';\nimport { BaseRender } from './base-render';\nimport {\n defaultAreaBackgroundRenderContribution,\n defaultAreaTextureRenderContribution\n} from './contributions/area-contribution-render';\nimport { segments } from '../../../common/shape/arc';\n\nfunction calcLineCache(\n points: IPointLike[],\n curveType: ICurveType,\n params?: { direction?: IDirection; startPoint?: IPointLike }\n): ISegPath2D | null {\n switch (curveType) {\n case 'linear':\n return genLinearSegments(points, params);\n case 'basis':\n return genBasisSegments(points, params);\n case 'monotoneX':\n return genMonotoneXSegments(points, params);\n case 'monotoneY':\n return genMonotoneYSegments(points, params);\n case 'step':\n return genStepSegments(points, 0.5, params);\n case 'stepBefore':\n return genStepSegments(points, 0, params);\n case 'stepAfter':\n return genStepSegments(points, 1, params);\n case 'linearClosed':\n return genLinearClosedSegments(points, params);\n default:\n return genLinearSegments(points, params);\n }\n}\n\n@injectable()\nexport class DefaultCanvasAreaRender extends BaseRender implements IGraphicRender {\n type: 'area';\n numberType: number = AREA_NUMBER_TYPE;\n\n constructor(\n @inject(ContributionProvider)\n @named(AreaRenderContribution)\n protected readonly areaRenderContribitions: IContributionProvider\n ) {\n super();\n this.builtinContributions = [defaultAreaTextureRenderContribution, defaultAreaBackgroundRenderContribution];\n this.init(areaRenderContribitions);\n }\n\n drawLinearAreaHighPerformance(\n area: IArea,\n context: IContext2d,\n fill: boolean,\n stroke: boolean,\n fillOpacity: number,\n strokeOpacity: number,\n offsetX: number,\n offsetY: number,\n areaAttribute: Required,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n lineAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n lineAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n context.beginPath();\n\n const z = this.z ?? 0;\n const { points } = area.attribute;\n const startP = points[0];\n\n context.moveTo(startP.x + offsetX, startP.y + offsetY, z);\n for (let i = 1; i < points.length; i++) {\n const p = points[i];\n context.lineTo(p.x + offsetX, p.y + offsetY, z);\n }\n for (let i = points.length - 1; i >= 0; i--) {\n const p = points[i];\n context.lineTo((p.x1 ?? p.x) + offsetX, (p.y1 ?? p.y) + offsetY, z);\n }\n context.closePath();\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(area, area.attribute, areaAttribute);\n\n this.beforeRenderStep(\n area,\n context,\n offsetX,\n offsetY,\n !!fillOpacity,\n false,\n fill,\n false,\n areaAttribute as any,\n drawContext,\n fillCb,\n null,\n { attribute: area.attribute }\n );\n\n const { x: originX = 0, x: originY = 0 } = area.attribute;\n if (fill !== false) {\n if (fillCb) {\n fillCb(context, area.attribute, areaAttribute);\n } else if (fillOpacity) {\n context.setCommonStyle(area, area.attribute, originX - offsetX, originY - offsetY, areaAttribute);\n context.fill();\n }\n }\n\n this.afterRenderStep(\n area,\n context,\n offsetX,\n offsetY,\n !!fillOpacity,\n false,\n fill,\n false,\n areaAttribute as any,\n drawContext,\n fillCb,\n null,\n { attribute: area.attribute }\n );\n\n if (stroke) {\n const { stroke = areaAttribute && areaAttribute.stroke } = area.attribute;\n if (isArray(stroke) && (stroke[0] || stroke[2]) && stroke[1] === false) {\n context.beginPath();\n if (stroke[0]) {\n context.moveTo(startP.x + offsetX, startP.y + offsetY, z);\n for (let i = 1; i < points.length; i++) {\n const p = points[i];\n context.lineTo(p.x + offsetX, p.y + offsetY, z);\n }\n } else if (stroke[2]) {\n const endP = points[points.length - 1];\n context.moveTo(endP.x + offsetX, endP.y + offsetY, z);\n for (let i = points.length - 2; i >= 0; i--) {\n const p = points[i];\n context.lineTo((p.x1 ?? p.x) + offsetX, (p.y1 ?? p.y) + offsetY, z);\n }\n }\n }\n if (strokeCb) {\n strokeCb(context, area.attribute, areaAttribute);\n } else {\n context.setStrokeStyle(area, area.attribute, originX - offsetX, originY - offsetY, areaAttribute);\n context.stroke();\n }\n }\n }\n\n drawShape(\n area: IArea,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n lineAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const areaAttribute = getTheme(area, params?.theme).area;\n const {\n fill = areaAttribute.fill,\n stroke = areaAttribute.stroke,\n fillOpacity = areaAttribute.fillOpacity,\n z = areaAttribute.z,\n strokeOpacity = areaAttribute.strokeOpacity\n } = area.attribute;\n\n const data = this.valid(area, areaAttribute, fillCb, strokeCb);\n if (!data) {\n return;\n }\n const { doFill, doStroke } = data;\n\n const { clipRange = areaAttribute.clipRange, closePath, points, segments } = area.attribute;\n let { curveType = areaAttribute.curveType } = area.attribute;\n if (closePath && curveType === 'linear') {\n curveType = 'linearClosed';\n }\n\n if (clipRange === 1 && !segments && !points.some(p => p.defined === false) && curveType === 'linear') {\n return this.drawLinearAreaHighPerformance(\n area,\n context,\n !!fill,\n doStroke,\n fillOpacity,\n strokeOpacity,\n x,\n y,\n areaAttribute,\n drawContext,\n params,\n fillCb,\n strokeCb\n );\n }\n\n // 更新cache\n if (area.shouldUpdateShape()) {\n if (segments && segments.length) {\n let startPoint: IPointLike;\n let lastTopSeg: { endX: number; endY: number };\n const topCaches = segments\n .map((seg, index) => {\n if (seg.points.length <= 1) {\n // 第一个点的话,直接设置lastTopSeg\n if (index === 0) {\n seg.points[0] && (lastTopSeg = { endX: seg.points[0].x, endY: seg.points[0].y });\n return null;\n }\n }\n // 添加上一个segment结束的点作为这个segment的起始点\n if (index === 1) {\n startPoint = { x: lastTopSeg.endX, y: lastTopSeg.endY };\n } else if (index > 1) {\n startPoint.x = lastTopSeg.endX;\n startPoint.y = lastTopSeg.endY;\n }\n const data = calcLineCache(seg.points, curveType, {\n startPoint\n });\n lastTopSeg = data;\n return data;\n })\n .filter(item => !!item);\n let lastBottomSeg: ISegPath2D;\n const bottomCaches = [];\n for (let i = segments.length - 1; i >= 0; i--) {\n const points = segments[i].points;\n const bottomPoints: IPointLike[] = [];\n for (let i = points.length - 1; i >= 0; i--) {\n bottomPoints.push({\n x: points[i].x1 ?? points[i].x,\n y: points[i].y1 ?? points[i].y\n });\n }\n // 处理一下bottom的segments,bottom的segments需要手动添加endPoints\n if (i !== 0) {\n const lastSegmentPoints = segments[i - 1].points;\n const endPoint = lastSegmentPoints[lastSegmentPoints.length - 1];\n endPoint &&\n bottomPoints.push({\n x: endPoint.x1 ?? endPoint.x,\n y: endPoint.y1 ?? endPoint.y\n });\n }\n if (bottomPoints.length > 1) {\n lastBottomSeg = calcLineCache(\n bottomPoints,\n curveType === 'stepBefore' ? 'stepAfter' : curveType === 'stepAfter' ? 'stepBefore' : curveType\n );\n bottomCaches.unshift(lastBottomSeg);\n }\n }\n area.cacheArea = bottomCaches.map((item, index) => ({\n top: topCaches[index],\n bottom: item\n }));\n } else if (points && points.length) {\n // 转换points\n const topPoints = points;\n const bottomPoints: IPointLike[] = [];\n for (let i = points.length - 1; i >= 0; i--) {\n bottomPoints.push({\n x: points[i].x1 ?? points[i].x,\n y: points[i].y1 ?? points[i].y\n });\n }\n const topCache = calcLineCache(topPoints, curveType);\n const bottomCache = calcLineCache(\n bottomPoints,\n curveType === 'stepBefore' ? 'stepAfter' : curveType === 'stepAfter' ? 'stepBefore' : curveType\n );\n\n area.cacheArea = { top: topCache, bottom: bottomCache };\n } else {\n area.cacheArea = null;\n area.clearUpdateShapeTag();\n return;\n }\n area.clearUpdateShapeTag();\n }\n\n if (Array.isArray(area.cacheArea)) {\n const segments = area.attribute.segments.filter(item => item.points.length);\n // 如果第一个seg只有一个点,那么shift出去\n if (segments[0].points.length === 1) {\n segments.shift();\n }\n if (clipRange === 1) {\n let skip = false;\n // 性能优化,不需要clip的线段不需要计算长度\n area.cacheArea.forEach((cache, index) => {\n if (skip) {\n return;\n }\n skip = this.drawSegmentItem(\n context,\n cache,\n doFill,\n fillOpacity,\n doStroke,\n strokeOpacity,\n segments[index],\n [areaAttribute, area.attribute],\n clipRange,\n x,\n y,\n z,\n area,\n drawContext,\n fillCb,\n strokeCb\n );\n });\n } else {\n // 如果是segments的话,每个clipRange需要重新计算\n // 整个线段的总长度\n const totalLength = area.cacheArea.reduce((l, c) => l + c.top.getLength(), 0);\n // 总需要绘制的长度\n const totalDrawLength = clipRange * totalLength;\n // 直到上次绘制的长度\n let drawedLengthUntilLast = 0;\n let skip = false;\n area.cacheArea.forEach((cache, index) => {\n if (skip) {\n return;\n }\n const curSegLength = cache.top.getLength();\n const _cr = (totalDrawLength - drawedLengthUntilLast) / curSegLength;\n drawedLengthUntilLast += curSegLength;\n if (_cr > 0) {\n skip = this.drawSegmentItem(\n context,\n cache,\n doFill,\n fillOpacity,\n doStroke,\n strokeOpacity,\n segments[index],\n [areaAttribute, area.attribute],\n min(_cr, 1),\n x,\n y,\n z,\n area,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n });\n }\n } else {\n this.drawSegmentItem(\n context,\n area.cacheArea as IAreaCacheItem,\n doFill,\n fillOpacity,\n doStroke,\n strokeOpacity,\n area.attribute,\n areaAttribute,\n clipRange,\n x,\n y,\n z,\n area,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n }\n\n draw(area: IArea, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const areaAttribute = getTheme(area, params?.theme).area;\n this._draw(area, areaAttribute, false, drawContext, params);\n }\n\n /**\n * 绘制segment\n * @param context\n * @param cache\n * @param fill\n * @param stroke\n * @param attribute\n * @param defaultAttribute\n * @param clipRange\n * @param offsetX\n * @param offsetY\n * @param fillCb\n * @param strokeCb\n * @returns 返回true代表跳过后续绘制\n */\n protected drawSegmentItem(\n context: IContext2d,\n cache: IAreaCacheItem,\n fill: boolean,\n fillOpacity: number,\n stroke: boolean,\n strokeOpacity: number,\n attribute: Partial,\n defaultAttribute: Required | Partial[],\n clipRange: number,\n offsetX: number,\n offsetY: number,\n offsetZ: number,\n area: IArea,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n lineAttribute: Partial,\n themeAttribute: IThemeAttribute | IThemeAttribute[]\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n lineAttribute: Partial,\n themeAttribute: IThemeAttribute | IThemeAttribute[]\n ) => boolean\n ): boolean {\n let ret = false;\n ret =\n ret ||\n this._drawSegmentItem(\n context,\n cache,\n fill,\n fillOpacity,\n stroke,\n strokeOpacity,\n attribute,\n defaultAttribute,\n clipRange,\n offsetX,\n offsetY,\n offsetZ,\n area,\n drawContext,\n false,\n fillCb,\n strokeCb\n );\n ret =\n ret ||\n this._drawSegmentItem(\n context,\n cache,\n fill,\n fillOpacity,\n stroke,\n strokeOpacity,\n attribute,\n defaultAttribute,\n clipRange,\n offsetX,\n offsetY,\n offsetZ,\n area,\n drawContext,\n true,\n fillCb,\n strokeCb\n );\n return ret;\n }\n\n protected _drawSegmentItem(\n context: IContext2d,\n cache: IAreaCacheItem,\n fill: boolean,\n fillOpacity: number,\n stroke: boolean,\n strokeOpacity: number,\n attribute: Partial,\n defaultAttribute: Required | Partial[],\n clipRange: number,\n offsetX: number,\n offsetY: number,\n offsetZ: number,\n area: IArea,\n drawContext: IDrawContext,\n connect: boolean,\n fillCb?: (\n ctx: IContext2d,\n lineAttribute: Partial,\n themeAttribute: IThemeAttribute | IThemeAttribute[]\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n lineAttribute: Partial,\n themeAttribute: IThemeAttribute | IThemeAttribute[]\n ) => boolean\n ) {\n // 绘制connect区域\n let { connectedType, connectedX, connectedY, connectedStyle } = attribute;\n const da = [];\n if (connect) {\n if (isArray(defaultAttribute)) {\n connectedType = connectedType ?? defaultAttribute[0].connectedType ?? defaultAttribute[1].connectedType;\n connectedX = connectedX ?? defaultAttribute[0].connectedX ?? defaultAttribute[1].connectedX;\n connectedY = connectedY ?? defaultAttribute[0].connectedY ?? defaultAttribute[1].connectedY;\n connectedStyle = connectedStyle ?? defaultAttribute[0].connectedStyle ?? defaultAttribute[1].connectedStyle;\n } else {\n connectedType = connectedType ?? defaultAttribute.connectedType;\n connectedX = connectedX ?? defaultAttribute.connectedX;\n connectedY = connectedY ?? defaultAttribute.connectedY;\n connectedStyle = connectedStyle ?? defaultAttribute.connectedStyle;\n }\n\n // 如果有非法值就是none\n if (connectedType !== 'connect' && connectedType !== 'zero') {\n connectedType = 'none';\n }\n\n if (isArray(defaultAttribute)) {\n defaultAttribute.forEach(i => da.push(i));\n } else {\n da.push(defaultAttribute);\n }\n da.push(attribute);\n }\n\n if (connect && connectedType === 'none') {\n return false;\n }\n\n if (!cache) {\n return;\n }\n context.beginPath();\n\n const ret: boolean = false;\n const { points, segments } = area.attribute;\n let direction = Direction.ROW;\n let endP: IPointLike;\n let startP: IPointLike;\n if (segments) {\n const endSeg = segments[segments.length - 1];\n const startSeg = segments[0];\n startP = startSeg.points[0];\n endP = endSeg.points[endSeg.points.length - 1];\n } else {\n startP = points[0];\n endP = points[points.length - 1];\n }\n const xTotalLength = abs(endP.x - startP.x);\n const yTotalLength = abs(endP.y - startP.y);\n direction = xTotalLength > yTotalLength ? Direction.ROW : Direction.COLUMN;\n drawAreaSegments(context.camera ? context : context.nativeContext, cache, clipRange, {\n offsetX,\n offsetY,\n offsetZ,\n direction,\n drawConnect: connect,\n mode: connectedType,\n zeroX: connectedX,\n zeroY: connectedY\n });\n\n this.beforeRenderStep(\n area,\n context,\n offsetX,\n offsetY,\n !!fillOpacity,\n false,\n fill,\n false,\n defaultAttribute as any,\n drawContext,\n fillCb,\n null,\n { attribute }\n );\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(area, attribute, defaultAttribute);\n\n const { x: originX = 0, x: originY = 0 } = attribute;\n if (fill !== false) {\n if (fillCb) {\n fillCb(context, attribute, defaultAttribute);\n } else if (fillOpacity) {\n context.setCommonStyle(\n area,\n connect ? connectedStyle : attribute,\n originX - offsetX,\n originY - offsetY,\n connect ? da : defaultAttribute\n );\n context.fill();\n }\n }\n\n this.afterRenderStep(\n area,\n context,\n offsetX,\n offsetY,\n !!fillOpacity,\n false,\n fill,\n false,\n defaultAttribute as any,\n drawContext,\n fillCb,\n null,\n { attribute }\n );\n\n if (stroke !== false) {\n if (strokeCb) {\n strokeCb(context, attribute, defaultAttribute);\n } else {\n const { stroke = defaultAttribute && defaultAttribute[1] && defaultAttribute[1].stroke } = attribute;\n if (isArray(stroke) && (stroke[0] || stroke[2]) && stroke[1] === false) {\n context.beginPath();\n drawSegments(\n context.camera ? context : context.nativeContext,\n stroke[0] ? cache.top : cache.bottom,\n clipRange,\n direction === Direction.ROW ? 'x' : 'y',\n {\n offsetX,\n offsetY,\n offsetZ,\n drawConnect: connect,\n mode: connectedType,\n zeroX: connectedX,\n zeroY: connectedY\n }\n );\n }\n context.setStrokeStyle(\n area,\n connect ? connectedStyle : attribute,\n originX - offsetX,\n originY - offsetY,\n connect ? da : defaultAttribute\n );\n context.stroke();\n }\n }\n\n return ret;\n }\n}\n","import { injectable } from '../../../common/inversify-lite';\nimport type {\n IArea,\n IAreaGraphicAttribute,\n IAreaSegment,\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IThemeAttribute,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IDrawContext\n} from '../../../interface';\nimport { AREA_NUMBER_TYPE } from '../../../graphic/constants';\nimport { getTheme } from '../../../graphic/theme';\nimport { fillVisible, runFill } from './utils';\nimport { DefaultCanvasAreaRender } from './area-render';\nimport { drawIncrementalAreaSegments } from '../../../common/render-curve';\n\n/**\n * 默认的基于canvas的line渲染器\n * 单例\n */\n@injectable()\nexport class DefaultIncrementalCanvasAreaRender extends DefaultCanvasAreaRender implements IGraphicRender {\n declare type: 'area';\n numberType: number = AREA_NUMBER_TYPE;\n\n drawShape(\n area: IArea,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n lineAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n if (area.incremental && drawContext.multiGraphicOptions) {\n const { startAtIdx, length } = drawContext.multiGraphicOptions;\n const { segments = [] } = area.attribute;\n if (startAtIdx > segments.length) {\n return;\n }\n const areaAttribute = getTheme(area).area;\n const {\n fill = areaAttribute.fill,\n fillOpacity = areaAttribute.fillOpacity,\n opacity = areaAttribute.opacity,\n visible = areaAttribute.visible\n } = area.attribute;\n // 不绘制或者透明\n const fVisible = fillVisible(opacity, fillOpacity, fill);\n const doFill = runFill(fill);\n\n if (!(area.valid && visible)) {\n return;\n }\n\n if (!doFill) {\n return;\n }\n\n // 如果存在fillCb和strokeCb,那就不直接跳过\n if (!(fVisible || fillCb)) {\n return;\n }\n\n // 不支持clipRange,不支持pick,仅支持最基础的线段绘制\n for (let i = startAtIdx; i < startAtIdx + length; i++) {\n this.drawIncreaseSegment(\n area,\n context,\n segments[i - 1],\n segments[i],\n area.attribute.segments[i],\n [areaAttribute, area.attribute],\n x,\n y\n );\n }\n } else {\n super.drawShape(area, context, x, y, drawContext, params, fillCb);\n }\n }\n\n drawIncreaseSegment(\n area: IArea,\n context: IContext2d,\n lastSeg: IAreaSegment,\n seg: IAreaSegment,\n attribute: Partial,\n defaultAttribute: Required | Partial[],\n offsetX: number,\n offsetY: number\n ) {\n if (!seg) {\n return;\n }\n\n context.beginPath();\n drawIncrementalAreaSegments(context.camera ? context : context.nativeContext, lastSeg, seg, {\n offsetX,\n offsetY\n });\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(area, attribute, defaultAttribute);\n context.setCommonStyle(area, attribute, offsetX, offsetY, defaultAttribute);\n context.fill();\n }\n}\n","import { injectable, inject, named, multiInject } from '../../../common/inversify-lite';\nimport type {\n IGraphic,\n IGroup,\n IGlobal,\n IRenderService,\n IDrawContext,\n IDrawContribution,\n IGraphicRender,\n IRenderSelector,\n IDrawItemInterceptorContribution,\n IContributionProvider\n} from '../../../interface';\nimport { DefaultAttribute } from '../../../graphic';\nimport { LayerService } from '../../../core/constants';\nimport { DefaultDrawContribution } from './draw-contribution';\nimport { SyncHook } from '../../../tapable';\nimport { GraphicRender, RenderSelector } from './symbol';\nimport { DefaultIncrementalCanvasLineRender } from './incremental-line-render';\nimport { DefaultIncrementalCanvasAreaRender } from './incremental-area-render';\nimport { DrawItemInterceptor } from './draw-interceptor';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport { foreachAsync } from '../../../common/sort';\n\nenum STATUS {\n NORMAL = 0,\n STOP = 1\n}\n\n/**\n * 增量渲染的contribution,基于树状结构针对图元的渲染\n * 不是单例模式\n */\n@injectable()\nexport class DefaultIncrementalDrawContribution extends DefaultDrawContribution implements IDrawContribution {\n rendering: boolean = false;\n protected currFrameStartAt: number = 0;\n protected currentIdx: number = 0;\n protected status: STATUS = STATUS.NORMAL;\n protected checkingForDrawPromise: Promise | null = null;\n hooks = {\n completeDraw: new SyncHook<[]>([])\n };\n protected lastRenderService: IRenderService;\n protected lastDrawContext: IDrawContext;\n protected count: number;\n\n constructor(\n // @inject(ContributionProvider)\n // @named(GraphicRender)\n // protected readonly contributions: ContributionProvider,\n @multiInject(GraphicRender) protected readonly contributions: IGraphicRender[],\n // @inject(RenderSelector) protected readonly renderSelector: IRenderSelector, // 根据图元类型选择对应的renderItem进行渲染\n @inject(DefaultIncrementalCanvasLineRender) protected readonly lineRender: IGraphicRender, // 默认的lineRender\n @inject(DefaultIncrementalCanvasAreaRender) protected readonly areaRender: IGraphicRender, // 默认的lineRender\n // 拦截器\n @inject(ContributionProvider)\n @named(DrawItemInterceptor)\n protected readonly drawItemInterceptorContributions: IContributionProvider\n ) {\n super(contributions, drawItemInterceptorContributions);\n this.defaultRenderMap.set(this.lineRender.numberType, this.lineRender);\n this.defaultRenderMap.set(this.areaRender.numberType, this.areaRender);\n }\n\n /**\n *\n * @param renderService\n * @param drawContext restartIncremental为true表示重新执行增量渲染,为false表示不执行增量渲染\n * @returns\n */\n async draw(renderService: IRenderService, drawContext: IDrawContext): Promise {\n // 入口检查是否需要重新绘制\n if (this.checkingForDrawPromise) {\n return;\n }\n this.lastRenderService = renderService;\n this.lastDrawContext = drawContext;\n\n this.checkingForDrawPromise = this.checkForDraw(drawContext);\n const skipDraw = await this.checkingForDrawPromise;\n this.checkingForDrawPromise = null;\n if (skipDraw) {\n return;\n }\n\n this.currentRenderService = renderService;\n const { context, x = 0, y = 0 } = drawContext;\n\n if (!context) {\n return;\n }\n // 增量渲染不需要dirtyBounds\n // const dirtyBounds: IBounds | undefined = this.dirtyBounds.setValue(x, y, x + width, y + height);\n // if (stage.dirtyBounds) {\n // const b = getRectIntersect(dirtyBounds, stage.dirtyBounds, false);\n // dirtyBounds.x1 = Math.floor(b.x1);\n // dirtyBounds.y1 = Math.floor(b.y1);\n // dirtyBounds.x2 = Math.ceil(b.x2);\n // dirtyBounds.y2 = Math.ceil(b.y2);\n // }\n context.inuse = true;\n // 初始化context\n context.clearMatrix();\n context.setTransformForCurrent(true);\n\n // const drawInArea =\n // dirtyBounds.width() * context.dpr !== context.canvas.width ||\n // dirtyBounds.height() * context.dpr !== context.canvas.height;\n context.save();\n\n // if (drawInArea) {\n // context.beginPath();\n // context.rect(dirtyBounds.x1, dirtyBounds.y1, dirtyBounds.width(), dirtyBounds.height());\n // context.clip();\n // }\n\n // this.clearScreen(renderService, context, drawContext);\n\n // 绘制之前需要清空画布\n drawContext.restartIncremental && this.clearScreen(this.currentRenderService, context, drawContext);\n // 设置translate\n context.translate(x, y, true);\n\n context.save();\n renderService.renderTreeRoots\n .sort((a, b) => {\n return (a.attribute.zIndex ?? DefaultAttribute.zIndex) - (b.attribute.zIndex ?? DefaultAttribute.zIndex);\n })\n .forEach(group => {\n this.renderGroup(group as IGroup, drawContext);\n });\n\n this.hooks.completeDraw.tap('top-draw', () => {\n context.restore();\n context.restore();\n context.draw();\n context.inuse = false;\n this.rendering = false;\n });\n }\n\n protected async _increaseRender(group: IGroup, drawContext: IDrawContext) {\n this.rendering = true;\n await this._renderIncrementalGroup(group, drawContext);\n return;\n }\n\n // 默认group后只有一层节点,也就是group是叶子结点的父节点\n protected async _renderIncrementalGroup(group: IGroup, drawContext: IDrawContext) {\n this.count = group.count;\n await new Promise(resolve => {\n this.renderItem(group, drawContext, {\n drawingCb: async () => {\n // 增量图元只支持一个,线段和面积图\n if (group.count === 2) {\n const graphic = group.getChildAt(0) as IGraphic;\n if (graphic.incremental && (graphic.attribute as any).segments) {\n if (!graphic.incrementalAt) {\n graphic.incrementalAt = 0;\n }\n while (graphic.incrementalAt < (graphic.attribute as any).segments.length) {\n drawContext.multiGraphicOptions = {\n startAtIdx: graphic.incrementalAt,\n length: graphic.incremental\n };\n this.renderItem(graphic, drawContext);\n graphic.incrementalAt += graphic.incremental;\n await this.waitToNextFrame();\n }\n } else {\n this.renderItem(graphic, drawContext);\n }\n resolve(false);\n return;\n }\n await foreachAsync(group, DefaultAttribute.zIndex, (item: IGraphic, i: number) => {\n if (this.status === STATUS.STOP) {\n return true;\n }\n if (item.isContainer) {\n // 增量渲染group下不应该有其他的group节点\n return false;\n }\n // 如果小于currentIdx,说明还没到当前的位置,那就直接跳过\n if (i < this.currentIdx) {\n return false;\n }\n const frameTail = this.currFrameStartAt + group.incremental;\n // 绘制 currentIdx到this.lastFrameIdx + group.incremental的内容\n if (i < frameTail) {\n this.currentIdx = i + 1;\n this.renderItem(item, drawContext);\n }\n // 下一帧\n if (i === frameTail - 1) {\n this.currFrameStartAt = this.currentIdx;\n // this.lastFrameIdx = this.currentIdx;\n return this.waitToNextFrame();\n }\n\n return false;\n });\n resolve(false);\n }\n });\n });\n this.hooks.completeDraw.call();\n }\n\n protected async waitToNextFrame(): Promise {\n return new Promise(resolve => {\n this.global.getRequestAnimationFrame()(() => {\n resolve(false);\n });\n });\n }\n\n /**\n * 检查这次绘制是否跳过,以及执行一些准备\n * 增量渲染有自己的绘制逻辑流程,外部每次触发draw,该图层不一定会执行\n * @returns 返回true代表跳过绘制,false代表进行绘制\n */\n protected async checkForDraw(drawContext: IDrawContext): Promise {\n let skip = this.rendering;\n if (drawContext.restartIncremental) {\n skip = false;\n await this.forceStop();\n this.resetToInit();\n }\n return skip;\n }\n\n protected async forceStop() {\n if (this.rendering) {\n this.status = STATUS.STOP;\n await new Promise(resolve => {\n this.hooks.completeDraw.tap('stopCb', () => {\n this.status = STATUS.NORMAL;\n this.hooks.completeDraw.taps = this.hooks.completeDraw.taps.filter(item => {\n return item.name !== 'stopCb';\n });\n resolve(false);\n });\n });\n }\n }\n\n protected resetToInit() {\n this.currFrameStartAt = 0;\n this.currentIdx = 0;\n }\n\n async renderGroup(group: IGroup, drawContext: IDrawContext) {\n if (drawContext.break || group.attribute.visibleAll === false) {\n return;\n }\n if (group.incremental && drawContext.startAtId === group._uid) {\n await this._increaseRender(group, drawContext);\n drawContext.break = true;\n return;\n }\n\n await new Promise(resolve => {\n this.renderItem(group, drawContext, {\n drawingCb: async () => {\n await foreachAsync(group, DefaultAttribute.zIndex, async (item: IGraphic) => {\n if (drawContext.break) {\n return;\n }\n if (item.isContainer) {\n await this.renderGroup(item as IGroup, drawContext);\n } else {\n // 增量渲染不管非_increaseRender的内容\n return;\n }\n });\n resolve(false);\n }\n });\n });\n }\n\n // /**\n // * 一个每一帧都执行的脚本,用于检查和触发执行draw\n // */\n // protected autoRunner() {\n\n // }\n}\n","import { ContainerModule } from '../../../common/inversify-lite';\nimport { bindContributionProvider } from '../../../common/contribution-provider';\nimport { DefaultDrawContribution } from './draw-contribution';\nimport { DefaultCanvasGroupRender } from './group-render';\nimport { DefaultIncrementalDrawContribution } from './incremental-draw-contribution';\nimport { DrawContribution, GraphicRender, GroupRender, IncrementalDrawContribution } from './symbol';\nimport { CommonDrawItemInterceptorContribution, DrawItemInterceptor } from './draw-interceptor';\nimport { GroupRenderContribution, InteractiveSubRenderContribution } from './contributions/constants';\nimport {\n DefaultBaseBackgroundRenderContribution,\n DefaultBaseInteractiveRenderContribution,\n DefaultBaseTextureRenderContribution\n} from './contributions';\n\nexport default new ContainerModule(bind => {\n bind(DefaultBaseBackgroundRenderContribution).toSelf().inSingletonScope();\n bind(DefaultBaseTextureRenderContribution).toSelf().inSingletonScope();\n\n bind(DrawContribution).to(DefaultDrawContribution);\n bind(IncrementalDrawContribution).to(DefaultIncrementalDrawContribution);\n\n // bind(RenderSelector).to(DefaultRenderSelector).inSingletonScope();\n\n // group渲染器\n bind(GroupRender).to(DefaultCanvasGroupRender).inSingletonScope();\n bind(GraphicRender).toService(GroupRender);\n\n // group 渲染器注入contributions\n bindContributionProvider(bind, GroupRenderContribution);\n\n // 绑定通用interactive contribution\n bind(DefaultBaseInteractiveRenderContribution).toSelf().inSingletonScope();\n bindContributionProvider(bind, InteractiveSubRenderContribution);\n bindContributionProvider(bind, GraphicRender);\n\n // interceptor\n // bind(ShadowRootDrawItemInterceptorContribution).toSelf().inSingletonScope();\n // bind(DrawItemInterceptor).toService(ShadowRootDrawItemInterceptorContribution);\n bind(CommonDrawItemInterceptorContribution).toSelf().inSingletonScope();\n bind(DrawItemInterceptor).toService(CommonDrawItemInterceptorContribution);\n // bind(Canvas3DDrawItemInterceptor).toSelf().inSingletonScope();\n // bind(DrawItemInterceptor).toService(Canvas3DDrawItemInterceptor);\n // bind(InteractiveDrawItemInterceptorContribution).toSelf().inSingletonScope();\n // bind(DrawItemInterceptor).toService(InteractiveDrawItemInterceptorContribution);\n bindContributionProvider(bind, DrawItemInterceptor);\n});\n","import coreModule from './core/core-modules';\nimport renderModule from './render/render-modules';\nimport pickModule from './picker/pick-modules';\n// import allocatorModule from './allocator/allocator-modules';\nimport graphicModule from './graphic/graphic-service/graphic-module';\nimport pluginModule from './plugins/plugin-modules';\nimport loadBuiltinContributions from './core/contributions/modules';\nimport loadRenderContributions from './render/contributions/modules';\n// import loadPickContributions from './picker/contributions/modules';\n// import loadCanvasContributions from './canvas/contributions/modules';\nimport { LayerService } from './core/constants';\n// import { IMat4Allocate, IMatrixAllocate, Mat4Allocate, MatrixAllocate } from './allocator/matrix-allocate';\n// import { GlobalPickerService } from './picker/constants';\nimport type { IGlobal, IGraphicService, IPickerService } from './interface';\nimport { application } from './application';\nimport type { IGraphicUtil, ILayerService, ITransformUtil } from './interface/core';\nimport { GraphicService } from './graphic/constants';\nimport { GraphicUtil, TransformUtil } from './core/constants';\nimport { container } from './container';\nimport { VGlobal } from './constants';\n\nexport function preLoadAllModule() {\n if (preLoadAllModule.__loaded) {\n return;\n }\n preLoadAllModule.__loaded = true;\n container.load(coreModule);\n container.load(graphicModule);\n container.load(renderModule);\n container.load(pickModule);\n // container.load(allocatorModule);\n container.load(pluginModule);\n loadBuiltinContributions(container);\n loadRenderContributions(container);\n}\n\npreLoadAllModule.__loaded = false;\n\npreLoadAllModule();\n// loadPickContributions(container);\n// loadCanvasContributions(container);\n\n// 全局变量\nexport const vglobal = container.get(VGlobal);\napplication.global = vglobal;\nexport const graphicUtil = container.get(GraphicUtil);\napplication.graphicUtil = graphicUtil;\nexport const transformUtil = container.get(TransformUtil);\napplication.transformUtil = transformUtil;\nexport const graphicService = container.get(GraphicService);\napplication.graphicService = graphicService;\n// export const matrixAllocate = container.get(MatrixAllocate);\n// export const mat4Allocate = container.get(Mat4Allocate);\n// export const canvasAllocate = container.get(CanvasAllocate);\n// export const arcAllocate = container.get(ArcAllocate);\n// export const areaAllocate = container.get(AreaAllocate);\n// export const circleAllocate = container.get(CircleAllocate);\n// export const lineAllocate = container.get(LineAllocate);\n// export const pathAllocate = container.get(PathAllocate);\n// export const rectAllocate = container.get(RectAllocate);\n// export const symbolAllocate = container.get(SymbolAllocate);\n// export const textAllocate = container.get(TextAllocate);\n// export const pickerService = container.get(GlobalPickerService);\nexport const layerService = container.get(LayerService);\napplication.layerService = layerService;\n","import type { Container } from '../../common/inversify-lite';\nimport envModules from './env/modules';\nimport textMeasureModules from './textMeasure/modules';\nimport layerHandlerModules from './layerHandler/modules';\n\nexport default function load(container: Container) {\n container.load(envModules);\n container.load(textMeasureModules);\n container.load(layerHandlerModules);\n}\n","import type { Container } from '../../common/inversify-lite';\nimport renderModule from './render/module';\n\nexport default function load(container: Container) {\n container.load(renderModule);\n}\n","import { isString, isFunction, isNil, array, Color } from '@visactor/vutils';\nimport type { IElement } from '../types/element';\nimport type {\n FunctionCallback,\n SignalDependency,\n SignalReference,\n IView,\n GenericFunctionType,\n SignalFunction,\n ParameterFunctionType,\n ParameterCallback,\n Nil\n} from '../types';\nimport type { IGrammarBase } from '../types/grammar';\n\nexport function parseReference(dependency: SignalDependency | SignalDependency[], view: IView): IGrammarBase[] {\n const dependencies: SignalDependency[] = array(dependency);\n return dependencies.reduce((refs: IGrammarBase[], dep: string | IGrammarBase) => {\n const ref = (isString(dep) ? view.getGrammarById(dep as string) : dep) as IGrammarBase;\n\n if (ref) {\n refs.push(ref);\n }\n return refs;\n }, []);\n}\n\nfunction isSignalReferenceType(signal: any): signal is SignalReference {\n return !isFunction(signal) && !!(signal as SignalReference)?.signal;\n}\n\nfunction isSignalFunctionType, T>(\n signal: any\n): signal is SignalFunction {\n return !isFunction(signal) && !!(signal as SignalFunction)?.callback;\n}\n\nexport function parseFunctionType, T>(\n spec: GenericFunctionType | Nil,\n view: IView\n): IGrammarBase[] {\n if (isNil(spec)) {\n return [];\n }\n if (isSignalReferenceType(spec)) {\n const signal = spec.signal;\n if (isString(signal)) {\n return array(view.getGrammarById(signal as string) as IGrammarBase);\n } else if ((signal as IGrammarBase)?.grammarType === 'signal') {\n return [signal as IGrammarBase];\n }\n } else if (isSignalFunctionType(spec)) {\n return parseReference((spec as SignalFunction).dependency, view);\n }\n return [];\n}\n\nexport function isFunctionType, T>(\n spec: any\n): spec is Callback | SignalReference | SignalFunction {\n return isFunction(spec) || spec?.signal || !!(spec as SignalFunction)?.callback;\n}\n\nexport function invokeFunctionType, T>(\n spec: GenericFunctionType | Nil,\n parameters: any,\n datumOrGrammarInstance?: any | IGrammarBase,\n element?: IElement | any\n): T {\n if (isNil(spec)) {\n return spec as T;\n }\n\n if (isFunction(spec)) {\n if (element) {\n return (spec as Callback).call(null, datumOrGrammarInstance, element, parameters);\n }\n return (spec as Callback).call(null, datumOrGrammarInstance, parameters);\n } else if ((spec as SignalReference).signal) {\n const signal = (spec as SignalReference).signal;\n if (isString(signal)) {\n return parameters?.[signal as string];\n }\n return (signal as IGrammarBase).output();\n } else if ((spec as SignalFunction).callback) {\n if (element) {\n return (spec as SignalFunction).callback.call(null, datumOrGrammarInstance, element, parameters);\n }\n return (spec as SignalFunction).callback.call(null, datumOrGrammarInstance, parameters);\n }\n return spec as T;\n}\n\nexport function invokeParameterFunctionType(spec: ParameterFunctionType, parameters: any): T {\n if (isNil(spec)) {\n return spec as T;\n }\n\n if (isFunction(spec)) {\n return spec.call(null, parameters);\n } else if ((spec as SignalReference).signal) {\n const signal = (spec as SignalReference).signal;\n if (isString(signal)) {\n return parameters?.[signal as string];\n }\n return (signal as IGrammarBase).output();\n } else if ((spec as SignalFunction, T>).callback) {\n return (spec as SignalFunction, T>).callback.call(null, parameters);\n }\n return spec as T;\n}\n\nexport function getGrammarOutput(grammar: IGrammarBase | string, parameters: any) {\n return isGrammar(grammar) ? grammar.output() : parameters[grammar];\n}\n\n/**\n * 判断是否是依赖signal\n */\nexport function isSignal(obj: any) {\n return obj && (obj.signal || obj.callback);\n}\n\nexport const isGrammar = (el: any): el is IGrammarBase => {\n return el && !isNil(el.grammarType);\n};\n\nexport const parseField = (field: ((datum: T) => symbol | string) | string | symbol) => {\n if (isFunction(field)) {\n return field;\n }\n return (datum: T) => datum[field];\n};\n\nexport const parseColor = (color: any): string | null => {\n if (isString(color) && Color.parseColorString(color)) {\n return color;\n }\n return null;\n};\n","import { isFunction, isObject } from '@visactor/vutils';\nimport type { IGrammarBase } from '../types';\nimport { isGrammar } from './util';\n\nexport const parseOptionValue = (value: IGrammarBase | any, params: any) => {\n if (isGrammar(value)) {\n return value.output();\n } else if (value && isObject(value)) {\n if (isFunction(value.callback)) {\n return (datum: any) => {\n return value.callback(datum, params);\n };\n }\n\n if (isFunction(value.value)) {\n return value.value(params);\n }\n\n return value;\n }\n\n return value;\n};\n\nexport const parseOptions = (options: Record | Array, params: any) => {\n if (!options) {\n return options;\n }\n\n if (isObject(options)) {\n return Object.keys(options).reduce((res, key) => {\n const option = options[key];\n\n res[key] = parseOptionValue(option, params);\n\n return res;\n }, {});\n }\n\n return (options as Array).map(option => parseOptionValue(option, params));\n};\n","import { array, EventEmitter, isNil, isString, isValid } from '@visactor/vutils';\nimport type { GrammarType, IGrammarBase, IView, IGrammarTask, BaseEventHandler } from '../types';\nimport { parseOptions } from '../parse/option';\nimport { parseFunctionType } from '../parse/util';\nimport type { Nil } from '../types/base';\nimport { HOOK_EVENT } from '../graph/enums';\n\nlet grammarBaseId = -1;\n\nexport abstract class GrammarBase extends EventEmitter implements IGrammarBase {\n readonly grammarType: GrammarType;\n\n readonly uid: number;\n protected _id: string;\n protected _name: string;\n\n protected spec: any = {};\n\n view: IView;\n rank: number;\n\n // FIXME: adapt current implementation of dataflow, refactor after dataflow design is finished\n grammarSource: IGrammarBase;\n references: Map = new Map();\n targets: IGrammarBase[] = [];\n transforms: IGrammarTask[] = [];\n\n constructor(view: IView) {\n super();\n this.view = view;\n this.uid = ++grammarBaseId;\n }\n\n parse(spec: any): this {\n this.id(spec.id);\n this.name(spec.name);\n this.depend(spec.dependency);\n return this;\n }\n\n depend(grammars: IGrammarBase[] | IGrammarBase | string[] | string) {\n if (this.spec?.dependency) {\n const lastGrammars = array(this.spec.dependency).map(grammar => {\n return isString(grammar) ? this.view.getGrammarById(grammar) : grammar;\n });\n this.detach(lastGrammars);\n }\n this.spec.dependency = grammars;\n const currentGrammars = array(grammars).map(grammar => {\n return isString(grammar) ? this.view.getGrammarById(grammar) : grammar;\n });\n this.attach(currentGrammars);\n\n this.commit();\n return this;\n }\n\n addEventListener(type: string, handler: BaseEventHandler, options?: any) {\n let callback = handler;\n if (!(options && options.trap === false)) {\n callback = handler;\n (callback as any).raw = handler;\n }\n if (options && options.target) {\n (callback as any).target = options.target;\n }\n this.on(type, callback);\n return this;\n }\n\n removeEventListener(type: string, handler?: BaseEventHandler) {\n if (handler) {\n this.off(type, handler);\n } else {\n this.off(type);\n }\n return this;\n }\n\n emit>(\n event: T,\n ...args: EventEmitter.EventArgs\n ): boolean {\n this.view?.emit?.(event, ...args);\n return super.emit(event, ...args);\n }\n\n emitGrammarEvent>(\n event: T,\n ...args: EventEmitter.EventArgs\n ): boolean {\n return super.emit(event, ...args);\n }\n\n abstract evaluate(upstream: any, parameters: any): this | Promise;\n abstract output(): any;\n evaluateSync?: (upstream: any, parameters: any) => this;\n\n async evaluateTransform(transforms: IGrammarTask[], upstream: any, parameters: any) {\n if (!transforms || !transforms.length) {\n return upstream;\n }\n let currentUpstreamData = upstream;\n let i = 0;\n const n = transforms.length;\n\n while (i < n) {\n const task = transforms[i];\n\n this.emit(HOOK_EVENT.BEFORE_TRANSFORM, task.type);\n currentUpstreamData = task.transform(\n task.isRawOptions ? task.options : parseOptions(task.options, parameters),\n currentUpstreamData,\n parameters,\n this.view\n );\n if ((currentUpstreamData as any)?.then) {\n currentUpstreamData = await currentUpstreamData;\n }\n i++;\n this.emit(HOOK_EVENT.AFTER_TRANSFORM, task.type);\n }\n\n return currentUpstreamData;\n }\n\n evaluateTransformSync(transforms: IGrammarTask[], upstream: any, parameters: any) {\n if (!transforms || !transforms.length) {\n return upstream;\n }\n let currentUpstreamData = upstream;\n let i = 0;\n const n = transforms.length;\n\n while (i < n) {\n const task = transforms[i];\n\n this.emit(HOOK_EVENT.BEFORE_TRANSFORM, task.type);\n currentUpstreamData = task.transform(\n task.isRawOptions ? task.options : parseOptions(task.options, parameters),\n currentUpstreamData,\n parameters,\n this.view\n );\n i++;\n this.emit(HOOK_EVENT.AFTER_TRANSFORM, task.type);\n }\n\n return currentUpstreamData;\n }\n\n set(value: any): boolean {\n // do nothing\n return false;\n }\n\n id(): string;\n id(id: string): this;\n id(id?: string) {\n if (arguments.length) {\n this.view.grammars.unrecord(this);\n this._id = id;\n this.view.grammars.record(this);\n return this;\n }\n return this._id;\n }\n\n name(): string;\n name(name: string): this;\n name(name?: string) {\n if (arguments.length) {\n this._name = name;\n return this;\n }\n return this._name;\n }\n\n attach(reference: IGrammarBase | IGrammarBase[], count: number = 1) {\n array(reference)\n .filter(ref => !isNil(ref))\n .forEach(ref => {\n if (isNil(reference)) {\n return;\n }\n if (!ref.targets.includes(this)) {\n ref.targets.push(this);\n }\n this.references.set(ref, (this.references.get(ref) ?? 0) + count);\n });\n return this;\n }\n\n detach(reference: IGrammarBase | IGrammarBase[], count: number = 1) {\n array(reference)\n .filter(ref => !isNil(ref))\n .forEach(ref => {\n const refCount = this.references.get(ref) - count;\n if (refCount > 0) {\n this.references.set(ref, refCount - 1);\n } else {\n this.references.delete(ref);\n if (ref.targets.includes(this)) {\n ref.targets = ref.targets.filter(target => target !== this);\n }\n }\n });\n return this;\n }\n\n detachAll() {\n this.references.forEach((count, ref) => {\n this.detach(ref, count);\n });\n }\n\n link(source: IGrammarBase) {\n this.grammarSource = source;\n }\n\n run() {\n const upstream = this.grammarSource?.output();\n const parameters = this.parameters();\n return this.evaluate(upstream, parameters);\n }\n\n runSync() {\n const upstream = this.grammarSource?.output();\n const parameters = this.parameters();\n\n if (this.evaluateSync) {\n return this.evaluateSync(upstream, parameters);\n }\n return this.evaluate(upstream, parameters);\n }\n\n commit() {\n this.view.commit(this);\n }\n\n parameters() {\n const params: any = {};\n this.references.forEach((count, ref) => {\n // upstream reference with no valid id will not be recorded in parameters\n if (isValid(ref.id())) {\n params[ref.id() as string] = ref.output();\n }\n });\n return params;\n }\n\n getSpec() {\n return this.spec;\n }\n\n reuse(grammar: IGrammarBase) {\n return this;\n }\n\n clear() {\n this.spec = null;\n this.view = null;\n }\n\n release() {\n this.clear();\n }\n\n protected setFunctionSpec(spec: T | Nil, specField: string) {\n if (!isNil(this.spec[specField])) {\n this.detach(parseFunctionType(this.spec[specField], this.view));\n }\n this.spec[specField] = spec;\n this.attach(parseFunctionType(spec, this.view));\n this.commit();\n return this;\n }\n}\n","import { array, isString } from '@visactor/vutils';\nimport type { GlyphDefaultEncoder, IGlyphMeta, GlyphChannelEncoder, MarkType, GlyphFunctionEncoder } from '../types';\nexport class GlyphMeta\n implements IGlyphMeta\n{\n private marks: { [markName: string]: MarkType };\n\n private channelEncoder: { [channel: string]: GlyphChannelEncoder } = {};\n private defaultEncoder: GlyphDefaultEncoder;\n private functionEncoder: GlyphFunctionEncoder;\n private progressiveChannels: string[];\n\n constructor(\n marks: { [markName: string]: MarkType },\n encoders?: { [markName: string]: GlyphChannelEncoder },\n defaultEncoder?: GlyphDefaultEncoder,\n progressiveChannels?: string | string[]\n ) {\n this.marks = marks;\n if (encoders) {\n this.registerChannelEncoder(encoders);\n }\n if (defaultEncoder) {\n this.registerDefaultEncoder(defaultEncoder);\n }\n if (this.progressiveChannels) {\n this.registerProgressiveChannels(progressiveChannels);\n }\n }\n\n getMarks() {\n return this.marks;\n }\n\n registerChannelEncoder(encoders: {\n [markName: string]: GlyphChannelEncoder;\n }): this;\n registerChannelEncoder(channel: string, encoder: GlyphChannelEncoder): this;\n registerChannelEncoder(\n channel: string | { [markName: string]: GlyphChannelEncoder },\n encoder?: GlyphChannelEncoder\n ) {\n if (isString(channel)) {\n this.channelEncoder[channel] = encoder;\n } else {\n Object.assign(this.channelEncoder, channel);\n }\n return this;\n }\n registerFunctionEncoder(encoder: GlyphFunctionEncoder) {\n this.functionEncoder = encoder;\n return this;\n }\n\n registerDefaultEncoder(encoder: GlyphDefaultEncoder) {\n this.defaultEncoder = encoder;\n return this;\n }\n\n registerProgressiveChannels(channels: string | string[]) {\n this.progressiveChannels = array(channels);\n return this;\n }\n\n getChannelEncoder() {\n return this.channelEncoder;\n }\n getFunctionEncoder() {\n return this.functionEncoder;\n }\n\n getDefaultEncoder() {\n return this.defaultEncoder;\n }\n\n getProgressiveChannels() {\n return this.progressiveChannels;\n }\n}\n","import type { IGraphic, IGraphicAttribute } from '@visactor/vrender-core';\nimport type {\n GlyphChannelEncoder,\n GlyphDefaultEncoder,\n IComponentConstructor,\n IElement,\n IGlyphElement,\n IGlyphMeta,\n IGrammarBaseConstructor,\n IGroupMark,\n IInteractionConstructor,\n IMark,\n IMarkConstructor,\n IPlotMarkConstructor,\n ISemanticMark,\n ITransform,\n IView,\n MarkType,\n TypeAnimation\n} from '../types';\nimport { GlyphMeta } from '../view/glyph-meta';\nimport type { ComponentOptions } from '@visactor/vrender-components';\n\nexport class Factory {\n private static _plotMarks: Record = {};\n private static _marks: Record = {};\n private static _components: Record = {};\n private static _graphicComponents: Record IGraphic> = {};\n private static _transforms: Record = {};\n private static _grammars: Record = {};\n private static _glyphs: Record> = {};\n private static _animations: Record | TypeAnimation> = {};\n private static _interactions: Record = {};\n private static _graphics: Record IGraphic> = {};\n\n static registerPlotMarks(key: string, mark: IPlotMarkConstructor) {\n Factory._plotMarks[key] = mark;\n }\n\n static createPlotMark(type: string, id?: string): ISemanticMark | null {\n if (!Factory._plotMarks[type]) {\n return null;\n }\n const MarkConstructor = Factory._plotMarks[type];\n return new MarkConstructor(id);\n }\n\n static registerMark(key: string, mark: IMarkConstructor) {\n Factory._marks[key] = mark;\n }\n\n static createMark(type: string, view: IView, group?: IGroupMark): IMark | null {\n if (!Factory._marks[type]) {\n return null;\n }\n const MarkConstructor = Factory._marks[type];\n return new MarkConstructor(view, type, group);\n }\n\n static hasMark(type: string) {\n return !!Factory._marks[type];\n }\n\n static registerComponent(key: string, component: IComponentConstructor) {\n Factory._components[key] = component;\n }\n\n static createComponent(componentType: string, view: IView, group?: IGroupMark, mode?: '2d' | '3d') {\n const Ctor = Factory._components[componentType];\n if (!Ctor) {\n return null;\n }\n\n return new Ctor(view, group, mode);\n }\n\n static hasComponent(componentType: string) {\n return !!Factory._components[componentType];\n }\n\n static registerGraphicComponent(key: string, creator: (attrs: any, options?: ComponentOptions) => IGraphic) {\n Factory._graphicComponents[key] = creator;\n }\n\n static createGraphicComponent(componentType: string, attrs: any, options?: ComponentOptions) {\n const compCreator = Factory._graphicComponents[componentType];\n\n if (!compCreator) {\n return null;\n }\n\n return compCreator(attrs, options);\n }\n\n static registerTransform(type: string, transform: Omit, isBuiltIn?: boolean) {\n Factory._transforms[type] = Object.assign(transform, { type, isBuiltIn: !!isBuiltIn });\n }\n\n static getTransform(type: string) {\n return Factory._transforms[type];\n }\n\n static unregisterRuntimeTransforms() {\n Object.keys(Factory._transforms).forEach(type => {\n if (Factory._transforms[type] && !Factory._transforms[type].isBuiltIn) {\n Factory._transforms[type] = null;\n }\n });\n }\n\n static registerGrammar(type: string, grammarClass: IGrammarBaseConstructor, specKey?: string) {\n Factory._grammars[type] = {\n grammarClass: grammarClass,\n specKey: specKey ?? type\n };\n }\n\n static createGrammar(type: string, view: IView, grammarType: string) {\n const Ctor = Factory._grammars[type]?.grammarClass;\n\n if (!Ctor) {\n return null;\n }\n\n return new Ctor(view, grammarType);\n }\n\n static getGrammars() {\n return this._grammars;\n }\n\n static registerGlyph = (\n glyphType: string,\n marks: { [markName: string]: MarkType },\n encoders?: { [markName: string]: GlyphChannelEncoder },\n defaultEncoder?: GlyphDefaultEncoder,\n progressiveChannels?: string | string[]\n ): IGlyphMeta => {\n Factory._glyphs[glyphType] = new GlyphMeta(\n marks,\n encoders,\n defaultEncoder,\n progressiveChannels\n );\n return Factory._glyphs[glyphType];\n };\n\n static getGlyph(glyphType: string): IGlyphMeta {\n return Factory._glyphs[glyphType];\n }\n\n static registerAnimationType = (\n animationType: string,\n animation: TypeAnimation | TypeAnimation\n ): void => {\n Factory._animations[animationType] = animation;\n };\n\n static getAnimationType = (animationType: string) => {\n return Factory._animations[animationType];\n };\n\n static registerInteraction = (interactionType: string, interaction: IInteractionConstructor) => {\n Factory._interactions[interactionType] = interaction;\n };\n\n static createInteraction(interactionType: string, view: IView, options?: any) {\n const Ctor = Factory._interactions[interactionType];\n if (!Ctor) {\n return null;\n }\n\n return new Ctor(view, options);\n }\n\n static registerGraphic = (graphicType: string, creator: (attributes: IGraphicAttribute) => IGraphic) => {\n Factory._graphics[graphicType] = creator;\n };\n\n static getGraphicType = (graphicType: string) => {\n return Factory._graphics[graphicType];\n };\n\n static createGraphic = (graphicType: string, attributes?: IGraphicAttribute) => {\n const creator = Factory._graphics[graphicType];\n if (!creator) {\n return null;\n }\n return creator(attributes);\n };\n}\n","import { isArray, isFunction, isNil } from '@visactor/vutils';\nimport { Factory } from '../core/factory';\nimport type { IGrammarBase, IGrammarTask, IView, TransformSpec, TransformSpecValue } from '../types';\nimport { isSignal, parseFunctionType, parseReference } from './util';\n\nconst parseSimpleOptionValue = (key: string, transformSpecValue: TransformSpecValue, view: IView) => {\n if (key === 'callback' && isFunction(transformSpecValue)) {\n return {\n references: [],\n value: {\n callback: transformSpecValue,\n dependency: []\n }\n };\n }\n\n if (!isNil((transformSpecValue as TransformSpecValue).data)) {\n // { data: 'someData' }\n const grammarInstance = view.getDataById((transformSpecValue as TransformSpecValue).data);\n return {\n references: [grammarInstance],\n value: grammarInstance\n };\n }\n\n if (!isNil((transformSpecValue as TransformSpecValue).customized)) {\n // { customized: 'proj' }\n const grammarInstance = view.getCustomizedById((transformSpecValue as TransformSpecValue).customized);\n return {\n references: [grammarInstance],\n value: grammarInstance\n };\n }\n\n if (!isNil((transformSpecValue as TransformSpecValue).scale)) {\n // { scale: 'scaleX' }\n const grammarInstance = view.getScaleById((transformSpecValue as TransformSpecValue).scale);\n return {\n references: [grammarInstance],\n value: grammarInstance\n };\n }\n\n if (isSignal(transformSpecValue)) {\n const references = parseFunctionType(transformSpecValue, view);\n\n return {\n references,\n value: transformSpecValue.callback\n ? {\n value: transformSpecValue.callback,\n dependency: references\n }\n : references?.[0] ?? transformSpecValue\n };\n }\n\n return { value: transformSpecValue };\n};\n\nconst parseTransformOption = (key: string, transformSpecValue: TransformSpecValue, view: IView) => {\n if (isNil(transformSpecValue)) {\n return { value: transformSpecValue };\n }\n\n if (isArray(transformSpecValue)) {\n const values = transformSpecValue.map((v: any) => parseSimpleOptionValue(key, v, view));\n\n return {\n references: values.reduce((res: any[], val: any) => {\n if (val.references) {\n res.concat(val.references);\n }\n\n return res;\n }, []),\n value: values.map((entry: any) => entry.value)\n };\n }\n\n return parseSimpleOptionValue(key, transformSpecValue, view);\n};\n\nconst parseTransform = (transformSpec: TransformSpec, view: IView) => {\n const transformDef = Factory.getTransform(transformSpec.type);\n\n if (!transformDef) {\n return;\n }\n\n const options = {};\n let references: IGrammarBase[] = [];\n\n Object.keys(transformSpec).forEach(specKey => {\n // we dont need to parse type\n if (specKey === 'type') {\n return;\n }\n\n const specValue = transformSpec[specKey];\n if (specKey === 'dependency') {\n if (specValue?.length) {\n references = references.concat(parseReference(specValue, view));\n }\n return;\n }\n const res = parseTransformOption(specKey, specValue, view);\n\n if (res) {\n if (res.references?.length) {\n references = references.concat(res.references);\n }\n\n options[specKey] = res.value;\n }\n });\n\n return {\n markPhase: transformDef.markPhase,\n transform: transformDef.transform,\n canProgressive: transformDef.canProgressive,\n type: transformDef.type,\n options,\n references\n };\n};\n\nexport const parseTransformSpec = (spec: TransformSpec[], view: IView) => {\n if (spec?.length) {\n const transforms: IGrammarTask[] = [];\n let refs: IGrammarBase[] = [];\n spec.forEach(transformSpec => {\n const transform = parseTransform(transformSpec, view);\n\n if (transform) {\n if (transform.references?.length) {\n refs = refs.concat(transform.references);\n }\n\n transforms.push(transform);\n }\n });\n return { transforms, refs };\n }\n\n return null;\n};\n","import type { Parser } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport { DataSet, DataView, csvParser, dsvParser, tsvParser } from '@visactor/vdataset';\nimport type { DataFormatSpec, Datum } from '../types';\nimport { array, isString } from '@visactor/vutils';\n\nconst jsonParser: Parser = (data: string, options: any = {}, dataView: DataView) => {\n if (!isString(data)) {\n return array(data);\n }\n try {\n return array(JSON.parse(data));\n } catch (e) {\n return [];\n }\n};\n\nconst parsers: Record = {\n csv: csvParser,\n dsv: dsvParser,\n tsv: tsvParser,\n json: jsonParser\n};\n\nexport const parseFormat = (data: any, format?: DataFormatSpec): Datum[] => {\n if (!format || !parsers[format.type]) {\n return array(data);\n }\n const options = format.type === 'dsv' ? { delimiter: format.delimiter } : {};\n return parsers[format.type](data, options, new DataView(new DataSet()));\n};\n\n// TODO: use ResourceLoader instead\n// resource loader do not support plain text loading for now\nexport const load = async (url: string) => {\n try {\n const response = await fetch(url);\n return response.text();\n } catch (error) {\n return null;\n }\n};\n","import { array, isNil } from '@visactor/vutils';\nimport type {\n IGrammarBase,\n DataSpec,\n IData,\n GrammarType,\n DataFormatSpec,\n IView,\n IGrammarTask,\n TransformSpec,\n ParameterFunctionType,\n IDataFilter\n} from '../types';\nimport { GrammarBase } from './grammar-base';\nimport { invokeParameterFunctionType, isGrammar, parseFunctionType } from '../parse/util';\nimport { parseTransformSpec } from '../parse/transform';\nimport type { Nil } from '../types/base';\nimport { HOOK_EVENT } from '../graph/enums';\nimport { load, parseFormat } from '../util/data';\n\nexport class Data extends GrammarBase implements IData {\n readonly grammarType: GrammarType = 'data';\n\n protected spec: DataSpec = {};\n\n private _dataIDKey = `VGRAMMAR_DATA_ID_KEY_${this.uid}`;\n\n /** 原始输入数据 */\n private _input: any[];\n\n /** 计算后的数据 */\n private _values: any[];\n\n private _isLoaded?: boolean;\n private _loadTasks: IGrammarTask[] = [];\n private _postFilters: IDataFilter[] = [];\n\n constructor(view: IView, values?: any, format?: DataFormatSpec) {\n super(view);\n this._loadTasks = [];\n\n if (!isNil(values)) {\n this.values(values, format);\n // this.ingest({ values });\n }\n }\n\n parse(spec: DataSpec) {\n super.parse(spec);\n this._isLoaded = false;\n\n this.source(spec.source, spec.format, false);\n this.url(spec.url, spec.format, false);\n this.values(spec.values, spec.format, false);\n this.transform(spec.transform);\n\n this.parseLoad(spec);\n\n this.commit();\n return this;\n }\n\n private parseDataSource(spec: DataSpec) {\n const refs: IGrammarBase[] = [];\n const transforms: IGrammarTask[] = [];\n\n const formatRef = spec.format ? parseFunctionType(spec.format, this.view)[0] : null;\n if (formatRef) {\n refs.push(formatRef);\n }\n\n if (spec.values) {\n const valuesRef = parseFunctionType(spec.values, this.view)[0];\n\n if (valuesRef) {\n refs.push(valuesRef);\n }\n\n transforms.push({\n type: 'ingest',\n transform: this.ingest,\n isRawOptions: true,\n options: {\n values: spec.values,\n format: spec.format\n }\n });\n } else if (spec.url) {\n const urlRef = parseFunctionType(spec.url, this.view)[0];\n if (urlRef) {\n refs.push(urlRef);\n }\n\n transforms.push({\n type: 'load',\n transform: this.load,\n options: {\n url: urlRef ?? spec.url,\n format: formatRef ?? spec.format\n }\n });\n } else if (spec.source) {\n const upstreamData: IData[] = [];\n\n array(spec.source).forEach(sourceId => {\n const sourceData = isGrammar(sourceId) ? sourceId : this.view.getDataById(sourceId);\n\n if (sourceData) {\n refs.push(sourceData);\n upstreamData.push(sourceData as IData);\n }\n });\n\n if (upstreamData.length) {\n transforms.push({\n type: 'relay',\n transform: this.relay,\n options: upstreamData\n });\n this.grammarSource = upstreamData[0];\n }\n }\n return { transforms, refs };\n }\n\n private ingest = (options: { values?: any; format?: ParameterFunctionType }) => {\n const format = invokeParameterFunctionType(options.format, this.parameters());\n this._input = parseFormat(options.values, format);\n return this._input;\n };\n\n private load = (\n options:\n | { url: ParameterFunctionType; format?: ParameterFunctionType }\n | { values: any; format?: ParameterFunctionType }\n ) => {\n if ((options as { values: any; format?: ParameterFunctionType }).values) {\n return this.ingest(options as { values: any; format?: ParameterFunctionType });\n }\n const url = invokeParameterFunctionType((options as { url: ParameterFunctionType }).url, this.parameters());\n // default format for loaded data is json\n const format = invokeParameterFunctionType(options.format, this.parameters()) ?? { type: 'json' };\n return load(url).then(data => this.ingest({ values: data, format }));\n };\n\n private relay = (options: any[]) => {\n return options[0];\n };\n\n async evaluate(upstream: any, parameters: any) {\n this.view.emit(HOOK_EVENT.BEFORE_EVALUATE_DATA);\n const tasks = this._isLoaded ? this.transforms : this._loadTasks.concat(this.transforms);\n if (this.grammarSource) {\n this._input = upstream;\n }\n\n const values = await this.evaluateTransform(tasks, this._input, parameters);\n const filteredValues = this._evaluateFilter(values, parameters);\n this.setValues(filteredValues);\n\n this._isLoaded = true;\n this.view.emit(HOOK_EVENT.AFTER_EVALUATE_DATA);\n\n return this;\n }\n\n evaluateSync = (upstream: any, parameters: any) => {\n this.view.emit(HOOK_EVENT.BEFORE_EVALUATE_DATA);\n const tasks = this._isLoaded ? this.transforms : this._loadTasks.concat(this.transforms);\n\n const values = this.evaluateTransformSync(tasks, this.grammarSource ? upstream : this._input, parameters);\n const filteredValues = this._evaluateFilter(values, parameters);\n this.setValues(filteredValues);\n\n this._isLoaded = true;\n\n this.view.emit(HOOK_EVENT.AFTER_EVALUATE_DATA);\n\n return this;\n };\n\n output() {\n return this._values;\n }\n\n getDataIDKey() {\n return this._dataIDKey;\n }\n\n values(values: any | Nil, format?: ParameterFunctionType, load: boolean = true) {\n const spec = Object.assign({}, this.spec, { values, format });\n if (!isNil(values)) {\n spec.url = undefined;\n spec.source = undefined;\n }\n return load ? this.parseLoad(spec) : this;\n }\n\n url(url: ParameterFunctionType | Nil, format?: ParameterFunctionType, load: boolean = true) {\n const spec = Object.assign({}, this.spec, { url, format });\n if (!isNil(url)) {\n spec.values = undefined;\n spec.source = undefined;\n }\n return load ? this.parseLoad(spec) : this;\n }\n\n source(\n source: string | string[] | IData | IData[] | Nil,\n format?: ParameterFunctionType,\n load: boolean = true\n ) {\n const spec = Object.assign({}, this.spec, { source, format });\n if (!isNil(source)) {\n spec.values = undefined;\n spec.url = undefined;\n }\n return load ? this.parseLoad(spec) : this;\n }\n\n private parseLoad(spec: DataSpec) {\n this.detach(this.parseDataSource(this.spec).refs);\n\n this.spec = spec;\n\n const dataSourceResult = this.parseDataSource(this.spec);\n this.attach(dataSourceResult.refs);\n this._loadTasks = dataSourceResult.transforms;\n this._isLoaded = false;\n\n this.commit();\n return this;\n }\n\n private setValues(data: any[]) {\n this._values = array(data).map((entry, index) => {\n const datum = entry === Object(entry) ? entry : { data: entry };\n datum[this._dataIDKey] = index;\n return datum;\n });\n }\n\n field(field: string): any[] {\n return this._values.map((value: any) => value[field]);\n }\n\n transform(transforms: TransformSpec[] | Nil): this {\n const prevTransforms = parseTransformSpec(this.spec.transform, this.view);\n if (prevTransforms) {\n this.detach(prevTransforms.refs);\n this.transforms = [];\n }\n\n this.spec.transform = transforms;\n\n const nextTransforms = parseTransformSpec(this.spec.transform, this.view);\n if (nextTransforms) {\n this.attach(nextTransforms.refs);\n this.transforms = nextTransforms.transforms;\n }\n\n this.commit();\n return this;\n }\n\n getValue() {\n return this._values;\n }\n\n getInput() {\n return this._input;\n }\n\n addDataFilter(filter: IDataFilter | IDataFilter[]) {\n this._postFilters = this._postFilters.concat(array(filter));\n this._postFilters.sort((filterA, filterB) => (filterA.rank ?? 0) - (filterB.rank ?? 0));\n return this;\n }\n\n removeDataFilter(filter: IDataFilter | IDataFilter[]) {\n const filters = array(filter);\n this._postFilters = this._postFilters.filter(filter => !filters.includes(filter));\n return this;\n }\n\n private _evaluateFilter(value: any, parameters: any) {\n return this._postFilters.reduce((result, filter) => {\n return filter.filter(result, parameters);\n }, value);\n }\n\n reuse(grammar: IGrammarBase) {\n if (grammar.grammarType !== this.grammarType) {\n return this;\n }\n\n this._isLoaded = false;\n this._values = grammar.output();\n return this;\n }\n\n clear() {\n super.clear();\n this._input = null;\n this._values = null;\n }\n}\n","export const EVENT_SOURCE_WINDOW = 'window';\nexport const EVENT_SOURCE_VIEW = 'view';\nexport const BROWSER = 'browser';\nexport const NO_TRAP = { trap: false };\n\nexport const SIGNAL_WIDTH = 'width';\nexport const SIGNAL_HEIGHT = 'height';\nexport const SIGNAL_VIEW_WIDTH = 'viewWidth';\nexport const SIGNAL_VIEW_HEIGHT = 'viewHeight';\nexport const SIGNAL_PADDING = 'padding';\nexport const SIGNAL_VIEW_BOX = 'viewBox';\nexport const SIGNAL_AUTOFIT = 'autoFit';\n\nexport const DEFAULT_HOVER_STATE = 'hover';\n","type CompareFunc = (a: any, b: any) => number;\n\n/**\n * moveToHead - Moves an element down the array until the target element is `smallar` than all the elements in head\n *\n * @param {any[]} array - The array to sift through\n * @param {number} start - The start index of the element\n * @param {number} idx - The index of the element to sift down\n * @param {CompareFunc} cmp - The function used to compare elements in the array\n * @returns {any[]} - The updated array with the sifted element in the correct position\n */\nfunction moveToHead(array: any[], idx: number, start: number, cmp: CompareFunc) {\n let parent;\n let pidx;\n\n const item = array[idx];\n // Move the element down the array\n while (idx > start) {\n pidx = Math.floor((idx - 1) / 2);\n parent = array[pidx];\n if (item && parent && cmp(item, parent) < 0) {\n array[idx] = parent;\n idx = pidx;\n continue;\n }\n break;\n }\n return (array[idx] = item);\n}\n\n/**\n * moveToTail - Moves an element up the array until the target element is `greater` than all the elements in tail\n *\n * @param {any[]} array - The array to sift through\n * @param {number} idx - The index of the element to sift up\n * @param {CompareFunc} cmp - The function used to compare elements in the array\n * @returns {any[]} - The updated array with the sifted element in the correct position\n */\nfunction moveToTail(array: any[], idx: number, end: number | undefined, cmp: CompareFunc) {\n const start = idx;\n const endIdx = end ?? array.length;\n const item = array[idx];\n let cidx = idx * 2 + 1;\n let ridx;\n\n // Move the element up the array until it is in the correct position\n while (cidx < endIdx) {\n ridx = cidx + 1;\n if (ridx < endIdx && cmp(array[cidx], array[ridx]) >= 0) {\n cidx = ridx;\n }\n array[idx] = array[cidx];\n idx = cidx;\n cidx = idx * 2 + 1;\n }\n array[idx] = item;\n return moveToHead(array, idx, start, cmp);\n}\n\nexport class Heap {\n protected compare: CompareFunc;\n\n protected nodes: any[];\n\n constructor(compare: CompareFunc) {\n this.compare = compare;\n this.nodes = [];\n }\n\n size() {\n return this.nodes.length;\n }\n\n last() {\n return this.nodes[0];\n }\n\n validate() {\n for (let i = this.nodes.length - 1; i > 0; i -= 1) {\n const parentIndex = Math.floor((i - 1) / 2);\n if (this.compare(this.nodes[parentIndex], this.nodes[i]) > 0) {\n return false;\n }\n }\n return true;\n }\n\n push(node: any) {\n if (this.nodes.includes(node)) {\n // node 的排序等级可能变更,需要重新执行 排序\n const index = this.nodes.indexOf(node);\n moveToHead(this.nodes, index, 0, this.compare);\n return moveToTail(this.nodes, index, null, this.compare);\n }\n this.nodes.push(node);\n return moveToHead(this.nodes, this.nodes.length - 1, 0, this.compare);\n }\n\n remove(node: any) {\n if (this.nodes.includes(node)) {\n const index = this.nodes.indexOf(node);\n\n this.nodes = this.nodes.slice(0, index).concat(this.nodes.slice(index + 1));\n\n moveToHead(this.nodes, index, 0, this.compare);\n moveToTail(this.nodes, index, null, this.compare);\n }\n }\n\n pop() {\n const last = this.nodes.pop();\n let item;\n\n if (this.nodes.length) {\n item = this.nodes[0];\n this.nodes[0] = last;\n\n moveToTail(this.nodes, 0, null, this.compare);\n } else {\n item = last;\n }\n return item;\n }\n\n clear() {\n this.nodes = [];\n }\n}\n","import { isNil } from \"@visactor/vutils\";\n\nexport const accessor = (fn, fields, name) => (fn.fields = fields || [], fn.fname = name, \nfn);\n\nexport function accessorName(fn) {\n return isNil(fn) ? null : fn.fname;\n}\n\nexport function accessorFields(fn) {\n return isNil(fn) ? null : fn.fields;\n}","import { get } from '@visactor/vutils';\n\nexport const getter = (path: string[]): any => {\n return (obj: any) => get(obj, path);\n};\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-util/src/error.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { Logger } from '@visactor/vutils';\n\nexport const error = (message: string) => {\n const logger = Logger.getInstance();\n\n logger.error(message);\n};\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-util/src/field.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { isArray, isFunction } from '@visactor/vutils';\nimport { accessor } from './accessor';\nimport { getter } from './getter';\nimport { splitAccessPath } from './splitAccessPath';\nimport type { FieldGetterFunction, FieldGetterGeneratorOptions } from './types';\n\nconst fieldSingle = (fieldStr: string | FieldGetterFunction, name?: string, opt: FieldGetterGeneratorOptions = {}) => {\n if (isFunction(fieldStr)) {\n return fieldStr;\n }\n\n const path = splitAccessPath(fieldStr);\n const parsedField = path.length === 1 ? path[0] : fieldStr;\n\n return accessor(((opt && opt.get) || getter)(path), [parsedField], name || parsedField);\n};\n\nexport const field = (\n fieldStr: string | string[] | FieldGetterFunction | FieldGetterFunction[],\n name?: string,\n opt: FieldGetterGeneratorOptions = {}\n) => {\n if (isArray(fieldStr)) {\n const funcs = fieldStr.map(entry => fieldSingle(entry, name, opt));\n\n return (datum: any) => {\n return funcs.map(func => func(datum));\n };\n }\n\n return fieldSingle(fieldStr, name, opt);\n};\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-util/src/splitAccessPath.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { error } from './error';\n\nexport const splitAccessPath = (p: string) => {\n const path: string[] = [];\n const n = p.length;\n\n let q = null;\n let b = 0;\n let s = '';\n let i: number;\n let j: number;\n let c;\n\n p += '';\n\n const push = () => {\n path.push(s + p.substring(i, j));\n s = '';\n i = j + 1;\n };\n\n for (i = 0, j = 0; j < n; j += 1) {\n c = p[j];\n if (c === '\\\\') {\n s += p.substring(i, j);\n s += p.substring(++j, ++j);\n i = j;\n } else if (c === q) {\n push();\n q = null;\n b = -1;\n } else if (q) {\n continue;\n } else if (i === b && c === '\"') {\n i = j + 1;\n q = c;\n // eslint-disable-next-line quotes\n } else if (i === b && c === \"'\") {\n i = j + 1;\n q = c;\n } else if (c === '.' && !b) {\n if (j > i) {\n push();\n } else {\n i = j + 1;\n }\n } else if (c === '[') {\n if (j > i) {\n push();\n }\n i = j + 1;\n b = i;\n } else if (c === ']') {\n if (!b) {\n error('Access path missing open bracket: ' + p);\n }\n if (b > 0) {\n push();\n }\n b = 0;\n i = j + 1;\n }\n }\n\n if (b) {\n error('Access path missing closing bracket: ' + p);\n }\n if (q) {\n error('Access path missing closing quote: ' + p);\n }\n\n if (j > i) {\n j += 1;\n push();\n }\n\n return path;\n};\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-util/src/accessors.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { accessor } from './accessor';\nimport { field } from './field';\n\nexport const id = field('id');\n\nexport const identity = accessor(\n function (_: any) {\n return _;\n },\n [],\n 'identity'\n);\n\nexport const zero = accessor(\n function () {\n return 0;\n },\n [],\n 'zero'\n);\n\nexport const one = accessor(\n function () {\n return 1;\n },\n [],\n 'one'\n);\n\nexport const truthy = accessor(\n function () {\n return true;\n },\n [],\n 'true'\n);\n\nexport const falsy = accessor(\n function () {\n return false;\n },\n [],\n 'false'\n);\n\nexport const emptyObject = accessor(\n function () {\n return {};\n },\n [],\n 'emptyObject'\n);\n","import { identity } from '@visactor/vgrammar-util';\n\nexport class UniqueList {\n private idFunc: (val: T) => number;\n\n private list: T[] = [];\n\n private ids: Record = {};\n\n constructor(idFunc: (val: T) => number) {\n this.idFunc = idFunc || identity;\n }\n\n add(element: T) {\n const id = this.idFunc(element);\n\n if (!this.ids[id]) {\n this.ids[id] = 1;\n this.list.push(element);\n }\n return this;\n }\n\n remove(element: T) {\n const id = this.idFunc(element);\n\n if (this.ids[id]) {\n this.ids[id] = 0;\n this.list = this.list.filter(entry => entry !== element);\n }\n return this;\n }\n\n forEach(callback: (entry: T, index?: number, arr?: T[]) => void, reverse?: boolean) {\n if (reverse) {\n this.list.slice().reverse().forEach(callback);\n } else {\n this.list.forEach(callback);\n }\n }\n\n filter(callback: (entry: T, index?: number, arr?: T[]) => boolean) {\n return this.list.filter(callback);\n }\n\n public get length() {\n return this.list.length;\n }\n\n getElementByIndex(index: number) {\n return this.list[index];\n }\n}\n","import type { ILogger } from '@visactor/vutils';\nimport type { IDataflow } from '../types/dataflow';\nimport { isNil, Logger } from '@visactor/vutils';\nimport { Heap } from '../util/grammar-heap';\nimport { UniqueList } from '../util/unique-list';\nimport type { IDataflowCallback, IGrammarBase } from '../types';\n\n/**\n * A dataflow to run all the grammar elements\n */\nexport default class Dataflow implements IDataflow {\n logger: ILogger;\n private grammars: IGrammarBase[] = [];\n /** 当前排序 */\n private _curRank: number;\n /** 发生了变更的元素 */\n private _committed?: UniqueList;\n private _heap?: Heap;\n private _beforeRunner?: IDataflowCallback;\n private _afterRunner?: IDataflowCallback;\n /** 正在运行dataflow */\n private _isRunning?: boolean;\n private _updateCounter: number;\n /** 是否完成初次渲染 */\n private _finishFirstRender?: boolean;\n private _isReleased: boolean;\n\n constructor() {\n this.logger = Logger.getInstance();\n\n this._curRank = 0;\n\n this._committed = new UniqueList(grammar => grammar.uid);\n\n this._heap = new Heap((a, b) => a?.qrank - b?.qrank);\n this._beforeRunner = null;\n this._afterRunner = null;\n this._isRunning = false;\n this._updateCounter = 0;\n this._finishFirstRender = false;\n }\n\n async asyncCallback(callback: (context: IDataflow) => any) {\n try {\n await callback(this);\n } catch (err) {\n this.logger.error(err);\n }\n }\n\n add(grammar: IGrammarBase) {\n if (!grammar) {\n return;\n }\n this._setRankOfGrammar(grammar);\n this.commit(grammar);\n if (!this.grammars.includes(grammar)) {\n this.grammars.push(grammar);\n\n return true;\n }\n\n return false;\n }\n\n remove(grammar: IGrammarBase) {\n if (grammar) {\n this._committed.remove(grammar);\n this._heap.remove(grammar);\n this.grammars = this.grammars.filter(storedGrammar => storedGrammar !== grammar);\n }\n }\n\n private _setRankOfGrammar(grammar?: IGrammarBase) {\n if (!grammar) {\n return;\n }\n grammar.rank = ++this._curRank;\n }\n\n private _reRank(grammar?: IGrammarBase) {\n const queue = [grammar];\n\n while (queue.length) {\n const cur = queue.pop();\n this._setRankOfGrammar(cur);\n const list = cur.targets;\n\n if (list) {\n list.forEach((entry: IGrammarBase) => {\n queue.push(entry);\n if (entry === grammar) {\n this.logger.error('Cycle detected in dataflow graph.');\n }\n });\n }\n }\n }\n\n private _enqueue(grammar: IGrammarBase) {\n if (!grammar) {\n return;\n }\n\n (grammar as any).qrank = grammar.rank;\n // push and reRank in the heap\n this._heap.push(grammar);\n }\n\n private _logGrammarRunInfo(grammar: IGrammarBase) {\n if (this.logger.canLogError()) {\n const debugInfos = [\n { key: 'id', value: grammar.id() },\n { key: 'name', value: grammar.name() }\n ];\n const debugStr = debugInfos.reduce((str, entry, index) => {\n if (!isNil(entry.value)) {\n return `${str}${index ? ' , ' : ''}${entry.key}: ${entry.value}`;\n }\n\n return str;\n }, '');\n\n this.logger.debug('Run Operator: ', grammar, debugStr);\n }\n }\n\n hasCommitted() {\n return !!this._committed.length;\n }\n\n // OPERATOR UPDATES\n commit(grammar: IGrammarBase) {\n if (this._isRunning) {\n // this may lead to a problem, the same op may be added to the queue multiple times\n // if in midst of propagation, add to priority queue\n this._enqueue(grammar);\n } else {\n // otherwise, queue for next propagation\n this._committed.add(grammar);\n }\n\n return this;\n }\n\n private _beforeEvaluate() {\n // reRank grammar element which has higher rank than its targets\n this.grammars.forEach(grammar => {\n if (grammar.targets.some(target => target?.rank < grammar?.rank)) {\n this._reRank(grammar);\n }\n });\n // initialize priority queue, reset committed grammars\n this._committed.forEach(grammar => this._enqueue(grammar));\n this._committed = new UniqueList(grammar => grammar.uid);\n }\n\n private _enqueueTargets(grammar: IGrammarBase) {\n if (grammar.targets && grammar.targets.length && this._finishFirstRender) {\n grammar.targets.forEach((target: IGrammarBase) => this._enqueue(target));\n }\n }\n\n async evaluate() {\n if (this._isReleased) {\n return;\n }\n // invoke prerun function, if provided\n if (this._beforeRunner) {\n await this.asyncCallback(this._beforeRunner);\n }\n\n // exit early if there are no updates\n if (!this._committed.length) {\n this.logger.info('Dataflow invoked, but nothing to do.');\n return false;\n }\n\n this._isRunning = true;\n this._updateCounter += 1;\n let count = 0;\n let grammar;\n let next;\n let dt;\n let error;\n\n if (this.logger.canLogInfo()) {\n dt = Date.now();\n this.logger.debug(`-- START PROPAGATION (${this._updateCounter}) -----`);\n }\n\n this._beforeEvaluate();\n\n try {\n while (this._heap.size() > 0) {\n if (this._isReleased) {\n break;\n }\n // dequeue grammar with highest priority\n grammar = this._heap.pop();\n\n if (!grammar) {\n continue;\n }\n\n // re-queue if rank changed\n if (grammar.rank !== grammar.qrank) {\n this._enqueue(grammar);\n continue;\n }\n\n next = grammar.run();\n\n // await if grammar returned a promise\n if (next && next.then) {\n next = await next;\n }\n\n // finish evaluation if dataflow is stopped during asynchronous process\n if (!this._isRunning) {\n return false;\n }\n\n this._logGrammarRunInfo(grammar);\n this._enqueueTargets(grammar);\n count += 1;\n }\n } catch (err) {\n this._heap.clear();\n error = err;\n }\n if (this._isReleased) {\n return false;\n }\n\n this._isRunning = false;\n\n if (this.logger.canLogInfo()) {\n dt = Date.now() - dt;\n this.logger.info(`> ${count} grammars; ${dt} ms`);\n }\n\n if (error) {\n this.logger.error(error);\n } else if (this._afterRunner) {\n // invoke callbacks queued via runAfter\n await this.asyncCallback(this._afterRunner);\n }\n\n this._finishFirstRender = true;\n\n return true;\n }\n\n evaluateSync() {\n // invoke prerun function, if provided\n if (this._beforeRunner) {\n this._beforeRunner(this);\n }\n\n // exit early if there are no updates\n if (!this._committed.length) {\n this.logger.info('Dataflow invoked, but nothing to do.');\n return false;\n }\n\n this._isRunning = true;\n this._updateCounter += 1;\n let count = 0;\n let grammar;\n let dt;\n let error;\n\n if (this.logger.canLogInfo()) {\n dt = Date.now();\n this.logger.debug(`-- START PROPAGATION (${this._updateCounter}) -----`);\n }\n\n this._beforeEvaluate();\n\n while (this._heap.size() > 0) {\n // dequeue grammar with highest priority\n grammar = this._heap.pop();\n\n if (!grammar) {\n continue;\n }\n\n // re-queue if rank changed\n if (grammar.rank !== grammar.qrank) {\n this._enqueue(grammar);\n continue;\n }\n\n grammar.runSync();\n\n this._logGrammarRunInfo(grammar);\n this._enqueueTargets(grammar);\n count += 1;\n }\n\n this._isRunning = false;\n\n if (this.logger.canLogInfo()) {\n dt = Date.now() - dt;\n this.logger.info(`> ${count} grammars updated; ${dt} ms`);\n }\n\n if (error) {\n this.logger.error(error);\n } else if (this._afterRunner) {\n this._afterRunner(this);\n }\n\n this._finishFirstRender = true;\n\n return true;\n }\n\n private stop() {\n if (!this._isRunning) {\n return;\n }\n this._isRunning = false;\n }\n\n runBefore(callback?: IDataflowCallback) {\n this._beforeRunner = callback;\n }\n\n runAfter(callback?: IDataflowCallback) {\n this._afterRunner = callback;\n }\n\n release() {\n // stop asynchronous evaluation\n this.stop();\n this._isReleased = true;\n\n if (this._heap) {\n this._heap.clear();\n this._heap = null;\n }\n\n this.logger = null;\n this._committed = null;\n }\n}\n","import type { IGroupMark, IMark } from '../types';\nimport { GrammarMarkType } from './enums';\n\nexport const traverseMarkTree = (\n rootMark: IMark,\n childrenKey: 'children' | 'layoutChildren',\n apply: (mark: IMark) => any,\n filter?: (mark: IMark) => boolean,\n leafFirst?: boolean\n) => {\n const traverse = (mark: IMark) => {\n if (!leafFirst) {\n if (mark && (!filter || filter(mark))) {\n apply.call(null, mark);\n }\n }\n\n if (mark.markType === GrammarMarkType.group) {\n const children: IMark[] = (mark as IGroupMark)[childrenKey];\n\n if (children) {\n children.forEach(child => {\n traverse(child);\n });\n }\n }\n\n if (leafFirst) {\n if (mark && (!filter || filter(mark))) {\n apply.call(null, mark);\n }\n }\n };\n\n traverse(rootMark);\n};\n","import type { IAnimationControlOptions } from '../types/animate';\nimport { GrammarMarkType } from './enums';\n\nexport const BridgeElementKey = '__vgrammar_scene_item__';\n\nexport const CollectionMarkType = [GrammarMarkType.line, GrammarMarkType.area];\n\nexport const Mark3DType = [GrammarMarkType.arc3d, GrammarMarkType.rect3d, GrammarMarkType.pyramid3d];\n\nexport const DefaultKey = 'key';\n\nexport const DefaultMarkData = [{}];\n\nexport const DefaultGroupKeys = [DefaultKey];\n\nexport const DefaultReuse = true;\nexport const DefaultMorph = true;\nexport const DefaultMorphAll = false;\nexport const DefaultSplitPath: null | 'clone' = null;\nexport const DefaultEnableExitAnimation = true;\n\nexport const ImmediateAnimationState = 'VGRAMMAR_IMMEDIATE_ANIMATION';\n\n/** default animation configs */\nexport const DefaultAnimationStartTime = 0;\nexport const DefaultAnimationDuration = 1000;\nexport const DefaultAnimationDelay = 0;\nexport const DefaultAnimationDelayAfter = 0;\nexport const DefaultAnimationLoop = false;\nexport const DefaultAnimationOneByOne = false;\nexport const DefaultAnimationEasing = 'quintInOut';\nexport const DefaultAnimationControlOptions: IAnimationControlOptions = {\n stopWhenStateChange: false,\n immediatelyApply: true\n};\nexport const DefaultAnimationParameters = 'VGRAMMAR_ANIMATION_PARAMETERS';\n","const isUndefined = (value: any): value is undefined => {\n return value === undefined;\n};\n\nexport default isUndefined;\n","import { FederatedEvent } from './base-event';\nimport type { EventPoint } from '../../interface';\n/**\n * 代码参考自 https://github.com/pixijs/pixijs\n * The MIT License\n\n Copyright (c) 2013-2023 Mathew Groves, Chad Engler\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\n/**\n * A FederatedEvent for mouse events.\n */\nexport class FederatedMouseEvent extends FederatedEvent implements MouseEvent {\n /** Whether the \"alt\" key was pressed when this mouse event occurred. */\n altKey: boolean;\n\n /** The specific button that was pressed in this mouse event. */\n button: number;\n\n /** The button depressed when this event occurred. */\n buttons: number;\n\n /** Whether the \"control\" key was pressed when this mouse event occurred. */\n ctrlKey: boolean;\n\n /** Whether the \"meta\" key was pressed when this mouse event occurred. */\n metaKey: boolean;\n\n /** This is currently not implemented in the Federated Events API. */\n relatedTarget: EventTarget | null;\n\n /** Whether the \"shift\" key was pressed when this mouse event occurred. */\n shiftKey: boolean;\n\n /** The coordinates of the mouse event relative to the canvas. */\n client: EventPoint = {\n x: 0,\n y: 0\n };\n\n public get clientX(): number {\n return this.client.x;\n }\n\n public get clientY(): number {\n return this.client.y;\n }\n\n /** This is the number of clicks that occurs in 200ms/click of each other. */\n declare detail: number;\n\n /** The movement in this pointer relative to the last `mousemove` event. */\n movement: EventPoint = {\n x: 0,\n y: 0\n };\n\n /** @readonly */\n get movementX(): number {\n return this.movement.x;\n }\n\n /** @readonly */\n get movementY(): number {\n return this.movement.y;\n }\n\n /**\n * The offset of the pointer coordinates w.r.t. target DisplayObject in world space. This is\n * not supported at the moment.\n */\n offset: EventPoint = {\n x: 0,\n y: 0\n };\n\n /** @readonly */\n get offsetX(): number {\n return this.offset.x;\n }\n\n /** @readonly */\n get offsetY(): number {\n return this.offset.y;\n }\n\n /** The pointer coordinates in world space. */\n global: EventPoint = {\n x: 0,\n y: 0\n };\n\n /** @readonly */\n get globalX(): number {\n return this.global.x;\n }\n\n /** @readonly */\n get globalY(): number {\n return this.global.y;\n }\n\n screen: EventPoint = {\n x: 0,\n y: 0\n };\n /** @readonly */\n get screenX(): number {\n return this.screen.x;\n }\n /** @readonly */\n get screenY(): number {\n return this.screen.y;\n }\n\n /**\n * Whether the modifier key was pressed when this event natively occurred.\n * @param key - The modifier key.\n */\n getModifierState(key: string): boolean {\n return 'getModifierState' in this.nativeEvent && this.nativeEvent.getModifierState(key);\n }\n\n /**\n * Not supported.\n * @param _typeArg\n * @param _canBubbleArg\n * @param _cancelableArg\n * @param _viewArg\n * @param _detailArg\n * @param _screenXArg\n * @param _screenYArg\n * @param _clientXArg\n * @param _clientYArg\n * @param _ctrlKeyArg\n * @param _altKeyArg\n * @param _shiftKeyArg\n * @param _metaKeyArg\n * @param _buttonArg\n * @param _relatedTargetArg\n * @deprecated\n */\n // eslint-disable-next-line max-params\n initMouseEvent(\n _typeArg: string,\n _canBubbleArg: boolean,\n _cancelableArg: boolean,\n _viewArg: Window,\n _detailArg: number,\n _screenXArg: number,\n _screenYArg: number,\n _clientXArg: number,\n _clientYArg: number,\n _ctrlKeyArg: boolean,\n _altKeyArg: boolean,\n _shiftKeyArg: boolean,\n _metaKeyArg: boolean,\n _buttonArg: number,\n _relatedTargetArg: EventTarget\n ): void {\n throw new Error('Method not implemented.');\n }\n}\n","import { FederatedMouseEvent } from './mouse-event';\n/**\n * 代码参考自 https://github.com/pixijs/pixijs\n * The MIT License\n\n Copyright (c) 2013-2023 Mathew Groves, Chad Engler\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\n/**\n * A FederatedEvent for pointer events.\n */\nexport class FederatedPointerEvent extends FederatedMouseEvent implements PointerEvent {\n pickParams?: any;\n /**\n * The unique identifier of the pointer.\n */\n pointerId: number;\n\n /**\n * The width of the pointer's contact along the x-axis, measured in CSS pixels.\n * radiusX of TouchEvents will be represented by this value.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/width\n */\n width = 0;\n\n /**\n * The height of the pointer's contact along the y-axis, measured in CSS pixels.\n * radiusY of TouchEvents will be represented by this value.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/height\n */\n height = 0;\n\n /**\n * Indicates whether or not the pointer device that created the event is the primary pointer.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/isPrimary\n */\n isPrimary = false;\n\n /**\n * The type of pointer that triggered the event.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pointerType\n */\n pointerType: string;\n\n /**\n * Pressure applied by the pointing device during the event.\n *s\n * A Touch's force property will be represented by this value.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pressure\n */\n pressure: number;\n\n /**\n * Barrel pressure on a stylus pointer.\n * @see https://w3c.github.io/pointerevents/#pointerevent-interface\n */\n tangentialPressure: number;\n\n /**\n * The angle, in degrees, between the pointer device and the screen.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/tiltX\n */\n tiltX: number;\n\n /**\n * The angle, in degrees, between the pointer device and the screen.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/tiltY\n */\n tiltY: number;\n\n /**\n * Twist of a stylus pointer.\n * @see https://w3c.github.io/pointerevents/#pointerevent-interface\n */\n twist: number;\n\n /** This is the number of clicks that occurs in 200ms/click of each other. */\n declare detail: number;\n\n getCoalescedEvents(): PointerEvent[] {\n if (this.type === 'pointermove' || this.type === 'mousemove' || this.type === 'touchmove') {\n return [this];\n }\n\n return [];\n }\n\n getPredictedEvents(): PointerEvent[] {\n throw new Error('getPredictedEvents is not supported!');\n }\n\n clone() {\n const event = new FederatedPointerEvent(this.manager);\n\n event.eventPhase = event.NONE;\n event.currentTarget = null;\n event.path = [];\n event.target = null;\n\n event.nativeEvent = this.nativeEvent;\n event.originalEvent = this.originalEvent;\n\n this.manager?.copyPointerData(this, event);\n this.manager?.copyMouseData(this, event);\n this.manager?.copyData(this, event);\n\n // copy propagation path for perf\n event.target = this.target;\n event.path = this.composedPath().slice();\n event.type = this.type;\n\n return event;\n }\n}\n","import { FederatedMouseEvent } from './mouse-event';\n/**\n * 代码参考自 https://github.com/pixijs/pixijs\n * The MIT License\n\n Copyright (c) 2013-2023 Mathew Groves, Chad Engler\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\nexport class FederatedWheelEvent extends FederatedMouseEvent implements WheelEvent {\n /**\n * The units of `deltaX`, `deltaY`, and `deltaZ`. This is one of `DOM_DELTA_LINE`,\n * `DOM_DELTA_PAGE`, `DOM_DELTA_PIXEL`.\n */\n deltaMode: number;\n\n /** Horizontal scroll amount */\n deltaX: number;\n\n /** Vertical scroll amount */\n deltaY: number;\n\n /** z-axis scroll amount. */\n deltaZ: number;\n\n static readonly DOM_DELTA_PIXEL = 0;\n\n readonly DOM_DELTA_PIXEL = 0;\n\n static readonly DOM_DELTA_LINE = 1;\n\n readonly DOM_DELTA_LINE = 1;\n\n static readonly DOM_DELTA_PAGE = 2;\n\n readonly DOM_DELTA_PAGE = 2;\n\n clone() {\n const event = new FederatedWheelEvent(this.manager);\n\n event.eventPhase = event.NONE;\n event.currentTarget = null;\n event.path = [];\n event.target = null;\n\n event.nativeEvent = this.nativeEvent;\n event.originalEvent = this.originalEvent;\n\n this.manager?.copyWheelData(this, event);\n this.manager?.copyMouseData(this, event);\n this.manager?.copyData(this, event);\n\n event.target = this.target;\n event.path = this.composedPath().slice();\n event.type = this.type;\n\n return event;\n }\n}\n","export const WILDCARD = '*';\n","export const clock = typeof performance === 'object' && (performance as any).now ? performance : Date;\n","import type { Dict } from '@visactor/vutils';\nimport { EventEmitter, Logger, get } from '@visactor/vutils';\nimport { FederatedMouseEvent, FederatedPointerEvent, FederatedWheelEvent } from './federated-event';\nimport type { IEventTarget } from '../interface/event';\nimport { WILDCARD } from './constant';\nimport type { FederatedEvent } from './federated-event/base-event';\nimport { clock } from './util';\nimport type { Cursor, IGraphic } from '../interface';\n/**\n * 代码参考自 https://github.com/pixijs/pixijs\n * The MIT License\n\n Copyright (c) 2013-2023 Mathew Groves, Chad Engler\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\n// The maximum iterations used in propagation. This prevent infinite loops.\nconst PROPAGATION_LIMIT = 2048;\n\ntype TrackingData = {\n pressTargetsByButton: {\n [id: number]: IEventTarget[];\n };\n clicksByButton: {\n [id: number]: {\n clickCount: number;\n target: IEventTarget;\n timeStamp: number;\n };\n };\n overTargets: IEventTarget[];\n};\n\ntype EventManagerConfig = {\n /**\n * 多次点击之间的最大时间,默认为 200 ms\n * @default 200\n */\n clickInterval?: number;\n};\n\ntype EmitterListener = { fn: (...args: any[]) => any; context: any; once: boolean };\ntype EmitterListeners = Record;\n\nfunction isMouseLike(pointerType: string) {\n return pointerType === 'mouse' || pointerType === 'pen';\n}\n\nconst DEFAULT_CLICK_INTERVAL = 200;\n\nexport class EventManager {\n rootTarget: IEventTarget;\n\n dispatch: any = new EventEmitter();\n\n cursor: Cursor | string;\n cursorTarget: IEventTarget | null = null;\n\n protected mappingTable: Record<\n string,\n Array<{\n fn: (e: FederatedEvent, target: IEventTarget) => void;\n priority: number;\n }>\n >;\n\n protected mappingState: Record = {\n trackingData: {}\n };\n\n protected eventPool: Map = new Map();\n\n // 缓存上一个坐标点的拾取结果,用于优化在同一个点连续触发事件的拾取逻辑\n private _prePointTargetCache: Dict & { stageRenderCount: number };\n\n private _config: EventManagerConfig;\n\n constructor(root: IEventTarget, config: EventManagerConfig) {\n this.rootTarget = root;\n this.mappingTable = {};\n this._config = {\n clickInterval: DEFAULT_CLICK_INTERVAL,\n ...config\n };\n this.addEventMapping('pointerdown', this.onPointerDown);\n this.addEventMapping('pointermove', this.onPointerMove);\n this.addEventMapping('pointerout', this.onPointerOut);\n this.addEventMapping('pointerleave', this.onPointerOut);\n this.addEventMapping('pointerover', this.onPointerOver);\n this.addEventMapping('pointerup', this.onPointerUp);\n this.addEventMapping('pointerupoutside', this.onPointerUpOutside);\n this.addEventMapping('wheel', this.onWheel);\n }\n\n addEventMapping(type: string, fn: (e: FederatedEvent, target: IEventTarget) => void): void {\n if (!this.mappingTable[type]) {\n this.mappingTable[type] = [];\n }\n\n this.mappingTable[type].push({\n fn,\n priority: 0\n });\n this.mappingTable[type].sort((a, b) => a.priority - b.priority);\n }\n\n dispatchEvent(e: FederatedEvent, type?: string): void {\n e.propagationStopped = false;\n e.propagationImmediatelyStopped = false;\n\n this.propagate(e, type);\n this.dispatch.emit(type || e.type, e);\n }\n\n mapEvent(e: FederatedEvent): void {\n if (!this.rootTarget) {\n return;\n }\n const mappers = this.mappingTable[e.type];\n\n let target;\n const cacheKey = `${e.canvasX}-${e.canvasY}`;\n if (\n this._prePointTargetCache?.[cacheKey] &&\n (this._prePointTargetCache?.[cacheKey] as unknown as IGraphic)?.stage &&\n (this._prePointTargetCache?.[cacheKey] as unknown as IGraphic)?.stage.renderCount ===\n (this._prePointTargetCache?.stageRenderCount as number)\n ) {\n target = this._prePointTargetCache[cacheKey];\n } else {\n target = this.pickTarget(e.canvasX, e.canvasY, e);\n // 缓存上一个坐标点的拾取结果,减少拾取的次数,如 pointermove pointerdown 和 pointerup 在同一个点触发\n // 如果存在params,那么就不缓存\n if (!(e as any).pickParams) {\n this._prePointTargetCache = {\n [cacheKey]: target,\n stageRenderCount: target?.stage.renderCount ?? -1\n };\n }\n }\n\n if (mappers) {\n for (let i = 0, j = mappers.length; i < j; i++) {\n mappers[i].fn(e, target);\n }\n } else {\n Logger.getInstance().warn(`[EventManager]: Event mapping not defined for ${e.type}`);\n }\n }\n\n propagate(e: FederatedEvent, type?: string): void {\n if (!e.target) {\n return;\n }\n\n const composedPath = e.composedPath();\n\n e.eventPhase = e.CAPTURING_PHASE;\n\n for (let i = 0, j = composedPath.length - 1; i < j; i++) {\n e.currentTarget = composedPath[i];\n\n this.notifyTarget(e, type);\n\n if (e.propagationStopped || e.propagationImmediatelyStopped) {\n return;\n }\n }\n\n e.eventPhase = e.AT_TARGET;\n e.currentTarget = e.target;\n\n this.notifyTarget(e, type);\n\n if (e.propagationStopped || e.propagationImmediatelyStopped) {\n return;\n }\n\n e.eventPhase = e.BUBBLING_PHASE;\n\n for (let i = composedPath.length - 2; i >= 0; i--) {\n e.currentTarget = composedPath[i];\n this.notifyTarget(e, type);\n\n if (e.propagationStopped || e.propagationImmediatelyStopped) {\n return;\n }\n }\n }\n\n propagationPath(target: IEventTarget): IEventTarget[] {\n const propagationPath = [target];\n\n for (let i = 0; i < PROPAGATION_LIMIT && target !== this.rootTarget && target.parent; i++) {\n if (!target.parent) {\n throw new Error('Cannot find propagation path to disconnected target');\n }\n\n propagationPath.push(target.parent);\n\n target = target.parent;\n }\n\n propagationPath.reverse();\n\n return propagationPath;\n }\n\n protected notifyTarget(e: FederatedEvent, type?: string): void {\n type = type ?? e.type;\n const key = e.eventPhase === e.CAPTURING_PHASE || e.eventPhase === e.AT_TARGET ? `${type}capture` : type;\n\n this.notifyListeners(e, key);\n\n if (e.eventPhase === e.AT_TARGET) {\n this.notifyListeners(e, type);\n }\n }\n\n protected onPointerDown = (from: FederatedEvent, target: IEventTarget) => {\n if (!(from instanceof FederatedPointerEvent)) {\n Logger.getInstance().warn('EventManager cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const e = this.createPointerEvent(from, from.type, target);\n\n this.dispatchEvent(e, 'pointerdown');\n\n if (e.pointerType === 'touch') {\n this.dispatchEvent(e, 'touchstart');\n } else if (isMouseLike(e.pointerType)) {\n const isRightButton = e.button === 2;\n\n this.dispatchEvent(e, isRightButton ? 'rightdown' : 'mousedown');\n }\n\n const trackingData = this.trackingData(from.pointerId);\n\n trackingData.pressTargetsByButton[from.button] = e.composedPath();\n\n this.freeEvent(e);\n };\n\n protected onPointerMove = (from: FederatedEvent, target: IEventTarget) => {\n if (!(from instanceof FederatedPointerEvent)) {\n Logger.getInstance().warn('EventManager cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const e = this.createPointerEvent(from, from.type, target);\n const isMouse = isMouseLike(e.pointerType);\n const trackingData = this.trackingData(from.pointerId);\n const outTarget = this.findMountedTarget(trackingData.overTargets);\n\n if (trackingData.overTargets && outTarget && outTarget !== this.rootTarget && outTarget !== e.target) {\n const outType = from.type === 'mousemove' ? 'mouseout' : 'pointerout';\n const outEvent = this.createPointerEvent(from, outType, outTarget || undefined);\n\n this.dispatchEvent(outEvent, 'pointerout');\n if (isMouse) {\n this.dispatchEvent(outEvent, 'mouseout');\n }\n if (!e.composedPath().includes(outTarget!)) {\n const leaveEvent = this.createPointerEvent(from, 'pointerleave', outTarget || undefined);\n\n leaveEvent.eventPhase = leaveEvent.AT_TARGET;\n\n while (leaveEvent.target && !e.composedPath().includes(leaveEvent.target)) {\n leaveEvent.currentTarget = leaveEvent.target;\n\n this.notifyTarget(leaveEvent);\n if (isMouse) {\n this.notifyTarget(leaveEvent, 'mouseleave');\n }\n\n leaveEvent.target = leaveEvent.target.parent as IEventTarget;\n }\n\n this.freeEvent(leaveEvent);\n }\n\n this.freeEvent(outEvent);\n }\n\n if (outTarget !== e.target) {\n const overType = from.type === 'mousemove' ? 'mouseover' : 'pointerover';\n const overEvent = this.clonePointerEvent(e, overType);\n\n this.dispatchEvent(overEvent, 'pointerover');\n if (isMouse) {\n this.dispatchEvent(overEvent, 'mouseover');\n }\n\n let overTargetAncestor = outTarget?.parent;\n\n while (overTargetAncestor && overTargetAncestor !== this.rootTarget.parent) {\n if (overTargetAncestor === e.target) {\n break;\n }\n\n overTargetAncestor = overTargetAncestor.parent;\n }\n\n const didPointerEnter = !overTargetAncestor || overTargetAncestor === this.rootTarget.parent;\n\n if (didPointerEnter) {\n const enterEvent = this.clonePointerEvent(e, 'pointerenter');\n\n enterEvent.eventPhase = enterEvent.AT_TARGET;\n\n while (enterEvent.target && enterEvent.target !== outTarget && enterEvent.target !== this.rootTarget.parent) {\n enterEvent.currentTarget = enterEvent.target;\n\n this.notifyTarget(enterEvent);\n if (isMouse) {\n this.notifyTarget(enterEvent, 'mouseenter');\n }\n\n enterEvent.target = enterEvent.target.parent as IEventTarget;\n }\n\n this.freeEvent(enterEvent);\n }\n\n this.freeEvent(overEvent);\n }\n\n const propagationMethod = 'dispatchEvent';\n\n this[propagationMethod](e, 'pointermove');\n\n if (e.pointerType === 'touch') {\n this[propagationMethod](e, 'touchmove');\n }\n\n if (isMouse) {\n this[propagationMethod](e, 'mousemove');\n this.cursorTarget = e.target;\n this.cursor = (e.target?.attribute?.cursor as Cursor) || this.rootTarget.getCursor();\n }\n\n trackingData.overTargets = e.composedPath();\n\n this.freeEvent(e);\n };\n\n protected onPointerOver = (from: FederatedEvent, target: IEventTarget) => {\n if (!(from instanceof FederatedPointerEvent)) {\n Logger.getInstance().warn('EventManager cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const trackingData = this.trackingData(from.pointerId);\n const e = this.createPointerEvent(from, from.type, target);\n const isMouse = isMouseLike(e.pointerType);\n\n this.dispatchEvent(e, 'pointerover');\n if (isMouse) {\n this.dispatchEvent(e, 'mouseover');\n }\n if (e.pointerType === 'mouse') {\n this.cursorTarget = e.target;\n this.cursor = (e.target?.attribute?.cursor as Cursor) || this.rootTarget.getCursor();\n }\n\n const enterEvent = this.clonePointerEvent(e, 'pointerenter');\n\n enterEvent.eventPhase = enterEvent.AT_TARGET;\n\n while (enterEvent.target && enterEvent.target !== this.rootTarget.parent) {\n enterEvent.currentTarget = enterEvent.target;\n\n this.notifyTarget(enterEvent);\n if (isMouse) {\n this.notifyTarget(enterEvent, 'mouseenter');\n }\n\n enterEvent.target = enterEvent.target.parent as IEventTarget;\n }\n\n trackingData.overTargets = e.composedPath();\n\n this.freeEvent(e);\n this.freeEvent(enterEvent);\n };\n\n protected onPointerOut = (from: FederatedEvent, target: IEventTarget) => {\n if (!(from instanceof FederatedPointerEvent)) {\n Logger.getInstance().warn('EventManager cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const trackingData = this.trackingData(from.pointerId);\n\n if (trackingData.overTargets) {\n const isMouse = isMouseLike(from.pointerType);\n const outTarget = this.findMountedTarget(trackingData.overTargets);\n\n const outEvent = this.createPointerEvent(from, 'pointerout', outTarget || undefined);\n\n this.dispatchEvent(outEvent);\n if (isMouse) {\n this.dispatchEvent(outEvent, 'mouseout');\n }\n\n const leaveEvent = this.createPointerEvent(from, 'pointerleave', outTarget || undefined);\n\n leaveEvent.eventPhase = leaveEvent.AT_TARGET;\n\n while (leaveEvent.target && leaveEvent.target !== this.rootTarget.parent) {\n leaveEvent.currentTarget = leaveEvent.target;\n\n this.notifyTarget(leaveEvent);\n if (isMouse) {\n this.notifyTarget(leaveEvent, 'mouseleave');\n }\n\n leaveEvent.target = leaveEvent.target.parent as IEventTarget;\n }\n\n trackingData.overTargets = [];\n\n this.freeEvent(outEvent);\n this.freeEvent(leaveEvent);\n }\n\n this.cursorTarget = null;\n this.cursor = '';\n };\n\n protected onPointerUp = (from: FederatedEvent, target: IEventTarget) => {\n if (!(from instanceof FederatedPointerEvent)) {\n Logger.getInstance().warn('EventManager cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const now = clock.now();\n const e = this.createPointerEvent(from, from.type, target);\n\n this.dispatchEvent(e, 'pointerup');\n\n if (e.pointerType === 'touch') {\n this.dispatchEvent(e, 'touchend');\n } else if (isMouseLike(e.pointerType)) {\n const isRightButton = e.button === 2;\n\n this.dispatchEvent(e, isRightButton ? 'rightup' : 'mouseup');\n }\n\n const trackingData = this.trackingData(from.pointerId);\n const pressTarget = this.findMountedTarget(trackingData.pressTargetsByButton[from.button]);\n\n let clickTarget = pressTarget;\n\n if (pressTarget && !e.composedPath().includes(pressTarget)) {\n let currentTarget = pressTarget;\n\n while (currentTarget && !e.composedPath().includes(currentTarget)) {\n e.currentTarget = currentTarget;\n\n this.notifyTarget(e, 'pointerupoutside');\n\n if (e.pointerType === 'touch') {\n this.notifyTarget(e, 'touchendoutside');\n } else if (isMouseLike(e.pointerType)) {\n const isRightButton = e.button === 2;\n\n this.notifyTarget(e, isRightButton ? 'rightupoutside' : 'mouseupoutside');\n }\n\n currentTarget = currentTarget.parent as IEventTarget;\n }\n\n delete trackingData.pressTargetsByButton[from.button];\n\n clickTarget = currentTarget;\n }\n\n if (clickTarget) {\n const clickEvent = this.clonePointerEvent(e, 'click');\n\n clickEvent.target = clickTarget;\n clickEvent.path = [];\n\n if (!trackingData.clicksByButton[from.button]) {\n trackingData.clicksByButton[from.button] = {\n clickCount: 0,\n target: clickEvent.target,\n timeStamp: now\n };\n }\n\n const clickHistory = trackingData.clicksByButton[from.button];\n if (\n clickHistory.target === clickEvent.target &&\n now - clickHistory.timeStamp < (this._config.clickInterval ?? DEFAULT_CLICK_INTERVAL)\n ) {\n ++clickHistory.clickCount;\n } else {\n clickHistory.clickCount = 1;\n }\n\n clickHistory.target = clickEvent.target;\n clickHistory.timeStamp = now;\n\n clickEvent.detail = clickHistory.clickCount;\n\n if (isMouseLike(clickEvent.pointerType)) {\n this.dispatchEvent(clickEvent, 'click');\n\n if (clickHistory.clickCount === 2) {\n // 双击\n this.dispatchEvent(clickEvent, 'dblclick');\n }\n } else if (clickEvent.pointerType === 'touch') {\n this.dispatchEvent(clickEvent, 'tap');\n if (clickHistory.clickCount === 2) {\n // 双击\n this.dispatchEvent(clickEvent, 'dbltap');\n }\n }\n\n this.dispatchEvent(clickEvent, 'pointertap');\n\n this.freeEvent(clickEvent);\n }\n\n this.freeEvent(e);\n };\n\n protected onPointerUpOutside = (from: FederatedEvent, target: IEventTarget) => {\n if (!(from instanceof FederatedPointerEvent)) {\n Logger.getInstance().warn('EventManager cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const trackingData = this.trackingData(from.pointerId);\n const pressTarget = this.findMountedTarget(trackingData.pressTargetsByButton[from.button]);\n const e = this.createPointerEvent(from, from.type, target);\n\n if (pressTarget) {\n let currentTarget = pressTarget;\n\n while (currentTarget) {\n e.currentTarget = currentTarget;\n\n this.notifyTarget(e, 'pointerupoutside');\n\n if (e.pointerType === 'touch') {\n this.notifyTarget(e, 'touchendoutside');\n } else if (isMouseLike(e.pointerType)) {\n this.notifyTarget(e, e.button === 2 ? 'rightupoutside' : 'mouseupoutside');\n }\n\n currentTarget = currentTarget.parent as IEventTarget;\n }\n\n delete trackingData.pressTargetsByButton[from.button];\n }\n\n this.freeEvent(e);\n };\n\n protected onWheel = (from: FederatedEvent, target: IEventTarget) => {\n if (!(from instanceof FederatedWheelEvent)) {\n Logger.getInstance().warn('EventManager cannot map a non-wheel event as a wheel event');\n\n return;\n }\n\n const wheelEvent = this.createWheelEvent(from, target);\n\n this.dispatchEvent(wheelEvent);\n this.freeEvent(wheelEvent);\n };\n\n protected findMountedTarget(propagationPath: IEventTarget[] | null): IEventTarget | null {\n if (!propagationPath) {\n return null;\n }\n\n let currentTarget = propagationPath[0];\n\n for (let i = 1; i < propagationPath.length; i++) {\n if (propagationPath[i].parent === currentTarget) {\n currentTarget = propagationPath[i];\n } else {\n break;\n }\n }\n\n return currentTarget;\n }\n\n protected createPointerEvent(\n from: FederatedPointerEvent,\n type?: string,\n target?: IEventTarget\n ): FederatedPointerEvent {\n const event = this.allocateEvent(FederatedPointerEvent);\n\n this.copyPointerData(from, event);\n this.copyMouseData(from, event);\n this.copyData(from, event);\n\n event.nativeEvent = from.nativeEvent;\n event.originalEvent = from;\n\n if (target) {\n event.target = target;\n } else {\n event.target = this.pickTarget(event.global.x, event.global.y, event);\n }\n\n if (typeof type === 'string') {\n event.type = type;\n }\n\n return event;\n }\n\n protected createWheelEvent(from: FederatedWheelEvent, target?: IEventTarget): FederatedWheelEvent {\n const event = this.allocateEvent(FederatedWheelEvent);\n\n this.copyWheelData(from, event);\n this.copyMouseData(from, event);\n this.copyData(from, event);\n\n event.nativeEvent = from.nativeEvent;\n event.originalEvent = from;\n event.target = target || this.pickTarget(event.global.x, event.global.y, event);\n\n return event;\n }\n\n protected clonePointerEvent(from: FederatedPointerEvent, type?: string): FederatedPointerEvent {\n const event = this.allocateEvent(FederatedPointerEvent);\n\n event.nativeEvent = from.nativeEvent;\n event.originalEvent = from.originalEvent;\n\n this.copyPointerData(from, event);\n this.copyMouseData(from, event);\n this.copyData(from, event);\n\n event.target = from.target;\n event.path = from.composedPath().slice();\n event.type = type ?? event.type;\n\n return event;\n }\n\n copyWheelData(from: FederatedWheelEvent, to: FederatedWheelEvent): void {\n to.deltaMode = from.deltaMode;\n to.deltaX = from.deltaX;\n to.deltaY = from.deltaY;\n to.deltaZ = from.deltaZ;\n }\n\n copyPointerData(from: FederatedEvent, to: FederatedEvent): void {\n if (!(from instanceof FederatedPointerEvent && to instanceof FederatedPointerEvent)) {\n return;\n }\n\n to.pointerId = from.pointerId;\n to.width = from.width;\n to.height = from.height;\n to.isPrimary = from.isPrimary;\n to.pointerType = from.pointerType;\n to.pressure = from.pressure;\n to.tangentialPressure = from.tangentialPressure;\n to.tiltX = from.tiltX;\n to.tiltY = from.tiltY;\n to.twist = from.twist;\n }\n\n copyMouseData(from: FederatedEvent, to: FederatedEvent): void {\n if (!(from instanceof FederatedMouseEvent && to instanceof FederatedMouseEvent)) {\n return;\n }\n\n to.altKey = from.altKey;\n to.button = from.button;\n to.buttons = from.buttons;\n to.ctrlKey = from.ctrlKey;\n to.shiftKey = from.shiftKey;\n to.metaKey = from.metaKey;\n\n ['client', 'movement', 'canvas', 'screen', 'global', 'offset', 'viewport'].forEach(key => {\n to[key].x = from[key].x;\n to[key].y = from[key].y;\n });\n }\n\n copyData(from: FederatedEvent, to: FederatedEvent): void {\n to.isTrusted = from.isTrusted;\n to.srcElement = from.srcElement;\n to.timeStamp = clock.now();\n to.type = from.type;\n to.detail = from.detail;\n to.view = from.view;\n to.which = from.which;\n\n to.layer.x = from.layer.x;\n to.layer.y = from.layer.y;\n\n to.page.x = from.page.x;\n to.page.y = from.page.y;\n\n (to as any).pickParams = (from as any).pickParams;\n }\n\n protected trackingData(id: number): TrackingData {\n if (!this.mappingState.trackingData[id]) {\n this.mappingState.trackingData[id] = {\n pressTargetsByButton: {},\n clicksByButton: {},\n overTarget: null\n };\n }\n\n return this.mappingState.trackingData[id];\n }\n\n protected allocateEvent(constructor: { new (boundary: EventManager): T }): T {\n if (!this.eventPool.has(constructor as any)) {\n this.eventPool.set(constructor as any, []);\n }\n\n const event = (this.eventPool.get(constructor as any)?.pop() as T) || new constructor(this);\n\n event.eventPhase = event.NONE;\n event.currentTarget = null;\n event.path = [];\n event.target = null;\n\n return event;\n }\n\n protected freeEvent(event: T): void {\n if (event.manager !== this) {\n throw new Error('It is illegal to free an event not managed by this EventManager!');\n }\n\n const constructor = event.constructor;\n\n if (!this.eventPool.has(constructor as any)) {\n this.eventPool.set(constructor as any, []);\n }\n\n this.eventPool.get(constructor as any)?.push(event);\n }\n\n private notifyListeners(e: FederatedEvent, type: string): void {\n const events = (e.currentTarget as any)._events as EmitterListeners;\n const listeners = events[type];\n\n if (listeners) {\n if ('fn' in listeners) {\n if (listeners.once) {\n e.currentTarget.removeEventListener(type, listeners.fn, { once: true });\n }\n listeners.fn.call(listeners.context, e);\n } else {\n for (let i = 0, j = listeners.length; i < j && !e.propagationImmediatelyStopped; i++) {\n if (listeners[i].once) {\n e.currentTarget.removeEventListener(type, listeners[i].fn, { once: true });\n }\n listeners[i].fn.call(listeners[i].context, e);\n }\n }\n }\n // 永远触发WILDCARD事件代理\n this.emitDelegation(e, type);\n }\n\n private emitDelegation(e: FederatedEvent, type: string): void {\n const events = (e.currentTarget as any)._events as EmitterListeners;\n const listeners = events[WILDCARD];\n if (listeners) {\n if ('fn' in listeners) {\n listeners.fn.call(listeners.context, e, type);\n } else {\n for (let i = 0, j = listeners.length; i < j && !e.propagationImmediatelyStopped; i++) {\n listeners[i].fn.call(listeners[i].context, e, type);\n }\n }\n }\n }\n\n private pickTarget(x: number, y: number, e: any) {\n let target;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const pickResult = this.rootTarget.pick(x, y);\n if (pickResult && pickResult.graphic) {\n target = pickResult.graphic;\n } else if (pickResult && pickResult.group) {\n target = pickResult.group;\n // } else if (x >= 0 && x <= get(this.rootTarget, 'width') && y >= 0 && y <= get(this.rootTarget, 'height')) {\n } else if ((this.rootTarget as unknown as IGraphic).AABBBounds.contains(x, y)) {\n target = this.rootTarget;\n } else {\n target = null;\n }\n if (e) {\n e.pickParams = pickResult.params;\n }\n return target;\n }\n}\n","import { isUndefined, has, isString } from '@visactor/vutils';\nimport type { IGlobal } from '../interface';\nimport { EventManager } from './event-manager';\nimport { FederatedPointerEvent, FederatedWheelEvent } from './federated-event';\nimport type { FederatedMouseEvent } from './federated-event/mouse-event';\nimport type { EventPoint, IElementLike, IEventTarget, NativeEvent, RenderConfig } from '../interface/event';\nimport { clock } from './util';\n\nconst MOUSE_POINTER_ID = 1;\nconst TOUCH_TO_POINTER: Record = {\n touchstart: 'pointerdown',\n touchend: 'pointerup',\n touchendoutside: 'pointerupoutside',\n touchmove: 'pointermove',\n touchcancel: 'pointercancel'\n};\n\n/**\n * 代码参考自 https://github.com/pixijs/pixijs\n * The MIT License\n\n Copyright (c) 2013-2023 Mathew Groves, Chad Engler\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\n/**\n * The system for handling UI events.\n */\nexport class EventSystem {\n private readonly globalObj: IGlobal;\n readonly manager: EventManager;\n\n /** Does the device support touch events https://www.w3.org/TR/touch-events/ */\n // readonly supportsTouchEvents = 'ontouchstart' in this.globalObj;\n readonly supportsTouchEvents: boolean;\n\n /** Does the device support pointer events https://www.w3.org/Submission/pointer-events/ */\n // readonly supportsPointerEvents = !!this.globalObj.PointerEvent;\n readonly supportsPointerEvents: boolean;\n\n readonly supportsMouseEvents: boolean;\n\n readonly applyStyles: boolean;\n\n readonly viewport: RenderConfig['viewport'];\n\n /**\n * Should default browser actions automatically be prevented.\n * Does not apply to pointer events for backwards compatibility\n * preventDefault on pointer events stops mouse events from firing\n * Thus, for every pointer event, there will always be either a mouse of touch event alongside it.\n * @default false\n */\n autoPreventDefault: boolean;\n\n /**\n * Dictionary of how different cursor modes are handled. Strings are handled as CSS cursor\n * values, objects are handled as dictionaries of CSS values for domElement,\n * and functions are called instead of changing the CSS.\n * Default CSS cursor values are provided for 'default' and 'pointer' modes.\n * @member {Object void) | CSSStyleDeclaration>}\n */\n cursorStyles: Record void) | CSSStyleDeclaration>;\n\n /**\n * The DOM element to which the root event listeners are bound. This is automatically set to\n */\n domElement: IElementLike | null;\n\n /** The resolution used to convert between the DOM client space into world space. */\n resolution = 1;\n\n private currentCursor: string;\n private rootPointerEvent: FederatedPointerEvent;\n private rootWheelEvent: FederatedWheelEvent;\n private eventsAdded: boolean;\n\n constructor(params: RenderConfig) {\n const {\n targetElement,\n resolution,\n rootNode,\n global,\n viewport,\n autoPreventDefault = false,\n clickInterval,\n supportsTouchEvents = global.supportsTouchEvents,\n supportsPointerEvents = global.supportsPointerEvents\n } = params;\n this.manager = new EventManager(rootNode, {\n clickInterval\n });\n\n this.globalObj = global;\n this.supportsPointerEvents = supportsPointerEvents;\n this.supportsTouchEvents = supportsTouchEvents;\n this.supportsMouseEvents = global.supportsMouseEvents;\n this.applyStyles = global.applyStyles;\n\n this.autoPreventDefault = autoPreventDefault;\n this.eventsAdded = false;\n this.viewport = viewport;\n\n this.rootPointerEvent = new FederatedPointerEvent();\n this.rootWheelEvent = new FederatedWheelEvent();\n\n this.cursorStyles = {\n default: 'inherit',\n pointer: 'pointer'\n };\n\n this.resolution = resolution;\n this.setTargetElement(targetElement);\n }\n\n release(): void {\n this.setTargetElement(null);\n }\n\n setCursor(mode: string, target: IEventTarget | null | 'ignore'): void {\n if (!target && !(this.manager.rootTarget as any).window._handler.canvas.controled) {\n return;\n }\n\n if (!mode) {\n mode = 'default';\n }\n const { applyStyles, domElement } = this;\n\n if (this.currentCursor === mode) {\n return;\n }\n this.currentCursor = mode;\n const style = this.cursorStyles[mode];\n if (style) {\n if (typeof style === 'string' && applyStyles) {\n domElement.style.cursor = style;\n } else if (typeof style === 'function') {\n style(mode);\n } else if (typeof style === 'object' && applyStyles) {\n Object.assign(domElement.style, style);\n }\n } else if (applyStyles && isString(mode) && !has(this.cursorStyles, mode)) {\n domElement.style.cursor = mode;\n }\n }\n\n private onPointerDown = (nativeEvent: NativeEvent): void => {\n if (this.supportsTouchEvents && (nativeEvent as PointerEvent).pointerType === 'touch') {\n return;\n }\n\n const events = this.normalizeToPointerData(nativeEvent);\n\n if (this.autoPreventDefault && (events[0] as any).isNormalized) {\n const cancelable = nativeEvent.cancelable || !('cancelable' in nativeEvent);\n\n if (cancelable) {\n nativeEvent.preventDefault();\n }\n }\n\n for (let i = 0, j = events.length; i < j; i++) {\n const nativeEvent = events[i];\n const federatedEvent = this.bootstrapEvent(this.rootPointerEvent, nativeEvent);\n\n this.manager.mapEvent(federatedEvent);\n }\n\n this.setCursor(this.manager.cursor, this.manager.cursorTarget);\n };\n\n private onPointerMove = (nativeEvent: NativeEvent): void => {\n if (this.supportsTouchEvents && (nativeEvent as PointerEvent).pointerType === 'touch') {\n return;\n }\n\n if (this.isEventOutsideOfTargetElement(nativeEvent)) {\n return;\n }\n\n const normalizedEvents = this.normalizeToPointerData(nativeEvent);\n for (let i = 0, j = normalizedEvents.length; i < j; i++) {\n const event = this.bootstrapEvent(this.rootPointerEvent, normalizedEvents[i]);\n\n this.manager.mapEvent(event);\n }\n\n this.setCursor(this.manager.cursor, this.manager.cursorTarget);\n };\n\n private onPointerUp = (nativeEvent: NativeEvent): void => {\n if (this.supportsTouchEvents && (nativeEvent as PointerEvent).pointerType === 'touch') {\n return;\n }\n\n const outside = this.isEventOutsideOfTargetElement(nativeEvent) ? 'outside' : '';\n const normalizedEvents = this.normalizeToPointerData(nativeEvent);\n\n for (let i = 0, j = normalizedEvents.length; i < j; i++) {\n const event = this.bootstrapEvent(this.rootPointerEvent, normalizedEvents[i]);\n\n event.type += outside;\n\n this.manager.mapEvent(event);\n }\n\n this.setCursor(this.manager.cursor, this.manager.cursorTarget);\n };\n\n private onPointerOverOut = (nativeEvent: NativeEvent): void => {\n if (this.supportsTouchEvents && (nativeEvent as PointerEvent).pointerType === 'touch') {\n return;\n }\n\n const normalizedEvents = this.normalizeToPointerData(nativeEvent);\n\n for (let i = 0, j = normalizedEvents.length; i < j; i++) {\n const event = this.bootstrapEvent(this.rootPointerEvent, normalizedEvents[i]);\n\n this.manager.mapEvent(event);\n }\n\n this.setCursor(this.manager.cursor, this.manager.cursorTarget);\n };\n\n protected onWheel = (nativeEvent: WheelEvent): void => {\n const wheelEvent = this.normalizeWheelEvent(nativeEvent);\n\n this.manager.mapEvent(wheelEvent);\n };\n\n setTargetElement(element: IElementLike | null): void {\n this.removeEvents();\n this.domElement = element;\n this.addEvents();\n }\n\n private addEvents(): void {\n if (this.eventsAdded || !this.domElement) {\n return;\n }\n const { globalObj, domElement } = this;\n\n if (this.supportsPointerEvents) {\n if (globalObj.getDocument()) {\n globalObj.getDocument().addEventListener('pointermove', this.onPointerMove, true);\n globalObj.getDocument().addEventListener('pointerup', this.onPointerUp, true);\n } else {\n domElement.addEventListener('pointermove', this.onPointerMove, true);\n domElement.addEventListener('pointerup', this.onPointerUp, true);\n }\n domElement.addEventListener('pointerdown', this.onPointerDown, true);\n domElement.addEventListener('pointerleave', this.onPointerOverOut, true);\n domElement.addEventListener('pointerover', this.onPointerOverOut, true);\n } else {\n if (globalObj.getDocument()) {\n globalObj.getDocument().addEventListener('mousemove', this.onPointerMove, true);\n globalObj.getDocument().addEventListener('mouseup', this.onPointerUp, true);\n } else {\n domElement.addEventListener('mousemove', this.onPointerMove, true);\n domElement.addEventListener('mouseup', this.onPointerUp, true);\n }\n domElement.addEventListener('mousedown', this.onPointerDown, true);\n domElement.addEventListener('mouseout', this.onPointerOverOut, true);\n domElement.addEventListener('mouseover', this.onPointerOverOut, true);\n }\n\n if (this.supportsTouchEvents) {\n domElement.addEventListener('touchstart', this.onPointerDown, true);\n domElement.addEventListener('touchend', this.onPointerUp, true);\n domElement.addEventListener('touchmove', this.onPointerMove, true);\n }\n\n domElement.addEventListener('wheel', this.onWheel, {\n capture: true\n });\n\n this.eventsAdded = true;\n }\n\n private removeEvents(): void {\n if (!this.eventsAdded || !this.domElement) {\n return;\n }\n const { globalObj, domElement } = this;\n\n if (this.supportsPointerEvents) {\n if (globalObj.getDocument()) {\n globalObj.getDocument().removeEventListener('pointermove', this.onPointerMove, true);\n globalObj.getDocument().removeEventListener('pointerup', this.onPointerUp, true);\n } else {\n domElement.removeEventListener('pointermove', this.onPointerMove, true);\n domElement.removeEventListener('pointerup', this.onPointerUp, true);\n }\n domElement.removeEventListener('pointerdown', this.onPointerDown, true);\n domElement.removeEventListener('pointerleave', this.onPointerOverOut, true);\n domElement.removeEventListener('pointerover', this.onPointerOverOut, true);\n } else {\n if (globalObj.getDocument()) {\n globalObj.getDocument().removeEventListener('mousemove', this.onPointerMove, true);\n globalObj.getDocument().removeEventListener('mouseup', this.onPointerUp, true);\n } else {\n domElement.removeEventListener('mousemove', this.onPointerMove, true);\n domElement.removeEventListener('mouseup', this.onPointerUp, true);\n }\n domElement.removeEventListener('mousedown', this.onPointerDown, true);\n domElement.removeEventListener('mouseout', this.onPointerOverOut, true);\n domElement.removeEventListener('mouseover', this.onPointerOverOut, true);\n }\n\n if (this.supportsTouchEvents) {\n domElement.removeEventListener('touchstart', this.onPointerDown, true);\n domElement.removeEventListener('touchend', this.onPointerUp, true);\n domElement.removeEventListener('touchmove', this.onPointerMove, true);\n }\n\n domElement.removeEventListener('wheel', this.onWheel, true);\n\n this.domElement = null;\n this.eventsAdded = false;\n }\n\n private mapToViewportPoint(event: FederatedMouseEvent): EventPoint {\n const viewport = this.viewport;\n const { x, y } = event;\n return {\n x: x - viewport.x,\n y: y - viewport.y\n };\n }\n\n private mapToCanvasPoint(nativeEvent: PointerEvent | WheelEvent): EventPoint {\n const point = this.globalObj?.mapToCanvasPoint(nativeEvent, this.domElement);\n\n if (point) {\n return point;\n }\n\n const { clientX: x, clientY: y } = nativeEvent;\n const rect = this.domElement.getBoundingClientRect();\n return {\n x: x - rect.left,\n y: y - rect.top\n };\n }\n\n private normalizeToPointerData(event: TouchEvent | MouseEvent | PointerEvent): PointerEvent[] {\n const normalizedEvents = [];\n\n if (\n this.supportsTouchEvents &&\n (event as TouchEvent).changedTouches &&\n (event as TouchEvent).changedTouches.length\n ) {\n for (let i = 0, li = (event as TouchEvent).changedTouches.length; i < li; i++) {\n const touch = (event as TouchEvent).changedTouches[i] as VRenderTouch;\n\n if (isUndefined(touch.button)) {\n touch.button = 0;\n }\n if (isUndefined(touch.buttons)) {\n touch.buttons = 1;\n }\n if (isUndefined(touch.isPrimary)) {\n touch.isPrimary = (event as TouchEvent).touches.length === 1 && event.type === 'touchstart';\n }\n if (isUndefined(touch.width)) {\n touch.width = touch.radiusX || 1;\n }\n if (isUndefined(touch.height)) {\n touch.height = touch.radiusY || 1;\n }\n if (isUndefined(touch.tiltX)) {\n touch.tiltX = 0;\n }\n if (isUndefined(touch.tiltY)) {\n touch.tiltY = 0;\n }\n if (isUndefined(touch.pointerType)) {\n touch.pointerType = 'touch';\n }\n if (isUndefined(touch.pointerId)) {\n touch.pointerId = touch.identifier || 0;\n }\n if (isUndefined(touch.pressure)) {\n touch.pressure = touch.force || 0.5;\n }\n if (isUndefined(touch.twist)) {\n touch.twist = 0;\n }\n if (isUndefined(touch.tangentialPressure)) {\n touch.tangentialPressure = 0;\n }\n if (isUndefined(touch.layerX)) {\n touch.layerX = touch.offsetX = touch.clientX;\n }\n if (isUndefined(touch.layerY)) {\n touch.layerY = touch.offsetY = touch.clientY;\n }\n\n touch.isNormalized = true;\n touch.type = event.type;\n\n normalizedEvents.push(touch);\n }\n } else if (\n !this.globalObj.supportsMouseEvents ||\n (event instanceof MouseEvent && (!this.supportsPointerEvents || !(event instanceof PointerEvent)))\n ) {\n const tempEvent = event as VRenderPointerEvent;\n\n if (isUndefined(tempEvent.isPrimary)) {\n tempEvent.isPrimary = true;\n }\n if (isUndefined(tempEvent.width)) {\n tempEvent.width = 1;\n }\n if (isUndefined(tempEvent.height)) {\n tempEvent.height = 1;\n }\n if (isUndefined(tempEvent.tiltX)) {\n tempEvent.tiltX = 0;\n }\n if (isUndefined(tempEvent.tiltY)) {\n tempEvent.tiltY = 0;\n }\n if (isUndefined(tempEvent.pointerType)) {\n tempEvent.pointerType = 'mouse';\n }\n if (isUndefined(tempEvent.pointerId)) {\n tempEvent.pointerId = MOUSE_POINTER_ID;\n }\n if (isUndefined(tempEvent.pressure)) {\n tempEvent.pressure = 0.5;\n }\n if (isUndefined(tempEvent.twist)) {\n tempEvent.twist = 0;\n }\n if (isUndefined(tempEvent.tangentialPressure)) {\n tempEvent.tangentialPressure = 0;\n }\n\n tempEvent.isNormalized = true;\n\n normalizedEvents.push(tempEvent);\n } else {\n normalizedEvents.push(event);\n }\n\n return normalizedEvents as PointerEvent[];\n }\n\n protected normalizeWheelEvent(nativeEvent: WheelEvent): FederatedWheelEvent {\n const event = this.rootWheelEvent;\n\n this.transferMouseData(event, nativeEvent);\n\n event.deltaMode = nativeEvent.deltaMode;\n event.deltaX = nativeEvent.deltaX;\n event.deltaY = nativeEvent.deltaY;\n event.deltaZ = nativeEvent.deltaZ;\n\n // 获取相对画布坐标\n const { x: canvasX, y: canvasY } = this.mapToCanvasPoint(nativeEvent);\n event.canvas.x = canvasX;\n event.canvas.y = canvasY;\n\n event.global.x = canvasX;\n event.global.y = canvasY;\n\n event.offset.x = canvasX;\n event.offset.y = canvasY;\n\n // 获取相对绘图区域(viewport)坐标\n const { x: viewX, y: viewY } = this.mapToViewportPoint(event);\n event.viewport.x = viewX;\n event.viewport.y = viewY;\n\n event.nativeEvent = nativeEvent;\n event.type = nativeEvent.type;\n\n return event;\n }\n\n /**\n * Normalizes the {@code nativeEvent} into a federateed {@code FederatedPointerEvent}.\n * @param event\n * @param nativeEvent\n */\n private bootstrapEvent(event: FederatedPointerEvent, nativeEvent: PointerEvent): FederatedPointerEvent {\n event.originalEvent = null;\n event.nativeEvent = nativeEvent;\n\n event.pointerId = nativeEvent.pointerId;\n event.width = nativeEvent.width;\n event.height = nativeEvent.height;\n event.isPrimary = nativeEvent.isPrimary;\n event.pointerType = nativeEvent.pointerType;\n event.pressure = nativeEvent.pressure;\n event.tangentialPressure = nativeEvent.tangentialPressure;\n event.tiltX = nativeEvent.tiltX;\n event.tiltY = nativeEvent.tiltY;\n event.twist = nativeEvent.twist;\n this.transferMouseData(event, nativeEvent);\n\n const { x: canvasX, y: canvasY } = this.mapToCanvasPoint(nativeEvent);\n event.canvas.x = canvasX;\n event.canvas.y = canvasY;\n\n event.global.x = canvasX;\n event.global.y = canvasY;\n\n event.offset.x = canvasX;\n event.offset.y = canvasY;\n\n // 获取相对绘图区域(viewport)坐标\n const { x: viewX, y: viewY } = this.mapToViewportPoint(event);\n event.viewport.x = viewX;\n event.viewport.y = viewY;\n\n event.isTrusted = nativeEvent.isTrusted;\n if (event.type === 'pointerleave') {\n event.type = 'pointerout';\n }\n if (event.type.startsWith('mouse')) {\n event.type = event.type.replace('mouse', 'pointer');\n }\n if (event.type.startsWith('touch')) {\n event.type = TOUCH_TO_POINTER[event.type] || event.type;\n }\n\n return event;\n }\n\n /**\n * Transfers base & mouse event data from the {@code nativeEvent} to the federated event.\n * @param event\n * @param nativeEvent\n */\n private transferMouseData(event: FederatedMouseEvent, nativeEvent: MouseEvent): void {\n event.isTrusted = nativeEvent.isTrusted;\n event.srcElement = nativeEvent.srcElement as IEventTarget;\n event.timeStamp = clock.now();\n event.type = nativeEvent.type;\n\n event.altKey = nativeEvent.altKey;\n event.button = nativeEvent.button;\n event.buttons = nativeEvent.buttons;\n event.client.x = nativeEvent.clientX;\n event.client.y = nativeEvent.clientY;\n event.ctrlKey = nativeEvent.ctrlKey;\n event.shiftKey = nativeEvent.shiftKey;\n event.metaKey = nativeEvent.metaKey;\n event.movement.x = nativeEvent.movementX;\n event.movement.y = nativeEvent.movementY;\n event.page.x = nativeEvent.pageX;\n event.page.y = nativeEvent.pageY;\n event.relatedTarget = null;\n }\n\n private isEventOutsideOfTargetElement(nativeEvent: NativeEvent) {\n let target = nativeEvent.target;\n\n if (nativeEvent.composedPath && nativeEvent.composedPath().length > 0) {\n target = nativeEvent.composedPath()[0];\n }\n\n const nativeElement = this.domElement.getNativeHandler\n ? this.domElement.getNativeHandler().nativeCanvas\n : this.domElement;\n\n return target !== nativeElement;\n }\n}\n\ninterface VRenderPointerEvent extends PointerEvent {\n isPrimary: boolean;\n width: number;\n height: number;\n tiltX: number;\n tiltY: number;\n pointerType: string;\n pointerId: number;\n pressure: number;\n twist: number;\n tangentialPressure: number;\n isNormalized: boolean;\n type: string;\n}\n\ninterface VRenderTouch extends Touch {\n button: number;\n buttons: number;\n isPrimary: boolean;\n width: number;\n height: number;\n tiltX: number;\n tiltY: number;\n pointerType: string;\n pointerId: number;\n pressure: number;\n twist: number;\n tangentialPressure: number;\n layerX: number;\n layerY: number;\n offsetX: number;\n offsetY: number;\n isNormalized: boolean;\n type: string;\n}\n","import { Generator } from '../../common/generator';\nimport { application } from '../../application';\nimport type { IPlugin, IPluginService } from '../../interface';\n\nexport class AutoRenderPlugin implements IPlugin {\n name: 'AutoRenderPlugin' = 'AutoRenderPlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n application.graphicService.hooks.onAttributeUpdate.tap(this.key, graphic => {\n if (graphic.glyphHost) {\n graphic = graphic.glyphHost;\n }\n if (graphic.stage === context.stage && graphic.stage != null) {\n graphic.stage.renderNextFrame();\n }\n });\n application.graphicService.hooks.onSetStage.tap(this.key, graphic => {\n if (graphic.glyphHost) {\n graphic = graphic.glyphHost;\n }\n if (graphic.stage === context.stage && graphic.stage != null) {\n graphic.stage.renderNextFrame();\n }\n });\n }\n deactivate(context: IPluginService): void {\n application.graphicService.hooks.onAttributeUpdate.taps =\n application.graphicService.hooks.onAttributeUpdate.taps.filter(item => {\n return item.name !== this.key;\n });\n application.graphicService.hooks.onSetStage.taps = application.graphicService.hooks.onSetStage.taps.filter(item => {\n return item.name !== this.key;\n });\n }\n}\n","import type { IOption3D, IPlugin, IPluginService } from '../../interface';\nimport { Generator } from '../../common/generator';\n\nexport class ViewTransform3dPlugin implements IPlugin {\n name: 'ViewTransform3dPlugin' = 'ViewTransform3dPlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n mousedown?: boolean;\n pageX?: number;\n pageY?: number;\n option3d?: IOption3D;\n\n onMouseDown = (e: MouseEvent | any) => {\n if (!this.option3d) {\n this.option3d = this.pluginService.stage.option3d;\n }\n if (!this.option3d) {\n return;\n }\n this.mousedown = true;\n this.pageX = e.page.x;\n this.pageY = e.page.y;\n };\n onMouseUp = (e: MouseEvent | any) => {\n if (!this.option3d) {\n this.option3d = this.pluginService.stage.option3d;\n }\n if (!this.option3d) {\n return;\n }\n this.mousedown = false;\n };\n onMouseMove = (e: MouseEvent | any) => {\n const stage = this.pluginService.stage;\n if (!this.option3d) {\n this.option3d = stage.option3d;\n }\n if (!this.option3d) {\n return;\n }\n if (this.mousedown) {\n if (!this.pageX || !this.pageY) {\n this.pageX = e.page.x;\n this.pageY = e.page.y;\n } else {\n const deltaX = e.page.x - this.pageX;\n const deltaY = e.page.y - this.pageY;\n this.pageX = e.page.x;\n this.pageY = e.page.y;\n\n const angle1 = deltaX / 100;\n const angle2 = deltaY / 100;\n this.option3d.alpha = (this.option3d.alpha ?? 0) + angle1;\n this.option3d.beta = (this.option3d.beta ?? 0) + angle2;\n stage.set3dOptions(this.option3d);\n stage.renderNextFrame();\n }\n }\n };\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n const stage = context.stage;\n this.option3d = stage.option3d;\n stage.addEventListener('mousedown', this.onMouseDown);\n stage.addEventListener('mouseup', this.onMouseUp);\n stage.addEventListener('mousemove', this.onMouseMove);\n }\n deactivate(context: IPluginService): void {\n const stage = context.stage;\n stage.removeEventListener('mousedown', this.onMouseDown);\n stage.removeEventListener('mouseup', this.onMouseUp);\n stage.removeEventListener('mousemove', this.onMouseMove);\n }\n}\n","import type { IGroup, IPlugin, IPluginService, IDrawContext } from '../../interface';\nimport { application } from '../../application';\nimport { Generator } from '../../common/generator';\n\nexport class IncrementalAutoRenderPlugin implements IPlugin {\n name: 'IncrementalAutoRenderPlugin' = 'IncrementalAutoRenderPlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n protected nextFrameRenderGroupSet: Set = new Set();\n protected willNextFrameRender: boolean = false;\n nextUserParams: Partial = {};\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n application.graphicService.hooks.onAddIncremental.tap(this.key, (graphic, group, stage) => {\n if (graphic.glyphHost) {\n graphic = graphic.glyphHost;\n }\n if (graphic.stage === context.stage && graphic.stage != null) {\n this.nextUserParams.startAtId = group._uid;\n this.renderNextFrame(group);\n }\n });\n application.graphicService.hooks.onClearIncremental.tap(this.key, (group, stage) => {\n if (group.stage === context.stage && group.stage != null) {\n this.nextUserParams.startAtId = group._uid;\n this.nextUserParams.restartIncremental = true;\n this.renderNextFrame(group);\n }\n });\n }\n deactivate(context: IPluginService): void {\n application.graphicService.hooks.onAddIncremental.taps =\n application.graphicService.hooks.onAddIncremental.taps.filter(item => {\n return item.name !== this.key;\n });\n application.graphicService.hooks.onClearIncremental.taps =\n application.graphicService.hooks.onClearIncremental.taps.filter(item => {\n return item.name !== this.key;\n });\n }\n\n renderNextFrame(group: IGroup): void {\n this.nextFrameRenderGroupSet.add(group);\n if (!this.willNextFrameRender) {\n this.willNextFrameRender = true;\n application.global.getRequestAnimationFrame()(() => {\n this._doRenderInThisFrame();\n this.willNextFrameRender = false;\n });\n }\n }\n\n _doRenderInThisFrame() {\n const stage = this.pluginService.stage;\n if (this.nextFrameRenderGroupSet.size) {\n this.nextFrameRenderGroupSet.forEach(group => {\n const layer = group.layer;\n if (!layer || !group.layer.subLayers) {\n return;\n }\n const subLayer = group.layer.subLayers.get(group._uid);\n if (!subLayer || !subLayer.drawContribution) {\n return;\n }\n subLayer.drawContribution.draw(stage.renderService, {\n x: stage.x,\n y: stage.y,\n width: layer.viewWidth,\n height: layer.viewHeight,\n stage,\n layer,\n // TODO: 多图层时不应该再用默认background\n clear: 'transparent',\n renderService: stage.renderService,\n updateBounds: false,\n startAtId: group._uid,\n context: subLayer.layer.getNativeHandler().getContext(),\n ...this.nextUserParams\n });\n });\n this.nextUserParams = {};\n this.nextFrameRenderGroupSet.clear();\n }\n }\n}\n","import { Generator } from '../../common/generator';\nimport type { IGraphic, IPlugin, IPluginService, IRenderService, IDrawContext, IGroup } from '../../interface';\nimport { application } from '../../application';\nimport { DefaultAttribute } from '../../graphic';\n\nexport class HtmlAttributePlugin implements IPlugin {\n name: 'HtmlAttributePlugin' = 'HtmlAttributePlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n context.stage.hooks.afterRender.tap(this.key, stage => {\n if (!(stage && stage === this.pluginService.stage)) {\n return;\n }\n\n this.drawHTML(context.stage.renderService);\n });\n application.graphicService.hooks.onRelease.tap(this.key, graphic => {\n this.removeDom(graphic);\n });\n }\n deactivate(context: IPluginService): void {\n context.stage.hooks.afterRender.taps = context.stage.hooks.afterRender.taps.filter(item => {\n return item.name !== this.key;\n });\n }\n\n protected drawHTML(renderService: IRenderService) {\n if (application.global.env === 'browser') {\n renderService.renderTreeRoots\n .sort((a, b) => {\n return (a.attribute.zIndex ?? DefaultAttribute.zIndex) - (b.attribute.zIndex ?? DefaultAttribute.zIndex);\n })\n .forEach(group => {\n this.renderGroupHTML(group as IGroup);\n });\n }\n }\n\n renderGroupHTML(group: IGroup) {\n this.renderGraphicHTML(group);\n group.forEachChildren((g: IGraphic) => {\n if (g.isContainer) {\n this.renderGroupHTML(g as IGroup);\n } else {\n this.renderGraphicHTML(g);\n }\n });\n }\n\n removeDom(graphic: IGraphic) {\n if (graphic.bindDom && graphic.bindDom.size) {\n // 删除dom\n graphic.bindDom.forEach(item => {\n item.dom && item.dom.parentElement.removeChild(item.dom);\n });\n graphic.bindDom.clear();\n }\n }\n\n renderGraphicHTML(graphic: IGraphic) {\n const { html } = graphic.attribute;\n if (!html) {\n if (graphic.bindDom && graphic.bindDom.size) {\n // 删除dom\n graphic.bindDom.forEach(item => {\n item.dom && item.dom.parentElement.removeChild(item.dom);\n });\n graphic.bindDom.clear();\n }\n return;\n }\n const stage = graphic.stage;\n if (!stage) {\n return;\n }\n const { dom, container, width, height, style, anchorType = 'boundsLeftTop' } = html;\n if (!graphic.bindDom) {\n graphic.bindDom = new Map();\n }\n const lastDom = graphic.bindDom.get(dom);\n // 如果存在了(dom存在,且container没有变化),就跳过\n if (lastDom && !(container && container !== lastDom.container)) {\n return;\n }\n // 清除上一次的dom\n graphic.bindDom.forEach(({ wrapGroup }) => {\n application.global.removeDom(wrapGroup);\n });\n // 转化这个dom为nativeDOM\n let nativeDom: HTMLElement;\n if (typeof dom === 'string') {\n nativeDom = new DOMParser().parseFromString(dom, 'text/html').firstChild as any;\n if ((nativeDom as any).lastChild) {\n nativeDom = (nativeDom as any).lastChild.firstChild;\n }\n } else {\n nativeDom = dom;\n }\n // 获取container的dom,默认为window的container\n let nativeContainer;\n const _container =\n container || (stage.params.enableHtmlAttribute === true ? null : stage.params.enableHtmlAttribute);\n if (_container) {\n if (typeof _container === 'string') {\n nativeContainer = application.global.getElementById(_container);\n } else {\n nativeContainer = _container;\n }\n } else {\n // nativeContainer = application.global.getRootElement();\n nativeContainer = graphic.stage.window.getContainer();\n }\n // 创建wrapGroup\n const wrapGroup = application.global.createDom({ tagName: 'div', width, height, style, parent: nativeContainer });\n if (wrapGroup) {\n wrapGroup.appendChild(nativeDom);\n graphic.bindDom.set(dom, { dom: nativeDom, container, wrapGroup: wrapGroup as any });\n }\n // 事件穿透\n wrapGroup.style.pointerEvents = 'none';\n // 定位wrapGroup\n if (!wrapGroup.style.position) {\n wrapGroup.style.position = 'absolute';\n nativeContainer.style.position = 'relative';\n }\n let left: number = 0;\n let top: number = 0;\n const b = graphic.globalAABBBounds;\n if (anchorType === 'position' || b.empty()) {\n const matrix = graphic.globalTransMatrix;\n left = matrix.e;\n top = matrix.f;\n } else {\n left = b.x1;\n top = b.y1;\n }\n // 查看wrapGroup的位置\n // const wrapGroupTL = application.global.getElementTopLeft(wrapGroup, false);\n const containerTL = application.global.getElementTopLeft(nativeContainer, false);\n const windowTL = stage.window.getTopLeft(false);\n const offsetX = left + windowTL.left - containerTL.left;\n const offsetTop = top + windowTL.top - containerTL.top;\n // wrapGroup.style.transform = `translate(${offsetX}px, ${offsetTop}px)`;\n wrapGroup.style.left = `${offsetX}px`;\n wrapGroup.style.top = `${offsetTop}px`;\n }\n}\n","import type { IAABBBounds } from '@visactor/vutils';\nimport { AABBBounds } from '@visactor/vutils';\nimport { Generator } from '../../common/generator';\nimport type { IGraphic, IStage, IPlugin, IPluginService } from '../../interface';\nimport { application } from '../../application';\n\nconst globalBounds = new AABBBounds();\n\nexport class DirtyBoundsPlugin implements IPlugin {\n name: 'DirtyBoundsPlugin' = 'DirtyBoundsPlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n context.stage.hooks.afterRender.tap(this.key, stage => {\n if (!(stage && stage === this.pluginService.stage)) {\n return;\n }\n stage.dirtyBounds.clear();\n });\n application.graphicService.hooks.beforeUpdateAABBBounds.tap(\n this.key,\n (graphic: IGraphic, stage: IStage, willUpdate: boolean, bounds: IAABBBounds) => {\n if (graphic.glyphHost) {\n graphic = graphic.glyphHost;\n }\n if (!(stage && stage === this.pluginService.stage && stage.renderCount)) {\n return;\n }\n // group的子元素导致的bounds更新不用做dirtyBounds\n if (graphic.isContainer && !graphic.shouldSelfChangeUpdateAABBBounds()) {\n return;\n }\n if (willUpdate) {\n globalBounds.setValue(bounds.x1, bounds.y1, bounds.x2, bounds.y2);\n stage.dirty(globalBounds, graphic.parent && graphic.parent.globalTransMatrix);\n }\n }\n );\n application.graphicService.hooks.afterUpdateAABBBounds.tap(\n this.key,\n (\n graphic: IGraphic,\n stage: IStage,\n bounds: IAABBBounds,\n params: { globalAABBBounds: IAABBBounds },\n selfChange: boolean\n ) => {\n if (!(stage && stage === this.pluginService.stage && stage.renderCount)) {\n return;\n }\n // group的子元素导致的bounds更新不用做dirtyBounds\n if (graphic.isContainer && !selfChange) {\n return;\n }\n stage.dirty(params.globalAABBBounds);\n }\n );\n application.graphicService.hooks.onRemove.tap(this.key, (graphic: IGraphic) => {\n const stage = graphic.stage;\n if (!(stage && stage === this.pluginService.stage && stage.renderCount)) {\n return;\n }\n if (stage) {\n stage.dirty(graphic.globalAABBBounds);\n }\n });\n }\n deactivate(context: IPluginService): void {\n application.graphicService.hooks.beforeUpdateAABBBounds.taps =\n application.graphicService.hooks.beforeUpdateAABBBounds.taps.filter(item => {\n return item.name !== this.key;\n });\n application.graphicService.hooks.afterUpdateAABBBounds.taps =\n application.graphicService.hooks.afterUpdateAABBBounds.taps.filter(item => {\n return item.name !== this.key;\n });\n context.stage.hooks.afterRender.taps = context.stage.hooks.afterRender.taps.filter(item => {\n return item.name !== this.key;\n });\n application.graphicService.hooks.onRemove.taps = application.graphicService.hooks.onRemove.taps.filter(item => {\n return item.name !== this.key;\n });\n }\n}\n","import type { IGraphic, IGroup, IGroupAttribute, IStage } from '../../interface';\nimport { getTheme } from '../../graphic';\nimport type { IPlugin, IPluginService } from '../../interface';\nimport { Generator } from '../../common/generator';\nimport { isNumber } from '../../canvas/util';\nimport { parsePadding } from '../../common/utils';\nimport type { IAABBBounds } from '@visactor/vutils';\nimport { AABBBounds, isArray } from '@visactor/vutils';\nimport { application } from '../../application';\n\nconst _tempBounds = new AABBBounds();\n\nexport class FlexLayoutPlugin implements IPlugin {\n name: 'FlexLayoutPlugin' = 'FlexLayoutPlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n id: number = Generator.GenAutoIncrementId();\n key: string = this.name + this.id;\n tempBounds: AABBBounds = new AABBBounds();\n layouting: boolean;\n\n tryLayout(graphic: IGraphic) {\n if (this.layouting) {\n return;\n }\n this.layouting = true;\n const p = graphic.parent;\n if (!p || !graphic.needUpdateLayout()) {\n return;\n }\n const theme = getTheme(p).group;\n const { display = theme.display } = p.attribute;\n if (display !== 'flex') {\n return;\n }\n const {\n // width,\n // height,\n flexDirection = theme.flexDirection,\n flexWrap = theme.flexWrap,\n justifyContent = theme.justifyContent,\n alignItems = theme.alignItems,\n alignContent = theme.alignContent,\n clip = theme.clip\n } = p.attribute;\n // if (!(width && height)) {\n // return;\n // }\n\n let childrenWidth = 0;\n let childrenHeight = 0;\n let boundsLegal = 0;\n p.forEachChildren((child: IGraphic) => {\n const bounds = child.AABBBounds;\n if (flexDirection === 'column' || flexDirection === 'column-reverse') {\n childrenHeight += bounds.height();\n childrenWidth = Math.max(childrenWidth, bounds.width());\n } else {\n childrenWidth += bounds.width();\n childrenHeight = Math.max(childrenHeight, bounds.height());\n }\n boundsLegal += bounds.x1;\n boundsLegal += bounds.y1;\n boundsLegal += bounds.x2;\n boundsLegal += bounds.y2;\n });\n // judgement children bounds legal\n if (!isFinite(boundsLegal)) {\n return;\n }\n const width = p.attribute.width || childrenWidth;\n const height = p.attribute.height || childrenHeight;\n if (!p.attribute.width) {\n p.attribute.width = 0;\n }\n if (!p.attribute.height) {\n p.attribute.height = 0;\n }\n\n // 这里使用p._AABBBounds可能会将非布局造成的bounds更新也会触发重新布局\n // TODO: 增加layout前预处理,在非递归布局前将子节点及其全部父节点_AABBBounds更新\n this.tempBounds.copy(p._AABBBounds);\n const result = {\n main: { len: width, field: 'x' },\n cross: { len: height, field: 'y' },\n dir: 1\n };\n const main = result.main;\n const cross = result.cross;\n if (flexDirection === 'row-reverse') {\n result.dir = -1;\n } else if (flexDirection === 'column') {\n main.len = height;\n cross.len = width;\n main.field = 'y';\n cross.field = 'x';\n } else if (flexDirection === 'column-reverse') {\n main.len = height;\n cross.len = width;\n main.field = 'y';\n cross.field = 'x';\n result.dir = -1;\n }\n\n // 计算宽度\n let mainLen = 0;\n let crossLen = 0;\n const mianLenArray: { mainLen: number; crossLen: number }[] = [];\n p.forEachChildren((c: IGraphic) => {\n const b = c.AABBBounds;\n const ml = main.field === 'x' ? b.width() : b.height();\n const cl = cross.field === 'x' ? b.width() : b.height();\n mianLenArray.push({ mainLen: ml, crossLen: cl });\n mainLen += ml;\n crossLen = Math.max(crossLen, cl);\n });\n // 解析main\n const mainList: { idx: number; mainLen: number; crossLen: number }[] = [];\n if (mainLen > main.len && flexWrap === 'wrap') {\n let tempMainL = 0;\n let tempCrossL = 0;\n mianLenArray.forEach(({ mainLen, crossLen }, i) => {\n if (tempMainL + mainLen > main.len) {\n if (tempMainL === 0) {\n mainList.push({ idx: i, mainLen: tempMainL + mainLen, crossLen });\n tempMainL = 0;\n tempCrossL = 0;\n } else {\n mainList.push({ idx: i - 1, mainLen: tempMainL, crossLen });\n tempMainL = mainLen;\n tempCrossL = crossLen;\n }\n } else {\n tempMainL += mainLen;\n tempCrossL = Math.max(tempCrossL, crossLen);\n }\n });\n mainList.push({ idx: mianLenArray.length - 1, mainLen: tempMainL, crossLen: tempCrossL });\n } else {\n mainList.push({ idx: mianLenArray.length - 1, mainLen: mainLen, crossLen });\n }\n\n const children = p.getChildren() as IGraphic[];\n\n // 布局main\n let lastIdx: number = 0;\n mainList.forEach(s => {\n this.layoutMain(p, children, justifyContent, main, mianLenArray, lastIdx, s);\n lastIdx = s.idx + 1;\n });\n\n crossLen = mainList.reduce((a, b) => a + b.crossLen, 0);\n\n // 布局cross\n if (mainList.length === 1) {\n if (alignItems === 'flex-end') {\n const anchorPos = cross.len;\n this.layoutCross(children, alignItems, cross, anchorPos, mianLenArray, mainList[0], 0);\n } else if (alignItems === 'center') {\n const anchorPos = cross.len / 2;\n this.layoutCross(children, alignItems, cross, anchorPos, mianLenArray, mainList[0], 0);\n } else {\n children.forEach(child => {\n child.attribute[cross.field] = getPadding(child, cross.field);\n });\n }\n } else {\n if (alignContent === 'flex-start') {\n lastIdx = 0;\n let anchorPos = 0;\n mainList.forEach((s, i) => {\n this.layoutCross(children, 'flex-start', cross, anchorPos, mianLenArray, mainList[i], lastIdx);\n lastIdx = s.idx + 1;\n anchorPos += s.crossLen;\n });\n } else if (alignContent === 'center') {\n lastIdx = 0;\n const padding = Math.max(0, (cross.len - crossLen) / 2);\n let anchorPos = padding;\n mainList.forEach((s, i) => {\n this.layoutCross(children, 'center', cross, anchorPos + s.crossLen / 2, mianLenArray, mainList[i], lastIdx);\n lastIdx = s.idx + 1;\n anchorPos += s.crossLen;\n });\n } else if (alignContent === 'space-around') {\n lastIdx = 0;\n const padding = Math.max(0, (cross.len - crossLen) / mainList.length / 2);\n let anchorPos = padding;\n mainList.forEach((s, i) => {\n this.layoutCross(children, 'flex-start', cross, anchorPos, mianLenArray, mainList[i], lastIdx);\n lastIdx = s.idx + 1;\n anchorPos += s.crossLen + padding * 2;\n });\n } else if (alignContent === 'space-between') {\n lastIdx = 0;\n const padding = Math.max(0, (cross.len - crossLen) / (mainList.length * 2 - 2));\n let anchorPos = 0;\n mainList.forEach((s, i) => {\n this.layoutCross(children, 'flex-start', cross, anchorPos, mianLenArray, mainList[i], lastIdx);\n lastIdx = s.idx + 1;\n anchorPos += s.crossLen + padding * 2;\n });\n }\n }\n\n // update children\n children.forEach((child, idx) => {\n child.addUpdateBoundTag();\n child.addUpdatePositionTag();\n child.clearUpdateLayoutTag();\n });\n\n p.addUpdateLayoutTag();\n // 更新父级元素的layout,直到存在clip\n if (!clip && !this.tempBounds.equals(p.AABBBounds)) {\n // 判断父元素包围盒是否发生变化\n this.tryLayout(p);\n this.layouting = false;\n }\n }\n\n layoutMain(\n p: IGroup,\n children: IGraphic[],\n justifyContent: IGroupAttribute['justifyContent'],\n main: { len: number; field: string },\n mianLenArray: { mainLen: number; crossLen: number }[],\n lastIdx: number,\n currSeg: { idx: number; mainLen: number; crossLen: number }\n ) {\n if (justifyContent === 'flex-start') {\n let pos = 0;\n for (let i = lastIdx; i <= currSeg.idx; i++) {\n children[i].attribute[main.field] = pos + getPadding(children[i], main.field);\n pos += mianLenArray[i].mainLen;\n }\n } else if (justifyContent === 'flex-end') {\n let pos = main.len;\n for (let i = lastIdx; i <= currSeg.idx; i++) {\n pos -= mianLenArray[i].mainLen;\n children[i].attribute[main.field] = pos + getPadding(children[i], main.field);\n }\n } else if (justifyContent === 'space-around') {\n if (currSeg.mainLen >= main.len) {\n let pos = 0;\n for (let i = lastIdx; i <= currSeg.idx; i++) {\n children[i].attribute[main.field] = pos + getPadding(children[i], main.field);\n pos += mianLenArray[i].mainLen;\n }\n } else {\n const size = currSeg.idx - lastIdx + 1;\n const padding = (main.len - currSeg.mainLen) / size / 2;\n let pos = padding;\n for (let i = lastIdx; i <= currSeg.idx; i++) {\n children[i].attribute[main.field] = pos + getPadding(children[i], main.field);\n pos += mianLenArray[i].mainLen + padding * 2;\n }\n }\n } else if (justifyContent === 'space-between') {\n if (currSeg.mainLen >= main.len) {\n let pos = 0;\n for (let i = lastIdx; i <= currSeg.idx; i++) {\n children[i].attribute[main.field] = pos + getPadding(children[i], main.field);\n pos += mianLenArray[i].mainLen;\n }\n } else {\n const size = currSeg.idx - lastIdx + 1;\n const padding = (main.len - currSeg.mainLen) / (size * 2 - 2);\n let pos = 0;\n for (let i = lastIdx; i <= currSeg.idx; i++) {\n children[i].attribute[main.field] = pos + getPadding(children[i], main.field);\n pos += mianLenArray[i].mainLen + padding * 2;\n }\n }\n } else if (justifyContent === 'center') {\n let pos = (main.len - currSeg.mainLen) / 2;\n for (let i = lastIdx; i <= currSeg.idx; i++) {\n children[i].attribute[main.field] = pos + getPadding(children[i], main.field);\n pos += mianLenArray[i].mainLen;\n }\n }\n }\n\n layoutCross(\n children: IGraphic[],\n alignItem: IGroupAttribute['alignItems'],\n cross: { len: number; field: string },\n anchorPos: number,\n lenArray: { mainLen: number; crossLen: number }[],\n currSeg: { idx: number; mainLen: number; crossLen: number },\n lastIdx: number\n ) {\n if (alignItem === 'flex-end') {\n for (let i = lastIdx; i <= currSeg.idx; i++) {\n children[i].attribute[cross.field] = anchorPos - lenArray[i].crossLen + getPadding(children[i], cross.field);\n }\n } else if (alignItem === 'center') {\n for (let i = lastIdx; i <= currSeg.idx; i++) {\n children[i].attribute[cross.field] =\n anchorPos - lenArray[i].crossLen / 2 + getPadding(children[i], cross.field);\n }\n } else {\n for (let i = lastIdx; i <= currSeg.idx; i++) {\n children[i].attribute[cross.field] = anchorPos + getPadding(children[i], cross.field);\n }\n }\n }\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n application.graphicService.hooks.onAttributeUpdate.tap(this.key, graphic => {\n if (graphic.glyphHost) {\n graphic = graphic.glyphHost;\n }\n this.tryLayout(graphic);\n this.layouting = false;\n });\n application.graphicService.hooks.beforeUpdateAABBBounds.tap(\n this.key,\n (graphic: IGraphic, stage: IStage, willUpdate: boolean, bounds: IAABBBounds) => {\n if (graphic.glyphHost) {\n graphic = graphic.glyphHost;\n }\n if (!(stage && stage === this.pluginService.stage)) {\n return;\n }\n if (!graphic.isContainer) {\n return;\n }\n _tempBounds.copy(bounds);\n }\n );\n application.graphicService.hooks.afterUpdateAABBBounds.tap(\n this.key,\n (\n graphic: IGraphic,\n stage: IStage,\n bounds: IAABBBounds,\n params: { globalAABBBounds: IAABBBounds },\n selfChange: boolean\n ) => {\n if (!(stage && stage === this.pluginService.stage)) {\n return;\n }\n if (!graphic.isContainer) {\n return;\n }\n if (!_tempBounds.equals(bounds)) {\n this.tryLayout(graphic);\n this.layouting = false;\n }\n }\n );\n application.graphicService.hooks.onSetStage.tap(this.key, graphic => {\n if (graphic.glyphHost) {\n graphic = graphic.glyphHost;\n }\n this.tryLayout(graphic);\n this.layouting = false;\n });\n }\n deactivate(context: IPluginService): void {\n application.graphicService.hooks.onAttributeUpdate.taps =\n application.graphicService.hooks.onAttributeUpdate.taps.filter(item => {\n return item.name !== this.key;\n });\n application.graphicService.hooks.onSetStage.taps = application.graphicService.hooks.onSetStage.taps.filter(item => {\n return item.name !== this.key;\n });\n }\n}\n\nfunction getPadding(graphic: IGraphic, field: string): number {\n if (!graphic.attribute.boundsPadding) {\n return 0;\n } else if (isNumber(graphic.attribute.boundsPadding)) {\n return graphic.attribute.boundsPadding as number;\n } else if (isArray(graphic.attribute.boundsPadding) && graphic.attribute.boundsPadding.length === 1) {\n return graphic.attribute.boundsPadding[0];\n }\n const paddingArray = parsePadding(graphic.attribute.boundsPadding);\n if (field === 'x') {\n return paddingArray[3];\n } else if (field === 'y') {\n return paddingArray[0];\n }\n return 0;\n}\n","import { Logger } from '@visactor/vutils';\nimport type { ITickHandler, ITickerHandlerStatic, ITimeline, ITicker } from '../../interface';\nimport { application } from '../../application';\nexport class ManualTickHandler implements ITickHandler {\n protected timerId: number;\n protected time: number = 0;\n\n static Avaliable(): boolean {\n return true;\n }\n\n avaliable(): boolean {\n return ManualTickHandler.Avaliable();\n }\n\n tick(interval: number, cb: (handler: ITickHandler, params?: { once: boolean }) => void): void {\n this.time = Math.max(0, interval + this.time);\n cb(this, { once: true });\n }\n\n tickTo(t: number, cb: (handler: ITickHandler, params?: { once: boolean }) => void): void {\n this.time = Math.max(0, t);\n cb(this, { once: true });\n }\n\n release() {\n if (this.timerId > 0) {\n // clearTimeout(this.timerId);\n this.timerId = -1;\n }\n }\n\n getTime() {\n return this.time;\n }\n}\n\nexport class TimeOutTickHandler implements ITickHandler {\n protected timerId: number;\n\n static Avaliable(): boolean {\n return true;\n }\n\n avaliable(): boolean {\n return TimeOutTickHandler.Avaliable();\n }\n\n tick(interval: number, cb: (handler: ITickHandler) => void): void {\n this.timerId = setTimeout(() => {\n cb(this);\n }, interval) as unknown as number;\n }\n\n release() {\n if (this.timerId > 0) {\n clearTimeout(this.timerId);\n this.timerId = -1;\n }\n }\n getTime() {\n return Date.now();\n }\n}\n\nexport class RAFTickHandler implements ITickHandler {\n protected released: boolean;\n\n static Avaliable(): boolean {\n return !!application.global.getRequestAnimationFrame();\n }\n avaliable(): boolean {\n return RAFTickHandler.Avaliable();\n }\n\n tick(interval: number, cb: (handler: ITickHandler) => void): void {\n const raf = application.global.getRequestAnimationFrame();\n raf(() => {\n if (this.released) {\n return;\n }\n cb(this);\n });\n }\n\n release() {\n this.released = true;\n }\n getTime() {\n return Date.now();\n }\n}\n\ntype TickerMode = 'raf' | 'timeout' | 'manual';\n\nenum STATUS {\n INITIAL = 0, // initial表示初始状态\n RUNNING = 1, // running表示正在执行\n PAUSE = 2 // PULSE表示tick还是继续,只是不执行函数了\n}\n\nexport class DefaultTicker implements ITicker {\n protected interval: number;\n protected tickerHandler: ITickHandler;\n protected _mode: TickerMode;\n protected status: STATUS;\n protected lastFrameTime: number;\n protected tickCounts: number;\n protected timelines: ITimeline[];\n autoStop: boolean;\n\n set mode(m: TickerMode) {\n if (this._mode === m) {\n return;\n }\n this._mode = m;\n this.setupTickHandler();\n }\n get mode(): TickerMode {\n return this._mode;\n }\n\n constructor(timelines: ITimeline[] = []) {\n this.init();\n this.lastFrameTime = -1;\n this.tickCounts = 0;\n this.timelines = timelines;\n this.autoStop = true;\n }\n\n init() {\n this.interval = NaN;\n this.status = STATUS.INITIAL;\n application.global.hooks.onSetEnv.tap('default-ticker', () => {\n this.initHandler();\n });\n if (application.global.env) {\n this.initHandler();\n }\n }\n\n addTimeline(timeline: ITimeline) {\n this.timelines.push(timeline);\n }\n remTimeline(timeline: ITimeline) {\n this.timelines = this.timelines.filter(t => t !== timeline);\n }\n\n protected initHandler(): ITickHandler | null {\n if (this._mode) {\n return null;\n }\n const ticks: { mode: TickerMode; cons: ITickerHandlerStatic }[] = [\n { mode: 'raf', cons: RAFTickHandler },\n { mode: 'timeout', cons: TimeOutTickHandler },\n { mode: 'manual', cons: ManualTickHandler }\n ];\n for (let i = 0; i < ticks.length; i++) {\n if (ticks[i].cons.Avaliable()) {\n this.mode = ticks[i].mode;\n break;\n }\n }\n return null;\n }\n\n /**\n * 设置tickHandler\n * @returns 返回true表示设置成功,false表示设置失败\n */\n protected setupTickHandler(): boolean {\n let handler: ITickHandler;\n // 创建下一个tickHandler\n switch (this._mode) {\n case 'raf':\n handler = new RAFTickHandler();\n break;\n case 'timeout':\n handler = new TimeOutTickHandler();\n break;\n case 'manual':\n handler = new ManualTickHandler();\n break;\n default:\n Logger.getInstance().warn('非法的计时器模式');\n handler = new RAFTickHandler();\n break;\n }\n if (!handler.avaliable()) {\n return false;\n }\n\n // 销毁上一个tickerHandler\n if (this.tickerHandler) {\n this.tickerHandler.release();\n }\n this.tickerHandler = handler;\n return true;\n }\n\n setInterval(interval: number) {\n this.interval = interval;\n }\n getInterval(): number {\n return this.interval;\n }\n\n setFPS(fps: number): void {\n this.setInterval(1000 / fps);\n }\n getFPS(): number {\n return 1000 / this.interval;\n }\n tick(interval: number): void {\n this.tickerHandler.tick(interval, (handler: ITickHandler) => {\n this.handleTick(handler, { once: true });\n });\n }\n tickTo(t: number): void {\n if (!this.tickerHandler.tickTo) {\n return;\n }\n this.tickerHandler.tickTo(t, (handler: ITickHandler) => {\n this.handleTick(handler, { once: true });\n });\n }\n pause(): boolean {\n if (this.status === STATUS.INITIAL) {\n return false;\n }\n this.status = STATUS.PAUSE;\n return true;\n }\n resume(): boolean {\n if (this.status === STATUS.INITIAL) {\n return false;\n }\n this.status = STATUS.RUNNING;\n return true;\n }\n\n ifCanStop(): boolean {\n if (this.autoStop) {\n if (!this.timelines.length) {\n return true;\n }\n if (this.timelines.reduce((a, b) => a + b.animateCount, 0) === 0) {\n return true;\n }\n }\n return false;\n }\n\n start(force: boolean = false): boolean {\n if (this.status === STATUS.RUNNING) {\n return false;\n }\n if (!this.tickerHandler) {\n return false;\n }\n // 如果不需要start,那就不start\n if (!force) {\n // 暂停状态不执行\n if (this.status === STATUS.PAUSE) {\n return false;\n }\n if (!this.timelines.length) {\n return false;\n }\n if (this.timelines.reduce((a, b) => a + b.animateCount, 0) === 0) {\n return false;\n }\n }\n this.status = STATUS.RUNNING;\n this.tickerHandler.tick(0, this.handleTick);\n return true;\n }\n stop(): void {\n // 重新设置tickHandler\n this.status = STATUS.INITIAL;\n this.setupTickHandler();\n this.lastFrameTime = -1;\n }\n\n protected handleTick = (handler: ITickHandler, params?: { once?: boolean }) => {\n const { once = false } = params ?? {};\n // 尝试停止\n if (this.ifCanStop()) {\n this.stop();\n return;\n }\n this._handlerTick(handler);\n if (!once) {\n handler.tick(this.interval, this.handleTick);\n }\n };\n\n protected _handlerTick = (handler: ITickHandler) => {\n // 具体执行函数\n const tickerHandler = this.tickerHandler;\n const time = tickerHandler.getTime();\n // 上一帧经过的时间\n let delta = 0;\n if (this.lastFrameTime >= 0) {\n delta = time - this.lastFrameTime;\n }\n this.lastFrameTime = time;\n\n if (this.status !== STATUS.RUNNING) {\n return;\n }\n this.tickCounts++;\n\n this.timelines.forEach(t => {\n t.tick(delta);\n });\n };\n}\n\nexport class ManualTicker extends DefaultTicker implements ITicker {\n protected declare interval: number;\n protected declare tickerHandler: ITickHandler;\n protected declare _mode: TickerMode;\n protected declare status: STATUS;\n protected declare lastFrameTime: number;\n protected declare tickCounts: number;\n protected declare timelines: ITimeline[];\n declare autoStop: boolean;\n\n set mode(m: TickerMode) {\n m = 'manual';\n this.setupTickHandler();\n }\n get mode(): TickerMode {\n return this._mode;\n }\n\n protected initHandler(): ITickHandler | null {\n this.mode = 'manual';\n return null;\n }\n\n /**\n * 设置tickHandler\n * @returns 返回true表示设置成功,false表示设置失败\n */\n protected setupTickHandler(): boolean {\n const handler: ITickHandler = new ManualTickHandler();\n this._mode = 'manual';\n\n // 销毁上一个tickerHandler\n if (this.tickerHandler) {\n this.tickerHandler.release();\n }\n this.tickerHandler = handler;\n return true;\n }\n\n tickAt(time: number) {\n this.tickerHandler.tick(time - this.lastFrameTime, (handler: ITickHandler) => {\n this.handleTick(handler, { once: true });\n });\n }\n\n ifCanStop(): boolean {\n return false;\n }\n}\n","import { DefaultTicker } from './Ticker/default-ticker';\nimport { defaultTimeline } from './timeline';\n\nexport const defaultTicker = new DefaultTicker();\ndefaultTicker.addTimeline(defaultTimeline);\nconst TICKER_FPS = 60;\ndefaultTicker.setFPS(TICKER_FPS);\n","import type { vec4 } from '@visactor/vutils';\nimport { isString, max, min, sqrt } from '@visactor/vutils';\nimport type { vec3 } from '../interface';\nimport { ColorStore, ColorType } from '../color-string';\n\nexport class DirectionalLight {\n declare dir: vec3;\n declare color: string;\n declare colorRgb: vec4;\n declare formatedDir: vec3;\n declare ambient: number;\n\n constructor(dir: vec3, color: string, ambient: number = 0.8) {\n this.dir = dir;\n this.color = color;\n this.colorRgb = ColorStore.Get(color, ColorType.Color1);\n this.ambient = ambient;\n const length = sqrt(dir[0] * dir[0] + dir[1] * dir[1] + dir[2] * dir[2]);\n this.formatedDir = [dir[0] / length, dir[1] / length, dir[2] / length];\n }\n\n computeColor(normal: vec3, color: string | vec3): string {\n const lightDir = this.formatedDir;\n const brightness = min(\n max((normal[0] * lightDir[0] + normal[1] * lightDir[1] + normal[2] * lightDir[2]) * (1 - this.ambient / 2), 0) +\n this.ambient,\n 1\n );\n\n let colorArray: vec3;\n if (isString(color)) {\n colorArray = ColorStore.Get(color, ColorType.Color1) as any;\n } else {\n colorArray = color;\n }\n\n const lightColorArray = this.colorRgb;\n\n return `rgb(${lightColorArray[0] * colorArray[0] * brightness}, ${\n lightColorArray[1] * colorArray[1] * brightness\n }, ${lightColorArray[2] * colorArray[2] * brightness})`;\n }\n}\n","// import { abs, cos, epsilon, sin } from '@visactor/vutils';\n// import { IMatrix } from '../interface/matrix';\n// import { IBounds, IPoint } from '../interface/util';\n\nimport type { mat4, vec3 } from '@visactor/vutils';\nimport { epsilon } from '@visactor/vutils';\nimport { DefaultMat4Allocate } from '../allocator/matrix-allocate';\n\n// export type vec2 = [number, number] | Float32Array;\n// export type vec3 = [number, number, number] | Float32Array;\n// export type vec4 = [number, number, number, number] | Float32Array;\n// export type mat4 =\n// | [\n// number,\n// number,\n// number,\n// number,\n// number,\n// number,\n// number,\n// number,\n// number,\n// number,\n// number,\n// number,\n// number,\n// number,\n// number,\n// number\n// ]\n// | Float32Array;\n\n// export class Matrix implements IMatrix {\n// /**\n// * scale x\n// */\n// a: number;\n// /**\n// * skew y\n// */\n// b: number;\n// /**\n// * skewx\n// */\n// c: number;\n// /**\n// * scale y\n// */\n// d: number;\n// /**\n// * translate x\n// */\n// e: number;\n// /**\n// * translate y\n// */\n// f: number;\n\n// // todo setScale需要sx,sy初始值为1\n// constructor(a?: number, b?: number, c?: number, d?: number, e?: number, f?: number) {\n// // 暂时不需要初始化\n// this.a = a ?? 1;\n// this.b = b ?? 0;\n// this.c = c ?? 0;\n// this.d = d ?? 1;\n// this.e = e ?? 0;\n// this.f = f ?? 0;\n// }\n\n// setValue(a: number, b: number, c: number, d: number, e: number, f: number) {\n// this.a = a;\n// this.b = b;\n// this.c = c;\n// this.d = d;\n// this.e = e;\n// this.f = f;\n// return this;\n// }\n\n// reset(): this {\n// this.a = 1;\n// this.b = 0;\n// this.c = 0;\n// this.d = 1;\n// this.e = 0;\n// this.f = 0;\n// return this;\n// }\n\n// /**\n// * 获取当前矩阵的逆矩阵\n// */\n// getInverse() {\n// const a = this.a;\n// const b = this.b;\n// const c = this.c;\n// const d = this.d;\n// const e = this.e;\n// const f = this.f;\n// const m = new Matrix();\n// const dt = a * d - b * c;\n\n// m.a = d / dt;\n// m.b = -b / dt;\n// m.c = -c / dt;\n// m.d = a / dt;\n// m.e = (c * f - d * e) / dt;\n// m.f = -(a * f - b * e) / dt;\n\n// return m;\n// }\n\n// rotate(rad: number) {\n// const c = Math.cos(rad);\n// const s = Math.sin(rad);\n// const m11 = this.a * c + this.c * s;\n// const m12 = this.b * c + this.d * s;\n// const m21 = this.a * -s + this.c * c;\n// const m22 = this.b * -s + this.d * c;\n// this.a = m11;\n// this.b = m12;\n// this.c = m21;\n// this.d = m22;\n// return this;\n// }\n\n// scale(sx: number, sy: number) {\n// this.a *= sx;\n// this.b *= sx;\n// this.c *= sy;\n// this.d *= sy;\n// return this;\n// }\n\n// setScale(sx: number, sy: number) {\n// this.b = (this.b / this.a) * sx;\n// this.c = (this.c / this.d) * sy;\n// this.a = sx;\n// this.d = sy;\n// return this;\n// }\n\n// transform(a: number, b: number, c: number, d: number, e: number, f: number) {\n// this.multiply(a, b, c, d, e, f);\n// return this;\n// }\n// translate(x: number, y: number) {\n// this.e += this.a * x + this.c * y;\n// this.f += this.b * x + this.d * y;\n// return this;\n// }\n// /**\n// * 矩阵相乘\n// * @param matrix\n// */\n// multiply(a2: number, b2: number, c2: number, d2: number, e2: number, f2: number) {\n// const a1 = this.a;\n// const b1 = this.b;\n// const c1 = this.c;\n// const d1 = this.d;\n// const e1 = this.e;\n// const f1 = this.f;\n\n// const m11 = a1 * a2 + c1 * b2;\n// const m12 = b1 * a2 + d1 * b2;\n// const m21 = a1 * c2 + c1 * d2;\n// const m22 = b1 * c2 + d1 * d2;\n// const dx = a1 * e2 + c1 * f2 + e1;\n// const dy = b1 * e2 + d1 * f2 + f1;\n\n// this.a = m11;\n// this.b = m12;\n// this.c = m21;\n// this.d = m22;\n// this.e = dx;\n// this.f = dy;\n// return this;\n// }\n// /**\n// * 插值计算\n// * @param m2\n// * @param t\n// */\n// interpolate(m2: Matrix, t: number) {\n// const m = new Matrix();\n\n// m.a = this.a + (m2.a - this.a) * t;\n// m.b = this.b + (m2.b - this.b) * t;\n// m.c = this.c + (m2.c - this.c) * t;\n// m.d = this.d + (m2.d - this.d) * t;\n// m.e = this.e + (m2.e - this.e) * t;\n// m.f = this.f + (m2.f - this.f) * t;\n\n// return m;\n// }\n\n// /**\n// * 将point转到当前矩阵的坐标空间中\n// * @param source\n// * @param target\n// */\n// transformPoint(source: IPoint, target: IPoint) {\n// const { a, b, c, d, e, f } = this;\n// const dt = a * d - b * c;\n\n// const nextA = d / dt;\n// const nextB = -b / dt;\n// const nextC = -c / dt;\n// const nextD = a / dt;\n// const nextE = (c * f - d * e) / dt;\n// const nextF = -(a * f - b * e) / dt;\n\n// const { x, y } = source;\n// target.x = x * nextA + y * nextC + nextE;\n// target.y = x * nextB + y * nextD + nextF;\n// }\n\n// // 只有translate\n// onlyTranslate(): boolean {\n// return this.a === 1 && this.b === 0 && this.c === 0 && this.d === 1;\n// }\n\n// clone(): Matrix {\n// return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n// }\n// }\n\n// /**\n// * 依据graphic的属性对bounds进行变换\n// * @param bounds\n// * @param x\n// * @param y\n// * @param scaleX\n// * @param scaleY\n// * @param angle\n// * @param rotateCenter\n// */\n// export function transformBounds(\n// bounds: IBounds,\n// x: number,\n// y: number,\n// scaleX: number,\n// scaleY: number,\n// angle: number,\n// rotateCenter?: [number, number]\n// ) {\n// if (abs(scaleX) <= epsilon || abs(scaleY) <= epsilon) {\n// return;\n// }\n\n// scaleX !== 1 && bounds.scaleX(scaleX);\n// scaleY !== 1 && bounds.scaleY(scaleY);\n\n// if (isFinite(angle) && Math.abs(angle) > epsilon) {\n// let rx = 0;\n// let ry = 0;\n// if (rotateCenter !== undefined) {\n// rx = rotateCenter[0];\n// ry = rotateCenter[1];\n// }\n// bounds.rotate(angle, rx, ry);\n// }\n\n// bounds.translate(x, y);\n// }\n// export function transformBoundsWithMatrix(bounds: IBounds, matrix: IMatrix): IBounds {\n// const { x1, y1, x2, y2 } = bounds;\n// // 如果没有旋转和缩放,那就直接translate\n// if (matrix.onlyTranslate()) {\n// bounds.translate(matrix.e, matrix.f);\n// return bounds;\n// }\n// bounds.x1 = matrix.a * x1 + matrix.c * y1 + matrix.e;\n// bounds.y1 = matrix.b * x1 + matrix.d * y1 + matrix.f;\n// bounds.x2 = matrix.a * x2 + matrix.c * y2 + matrix.e;\n// bounds.y2 = matrix.b * x2 + matrix.d * y2 + matrix.f;\n// bounds.clear();\n// bounds.add(x1, y1);\n// bounds.add(x2, y2);\n// return bounds;\n// }\n\n// export function normalTransform(\n// out: Matrix,\n// origin: Matrix,\n// x: number,\n// y: number,\n// scaleX: number,\n// scaleY: number,\n// angle: number,\n// rotateCenter?: vec2\n// ) {\n// const oa = origin.a;\n// const ob = origin.b;\n// const oc = origin.c;\n// const od = origin.d;\n// const oe = origin.e;\n// const of = origin.f;\n// const cosTheta = cos(angle);\n// const sinTheta = sin(angle);\n// let rotateCenterX: number;\n// let rotateCenterY: number;\n// if (rotateCenter) {\n// rotateCenterX = rotateCenter[0];\n// rotateCenterY = rotateCenter[1];\n// } else {\n// rotateCenterX = x;\n// rotateCenterY = y;\n// }\n// const offsetX = rotateCenterX - x;\n// const offsetY = rotateCenterY - y;\n\n// const a1 = oa * cosTheta + oc * sinTheta;\n// const b1 = ob * cosTheta + od * sinTheta;\n// const c1 = oc * cosTheta - oa * sinTheta;\n// const d1 = od * cosTheta - ob * sinTheta;\n// out.a = scaleX * a1;\n// out.b = scaleX * b1;\n// out.c = scaleY * c1;\n// out.d = scaleY * d1;\n\n// out.e = oe + oa * rotateCenterX + oc * rotateCenterY - a1 * offsetX - c1 * offsetY;\n// out.f = of + ob * rotateCenterX + od * rotateCenterY - b1 * offsetX - d1 * offsetY;\n// }\n// 代码来自gl-matrix https://github.com/toji/gl-matrix\nexport function lookAt(out: mat4, eye: vec3, center: vec3, up: vec3) {\n let x0;\n let x1;\n let x2;\n let y0;\n let y1;\n let y2;\n let z0;\n let z1;\n let z2;\n let len;\n const eyex = eye[0];\n const eyey = eye[1];\n const eyez = eye[2];\n const upx = up[0];\n const upy = up[1];\n const upz = up[2];\n const centerx = center[0];\n const centery = center[1];\n const centerz = center[2];\n\n if (Math.abs(eyex - centerx) < epsilon && Math.abs(eyey - centery) < epsilon && Math.abs(eyez - centerz) < epsilon) {\n return DefaultMat4Allocate.identity(out);\n }\n\n z0 = eyex - centerx;\n z1 = eyey - centery;\n z2 = eyez - centerz;\n len = 1 / Math.hypot(z0, z1, z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n x0 = upy * z2 - upz * z1;\n x1 = upz * z0 - upx * z2;\n x2 = upx * z1 - upy * z0;\n len = Math.hypot(x0, x1, x2);\n\n if (!len) {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n } else {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n y0 = z1 * x2 - z2 * x1;\n y1 = z2 * x0 - z0 * x2;\n y2 = z0 * x1 - z1 * x0;\n len = Math.hypot(y0, y1, y2);\n\n if (!len) {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n } else {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n\n out[0] = x0;\n out[1] = y0;\n out[2] = z0;\n out[3] = 0;\n out[4] = x1;\n out[5] = y1;\n out[6] = z1;\n out[7] = 0;\n out[8] = x2;\n out[9] = y2;\n out[10] = z2;\n out[11] = 0;\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n out[15] = 1;\n return out;\n}\n\n/**\n * 代码来自gl-matrix https://github.com/toji/gl-matrix\n * Generates a orthogonal projection matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function ortho(out: mat4, left: number, right: number, bottom: number, top: number, near: number, far: number) {\n const lr = 1 / (left - right);\n const bt = 1 / (bottom - top);\n const nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n}\n\n/**\n * 代码来自gl-matrix https://github.com/toji/gl-matrix\n * Multiplies two mat4s\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nexport function multiply(out: mat4, a: mat4, b: mat4) {\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n const a30 = a[12];\n const a31 = a[13];\n const a32 = a[14];\n const a33 = a[15]; // Cache only the current line of the second matrix\n\n let b0 = b[0];\n let b1 = b[1];\n let b2 = b[2];\n let b3 = b[3];\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[4];\n b1 = b[5];\n b2 = b[6];\n b3 = b[7];\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[8];\n b1 = b[9];\n b2 = b[10];\n b3 = b[11];\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[12];\n b1 = b[13];\n b2 = b[14];\n b3 = b[15];\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n return out;\n}\n\n/**\n * 代码来自gl-matrix https://github.com/toji/gl-matrix\n * Transforms the vec3 with a mat4.\n * 4th vector component is implicitly '1'\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec3} out\n */\n\nexport function transformMat4(out: vec3, a: vec3, m: mat4) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n let w = m[3] * x + m[7] * y + m[11] * z + m[15];\n w = w || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return out;\n}\n","import type { IPointLike } from '@visactor/vutils';\nimport { epsilon, IPoint } from '@visactor/vutils';\nimport { DefaultMat4Allocate } from '../allocator/matrix-allocate';\nimport type { ICamera, mat4, OrthoParameters, vec3 } from '../interface';\nimport { mat4Allocate } from '../allocator/matrix-allocate';\nimport { lookAt, multiply, ortho, transformMat4 } from '../common/matrix';\n\n/**\n * 部分代码参考 https://github.com/toji/gl-matrix\n * Copyright (c) 2015-2021, Brandon Jones, Colin MacKenzie IV.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\n// /**\n// * 代码来自gl-matrix https://github.com/toji/gl-matrix\n// * Generates a matrix that makes something look at something else.\n// *\n// * @param {mat4} out mat4 frustum matrix will be written into\n// * @param {ReadonlyVec3} eye Position of the viewer\n// * @param {ReadonlyVec3} center Point the viewer is looking at\n// * @param {ReadonlyVec3} up vec3 pointing up\n// * @returns {mat4} out\n// */\n\n// function targetTo(out: mat4, eye: vec3, target: vec3, up: vec3) {\n// const eyex = eye[0];\n// const eyey = eye[1];\n// const eyez = eye[2];\n// const upx = up[0];\n// const upy = up[1];\n// const upz = up[2];\n// let z0 = eyex - target[0];\n// let z1 = eyey - target[1];\n// let z2 = eyez - target[2];\n// let len = z0 * z0 + z1 * z1 + z2 * z2;\n\n// if (len > 0) {\n// len = 1 / Math.sqrt(len);\n// z0 *= len;\n// z1 *= len;\n// z2 *= len;\n// }\n\n// let x0 = upy * z2 - upz * z1;\n// let x1 = upz * z0 - upx * z2;\n// let x2 = upx * z1 - upy * z0;\n// len = x0 * x0 + x1 * x1 + x2 * x2;\n\n// if (len > 0) {\n// len = 1 / Math.sqrt(len);\n// x0 *= len;\n// x1 *= len;\n// x2 *= len;\n// }\n\n// out[0] = x0;\n// out[1] = x1;\n// out[2] = x2;\n// out[3] = 0;\n// out[4] = z1 * x2 - z2 * x1;\n// out[5] = z2 * x0 - z0 * x2;\n// out[6] = z0 * x1 - z1 * x0;\n// out[7] = 0;\n// out[8] = z0;\n// out[9] = z1;\n// out[10] = z2;\n// out[11] = 0;\n// out[12] = eyex;\n// out[13] = eyey;\n// out[14] = eyez;\n// out[15] = 1;\n// return out;\n// }\n\n/**\n * 正交投影摄像机\n */\nexport class OrthoCamera implements ICamera {\n private _params: OrthoParameters;\n\n /* cache */\n private _projectionMatrixCached: mat4;\n private _viewMatrixCached: mat4;\n private _vp: mat4;\n\n set params(params: OrthoParameters) {\n this._params = { ...params };\n this._projectionMatrixCached = this.forceGetProjectionMatrix();\n this._viewMatrixCached = this.forceGetViewMatrix();\n }\n get params(): OrthoParameters {\n return { ...this._params };\n }\n\n constructor(params: OrthoParameters) {\n this.params = params;\n }\n\n /**\n * 获取视图矩阵\n */\n getViewMatrix(): mat4 {\n if (!this._viewMatrixCached) {\n this._viewMatrixCached = mat4Allocate.allocate();\n }\n return this._viewMatrixCached;\n }\n forceGetViewMatrix(): mat4 {\n if (!this._viewMatrixCached) {\n this._viewMatrixCached = mat4Allocate.allocate();\n }\n const { pos, center, up } = this.params.viewParams;\n lookAt(this._viewMatrixCached, pos, center, up);\n\n if (!this._vp) {\n this._vp = mat4Allocate.allocate();\n }\n this._vp = multiply(this._vp, this.getProjectionMatrix(), this.getViewMatrix());\n return this._viewMatrixCached;\n }\n\n /**\n * 获取projection矩阵\n */\n getProjectionMatrix(): mat4 {\n if (!this._projectionMatrixCached) {\n this._projectionMatrixCached = mat4Allocate.allocate();\n }\n return this._projectionMatrixCached;\n }\n forceGetProjectionMatrix(): mat4 {\n if (!this._projectionMatrixCached) {\n this._projectionMatrixCached = mat4Allocate.allocate();\n }\n const { left, top, right, bottom } = this._params;\n // 从0到2000000的Z轴范围,小于0的会被裁剪\n ortho(this._projectionMatrixCached, left, right, bottom, top, 0.0, -2000000.0);\n\n if (!this._vp) {\n this._vp = mat4Allocate.allocate();\n }\n this._vp = multiply(this._vp, this.getProjectionMatrix(), this.getViewMatrix());\n return this._projectionMatrixCached;\n }\n\n getField() {\n const { fieldRatio = 0.8, fieldDepth, left, right } = this._params;\n return (fieldDepth ?? right - left) * fieldRatio;\n }\n\n getProjectionScale(z: number): number {\n const field = this.getField();\n return field / (field + z);\n }\n\n view(x: number, y: number, z: number): [number, number, number] {\n const outP: vec3 = [0, 0, 0];\n transformMat4(outP, [x, y, z], this._viewMatrixCached);\n return outP;\n }\n\n // 部分参考:https://www.mamboleoo.be/articles/how-to-render-3d-in-2d-canvas\n vp(x: number, y: number, z: number): IPointLike {\n const outP: vec3 = [0, 0, 0];\n const { pos } = this._params.viewParams;\n transformMat4(outP, [x, y, z], this._viewMatrixCached);\n x = outP[0];\n y = outP[1];\n z = outP[2];\n\n const sizeProjection = this.getProjectionScale(z);\n const xProject = x * sizeProjection + pos[0];\n const yProject = y * sizeProjection + pos[1];\n return {\n x: xProject,\n y: yProject\n };\n }\n}\n","import type { IAABBBounds, IBounds, IBoundsLike, IMatrix } from '@visactor/vutils';\nimport { AABBBounds, Bounds, Point, isString } from '@visactor/vutils';\nimport type {\n IGraphic,\n IExportType,\n IStage,\n IStageParams,\n ILayer,\n IColor,\n IGlobal,\n IOption3D,\n ICamera,\n vec3,\n IDirectionLight,\n ITicker,\n IRenderService,\n IPickerService,\n IPluginService,\n ISyncHook,\n IDrawContext,\n IWindow,\n ILayerService,\n ITimeline,\n IOptimizeType,\n LayerMode,\n PickResult\n} from '../interface';\nimport { VWindow } from './window';\nimport type { Layer } from './layer';\nimport { EventSystem } from '../event';\nimport { container } from '../container';\nimport { RenderService } from '../render';\nimport { Group, Theme } from '../graphic';\nimport { PickerService } from '../picker/constants';\nimport { PluginService } from '../plugins/constants';\nimport { AutoRenderPlugin } from '../plugins/builtin-plugin/auto-render-plugin';\nimport { ViewTransform3dPlugin } from '../plugins/builtin-plugin/3dview-transform-plugin';\nimport { IncrementalAutoRenderPlugin } from '../plugins/builtin-plugin/incremental-auto-render-plugin';\nimport { HtmlAttributePlugin } from '../plugins/builtin-plugin/html-attribute-plugin';\nimport { DirtyBoundsPlugin } from '../plugins/builtin-plugin/dirty-bounds-plugin';\nimport { FlexLayoutPlugin } from '../plugins/builtin-plugin/flex-layout-plugin';\nimport { defaultTicker } from '../animate/default-ticker';\nimport { SyncHook } from '../tapable';\nimport { DirectionalLight } from './light';\nimport { OrthoCamera } from './camera';\nimport { LayerService } from './constants';\nimport { DefaultTimeline } from '../animate';\nimport { application } from '../application';\nimport { isBrowserEnv } from '../env-check';\n\nconst DefaultConfig = {\n WIDTH: 500,\n HEIGHT: 500,\n X: 0,\n Y: 0,\n BACKGROUND: 'white'\n};\n\ntype IStageState = 'rendering' | 'normal';\n\n/**\n * Stage是一个舞台或一个视口,并不直接对应一个或多个Canvas,逻辑上和Canvas无关\n *\n * 1. Stage对应一个Canvas的整体,Stage的宽高即为Canvas的宽高\n * 2. Stage小于Canvas,Stage作为Canvas某个区域的视口,只管理这个区域\n * 3. 多图层时Stage的多个图层对应多个Canvas\n *\n * 原生环境下Stage可以拥有一个Window或者使用Window的一块区域\n *\n * 【注】如果希望获取完整的Canvas或窗口或者调整窗口信息,请使用Window模块\n */\nexport class Stage extends Group implements IStage {\n declare parent: IStage | null;\n\n declare state: IStageState;\n\n protected _viewBox: AABBBounds;\n private _background: string | IColor;\n private _subView: boolean; // 是否是存在子视图\n protected nextFrameRenderLayerSet: Set;\n protected willNextFrameRender: boolean;\n protected _cursor: string;\n renderCount: number;\n dirtyBounds: IBounds | null;\n option3d?: IOption3D;\n declare light?: IDirectionLight;\n declare camera?: ICamera;\n declare renderStyle?: string;\n\n declare hooks: {\n beforeRender: ISyncHook<[IStage]>;\n afterRender: ISyncHook<[IStage]>;\n };\n\n set viewBox(b: IBoundsLike) {\n this._viewBox.setValue(b.x1, b.y1, b.x2, b.y2);\n }\n get viewBox(): AABBBounds {\n return this._viewBox;\n }\n\n get x(): number {\n return this._viewBox.x1;\n }\n set x(x: number) {\n this._viewBox.translate(x - this._viewBox.x1, 0);\n }\n get y(): number {\n return this._viewBox.y1;\n }\n set y(y: number) {\n this._viewBox.translate(0, y - this._viewBox.y1);\n }\n get width(): number {\n return this.window.width;\n }\n set width(w: number) {\n this.resize(w, this.height);\n }\n get viewWidth(): number {\n return this._viewBox.width();\n }\n set viewWidth(w: number) {\n this.resizeView(w, this.viewHeight);\n }\n get viewHeight(): number {\n return this._viewBox.height();\n }\n set viewHeight(h: number) {\n this.resizeView(this.viewWidth, h);\n }\n get height(): number {\n return this.window.height;\n }\n set height(h: number) {\n this.resize(this.width, h);\n }\n get dpr(): number {\n return this.window.dpr;\n }\n set dpr(r: number) {\n this.setDpr(r);\n }\n get background(): string | IColor {\n return this._background ?? DefaultConfig.BACKGROUND;\n }\n set background(b: string | IColor) {\n this._background = b;\n }\n get defaultLayer(): ILayer {\n return this.at(0) as unknown as ILayer;\n }\n\n ticker: ITicker;\n\n autoRender: boolean;\n _enableLayout: boolean;\n htmlAttribute: boolean | string | any;\n increaseAutoRender: boolean;\n view3dTranform: boolean;\n readonly window: IWindow;\n private readonly global: IGlobal;\n readonly renderService: IRenderService;\n pickerService?: IPickerService;\n readonly pluginService: IPluginService;\n readonly layerService: ILayerService;\n private _eventSystem?: EventSystem;\n private get eventSystem(): EventSystem {\n return this._eventSystem;\n }\n\n protected _beforeRender?: (stage: IStage) => void;\n protected _afterRender?: (stage: IStage) => void;\n // 0: 正常渲染, > 0: 跳过隐藏canvas的渲染, < 0: 禁止渲染\n protected _skipRender?: number;\n protected _afterNextRenderCbs?: ((stage: IStage) => void)[];\n protected lastRenderparams?: Partial;\n\n protected interactiveLayer?: ILayer;\n protected supportInteractiveLayer: boolean;\n protected timeline: ITimeline;\n\n declare params: Partial;\n\n /**\n * 所有属性都具有默认值。\n * Canvas为字符串或者Canvas元素,那么默认图层就会绑定到这个Canvas上\n * 如果不传入Canvas,那么会新建一个Canvas,用户可以通过Window模块管理这个Canvas\n * 1. 如果没有传入宽高,那么默认为canvas宽高,如果传入了宽高则stage使用传入宽高作为视口宽高\n * @param params\n */\n constructor(params: Partial = {}) {\n super({});\n this.params = params;\n this.theme = new Theme();\n this.hooks = {\n beforeRender: new SyncHook(['stage']),\n afterRender: new SyncHook(['stage'])\n };\n this.global = application.global;\n if (!this.global.env && isBrowserEnv()) {\n // 如果是浏览器环境,默认设置env\n this.global.setEnv('browser');\n }\n this.window = container.get(VWindow);\n this.renderService = container.get(RenderService);\n this.pluginService = container.get(PluginService);\n this.layerService = container.get(LayerService);\n this.pluginService.active(this, params);\n\n this.window.create({\n width: params.width,\n height: params.height,\n container: params.container,\n dpr: params.dpr || this.global.devicePixelRatio,\n canvasControled: params.canvasControled !== false,\n title: params.title || '',\n canvas: params.canvas\n });\n\n this._viewBox = new AABBBounds();\n if (params.viewBox) {\n this._viewBox.setValue(params.viewBox.x1, params.viewBox.y1, params.viewBox.x2, params.viewBox.y2);\n } else {\n this._viewBox.setValue(0, 0, this.width, this.height);\n }\n\n this.state = 'normal';\n this.renderCount = 0;\n this.tryInitEventSystem();\n // // 没有传入xy就默认为0\n // this._x = params.x ?? DefaultConfig.X;\n // this._y = params.y ?? DefaultConfig.Y;\n // // 没有传入view的宽高则默认为window的宽高\n // this._viewWidth = params.viewWidth ?? this.window.width;\n // this._viewHeight = params.viewHeight ?? this.window.height;\n this._subView = !(this._viewBox.width() === this.width && this._viewBox.height() === this.height);\n // this._AABBBounds.set(this._x, this._y, this._viewWidth + this._x, this._viewHeight + this._y);\n // 背景色默认为纯白色\n this._background = params.background ?? DefaultConfig.BACKGROUND;\n\n // 创建一个默认layer图层\n // this.appendChild(new Layer(this, this.global, this.window, { main: true }));\n this.appendChild(this.layerService.createLayer(this, { main: true }));\n\n this.nextFrameRenderLayerSet = new Set();\n this.willNextFrameRender = false;\n this.stage = this;\n this.renderStyle = params.renderStyle;\n\n // this.autoRender = params.autoRender;\n if (params.autoRender) {\n this.enableAutoRender();\n }\n // 默认不开启dirtyBounds\n if (params.disableDirtyBounds === false) {\n this.enableDirtyBounds();\n }\n\n if (params.enableHtmlAttribute) {\n this.enableHtmlAttribute(params.enableHtmlAttribute);\n }\n\n params.enableLayout && this.enableLayout();\n this.hooks.beforeRender.tap('constructor', this.beforeRender);\n this.hooks.afterRender.tap('constructor', this.afterRender);\n this._beforeRender = params.beforeRender;\n this._afterRender = params.afterRender;\n this.ticker = params.ticker || defaultTicker;\n this.supportInteractiveLayer = params.interactiveLayer !== false;\n this.timeline = new DefaultTimeline();\n this.ticker.addTimeline(this.timeline);\n this.timeline.pause();\n if (!params.optimize) {\n params.optimize = {};\n }\n this.optmize(params.optimize);\n // 如果背景是图片,触发加载图片操作\n if (params.background && isString(this._background) && this._background.includes('/')) {\n this.setAttributes({ background: this._background });\n }\n }\n\n protected tryInitEventSystem() {\n if (this.global.supportEvent && !this._eventSystem) {\n this._eventSystem = new EventSystem({\n targetElement: this.window,\n resolution: this.window.dpr || this.global.devicePixelRatio,\n rootNode: this as any,\n global: this.global,\n supportsPointerEvents: this.params.supportsPointerEvents,\n supportsTouchEvents: this.params.supportsTouchEvents,\n viewport: {\n viewBox: this._viewBox,\n get x(): number {\n return this.viewBox.x1;\n },\n get y(): number {\n return this.viewBox.y1;\n },\n get width(): number {\n return this.viewBox.width();\n },\n get height(): number {\n return this.viewBox.height();\n }\n },\n ...this.params.event\n });\n }\n }\n\n preventRender(prevent: boolean) {\n if (prevent) {\n this._skipRender = -Infinity;\n } else {\n // 判断是否需要outRange优化\n if (this.params.optimize.skipRenderWithOutRange !== false) {\n this._skipRender = this.window.isVisible() ? 0 : 1;\n } else {\n this._skipRender = 0;\n }\n }\n }\n\n // 优化策略\n optmize(params: IOptimizeType) {\n this.optmizeRender(params.skipRenderWithOutRange);\n this.params.optimize = params;\n }\n\n // 优化渲染\n protected optmizeRender(skipRenderWithOutRange: boolean = false) {\n if (!skipRenderWithOutRange) {\n return;\n }\n // 不在视口内的时候,跳过渲染\n this._skipRender = this._skipRender < 0 ? this._skipRender : this.window.isVisible() ? 0 : 1;\n this.window.onVisibleChange(this._onVisibleChange);\n }\n\n protected _onVisibleChange = (visible: boolean) => {\n if (this._skipRender < 0) {\n return;\n }\n if (visible) {\n if (this.dirtyBounds) {\n this.dirtyBounds.setValue(0, 0, this._viewBox.width(), this._viewBox.height());\n }\n if (this._skipRender > 1) {\n this.renderNextFrame();\n }\n this._skipRender = 0;\n } else {\n this._skipRender = 1;\n }\n };\n\n getTimeline() {\n return this.timeline;\n }\n\n get3dOptions(options: IOption3D) {\n const {\n center = { x: this.width / 2, y: this.height / 2, z: 0, dx: 0, dy: 0, dz: 0 },\n light = {},\n alpha = 0,\n beta = 0,\n camera,\n fieldRatio = 1,\n fieldDepth\n } = options;\n\n return {\n ...options,\n center,\n light,\n alpha,\n beta,\n camera,\n fieldRatio,\n fieldDepth\n };\n }\n\n set3dOptions(options: IOption3D) {\n this.option3d = options;\n const options3d = this.get3dOptions(options);\n const { light, center, camera, alpha, beta, fieldRatio, fieldDepth } = options3d;\n const { dir = [1, 1, -1], color = 'white', ambient } = light;\n\n const centerX = (center.x ?? this.width / 2) + (center.dx ?? 0);\n const centerY = (center.y ?? this.height / 2) + (center.dy ?? 0);\n const centerZ = (center.z ?? 0) + (center.dz ?? 0);\n const centerVec3: vec3 = [centerX, centerY, centerZ];\n const z = 1;\n let cameraX = 0;\n let cameraY = 0;\n let cameraZ = 0;\n if (!camera) {\n cameraX = Math.sin(alpha) + centerX;\n cameraY = Math.sin(beta) + centerY;\n cameraZ = Math.cos(alpha) * Math.cos(beta) * z;\n }\n\n this.light = new DirectionalLight(dir, color, ambient);\n const cameraParams = {\n left: 0,\n right: this.width,\n top: 0,\n bottom: this.height,\n fieldRatio: fieldRatio,\n fieldDepth,\n viewParams: {\n pos: [cameraX, cameraY, cameraZ] as vec3,\n center: centerVec3,\n up: [0, 1, 0] as vec3\n }\n };\n if (this.camera) {\n this.camera.params = cameraParams;\n } else {\n this.camera = new OrthoCamera(cameraParams);\n }\n\n if (options.enableView3dTransform) {\n this.enableView3dTransform();\n }\n }\n\n protected beforeRender = (stage: IStage) => {\n this._beforeRender && this._beforeRender(stage);\n };\n\n protected afterRender = (stage: IStage) => {\n this.renderCount++;\n this._afterRender && this._afterRender(stage);\n this._afterNextRenderCbs && this._afterNextRenderCbs.forEach(cb => cb(stage));\n this._afterNextRenderCbs = null;\n };\n\n setBeforeRender(cb: (stage: IStage) => void) {\n this._beforeRender = cb;\n }\n\n setAfterRender(cb: (stage: IStage) => void) {\n this._afterRender = cb;\n }\n\n afterNextRender(cb: (stage: IStage) => void) {\n if (!this._afterNextRenderCbs) {\n this._afterNextRenderCbs = [];\n }\n this._afterNextRenderCbs.push(cb);\n }\n\n enableView3dTransform() {\n if (this.view3dTranform) {\n return;\n }\n this.view3dTranform = true;\n this.pluginService.register(new ViewTransform3dPlugin());\n }\n\n disableView3dTranform() {\n if (!this.view3dTranform) {\n return;\n }\n this.view3dTranform = false;\n this.pluginService.findPluginsByName('ViewTransform3dPlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n\n enableAutoRender() {\n if (this.autoRender) {\n return;\n }\n this.autoRender = true;\n this.pluginService.register(new AutoRenderPlugin());\n }\n disableAutoRender() {\n if (!this.autoRender) {\n return;\n }\n this.autoRender = false;\n this.pluginService.findPluginsByName('AutoRenderPlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n enableIncrementalAutoRender() {\n if (this.increaseAutoRender) {\n return;\n }\n this.increaseAutoRender = true;\n this.pluginService.register(new IncrementalAutoRenderPlugin());\n }\n disableIncrementalAutoRender() {\n if (!this.increaseAutoRender) {\n return;\n }\n this.increaseAutoRender = false;\n this.pluginService.findPluginsByName('IncrementalAutoRenderPlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n enableDirtyBounds() {\n if (this.dirtyBounds) {\n return;\n }\n this.dirtyBounds = new Bounds();\n let plugin = this.pluginService.findPluginsByName('DirtyBoundsPlugin')[0];\n if (!plugin) {\n plugin = new DirtyBoundsPlugin();\n this.pluginService.register(plugin);\n } else {\n plugin.activate(this.pluginService);\n }\n }\n disableDirtyBounds() {\n if (!this.dirtyBounds) {\n return;\n }\n this.dirtyBounds = null;\n this.pluginService.findPluginsByName('DirtyBoundsPlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n enableLayout() {\n if (this._enableLayout) {\n return;\n }\n this._enableLayout = true;\n this.pluginService.register(new FlexLayoutPlugin());\n }\n disableLayout() {\n if (!this._enableLayout) {\n return;\n }\n this._enableLayout = false;\n this.pluginService.findPluginsByName('FlexLayoutPlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n enableHtmlAttribute(container?: any) {\n if (this.htmlAttribute) {\n return;\n }\n this.htmlAttribute = container;\n this.pluginService.register(new HtmlAttributePlugin());\n }\n disableHtmlAttribute() {\n if (!this.htmlAttribute) {\n return;\n }\n this.htmlAttribute = false;\n this.pluginService.findPluginsByName('HtmlAttributePlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n\n // /**\n // * stage的appendChild,add\n // * @param node\n // * @returns\n // */\n // appendChild(node: T): T | null {\n // const layer = this.at(0);\n // if (!layer) {\n // return null;\n // }\n // return layer.appendChild(node);\n // }\n\n protected tryUpdateAABBBounds(): AABBBounds {\n const viewBox = this._viewBox;\n this._AABBBounds.setValue(viewBox.x1, viewBox.y1, viewBox.x2, viewBox.y2);\n return this._AABBBounds;\n }\n\n combineLayer(ILayer1: ILayer, ILayer2: ILayer): ILayer {\n throw new Error('暂不支持');\n }\n // 如果传入CanvasId,如果存在相同Id,说明这两个图层使用相同的Canvas绘制\n // 但需要注意的是依然是两个图层(用于解决Table嵌入ChartSpace不影响Table的绘制)\n createLayer(canvasId?: string, layerMode?: LayerMode): ILayer {\n // 创建一个默认layer图层\n const layer = this.layerService.createLayer(this, {\n main: false,\n layerMode,\n canvasId\n });\n this.appendChild(layer);\n return layer;\n // const layer = new Layer(this, this.global, this.window, {\n // main: false,\n // canvasId\n // });\n // this.appendChild(layer);\n // return layer;\n }\n sortLayer(cb: (ILayer1: ILayer, layer2: ILayer) => number): void {\n const children = this.children;\n children.sort(cb);\n this.removeAllChild();\n children.forEach(c => {\n this.appendChild(c);\n });\n }\n removeLayer(ILayerId: number): ILayer | false {\n return this.removeChild(this.findChildByUid(ILayerId) as IGraphic) as ILayer;\n }\n tryInitInteractiveLayer() {\n // TODO:顺序可能会存在问题\n // 支持交互层,且没有创建过,那就创建\n if (this.supportInteractiveLayer && !this.interactiveLayer) {\n this.interactiveLayer = this.createLayer();\n this.interactiveLayer.name = '_builtin_interactive';\n this.interactiveLayer.attribute.pickable = false;\n this.nextFrameRenderLayerSet.add(this.interactiveLayer as any); // to be fixed\n }\n // this.interactiveLayer.afterDraw(l => {\n // l.removeAllChild();\n // });\n }\n\n clearViewBox(color?: string) {\n this.window.clearViewBox(this._viewBox, color);\n }\n\n render(layers?: ILayer[], params?: Partial): void {\n this.ticker.start();\n this.timeline.resume();\n const state = this.state;\n this.state = 'rendering';\n this.layerService.prepareStageLayer(this);\n if (!this._skipRender) {\n this.lastRenderparams = params;\n this.hooks.beforeRender.call(this);\n this.renderLayerList(this.children as ILayer[]);\n this.combineLayersToWindow();\n this.nextFrameRenderLayerSet.clear();\n this.hooks.afterRender.call(this);\n }\n this.state = state;\n this._skipRender && this._skipRender++;\n }\n\n protected combineLayersToWindow() {\n return;\n // this.forEach((layer, i) => {\n // layer.combineTo(this.window, {\n // clear: i === 0,\n // x: this.x,\n // y: this.y,\n // width: this.viewWidth,\n // height: this.viewHeight,\n // renderService: this.renderService,\n // background: layer === this.defaultLayer ? this.background : undefined,\n // updateBounds: !!this.dirtyBounds\n // });\n // });\n }\n\n renderNextFrame(layers?: ILayer[], force?: boolean): void {\n // render状态中调用的不会触发nextFrame,避免loop\n // if (this.state === 'rendering' && !force) {\n // console.log('abc');\n // return;\n // }\n // 性能优化,避免重复add\n if (this.nextFrameRenderLayerSet.size !== this.childrenCount) {\n (layers || this).forEach((layer: any) => {\n this.nextFrameRenderLayerSet.add(layer);\n });\n }\n if (!this.willNextFrameRender) {\n this.willNextFrameRender = true;\n this.global.getRequestAnimationFrame()(() => {\n this._doRenderInThisFrame(), (this.willNextFrameRender = false);\n });\n }\n }\n\n _doRenderInThisFrame() {\n this.timeline.resume();\n this.ticker.start();\n const state = this.state;\n this.state = 'rendering';\n this.layerService.prepareStageLayer(this);\n if (this.nextFrameRenderLayerSet.size && !this._skipRender) {\n this.hooks.beforeRender.call(this);\n this.renderLayerList(Array.from(this.nextFrameRenderLayerSet.values()), this.lastRenderparams || {});\n this.combineLayersToWindow();\n this.hooks.afterRender.call(this);\n this.nextFrameRenderLayerSet.clear();\n }\n this.state = state;\n this._skipRender && this._skipRender++;\n }\n\n protected renderLayerList(layerList: ILayer[], params?: Partial) {\n const list: ILayer[] = [];\n // 只需要render main layer即可\n for (let i = 0; i < layerList.length; i++) {\n let l = layerList[i];\n if (l.layerMode === 'virtual') {\n l = l.getNativeHandler().mainHandler.layer;\n }\n if (!list.includes(l)) {\n list.push(l);\n }\n }\n list.forEach(layer => {\n // 记录当前的stamp,避免重复绘制layer(如果存在virtual layer)\n if (layer.renderCount > this.renderCount) {\n return;\n }\n layer.renderCount = this.renderCount + 1;\n\n layer.render(\n {\n renderService: this.renderService,\n background: layer === this.defaultLayer ? this.background : undefined,\n updateBounds: !!(this.dirtyBounds && !this.dirtyBounds.empty())\n },\n { renderStyle: this.renderStyle, ...params }\n );\n });\n\n // 添加交互层渲染\n if (this.interactiveLayer && !layerList.includes(this.interactiveLayer)) {\n this.interactiveLayer.render(\n {\n renderService: this.renderService,\n updateBounds: !!(this.dirtyBounds && !this.dirtyBounds.empty())\n },\n { renderStyle: this.renderStyle, ...params }\n );\n }\n }\n\n resizeWindow(w: number, h: number, rerender: boolean = true) {\n this.window.resize(w, h);\n rerender && this.render();\n }\n\n /**\n * 语法糖,如果viewBox和window宽高一样的话,那么会同时缩放window和viewBox\n * @param w\n * @param h\n * @param rerender\n */\n resize(w: number, h: number, rerender: boolean = true): void {\n this.window.resize(w, h);\n this.forEachChildren(c => {\n c.resize(w, h);\n });\n // 如果不是子图的stage,那么认为用户也想要resize view\n if (!this._subView) {\n this.viewBox.setValue(this.viewBox.x1, this.viewBox.y1, this.viewBox.x1 + w, this.viewBox.y1 + h);\n }\n // 设置camera\n // this.camera && (this.camera.params = { ...this.camera.params, right: this.width, bottom: this.height });\n this.camera && this.option3d && this.set3dOptions(this.option3d);\n rerender && this.render();\n }\n resizeView(w: number, h: number, rerender: boolean = true) {\n this.viewBox.setValue(this.viewBox.x1, this.viewBox.y1, this.viewBox.x1 + w, this.viewBox.y1 + h);\n this.forEachChildren(c => {\n c.resizeView(w, h);\n });\n // 设置camera\n this.camera && (this.camera.params = { ...this.camera.params, right: this.width, bottom: this.height });\n rerender && this.render();\n }\n setViewBox(viewBox: IBoundsLike, rerender: boolean): void;\n setViewBox(x: number, y: number, w: number, h: number, rerender: boolean): void;\n setViewBox(x: number | IBoundsLike, y: number | boolean, w?: number, h?: number, rerender?: boolean): void {\n let isRerender: boolean = true;\n\n if (typeof x === 'object') {\n this.viewBox.setValue(x.x1, x.y1, x.x2, x.y2);\n if (y === false) {\n isRerender = false;\n }\n } else {\n this.viewBox.setValue(x, y as number, x + w, (y as number) + h);\n\n if (rerender === false) {\n isRerender = false;\n }\n }\n\n this.forEachChildren(c => {\n c.resizeView(this.viewBox.width(), this.viewBox.height());\n });\n isRerender && this.render();\n }\n setDpr(dpr: number, rerender: boolean = true): void {\n // this.window.setDpr(dpr);\n this.forEachChildren(c => {\n c.setDpr(dpr);\n });\n\n rerender && this.render();\n }\n setOrigin(x: number, y: number): void {\n throw new Error('暂不支持');\n }\n export(type: IExportType): HTMLCanvasElement | ImageData {\n throw new Error('暂不支持');\n }\n pick(x: number, y: number): PickResult | false {\n if (!this.pickerService) {\n this.pickerService = container.get(PickerService);\n }\n // 暂时不提供layer的pick\n const result = this.pickerService.pick(this.children as unknown as IGraphic[], new Point(x, y), {\n bounds: this.AABBBounds\n });\n if (result?.graphic || result?.group) {\n return result;\n }\n return false;\n }\n\n // 动画相关\n startAnimate(t: number): void {\n throw new Error('暂不支持');\n }\n setToFrame(t: number): void {\n throw new Error('暂不支持');\n }\n\n release() {\n super.release();\n this.eventSystem && this.eventSystem.release();\n this.pluginService.release();\n this.forEach(layer => {\n layer.release();\n });\n this.interactiveLayer && this.interactiveLayer.release();\n this.window.release();\n }\n\n setStage(stage?: IStage) {\n return;\n // this.stage = this;\n // this.forEachChildren(item => {\n // (item as Layer).setStage(this);\n // });\n }\n\n /**\n * 添加dirty区域,会修改参数b\n * @param b\n * @param matrix\n */\n dirty(b: IBounds, matrix?: IMatrix) {\n if (matrix) {\n b.transformWithMatrix(matrix);\n }\n if (this.dirtyBounds.empty()) {\n this.dirtyBounds.setValue(b.x1, b.y1, b.x2, b.y2);\n }\n this.dirtyBounds.union(b);\n }\n\n getLayer(name: string): undefined | ILayer {\n const layer = this.children.filter(layer => layer.name === name);\n return layer[0] as ILayer;\n }\n\n renderTo(window: IWindow, params: { x: number; y: number; width: number; height: number }) {\n this.forEachChildren((layer, i) => {\n layer.drawTo(window, {\n ...params,\n renderService: this.renderService,\n background: layer === this.defaultLayer ? this.background : undefined,\n clear: i === 0, // 第一个layer需要clear\n updateBounds: !!(this.dirtyBounds && !this.dirtyBounds.empty())\n });\n });\n }\n\n /**\n * 渲染到新的window上去\n * @param fullImage 是否是全量的image,因为可能之前的window有一部分场景树超过window的帧缓冲了\n * @returns\n */\n renderToNewWindow(fullImage: boolean = true, viewBox?: IAABBBounds): IWindow {\n const window = container.get(VWindow);\n if (fullImage) {\n window.create({\n width: this.viewWidth,\n height: this.viewHeight,\n dpr: this.window.dpr,\n canvasControled: true,\n offscreen: true,\n title: ''\n });\n } else {\n const width = viewBox ? viewBox.width() : Math.min(this.viewWidth, this.window.width - this.x);\n const height = viewBox ? viewBox.height() : Math.min(this.viewHeight, this.window.height - this.y);\n window.create({\n width,\n height,\n dpr: this.window.dpr,\n canvasControled: true,\n offscreen: true,\n title: ''\n });\n }\n\n const x = viewBox ? -viewBox.x1 : 0;\n const y = viewBox ? -viewBox.y1 : 0;\n this.renderTo(window, {\n x,\n y,\n width: viewBox ? viewBox.x2 : window.width,\n height: viewBox ? viewBox.y2 : window.height\n });\n return window;\n }\n\n toCanvas(fullImage: boolean = true, viewBox?: IAABBBounds): HTMLCanvasElement | null {\n const window = this.renderToNewWindow(fullImage, viewBox);\n const c = window.getNativeHandler();\n if (c.nativeCanvas) {\n return c.nativeCanvas;\n }\n return null;\n }\n\n setCursor(mode?: string): void {\n this._cursor = mode;\n this.eventSystem.setCursor(mode, 'ignore');\n }\n\n getCursor() {\n return this._cursor;\n }\n}\n","export class DragNDrop {\n constructor(rootNode) {\n this.onPointerDown = event => {\n const target = event.target, rootNode = this.rootNode, isRoot = target === rootNode;\n if (target && !isRoot) {\n let currentDroppable, dragstartTriggered = !1;\n function handlePointerMove(moveEvent) {\n if (dragstartTriggered || (moveEvent.type = \"dragstart\", null == target || target.dispatchEvent(moveEvent), \n dragstartTriggered = !0), moveEvent.type = \"drag\", null == target || target.dispatchEvent(moveEvent), \n !isRoot) {\n target.pickable = !1;\n const elemBelow = (null == rootNode ? void 0 : rootNode.pick(moveEvent.global.x, moveEvent.global.y)).graphic;\n target.pickable = !0, currentDroppable !== elemBelow && (currentDroppable && (moveEvent.type = \"dragleave\", \n moveEvent.target = currentDroppable, currentDroppable.dispatchEvent(moveEvent)), \n elemBelow && (moveEvent.type = \"dragenter\", moveEvent.target = elemBelow, elemBelow.dispatchEvent(moveEvent)), \n currentDroppable = elemBelow, currentDroppable && (moveEvent.type = \"dragover\", \n moveEvent.target = currentDroppable, currentDroppable.dispatchEvent(moveEvent)));\n }\n }\n null == rootNode || rootNode.addEventListener(\"pointermove\", handlePointerMove);\n const stopDragging = function() {\n dragstartTriggered && (currentDroppable && (event.type = \"drop\", event.target = currentDroppable, \n currentDroppable.dispatchEvent(event)), event.type = \"dragend\", target.dispatchEvent(event), \n dragstartTriggered = !1), null == rootNode || rootNode.removeEventListener(\"pointermove\", handlePointerMove);\n };\n target.addEventListener(\"pointerup\", stopDragging, {\n once: !0\n }), target.addEventListener(\"pointerupoutside\", stopDragging, {\n once: !0\n });\n }\n }, this.rootNode = rootNode, this.initEvents();\n }\n initEvents() {\n var _a;\n null === (_a = this.rootNode) || void 0 === _a || _a.addEventListener(\"pointerdown\", this.onPointerDown);\n }\n removeEvents() {\n var _a;\n null === (_a = this.rootNode) || void 0 === _a || _a.removeEventListener(\"pointerdown\", this.onPointerDown);\n }\n release() {\n this.removeEvents(), this.rootNode = null;\n }\n}","import { application, clock, WILDCARD } from '@visactor/vrender-core';\nimport type { IEventTarget, IFederatedPointerEvent, FederatedPointerEvent, INode } from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\nimport { EventEmitter } from '@visactor/vutils';\n\nimport type { DefaultGestureConfig, EmitEventObject, GestureConfig, GestureDirection, GestureEvent } from './interface';\n\n/**\n * 代码参考 https://github.com/hammerjs/hammer.js\n * The MIT License (MIT)\n\n Copyright (C) 2011-2017 by Jorik Tangelder (Eight Media)\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\nconst PRESS_TIME = 251;\nconst PRESS_THRESHOLD = 9;\nconst SWIPE_VELOCITY = 0.3;\nconst SWIPE_THRESHOLD = 10;\nconst TAP_INTERVAL = 300;\n\nconst calcDirection = (start: IPointLike, end: IPointLike) => {\n const xDistance = end.x - start.x;\n const yDistance = end.y - start.y;\n if (Math.abs(xDistance) > Math.abs(yDistance)) {\n return xDistance > 0 ? 'right' : 'left';\n }\n return yDistance > 0 ? 'down' : 'up';\n};\n\n// 计算2点之间的距离\nconst calcDistance = (point1: IPointLike, point2: IPointLike) => {\n const xDistance = Math.abs(point2.x - point1.x);\n const yDistance = Math.abs(point2.y - point1.y);\n return Math.sqrt(xDistance * xDistance + yDistance * yDistance);\n};\n\nconst getCenter = (points: IPointLike[]) => {\n const pointersLength = points.length;\n\n if (pointersLength === 1) {\n return {\n x: Math.round(points[0].x),\n y: Math.round(points[0].y)\n };\n }\n\n let x = 0;\n let y = 0;\n let i = 0;\n while (i < pointersLength) {\n x += points[i].x;\n y += points[i].y;\n i++;\n }\n\n return {\n x: Math.round(x / pointersLength),\n y: Math.round(y / pointersLength)\n };\n};\n\nexport class Gesture extends EventEmitter {\n element: INode | null;\n\n private cachedEvents: IFederatedPointerEvent[] = [];\n private startTime: number;\n // @ts-ignore\n // eslint-disable-next-line no-undef\n private pressTimeout: NodeJS.Timeout | null;\n private startPoints: IPointLike[] = [];\n // 用来记录当前触发的事件\n private processEvent: Record = {};\n private startDistance: number;\n private center: IPointLike;\n private eventType: string | null;\n private direction: GestureDirection | null;\n\n private lastMoveTime: number;\n private prevMoveTime: number;\n\n private prevMovePoint: IPointLike | null;\n private lastMovePoint: IPointLike | null;\n\n private throttleTimer: number = 0;\n private emitThrottles: EmitEventObject[] = [];\n\n private config: DefaultGestureConfig;\n\n private tapCount;\n private lastTapTime;\n private lastTapTarget: IEventTarget | null = null;\n\n constructor(element: IEventTarget, config: GestureConfig = {}) {\n super();\n this.element = element;\n this.tapCount = 0;\n this.lastTapTime = 0;\n this.config = {\n press: {\n time: config?.press?.time ?? PRESS_TIME,\n threshold: config?.press?.threshold ?? PRESS_THRESHOLD\n },\n swipe: {\n threshold: config?.swipe?.threshold ?? SWIPE_THRESHOLD,\n velocity: config?.swipe?.velocity ?? SWIPE_VELOCITY\n },\n tap: {\n interval: config?.tap?.interval ?? TAP_INTERVAL\n }\n };\n this.initEvents();\n }\n\n initEvents() {\n const { element } = this;\n if (!element) {\n return;\n }\n\n element.addEventListener('pointerdown', this.onStart);\n element.addEventListener('pointermove', this.onMove);\n element.addEventListener('pointerup', this.onEnd);\n element.addEventListener('pointerupoutside', this.onEnd);\n }\n\n removeEvents() {\n const { element } = this;\n if (!element) {\n return;\n }\n element.removeEventListener('pointerdown', this.onStart);\n element.removeEventListener('pointermove', this.onMove);\n element.removeEventListener('pointerup', this.onEnd);\n element.removeEventListener('pointerupoutside', this.onEnd);\n }\n\n release() {\n this.removeEvents();\n this.element = null;\n }\n\n private onStart = (ev?: FederatedPointerEvent) => {\n this.reset();\n\n this.startTime = clock.now();\n\n const { cachedEvents, startPoints } = this;\n\n if (ev) {\n cachedEvents.push(ev.clone());\n }\n // 重置 startPoints\n startPoints.length = cachedEvents.length;\n for (let i = 0; i < cachedEvents.length; i++) {\n const { x, y } = cachedEvents[i];\n const point = { x, y };\n startPoints[i] = point;\n }\n\n if (startPoints.length === 1) {\n const event = cachedEvents[0] as unknown as GestureEvent;\n this.pressTimeout = setTimeout(() => {\n const eventType = 'press';\n const direction = 'none';\n event.direction = direction;\n event.deltaX = 0;\n event.deltaY = 0;\n event.points = startPoints;\n this.triggerStartEvent(eventType, event);\n this.triggerEvent(eventType, event);\n this.eventType = eventType;\n this.direction = direction;\n }, this.config.press.time);\n return;\n }\n\n this.startDistance = calcDistance(startPoints[0], startPoints[1]);\n this.center = getCenter([startPoints[0], startPoints[1]]);\n };\n\n private onMove = (ev: FederatedPointerEvent) => {\n this.clearPressTimeout();\n const { startPoints, cachedEvents } = this;\n if (!startPoints.length) {\n return;\n }\n\n const moveEvent = ev.clone() as unknown as GestureEvent;\n const { x, y, pointerId } = moveEvent;\n for (let i = 0, len = cachedEvents.length; i < len; i++) {\n if (pointerId === cachedEvents[i].pointerId) {\n cachedEvents[i] = moveEvent;\n break;\n }\n }\n const point = { x, y };\n const points = cachedEvents.map(cachedEvent => ({ x: cachedEvent.x, y: cachedEvent.y }));\n\n const now = clock.now();\n this.prevMoveTime = this.lastMoveTime;\n this.prevMovePoint = this.lastMovePoint;\n this.lastMoveTime = now;\n this.lastMovePoint = point;\n\n if (startPoints.length === 1) {\n const startPoint = startPoints[0];\n const deltaX = x - startPoint.x;\n const deltaY = y - startPoint.y;\n const direction = this.direction || calcDirection(startPoint, point);\n this.direction = direction;\n\n const eventType = this.getEventType(point);\n moveEvent.direction = direction;\n moveEvent.deltaX = deltaX;\n moveEvent.deltaY = deltaY;\n moveEvent.points = points;\n this.triggerStartEvent(eventType, moveEvent);\n this.triggerEvent(eventType, moveEvent);\n return;\n }\n\n const { startDistance } = this;\n const currentDistance = calcDistance(points[0], points[1]);\n\n // 缩放比例\n moveEvent.scale = currentDistance / startDistance;\n moveEvent.center = this.center;\n moveEvent.points = points;\n this.triggerStartEvent('pinch', moveEvent);\n this.triggerEvent('pinch', moveEvent);\n };\n\n private onEnd = (ev: FederatedPointerEvent) => {\n const endEvent = ev.clone() as unknown as GestureEvent;\n const { cachedEvents, startPoints } = this;\n const points = cachedEvents.map(ev => {\n return { x: ev.x, y: ev.y };\n });\n endEvent.points = points;\n this.triggerEndEvent(endEvent);\n\n if (cachedEvents.length === 1) {\n const now = clock.now();\n const lastMoveTime = this.lastMoveTime;\n // 做这个判断是为了最后一次touchmove后到end前,是否还有一个停顿的过程\n // 100 是拍的一个值,理论这个值会很短,一般不卡顿的话在10ms以内\n if (now - lastMoveTime < 100) {\n const prevMoveTime = this.prevMoveTime || this.startTime;\n const intervalTime = lastMoveTime - prevMoveTime;\n // 时间间隔一定要大于0, 否则计算没意义\n if (intervalTime > 0) {\n const prevMovePoint = this.prevMovePoint || startPoints[0];\n const lastMovePoint = this.lastMovePoint || startPoints[0];\n const distance = calcDistance(prevMovePoint, lastMovePoint);\n // move速率\n const velocity = distance / intervalTime;\n // 0.3 是参考hammerjs的设置\n if (velocity > this.config.swipe.velocity && distance > this.config.swipe.threshold) {\n endEvent.velocity = velocity;\n endEvent.direction = calcDirection(prevMovePoint, lastMovePoint);\n this.triggerEvent('swipe', endEvent);\n }\n }\n }\n\n if (now - this.lastTapTime < this.config.tap.interval && ev.target === this.lastTapTarget) {\n this.tapCount++;\n } else {\n this.tapCount = 1;\n }\n this.lastTapTime = now;\n this.lastTapTarget = ev.target;\n\n if (this.tapCount === 1) {\n this.triggerEvent('tap', endEvent);\n } else if (this.tapCount === 2) {\n this.triggerEvent('doubletap', endEvent);\n this.tapCount = 0; // reset tapCount after doubletap\n }\n }\n\n for (let i = 0, len = cachedEvents.length; i < len; i++) {\n if (cachedEvents[i].pointerId === endEvent.pointerId) {\n cachedEvents.splice(i, 1);\n startPoints.splice(i, 1);\n break;\n }\n }\n\n this.reset();\n\n // 多指离开 1 指后,重新触发一次start\n if (cachedEvents.length > 0) {\n this.onStart();\n }\n };\n\n private getEventType(point: IPointLike) {\n const { eventType, startTime, startPoints } = this;\n if (eventType) {\n return eventType;\n }\n let type;\n const now = clock.now();\n if (now - startTime > this.config.press.time && calcDistance(startPoints[0], point) < this.config.press.threshold) {\n type = 'press';\n } else {\n type = 'pan';\n }\n this.eventType = type;\n return type;\n }\n\n private enable(eventType: string) {\n this.processEvent[eventType] = true;\n }\n\n // 是否进行中的事件\n private isProcess(eventType: string) {\n return this.processEvent[eventType];\n }\n\n private pushEvent(type: string, ev: GestureEvent) {\n const { emitThrottles } = this;\n const newEvent = { type, ev };\n for (let i = 0, len = emitThrottles.length; i < len; i++) {\n if (emitThrottles[i].type === type) {\n emitThrottles.splice(i, 1, newEvent);\n return;\n }\n }\n emitThrottles.push(newEvent);\n }\n\n private clearPressTimeout() {\n if (this.pressTimeout) {\n clearTimeout(this.pressTimeout);\n this.pressTimeout = null;\n }\n }\n\n private reset() {\n this.clearPressTimeout();\n this.startTime = 0;\n this.startDistance = 0;\n this.direction = null;\n this.eventType = null;\n this.prevMoveTime = 0;\n this.prevMovePoint = null;\n this.lastMoveTime = 0;\n this.lastMovePoint = null;\n }\n\n private triggerEvent(type: string, ev: GestureEvent) {\n // 主要是节流处理\n this.pushEvent(type, ev);\n const { throttleTimer, emitThrottles } = this;\n if (throttleTimer) {\n return;\n }\n\n this.throttleTimer = application.global.getRequestAnimationFrame()(() => {\n for (let i = 0, len = emitThrottles.length; i < len; i++) {\n const { type, ev } = emitThrottles[i];\n this.emitEvent(type, ev);\n }\n // 清空\n this.throttleTimer = 0;\n this.emitThrottles.length = 0;\n });\n }\n\n // 触发start事件\n private triggerStartEvent(type: string, ev: GestureEvent) {\n if (this.isProcess(type)) {\n return;\n }\n this.enable(type);\n this.triggerEvent(`${type}start`, ev);\n }\n\n private triggerEndEvent(ev: GestureEvent) {\n const processEvent = this.processEvent;\n Object.keys(processEvent).forEach(type => {\n this.triggerEvent(`${type}end`, ev);\n if (type === 'press') {\n // pressend 别名,pressup\n this.triggerEvent(`${type}up`, ev);\n }\n delete processEvent[type];\n });\n }\n\n private emitEvent(type: string, e: GestureEvent) {\n const events = (this.element as unknown as any)._events;\n const listeners = events[WILDCARD];\n if (listeners) {\n if ('fn' in listeners) {\n listeners.fn.call(listeners.context, e, type);\n } else {\n for (let i = 0, j = listeners.length; i < j && !e.propagationImmediatelyStopped; i++) {\n listeners[i].fn.call(listeners[i].context, e, type);\n }\n }\n }\n\n this.emit(type, e);\n }\n}\n","import type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isObject } from '@visactor/vutils';\nimport type { IEventTarget, IColor, ILayer, Stage } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { createStage, waitForAllSubLayers } from '@visactor/vrender-core';\nimport { DragNDrop, Gesture } from '@visactor/vrender-kits';\nimport type { IViewOptions, IView, IMark, IViewEventConfig } from '../types';\nimport type { IRenderer } from '../types/renderer';\nimport { HOOK_EVENT } from './enums';\n\nexport default class CanvasRenderer implements IRenderer {\n private _width: number;\n private _height: number;\n\n private _view: IView;\n private _viewOptions: IViewOptions;\n private _eventConfig: IViewEventConfig;\n private _stage: Stage;\n private _layer: ILayer;\n private _dragController: DragNDrop;\n private _gestureController: Gesture;\n private _viewBox: IBoundsLike;\n\n constructor(view: IView) {\n this._view = view;\n }\n\n initialize(width: number, height: number, options: IViewOptions, eventConfig: IViewEventConfig) {\n this._width = width;\n this._height = height;\n this._viewOptions = options;\n this._eventConfig = eventConfig;\n\n this.initStage();\n\n // this method will invoke resize to size the canvas appropriately\n return this;\n }\n\n stage() {\n return this._stage ?? null;\n }\n\n gestureController() {\n return this._gestureController ?? null;\n }\n\n canvas() {\n if (this._stage) {\n return this._stage.window.getNativeHandler().nativeCanvas;\n }\n return null;\n }\n\n context() {\n if (this._stage) {\n return this._stage.window.getContext().nativeContext;\n }\n return null;\n }\n\n combineIncrementalLayers() {\n if (this._stage) {\n waitForAllSubLayers(this._stage as any).then(() => {\n // stage might be null in current tick\n if (this._stage) {\n this._stage.defaultLayer.combineSubLayer();\n }\n });\n }\n return this;\n }\n\n background(color: IColor) {\n if (this._stage) {\n this._stage.background = color;\n return this;\n }\n }\n\n setDpr(resolution: number, redraw: boolean) {\n this._stage?.setDpr?.(resolution);\n if (redraw) {\n this.renderNextFrame();\n }\n return this;\n }\n\n shouldResize(width: number, height: number) {\n return width !== this._width || height !== this._height;\n }\n\n resize(width: number, height: number) {\n this._view.emit(HOOK_EVENT.BEFORE_STAGE_RESIZE);\n if (this.shouldResize(width, height)) {\n this._width = width;\n this._height = height;\n this._stage && this._stage.resize(width, height);\n }\n\n this._view.emit(HOOK_EVENT.AFTER_STAGE_RESIZE);\n\n return this;\n }\n\n setViewBox(viewBox: IBoundsLike, rerender: boolean = true) {\n if (!this._stage) {\n return this;\n }\n if (\n viewBox &&\n (!this._viewBox ||\n viewBox.x1 !== this._viewBox.x1 ||\n viewBox.x2 !== this._viewBox.x2 ||\n viewBox.y1 !== this._viewBox.y1 ||\n viewBox.y2 !== this._viewBox.y2)\n ) {\n this._viewBox = viewBox;\n\n // FIXME: vRender\n this._stage.setViewBox(viewBox.x1, viewBox.y1, viewBox.x2 - viewBox.x1, viewBox.y2 - viewBox.y1, rerender);\n }\n return this;\n }\n\n render(immediately: boolean = false) {\n this._view.emit(HOOK_EVENT.BEFORE_VRENDER_DRAW);\n\n this.initStage();\n\n // disable dirty bounds when render is called\n this._stage.disableDirtyBounds();\n this._stage.afterNextRender(this.handleAfterNextRender);\n\n // render immediately and skip render in next frame\n if (immediately) {\n this._stage.render();\n\n this._view.emit(HOOK_EVENT.AFTER_VRENDER_DRAW);\n }\n return this;\n }\n\n renderNextFrame() {\n this.initStage();\n\n this._stage.renderNextFrame();\n\n return this;\n }\n\n toCanvas() {\n if (this._stage) {\n return this._stage.toCanvas();\n }\n return null;\n }\n\n preventRender(tag: boolean) {\n if (this._stage) {\n this._stage.preventRender(tag);\n }\n }\n\n // toImageData() {\n // if (this._stage) {\n // return this._stage.toImageData();\n // }\n // return null;\n // }\n\n release() {\n this._view.traverseMarkTree((mark: IMark) => {\n mark.release();\n });\n\n if (this._dragController) {\n this._dragController.release();\n }\n if (this._gestureController) {\n this._gestureController.release();\n }\n\n if (this._stage !== (this._viewOptions?.stage as unknown as Stage)) {\n // don't release the stage created by outside\n this._stage.release();\n }\n\n this._stage = null;\n this._layer = null;\n this._dragController = null;\n this._gestureController = null;\n }\n\n private createStage() {\n this._view.emit(HOOK_EVENT.BEFORE_CREATE_VRENDER_STAGE);\n\n const viewOptions = this._viewOptions;\n\n const stage =\n (viewOptions.stage as unknown as Stage) ??\n createStage({\n width: this._width,\n height: this._height,\n renderStyle: viewOptions.renderStyle,\n viewBox: viewOptions.viewBox,\n dpr: viewOptions.dpr,\n canvas: viewOptions.renderCanvas,\n canvasControled: viewOptions.canvasControled,\n container: viewOptions.container,\n title: viewOptions.rendererTitle,\n beforeRender: viewOptions.beforeRender,\n afterRender: viewOptions.afterRender,\n disableDirtyBounds: true,\n autoRender: true,\n pluginList: viewOptions.pluginList,\n enableHtmlAttribute: viewOptions.enableHtmlAttribute,\n optimize: viewOptions.optimize,\n supportsTouchEvents: viewOptions.supportsTouchEvents,\n supportsPointerEvents: viewOptions.supportsPointerEvents\n });\n\n if (viewOptions.options3d?.enable) {\n stage.set3dOptions(viewOptions.options3d);\n }\n\n stage.enableIncrementalAutoRender();\n\n this._viewBox = viewOptions.viewBox;\n this._view.emit(HOOK_EVENT.AFTER_CREATE_VRENDER_STAGE);\n\n this._view.emit(HOOK_EVENT.BEFORE_CREATE_VRENDER_LAYER);\n const layer = viewOptions.layer ?? (stage.defaultLayer as ILayer);\n this._view.emit(HOOK_EVENT.AFTER_CREATE_VRENDER_LAYER);\n\n if (this._eventConfig?.drag) {\n // 允许 drag 事件\n this._dragController = new DragNDrop(stage as unknown as IEventTarget);\n }\n if (this._eventConfig?.gesture) {\n const gestureConfig = isObject(this._eventConfig.gesture) ? this._eventConfig.gesture : {};\n // 允许手势\n this._gestureController = new Gesture(stage as unknown as IEventTarget, gestureConfig);\n }\n\n return {\n stage,\n layer\n };\n }\n\n private initStage() {\n if (!this._stage) {\n const { stage, layer } = this.createStage();\n\n this._stage = stage;\n this._layer = layer;\n\n const background = this._view.background();\n this.background(background);\n }\n }\n\n private handleAfterNextRender = () => {\n if (this._stage && !this._viewOptions.disableDirtyBounds) {\n this._stage.enableDirtyBounds();\n }\n\n this._view.emit(HOOK_EVENT.AFTER_VRENDER_DRAW);\n this._view.emit(HOOK_EVENT.AFTER_VRENDER_NEXT_RENDER);\n };\n}\n","import { Stage } from './core/stage';\nimport type { IStageParams } from './interface/stage';\n\nexport function createStage(params: Partial) {\n return new Stage(params);\n // return container.get<(params: Partial) => IStage>(StageFactory)(params);\n}\n","import { isValidNumber, isNil } from '@visactor/vutils';\n\ninterface EventPosition {\n canvasX: number;\n canvasY: number;\n clientX?: number;\n clientY?: number;\n}\n\nexport function point(event: Event) {\n ['touches', 'changedTouches', 'targetTouches'].forEach(touchKey => {\n if (event[touchKey] && event[touchKey].length) {\n Array.from(event[touchKey]).forEach(touch => {\n const touchPosition = clientToLocal(touch as Event);\n defineSrPosition(touch, touchPosition, false);\n });\n }\n });\n\n const pos = clientToLocal(event);\n return defineSrPosition(event, pos);\n}\n\nfunction clientToLocal(e: Event): EventPosition {\n // For IE6+, chrome, safari, opera. (When will ff support offsetX?)\n if (!isNil((e as any).offsetX)) {\n return getOffsetPos(e);\n }\n\n // if (el && el.getBoundingClientRect) {\n // return getBoundingClientRectPos(e, el);\n // }\n\n // for miniApp\n if (!isNil((e as any).x)) {\n return getXYPos(e);\n }\n\n // for miniApp\n if ((e as any).changedTouches && (e as any).changedTouches.length) {\n return getChangedTouchesPos(e);\n }\n\n // For some other device, e.g., IOS safari.\n return {\n canvasX: 0,\n canvasY: 0\n };\n}\n\nfunction getOffsetPos(e: any) {\n return {\n canvasX: e.offsetX,\n canvasY: e.offsetY\n };\n}\n\nfunction getBoundingClientRectPos(e: any, el: HTMLElement) {\n const result: EventPosition = { canvasX: 0, canvasY: 0 };\n const rect = el.getBoundingClientRect();\n const currentWidth = rect.width;\n const originWidth = el.offsetWidth || currentWidth;\n const widthRatio = currentWidth / originWidth;\n const currentHeight = rect.height;\n const originHeight = el.offsetHeight || currentHeight;\n const heightRatio = currentHeight / originHeight;\n if (['touchstart', 'touchmove', 'touchend'].includes(e.type) && e.changedTouches && e.changedTouches.length) {\n result.canvasX = (e.changedTouches[0].clientX - rect.left - (el.clientLeft || 0)) / widthRatio;\n result.canvasY = (e.changedTouches[0].clientY - rect.top - (el.clientTop || 0)) / heightRatio;\n result.clientX = e.changedTouches[0].clientX;\n result.clientY = e.changedTouches[0].clientY;\n } else {\n result.canvasX = (e.clientX - rect.left - (el.clientLeft || 0)) / widthRatio;\n result.canvasY = (e.clientY - rect.top - (el.clientTop || 0)) / heightRatio;\n }\n return result;\n}\n\nfunction getXYPos(e: any) {\n return { canvasX: e.x, canvasY: e.y };\n}\n\nfunction getChangedTouchesPos(e: any) {\n return { canvasX: e.changedTouches[0].x, canvasY: e.changedTouches[0].y };\n}\n\nfunction defineSrPosition(event: any, pos: EventPosition, client = true) {\n isValidNumber(pos.canvasX) &&\n Object.defineProperty(event, 'canvasX', {\n value: pos.canvasX,\n writable: true\n });\n isValidNumber(pos.canvasY) &&\n Object.defineProperty(event, 'canvasY', {\n value: pos.canvasY,\n writable: true\n });\n client &&\n isValidNumber(pos.clientX) &&\n Object.defineProperty(event, 'clientX', {\n value: pos.clientX,\n writable: true\n });\n client &&\n isValidNumber(pos.clientY) &&\n Object.defineProperty(event, 'clientY', {\n value: pos.clientY,\n writable: true\n });\n return [pos.canvasX, pos.canvasY];\n}\n","import type { FederatedEvent } from '@visactor/vrender-core';\nimport type { IElement } from './../../types/element';\nimport type { IView } from './../../types/view';\nimport { point } from './point';\nimport { EVENT_SOURCE_WINDOW } from '../../view/constants';\nimport type { EventSourceType } from '../../types';\n\nexport default function getExtendedEvents(\n view: IView,\n event: FederatedEvent,\n item: IElement,\n type: string,\n source: EventSourceType\n) {\n if (source === EVENT_SOURCE_WINDOW) {\n const e = (event as any).changedTouches ? (event as any).changedTouches[0] : event;\n point(e);\n }\n\n (event as any).element = item;\n\n return event;\n}\n","import { isArray, isNil } from '@visactor/vutils';\nimport type { SignalFunctionType, SignalSpec } from '../types/signal';\nimport type { GrammarType, IGrammarBase, ISignal } from '../types/grammar';\nimport { GrammarBase } from './grammar-base';\nimport { invokeFunctionType } from '../parse/util';\nimport type { Nil } from '../types/base';\n\nexport class Signal extends GrammarBase implements ISignal {\n readonly grammarType: GrammarType = 'signal';\n\n protected spec: SignalSpec = { value: null, update: null };\n\n private _signal: T;\n\n parse(spec: SignalSpec) {\n super.parse(spec);\n this.value(spec.value);\n this.update(spec.update);\n\n this.commit();\n return this;\n }\n\n evaluate(upstream: any, parameters: any) {\n this._signal = this.spec.update ? invokeFunctionType(this.spec.update, parameters, this._signal) : this.spec.value;\n\n this.spec.value = this._signal;\n return this;\n }\n\n output() {\n return this._signal;\n }\n\n getValue() {\n return this.output();\n }\n\n set(value: T) {\n if (isArray(value) && isArray(this.value) && value.length === this.value.length) {\n for (let i = 0; i < value.length; i++) {\n if (this.value[i] !== value[i]) {\n this._signal = value;\n this.spec.value = value;\n\n return true;\n }\n }\n return false;\n }\n if (this._signal !== value) {\n this._signal = value;\n this.spec.value = value;\n\n return true;\n }\n return false;\n }\n\n update(update: SignalFunctionType | Nil): this {\n // clear value spec if update is valid\n if (!isNil(update)) {\n this.value(undefined);\n }\n return this.setFunctionSpec(update, 'update');\n }\n\n value(value: T | Nil): this {\n // clear update spec if value is valid\n if (!isNil(value)) {\n this.update(undefined);\n }\n this.spec.value = value;\n this.commit();\n return this;\n }\n\n reuse(grammar: IGrammarBase) {\n if (grammar.grammarType !== this.grammarType) {\n return this;\n }\n this._signal = grammar.output();\n return this;\n }\n\n clear() {\n super.clear();\n this._signal = null;\n }\n}\n","import type { IBounds } from '@visactor/vutils';\nimport { isNumber, Bounds } from '@visactor/vutils';\nimport {\n DefaultAnimationDelay,\n DefaultAnimationDuration,\n DefaultAnimationEasing,\n DefaultAnimationOneByOne,\n DefaultEnableExitAnimation,\n DefaultMorph,\n DefaultMorphAll,\n DefaultReuse,\n DefaultSplitPath\n} from '../graph/constants';\nimport type { GroupMarkSpec, IRunningConfig, ITheme, MarkSpec, SignalSpec } from '../types';\nimport type { IViewOptions, IViewThemeConfig, ViewSpec } from '../types/view';\nimport {\n SIGNAL_AUTOFIT,\n SIGNAL_HEIGHT,\n SIGNAL_PADDING,\n SIGNAL_VIEW_HEIGHT,\n SIGNAL_VIEW_WIDTH,\n SIGNAL_WIDTH,\n SIGNAL_VIEW_BOX\n} from '../view/constants';\n\nlet markBaseId = -1;\n\nexport const BuiltInSignalID = [\n SIGNAL_WIDTH,\n SIGNAL_HEIGHT,\n SIGNAL_PADDING,\n SIGNAL_VIEW_WIDTH,\n SIGNAL_VIEW_HEIGHT,\n SIGNAL_VIEW_BOX,\n SIGNAL_AUTOFIT\n];\n\nexport const builtInSignals = (option: IViewOptions, config: IViewThemeConfig, theme: ITheme): SignalSpec[] => {\n return [\n { id: SIGNAL_WIDTH, value: option[SIGNAL_WIDTH] ?? 0 },\n { id: SIGNAL_HEIGHT, value: option[SIGNAL_HEIGHT] ?? 0 },\n { id: SIGNAL_PADDING, value: normalizePadding(option[SIGNAL_PADDING] ?? config[SIGNAL_PADDING] ?? theme?.padding) },\n {\n id: SIGNAL_VIEW_WIDTH,\n update: {\n callback: (signal: number, params: any) => {\n const padding = normalizePadding(params[SIGNAL_PADDING]);\n return params[SIGNAL_WIDTH] - padding.left - padding.right;\n },\n dependency: [SIGNAL_WIDTH, SIGNAL_PADDING]\n }\n },\n {\n id: SIGNAL_VIEW_HEIGHT,\n update: {\n callback: (signal: number, params: any) => {\n const padding = normalizePadding(params[SIGNAL_PADDING]);\n return params[SIGNAL_HEIGHT] - padding.top - padding.bottom;\n },\n dependency: [SIGNAL_HEIGHT, SIGNAL_PADDING]\n }\n },\n {\n id: SIGNAL_VIEW_BOX,\n update: {\n callback: (signal: IBounds, params: any) => {\n const padding = normalizePadding(params[SIGNAL_PADDING]);\n return (signal ? signal : new Bounds()).setValue(\n padding.left,\n padding.top,\n padding.left + params[SIGNAL_VIEW_WIDTH],\n padding.top + params[SIGNAL_VIEW_HEIGHT]\n );\n },\n dependency: [SIGNAL_VIEW_WIDTH, SIGNAL_VIEW_HEIGHT, SIGNAL_PADDING]\n }\n },\n {\n id: SIGNAL_AUTOFIT,\n value: option[SIGNAL_AUTOFIT] ?? config[SIGNAL_AUTOFIT]\n }\n ];\n};\n\nexport const normalizePadding = (\n value: number | { top?: number; left?: number; right?: number; bottom?: number }\n): { top: number; left: number; right: number; bottom: number } => {\n if (isNumber(value)) {\n return { top: value, bottom: value, left: value, right: value };\n }\n return { top: value?.top ?? 0, bottom: value?.bottom ?? 0, left: value?.left ?? 0, right: value?.right ?? 0 };\n};\n\nexport const normalizeMarkTree = (spec: ViewSpec) => {\n const traverse = (spec: MarkSpec, group: string) => {\n spec.group = group;\n const id = spec.id ?? `VGRAMMAR_MARK_${++markBaseId}`;\n spec.id = id;\n ((spec as GroupMarkSpec).marks ?? []).forEach(child => traverse(child, id));\n };\n (spec.marks ?? []).forEach(mark => traverse(mark, 'root'));\n return spec;\n};\n\nexport const normalizeRunningConfig = (runningConfig: IRunningConfig): IRunningConfig => {\n const {\n reuse = DefaultReuse,\n morph = DefaultMorph,\n morphAll = DefaultMorphAll,\n animation = {},\n enableExitAnimation = DefaultEnableExitAnimation\n } = runningConfig ?? {};\n return {\n reuse,\n morph,\n morphAll,\n animation: {\n easing: animation.easing ?? DefaultAnimationEasing,\n delay: animation.delay ?? DefaultAnimationDelay,\n duration: animation.duration ?? DefaultAnimationDuration,\n oneByOne: animation.oneByOne ?? DefaultAnimationOneByOne,\n splitPath: animation.splitPath ?? DefaultSplitPath\n },\n enableExitAnimation\n };\n};\n","import type { IGlyphMeta, IMark } from '../../types';\nimport type { IGraphic } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\n\nimport { GrammarMarkType } from '../enums';\nimport { BridgeElementKey } from '../constants';\nimport { Factory } from '../../core/factory';\nimport { Logger } from '@visactor/vutils';\n\nexport const isMarkType = (type: string) => {\n return !!GrammarMarkType[type];\n};\n\nexport function createGraphicItem(mark: IMark, markType: string, attrs: any = {}) {\n const graphicItem: IGraphic = Factory.getGraphicType(markType)\n ? Factory.createGraphic(markType, attrs)\n : Factory.createGraphicComponent(markType, attrs, {\n skipDefault: (mark as any)?.spec?.skipTheme\n });\n\n if (!graphicItem) {\n const logger = Logger.getInstance();\n logger.error(`create ${markType} graphic failed!`);\n }\n\n return graphicItem;\n}\n\nexport function createGlyphGraphicItem(mark: IMark, glyphMeta: IGlyphMeta, attrs: any = {}) {\n if (!Factory.getGraphicType(GrammarMarkType.glyph)) {\n return;\n }\n const graphicItem = Factory.createGraphic(GrammarMarkType.glyph, attrs);\n const glyphMarks = glyphMeta.getMarks();\n const subGraphics: IGraphic[] = Object.keys(glyphMarks).map(name => {\n if (Factory.getGraphicType(glyphMarks[name])) {\n const graphic = Factory.createGraphic(glyphMarks[name]);\n if (graphic) {\n graphic.name = name;\n return graphic;\n }\n }\n });\n graphicItem.setSubGraphic(subGraphics);\n return graphicItem;\n}\n\nexport const removeGraphicItem = (graphicItem: IGraphic) => {\n if (graphicItem) {\n graphicItem[BridgeElementKey] = null;\n graphicItem.release();\n if (graphicItem.parent) {\n graphicItem.parent.removeChild(graphicItem);\n }\n }\n};\n\nexport const getMarkTypeOfLarge = (markType: string) => {\n if (markType === GrammarMarkType.rect) {\n return GrammarMarkType.largeRects;\n }\n\n if (markType === GrammarMarkType.symbol) {\n return GrammarMarkType.largeSymbols;\n }\n\n return markType;\n};\n","import type { IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isNil, isValidNumber } from '@visactor/vutils';\nimport type { MarkElementItem, MarkType } from '../../types';\nimport { GrammarMarkType } from '../enums';\n\nexport function isValidPointsChannel(channels: string[], markType: MarkType): boolean {\n switch (markType) {\n case 'line':\n return channels.some(channel => ['x', 'y', 'defined'].includes(channel));\n case 'area':\n return channels.some(channel => ['x', 'y', 'x1', 'y1', 'defined'].includes(channel));\n case 'largeRects':\n return channels.some(channel => ['x', 'y', 'width', 'y1'].includes(channel));\n case 'largeSymbols':\n return channels.some(channel => ['x', 'y'].includes(channel));\n }\n return false;\n}\n\n/**\n * 获取rule的points\n * 相对位置\n * @param {*} item\n * @returns\n */\nexport function getRulePoints(nextAttrs: { x: number; y: number; x1: number; y1: number }) {\n const { x, y, x1, y1 } = nextAttrs;\n\n if (!isValidNumber(x) || !isValidNumber(y) || !isValidNumber(x1) || !isValidNumber(y1)) {\n return [];\n }\n return [\n { x, y },\n { x: x1, y: y1 }\n ];\n}\n/**\n * 生成用于渲染的点数组\n * @param {*} item\n * @returns {IPointLike[]}\n */\nexport function getLinePoints(\n items?: MarkElementItem[],\n includeOnePoint?: boolean,\n lastPoints?: IPointLike[],\n isArea?: boolean\n) {\n if (!items || !items.length || (items.length === 1 && includeOnePoint)) {\n return [];\n }\n const hasValidChannel = items.some(item => {\n return isValidPointsChannel(Object.keys(item.nextAttrs), 'line');\n });\n if (!hasValidChannel) {\n return lastPoints ?? [];\n }\n return items.map((item, index) => {\n const attrs = item.nextAttrs;\n const { x, y, x1, y1, defined } = lastPoints?.[index] ?? {};\n if (isNil(attrs.x)) {\n attrs.x = x;\n }\n if (isNil(attrs.y)) {\n attrs.y = y;\n }\n\n if (isNil(attrs.defined) && defined === false) {\n attrs.defined = false;\n }\n\n attrs.context = item.key;\n\n if (isArea) {\n if (isNil(attrs.x1)) {\n attrs.x1 = x1;\n }\n if (isNil(attrs.y1)) {\n attrs.y1 = y1;\n }\n }\n\n return attrs;\n });\n}\n\nexport function getLargeRectsPoints(\n items?: MarkElementItem[],\n includeOnePoint?: boolean,\n lastPoints: Float32Array | number[] = []\n): Float32Array | number[] {\n if (!items || !items.length || (items.length === 1 && includeOnePoint)) {\n return [];\n }\n const arr: Float32Array = new Float32Array(items.length * 4);\n\n items.forEach((item, index) => {\n const attrs = item.nextAttrs;\n const x = attrs.x ?? lastPoints[index * 4];\n const y = attrs.y ?? lastPoints[index * 4 + 1];\n const width = attrs.width ?? lastPoints[index * 4 + 2];\n const y1 = attrs.y1 ?? lastPoints[index * 4 + 3];\n arr[index * 4] = x;\n arr[index * 4 + 1] = y;\n arr[index * 4 + 2] = width;\n arr[index * 4 + 3] = y1 - y;\n });\n\n return arr;\n}\n\nexport function getLargeSymbolsPoints(\n items?: MarkElementItem[],\n includeOnePoint?: boolean,\n lastPoints: Float32Array | number[] = []\n): Float32Array | number[] {\n if (!items || !items.length || (items.length === 1 && includeOnePoint)) {\n return [];\n }\n const arr: Float32Array = new Float32Array(items.length * 2);\n\n items.forEach((item, index) => {\n const attrs = item.nextAttrs;\n const x = attrs.x ?? lastPoints[index * 2];\n const y = attrs.y ?? lastPoints[index * 2 + 1];\n arr[index * 2] = x;\n arr[index * 2 + 1] = y;\n });\n\n return arr;\n}\n\nexport function isPositionOrSizeChannel(type: string, channel: string) {\n if (['x', 'y', 'dx', 'dy'].includes(channel)) {\n return true;\n }\n\n switch (type) {\n case GrammarMarkType.arc:\n return ['innerRadius', 'outerRadius', 'startAngle', 'endAngle'].includes(channel);\n case GrammarMarkType.group:\n case GrammarMarkType.rect:\n case GrammarMarkType.image:\n return ['width', 'height', 'y1'].includes(channel);\n case GrammarMarkType.path:\n case GrammarMarkType.shape:\n return ['path', 'customPath'].includes(channel);\n case GrammarMarkType.line:\n return channel === 'defined';\n case GrammarMarkType.area:\n return ['x1', 'y1', 'defined'].includes(channel);\n case GrammarMarkType.rule:\n return ['x1', 'y1'].includes(channel);\n case GrammarMarkType.symbol:\n return channel === 'size';\n case GrammarMarkType.polygon:\n return channel === 'points';\n case GrammarMarkType.text:\n return channel === 'text';\n }\n\n return false;\n}\n\nexport function isPointsMarkType(markType: MarkType): boolean {\n return (\n [GrammarMarkType.line, GrammarMarkType.area, GrammarMarkType.largeRects, GrammarMarkType.largeSymbols] as MarkType[]\n ).includes(markType);\n}\n","export const commonAttributes = ['fillOpacity'];\n\nexport const transformCommonAttribute = (graphicAttributes: any, changedKey: string, nextAttrs: any) => {\n if (changedKey === 'fillOpacity') {\n graphicAttributes.fillOpacity = nextAttrs.fillOpacity ?? 1;\n return ['fillOpacity'];\n }\n\n return [];\n};\n","import { has, isNil, isPlainObject, isString, isValidNumber } from '@visactor/vutils';\nimport type { IElement, IGlyphElement } from '../../types/element';\nimport type { AttributeTransform, MarkType } from '../../types/mark';\nimport { GrammarMarkType } from '../enums';\nimport { getRulePoints } from './helpers';\nimport { commonAttributes, transformCommonAttribute } from './common';\n\nfunction storeOriginAttributes(\n name: string,\n channels: string[],\n graphicAttributes: any,\n nextAttrs: any,\n element: IElement,\n markName: string\n): Record {\n const prevStoredAttrs = (element as IGlyphElement).getGraphicAttribute(name, false, markName);\n\n if (prevStoredAttrs) {\n channels.forEach(channel => {\n if (channel in nextAttrs) {\n prevStoredAttrs[channel] = nextAttrs[channel];\n }\n });\n\n return prevStoredAttrs;\n }\n const storedAttrs = {};\n channels.forEach(channel => {\n storedAttrs[channel] = nextAttrs[channel];\n });\n graphicAttributes[name] = storedAttrs;\n return storedAttrs;\n}\n\nexport const transformsByType: Record = {\n rect3d: [\n {\n channels: ['x', 'y', 'z', 'x1', 'y1', 'width', 'height', 'length'],\n transform: (graphicAttributes: any, nextAttrs: any, storedAttrs: any) => {\n // width\n if (isValidNumber(nextAttrs.width) || (!isValidNumber(nextAttrs.x1) && isValidNumber(storedAttrs.width))) {\n graphicAttributes.x = Math.min(storedAttrs.x ?? 0, storedAttrs.x1 ?? Infinity);\n graphicAttributes.width = storedAttrs.width;\n } else if (isValidNumber(nextAttrs.x1) || (!isValidNumber(nextAttrs.width) && isValidNumber(storedAttrs.x1))) {\n graphicAttributes.x = Math.min(storedAttrs.x, storedAttrs.x1);\n graphicAttributes.width = Math.abs(storedAttrs.x1 - storedAttrs.x);\n } else {\n graphicAttributes.x = Math.min(storedAttrs.x ?? 0, storedAttrs.x1 ?? Infinity);\n graphicAttributes.width = storedAttrs.width;\n }\n\n // height\n if (isValidNumber(nextAttrs.height) || (!isValidNumber(nextAttrs.y1) && isValidNumber(storedAttrs.height))) {\n graphicAttributes.y = Math.min(storedAttrs.y ?? 0, storedAttrs.y1 ?? Infinity);\n graphicAttributes.height = storedAttrs.height;\n } else if (isValidNumber(nextAttrs.y1) || (!isValidNumber(nextAttrs.height) && isValidNumber(storedAttrs.y1))) {\n graphicAttributes.y = Math.min(storedAttrs.y, storedAttrs.y1);\n graphicAttributes.height = Math.abs(storedAttrs.y1 - storedAttrs.y);\n } else {\n graphicAttributes.y = Math.min(storedAttrs.y ?? 0, storedAttrs.y1 ?? Infinity);\n graphicAttributes.height = storedAttrs.height;\n }\n\n // length\n if (isValidNumber(nextAttrs.length) || (!isValidNumber(nextAttrs.z1) && isValidNumber(storedAttrs.length))) {\n graphicAttributes.z = Math.min(storedAttrs.z ?? 0, storedAttrs.z1 ?? Infinity);\n graphicAttributes.length = storedAttrs.length;\n } else if (isValidNumber(nextAttrs.z1) || (!isValidNumber(nextAttrs.length) && isValidNumber(storedAttrs.z1))) {\n graphicAttributes.z = Math.min(storedAttrs.z, storedAttrs.z1);\n graphicAttributes.length = Math.abs(storedAttrs.z1 - storedAttrs.z);\n } else {\n graphicAttributes.z = Math.min(storedAttrs.z ?? 0, storedAttrs.z1 ?? Infinity);\n graphicAttributes.length = storedAttrs.length;\n }\n },\n storedAttrs: 'sizeAttrs'\n }\n ],\n [GrammarMarkType.text]: [\n {\n channels: ['text', 'limit', 'autoLimit', 'maxLineWidth'],\n transform: (graphicAttributes: any, nextAttrs: any, storedAttrs: any) => {\n const limit = storedAttrs.limit ?? Infinity;\n const autoLimit = storedAttrs.autoLimit ?? Infinity;\n const maxWidth = Math.min(limit, autoLimit);\n const isTextConfig = isPlainObject(storedAttrs.text) && !isNil(storedAttrs.text.text);\n const text = isTextConfig ? storedAttrs.text.text : storedAttrs.text;\n\n if (Array.isArray(text)) {\n graphicAttributes.maxLineWidth = maxWidth === Infinity ? storedAttrs.maxLineWidth : maxWidth;\n } else {\n graphicAttributes.maxLineWidth = maxWidth === Infinity ? storedAttrs.maxLineWidth : maxWidth;\n }\n\n if (isTextConfig) {\n if (storedAttrs.text.type === 'html') {\n graphicAttributes.html = {\n dom: text,\n width: nextAttrs.width ?? maxWidth,\n height: nextAttrs.height ?? nextAttrs.fontSize,\n anchorType: 'position'\n };\n graphicAttributes.text = '';\n } else if (storedAttrs.text.type === 'rich') {\n graphicAttributes.textConfig = text;\n } else {\n graphicAttributes.text = text;\n }\n } else {\n graphicAttributes.text = text;\n }\n },\n storedAttrs: 'limitAttrs'\n }\n ],\n [GrammarMarkType.rule]: [\n {\n channels: ['x', 'y', 'x1', 'y1'],\n transform: (graphicAttributes: any, nextAttrs: any, storedAttrs: any) => {\n const points = getRulePoints(storedAttrs);\n graphicAttributes.points = points;\n graphicAttributes.x = 0;\n graphicAttributes.y = 0;\n },\n storedAttrs: 'pointAttrs'\n }\n ],\n [GrammarMarkType.symbol]: [\n {\n channels: ['shape', 'symbolType'],\n transform: (graphicAttributes: any, nextAttrs: any, storedAttrs: any) => {\n graphicAttributes.symbolType = nextAttrs.shape ?? nextAttrs.symbolType;\n }\n },\n {\n channels: ['image', 'fill', 'background'],\n transform: (graphicAttributes: any, nextAttrs: any, storedAttrs: any) => {\n if (nextAttrs.image) {\n graphicAttributes.background = nextAttrs.image;\n graphicAttributes.fill = false;\n } else if (storedAttrs.image) {\n graphicAttributes.background = storedAttrs.image;\n graphicAttributes.fill = false;\n } else {\n graphicAttributes.fill = storedAttrs.fill;\n graphicAttributes.background = storedAttrs.background;\n }\n },\n storedAttrs: 'imageAttrs'\n }\n ],\n [GrammarMarkType.richtext]: [\n {\n channels: ['text', 'textConfig'],\n transform: (graphicAttributes: any, nextAttrs: any, storedAttrs: any) => {\n graphicAttributes.text = null;\n\n if (nextAttrs.text?.type === 'rich') {\n graphicAttributes.textConfig = nextAttrs.text.text;\n } else if (nextAttrs.textConfig?.type === 'html') {\n graphicAttributes.html = {\n dom: nextAttrs.textConfig.text,\n width: nextAttrs.width,\n height: nextAttrs.height ?? nextAttrs.fontSize,\n anchorType: 'position'\n };\n graphicAttributes.text = '';\n } else if (nextAttrs.textConfig?.type === 'rich') {\n graphicAttributes.textConfig = nextAttrs.textConfig.text;\n } else {\n graphicAttributes.textConfig = nextAttrs.textConfig;\n }\n }\n }\n ]\n};\n\nexport function cloneTransformAttributes(markType: MarkType, attributes: any) {\n const transforms = transformsByType[markType] ?? [];\n return transforms.reduce((clonedAttributes, transform) => {\n transform.channels.forEach(channel => {\n if (has(attributes, channel)) {\n clonedAttributes[channel] = attributes[channel];\n }\n });\n return clonedAttributes;\n }, {} as any);\n}\n\nexport const transformAttributes = (\n markType: MarkType | AttributeTransform[],\n nextAttrs: any,\n element: IElement,\n markName?: string\n) => {\n const graphicAttributes = {};\n const changedKeys = nextAttrs ? Object.keys(nextAttrs) : [];\n const transforms: AttributeTransform[] = isString(markType)\n ? transformsByType[markType]\n : (markType as AttributeTransform[]);\n\n if (transforms && transforms.length) {\n const tags: boolean[] = [];\n\n changedKeys.forEach(key => {\n let isTransformed = false;\n\n transforms.forEach((transform, index) => {\n if (transform.channels.includes(key)) {\n if (!tags[index]) {\n if (transform.storedAttrs) {\n const storedAttrs = storeOriginAttributes(\n transform.storedAttrs,\n transform.channels,\n graphicAttributes,\n nextAttrs,\n element,\n markName\n );\n transform.transform(graphicAttributes, nextAttrs, storedAttrs);\n } else {\n transform.transform(graphicAttributes, nextAttrs, null);\n }\n }\n // 记录一下,不重复处理\n tags[index] = true;\n isTransformed = true;\n }\n });\n\n if (!isTransformed) {\n if (commonAttributes.includes(key)) {\n transformCommonAttribute(graphicAttributes, key, nextAttrs);\n } else {\n graphicAttributes[key] = nextAttrs[key];\n }\n }\n });\n } else {\n changedKeys.forEach(key => {\n if (commonAttributes.includes(key)) {\n transformCommonAttribute(graphicAttributes, key, nextAttrs);\n } else {\n graphicAttributes[key] = nextAttrs[key];\n }\n });\n }\n\n return graphicAttributes;\n};\n","import isArray from './isArray';\nimport isFunction from './isFunction';\nimport isPlainObject from './isPlainObject';\n\nfunction objToString(obj: any) {\n return Object.prototype.toString.call(obj);\n}\n\nfunction objectKeys(obj: any) {\n return Object.keys(obj);\n}\n\n// Adapted from https://github.com/antvis/F2/blob/master/packages/f2/src/base/equal.ts by zengyue\n// License: https://github.com/antvis/F2/blob/master/packages/f2/LICENSE\nexport function isEqual(a: any, b: any, options?: { skipFunction?: boolean }): boolean {\n if (a === b) {\n return true;\n }\n\n if (typeof a !== typeof b) {\n return false;\n }\n\n // null 和 undefined\n if (a == null || b == null) {\n return false;\n }\n\n // 特殊处理NaN\n if (Number.isNaN(a) && Number.isNaN(b)) {\n return true;\n }\n\n if (objToString(a) !== objToString(b)) {\n return false;\n }\n\n // 如果是function,则不相等\n if (isFunction(a)) {\n return !!options?.skipFunction;\n }\n\n // 值类型,Number String Boolean\n if (typeof a !== 'object') {\n return false;\n }\n\n if (isArray(a)) {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = a.length - 1; i >= 0; i--) {\n if (!isEqual(a[i], b[i], options)) {\n return false;\n }\n }\n return true;\n }\n\n if (!isPlainObject(a)) {\n return false;\n }\n\n const ka = objectKeys(a);\n const kb = objectKeys(b);\n // having the same number of owned properties (keys incorporates hasOwnProperty)\n if (ka.length !== kb.length) {\n return false;\n }\n\n // the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n // ~~~cheap key test\n for (let i = ka.length - 1; i >= 0; i--) {\n // eslint-disable-next-line eqeqeq\n if (ka[i] != kb[i]) {\n return false;\n }\n }\n\n // equivalent values for every corresponding key, and ~~~possibly expensive deep test\n for (let i = ka.length - 1; i >= 0; i--) {\n const key = ka[i];\n if (!isEqual(a[key], b[key], options)) {\n return false;\n }\n }\n\n return true;\n}\n","const getType = value => ({}.toString.call(value).replace(/^\\[object /, \"\").replace(/]$/, \"\"));\n\nexport default getType;","const objectProto = Object.prototype;\n\nconst isPrototype = function (value: any): boolean {\n const Ctor = value && value.constructor;\n const proto = (typeof Ctor === 'function' && Ctor.prototype) || objectProto;\n return value === proto;\n};\n\nexport default isPrototype;\n","import isNil from './isNil';\nimport isArrayLike from './isArrayLike';\nimport getType from './getType';\nimport isPrototype from './isPrototype';\n\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction isEmpty(value: any): boolean {\n /**\n * isEmpty(null) => true\n * isEmpty() => true\n * isEmpty(true) => true\n * isEmpty(1) => true\n * isEmpty([1, 2, 3]) => false\n * isEmpty('abc') => false\n * isEmpty({ a: 1 }) => false\n */\n if (isNil(value)) {\n return true;\n }\n if (isArrayLike(value)) {\n return !value.length;\n }\n // TODO: 这里需要优化下\n const type = getType(value);\n if (type === 'Map' || type === 'Set') {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !Object.keys(value).length;\n }\n for (const key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nexport default isEmpty;\n","import { isObjectLike, isArray, isNil, isObject } from '@visactor/vutils';\n\nexport const isEqual = (key: string, current: any, target: any, deep: boolean = true) => {\n if (current === target) {\n return true;\n }\n\n // 如果有空值,则直接返回false,这里认为 null 和 undefined 相等\n if (isNil(current) || isNil(target)) {\n return isNil(current) && isNil(target);\n }\n\n // 非 object 类型直接比对\n if (!isObjectLike(current) && !isObjectLike(target)) {\n return current === target;\n }\n\n const c = isArray(current) ? current : current[key];\n const t = isArray(target) ? target : target[key];\n\n if (c === t) {\n return true;\n }\n if (deep === false) {\n return false;\n }\n // 类型必须相同\n if (isArray(t)) {\n if (isArray(c) && t.length === c.length && t.every((v, i) => v === c[i])) {\n return true;\n }\n return false;\n }\n // 类型必须相同\n if (isObject(t)) {\n if (isObject(c) && Object.keys(t).length === Object.keys(c).length && Object.keys(t).every(k => isEqual(k, t, c))) {\n return true;\n }\n return false;\n }\n return false;\n};\n","import { array } from '@visactor/vutils';\nimport type { IGrammarBase, IView, MarkFunctionType, ScaleEncodeType, FieldEncodeType } from '../types';\nimport { isGrammar, parseFunctionType } from './util';\n\nexport function isScaleEncode(encode: any): encode is ScaleEncodeType {\n return !!encode?.scale;\n}\n\nexport function isFieldEncode(encode: any): encode is FieldEncodeType {\n return !!encode?.field;\n}\n\nexport function parseEncodeType(encoder: MarkFunctionType | ScaleEncodeType, view: IView): IGrammarBase[] {\n if (!encoder) {\n return [];\n }\n let dependencies: IGrammarBase[] = [];\n if (encoder.scale) {\n if (isGrammar(encoder.scale)) {\n dependencies = [encoder.scale];\n } else {\n dependencies = array(view.getScaleById(encoder.scale) as IGrammarBase);\n }\n }\n return dependencies.concat(parseFunctionType(encoder, view));\n}\n","import { isNil, isNumber, isString } from '@visactor/vutils';\nimport { field as getFieldAccessor } from '@visactor/vgrammar-util';\nimport type { BaseSingleEncodeSpec, IElement, MarkElementItem } from '../../types';\nimport { isFieldEncode, isScaleEncode } from '../../parse/mark';\nimport { getGrammarOutput, invokeFunctionType, isFunctionType } from '../../parse/util';\nimport { isPositionOrSizeChannel } from '../attributes/helpers';\nimport { GrammarMarkType } from '../enums';\nimport { Factory } from '../../core/factory';\n\n/**\n * invoke encoder for multiple items\n */\nexport function invokeEncoderToItems(\n element: IElement,\n items: MarkElementItem[],\n encoder: BaseSingleEncodeSpec,\n parameters: any,\n onlyFullEncodeFirst?: boolean\n) {\n if (!encoder) {\n return;\n }\n\n if (isFunctionType(encoder)) {\n items.forEach(item => {\n const attributes = invokeFunctionType(encoder, parameters, item.datum, element);\n Object.assign(item.nextAttrs, attributes);\n });\n } else {\n Object.keys(encoder).forEach(channel => {\n const encode = encoder[channel];\n const encodeItems =\n onlyFullEncodeFirst && !isPositionOrSizeChannel(element.mark.markType, channel) ? [items[0]] : items;\n\n if (isScaleEncode(encode)) {\n const scale = getGrammarOutput(encode.scale, parameters);\n const offset = encode?.offset ?? 0;\n const bandOffset = !isNil(encode.band) && scale.bandwidth ? scale.bandwidth() * encode.band : null;\n const hasField = isString(encode?.field);\n const fieldAccessor = hasField ? getFieldAccessor(encode.field) : null;\n\n let to = hasField ? null : !isNil(encode?.value) ? scale.scale?.(encode.value) : 0;\n\n encodeItems.forEach(item => {\n if (hasField) {\n to = scale.scale?.(fieldAccessor(item.datum));\n }\n item.nextAttrs[channel] = isNumber(to) || isNumber(bandOffset) ? to + offset + bandOffset : to;\n });\n } else if (isFieldEncode(encode)) {\n const fieldAccessor = getFieldAccessor(encode.field);\n\n encodeItems.forEach(item => {\n item.nextAttrs[channel] = fieldAccessor(item.datum);\n });\n } else {\n encodeItems.forEach(item => {\n item.nextAttrs[channel] = invokeFunctionType(encode, parameters, item.datum, element);\n });\n }\n });\n }\n}\n\n/**\n * invoke encoder for single item\n * use invokeEncoderToItems instead if item amount is large\n */\nexport function invokeEncoder(encoder: BaseSingleEncodeSpec, datum: any, element: IElement, parameters: any) {\n if (!encoder) {\n return null;\n }\n if (isFunctionType(encoder)) {\n return invokeFunctionType(encoder, parameters, datum, element);\n }\n const attributes: any = {};\n Object.keys(encoder).forEach(channel => {\n const encode = encoder[channel];\n\n if (isScaleEncode(encode)) {\n const scale = getGrammarOutput(encode.scale, parameters);\n const offset = encode?.offset ?? 0;\n const bandOffset = !isNil(encode.band) && scale.bandwidth ? scale.bandwidth() * encode.band : null;\n const hasField = isString(encode?.field);\n const fieldAccessor = hasField ? getFieldAccessor(encode.field) : null;\n const to = hasField\n ? scale.scale?.(fieldAccessor(datum))\n : !isNil(encode?.value)\n ? scale.scale?.(encode.value)\n : 0;\n\n attributes[channel] = isNumber(to) || isNumber(bandOffset) ? to + offset + bandOffset : to;\n } else if (isFieldEncode(encode)) {\n const fieldAccessor = getFieldAccessor(encode.field);\n attributes[channel] = fieldAccessor(datum);\n } else {\n attributes[channel] = invokeFunctionType(encode, parameters, datum, element);\n }\n });\n return attributes;\n}\n\nexport function splitEncoderInLarge(markType: string, encoder: BaseSingleEncodeSpec, glyphType?: string) {\n // function encoder can not be splitted\n if (isFunctionType(encoder)) {\n return { themeEncoder: {}, positionEncoder: encoder };\n }\n\n const themeEncoder = {};\n const positionEncoder = {};\n\n if (markType === GrammarMarkType.glyph && Factory.getGlyph(glyphType)) {\n const glyphMeta = Factory.getGlyph(glyphType);\n const progressiveChannels = glyphMeta.getProgressiveChannels();\n if (progressiveChannels) {\n Object.keys(encoder).forEach(channel => {\n if (progressiveChannels.includes(channel)) {\n positionEncoder[channel] = encoder[channel];\n } else {\n themeEncoder[channel] = encoder[channel];\n }\n });\n } else {\n const markTypes: string[] = Array.from(new Set(Object.values(glyphMeta.getMarks())));\n Object.keys(encoder).forEach(channel => {\n if (markTypes.some(type => isPositionOrSizeChannel(type, channel))) {\n positionEncoder[channel] = encoder[channel];\n } else {\n themeEncoder[channel] = encoder[channel];\n }\n });\n }\n } else {\n Object.keys(encoder).forEach(channel => {\n if (isPositionOrSizeChannel(markType, channel)) {\n positionEncoder[channel] = encoder[channel];\n } else {\n themeEncoder[channel] = encoder[channel];\n }\n });\n }\n\n return { positionEncoder, themeEncoder };\n}\n","import type { IColor, IColorStop } from '@visactor/vrender-core';\nimport { isNil, isString } from '@visactor/vutils';\nimport { transformAttributes } from './transform';\nimport { GrammarMarkType } from '../enums';\nimport type { IElement } from '../../types';\n\nconst isStopsEqual = (prev: IColorStop[], next: IColorStop[]) => {\n if (prev === next) {\n return true;\n }\n const prevLength = (prev && prev.length) ?? 0;\n const nextLength = (next && next.length) ?? 0;\n\n if (prevLength !== nextLength || prevLength === 0) {\n return false;\n }\n\n return prev.every((prevEntry, prevIndex) => {\n return (\n (!prevEntry && !next[prevIndex]) ||\n (prevEntry &&\n next[prevIndex] &&\n prevEntry.color === next[prevIndex].color &&\n prevEntry.offset === next[prevIndex].offset)\n );\n });\n};\n\nconst isColorAttrEqual = (prev: IColor, next: IColor) => {\n if (prev === next) {\n return true;\n }\n\n if (typeof prev !== typeof next) {\n return false;\n }\n\n if (isString(prev)) {\n return false;\n }\n\n if (prev.gradient !== (next as any).gradient) {\n return false;\n }\n\n const prevKeys = Object.keys(prev);\n const nextKeys = Object.keys(next);\n\n if (prevKeys.length !== nextKeys.length) {\n return false;\n }\n\n return prevKeys.every(key => {\n if (key === 'stops') {\n return isStopsEqual(prev[key], next[key]);\n }\n\n return prev[key] === next[key];\n });\n};\n\nconst isLineDashEqual = (prev: number[], next: number[]) => {\n if (prev.length !== next.length) {\n return false;\n }\n\n if (prev.join('-') === next.join('-')) {\n return true;\n }\n\n return false;\n};\n\nconst isSegmentAttrEqual = (prev: any, next: any, key: string) => {\n if (isNil(prev) && isNil(next)) {\n return true;\n }\n\n if (isNil(prev)) {\n return false;\n }\n\n if (isNil(next)) {\n return false;\n }\n\n if (key === 'lineDash') {\n return isLineDashEqual(prev, next);\n }\n\n if (key === 'stroke' || key === 'fill') {\n return isColorAttrEqual(prev, next);\n }\n\n return prev === next;\n};\n\nconst fillAttrs = ['fill', 'fillOpacity', 'background', 'texture', 'texturePadding', 'textureSize', 'textureColor'];\nconst strokeAttrs = [\n 'stroke',\n 'strokeOpacity',\n 'lineDash',\n 'lineDashOffset',\n 'lineCap',\n 'lineJoin',\n 'lineWidth',\n 'miterLimit'\n];\nconst areaAttrs = fillAttrs.concat(strokeAttrs);\n\n/**\n * 生成用于渲染的点数组\n * @param {*} item\n * @returns {IPointLike[]}\n */\nexport function getLineSegmentConfigs(items: any[], points: any[], element?: IElement) {\n if (!items || items.length <= 1) {\n return null;\n }\n\n const checkAttributes = element?.mark?.markType === 'area' ? areaAttrs : strokeAttrs;\n\n const segments: any[] = [];\n let prevSegmentAttrs: any = null;\n\n items.forEach((item, index) => {\n if (\n !prevSegmentAttrs ||\n !checkAttributes.every(key => {\n return isSegmentAttrEqual(prevSegmentAttrs[key], item[key], key);\n })\n ) {\n if (segments.length) {\n segments[segments.length - 1].endIndex = index;\n }\n\n prevSegmentAttrs = item;\n segments.push({\n attrs: prevSegmentAttrs,\n startIndex: index\n });\n }\n });\n\n if (segments.length >= 2) {\n return segments.map(entry => {\n const res = transformAttributes(GrammarMarkType.line, parseCollectionMarkAttributes(entry.attrs), element) as any;\n\n res.points = points.slice(entry.startIndex, isNil(entry.endIndex) ? points.length : entry.endIndex);\n return res;\n });\n }\n\n return null;\n}\n\nexport function getLinePointsFromSegments(segments: any[]) {\n if (!segments) {\n return null;\n }\n return segments.reduce((points, segment) => {\n return points.concat(segment.points);\n }, []);\n}\n\nexport function parseCollectionMarkAttributes(itemNextAttrs: any) {\n const result = {};\n\n if (!itemNextAttrs) {\n return result;\n }\n\n Object.keys(itemNextAttrs).forEach(key => {\n if (\n key === 'x' ||\n key === 'y' ||\n key === 'x1' ||\n key === 'y1' ||\n key === 'defined' ||\n key === 'size' ||\n key === 'width' ||\n key === 'height' ||\n key === 'context'\n ) {\n return;\n }\n result[key] = itemNextAttrs[key];\n });\n\n return result;\n}\n","import type { IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n array,\n has,\n isBoolean,\n isNil,\n isFunction,\n isString,\n isArray,\n get,\n isEmpty,\n isEqual as isObjEqual\n} from '@visactor/vutils';\nimport { isEqual } from '@visactor/vgrammar-util';\nimport type { IBaseCoordinate } from '@visactor/vgrammar-coordinate';\nimport { BridgeElementKey } from './constants';\nimport { DiffState, HOOK_EVENT, GrammarMarkType, BuiltInEncodeNames } from './enums';\nimport { invokeEncoderToItems } from './mark/encode';\nimport { removeGraphicItem } from './util/graphic';\nimport { transformAttributes } from './attributes/transform';\nimport {\n getLargeRectsPoints,\n getLargeSymbolsPoints,\n getLinePoints,\n isValidPointsChannel,\n isPointsMarkType\n} from './attributes/helpers';\nimport { getLineSegmentConfigs, getLinePointsFromSegments, parseCollectionMarkAttributes } from './attributes/line';\nimport type {\n BaseEncodeSpec,\n BaseSingleEncodeSpec,\n IElement,\n IMark,\n IMarkConfig,\n MarkElementItem,\n MarkFunctionType,\n MarkKeySpec,\n MarkSpec,\n MarkType,\n StateProxyEncodeSpec\n} from '../types';\nimport type { IGraphic, ILine, IGraphicAttribute } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { CustomPath2D } from '@visactor/vrender-core';\nimport { invokeFunctionType, parseField } from '../parse/util';\n\nexport class Element implements IElement {\n mark: IMark;\n\n key: string;\n groupKey?: string;\n data: any[] = null;\n\n states: string[] = [];\n\n diffState: DiffState = DiffState.enter;\n // Element should be reserved as long as it need to animate\n isReserved: boolean = false;\n\n runtimeStatesEncoder: BaseEncodeSpec = null;\n\n protected graphicItem: IGraphic;\n\n // hack before vRender refactoring\n items: MarkElementItem[] = [];\n\n constructor(mark: IMark) {\n this.mark = mark;\n }\n\n initGraphicItem(attributes: any = {}) {\n if (this.graphicItem) {\n return;\n }\n // 统一读取mark中是否可交互的配置\n const attrTransforms = this.mark.getAttributeTransforms();\n\n this.graphicItem = this.mark.addGraphicItem(\n attrTransforms ? transformAttributes(attrTransforms, attributes, this) : attributes,\n this.groupKey\n );\n\n if (!this.graphicItem) {\n return;\n }\n // 统一读取mark中是否可交互的配置\n this.graphicItem[BridgeElementKey] = this;\n if (attrTransforms) {\n this.graphicItem.onBeforeAttributeUpdate = (attributes: any) => {\n // mark might be released\n if (!this.mark) {\n return attributes;\n }\n const graphicAttributes = transformAttributes(attrTransforms, attributes, this);\n return graphicAttributes;\n };\n }\n\n // transform initial attributes\n this.clearGraphicAttributes();\n if (this.mark.needAnimate()) {\n this.setPrevGraphicAttributes(null);\n this.setNextGraphicAttributes(attributes);\n this.setFinalGraphicAttributes(attributes);\n }\n }\n\n updateGraphicItem(config: IMarkConfig) {\n if (!this.graphicItem) {\n return;\n }\n\n if (!isNil(config.clip)) {\n this.graphicItem.setAttribute('clip', config.clip);\n }\n if (!isNil(config.interactive)) {\n this.graphicItem.setAttribute('pickable', config.interactive);\n }\n if (!isNil(config.zIndex)) {\n this.graphicItem.setAttribute('zIndex', config.zIndex);\n }\n if (this.diffState === DiffState.exit) {\n (this.graphicItem as any).releaseStatus = 'willRelease';\n } else {\n (this.graphicItem as any).releaseStatus = undefined;\n }\n\n const stateAnimation = this.mark.animate.getAnimationConfigs('state');\n if (stateAnimation.length !== 0) {\n (this.graphicItem as any).stateAnimateConfig = stateAnimation[0].originConfig;\n }\n }\n\n getGraphicItem() {\n return this.graphicItem;\n }\n\n removeGraphicItem() {\n // stop all animation when releasing including normal animation & morphing animation\n if (this.graphicItem) {\n this.graphicItem.animates?.forEach?.(animate => animate.stop());\n }\n\n if (this.graphicItem) {\n removeGraphicItem(this.graphicItem);\n this.graphicItem[BridgeElementKey] = null;\n this.graphicItem = null;\n }\n }\n\n resetGraphicItem() {\n if (this.graphicItem) {\n this.graphicItem = null;\n }\n }\n\n getBounds() {\n // FIXME: 没有更新 bounds 时拿到的 bound 可能为 null\n return this.graphicItem?.AABBBounds;\n }\n\n getStates() {\n return this.states;\n }\n\n updateData(groupKey: string | null, data: any[], key: MarkKeySpec) {\n this.mark.emit(HOOK_EVENT.BEFORE_ELEMENT_UPDATE_DATA, { groupKey, data, key }, this);\n this.data = data;\n const keyGetter = parseField(key);\n this.items = data.map(datum => {\n const key = keyGetter(datum);\n const item = {\n datum,\n key,\n view: this.mark.view,\n nextAttrs: {}\n };\n\n return item;\n });\n\n this.groupKey = groupKey;\n this.key = this.mark.isCollectionMark() ? groupKey : this.items?.[0].key;\n\n this.mark.emit(HOOK_EVENT.AFTER_ELEMENT_UPDATE_DATA, { groupKey, data, key }, this);\n return this.items;\n }\n\n state(markState: MarkFunctionType, parameters?: any) {\n const isCollectionMark = this.mark.isCollectionMark();\n\n const prevStateValues = this.states;\n const newStateValues = array(invokeFunctionType(markState, parameters, this.getDatum(), this));\n const stateSort = this.mark.getSpec()?.stateSort;\n\n if (stateSort) {\n stateSort.sort(stateSort);\n }\n\n const isStateChanged =\n newStateValues.length !== prevStateValues.length ||\n newStateValues.some((newState: string, index: number) => newState !== prevStateValues[index]);\n this.states = newStateValues;\n\n // early logic didn't handle collection mark, only update signal mark state for now\n if (!isCollectionMark && isStateChanged && this.diffState === DiffState.unChange) {\n this.diffState = DiffState.update;\n }\n }\n\n encodeGraphic(attrs?: any) {\n this.coordinateTransformEncode(this.items);\n\n const graphicAttributes = this.transformElementItems(this.items, this.mark.markType);\n\n if (attrs) {\n if (this.mark.isCollectionMark()) {\n // todo `defined` should not be a channel in line/area\n delete attrs.defined;\n }\n\n Object.assign(graphicAttributes, attrs);\n }\n\n if (!this.graphicItem) {\n this.initGraphicItem(graphicAttributes);\n } else {\n this.graphicItem.clearStates();\n // 更新数据流后,states计算不缓存\n this.graphicItem.states = {};\n this.graphicItem.stateProxy = null;\n\n this.applyGraphicAttributes(graphicAttributes);\n }\n\n if ((this.diffState === DiffState.enter || this.diffState === DiffState.update) && this.states.length) {\n this.useStates(this.states);\n }\n\n if (this.mark.markType === GrammarMarkType.shape) {\n // FIXME: shape需要拿到原始数据进行编码,暂时把数据绑定到graphicItem上,看后续graphicItem是否需要支持数据绑定\n (this.graphicItem as any).datum = this.items[0].datum;\n }\n\n // clear item attributes\n this.items.forEach(item => {\n item.nextAttrs = {};\n });\n this._setCustomizedShape();\n }\n\n private _setCustomizedShape() {\n if (!this.graphicItem) {\n return;\n }\n const setCustomizedShape = this.mark.getSpec()?.setCustomizedShape;\n\n if (!setCustomizedShape) {\n return;\n }\n\n this.graphicItem.pathProxy = (attrs: Partial) => {\n return setCustomizedShape(this.data, attrs, new CustomPath2D());\n };\n }\n\n encodeItems(items: MarkElementItem[], encoders: BaseEncodeSpec, isReentered: boolean = false, parameters?: any) {\n const isCollectionMark = this.mark.isCollectionMark();\n // marshall encoder functions\n const updateEncoder = encoders[BuiltInEncodeNames.update];\n const enterEncoder = encoders[BuiltInEncodeNames.enter];\n const exitEncoder = encoders[BuiltInEncodeNames.exit];\n const onlyFullEncodeFirst = this.mark.isLargeMode() || (isCollectionMark && !this.mark.getSpec().enableSegments);\n\n if (this.diffState === DiffState.enter) {\n if (enterEncoder) {\n invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst);\n }\n if (updateEncoder) {\n invokeEncoderToItems(this, items, updateEncoder, parameters, onlyFullEncodeFirst);\n }\n } else if (this.diffState === DiffState.update) {\n // if mark is reentered or mark is collection type, evaluate enter encode\n if ((isCollectionMark && enterEncoder) || isReentered) {\n invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst);\n }\n if (updateEncoder) {\n invokeEncoderToItems(this, items, updateEncoder, parameters, onlyFullEncodeFirst);\n }\n } else if (this.diffState === DiffState.exit && exitEncoder) {\n // if mark is reentered, evaluate enter encode\n if (isReentered) {\n invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst);\n }\n invokeEncoderToItems(this, items, exitEncoder, parameters, onlyFullEncodeFirst);\n }\n }\n\n protected coordinateTransformEncode(items: MarkElementItem[]) {\n if (!this.mark.coord || this.mark.markType === 'arc' || this.mark.disableCoordinateTransform === true) {\n return;\n }\n const coord = this.mark.coord.output() as IBaseCoordinate;\n\n items.forEach(item => {\n const nextAttrs = item.nextAttrs;\n const convertedPoint: IPointLike = coord.convert(nextAttrs);\n Object.assign(nextAttrs, convertedPoint);\n });\n }\n\n clearStates(hasAnimation?: boolean) {\n const stateAnimationEnable = isBoolean(hasAnimation)\n ? hasAnimation\n : this.mark.animate.getAnimationConfigs('state').length !== 0;\n\n this.states = [];\n\n if (this.graphicItem) {\n this.graphicItem.clearStates(stateAnimationEnable);\n }\n\n if (this.runtimeStatesEncoder) {\n this.runtimeStatesEncoder = {};\n }\n }\n\n private _updateRuntimeStates(state: string, attrs: any) {\n if (!this.runtimeStatesEncoder) {\n this.runtimeStatesEncoder = {};\n }\n\n this.runtimeStatesEncoder[state] = attrs;\n }\n\n hasState(state: string) {\n return this.states && state && this.states.includes(state);\n }\n\n addState(state: string | string[], attrs?: BaseSingleEncodeSpec) {\n if (!this.graphicItem) {\n return false;\n }\n\n const isRuntimeStateUpdate = attrs && isString(state) && !isObjEqual(attrs, this.runtimeStatesEncoder?.[state]);\n if (isRuntimeStateUpdate) {\n const nextStates = this.states.slice();\n if (!nextStates.includes(state)) {\n nextStates.push(state);\n } else {\n this.graphicItem.clearStates();\n }\n this._updateRuntimeStates(state, attrs);\n\n this.useStates(nextStates);\n return true;\n }\n\n const encode = (this.mark.getSpec() as MarkSpec).encode;\n const states = array(state);\n const nextStates = states.reduce((nextStates: string[], stateName: string) => {\n if (stateName && !nextStates.includes(stateName) && encode?.[stateName]) {\n nextStates.push(stateName);\n }\n return nextStates;\n }, this.states.slice());\n\n if (nextStates.length !== this.states.length) {\n this.useStates(nextStates);\n\n return true;\n }\n\n return false;\n }\n\n removeState(state: string | string[]) {\n if (!this.graphicItem) {\n return false;\n }\n\n const states = array(state);\n\n if (!states.length) {\n return false;\n }\n\n const nextStates = this.states.filter(state => !states.includes(state));\n if (nextStates.length === this.states.length) {\n return false;\n }\n\n if (this.runtimeStatesEncoder) {\n states.forEach(state => {\n this.runtimeStatesEncoder[state] = null;\n });\n }\n this.useStates(nextStates);\n\n return true;\n }\n\n protected getStateAttrs = (stateName: string, nextStates: string[]) => {\n const isRuntimeState = !isNil(this.runtimeStatesEncoder?.[stateName]);\n const encoder = isRuntimeState\n ? this.runtimeStatesEncoder[stateName]\n : (this.mark.getSpec() as MarkSpec).encode?.[stateName];\n\n if (!encoder) {\n return {};\n }\n\n if (isFunction(encoder)) {\n return (encoder as StateProxyEncodeSpec)(this.getDatum(), this, stateName, nextStates);\n }\n\n if (!isRuntimeState && this.graphicItem.states?.[stateName]) {\n return this.graphicItem.states[stateName];\n }\n\n const stateItems = this.items.map(item => Object.assign({}, item, { nextAttrs: {} }));\n // collection图元,暂时不支持在state更新中,支持更新points更新\n invokeEncoderToItems(this, stateItems, encoder, (this.mark as any).parameters());\n\n const graphicAttributes = this.transformElementItems(stateItems, this.mark.markType);\n\n if (!this.graphicItem.states) {\n this.graphicItem.states = { [stateName]: graphicAttributes };\n } else if (!this.graphicItem.states[stateName]) {\n this.graphicItem.states[stateName] = graphicAttributes;\n }\n\n return graphicAttributes;\n };\n\n useStates(states: string[], hasAnimation?: boolean) {\n if (!this.graphicItem) {\n return false;\n }\n this.mark.emit(HOOK_EVENT.BEFORE_ELEMENT_STATE, { states }, this);\n\n const stateSort = this.mark.getSpec()?.stateSort;\n\n if (stateSort) {\n states.sort(stateSort);\n }\n this.states = states;\n\n const stateAnimationEnable = isBoolean(hasAnimation)\n ? hasAnimation\n : this.mark.animate.getAnimationConfigs('state').length !== 0;\n\n this.graphicItem.stateProxy = this.getStateAttrs;\n this.graphicItem.useStates(this.states, stateAnimationEnable);\n\n this.mark.emit(HOOK_EVENT.AFTER_ELEMENT_STATE, { states }, this);\n\n return true;\n }\n\n protected diffAttributes(graphicAttributes: { [channel: string]: any }) {\n const diffResult = {};\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n for (const key in graphicAttributes) {\n if (!isEqual(key, finalGraphicAttributes, graphicAttributes) || !has(finalGraphicAttributes, key)) {\n diffResult[key] = graphicAttributes[key];\n }\n }\n return diffResult;\n }\n\n /**\n * tranform the attribute to graphic attribute\n * @param items\n * @param markType In ordinary, markType is equal to mark.markType, but in glyph, markType is different from mark.markType\n * @param markName\n * @param computePoints\n * @returns\n */\n transformElementItems(items: MarkElementItem[], markType: MarkType, computePoints?: boolean): Record {\n const item = items[0];\n\n if (!item.nextAttrs || Object.keys(item.nextAttrs).length === 0) {\n return {};\n }\n\n let nextAttrs = item.nextAttrs;\n\n if (\n isPointsMarkType(markType) &&\n items &&\n items.length &&\n isNil(item.nextAttrs?.points) &&\n (computePoints === true || isValidPointsChannel(Object.keys(item.nextAttrs), this.mark.markType))\n ) {\n const lastPoints = this.getGraphicAttribute('points', false);\n const lastSegments = this.getGraphicAttribute('segments', false);\n const enableSegments = this.mark.getSpec().enableSegments;\n const itemNextAttrs = items.map(item => item.nextAttrs);\n const isProgressive = this.mark.isProgressive();\n nextAttrs = parseCollectionMarkAttributes(nextAttrs);\n\n if (markType === GrammarMarkType.line || markType === GrammarMarkType.area) {\n const linePoints = getLinePoints(items, true, lastPoints, markType === GrammarMarkType.area);\n\n // chartspace新增了配置,用于开启线段解析;渐进渲染状态不支持线段样式\n if (enableSegments && !isProgressive) {\n const points = !linePoints || linePoints.length === 0 ? getLinePointsFromSegments(lastSegments) : linePoints;\n const segments = getLineSegmentConfigs(itemNextAttrs, points, this);\n\n if (segments) {\n nextAttrs.segments = segments;\n nextAttrs.points = null;\n } else {\n nextAttrs.segments = null;\n nextAttrs.points = points;\n }\n } else if (isProgressive) {\n nextAttrs.segments = ((this.graphicItem as ILine)?.attribute?.segments ?? []).concat([\n { points: linePoints }\n ]);\n } else {\n nextAttrs.points = linePoints;\n nextAttrs.segments = null;\n }\n } else if (markType === GrammarMarkType.largeRects) {\n nextAttrs.points = getLargeRectsPoints(items, true, lastPoints);\n } else if (markType === GrammarMarkType.largeSymbols) {\n nextAttrs.points = getLargeSymbolsPoints(items, true, lastPoints);\n }\n }\n\n return nextAttrs;\n }\n\n protected applyGraphicAttributes(graphicAttributes: any) {\n if (isEmpty(graphicAttributes)) {\n return;\n }\n\n if (this.mark.needAnimate()) {\n // If mark need animate, diff attributes.\n const nextGraphicAttributes = this.diffAttributes(graphicAttributes);\n const prevGraphicAttributes = this.getPrevGraphicAttributes() ?? {};\n const finalGraphicAttributes = this.getFinalGraphicAttributes() ?? {};\n\n Object.keys(nextGraphicAttributes).forEach(channel => {\n prevGraphicAttributes[channel] = this.getGraphicAttribute(channel);\n finalGraphicAttributes[channel] = nextGraphicAttributes[channel];\n });\n this.setNextGraphicAttributes(nextGraphicAttributes);\n this.setPrevGraphicAttributes(prevGraphicAttributes);\n this.setFinalGraphicAttributes(finalGraphicAttributes);\n\n const currentAnimators = this.mark.animate.getElementAnimators(this);\n const animateGraphicAttributes = currentAnimators.reduce((attributes, animator) => {\n return Object.assign(attributes, animator.getEndAttributes());\n }, {});\n const currentGraphicAttributes = Object.assign({}, animateGraphicAttributes, finalGraphicAttributes);\n\n // Apply next attributes to current graphic item immediately.\n // Scene graph tree should be handled like no animation exists in dataflow procedure.\n this.graphicItem.setAttributes(currentGraphicAttributes);\n } else {\n // Otherwise, directly apply all attributes.\n this.graphicItem.setAttributes(graphicAttributes);\n }\n }\n\n getGraphicAttribute(channel: string, prev: boolean = false) {\n if (!this.graphicItem) {\n return undefined;\n }\n\n if (prev) {\n let value: any;\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n if (!isNil((value = get(prevGraphicAttributes, channel)))) {\n return value;\n }\n }\n\n // get attribute before transformed\n const trans = this.mark.getAttributeTransforms();\n let getKey: string[] = [channel];\n if (trans && trans.length) {\n const channelTransform = trans.find(entry => {\n return entry.storedAttrs && entry.channels.includes(channel);\n });\n\n if (channelTransform) {\n getKey = [channelTransform.storedAttrs, channel];\n }\n }\n return get(this.graphicItem?.attribute, getKey);\n }\n\n setGraphicAttribute(channel: string, value: any, final: boolean = true) {\n if (!this.graphicItem) {\n return;\n }\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n\n if (final && finalGraphicAttributes) {\n finalGraphicAttributes[channel] = value;\n }\n if (prevGraphicAttributes && !has(prevGraphicAttributes, channel)) {\n prevGraphicAttributes[channel] = this.graphicItem.attribute[channel];\n }\n\n this.graphicItem.setAttribute(channel, value);\n }\n\n setGraphicAttributes(attributes: { [channel: string]: any }, final: boolean = true) {\n if (!this.graphicItem) {\n return;\n }\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n\n Object.keys(attributes).forEach(key => {\n if (finalGraphicAttributes && final) {\n finalGraphicAttributes[key] = attributes[key];\n }\n if (prevGraphicAttributes && !has(prevGraphicAttributes, key)) {\n prevGraphicAttributes[key] = this.graphicItem.attribute[key];\n }\n });\n\n this.graphicItem.setAttributes(attributes);\n }\n\n /**\n * 获取 vRender 已变更的视觉通道属性,只应当由 VGrammar 中 调用\n * @returns 视觉通道键值对\n */\n getFinalGraphicAttributes() {\n return (this.graphicItem as any).finalAttrs;\n }\n\n protected setFinalGraphicAttributes(attributes: { [channel: string]: any }) {\n (this.graphicItem as any).finalAttrs = attributes;\n }\n\n /**\n * 获取 vRender 变更前的视觉通道属性,只应当由 VGrammar 调用\n * @returns 视觉通道键值对\n */\n getPrevGraphicAttributes() {\n return (this.graphicItem as any).prevAttrs;\n }\n\n protected setPrevGraphicAttributes(attributes: { [channel: string]: any }) {\n (this.graphicItem as any).prevAttrs = attributes;\n }\n\n /**\n * 获取 vRender 在单次 dataflow 中变更的视觉通道属性,只应当由 VGrammar 调用\n * @returns 视觉通道键值对\n */\n getNextGraphicAttributes() {\n return (this.graphicItem as any).nextAttrs;\n }\n\n protected setNextGraphicAttributes(attributes: { [channel: string]: any }) {\n (this.graphicItem as any).nextAttrs = attributes;\n }\n\n clearChangedGraphicAttributes() {\n if (this.graphicItem) {\n this.setPrevGraphicAttributes(null);\n this.setNextGraphicAttributes(null);\n }\n }\n\n clearGraphicAttributes() {\n if (this.graphicItem) {\n (this.graphicItem as any).prevAttrs && this.setPrevGraphicAttributes(null);\n (this.graphicItem as any).nextAttrs && this.setNextGraphicAttributes(null);\n (this.graphicItem as any).finalAttrs && this.setFinalGraphicAttributes(null);\n }\n }\n\n remove() {\n if (this.graphicItem) {\n removeGraphicItem(this.graphicItem);\n this.graphicItem = null;\n }\n }\n\n release() {\n this.removeGraphicItem();\n this.mark = null;\n this.data = null;\n this.items = null;\n }\n /**\n * hack support for transform & encode logic. DO NOT USE.\n */\n getItemAttribute(channel?: string) {\n if (!this.items?.length) {\n return;\n }\n\n if (this.mark.isCollectionMark()) {\n return isNil(channel)\n ? this.items.map(item => item.nextAttrs)\n : this.items.map(item => item.nextAttrs?.[channel]);\n }\n\n return isNil(channel) ? this.items[0].nextAttrs : this.items[0].nextAttrs?.[channel];\n }\n setItemAttributes(attributes: { [channel: string]: any } | any[]) {\n if (!this.items?.length) {\n return;\n }\n\n if (this.mark.isCollectionMark()) {\n if (isArray(attributes)) {\n this.items.forEach((item, index) => {\n Object.assign(item.nextAttrs, attributes[index]);\n });\n }\n } else {\n Object.assign(this.items[0].nextAttrs, attributes);\n }\n }\n /**\n * hack support for transform & encode logic. DO NOT USE.\n */\n getItem() {\n return this.mark.isCollectionMark() ? this.items ?? [] : this.items?.[0];\n }\n getDatum() {\n return this.mark.isCollectionMark() ? this.data ?? [] : this.data?.[0];\n }\n}\n","import { has, isNil, isBoolean, isFunction } from '@visactor/vutils';\nimport { isEqual } from '@visactor/vgrammar-util';\nimport type {\n IGlyphElement,\n IGlyphMark,\n MarkElementItem,\n MarkSpec,\n IGlyphMeta,\n MarkType,\n StateProxyEncodeSpec\n} from '../types';\nimport { cloneTransformAttributes, transformAttributes } from './attributes/transform';\nimport { BridgeElementKey, CollectionMarkType } from './constants';\nimport { DiffState, HOOK_EVENT, GrammarMarkType } from './enums';\nimport { Element } from './element';\nimport { invokeEncoderToItems } from './mark/encode';\nimport type { IGraphicAttribute, IGlyph } from '@visactor/vrender-core';\n\nexport class GlyphElement extends Element implements IGlyphElement {\n declare graphicItem: IGlyph;\n\n declare mark: IGlyphMark;\n protected glyphGraphicItems: { [markName: string]: any };\n\n private glyphMeta: IGlyphMeta;\n\n constructor(mark: IGlyphMark) {\n super(mark);\n this.glyphMeta = this.mark.getGlyphMeta();\n }\n\n getGlyphGraphicItems() {\n return this.glyphGraphicItems;\n }\n\n initGraphicItem(attributes: any = {}) {\n if (this.graphicItem) {\n return;\n }\n\n this.graphicItem = this.mark.addGraphicItem(attributes, this.groupKey) as IGlyph;\n this.graphicItem[BridgeElementKey] = this;\n this.graphicItem.onBeforeAttributeUpdate = this._onGlyphAttributeUpdate(false);\n\n const glyphMarks = this.glyphMeta.getMarks();\n this.glyphGraphicItems = {};\n this.graphicItem.getSubGraphic().forEach((graphic: any) => {\n const markType = glyphMarks[graphic.name];\n this.glyphGraphicItems[graphic.name] = graphic;\n graphic.onBeforeAttributeUpdate = (attributes: any) => {\n // mark might be released\n if (!this.mark) {\n return attributes;\n }\n const graphicAttributes = transformAttributes(markType, attributes, this, graphic.name);\n return graphicAttributes;\n };\n });\n\n this.clearGraphicAttributes();\n }\n\n useStates(states: string[], hasAnimation?: boolean) {\n if (!this.graphicItem) {\n return false;\n }\n this.mark.emit(HOOK_EVENT.BEFORE_ELEMENT_STATE, { states }, this);\n\n this.states = states.slice();\n\n const stateAnimationEnable = isBoolean(hasAnimation)\n ? hasAnimation\n : this.mark.animate.getAnimationConfigs('state').length !== 0;\n\n this.graphicItem.glyphStateProxy = this.getStateAttrs;\n this.graphicItem.useStates(this.states, stateAnimationEnable);\n\n this.mark.emit(HOOK_EVENT.AFTER_ELEMENT_STATE, { states }, this);\n\n return true;\n }\n\n protected getStateAttrs = (stateName: string, nextStates: string[]) => {\n const isRuntimeState = !isNil(this.runtimeStatesEncoder?.[stateName]);\n const encoder = isRuntimeState\n ? this.runtimeStatesEncoder[stateName]\n : (this.mark.getSpec() as MarkSpec).encode?.[stateName];\n\n const glyphStateAttributes = {} as {\n attributes: Partial;\n subAttributes: Partial[];\n };\n\n if (!encoder) {\n return glyphStateAttributes;\n }\n\n if (isFunction(encoder)) {\n glyphStateAttributes.attributes = (encoder as StateProxyEncodeSpec)(this.getDatum(), this, stateName, nextStates);\n return glyphStateAttributes;\n }\n\n if (!isRuntimeState && this.graphicItem.glyphStates?.[stateName]) {\n return this.graphicItem.glyphStates[stateName];\n }\n\n if (encoder) {\n const item = this.items[0];\n const targetItems = [Object.assign({}, item, { nextAttrs: {} })];\n\n invokeEncoderToItems(this, targetItems, encoder, (this.mark as any).parameters());\n this.coordinateTransformEncode(targetItems);\n\n glyphStateAttributes.attributes = targetItems[0].nextAttrs;\n\n if (!this.graphicItem.glyphStates) {\n this.graphicItem.glyphStates = { [stateName]: glyphStateAttributes };\n } else if (!this.graphicItem.glyphStates[stateName]) {\n this.graphicItem.glyphStates[stateName] = glyphStateAttributes;\n }\n\n return glyphStateAttributes;\n }\n\n return glyphStateAttributes;\n };\n\n encodeGraphic() {\n this.coordinateTransformEncode(this.items);\n const graphicAttributes = this.transformElementItems(this.items, this.mark.markType);\n\n if (!this.graphicItem) {\n this.initGraphicItem();\n }\n\n if (this.diffState === DiffState.enter) {\n // apply default encoder when enter\n this.graphicItem.onBeforeAttributeUpdate = this._onGlyphAttributeUpdate(true);\n this.applyGraphicAttributes(graphicAttributes);\n this.graphicItem.onBeforeAttributeUpdate = this._onGlyphAttributeUpdate(false);\n } else {\n this.applyGraphicAttributes(graphicAttributes);\n }\n\n if ((this.diffState === DiffState.enter || this.diffState === DiffState.update) && this.states.length) {\n Object.values(this.glyphGraphicItems).forEach(graphicItem => {\n // 更新数据流后,states计算不缓存\n graphicItem.states = {};\n });\n this.useStates(this.states);\n }\n\n // clear item attributes\n this.items.map(item => {\n item.nextAttrs = {};\n });\n }\n\n encodeCustom(nextAttrs?: any): { [markName: string]: any } {\n let customEncodeValues: { [markName: string]: any } = {};\n const channelEncoder = this.glyphMeta.getChannelEncoder();\n const functionEncoder = this.glyphMeta.getFunctionEncoder();\n\n if (functionEncoder) {\n customEncodeValues = functionEncoder.call(\n null,\n Object.assign({}, this.graphicItem?.attribute, nextAttrs),\n this.getDatum(),\n this,\n this.mark.getGlyphConfig()\n );\n }\n if (channelEncoder) {\n // TODO: maybe delete origin encode value?\n let allAttrs: any;\n Object.keys(channelEncoder).forEach(channel => {\n if (!isNil(nextAttrs[channel])) {\n if (!allAttrs) {\n allAttrs = Object.assign({}, this.graphicItem?.attribute, nextAttrs);\n }\n const encodeResult = channelEncoder[channel].call(\n null,\n channel,\n nextAttrs[channel],\n allAttrs,\n this.getDatum(),\n this,\n this.mark.getGlyphConfig()\n );\n Object.keys(encodeResult ?? {}).forEach(markName => {\n customEncodeValues[markName] = Object.assign(customEncodeValues[markName] ?? {}, encodeResult[markName]);\n });\n }\n });\n }\n return customEncodeValues;\n }\n\n private encodeDefault() {\n const defaultEncodeValues: { [markName: string]: any } = {};\n // apply default encode\n if (this.diffState === DiffState.enter && this.glyphMeta.getDefaultEncoder()) {\n const defaultEncodeResult = this.glyphMeta\n .getDefaultEncoder()\n .call(null, this.getDatum(), this, this.mark.getGlyphConfig());\n Object.assign(defaultEncodeValues, defaultEncodeResult);\n }\n return defaultEncodeValues;\n }\n\n private _onGlyphAttributeUpdate(first: boolean = false) {\n return (attributes: any) => {\n // mark might be released\n if (!this.mark) {\n return attributes;\n }\n const glyphMarks = this.glyphMeta.getMarks();\n\n const graphicAttributes = transformAttributes(this.mark.getAttributeTransforms(), attributes, this);\n\n // apply default encode\n const defaultEncodeValues = first ? this.encodeDefault() : null;\n // apply custom encode\n const customEncodeValues = this.encodeCustom(attributes);\n\n Object.keys(glyphMarks).forEach(markName => {\n const markType = glyphMarks[markName];\n const graphicItem = this.glyphGraphicItems[markName];\n const customAttributes = customEncodeValues?.[markName];\n const additionalAttributes = Object.assign({}, customAttributes);\n if (first) {\n // apply default attributes when visual channel is not set\n const defaultAttributes = defaultEncodeValues?.[markName];\n Object.keys(defaultAttributes ?? {}).forEach(key => {\n if (!has(this.items[0].nextAttrs, key) && !has(additionalAttributes, key)) {\n additionalAttributes[key] = defaultAttributes[key];\n }\n });\n }\n const glyphAttributes = Object.assign({}, cloneTransformAttributes(markType, attributes), additionalAttributes);\n const glyphItems = this._generateGlyphItems(markType, this.items, glyphAttributes);\n this.coordinateTransformEncode(glyphItems);\n const graphicAttributes = this.transformElementItems(glyphItems, markType);\n\n this.applyGlyphGraphicAttributes(graphicAttributes, markName, graphicItem);\n\n if (markType === GrammarMarkType.shape) {\n // FIXME: shape需要拿到原始数据进行编码,暂时把数据绑定到graphicItem上,看后续graphicItem是否需要支持数据绑定\n graphicItem.datum = glyphItems[0].datum;\n }\n });\n\n return graphicAttributes;\n };\n }\n\n private _generateGlyphItems(markType: MarkType, items: MarkElementItem[], additionalAttributes: any) {\n const glyphItems = items.map(item => Object.assign({}, item, { nextAttrs: additionalAttributes }));\n\n if ((CollectionMarkType as string[]).includes(markType) && this.mark.getSpec().enableSegments) {\n // segment mark require all items to apply additional attributes\n glyphItems.forEach((glyphItem, index) => {\n glyphItem.nextAttrs = Object.assign({}, items[index].nextAttrs, additionalAttributes);\n });\n }\n\n return glyphItems;\n }\n\n getGraphicAttribute(channel: string, prev: boolean = false, markName?: any) {\n if (!this.graphicItem) {\n return undefined;\n }\n const prevGraphicAttributes = this.getPrevGraphicAttributes(markName);\n if (prev && has(prevGraphicAttributes, channel)) {\n return prevGraphicAttributes[channel];\n }\n\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n return graphicItem.attribute[channel];\n }\n\n setGraphicAttribute(channel: string, value: any, final: boolean = true, markName?: any) {\n if (!this.graphicItem) {\n return;\n }\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n const finalGraphicAttributes = this.getFinalGraphicAttributes(markName);\n const prevGraphicAttributes = this.getPrevGraphicAttributes(markName);\n\n if (final) {\n finalGraphicAttributes[channel] = value;\n }\n if (!has(prevGraphicAttributes, channel)) {\n prevGraphicAttributes[channel] = graphicItem.attribute[channel];\n }\n\n graphicItem.setAttribute(channel, value);\n }\n\n setGraphicAttributes(attributes: { [channel: string]: any }, final: boolean = true, markName?: any) {\n if (!this.graphicItem) {\n return;\n }\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n const finalGraphicAttributes = this.getFinalGraphicAttributes(markName);\n const prevGraphicAttributes = this.getPrevGraphicAttributes(markName);\n\n Object.keys(attributes).forEach(key => {\n if (final) {\n finalGraphicAttributes[key] = attributes[key];\n }\n if (!has(prevGraphicAttributes, key)) {\n prevGraphicAttributes[key] = graphicItem.attribute[key];\n }\n });\n\n graphicItem.setAttributes(attributes);\n }\n\n protected diffAttributes(graphicAttributes: { [channel: string]: any }, markName?: string) {\n const diffResult = {};\n const finalGraphicAttributes = this.getFinalGraphicAttributes(markName);\n for (const key in graphicAttributes) {\n if (!isEqual(key, finalGraphicAttributes, graphicAttributes)) {\n diffResult[key] = graphicAttributes[key];\n }\n }\n return diffResult;\n }\n\n protected applyGlyphGraphicAttributes(graphicAttributes: any, markName: string, graphicItem: any): void {\n if (this.mark.needAnimate()) {\n // If mark need animate, diff attributes.\n const nextGraphicAttributes = this.diffAttributes(graphicAttributes, markName);\n const prevGraphicAttributes = this.getPrevGraphicAttributes(markName) ?? {};\n const finalGraphicAttributes = this.getFinalGraphicAttributes(markName) ?? {};\n Object.keys(nextGraphicAttributes).forEach(channel => {\n prevGraphicAttributes[channel] = graphicItem.attribute[channel];\n finalGraphicAttributes[channel] = nextGraphicAttributes[channel];\n });\n this.setNextGraphicAttributes(nextGraphicAttributes, markName);\n this.setPrevGraphicAttributes(prevGraphicAttributes, markName);\n this.setFinalGraphicAttributes(finalGraphicAttributes, markName);\n\n // Apply next attributes to current graphic item immediately.\n // Scene graph tree should be handled like no animation exists in dataflow procedure.\n graphicItem.setAttributes(nextGraphicAttributes);\n } else {\n graphicItem.setAttributes(graphicAttributes);\n }\n }\n\n getFinalGraphicAttributes(markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n return graphicItem.finalAttrs;\n }\n\n protected setFinalGraphicAttributes(attributes: { [channel: string]: any }, markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n graphicItem.finalAttrs = attributes;\n }\n\n getPrevGraphicAttributes(markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n return graphicItem.prevAttrs;\n }\n\n protected setPrevGraphicAttributes(attributes: { [channel: string]: any }, markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n graphicItem.prevAttrs = attributes;\n }\n\n getNextGraphicAttributes(markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n return graphicItem.nextAttrs;\n }\n\n protected setNextGraphicAttributes(attributes: { [channel: string]: any }, markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n graphicItem.nextAttrs = attributes;\n }\n\n clearChangedGraphicAttributes() {\n this.setPrevGraphicAttributes(null);\n this.setNextGraphicAttributes(null);\n Object.keys(this.glyphGraphicItems).forEach(markName => {\n this.setPrevGraphicAttributes(null, markName);\n this.setNextGraphicAttributes(null, markName);\n });\n }\n\n clearGraphicAttributes() {\n this.setPrevGraphicAttributes(null);\n this.setNextGraphicAttributes(null);\n this.setFinalGraphicAttributes(null);\n Object.keys(this.glyphGraphicItems).forEach(markName => {\n this.setPrevGraphicAttributes(null, markName);\n this.setNextGraphicAttributes(null, markName);\n this.setFinalGraphicAttributes(null, markName);\n });\n }\n\n remove() {\n this.glyphGraphicItems = null;\n super.remove();\n }\n\n release() {\n if (this.glyphGraphicItems) {\n Object.values(this.glyphGraphicItems).forEach(graphicItem => {\n graphicItem[BridgeElementKey] = null;\n });\n this.glyphGraphicItems = null;\n }\n super.release();\n }\n}\n","import type { IElement, IGlyphMark, IMark } from '../../types';\nimport { GrammarMarkType } from '../enums';\nimport { Element } from '../element';\nimport { GlyphElement } from '../glyph-element';\n\nexport const createElement = (mark: IMark): IElement => {\n if (mark.markType === GrammarMarkType.glyph) {\n return new GlyphElement(mark as IGlyphMark);\n }\n return new Element(mark);\n};\n","import { isNil } from '@visactor/vutils';\nimport type { DiffResult } from '../../types/base';\nimport { parseField } from '../../parse/util';\nimport { DefaultKey, DefaultGroupKeys } from '../constants';\n\nexport type GroupedData = {\n // iterating over array is faster than set\n keys: (symbol | string)[];\n // operation on map is faster than object\n data: Map;\n};\n\nexport function groupData(\n data: T[],\n key: ((datum: T) => symbol | string) | string,\n sort?: (a: T, b: T) => number\n): GroupedData {\n const groupedData = new Map();\n if (!data || data.length === 0) {\n return { keys: [], data: groupedData };\n }\n if (!key) {\n groupedData.set(DefaultKey, sort ? data.slice().sort(sort) : data.slice());\n return { keys: DefaultGroupKeys, data: groupedData };\n }\n const keyGetter = parseField(key);\n\n if (data.length === 1) {\n const key = keyGetter(data[0]);\n groupedData.set(key, [data[0]]);\n\n return {\n keys: [key],\n data: groupedData\n };\n }\n\n const keys = new Set();\n data.forEach(entry => {\n const key = keyGetter(entry);\n const lastData = groupedData.get(key) ?? [];\n lastData.push(entry);\n groupedData.set(key, lastData);\n keys.add(key);\n });\n if (sort) {\n keys.forEach(key => {\n groupedData.get(key).sort(sort);\n });\n }\n return { keys: Array.from(keys), data: groupedData };\n}\n\nexport class Differ {\n private prevData: GroupedData;\n private currentData: GroupedData;\n\n private callback: (key: symbol | string, data: T[] | null, prevData: T[] | null) => void;\n\n constructor(data?: T[], key?: ((datum: T) => symbol | string) | string, sort?: (a: T, b: T) => number) {\n this.prevData = data?.length ? groupData(data, key ?? null, sort) : null;\n }\n\n setCurrentData(currentData: GroupedData) {\n this.currentData = currentData;\n }\n\n getCurrentData(): GroupedData {\n return this.currentData;\n }\n\n doDiff() {\n if (!this.callback) {\n return;\n }\n if (this.currentData && this.prevData) {\n const prevMap = new Map(this.prevData.data);\n const currentKeys = this.currentData.keys;\n currentKeys.forEach(key => {\n this.callback(key, this.currentData.data.get(key), prevMap.get(key));\n prevMap.delete(key);\n });\n\n this.prevData.keys.forEach(key => {\n if (prevMap.has(key)) {\n this.callback(key, null, prevMap.get(key));\n }\n });\n } else if (this.currentData) {\n const currentKeys = this.currentData.keys;\n currentKeys.forEach(key => {\n this.callback(key, this.currentData.data.get(key), null);\n });\n } else if (this.prevData) {\n this.prevData.keys.forEach(key => {\n this.callback(key, null, this.prevData.data.get(key));\n });\n }\n }\n\n setCallback(callback: (key: symbol | string, data: T[], prevData: T[]) => void) {\n this.callback = callback;\n }\n\n updateToCurrent() {\n this.prevData = this.currentData;\n this.currentData = null;\n }\n\n reset() {\n this.prevData = null;\n }\n}\n\nexport function diffSingle(prev: U[], next: V[], key: (datum: U | V) => symbol | string): DiffResult {\n const result: DiffResult = {\n enter: [],\n exit: [],\n update: []\n };\n\n const differ = new Differ(prev, key);\n differ.setCallback((key, data, prevData) => {\n if (isNil(data)) {\n // exit\n result.exit.push({ prev: prevData[0] as U });\n } else if (isNil(prevData)) {\n // enter\n result.enter.push({ next: data[0] as V });\n } else {\n // update\n result.update.push({ next: data[0] as V, prev: prevData[0] as U });\n }\n });\n differ.setCurrentData(groupData(next, key));\n differ.doDiff();\n\n return result;\n}\n\nexport function diffMultiple(prev: U[], next: V[], key: (datum: U | V) => symbol | string): DiffResult {\n const result: DiffResult = {\n enter: [],\n exit: [],\n update: []\n };\n\n const differ = new Differ(prev, key);\n differ.setCallback((key, data, prevData) => {\n if (isNil(data)) {\n // exit\n result.exit.push({ prev: prevData as U[] });\n } else if (isNil(prevData)) {\n // enter\n result.enter.push({ next: data as V[] });\n } else {\n // update\n result.update.push({ next: data as V[], prev: prevData as U[] });\n }\n });\n differ.setCurrentData(groupData(next, key));\n differ.doDiff();\n\n return result;\n}\n","import type { IPoint, IPointLike } from '@visactor/vutils';\nimport { getDecimalPlaces, isArray, isNumber, pi, pi2, Point, PointService } from '@visactor/vutils';\nimport { application } from '../application';\nimport { AttributeUpdateType } from '../common/enums';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport type {\n EasingType,\n IArcGraphicAttribute,\n IArea,\n IAreaCacheItem,\n ICubicBezierCurve,\n ICurve,\n ICustomPath2D,\n IGraphic,\n IGroup,\n ILine,\n ILineAttribute,\n ILinearGradient,\n IRect,\n IRectAttribute,\n IRectGraphicAttribute,\n IShadowRoot\n} from '../interface';\nimport { ACustomAnimate } from './animate';\nimport { Easing } from './easing';\nimport { pointInterpolation } from '../common/utils';\nimport { divideCubic } from '../common/segment/curve/cubic-bezier';\nimport { LineCurve } from '../common/segment/curve/line';\n\nexport class IncreaseCount extends ACustomAnimate<{ text: string | number }> {\n declare valid: boolean;\n\n private fromNumber: number;\n private toNumber: number;\n private decimalLength: number;\n\n constructor(\n from: { text: string | number },\n to: { text: string | number },\n duration: number,\n easing: EasingType,\n params?: { fixed?: boolean }\n ) {\n super(from, to, duration, easing, params);\n }\n\n getEndProps(): Record | void {\n if (this.valid === false) {\n return {};\n }\n return {\n text: this.to\n };\n }\n\n onBind(): void {\n this.fromNumber = isNumber(this.from?.text) ? this.from?.text : Number.parseFloat(this.from?.text);\n this.toNumber = isNumber(this.to?.text) ? this.to?.text : Number.parseFloat(this.to?.text);\n if (!Number.isFinite(this.toNumber)) {\n this.fromNumber = 0;\n }\n if (!Number.isFinite(this.toNumber)) {\n this.valid = false;\n }\n if (this.valid !== false) {\n this.decimalLength =\n this.params?.fixed ?? Math.max(getDecimalPlaces(this.fromNumber), getDecimalPlaces(this.toNumber));\n }\n }\n\n onEnd(): void {\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.valid === false) {\n return;\n }\n if (end) {\n out.text = this.toNumber;\n } else {\n out.text = (this.fromNumber + (this.toNumber - this.fromNumber) * ratio).toFixed(this.decimalLength);\n }\n }\n}\n\nenum Direction {\n LEFT_TO_RIGHT = 0,\n RIGHT_TO_LEFT = 1,\n TOP_TO_BOTTOM = 2,\n BOTTOM_TO_TOP = 3,\n STROKE = 4\n}\nexport class FadeInPlus extends ACustomAnimate {\n declare direction: number;\n declare toFill: string;\n declare toStroke: string;\n declare fillGradient: ILinearGradient;\n declare strokeGradient: ILinearGradient;\n declare fill: boolean;\n declare stroke: boolean;\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params?: { direction?: number; fill?: boolean; stroke?: boolean }\n ) {\n super(from, to, duration, easing, params);\n const { direction = Direction.LEFT_TO_RIGHT, fill = true, stroke = true } = params || {};\n this.direction = direction;\n this.fill = fill;\n this.stroke = stroke;\n this.fillGradient = {\n gradient: 'linear',\n stops: []\n };\n this.strokeGradient = {\n gradient: 'linear',\n stops: []\n };\n }\n\n getEndProps(): Record {\n return {\n fill: this.toFill,\n stroke: this.toStroke\n };\n }\n\n onBind(): void {\n // this.to = parseFloat(this.target.getAnimatePropByName('text'));\n this.toFill = this.target.getComputedAttribute('fill');\n this.toStroke = this.target.getComputedAttribute('stroke');\n }\n\n onEnd(): void {\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (!this.toFill) {\n return;\n }\n if (!this.toStroke) {\n return;\n }\n switch (this.direction) {\n case Direction.RIGHT_TO_LEFT:\n this.rightToLeft(end, ratio, out);\n break;\n case Direction.TOP_TO_BOTTOM:\n this.topToBottom(end, ratio, out);\n break;\n case Direction.BOTTOM_TO_TOP:\n this.bottomToTop(end, ratio, out);\n break;\n case Direction.STROKE:\n this.strokePath(end, ratio, out);\n break;\n default:\n this.leftToRight(end, ratio, out);\n break;\n }\n }\n\n leftToRight(end: boolean, ratio: number, out: Record) {\n if (this.fill) {\n const toFillColor = this.toFill;\n this.fillGradient.x0 = 0;\n this.fillGradient.y0 = 0;\n this.fillGradient.x1 = 1;\n this.fillGradient.y1 = 0;\n this.fillGradient.stops = [\n { offset: 0, color: toFillColor },\n { offset: ratio, color: toFillColor },\n { offset: Math.min(1, ratio * 2), color: 'transparent' }\n ];\n out.fill = this.fillGradient;\n }\n if (this.stroke) {\n const toStrokeColor = this.toStroke;\n this.strokeGradient.x0 = 0;\n this.strokeGradient.y0 = 0;\n this.strokeGradient.x1 = 1;\n this.strokeGradient.y1 = 0;\n this.strokeGradient.stops = [\n { offset: 0, color: toStrokeColor },\n { offset: ratio, color: toStrokeColor },\n { offset: Math.min(1, ratio * 6), color: 'transparent' }\n ];\n out.stroke = this.strokeGradient;\n // const dashLen = 300;\n // const offset = ratio * dashLen;\n // out.lineDash = [offset, dashLen - offset];\n }\n return;\n }\n\n strokePath(end: boolean, ratio: number, out: Record) {\n if (this.fill) {\n const toFillColor = this.toFill;\n this.fillGradient.x0 = 0;\n this.fillGradient.y0 = 0;\n this.fillGradient.x1 = 1;\n this.fillGradient.y1 = 0;\n this.fillGradient.stops = [\n { offset: 0, color: toFillColor },\n { offset: ratio, color: toFillColor },\n { offset: Math.min(1, ratio * 2), color: 'transparent' }\n ];\n out.fill = this.fillGradient;\n }\n if (this.stroke) {\n const dashLen = 300;\n const offset = ratio * dashLen;\n out.lineDash = [offset, dashLen - offset];\n }\n return;\n }\n rightToLeft(end: boolean, ratio: number, out: Record) {\n return;\n }\n topToBottom(end: boolean, ratio: number, out: Record) {\n return;\n }\n bottomToTop(end: boolean, ratio: number, out: Record) {\n return;\n }\n}\n\nexport class InputText extends ACustomAnimate<{ text: string }> {\n declare valid: boolean;\n declare target: IGraphic;\n\n private fromText: string = '';\n private toText: string = '';\n\n getEndProps(): Record {\n if (this.valid === false) {\n return {};\n }\n return {\n text: this.to\n };\n }\n\n onBind(): void {\n this.fromText = this.from?.text ?? '';\n this.toText = this.to?.text ?? '';\n if (!this.toText || isArray(this.toText)) {\n this.valid = false;\n } else {\n this.toText = this.toText.toString();\n const root = this.target.attachShadow();\n const line = application.graphicService.creator.line({\n x: 0,\n y: 0,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: this.target.getComputedAttribute('fontSize') }\n ],\n stroke: 'black',\n lineWidth: 1\n });\n root.add(line);\n }\n }\n\n onEnd(): void {\n this.target.detachShadow();\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.valid === false) {\n return;\n }\n // update text\n const fromCount = this.fromText.length;\n const toCount = this.toText.length;\n const count = Math.ceil(fromCount + (toCount - fromCount) * ratio);\n\n out.text = this.toText.substr(0, count);\n\n // update line position\n const line = this.target.shadowRoot?.at(0) as IGraphic;\n const endX = (this.target as any).clipedWidth + 2;\n line.setAttribute('x', endX);\n }\n}\n\nexport class StreamLight extends ACustomAnimate {\n declare valid: boolean;\n declare target: IGraphic;\n\n declare rect: IRect;\n declare line: ILine;\n declare area: IArea;\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params?: { attribute?: Partial; streamLength?: number }\n ) {\n super(from, to, duration, easing, params);\n }\n\n getEndProps(): Record {\n return {};\n }\n\n onStart(): void {\n if (!this.target) {\n return;\n }\n if (this.target.type === 'rect') {\n this.onStartRect();\n } else if (this.target.type === 'line') {\n this.onStartLineOrArea('line');\n } else if (this.target.type === 'area') {\n this.onStartLineOrArea('area');\n }\n }\n\n onStartLineOrArea(type: 'line' | 'area') {\n const root = this.target.attachShadow();\n const line = application.graphicService.creator[type]({\n ...this.params?.attribute\n });\n this[type] = line;\n line.pathProxy = new CustomPath2D();\n root.add(line);\n }\n\n onStartRect(): void {\n const root = this.target.attachShadow();\n\n const height = this.target.AABBBounds.height();\n\n const rect = application.graphicService.creator.rect({\n height: height,\n fill: '#bcdeff',\n shadowBlur: 30,\n shadowColor: '#bcdeff',\n ...this.params?.attribute,\n x: 0,\n y: 0,\n width: 0\n });\n this.rect = rect;\n root.add(rect);\n }\n\n onBind(): void {\n return;\n }\n\n onEnd(): void {\n this.target.detachShadow();\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.rect) {\n return this.onUpdateRect(end, ratio, out);\n } else if (this.line || this.area) {\n return this.onUpdateLineOrArea(end, ratio, out);\n }\n }\n\n protected onUpdateRect(end: boolean, ratio: number, out: Record): void {\n const parentWidth = (this.target as any).attribute.width ?? 250;\n const streamLength = this.params?.streamLength ?? parentWidth;\n const maxLength = this.params?.attribute?.width ?? 60;\n const startX = -maxLength;\n const currentX = startX + (streamLength - startX) * ratio;\n const x = Math.max(currentX, 0);\n const w = Math.min(Math.min(currentX + maxLength, maxLength), streamLength - currentX);\n const width = w + x > parentWidth ? Math.max(parentWidth - x, 0) : w;\n this.rect.setAttributes(\n {\n x,\n width\n } as any,\n false,\n {\n type: AttributeUpdateType.ANIMATE_PLAY,\n animationState: {\n ratio,\n end\n }\n }\n );\n }\n\n protected onUpdateLineOrArea(end: boolean, ratio: number, out: Record) {\n const target = this.line || this.area;\n if (!target) {\n return;\n }\n const customPath = target.pathProxy as ICustomPath2D;\n const targetLine = this.target as ILine | IArea;\n if (targetLine.cache || targetLine.cacheArea) {\n this._onUpdateLineOrAreaWithCache(customPath, targetLine, end, ratio, out);\n } else {\n this._onUpdateLineWithoutCache(customPath, targetLine, end, ratio, out);\n }\n const targetAttrs = targetLine.attribute;\n target.setAttributes({\n stroke: targetAttrs.stroke,\n ...target.attribute\n });\n target.addUpdateBoundTag();\n }\n\n // 针对有cache的linear\n protected _onUpdateLineOrAreaWithCache(\n customPath: ICustomPath2D,\n g: ILine | IArea,\n end: boolean,\n ratio: number,\n out: Record\n ) {\n customPath.clear();\n if (g.type === 'line') {\n let cache = g.cache;\n if (!Array.isArray(cache)) {\n cache = [cache];\n }\n const totalLen = cache.reduce((l: any, c: any) => l + c.getLength(), 0);\n const curves: ICurve[] = [];\n cache.forEach((c: any) => {\n c.curves.forEach((ci: any) => curves.push(ci));\n });\n return this._updateCurves(customPath, curves, totalLen, ratio);\n } else if (g.type === 'area') {\n const cache = g.cacheArea as IAreaCacheItem;\n const totalLen = cache.top.curves.reduce((a, b) => a + b.getLength(), 0);\n return this._updateCurves(customPath, cache.top.curves, totalLen, ratio);\n }\n }\n\n protected _updateCurves(customPath: ICustomPath2D, curves: ICurve[], totalLen: number, ratio: number) {\n const startLen = totalLen * ratio;\n const endLen = Math.min(startLen + this.params?.streamLength ?? 10, totalLen);\n let lastLen = 0;\n let start = false;\n for (let i = 0; i < curves.length; i++) {\n const curveItem = curves[i];\n const len = curveItem.getLength();\n const startPercent = 1 - (lastLen + len - startLen) / len;\n let endPercent = 1 - (lastLen + len - endLen) / len;\n let curveForStart: ICubicBezierCurve;\n if (lastLen < startLen && lastLen + len > startLen) {\n start = true;\n if (curveItem.p2 && curveItem.p3) {\n const [_, curve2] = divideCubic(curveItem as ICubicBezierCurve, startPercent);\n customPath.moveTo(curve2.p0.x, curve2.p0.y);\n curveForStart = curve2;\n // console.log(curve2.p0.x, curve2.p0.y);\n } else {\n const p = curveItem.getPointAt(startPercent);\n customPath.moveTo(p.x, p.y);\n }\n }\n if (lastLen < endLen && lastLen + len > endLen) {\n if (curveItem.p2 && curveItem.p3) {\n if (curveForStart) {\n endPercent = (endLen - startLen) / curveForStart.getLength();\n }\n const [curve1] = divideCubic(curveForStart || (curveItem as ICubicBezierCurve), endPercent);\n customPath.bezierCurveTo(curve1.p1.x, curve1.p1.y, curve1.p2.x, curve1.p2.y, curve1.p3.x, curve1.p3.y);\n } else {\n const p = curveItem.getPointAt(endPercent);\n customPath.lineTo(p.x, p.y);\n }\n break;\n } else if (start) {\n if (curveItem.p2 && curveItem.p3) {\n const curve = curveForStart || curveItem;\n customPath.bezierCurveTo(curve.p1.x, curve.p1.y, curve.p2.x, curve.p2.y, curve.p3.x, curve.p3.y);\n } else {\n customPath.lineTo(curveItem.p1.x, curveItem.p1.y);\n }\n }\n lastLen += len;\n }\n }\n\n // 只针对最简单的linear\n protected _onUpdateLineWithoutCache(\n customPath: ICustomPath2D,\n line: ILine,\n end: boolean,\n ratio: number,\n out: Record\n ) {\n const { points, curveType } = line.attribute;\n if (!points || points.length < 2 || curveType !== 'linear') {\n return;\n }\n let totalLen = 0;\n for (let i = 1; i < points.length; i++) {\n totalLen += PointService.distancePP(points[i], points[i - 1]);\n }\n const startLen = totalLen * ratio;\n const endLen = Math.min(startLen + this.params?.streamLength ?? 10, totalLen);\n const nextPoints = [];\n let lastLen = 0;\n for (let i = 1; i < points.length; i++) {\n const len = PointService.distancePP(points[i], points[i - 1]);\n if (lastLen < startLen && lastLen + len > startLen) {\n nextPoints.push(PointService.pointAtPP(points[i - 1], points[i], 1 - (lastLen + len - startLen) / len));\n }\n if (lastLen < endLen && lastLen + len > endLen) {\n nextPoints.push(PointService.pointAtPP(points[i - 1], points[i], 1 - (lastLen + len - endLen) / len));\n break;\n } else if (nextPoints.length) {\n nextPoints.push(points[i]);\n }\n lastLen += len;\n }\n\n if (!nextPoints.length || nextPoints.length < 2) {\n return;\n }\n customPath.clear();\n customPath.moveTo(nextPoints[0].x, nextPoints[0].y);\n for (let i = 1; i < nextPoints.length; i++) {\n customPath.lineTo(nextPoints[i].x, nextPoints[i].y);\n }\n }\n}\n\nexport class Meteor extends ACustomAnimate {\n declare size: number;\n declare target: IGraphic;\n declare root: IShadowRoot;\n declare posList: IPoint[];\n\n get lastPos(): IPoint {\n return this.posList[this.posList.length - 1];\n }\n\n constructor(size: number, duration: number, easing: EasingType, params?: any) {\n super(null, null, duration, easing, params);\n this.size = size;\n this.posList = [];\n }\n\n onBind(): void {\n const root = this.target.attachShadow();\n this.root = root;\n for (let i = 0; i < this.size; i++) {\n const g = this.target.clone();\n const scale = Math.min(((this.size - i) / this.size) * 3, 1);\n const opacity = Math.min(0.2 + 0.7 / this.size);\n g.setAttributes({ x: 0, y: 0, dx: 0, dy: 0, scaleX: scale, scaleY: scale, opacity }, false, {\n type: AttributeUpdateType.ANIMATE_BIND\n });\n root.add(g);\n }\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (end) {\n this.target.detachShadow();\n this.posList.length = 0;\n return;\n }\n\n const x = this.target.getComputedAttribute('x');\n const y = this.target.getComputedAttribute('y');\n\n const nextPos = new Point(x, y);\n if (!this.posList.length) {\n this.posList.push(nextPos);\n return;\n }\n\n this.target.shadowRoot.forEachChildren((g: IGraphic, i) => {\n const pos = this.posList[Math.max(this.posList.length - i - 1, 0)];\n g.setAttributes(\n {\n x: pos.x - x,\n y: pos.y - y\n },\n false\n );\n });\n\n this.posList.push(nextPos);\n }\n}\n\nexport class MotionPath extends ACustomAnimate {\n declare valid: boolean;\n declare pathLength: number;\n declare path: CustomPath2D;\n declare distance: number;\n declare initAngle: number;\n declare changeAngle: boolean;\n declare cb?: (from: any, to: any, ratio: number, target: IGraphic) => void;\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params?: {\n path: CustomPath2D;\n distance: number;\n cb?: (from: any, to: any, ratio: number, target: IGraphic) => void;\n initAngle?: number;\n changeAngle?: boolean;\n }\n ) {\n super(from, to, duration, easing, params);\n if (params) {\n this.pathLength = params.path.getLength();\n this.path = params.path;\n this.distance = params.distance;\n this.to = params.distance * this.pathLength;\n this.initAngle = params.initAngle ?? 0;\n this.changeAngle = !!params.changeAngle;\n this.cb = params.cb;\n }\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n // 计算位置\n const at = this.to * ratio;\n const { pos, angle } = this.path.getAttrAt(at);\n out.x = pos.x;\n out.y = pos.y;\n if (this.changeAngle) {\n out.angle = angle + this.initAngle;\n }\n this.cb && this.cb(this.from, this.to, ratio, this.target as IGraphic);\n // out.angle = angle + this.initAngle;\n }\n}\n\nexport class TagPointsUpdate extends ACustomAnimate<{ points: IPointLike[] }> {\n protected fromPoints: IPointLike[];\n protected toPoints: IPointLike[];\n protected points: IPointLike[];\n protected interpolatePoints: [IPointLike, IPointLike][];\n protected newPointAnimateType: 'grow' | 'appear';\n\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params?: { newPointAnimateType?: 'grow' | 'appear' }\n ) {\n super(from, to, duration, easing, params);\n this.newPointAnimateType = params?.newPointAnimateType === 'appear' ? 'appear' : 'grow';\n }\n\n onBind(): void {\n const originFromPoints = this.from?.points;\n const originToPoints = this.to?.points;\n this.fromPoints = !originFromPoints ? [] : !Array.isArray(originFromPoints) ? [originFromPoints] : originFromPoints;\n this.toPoints = !originToPoints ? [] : !Array.isArray(originToPoints) ? [originToPoints] : originToPoints;\n\n const tagMap = new Map();\n this.fromPoints.forEach(point => {\n if (point.context) {\n tagMap.set(point.context, point);\n }\n });\n let firstMatchedIndex = Infinity;\n let lastMatchedIndex = -Infinity;\n let firstMatchedPoint: IPointLike;\n let lastMatchedPoint: IPointLike;\n for (let i = 0; i < this.toPoints.length; i += 1) {\n if (tagMap.has(this.toPoints[i].context)) {\n firstMatchedIndex = i;\n firstMatchedPoint = tagMap.get(this.toPoints[i].context);\n break;\n }\n }\n for (let i = this.toPoints.length - 1; i >= 0; i -= 1) {\n if (tagMap.has(this.toPoints[i].context)) {\n lastMatchedIndex = i;\n lastMatchedPoint = tagMap.get(this.toPoints[i].context);\n break;\n }\n }\n // TODO: shrink removed points\n // if no point is matched, animation should start from toPoint[0]\n let prevMatchedPoint = this.toPoints[0];\n this.interpolatePoints = this.toPoints.map((point, index) => {\n const matchedPoint = tagMap.get(point.context);\n if (matchedPoint) {\n prevMatchedPoint = matchedPoint;\n return [matchedPoint, point];\n }\n // appear new point\n if (this.newPointAnimateType === 'appear') {\n return [point, point];\n }\n // grow new point\n if (index < firstMatchedIndex && firstMatchedPoint) {\n return [firstMatchedPoint, point];\n } else if (index > lastMatchedIndex && lastMatchedPoint) {\n return [lastMatchedPoint, point];\n }\n return [prevMatchedPoint, point];\n });\n this.points = this.interpolatePoints.map(interpolate => {\n const fromPoint = interpolate[0];\n const toPoint = interpolate[1];\n const newPoint = new Point(fromPoint.x, fromPoint.y, fromPoint.x1, fromPoint.y1);\n newPoint.defined = toPoint.defined;\n newPoint.context = toPoint.context;\n return newPoint;\n });\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n // if not create new points, multi points animation might not work well.\n this.points = this.points.map((point, index) => {\n const newPoint = pointInterpolation(this.interpolatePoints[index][0], this.interpolatePoints[index][1], ratio);\n newPoint.context = point.context;\n return newPoint;\n });\n out.points = this.points;\n }\n}\n\nexport class GraphicAnimate extends ACustomAnimate {\n graphic: IGraphic;\n\n constructor(from: any, to: any, duration: number, easing: EasingType, params?: { graphic: IGraphic }) {\n super(from, to, duration, easing, params);\n this.graphic = params?.graphic;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (!this.graphic) {\n return;\n }\n Object.keys(this.from).forEach(k => {\n out[k] = this.from[k] + (this.to[k] - this.from[k]) * ratio;\n });\n }\n}\n\nexport class ClipGraphicAnimate extends ACustomAnimate {\n private _group?: IGroup;\n private _clipGraphic?: IGraphic;\n protected clipFromAttribute?: any;\n protected clipToAttribute?: any;\n\n private _lastClip?: boolean;\n private _lastPath?: IGraphic[];\n\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params: { group: IGroup; clipGraphic: IGraphic }\n ) {\n super(null, null, duration, easing, params);\n this.clipFromAttribute = from;\n this.clipToAttribute = to;\n this._group = params?.group;\n this._clipGraphic = params?.clipGraphic;\n }\n\n onBind() {\n if (this._group && this._clipGraphic) {\n this._lastClip = this._group.attribute.clip;\n this._lastPath = this._group.attribute.path;\n this._group.setAttributes(\n {\n clip: true,\n path: [this._clipGraphic]\n },\n false,\n { type: AttributeUpdateType.ANIMATE_BIND }\n );\n }\n }\n\n onEnd() {\n if (this._group) {\n this._group.setAttributes(\n {\n clip: this._lastClip,\n path: this._lastPath\n },\n false,\n { type: AttributeUpdateType.ANIMATE_END }\n );\n }\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (!this._clipGraphic) {\n return;\n }\n const res: any = {};\n Object.keys(this.clipFromAttribute).forEach(k => {\n res[k] = this.clipFromAttribute[k] + (this.clipToAttribute[k] - this.clipFromAttribute[k]) * ratio;\n });\n this._clipGraphic.setAttributes(res, false, {\n type: AttributeUpdateType.ANIMATE_UPDATE,\n animationState: { ratio, end }\n });\n }\n}\n\nexport class ClipAngleAnimate extends ClipGraphicAnimate {\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params: {\n group: IGroup;\n center?: { x: number; y: number };\n startAngle?: number;\n radius?: number;\n orient?: 'clockwise' | 'anticlockwise';\n animationType?: 'in' | 'out';\n }\n ) {\n const groupAttribute = params?.group?.attribute ?? {};\n const width = groupAttribute.width ?? 0;\n const height = groupAttribute.height ?? 0;\n\n const animationType = params?.animationType ?? 'in';\n const startAngle = params?.startAngle ?? 0;\n const orient = params?.orient ?? 'clockwise';\n\n let arcStartAngle = 0;\n let arcEndAngle = 0;\n if (orient === 'anticlockwise') {\n arcEndAngle = animationType === 'in' ? startAngle + Math.PI * 2 : startAngle;\n arcEndAngle = startAngle + Math.PI * 2;\n } else {\n arcStartAngle = startAngle;\n arcEndAngle = animationType === 'out' ? startAngle + Math.PI * 2 : startAngle;\n }\n const arc = application.graphicService.creator.arc({\n x: params?.center?.x ?? width / 2,\n y: params?.center?.y ?? height / 2,\n outerRadius: params?.radius ?? (width + height) / 2,\n innerRadius: 0,\n startAngle: arcStartAngle,\n endAngle: arcEndAngle,\n fill: true\n });\n let fromAttributes: Partial;\n let toAttributes: Partial;\n if (orient === 'anticlockwise') {\n fromAttributes = { startAngle: startAngle + Math.PI * 2 };\n toAttributes = { startAngle: startAngle };\n } else {\n fromAttributes = { endAngle: startAngle };\n toAttributes = { endAngle: startAngle + Math.PI * 2 };\n }\n super(\n animationType === 'in' ? fromAttributes : toAttributes,\n animationType === 'in' ? toAttributes : fromAttributes,\n duration,\n easing,\n { group: params?.group, clipGraphic: arc }\n );\n }\n}\n\nexport class ClipRadiusAnimate extends ClipGraphicAnimate {\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params: {\n group: IGroup;\n center?: { x: number; y: number };\n startRadius?: number;\n endRadius?: number;\n animationType?: 'in' | 'out';\n }\n ) {\n const groupAttribute = params?.group?.attribute ?? {};\n const width = groupAttribute.width ?? 0;\n const height = groupAttribute.height ?? 0;\n\n const animationType = params?.animationType ?? 'in';\n const startRadius = params?.startRadius ?? 0;\n const endRadius = params?.endRadius ?? Math.sqrt((width / 2) ** 2 + (height / 2) ** 2);\n\n const arc = application.graphicService.creator.arc({\n x: params?.center?.x ?? width / 2,\n y: params?.center?.y ?? height / 2,\n outerRadius: animationType === 'out' ? endRadius : startRadius,\n innerRadius: 0,\n startAngle: 0,\n endAngle: Math.PI * 2,\n fill: true\n });\n const fromAttributes: Partial = { outerRadius: startRadius };\n const toAttributes: Partial = { outerRadius: endRadius };\n super(\n animationType === 'in' ? fromAttributes : toAttributes,\n animationType === 'in' ? toAttributes : fromAttributes,\n duration,\n easing,\n { group: params?.group, clipGraphic: arc }\n );\n }\n}\n\nexport class ClipDirectionAnimate extends ClipGraphicAnimate {\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params: {\n group: IGroup;\n direction?: 'x' | 'y';\n orient?: 'positive' | 'negative';\n width?: number;\n height?: number;\n animationType?: 'in' | 'out';\n }\n ) {\n const groupAttribute = params?.group?.attribute ?? {};\n const width = params?.width ?? groupAttribute.width ?? 0;\n const height = params?.height ?? groupAttribute.height ?? 0;\n\n const animationType = params?.animationType ?? 'in';\n const direction = params?.direction ?? 'x';\n const orient = params?.orient ?? 'positive';\n\n const rect = application.graphicService.creator.rect({\n x: 0,\n y: 0,\n width: animationType === 'in' && direction === 'x' ? 0 : width,\n height: animationType === 'in' && direction === 'y' ? 0 : height,\n fill: true\n });\n let fromAttributes: Partial = {};\n let toAttributes: Partial = {};\n if (direction === 'y') {\n if (orient === 'negative') {\n fromAttributes = { y: height, height: 0 };\n toAttributes = { y: 0, height: height };\n } else {\n fromAttributes = { height: 0 };\n toAttributes = { height: height };\n }\n } else {\n if (orient === 'negative') {\n fromAttributes = { x: width, width: 0 };\n toAttributes = { x: 0, width: width };\n } else {\n fromAttributes = { width: 0 };\n toAttributes = { width: width };\n }\n }\n super(\n animationType === 'in' ? fromAttributes : toAttributes,\n animationType === 'in' ? toAttributes : fromAttributes,\n duration,\n easing,\n { group: params?.group, clipGraphic: rect }\n );\n }\n}\n\ntype RotateSphereParams =\n | {\n center: { x: number; y: number; z: number };\n r: number;\n cb?: (out: any) => void;\n }\n | (() => any);\n\nexport class RotateBySphereAnimate extends ACustomAnimate {\n declare params: RotateSphereParams;\n declare theta: number;\n declare phi: number;\n\n onStart(): void {\n const { center, r } = typeof this.params === 'function' ? this.params() : this.params;\n const startX = this.target.getComputedAttribute('x');\n const startY = this.target.getComputedAttribute('y');\n const startZ = this.target.getComputedAttribute('z');\n const phi = Math.acos((startY - center.y) / r);\n let theta = Math.acos((startX - center.x) / r / Math.sin(phi));\n if (startZ - center.z < 0) {\n theta = pi2 - theta;\n }\n this.theta = theta;\n this.phi = phi;\n }\n\n onBind() {\n return;\n }\n\n onEnd() {\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.phi == null || this.theta == null) {\n return;\n }\n const { center, r, cb } = typeof this.params === 'function' ? this.params() : this.params;\n const deltaAngle = Math.PI * 2 * ratio;\n const theta = this.theta + deltaAngle;\n const phi = this.phi;\n const x = r * Math.sin(phi) * Math.cos(theta) + center.x;\n const y = r * Math.cos(phi) + center.y;\n const z = r * Math.sin(phi) * Math.sin(theta) + center.z;\n out.x = x;\n out.y = y;\n out.z = z;\n // out.beta = phi;\n out.alpha = theta + pi / 2;\n while (out.alpha > pi2) {\n out.alpha -= pi2;\n }\n out.alpha = pi2 - out.alpha;\n\n out.zIndex = out.z * -10000;\n\n cb && cb(out);\n }\n}\n\nexport class GroupFadeIn extends ACustomAnimate {\n declare target: IGroup;\n\n getEndProps(): Record {\n return {};\n }\n\n onBind(): void {\n this.target.setTheme({\n common: {\n opacity: 0\n }\n });\n return;\n }\n\n onEnd(): void {\n this.target.setTheme({\n common: {\n opacity: 1\n }\n });\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n this.target.setTheme({\n common: {\n opacity: ratio\n }\n });\n }\n}\n\nexport class GroupFadeOut extends ACustomAnimate {\n declare target: IGroup;\n\n getEndProps(): Record {\n return {};\n }\n\n onBind(): void {\n this.target.setTheme({\n common: {\n opacity: 1\n }\n });\n return;\n }\n\n onEnd(): void {\n this.target.setTheme({\n common: {\n opacity: 0\n }\n });\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n this.target.setTheme({\n common: {\n opacity: 1 - ratio\n }\n });\n }\n}\n\nexport class AttributeAnimate extends ACustomAnimate {\n declare target: IGroup;\n\n constructor(to: Record, duration: number, easing: EasingType) {\n super({}, to, duration, easing);\n }\n\n getEndProps(): Record {\n return this.to;\n }\n\n onBind(): void {\n Object.keys(this.to).forEach(k => {\n this.from[k] = this.target.getComputedAttribute(k);\n });\n return;\n }\n\n onEnd(): void {\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n this.target.stepInterpolate(\n this.subAnimate,\n this.subAnimate.animate,\n out,\n this.step,\n ratio,\n end,\n this.to,\n this.from\n );\n }\n}\n\nexport class AnimateGroup extends ACustomAnimate {\n declare customAnimates: ACustomAnimate[];\n declare updating: boolean;\n\n constructor(duration: number, customAnimates: ACustomAnimate[]) {\n super(null, null, duration, 'linear');\n this.customAnimates = customAnimates;\n }\n\n initAnimates() {\n this.customAnimates.forEach(a => {\n a.step = this.step;\n a.subAnimate = this.subAnimate;\n a.target = this.target;\n });\n }\n\n getEndProps(): Record {\n const props = {};\n this.customAnimates.forEach(a => {\n Object.assign(props, a.getEndProps());\n });\n return props;\n }\n\n onBind(): void {\n this.initAnimates();\n this.customAnimates.forEach(a => {\n a.onBind();\n });\n return;\n }\n\n onEnd(): void {\n this.customAnimates.forEach(a => {\n a.onEnd();\n });\n return;\n }\n\n onStart(): void {\n this.customAnimates.forEach(a => {\n a.onStart();\n });\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.updating) {\n return;\n }\n this.updating = true;\n this.customAnimates.forEach(a => {\n const easing = a.easing;\n const easingFunc = typeof easing === 'string' ? Easing[easing] : easing;\n ratio = easingFunc(ratio);\n a.onUpdate(end, ratio, out);\n });\n this.updating = false;\n return;\n }\n}\n\nexport class AnimateGroup1 extends ACustomAnimate {\n declare customAnimates: ACustomAnimate[];\n declare updating: boolean;\n\n constructor(duration: number, customAnimates: ACustomAnimate[]) {\n super(null, null, duration, 'linear');\n this.customAnimates = customAnimates;\n }\n\n initAnimates() {\n this.customAnimates.forEach(a => {\n a.step = this.step;\n a.subAnimate = this.subAnimate;\n a.target = this.target;\n });\n }\n\n getEndProps(): Record {\n const props = {};\n this.customAnimates.forEach(a => {\n Object.assign(props, a.getEndProps());\n });\n return props;\n }\n\n onBind(): void {\n this.initAnimates();\n this.customAnimates.forEach(a => {\n a.onBind();\n });\n return;\n }\n\n onEnd(): void {\n this.customAnimates.forEach(a => {\n a.onEnd();\n });\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.updating) {\n return;\n }\n this.updating = true;\n this.customAnimates.forEach(a => {\n const easing = a.easing;\n const easingFunc = typeof easing === 'string' ? Easing[easing] : easing;\n ratio = easingFunc(ratio);\n a.onUpdate(end, ratio, out);\n });\n this.updating = false;\n return;\n }\n}\n","import type { EasingType, IGraphic } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { ACustomAnimate, AttributeUpdateType, NOWORK_ANIMATE_ATTR } from '@visactor/vrender-core';\nimport { isArray, isFunction, isNil, isObject, isValid } from '@visactor/vutils';\nimport type {\n IAnimationChannelInterpolator,\n IAnimationEffect,\n IAnimationParameters,\n IElement,\n IGlyphElement,\n IParsedAnimationAttrs\n} from '../../types';\nimport { isValidPointsChannel } from '../attributes/helpers';\nimport { Factory } from '../../core/factory';\n\nconst transformAnimationAttributes = (attributes: IParsedAnimationAttrs, element: IElement): IParsedAnimationAttrs => {\n if (!attributes) {\n return null;\n }\n\n if (attributes.from) {\n const from = attributes.from;\n const fromKeys = Object.keys(from);\n fromKeys.forEach(channel => {\n if (isNil(from[channel])) {\n delete from[channel];\n }\n });\n const computePoints = isValidPointsChannel(fromKeys, element.mark.markType) && !isValid(from.segments);\n if (computePoints) {\n const items = element.items.map(item => Object.assign({}, item, { nextAttrs: Object.assign({}, from) }));\n attributes.from = element.transformElementItems(items, element.mark.markType, computePoints);\n }\n }\n if (attributes.to) {\n const to = attributes.to;\n const toKeys = Object.keys(to);\n toKeys.forEach(channel => {\n if (isNil(to[channel])) {\n delete to[channel];\n }\n });\n const computePoints = isValidPointsChannel(toKeys, element.mark.markType) && !isValid(to.segments);\n if (computePoints) {\n const items = element.items.map(item => Object.assign({}, item, { nextAttrs: Object.assign({}, to) }));\n attributes.to = element.transformElementItems(items, element.mark.markType, computePoints);\n }\n }\n\n return attributes;\n};\n\nexport function typeAnimationAttributes(\n element: IElement,\n effect: IAnimationEffect,\n animationParameters: IAnimationParameters,\n parameters: any\n): IParsedAnimationAttrs {\n // const parameters =\n const options = isFunction(effect.options)\n ? effect.options.call(null, element.getDatum(), element, parameters)\n : effect.options;\n if (!effect.type || !Factory.getAnimationType(effect.type)) {\n return null;\n }\n const attributes = Factory.getAnimationType(effect.type)(element as IGlyphElement, options, animationParameters);\n\n return transformAnimationAttributes(attributes, element);\n}\n\nconst parseChannelValue = (\n element: IElement,\n channel: string,\n channelValue: any,\n animationParameters: IAnimationParameters,\n parameters: any\n) => {\n return isFunction(channelValue) ? channelValue(element.getDatum(), element, parameters) : channelValue;\n};\n\nexport function channelAnimationAttributes(\n element: IElement,\n effect: IAnimationEffect,\n animationParameters: IAnimationParameters,\n parameters: any\n): IParsedAnimationAttrs {\n const channel = effect.channel;\n let attributes: IParsedAnimationAttrs = null;\n\n if (isArray(channel)) {\n attributes = channel.reduce(\n (res, key) => {\n res.from[key] = element.getGraphicAttribute(key, true);\n res.to[key] = element.getGraphicAttribute(key, false);\n return res;\n },\n { from: {}, to: {} }\n );\n } else if (isObject(channel)) {\n attributes = Object.keys(channel).reduce(\n (res, key) => {\n const hasFrom = !isNil(channel[key]?.from);\n const hasTo = !isNil(channel[key]?.to);\n\n if (hasFrom || hasTo) {\n res.from[key] = hasFrom\n ? parseChannelValue(element, key, channel[key].from, animationParameters, parameters)\n : undefined;\n res.to[key] = hasTo\n ? parseChannelValue(element, key, channel[key].to, animationParameters, parameters)\n : element.getGraphicAttribute(key, false);\n }\n\n return res;\n },\n { from: {}, to: {} }\n );\n }\n\n return transformAnimationAttributes(attributes, element);\n}\n\nexport class CustomInterpolator extends ACustomAnimate {\n private _element: IElement;\n private _interpolator?: IAnimationChannelInterpolator;\n\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params: { interpolator: IAnimationChannelInterpolator; element: IElement; parameters?: any }\n ) {\n super(from, to, duration, easing, params);\n this._interpolator = params?.interpolator;\n this._element = params?.element;\n }\n\n onBind() {\n this.from = this.from ?? {};\n this.to = this.to ?? {};\n }\n\n getEndProps(): void | Record {\n return this.to;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (!this._interpolator || !this._element) {\n return;\n }\n this._interpolator.call(\n this,\n ratio,\n this.from,\n this.to,\n out,\n this._element.getDatum(),\n this._element,\n this.params.parameters\n );\n }\n}\n\nexport class AttributeAnimate extends ACustomAnimate {\n declare target: IGraphic;\n\n private _fromAttribute: any;\n private _toAttribute: any;\n\n getEndProps(): Record {\n return this.to;\n }\n\n onBind() {\n this.from = this.from ?? {};\n this.to = this.to ?? {};\n }\n\n onStart(): void {\n const excludedChannelMap = (this.target.constructor as any).NOWORK_ANIMATE_ATTR ?? NOWORK_ANIMATE_ATTR;\n const excludedChannels = Object.keys(excludedChannelMap).filter(channel => excludedChannelMap[channel] !== 0);\n this.subAnimate.animate.preventAttrs(excludedChannels);\n\n const from = Object.assign({}, this.from);\n const to = Object.assign({}, this.to);\n Object.keys(to).forEach(k => {\n if (excludedChannels.includes(k)) {\n from[k] = to[k];\n this.from[k] = to[k];\n } else if (isNil(from[k])) {\n from[k] = this.target.getComputedAttribute(k);\n }\n // if (this.to[k] === from[k]) {\n // delete from[k];\n // }\n });\n\n this.target.setAttributes(from, false, {\n type: AttributeUpdateType.ANIMATE_UPDATE,\n animationState: { ratio: 0, end: false }\n });\n\n this._fromAttribute = from;\n this._toAttribute = to;\n }\n\n onEnd(): void {\n this.target.setAttributes(this._toAttribute, false, {\n type: AttributeUpdateType.ANIMATE_END\n });\n }\n\n update(end: boolean, ratio: number, out: Record): void {\n if (this.updateCount === 0) {\n this.onFirstRun();\n }\n this.updateCount += 1;\n\n // Hack: waiting for canopus to remove invalid key when updating\n const lastProps = this.step.getLastProps();\n Object.keys(lastProps).forEach(key => {\n if (this.subAnimate.animate.validAttr(key)) {\n out[key] = lastProps[key];\n }\n });\n this.onUpdate(end, ratio, out);\n if (end) {\n this.onEnd();\n }\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n this.target.stepInterpolate(\n this.subAnimate,\n this.subAnimate.animate,\n out,\n this.step,\n ratio,\n end,\n this._toAttribute,\n this._fromAttribute\n );\n }\n}\n","import { isNil, isValidNumber } from '@visactor/vutils';\nimport type { IAnimate as IGraphicAnimate } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { ACustomAnimate, Animate, AnimateGroup, AnimateMode } from '@visactor/vrender-core';\nimport type {\n IAnimationChannelInterpolator,\n IAnimationCustomConstructor,\n IAnimationTimeline,\n IAnimator,\n IAnimatorOptions,\n IAnimationUnit,\n IAnimationParameters,\n IAnimationTimeSlice,\n IElement,\n IAnimationEffect\n} from '../../types';\nimport { AttributeAnimate, channelAnimationAttributes, CustomInterpolator, typeAnimationAttributes } from './attribute';\n\nAnimate.mode |= AnimateMode.SET_ATTR_IMMEDIATELY;\n\nlet GlobalAnimatorId = 0;\n\nconst isCustomAnimateCtor = (custom?: IAnimationChannelInterpolator | IAnimationCustomConstructor) => {\n return !isNil(custom) && custom.prototype instanceof ACustomAnimate;\n};\n\nexport class Animator implements IAnimator {\n id: number = GlobalAnimatorId++;\n element: IElement;\n animationOptions: IAnimatorOptions;\n isAnimating: boolean = false;\n\n private unit: IAnimationUnit;\n private runnings: IGraphicAnimate[] = [];\n private callbackFunction: (...args: any[]) => any;\n\n constructor(\n element: IElement,\n unit: IAnimationUnit,\n animationOptions: {\n state: string;\n timeline: IAnimationTimeline;\n id: string;\n }\n ) {\n this.element = element;\n this.animationOptions = animationOptions;\n this.unit = unit;\n }\n\n callback(callbackFunction: (...args: any[]) => void): this {\n this.callbackFunction = callbackFunction;\n return this;\n }\n\n animate(animationParameters: IAnimationParameters, parameters: any): this {\n this.isAnimating = true;\n\n this.animateElement(animationParameters, parameters);\n\n // if no valid running, end animating immediately\n if (this.runnings.length === 0) {\n this.animationEnd();\n }\n return this;\n }\n\n stop(stopState: 'start' | 'end' = 'end', invokeCallback: boolean = true): this {\n // FIXME: wait for VRender to fix 'end' parameter\n this.runnings.forEach(running => running.stop(stopState));\n this.animationEnd(invokeCallback);\n return this;\n }\n\n pause(): this {\n this.runnings.forEach(running => running.pause());\n return this;\n }\n\n resume(): this {\n this.runnings.forEach(running => running.resume());\n return this;\n }\n\n startAt(startTime: number): this {\n this.runnings.forEach(running => {\n const initialDelay = this.unit.initialDelay;\n running.startAt(initialDelay + startTime);\n });\n return this;\n }\n\n getTotalAnimationTime() {\n const timeLineDuration = this.unit.initialDelay + this.unit.loopDuration * this.unit.loopCount;\n return this.unit.totalTime ?? timeLineDuration;\n }\n\n getEndAttributes() {\n return this.runnings.reduce((attributes, running) => {\n return Object.assign(attributes, running.getEndProps());\n }, {} as Record);\n }\n\n private animationEnd(invokeCallback: boolean = true) {\n this.isAnimating = false;\n this.runnings = null;\n if (invokeCallback) {\n this.callbackFunction?.call(null);\n }\n }\n\n private animateElement(animationParameters: IAnimationParameters, parameters: any) {\n const graphicItem = this.element.getGraphicItem();\n\n if (!graphicItem) {\n return;\n }\n\n const graphicAnimate: IGraphicAnimate = graphicItem.animate();\n this.runnings.push(graphicAnimate);\n // initialDelay is only used at first loop\n graphicAnimate.startAt(this.unit.initialDelay);\n // execute loop animation\n graphicAnimate.wait(this.unit.loopDelay);\n this.unit.timeSlices.forEach(timeSlice => {\n this.animateTimeSlice(graphicAnimate, timeSlice, animationParameters, parameters);\n });\n graphicAnimate.wait(this.unit.loopDelayAfter);\n\n graphicAnimate.loop(this.unit.loopCount - 1);\n\n if (isValidNumber(this.unit.totalTime)) {\n // FIXME: use VRender api instead after VRender refactor is finished\n setTimeout(() => {\n if (graphicAnimate) {\n graphicAnimate.stop('end');\n }\n }, this.unit.totalTime);\n }\n\n graphicAnimate.onEnd(() => {\n this.runnings = this.runnings.filter(running => running !== graphicAnimate);\n if (this.runnings.length === 0) {\n this.animationEnd();\n }\n });\n }\n\n private animateTimeSlice(\n graphicAnimate: IGraphicAnimate,\n timeSlice: IAnimationTimeSlice,\n animationParameters: IAnimationParameters,\n parameters: any\n ) {\n const delay = timeSlice.delay as number;\n const delayAfter = timeSlice.delayAfter as number;\n const duration = timeSlice.duration as number;\n const effects = timeSlice.effects as IAnimationEffect[];\n\n // wait in loop animation before animation starts\n if (delay > 0) {\n graphicAnimate.wait(delay);\n }\n\n if (effects.length < 0) {\n graphicAnimate.wait(duration);\n } else {\n const customAnimates = effects\n .map((effect, index) => {\n const attributes =\n (effect.type\n ? typeAnimationAttributes(this.element, effect, animationParameters, parameters)\n : effect.channel\n ? channelAnimationAttributes(this.element, effect, animationParameters, parameters)\n : undefined) ?? {};\n\n const customOption = attributes.custom || effect?.custom;\n const customParametersOption = attributes?.customParameters || effect?.customParameters;\n\n if (\n attributes.from &&\n Object.keys(attributes.from).length &&\n this.unit &&\n this.animationOptions.timeline.controlOptions.immediatelyApply &&\n this.element.mark.markType !== 'component'\n ) {\n this.element.getGraphicItem().setAttributes(attributes.from);\n }\n\n const isCustomAnimate = isCustomAnimateCtor(customOption);\n const isCustomInterpolator = !isNil(customOption) && !isCustomAnimateCtor(customOption);\n\n if (isCustomInterpolator) {\n return new CustomInterpolator(attributes.from, attributes.to, duration, effect.easing, {\n interpolator: customOption as IAnimationChannelInterpolator,\n element: this.element,\n parameters: customParametersOption\n });\n } else if (isCustomAnimate) {\n return new (customOption as IAnimationCustomConstructor)(\n attributes.from,\n attributes.to,\n duration,\n effect.easing,\n customParametersOption\n );\n } else if (attributes.to) {\n return new AttributeAnimate(attributes.from, attributes.to, duration, effect.easing);\n }\n })\n .filter(animate => !isNil(animate));\n\n if (customAnimates.length === 1) {\n graphicAnimate.play(customAnimates[0]);\n } else if (customAnimates.length > 1) {\n graphicAnimate.play(new AnimateGroup(duration, customAnimates));\n }\n }\n\n if (delayAfter > 0) {\n graphicAnimate.wait(delayAfter);\n }\n }\n}\n","import { array, isFunction, isNil, merge } from '@visactor/vutils';\nimport type { IElement } from '../../types';\nimport type {\n IAnimationConfig,\n IAnimationTimeline,\n IAnimationTypeConfig,\n IParsedAnimationConfig,\n MarkFunctionValueType\n} from '../../types/animate';\nimport {\n DefaultAnimationControlOptions,\n DefaultAnimationDelay,\n DefaultAnimationDelayAfter,\n DefaultAnimationDuration,\n DefaultAnimationEasing,\n DefaultAnimationLoop,\n DefaultAnimationOneByOne,\n DefaultAnimationStartTime\n} from '../constants';\n\nfunction transformToTimelineConfig(animationConfig: IAnimationConfig): IAnimationTimeline {\n if (isNil((animationConfig as IAnimationTimeline).timeSlices)) {\n const typeConfig = animationConfig as IAnimationTypeConfig;\n // transform type animation config into timeline animation config\n return {\n startTime: typeConfig.startTime ?? DefaultAnimationStartTime,\n totalTime: typeConfig.totalTime,\n oneByOne: typeConfig.oneByOne ?? DefaultAnimationOneByOne,\n loop: typeConfig.loop ?? DefaultAnimationLoop,\n controlOptions: merge({}, DefaultAnimationControlOptions, typeConfig.controlOptions ?? {}),\n timeSlices: [\n {\n duration: typeConfig.duration ?? DefaultAnimationDuration,\n delay: typeConfig.delay ?? DefaultAnimationDelay,\n delayAfter: typeConfig.delayAfter ?? DefaultAnimationDelayAfter,\n effects: [\n {\n type: typeConfig.type,\n channel: typeConfig.channel,\n custom: typeConfig.custom,\n easing: typeConfig.easing ?? DefaultAnimationEasing,\n customParameters: typeConfig.customParameters,\n options: typeConfig.options\n }\n ]\n }\n ]\n };\n }\n\n const timeSlices = array((animationConfig as IAnimationTimeline).timeSlices);\n const formattedTimeSlices = timeSlices.filter(timeSlice => {\n return timeSlice.effects && array(timeSlice.effects).filter(effect => effect.channel || effect.type).length;\n });\n\n if (formattedTimeSlices.length) {\n // fill up default animation config\n return {\n startTime: (animationConfig as IAnimationTimeline).startTime ?? DefaultAnimationStartTime,\n totalTime: (animationConfig as IAnimationTimeline).totalTime,\n oneByOne: (animationConfig as IAnimationTimeline).oneByOne ?? DefaultAnimationOneByOne,\n loop: (animationConfig as IAnimationTimeline).loop ?? DefaultAnimationLoop,\n controlOptions: merge({}, DefaultAnimationControlOptions, animationConfig.controlOptions ?? {}),\n timeSlices: formattedTimeSlices.map(timeSlice => {\n return {\n duration: timeSlice.duration,\n delay: timeSlice.delay ?? DefaultAnimationDelay,\n delayAfter: timeSlice.delayAfter ?? DefaultAnimationDelayAfter,\n effects: array(timeSlice.effects)\n .filter(effect => effect.channel || effect.type)\n .map(effect => {\n return {\n type: effect.type,\n channel: effect.channel,\n custom: effect.custom,\n easing: effect.easing ?? DefaultAnimationEasing,\n customParameters: effect.customParameters,\n options: effect.options\n };\n })\n };\n }),\n partitioner: (animationConfig as IAnimationTimeline).partitioner,\n sort: (animationConfig as IAnimationTimeline).sort\n };\n }\n\n return;\n}\n\nexport function normalizeAnimationConfig(\n config: Record\n): Array {\n let normalizedConfig: Array = [];\n\n Object.keys(config).forEach(state => {\n normalizedConfig = normalizedConfig.concat(normalizeStateAnimationConfig(state, config[state]));\n });\n return normalizedConfig;\n}\n\nexport function normalizeStateAnimationConfig(\n state: string,\n config: IAnimationConfig | IAnimationConfig[],\n initialIndex: number = 0\n): Array {\n const normalizedConfig: Array = [];\n let index = initialIndex;\n array(config).forEach(animationConfig => {\n const timelineConfig = transformToTimelineConfig(animationConfig);\n if (timelineConfig) {\n normalizedConfig.push({\n state,\n id: timelineConfig.id ?? `${state}-${index}`,\n timeline: timelineConfig,\n originConfig: animationConfig\n });\n index += 1;\n }\n });\n return normalizedConfig;\n}\n\nexport function invokeAnimateSpec(spec: MarkFunctionValueType, element: IElement, parameters: any): T {\n if (isFunction(spec)) {\n return spec.call(null, element.getDatum(), element, parameters);\n }\n return spec;\n}\n","import { isNil } from '@visactor/vutils';\nimport type { IAnimateArranger, IAnimator } from '../../types/animate';\n\nexport class Arranger implements IAnimateArranger {\n afterArranger: IAnimateArranger;\n parallelArrangers: IAnimateArranger[] = [this];\n\n animators: IAnimator[];\n totalTime: number = 0;\n startTime: number = 0;\n endTime: number = 0;\n\n constructor(animators: IAnimator[]) {\n this.animators = animators.filter(animator => !isNil(animator));\n this.totalTime = this.animators.reduce((time, animator) => {\n return Math.max(time, animator.getTotalAnimationTime());\n }, 0);\n }\n\n parallel(arranger: IAnimateArranger) {\n const parallelArrangers = Array.from(new Set(this.parallelArrangers.concat(arranger.parallelArrangers)));\n parallelArrangers.forEach(arranger => {\n arranger.parallelArrangers = parallelArrangers;\n });\n this.arrangeTime();\n return this;\n }\n\n after(arranger: IAnimateArranger) {\n this.afterArranger = arranger;\n this.arrangeTime();\n return this;\n }\n\n arrangeTime() {\n const parallelTime = this.parallelArrangers.reduce((time, arranger) => {\n return Math.max(time, arranger.totalTime);\n }, this.totalTime);\n const startTime = this.parallelArrangers.reduce((time, arranger) => {\n return Math.max(time, arranger.afterArranger?.endTime ?? 0);\n }, 0);\n\n this.parallelArrangers.forEach(arranger => {\n arranger.startTime = startTime;\n arranger.endTime = startTime + parallelTime;\n arranger.animators.forEach(animator => {\n animator.startAt(startTime);\n });\n });\n }\n}\n","import { array, isNil, isNumber } from '@visactor/vutils';\nimport type {\n IAnimate,\n IAnimationConfig,\n IAnimationParameters,\n IAnimationTimeline,\n IAnimationTimeSlice,\n IAnimationUnit,\n IAnimator,\n IParsedAnimationConfig\n} from '../../types/animate';\nimport { Animator } from './animator';\nimport { invokeAnimateSpec, normalizeAnimationConfig, normalizeStateAnimationConfig } from './config';\nimport { DefaultAnimationParameters, ImmediateAnimationState } from '../constants';\nimport type { AnimationEvent, IElement, IMark, MarkFunctionType } from '../../types';\nimport { invokeFunctionType } from '../../parse/util';\nimport { Arranger } from './arranger';\nimport { DiffState, HOOK_EVENT } from '../enums';\n\nexport class Animate implements IAnimate {\n mark: IMark;\n state: MarkFunctionType | null = null;\n configs: Array;\n immediateConfigs: Array = [];\n\n private isEnabled: boolean = true;\n private disabledStates: string[] = [];\n // store animator by animation state\n private animators: Map = new Map();\n // count animation for each elements\n private elementRecorder: WeakMap<\n IElement,\n {\n prevState: string;\n count: { [state: string]: number };\n }\n > = new WeakMap();\n private timelineCount: Record = {};\n // record: IAnimationRecord;\n\n constructor(mark: IMark, config: Record) {\n this.mark = mark;\n this.configs = normalizeAnimationConfig(config ?? {});\n }\n\n getAnimationConfigs(animationState: string) {\n if (!this.isEnabled) {\n return [];\n }\n return (this.configs ?? []).filter(config => config.state === animationState);\n }\n\n updateConfig(config: Record) {\n this.configs = normalizeAnimationConfig(config ?? {});\n }\n\n updateState(state: MarkFunctionType | null) {\n this.state = state;\n }\n\n animate() {\n if (!this.isEnabled || !this.configs || !this.configs.length) {\n return;\n }\n\n const elements = this.mark.getAllElements();\n const parameters = this.mark.parameters();\n\n elements.forEach(element => {\n // TODO: if element is restored, clear isReserved flag\n if (element.isReserved && element.diffState !== DiffState.exit) {\n element.isReserved = false;\n }\n // clear previous animation when animation state changed\n const prevElementState = this.elementRecorder.get(element)?.prevState;\n const needStopAnimation = this.configs.some(config => {\n return (\n prevElementState !== element.diffState &&\n config.state === prevElementState &&\n config.timeline.controlOptions.stopWhenStateChange\n );\n });\n if (needStopAnimation) {\n // do not clear exit element in case it will animate\n this.clearElementAnimation(element, false);\n }\n });\n\n this.configs.forEach(config => {\n this.animateByTimeline(config, elements, parameters);\n });\n\n this.mark.cleanExitElements();\n\n return this;\n }\n\n runAnimationByState(animationState: string) {\n if (!this.isEnabled) {\n return;\n }\n\n // FIXME: maybe do nothing if state animation is already running\n // if (this.animators.get(animationState)?.length > 0) { return; }\n\n const stateConfigs = this.configs.filter(config => config.state === animationState);\n const elements = this.mark.getAllElements();\n const parameters = this.mark.parameters();\n\n const animators = stateConfigs.reduce((animators, config) => {\n return animators.concat(this.animateByTimeline(config, elements, parameters, true));\n }, [] as IAnimator[]);\n\n return new Arranger(animators);\n }\n stopAnimationByState(animationState: string) {\n const animators = this.animators.get(animationState);\n if (animators) {\n animators.forEach(animator => animator.stop());\n }\n return this;\n }\n pauseAnimationByState(animationState: string) {\n const animators = this.animators.get(animationState);\n if (animators) {\n animators.forEach(animator => animator.pause());\n }\n return this;\n }\n resumeAnimationByState(animationState: string) {\n const animators = this.animators.get(animationState);\n if (animators) {\n animators.forEach(animator => animator.resume());\n }\n return this;\n }\n\n run(config: IAnimationConfig | IAnimationConfig[]) {\n if (!this.isEnabled) {\n return;\n }\n\n const parsedConfigs = normalizeStateAnimationConfig(ImmediateAnimationState, config, this.immediateConfigs.length);\n this.immediateConfigs = this.immediateConfigs.concat(parsedConfigs);\n const elements = this.mark.getAllElements();\n const parameters = this.mark.parameters();\n\n const animators = parsedConfigs.reduce((animators, config) => {\n return animators.concat(this.animateByTimeline(config, elements, parameters, true));\n }, [] as IAnimator[]);\n\n return new Arranger(animators);\n }\n stop() {\n // map will be cleared in animator callback\n this.animators.forEach(animators => {\n animators.forEach(animator => animator.stop());\n });\n return this;\n }\n pause() {\n this.animators.forEach(stateAnimators => stateAnimators.forEach(animator => animator.pause()));\n return this;\n }\n resume() {\n this.animators.forEach(stateAnimators => stateAnimators.forEach(animator => animator.resume()));\n return this;\n }\n reverse() {\n /** Animation scheduler api, resume the recorded animations */\n return this;\n }\n restart() {\n /** Animation scheduler api, resume current animations */\n return this;\n }\n record() {\n /** Animation scheduler api, start to record a timestamp */\n return this;\n }\n recordEnd() {\n /** Animation scheduler api, end to record a timestamp */\n return this;\n }\n\n isAnimating() {\n let isAnimating = false;\n this.animators.forEach(animators => {\n isAnimating = isAnimating || animators.some(animator => animator.isAnimating);\n });\n return isAnimating;\n }\n\n isElementAnimating(element: IElement) {\n const stateAnimationCounts = this.elementRecorder.get(element)?.count;\n return isNil(stateAnimationCounts) || Object.values(stateAnimationCounts).every(count => count === 0);\n }\n\n getAnimatorCount() {\n let count = 0;\n this.animators.forEach(animators => (count += animators.length));\n return count;\n }\n\n getAllAnimators() {\n const allAnimators: IAnimator[] = [];\n this.animators.forEach(animators => {\n allAnimators.push(...animators);\n });\n return allAnimators;\n }\n\n getElementAnimators(element: IElement | IElement[], animationState?: string) {\n const elements = array(element);\n let animators: IAnimator[] = [];\n if (animationState) {\n animators = this.animators.get(animationState) ?? [];\n } else {\n this.animators.forEach(stateAnimators => {\n animators = animators.concat(stateAnimators);\n });\n }\n return animators.filter(animator => elements.includes(animator.element));\n }\n\n enable() {\n this.isEnabled = true;\n return this;\n }\n disable() {\n this.isEnabled = false;\n this.stop();\n this.animators.clear();\n return this;\n }\n enableAnimationState(state: string | string[]) {\n const states = array(state);\n this.disabledStates = this.disabledStates.filter(state => !states.includes(state));\n return this;\n }\n disableAnimationState(state: string | string[]) {\n const states = array(state);\n this.disabledStates = this.disabledStates.concat(states);\n return this;\n }\n\n release() {\n this.stop();\n // we need to clear map\n this.animators.clear();\n\n this.configs = null;\n this.animators = null;\n this.elementRecorder = null;\n this.timelineCount = null;\n }\n\n private animateByTimeline(\n config: IParsedAnimationConfig,\n elements: IElement[],\n parameters: any,\n forceState: boolean = false\n ) {\n const animators: IAnimator[] = [];\n const animatedElements = elements.filter(element => {\n // do not animate on element which is running exit animation\n // if an element is reserved, it should be set for exit animation and will be removed\n const checkExit = !(element.isReserved && element.diffState === DiffState.exit);\n // do not check animation state if forceState is set\n const state = this.getAnimationState(element);\n const checkDisabled = !this.disabledStates.includes(state);\n const checkState = forceState || state === config.state;\n // filter elements by partitioner config\n const checkPartitioner =\n !config.timeline.partitioner || config.timeline.partitioner(element.getDatum(), element, parameters);\n return checkExit && checkDisabled && checkState && checkPartitioner;\n });\n\n if (animatedElements.length) {\n if (isNil(this.timelineCount[config.id])) {\n this.timelineCount[config.id] = 0;\n }\n\n if (config.timeline.sort) {\n animatedElements.sort((elementA, elementB) => {\n return config.timeline.sort(elementA.getDatum(), elementB.getDatum(), elementA, elementB, parameters);\n });\n }\n const width = this.mark.view.width();\n const height = this.mark.view.height();\n const animationParameters = {\n width,\n height,\n group: this.mark.group ?? null,\n mark: this.mark,\n view: this.mark.view,\n elementCount: animatedElements.length,\n elementIndex: 0\n };\n animatedElements.forEach((element, index) => {\n animationParameters.elementIndex = index;\n // add animation parameter into parameters\n const mergedParameters = Object.assign({ [DefaultAnimationParameters]: animationParameters }, parameters);\n const animationUnit = this.getAnimationUnit(\n config.timeline,\n element,\n index,\n animatedElements.length,\n mergedParameters\n );\n animators.push(this.animateElement(config, animationUnit, element, animationParameters, mergedParameters));\n });\n }\n return animators;\n }\n\n private animateElement(\n config: IParsedAnimationConfig,\n animationUnit: IAnimationUnit,\n element: IElement,\n animationParameters: IAnimationParameters,\n parameters: any\n ) {\n // create animator\n const animator = new Animator(element, animationUnit, config);\n\n // start animating\n animator.animate(animationParameters, parameters);\n // return when animator has no valid animation\n if (!animator.isAnimating) {\n return;\n }\n if (element.diffState === DiffState.exit) {\n element.isReserved = true;\n }\n\n const isFirstAnimator = this.timelineCount[config.id] === 0;\n\n this.timelineCount[config.id] += 1;\n const elementRecord = this.elementRecorder.get(element) ?? { prevState: config.state, count: {} };\n elementRecord.prevState = config.state;\n elementRecord.count[config.state] = (elementRecord.count[config.state] ?? 0) + 1;\n this.elementRecorder.set(element, elementRecord);\n const stateData = this.animators.get(config.state);\n if (!stateData) {\n this.animators.set(config.state, [animator]);\n } else {\n stateData.push(animator);\n }\n // this.animators.set(config.state, (this.animators.get(config.state) ?? []).concat(animator));\n // invoke callback when animation finish\n animator.callback(() => {\n this.handleAnimatorEnd(animator);\n });\n\n // FIXME: handle multiple timelines with same animation state\n // emit animation start event\n const animationEvent: AnimationEvent = {\n mark: this.mark,\n animationState: config.state,\n animationConfig: config.originConfig\n };\n if (isFirstAnimator) {\n this.mark.emit(HOOK_EVENT.ANIMATION_START, animationEvent);\n }\n this.mark.emit(HOOK_EVENT.ELEMENT_ANIMATION_START, animationEvent, element);\n\n return animator;\n }\n\n private getAnimationState(element: IElement): string {\n const customState = invokeFunctionType(this.state, this.mark.parameters(), element.getDatum(), element);\n return customState ?? element.diffState;\n }\n\n private getAnimationUnit(\n timeline: IAnimationTimeline,\n element: IElement,\n index: number,\n elementCount: number,\n parameters: any\n ): IAnimationUnit {\n const timeSlices: IAnimationTimeSlice[] = [];\n const startTime = invokeAnimateSpec(timeline.startTime, element, parameters);\n const totalTime = invokeAnimateSpec(timeline.totalTime, element, parameters);\n const oneByOne = invokeAnimateSpec(timeline.oneByOne, element, parameters);\n const loop = invokeAnimateSpec(timeline.loop, element, parameters);\n\n let loopTime = 0;\n (timeline.timeSlices as IAnimationTimeSlice[]).forEach(timeSlice => {\n const delay = invokeAnimateSpec(timeSlice.delay, element, parameters);\n const delayAfter = invokeAnimateSpec(timeSlice.delayAfter, element, parameters);\n const duration = invokeAnimateSpec(timeSlice.duration, element, parameters) ?? totalTime / elementCount;\n const effects = array(timeSlice.effects).map(effect =>\n Object.assign({}, effect, {\n customParameters: invokeAnimateSpec(effect.customParameters, element, parameters)\n })\n );\n timeSlices.push({\n effects,\n duration,\n delay,\n delayAfter\n });\n loopTime += delay + duration + delayAfter;\n });\n\n const oneByOneDelay = isNumber(oneByOne) ? oneByOne : oneByOne === true ? loopTime : 0;\n return {\n initialDelay: startTime,\n loopCount: isNumber(loop) ? loop : loop === true ? Infinity : 1,\n loopDelay: oneByOneDelay * index,\n loopDelayAfter: oneByOneDelay * (elementCount - index - 1),\n loopAnimateDuration: loopTime,\n loopDuration: loopTime + oneByOneDelay * (elementCount - 1),\n totalTime,\n timeSlices\n };\n }\n\n private clearElementAnimation(element: IElement, clearElement: boolean = true) {\n this.animators.forEach(animators => {\n animators.forEach(animator => {\n if (animator.element === element) {\n // if previous animation state is exit, modify graphic item channel to start\n if (animator.animationOptions.state === DiffState.exit) {\n animator.stop('start', false);\n } else {\n animator.stop('end', false);\n }\n this.handleAnimatorEnd(animator, clearElement);\n }\n });\n });\n this.elementRecorder.delete(element);\n }\n\n private clearAllElements() {\n const elements = this.mark.getAllElements();\n if (elements) {\n elements.forEach((element, i) => {\n // only update mark in previous invocation\n this.clearElement(element, i === elements.length - 1);\n });\n }\n }\n\n private clearElement(element: IElement, updateMark: boolean = true) {\n this.clearElementAnimation(element);\n // element might already be released\n if (element.getGraphicItem()) {\n // if element stops animating or needs to be removed, clear all cached attributes\n element.clearGraphicAttributes();\n // remove element from mark if exit animation is finished\n if (element.diffState === DiffState.exit) {\n element.isReserved = false;\n }\n if (updateMark) {\n this.mark.cleanExitElements();\n }\n // TODO: waiting for vRender to optimize bound cache logic, otherwise this line\n // will cause huge performance waste in multiple animation like appear & disappear.\n // if (updateMark) mark.updateBounds();\n }\n }\n\n private handleAnimatorEnd(animator: IAnimator, clearElement: boolean = true) {\n const element = animator.element;\n const animationOptions = animator.animationOptions;\n const animationState = animationOptions.state;\n const isImmediateAnimation = animationState === ImmediateAnimationState;\n\n // sub element animation count\n const stateAnimationCounts = this.elementRecorder.get(element).count;\n stateAnimationCounts[animationState] -= 1;\n // FIXME: maybe delete zero animationState\n // if (stateAnimationCounts[animationState] === 0) {\n // delete stateAnimationCounts[animationState];\n // }\n\n this.animators.set(\n animationState,\n this.animators.get(animationState).filter(ani => ani !== animator)\n );\n if (this.animators.get(animationState).length === 0) {\n this.animators.delete(animationState);\n }\n this.timelineCount[animationOptions.id] -= 1;\n const isLastAnimator = this.timelineCount[animationOptions.id] === 0;\n\n const originAnimationConfig = isImmediateAnimation\n ? this.immediateConfigs.find(config => config.id === animationOptions.id).originConfig\n : this.configs.find(config => config.id === animationOptions.id).originConfig;\n if (isLastAnimator) {\n delete this.timelineCount[animationOptions.id];\n // delete config when immediate executed animation is finished\n if (isImmediateAnimation) {\n this.immediateConfigs = this.immediateConfigs.filter(config => config.id !== animationOptions.id);\n }\n }\n\n if (clearElement) {\n if (Object.keys(this.timelineCount).length === 0) {\n this.clearAllElements();\n } else if (animationState === DiffState.exit && stateAnimationCounts[DiffState.exit] === 0) {\n // if all exit animations are finished\n this.clearElement(element);\n }\n }\n\n // emit animation end event\n const animationEvent: AnimationEvent = {\n mark: this.mark,\n animationState,\n animationConfig: originAnimationConfig\n };\n if (isLastAnimator) {\n this.mark.emit(HOOK_EVENT.ANIMATION_END, animationEvent);\n }\n this.mark.emit(HOOK_EVENT.ELEMENT_ANIMATION_END, animationEvent, element);\n }\n}\n","import type { IGroup, INode } from '@visactor/vrender-core';\nimport { isNil, isString } from '@visactor/vutils';\nimport { BridgeElementKey, CollectionMarkType, DefaultKey, DefaultMarkData, Mark3DType } from '../graph/constants';\nimport {\n DiffState,\n GrammarMarkType,\n LayoutState,\n HOOK_EVENT,\n GrammarTypeEnum,\n BuiltInEncodeNames\n} from '../graph/enums';\nimport { Differ, groupData } from '../graph/mark/differ';\nimport { Animate } from '../graph/animation/animate';\nimport { createGraphicItem, removeGraphicItem } from '../graph/util/graphic';\nimport { GrammarBase } from './grammar-base';\nimport type {\n GrammarType,\n ICoordinate,\n IData,\n IElement,\n IGrammarBase,\n IGroupMark,\n IMark,\n IMarkConfig,\n IView,\n MarkAnimationSpec,\n MarkBaseLayoutSpec,\n MarkFunctionType,\n MarkKeySpec,\n MarkLayoutCallback,\n MarkLayoutSpec,\n MarkSortSpec,\n MarkSpec,\n MarkStateSpec,\n MarkType,\n TransformSpec,\n ProgressiveContext,\n IProgressiveTransformResult,\n Nil,\n IAnimate,\n MarkStateSortSpec,\n BaseSingleEncodeSpec\n} from '../types';\nimport { isFieldEncode, isScaleEncode, parseEncodeType } from '../parse/mark';\nimport { getGrammarOutput, parseField, isFunctionType } from '../parse/util';\nimport { parseTransformSpec } from '../parse/transform';\nimport { createElement } from '../graph/util/element';\nimport { invokeEncoder, invokeEncoderToItems, splitEncoderInLarge } from '../graph/mark/encode';\nimport { isPositionOrSizeChannel, transformsByType } from '../graph/attributes';\nimport getExtendedEvents from '../graph/util/events-extend';\nimport type { IBaseScale } from '@visactor/vscale';\nimport { EVENT_SOURCE_VIEW } from './constants';\n\nexport class Mark extends GrammarBase implements IMark {\n readonly grammarType: GrammarType = 'mark';\n\n protected declare spec: MarkSpec;\n\n /**\n * only need to clear elements after join and render\n * but `handleRenderEnd` will be call after every render\n */\n protected needClear?: boolean;\n\n coord: ICoordinate;\n\n disableCoordinateTransform: boolean;\n\n // mark properties\n markType: MarkType;\n\n group: IGroupMark | undefined;\n /** 非group mark,对应的容器节点 */\n graphicItem?: IGroup;\n graphicIndex: number;\n /** mark下的element,对应的父节点 */\n graphicParent?: IGroup;\n\n elements: IElement[] = [];\n elementMap: Map = new Map();\n\n isUpdated: boolean = true;\n\n private _groupKeys: string[];\n\n /** whether mark enter encode is updated */\n private _isReentered: boolean = false;\n\n private _context: any;\n\n private renderContext?: {\n large: boolean;\n parameters?: any;\n progressive?: ProgressiveContext;\n beforeTransformProgressive?: IProgressiveTransformResult;\n };\n animate: IAnimate = new Animate(this, {});\n\n protected differ = new Differ([]);\n\n private _delegateEvent: (event: any, type: string) => void;\n\n private _finalParameters: any;\n\n constructor(view: IView, markType: MarkType, group?: IGroupMark) {\n super(view);\n this.markType = markType;\n this.spec.type = markType;\n this.spec.encode = { update: {} };\n this.spec.group = group;\n if (group) {\n this.group = group;\n this.attach(group);\n group.appendChild(this);\n }\n }\n\n parse(spec: MarkSpec) {\n super.parse(spec);\n\n // TODO: add group api\n if (this.spec.group) {\n const groupMark = isString(this.spec.group) ? this.view.getMarkById(this.spec.group) : this.spec.group;\n this.detach(groupMark);\n }\n const groupMark = isString(spec.group) ? this.view.getMarkById(spec.group) : spec.group;\n this.attach(groupMark);\n\n this.join(spec.from?.data, spec.key, spec.sort, spec.groupBy, spec.groupSort);\n this.coordinate(spec.coordinate);\n this.state(spec.state, this.spec.stateSort);\n\n // remove old encode\n Object.keys(this.spec.encode ?? {}).forEach(state => {\n this.encodeState(state, {}, true);\n });\n\n // add new encode\n Object.keys(spec.encode ?? {}).forEach(state => {\n this.encodeState(state, spec.encode[state]);\n });\n this.animation(spec.animation);\n this.animationState(spec.animationState);\n this.morph(spec.morph, spec.morphKey, spec.morphElementKey);\n this.layout(spec.layout);\n this.configure(spec);\n this.transform(spec.transform);\n\n this.parseAddition(spec);\n\n this.spec = spec;\n this.markType = spec.type as MarkType;\n\n this.commit();\n return this;\n }\n\n parameters() {\n // apply last parameters after prepareRelease\n return this._finalParameters ?? super.parameters();\n }\n\n protected parseAddition(spec: MarkSpec) {\n return this;\n }\n\n reuse(grammar: IGrammarBase) {\n if (grammar.grammarType !== this.grammarType) {\n return this;\n }\n const mark = grammar as Mark;\n this.markType = mark.markType;\n this.coord = mark.coord;\n\n this.elementMap = mark.elementMap;\n this.elements = mark.elements;\n this.elementMap.forEach(element => (element.mark = this));\n\n this.differ = mark.differ;\n this.animate = mark.animate;\n this.animate.mark = this;\n\n this._context = mark._context;\n // set group in later evaluate progress\n this.graphicItem = mark.graphicItem;\n this.graphicIndex = mark.graphicIndex;\n this.graphicParent = mark.graphicParent;\n\n this.needClear = mark.needClear;\n this.isUpdated = mark.isUpdated;\n\n return this;\n }\n\n needLayout() {\n // 后续可以加上Visible 判断等\n return !isNil(this.spec.layout);\n }\n\n handleLayoutEnd() {\n // if ((this.spec?.layout as MarkBaseLayoutSpec)?.skipBeforeLayouted) {\n // this.run();\n // }\n }\n\n handleRenderEnd() {\n /**\n * only need to clear elements after join and render\n * but `handleRenderEnd` will be call after every render\n */\n if (!this.needClear) {\n return;\n }\n // clear exit elements\n this.cleanExitElements();\n // clear element channels\n this.elementMap.forEach(element => {\n if (element.diffState === DiffState.exit) {\n element.clearGraphicAttributes();\n } else {\n element.clearChangedGraphicAttributes();\n }\n });\n this.differ.updateToCurrent();\n this.needClear = false;\n }\n\n evaluateMainTasks(data: any[], parameters: any) {\n if (this.needSkipBeforeLayout() && this.view.getLayoutState() === LayoutState.before) {\n return this;\n }\n\n const stage = this.view.renderer?.stage();\n\n this.init(stage, parameters);\n const transformData = this.evaluateTransformSync(\n this._getTransformsBeforeJoin(),\n data ?? DefaultMarkData,\n parameters\n );\n let inputData = transformData?.progressive ? data : (transformData as any[]);\n\n this.evaluateGroup(inputData);\n\n this.renderContext = this.parseRenderContext(inputData, parameters);\n if (!this.renderContext.progressive) {\n if (transformData?.progressive) {\n this.renderContext.parameters = parameters;\n this.renderContext.beforeTransformProgressive = transformData.progressive;\n inputData = transformData.progressive.output();\n }\n this.emit(HOOK_EVENT.BEFORE_MARK_JOIN);\n // FIXME: better default upstream\n this.evaluateJoin(inputData);\n this.emit(HOOK_EVENT.AFTER_MARK_JOIN);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_STATE);\n this.evaluateState(this.elements, this.spec.state, parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_STATE);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_ENCODE);\n this.evaluateEncode(this.elements, this._getEncoders(), parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_ENCODE);\n } else {\n this.differ.reset();\n this.elementMap.clear();\n this.evaluateProgressive();\n }\n\n this.emit(HOOK_EVENT.BEFORE_MARK_UPDATE);\n this.update(this.spec);\n this.emit(HOOK_EVENT.AFTER_MARK_UPDATE);\n\n return this;\n }\n\n protected evaluateGroup(data: any[]) {\n if (this.markType === GrammarMarkType.group) {\n return;\n }\n const currentData = data ?? DefaultMarkData;\n const res = groupData(currentData, this.spec.groupBy, this.spec.groupSort);\n const groupKeys = res.keys as string[];\n\n this._groupKeys = groupKeys;\n\n this.differ.setCurrentData(res);\n }\n\n private _getTransformsAfterEncodeItems() {\n return this.transforms && this.transforms.filter(entry => entry.markPhase === 'afterEncodeItems');\n }\n\n private _getTransformsAfterEncode() {\n return (\n this.transforms && this.transforms.filter(entry => isNil(entry.markPhase) || entry.markPhase === 'afterEncode')\n );\n }\n\n private _getTransformsBeforeJoin() {\n return this.transforms ? this.transforms.filter(entry => entry.markPhase === 'beforeJoin') : [];\n }\n\n async evaluate(data: any[], parameters: any) {\n this.evaluateMainTasks(data, parameters);\n if (!this.renderContext?.progressive) {\n await this.evaluateTransform(this._getTransformsAfterEncode(), this.elements, parameters);\n }\n\n return this;\n }\n\n evaluateSync = (data: any[], parameters: any) => {\n this.evaluateMainTasks(data, parameters);\n\n if (!this.renderContext?.progressive) {\n this.evaluateTransformSync(this._getTransformsAfterEncode(), this.elements, parameters);\n }\n\n return this;\n };\n\n output() {\n return this;\n }\n\n join(\n data: IData | string | Nil,\n key?: MarkKeySpec,\n sort?: MarkSortSpec,\n groupBy?: MarkKeySpec,\n groupSort?: MarkSortSpec\n ) {\n // set data source\n if (this.grammarSource) {\n this.detach(this.grammarSource);\n this.grammarSource = null;\n }\n this.spec.from = null;\n if (!isNil(data)) {\n if (isString(data)) {\n this.grammarSource = this.view.getDataById(data);\n } else {\n this.grammarSource = data;\n }\n this.spec.from = { data };\n this.attach(this.grammarSource);\n }\n\n // set key & sort\n this.spec.key = key;\n this.spec.sort = sort;\n this.spec.groupBy = groupBy;\n this.spec.groupSort = groupSort;\n\n this.commit();\n return this;\n }\n\n coordinate(coordinate: ICoordinate | string | Nil) {\n if (isString(coordinate)) {\n this.coord = this.view.getCoordinateById(coordinate);\n } else {\n this.coord = coordinate;\n }\n this.attach(this.coord);\n this.commit();\n return this;\n }\n\n state(state: MarkFunctionType | Nil, stateSort?: MarkStateSortSpec) {\n this.spec.stateSort = stateSort;\n\n return this.setFunctionSpec(state, 'state');\n }\n\n encode(channel: string | BaseSingleEncodeSpec, value?: MarkFunctionType | boolean, clear?: boolean): this {\n return this.encodeState(DiffState.update, channel, value, clear);\n }\n\n encodeState(\n state: string,\n channel: string | BaseSingleEncodeSpec,\n value?: MarkFunctionType | boolean,\n clear?: boolean\n ): this {\n if (state === DiffState.enter) {\n this._isReentered = true;\n }\n\n if (this.spec.encode[state]) {\n const lastEncoder = this.spec.encode[state];\n // detach last dependencies\n if (isFunctionType(lastEncoder)) {\n this.detach(parseEncodeType(lastEncoder, this.view));\n } else {\n const isSingleChannel = isString(channel);\n const clearAll = (isSingleChannel && clear) || (!isSingleChannel && value);\n\n if (clearAll) {\n Object.keys(lastEncoder).forEach(c => {\n this.detach(parseEncodeType(lastEncoder[c], this.view));\n });\n\n this.spec.encode[state] = {};\n } else if (isSingleChannel) {\n this.detach(parseEncodeType(lastEncoder[channel], this.view));\n } else {\n Object.keys(channel).forEach(c => {\n this.detach(parseEncodeType(lastEncoder[c], this.view));\n });\n }\n }\n }\n\n if (channel) {\n if (!this.spec.encode[state]) {\n this.spec.encode[state] = {};\n }\n\n // update encode & append new dependencies\n if (isString(channel)) {\n this.spec.encode[state][channel] = value;\n this.attach(parseEncodeType(value, this.view));\n } else if (isFunctionType(channel)) {\n this.spec.encode[state] = channel;\n this.attach(parseEncodeType(channel, this.view));\n } else if (channel) {\n Object.assign(this.spec.encode[state], channel);\n Object.values(channel).forEach(channelEncoder => {\n this.attach(parseEncodeType(channelEncoder, this.view));\n });\n }\n }\n\n this.commit();\n return this;\n }\n\n protected _getEncoders() {\n return this.spec.encode ?? {};\n }\n\n animation(animationConfig: MarkAnimationSpec | Nil): this {\n this.spec.animation = animationConfig;\n return this;\n }\n\n animationState(animationState: MarkFunctionType | Nil): this {\n return this.setFunctionSpec(animationState, 'animationState');\n }\n\n layout(layout: MarkLayoutSpec | MarkLayoutCallback | Nil): this {\n this.spec.layout = layout;\n this.commit();\n return this;\n }\n\n morph(enableMorph: boolean, morphKey?: string, morphElementKey?: string): this {\n this.spec.morph = enableMorph;\n this.spec.morphKey = morphKey;\n this.spec.morphElementKey = morphElementKey;\n return this;\n }\n\n transform(transforms: TransformSpec[] | Nil): this {\n const prevTransforms = parseTransformSpec(this.spec.transform, this.view);\n if (prevTransforms) {\n this.detach(prevTransforms.refs);\n this.transforms = [];\n }\n\n const nextTransforms = parseTransformSpec(transforms, this.view);\n if (nextTransforms) {\n this.attach(nextTransforms.refs);\n this.transforms = nextTransforms.transforms;\n }\n\n this.spec.transform = transforms;\n this.commit();\n return this;\n }\n\n configure(config: IMarkConfig | Nil): this {\n const keys = [\n 'clip',\n 'zIndex',\n 'interactive',\n 'context',\n 'setCustomizedShape',\n 'large',\n 'largeThreshold',\n 'progressiveStep',\n 'progressiveThreshold',\n 'support3d',\n 'morph',\n 'morphKey',\n 'morphElementKey',\n 'attributeTransforms',\n 'skipTheme',\n 'enableSegments'\n ];\n if (config === null) {\n keys.forEach(key => {\n if (!isNil(this.spec[key])) {\n this.spec[key] = undefined;\n }\n });\n return this;\n }\n\n keys.forEach(key => {\n if (!isNil(config[key])) {\n this.spec[key] = config[key];\n }\n });\n\n return this;\n }\n\n context(context: any): this {\n this.spec.context = context;\n this._context = context;\n return this;\n }\n\n isCollectionMark(): boolean {\n return (CollectionMarkType as string[]).includes(this.markType);\n }\n\n needAnimate(): boolean {\n return !this.renderContext?.progressive && !isNil(this.spec.animation);\n }\n\n getAllElements(): IElement[] {\n const elements = this.elements.slice();\n this.elementMap.forEach(element => {\n // For most of time, exit elements will not be included in this.elements.\n // After prepareRelease is invoked, elements will all be marked as exited.\n if (element.diffState === DiffState.exit && !elements.includes(element)) {\n elements.push(element);\n }\n });\n if (this.spec.sort) {\n elements.sort((elementA, elementB) => {\n return this.spec.sort(elementA.getDatum(), elementB.getDatum());\n });\n }\n return elements;\n }\n\n getScales() {\n const scales = {};\n\n this.references.forEach((count, ref) => {\n if (ref.grammarType === GrammarTypeEnum.scale) {\n scales[ref.id() as string] = ref.output();\n }\n });\n\n return scales;\n }\n\n getScalesByChannel() {\n const encoders = this.spec.encode;\n\n if (!encoders) {\n return {};\n }\n\n const res: Record = {};\n const params = this.parameters();\n\n Object.keys(encoders).forEach(state => {\n const useEncoders = encoders[state];\n\n if (useEncoders && !isFunctionType(useEncoders)) {\n Object.keys(useEncoders).forEach(channel => {\n if (isScaleEncode(useEncoders[channel])) {\n res[channel] = getGrammarOutput(useEncoders[channel].scale, params);\n }\n });\n }\n });\n\n return res;\n }\n\n getFieldsByChannel() {\n const encoders = this.spec.encode;\n\n if (!encoders) {\n return {};\n }\n\n const res: Record = {};\n Object.keys(encoders).forEach(state => {\n const useEncoders = encoders[state];\n\n if (!isFunctionType(useEncoders)) {\n Object.keys(useEncoders).forEach(channel => {\n if (isFieldEncode(useEncoders[channel])) {\n res[channel] = useEncoders[channel].field;\n }\n });\n }\n });\n\n return res;\n }\n\n protected init(stage: any, parameters: any) {\n if (!this._delegateEvent) {\n this._delegateEvent = (event: any, type: string) => {\n const activeElement = event.target?.[BridgeElementKey] as IElement;\n if (activeElement?.mark === this) {\n const extendedEvt = getExtendedEvents(this.view, event, activeElement, type, EVENT_SOURCE_VIEW);\n this.emitGrammarEvent(type, extendedEvt, activeElement);\n }\n };\n this.initEvent();\n }\n\n if (!this.animate) {\n this.animate = new Animate(this, this.spec.animation);\n if (this.needAnimate()) {\n this.animate.updateState(this.spec.animationState);\n }\n }\n\n if (!this.group) {\n // root mark will not be reused\n const group = getGrammarOutput(this.spec.group, parameters) as IGroupMark;\n this.group = group;\n if (group) {\n group.appendChild(this);\n }\n }\n\n const groupGraphicItem = this.group ? this.group.getGroupGraphicItem() : stage.defaultLayer;\n const markIndex = this.group?.children?.indexOf(this) ?? 0;\n if (this.markType !== GrammarMarkType.group) {\n if (!this.graphicItem) {\n const graphicItem = createGraphicItem(this, GrammarMarkType.group, {\n pickable: false,\n zIndex: this.spec.zIndex ?? 0\n }) as IGroup;\n if (this.spec.support3d || (Mark3DType as string[]).includes(this.markType)) {\n graphicItem.setMode('3d');\n }\n graphicItem.name = `${this.id() || this.markType}`;\n this.graphicItem = graphicItem;\n }\n this.graphicParent = this.graphicItem;\n if (groupGraphicItem && (this.graphicIndex !== markIndex || this.graphicItem.parent !== groupGraphicItem)) {\n groupGraphicItem.insertIntoKeepIdx(this.graphicItem, markIndex);\n }\n } else {\n this.graphicParent = groupGraphicItem;\n }\n this.graphicIndex = markIndex;\n }\n\n protected update(spec: MarkSpec) {\n this._context = this.spec.context;\n this.isUpdated = true;\n\n if (!this.renderContext.progressive) {\n if (spec.animation) {\n this.animate.updateConfig(spec.animation);\n }\n this.animate.updateState(spec.animationState);\n }\n\n if (this.markType !== GrammarMarkType.group) {\n if (!isNil(spec.zIndex)) {\n this.graphicItem.setAttribute('zIndex', spec.zIndex);\n }\n if (!isNil(spec.clip)) {\n this.graphicItem.setAttribute('clip', spec.clip);\n }\n // only update interactive\n this.elementMap.forEach(element => {\n element.updateGraphicItem({\n interactive: spec.interactive\n });\n });\n } else {\n // update group element graphic item attributes\n this.elementMap.forEach(element => {\n element.updateGraphicItem({\n clip: spec.clip,\n zIndex: spec.zIndex,\n interactive: spec.interactive\n });\n });\n }\n }\n\n protected evaluateJoin(data: any[]) {\n this.needClear = true;\n const keyGetter = parseField(this.spec.key ?? (this.grammarSource as IData)?.getDataIDKey() ?? (() => DefaultKey));\n const groupKeyGetter = parseField(this.spec.groupBy ?? (() => DefaultKey));\n const sort = this.spec.sort;\n const isCollectionMark = this.isCollectionMark();\n\n const enterElements = new Set(this.elements.filter(element => element.diffState === DiffState.enter));\n const elements: IElement[] = [];\n this.differ.setCallback((key, data, prevData) => {\n const elementKey: string = key as string;\n let element: IElement;\n if (isNil(data)) {\n // exit\n element = this.elementMap.get(elementKey);\n if (element) {\n element.diffState = DiffState.exit;\n }\n } else if (isNil(prevData)) {\n // enter\n element = this.elementMap.has(elementKey) ? this.elementMap.get(elementKey) : createElement(this);\n if (element.diffState === DiffState.exit) {\n // force element to stop exit animation if it is reentered\n element.diffState = DiffState.enter;\n const animators = this.animate.getElementAnimators(element, DiffState.exit);\n animators.forEach(animator => animator.stop('start'));\n }\n\n element.diffState = DiffState.enter;\n const groupKey: string = isCollectionMark ? key : groupKeyGetter(data[0]);\n element.updateData(groupKey, data, keyGetter, this.view);\n this.elementMap.set(elementKey, element);\n elements.push(element);\n } else {\n // update\n element = this.elementMap.get(elementKey);\n if (element) {\n element.diffState = DiffState.update;\n const groupKey: string = isCollectionMark ? key : groupKeyGetter(data[0]);\n element.updateData(groupKey, data, keyGetter, this.view);\n elements.push(element);\n }\n }\n enterElements.delete(element);\n });\n\n const currentData = data ?? DefaultMarkData;\n\n if (!isCollectionMark) {\n this.differ.setCurrentData(\n groupData(\n currentData,\n (datum: any) => {\n return `${groupKeyGetter(datum)}-${keyGetter(datum)}`;\n },\n undefined\n )\n );\n }\n this.differ.doDiff();\n\n // Enter elements between dataflow start data and end data should be removed directly.\n enterElements.forEach(element => {\n this.elementMap.delete(isCollectionMark ? element.groupKey : `${element.groupKey}-${element.key}`);\n element.remove();\n element.release();\n });\n\n this.elements = elements;\n if (sort && this.elements.length >= 2) {\n this.elements.sort((elementA, elementB) => {\n return sort(elementA.getDatum(), elementB.getDatum());\n });\n }\n }\n\n protected evaluateState(elements: IElement[], stateSpec: MarkStateSpec, parameters: any): void {\n if (!stateSpec) {\n return;\n }\n\n elements.forEach(element => {\n element.state(stateSpec, parameters);\n });\n }\n\n protected evaluateGroupEncode(elements: IElement[], groupEncode: any, parameters: any) {\n if (this.markType === GrammarMarkType.group) {\n const el = this.elements[0];\n const nextAttrs = {};\n const items = [Object.assign({}, el.items?.[0], { nextAttrs })];\n invokeEncoderToItems(el, items, groupEncode, parameters);\n return nextAttrs;\n }\n\n if (!this._groupKeys || !groupEncode) {\n return;\n }\n\n const res = {};\n\n this._groupKeys.forEach(key => {\n const el = elements.find(el => el.groupKey === key);\n\n if (!el) {\n return;\n }\n\n res[key] = invokeEncoder(groupEncode, el.items && el.items[0] && el.items[0].datum, el, parameters);\n });\n\n return res;\n }\n\n protected evaluateEncode(elements: IElement[], encoders: any, parameters: any) {\n if (encoders) {\n this.emit(HOOK_EVENT.BEFORE_ELEMENT_ENCODE, { encoders, parameters }, this);\n const groupEncodeAttrs = this.evaluateGroupEncode(elements, encoders[BuiltInEncodeNames.group], parameters);\n\n elements.forEach(element => {\n if (this.markType === GrammarMarkType.group && groupEncodeAttrs) {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, groupEncodeAttrs);\n });\n } else if (groupEncodeAttrs?.[element.groupKey] && !this.isCollectionMark()) {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, groupEncodeAttrs[element.groupKey]);\n });\n }\n\n element.encodeItems(element.items, encoders, this._isReentered, parameters);\n });\n\n this._isReentered = false;\n\n this.evaluateTransformSync(this._getTransformsAfterEncodeItems(), elements, parameters);\n\n elements.forEach(element => {\n element.encodeGraphic(this.isCollectionMark() ? groupEncodeAttrs?.[element.groupKey] : null);\n });\n this.emit(HOOK_EVENT.AFTER_ELEMENT_ENCODE, { encoders, parameters }, this);\n } else {\n elements.forEach(element => {\n element.initGraphicItem();\n });\n }\n }\n\n addGraphicItem(attrs: any, groupKey?: string, newGraphicItem?: any) {\n const graphicItem: any = newGraphicItem ?? createGraphicItem(this, this.markType, attrs);\n\n if (!graphicItem) {\n return;\n }\n\n if (this.renderContext?.progressive) {\n let group: IGroup;\n\n if (this._groupKeys) {\n const index = this._groupKeys.indexOf(groupKey);\n\n if (index >= 0) {\n group = this.graphicParent.getChildAt(index) as IGroup;\n }\n } else {\n group = this.graphicParent.at(0) as IGroup;\n }\n\n if (this.isCollectionMark()) {\n graphicItem.incremental = 1;\n group.appendChild(graphicItem);\n } else {\n group.incrementalAppendChild(graphicItem);\n }\n } else {\n (this.graphicParent as any).appendChild(graphicItem);\n }\n return graphicItem;\n }\n\n parseRenderContext(data: any[], parameters: any) {\n const enableProgressive =\n this.markType !== GrammarMarkType.group &&\n this.spec.progressiveStep > 0 &&\n this.spec.progressiveThreshold > 0 &&\n this.spec.progressiveStep < this.spec.progressiveThreshold;\n const large = this.spec.large && this.spec.largeThreshold > 0 && data.length >= this.spec.largeThreshold;\n\n if (enableProgressive) {\n const groupedData = this.differ.getCurrentData();\n\n if (\n groupedData &&\n groupedData.keys &&\n groupedData.keys.some(key => groupedData.data.get(key).length > this.spec.progressiveThreshold)\n ) {\n return {\n large,\n parameters,\n progressive: {\n data,\n step: this.spec.progressiveStep,\n currentIndex: 0,\n totalStep: groupedData.keys.reduce((total, key) => {\n return Math.max(Math.ceil(groupedData.data.get(key).length / this.spec.progressiveStep), total);\n }, 1),\n groupedData: groupedData.data as Map\n }\n };\n }\n\n return { large };\n }\n\n return {\n large\n };\n }\n\n isProgressive() {\n return this.renderContext && (!!this.renderContext.progressive || !!this.renderContext.beforeTransformProgressive);\n }\n\n isDoingProgressive() {\n return (\n this.renderContext &&\n ((this.renderContext.progressive &&\n this.renderContext.progressive.currentIndex < this.renderContext.progressive.totalStep) ||\n (this.renderContext.beforeTransformProgressive && this.renderContext.beforeTransformProgressive.unfinished()))\n );\n }\n\n clearProgressive() {\n if (this.renderContext && this.renderContext.progressive) {\n this.elements = [];\n\n (this.graphicParent as any).children.forEach((group: IGroup) => {\n group.incrementalClearChild();\n });\n (this.graphicParent as any).removeAllChild();\n }\n\n if (this.renderContext && this.renderContext.beforeTransformProgressive) {\n this.renderContext.beforeTransformProgressive.release();\n }\n\n this.renderContext = null;\n }\n\n restartProgressive() {\n if (this.renderContext && this.renderContext.progressive) {\n this.renderContext.progressive.currentIndex = 0;\n }\n }\n\n evaluateJoinProgressive() {\n const currentIndex = this.renderContext.progressive.currentIndex;\n const keyGetter = parseField(this.spec.key ?? (this.grammarSource as IData)?.getDataIDKey() ?? (() => DefaultKey));\n\n const elements: IElement[] = [];\n\n if (this.isCollectionMark()) {\n this._groupKeys.forEach((key, index) => {\n const data = this.renderContext.progressive.groupedData.get(key);\n const groupStep = this.renderContext.progressive.step;\n const dataSlice = data.slice(currentIndex * groupStep, (currentIndex + 1) * groupStep);\n\n if (currentIndex === 0) {\n const element = createElement(this);\n element.diffState = DiffState.enter;\n element.updateData(key, dataSlice, keyGetter, this.view);\n elements.push(element);\n } else {\n const element = this.elements[index];\n element.updateData(key, dataSlice, keyGetter, this.view);\n elements.push(element);\n }\n });\n\n return elements;\n }\n\n const groupElements: Record = {};\n this._groupKeys.forEach(key => {\n const data = this.renderContext.progressive.groupedData.get(key);\n const groupStep = this.renderContext.progressive.step;\n const dataSlice = data.slice(currentIndex * groupStep, (currentIndex + 1) * groupStep);\n const group: IElement[] = [];\n\n dataSlice.forEach(entry => {\n const element = createElement(this);\n element.diffState = DiffState.enter;\n element.updateData(key, [entry], keyGetter, this.view);\n group.push(element);\n elements.push(element);\n });\n\n groupElements[key] = group;\n });\n\n return { groupElements, elements };\n }\n\n protected evaluateEncodeProgressive(elements: IElement[], encoders: any, parameters: any) {\n if (!encoders) {\n elements.forEach(element => {\n element.initGraphicItem();\n });\n\n return;\n }\n\n const positionEncoders = Object.keys(encoders).reduce((res, state) => {\n if (\n encoders[state] &&\n (state === BuiltInEncodeNames.enter || state === BuiltInEncodeNames.exit || state === BuiltInEncodeNames.update)\n ) {\n res[state] = splitEncoderInLarge(this.markType, encoders[state], (this as any).glyphType).positionEncoder;\n }\n return res;\n }, {});\n const progressiveIndex = this.renderContext.progressive.currentIndex;\n const isCollection = this.isCollectionMark();\n\n this.emit(HOOK_EVENT.BEFORE_ELEMENT_ENCODE, { encoders, parameters }, this);\n const groupEncodeAttrs = this.evaluateGroupEncode(elements, encoders[BuiltInEncodeNames.group], parameters);\n\n elements.forEach((element, index) => {\n const onlyPos = progressiveIndex > 0 || (!isCollection && index > 0);\n if (!onlyPos && groupEncodeAttrs?.[element.groupKey]) {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, groupEncodeAttrs[element.groupKey]);\n });\n }\n\n element.encodeItems(element.items, onlyPos ? positionEncoders : encoders, this._isReentered, parameters);\n });\n this._isReentered = false;\n\n this.evaluateTransformSync(this._getTransformsAfterEncodeItems(), elements, parameters);\n\n elements.forEach(element => {\n element.encodeGraphic();\n });\n\n this.emit(HOOK_EVENT.AFTER_ELEMENT_ENCODE, { encoders, parameters }, this);\n\n if (progressiveIndex === 0 && !isCollection) {\n const firstElement = elements[0];\n const firstChild = firstElement.getGraphicItem();\n const group = firstChild?.parent;\n\n if (group) {\n const attrs = firstChild.attribute;\n const theme = {};\n const itemAttrs = {};\n\n Object.keys(attrs).forEach(key => {\n if (['pickable', 'zIndex'].includes(key)) {\n // do nothing\n } else if (isPositionOrSizeChannel(this.markType, key)) {\n itemAttrs[key] = attrs[key];\n } else {\n theme[key] = attrs[key];\n }\n });\n\n (group as IGroup).setTheme({ common: theme });\n firstChild.initAttributes(itemAttrs);\n }\n }\n }\n\n evaluateProgressive() {\n if (this.renderContext?.beforeTransformProgressive) {\n this.renderContext.beforeTransformProgressive.progressiveRun();\n const output = this.renderContext.beforeTransformProgressive.output();\n\n this.emit(HOOK_EVENT.BEFORE_MARK_JOIN);\n // FIXME: better default upstream\n this.evaluateJoin(output);\n this.emit(HOOK_EVENT.AFTER_MARK_JOIN);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_STATE);\n this.evaluateState(this.elements, this.spec.state, this.renderContext.parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_STATE);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_ENCODE);\n this.evaluateEncode(this.elements, this._getEncoders(), this.renderContext.parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_ENCODE);\n return;\n }\n\n if (!this.renderContext?.progressive) {\n return;\n }\n const parameters = this.renderContext.parameters;\n\n this.emit(HOOK_EVENT.BEFORE_MARK_JOIN);\n const result = this.evaluateJoinProgressive();\n const elements = Array.isArray(result) ? result : result.elements;\n this.emit(HOOK_EVENT.AFTER_MARK_JOIN);\n\n if (this.renderContext.progressive.currentIndex === 0) {\n (this.graphicParent as any).removeAllChild();\n\n this._groupKeys.forEach(key => {\n const graphicItem = createGraphicItem(this, GrammarMarkType.group, {\n pickable: false,\n zIndex: this.spec.zIndex\n });\n graphicItem.incremental = this.renderContext.progressive.step;\n (this.graphicParent as any).appendChild(graphicItem);\n });\n\n this.elements = elements;\n } else {\n this.elements = this.elements.concat(elements);\n }\n\n this.emit(HOOK_EVENT.BEFORE_MARK_STATE);\n this.evaluateState(elements, this.spec.state, parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_STATE);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_ENCODE);\n if (Array.isArray(result)) {\n this.evaluateEncodeProgressive(elements, this._getEncoders(), parameters);\n } else {\n const groupElements = result.groupElements;\n Object.keys(groupElements).forEach(key => {\n this.evaluateEncodeProgressive(groupElements[key], this._getEncoders(), parameters);\n });\n }\n this.emit(HOOK_EVENT.AFTER_MARK_ENCODE);\n\n const progressiveTransforms = this._getTransformsAfterEncode()?.filter(entry => entry.canProgressive === true);\n\n if (progressiveTransforms?.length) {\n this.evaluateTransformSync(progressiveTransforms, this.elements, parameters);\n }\n\n this.renderContext.progressive.currentIndex += 1;\n }\n\n isLargeMode() {\n return this.renderContext && this.renderContext.large;\n }\n\n cleanExitElements() {\n this.elementMap.forEach((element, key) => {\n if (element.diffState === DiffState.exit && !element.isReserved) {\n this.elementMap.delete(key);\n element.remove();\n element.release();\n }\n });\n }\n\n getGroupGraphicItem() {\n if (this.elements && this.elements[0] && this.elements[0].getGraphicItem) {\n return this.elements[0].getGraphicItem();\n }\n }\n\n getBounds() {\n return this.graphicItem ? this.graphicItem.AABBBounds : this.getGroupGraphicItem()?.AABBBounds;\n }\n\n getMorphConfig(): { morph: boolean; morphKey: string; morphElementKey: string } {\n return {\n morph: this.spec.morph ?? false,\n morphKey: this.spec.morphKey,\n morphElementKey: this.spec.morphElementKey\n };\n }\n\n getAttributeTransforms() {\n return this.spec.attributeTransforms ?? transformsByType[this.markType];\n }\n\n getContext() {\n return this._context;\n }\n\n protected needSkipBeforeLayout(): boolean {\n if ((this.spec.layout as MarkBaseLayoutSpec)?.skipBeforeLayouted === true) {\n return true;\n }\n let group = this.group;\n // if parent mark has been skipped, child marks should skip\n while (group) {\n if (group.getSpec().layout?.skipBeforeLayouted === true) {\n return true;\n }\n group = group.group;\n }\n return false;\n }\n\n private initEvent() {\n if (this._delegateEvent) {\n const stage = this.view.renderer.stage();\n stage.on('*', this._delegateEvent);\n }\n }\n\n private releaseEvent() {\n if (this._delegateEvent) {\n const stage = this.view.renderer.stage();\n stage && stage.off('*', this._delegateEvent);\n }\n }\n\n clear() {\n super.clear();\n this.transforms = null;\n\n this.elementMap = null;\n this.elements = null;\n\n this.graphicItem = null;\n this.animate = null;\n\n this.group?.removeChild(this);\n this.group = null;\n }\n\n prepareRelease() {\n this.animate.stop();\n this.elementMap.forEach(element => (element.diffState = DiffState.exit));\n this._finalParameters = this.parameters();\n }\n\n release() {\n this.releaseEvent();\n this.elements.forEach(element => element.release());\n this.elementMap.clear();\n this._finalParameters = null;\n\n if (this.animate) {\n this.animate.release();\n }\n\n if (this.graphicItem) {\n removeGraphicItem(this.graphicItem);\n }\n\n this.detachAll();\n\n super.release();\n }\n}\n","import type { INode } from '@visactor/vrender-core';\nimport { transformsByType } from '../graph/attributes';\nimport { DefaultKey, DefaultMarkData } from '../graph/constants';\nimport { GrammarMarkType, HOOK_EVENT } from '../graph/enums';\nimport { createElement } from '../graph/util/element';\nimport { createGraphicItem } from '../graph/util/graphic';\nimport type { IGlyphMark, IGroupMark, IMark, IView } from '../types';\nimport { Mark } from './mark';\n\nexport class GroupMark extends Mark implements IGroupMark {\n children: (IMark | IGroupMark | IGlyphMark)[];\n\n layoutChildren?: (IMark | IGroupMark | IGlyphMark)[];\n\n constructor(view: IView, group?: IGroupMark) {\n super(view, GrammarMarkType.group, group);\n this.children = [];\n }\n\n parseRenderContext() {\n return { large: false };\n }\n\n appendChild(mark: IMark) {\n this.children.push(mark);\n return this;\n }\n removeChild(mark: IMark) {\n this.children = this.children.filter(child => child !== mark);\n return this;\n }\n\n includesChild(mark: IMark, descendant: boolean = true) {\n if (this.children.includes(mark)) {\n return true;\n }\n if (!descendant) {\n return false;\n }\n return this.children.some(child => {\n if (child.markType === GrammarMarkType.group) {\n return (child as IGroupMark).includesChild(mark, true);\n }\n return false;\n });\n }\n\n updateLayoutChildren() {\n if (!this.children.length) {\n return this;\n }\n if (!this.layoutChildren) {\n this.layoutChildren = [];\n }\n\n this.layoutChildren = this.children.filter(child => child.needLayout());\n\n return this;\n }\n\n getAttributeTransforms() {\n return transformsByType.rect;\n }\n\n protected evaluateJoin(data: any[]) {\n if (!this.elements.length) {\n const el = createElement(this);\n\n el.updateData(DefaultKey, DefaultMarkData, () => '', this.view);\n this.elements = [el];\n this.elementMap.set(DefaultKey, el);\n }\n }\n\n addGraphicItem(attrs: any, groupKey?: string, newGraphicItem?: any) {\n const graphicItem: any = newGraphicItem ?? createGraphicItem(this, this.markType, attrs);\n\n if (!graphicItem) {\n return;\n }\n\n this.emit(HOOK_EVENT.BEFORE_ADD_VRENDER_MARK);\n\n graphicItem.name = `${this.id() || this.markType}`;\n\n this.graphicParent.insertIntoKeepIdx(graphicItem as unknown as INode, this.graphicIndex);\n this.emit(HOOK_EVENT.AFTER_ADD_VRENDER_MARK);\n\n return graphicItem;\n }\n}\n","import type { IBounds } from '@visactor/vutils';\nimport { Bounds, isValidNumber } from '@visactor/vutils';\nimport type { IGroupMark, ILayoutOptions, IMark, MarkGridItemSpec, MarkGridContainerSpec } from '../../types';\n\ninterface IGrid {\n rows: number[];\n columns: number[];\n rowGap: number;\n columnGap: number;\n}\n\nfunction parseTemplate(template: number | string | 'auto', total: number) {\n if (isValidNumber(template)) {\n return template;\n }\n const trimmedTemplate = template.trim();\n if (trimmedTemplate === 'auto') {\n // handle auto later\n return 0;\n } else if (trimmedTemplate.endsWith('%')) {\n const percent = parseFloat(trimmedTemplate.substring(0, trimmedTemplate.length - 1));\n if (isValidNumber(percent)) {\n return percent * total;\n }\n return 0;\n }\n return 0;\n}\n\nfunction computeGrid(layout: MarkGridContainerSpec, width: number, height: number): IGrid {\n const templateRows = layout.gridTemplateRows ?? [height];\n const templateColumns = layout.gridTemplateColumns ?? [width];\n const rowGap = layout.gridRowGap ?? 0;\n const columnGap = layout.gridColumnGap ?? 0;\n\n // compute simple cell size\n const rows = templateRows.map(row => parseTemplate(row, height));\n const columns = templateColumns.map(column => parseTemplate(column, width));\n\n // compute auto grid\n const rowLeftSize = Math.max(0, rows.reduce((left, row) => left - row, height) - rows.length * rowGap);\n const rowAuto = rowLeftSize / templateRows.filter(row => row === 'auto').length;\n const columnLeftSize = Math.max(\n 0,\n columns.reduce((left, column) => left - column, width) - columns.length * columnGap\n );\n const columnAuto = columnLeftSize / templateColumns.filter(column => column === 'auto').length;\n // accumulate grid size\n let lastRow = 0;\n const accumulateRows = rows.map((row, index) => {\n const finalRow = templateRows[index] === 'auto' ? rowAuto : row;\n const last = lastRow;\n lastRow += finalRow + rowGap;\n return last;\n });\n accumulateRows.push(lastRow);\n let lastColumn = 0;\n const accumulateColumns = columns.map((column, index) => {\n const finalColumn = templateColumns[index] === 'auto' ? columnAuto : column;\n const last = lastColumn;\n lastColumn += finalColumn + columnGap;\n return last;\n });\n accumulateColumns.push(lastColumn);\n\n return {\n rows: accumulateRows,\n columns: accumulateColumns,\n rowGap,\n columnGap\n };\n}\n\nfunction normalizeIndex(index: number, count: number) {\n return Math.min(index < 0 ? index + count : index - 1, count);\n}\n\nfunction normalizeStartEndIndex(start: number, end: number, count: number) {\n let finalStart = normalizeIndex(start, count);\n let finalEnd = normalizeIndex(end, count);\n if (!isValidNumber(start) && !isValidNumber(end)) {\n finalStart = 1;\n finalEnd = 2;\n } else if (!isValidNumber(start)) {\n finalEnd = normalizeIndex(finalStart + 1, count);\n } else if (!isValidNumber(end)) {\n finalStart = normalizeIndex(Math.max(0, finalEnd - 1), count);\n }\n if (finalStart > finalEnd) {\n const temp = finalEnd;\n finalEnd = finalStart;\n finalStart = temp;\n }\n return { start: finalStart, end: finalEnd };\n}\n\nfunction getCellBounds(grid: IGrid, rowStart: number, rowEnd: number, columnStart: number, columnEnd: number): Bounds {\n const rowCount = grid.rows.length;\n const columnCount = grid.columns.length;\n const { start: finalRowStart, end: finalRowEnd } = normalizeStartEndIndex(rowStart, rowEnd, rowCount);\n const { start: finalColumnStart, end: finalColumnEnd } = normalizeStartEndIndex(columnStart, columnEnd, columnCount);\n\n const x1 = grid.columns[finalRowStart];\n const x2 = grid.columns[finalRowEnd] - (finalColumnEnd === columnCount ? 0 : grid.columnGap);\n const y1 = grid.rows[finalColumnStart];\n const y2 = grid.rows[finalColumnEnd] - (finalRowEnd === rowCount ? 0 : grid.rowGap);\n return new Bounds().set(x1, y1, x2, y2);\n}\n\nexport const doGridLayout = (\n group: IGroupMark,\n children: IMark[],\n parentLayoutBounds: IBounds,\n options?: ILayoutOptions\n) => {\n const layout = group.getSpec().layout as MarkGridContainerSpec;\n const grid = computeGrid(layout, parentLayoutBounds.width(), parentLayoutBounds.height());\n if (children) {\n children.forEach(mark => {\n const markLayout = mark.getSpec().layout as MarkGridItemSpec;\n mark.layoutBounds = getCellBounds(\n grid,\n markLayout.gridRowStart,\n markLayout.gridRowEnd,\n markLayout.gridColumnStart,\n markLayout.gridColumnEnd\n );\n mark.commit();\n });\n }\n};\n","import { isNil, isString } from '@visactor/vutils';\n\nexport const toPercent = (percent: string | number, total: number) => {\n if (isNil(percent)) {\n return total;\n }\n\n return isString(percent) ? (total * parseFloat(percent as string)) / 100 : percent;\n};\n","import { ComponentEnum } from './../enums';\nimport type { IBounds } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { Bounds } from '@visactor/vutils';\nimport { toPercent } from '@visactor/vgrammar-util';\nimport type {\n IGroupMark,\n ILayoutOptions,\n IMark,\n MarkRelativeItemSpec,\n MarkRelativeContainerSpec,\n IComponent\n} from '../../types';\nimport { normalizePadding } from '../../parse/view';\n\nconst defaultLayoutOrder = {\n [ComponentEnum.axis]: 0,\n [ComponentEnum.legend]: 1,\n [ComponentEnum.slider]: 2,\n [ComponentEnum.player]: 3,\n [ComponentEnum.datazoom]: 4\n};\n\nconst getLayoutOrderOfMark = (mark: IMark) => {\n return (\n (mark.getSpec().layout as MarkRelativeItemSpec)?.order ??\n (mark.markType === 'component' ? defaultLayoutOrder[(mark as IComponent).componentType] ?? Infinity : Infinity)\n );\n};\n\nexport const doRelativeLayout = (\n group: IGroupMark,\n children: IMark[],\n parentLayoutBounds: IBounds,\n options?: ILayoutOptions\n) => {\n const viewBounds = parentLayoutBounds.clone();\n const groupLayoutSpec = group.getSpec().layout as MarkRelativeContainerSpec;\n const maxChildWidth = toPercent(groupLayoutSpec.maxChildWidth, viewBounds.width());\n const maxChildHeight = toPercent(groupLayoutSpec.maxChildHeight, viewBounds.width());\n let minDeltaX1 = 0;\n let minDeltaX2 = 0;\n let minDeltaY1 = 0;\n let minDeltaY2 = 0;\n\n children.forEach((child: IMark) => {\n const layoutSpec = child.getSpec().layout as MarkRelativeItemSpec;\n const padding = normalizePadding(layoutSpec.padding);\n const bounds = options.parseMarkBounds ? options.parseMarkBounds(child.getBounds(), child) : child.getBounds();\n\n if (layoutSpec.position === 'top' || layoutSpec.position === 'bottom') {\n const childHeight = Math.min(bounds.height() + padding.top + padding.bottom, maxChildHeight);\n\n if (layoutSpec.position === 'top') {\n viewBounds.y1 += childHeight;\n } else {\n viewBounds.y2 -= childHeight;\n }\n\n if (bounds.x1 < parentLayoutBounds.x1) {\n minDeltaX1 = Math.max(minDeltaX1, parentLayoutBounds.x1 - bounds.x1);\n }\n\n if (bounds.x2 > parentLayoutBounds.x2) {\n minDeltaX2 = Math.max(minDeltaX2, bounds.x2 - parentLayoutBounds.x2);\n }\n }\n\n if (layoutSpec.position === 'left' || layoutSpec.position === 'right') {\n const childWidth = Math.min(bounds.width() + padding.left + padding.right, maxChildWidth);\n\n if (layoutSpec.position === 'left') {\n viewBounds.x1 += childWidth;\n } else {\n viewBounds.x2 -= childWidth;\n }\n\n if (bounds.y1 < parentLayoutBounds.y1) {\n minDeltaY1 = Math.max(minDeltaY1, parentLayoutBounds.y1 - bounds.y1);\n }\n\n if (bounds.y2 > parentLayoutBounds.y2) {\n minDeltaY2 = Math.max(minDeltaY2, bounds.y2 - parentLayoutBounds.y2);\n }\n }\n\n if (layoutSpec.position === 'outside') {\n viewBounds.x1 += Math.max(parentLayoutBounds.x1 - bounds.x1, 0) + padding.left;\n viewBounds.x2 -= Math.max(bounds.x2 - parentLayoutBounds.x2, 0) + padding.right;\n viewBounds.y1 += Math.max(parentLayoutBounds.y1 - bounds.y1, 0) + padding.top;\n viewBounds.y2 -= Math.max(bounds.y2 - parentLayoutBounds.y2) + padding.bottom;\n }\n });\n\n if (minDeltaX1 > viewBounds.x1 - parentLayoutBounds.x1 && minDeltaX1 < parentLayoutBounds.width()) {\n viewBounds.x1 = parentLayoutBounds.x1 + minDeltaX1;\n }\n\n if (minDeltaX2 > parentLayoutBounds.x2 - viewBounds.x2 && minDeltaX2 < parentLayoutBounds.width()) {\n viewBounds.x2 = parentLayoutBounds.x2 - minDeltaX2;\n }\n\n if (minDeltaY1 > viewBounds.y1 - parentLayoutBounds.y1 && minDeltaY1 < parentLayoutBounds.height()) {\n viewBounds.y1 = parentLayoutBounds.y1 + minDeltaY1;\n }\n\n if (minDeltaY2 > parentLayoutBounds.y2 - viewBounds.y2 && minDeltaY2 < parentLayoutBounds.height()) {\n viewBounds.y2 = parentLayoutBounds.y2 - minDeltaY2;\n }\n\n let curTopY = viewBounds.y1;\n let curBottomY = viewBounds.y2;\n let curLeftX = viewBounds.x1;\n let curRightX = viewBounds.x2;\n\n const sortedChildren = children.slice().sort((markA, markB) => {\n return getLayoutOrderOfMark(markA) - getLayoutOrderOfMark(markB);\n });\n\n for (let i = 0, len = sortedChildren.length; i < len; i++) {\n const child = sortedChildren[i];\n const layoutSpec = child.getSpec().layout as MarkRelativeItemSpec;\n const padding = normalizePadding(layoutSpec.padding);\n const bounds = options.parseMarkBounds ? options.parseMarkBounds(child.getBounds(), child) : child.getBounds();\n\n if (layoutSpec.position === 'top' || layoutSpec.position === 'bottom') {\n const childHeight = Math.min(bounds.height() + padding.top + padding.bottom, maxChildHeight);\n\n if (layoutSpec.position === 'top') {\n child.layoutBounds = new Bounds().set(viewBounds.x1, curTopY - childHeight, viewBounds.x2, curTopY);\n curTopY -= childHeight;\n } else {\n child.layoutBounds = new Bounds().set(viewBounds.x1, curBottomY, viewBounds.x2, curBottomY + childHeight);\n curBottomY += childHeight;\n }\n child.relativePosition = {\n top: child.layoutBounds.y1 - viewBounds.y1,\n bottom: child.layoutBounds.y1 - viewBounds.y2\n };\n\n if (layoutSpec.align) {\n const childWidth = bounds.width() + padding.left + padding.right;\n\n if (childWidth < viewBounds.width()) {\n if (layoutSpec.align === 'center') {\n child.layoutBounds.x1 = (viewBounds.x1 + viewBounds.x2) / 2 - childWidth / 2;\n child.layoutBounds.x2 = child.layoutBounds.x1 + childWidth;\n child.relativePosition.left = child.relativePosition.right = (viewBounds.width() - childWidth) / 2;\n } else if (layoutSpec.align === 'right') {\n child.layoutBounds.x1 = viewBounds.x2 - childWidth;\n child.layoutBounds.x2 = viewBounds.x2;\n child.relativePosition.right = 0;\n child.relativePosition.left = viewBounds.width() - childWidth;\n } else if (layoutSpec.align === 'left') {\n child.layoutBounds.x1 = viewBounds.x1;\n child.layoutBounds.x2 = viewBounds.x1 + childWidth;\n child.relativePosition.left = 0;\n child.relativePosition.right = viewBounds.width() - childWidth;\n }\n }\n }\n } else if (layoutSpec.position === 'left' || layoutSpec.position === 'right') {\n const childWidth = Math.min(bounds.width() + padding.left + padding.right, maxChildWidth);\n\n if (layoutSpec.position === 'left') {\n child.layoutBounds = new Bounds().set(curLeftX - childWidth, viewBounds.y1, curLeftX, viewBounds.y2);\n curLeftX -= childWidth;\n } else {\n child.layoutBounds = new Bounds().set(curRightX, viewBounds.y1, curRightX + childWidth, viewBounds.y2);\n curRightX += childWidth;\n }\n\n child.relativePosition = {\n left: child.layoutBounds.x1 - viewBounds.x1,\n right: child.layoutBounds.x1 - viewBounds.x2\n };\n\n if (layoutSpec.align) {\n const childHeight = bounds.height() + padding.top + padding.bottom;\n\n if (childWidth < viewBounds.width()) {\n if (layoutSpec.align === 'middle') {\n child.layoutBounds.y1 = (viewBounds.y1 + viewBounds.y2) / 2 - childHeight / 2;\n child.layoutBounds.y2 = child.layoutBounds.y1 + childHeight;\n child.relativePosition.top = child.relativePosition.bottom = (viewBounds.height() - childHeight) / 2;\n } else if (layoutSpec.align === 'bottom') {\n child.layoutBounds.y1 = viewBounds.y2 - childHeight;\n child.layoutBounds.y2 = viewBounds.y2;\n child.relativePosition.top = viewBounds.height() - childHeight;\n child.relativePosition.bottom = 0;\n } else if (layoutSpec.align === 'top') {\n child.layoutBounds.y1 = viewBounds.y1;\n child.layoutBounds.y2 = viewBounds.y1 + childHeight;\n child.relativePosition.bottom = viewBounds.height() - childHeight;\n child.relativePosition.top = 0;\n }\n }\n }\n } else if (layoutSpec.position === 'outside') {\n curLeftX -= Math.max(parentLayoutBounds.x1 - bounds.x1, 0) + padding.left;\n curRightX -= Math.max(bounds.x2 - parentLayoutBounds.x2, 0) + padding.right;\n curTopY -= Math.max(parentLayoutBounds.y1 - bounds.y1, 0) + padding.top;\n curBottomY += Math.max(bounds.y2 - parentLayoutBounds.y2) + padding.bottom;\n } else {\n child.layoutBounds = viewBounds;\n }\n }\n\n return viewBounds;\n};\n","import { isFunction } from '@visactor/vutils';\nimport { SIGNAL_VIEW_HEIGHT, SIGNAL_PADDING, SIGNAL_VIEW_WIDTH } from './../../view/constants';\nimport type { MarkRelativeContainerSpec, MarkGridContainerSpec } from './../../types/mark';\nimport { GrammarMarkType } from '../enums';\nimport type { IMark, IGroupMark } from '../../types/grammar';\nimport type { ILayoutOptions, IView } from '../../types/view';\nimport { doGridLayout } from './grid';\nimport { doRelativeLayout } from './relative';\n\nexport const defaultDoLayout = (layoutMarks: IMark[], options: ILayoutOptions, view: IView) => {\n layoutMarks?.forEach(mark => {\n if (mark.markType !== GrammarMarkType.group) {\n return;\n }\n\n const layoutChildren = (mark as IGroupMark).layoutChildren;\n\n // FIXME buildLayoutTree的时候过滤一下空的group\n // if (!layoutChildren?.length) {\n // return;\n // }\n\n const layoutSpec = mark.getSpec().layout;\n const bounds = mark.layoutBounds ?? mark.getBounds();\n\n if (!bounds) {\n return;\n }\n\n if (isFunction(layoutSpec)) {\n layoutSpec.call(null, mark as IGroupMark, layoutChildren, bounds, options);\n } else if (isFunction(layoutSpec.callback)) {\n layoutSpec.callback.call(null, mark as IGroupMark, layoutChildren, bounds, options);\n } else if ((layoutSpec as MarkRelativeContainerSpec).display === 'relative') {\n if (layoutSpec.updateViewSignals) {\n const oldViewBox = view.getViewBox();\n\n if (oldViewBox) {\n bounds.intersect(oldViewBox);\n }\n\n const viewBounds = doRelativeLayout(mark as IGroupMark, layoutChildren, bounds, options);\n const viewWidth = viewBounds.width();\n const viewHeight = viewBounds.height();\n const padding = {\n top: viewBounds.y1,\n right: view.width() - viewBounds.x2,\n left: viewBounds.x1,\n bottom: view.height() - viewBounds.y2\n };\n (view as any).updateSignal(SIGNAL_VIEW_WIDTH, viewWidth);\n (view as any).updateSignal(SIGNAL_VIEW_HEIGHT, viewHeight);\n (view as any).updateSignal(SIGNAL_PADDING, padding);\n } else {\n doRelativeLayout(mark as IGroupMark, layoutChildren, bounds, options);\n }\n } else if ((layoutSpec as MarkGridContainerSpec).display === 'grid') {\n doGridLayout(mark as IGroupMark, layoutChildren, bounds, options);\n }\n\n defaultDoLayout(layoutChildren, options, view);\n });\n};\n","import { GrammarMarkType } from '../graph/enums';\nimport type { IGlyphMark, IGroupMark, IView, GlyphMarkSpec, IGlyphMeta } from '../types';\nimport { createGlyphGraphicItem } from '../graph/util/graphic';\nimport { Mark } from './mark';\nimport { Factory } from '../core/factory';\n\nexport class GlyphMark extends Mark implements IGlyphMark {\n protected declare spec: GlyphMarkSpec;\n declare markType: GrammarMarkType.glyph;\n readonly glyphType: string;\n\n private glyphMeta: IGlyphMeta;\n\n constructor(view: IView, glyphType: string, group?: IGroupMark) {\n super(view, GrammarMarkType.glyph, group);\n this.glyphType = glyphType;\n this.glyphMeta = Factory.getGlyph(glyphType);\n }\n\n configureGlyph(config: any) {\n this.spec.glyphConfig = config;\n this.commit();\n return this;\n }\n\n getGlyphMeta() {\n return this.glyphMeta;\n }\n\n getGlyphConfig() {\n return this.spec.glyphConfig;\n }\n\n addGraphicItem(attrs: any, groupKey?: string) {\n const graphicItem = createGlyphGraphicItem(this, this.glyphMeta, attrs);\n return super.addGraphicItem(attrs, groupKey, graphicItem);\n }\n}\n","/**\n * @description 处理数值相关的方法\n */\n\nconst DEFAULT_ABSOLUTE_TOLERATE = 1e-10;\nconst DEFAULT_RELATIVE_TOLERATE = 1e-10;\n\n/**\n * 判断两数是否接近相等,函数参数参照 python isClose 方法\n * @param {number} a\n * @param {number} b\n * @param refTol 指定的相对容差比例,将乘以两数的最大值作为相对容差\n * @param absTol 指定的绝对容差\n */\nexport function isNumberClose(\n a: number,\n b: number,\n relTol: number = DEFAULT_RELATIVE_TOLERATE,\n absTol: number = DEFAULT_ABSOLUTE_TOLERATE\n) {\n const abs = absTol;\n const rel = relTol * Math.max(a, b);\n return Math.abs(a - b) <= Math.max(abs, rel);\n}\n\n/**\n * 判断 a 是否大于 b,并排除容差范围\n * @param a\n * @param b\n * @param relTol 指定的相对容差比例,将乘以两数的最大值作为相对容差\n * @param absTol 指定的绝对容差\n */\nexport function isGreater(a: number, b: number, relTol?: number, absTol?: number) {\n return a > b && !isNumberClose(a, b, relTol, absTol);\n}\n\n/**\n * 判断 a 是否小于 b,并排除容差范围\n * @param a\n * @param b\n * @param relTol 指定的相对容差比例,将乘以两数的最大值作为相对容差\n * @param absTol 指定的绝对容差\n */\nexport function isLess(a: number, b: number, relTol?: number, absTol?: number) {\n return a < b && !isNumberClose(a, b, relTol, absTol);\n}\n","/* Adapted from zrender by ecomfe\n * https://github.com/ecomfe/zrender\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/ecomfe/zrender/blob/master/src/tool/morphPath.ts\n * License: https://github.com/ecomfe/zrender/blob/master/LICENSE\n * @license\n */\n\nimport type { IMatrix } from '@visactor/vutils';\nimport { getAngleByPoint, isNumberClose, PointService } from '@visactor/vutils';\nimport type { ICustomPath2D } from '../interface';\nimport { CustomPath2D } from './custom-path2d';\nimport { enumCommandMap } from './path-svg';\nimport { addArcToBezierPath } from './shape/arc';\n\nexport function cubicSubdivide(p0: number, p1: number, p2: number, p3: number, t: number, out: number[]) {\n const p01 = (p1 - p0) * t + p0;\n const p12 = (p2 - p1) * t + p1;\n const p23 = (p3 - p2) * t + p2;\n\n const p012 = (p12 - p01) * t + p01;\n const p123 = (p23 - p12) * t + p12;\n\n const p0123 = (p123 - p012) * t + p012;\n // Seg0\n out[0] = p0;\n out[1] = p01;\n out[2] = p012;\n out[3] = p0123;\n // Seg1\n out[4] = p0123;\n out[5] = p123;\n out[6] = p23;\n out[7] = p3;\n}\n\nexport function alignSubpath(subpath1: number[], subpath2: number[]): [number[], number[]] {\n const len1 = subpath1.length;\n const len2 = subpath2.length;\n if (len1 === len2) {\n return [subpath1, subpath2];\n }\n const tmpSegX: number[] = [];\n const tmpSegY: number[] = [];\n\n const shorterPath = len1 < len2 ? subpath1 : subpath2;\n const shorterLen = Math.min(len1, len2);\n // Should divide excatly\n const diff = Math.abs(len2 - len1) / 6;\n const shorterBezierCount = (shorterLen - 2) / 6;\n // Add `diff` number of beziers\n const eachCurveSubDivCount = Math.ceil(diff / shorterBezierCount);\n\n const newSubpath = [shorterPath[0], shorterPath[1]];\n let remained = diff;\n\n for (let i = 2; i < shorterLen; i += 6) {\n let x0 = shorterPath[i - 2];\n let y0 = shorterPath[i - 1];\n let x1 = shorterPath[i];\n let y1 = shorterPath[i + 1];\n let x2 = shorterPath[i + 2];\n let y2 = shorterPath[i + 3];\n const x3 = shorterPath[i + 4];\n const y3 = shorterPath[i + 5];\n\n if (remained <= 0) {\n newSubpath.push(x1, y1, x2, y2, x3, y3);\n continue;\n }\n\n const actualSubDivCount = Math.min(remained, eachCurveSubDivCount) + 1;\n for (let k = 1; k <= actualSubDivCount; k++) {\n const p = k / actualSubDivCount;\n\n cubicSubdivide(x0, x1, x2, x3, p, tmpSegX);\n cubicSubdivide(y0, y1, y2, y3, p, tmpSegY);\n\n // tmpSegX[3] === tmpSegX[4]\n x0 = tmpSegX[3];\n y0 = tmpSegY[3];\n\n newSubpath.push(tmpSegX[1], tmpSegY[1], tmpSegX[2], tmpSegY[2], x0, y0);\n x1 = tmpSegX[5];\n y1 = tmpSegY[5];\n x2 = tmpSegX[6];\n y2 = tmpSegY[6];\n // The last point (x3, y3) is still the same.\n }\n remained -= actualSubDivCount - 1;\n }\n\n return shorterPath === subpath1 ? [newSubpath, subpath2] : [subpath1, newSubpath];\n}\n\nfunction createSubpath(lastSubpath: number[], otherSubpath: number[]) {\n const prevSubPath = lastSubpath || otherSubpath;\n const len = prevSubPath.length;\n const lastX = prevSubPath[len - 2];\n const lastY = prevSubPath[len - 1];\n\n const newSubpath: number[] = [];\n for (let i = 0; i < otherSubpath.length; i += 2) {\n newSubpath[i] = lastX;\n newSubpath[i + 1] = lastY;\n }\n return newSubpath;\n}\n\nfunction reverseSubpath(array: number[]) {\n const newArr: number[] = [];\n const len = array.length;\n for (let i = 0; i < len; i += 2) {\n newArr[i] = array[len - i - 2];\n newArr[i + 1] = array[len - i - 1];\n }\n return newArr;\n}\n/**\n * 用于计算内部不相交的多边形中心点\n */\nexport function centroidOfSubpath(array: number[]) {\n // https://en.wikipedia.org/wiki/Centroid#Of_a_polygon\n let signedArea = 0;\n let cx = 0;\n let cy = 0;\n const len = array.length;\n // Polygon should been closed.\n for (let i = 0, j = len - 2; i < len; j = i, i += 2) {\n const x0 = array[j];\n const y0 = array[j + 1];\n const x1 = array[i];\n const y1 = array[i + 1];\n const a = x0 * y1 - x1 * y0;\n signedArea += a;\n cx += (x0 + x1) * a;\n cy += (y0 + y1) * a;\n }\n\n if (signedArea === 0) {\n return [array[0] || 0, array[1] || 0, 0];\n }\n\n return [cx / signedArea / 3, cy / signedArea / 3, signedArea];\n}\n\n/**\n * 针对闭合的曲线,查找最适合的旋转offset\n */\nfunction findBestRotationOffset(fromSubBeziers: number[], toSubBeziers: number[], fromCp: number[], toCp: number[]) {\n const bezierCount = (fromSubBeziers.length - 2) / 6;\n let bestScore = Infinity;\n let bestOffset = 0;\n\n const len = fromSubBeziers.length;\n const len2 = len - 2;\n\n for (let offset = 0; offset < bezierCount; offset++) {\n const cursorOffset = offset * 6;\n let score = 0;\n\n for (let k = 0; k < len; k += 2) {\n const idx = k === 0 ? cursorOffset : ((cursorOffset + k - 2) % len2) + 2;\n\n const x0 = fromSubBeziers[idx] - fromCp[0];\n const y0 = fromSubBeziers[idx + 1] - fromCp[1];\n const x1 = toSubBeziers[k] - toCp[0];\n const y1 = toSubBeziers[k + 1] - toCp[1];\n\n const dx = x1 - x0;\n const dy = y1 - y0;\n score += dx * dx + dy * dy;\n }\n if (score < bestScore) {\n bestScore = score;\n bestOffset = offset;\n }\n }\n\n return bestOffset;\n}\n\n/**\n * If we interpolating between two bezier curve arrays.\n * It will have many broken effects during the transition.\n * So we try to apply an extra rotation which can make each bezier curve morph as small as possible.\n */\nexport function findBestMorphingRotation(\n fromArr: number[][],\n toArr: number[][],\n searchAngleIteration: number,\n searchAngleRange: number\n) {\n const result = [];\n\n let fromNeedsReverse: boolean;\n\n for (let i = 0; i < fromArr.length; i++) {\n let fromSubpathBezier = fromArr[i];\n const toSubpathBezier = toArr[i];\n\n const fromCp = centroidOfSubpath(fromSubpathBezier);\n const toCp = centroidOfSubpath(toSubpathBezier);\n\n if (fromNeedsReverse == null) {\n // Reverse from array if two have different directions.\n // Determine the clockwise based on the first subpath.\n // Reverse all subpaths or not. Avoid winding rule changed.\n fromNeedsReverse = fromCp[2] < 0 !== toCp[2] < 0;\n }\n\n const newFromSubpathBezier: number[] = [];\n const newToSubpathBezier: number[] = [];\n let bestAngle = 0;\n let bestScore = Infinity;\n const tmpArr: number[] = [];\n\n const len = fromSubpathBezier.length;\n if (fromNeedsReverse) {\n // Make sure clockwise\n fromSubpathBezier = reverseSubpath(fromSubpathBezier);\n }\n const offset = findBestRotationOffset(fromSubpathBezier, toSubpathBezier, fromCp, toCp) * 6;\n\n const len2 = len - 2;\n\n for (let k = 0; k < len2; k += 2) {\n // Not include the start point.\n const idx = ((offset + k) % len2) + 2;\n newFromSubpathBezier[k + 2] = fromSubpathBezier[idx] - fromCp[0];\n newFromSubpathBezier[k + 3] = fromSubpathBezier[idx + 1] - fromCp[1];\n }\n newFromSubpathBezier[0] = fromSubpathBezier[offset] - fromCp[0];\n newFromSubpathBezier[1] = fromSubpathBezier[offset + 1] - fromCp[1];\n\n if (searchAngleIteration > 0) {\n const step = searchAngleRange / searchAngleIteration;\n for (let angle = -searchAngleRange / 2; angle <= searchAngleRange / 2; angle += step) {\n const sa = Math.sin(angle);\n const ca = Math.cos(angle);\n let score = 0;\n\n for (let k = 0; k < fromSubpathBezier.length; k += 2) {\n const x0 = newFromSubpathBezier[k];\n const y0 = newFromSubpathBezier[k + 1];\n const x1 = toSubpathBezier[k] - toCp[0];\n const y1 = toSubpathBezier[k + 1] - toCp[1];\n\n // Apply rotation on the target point.\n const newX1 = x1 * ca - y1 * sa;\n const newY1 = x1 * sa + y1 * ca;\n\n tmpArr[k] = newX1;\n tmpArr[k + 1] = newY1;\n\n const dx = newX1 - x0;\n const dy = newY1 - y0;\n\n // Use dot product to have min direction change.\n // const d = Math.sqrt(x0 * x0 + y0 * y0);\n // score += x0 * dx / d + y0 * dy / d;\n score += dx * dx + dy * dy;\n }\n\n if (score < bestScore) {\n bestScore = score;\n bestAngle = angle;\n // Copy.\n for (let m = 0; m < tmpArr.length; m++) {\n newToSubpathBezier[m] = tmpArr[m];\n }\n }\n }\n } else {\n for (let i = 0; i < len; i += 2) {\n newToSubpathBezier[i] = toSubpathBezier[i] - toCp[0];\n newToSubpathBezier[i + 1] = toSubpathBezier[i + 1] - toCp[1];\n }\n }\n\n result.push({\n from: newFromSubpathBezier,\n to: newToSubpathBezier,\n fromCp,\n toCp,\n rotation: -bestAngle\n });\n }\n return result;\n}\n\n/**\n * Make two bezier arrays aligns on structure. To have better animation.\n *\n * It will:\n * Make two bezier arrays have same number of subpaths.\n * Make each subpath has equal number of bezier curves.\n *\n * array is the convert result of pathToBezierCurves.\n */\nexport function alignBezierCurves(array1: number[][], array2: number[][]) {\n let lastSubpath1;\n let lastSubpath2;\n\n const newArray1 = [];\n const newArray2 = [];\n\n for (let i = 0; i < Math.max(array1.length, array2.length); i++) {\n const subpath1 = array1[i];\n const subpath2 = array2[i];\n\n let newSubpath1;\n let newSubpath2;\n\n if (!subpath1) {\n newSubpath1 = createSubpath(lastSubpath1, subpath2);\n newSubpath2 = subpath2;\n } else if (!subpath2) {\n newSubpath2 = createSubpath(lastSubpath2, subpath1);\n newSubpath1 = subpath1;\n } else {\n [newSubpath1, newSubpath2] = alignSubpath(subpath1, subpath2);\n lastSubpath1 = newSubpath1;\n lastSubpath2 = newSubpath2;\n }\n\n newArray1.push(newSubpath1);\n newArray2.push(newSubpath2);\n }\n\n return [newArray1, newArray2];\n}\n\nconst addLineToBezierPath = (bezierPath: number[], x0: number, y0: number, x1: number, y1: number) => {\n if (!(isNumberClose(x0, x1) && isNumberClose(y0, y1))) {\n bezierPath.push(x0, y0, x1, y1, x1, y1);\n }\n};\n\nexport function pathToBezierCurves(path: ICustomPath2D): number[][] {\n const commandList = path.commandList;\n\n const bezierArrayGroups: number[][] = [];\n let currentSubpath: number[];\n\n // end point\n let xi: number = 0;\n let yi: number = 0;\n // start point\n let x0: number = 0;\n let y0: number = 0;\n\n const createNewSubpath = (x: number, y: number) => {\n // More than one M command\n if (currentSubpath && currentSubpath.length > 2) {\n bezierArrayGroups.push(currentSubpath);\n }\n currentSubpath = [x, y];\n };\n\n // the first control point\n let x1: number;\n let y1: number;\n // the second control point\n let x2: number;\n let y2: number;\n\n for (let i = 0, len = commandList.length; i < len; i++) {\n const cmd = commandList[i];\n\n const isFirst = i === 0;\n\n if (isFirst) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n x0 = xi = cmd[1] as number;\n y0 = yi = cmd[2] as number;\n\n if ([enumCommandMap.L, enumCommandMap.C, enumCommandMap.Q].includes(cmd[0])) {\n // Start point\n currentSubpath = [x0, y0];\n }\n }\n\n switch (cmd[0]) {\n case enumCommandMap.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n xi = x0 = cmd[1] as number;\n yi = y0 = cmd[2] as number;\n\n createNewSubpath(x0, y0);\n break;\n case enumCommandMap.L:\n x1 = cmd[1] as number;\n y1 = cmd[2] as number;\n addLineToBezierPath(currentSubpath, xi, yi, x1, y1);\n xi = x1;\n yi = y1;\n break;\n case enumCommandMap.C:\n currentSubpath.push(\n cmd[1] as number,\n cmd[2] as number,\n cmd[3] as number,\n cmd[4] as number,\n (xi = cmd[5] as number),\n (yi = cmd[6] as number)\n );\n break;\n case enumCommandMap.Q:\n x1 = cmd[1] as number;\n y1 = cmd[2] as number;\n x2 = cmd[3] as number;\n y2 = cmd[4] as number;\n currentSubpath.push(\n // Convert quadratic to cubic\n xi + (2 / 3) * (x1 - xi),\n yi + (2 / 3) * (y1 - yi),\n x2 + (2 / 3) * (x1 - x2),\n y2 + (2 / 3) * (y1 - y2),\n x2,\n y2\n );\n xi = x2;\n yi = y2;\n break;\n case enumCommandMap.A: {\n const cx = cmd[1] as number;\n const cy = cmd[2] as number;\n const rx = cmd[3] as number;\n const ry = rx;\n const startAngle = cmd[4] as number;\n const endAngle = cmd[5] as number;\n\n const counterClockwise = !!(cmd[6] as number);\n\n x1 = Math.cos(startAngle) * rx + cx;\n y1 = Math.sin(startAngle) * rx + cy;\n if (isFirst) {\n // 直接使用 arc 命令\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n createNewSubpath(x0, y0);\n } else {\n // Connect a line between current point to arc start point.\n addLineToBezierPath(currentSubpath, xi, yi, x1, y1);\n }\n\n xi = Math.cos(endAngle) * rx + cx;\n yi = Math.sin(endAngle) * rx + cy;\n\n const step = ((counterClockwise ? -1 : 1) * Math.PI) / 2;\n\n for (let angle = startAngle; counterClockwise ? angle > endAngle : angle < endAngle; angle += step) {\n const nextAngle = counterClockwise ? Math.max(angle + step, endAngle) : Math.min(angle + step, endAngle);\n addArcToBezierPath(currentSubpath, angle, nextAngle, cx, cy, rx, ry);\n }\n break;\n }\n case enumCommandMap.E: {\n const cx = cmd[1] as number;\n const cy = cmd[2] as number;\n const rx = cmd[3] as number;\n const ry = cmd[4] as number;\n const rotate = cmd[5] as number;\n const startAngle = cmd[6] as number;\n const endAngle = (cmd[7] as number) + startAngle;\n\n const anticlockwise = !!(cmd[8] as number);\n const hasRotate = !isNumberClose(rotate, 0);\n const rc = Math.cos(rotate);\n const rs = Math.sin(rotate);\n\n let xTemp = Math.cos(startAngle) * rx;\n let yTemp = Math.sin(startAngle) * ry;\n\n if (hasRotate) {\n x1 = xTemp * rc - yTemp * rs + cx;\n y1 = xTemp * rs + yTemp * rc + cy;\n } else {\n x1 = xTemp + cx;\n y1 = yTemp + cy;\n }\n if (isFirst) {\n // 直接使用 arc 命令\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n createNewSubpath(x0, y0);\n } else {\n // Connect a line between current point to arc start point.\n addLineToBezierPath(currentSubpath, xi, yi, x1, y1);\n }\n\n xTemp = Math.cos(endAngle) * rx;\n yTemp = Math.sin(endAngle) * ry;\n if (hasRotate) {\n xi = xTemp * rc - yTemp * rs + cx;\n yi = xTemp * rs + yTemp * rc + cy;\n } else {\n xi = xTemp + cx;\n yi = yTemp + cy;\n }\n\n const step = ((anticlockwise ? -1 : 1) * Math.PI) / 2;\n\n for (let angle = startAngle; anticlockwise ? angle > endAngle : angle < endAngle; angle += step) {\n const nextAngle = anticlockwise ? Math.max(angle + step, endAngle) : Math.min(angle + step, endAngle);\n addArcToBezierPath(currentSubpath, angle, nextAngle, cx, cy, rx, ry);\n\n if (hasRotate) {\n const curLen = currentSubpath.length;\n\n for (let j = curLen - 6; j <= curLen - 1; j += 2) {\n xTemp = currentSubpath[j];\n yTemp = currentSubpath[j + 1];\n\n currentSubpath[j] = (xTemp - cx) * rc - (yTemp - cy) * rs + cx;\n currentSubpath[j + 1] = (xTemp - cx) * rs + (yTemp - cy) * rc + cy;\n }\n }\n }\n\n break;\n }\n case enumCommandMap.R: {\n x0 = xi = cmd[1] as number;\n y0 = yi = cmd[2] as number;\n x1 = x0 + (cmd[3] as number);\n y1 = y0 + (cmd[4] as number);\n\n // rect is an individual path.\n createNewSubpath(x1, y0);\n addLineToBezierPath(currentSubpath, x1, y0, x1, y1);\n addLineToBezierPath(currentSubpath, x1, y1, x0, y1);\n addLineToBezierPath(currentSubpath, x0, y1, x0, y0);\n addLineToBezierPath(currentSubpath, x0, y0, x1, y0);\n break;\n }\n case enumCommandMap.AT: {\n const tx1 = cmd[1] as number;\n const ty1 = cmd[2] as number;\n const tx2 = cmd[3] as number;\n const ty2 = cmd[4] as number;\n const r = cmd[5] as number;\n\n const dis1 = PointService.distancePP({ x: xi, y: yi }, { x: tx1, y: ty1 });\n const dis2 = PointService.distancePP({ x: tx2, y: ty2 }, { x: tx1, y: ty1 });\n const theta = ((xi - tx1) * (tx2 - tx1) + (yi - ty1) * (ty2 - ty1)) / (dis1 * dis2);\n const dis = r / Math.sin(theta / 2);\n const midX = (xi + tx2 - 2 * tx1) / 2;\n const midY = (yi + ty2 - 2 * ty1) / 2;\n const midLen = PointService.distancePP({ x: midX, y: midY }, { x: 0, y: 0 });\n const cx = tx1 + (dis * midX) / midLen;\n const cy = tx2 + (dis * midY) / midLen;\n const disP = Math.sqrt(dis * dis - r * r);\n x0 = tx1 + (disP * (xi - tx1)) / dis1;\n y0 = ty1 + (disP * (yi - ty1)) / dis1;\n\n // Connect a line between current point to arc start point.\n addLineToBezierPath(currentSubpath, xi, yi, x0, y0);\n\n xi = tx1 + (disP * (tx2 - tx1)) / dis2;\n yi = ty1 + (disP * (ty2 - ty1)) / dis2;\n\n const startAngle = getAngleByPoint({ x: cx, y: cy }, { x: x0, y: y0 });\n\n const endAngle = getAngleByPoint({ x: cx, y: cy }, { x: xi, y: yi });\n\n addArcToBezierPath(currentSubpath, startAngle, endAngle, cx, cy, r, r);\n\n break;\n }\n case enumCommandMap.Z: {\n currentSubpath && addLineToBezierPath(currentSubpath, xi, yi, x0, y0);\n xi = x0;\n yi = y0;\n break;\n }\n }\n }\n\n if (currentSubpath && currentSubpath.length > 2) {\n bezierArrayGroups.push(currentSubpath);\n }\n\n return bezierArrayGroups;\n}\n\nexport function applyTransformOnBezierCurves(bezierCurves: number[][], martrix: IMatrix) {\n for (let i = 0; i < bezierCurves.length; i++) {\n const subPath = bezierCurves[i];\n for (let k = 0; k < subPath.length; k += 2) {\n const x = subPath[k];\n const y = subPath[k + 1];\n const res = { x, y };\n\n martrix.transformPoint({ x, y }, res);\n\n subPath[k] = res.x;\n subPath[k + 1] = res.y;\n }\n }\n}\n\nexport function bezierCurversToPath(bezierCurves: number[][]) {\n const path = new CustomPath2D();\n\n for (let i = 0; i < bezierCurves.length; i++) {\n const subPath = bezierCurves[i];\n\n if (subPath.length > 2) {\n path.moveTo(subPath[0], subPath[1]);\n for (let k = 2; k < subPath.length; k += 6) {\n path.bezierCurveTo(subPath[k], subPath[k + 1], subPath[k + 2], subPath[k + 3], subPath[k + 4], subPath[k + 5]);\n }\n }\n }\n\n return path;\n}\n","import { isNil } from '@visactor/vutils';\nimport type { IRectGraphicAttribute } from '../interface/graphic/rect';\n\nexport const normalizeRectAttributes = (attribute: IRectGraphicAttribute) => {\n if (!attribute) {\n return { x: 0, y: 0, width: 0, height: 0 };\n }\n\n let width = isNil(attribute.width) ? attribute.x1 - attribute.x : attribute.width;\n let height = isNil(attribute.height) ? attribute.y1 - attribute.y : attribute.height;\n let x = 0;\n let y = 0;\n\n if (width < 0) {\n x = width;\n width = -width;\n } else if (Number.isNaN(width)) {\n width = 0;\n }\n\n if (height < 0) {\n y = height;\n height = -height;\n } else if (Number.isNaN(height)) {\n height = 0;\n }\n\n return { x, y, width, height };\n};\n","/* Adapted from zrender by ecomfe\n * https://github.com/ecomfe/zrender\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/ecomfe/zrender/blob/master/src/tool/dividePath.ts\n * License: https://github.com/ecomfe/zrender/blob/master/LICENSE\n * @license\n */\n\nimport type { ICustomPath2D } from './../interface/path';\nimport type { IPointLike } from '@visactor/vutils';\nimport { isNumber, Bounds, getIntersectPoint } from '@visactor/vutils';\nimport type { ILine, IRect, IArc, ICircle, IArea, IPolygon, IPath } from '../interface';\nimport { bezierCurversToPath, pathToBezierCurves } from './morphing-utils';\nimport { normalizeRectAttributes } from './rect-utils';\n/**\n * split a rect to grids\n */\nexport function splitToGrids(width: number, height: number, count: number) {\n const ratio = width / height;\n\n let rowCount: number;\n let columnCount: number;\n\n if (width >= height) {\n columnCount = Math.ceil(Math.sqrt(count * ratio));\n rowCount = Math.floor(count / columnCount);\n\n if (rowCount === 0) {\n rowCount = 1;\n columnCount = count;\n }\n } else {\n rowCount = Math.ceil(Math.sqrt(count / ratio));\n columnCount = Math.floor(count / rowCount);\n\n if (columnCount === 0) {\n columnCount = 1;\n rowCount = count;\n }\n }\n\n const grids: number[] = [];\n for (let i = 0; i < rowCount; i++) {\n grids.push(columnCount);\n }\n const sumCount = rowCount * columnCount;\n const remained = count - sumCount;\n\n if (remained > 0) {\n for (let i = 0; i < remained; i += columnCount) {\n if (i + columnCount < remained) {\n grids.push(columnCount);\n } else {\n grids.push(remained - i);\n }\n }\n }\n return grids;\n}\n\nexport const splitRect = (rect: IRect, count: number) => {\n const { width, height } = normalizeRectAttributes(rect.attribute);\n\n const x = 0;\n const y = 0;\n const grids = splitToGrids(width, height, count);\n const res = [];\n const gridHeight = height / grids.length;\n\n for (let i = 0, rowCount = grids.length; i < rowCount; i++) {\n const columnCount = grids[i];\n const gridWidth = width / columnCount;\n for (let j = 0; j < columnCount; j++) {\n res.push({\n x: x + j * gridWidth,\n y: y + i * gridHeight,\n width: gridWidth,\n height: gridHeight\n });\n }\n }\n\n return res;\n};\n\nexport const splitArc = (arc: IArc, count: number) => {\n const x = 0;\n const y = 0;\n const angles = arc.getParsedAngle();\n const startAngle = angles.startAngle;\n const endAngle = angles.endAngle;\n const innerRadius = arc.getComputedAttribute('innerRadius');\n const outerRadius = arc.getComputedAttribute('outerRadius');\n const angleDelta = Math.abs(startAngle - endAngle);\n const radiusDelta = Math.abs(outerRadius - innerRadius);\n\n const grids = splitToGrids((angleDelta * (innerRadius + outerRadius)) / 2, radiusDelta, count);\n const res = [];\n const gridRadius = radiusDelta / grids.length;\n const radiusSign = outerRadius >= innerRadius ? 1 : -1;\n const angleSign = endAngle >= startAngle ? 1 : -1;\n\n for (let i = 0, rowCount = grids.length; i < rowCount; i++) {\n const columnCount = grids[i];\n const gridAngle = angleDelta / columnCount;\n for (let j = 0; j < columnCount; j++) {\n // from outter to inner\n res.push({\n innerRadius: outerRadius - gridRadius * i * radiusSign,\n outerRadius: outerRadius - gridRadius * (i + 1) * radiusSign,\n startAngle: startAngle + gridAngle * j * angleSign,\n endAngle: startAngle + gridAngle * (j + 1) * angleSign\n });\n }\n }\n\n return res;\n};\n\nexport const splitCircle = (arc: ICircle, count: number) => {\n const x = 0;\n const y = 0;\n const startAngle = arc.getComputedAttribute('startAngle');\n const endAngle = arc.getComputedAttribute('endAngle');\n const radius = arc.getComputedAttribute('radius');\n const angleDelta = Math.abs(startAngle - endAngle);\n\n const grids = splitToGrids(angleDelta * radius, radius, count);\n const res = [];\n const gridAngle = angleDelta / grids[0];\n const gridRadius = radius / grids.length;\n const angleSign = endAngle >= startAngle ? 1 : -1;\n\n for (let i = 0, rowCount = grids.length; i < rowCount; i++) {\n for (let j = 0, columnCount = grids[i]; j < columnCount; j++) {\n res.push({\n innerRadius: gridRadius * i,\n outerRadius: gridRadius * (i + 1),\n startAngle: startAngle + gridAngle * j * angleSign,\n endAngle: startAngle + gridAngle * (j + 1) * angleSign\n });\n }\n }\n\n return res;\n};\n\nconst samplingPoints = (points: IPointLike[], count: number) => {\n const validatePoints = points.filter(point => point.defined !== false && isNumber(point.x) && isNumber(point.y));\n\n if (validatePoints.length === 0) {\n return [];\n }\n if (validatePoints.length === 1) {\n return new Array(count).fill(0).map(i => validatePoints[0]);\n }\n\n const res = [];\n if (count <= validatePoints.length) {\n const step = validatePoints.length / count;\n let i = 0;\n let cur = 0;\n\n while (i < count) {\n res.push(validatePoints[Math.floor(cur)]);\n\n cur += step;\n i++;\n }\n\n return res;\n }\n\n const insertCount = count - validatePoints.length;\n const insertStep = insertCount / (validatePoints.length - 1);\n const insetRatio = 1 / (insertStep + 1);\n let curCount = 0;\n\n for (let i = 0, len = points.length; i < len; i++) {\n res.push(points[i]);\n\n if (i < len - 1) {\n let cur = insetRatio;\n const xCur = points[i].x;\n const yCur = points[i].y;\n const xNext = points[i + 1].x;\n const yNext = points[i + 1].y;\n\n while (cur < 1 && curCount < insertCount) {\n res.push({\n x: xCur + (xNext - xCur) * cur,\n y: yCur + (yNext - yCur) * cur\n });\n cur += insetRatio;\n curCount += 1;\n }\n }\n }\n\n return res;\n};\n\nexport const splitArea = (area: IArea, count: number) => {\n const attribute = area.attribute;\n let points = attribute.points;\n const segements = attribute.segments;\n\n if (!points) {\n points = segements.reduce((res, seg) => {\n return res.concat(seg.points ?? []);\n }, []);\n }\n const validatePoints = points.filter(point => point.defined !== false && isNumber(point.x) && isNumber(point.y));\n\n if (!validatePoints.length) {\n return [];\n }\n\n const allPoints: IPointLike[] = [];\n\n validatePoints.forEach(point => {\n allPoints.push({ x: point.x, y: point.y });\n });\n\n for (let i = validatePoints.length - 1; i >= 0; i--) {\n const point = validatePoints[i];\n\n allPoints.push({ x: point.x1 ?? point.x, y: point.y1 ?? point.y });\n }\n\n const res: { points: IPointLike[] }[] = [];\n\n recursiveCallBinarySplit(points, count, res);\n\n return res;\n};\n\nexport const splitLine = (line: ILine, count: number) => {\n const attribute = line.attribute;\n const points = attribute.points;\n\n if (points) {\n return samplingPoints(points, count);\n } else if (attribute.segments) {\n const segs = attribute.segments;\n const allPoints = segs.reduce((res, seg) => {\n return res.concat(seg.points ?? []);\n }, []);\n\n return samplingPoints(allPoints, count);\n }\n return [];\n};\n\nfunction crossProduct(dir1: [number, number], dir2: [number, number]): number {\n return dir1[0] * dir2[1] - dir1[1] * dir2[0];\n}\n\nconst clonePoints = (points: IPointLike[]) => {\n return points.map(p => ({ x: p.x, y: p.y }));\n};\n\nconst splitPolygonByLine = (points: IPointLike[], p0: IPointLike, p1: IPointLike) => {\n const len = points.length;\n const intersections: { dot: number; point: IPointLike; edgeIndex: number }[] = [];\n\n for (let i = 0; i < len; i++) {\n const cur = points[i];\n const next = i === len - 1 ? points[0] : points[i + 1];\n\n const res = getIntersectPoint([p0.x, p0.y], [p1.x, p1.y], [cur.x, cur.y], [next.x, next.y]);\n\n if (res && typeof res !== 'boolean') {\n intersections.push({\n dot: crossProduct([res[0] - p0.x, res[1] - p0.x], [p1.x - p0.x, p1.y - p0.x]),\n point: { x: res[0], y: res[1] },\n edgeIndex: i\n });\n }\n }\n\n if (intersections.length < 2) {\n // 没有交点或者和某条边共线\n return [clonePoints(points), clonePoints(points)];\n }\n\n intersections.sort((a, b) => a.dot - b.dot);\n let is0 = intersections[0];\n let is1 = intersections[intersections.length - 1];\n\n if (is0.edgeIndex > is1.edgeIndex) {\n [is0, is1] = [is1, is0];\n }\n\n const newP0 = is0.point;\n const newP1 = is1.point;\n const newPointsA = [{ x: newP0.x, y: newP0.y }];\n\n for (let i = is0.edgeIndex + 1; i <= is1.edgeIndex; i++) {\n newPointsA.push({ x: points[i].x, y: points[i].y });\n }\n newPointsA.push({ x: newP1.x, y: newP1.y });\n\n const newPointsB = [{ x: newP1.x, y: newP1.y }];\n for (let i = is1.edgeIndex + 1, maxIndex = is0.edgeIndex + len; i <= maxIndex; i++) {\n const p = points[i % len];\n newPointsB.push({ x: p.x, y: p.y });\n }\n newPointsB.push({ x: newP0.x, y: newP0.y });\n\n return [newPointsA, newPointsB];\n};\n\nexport const binarySplitPolygon = (points: IPointLike[]) => {\n const box = new Bounds();\n\n points.forEach(point => {\n box.add(point.x, point.y);\n });\n const width = box.width();\n const height = box.height();\n\n if (width >= height) {\n // split horizontal\n const midX = box.x1 + width / 2;\n\n return splitPolygonByLine(\n points,\n {\n x: midX,\n y: box.y1\n },\n {\n x: midX,\n y: box.y2\n }\n );\n }\n // split vertical\n const midY = box.y1 + height / 2;\n\n return splitPolygonByLine(\n points,\n {\n x: box.x1,\n y: midY\n },\n {\n x: box.x2,\n y: midY\n }\n );\n};\n\nexport const recursiveCallBinarySplit = (points: IPointLike[], count: number, out: { points: IPointLike[] }[]) => {\n if (count === 1) {\n out.push({ points });\n } else {\n const half = Math.floor(count / 2);\n const res = binarySplitPolygon(points);\n\n recursiveCallBinarySplit(res[0], half, out);\n recursiveCallBinarySplit(res[1], count - half, out);\n }\n};\n\nexport const splitPolygon = (polygon: IPolygon, count: number) => {\n const points = polygon.attribute.points;\n\n if (!points || !points.length) {\n return [];\n }\n if (count === 1) {\n return [{ points: clonePoints(points) }];\n }\n const res: { points: IPointLike[] }[] = [];\n\n recursiveCallBinarySplit(points, count, res);\n\n return res;\n};\n\nexport const splitPath = (path: IPath, count: number) => {\n const pathShape = path.getParsedPathShape();\n const bezierCurves = pathToBezierCurves(pathShape);\n\n if (!bezierCurves.length || count < 0) {\n return [];\n }\n\n const subPathCnt = bezierCurves.length;\n\n if (bezierCurves.length >= count) {\n const res: { path: ICustomPath2D }[] = [];\n const stepCount = Math.floor(bezierCurves.length / count);\n\n for (let i = 0; i < count; i++) {\n const curves = bezierCurves.slice(i * stepCount, i === count - 1 ? subPathCnt : (i + 1) * stepCount);\n\n res.push({ path: bezierCurversToPath(curves) });\n }\n\n return res;\n }\n\n const res: { points: IPointLike[] }[] = [];\n const stepCount = Math.floor(count / subPathCnt);\n let remain = count;\n\n for (let c = 0; c < subPathCnt; c++) {\n const points: IPointLike[] = [];\n\n for (let i = 2, len = bezierCurves[c].length; i < len; i += 2) {\n points.push({ x: bezierCurves[0][i], y: bezierCurves[0][i + 1] });\n }\n recursiveCallBinarySplit(points, c === subPathCnt - 1 ? remain : stepCount, res);\n remain -= stepCount;\n }\n\n return res;\n};\n","import {\n splitArc,\n splitCircle,\n splitLine,\n splitRect,\n splitPolygon,\n splitArea,\n splitPath\n} from './../common/split-path';\nimport type {\n ICustomPath2D,\n IGraphic,\n MorphingAnimateConfig,\n IRect,\n EasingType,\n MultiMorphingAnimateConfig,\n IArc,\n ICircle,\n IGraphicAttribute,\n ILine,\n IPolygon,\n IArea,\n IPath\n} from './../interface';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { ACustomAnimate } from './animate';\nimport {\n alignBezierCurves,\n applyTransformOnBezierCurves,\n findBestMorphingRotation,\n pathToBezierCurves\n} from '../common/morphing-utils';\nimport { application } from '../application';\nimport type { IMatrix } from '@visactor/vutils';\nimport { isNil } from '@visactor/vutils';\nimport { interpolateColor } from '../color-string/interpolate';\nimport { ColorStore, ColorType } from '../color-string';\nimport { DefaultMorphingAnimateConfig } from './config';\nimport { isTransformKey } from '../common/utils';\nimport { AttributeUpdateType } from '../common/enums';\n\ndeclare const __DEV__: boolean;\n\ninterface MorphingDataItem {\n from: number[];\n to: number[];\n fromCp: number[];\n toCp: number[];\n rotation: number;\n}\n\ninterface OtherAttrItem {\n from: any;\n to: any;\n key: string;\n}\n\nconst interpolateOtherAttrs = (attrs: OtherAttrItem[], out: any, ratio: number) => {\n attrs.forEach(entry => {\n if (Number.isFinite(entry.to)) {\n out[entry.key] = entry.from + (entry.to - entry.from) * ratio;\n } else if (entry.key === 'fill' || entry.key === 'stroke') {\n // 保存解析的结果到step\n const color = interpolateColor(entry.from, entry.to, ratio, false);\n if (color) {\n out[entry.key] = color;\n }\n }\n });\n};\n\n/* Adapted from zrender by ecomfe\n * https://github.com/ecomfe/zrender\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/ecomfe/zrender/blob/master/src/tool/morphPath.ts\n * License: https://github.com/ecomfe/zrender/blob/master/LICENSE\n * @license\n */\nconst interpolateMorphingData = (morphingData: MorphingDataItem[], path: ICustomPath2D, ratio: number) => {\n const tmpArr: number[] = [];\n const newCp: number[] = [];\n path.clear();\n\n for (let i = 0; i < morphingData.length; i++) {\n const item = morphingData[i];\n const from = item.from;\n const to = item.to;\n const angle = item.rotation * ratio;\n const fromCp = item.fromCp;\n const toCp = item.toCp;\n const sa = Math.sin(angle);\n const ca = Math.cos(angle);\n\n newCp[0] = fromCp[0] + (toCp[0] - fromCp[0]) * ratio;\n newCp[1] = fromCp[1] + (toCp[1] - fromCp[1]) * ratio;\n\n for (let m = 0; m < from.length; m += 2) {\n const x0 = from[m];\n const y0 = from[m + 1];\n const x1 = to[m];\n const y1 = to[m + 1];\n\n const x = x0 * (1 - ratio) + x1 * ratio;\n const y = y0 * (1 - ratio) + y1 * ratio;\n\n tmpArr[m] = x * ca - y * sa + newCp[0];\n tmpArr[m + 1] = x * sa + y * ca + newCp[1];\n }\n\n let x0 = tmpArr[0];\n let y0 = tmpArr[1];\n\n path.moveTo(x0, y0);\n\n for (let m = 2; m < from.length; m += 6) {\n const x1 = tmpArr[m];\n const y1 = tmpArr[m + 1];\n const x2 = tmpArr[m + 2];\n const y2 = tmpArr[m + 3];\n const x3 = tmpArr[m + 4];\n const y3 = tmpArr[m + 5];\n\n // Is a line.\n if (x0 === x1 && y0 === y1 && x2 === x3 && y2 === y3) {\n path.lineTo(x3, y3);\n } else {\n path.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n }\n x0 = x3;\n y0 = y3;\n }\n }\n};\n\nconst parseMorphingData = (\n fromPath: ICustomPath2D | null,\n toPath: ICustomPath2D,\n config?: {\n fromTransform?: IMatrix;\n toTransfrom: IMatrix;\n }\n) => {\n const fromBezier = fromPath ? pathToBezierCurves(fromPath) : [];\n const toBezier = pathToBezierCurves(toPath);\n\n if (config && fromBezier) {\n config.fromTransform && applyTransformOnBezierCurves(fromBezier, config.fromTransform.clone().getInverse());\n applyTransformOnBezierCurves(fromBezier, config.toTransfrom);\n // applyTransformOnBezierCurves(toBezier, config.toTransfrom.clone().getInverse());\n }\n\n const [fromBezierCurves, toBezierCurves] = alignBezierCurves(fromBezier, toBezier);\n\n return fromPath\n ? findBestMorphingRotation(fromBezierCurves, toBezierCurves, 10, Math.PI)\n : toBezierCurves.map((to, index) => {\n return {\n from: fromBezierCurves[index],\n to,\n fromCp: [0, 0],\n toCp: [0, 0],\n rotation: 0\n };\n });\n};\n\nconst validateOtherAttrs = [\n 'fill',\n 'fillOpacity',\n 'shadowBlur',\n 'shadowColor',\n 'shadowOffsetX',\n 'shadowOffsetY',\n 'stroke',\n 'strokeOpacity',\n 'lineDashOffset'\n // 'lineWidth'\n];\n\nconst parseOtherAnimateAttrs = (\n fromAttrs: Partial | null,\n toAttrs: Partial | null\n) => {\n if (!fromAttrs || !toAttrs) {\n return null;\n }\n const res: OtherAttrItem[] = [];\n let hasAttr = false;\n\n Object.keys(fromAttrs).forEach(fromKey => {\n if (!validateOtherAttrs.includes(fromKey)) {\n return;\n }\n\n const toValue = toAttrs[fromKey];\n if (!isNil(toValue) && !isNil(fromAttrs[fromKey]) && toValue !== fromAttrs[fromKey]) {\n if (fromKey === 'fill' || fromKey === 'stroke') {\n res.push({\n from:\n typeof fromAttrs[fromKey] === 'string'\n ? ColorStore.Get(fromAttrs[fromKey] as unknown as string, ColorType.Color255)\n : fromAttrs[fromKey],\n to: typeof toValue === 'string' ? ColorStore.Get(toValue as string, ColorType.Color255) : toValue,\n key: fromKey\n });\n } else {\n res.push({ from: fromAttrs[fromKey], to: toValue, key: fromKey });\n }\n\n hasAttr = true;\n }\n });\n\n return hasAttr ? res : null;\n};\n\nexport class MorphingPath extends ACustomAnimate {\n declare path: CustomPath2D;\n\n saveOnEnd?: boolean;\n otherAttrs?: OtherAttrItem[];\n\n constructor(\n config: { morphingData: MorphingDataItem[]; otherAttrs?: OtherAttrItem[]; saveOnEnd?: boolean },\n duration: number,\n easing: EasingType\n ) {\n super(0, 1, duration, easing);\n this.morphingData = config.morphingData;\n this.otherAttrs = config.otherAttrs;\n this.saveOnEnd = config.saveOnEnd;\n }\n\n private morphingData?: MorphingDataItem[];\n\n getEndProps(): Record {\n return {};\n }\n\n onBind(): void {\n (this.target as IGraphic).createPathProxy();\n this.onUpdate(false, 0, (this.target as IGraphic).attribute);\n }\n\n onEnd(): void {\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n const target = this.target as IGraphic;\n const pathProxy = typeof target.pathProxy === 'function' ? target.pathProxy(target.attribute) : target.pathProxy;\n interpolateMorphingData(this.morphingData, pathProxy, ratio);\n if (this.otherAttrs && this.otherAttrs.length) {\n interpolateOtherAttrs(this.otherAttrs, out, ratio);\n }\n // 计算位置\n if (end && !this.saveOnEnd) {\n (this.target as IGraphic).pathProxy = null;\n }\n }\n}\n\nexport const morphPath = (\n fromGraphic: IGraphic | null,\n toGraphic: IGraphic,\n animationConfig?: MorphingAnimateConfig,\n fromGraphicTransform?: IMatrix\n) => {\n if (fromGraphic && (!fromGraphic.valid || !fromGraphic.toCustomPath)) {\n if (__DEV__) {\n console.error(fromGraphic, ' is not validate');\n }\n return null;\n }\n\n if (!toGraphic.valid || !toGraphic.toCustomPath) {\n if (__DEV__) {\n console.error(toGraphic, ' is not validate');\n }\n return null;\n }\n\n let fromTransform = fromGraphic?.globalTransMatrix;\n\n if (fromGraphicTransform && fromTransform) {\n fromTransform = fromGraphicTransform\n .clone()\n .multiply(fromTransform.a, fromTransform.b, fromTransform.c, fromTransform.d, fromTransform.e, fromTransform.f);\n }\n const morphingData = parseMorphingData(fromGraphic?.toCustomPath?.(), toGraphic.toCustomPath(), {\n fromTransform,\n toTransfrom: toGraphic.globalTransMatrix\n });\n\n const attrs = parseOtherAnimateAttrs(fromGraphic?.attribute, toGraphic.attribute);\n const animate = toGraphic.animate(animationConfig);\n\n if (animationConfig?.delay) {\n animate.wait(animationConfig.delay);\n }\n\n animate.play(\n new MorphingPath(\n { morphingData, otherAttrs: attrs },\n animationConfig?.duration ?? DefaultMorphingAnimateConfig.duration,\n animationConfig?.easing ?? DefaultMorphingAnimateConfig.easing\n )\n );\n\n return animate;\n};\n\nexport const oneToMultiMorph = (\n fromGraphic: IGraphic,\n toGraphics: IGraphic[],\n animationConfig?: MultiMorphingAnimateConfig\n) => {\n const validateToGraphics = toGraphics.filter(graphic => graphic && graphic.toCustomPath && graphic.valid);\n if (!validateToGraphics.length) {\n if (__DEV__) {\n console.error(validateToGraphics, ' is not validate');\n }\n }\n\n if (!fromGraphic.valid || !fromGraphic.toCustomPath) {\n if (__DEV__) {\n console.error(fromGraphic, ' is not validate');\n }\n }\n\n const childGraphics: IGraphic[] = (\n animationConfig?.splitPath === 'clone' ? cloneGraphic : animationConfig?.splitPath ?? splitGraphic\n )(fromGraphic, validateToGraphics.length, false);\n\n const oldOnEnd = animationConfig?.onEnd;\n let count = validateToGraphics.length;\n const onEachEnd = () => {\n count--;\n if (count === 0 && oldOnEnd) {\n oldOnEnd();\n }\n };\n\n validateToGraphics.forEach((toChild, index) => {\n const fromChild = childGraphics[index];\n const delay =\n (animationConfig?.delay ?? 0) +\n (animationConfig?.individualDelay\n ? animationConfig.individualDelay(index, validateToGraphics.length, fromChild, toChild)\n : 0);\n morphPath(\n fromChild,\n toChild,\n Object.assign({}, animationConfig, { onEnd: onEachEnd, delay }),\n fromGraphic.globalTransMatrix\n );\n });\n};\n\nexport class MultiToOneMorphingPath extends ACustomAnimate {\n declare path: CustomPath2D;\n\n otherAttrs?: OtherAttrItem[][];\n\n constructor(\n config: { morphingData: MorphingDataItem[][]; otherAttrs?: OtherAttrItem[][] },\n duration: number,\n easing: EasingType\n ) {\n super(0, 1, duration, easing);\n this.morphingData = config.morphingData;\n this.otherAttrs = config.otherAttrs;\n }\n\n private morphingData?: MorphingDataItem[][];\n\n getEndProps(): Record {\n return {};\n }\n\n onBind(): void {\n this.addPathProxy();\n }\n\n private addPathProxy() {\n const shadowRoot = (this.target as IGraphic).shadowRoot;\n\n shadowRoot.forEachChildren(child => {\n (child as IGraphic).createPathProxy();\n });\n\n this.onUpdate(false, 0, (this.target as IGraphic).attribute);\n }\n\n private clearPathProxy() {\n const shadowRoot = (this.target as IGraphic).shadowRoot;\n\n shadowRoot.forEachChildren(child => {\n (child as IGraphic).pathProxy = null;\n });\n }\n\n onEnd(): void {\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n const shadowRoot = (this.target as IGraphic).shadowRoot;\n\n shadowRoot.forEachChildren((child: IGraphic, index) => {\n interpolateMorphingData(\n this.morphingData[index],\n typeof child.pathProxy === 'function' ? child.pathProxy(child.attribute) : child.pathProxy,\n ratio\n );\n\n if (this.otherAttrs?.[index] && this.otherAttrs[index].length) {\n interpolateOtherAttrs(this.otherAttrs[index], child.attribute, ratio);\n }\n });\n\n // 计算位置\n if (end) {\n this.clearPathProxy();\n this.morphingData = null;\n }\n }\n}\n\nconst parseShadowChildAttrs = (graphicAttrs: Partial) => {\n const attrs: Partial = {};\n\n Object.keys(graphicAttrs).forEach(key => {\n if (!isTransformKey(key)) {\n attrs[key] = graphicAttrs[key];\n }\n });\n\n // if (attrs.fill == null) {\n // attrs.fill = !!attrs.fillColor;\n // }\n // if (attrs.stroke == null) {\n // attrs.stroke = !!attrs.strokeColor;\n // }\n\n return attrs;\n};\n\nconst appendShadowChildrenToGraphic = (graphic: IGraphic, children: IGraphic[], count: number) => {\n const childAttrs = parseShadowChildAttrs(graphic.attribute);\n const shadowRoot = graphic.attachShadow();\n\n if (children.length) {\n shadowRoot.setTheme({\n [children[0].type]: childAttrs\n });\n children.forEach(element => {\n shadowRoot.appendChild(element);\n });\n } else {\n const box = graphic.AABBBounds;\n const width = box.width();\n const height = box.height();\n\n shadowRoot.setTheme({\n rect: childAttrs\n });\n new Array(count).fill(0).forEach(el => {\n const child = application.graphicService.creator.rect({\n x: 0,\n y: 0,\n width,\n height: height\n });\n shadowRoot.appendChild(child);\n children.push(child);\n });\n }\n};\n\nexport const cloneGraphic = (graphic: IGraphic, count: number, needAppend?: boolean) => {\n const children: IGraphic[] = [];\n const childAttrs = needAppend ? null : parseShadowChildAttrs(graphic.attribute);\n const path = graphic.toCustomPath();\n\n for (let i = 0; i < count; i++) {\n const element = {\n path: new CustomPath2D().fromCustomPath2D(path)\n };\n\n children.push(\n application.graphicService.creator.path(needAppend ? element : Object.assign({}, childAttrs, element))\n );\n }\n\n if (needAppend) {\n appendShadowChildrenToGraphic(graphic, children, count);\n }\n\n return children;\n};\n\nexport const splitGraphic = (graphic: IGraphic, count: number, needAppend?: boolean) => {\n const children: IGraphic[] = [];\n const childAttrs = needAppend ? null : parseShadowChildAttrs(graphic.attribute);\n\n if (graphic.type === 'rect') {\n const childrenAttrs = splitRect(graphic as IRect, count);\n childrenAttrs.forEach(element => {\n children.push(\n application.graphicService.creator.rect(needAppend ? element : Object.assign({}, childAttrs, element))\n );\n });\n } else if (graphic.type === 'arc') {\n const childrenAttrs = splitArc(graphic as IArc, count);\n childrenAttrs.forEach(element => {\n children.push(\n application.graphicService.creator.arc(needAppend ? element : Object.assign({}, childAttrs, element))\n );\n });\n } else if (graphic.type === 'circle') {\n const childrenAttrs = splitCircle(graphic as ICircle, count);\n childrenAttrs.forEach(element => {\n children.push(\n application.graphicService.creator.arc(needAppend ? element : Object.assign({}, childAttrs, element))\n );\n });\n } else if (graphic.type === 'line') {\n const childrenAttrs = splitLine(graphic as ILine, count);\n const defaultSymbol = { size: 10, symbolType: 'circle' };\n\n childrenAttrs.forEach(element => {\n children.push(\n application.graphicService.creator.symbol(\n needAppend ? Object.assign({}, element, defaultSymbol) : Object.assign({}, childAttrs, element, defaultSymbol)\n )\n );\n });\n } else if (graphic.type === 'polygon') {\n const childrenAttrs = splitPolygon(graphic as IPolygon, count);\n childrenAttrs.forEach(element => {\n children.push(\n application.graphicService.creator.polygon(needAppend ? element : Object.assign({}, childAttrs, element))\n );\n });\n } else if (graphic.type === 'area') {\n const childrenAttrs = splitArea(graphic as IArea, count);\n childrenAttrs.forEach(element => {\n children.push(\n application.graphicService.creator.polygon(needAppend ? element : Object.assign({}, childAttrs, element))\n );\n });\n } else if (graphic.type === 'path') {\n const childrenAttrs = splitPath(graphic as IPath, count);\n childrenAttrs.forEach(element => {\n if ('path' in element) {\n children.push(\n application.graphicService.creator.path(needAppend ? element : Object.assign({}, childAttrs, element))\n );\n } else {\n children.push(\n application.graphicService.creator.polygon(needAppend ? element : Object.assign({}, childAttrs, element))\n );\n }\n });\n }\n\n if (needAppend) {\n appendShadowChildrenToGraphic(graphic, children, count);\n }\n\n return children;\n};\n\n/**\n * 多对一动画\n * @param fromGraphics\n * @param toGraphic\n * @param animationConfig\n */\nexport const multiToOneMorph = (\n fromGraphics: IGraphic[],\n toGraphic: IGraphic,\n animationConfig?: MultiMorphingAnimateConfig\n) => {\n const validateFromGraphics = fromGraphics.filter(graphic => graphic.toCustomPath && graphic.valid);\n if (!validateFromGraphics.length) {\n if (__DEV__) {\n console.error(fromGraphics, ' is not validate');\n }\n }\n\n if (!toGraphic.valid || !toGraphic.toCustomPath) {\n if (__DEV__) {\n console.error(toGraphic, ' is not validate');\n }\n }\n\n const childGraphics: IGraphic[] = (\n animationConfig?.splitPath === 'clone' ? cloneGraphic : animationConfig?.splitPath ?? splitGraphic\n )(toGraphic, validateFromGraphics.length, true);\n\n const toAttrs = toGraphic.attribute;\n toGraphic.setAttribute('visible', false);\n\n const morphingData = validateFromGraphics.map((graphic, index) => {\n return parseMorphingData(graphic.toCustomPath(), childGraphics[index].toCustomPath(), {\n fromTransform: graphic.globalTransMatrix,\n toTransfrom: childGraphics[index].globalTransMatrix\n });\n });\n const otherAttrs = validateFromGraphics.map((graphic, index) => {\n return parseOtherAnimateAttrs(graphic.attribute, toAttrs);\n });\n\n if (animationConfig?.individualDelay) {\n const oldOnEnd = animationConfig.onEnd;\n let count = validateFromGraphics.length;\n const onEachEnd = () => {\n count--;\n if (count === 0) {\n toGraphic.setAttributes({ visible: true, ratio: null } as any, false, {\n type: AttributeUpdateType.ANIMATE_END\n });\n toGraphic.detachShadow();\n if (oldOnEnd) {\n oldOnEnd();\n }\n }\n };\n childGraphics.forEach((to, index) => {\n const delay =\n (animationConfig.delay ?? 0) +\n animationConfig.individualDelay(index, validateFromGraphics.length, fromGraphics[index], to);\n const animate = to.animate(Object.assign({}, animationConfig, { onEnd: onEachEnd }));\n animate.wait(delay);\n\n animate.play(\n new MorphingPath(\n {\n morphingData: morphingData[index],\n saveOnEnd: true,\n otherAttrs: otherAttrs[index]\n },\n animationConfig.duration ?? DefaultMorphingAnimateConfig.duration,\n animationConfig.easing ?? DefaultMorphingAnimateConfig.easing\n )\n );\n });\n } else {\n const oldOnEnd = animationConfig?.onEnd;\n const config = animationConfig ? Object.assign({}, animationConfig) : {};\n\n config.onEnd = () => {\n toGraphic.setAttribute('visible', true, false, { type: AttributeUpdateType.ANIMATE_END });\n toGraphic.detachShadow();\n\n if (oldOnEnd) {\n oldOnEnd();\n }\n };\n\n const animate = toGraphic.animate(config);\n\n if (animationConfig?.delay) {\n animate.wait(animationConfig.delay);\n }\n\n animate.play(\n new MultiToOneMorphingPath(\n { morphingData, otherAttrs },\n animationConfig?.duration ?? DefaultMorphingAnimateConfig.duration,\n animationConfig?.easing ?? DefaultMorphingAnimateConfig.easing\n )\n );\n }\n};\n","import { morphPath, multiToOneMorph, oneToMultiMorph } from '@visactor/vrender-core';\nimport { isNil, isNumber, isValidNumber } from '@visactor/vutils';\nimport type { IElement, IGrammarBase, IMark, IRunningConfig, MarkSpec } from '../../types';\nimport type { DiffResult } from '../../types/base';\nimport type { IMorph, MorphData, MorphElements } from '../../types/morph';\nimport { invokeFunctionType, parseField } from '../../parse/util';\nimport { diffMultiple, diffSingle, groupData } from '../mark/differ';\nimport { GrammarMarkType } from '../enums';\n\nconst EmptyKey = Symbol.for('key');\n\nexport class Morph implements IMorph {\n diffGrammar(prevGrammars: U[], nextGrammars: U[]): DiffResult {\n const key = (grammar: U) => grammar.id() ?? Symbol();\n return diffSingle(prevGrammars, nextGrammars, key);\n }\n\n diffMark(prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig): DiffResult {\n const diffResult: DiffResult = {\n enter: [],\n exit: [],\n update: []\n };\n\n let prevDiffMarks: IMark[] = [];\n let nextDiffMarks: IMark[] = [];\n\n // filter out marks & specs which will not morph\n prevMarks.forEach(mark => {\n if (\n // group mark does not support reusing or morphing\n mark.markType !== GrammarMarkType.group &&\n ((runningConfig.morph && mark.getMorphConfig().morph) || runningConfig.morphAll || runningConfig.reuse)\n ) {\n prevDiffMarks.push(mark);\n } else {\n diffResult.exit.push({ prev: [mark] });\n }\n });\n nextMarks.forEach(mark => {\n if (\n mark.markType !== GrammarMarkType.group &&\n ((runningConfig.morph && mark.getMorphConfig().morph) || runningConfig.morphAll || runningConfig.reuse)\n ) {\n nextDiffMarks.push(mark);\n } else {\n diffResult.enter.push({ next: [mark] });\n }\n });\n\n // 1. match by custom key\n const keyDiffResult = this.diffUpdateByGroup(\n prevDiffMarks,\n nextDiffMarks,\n mark => mark.getMorphConfig().morphKey,\n mark => mark.getMorphConfig().morphKey\n );\n prevDiffMarks = keyDiffResult.prev;\n nextDiffMarks = keyDiffResult.next;\n diffResult.update = diffResult.update.concat(keyDiffResult.update);\n\n // 2. match by name\n const nameDiffResult = this.diffUpdateByGroup(\n prevDiffMarks,\n nextDiffMarks,\n mark => mark.id(),\n mark => mark.id()\n );\n prevDiffMarks = nameDiffResult.prev;\n nextDiffMarks = nameDiffResult.next;\n diffResult.update = diffResult.update.concat(nameDiffResult.update);\n\n // 3. match by index\n\n // FIXME: mark index cannot be get before executing, index is decided by remove/order for now\n const prevParentGroup = groupData(prevDiffMarks, mark => mark.group?.id?.());\n const nextParentGroup = groupData(nextDiffMarks, mark => mark.group?.id?.());\n\n Object.keys(nextParentGroup).forEach(groupName => {\n const prevChildren = prevParentGroup.data.get(groupName);\n const nextChildren = nextParentGroup.data.get(groupName);\n if (prevChildren && nextChildren) {\n for (let i = 0; i < Math.max(prevChildren.length, nextChildren.length); i += 1) {\n const prevChild = prevChildren[i];\n const nextChild = nextChildren[i];\n if (prevChild && nextChild) {\n diffResult.update.push({ prev: [prevChild], next: [nextChild] });\n } else if (prevChild) {\n diffResult.exit.push({ prev: [prevChild] });\n } else if (nextChild) {\n diffResult.enter.push({ next: [nextChild] });\n }\n }\n\n prevDiffMarks = prevDiffMarks.filter(mark => !prevChildren.includes(mark));\n nextDiffMarks = nextDiffMarks.filter(mark => !nextChildren.includes(mark));\n }\n });\n\n // 4. handle unmatched marks\n prevDiffMarks.forEach(mark => diffResult.exit.push({ prev: [mark] }));\n nextDiffMarks.forEach(mark => diffResult.enter.push({ next: [mark] }));\n\n return diffResult;\n }\n\n private _appendMorphKeyToElements(mark: IMark) {\n const config = mark.getMorphConfig();\n\n if (!isNil(config.morphElementKey)) {\n const getter = parseField(config.morphElementKey);\n\n if (mark.elements) {\n mark.elements.forEach(el => {\n (el as any).morphKey = getter(el.getDatum());\n });\n }\n }\n }\n\n morph(prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig) {\n const prevElements = prevMarks.reduce((elements, mark) => {\n this._appendMorphKeyToElements(mark);\n\n return elements.concat(mark.elements);\n }, [] as IElement[]);\n const nextElements = nextMarks.reduce((elements, mark) => {\n this._appendMorphKeyToElements(mark);\n\n return elements.concat(mark.elements);\n }, [] as IElement[]);\n\n const key = (element: IElement) => (element as any).morphKey ?? element.key;\n const diffResult = diffMultiple(prevElements, nextElements, key);\n\n // disable normal animations of previous marks\n prevMarks.forEach(mark => mark.animate?.disable?.());\n nextMarks.forEach(mark => mark.animate?.disable?.());\n\n const parameters = prevMarks.concat(nextMarks).reduce((parameters, mark) => {\n Object.assign(parameters, mark.parameters());\n return parameters;\n }, {});\n\n let morphCount = 0;\n const onMorphEnd = () => {\n morphCount -= 1;\n if (morphCount === 0) {\n nextMarks.forEach(mark => {\n mark.animate?.enable?.();\n });\n }\n };\n // no animation for exit result\n diffResult.enter.forEach(diff => {\n diff.next.forEach(element => {\n this.doMorph([], [element], runningConfig, onMorphEnd, parameters);\n });\n morphCount += 1;\n });\n diffResult.update.forEach(diff => {\n const divideCount = Math.min(diff.prev.length, diff.next.length);\n const prevDivide = this.divideElements(diff.prev, divideCount);\n const nextDivide = this.divideElements(diff.next, divideCount);\n for (let i = 0; i < divideCount; i++) {\n this.doMorph(prevDivide[i], nextDivide[i], runningConfig, onMorphEnd, parameters);\n morphCount += 1;\n }\n });\n }\n\n private diffUpdateByGroup(\n prev: U[],\n next: V[],\n prevKey: (datum: U) => symbol | string,\n nextKey: (datum: V) => symbol | string\n ) {\n const prevGroup = groupData(prev, datum => prevKey(datum) ?? EmptyKey);\n const nextGroup = groupData(next, datum => nextKey(datum) ?? EmptyKey);\n\n let prevAfterDiff = prev;\n let nextAfterDiff = next;\n const update: { prev: U[]; next: V[] }[] = [];\n nextGroup.keys.forEach(key => {\n if (key !== EmptyKey) {\n const prevKeyData = prevGroup.data.get(key);\n const nextKeyData = nextGroup.data.get(key);\n if (prevKeyData && nextKeyData) {\n update.push({ prev: prevKeyData, next: nextKeyData });\n prevAfterDiff = prevAfterDiff.filter(datum => !prevKeyData.includes(datum));\n nextAfterDiff = nextAfterDiff.filter(datum => !nextKeyData.includes(datum));\n }\n }\n });\n return {\n prev: prevAfterDiff,\n next: nextAfterDiff,\n update\n };\n }\n\n private doMorph(\n prev: IElement[],\n next: IElement[],\n runningConfig: IRunningConfig,\n onEnd: () => void,\n parameters: any\n ) {\n const morphData: MorphData = {\n prev: prev.map(element => element.getDatum()),\n next: next.map(element => element.getDatum())\n };\n const morphElements: MorphElements = {\n prev: prev.slice(),\n next: next.slice()\n };\n const easing = runningConfig.animation.easing;\n const delay = invokeFunctionType(runningConfig.animation.delay, parameters, morphData, morphElements);\n const duration = invokeFunctionType(runningConfig.animation.duration, parameters, morphData, morphElements);\n const oneByOne = invokeFunctionType(runningConfig.animation.oneByOne, parameters, morphData, morphElements);\n const splitPath = invokeFunctionType(runningConfig.animation.splitPath, parameters, morphData, morphElements);\n const individualDelay =\n isValidNumber(oneByOne) && oneByOne > 0\n ? (index: number) => {\n if (isNumber(oneByOne)) {\n return index * oneByOne;\n } else if (oneByOne === true) {\n return index * duration;\n }\n return 0;\n }\n : undefined;\n\n // if no previous item, still execute morph animation\n if ((prev.length === 1 || prev.length === 0) && next.length === 1) {\n morphPath(prev[0]?.getGraphicItem?.(), next[0].getGraphicItem(), { delay, duration, easing, onEnd });\n } else if (prev.length === 1 && next.length > 1) {\n oneToMultiMorph(\n prev[0].getGraphicItem(),\n next.map(element => element.getGraphicItem()),\n { delay, duration, easing, onEnd, individualDelay, splitPath }\n );\n } else if (prev.length > 1 && next.length === 1) {\n multiToOneMorph(\n prev.map(element => element.getGraphicItem()),\n next[0].getGraphicItem(),\n { delay, duration, easing, onEnd, individualDelay, splitPath }\n );\n }\n }\n\n private divideElements(elements: IElement[], count: number) {\n const divideLength = Math.floor(elements.length / count);\n return new Array(count).fill(0).map((i, index) => {\n return elements.slice(divideLength * index, index === count - 1 ? elements.length : divideLength * (index + 1));\n });\n }\n}\n","import { isNil, isString } from '@visactor/vutils';\nimport type {\n BuiltInGrammarType,\n ICoordinate,\n IData,\n IGrammarBase,\n IMark,\n IScale,\n ISignal,\n IRecordedGrammars,\n IGroupMark,\n IMarkTreeNode,\n IRecordedTreeGrammars\n} from '../types';\nimport { GrammarMarkType } from '../graph/enums';\n\nexport class RecordedGrammars implements IRecordedGrammars {\n private _warning: (key: string, grammar: IGrammarBase) => void;\n private _mapKey: (grammar: IGrammarBase) => string;\n private _grammars: Record = {\n signal: [],\n data: [],\n scale: [],\n coordinate: [],\n mark: [],\n customized: []\n };\n // map key might not be unique\n private _grammarMap: Record> = {\n signal: {},\n data: {},\n scale: {},\n coordinate: {},\n mark: {},\n customized: {}\n };\n private _size: number = 0;\n\n constructor(\n mapKey: string | ((grammar: IGrammarBase) => string),\n warningWhenDuplicated?: (key: string, grammar: IGrammarBase) => void\n ) {\n this._mapKey = isString(mapKey) ? grammar => grammar[mapKey] : mapKey;\n this._warning = warningWhenDuplicated;\n }\n\n record(grammar: IGrammarBase) {\n const grammarType = grammar.grammarType;\n const key = this._mapKey(grammar);\n if (this._grammarMap[grammarType]) {\n this._grammars[grammarType].push(grammar);\n if (!isNil(key)) {\n // ignore grammar if key is duplicated\n if (this._grammarMap[grammarType][key]) {\n this._warning?.(key, grammar);\n } else {\n this._grammarMap[grammarType][key] = grammar;\n }\n }\n } else {\n this._grammars.customized.push(grammar);\n if (!isNil(key)) {\n // ignore grammar if key is duplicated\n if (this._grammarMap.customized[key]) {\n this._warning?.(key, grammar);\n } else {\n this._grammarMap.customized[key] = grammar;\n }\n }\n }\n this._size += 1;\n return this;\n }\n\n unrecord(grammar: IGrammarBase) {\n const grammarType = grammar.grammarType;\n const key = this._mapKey(grammar);\n if (this._grammarMap[grammarType]) {\n this._grammars[grammarType] = this._grammars[grammarType].filter(\n (storedGrammar: IGrammarBase) => storedGrammar !== grammar\n );\n if (!isNil(key) && this._grammarMap[grammarType][key] === grammar) {\n delete this._grammarMap[grammarType][key];\n }\n } else {\n this._grammars.customized = this._grammars.customized.filter(\n (storedGrammar: IGrammarBase) => storedGrammar !== grammar\n );\n if (!isNil(key) && this._grammarMap.customized[key] === grammar) {\n delete this._grammarMap.customized[key];\n }\n }\n this._size -= 1;\n return this;\n }\n\n size() {\n return this._size;\n }\n\n getSignal(key: string): ISignal | null {\n return (this._grammarMap.signal[key] as ISignal) ?? null;\n }\n getData(key: string): IData | null {\n return (this._grammarMap.data[key] as IData) ?? null;\n }\n getScale(key: string): IScale | null {\n return (this._grammarMap.scale[key] as IScale) ?? null;\n }\n getCoordinate(key: string): ICoordinate | null {\n return (this._grammarMap.coordinate[key] as ICoordinate) ?? null;\n }\n getMark(key: string): IMark | null {\n return (this._grammarMap.mark[key] as IMark) ?? null;\n }\n getCustomized(key: string): IGrammarBase | null {\n return this._grammarMap.customized[key] ?? null;\n }\n getGrammar(key: string): IGrammarBase | null {\n if (this._grammarMap.data[key]) {\n return this._grammarMap.data[key];\n } else if (this._grammarMap.signal[key]) {\n return this._grammarMap.signal[key];\n } else if (this._grammarMap.scale[key]) {\n return this._grammarMap.scale[key];\n } else if (this._grammarMap.coordinate[key]) {\n return this._grammarMap.coordinate[key];\n } else if (this._grammarMap.mark[key]) {\n return this._grammarMap.mark[key];\n } else if (this._grammarMap.customized[key]) {\n return this._grammarMap.customized[key];\n }\n return null;\n }\n\n getAllSignals(): ISignal[] {\n return this._grammars.signal as ISignal[];\n }\n getAllData(): IData[] {\n return this._grammars.data as IData[];\n }\n getAllScales(): IScale[] {\n return this._grammars.scale as IScale[];\n }\n getAllCoordinates(): ICoordinate[] {\n return this._grammars.coordinate as ICoordinate[];\n }\n getAllMarks(): IMark[] {\n return this._grammars.mark as IMark[];\n }\n getAllCustomized(): IGrammarBase[] {\n return this._grammars.customized;\n }\n\n traverse(func: (grammar: IGrammarBase) => boolean | void) {\n Object.values(this._grammars ?? {}).forEach(grammars =>\n (grammars ?? []).forEach(grammar => {\n // stop traversing when func returns true\n if (func.call(null, grammar)) {\n return;\n }\n })\n );\n }\n\n find(func: (grammar: IGrammarBase) => boolean) {\n let targetGrammar: IGrammarBase = null;\n this.traverse(grammar => {\n if (func.call(null, grammar) === true) {\n targetGrammar = grammar;\n return true;\n }\n return false;\n });\n return targetGrammar;\n }\n\n filter(func: (grammar: IGrammarBase) => boolean) {\n const targetGrammars: IGrammarBase[] = [];\n this.traverse(grammar => {\n if (func.call(null, grammar) === true) {\n targetGrammars.push(grammar);\n }\n });\n return targetGrammars;\n }\n\n clear() {\n this._size = 0;\n this._grammars = { signal: [], data: [], scale: [], coordinate: [], mark: [], customized: [] };\n this._grammarMap = { signal: {}, data: {}, scale: {}, coordinate: {}, mark: {}, customized: {} };\n }\n\n release() {\n this._size = 0;\n this._grammars = null;\n this._grammarMap = null;\n }\n}\n\nexport class RecordedTreeGrammars extends RecordedGrammars implements IRecordedTreeGrammars {\n private _markNodes: IMarkTreeNode[] = [];\n\n record(grammar: IGrammarBase) {\n super.record(grammar);\n if (grammar.grammarType === 'mark') {\n const mark = grammar as IMark;\n const currentNode: IMarkTreeNode = {\n mark: mark,\n parent: null,\n children: []\n };\n this._markNodes.forEach(node => {\n const targetMark = node.mark;\n if (targetMark.markType === GrammarMarkType.group && (targetMark as IGroupMark).includesChild(mark, false)) {\n node.children.push(currentNode);\n currentNode.parent = node;\n } else if (mark.markType === GrammarMarkType.group && (mark as IGroupMark).includesChild(targetMark, false)) {\n currentNode.children.push(node);\n node.parent = currentNode;\n }\n });\n this._markNodes.push(currentNode);\n }\n return this;\n }\n\n unrecord(grammar: IGrammarBase) {\n super.unrecord(grammar);\n if (grammar.grammarType === 'mark') {\n const mark = grammar as IMark;\n const currentNode = this._markNodes.find(node => node.mark === mark);\n this._markNodes.forEach(node => {\n const targetMark = node.mark;\n if (targetMark.markType === GrammarMarkType.group && (targetMark as IGroupMark).includesChild(mark, false)) {\n node.children = node.children.filter(n => n !== currentNode);\n currentNode.parent = null;\n } else if (mark.markType === GrammarMarkType.group && (mark as IGroupMark).includesChild(targetMark, false)) {\n currentNode.children = currentNode.children.filter(n => n !== node);\n node.parent = null;\n }\n });\n this._markNodes = this._markNodes.filter(n => n !== currentNode);\n }\n return this;\n }\n\n getAllMarkNodes() {\n return this._markNodes;\n }\n\n clear() {\n super.clear();\n this._markNodes = [];\n }\n\n release() {\n super.release();\n this._markNodes = null;\n }\n}\n\nexport const releaseUpMarkNode = (node: IMarkTreeNode) => {\n // if (node.mark.get)\n};\n","import { HOOK_EVENT } from '../graph/enums';\nimport type { IView, AnimationEvent, IMark, IAnimationConfig, IViewAnimate } from '../types';\n\nexport class ViewAnimate implements IViewAnimate {\n private _view: IView;\n // animation start/end events are triggered on specific animation configuration\n private _animations: { config: IAnimationConfig; mark: IMark }[] = [];\n private _additionalAnimateMarks: IMark[] = [];\n private isEnabled: boolean = true;\n\n constructor(view: IView) {\n this._view = view;\n\n this._view.addEventListener(HOOK_EVENT.ANIMATION_START, this._onAnimationStart);\n this._view.addEventListener(HOOK_EVENT.ANIMATION_END, this._onAnimationEnd);\n }\n\n stop() {\n this._view.traverseMarkTree(mark => {\n mark.animate && mark.animate.stop?.();\n });\n this._additionalAnimateMarks.forEach(mark => {\n // if mark is not released\n if (mark.view && mark.animate) {\n mark.animate.stop?.();\n }\n });\n // clear all additional animate marks after animations are stopped\n this._additionalAnimateMarks = [];\n return this;\n }\n\n pause() {\n this._view.traverseMarkTree(mark => {\n mark.animate && mark.animate.pause?.();\n });\n this._additionalAnimateMarks.forEach(mark => {\n // if mark is not released\n if (mark.view && mark.animate) {\n mark.animate.pause?.();\n }\n });\n return this;\n }\n\n resume() {\n this._view.traverseMarkTree(mark => {\n mark.animate && mark.animate.resume?.();\n });\n this._additionalAnimateMarks.forEach(mark => {\n // if mark is not released\n if (mark.view && mark.animate) {\n mark.animate.resume?.();\n }\n });\n return this;\n }\n\n enable() {\n this.isEnabled = true;\n this._view.traverseMarkTree(mark => {\n mark.animate && mark.animate.enable?.();\n });\n return this;\n }\n\n disable() {\n this.isEnabled = false;\n this._view.traverseMarkTree(mark => {\n mark.animate && mark.animate.disable?.();\n });\n // stop all addition animations when animate is disabled\n this._additionalAnimateMarks.forEach(mark => {\n // if mark is not released\n if (mark.view && mark.animate) {\n mark.animate.stop?.();\n }\n });\n // clear all additional animate marks after animations are stopped\n this._additionalAnimateMarks = [];\n return this;\n }\n\n enableAnimationState(state: string | string[]) {\n this._view.traverseMarkTree(mark => {\n mark.animate && mark.animate.enableAnimationState?.(state);\n });\n return this;\n }\n\n disableAnimationState(state: string | string[]) {\n this._view.traverseMarkTree(mark => {\n mark.animate && mark.animate.disableAnimationState?.(state);\n });\n return this;\n }\n\n isAnimating() {\n return (\n this._animations.length !== 0 || this._additionalAnimateMarks.some(mark => mark?.animate?.isAnimating() || false)\n );\n }\n\n animate() {\n if (!this.isEnabled) {\n return this;\n }\n\n this._view.traverseMarkTree(\n mark => {\n if (mark.isUpdated && mark.animate) {\n mark.animate.animate();\n }\n mark.cleanExitElements();\n mark.isUpdated = false;\n },\n null,\n true\n );\n return this;\n }\n\n animateAddition(additionMark: IMark) {\n additionMark.animate.animate();\n this._additionalAnimateMarks.push(additionMark);\n return this;\n }\n\n private _onAnimationStart = (event: AnimationEvent) => {\n this._additionalAnimateMarks = this._additionalAnimateMarks.filter(mark => mark?.animate?.isAnimating());\n\n if (this._animations.length === 0 && this._additionalAnimateMarks.length === 0) {\n this._view.emit(HOOK_EVENT.ALL_ANIMATION_START, {});\n }\n this._animations = this._animations.concat({ config: event.animationConfig, mark: event.mark });\n };\n\n private _onAnimationEnd = (event: AnimationEvent) => {\n this._additionalAnimateMarks = this._additionalAnimateMarks.filter(mark => mark?.animate?.isAnimating());\n\n this._animations = this._animations.filter(animation => {\n return animation.config !== event.animationConfig || animation.mark !== event.mark;\n });\n if (this._animations.length === 0 && this._additionalAnimateMarks.length === 0) {\n this._view.emit(HOOK_EVENT.ALL_ANIMATION_END, {});\n }\n };\n\n release() {\n this._additionalAnimateMarks = [];\n this._view.removeEventListener(HOOK_EVENT.ALL_ANIMATION_START, this._onAnimationStart);\n this._view.removeEventListener(HOOK_EVENT.ALL_ANIMATION_END, this._onAnimationEnd);\n }\n}\n","import { GrammarMarkType } from '../graph/enums';\nimport type { IMark, MarkSpec } from '../types';\nimport { Mark } from '../view/mark';\nimport { createGraphicItem } from '../graph/util/graphic';\nimport { transformsByType } from '../graph/attributes/transform';\n\nexport class Text extends Mark {\n static markType = GrammarMarkType.text;\n declare markType: GrammarMarkType.text;\n protected declare spec: MarkSpec;\n\n addGraphicItem(initAttrs: any, groupKey?: string) {\n const textConfig = initAttrs?.text;\n const isRich = textConfig?.type === 'rich';\n\n const graphicItem = createGraphicItem(\n this as IMark,\n isRich ? GrammarMarkType.richtext : GrammarMarkType.text,\n initAttrs\n );\n\n if (isRich) {\n initAttrs.textConfig = [];\n }\n\n return super.addGraphicItem(initAttrs, groupKey, graphicItem);\n }\n\n getAttributeTransforms() {\n return this.getGroupGraphicItem()?.type === 'richtext' ? transformsByType.richtext : transformsByType.text;\n }\n\n release(): void {\n super.release();\n }\n}\n","import type {\n CircleAxisAttributes,\n CircleCrosshairAttrs,\n ColorLegendAttributes,\n ContinuousPlayerAttributes,\n DataLabelAttrs,\n LineDataLabelAttrs,\n DataZoomAttributes,\n DiscreteLegendAttrs,\n DiscretePlayerAttributes,\n LineAxisAttributes,\n LineCrosshairAttrs,\n LineLabelAttrs,\n PolygonCrosshairAttrs,\n RectCrosshairAttrs,\n RectLabelAttrs,\n SectorCrosshairAttrs,\n SizeLegendAttributes,\n SliderAttributes,\n SymbolLabelAttrs,\n ArcLabelAttrs,\n TooltipAttributes,\n BaseLabelAttrs,\n TitleAttrs,\n LineAxisGridAttributes,\n CircleAxisGridAttributes,\n ScrollBarAttributes,\n AreaLabelAttrs\n} from '@visactor/vrender-components';\nimport type { IComponentTheme, RecursivePartial } from '../../types';\n\nconst axis: RecursivePartial = {\n label: {\n visible: true,\n inside: false,\n space: 4,\n style: {\n fontSize: 12,\n fill: '#89909d',\n fontWeight: 'normal',\n fillOpacity: 1\n }\n },\n tick: {\n visible: true,\n inside: false,\n alignWithLabel: true,\n length: 4,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n subTick: {\n visible: false,\n inside: false,\n count: 4,\n length: 2,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n line: {\n visible: true,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n items: [],\n start: { x: 0, y: 0 },\n end: { x: 100, y: 0 },\n x: 0,\n y: 0\n};\n\nconst circleAxis: RecursivePartial = {\n title: {\n space: 4,\n padding: [0, 0, 0, 0],\n textStyle: {\n fontSize: 12,\n fill: '#333333',\n fontWeight: 'normal',\n fillOpacity: 1\n },\n text: 'theta'\n },\n label: {\n visible: true,\n inside: false,\n space: 4,\n style: {\n fontSize: 12,\n fill: '#6F6F6F',\n fontWeight: 'normal',\n fillOpacity: 1\n }\n },\n tick: {\n visible: true,\n inside: false,\n alignWithLabel: true,\n length: 4,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n subTick: {\n visible: false,\n inside: false,\n count: 4,\n length: 2,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n line: {\n visible: true,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n items: [],\n startAngle: 0,\n endAngle: Math.PI * 2,\n radius: 100,\n innerRadius: 0,\n center: { x: 0, y: 0 },\n x: 0,\n y: 0\n};\n\nconst grid: RecursivePartial = {\n style: {\n stroke: '#f1f2f5'\n }\n};\n\nconst circleGrid: RecursivePartial = {\n style: {\n stroke: '#f1f2f5'\n }\n};\n\nconst discreteLegend: RecursivePartial = {\n layout: 'vertical',\n title: {\n align: 'start',\n space: 12,\n textStyle: {\n fontSize: 12,\n fontWeight: 'bold',\n fill: '#2C3542'\n }\n },\n item: {\n spaceCol: 10,\n spaceRow: 10,\n shape: {\n space: 4,\n style: {\n size: 10,\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8',\n stroke: '#D8D8D8',\n fillOpacity: 0.5\n }\n }\n },\n label: {\n space: 4,\n style: {\n fontSize: 12,\n fill: 'black',\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8',\n fillOpacity: 0.5\n }\n }\n },\n value: {\n alignRight: false,\n style: {\n fontSize: 12,\n fill: '#ccc',\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8'\n }\n }\n },\n background: {\n style: {\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n fillOpacity: 0.7,\n fill: 'gray'\n },\n unSelectedHover: {\n fillOpacity: 0.2,\n fill: 'gray'\n }\n }\n },\n focus: false,\n focusIconStyle: {\n size: 10,\n fill: '#333',\n cursor: 'pointer'\n },\n visible: true,\n padding: {\n top: 2,\n bottom: 2,\n left: 2,\n right: 2\n }\n },\n autoPage: true,\n pager: {\n space: 12,\n handler: {\n style: {\n size: 10\n },\n space: 4\n }\n },\n hover: true,\n select: true,\n selectMode: 'multiple',\n allowAllCanceled: false,\n items: [\n {\n index: 0,\n id: '',\n label: '',\n shape: {\n fill: '#6690F2',\n stroke: '#6690F2',\n symbolType: 'circle'\n }\n }\n ]\n};\n\nconst colorLegend: RecursivePartial = {\n title: {\n visible: false,\n text: ''\n },\n colors: [],\n layout: 'horizontal',\n railWidth: 200,\n railHeight: 8,\n railStyle: {\n cornerRadius: 5\n }\n};\n\nconst sizeLegend: RecursivePartial = {\n title: {\n visible: false,\n text: ''\n },\n trackStyle: {\n fill: '#ccc'\n },\n layout: 'horizontal',\n align: 'bottom',\n railWidth: 200,\n railHeight: 6,\n min: 0,\n max: 1,\n value: [0, 1]\n};\n\nconst lineCrosshair: RecursivePartial = {\n start: { x: 0, y: 0 },\n end: { x: 0, y: 0 }\n};\n\nconst rectCrosshair: RecursivePartial = {\n start: { x: 0, y: 0 },\n end: { x: 0, y: 0 },\n rectStyle: {\n width: 10,\n height: 10\n }\n};\n\nconst sectorCrosshair: RecursivePartial = {\n center: { x: 0, y: 0 },\n radius: 100,\n startAngle: 0,\n endAngle: Math.PI / 6\n};\n\nconst circleCrosshair: RecursivePartial = {\n center: { x: 0, y: 0 },\n radius: 100,\n startAngle: 0,\n endAngle: Math.PI * 2\n};\n\nconst polygonCrosshair: RecursivePartial = {\n center: { x: 0, y: 0 },\n radius: 100,\n startAngle: 0,\n endAngle: Math.PI * 2,\n sides: 6\n};\n\nconst slider: RecursivePartial = {\n layout: 'horizontal',\n railWidth: 200,\n railHeight: 10,\n railStyle: {\n cornerRadius: 5\n },\n range: {\n draggableTrack: true\n },\n startText: {\n visible: true,\n text: '',\n space: 8\n },\n endText: {\n visible: true,\n text: '',\n space: 8\n },\n min: 0,\n max: 1,\n value: [0, 1]\n};\n\nexport const dataLabel: RecursivePartial = {\n size: { width: 400, height: 400 },\n dataLabels: []\n};\n\nexport const lineDataLabel: RecursivePartial = {\n type: 'line-data',\n data: [\n {\n text: ''\n }\n ],\n position: 'top',\n overlap: {\n avoidBaseMark: false,\n clampForce: false\n },\n smartInvert: false\n};\n\nexport const lineLabel: RecursivePartial = {\n type: 'line',\n data: [\n {\n text: '',\n data: {}\n }\n ],\n position: 'start',\n overlap: {\n avoidBaseMark: false,\n clampForce: false,\n size: {\n width: 1000,\n height: 1000\n }\n },\n smartInvert: false\n};\n\nexport const areaLabel: RecursivePartial = {\n type: 'area',\n data: [\n {\n text: '',\n data: {}\n }\n ],\n position: 'end',\n overlap: {\n avoidBaseMark: false,\n clampForce: false,\n size: {\n width: 1000,\n height: 1000\n }\n },\n smartInvert: false\n};\n\nexport const rectLabel: RecursivePartial = {\n type: 'rect',\n data: [\n {\n text: '',\n fill: '#606773',\n data: {}\n }\n ],\n position: 'top',\n overlap: {\n size: {\n width: 1000,\n height: 1000\n },\n strategy: [\n {\n type: 'position'\n }\n ]\n },\n smartInvert: false\n};\n\nexport const symbolLabel: RecursivePartial = {\n type: 'symbol',\n data: [\n {\n text: '',\n fill: '#606773',\n data: {}\n }\n ],\n position: 'top',\n overlap: {\n avoidBaseMark: true,\n size: {\n width: 1000,\n height: 1000\n },\n strategy: [\n {\n type: 'position'\n }\n ]\n },\n smartInvert: false\n};\n\nexport const arcLabel: RecursivePartial = {\n type: 'arc',\n data: [\n {\n text: '',\n fill: '#606773',\n data: {}\n }\n ],\n width: 800,\n height: 600,\n position: 'outside',\n\n zIndex: 302\n};\n\nexport const pointLabel: RecursivePartial = {\n data: [\n {\n text: '',\n fill: '#606773',\n data: {}\n }\n ],\n overlap: {\n avoidBaseMark: false,\n clampForce: false,\n size: {\n width: 1000,\n height: 1000\n }\n },\n smartInvert: false\n};\n\nexport const datazoom: RecursivePartial = {\n orient: 'bottom',\n showDetail: 'auto',\n brushSelect: true,\n start: 0,\n end: 1,\n position: { x: 0, y: 0 },\n size: { width: 500, height: 40 },\n previewData: []\n};\n\nexport const continuousPlayer: RecursivePartial = {};\n\nexport const discretePlayer: RecursivePartial = {};\n\nexport const tooltip: RecursivePartial = {};\n\nexport const title: RecursivePartial = {\n textStyle: {\n fill: '#21252c'\n },\n subtextStyle: {\n fill: '#606773'\n }\n};\n\nexport const scrollbar: RecursivePartial = {\n width: 12,\n height: 12,\n padding: [2, 2],\n railStyle: {\n fill: 'rgba(0, 0, 0, .1)'\n }\n};\n\nexport const defaultComponentTheme: IComponentTheme = {\n axis,\n circleAxis,\n\n grid,\n circleGrid,\n\n discreteLegend,\n colorLegend,\n sizeLegend,\n\n lineCrosshair,\n rectCrosshair,\n sectorCrosshair,\n circleCrosshair,\n polygonCrosshair,\n\n slider,\n\n dataLabel,\n pointLabel,\n lineLabel,\n areaLabel,\n rectLabel,\n symbolLabel,\n arcLabel,\n lineDataLabel,\n\n datazoom,\n\n continuousPlayer,\n discretePlayer,\n\n tooltip,\n\n title,\n\n scrollbar\n};\n","import type { IMarkTheme } from '../../types';\n\nexport const defaultMarkTheme: IMarkTheme = {\n symbol: {\n shape: 'circle',\n size: 8\n },\n text: {\n fontSize: 14,\n fill: '#000000'\n }\n};\n","import type { ITheme } from '../types';\nimport { defaultComponentTheme } from './common/component';\nimport { DEFAULT_PADDING } from './common/constants';\nimport { defaultMarkTheme } from './common/mark';\n\nconst darkComponents = Object.assign({}, defaultComponentTheme);\ndarkComponents.axis = Object.assign({}, darkComponents.axis, {\n label: { style: { fill: '#bbbdc3' } },\n line: { style: { stroke: '#4b4f54' } },\n tick: { style: { stroke: '#4b4f54' } },\n subTick: { style: { stroke: '#4b4f54' } }\n});\ndarkComponents.circleAxis = Object.assign({}, darkComponents.circleAxis, {\n label: { style: { fill: '#bbbdc3' } },\n line: { style: { stroke: '#4b4f54' } },\n tick: { style: { stroke: '#4b4f54' } },\n subTick: { style: { stroke: '#4b4f54' } }\n});\ndarkComponents.grid = Object.assign({}, darkComponents.grid, {\n style: { stroke: '#404349' }\n});\ndarkComponents.circleGrid = Object.assign({}, darkComponents.circleGrid, {\n style: { stroke: '#404349' }\n});\ndarkComponents.rectLabel = Object.assign({}, darkComponents.rectLabel, {\n data: [\n {\n text: '',\n fill: '#888c93',\n data: {}\n }\n ]\n});\ndarkComponents.lineLabel = Object.assign({}, darkComponents.lineLabel, {\n data: [\n {\n text: '',\n fill: '#888c93',\n data: {}\n }\n ]\n});\n\ndarkComponents.symbolLabel = Object.assign({}, darkComponents.symbolLabel, {\n data: [\n {\n text: '',\n fill: '#888c93',\n data: {}\n }\n ]\n});\ndarkComponents.title = Object.assign({}, darkComponents.title, {\n textStyle: {\n fill: '#fdfdfd'\n },\n subtextStyle: {\n fill: '#888c93'\n }\n});\n\nexport const darkTheme: ITheme = {\n name: 'dark',\n padding: DEFAULT_PADDING,\n background: '#202226',\n palette: {\n default: [\n '#5383F4',\n '#7BCF8E',\n '#FF9D2C',\n '#FFDB26',\n '#7568D9',\n '#80D8FB',\n '#1857A3',\n '#CAB0E8',\n '#FF8867',\n '#B9E493',\n '#2CB4A8',\n '#B9E4E3'\n ]\n },\n marks: defaultMarkTheme,\n components: darkComponents\n};\n","export const DEFAULT_PADDING = 5;\n","import type { ITheme } from '../types';\nimport { defaultComponentTheme } from './common/component';\nimport { DEFAULT_PADDING } from './common/constants';\nimport { defaultMarkTheme } from './common/mark';\n\nexport const defaultTheme: ITheme = {\n name: 'default',\n padding: DEFAULT_PADDING,\n palette: {\n default: [\n '#6690F2',\n '#70D6A3',\n '#B4E6E2',\n '#63B5FC',\n '#FF8F62',\n '#FFDC83',\n '#BCC5FD',\n '#A29BFE',\n '#63C4C7',\n '#F68484'\n ]\n },\n marks: defaultMarkTheme,\n components: defaultComponentTheme\n};\n","import type { ITheme } from '../types';\nimport { darkTheme } from './dark';\nimport { defaultTheme } from './default';\n\nexport class ThemeManager {\n private static _themes: Map = new Map();\n\n static registerTheme(name: string, theme: Partial) {\n if (!name) {\n return;\n }\n ThemeManager._themes.set(name, theme);\n }\n\n static unregisterTheme(name: string) {\n ThemeManager._themes.delete(name);\n }\n\n static getTheme(name: string) {\n return ThemeManager._themes.get(name);\n }\n\n static getDefaultTheme() {\n return ThemeManager.getTheme('default');\n }\n}\n\nThemeManager.registerTheme('default', defaultTheme);\nThemeManager.registerTheme('dark', darkTheme);\n","import { DefaultKey } from '../graph/constants';\nimport { GrammarMarkType, HOOK_EVENT } from '../graph/enums';\nimport type {\n IGroupMark,\n IView,\n IComponent,\n ComponentSpec,\n IData,\n Nil,\n MarkFunctionType,\n StateEncodeSpec,\n BaseSingleEncodeSpec\n} from '../types';\nimport { Factory } from '../core/factory';\nimport { Mark } from './mark';\n\nexport class Component extends Mark implements IComponent {\n declare markType: GrammarMarkType.component;\n readonly componentType: string;\n protected declare spec: ComponentSpec;\n\n protected mode?: '2d' | '3d';\n\n protected _componentDatum = { [DefaultKey]: 0 };\n protected _encoders: StateEncodeSpec;\n\n constructor(view: IView, componentType: string, group?: IGroupMark, mode?: '2d' | '3d') {\n super(view, GrammarMarkType.component, group);\n this.componentType = componentType;\n this.spec.type = 'component';\n this.spec.componentType = componentType;\n this.mode = mode;\n this._updateComponentEncoders();\n }\n\n configureComponent(config: any) {\n this.spec.componentConfig = config;\n this.commit();\n return this;\n }\n\n addGraphicItem(attrs: any, groupKey?: string, newGraphicItem?: any) {\n const graphicItem =\n newGraphicItem ??\n Factory.createGraphicComponent(this.componentType, attrs, { mode: this.mode, skipDefault: this.spec.skipTheme });\n this.emit(HOOK_EVENT.BEFORE_ADD_VRENDER_MARK);\n (this.graphicParent as any).appendChild(graphicItem);\n\n this.emit(HOOK_EVENT.AFTER_ADD_VRENDER_MARK);\n\n return graphicItem;\n }\n\n join(data: IData | string | Nil) {\n return super.join(data, DefaultKey);\n }\n\n encodeState(state: string, channel: string | BaseSingleEncodeSpec, value?: MarkFunctionType) {\n super.encodeState(state, channel, value);\n this._updateComponentEncoders();\n return this;\n }\n\n parseRenderContext() {\n return { large: false };\n }\n\n protected _prepareRejoin() {\n this._componentDatum[DefaultKey] += 1;\n }\n\n protected evaluateJoin(data: any[]) {\n this.spec.key = DefaultKey;\n // component mark do not support data join\n return super.evaluateJoin([this._componentDatum]);\n }\n\n protected _updateComponentEncoders() {\n this._encoders = this.spec.encode;\n }\n\n protected _getEncoders() {\n return this._encoders ?? {};\n }\n}\n","import type { IGroupMark, IGrammarBase, IView } from '@visactor/vgrammar-core';\nimport type { Compiler } from '../compiler';\nimport type { Maybe, IPerformanceHook } from '../../typings';\n\nexport interface ICompilable {\n /** 获取 compile 对象 */\n getCompiler: () => Compiler;\n /** 获取 vgrammar view */\n getVGrammarView: () => IView;\n\n /** 编译总入口 */\n compile: () => void;\n /** 编译所有 mark */\n compileMarks?: (group?: string | IGroupMark) => void;\n /** 编译所有 data */\n compileData?: () => void;\n /** 编译所有 signal */\n compileSignal?: () => void;\n\n /** 清除compile 内容入口 */\n clear?: () => void;\n\n /** 全部编译完成 lift circle */\n afterCompile?: () => void;\n\n /** 释放总入口 */\n release: () => void;\n}\n\nexport interface ICompilableInitOption {\n /** 编译对象 应当由外部提供 */\n getCompiler: () => Compiler;\n /** 性能测试钩子 */\n performanceHook?: IPerformanceHook;\n}\n\nexport enum GrammarType {\n data = 'data',\n signal = 'signal',\n mark = 'mark'\n}\n\nexport interface IGrammarItem extends ICompilable {\n id: number;\n /** 语法元素类型 */\n grammarType: GrammarType;\n /** 获取语法元素 */\n getProduct: () => Maybe;\n /** 生成语法元素名称 */\n generateProductId: () => string;\n /** 获取语法元素名称 */\n getProductId: () => string;\n /** 删除已编译的语法元素 */\n removeProduct: (reserveVGrammarModel?: boolean) => void;\n /** 获取该语法元素依赖的语法元素 */\n getDepend: () => IGrammarItem[];\n /** 设置该语法元素依赖的语法元素 */\n setDepend: (...depend: IGrammarItem[]) => void;\n /** 更新语法元素的依赖,返回是否全部成功更新 */\n updateDepend: () => boolean;\n}\n\nexport type GrammarItemInitOption = ICompilableInitOption;\n\nexport type GrammarItemCompileOption = Record;\n","import type { IBounds, ILogger } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { EventEmitter, debounce, isObject, isString, getContainerSize, Logger, array, isNil } from '@visactor/vutils';\nimport type { IColor } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { vglobal } from '@visactor/vrender-core';\nimport type { CoordinateType } from '@visactor/vgrammar-coordinate';\nimport type { IElement } from './../types/element';\nimport type {\n MarkSpec,\n IData,\n ISignal,\n ViewSpec,\n IView,\n IViewOptions,\n IViewThemeConfig,\n IViewEventConfig,\n Hooks,\n IMark,\n EventSpec,\n GroupMarkSpec,\n BaseEventSpec,\n MarkType,\n GrammarScaleType,\n SignalFunctionType,\n IScale,\n IGrammarBase,\n IGroupMark,\n IGlyphMark,\n ICoordinate,\n BaseEventHandler,\n GlyphMarkSpec,\n IRecordedGrammars,\n IComponent,\n ComponentSpec,\n IRecordedTreeGrammars,\n IMarkTreeNode,\n IRunningConfig,\n IViewAnimate,\n ITheme,\n InteractionSpec,\n IInteraction\n} from '../types/';\nimport { Data } from './data';\nimport { initializeEventConfig, permit, prevent } from './events';\nimport Dataflow from './dataflow';\nimport { traverseMarkTree } from '../graph/mark-tree';\nimport { BridgeElementKey } from '../graph/constants';\nimport CanvasRenderer from '../graph/canvas-renderer';\nimport getExtendedEvents from '../graph/util/events-extend';\nimport {\n BROWSER,\n NO_TRAP,\n SIGNAL_WIDTH,\n SIGNAL_HEIGHT,\n SIGNAL_PADDING,\n SIGNAL_AUTOFIT,\n SIGNAL_VIEW_WIDTH,\n SIGNAL_VIEW_HEIGHT,\n EVENT_SOURCE_VIEW,\n EVENT_SOURCE_WINDOW,\n SIGNAL_VIEW_BOX\n} from './constants';\nimport { Signal } from './signal';\nimport {\n BuiltInSignalID,\n builtInSignals,\n normalizeMarkTree,\n normalizeRunningConfig,\n normalizePadding\n} from '../parse/view';\nimport { parseHandler, parseEventSelector, generateFilterByMark, ID_PREFIX, NAME_PREFIX } from '../parse/event';\nimport { isGrammar, parseReference } from '../parse/util';\nimport { configureEnvironment } from '../graph/util/env';\nimport { GroupMark } from './group';\nimport { Mark } from './mark';\nimport { defaultDoLayout } from '../graph/layout/layout';\nimport { GlyphMark } from './glyph';\nimport type { IMorph } from '../types/morph';\nimport { Morph } from '../graph/animation/morph';\nimport { RecordedGrammars, RecordedTreeGrammars } from './grammar-record';\nimport { ViewAnimate } from './animate';\nimport type { IRenderer } from '../types/renderer';\nimport { ComponentEnum, HOOK_EVENT, LayoutState, GrammarMarkType } from '../graph/enums';\nimport type {\n IAxis,\n IDatazoom,\n IGrid,\n ILabel,\n ILegend,\n IPlayer,\n IScrollbar,\n ISlider,\n ITitle\n} from '../types/component';\nimport { Text } from '../semantic-marks/text';\nimport { ThemeManager } from '../theme/theme-manager';\nimport { Factory } from '../core/factory';\nimport { Component } from './component';\nimport { isMarkType, removeGraphicItem } from '../graph/util/graphic';\n\n/**\n * Create a new View instance from a VGrammar dataflow runtime specification.\n * The generated View will not immediately be ready for display. Callers\n * should also invoke the initialize method (e.g., to set the parent\n * DOM element in browser-based deployment) and then invoke the run\n * method to evaluate the dataflow graph. Rendering will automatically\n * be performed upon dataflow runs.\n * @constructor\n * @param {object} spec - The VGrammar dataflow runtime specification.\n */\nexport default class View extends EventEmitter implements IView {\n /** render element */\n container: HTMLElement;\n\n /** renderer */\n renderer: IRenderer;\n animate: IViewAnimate;\n rootMark: IGroupMark;\n\n /** life circle hooks */\n hooks: Hooks;\n\n logger: ILogger;\n\n grammars: IRecordedGrammars;\n\n private _isReleased: boolean;\n private _spec: ViewSpec;\n private _config: IViewThemeConfig;\n private _options: IViewOptions;\n\n private _cachedGrammars: IRecordedTreeGrammars;\n private _willMorphMarks: { prev: IMark[]; next: IMark[] }[];\n\n /** morph animate */\n private _morph: IMorph;\n\n private _eventConfig: IViewEventConfig;\n private _eventListeners: Array<{\n type: string;\n source: any;\n handler: any;\n }>;\n\n private _theme: ITheme;\n\n private _dataflow: Dataflow;\n /** 正在执行的dataflow */\n private _currentDataflow?: Promise;\n /** 正在执行的任务 */\n private _running?: Promise;\n\n /** 初次渲染或者更新spec,需要构建布局树 */\n private _needBuildLayoutTree?: boolean;\n /** 布局阶段 */\n private _layoutState?: LayoutState;\n\n /** 布局树,存储所有需要计算布局的mark元素 */\n private _layoutMarks?: IMark[];\n\n private _background?: IColor;\n private _eventCache: Record void>;\n /** 当前是否存在增量渲染元素 */\n private _progressiveMarks?: IMark[];\n private _progressiveRafId?: number;\n private _observer: ResizeObserver = null;\n private _boundInteractions?: IInteraction[];\n\n static useRegisters(comps: (() => void)[]) {\n comps.forEach((fn: () => void) => {\n fn();\n });\n }\n\n constructor(options: IViewOptions = {}, config: IViewThemeConfig = {}) {\n super();\n this._config = config;\n this._options = Object.assign(\n {\n mode: BROWSER\n },\n options\n );\n this.initialize();\n }\n // emit: >(\n // event: T,\n // ...args: EventEmitter.EventArgs\n // ) => boolean;\n\n // --- Lookup Grammars ---\n\n getGrammarById(id: string) {\n return this.grammars.getGrammar(id);\n }\n getSignalById(id: string): ISignal | null {\n return this.grammars.getSignal(id);\n }\n getDataById(id: string): IData | null {\n return this.grammars.getData(id);\n }\n getScaleById(id: string): IScale | null {\n return this.grammars.getScale(id);\n }\n getCoordinateById(id: string) {\n return this.grammars.getCoordinate(id);\n }\n getMarkById(id: string): IMark | null {\n return this.grammars.getMark(id);\n }\n\n getCustomizedById(id: string): IGrammarBase | null {\n return this.grammars.getCustomized(id);\n }\n\n getGrammarsByName(name: string) {\n return this.grammars.filter(grammar => grammar.name() === name);\n }\n\n getGrammarsByType(grammarType: string) {\n return this.grammars.filter(grammar => grammar.grammarType === grammarType);\n }\n getMarksByType(markType: string) {\n return this.grammars.getAllMarks().filter(mark => mark.markType === markType);\n }\n getMarksByName(name: string): IMark[] | null {\n return this.grammars.getAllMarks().filter(mark => mark.name() === name);\n }\n getMarksBySelector(selector: string | string[] | IMark | IMark[]): IMark[] | null {\n if (!selector) {\n return null;\n }\n const selectors = array(selector);\n const res: IMark[] = [];\n selectors.forEach(selectorStr => {\n if (isGrammar(selectorStr)) {\n res.push(selectorStr);\n return;\n }\n\n if (selectorStr[0] === ID_PREFIX) {\n const mark = this.getMarkById(selectorStr.slice(1));\n\n mark && res.push(mark);\n\n return;\n }\n\n const marks =\n selectorStr[0] === NAME_PREFIX\n ? this.getMarksByName(selectorStr.slice(1))\n : isMarkType(selectorStr)\n ? this.getMarksByType(selectorStr)\n : null;\n\n if (marks && marks.length) {\n marks.forEach(mark => {\n res.push(mark);\n });\n }\n });\n\n return res;\n }\n\n // --- Grammar ---\n\n private updateSignal(signal: string | ISignal, value: T) {\n if (isString(signal)) {\n signal = this.getSignalById(signal);\n }\n signal.set(value);\n this.commit(signal);\n }\n\n signal(value?: T, update?: SignalFunctionType): ISignal {\n const signal: ISignal = new Signal(this);\n if (arguments.length >= 1) {\n signal.value(value);\n }\n if (arguments.length >= 2) {\n signal.update(update);\n }\n this.grammars.record(signal);\n this._dataflow.add(signal);\n return signal;\n }\n\n data(values?: any[]): IData {\n const data: IData = new Data(this, values);\n this.grammars.record(data);\n this._dataflow.add(data);\n return data;\n }\n\n scale(type: GrammarScaleType) {\n const scale = Factory.createGrammar('scale', this, type) as IScale;\n\n if (scale) {\n this.grammars.record(scale);\n this._dataflow.add(scale);\n }\n return scale;\n }\n\n coordinate(type: CoordinateType) {\n const coordinate = Factory.createGrammar('coordinate', this, type) as ICoordinate;\n\n if (coordinate) {\n this.grammars.record(coordinate);\n this._dataflow.add(coordinate);\n }\n return coordinate;\n }\n\n mark(\n type: MarkType,\n group?: IGroupMark | string,\n markOptions?: { glyphType?: string; componentType?: string; mode?: '2d' | '3d' }\n ) {\n const groupMark = isString(group) ? (this.getMarkById(group) as IGroupMark) : group;\n\n let mark: IMark;\n switch (type) {\n case GrammarMarkType.group:\n mark = new GroupMark(this, groupMark);\n break;\n case GrammarMarkType.glyph:\n mark = new GlyphMark(this, markOptions?.glyphType, groupMark);\n break;\n // components\n case GrammarMarkType.component:\n mark = Factory.hasComponent(markOptions?.componentType)\n ? Factory.createComponent(markOptions?.componentType, this, groupMark, markOptions?.mode)\n : new Component(this, markOptions?.componentType, groupMark, markOptions?.mode);\n break;\n case GrammarMarkType.text:\n mark = new Text(this, type, groupMark);\n break;\n default:\n mark = Factory.hasMark(type) ? Factory.createMark(type, this, groupMark) : new Mark(this, type, groupMark);\n }\n this.grammars.record(mark);\n this._dataflow.add(mark);\n return mark;\n }\n\n group(group?: IGroupMark | string) {\n return this.mark(GrammarMarkType.group, group) as IGroupMark;\n }\n\n glyph(glyphType: string, group: IGroupMark | string) {\n return this.mark(GrammarMarkType.glyph, group, { glyphType }) as IGlyphMark;\n }\n\n component(componentType: string, group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType, mode }) as IComponent;\n }\n\n axis(group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.axis, mode }) as IAxis;\n }\n\n grid(group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.grid, mode }) as IGrid;\n }\n\n legend(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.legend }) as ILegend;\n }\n\n slider(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.slider }) as ISlider;\n }\n\n label(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.label }) as ILabel;\n }\n\n datazoom(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.datazoom }) as IDatazoom;\n }\n\n player(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.player }) as IPlayer;\n }\n\n title(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.title }) as ITitle;\n }\n\n scrollbar(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.scrollbar }) as IScrollbar;\n }\n\n customized(type: string, spec: any) {\n const grammar = Factory.createGrammar(type, this, spec?.type);\n\n if (grammar) {\n grammar.parse(spec);\n this.grammars.record(grammar);\n this._dataflow.add(grammar);\n return grammar;\n }\n }\n\n addGrammar(grammar: IGrammarBase) {\n if (this.grammars.find(storedGrammar => storedGrammar.uid === grammar.uid)) {\n return this;\n }\n this.grammars.record(grammar);\n this._dataflow.add(grammar);\n grammar.parse(grammar.getSpec());\n\n // update layout tree after grammar update\n this._needBuildLayoutTree = true;\n return this;\n }\n\n removeGrammar(grammar: string | IGrammarBase) {\n const recordedGrammar = isString(grammar) ? this.getGrammarById(grammar) : grammar;\n if (!recordedGrammar || !this.grammars.find(storedGrammar => storedGrammar.uid === recordedGrammar.uid)) {\n return this;\n }\n if (recordedGrammar.grammarType === 'mark') {\n (recordedGrammar as IMark).prepareRelease();\n }\n this._cachedGrammars.record(recordedGrammar);\n this._dataflow.remove(recordedGrammar);\n this.grammars.unrecord(recordedGrammar);\n\n // update layout tree after grammar update\n this._needBuildLayoutTree = true;\n return this;\n }\n\n removeAllGrammars() {\n this.grammars.traverse(grammar => {\n if (grammar.grammarType === 'signal' && BuiltInSignalID.includes(grammar.id())) {\n return;\n } else if (grammar.grammarType === 'mark' && grammar.id() === 'root') {\n return;\n }\n this.removeGrammar(grammar);\n });\n return this;\n }\n\n removeAllGraphicItems() {\n this.traverseMarkTree((mark: IMark) => {\n if (mark.graphicItem) {\n removeGraphicItem(mark.graphicItem);\n mark.elementMap.forEach(element => {\n element.resetGraphicItem();\n });\n mark.graphicItem = null;\n }\n });\n\n return this;\n }\n\n // --- Handle Spec ---\n\n parseSpec(spec: ViewSpec) {\n this.emit(HOOK_EVENT.BEFORE_PARSE_VIEW);\n this._spec = spec;\n normalizeMarkTree(spec);\n\n if (spec.theme) {\n this.theme(spec.theme);\n } else {\n this.theme(ThemeManager.getDefaultTheme());\n }\n\n if (spec.width) {\n this.width(spec.width);\n }\n\n if (spec.height) {\n this.height(spec.height);\n }\n\n this.padding(spec.padding ?? this._options.padding ?? this._theme.padding);\n\n if (!this.width() || !this.height()) {\n const size = this._getContainerSize();\n\n if (size) {\n this.updateSignal(SIGNAL_WIDTH, size.width);\n this.updateSignal(SIGNAL_HEIGHT, size.height);\n }\n }\n\n if (spec.signals?.length) {\n spec.signals.forEach(signal => {\n this.signal().parse(signal);\n });\n }\n\n if (spec.data?.length) {\n spec.data.forEach(data => {\n this.data(null).parse(data);\n });\n }\n\n if (spec.coordinates?.length) {\n spec.coordinates.forEach(coordinate => {\n this.coordinate(coordinate.type)?.parse(coordinate);\n });\n }\n\n if (spec.scales?.length) {\n spec.scales.forEach(scale => {\n this.scale(scale.type)?.parse(scale);\n });\n }\n\n const customizedGrammars = Factory.getGrammars();\n\n Object.keys(customizedGrammars).forEach(key => {\n const { specKey } = customizedGrammars[key];\n\n if (spec[specKey] && spec[specKey].length) {\n spec[specKey].forEach((specValue: any) => {\n this.customized(key, specValue);\n });\n }\n });\n\n if (spec.marks && spec.marks.length) {\n spec.marks.forEach(mark => {\n this.parseMarkSpec(mark);\n });\n }\n\n if (spec.events && spec.events.length) {\n spec.events.forEach(eventConfig => {\n this.event(eventConfig);\n });\n }\n\n if (spec.interactions && spec.interactions.length) {\n spec.interactions.forEach(interaction => {\n this.interaction(interaction.type, interaction);\n });\n }\n\n if (spec.animation === false) {\n this.animate.disable();\n } else {\n this.animate.enable();\n }\n\n this.emit(HOOK_EVENT.AFTER_PARSE_VIEW);\n\n // update layout tree after update spec\n this._needBuildLayoutTree = true;\n this._layoutState = LayoutState.before;\n\n return this;\n }\n\n updateSpec(spec: ViewSpec) {\n this.removeAllInteractions();\n this.removeAllGrammars();\n return this.parseSpec(spec);\n }\n\n private parseBuiltIn() {\n // 创建内置的 Signal\n builtInSignals(this._options, this._config, this.getCurrentTheme()).forEach(signalSpec => {\n const signal = this.signal().parse(signalSpec);\n if (signalSpec.value) {\n signal.set(signalSpec.value);\n }\n });\n\n const rootMark: GroupMarkSpec = {\n id: 'root',\n type: 'group',\n encode: {\n enter: { x: 0, y: 0 },\n update: {\n width: { signal: 'width' },\n height: { signal: 'height' }\n }\n }\n };\n this.parseMarkSpec(rootMark);\n this.rootMark = this.getMarkById('root') as IGroupMark;\n }\n\n private parseMarkSpec(spec: MarkSpec) {\n const markOptions =\n spec.type === GrammarMarkType.glyph\n ? { glyphType: (spec as GlyphMarkSpec).glyphType }\n : spec.type === GrammarMarkType.component\n ? { componentType: (spec as ComponentSpec).componentType, mode: (spec as ComponentSpec).mode }\n : null;\n this.mark(spec.type, spec.group, markOptions).parse(spec);\n (spec as GroupMarkSpec).marks?.forEach(childSpec => {\n this.parseMarkSpec(childSpec);\n });\n }\n\n // --- Theme API ---\n theme(theme: ITheme | string) {\n if (isString(theme)) {\n this._theme = ThemeManager.getTheme(theme) ?? ThemeManager.getDefaultTheme();\n } else {\n this._theme = theme;\n }\n const { background, padding } = this._spec ?? {};\n if (this._theme) {\n this.background(background ?? this._options.background ?? this._theme.background);\n this.padding(padding ?? this._options.padding ?? this._theme.padding);\n this.renderer.stage()?.setTheme?.(Object.assign({}, this._theme.marks));\n } else {\n this.background(background ?? this._options.background);\n this.padding(padding ?? this._options.padding);\n }\n\n return this;\n }\n\n getCurrentTheme() {\n return this._theme;\n }\n async setCurrentTheme(theme: ITheme | string, render: boolean = true) {\n if (this._isReleased) {\n return;\n }\n this.theme(theme);\n // trigger encode for all marks\n this.grammars.getAllMarks().forEach(mark => {\n mark.commit();\n });\n\n if (render) {\n await this.evaluate();\n\n if (this._isReleased) {\n return;\n }\n // FIXME: trigger render\n this.renderer.render(true);\n } else {\n await this._dataflow.evaluate();\n }\n\n return this;\n }\n\n // --- Global Configure ---\n\n background(value?: IColor) {\n if (arguments.length) {\n this._background = value;\n this.renderer.background(value);\n return value;\n }\n return this._background;\n }\n\n width(value?: number) {\n const signal = this.getSignalById(SIGNAL_WIDTH);\n if (arguments.length) {\n this._options.width = value;\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as number;\n }\n\n height(value?: number) {\n const signal = this.getSignalById(SIGNAL_HEIGHT);\n if (arguments.length) {\n this._options.height = value;\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as number;\n }\n\n viewWidth(value?: number) {\n const signal = this.getSignalById(SIGNAL_VIEW_WIDTH);\n if (arguments.length) {\n // view width depends on canvas width\n const padding = this.padding();\n this.width(value + padding.left + padding.right);\n return value;\n }\n return signal.output() as number;\n }\n\n viewHeight(value?: number) {\n const signal = this.getSignalById(SIGNAL_VIEW_HEIGHT);\n if (arguments.length) {\n // view height depends on canvas height\n const padding = this.padding();\n this.height(value + padding.top + padding.bottom);\n return value;\n }\n return signal.output() as number;\n }\n\n padding(value?: number | { top?: number; left?: number; right?: number; bottom?: number }) {\n const signal = this.getSignalById<{ top: number; left: number; right: number; bottom: number }>(SIGNAL_PADDING);\n if (arguments.length) {\n const padding = normalizePadding(value);\n this.updateSignal(signal, padding);\n return padding;\n }\n return normalizePadding(signal.output());\n }\n\n autoFit(value?: boolean) {\n const signal = this.getSignalById(SIGNAL_AUTOFIT);\n if (arguments.length) {\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as boolean;\n }\n\n getViewBox() {\n const signal = this.getSignalById(SIGNAL_VIEW_BOX);\n\n return signal?.output() as IBounds;\n }\n\n // --- Layout ---\n\n updateLayoutTag() {\n this._layoutState = LayoutState.before;\n return this;\n }\n\n getLayoutState() {\n return this._layoutState;\n }\n\n private buildLayoutTree() {\n const markMap: Record = {};\n const rootMarks: IMark[] = [];\n\n this.traverseMarkTree(\n (mark: IMark) => {\n markMap[mark.id()] = true;\n\n if (mark.group) {\n if (!markMap[mark.group.id()]) {\n rootMarks.push(mark);\n }\n } else {\n rootMarks.push(mark);\n }\n\n if (mark.markType === GrammarMarkType.group) {\n (mark as IGroupMark).updateLayoutChildren();\n }\n },\n (mark: IMark) => mark.needLayout()\n );\n\n this._layoutMarks = rootMarks;\n }\n\n private doLayout() {\n const doLayout = this._options.doLayout || defaultDoLayout;\n if (doLayout && this._layoutMarks?.length) {\n this.emit(HOOK_EVENT.BEFORE_DO_LAYOUT);\n doLayout(this._layoutMarks, this._options, this);\n this.emit(HOOK_EVENT.AFTER_DO_LAYOUT);\n }\n }\n\n private handleLayoutEnd() {\n this.emit(HOOK_EVENT.BEFORE_MARK_LAYOUT_END);\n this._layoutMarks.forEach(layoutMark => {\n traverseMarkTree(\n layoutMark,\n 'layoutChildren',\n (mark: IMark) => {\n mark.handleLayoutEnd();\n },\n // 顶层节点,不需要重新执行了\n (mark: IMark) => mark !== layoutMark\n );\n });\n this.emit(HOOK_EVENT.AFTER_MARK_LAYOUT_END);\n }\n\n private handleRenderEnd() {\n this.emit(HOOK_EVENT.BEFORE_MARK_RENDER_END);\n traverseMarkTree(this.rootMark, 'children', (mark: IMark) => {\n mark.handleRenderEnd();\n });\n this.emit(HOOK_EVENT.AFTER_MARK_RENDER_END);\n }\n\n // --- Dataflow ---\n\n commit(grammar: IGrammarBase) {\n this._dataflow.commit(grammar);\n return this;\n }\n\n run(runningConfig?: IRunningConfig) {\n this.evaluate(runningConfig);\n\n return this;\n }\n\n runSync(runningConfig?: IRunningConfig) {\n this.evaluateSync(runningConfig);\n\n return this;\n }\n\n isRunning() {\n return this._running;\n }\n\n async runAsync(runningConfig?: IRunningConfig) {\n if (this._isReleased) {\n return;\n }\n // await previously queued functions\n while (this._running) {\n await this._running;\n if (this._isReleased) {\n break;\n }\n }\n\n // run dataflow, manage running promise\n const clear = () => {\n this._running = null;\n };\n\n (this._running = this.evaluate(runningConfig)).then(clear, clear);\n\n return this._running;\n }\n\n async runNextTick(runningConfig?: IRunningConfig) {\n // delay the evaluate progress to next tick\n if (!this._currentDataflow) {\n this._currentDataflow = Promise.resolve().then(() => {\n return this.runAsync(runningConfig)\n .then(() => {\n this._currentDataflow = null;\n })\n .catch((e: any) => {\n this._currentDataflow = null;\n this.logger.error(e);\n });\n });\n }\n await this._currentDataflow;\n\n return this;\n }\n\n private doRender(immediately: boolean) {\n this.emit(HOOK_EVENT.BEFORE_DO_RENDER);\n // render as needed\n if (this.renderer) {\n if (!this._progressiveMarks) {\n this.animate.animate();\n }\n // 绘图 =>\n this.renderer.render(immediately);\n this.handleRenderEnd();\n }\n this.emit(HOOK_EVENT.AFTER_DO_RENDER);\n }\n\n private async evaluate(runningConfig?: IRunningConfig) {\n if (this._isReleased) {\n return;\n }\n const normalizedRunningConfig = normalizeRunningConfig(runningConfig);\n\n const grammarWillDetach = this._cachedGrammars.size() > 0;\n\n if (grammarWillDetach) {\n this.reuseCachedGrammars(normalizedRunningConfig);\n this.detachCachedGrammar();\n }\n // For most of time, width & height signal won't be modified duration dataflow,\n // so resizing before generating vRender graphic items should be faster.\n const hasResize = this._resizeRenderer();\n const hasUpdate = this._dataflow.hasCommitted();\n\n // if no grammar is update and layout is unnecessary, end evaluating\n if (!grammarWillDetach && !hasUpdate && !this._layoutState && !hasResize) {\n return this;\n }\n\n this.clearProgressive();\n // stop auto render of vrender to avoid the case that vrender auto render before the asynchronous task is done\n this.renderer?.preventRender(true);\n\n // evaluate dataflow\n await this._dataflow.evaluate();\n\n if (this._isReleased) {\n return;\n }\n\n if (this._needBuildLayoutTree) {\n this.buildLayoutTree();\n this._needBuildLayoutTree = false;\n }\n\n if (this._layoutState) {\n this._layoutState = LayoutState.layouting;\n this.doLayout();\n\n if (this._dataflow.hasCommitted()) {\n this._layoutState = LayoutState.reevaluate;\n await this._dataflow.evaluate();\n\n if (this._isReleased) {\n return;\n }\n }\n\n this._layoutState = LayoutState.after;\n if (this._layoutMarks?.length) {\n this.handleLayoutEnd();\n }\n }\n // enable auto render of vrender after the asynchronous task is done\n this.renderer?.preventRender(false);\n this._layoutState = null;\n\n this.findProgressiveMarks();\n\n // resize again if width/height signal is updated duration dataflow\n this._resizeRenderer();\n this.doRender(false);\n\n this._willMorphMarks?.forEach(morphMarks => {\n this._morph.morph(morphMarks.prev, morphMarks.next, normalizedRunningConfig);\n });\n this._willMorphMarks = null;\n\n this.releaseCachedGrammars(normalizedRunningConfig);\n\n this.doPreProgressive();\n\n return this;\n }\n\n private evaluateSync(runningConfig?: IRunningConfig) {\n const normalizedRunningConfig = normalizeRunningConfig(runningConfig);\n\n const grammarWillDetach = this._cachedGrammars.size() > 0;\n\n if (grammarWillDetach) {\n this.reuseCachedGrammars(normalizedRunningConfig);\n this.detachCachedGrammar();\n }\n\n const hasResize = this._resizeRenderer();\n const hasUpdate = this._dataflow.hasCommitted();\n\n if (!grammarWillDetach && !hasUpdate && !this._layoutState && !hasResize) {\n return this;\n }\n\n this.clearProgressive();\n // evaluate dataflow\n this._dataflow.evaluateSync();\n\n if (this._needBuildLayoutTree) {\n this.buildLayoutTree();\n this._needBuildLayoutTree = false;\n }\n\n if (this._layoutState) {\n this._layoutState = LayoutState.layouting;\n this.doLayout();\n\n if (this._dataflow.hasCommitted()) {\n this._layoutState = LayoutState.reevaluate;\n this._dataflow.evaluateSync();\n }\n\n this._layoutState = LayoutState.after;\n if (this._layoutMarks?.length) {\n this.handleLayoutEnd();\n }\n }\n this._layoutState = null;\n\n this.findProgressiveMarks();\n\n this._resizeRenderer();\n this.doRender(true);\n\n this._willMorphMarks?.forEach(morphMarks => {\n this._morph.morph(morphMarks.prev, morphMarks.next, normalizedRunningConfig);\n });\n this._willMorphMarks = null;\n\n this.releaseCachedGrammars(normalizedRunningConfig);\n\n this.doPreProgressive();\n\n return this;\n }\n\n private reuseCachedGrammars(runningConfig: IRunningConfig) {\n if (!this._willMorphMarks) {\n this._willMorphMarks = [];\n }\n\n if (runningConfig.reuse) {\n const reuseDiffUpdate = (diff: { prev: IGrammarBase; next: IGrammarBase }) => {\n diff.next.reuse(diff.prev);\n diff.prev.detachAll();\n diff.prev.clear();\n this._cachedGrammars.unrecord(diff.prev);\n };\n\n const diffedSignal = this._morph.diffGrammar(\n this._cachedGrammars.getAllSignals(),\n this.grammars.getAllSignals().filter(signal => !BuiltInSignalID.includes(signal.id()))\n );\n diffedSignal.update.forEach(reuseDiffUpdate);\n\n const diffedData = this._morph.diffGrammar(this._cachedGrammars.getAllData(), this.grammars.getAllData());\n diffedData.update.forEach(reuseDiffUpdate);\n\n const diffedScale = this._morph.diffGrammar(this._cachedGrammars.getAllScales(), this.grammars.getAllScales());\n diffedScale.update.forEach(reuseDiffUpdate);\n\n const diffedCoordinate = this._morph.diffGrammar(\n this._cachedGrammars.getAllCoordinates(),\n this.grammars.getAllCoordinates()\n );\n diffedCoordinate.update.forEach(reuseDiffUpdate);\n\n // TODO: reuse custom\n }\n\n const diffedMark = this._morph.diffMark(\n this._cachedGrammars.getAllMarks(),\n this.grammars.getAllMarks().filter(mark => mark.id() !== 'root'),\n runningConfig\n );\n diffedMark.update.forEach(diff => {\n const matched =\n diff.prev.length === 1 && diff.next.length === 1 && diff.prev[0].markType === diff.next[0].markType;\n const enableMarkMorphConfig =\n diff.prev.every(mark => mark.getMorphConfig().morph) && diff.next.every(mark => mark.getMorphConfig().morph);\n if (matched && runningConfig.reuse) {\n diff.next[0].reuse(diff.prev[0]);\n diff.prev[0].detachAll();\n diff.prev[0].clear();\n this._cachedGrammars.unrecord(diff.prev[0]);\n } else if ((runningConfig.morph && enableMarkMorphConfig) || runningConfig.morphAll) {\n this._willMorphMarks.push({ prev: diff.prev, next: diff.next });\n }\n });\n }\n\n private detachCachedGrammar() {\n this._cachedGrammars.traverse(grammar => {\n grammar.detachAll();\n if (grammar.grammarType === 'mark') {\n const mark = grammar as IMark;\n mark.group?.removeChild?.(mark);\n }\n });\n }\n\n private releaseCachedGrammars(runningConfig?: IRunningConfig) {\n // directly release all grammars except from marks\n this._cachedGrammars.traverse(grammar => {\n if (grammar.grammarType !== 'mark') {\n grammar.release();\n }\n });\n const markNodes = this._cachedGrammars.getAllMarkNodes();\n markNodes.forEach(node => {\n node.mark.animate.stop();\n if (runningConfig.enableExitAnimation) {\n this.animate.animateAddition(node.mark);\n }\n });\n const releaseUp = (node: IMarkTreeNode) => {\n // do nothing when mark is already released or is still animating\n if (!node.mark.view || node.mark.animate.getAnimatorCount() !== 0) {\n return;\n }\n // release when current node is leaf node\n if (!node.children || node.children.length === 0) {\n node.mark.release();\n // detach current node from tree and traverse above\n const parent = node.parent;\n if (parent) {\n node.parent.children = node.parent.children.filter(n => n !== node);\n node.parent = null;\n releaseUp(parent);\n }\n }\n };\n markNodes.forEach(node => {\n const mark = node.mark;\n if (mark.animate.getAnimatorCount() === 0) {\n releaseUp(node);\n } else {\n mark.addEventListener('animationEnd', () => {\n if (mark.animate.getAnimatorCount() === 0) {\n releaseUp(node);\n }\n });\n }\n });\n this._cachedGrammars.clear();\n }\n\n runAfter(callback: (view: IView) => void) {\n this._dataflow.runAfter(() => {\n callback.call(null, this);\n });\n return this;\n }\n\n runBefore(callback: (view: IView) => void) {\n this._dataflow.runBefore(() => {\n callback.call(null, this);\n });\n return this;\n }\n\n /**\n * 目前仅支持 node 环境,用于 node 端的图片导出\n * @returns\n */\n getImageBuffer() {\n if (this._options.mode !== 'node') {\n this.logger.error(new TypeError('getImageBuffer() now only support node environment.'));\n return;\n }\n const stage = this.renderer?.stage?.();\n if (stage) {\n stage.render();\n const buffer = stage.window.getImageBuffer();\n return buffer;\n }\n this.logger.error(new ReferenceError(`render is not defined`));\n\n return null;\n }\n\n // --- Mark Tree ---\n\n traverseMarkTree(apply: (mark: IMark) => any, filter?: (mark: IMark) => boolean, leafFirst?: boolean) {\n traverseMarkTree(this.rootMark, 'children', apply, filter, leafFirst);\n return this;\n }\n\n // --- Resize ---\n\n private _bindResizeEvent() {\n if (this.autoFit()) {\n const container = this.renderer?.stage?.()?.window?.getContainer?.();\n if (container) {\n const ResizeObserverWindow: any = window.ResizeObserver;\n this._observer = new ResizeObserverWindow(this._onResize);\n this._observer?.observe(container);\n }\n window.addEventListener('resize', this._onResize);\n }\n }\n\n private _unBindResizeEvent() {\n if (this.autoFit()) {\n window.removeEventListener('resize', this._onResize);\n if (this._observer) {\n this._observer.disconnect();\n this._observer = null;\n }\n }\n }\n\n private _getContainerSize() {\n const container = this.renderer?.stage?.()?.window?.getContainer?.();\n\n if (container) {\n const { width: containerWidth, height: containerHeight } = getContainerSize(container!);\n const width = this._spec?.width ?? this._options.width ?? containerWidth;\n const height = this._spec?.height ?? this._options.height ?? containerHeight;\n\n return { width, height };\n }\n\n return null;\n }\n\n private _onResize = debounce((...args: any[]) => {\n const size = this._getContainerSize();\n\n if (size) {\n this.resize(size.width, size.height);\n }\n }, 100);\n\n async resize(width: number, height: number, render: boolean = true) {\n let needDataflow = false;\n\n // width value changed: update signal, skip resize op\n if (width !== this.width()) {\n needDataflow = true;\n this.updateSignal(SIGNAL_WIDTH, width);\n }\n\n // height value changed: update signal, skip resize op\n if (height !== this.height()) {\n needDataflow = true;\n this.updateSignal(SIGNAL_HEIGHT, height);\n }\n\n // run dataflow on width/height signal change\n if (needDataflow) {\n if (render) {\n await this.evaluate();\n } else {\n await this._dataflow.evaluate();\n }\n }\n\n return this;\n }\n\n private _resizeRenderer() {\n const width = this.width();\n const height = this.height();\n\n if (this.renderer.shouldResize(width, height)) {\n this.renderer.resize(width, height);\n this.emit('resize', {}, { width, height });\n return true;\n }\n\n return false;\n }\n\n // --- Event ---\n\n private bindEvents(eventSpec: BaseEventSpec) {\n if (this._eventConfig.disable) {\n return;\n }\n const { type: evtType, filter, callback, throttle, debounce, consume, target, dependency } = eventSpec;\n const eventSelector = parseEventSelector(evtType);\n\n if (!eventSelector) {\n return;\n }\n const { source, type } = eventSelector;\n\n const markFilter = generateFilterByMark(eventSelector);\n const targetSignals =\n Array.isArray(target) && target.length\n ? target.map(entry => {\n return {\n signal: this.getSignalById(entry.target),\n callback: entry.callback\n };\n })\n : [\n {\n signal: isString(target) ? this.getSignalById(target) : null,\n callback\n }\n ];\n const validateSignals = targetSignals.filter(entry => entry.signal || entry.callback);\n const refs = parseReference(dependency, this);\n\n const send = parseHandler(\n (evt?: any, element?: IElement) => {\n const needPreventDefault =\n (source === EVENT_SOURCE_VIEW && prevent(this._eventConfig, type)) ||\n (consume && (evt.cancelable === undefined || evt.cancelable));\n\n if (source === EVENT_SOURCE_WINDOW) {\n evt = getExtendedEvents(this, evt, element, type, EVENT_SOURCE_WINDOW);\n }\n\n let hasCommitted = false;\n\n if ((!filter || filter(evt)) && (!markFilter || markFilter(element)) && validateSignals.length) {\n const params = refs.reduce((params, ref) => {\n params[ref.id()] = ref.output();\n return params;\n }, {});\n validateSignals.forEach(entry => {\n if (entry.callback && entry.signal) {\n const changed = entry.signal.set(entry.callback(evt, params));\n\n if (changed) {\n this.commit(entry.signal);\n hasCommitted = true;\n }\n } else if (entry.callback) {\n entry.callback(evt, params);\n } else {\n this.commit(entry.signal);\n hasCommitted = true;\n }\n });\n }\n\n if (needPreventDefault) {\n evt.preventDefault();\n }\n\n if (consume) {\n evt.stopPropagation();\n }\n\n if (hasCommitted) {\n this.runAsync();\n }\n },\n { throttle, debounce }\n );\n\n if (source === EVENT_SOURCE_VIEW) {\n if (permit(this._eventConfig, EVENT_SOURCE_VIEW, type)) {\n // send traps errors, so use {trap: false} option\n this.addEventListener(type, send, NO_TRAP);\n\n return () => {\n this.removeEventListener(type, send);\n };\n }\n } else if (source === EVENT_SOURCE_WINDOW) {\n vglobal.addEventListener(type, send);\n this._eventListeners.push({\n type: type,\n source: vglobal,\n handler: send\n });\n\n return () => {\n vglobal.removeEventListener(type, send);\n\n const index = this._eventListeners.findIndex((entry: any) => {\n return entry.type === type && entry.source === vglobal && entry.handler === send;\n });\n\n if (index >= 0) {\n this._eventListeners.splice(index, 1);\n }\n };\n }\n }\n\n event(eventSpec: EventSpec) {\n if ('between' in eventSpec) {\n const [starEvent, endEvent] = eventSpec.between;\n // FIXME between需要生成唯一ID\n const id = `${starEvent.type}-${eventSpec.type}-${endEvent.type}`;\n\n let unbindEndEvent: any;\n\n this.bindEvents(\n Object.assign({}, starEvent, {\n callback: () => {\n if (!this._eventCache) {\n this._eventCache = {};\n }\n // 中间的事件绑定\n if (!this._eventCache[id]) {\n const unbindEvent = this.bindEvents(eventSpec);\n this._eventCache[id] = unbindEvent;\n }\n if (!unbindEndEvent) {\n // 结束的事件绑定\n unbindEndEvent = this.bindEvents(\n Object.assign({}, endEvent, {\n callback: () => {\n if (this._eventCache[id]) {\n this._eventCache[id]();\n this._eventCache[id] = null;\n }\n }\n })\n );\n }\n }\n })\n );\n } else if ('merge' in eventSpec) {\n eventSpec.merge.forEach(entry => {\n const singleEvent: Partial = Object.assign({}, eventSpec);\n\n if (isString(entry)) {\n singleEvent.type = entry;\n } else if (isObject(entry)) {\n Object.assign(singleEvent, entry);\n }\n singleEvent.debounce = 50;\n this.bindEvents(singleEvent as BaseEventSpec);\n });\n } else {\n this.bindEvents(eventSpec);\n }\n }\n\n interaction(type: string, spec: Partial) {\n const interaction = Factory.createInteraction(type, this, spec);\n\n if (interaction) {\n interaction.bind();\n\n if (!this._boundInteractions) {\n this._boundInteractions = [];\n }\n\n this._boundInteractions.push(interaction);\n }\n return interaction;\n }\n\n removeInteraction(type: string | IInteraction, id?: string) {\n if (this._boundInteractions) {\n const instances = this._boundInteractions.filter(interaction => {\n if (!isNil(id)) {\n return interaction.options?.id === id;\n }\n\n if (isString(type)) {\n return interaction.type === type;\n }\n\n if (type) {\n return interaction === type;\n }\n });\n\n if (instances.length) {\n instances.forEach(instance => {\n instance.unbind();\n });\n }\n }\n\n return this;\n }\n\n removeAllInteractions() {\n if (this._boundInteractions) {\n this._boundInteractions.forEach(instance => {\n instance.unbind();\n });\n\n this._boundInteractions = null;\n }\n\n return this;\n }\n\n private initEvent() {\n // 基于 vRender 事件系统提供的委托机制\n const stage = this.renderer.stage();\n stage && stage.on('*', this.delegateEvent);\n }\n\n private delegateEvent = (event: any, type: string) => {\n const activeElement = event.target?.[BridgeElementKey];\n const extendedEvt = getExtendedEvents(this, event, activeElement, type, EVENT_SOURCE_VIEW);\n this.emit(type, extendedEvt, activeElement);\n };\n\n addEventListener(type: string, handler: BaseEventHandler, options?: any) {\n let callback = handler;\n if (!(options && options.trap === false)) {\n callback = handler;\n (callback as any).raw = handler;\n }\n if (options && options.target) {\n (callback as any).target = options.target;\n }\n this.on(type, callback);\n return this;\n }\n\n removeEventListener(type: string, handler?: BaseEventHandler) {\n if (handler) {\n this.off(type, handler);\n } else {\n this.off(type);\n }\n return this;\n }\n\n // --- Initialization ---\n\n private initializeRenderer() {\n const width = this._options.width;\n const height = this._options.height;\n\n this.renderer = new CanvasRenderer(this);\n this.renderer.initialize(width, height, this._options, this._eventConfig).background(this._background);\n }\n\n private initialize() {\n this.grammars = new RecordedGrammars(\n grammar => grammar.id(),\n (key, grammar) => this.logger.warn(`Grammar id '${key}' has been occupied`, grammar)\n );\n this._cachedGrammars = new RecordedTreeGrammars(grammar => grammar.id());\n\n if (this._options.logger) {\n Logger.setInstance(this._options.logger);\n }\n this.logger = Logger.getInstance(this._options.logLevel ?? 0);\n\n this._dataflow = new Dataflow();\n\n this.animate = new ViewAnimate(this);\n\n this._morph = new Morph();\n\n // 执行钩子\n if (this._options.hooks) {\n Object.keys(this._options.hooks).forEach(key => {\n this.on(key, this._options.hooks[key]);\n });\n // 生命周期事件(包含原性能测试钩子)\n this.hooks = this._options.hooks;\n }\n this.container = null;\n\n // initialize renderer, handler and event management\n this.renderer = null;\n this._eventListeners = [];\n\n // initialize event configuration\n this._eventConfig = initializeEventConfig(this._options.eventConfig);\n\n // set default theme\n this._theme = this._options.disableTheme ? null : ThemeManager.getDefaultTheme();\n\n this.parseBuiltIn();\n\n // initialize DOM container(s) and renderer\n configureEnvironment(this._options);\n this.initializeRenderer();\n\n if (!this._eventConfig.disable) {\n this.initEvent();\n }\n this._bindResizeEvent();\n\n this._currentDataflow = null;\n // update layout tree after initialization\n this._needBuildLayoutTree = true;\n this._layoutState = LayoutState.before;\n\n // apply theme value after initialization\n this.theme(this._theme);\n }\n\n // --- Others ---\n\n pauseProgressive() {\n return false;\n }\n resumeProgressive() {\n return false;\n }\n restartProgressive() {\n return false;\n }\n\n private findProgressiveMarks() {\n const marks: IMark[] = [];\n\n this.traverseMarkTree(\n (mark: IMark) => {\n marks.push(mark);\n },\n (mark: IMark) => mark.markType !== GrammarMarkType.group && mark.isProgressive()\n );\n\n if (!marks.length) {\n this._progressiveMarks = null;\n return null;\n }\n\n this._progressiveMarks = marks;\n\n if (this.renderer) {\n this.renderer.combineIncrementalLayers();\n }\n\n return marks;\n }\n\n private doPreProgressive() {\n if (this._progressiveMarks && this._progressiveMarks.some(mark => mark.isDoingProgressive())) {\n const raf = vglobal.getRequestAnimationFrame();\n this._progressiveRafId = raf(this.handleProgressiveFrame);\n }\n }\n\n /** 监听frame事件,更新增量元素的mark */\n private handleProgressiveFrame = () => {\n if (this._progressiveMarks.length) {\n this._progressiveMarks.forEach(mark => {\n if (mark.isDoingProgressive()) {\n mark.evaluateProgressive();\n }\n });\n }\n\n this.doPreProgressive();\n };\n\n /** 清除 */\n private clearProgressive() {\n if (this._progressiveRafId) {\n const cancelRaf = vglobal.getCancelAnimationFrame();\n cancelRaf(this._progressiveRafId);\n }\n\n if (this._progressiveMarks && this._progressiveMarks.length) {\n this._progressiveMarks.forEach(entry => {\n entry.clearProgressive();\n });\n\n this._progressiveMarks = null;\n }\n }\n\n // --- release ---\n release() {\n this._isReleased = true;\n this._unBindResizeEvent();\n this.clearProgressive();\n Factory.unregisterRuntimeTransforms();\n\n this.animate.stop();\n\n this.grammars.release();\n this._cachedGrammars.release();\n\n this._dataflow.release();\n this._dataflow = null;\n\n this.renderer?.release?.();\n this.renderer = null;\n this._boundInteractions = null;\n\n // 卸载事件\n this.removeAllListeners();\n this._eventListeners?.forEach((listener: any) => {\n listener.source.removeEventListener(listener.type, listener.handler);\n });\n this._eventListeners = null;\n }\n}\n","import { debounce, isNil, throttle } from '@visactor/vutils';\nimport type {\n EventSourceType,\n ParsedViewEventSpec,\n ParsedWindowEventSpec,\n EventCallback,\n MarkType,\n IElement\n} from '../types';\nimport { isMarkType } from '../graph/util/graphic';\nimport { EVENT_SOURCE_VIEW, EVENT_SOURCE_WINDOW } from '../view/constants';\n\nexport const generateFilterByMark = (evtSpec: Partial) => {\n if (isNil(evtSpec.markId)) {\n return (el: IElement) => {\n return el && el.mark.id() === evtSpec.markId;\n };\n }\n\n if (isNil(evtSpec.markName)) {\n return (el: IElement) => {\n return el && el.mark.name() === evtSpec.markName;\n };\n }\n\n if (isNil(evtSpec.type)) {\n return (el: IElement) => {\n return el && el.mark.markType === evtSpec.type;\n };\n }\n\n return () => true;\n};\n\nexport const parseHandler = (callback: EventCallback, config: { debounce?: number; throttle?: number }) => {\n if (config && config.debounce) {\n return debounce(callback, config.debounce);\n }\n\n if (config && config.throttle) {\n return throttle(callback, config.throttle);\n }\n\n return callback;\n};\n\nconst JOIN_SYMBOL = ':';\nexport const NAME_PREFIX = '@';\nexport const ID_PREFIX = '#';\n\n/**\n * Parse an event selector string.\n * Supported rules:\n * 1. mousedown\n * 2. rect:mousedown\n * 3. window:mousemove\n * 4. @foo:mousedown\n * Returns an event stream definitions.\n */\nexport const parseEventSelector = (\n selector: string,\n source: EventSourceType = EVENT_SOURCE_VIEW\n): Partial => {\n const spec: Partial = {};\n\n const splitArr = selector.split(JOIN_SYMBOL);\n\n if (splitArr.length === 2) {\n const [space, eventType] = splitArr;\n\n if (space[0] === ID_PREFIX) {\n // events on marks id\n spec.markId = space.slice(1);\n spec.source = source;\n } else if (space[0] === NAME_PREFIX) {\n // events on marks name\n spec.markName = space.slice(1);\n spec.source = source;\n } else if (isMarkType(space)) {\n spec.markType = space as MarkType;\n spec.source = source;\n } else if (space === EVENT_SOURCE_WINDOW) {\n spec.source = EVENT_SOURCE_WINDOW;\n } else {\n spec.source = source;\n }\n\n spec.type = eventType;\n } else if (splitArr.length === 1) {\n spec.type = selector;\n spec.source = source;\n }\n\n return spec;\n};\n","import { isArray, isObject } from '@visactor/vutils';\nimport type { IViewEventConfig } from '../types';\nimport { EVENT_SOURCE_VIEW, EVENT_SOURCE_WINDOW } from './constants';\n\n/**\n * 初始化事件配置,将所有配置转化为 {[key: string]: boolean } 格式。\n * Initialize event handling configuration.\n * @param {object} config - The configuration settings.\n * @return {object}\n */\nexport function initializeEventConfig(config: any) {\n const eventsConfig = Object.assign({ defaults: {} }, config);\n\n const unpack = (obj: any, keys: string[]) => {\n keys.forEach(k => {\n if (isArray(obj[k])) {\n obj[k] = obj[k].reduce((set: any, key: any) => {\n set[key] = true;\n return set;\n }, {});\n }\n });\n };\n\n unpack(eventsConfig.defaults, ['prevent', 'allow']);\n unpack(eventsConfig, [EVENT_SOURCE_VIEW, EVENT_SOURCE_WINDOW]);\n\n return eventsConfig;\n}\n\nexport function prevent(eventConfig: IViewEventConfig, type: string) {\n const def = eventConfig.defaults;\n const prevent = def.prevent;\n const allow = def.allow;\n\n if (prevent === false || allow === true) {\n return false;\n }\n\n if (prevent === true || allow === false) {\n return true;\n }\n\n if (prevent) {\n return prevent[type];\n }\n\n if (allow) {\n return !allow[type];\n }\n\n return false;\n}\n\nexport function permit(eventConfig: IViewEventConfig, key: string, type: string) {\n const rule = eventConfig?.[key];\n\n if (rule === false || (isObject(rule) && !rule[type])) {\n return false;\n }\n\n return true;\n}\n","import { vglobal } from '@visactor/vrender-core';\nimport type { IEnvironmentOptions } from '../../types';\n\nexport function configureEnvironment(options: IEnvironmentOptions) {\n if (options.mode) {\n vglobal.setEnv(options.mode, options.modeParams || {});\n }\n}\n","import type { RenderMode } from '../typings/spec';\n// eslint-disable-next-line no-duplicate-imports\nimport { RenderModeEnum } from '../typings/spec/common';\n\n// TODO: feishu => lark\nexport function toRenderMode(mode: RenderMode): any {\n switch (mode) {\n case RenderModeEnum['desktop-browser']:\n case RenderModeEnum['mobile-browser']:\n return 'browser';\n case RenderModeEnum.node:\n case RenderModeEnum.worker:\n return 'node';\n case RenderModeEnum.miniApp:\n case RenderModeEnum['desktop-miniApp']:\n return 'feishu';\n case RenderModeEnum.lynx:\n return 'lynx';\n case RenderModeEnum.wx:\n return 'wx';\n }\n return 'browser';\n}\n","import { ChartEvent } from './../constant/event';\nimport type { IElement, IView } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { View } from '@visactor/vgrammar-core';\nimport type {\n CompilerListenerParameters,\n CompilerModel,\n IGrammarItem,\n IProductMap,\n IRenderContainer,\n IRenderOption\n} from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarType } from './interface/compilable-item';\nimport { toRenderMode } from './util';\nimport { isMobileLikeMode, isTrueBrowser } from '../util/env';\nimport { isString } from '../util/type';\nimport type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isNil, isValid, Logger, LoggerLevel } from '@visactor/vutils';\nimport type { EventSourceType } from '../event/interface';\nimport type { IChart } from '../chart/interface';\nimport type { VChart } from '../core/vchart';\nimport type { IColor, Stage } from '@visactor/vrender-core';\nimport type { IMorphConfig } from '../animation/spec';\nimport { Event_Source_Type } from '../constant';\n\ntype EventListener = {\n type: string;\n callback: (...args: any[]) => void;\n};\n\nexport class Compiler {\n protected _view: IView;\n /**\n * 获取 VGrammar View 实例\n */\n getVGrammarView() {\n return this._view;\n }\n protected _viewListeners: Map<(...args: any[]) => any, EventListener> = new Map();\n protected _windowListeners: Map<(...args: any[]) => any, EventListener> = new Map();\n protected _canvasListeners: Map<(...args: any[]) => any, EventListener> = new Map();\n\n isInited: boolean = false;\n // 是否已经销毁\n isReleased: boolean = false;\n\n protected _width: number;\n protected _height: number;\n\n protected _container: IRenderContainer;\n protected _option: IRenderOption;\n\n protected _model: CompilerModel = {\n [GrammarType.signal]: {},\n [GrammarType.data]: {},\n [GrammarType.mark]: {}\n };\n getModel() {\n return this._model;\n }\n\n private _compileChart: IChart = null;\n\n constructor(container: IRenderContainer, option: IRenderOption) {\n this._container = container;\n this._option = option;\n }\n\n getRenderer() {\n return this._view?.renderer;\n }\n\n /**\n * 获取 canvas dom\n * @returns HTMLCanvasElement | undefined\n */\n getCanvas(): HTMLCanvasElement | undefined {\n return this._view?.renderer.canvas();\n }\n\n /**\n * 获取 渲染引擎\n */\n getStage(): Stage | undefined {\n return this._view?.renderer.stage();\n }\n\n initView() {\n if (this.isReleased) {\n return;\n }\n this.isInited = true;\n if (this._view) {\n return;\n }\n const logger = new Logger(this._option.logLevel ?? LoggerLevel.Error);\n if (this._option?.onError) {\n logger.addErrorHandler((...args) => {\n this._option?.onError?.(...args);\n });\n }\n this._view = new View({\n width: this._width,\n height: this._height,\n container: this._container.dom ?? null,\n renderCanvas: this._container.canvas ?? null,\n hooks: (this._option as any).performanceHook, // vgrammar 事件改造后,性能回调函数放在了hooks中实现\n ...this._option,\n mode: toRenderMode(this._option.mode),\n autoFit: false,\n eventConfig: {\n gesture: isMobileLikeMode(this._option.mode),\n disable: this._option.interactive === false\n },\n doLayout: () => {\n this._compileChart?.onLayout(this._view);\n },\n logger: logger,\n logLevel: logger.level()\n });\n this._setCanvasStyle();\n\n // emit afterRender event\n this.getStage().hooks.afterRender.tap('chart-event', () => {\n this._compileChart?.getEvent()?.emit(ChartEvent.afterRender, { chart: this._compileChart });\n });\n\n const interactive = this._option.interactive;\n if (interactive !== false) {\n // 将 view 实例化之前监听的事件挂载到 view 上\n this._viewListeners.forEach(listener => {\n this._view?.addEventListener(listener.type, listener.callback);\n });\n }\n }\n\n private _setCanvasStyle() {\n if (!this._view) {\n return;\n }\n if (this._container.dom && !isString(this._container.dom)) {\n this._container.dom.style.display = 'block';\n this._container.dom.style.position = 'relative';\n const canvas = this.getCanvas();\n if (canvas) {\n canvas.style.display = 'block';\n }\n }\n }\n\n compile(ctx: { chart: IChart; vChart: VChart }, option: any) {\n const { chart } = ctx;\n this._compileChart = chart;\n this.initView();\n if (!this._view) {\n return;\n }\n\n chart.compile();\n chart.afterCompile();\n this.updateDepend();\n }\n\n clear(ctx: { chart: IChart; vChart: VChart }, removeGraphicItems: boolean = false) {\n const { chart } = ctx;\n chart.clear();\n this.releaseGrammar(removeGraphicItems);\n }\n\n async renderAsync(morphConfig?: IMorphConfig): Promise {\n if (this.isReleased) {\n return;\n }\n this.initView();\n if (!this._view) {\n return Promise.reject('srView init fail');\n }\n await this._view?.runNextTick(morphConfig);\n return this;\n }\n\n renderSync(morphConfig?: IMorphConfig): void {\n this.initView();\n if (!this._view) {\n return;\n }\n this._view?.runSync(morphConfig);\n }\n\n updateViewBox(viewBox: IBoundsLike, reRender: boolean = true) {\n if (!this._view) {\n return;\n }\n\n this._view.renderer.setViewBox(viewBox, reRender);\n }\n\n resize(width: number, height: number, reRender: boolean = true) {\n if (!this._view) {\n return Promise.reject();\n }\n this._width = width;\n this._height = height;\n\n this._view.resize(width, height);\n return reRender ? this.renderAsync({ morph: false }) : this;\n }\n\n setBackground(color: IColor) {\n this._view?.background(color);\n }\n\n setSize(width: number, height: number) {\n this._width = width;\n this._height = height;\n if (!this._view) {\n return;\n }\n\n this._view.width(width);\n this._view.height(height);\n }\n\n setViewBox(viewBox: IBoundsLike, reRender: boolean = true) {\n if (!this._view) {\n return;\n }\n\n this._view.renderer.setViewBox(viewBox, reRender);\n }\n\n addEventListener(\n source: EventSourceType,\n type: string,\n callback: (params: CompilerListenerParameters) => void\n ): void {\n // TODO: 需要明确一下 interactive 的作用范围,同时考虑是否存在非交互行为的事件以及是否需要生效\n if (this._option.interactive === false) {\n return;\n }\n if (source === Event_Source_Type.chart) {\n const wrappedCallback = function (event: any, element: IElement | null) {\n const context = element?.mark?.getContext() ?? {};\n const modelId = isValid(context.modelId) ? context.modelId : null;\n const markId = isValid(context.markId) ? context.markId : null;\n const modelUserId = isValid(context.modelUserId) ? context.modelUserId : null;\n const markUserId = isValid(context.markUserId) ? context.markUserId : null;\n\n const params: CompilerListenerParameters = {\n event,\n type,\n source,\n item: element,\n datum: element?.getDatum?.() || null,\n markId,\n modelId,\n markUserId,\n modelUserId\n };\n callback.call(null, params);\n }.bind(this);\n this._viewListeners.set(callback, { type, callback: wrappedCallback });\n // 如果 view 已经初始化则立刻挂载监听\n // FIXME: 目前 vgrammar 类型声明没有对齐,事件相关类型声明并没有使用 SceneItem\n this._view?.addEventListener(type, wrappedCallback as any);\n } else if (source === Event_Source_Type.window) {\n const wrappedCallback = function wrappedCallback(event: any) {\n // TODO: vgrammar 暂未提供基于事件直接筛选相应 mark 的能力,这里无法获取到相应的 item\n const params: CompilerListenerParameters = {\n event,\n type,\n source,\n item: null,\n datum: null,\n markId: null,\n modelId: null,\n markUserId: null,\n modelUserId: null\n };\n callback.call(null, params);\n }.bind(this);\n this._windowListeners.set(callback, { type, callback: wrappedCallback });\n const windowObject = this._getGlobalThis();\n windowObject?.addEventListener(type, wrappedCallback);\n } else if (source === Event_Source_Type.canvas) {\n const wrappedCallback = function wrappedCallback(event: any) {\n // TODO: vgrammar 暂未提供基于事件直接筛选相应 mark 的能力,这里无法获取到相应的 item\n const params: CompilerListenerParameters = {\n event,\n type,\n source,\n item: null,\n datum: null,\n markId: null,\n modelId: null,\n markUserId: null,\n modelUserId: null\n };\n callback.call(null, params);\n }.bind(this);\n this._canvasListeners.set(callback, { type, callback: wrappedCallback });\n const canvasObject = this.getStage()?.window;\n canvasObject?.addEventListener(type, wrappedCallback);\n }\n }\n\n removeEventListener(\n source: EventSourceType,\n type: string,\n callback: (params: CompilerListenerParameters) => void\n ): void {\n if (this._option.interactive === false) {\n return;\n }\n if (source === Event_Source_Type.chart) {\n const wrappedCallback = this._viewListeners.get(callback)?.callback;\n wrappedCallback && this._view?.removeEventListener(type, wrappedCallback);\n this._viewListeners.delete(callback);\n } else if (source === Event_Source_Type.window) {\n const windowObject = this._getGlobalThis();\n const wrappedCallback = this._windowListeners.get(callback)?.callback;\n wrappedCallback && windowObject?.removeEventListener(type, wrappedCallback);\n this._windowListeners.delete(callback);\n } else if (source === Event_Source_Type.canvas) {\n const canvasObject = this._getGlobalThis();\n const wrappedCallback = this._canvasListeners.get(callback)?.callback;\n wrappedCallback && canvasObject?.removeEventListener(type, wrappedCallback);\n this._canvasListeners.delete(callback);\n }\n }\n\n protected releaseEvent(): void {\n // 相应的事件remove在model中完成\n this._viewListeners.clear();\n this._windowListeners.clear();\n this._canvasListeners.clear();\n }\n\n release(): void {\n this.releaseEvent();\n this._option = this._container = null as any;\n // vgrammar release\n this._releaseModel();\n this._view?.release();\n this._view = null;\n this.isInited = false;\n this.isReleased = true;\n }\n\n /**\n * 释放VGrammar\n * @param removeGraphicItems 是否删除场景元素,在同步渲染,并且无动画时,必须设置为true,否则有绘图残留\n */\n releaseGrammar(removeGraphicItems: boolean = false) {\n this._releaseModel();\n if (removeGraphicItems) {\n this._view?.removeAllGraphicItems();\n }\n this._view?.removeAllGrammars();\n }\n\n protected _releaseModel() {\n // 释放model\n Object.keys(this._model).forEach(type => {\n Object.values(this._model[type] as IProductMap).forEach(grammarItemMap => {\n Object.values(grammarItemMap).forEach((item: IGrammarItem) => {\n item.removeProduct(true); // 保留 vgrammar 语法元素,下面一起清空\n });\n });\n this._model[type] = {};\n });\n }\n\n /** 添加语法元素 */\n addGrammarItem(grammarItem: IGrammarItem) {\n const product = grammarItem.getProduct();\n if (isNil(product)) {\n return;\n }\n const id = product.id();\n const type = grammarItem.grammarType;\n if (isNil(this._model[type][id])) {\n this._model[type][id] = {};\n }\n this._model[type][id][grammarItem.id] = grammarItem;\n }\n\n /** 删除语法元素 */\n removeGrammarItem(grammarItem: IGrammarItem, reserveVGrammarModel?: boolean) {\n const product = grammarItem.getProduct();\n if (isNil(product)) {\n return;\n }\n const id = product.id();\n const type = grammarItem.grammarType;\n const map = this._model[type][id];\n if (isValid(map)) {\n delete map[grammarItem.id];\n if (Object.keys(map).length === 0) {\n delete this._model[type][id];\n }\n }\n if (!reserveVGrammarModel) {\n this._view?.removeGrammar(product);\n }\n }\n\n /** 更新语法元素间的依赖关系,返回是否全部成功更新 */\n updateDepend(items?: IGrammarItem[]): boolean {\n if (isValid(items) && items.length > 0) {\n // 局部更新依赖\n return items.every(item => item.updateDepend());\n }\n // 全局更新依赖\n Object.values(this._model).forEach(productMap => {\n Object.values(productMap).forEach(grammarItemMap => {\n const grammarItems = Object.values(grammarItemMap) as IGrammarItem[];\n // 获取编译产物\n const product = grammarItems[0].getProduct();\n\n // 获取编译产物的依赖项\n const dependList = grammarItems\n .reduce((depend, item) => {\n if (item.getDepend().length > 0) {\n return depend.concat(item.getDepend());\n }\n return depend;\n }, [] as IGrammarItem[])\n .filter(grammarItem => !!grammarItem)\n .map(grammarItem => grammarItem.getProduct());\n\n // 更新依赖\n product.depend(dependList);\n });\n });\n return true;\n }\n\n private _getGlobalThis() {\n return isTrueBrowser(this._option.mode) ? globalThis : this.getStage()?.window;\n }\n}\n","import type { utilFunctionCtx } from '../typings/params';\nimport { error } from './debug';\n/**\n * @description 图片导出相关接口\n */\n\nexport function URLToImage(name: string = 'vchart', url: string) {\n const link = document.createElement('a');\n link.setAttribute('href', url);\n link.setAttribute('target', '_blank');\n link.setAttribute('download', `${name}.png`);\n link.dispatchEvent(new MouseEvent('click'));\n}\n\nexport function OffscreenCanvasToDataURL(c: OffscreenCanvas) {\n // eslint-disable-next-line promise/param-names\n return new Promise((r: (s: string) => void) => {\n c.convertToBlob().then((b: any) => {\n const reader = new FileReader();\n reader.readAsDataURL(b);\n reader.onload = () => {\n r(reader.result as string);\n };\n });\n });\n}\n\nexport async function getCanvasDataURL(c: HTMLCanvasElement | OffscreenCanvas, ctx?: utilFunctionCtx) {\n if (!c) {\n return '';\n }\n try {\n if (OffscreenCanvas !== undefined && c instanceof OffscreenCanvas) {\n return OffscreenCanvasToDataURL(c);\n }\n } catch (_error) {\n (ctx?.onError ?? error)(`getCanvasDataURL error : ${_error.toString()}`);\n }\n return (c).toDataURL();\n}\n","import { merge } from '@visactor/vutils';\nimport type { PopTipAttributes } from './type';\n\nexport const DEFAULT_THEME: PopTipAttributes = {\n visible: true,\n position: 'auto',\n titleStyle: {\n fontSize: 16,\n fill: '#08979c'\n },\n contentStyle: {\n fontSize: 12,\n fill: 'green'\n },\n panel: {\n visible: true,\n\n fill: '#e6fffb',\n size: 12,\n space: 0,\n stroke: '#87e8de',\n lineWidth: 1,\n cornerRadius: 4\n }\n};\n\nexport const theme: { poptip: PopTipAttributes } = {\n poptip: merge({}, DEFAULT_THEME)\n};\n","import { registerGroupGraphic } from '@visactor/vrender-core';\n\nfunction _registerGroup() {\n if (_registerGroup.__loaded) {\n return;\n }\n _registerGroup.__loaded = true;\n registerGroupGraphic();\n}\n\n_registerGroup.__loaded = false;\n\nexport const registerGroup = _registerGroup;\n","import type { vec2 } from '@visactor/vutils';\nimport type { ITextMeasure, TextOptionsType } from '../../../interface/text';\nimport type { TextLayoutBBox, LayoutItemType, LayoutType, TextAlignType, TextBaselineType } from '../../../interface';\n\nexport class CanvasTextLayout {\n private fontFamily: string;\n private textOptions: TextOptionsType;\n private textMeasure: ITextMeasure;\n\n constructor(fontFamily: string, options: TextOptionsType, textMeasure: ITextMeasure) {\n this.fontFamily = fontFamily;\n this.textOptions = options;\n this.textMeasure = textMeasure;\n }\n\n LayoutBBox(bbox: TextLayoutBBox, textAlign: TextAlignType, textBaseline: TextBaselineType): TextLayoutBBox {\n if (textAlign === 'left' || textAlign === 'start') {\n bbox.xOffset = 0;\n } else if (textAlign === 'center') {\n bbox.xOffset = bbox.width / -2;\n } else if (textAlign === 'right' || textAlign === 'end') {\n bbox.xOffset = -bbox.width;\n } else {\n throw new Error('非法的textAlign');\n }\n\n if (textBaseline === 'top') {\n bbox.yOffset = 0;\n } else if (textBaseline === 'middle') {\n bbox.yOffset = bbox.height / -2;\n } else if (textBaseline === 'alphabetic') {\n bbox.yOffset = bbox.height * -0.79;\n } else {\n bbox.yOffset = -bbox.height;\n }\n\n return bbox;\n }\n\n GetLayout(\n str: string,\n width: number,\n height: number,\n textAlign: TextAlignType,\n textBaseline: TextBaselineType,\n lineHeight: number,\n suffix: string,\n wordBreak: boolean,\n suffixPosition: 'start' | 'end' | 'middle'\n ): LayoutType {\n // 拆分str\n const linesLayout: LayoutItemType[] = [];\n // bbox高度可能大于totalHeight\n const bboxWH: vec2 = [width, height];\n const bboxOffset: vec2 = [0, 0];\n\n while (str.length > 0) {\n const { str: clipText } = this.textMeasure.clipTextWithSuffix(\n str,\n this.textOptions,\n width,\n suffix,\n wordBreak,\n suffixPosition\n );\n linesLayout.push({\n str: clipText,\n width: this.textMeasure.measureTextWidth(clipText, this.textOptions)\n });\n str = str.substring(clipText.length);\n }\n\n if (textAlign === 'left' || textAlign === 'start') {\n // origin[0] = 0;\n } else if (textAlign === 'center') {\n bboxOffset[0] = bboxWH[0] / -2;\n } else if (textAlign === 'right' || textAlign === 'end') {\n bboxOffset[0] = -bboxWH[0];\n }\n\n if (textBaseline === 'top') {\n // origin[1] = 0;\n } else if (textBaseline === 'middle') {\n bboxOffset[1] = bboxWH[1] / -2;\n } else if (textBaseline === 'bottom') {\n bboxOffset[1] = -bboxWH[1];\n }\n\n const bbox: TextLayoutBBox = {\n xOffset: bboxOffset[0],\n yOffset: bboxOffset[1],\n width: bboxWH[0],\n height: bboxWH[1]\n };\n\n return this.layoutWithBBox(bbox, linesLayout, textAlign, textBaseline, lineHeight);\n }\n\n /**\n * 给定拆分好的每行字符串进行布局,如果传入lineWidth,那么后面的字符就拆分\n * @param lines\n * @param lineWidth\n */\n GetLayoutByLines(\n lines: (string | number)[],\n textAlign: TextAlignType,\n textBaseline: TextBaselineType,\n lineHeight: number,\n suffix: string = '',\n wordBreak: boolean,\n lineWidth?: number,\n suffixPosition: 'start' | 'end' | 'middle' = 'end'\n ): LayoutType {\n lines = lines.map(l => l.toString()) as string[];\n const linesLayout: LayoutItemType[] = [];\n // bbox高度可能大于totalHeight\n const bboxWH: vec2 = [0, 0];\n if (typeof lineWidth === 'number' && lineWidth !== Infinity) {\n // 直接使用lineWidth,并拆分字符串\n let width: number;\n for (let i = 0, len = lines.length; i < len; i++) {\n width = Math.min(this.textMeasure.measureTextWidth(lines[i] as string, this.textOptions), lineWidth);\n linesLayout.push({\n str: this.textMeasure.clipTextWithSuffix(\n lines[i] as string,\n this.textOptions,\n width,\n suffix,\n wordBreak,\n suffixPosition\n ).str,\n width\n });\n }\n bboxWH[0] = lineWidth;\n } else {\n // 使用所有行中最长的作为lineWidth\n lineWidth = 0;\n let width: number;\n let text: string;\n for (let i = 0, len = lines.length; i < len; i++) {\n text = lines[i] as string;\n width = this.textMeasure.measureTextWidth(text, this.textOptions);\n lineWidth = Math.max(lineWidth, width);\n linesLayout.push({ str: text, width });\n }\n bboxWH[0] = lineWidth;\n }\n bboxWH[1] = linesLayout.length * lineHeight;\n\n bboxWH[0] = linesLayout.reduce((a, b) => Math.max(a, b.width), 0);\n\n const bbox: TextLayoutBBox = {\n xOffset: 0,\n yOffset: 0,\n width: bboxWH[0],\n height: bboxWH[1]\n };\n\n this.LayoutBBox(bbox, textAlign, textBaseline);\n\n return this.layoutWithBBox(bbox, linesLayout, textAlign, textBaseline, lineHeight);\n }\n\n layoutWithBBox(\n bbox: TextLayoutBBox,\n lines: LayoutItemType[],\n textAlign: TextAlignType,\n textBaseline: TextBaselineType,\n lineHeight: number\n ): LayoutType {\n const origin: vec2 = [0, 0];\n const totalLineHeight = lines.length * lineHeight; // 总高度\n // origin在y方向需要初始化,然后递增即可\n if (textBaseline === 'top') {\n // origin[1] = 0;\n } else if (textBaseline === 'middle') {\n origin[1] = (bbox.height - totalLineHeight) / 2;\n } else if (textBaseline === 'bottom') {\n origin[1] = bbox.height - totalLineHeight;\n }\n\n for (let i = 0; i < lines.length; i++) {\n this.lineOffset(bbox, lines[i], textAlign, textBaseline, lineHeight, origin);\n }\n\n return {\n bbox,\n lines,\n fontFamily: this.fontFamily,\n fontSize: this.textOptions.fontSize,\n fontWeight: this.textOptions.fontWeight,\n lineHeight,\n textAlign,\n textBaseline\n };\n }\n\n /**\n * 计算line在bbox中的位置,需要配合layoutWithBBox使用\n * @param bbox\n * @param line\n * @param textAlign\n * @param textBaseline\n * @param lineHeight\n * @param origin 这个line的左上角位置,会复用并修改\n */\n private lineOffset(\n bbox: TextLayoutBBox,\n line: LayoutItemType,\n textAlign: TextAlignType,\n textBaseline: TextBaselineType,\n lineHeight: number,\n origin: vec2\n ): LayoutItemType {\n if (textAlign === 'left' || textAlign === 'start') {\n line.leftOffset = 0;\n } else if (textAlign === 'center') {\n line.leftOffset = (bbox.width - line.width) / 2;\n } else if (textAlign === 'right' || textAlign === 'end') {\n line.leftOffset = bbox.width - line.width;\n }\n\n // line.topOffset = lineHeight * 0.79 + origin[1]; // 渲染默认使用alphabetic\n line.topOffset = (lineHeight - this.textOptions.fontSize) / 2 + this.textOptions.fontSize * 0.79 + origin[1];\n origin[1] += lineHeight;\n\n return line;\n }\n}\n","// 存放一些公共方法,公共配置\n\nimport type { ITextFontParams } from '@visactor/vutils';\nimport type { TextAlignType, TextBaselineType } from '../interface';\n\nexport function getContextFont(\n text: Partial,\n defaultAttr: Partial = {},\n fontSizeScale?: number\n): string {\n if (!fontSizeScale) {\n fontSizeScale = 1;\n }\n const {\n fontStyle = defaultAttr.fontStyle,\n fontVariant = defaultAttr.fontVariant,\n fontWeight = defaultAttr.fontWeight,\n fontSize = defaultAttr.fontSize,\n fontFamily = defaultAttr.fontFamily\n } = text;\n return (\n '' +\n (fontStyle ? fontStyle + ' ' : '') +\n (fontVariant ? fontVariant + ' ' : '') +\n (fontWeight ? fontWeight + ' ' : '') +\n fontSize * fontSizeScale +\n 'px ' +\n (fontFamily ? fontFamily : 'sans-serif')\n );\n}\n// TODO: 更好的方案\n/**\n * 用于绘制的时候偏移\n * 经验值,来源于 https://github.com/vega/vega/blob/b45cf431cd6c0d0c0e1567f087f9b3b55bc236fa/packages/vega-scenegraph/src/util/text.js\n * @param baseline\n * @param h\n * @returns\n */\nexport function textDrawOffsetY(baseline: TextBaselineType, h: number): number {\n const offset =\n baseline === 'top'\n ? Math.ceil(0.79 * h)\n : baseline === 'middle'\n ? Math.round(0.3 * h)\n : baseline === 'bottom'\n ? Math.round(-0.21 * h)\n : 0;\n return offset;\n}\n\n/**\n * 用于绘制的时候偏移\n * @param textAlign\n * @param width\n * @returns\n */\nexport function textDrawOffsetX(textAlign: TextAlignType, width: number): number {\n if (textAlign === 'end' || textAlign === 'right') {\n return -width;\n } else if (textAlign === 'center') {\n return -width / 2;\n }\n return 0;\n}\n\n/**\n * 用于计算布局的偏移\n * 经验值,来源于 https://github.com/vega/vega/blob/b45cf431cd6c0d0c0e1567f087f9b3b55bc236fa/packages/vega-scenegraph/src/util/text.js\n * @param baseline\n * @param lineHeight\n * @returns\n */\nexport function textLayoutOffsetY(\n baseline: TextBaselineType,\n lineHeight: number,\n fontSize: number,\n buf: number = 0\n): number {\n if (baseline === 'middle') {\n return -lineHeight / 2;\n }\n if (baseline === 'top') {\n return 0;\n }\n if (baseline === 'bottom') {\n return buf - lineHeight;\n }\n if (!baseline || baseline === 'alphabetic') {\n if (!fontSize) {\n fontSize = lineHeight;\n }\n return -(lineHeight - fontSize) / 2 - 0.79 * fontSize;\n }\n return 0;\n}\n","import { max, type AABBBounds, type OBBBounds, isArray } from '@visactor/vutils';\nimport { getContextFont, textDrawOffsetX, textLayoutOffsetY } from '../common/text';\nimport { CanvasTextLayout } from '../core/contributions/textMeasure/layout';\nimport { application } from '../application';\nimport type { IText, ITextCache, ITextGraphicAttribute, LayoutItemType, LayoutType } from '../interface';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { getTheme } from './theme';\nimport { calculateLineHeight, parsePadding } from '../common/utils';\nimport { TEXT_NUMBER_TYPE } from './constants';\nimport { TextDirection, verticalLayout } from './tools';\n\nconst TEXT_UPDATE_TAG_KEY = [\n 'text',\n 'maxLineWidth',\n // 'textAlign',\n // 'textBaseline',\n 'heightLimit',\n 'lineClamp',\n 'fontSize',\n 'fontFamily',\n 'fontWeight',\n 'ellipsis',\n 'lineHeight',\n 'direction',\n 'wordBreak',\n 'heightLimit',\n 'lineClamp',\n ...GRAPHIC_UPDATE_TAG_KEY\n];\n\nexport class Text extends Graphic implements IText {\n type: 'text' = 'text';\n\n static NOWORK_ANIMATE_ATTR = {\n ellipsis: 1,\n wordBreak: 1,\n direction: 1,\n textAlign: 1,\n textBaseline: 1,\n fontFamily: 1,\n fontWeight: 1,\n ...NOWORK_ANIMATE_ATTR\n };\n\n cache: ITextCache;\n _font: string;\n\n get font(): string {\n const textTheme = getTheme(this).text;\n if (!this._font) {\n this._font = getContextFont(this.attribute, textTheme);\n }\n return this._font as string;\n }\n\n get clipedText(): string | undefined {\n const attribute = this.attribute;\n const textTheme = getTheme(this).text;\n if (!this.isSimplify()) {\n return undefined;\n }\n const { maxLineWidth = textTheme.maxLineWidth } = attribute;\n if (!Number.isFinite(maxLineWidth)) {\n return (attribute.text ?? textTheme.text).toString();\n }\n this.tryUpdateAABBBounds();\n return this.cache.clipedText;\n }\n get clipedWidth(): number | undefined {\n if (!this.isSimplify()) {\n return undefined;\n }\n this.tryUpdateAABBBounds();\n return this.cache.clipedWidth;\n }\n get cliped(): boolean | undefined {\n const textTheme = getTheme(this).text;\n const attribute = this.attribute;\n if (this.isMultiLine) {\n return undefined;\n }\n const { maxLineWidth = textTheme.maxLineWidth } = attribute;\n if (!Number.isFinite(maxLineWidth)) {\n return false;\n }\n this.tryUpdateAABBBounds();\n if (attribute.direction === 'vertical' && this.cache.verticalList && this.cache.verticalList[0]) {\n return this.cache.verticalList[0].map(item => item.text).join('') !== attribute.text.toString();\n }\n if (this.clipedText == null) {\n return false;\n }\n return this.clipedText !== attribute.text.toString();\n }\n get multilineLayout(): LayoutType | undefined {\n if (!this.isMultiLine) {\n return undefined;\n }\n this.tryUpdateAABBBounds();\n return this.cache.layoutData;\n }\n\n // 是否是简单文字\n // 单行,横排\n private isSimplify(): boolean {\n return !this.isMultiLine && this.attribute.direction !== 'vertical';\n }\n get isMultiLine(): boolean {\n return Array.isArray(this.attribute.text) || this.attribute.whiteSpace === 'normal';\n }\n\n constructor(params: ITextGraphicAttribute = { text: '', fontSize: 16 }) {\n super(params);\n this.numberType = TEXT_NUMBER_TYPE;\n this.cache = {};\n }\n\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n protected _isValid(): boolean {\n const { text } = this.attribute;\n if (isArray(text)) {\n return !(text as any[]).every((t: any) => t == null || t === '');\n }\n return text != null && text !== '';\n }\n\n protected doUpdateAABBBounds(): AABBBounds {\n const textTheme = getTheme(this).text;\n this._AABBBounds.setValue(Infinity, Infinity, -Infinity, -Infinity);\n const attribute = this.attribute;\n const bounds = application.graphicService.updateTextAABBBounds(\n attribute,\n textTheme,\n this._AABBBounds,\n this\n ) as AABBBounds;\n\n const { boundsPadding = textTheme.boundsPadding } = this.attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray);\n }\n\n this.clearUpdateBoundTag();\n return bounds;\n }\n\n /**\n * 计算多行文字的bounds,缓存每行文字的布局位置\n * 自动折行params.text是数组,因此只重新updateMultilineAABBBounds\n * @param text\n */\n updateWrapAABBBounds(text: (number | string) | (number | string)[]) {\n const textTheme = getTheme(this).text;\n const {\n fontFamily = textTheme.fontFamily,\n textAlign = textTheme.textAlign,\n textBaseline = textTheme.textBaseline,\n fontSize = textTheme.fontSize,\n ellipsis = textTheme.ellipsis,\n maxLineWidth,\n stroke = textTheme.stroke,\n lineWidth = textTheme.lineWidth,\n wordBreak = textTheme.wordBreak,\n fontWeight = textTheme.fontWeight,\n // widthLimit,\n ignoreBuf = textTheme.ignoreBuf,\n suffixPosition = textTheme.suffixPosition,\n heightLimit = 0,\n lineClamp\n } = this.attribute;\n const lineHeight =\n calculateLineHeight(this.attribute.lineHeight, this.attribute.fontSize || textTheme.fontSize) ??\n (this.attribute.fontSize || textTheme.fontSize);\n const buf = ignoreBuf ? 0 : 2;\n if (!this.shouldUpdateShape() && this.cache?.layoutData) {\n const bbox = this.cache.layoutData.bbox;\n this._AABBBounds.set(bbox.xOffset, bbox.yOffset, bbox.xOffset + bbox.width, bbox.yOffset + bbox.height);\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n return this._AABBBounds;\n }\n\n const textMeasure = application.graphicUtil.textMeasure;\n const layoutObj = new CanvasTextLayout(fontFamily, { fontSize, fontWeight, fontFamily }, textMeasure as any) as any;\n\n // layoutObj内逻辑\n const lines = isArray(text) ? (text.map(l => l.toString()) as string[]) : [text.toString()];\n const linesLayout: LayoutItemType[] = [];\n const bboxWH: [number, number] = [0, 0];\n\n let lineCountLimit = Infinity;\n if (heightLimit > 0) {\n lineCountLimit = Math.max(Math.floor(heightLimit / lineHeight), 1);\n }\n if (lineClamp) {\n // 处理行数限制\n lineCountLimit = Math.min(lineCountLimit, lineClamp);\n }\n\n if (typeof maxLineWidth === 'number' && maxLineWidth !== Infinity) {\n // widthLimit > 0\n if (maxLineWidth > 0) {\n for (let i = 0; i < lines.length; i++) {\n const str = lines[i] as string;\n let needCut = true;\n // // 测量当前行宽度\n // width = Math.min(\n // layoutObj.textMeasure.measureTextWidth(str, layoutObj.textOptions),\n // maxLineWidth\n // );\n\n // 判断是否超过高度限制\n if (i === lineCountLimit - 1) {\n // 当前行为最后一行\n const clip = layoutObj.textMeasure.clipTextWithSuffix(\n str,\n layoutObj.textOptions,\n maxLineWidth,\n ellipsis,\n false,\n suffixPosition\n );\n linesLayout.push({\n str: clip.str,\n width: clip.width\n });\n break; // 不处理后续行\n }\n\n // 测量截断位置\n const clip = layoutObj.textMeasure.clipText(\n str,\n layoutObj.textOptions,\n maxLineWidth,\n wordBreak === 'break-word'\n );\n if (str !== '' && clip.str === '') {\n if (ellipsis) {\n const clipEllipsis = layoutObj.textMeasure.clipTextWithSuffix(\n str,\n layoutObj.textOptions,\n maxLineWidth,\n ellipsis,\n false,\n suffixPosition\n );\n clip.str = clipEllipsis.str ?? '';\n clip.width = clipEllipsis.width ?? 0;\n } else {\n // 宽度限制不足一个字符,不显示\n clip.str = '';\n clip.width = 0;\n }\n needCut = false;\n }\n\n linesLayout.push({\n str: clip.str,\n width: clip.width\n });\n if (clip.str.length === str.length) {\n // 不需要截断\n } else if (needCut) {\n const newStr = str.substring(clip.str.length);\n lines.splice(i + 1, 0, newStr);\n }\n }\n }\n // bboxWH[0] = maxLineWidth;\n let maxWidth = 0;\n linesLayout.forEach(layout => {\n maxWidth = Math.max(maxWidth, layout.width);\n });\n bboxWH[0] = maxWidth;\n } else {\n // 使用所有行中最长的作为lineWidth\n let lineWidth = 0;\n let width: number;\n let text: string;\n for (let i = 0, len = lines.length; i < len; i++) {\n // 判断是否超过高度限制\n if (i === lineCountLimit - 1) {\n // 当前行为最后一行\n const clip = layoutObj.textMeasure.clipTextWithSuffix(\n lines[i],\n layoutObj.textOptions,\n maxLineWidth,\n ellipsis,\n false,\n suffixPosition\n );\n linesLayout.push({\n str: clip.str,\n width: clip.width\n });\n lineWidth = Math.max(lineWidth, clip.width);\n break; // 不处理后续行\n }\n\n text = lines[i] as string;\n width = layoutObj.textMeasure.measureTextWidth(text, layoutObj.textOptions, wordBreak === 'break-word');\n lineWidth = Math.max(lineWidth, width);\n linesLayout.push({ str: text, width });\n }\n bboxWH[0] = lineWidth;\n }\n bboxWH[1] = linesLayout.length * (lineHeight + buf);\n\n const bbox = {\n xOffset: 0,\n yOffset: 0,\n width: bboxWH[0],\n height: bboxWH[1]\n };\n\n layoutObj.LayoutBBox(bbox, textAlign, textBaseline as any);\n\n const layoutData = layoutObj.layoutWithBBox(bbox, linesLayout, textAlign, textBaseline as any, lineHeight);\n\n // const layoutData = layoutObj.GetLayoutByLines(\n // text,\n // textAlign,\n // textBaseline as any,\n // lineHeight,\n // ellipsis === true ? (DefaultTextAttribute.ellipsis as string) : ellipsis || undefined,\n // maxLineWidth\n // );\n // const { bbox } = layoutData;\n this.cache.layoutData = layoutData;\n this.clearUpdateShapeTag();\n this._AABBBounds.set(bbox.xOffset, bbox.yOffset, bbox.xOffset + bbox.width, bbox.yOffset + bbox.height);\n\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n\n return this._AABBBounds;\n }\n\n /**\n * 计算单行文字的bounds,可以缓存长度以及截取的文字\n * @param text\n */\n updateSingallineAABBBounds(text: number | string): AABBBounds {\n const textTheme = getTheme(this).text;\n const { direction = textTheme.direction } = this.attribute;\n\n return direction === 'horizontal'\n ? this.updateHorizontalSinglelineAABBBounds(text)\n : this.updateVerticalSinglelineAABBBounds(text);\n }\n\n /**\n * 计算单行文字的bounds,可以缓存长度以及截取的文字\n * @param text\n */\n updateMultilineAABBBounds(text: (number | string)[]): AABBBounds {\n const textTheme = getTheme(this).text;\n const { direction = textTheme.direction } = this.attribute;\n\n return direction === 'horizontal'\n ? this.updateHorizontalMultilineAABBBounds(text)\n : this.updateVerticalMultilineAABBBounds(text);\n }\n\n /**\n * 计算单行文字的bounds,可以缓存长度以及截取的文字\n * @param text\n */\n updateHorizontalSinglelineAABBBounds(text: number | string): AABBBounds {\n const textTheme = getTheme(this).text;\n const { wrap = textTheme.wrap } = this.attribute;\n if (wrap) {\n return this.updateWrapAABBBounds([text]);\n }\n\n const textMeasure = application.graphicUtil.textMeasure;\n let width: number;\n let str: string;\n const attribute = this.attribute;\n const {\n maxLineWidth = textTheme.maxLineWidth,\n ellipsis = textTheme.ellipsis,\n textAlign = textTheme.textAlign,\n textBaseline = textTheme.textBaseline,\n fontFamily = textTheme.fontFamily,\n fontSize = textTheme.fontSize,\n fontWeight = textTheme.fontWeight,\n stroke = textTheme.stroke,\n lineWidth = textTheme.lineWidth,\n // wordBreak = textTheme.wordBreak,\n ignoreBuf = textTheme.ignoreBuf,\n whiteSpace = textTheme.whiteSpace,\n suffixPosition = textTheme.suffixPosition\n } = attribute;\n if (whiteSpace === 'normal') {\n return this.updateWrapAABBBounds(text);\n }\n const buf = ignoreBuf ? 0 : Math.max(2, fontSize * 0.075);\n const textFontSize = attribute.fontSize || textTheme.fontSize;\n const lineHeight = calculateLineHeight(attribute.lineHeight, textFontSize) ?? textFontSize + buf;\n if (!this.shouldUpdateShape() && this.cache) {\n width = this.cache.clipedWidth ?? 0;\n const dx = textDrawOffsetX(textAlign, width);\n const dy = textLayoutOffsetY(textBaseline, lineHeight, fontSize);\n this._AABBBounds.set(dx, dy, dx + width, dy + lineHeight);\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n return this._AABBBounds;\n }\n\n if (Number.isFinite(maxLineWidth)) {\n if (ellipsis) {\n const strEllipsis = (ellipsis === true ? textTheme.ellipsis : ellipsis) as string;\n const data = textMeasure.clipTextWithSuffix(\n text.toString(),\n { fontSize, fontWeight, fontFamily },\n maxLineWidth,\n strEllipsis,\n false,\n suffixPosition\n );\n str = data.str;\n width = data.width;\n } else {\n const data = textMeasure.clipText(text.toString(), { fontSize, fontWeight, fontFamily }, maxLineWidth, false);\n str = data.str;\n width = data.width;\n }\n this.cache.clipedText = str;\n this.cache.clipedWidth = width;\n // todo 计算原本的宽度\n } else {\n width = textMeasure.measureTextWidth(text.toString(), { fontSize, fontWeight, fontFamily });\n this.cache.clipedText = text.toString();\n this.cache.clipedWidth = width;\n }\n this.clearUpdateShapeTag();\n\n const dx = textDrawOffsetX(textAlign, width);\n let lh = lineHeight;\n if (application.global && application.global.isSafari()) {\n // 如果是safari,那么需要额外增加高度\n lh += fontSize * 0.2;\n }\n const dy = textLayoutOffsetY(textBaseline, lh, fontSize, buf);\n this._AABBBounds.set(dx, dy, dx + width, dy + lh);\n\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n\n return this._AABBBounds;\n }\n\n getBaselineMapAlign(): Record {\n return Text.baselineMapAlign;\n }\n\n getAlignMapBaseline(): Record {\n return Text.alignMapBaseline;\n }\n\n static baselineMapAlign = {\n top: 'left',\n bottom: 'right',\n middle: 'center'\n };\n\n static alignMapBaseline = {\n left: 'top',\n right: 'bottom',\n center: 'middle'\n };\n\n /**\n * 计算垂直布局的单行文字的bounds,可以缓存长度以及截取的文字\n * @param text\n */\n updateVerticalSinglelineAABBBounds(text: number | string): AABBBounds {\n const textTheme = getTheme(this).text;\n const textMeasure = application.graphicUtil.textMeasure;\n let width: number;\n let str: string;\n const attribute = this.attribute;\n const { ignoreBuf = textTheme.ignoreBuf } = attribute;\n const buf = ignoreBuf ? 0 : 2;\n const {\n maxLineWidth = textTheme.maxLineWidth,\n ellipsis = textTheme.ellipsis,\n fontSize = textTheme.fontSize,\n fontWeight = textTheme.fontWeight,\n fontFamily = textTheme.fontFamily,\n stroke = textTheme.stroke,\n lineWidth = textTheme.lineWidth,\n verticalMode = textTheme.verticalMode,\n suffixPosition = textTheme.suffixPosition\n } = attribute;\n\n const lineHeight =\n calculateLineHeight(attribute.lineHeight, attribute.fontSize || textTheme.fontSize) ??\n (attribute.fontSize || textTheme.fontSize) + buf;\n\n let { textAlign = textTheme.textAlign, textBaseline = textTheme.textBaseline } = attribute;\n if (!verticalMode) {\n const t = textAlign;\n textAlign = Text.baselineMapAlign[textBaseline] ?? 'left';\n textBaseline = Text.alignMapBaseline[t] ?? 'top';\n }\n if (!this.shouldUpdateShape() && this.cache) {\n width = this.cache.clipedWidth;\n const dx = textDrawOffsetX(textAlign, width);\n const dy = textLayoutOffsetY(textBaseline, lineHeight, fontSize);\n this._AABBBounds.set(dy, dx, dy + lineHeight, dx + width);\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n return this._AABBBounds;\n }\n\n let verticalList: { text: string; width?: number; direction: TextDirection }[][] = [\n verticalLayout(text.toString())\n ];\n if (Number.isFinite(maxLineWidth)) {\n if (ellipsis) {\n const strEllipsis = (ellipsis === true ? textTheme.ellipsis : ellipsis) as string;\n const data = textMeasure.clipTextWithSuffixVertical(\n verticalList[0],\n { fontSize, fontWeight, fontFamily },\n maxLineWidth,\n strEllipsis,\n false,\n suffixPosition\n );\n verticalList = [data.verticalList];\n width = data.width;\n } else {\n const data = textMeasure.clipTextVertical(\n verticalList[0],\n { fontSize, fontWeight, fontFamily },\n maxLineWidth,\n false\n );\n verticalList = [data.verticalList];\n width = data.width;\n }\n this.cache.verticalList = verticalList;\n this.cache.clipedWidth = width;\n // todo 计算原本的宽度\n } else {\n width = 0;\n verticalList[0].forEach(t => {\n const w =\n t.direction === TextDirection.HORIZONTAL\n ? fontSize\n : textMeasure.measureTextWidth(t.text, { fontSize, fontWeight, fontFamily });\n\n width += w;\n t.width = w;\n });\n this.cache.verticalList = verticalList;\n this.cache.clipedWidth = width;\n }\n this.clearUpdateShapeTag();\n\n const dx = textDrawOffsetX(textAlign, width);\n const dy = textLayoutOffsetY(textBaseline, lineHeight, fontSize);\n this._AABBBounds.set(dy, dx, dy + lineHeight, dx + width);\n\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n\n return this._AABBBounds;\n }\n\n /**\n * 计算多行文字的bounds,缓存每行文字的布局位置\n * @param text\n */\n updateHorizontalMultilineAABBBounds(text: (number | string)[]): AABBBounds {\n const textTheme = getTheme(this).text;\n const { wrap = textTheme.wrap } = this.attribute;\n if (wrap) {\n return this.updateWrapAABBBounds(text);\n }\n\n const attribute = this.attribute;\n const {\n fontFamily = textTheme.fontFamily,\n textAlign = textTheme.textAlign,\n textBaseline = textTheme.textBaseline,\n fontSize = textTheme.fontSize,\n fontWeight = textTheme.fontWeight,\n ellipsis = textTheme.ellipsis,\n maxLineWidth,\n stroke = textTheme.stroke,\n lineWidth = textTheme.lineWidth,\n whiteSpace = textTheme.whiteSpace,\n suffixPosition = textTheme.suffixPosition\n } = attribute;\n const lineHeight =\n calculateLineHeight(attribute.lineHeight, attribute.fontSize || textTheme.fontSize) ??\n (attribute.fontSize || textTheme.fontSize);\n if (whiteSpace === 'normal') {\n return this.updateWrapAABBBounds(text);\n }\n if (!this.shouldUpdateShape() && this.cache?.layoutData) {\n const bbox = this.cache.layoutData.bbox;\n this._AABBBounds.set(bbox.xOffset, bbox.yOffset, bbox.xOffset + bbox.width, bbox.yOffset + bbox.height);\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n return this._AABBBounds;\n }\n const textMeasure = application.graphicUtil.textMeasure;\n const layoutObj = new CanvasTextLayout(fontFamily, { fontSize, fontWeight, fontFamily }, textMeasure);\n const layoutData = layoutObj.GetLayoutByLines(\n text,\n textAlign,\n textBaseline as any,\n lineHeight,\n ellipsis === true ? (textTheme.ellipsis as string) : ellipsis || undefined,\n false,\n maxLineWidth,\n suffixPosition\n );\n const { bbox } = layoutData;\n this.cache.layoutData = layoutData;\n this.clearUpdateShapeTag();\n\n this._AABBBounds.set(bbox.xOffset, bbox.yOffset, bbox.xOffset + bbox.width, bbox.yOffset + bbox.height);\n\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n\n return this._AABBBounds;\n }\n\n /**\n * 计算垂直布局的多行文字的bounds,可以缓存长度以及截取的文字\n * @param text\n */\n updateVerticalMultilineAABBBounds(text: (number | string)[]): AABBBounds {\n const textTheme = getTheme(this).text;\n const textMeasure = application.graphicUtil.textMeasure;\n let width: number;\n const attribute = this.attribute;\n const { ignoreBuf = textTheme.ignoreBuf } = attribute;\n const buf = ignoreBuf ? 0 : 2;\n const {\n maxLineWidth = textTheme.maxLineWidth,\n ellipsis = textTheme.ellipsis,\n fontFamily = textTheme.fontFamily,\n fontSize = textTheme.fontSize,\n fontWeight = textTheme.fontWeight,\n stroke = textTheme.stroke,\n lineWidth = textTheme.lineWidth,\n // wordBreak = textTheme.wordBreak,\n verticalMode = textTheme.verticalMode,\n suffixPosition = textTheme.suffixPosition\n } = attribute;\n const lineHeight =\n calculateLineHeight(attribute.lineHeight, attribute.fontSize || textTheme.fontSize) ??\n (attribute.fontSize || textTheme.fontSize) + buf;\n let { textAlign = textTheme.textAlign, textBaseline = textTheme.textBaseline } = attribute;\n if (!verticalMode) {\n const t = textAlign;\n textAlign = Text.baselineMapAlign[textBaseline] ?? 'left';\n textBaseline = Text.alignMapBaseline[t] ?? 'top';\n }\n width = 0;\n if (!this.shouldUpdateShape() && this.cache) {\n this.cache.verticalList.forEach(item => {\n const w = item.reduce((a, b) => a + b.width, 0);\n width = max(w, width);\n });\n const dx = textDrawOffsetX(textAlign, width);\n const height = this.cache.verticalList.length * lineHeight;\n const dy = textLayoutOffsetY(textBaseline, height, fontSize);\n this._AABBBounds.set(dy, dx, dy + height, dx + width);\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n return this._AABBBounds;\n }\n\n const verticalLists: { text: string; width?: number; direction: TextDirection }[][] = text.map(str => {\n return verticalLayout(str.toString());\n });\n verticalLists.forEach((verticalData, i) => {\n if (Number.isFinite(maxLineWidth)) {\n if (ellipsis) {\n const strEllipsis = (ellipsis === true ? textTheme.ellipsis : ellipsis) as string;\n const data = textMeasure.clipTextWithSuffixVertical(\n verticalData,\n { fontSize, fontWeight, fontFamily },\n maxLineWidth,\n strEllipsis,\n false,\n suffixPosition\n );\n verticalLists[i] = data.verticalList;\n width = data.width;\n } else {\n const data = textMeasure.clipTextVertical(\n verticalData,\n { fontSize, fontWeight, fontFamily },\n maxLineWidth,\n false\n );\n verticalLists[i] = data.verticalList;\n width = data.width;\n }\n // this.cache.clipedWidth = width;\n // todo 计算原本的宽度\n } else {\n width = 0;\n verticalData.forEach(t => {\n const w =\n t.direction === TextDirection.HORIZONTAL\n ? fontSize\n : textMeasure.measureTextWidth(t.text, { fontSize, fontWeight, fontFamily });\n\n width += w;\n t.width = w;\n });\n }\n });\n this.cache.verticalList = verticalLists;\n this.clearUpdateShapeTag();\n\n this.cache.verticalList.forEach(item => {\n const w = item.reduce((a, b) => a + b.width, 0);\n width = max(w, width);\n });\n\n const dx = textDrawOffsetX(textAlign, width);\n const height = this.cache.verticalList.length * lineHeight;\n const dy = textLayoutOffsetY(textBaseline, height, fontSize);\n this._AABBBounds.set(dy, dx, dy + height, dx + width);\n\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n\n return this._AABBBounds;\n }\n\n protected tryUpdateOBBBounds(): OBBBounds {\n throw new Error('暂不支持');\n }\n\n getDefaultAttribute(name: string) {\n const textTheme = getTheme(this).text;\n return textTheme[name];\n }\n\n protected needUpdateTags(keys: string[], k = TEXT_UPDATE_TAG_KEY): boolean {\n return super.needUpdateTags(keys, k);\n }\n protected needUpdateTag(key: string, k = TEXT_UPDATE_TAG_KEY): boolean {\n return super.needUpdateTag(key, k);\n }\n\n clone(): Text {\n return new Text({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record {\n return Text.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createText(attributes: ITextGraphicAttribute): IText {\n return new Text(attributes);\n}\n\n// addAttributeToPrototype(DefaultLineStyle, Text, PURE_STYLE_KEY);\n","import { isArray } from '@visactor/vutils';\nimport { CanvasTextLayout } from '../core/contributions/textMeasure/layout';\nimport type { IText, ITextGraphicAttribute, IWrapTextGraphicAttribute, LayoutItemType } from '../interface';\nimport { application } from '../application';\nimport { Text } from './text';\nimport { getTheme } from './theme';\nimport { calculateLineHeight } from '../common/utils';\n\nconst WRAP_TEXT_UPDATE_TAG_KEY = ['heightLimit', 'lineClamp'];\n\n/* WrapText功能\n * 1. 按照宽度限制自动折行或显示省略号(maxLineWidth)\n * 2. 高度限制控制显示内容及省略号(heightLimit)\n * 3. 按照行数限制显示内容及省略号(lineClamp)\n */\nexport class WrapText extends Text {\n declare attribute: IWrapTextGraphicAttribute;\n\n constructor(params: ITextGraphicAttribute) {\n super({ ...params, wrap: true });\n }\n\n protected _isValid(): boolean {\n const { text } = this.attribute;\n if (isArray(text)) {\n return !(text as any[]).every((t: any) => t == null || t === '');\n }\n return text != null && text !== '';\n }\n\n /**\n * 计算多行文字的bounds,缓存每行文字的布局位置\n * 自动折行params.text是数组,因此只重新updateMultilineAABBBounds\n * @param text\n */\n updateMultilineAABBBounds(text: (number | string)[]) {\n const textTheme = getTheme(this).text;\n const {\n fontFamily = textTheme.fontFamily,\n textAlign = textTheme.textAlign,\n textBaseline = textTheme.textBaseline,\n fontSize = textTheme.fontSize,\n ellipsis = textTheme.ellipsis,\n maxLineWidth,\n stroke = textTheme.stroke,\n lineWidth = textTheme.lineWidth,\n wordBreak = textTheme.wordBreak,\n fontWeight = textTheme.fontWeight,\n // widthLimit,\n ignoreBuf = textTheme.ignoreBuf,\n heightLimit = 0,\n suffixPosition = textTheme.suffixPosition,\n lineClamp\n } = this.attribute;\n const lineHeight =\n calculateLineHeight(this.attribute.lineHeight, this.attribute.fontSize || textTheme.fontSize) ??\n (this.attribute.fontSize || textTheme.fontSize);\n const buf = ignoreBuf ? 0 : 2;\n if (!this.shouldUpdateShape() && this.cache?.layoutData) {\n const bbox = this.cache.layoutData.bbox;\n this._AABBBounds.set(bbox.xOffset, bbox.yOffset, bbox.xOffset + bbox.width, bbox.yOffset + bbox.height);\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n return this._AABBBounds;\n }\n\n const textMeasure = application.graphicUtil.textMeasure;\n const layoutObj = new CanvasTextLayout(fontFamily, { fontSize, fontWeight, fontFamily }, textMeasure as any) as any;\n\n // layoutObj内逻辑\n const lines = text.map(l => l.toString()) as string[];\n const linesLayout: LayoutItemType[] = [];\n const bboxWH: [number, number] = [0, 0];\n\n let lineCountLimit = Infinity;\n if (heightLimit > 0) {\n lineCountLimit = Math.max(Math.floor(heightLimit / lineHeight), 1);\n }\n if (lineClamp) {\n // 处理行数限制\n lineCountLimit = Math.min(lineCountLimit, lineClamp);\n }\n\n if (typeof maxLineWidth === 'number' && maxLineWidth !== Infinity) {\n // widthLimit > 0\n if (maxLineWidth > 0) {\n for (let i = 0; i < lines.length; i++) {\n const str = lines[i] as string;\n let needCut = true;\n // // 测量当前行宽度\n // width = Math.min(\n // layoutObj.textMeasure.measureTextWidth(str, layoutObj.textOptions),\n // maxLineWidth\n // );\n\n // 判断是否超过高度限制\n if (i === lineCountLimit - 1) {\n // 当前行为最后一行\n const clip = layoutObj.textMeasure.clipTextWithSuffix(\n str,\n layoutObj.textOptions,\n maxLineWidth,\n ellipsis,\n false,\n suffixPosition\n );\n linesLayout.push({\n str: clip.str,\n width: clip.width\n });\n break; // 不处理后续行\n }\n\n // 测量截断位置\n const clip = layoutObj.textMeasure.clipText(\n str,\n layoutObj.textOptions,\n maxLineWidth,\n wordBreak === 'break-word'\n );\n if (str !== '' && clip.str === '') {\n if (ellipsis) {\n const clipEllipsis = layoutObj.textMeasure.clipTextWithSuffix(\n str,\n layoutObj.textOptions,\n maxLineWidth,\n ellipsis,\n false,\n suffixPosition\n );\n clip.str = clipEllipsis.str ?? '';\n clip.width = clipEllipsis.width ?? 0;\n } else {\n // 宽度限制不足一个字符,不显示\n clip.str = '';\n clip.width = 0;\n }\n needCut = false;\n }\n\n linesLayout.push({\n str: clip.str,\n width: clip.width\n });\n if (clip.str.length === str.length) {\n // 不需要截断\n } else if (needCut) {\n const newStr = str.substring(clip.str.length);\n lines.splice(i + 1, 0, newStr);\n }\n }\n }\n // bboxWH[0] = maxLineWidth;\n let maxWidth = 0;\n linesLayout.forEach(layout => {\n maxWidth = Math.max(maxWidth, layout.width);\n });\n bboxWH[0] = maxWidth;\n } else {\n // 使用所有行中最长的作为lineWidth\n let lineWidth = 0;\n let width: number;\n let text: string;\n for (let i = 0, len = lines.length; i < len; i++) {\n // 判断是否超过高度限制\n if (i === lineCountLimit - 1) {\n // 当前行为最后一行\n const clip = layoutObj.textMeasure.clipTextWithSuffix(\n lines[i],\n layoutObj.textOptions,\n maxLineWidth,\n ellipsis,\n false,\n suffixPosition\n );\n linesLayout.push({\n str: clip.str,\n width: clip.width\n });\n lineWidth = Math.max(lineWidth, clip.width);\n break; // 不处理后续行\n }\n\n text = lines[i] as string;\n width = layoutObj.textMeasure.measureTextWidth(text, layoutObj.textOptions, wordBreak === 'break-word');\n lineWidth = Math.max(lineWidth, width);\n linesLayout.push({ str: text, width });\n }\n bboxWH[0] = lineWidth;\n }\n bboxWH[1] = linesLayout.length * (lineHeight + buf);\n\n const bbox = {\n xOffset: 0,\n yOffset: 0,\n width: bboxWH[0],\n height: bboxWH[1]\n };\n\n layoutObj.LayoutBBox(bbox, textAlign, textBaseline as any);\n\n const layoutData = layoutObj.layoutWithBBox(bbox, linesLayout, textAlign, textBaseline as any, lineHeight);\n\n // const layoutData = layoutObj.GetLayoutByLines(\n // text,\n // textAlign,\n // textBaseline as any,\n // lineHeight,\n // ellipsis === true ? (DefaultTextAttribute.ellipsis as string) : ellipsis || undefined,\n // maxLineWidth\n // );\n // const { bbox } = layoutData;\n this.cache.layoutData = layoutData;\n this.clearUpdateShapeTag();\n this._AABBBounds.set(bbox.xOffset, bbox.yOffset, bbox.xOffset + bbox.width, bbox.yOffset + bbox.height);\n\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n\n return this._AABBBounds;\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n for (let i = 0; i < WRAP_TEXT_UPDATE_TAG_KEY.length; i++) {\n const attrKey = WRAP_TEXT_UPDATE_TAG_KEY[i];\n if (keys.indexOf(attrKey) !== -1) {\n return true;\n }\n }\n return super.needUpdateTags(keys);\n }\n\n protected needUpdateTag(key: string): boolean {\n for (let i = 0; i < WRAP_TEXT_UPDATE_TAG_KEY.length; i++) {\n const attrKey = WRAP_TEXT_UPDATE_TAG_KEY[i];\n if (key === attrKey) {\n return true;\n }\n }\n return super.needUpdateTag(key);\n }\n\n getNoWorkAnimateAttr(): Record {\n return WrapText.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createWrapText(attributes: ITextGraphicAttribute): IText {\n return new WrapText(attributes);\n}\n","import { registerWrapTextGraphic } from '@visactor/vrender-core';\n\nfunction _registerWrapText() {\n if (_registerWrapText.__loaded) {\n return;\n }\n _registerWrapText.__loaded = true;\n registerWrapTextGraphic();\n}\n_registerWrapText.__loaded = false;\n\nexport const registerWrapText = _registerWrapText;\n","import type { IBoundsLike } from '@visactor/vutils';\nimport { isNumber } from '@visactor/vutils';\n\nexport class BaseSymbol {\n bounds(size: number | [number, number], bounds: IBoundsLike) {\n if (isNumber(size)) {\n const halfS = size / 2;\n bounds.x1 = -halfS;\n bounds.x2 = halfS;\n bounds.y1 = -halfS;\n bounds.y2 = halfS;\n } else {\n bounds.x1 = -size[0] / 2;\n bounds.x2 = size[0] / 2;\n bounds.y1 = -size[1] / 2;\n bounds.y2 = size[1] / 2;\n }\n }\n}\n","import type { IBounds } from '@visactor/vutils';\nimport { tau } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass, IPath2D } from '../../interface';\nimport { BaseSymbol } from './base';\n\n/**\n * \n *Copyright 2010-2021 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n// 借鉴自d3\n// https://github.com/d3/d3-shape/blob/main/src/symbol/circle.js\nexport function circle(ctx: IContext2d, r: number, x: number, y: number, z?: number) {\n // ctx.moveTo(r, 0);\n if (z) {\n ctx.arc(x, y, r, 0, tau, false, z);\n } else {\n ctx.arc(x, y, r, 0, tau);\n }\n return false;\n}\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class CircleSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'circle';\n pathStr: string = 'M0.5,0A0.5,0.5,0,1,1,-0.5,0A0.5,0.5,0,1,1,0.5,0';\n\n draw(ctx: IContext2d, size: number, x: number, y: number, z?: number) {\n const r = size / 2;\n return circle(ctx, r, x, y, z);\n }\n\n drawOffset(ctx: IContext2d, size: number, x: number, y: number, offset: number, z?: number) {\n const r = size / 2 + offset;\n return circle(ctx, r, x, y, z);\n }\n\n drawToSvgPath(size: number, x: number, y: number, z?: number): string {\n const r = size / 2;\n return `M ${x - r}, ${y} a ${r},${r} 0 1,0 ${r * 2},0 a ${r},${r} 0 1,0 -${r * 2},0`;\n }\n}\n\nexport default new CircleSymbol();\n","import type { IBounds } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass } from '../../interface';\nimport { BaseSymbol } from './base';\n\n/**\n * \n *Copyright 2010-2021 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n// 借鉴自d3\n// https://github.com/d3/d3-shape/blob/main/src/symbol/cross.js\nexport function cross(ctx: IContext2d, r: number, x: number, y: number, z?: number) {\n ctx.moveTo(-3 * r + x, -r + y, z);\n ctx.lineTo(-r + x, -r + y, z);\n ctx.lineTo(-r + x, -3 * r + y, z);\n ctx.lineTo(r + x, -3 * r + y, z);\n ctx.lineTo(r + x, -r + y, z);\n ctx.lineTo(3 * r + x, -r + y, z);\n ctx.lineTo(3 * r + x, r + y, z);\n ctx.lineTo(r + x, r + y, z);\n ctx.lineTo(r + x, 3 * r + y, z);\n ctx.lineTo(-r + x, 3 * r + y, z);\n ctx.lineTo(-r + x, r + y, z);\n ctx.lineTo(-3 * r + x, r + y, z);\n ctx.closePath();\n return true;\n}\n\nexport function crossOffset(ctx: IContext2d, r: number, x: number, y: number, offset: number, z?: number) {\n ctx.moveTo(-3 * r + x - offset, -r + y - offset, z);\n ctx.lineTo(-r + x - offset, -r + y - offset, z);\n ctx.lineTo(-r + x - offset, -3 * r + y - offset, z);\n ctx.lineTo(r + x + offset, -3 * r + y - offset, z);\n ctx.lineTo(r + x + offset, -r + y - offset, z);\n ctx.lineTo(3 * r + x + offset, -r + y - offset, z);\n ctx.lineTo(3 * r + x + offset, r + y + offset, z);\n ctx.lineTo(r + x + offset, r + y + offset, z);\n ctx.lineTo(r + x + offset, 3 * r + y + offset, z);\n ctx.lineTo(-r + x - offset, 3 * r + y + offset, z);\n ctx.lineTo(-r + x - offset, r + y + offset, z);\n ctx.lineTo(-3 * r + x - offset, r + y + offset, z);\n ctx.closePath();\n return true;\n}\n\n// 以中心为锚点,size为circle外接正方形的边长\nexport class CrossSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'cross';\n /* eslint-disable max-len */\n pathStr: string =\n 'M-0.5,-0.2L-0.5,0.2L-0.2,0.2L-0.2,0.5L0.2,0.5L0.2,0.2L0.5,0.2L0.5,-0.2L0.2,-0.2L0.2,-0.5L-0.2,-0.5L-0.2,-0.2Z';\n\n draw(ctx: IContext2d, size: number, x: number, y: number, z?: number) {\n const r = size / 6;\n return cross(ctx, r, x, y, z);\n }\n\n drawOffset(ctx: IContext2d, size: number, x: number, y: number, offset: number, z?: number) {\n const r = size / 6;\n return crossOffset(ctx, r, x, y, offset, z);\n }\n}\n\nexport default new CrossSymbol();\n","import type { IBounds } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass } from '../../interface';\nimport { BaseSymbol } from './base';\n\n/**\n * \n *Copyright 2010-2021 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n// 借鉴自d3\n// https://github.com/d3/d3-shape/blob/main/src/symbol/diamond.js\nexport function diamond(ctx: IContext2d, r: number, x: number, y: number, z?: number) {\n ctx.moveTo(x, y - r, z);\n ctx.lineTo(r + x, y, z);\n ctx.lineTo(x, y + r, z);\n ctx.lineTo(x - r, y, z);\n ctx.closePath();\n return true;\n}\n\n// const sqrtdiv2 = sqrt(2);\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class DiamondSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'diamond';\n pathStr: string = 'M-0.5,0L0,-0.5L0.5,0L0,0.5Z';\n\n draw(ctx: IContext2d, size: number, x: number, y: number, z?: number) {\n const r = size / 2;\n return diamond(ctx, r, x, y, z);\n }\n\n // 适应方向的draw\n drawFitDir(ctx: IContext2d, size: number, x: number, y: number, z?: number) {\n const r = size / 2;\n return diamond(ctx, r, x, y, z);\n }\n\n drawOffset(ctx: IContext2d, size: number, x: number, y: number, offset: number, z?: number) {\n const r = size / 2 + offset;\n return diamond(ctx, r, x, y, z);\n }\n}\n\nexport default new DiamondSymbol();\n","import type { IBounds } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass } from '../../interface';\nimport { BaseSymbol } from './base';\n\n/**\n * \n *Copyright 2010-2021 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n// 借鉴自d3\n// https://github.com/d3/d3-shape/blob/main/src/symbol/square.js\nexport function square(ctx: IContext2d, r: number, x: number, y: number) {\n const wh = r * 2;\n ctx.rect(x - r, y - r, wh, wh);\n return false;\n}\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class SquareSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'square';\n pathStr: string = 'M-0.5,-0.5h1v1h-1Z';\n\n draw(ctx: IContext2d, size: number, x: number, y: number) {\n const r = size / 2;\n return square(ctx, r, x, y);\n }\n\n drawOffset(ctx: IContext2d, size: number, x: number, y: number, offset: number) {\n const r = size / 2 + offset;\n return square(ctx, r, x, y);\n }\n}\n\nexport default new SquareSymbol();\n","import type { IBounds } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass } from '../../interface';\nimport { BaseSymbol } from './base';\n\n/**\n * \n *Copyright 2010-2021 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n// 借鉴自d3\n// https://github.com/d3/d3-shape/blob/main/src/symbol/triangle.js\n\nexport function trianglUp(ctx: IContext2d, r: number, x: number, y: number) {\n ctx.moveTo(x + r, r + y);\n ctx.lineTo(x - r, r + y);\n ctx.lineTo(x, y - r);\n ctx.closePath();\n return true;\n}\n\nexport function trianglUpOffset(ctx: IContext2d, r: number, x: number, y: number, offset: number) {\n ctx.moveTo(x + r + offset * 2, r + y + offset);\n ctx.lineTo(x - r - offset * 2, r + y + offset);\n ctx.lineTo(x, y - r - offset * 2);\n ctx.closePath();\n return true;\n}\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class TriangleUpSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'triangleUp';\n pathStr: string = 'M0.5,0.5 L-0.5,0.5 L0,-0.5 Z';\n\n draw(ctx: IContext2d, size: number, x: number, y: number) {\n const r = size / 2;\n return trianglUp(ctx, r, x, y);\n }\n\n drawOffset(ctx: IContext2d, size: number, x: number, y: number, offset: number) {\n const r = size / 2;\n return trianglUpOffset(ctx, r, x, y, offset);\n }\n}\n\nexport default new TriangleUpSymbol();\n","// import { IBounds, sqrt } from '@visactor/vutils';\nimport type { SymbolType, ISymbolClass } from '../../interface';\nimport { trianglUp, TriangleUpSymbol } from './triangle-up';\n\n/**\n * \n *Copyright 2010-2021 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n// 借鉴自d3\n// https://github.com/d3/d3-shape/blob/main/src/symbol/triangle.js\n\n// const sqrt3 = sqrt(3);\n\n// export function triangle(ctx: IContext2d, r: number, x: number, y: number) {\n// const h = r * sqrt3;\n// ctx.moveTo(x, y + (-h / 3) * 2);\n// ctx.lineTo(r + x, y + h);\n// ctx.lineTo(x - r, y + h);\n// ctx.closePath();\n// return true;\n// }\n\nexport const triangle = trianglUp;\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class TriangleSymbol extends TriangleUpSymbol implements ISymbolClass {\n type: SymbolType = 'triangle';\n}\n\n// export class TriangleSymbol extends TriangleUpSymbol implements ISymbolClass {\n// type: SymbolType = 'triangle';\n// pathStr: string = 'M0,-0.5773502691896257L-0.5,0.28867513459481287L0.5,0.28867513459481287Z';\n\n// draw(ctx: IContext2d, size: number, x: number, y: number) {\n// const r = size / 2 / sqrt3;\n// return triangle(ctx, r, x, y);\n// }\n\n// bounds(size: number, bounds: IBounds) {\n// const r = size / 2;\n// bounds.x1 = -r;\n// bounds.x2 = r;\n// bounds.y1 = -r;\n// bounds.y2 = r;\n// }\n// }\n\nexport default new TriangleSymbol();\n","import type { IBounds } from '@visactor/vutils';\nimport { tau } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass } from '../../interface';\nimport { BaseSymbol } from './base';\n\n/**\n * \n *Copyright 2010-2021 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n// 借鉴自d3\n// https://github.com/d3/d3-shape/blob/main/src/symbol/star.js\n// const ka = 0.8908130915292852281;\nconst kr = Math.sin(Math.PI / 10) / Math.sin((7 * Math.PI) / 10);\nconst kx = Math.sin(tau / 10) * kr;\nconst ky = -Math.cos(tau / 10) * kr;\nexport function star(ctx: IContext2d, r: number, transX: number, transY: number) {\n // const r = sqrt(size * ka);\n const x = kx * r;\n const y = ky * r;\n ctx.moveTo(transX, -r + transY);\n ctx.lineTo(x + transX, y + transY);\n for (let i = 1; i < 5; ++i) {\n const a = (tau * i) / 5;\n const c = Math.cos(a);\n const s = Math.sin(a);\n ctx.lineTo(s * r + transX, -c * r + transY);\n ctx.lineTo(c * x - s * y + transX, s * x + c * y + transY);\n }\n ctx.closePath();\n return true;\n}\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class StarSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'star';\n /* eslint-disable max-len */\n pathStr: string =\n /* eslint-disable max-len */\n 'M4.51351666838205,0A4.51351666838205,4.51351666838205,0,1,1,-4.51351666838205,0A4.51351666838205,4.51351666838205,0,1,1,4.51351666838205,0';\n\n draw(ctx: IContext2d, size: number, transX: number, transY: number) {\n const r = size / 2;\n return star(ctx, r, transX, transY);\n }\n\n drawOffset(ctx: IContext2d, size: number, transX: number, transY: number, offset: number) {\n const r = size / 2 + offset;\n return star(ctx, r, transX, transY);\n }\n}\n\nexport default new StarSymbol();\n","import type { IBounds } from '@visactor/vutils';\nimport { sqrt } from '@visactor/vutils';\nimport type { IContext2d, ISymbolClass, SymbolType } from '../../interface';\nimport { BaseSymbol } from './base';\n/**\n * 部分源码参考 https://github.com/vega/vega/blob/main/packages/vega-scenegraph/src/path/symbols.js\n * Copyright (c) 2015-2023, University of Washington Interactive Data Lab\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n 3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nconst sqrt3 = sqrt(3);\n\nexport function arrow(ctx: IContext2d, r: number, transX: number, transY: number) {\n const triangleH = r;\n const trangleBottomSide = triangleH / sqrt3;\n const rectW = trangleBottomSide / 5;\n const rectH = r;\n //从箭头顶部为起点 顺时针依次移动绘制路径\n ctx.moveTo(0 + transX, -triangleH + transY);\n ctx.lineTo(trangleBottomSide / 2 + transX, transY);\n\n ctx.lineTo(rectW / 2 + transX, transY);\n ctx.lineTo(rectW / 2 + transX, rectH + transY);\n ctx.lineTo(-rectW / 2 + transX, rectH + transY);\n ctx.lineTo(-rectW / 2 + transX, transY);\n\n ctx.lineTo(-trangleBottomSide / 2 + transX, transY);\n ctx.closePath();\n return true;\n}\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class ArrowSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'arrow';\n /* eslint-disable max-len */\n pathStr: string =\n 'M-0.07142857142857142,0.5L0.07142857142857142,0.5L0.07142857142857142,-0.0625L0.2,-0.0625L0,-0.5L-0.2,-0.0625L-0.07142857142857142,-0.0625Z';\n\n draw(ctx: IContext2d, size: number, transX: number, transY: number) {\n const r = size / 2;\n return arrow(ctx, r, transX, transY);\n }\n\n drawOffset(ctx: IContext2d, size: number, transX: number, transY: number, offset: number) {\n const r = size / 2 + offset;\n return arrow(ctx, r, transX, transY);\n }\n}\n\nexport default new ArrowSymbol();\n","import type { IBounds } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass } from '../../interface';\nimport { BaseSymbol } from './base';\n\n/**\n * 部分源码参考 https://github.com/vega/vega/blob/main/packages/vega-scenegraph/src/path/symbols.js\n * Copyright (c) 2015-2023, University of Washington Interactive Data Lab\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n 3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nexport function wedge(ctx: IContext2d, r: number, transX: number, transY: number) {\n const h = r * 2;\n ctx.moveTo(transX, -r + transY);\n ctx.lineTo(h / 3 / 2 + transX, r + transY);\n ctx.lineTo(-h / 3 / 2 + transX, r + transY);\n ctx.closePath();\n return true;\n}\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class WedgeSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'wedge';\n pathStr: string = 'M0,-0.5773502691896257L-0.125,0.28867513459481287L0.125,0.28867513459481287Z';\n\n draw(ctx: IContext2d, size: number, transX: number, transY: number) {\n const r = size / 2;\n return wedge(ctx, r, transX, transY);\n }\n\n drawOffset(ctx: IContext2d, size: number, transX: number, transY: number, offset: number) {\n const r = size / 2 + offset;\n return wedge(ctx, r, transX, transY);\n }\n}\n\nexport default new WedgeSymbol();\n","import type { IBounds } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass } from '../../interface';\nimport { BaseSymbol } from './base';\n\n/**\n * 部分源码参考 https://github.com/vega/vega/blob/main/packages/vega-scenegraph/src/path/symbols.js\n * Copyright (c) 2015-2023, University of Washington Interactive Data Lab\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n 3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nexport function stroke(ctx: IContext2d, r: number, transX: number, transY: number) {\n ctx.moveTo(-r + transX, transY);\n ctx.lineTo(transX, r + transY);\n return false;\n}\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class StrokeSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'stroke';\n pathStr: '' = '';\n\n draw(ctx: IContext2d, size: number, transX: number, transY: number) {\n const r = size / 2;\n return stroke(ctx, r, transX, transY);\n }\n\n drawOffset(ctx: IContext2d, size: number, transX: number, transY: number, offset: number) {\n const r = size / 2 + offset;\n return stroke(ctx, r, transX, transY);\n }\n}\n\nexport default new StrokeSymbol();\n","import type { IBounds } from '@visactor/vutils';\nimport { sqrt } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass } from '../../interface';\nimport { BaseSymbol } from './base';\n\n/**\n * \n *Copyright 2010-2021 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n// 借鉴自d3\n// https://github.com/d3/d3-shape/blob/main/src/symbol/wye.js\nconst c = -0.5;\nconst s = sqrt(3) / 2;\nconst k = 1 / sqrt(12);\nconst a = (k / 2 + 1) * 3;\nexport function wye(ctx: IContext2d, r: number, transX: number, transY: number) {\n const x0 = r / 2;\n const y0 = r * k;\n const x1 = x0;\n const y1 = r * k + r;\n const x2 = -x1;\n const y2 = y1;\n ctx.moveTo(x0 + transX, y0 + transY);\n ctx.lineTo(x1 + transX, y1 + transY);\n ctx.lineTo(x2 + transX, y2 + transY);\n ctx.lineTo(c * x0 - s * y0 + transX, s * x0 + c * y0 + transY);\n ctx.lineTo(c * x1 - s * y1 + transX, s * x1 + c * y1 + transY);\n ctx.lineTo(c * x2 - s * y2 + transX, s * x2 + c * y2 + transY);\n ctx.lineTo(c * x0 + s * y0 + transX, c * y0 - s * x0 + transY);\n ctx.lineTo(c * x1 + s * y1 + transX, c * y1 - s * x1 + transY);\n ctx.lineTo(c * x2 + s * y2 + transX, c * y2 - s * x2 + transY);\n ctx.closePath();\n return false;\n}\n\n// 以中心为锚点,size为wye外接正方形的面积\nexport class WyeSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'wye';\n /* eslint-disable max-len */\n pathStr: string =\n /* eslint-disable max-len */\n 'M4.51351666838205,0A4.51351666838205,4.51351666838205,0,1,1,-4.51351666838205,0A4.51351666838205,4.51351666838205,0,1,1,4.51351666838205,0';\n\n draw(ctx: IContext2d, size: number, transX: number, transY: number) {\n const r = size / 2;\n // const r = sqrt(size / a);\n return wye(ctx, r, transX, transY);\n }\n\n drawOffset(ctx: IContext2d, size: number, transX: number, transY: number, offset: number) {\n const r = size / 2 + offset;\n // const r = sqrt(size / a);\n return wye(ctx, r, transX, transY);\n }\n}\n\nexport default new WyeSymbol();\n","import type { IBounds } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass } from '../../interface';\nimport { BaseSymbol } from './base';\n\n/**\n * \n *Copyright 2010-2021 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n// 借鉴自d3\n// https://github.com/d3/d3-shape/blob/main/src/symbol/triangle.js\n\nexport function trianglLeft(ctx: IContext2d, r: number, x: number, y: number) {\n ctx.moveTo(-r + x, y);\n ctx.lineTo(r + x, r + y);\n ctx.lineTo(r + x, y - r);\n ctx.closePath();\n return true;\n}\n\nexport function trianglLeftOffset(ctx: IContext2d, r: number, x: number, y: number, offset: number) {\n ctx.moveTo(-r + x - 2 * offset, y);\n ctx.lineTo(r + x + offset, r + y + 2 * offset);\n ctx.lineTo(r + x + offset, y - r - 2 * offset);\n ctx.closePath();\n return true;\n}\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class TriangleLeftSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'triangleLeft';\n pathStr: string = 'M-0.5,0 L0.5,0.5 L0.5,-0.5 Z';\n\n draw(ctx: IContext2d, size: number, x: number, y: number) {\n const r = size / 2;\n return trianglLeft(ctx, r, x, y);\n }\n\n drawOffset(ctx: IContext2d, size: number, x: number, y: number, offset: number) {\n const r = size / 2;\n return trianglLeftOffset(ctx, r, x, y, offset);\n }\n}\n\nexport default new TriangleLeftSymbol();\n","import type { IBounds } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass } from '../../interface';\nimport { BaseSymbol } from './base';\n\n/**\n * \n *Copyright 2010-2021 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n// 借鉴自d3\n// https://github.com/d3/d3-shape/blob/main/src/symbol/triangle.js\n\nexport function trianglRight(ctx: IContext2d, r: number, x: number, y: number) {\n ctx.moveTo(x - r, r + y);\n ctx.lineTo(r + x, y);\n ctx.lineTo(x - r, y - r);\n ctx.closePath();\n return true;\n}\n\nexport function trianglRightOffset(ctx: IContext2d, r: number, x: number, y: number, offset: number) {\n ctx.moveTo(x - r - offset, r + y + 2 * offset);\n ctx.lineTo(r + x + 2 * offset, y);\n ctx.lineTo(x - r - offset, y - r - 2 * offset);\n ctx.closePath();\n return true;\n}\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class TriangleRightSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'triangleRight';\n pathStr: string = 'M-0.5,0.5 L0.5,0 L-0.5,-0.5 Z';\n\n draw(ctx: IContext2d, size: number, x: number, y: number) {\n const r = size / 2;\n return trianglRight(ctx, r, x, y);\n }\n\n drawOffset(ctx: IContext2d, size: number, x: number, y: number, offset: number) {\n const r = size / 2;\n return trianglRightOffset(ctx, r, x, y, offset);\n }\n}\n\nexport default new TriangleRightSymbol();\n","import type { IBounds } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass } from '../../interface';\nimport { BaseSymbol } from './base';\n\n/**\n * \n *Copyright 2010-2021 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n// 借鉴自d3\n// https://github.com/d3/d3-shape/blob/main/src/symbol/triangle.js\n\nexport function trianglDown(ctx: IContext2d, r: number, x: number, y: number) {\n ctx.moveTo(x - r, y - r);\n ctx.lineTo(x + r, y - r);\n ctx.lineTo(x, y + r);\n ctx.closePath();\n return true;\n}\n\nexport function trianglDownOffset(ctx: IContext2d, r: number, x: number, y: number, offset: number) {\n ctx.moveTo(x - r - offset * 2, y - r - offset);\n ctx.lineTo(x + r + offset * 2, y - r - offset);\n ctx.lineTo(x, y + r + offset * 2);\n ctx.closePath();\n return true;\n}\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class TriangleDownSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'triangleDown';\n pathStr: string = 'M-0.5,-0.5 L0.5,-0.5 L0,0.5 Z';\n\n draw(ctx: IContext2d, size: number, x: number, y: number) {\n const r = size / 2;\n return trianglDown(ctx, r, x, y);\n }\n\n drawOffset(ctx: IContext2d, size: number, x: number, y: number, offset: number) {\n const r = size / 2;\n return trianglDownOffset(ctx, r, x, y, offset);\n }\n}\n\nexport default new TriangleDownSymbol();\n","import type { IBounds } from '@visactor/vutils';\nimport { sqrt } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass } from '../../interface';\nimport { trianglUp, TriangleUpSymbol } from './triangle-up';\n\n/**\n * \n *Copyright 2010-2021 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n// 借鉴自d3\n// https://github.com/d3/d3-shape/blob/main/src/symbol/triangle.js\n\nconst sqrt3 = sqrt(3);\n\nexport function thinTriangle(ctx: IContext2d, r: number, x: number, y: number) {\n const h = r * sqrt3;\n ctx.moveTo(x, y + (-h / 3) * 2);\n ctx.lineTo(r + x, y + h);\n ctx.lineTo(x - r, y + h);\n ctx.closePath();\n return true;\n}\n\nexport class ThinTriangleSymbol extends TriangleUpSymbol implements ISymbolClass {\n type: SymbolType = 'thinTriangle';\n pathStr: string = 'M0,-0.5773502691896257L-0.5,0.28867513459481287L0.5,0.28867513459481287Z';\n\n draw(ctx: IContext2d, size: number, x: number, y: number) {\n const r = size / 2 / sqrt3;\n return thinTriangle(ctx, r, x, y);\n }\n\n drawOffset(ctx: IContext2d, size: number, x: number, y: number, offset: number) {\n const r = size / 2 / sqrt3 + offset;\n return thinTriangle(ctx, r, x, y);\n }\n}\n\nexport default new ThinTriangleSymbol();\n","import type { IBounds } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass } from '../../interface';\nimport { BaseSymbol } from './base';\n/**\n * 部分源码参考 https://github.com/vega/vega/blob/main/packages/vega-scenegraph/src/path/symbols.js\n * Copyright (c) 2015-2023, University of Washington Interactive Data Lab\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n 3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nexport function arrow2Left(ctx: IContext2d, r: number, transX: number, transY: number) {\n const r2 = r * 2;\n ctx.moveTo(r + transX, transY - r2);\n ctx.lineTo(transX - r, transY);\n ctx.lineTo(r + transX, r2 + transY);\n\n return true;\n}\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class Arrow2LeftSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'arrow2Left';\n /* eslint-disable max-len */\n pathStr: string = 'M 0.25 -0.5 L -0.25 0 l 0.25 0.5';\n\n draw(ctx: IContext2d, size: number, transX: number, transY: number) {\n const r = size / 4;\n return arrow2Left(ctx, r, transX, transY);\n }\n\n drawOffset(ctx: IContext2d, size: number, transX: number, transY: number, offset: number) {\n const r = size / 4 + offset;\n return arrow2Left(ctx, r, transX, transY);\n }\n}\n\nexport default new Arrow2LeftSymbol();\n","import type { IBounds } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass } from '../../interface';\nimport { BaseSymbol } from './base';\n/**\n * 部分源码参考 https://github.com/vega/vega/blob/main/packages/vega-scenegraph/src/path/symbols.js\n * Copyright (c) 2015-2023, University of Washington Interactive Data Lab\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n 3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nexport function arrow2Right(ctx: IContext2d, r: number, transX: number, transY: number) {\n const r2 = r * 2;\n ctx.moveTo(transX - r, transY - r2);\n ctx.lineTo(transX + r, transY);\n ctx.lineTo(transX - r, r2 + transY);\n\n return true;\n}\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class Arrow2RightSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'arrow2Right';\n /* eslint-disable max-len */\n pathStr: string = 'M -0.25 -0.5 l 0.25 0 l -0.25 0.5';\n\n draw(ctx: IContext2d, size: number, transX: number, transY: number) {\n const r = size / 4;\n return arrow2Right(ctx, r, transX, transY);\n }\n\n drawOffset(ctx: IContext2d, size: number, transX: number, transY: number, offset: number) {\n const r = size / 4 + offset;\n return arrow2Right(ctx, r, transX, transY);\n }\n}\n\nexport default new Arrow2RightSymbol();\n","import type { IBounds } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass } from '../../interface';\nimport { BaseSymbol } from './base';\n\nexport function arrow2Up(ctx: IContext2d, r: number, transX: number, transY: number) {\n const r2 = r * 2;\n ctx.moveTo(transX - r2, transY + r);\n ctx.lineTo(transX, transY - r);\n ctx.lineTo(transX + r2, transY + r);\n\n return true;\n}\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class Arrow2UpSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'arrow2Up';\n /* eslint-disable max-len */\n pathStr: string = 'M -0.5 0.25 L 0 -0.25 l 0.5 0.25';\n\n draw(ctx: IContext2d, size: number, transX: number, transY: number) {\n const r = size / 4;\n return arrow2Up(ctx, r, transX, transY);\n }\n\n drawOffset(ctx: IContext2d, size: number, transX: number, transY: number, offset: number) {\n const r = size / 4 + offset;\n return arrow2Up(ctx, r, transX, transY);\n }\n}\n\nexport default new Arrow2UpSymbol();\n","import type { IBounds } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass } from '../../interface';\nimport { BaseSymbol } from './base';\n\nexport function arrow2Down(ctx: IContext2d, r: number, transX: number, transY: number) {\n const r2 = r * 2;\n ctx.moveTo(transX - r2, transY - r);\n ctx.lineTo(transX, transY + r);\n ctx.lineTo(transX + r2, transY - r);\n\n return true;\n}\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class Arrow2DownSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'arrow2Down';\n /* eslint-disable max-len */\n pathStr: string = 'M -0.5 -0.25 L 0 0.25 l 0.5 -0.25';\n\n draw(ctx: IContext2d, size: number, transX: number, transY: number) {\n const r = size / 4;\n return arrow2Down(ctx, r, transX, transY);\n }\n\n drawOffset(ctx: IContext2d, size: number, transX: number, transY: number, offset: number) {\n const r = size / 4 + offset;\n return arrow2Down(ctx, r, transX, transY);\n }\n}\n\nexport default new Arrow2DownSymbol();\n","import type { IBounds } from '@visactor/vutils';\nimport { tau } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass, IPath2D } from '../../interface';\nimport { BaseSymbol } from './base';\n\nexport function lineV(ctx: IContext2d, r: number, x: number, y: number, z?: number) {\n ctx.moveTo(x, y - r);\n ctx.lineTo(x, y + r);\n return true;\n}\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class LineVSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'lineV';\n pathStr: string = 'M0,-0.5L0,0.5';\n\n draw(ctx: IContext2d, size: number, x: number, y: number, z?: number) {\n const r = size / 2;\n return lineV(ctx, r, x, y, z);\n }\n\n drawOffset(ctx: IContext2d, size: number, x: number, y: number, offset: number, z?: number) {\n const r = size / 2 + offset;\n return lineV(ctx, r, x, y, z);\n }\n\n drawToSvgPath(size: number, x: number, y: number, z?: number): string {\n const r = size / 2;\n return `M ${x}, ${y - r} L ${x},${y + r}`;\n }\n}\n\nexport default new LineVSymbol();\n","import type { IBounds } from '@visactor/vutils';\nimport { tau } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass, IPath2D } from '../../interface';\nimport { BaseSymbol } from './base';\n\nexport function lineH(ctx: IContext2d, r: number, x: number, y: number, z?: number) {\n ctx.moveTo(x - r, y);\n ctx.lineTo(x + r, y);\n return true;\n}\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class LineHSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'lineH';\n pathStr: string = 'M-0.5,0L0.5,0';\n\n draw(ctx: IContext2d, size: number, x: number, y: number, z?: number) {\n const r = size / 2;\n return lineH(ctx, r, x, y, z);\n }\n\n drawOffset(ctx: IContext2d, size: number, x: number, y: number, offset: number, z?: number) {\n const r = size / 2 + offset;\n return lineH(ctx, r, x, y, z);\n }\n\n drawToSvgPath(size: number, x: number, y: number, z?: number): string {\n const r = size / 2;\n return `M ${x - r}, ${y} L ${x + r},${y}`;\n }\n}\n\nexport default new LineHSymbol();\n","import type { IBounds } from '@visactor/vutils';\nimport { tau } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass, IPath2D } from '../../interface';\nimport { BaseSymbol } from './base';\n\nexport function close(ctx: IContext2d, r: number, x: number, y: number, z?: number) {\n ctx.moveTo(x - r, y - r);\n ctx.lineTo(x + r, y + r);\n\n ctx.moveTo(x + r, y - r);\n ctx.lineTo(x - r, y + r);\n return true;\n}\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class CloseSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'close';\n pathStr: string = 'M-0.5,-0.5L0.5,0.5,M0.5,-0.5L-0.5,0.5';\n\n draw(ctx: IContext2d, size: number, x: number, y: number, z?: number) {\n const r = size / 2;\n return close(ctx, r, x, y, z);\n }\n\n drawOffset(ctx: IContext2d, size: number, x: number, y: number, offset: number, z?: number) {\n const r = size / 2 + offset;\n return close(ctx, r, x, y, z);\n }\n\n drawToSvgPath(size: number, x: number, y: number, z?: number): string {\n const r = size / 2;\n return `M ${x - r}, ${y - r} L ${x + r},${y + r} M ${x + r}, ${y - r} L ${x - r},${y + r}`;\n }\n}\n\nexport default new CloseSymbol();\n","import type { IBounds } from '@visactor/vutils';\nimport { isNumber } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass } from '../../interface';\nimport { BaseSymbol } from './base';\n\n/**\n * 部分源码参考 https://github.com/vega/vega/blob/main/packages/vega-scenegraph/src/path/symbols.js\n * Copyright (c) 2015-2023, University of Washington Interactive Data Lab\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n 3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nexport function rectSizeArray(ctx: IContext2d, size: [number, number], x: number, y: number) {\n ctx.rect(x - size[0] / 2, y - size[1] / 2, size[0], size[1]);\n return false;\n}\n\nexport function rectSize(ctx: IContext2d, size: number, x: number, y: number) {\n const w = size;\n const h = size / 2;\n ctx.rect(x - w / 2, y - h / 2, w, h);\n return false;\n}\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class RectSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'rect';\n pathStr: string = 'M -0.5,0.25 L 0.5,0.25 L 0.5,-0.25,L -0.5,-0.25 Z';\n\n draw(ctx: IContext2d, size: number | [number, number], x: number, y: number) {\n if (isNumber(size)) {\n return rectSize(ctx, size, x, y);\n }\n return rectSizeArray(ctx, size, x, y);\n // const rectSize: [number, number] = ? [size, size] : size;\n // return rect(ctx, rectSize, x, y);\n }\n\n drawOffset(ctx: IContext2d, size: number | [number, number], x: number, y: number, offset: number) {\n if (isNumber(size)) {\n return rectSize(ctx, size + 2 * offset, x, y);\n }\n return rectSizeArray(ctx, [size[0] + 2 * offset, size[1] + 2 * offset], x, y);\n }\n}\n\nexport default new RectSymbol();\n","import circle from './circle';\nimport cross from './cross';\nimport diamond from './diamond';\nimport square from './square';\nimport triangle from './triangle';\nimport star from './star';\nimport arrow from './arrow';\nimport wedge from './wedge';\nimport stroke from './stroke';\nimport wye from './wye';\nimport triangleLeft from './triangle-left';\nimport triangleRight from './triangle-right';\nimport triangleUp from './triangle-up';\nimport triangleDown from './triangle-down';\nimport thinTriangle from './thin-triangle';\nimport arrow2Left from './arrow2-left';\nimport arrow2Right from './arrow2-right';\nimport arrow2Up from './arrow2-up';\nimport arrow2Down from './arrow2-down';\nimport lineV from './line-v';\nimport lineH from './line-h';\nimport close from './close';\nimport rect from './rect';\nimport type { ISymbolClass } from '../../interface';\n\nexport const builtinSymbols = [\n circle,\n cross,\n diamond,\n square,\n thinTriangle,\n triangle,\n star,\n arrow,\n wedge,\n stroke,\n wye,\n triangleLeft,\n triangleRight,\n triangleUp,\n triangleDown,\n arrow2Left,\n arrow2Right,\n arrow2Up,\n arrow2Down,\n rect,\n lineV,\n lineH,\n close\n];\nexport const builtinSymbolsMap: Record = {};\n\nbuiltinSymbols.forEach(symbol => {\n builtinSymbolsMap[symbol.type] = symbol;\n});\n\nexport const builtInSymbolStrMap: Record = {\n arrowLeft: 'M 0.25 -0.5 L -0.25 0 l 0.5 0.5',\n arrowRight: 'M -0.25 -0.5 l 0.5 0.5 l -0.5 0.5',\n // rect: 'M -0.5,0.25 L 0.5,0.25 L 0.5,-0.25,L -0.5,-0.25 Z',\n rectRound:\n // eslint-disable-next-line max-len\n 'M 0.3 -0.5 C 0.41 -0.5 0.5 -0.41 0.5 -0.3 C 0.5 -0.3 0.5 0.3 0.5 0.3 C 0.5 0.41 0.41 0.5 0.3 0.5 C 0.3 0.5 -0.3 0.5 -0.3 0.5 C -0.41 0.5 -0.5 0.41 -0.5 0.3 C -0.5 0.3 -0.5 -0.3 -0.5 -0.3 C -0.5 -0.41 -0.41 -0.5 -0.3 -0.5 C -0.3 -0.5 0.3 -0.5 0.3 -0.5 Z',\n roundLine:\n 'M 1.2392 -0.258 L -1.3432 -0.258 C -1.4784 -0.258 -1.588 -0.1436 -1.588 -0.002 c 0 0.1416 0.1096 0.256 0.2448 0.256 l 2.5824 0 c 0.1352 0 0.2448 -0.1144 0.2448 -0.256 C 1.484 -0.1436 1.3744 -0.258 1.2392 -0.258 z'\n};\n\nexport * from './utils';\n","import { isArray, type IBounds, AABBBounds } from '@visactor/vutils';\nimport { renderCommandList } from '../../common/render-command-list';\nimport type { IContext2d, ICustomPath2D, IGraphicAttribute, ISymbolClass } from '../../interface';\n\nconst tempBounds = new AABBBounds();\nexport class CustomSymbolClass implements ISymbolClass {\n type: string;\n path: ICustomPath2D;\n pathStr: string = '';\n isSvg: boolean;\n svgCache?: { path: ICustomPath2D; attribute: Partial }[];\n\n constructor(\n type: string,\n path: ICustomPath2D | { path: ICustomPath2D; attribute: Partial }[],\n isSvg: boolean = false\n ) {\n this.type = type;\n if (isArray(path)) {\n this.svgCache = path;\n } else {\n this.path = path;\n }\n this.isSvg = isSvg;\n }\n\n drawOffset(\n ctx: IContext2d,\n size: number,\n x: number,\n y: number,\n offset: number,\n z?: number,\n cb?: (path: ICustomPath2D, attribute?: Record) => void\n ) {\n if (this.isSvg) {\n if (!this.svgCache) {\n return false;\n }\n this.svgCache.forEach(item => {\n ctx.beginPath();\n renderCommandList(item.path.commandList, ctx, x, y, size, size);\n cb && cb(item.path, item.attribute);\n });\n return false;\n }\n renderCommandList(this.path.commandList, ctx, x, y, size + offset, size + offset);\n return false;\n }\n\n draw(\n ctx: IContext2d,\n size: number,\n x: number,\n y: number,\n z?: number,\n cb?: (path: ICustomPath2D, attribute?: Record) => void\n ) {\n if (this.isSvg) {\n if (!this.svgCache) {\n return false;\n }\n this.svgCache.forEach(item => {\n ctx.beginPath();\n renderCommandList(item.path.commandList, ctx, x, y, size, size);\n cb && cb(item.path, item.attribute);\n });\n return false;\n }\n renderCommandList(this.path.commandList, ctx, x, y, size, size);\n return false;\n }\n\n bounds(size: number, bounds: IBounds) {\n if (this.isSvg) {\n if (!this.svgCache) {\n return;\n }\n bounds.clear();\n this.svgCache.forEach(({ path }) => {\n tempBounds.x1 = path.bounds.x1 * size;\n tempBounds.y1 = path.bounds.y1 * size;\n tempBounds.x2 = path.bounds.x2 * size;\n tempBounds.y2 = path.bounds.y2 * size;\n bounds.union(tempBounds);\n });\n return;\n }\n if (!this.path.bounds) {\n return;\n }\n bounds.x1 = this.path.bounds.x1 * size;\n bounds.y1 = this.path.bounds.y1 * size;\n bounds.x2 = this.path.bounds.x2 * size;\n bounds.y2 = this.path.bounds.y2 * size;\n }\n}\n\n// export function CustomSymbol(): ISymbolClass {\n\n// }\n","// 参考fast-xml-parser\n// https://github.com/NaturalIntelligence/fast-xml-parser\n/**\n * MIT License\n\nCopyright (c) 2017 Amit Kumar Gupta\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n */\nimport type { X2jOptions } from './type';\nimport { getAllMatches } from './utils';\n\nclass XmlNode {\n declare tagname: string;\n declare child: any[];\n\n constructor(tagname: string) {\n this.tagname = tagname;\n this.child = []; //nested tags, text, cdata, comments in order\n this[':@'] = {}; //attributes map\n }\n add(key: string, val: string) {\n // this.child.push( {name : key, val: val, isCdata: isCdata });\n if (key === '__proto__') {\n key = '#__proto__';\n }\n this.child.push({ [key]: val });\n }\n addChild(node: XmlNode) {\n if (node.tagname === '__proto__') {\n node.tagname = '#__proto__';\n }\n if (node[':@'] && Object.keys(node[':@']).length > 0) {\n this.child.push({ [node.tagname]: node.child, [':@']: node[':@'] });\n } else {\n this.child.push({ [node.tagname]: node.child });\n }\n }\n}\n\nfunction findClosingIndex(xmlData: string, str: string, i: number, errMsg: string) {\n const closingIndex = xmlData.indexOf(str, i);\n if (closingIndex === -1) {\n throw new Error(errMsg);\n } else {\n return closingIndex + str.length - 1;\n }\n}\n\n/**\n * Returns the tag Expression and where it is ending handling single-double quotes situation\n * @param {string} xmlData\n * @param {number} i starting index\n * @returns\n */\nfunction tagExpWithClosingIndex(xmlData: string, i: number, closingChar = '>') {\n let attrBoundary;\n let tagExp = '';\n for (let index = i; index < xmlData.length; index++) {\n let ch = xmlData[index];\n if (attrBoundary) {\n if (ch === attrBoundary) {\n attrBoundary = '';\n } //reset\n } else if (ch === '\"' || ch === \"'\") {\n attrBoundary = ch;\n } else if (ch === closingChar[0]) {\n if (closingChar[1]) {\n if (xmlData[index + 1] === closingChar[1]) {\n return {\n data: tagExp,\n index: index\n };\n }\n } else {\n return {\n data: tagExp,\n index: index\n };\n }\n } else if (ch === '\\t') {\n ch = ' ';\n }\n tagExp += ch;\n }\n}\n\nfunction readTagExp(xmlData: string, i: number, removeNSPrefix: boolean, closingChar = '>') {\n const result = tagExpWithClosingIndex(xmlData, i + 1, closingChar);\n if (!result) {\n return;\n }\n let tagExp = result.data;\n const closeIndex = result.index;\n const separatorIndex = tagExp.search(/\\s/);\n let tagName = tagExp;\n let attrExpPresent = true;\n if (separatorIndex !== -1) {\n //separate tag name and attributes expression\n tagName = tagExp.substr(0, separatorIndex).replace(/\\s\\s*$/, '');\n tagExp = tagExp.substr(separatorIndex + 1);\n }\n\n const rawTagName = tagName;\n if (removeNSPrefix) {\n const colonIndex = tagName.indexOf(':');\n if (colonIndex !== -1) {\n tagName = tagName.substr(colonIndex + 1);\n attrExpPresent = tagName !== result.data.substr(colonIndex + 1);\n }\n }\n\n return {\n tagName: tagName,\n tagExp: tagExp,\n closeIndex: closeIndex,\n attrExpPresent: attrExpPresent,\n rawTagName: rawTagName\n };\n}\n\nconst attrsRegx = new RegExp('([^\\\\s=]+)\\\\s*(=\\\\s*([\\'\"])([\\\\s\\\\S]*?)\\\\3)?', 'gm');\n\nexport class OrderedObjParser {\n declare options: Partial;\n declare currentNode: XmlNode | null;\n declare tagsNodeStack: XmlNode[];\n declare docTypeEntities: Record;\n\n constructor(options: Partial) {\n this.currentNode = null;\n this.options = options;\n this.tagsNodeStack = [];\n this.docTypeEntities = {};\n }\n\n protected addChild(currentNode: XmlNode, childNode: XmlNode, jPath: string) {\n const result = childNode.tagname;\n if (typeof result === 'string') {\n childNode.tagname = result;\n currentNode.addChild(childNode);\n } else {\n currentNode.addChild(childNode);\n }\n }\n\n protected buildAttributesMap(attrStr: string, jPath: string, tagName: string) {\n const attrs = {};\n if (!attrStr) {\n return;\n }\n const matches = getAllMatches(attrStr, attrsRegx);\n const len = matches.length; //don't make it inline\n for (let i = 0; i < len; i++) {\n const attrName = matches[i][1];\n const oldVal = matches[i][4];\n const aName = attrName;\n if (attrName) {\n if (oldVal !== undefined) {\n attrs[aName] = isNaN(oldVal) ? oldVal : Number(oldVal);\n } else {\n attrs[aName] = true;\n }\n }\n }\n return attrs;\n }\n\n parseXml(xmlData: string) {\n // 判断xml的合法性\n xmlData = xmlData.replace(/\\r\\n?/g, '\\n');\n const xmlObj = new XmlNode('!xml');\n let currentNode = xmlObj;\n let textData = '';\n let jPath = '';\n for (let i = 0; i < xmlData.length; i++) {\n const ch = xmlData[i];\n if (ch === '<') {\n if (xmlData[i + 1] === '/') {\n const closeIndex = findClosingIndex(xmlData, '>', i, 'Closing Tag is not closed.');\n const propIndex = jPath.lastIndexOf('.');\n jPath = jPath.substring(0, propIndex);\n currentNode = this.tagsNodeStack.pop();\n if (currentNode && currentNode.child && textData) {\n currentNode.child[currentNode.child.length - 1][':@'] &&\n (currentNode.child[currentNode.child.length - 1][':@'].text = textData);\n }\n textData = '';\n i = closeIndex;\n } else if (xmlData[i + 1] === '?') {\n const tagData = readTagExp(xmlData, i, false, '?>');\n i = tagData.closeIndex + 1;\n } else if (xmlData.substr(i + 1, 3) === '!--') {\n const endIndex = findClosingIndex(xmlData, '-->', i + 4, 'Comment is not closed.');\n i = endIndex;\n } else {\n const result = readTagExp(xmlData, i, false);\n let tagName = result.tagName;\n let tagExp = result.tagExp;\n const attrExpPresent = result.attrExpPresent;\n const closeIndex = result.closeIndex;\n if (tagName !== xmlObj.tagname) {\n jPath += jPath ? '.' + tagName : tagName;\n }\n if (tagExp.length > 0 && tagExp.lastIndexOf('/') === tagExp.length - 1) {\n if (tagName[tagName.length - 1] === '/') {\n tagName = tagName.substr(0, tagName.length - 1);\n jPath = jPath.substr(0, jPath.length - 1);\n tagExp = tagName;\n } else {\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n const childNode = new XmlNode(tagName);\n if (tagName !== tagExp && attrExpPresent) {\n childNode[':@'] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n this.addChild(currentNode, childNode, jPath);\n jPath = jPath.substr(0, jPath.lastIndexOf('.'));\n } else {\n const childNode = new XmlNode(tagName);\n this.tagsNodeStack.push(currentNode);\n if (tagName !== tagExp && attrExpPresent) {\n childNode[':@'] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n this.addChild(currentNode, childNode, jPath);\n currentNode = childNode;\n }\n textData = '';\n i = closeIndex;\n }\n } else {\n textData += xmlData[i];\n }\n }\n return xmlObj.child;\n }\n}\n","const nameStartChar =\n ':A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\nconst nameChar = nameStartChar + '\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\n\nexport function getAllMatches(string: string, regex: RegExp) {\n const matches = [];\n let match = regex.exec(string);\n while (match) {\n const allmatches: any = [];\n allmatches.startIndex = regex.lastIndex - match[0].length;\n const len = match.length;\n for (let index = 0; index < len; index++) {\n allmatches.push(match[index]);\n }\n matches.push(allmatches);\n match = regex.exec(string);\n }\n return matches;\n}\n","// 参考fast-xml-parser\n// https://github.com/NaturalIntelligence/fast-xml-parser\n/**\n * MIT License\n\nCopyright (c) 2017 Amit Kumar Gupta\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n */\n\n/**\n *\n * @param {array} node\n * @param {any} options\n * @returns\n */\nexport function prettify(node: any, options: any) {\n return compress(node);\n}\n\n/**\n *\n * @param {array} arr\n * @param {object} options\n * @param {string} jPath\n * @returns object\n */\nfunction compress(arr: any, jPath?: any) {\n let text;\n const compressedObj = {};\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const property = propName(tagObj);\n let newJpath = '';\n if (jPath === undefined) {\n newJpath = property;\n } else {\n newJpath = jPath + '.' + property;\n }\n\n if (property === undefined) {\n continue;\n } else if (tagObj[property]) {\n const val = compress(tagObj[property], newJpath);\n const isLeaf = isLeafTag(val);\n\n if (tagObj[':@']) {\n assignAttributes(val, tagObj[':@'], newJpath);\n }\n\n if (compressedObj[property] !== undefined && compressedObj.hasOwnProperty(property)) {\n if (!Array.isArray(compressedObj[property])) {\n compressedObj[property] = [compressedObj[property]];\n }\n compressedObj[property].push(val);\n } else {\n //TODO: if a node is not an array, then check if it should be an array\n //also determine if it is a leaf node\n compressedObj[property] = val;\n }\n }\n }\n return compressedObj;\n}\n\nfunction propName(obj: any) {\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (key !== ':@') {\n return key;\n }\n }\n}\n\nfunction assignAttributes(obj: any, attrMap: any, jpath: any) {\n if (attrMap) {\n const keys = Object.keys(attrMap);\n const len = keys.length; //don't make it inline\n for (let i = 0; i < len; i++) {\n const atrrName = keys[i];\n obj[atrrName] = attrMap[atrrName];\n }\n }\n}\n\nfunction isLeafTag(obj: any) {\n const propCount = Object.keys(obj).length;\n\n if (propCount === 0) {\n return true;\n }\n\n return false;\n}\n","// 参考fast-xml-parser\n// https://github.com/NaturalIntelligence/fast-xml-parser\n/**\n * MIT License\n\nCopyright (c) 2017 Amit Kumar Gupta\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n */\n\nimport { OrderedObjParser } from './OrderedObjParser';\nimport { prettify } from './node2json';\nimport type { X2jOptions } from './type';\n\nexport class XMLParser {\n static defaultOptions: Partial = {};\n options: Partial;\n\n constructor(options?: Partial) {\n this.options = Object.assign({}, XMLParser.defaultOptions, options);\n }\n\n valid(xml: string) {\n return xml.startsWith('<');\n }\n\n parse(xmlData: string): any {\n if (!this.valid) {\n return false;\n }\n const orderedObjParser = new OrderedObjParser(this.options);\n const orderedResult = orderedObjParser.parseXml(xmlData);\n return prettify(orderedResult, this.options);\n }\n}\n\nexport function isSvg(str: string) {\n return str.startsWith(' implements ISymbol {\n type: 'symbol' = 'symbol';\n\n static userSymbolMap: Record = {};\n\n static NOWORK_ANIMATE_ATTR = {\n symbolType: 1,\n ...NOWORK_ANIMATE_ATTR\n };\n\n constructor(params: ISymbolGraphicAttribute = { symbolType: 'circle' }) {\n super(params);\n this.numberType = SYMBOL_NUMBER_TYPE;\n }\n\n protected _parsedPath?: ISymbolClass;\n\n getParsedPath(): ISymbolClass {\n if (this.shouldUpdateShape()) {\n this.doUpdateParsedPath();\n this.clearUpdateShapeTag();\n }\n return this._parsedPath as ISymbolClass;\n }\n\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n private _isValid(): boolean {\n const { size } = this.attribute;\n return isArray(size) ? size.length === 2 && size.every(this._validNumber) : this._validNumber(size);\n }\n\n protected doUpdateParsedPath(): ISymbolClass {\n const symbolTheme = getTheme(this).symbol;\n // 查找内置symbol\n let { symbolType = symbolTheme.symbolType } = this.attribute;\n let path = builtinSymbolsMap[symbolType];\n if (path) {\n this._parsedPath = path;\n return path;\n }\n path = Symbol.userSymbolMap[symbolType];\n if (path) {\n this._parsedPath = path;\n return path;\n }\n\n const _symbolType = builtInSymbolStrMap[symbolType];\n symbolType = _symbolType || symbolType;\n // 判断是否是svg\n const valid = isSvg(symbolType);\n if (valid === true) {\n const parser = new XMLParser();\n const { svg } = parser.parse(symbolType);\n if (!svg) {\n return null;\n }\n const path = isArray(svg.path) ? svg.path : [svg.path];\n _tempBounds.clear();\n const cacheList: { path: CustomPath2D; attribute: Record }[] = [];\n path.forEach((item: any) => {\n const cache = new CustomPath2D().fromString(item.d);\n const attribute: any = {};\n SVG_PARSE_ATTRIBUTE_MAP_KEYS.forEach(k => {\n if (item[k]) {\n attribute[SVG_PARSE_ATTRIBUTE_MAP[k]] = item[k];\n }\n });\n // 查找\n cacheList.push({\n path: cache,\n attribute\n });\n _tempBounds.union(cache.bounds);\n });\n const width = _tempBounds.width();\n const height = _tempBounds.height();\n // 规范化到1\n const maxWH = max(width, height);\n const scale = 1 / maxWH;\n cacheList.forEach(cache => cache.path.transform(0, 0, scale, scale));\n\n this._parsedPath = new CustomSymbolClass(symbolType, cacheList, true);\n Symbol.userSymbolMap[symbolType] = this._parsedPath;\n return this._parsedPath;\n }\n\n const cache = new CustomPath2D().fromString(symbolType);\n const width = cache.bounds.width();\n const height = cache.bounds.height();\n // 规范化到1\n const maxWH = max(width, height);\n const scale = 1 / maxWH;\n cache.transform(0, 0, scale, scale);\n this._parsedPath = new CustomSymbolClass(symbolType, cache);\n Symbol.userSymbolMap[symbolType] = this._parsedPath;\n return this._parsedPath;\n }\n\n protected doUpdateAABBBounds(full?: boolean): AABBBounds {\n const symbolTheme = getTheme(this).symbol;\n this._AABBBounds.setValue(Infinity, Infinity, -Infinity, -Infinity);\n const attribute = this.attribute;\n const bounds = application.graphicService.updateSymbolAABBBounds(\n attribute,\n getTheme(this).symbol,\n this._AABBBounds,\n full,\n this\n );\n\n const { boundsPadding = symbolTheme.boundsPadding } = attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n (bounds as AABBBounds).expand(paddingArray);\n }\n\n this.clearUpdateBoundTag();\n return bounds as AABBBounds;\n }\n\n protected tryUpdateOBBBounds(): OBBBounds {\n throw new Error('暂不支持');\n }\n\n getDefaultAttribute(name: string) {\n const symbolTheme = getTheme(this).symbol;\n return symbolTheme[name];\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, SYMBOL_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, SYMBOL_UPDATE_TAG_KEY);\n }\n\n toCustomPath() {\n const symbolInstance = this.getParsedPath();\n const size = this.attribute.size;\n const x = 0;\n const y = 0;\n const formattedSize = isArray(size) ? size : [size, size];\n\n return symbolInstance.path\n ? new CustomPath2D().fromCustomPath2D(symbolInstance.path, x, y, formattedSize[0], formattedSize[1])\n : new CustomPath2D().fromString(symbolInstance.pathStr, x, y, formattedSize[0], formattedSize[1]);\n }\n\n clone() {\n return new Symbol({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record {\n return Symbol.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createSymbol(attributes: ISymbolGraphicAttribute): ISymbol {\n return new Symbol(attributes);\n}\n\n// addAttributeToPrototype(DefaultSymbolStyle, Symbol, PURE_STYLE_KEY);\n","import type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n ISymbol,\n ISymbolGraphicAttribute,\n IThemeAttribute,\n ISymbolRenderContribution,\n IDrawContext\n} from '../../../../interface';\nimport { getScaledStroke } from '../../../../common/canvas-utils';\nimport { defaultBaseBackgroundRenderContribution } from './base-contribution-render';\nimport { BaseRenderContributionTime } from '../../../../common/enums';\nimport { defaultBaseTextureRenderContribution } from './base-texture-contribution-render';\n\nexport class DefaultSymbolRenderContribution implements ISymbolRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n symbol: ISymbol,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n symbolAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const parsedPath = symbol.getParsedPath();\n // todo: 考虑使用path\n if (!parsedPath) {\n return;\n }\n\n const { outerBorder, innerBorder } = symbol.attribute;\n const doOuterBorder = outerBorder && outerBorder.visible !== false;\n const doInnerBorder = innerBorder && innerBorder.visible !== false;\n if (!(doOuterBorder || doInnerBorder)) {\n return;\n }\n\n const {\n size = symbolAttribute.size,\n opacity = symbolAttribute.opacity,\n x: originX = symbolAttribute.x,\n y: originY = symbolAttribute.y,\n scaleX = symbolAttribute.scaleX,\n scaleY = symbolAttribute.scaleY\n } = symbol.attribute;\n\n const doStrokeOuter = !!(outerBorder && outerBorder.stroke);\n const doStrokeInner = !!(innerBorder && innerBorder.stroke);\n\n if (doOuterBorder) {\n const { distance = symbolAttribute.outerBorder.distance } = outerBorder;\n const d = getScaledStroke(context, distance as number, context.dpr);\n\n context.beginPath();\n if (parsedPath.drawOffset(context, size, x, y, d) === false) {\n context.closePath();\n }\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(symbol, symbol.attribute, symbolAttribute);\n\n if (strokeCb) {\n strokeCb(context, outerBorder, symbolAttribute.outerBorder);\n } else if (doStrokeOuter) {\n // 存在stroke\n const lastOpacity = (symbolAttribute.outerBorder as any).opacity;\n (symbolAttribute.outerBorder as any).opacity = opacity;\n context.setStrokeStyle(\n symbol,\n outerBorder,\n (originX - x) / scaleX,\n (originY - y) / scaleY,\n symbolAttribute.outerBorder as any\n );\n (symbolAttribute.outerBorder as any).opacity = lastOpacity;\n context.stroke();\n }\n }\n\n if (doInnerBorder) {\n const { distance = symbolAttribute.innerBorder.distance } = innerBorder;\n const d = getScaledStroke(context, distance as number, context.dpr);\n\n context.beginPath();\n if (parsedPath.drawOffset(context, size, x, y, -d) === false) {\n context.closePath();\n }\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(symbol, symbol.attribute, symbolAttribute);\n\n if (strokeCb) {\n strokeCb(context, innerBorder, symbolAttribute.innerBorder);\n } else if (doStrokeInner) {\n // 存在stroke\n const lastOpacity = (symbolAttribute.innerBorder as any).opacity;\n (symbolAttribute.innerBorder as any).opacity = opacity;\n context.setStrokeStyle(\n symbol,\n innerBorder,\n (originX - x) / scaleX,\n (originY - y) / scaleY,\n symbolAttribute.innerBorder as any\n );\n (symbolAttribute.innerBorder as any).opacity = lastOpacity;\n context.stroke();\n }\n }\n }\n}\n\nexport const defaultSymbolRenderContribution = new DefaultSymbolRenderContribution();\nexport const defaultSymbolTextureRenderContribution = defaultBaseTextureRenderContribution;\nexport const defaultSymbolBackgroundRenderContribution = defaultBaseBackgroundRenderContribution;\n","import { mat4Allocate } from '../../../allocator/matrix-allocate';\nimport { inject, injectable, named } from '../../../common/inversify-lite';\n// eslint-disable-next-line\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport { getTheme } from '../../../graphic/theme';\nimport { SYMBOL_NUMBER_TYPE } from '../../../graphic/constants';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n ISymbol,\n IThemeAttribute,\n ISymbolRenderContribution,\n IDrawContext,\n IRenderService,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IContributionProvider\n} from '../../../interface';\nimport type {} from '../../render-service';\nimport { BaseRender } from './base-render';\nimport { BaseRenderContributionTime } from '../../../common/enums';\nimport { SymbolRenderContribution } from './contributions/constants';\nimport { drawPathProxy, fillVisible, runFill, runStroke, strokeVisible } from './utils';\nimport { isArray } from '@visactor/vutils';\nimport {\n defaultSymbolBackgroundRenderContribution,\n defaultSymbolRenderContribution,\n defaultSymbolTextureRenderContribution\n} from './contributions';\n\n@injectable()\nexport class DefaultCanvasSymbolRender extends BaseRender implements IGraphicRender {\n type: 'symbol';\n numberType: number = SYMBOL_NUMBER_TYPE;\n\n constructor(\n @inject(ContributionProvider)\n @named(SymbolRenderContribution)\n protected readonly symbolRenderContribitions: IContributionProvider\n ) {\n super();\n this.builtinContributions = [\n defaultSymbolRenderContribution,\n defaultSymbolBackgroundRenderContribution,\n defaultSymbolTextureRenderContribution\n ];\n this.init(symbolRenderContribitions);\n }\n\n drawShape(\n symbol: ISymbol,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // const symbolAttribute = graphicService.themeService.getCurrentTheme().symbolAttribute;\n const symbolAttribute = getTheme(symbol, params?.theme).symbol;\n\n const {\n size = symbolAttribute.size,\n x: originX = symbolAttribute.x,\n y: originY = symbolAttribute.y,\n scaleX = symbolAttribute.scaleX,\n scaleY = symbolAttribute.scaleY\n } = symbol.attribute;\n\n const data = this.valid(symbol, symbolAttribute, fillCb, strokeCb);\n if (!data) {\n return;\n }\n const { fVisible, sVisible, doFill, doStroke } = data;\n\n const parsedPath = symbol.getParsedPath();\n // todo: 考虑使用path\n if (!parsedPath) {\n return;\n }\n\n const { keepDirIn3d = symbolAttribute.keepDirIn3d } = symbol.attribute;\n const z = this.z ?? 0;\n context.beginPath();\n if (keepDirIn3d && context.camera && context.project) {\n const p = context.project(x, y, z);\n const camera = context.camera;\n context.camera = null;\n if (\n parsedPath.draw(\n context,\n isArray(size) ? [size[0] * scaleX, size[1] * scaleY] : size * scaleX,\n p.x,\n p.y,\n undefined,\n (p, a) => {\n // 如果是svg的话,合并一下fill和stroke\n if (symbol._parsedPath.svgCache) {\n const obj = Object.assign({}, a);\n obj.fill = a.fill ?? symbol.attribute.fill;\n obj.opacity = a.fill ?? symbol.attribute.opacity;\n obj.fillOpacity = symbol.attribute.fillOpacity;\n obj.stroke = a.stroke ?? symbol.attribute.stroke;\n a = obj;\n }\n if (a.fill) {\n if (fillCb) {\n fillCb(context, symbol.attribute, symbolAttribute);\n } else {\n context.setCommonStyle(symbol, a, originX - x, originY - y, symbolAttribute);\n context.fill();\n }\n }\n if (a.stroke) {\n if (strokeCb) {\n strokeCb(context, symbol.attribute, symbolAttribute);\n } else {\n context.setStrokeStyle(symbol, a, (originX - x) / scaleX, (originY - y) / scaleY, symbolAttribute);\n context.stroke();\n }\n }\n }\n ) === false\n ) {\n context.closePath();\n }\n context.camera = camera;\n } else {\n if (\n parsedPath.draw(context, size, x, y, z, (p, a) => {\n // 如果是svg的话,合并一下fill和stroke\n if (symbol._parsedPath.svgCache) {\n const obj = Object.assign({}, a);\n obj.fill = a.fill ?? symbol.attribute.fill;\n obj.opacity = a.opacity ?? symbol.attribute.opacity;\n obj.fillOpacity = symbol.attribute.fillOpacity;\n obj.stroke = a.stroke ?? symbol.attribute.stroke;\n a = obj;\n }\n if (a.fill) {\n if (fillCb) {\n fillCb(context, symbol.attribute, symbolAttribute);\n } else {\n context.setCommonStyle(symbol, a, originX - x, originY - y, symbolAttribute);\n context.fill();\n }\n }\n if (a.stroke) {\n if (strokeCb) {\n strokeCb(context, symbol.attribute, symbolAttribute);\n } else {\n context.setStrokeStyle(symbol, a, (originX - x) / scaleX, (originY - y) / scaleY, symbolAttribute);\n context.stroke();\n }\n }\n }) === false\n ) {\n context.closePath();\n }\n }\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(symbol, symbol.attribute, symbolAttribute);\n\n this.beforeRenderStep(\n symbol,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n symbolAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n\n // if (fill !== false) {\n // context.setCommonStyle(symbol.attribute, symbolAttribute);\n // context.fill();\n // }\n // if (stroke !== false) {\n // context.setStrokeStyle(symbol.attribute, symbolAttribute);\n // context.stroke();\n // }\n\n // svg就不用fill和stroke了\n if (doFill && !parsedPath.isSvg) {\n if (fillCb) {\n fillCb(context, symbol.attribute, symbolAttribute);\n } else if (fVisible) {\n context.setCommonStyle(symbol, symbol.attribute, originX - x, originY - y, symbolAttribute);\n context.fill();\n }\n }\n if (doStroke && !parsedPath.isSvg) {\n if (strokeCb) {\n strokeCb(context, symbol.attribute, symbolAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(\n symbol,\n symbol.attribute,\n (originX - x) / scaleX,\n (originY - y) / scaleY,\n symbolAttribute\n );\n context.stroke();\n }\n }\n\n this.afterRenderStep(\n symbol,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n symbolAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n\n draw(symbol: ISymbol, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const symbolAttribute = getTheme(symbol, params?.theme).symbol;\n this._draw(symbol, symbolAttribute, false, drawContext, params);\n }\n}\n","import { bindContributionProvider } from '../../../common/contribution-provider';\nimport { ContainerModule } from '../../../common/inversify';\nimport { DefaultBaseInteractiveRenderContribution } from './contributions';\nimport { SymbolRenderContribution } from './contributions/constants';\nimport { GraphicRender, SymbolRender } from './symbol';\nimport { DefaultCanvasSymbolRender } from './symbol-render';\n\nlet loadSymbolModule = false;\nexport const symbolModule = new ContainerModule(bind => {\n if (loadSymbolModule) {\n return;\n }\n loadSymbolModule = true;\n // symbol渲染器\n bind(DefaultCanvasSymbolRender).toSelf().inSingletonScope();\n bind(SymbolRender).to(DefaultCanvasSymbolRender).inSingletonScope();\n bind(GraphicRender).toService(SymbolRender);\n bind(SymbolRenderContribution).toService(DefaultBaseInteractiveRenderContribution);\n // symbol 渲染器注入contributions\n bindContributionProvider(bind, SymbolRenderContribution);\n});\n","export const MathPickerContribution = Symbol.for('MathPickerContribution');\n\n// math\nexport const MathArcPicker = Symbol.for('MathArcPicker');\nexport const MathAreaPicker = Symbol.for('MathAreaPicker');\nexport const MathCirclePicker = Symbol.for('MathCirclePicker');\nexport const MathImagePicker = Symbol.for('MathImagePicker');\nexport const MathLinePicker = Symbol.for('MathLinePicker');\nexport const MathPathPicker = Symbol.for('MathPathPicker');\nexport const MathRectPicker = Symbol.for('MathRectPicker');\nexport const MathSymbolPicker = Symbol.for('MathSymbolPicker');\nexport const MathTextPicker = Symbol.for('MathTextPicker');\nexport const MathPolygonPicker = Symbol.for('MathPolygonPicker');\nexport const MathGlyphPicker = Symbol.for('MathGlyphPicker');\n\n// canvas\nexport const CanvasArcPicker = Symbol.for('CanvasArcPicker');\nexport const CanvasArc3dPicker = Symbol.for('CanvasArc3dPicker');\nexport const CanvasAreaPicker = Symbol.for('CanvasAreaPicker');\nexport const CanvasCirclePicker = Symbol.for('CanvasCirclePicker');\nexport const CanvasImagePicker = Symbol.for('CanvasImagePicker');\nexport const CanvasLinePicker = Symbol.for('CanvasLinePicker');\nexport const CanvasPathPicker = Symbol.for('CanvasPathPicker');\nexport const CanvasRectPicker = Symbol.for('CanvasRectPicker');\nexport const CanvasRect3dPicker = Symbol.for('CanvasRect3dPicker');\nexport const CanvasSymbolPicker = Symbol.for('CanvasSymbolPicker');\nexport const CanvasTextPicker = Symbol.for('CanvasTextPicker');\nexport const CanvasPolygonPicker = Symbol.for('CanvasPolygonPicker');\nexport const CanvasPyramid3dPicker = Symbol.for('CanvasPyramid3dPicker');\nexport const CanvasRichTextPicker = Symbol.for('CanvasRichTextPicker');\nexport const CanvasGlyphPicker = Symbol.for('CanvasGlyphPicker');\nexport const CanvasGroupPicker = Symbol.for('CanvasGroupPicker');\nexport const CanvasPickerContribution = Symbol.for('CanvasPickerContribution');\n","import { injectable, BaseRender } from '@visactor/vrender-core';\nimport type { IGraphicAttribute, IGraphic } from '@visactor/vrender-core';\n\n@injectable()\nexport abstract class BasePicker>> extends BaseRender {}\n","import {\n inject,\n injectable,\n getTheme,\n SymbolRender,\n mat4Allocate,\n getScaledStroke,\n SYMBOL_NUMBER_TYPE\n} from '@visactor/vrender-core';\nimport type { IPoint } from '@visactor/vutils';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n ISymbol,\n IThemeAttribute,\n IGraphicPicker,\n IGraphicRender,\n IPickParams\n} from '@visactor/vrender-core';\nimport { BasePicker } from './base-picker';\n\n@injectable()\nexport class DefaultCanvasSymbolPicker extends BasePicker implements IGraphicPicker {\n type: string = 'symbol';\n numberType: number = SYMBOL_NUMBER_TYPE;\n\n constructor(@inject(SymbolRender) public readonly canvasRenderer: IGraphicRender) {\n super();\n }\n\n contains(symbol: ISymbol, point: IPoint, params?: IPickParams): boolean {\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n const parsedPath = symbol.getParsedPath();\n if (!pickContext.camera) {\n if (!symbol.AABBBounds.containsPoint(point)) {\n return false;\n }\n if (parsedPath.isSvg || symbol.attribute.pickMode === 'imprecise') {\n return true;\n }\n }\n\n pickContext.highPerformanceSave();\n // const symbolAttribute = graphicService.themeService.getCurrentTheme().symbolAttribute;\n const symbolAttribute = getTheme(symbol).symbol;\n\n const data = this.transform(symbol, symbolAttribute, pickContext);\n const { x, y, z, lastModelMatrix } = data;\n // let { x = symbolAttribute.x, y = symbolAttribute.y } = symbol.attribute;\n\n // pickContext.highPerformanceSave();\n // if (!symbol.transMatrix.onlyTranslate()) {\n // // 性能较差\n // x = 0;\n // y = 0;\n // pickContext.transformFromMatrix(symbol.transMatrix, true);\n // } else {\n // const point = symbol.getOffsetXY(symbolAttribute);\n // x += point.x;\n // y += point.y;\n // // 当前context有rotate/scale,重置matrix\n // pickContext.setTransformForCurrent();\n // }\n\n let pickPoint = point;\n if (pickContext.camera) {\n pickPoint = point.clone();\n const globalMatrix = symbol.parent.globalTransMatrix;\n pickPoint.x = globalMatrix.a * point.x + globalMatrix.c * point.y + globalMatrix.e;\n pickPoint.y = globalMatrix.b * point.x + globalMatrix.d * point.y + globalMatrix.f;\n }\n\n this.canvasRenderer.z = z;\n // 详细形状判断\n let picked = false;\n this.canvasRenderer.drawShape(\n symbol,\n pickContext,\n x,\n y,\n {} as any,\n null,\n (\n context: IContext2d,\n symbolAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n picked = context.isPointInPath(pickPoint.x, pickPoint.y);\n return picked;\n },\n (\n context: IContext2d,\n symbolAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n const lineWidth = symbolAttribute.lineWidth || themeAttribute.lineWidth;\n const pickStrokeBuffer = symbolAttribute.pickStrokeBuffer || themeAttribute.pickStrokeBuffer;\n pickContext.lineWidth = getScaledStroke(pickContext, lineWidth + pickStrokeBuffer, pickContext.dpr);\n picked = context.isPointInStroke(pickPoint.x, pickPoint.y);\n return picked;\n }\n );\n\n this.canvasRenderer.z = 0;\n\n if (pickContext.modelMatrix !== lastModelMatrix) {\n mat4Allocate.free(pickContext.modelMatrix);\n }\n pickContext.modelMatrix = lastModelMatrix;\n pickContext.highPerformanceRestore();\n return picked;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { CanvasPickerContribution, CanvasSymbolPicker } from '../constants';\nimport { DefaultCanvasSymbolPicker } from './symbol-picker';\n\nlet loadSymbolPick = false;\nexport const symbolCanvasPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadSymbolPick) {\n return;\n }\n loadSymbolPick = true;\n // symbol picker\n bind(CanvasSymbolPicker).to(DefaultCanvasSymbolPicker).inSingletonScope();\n bind(CanvasPickerContribution).toService(CanvasSymbolPicker);\n});\n","import { inject, injectable, getTheme, SymbolRender, SYMBOL_NUMBER_TYPE } from '@visactor/vrender-core';\nimport type { IPoint } from '@visactor/vutils';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n ISymbol,\n IThemeAttribute,\n IGraphicPicker,\n IGraphicRender,\n IPickParams\n} from '@visactor/vrender-core';\n\n@injectable()\nexport class DefaultMathSymbolPicker implements IGraphicPicker {\n type: string = 'symbol';\n numberType: number = SYMBOL_NUMBER_TYPE;\n\n constructor(@inject(SymbolRender) public readonly canvasRenderer: IGraphicRender) {}\n\n contains(symbol: ISymbol, point: IPoint, params?: IPickParams): boolean {\n if (!symbol.AABBBounds.containsPoint(point)) {\n return false;\n }\n if (symbol.attribute.pickMode === 'imprecise') {\n return true;\n }\n\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n // const symbolAttribute = graphicService.themeService.getCurrentTheme().symbolAttribute;\n const symbolAttribute = getTheme(symbol).symbol;\n let { x = symbolAttribute.x, y = symbolAttribute.y } = symbol.attribute;\n\n pickContext.highPerformanceSave();\n if (!symbol.transMatrix.onlyTranslate()) {\n // 性能较差\n x = 0;\n y = 0;\n pickContext.transformFromMatrix(symbol.transMatrix, true);\n } else {\n const point = symbol.getOffsetXY(symbolAttribute);\n x += point.x;\n y += point.y;\n // 当前context有rotate/scale,重置matrix\n pickContext.setTransformForCurrent();\n }\n\n // 详细形状判断\n let picked = false;\n this.canvasRenderer.drawShape(\n symbol,\n pickContext,\n x,\n y,\n {} as any,\n null,\n (\n context: IContext2d,\n symbolAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n picked = context.isPointInPath(point.x, point.y);\n return picked;\n },\n (\n context: IContext2d,\n symbolAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n const lineWidth = symbolAttribute.lineWidth || themeAttribute.lineWidth;\n const pickStrokeBuffer = symbolAttribute.pickStrokeBuffer || themeAttribute.pickStrokeBuffer;\n pickContext.lineWidth = lineWidth + pickStrokeBuffer;\n picked = context.isPointInStroke(point.x, point.y);\n return picked;\n }\n );\n\n pickContext.highPerformanceRestore();\n return picked;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { MathPickerContribution, MathSymbolPicker } from '../constants';\nimport { DefaultMathSymbolPicker } from './symbol-picker';\n\nlet loadSymbolPick = false;\nexport const symbolMathPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadSymbolPick) {\n return;\n }\n loadSymbolPick = true;\n // symbol picker\n bind(MathSymbolPicker).to(DefaultMathSymbolPicker).inSingletonScope();\n bind(MathPickerContribution).toService(MathSymbolPicker);\n});\n","import { container, registerSymbolGraphic, symbolModule } from '@visactor/vrender-core';\nimport { browser } from './env';\nimport { symbolCanvasPickModule } from '../picker/contributions/canvas-picker/symbol-module';\nimport { symbolMathPickModule } from '../picker/contributions/math-picker/symbol-module';\n\nfunction _registerSymbol() {\n if (_registerSymbol.__loaded) {\n return;\n }\n _registerSymbol.__loaded = true;\n registerSymbolGraphic();\n container.load(symbolModule);\n container.load(browser ? symbolCanvasPickModule : symbolMathPickModule);\n}\n\n_registerSymbol.__loaded = false;\n\nexport const registerSymbol = _registerSymbol;\n","import { isNil, type AABBBounds, type OBBBounds } from '@visactor/vutils';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport type { GraphicType, ICustomPath2D, IRect, IRectGraphicAttribute } from '../interface';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { parsePadding } from '../common/utils';\nimport { getTheme } from './theme';\nimport { application } from '../application';\nimport { RECT_NUMBER_TYPE } from './constants';\nimport { normalizeRectAttributes } from '../common/rect-utils';\n\nconst RECT_UPDATE_TAG_KEY = ['width', 'x1', 'y1', 'height', 'cornerRadius', ...GRAPHIC_UPDATE_TAG_KEY];\n\nexport class Rect extends Graphic implements IRect {\n type: GraphicType = 'rect';\n\n static NOWORK_ANIMATE_ATTR = NOWORK_ANIMATE_ATTR;\n\n constructor(params: IRectGraphicAttribute) {\n super(params);\n this.numberType = RECT_NUMBER_TYPE;\n }\n\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n private _isValid(): boolean {\n return true;\n // 暂时不判断,理论上认为都是合法的,节省性能耗时\n // const { width, x1, y1, height } = this.attribute;\n // return (this._validNumber(width) || this._validNumber(x1)) && (this._validNumber(height) || this._validNumber(y1));\n }\n\n protected doUpdateAABBBounds(): AABBBounds {\n const rectTheme = getTheme(this).rect;\n this._AABBBounds.setValue(Infinity, Infinity, -Infinity, -Infinity);\n const attribute = this.attribute;\n const bounds = application.graphicService.updateRectAABBBounds(\n attribute,\n getTheme(this).rect,\n this._AABBBounds,\n this\n ) as AABBBounds;\n\n const { boundsPadding = rectTheme.boundsPadding } = attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray);\n }\n\n this.clearUpdateBoundTag();\n return bounds;\n }\n\n protected tryUpdateOBBBounds(): OBBBounds {\n throw new Error('暂不支持');\n }\n\n getDefaultAttribute(name: string) {\n const rectTheme = getTheme(this).rect;\n return rectTheme[name];\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, RECT_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, RECT_UPDATE_TAG_KEY);\n }\n\n toCustomPath(): ICustomPath2D {\n // throw new Error('暂不支持');\n const attribute = this.attribute;\n const { x, y, width, height } = normalizeRectAttributes(attribute);\n\n const path = new CustomPath2D();\n path.moveTo(x, y);\n path.rect(x, y, width, height);\n\n return path;\n }\n\n clone() {\n return new Rect({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record {\n return Rect.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createRect(attributes: IRectGraphicAttribute): IRect {\n return new Rect(attributes);\n}\n","import { isArray } from '@visactor/vutils';\nimport { injectable } from '../../../../common/inversify-lite';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IRect,\n IRectGraphicAttribute,\n IThemeAttribute,\n IRectRenderContribution,\n IDrawContext\n} from '../../../../interface';\nimport { getScaledStroke } from '../../../../common/canvas-utils';\nimport { defaultBaseBackgroundRenderContribution } from './base-contribution-render';\nimport { createRectPath } from '../../../../common/shape/rect';\nimport { BaseRenderContributionTime } from '../../../../common/enums';\nimport { defaultBaseTextureRenderContribution } from './base-texture-contribution-render';\n\nexport class DefaultRectRenderContribution implements IRectRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n rect: IRect,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n rectAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const { outerBorder, innerBorder } = rect.attribute;\n const doOuterBorder = outerBorder && outerBorder.visible !== false;\n const doInnerBorder = innerBorder && innerBorder.visible !== false;\n if (!(doOuterBorder || doInnerBorder)) {\n return;\n }\n const {\n cornerRadius = rectAttribute.cornerRadius,\n opacity = rectAttribute.opacity,\n x: originX = rectAttribute.x,\n y: originY = rectAttribute.y,\n scaleX = rectAttribute.scaleX,\n scaleY = rectAttribute.scaleY,\n x1,\n y1\n } = rect.attribute;\n\n let { width, height } = rect.attribute;\n\n width = (width ?? x1 - x) || 0;\n height = (height ?? y1 - y) || 0;\n\n const doStrokeOuter = !!(outerBorder && outerBorder.stroke);\n const doStrokeInner = !!(innerBorder && innerBorder.stroke);\n\n if (doOuterBorder) {\n const { distance = rectAttribute.outerBorder.distance } = outerBorder;\n const d = getScaledStroke(context, distance as number, context.dpr);\n const nextX = x - d;\n const nextY = y - d;\n const dw = d * 2;\n if (cornerRadius === 0 || (isArray(cornerRadius) && (cornerRadius).every(num => num === 0))) {\n // 不需要处理圆角\n context.beginPath();\n context.rect(nextX, nextY, width + dw, height + dw);\n } else {\n context.beginPath();\n\n // 测试后,cache对于重绘性能提升不大,但是在首屏有一定性能损耗,因此rect不再使用cache\n createRectPath(context, nextX, nextY, width + dw, height + dw, cornerRadius);\n }\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(rect, rect.attribute, rectAttribute);\n\n if (strokeCb) {\n strokeCb(context, outerBorder, rectAttribute.outerBorder);\n } else if (doStrokeOuter) {\n // 存在stroke\n const lastOpacity = (rectAttribute.outerBorder as any).opacity;\n (rectAttribute.outerBorder as any).opacity = opacity;\n context.setStrokeStyle(\n rect,\n outerBorder,\n (originX - x) / scaleX,\n (originY - y) / scaleY,\n rectAttribute.outerBorder as any\n );\n (rectAttribute.outerBorder as any).opacity = lastOpacity;\n context.stroke();\n }\n }\n\n if (doInnerBorder) {\n const { distance = rectAttribute.innerBorder.distance } = innerBorder;\n const d = getScaledStroke(context, distance as number, context.dpr);\n const nextX = x + d;\n const nextY = y + d;\n const dw = d * 2;\n if (cornerRadius === 0 || (isArray(cornerRadius) && (cornerRadius).every(num => num === 0))) {\n // 不需要处理圆角\n context.beginPath();\n context.rect(nextX, nextY, width - dw, height - dw);\n } else {\n context.beginPath();\n\n // 测试后,cache对于重绘性能提升不大,但是在首屏有一定性能损耗,因此rect不再使用cache\n createRectPath(context, nextX, nextY, width - dw, height - dw, cornerRadius);\n }\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(rect, rect.attribute, rectAttribute);\n\n if (strokeCb) {\n strokeCb(context, innerBorder, rectAttribute.innerBorder);\n } else if (doStrokeInner) {\n // 存在stroke\n const lastOpacity = (rectAttribute.innerBorder as any).opacity;\n (rectAttribute.innerBorder as any).opacity = opacity;\n context.setStrokeStyle(\n rect,\n innerBorder,\n (originX - x) / scaleX,\n (originY - y) / scaleY,\n rectAttribute.innerBorder as any\n );\n (rectAttribute.innerBorder as any).opacity = lastOpacity;\n context.stroke();\n }\n }\n }\n}\n\n@injectable()\nexport class SplitRectBeforeRenderContribution implements IRectRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n group: IRect,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const { stroke = groupAttribute.stroke } = group.attribute as any;\n\n // 数组且存在为false的项目,那就不绘制\n if (Array.isArray(stroke) && stroke.some(s => s === false)) {\n doFillOrStroke.doStroke = false;\n }\n }\n}\n\n@injectable()\nexport class SplitRectAfterRenderContribution implements IRectRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n rect: IRect,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const {\n width = groupAttribute.width,\n height = groupAttribute.height,\n stroke = groupAttribute.stroke\n } = rect.attribute as any;\n\n // 不是数组\n if (!(Array.isArray(stroke) && stroke.some(s => s === false))) {\n return;\n }\n\n context.setStrokeStyle(rect, rect.attribute, x, y, groupAttribute);\n // 单独处理每条边界,目前不考虑圆角\n context.beginPath();\n context.moveTo(x, y);\n // top\n if (stroke[0]) {\n context.lineTo(x + width, y);\n } else {\n context.moveTo(x + width, y);\n }\n // right\n if (stroke[1]) {\n context.lineTo(x + width, y + height);\n } else {\n context.moveTo(x + width, y + height);\n }\n // bottom\n if (stroke[2]) {\n context.lineTo(x, y + height);\n } else {\n context.moveTo(x, y + height);\n }\n // left\n if (stroke[3]) {\n // 没有close path是,起点和终点不连续,需要调整y保证不出现缺口\n const adjustY = stroke[0] ? y - context.lineWidth / 2 : y;\n context.lineTo(x, adjustY);\n } else {\n context.moveTo(x, y);\n }\n\n context.stroke();\n }\n}\n\nexport const defaultRectRenderContribution = new DefaultRectRenderContribution();\n// export const splitRectBeforeRenderContribution = new SplitRectBeforeRenderContribution();\n// export const splitRectAfterRenderContribution = new SplitRectAfterRenderContribution();\nexport const defaultRectTextureRenderContribution = defaultBaseTextureRenderContribution;\nexport const defaultRectBackgroundRenderContribution = defaultBaseBackgroundRenderContribution;\n","import { isArray } from '@visactor/vutils';\nimport { inject, injectable, named } from '../../../common/inversify-lite';\nimport { getTheme } from '../../../graphic/theme';\nimport { RECT_NUMBER_TYPE } from '../../../graphic/constants';\nimport { createRectPath } from '../../../common/shape/rect';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IRect,\n IThemeAttribute,\n IGraphicRender,\n IDrawContext,\n IGraphicRenderDrawParams,\n IRenderService,\n IRectRenderContribution,\n IContributionProvider,\n IRectGraphicAttribute\n} from '../../../interface';\nimport { RectRenderContribution } from './contributions/constants';\nimport { rectFillVisible, rectStrokeVisible, runFill, runStroke } from './utils';\nimport { BaseRender } from './base-render';\nimport {\n defaultRectBackgroundRenderContribution,\n defaultRectRenderContribution,\n defaultRectTextureRenderContribution\n} from './contributions';\n\n@injectable()\nexport class DefaultCanvasRectRender extends BaseRender implements IGraphicRender {\n type = 'rect';\n numberType: number = RECT_NUMBER_TYPE;\n tempTheme: Required;\n\n constructor(\n @inject(ContributionProvider)\n @named(RectRenderContribution)\n protected readonly rectRenderContribitions: IContributionProvider\n ) {\n super();\n this.builtinContributions = [\n defaultRectRenderContribution,\n defaultRectBackgroundRenderContribution,\n defaultRectTextureRenderContribution\n ];\n this.init(rectRenderContribitions);\n }\n\n drawShape(\n rect: IRect,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const rectAttribute = this.tempTheme ?? getTheme(rect, params?.theme).rect;\n const {\n fill = rectAttribute.fill,\n background,\n stroke = rectAttribute.stroke,\n cornerRadius = rectAttribute.cornerRadius,\n opacity = rectAttribute.opacity,\n fillOpacity = rectAttribute.fillOpacity,\n lineWidth = rectAttribute.lineWidth,\n strokeOpacity = rectAttribute.strokeOpacity,\n visible = rectAttribute.visible,\n x1,\n y1,\n x: originX = rectAttribute.x,\n y: originY = rectAttribute.y\n } = rect.attribute;\n let { width, height } = rect.attribute;\n width = (width ?? x1 - originX) || 0;\n height = (height ?? y1 - originY) || 0;\n\n // 不绘制或者透明\n const fVisible = rectFillVisible(opacity, fillOpacity, width, height, fill);\n const sVisible = rectStrokeVisible(opacity, strokeOpacity, width, height);\n const doFill = runFill(fill, background);\n const doStroke = runStroke(stroke, lineWidth);\n\n if (!(rect.valid && visible)) {\n return;\n }\n\n if (!(doFill || doStroke)) {\n return;\n }\n\n // 如果存在fillCb和strokeCb,那就不直接跳过\n if (!(fVisible || sVisible || fillCb || strokeCb || background)) {\n return;\n }\n\n if (cornerRadius === 0 || (isArray(cornerRadius) && (cornerRadius).every(num => num === 0))) {\n // 不需要处理圆角\n context.beginPath();\n context.rect(x, y, width, height);\n } else {\n context.beginPath();\n\n // 测试后,cache对于重绘性能提升不大,但是在首屏有一定性能损耗,因此rect不再使用cache\n createRectPath(context, x, y, width, height, cornerRadius);\n }\n\n const doFillOrStroke = {\n doFill,\n doStroke\n };\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(rect, rect.attribute, rectAttribute);\n\n this.beforeRenderStep(\n rect,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n rectAttribute,\n drawContext,\n fillCb,\n strokeCb,\n doFillOrStroke\n );\n\n if (doFillOrStroke.doFill) {\n if (fillCb) {\n fillCb(context, rect.attribute, rectAttribute);\n } else if (fVisible) {\n // 存在fill\n context.setCommonStyle(rect, rect.attribute, originX - x, originY - y, rectAttribute);\n context.fill();\n }\n }\n if (doFillOrStroke.doStroke) {\n if (strokeCb) {\n strokeCb(context, rect.attribute, rectAttribute);\n } else if (sVisible) {\n // 存在stroke\n context.setStrokeStyle(rect, rect.attribute, originX - x, originY - y, rectAttribute);\n context.stroke();\n }\n }\n\n this.afterRenderStep(\n rect,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n rectAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n\n draw(rect: IRect, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const rectAttribute = getTheme(rect, params?.theme).rect;\n this.tempTheme = rectAttribute;\n this._draw(rect, rectAttribute, false, drawContext, params);\n this.tempTheme = null;\n }\n}\n","import { bindContributionProvider } from '../../../common/contribution-provider';\nimport { ContainerModule } from '../../../common/inversify';\nimport { DefaultCanvasArcRender } from './arc-render';\nimport {\n DefaultBaseInteractiveRenderContribution,\n SplitRectAfterRenderContribution,\n SplitRectBeforeRenderContribution\n} from './contributions';\nimport { ArcRenderContribution, RectRenderContribution } from './contributions/constants';\nimport { DefaultCanvasRectRender } from './rect-render';\nimport { ArcRender, GraphicRender, RectRender } from './symbol';\n\nlet loadRectModule = false;\nexport const rectModule = new ContainerModule(bind => {\n if (loadRectModule) {\n return;\n }\n loadRectModule = true;\n // rect 渲染器\n bind(DefaultCanvasRectRender).toSelf().inSingletonScope();\n bind(RectRender).to(DefaultCanvasRectRender).inSingletonScope();\n bind(GraphicRender).toService(RectRender);\n bind(SplitRectAfterRenderContribution).toSelf();\n bind(SplitRectBeforeRenderContribution).toSelf();\n bind(RectRenderContribution).toService(SplitRectAfterRenderContribution);\n bind(RectRenderContribution).toService(SplitRectBeforeRenderContribution);\n bind(RectRenderContribution).toService(DefaultBaseInteractiveRenderContribution);\n // rect 渲染器注入contributions\n bindContributionProvider(bind, RectRenderContribution);\n});\n","import type { IPoint } from '@visactor/vutils';\nimport { isArray, isNumber, AABBBounds } from '@visactor/vutils';\nimport { getScaledStroke, inject, injectable, getTheme, RectRender, RECT_NUMBER_TYPE } from '@visactor/vrender-core';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IRect,\n IThemeAttribute,\n IGraphicPicker,\n IGraphicRender,\n IPickParams\n} from '@visactor/vrender-core';\n\nconst _bounds = new AABBBounds();\n\n@injectable()\nexport class DefaultCanvasRectPicker implements IGraphicPicker {\n type: string = 'rect';\n numberType: number = RECT_NUMBER_TYPE;\n\n constructor(@inject(RectRender) public readonly canvasRenderer: IGraphicRender) {}\n\n contains(rect: IRect, point: IPoint, params?: IPickParams): boolean {\n if (!rect.AABBBounds.containsPoint(point)) {\n return false;\n }\n if (rect.attribute.pickMode === 'imprecise') {\n return true;\n }\n\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n // const { rectAttribute } = graphicService.themeService.getCurrentTheme();\n const rectAttribute = getTheme(rect).rect;\n const { cornerRadius = rectAttribute.cornerRadius } = rect.attribute;\n let { x = rectAttribute.x, y = rectAttribute.y } = rect.attribute;\n\n pickContext.highPerformanceSave();\n let onlyTranslate = true;\n if (!rect.transMatrix.onlyTranslate()) {\n // 性能较差\n x = 0;\n y = 0;\n onlyTranslate = false;\n pickContext.transformFromMatrix(rect.transMatrix, true);\n } else {\n const point = rect.getOffsetXY(rectAttribute);\n x += point.x;\n y += point.y;\n // 当前context有rotate/scale,重置matrix\n pickContext.setTransformForCurrent();\n }\n\n let picked = true;\n // 处理圆角情况,或者存在shadowRoot的情况,无圆角直接使用bounds判断结果\n if (\n !onlyTranslate ||\n rect.shadowRoot ||\n (isNumber(cornerRadius, true) && cornerRadius !== 0) ||\n (isArray(cornerRadius) && (cornerRadius).some(num => num !== 0))\n ) {\n // 详细形状判断\n picked = false;\n this.canvasRenderer.drawShape(\n rect,\n pickContext,\n x,\n y,\n {} as any,\n null,\n (\n context: IContext2d,\n rectAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n picked = context.isPointInPath(point.x, point.y);\n return picked;\n },\n (\n context: IContext2d,\n rectAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n const lineWidth = rectAttribute.lineWidth || themeAttribute.lineWidth;\n const pickStrokeBuffer = rectAttribute.pickStrokeBuffer || themeAttribute.pickStrokeBuffer;\n pickContext.lineWidth = getScaledStroke(pickContext, lineWidth + pickStrokeBuffer, pickContext.dpr);\n picked = context.isPointInStroke(point.x, point.y);\n return picked;\n }\n );\n } else {\n // 如果只有描边那需要测试描边\n const {\n fill = rectAttribute.fill,\n stroke = rectAttribute.stroke,\n lineWidth = rectAttribute.lineWidth\n } = rect.attribute;\n if (fill) {\n picked = true;\n } else if (stroke) {\n const bounds = rect.AABBBounds;\n _bounds.setValue(bounds.x1, bounds.y1, bounds.x2, bounds.y2);\n _bounds.expand(-lineWidth / 2);\n picked = !_bounds.containsPoint(point);\n }\n }\n\n pickContext.highPerformanceRestore();\n return picked; // 无圆角形状判断通过\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { DefaultCanvasArcPicker } from './arc-picker';\nimport { CanvasArcPicker, CanvasPickerContribution, CanvasRectPicker } from '../constants';\nimport { DefaultCanvasRectPicker } from './rect-picker';\n\nlet loadRectPick = false;\nexport const rectCanvasPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadRectPick) {\n return;\n }\n loadRectPick = true;\n bind(CanvasRectPicker).to(DefaultCanvasRectPicker).inSingletonScope();\n bind(CanvasPickerContribution).toService(CanvasRectPicker);\n});\n","import type { IPoint } from '@visactor/vutils';\nimport { isArray, isNumber, AABBBounds } from '@visactor/vutils';\nimport { inject, injectable, getTheme, RectRender, RECT_NUMBER_TYPE } from '@visactor/vrender-core';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IRect,\n IThemeAttribute,\n IGraphicPicker,\n IGraphicRender,\n IPickParams\n} from '@visactor/vrender-core';\n\nconst _bounds = new AABBBounds();\n\n@injectable()\nexport class DefaultMathRectPicker implements IGraphicPicker {\n type: string = 'rect';\n numberType: number = RECT_NUMBER_TYPE;\n\n constructor(@inject(RectRender) public readonly canvasRenderer: IGraphicRender) {}\n\n contains(rect: IRect, point: IPoint, params?: IPickParams): boolean {\n if (!rect.AABBBounds.containsPoint(point)) {\n return false;\n }\n if (rect.attribute.pickMode === 'imprecise') {\n return true;\n }\n\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n // const { rectAttribute } = graphicService.themeService.getCurrentTheme();\n const rectAttribute = getTheme(rect).rect;\n const { cornerRadius = rectAttribute.cornerRadius } = rect.attribute;\n let { x = rectAttribute.x, y = rectAttribute.y } = rect.attribute;\n\n pickContext.highPerformanceSave();\n let onlyTranslate = true;\n if (!rect.transMatrix.onlyTranslate()) {\n // 性能较差\n x = 0;\n y = 0;\n onlyTranslate = false;\n pickContext.transformFromMatrix(rect.transMatrix, true);\n } else {\n const point = rect.getOffsetXY(rectAttribute);\n x += point.x;\n y += point.y;\n // 当前context有rotate/scale,重置matrix\n pickContext.setTransformForCurrent();\n }\n\n let picked = true;\n // 处理圆角情况,无圆角直接使用bounds判断结果\n if (\n !onlyTranslate ||\n (isNumber(cornerRadius, true) && cornerRadius !== 0) ||\n (isArray(cornerRadius) && (cornerRadius).some(num => num !== 0))\n ) {\n // 详细形状判断\n picked = false;\n this.canvasRenderer.drawShape(\n rect,\n pickContext,\n x,\n y,\n {} as any,\n null,\n (\n context: IContext2d,\n rectAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n picked = context.isPointInPath(point.x, point.y);\n return picked;\n },\n (\n context: IContext2d,\n rectAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n const lineWidth = rectAttribute.lineWidth || themeAttribute.lineWidth;\n const pickStrokeBuffer = rectAttribute.pickStrokeBuffer || themeAttribute.pickStrokeBuffer;\n pickContext.lineWidth = lineWidth + pickStrokeBuffer;\n picked = context.isPointInStroke(point.x, point.y);\n return picked;\n }\n );\n } else if (picked) {\n // 如果只有描边那需要测试描边\n const {\n fill = rectAttribute.fill,\n stroke = rectAttribute.stroke,\n lineWidth = rectAttribute.lineWidth\n } = rect.attribute;\n if (fill) {\n picked = true;\n } else if (stroke) {\n const bounds = rect.AABBBounds;\n _bounds.setValue(bounds.x1, bounds.y1, bounds.x2, bounds.y2);\n _bounds.expand(-lineWidth / 2);\n picked = !_bounds.containsPoint(point);\n }\n }\n\n pickContext.highPerformanceRestore();\n return picked; // 无圆角形状判断通过\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { MathPickerContribution, MathRectPicker } from '../constants';\nimport { DefaultMathRectPicker } from './rect-picker';\n\nlet loadRectPick = false;\nexport const rectMathPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadRectPick) {\n return;\n }\n loadRectPick = true;\n // rect picker\n bind(MathRectPicker).to(DefaultMathRectPicker).inSingletonScope();\n bind(MathPickerContribution).toService(MathRectPicker);\n});\n","import { container, rectModule, registerRectGraphic } from \"@visactor/vrender-core\";\n\nimport { browser } from \"./env\";\n\nimport { rectCanvasPickModule } from \"../picker/contributions/canvas-picker/rect-module\";\n\nimport { rectMathPickModule } from \"../picker/contributions/math-picker/rect-module\";\n\nfunction _registerRect() {\n _registerRect.__loaded || (_registerRect.__loaded = !0, registerRectGraphic(), container.load(rectModule), \n container.load(browser ? rectCanvasPickModule : rectMathPickModule));\n}\n\n_registerRect.__loaded = !1;\n\nexport const registerRect = _registerRect;","import { getContainerSize, isString } from '@visactor/vutils';\nimport { DEFAULT_CHART_HEIGHT, DEFAULT_CHART_WIDTH } from '../constant/base';\nimport type { IChartSpec } from '../typings';\nimport { Direction } from '../typings';\nimport { array, isMiniAppLikeMode, isTrueBrowser, isValid, mergeSpec } from '../util';\nimport type { ICartesianChartSpec } from './cartesian/interface';\nimport type { IChartOption } from './interface/common';\nimport type { IUpdateSpecResult } from '../model/interface';\n\nexport function setDefaultCrosshairForCartesianChart(spec: ICartesianChartSpec) {\n spec.crosshair = array(spec.crosshair || {}).map(crosshairCfg => {\n return mergeSpec(\n {\n [spec.direction === Direction.horizontal ? 'yField' : 'xField']: {\n visible: true,\n line: {\n visible: true,\n type: 'rect'\n }\n }\n },\n crosshairCfg\n );\n });\n}\n\nexport function calculateChartSize(\n spec: { width?: number; height?: number },\n option: Pick,\n defaultSize: { width: number; height: number }\n) {\n const { width: userWidth, height: userHeight } = spec;\n if (isValid(userWidth) && isValid(userHeight)) {\n return {\n width: userWidth,\n height: userHeight\n };\n }\n let width = defaultSize.width;\n let height = defaultSize.height;\n const container = option.container;\n const canvas = option.canvas;\n if (container) {\n const { width: containerWidth, height: containerHeight } = getContainerSize(\n container,\n defaultSize.width,\n defaultSize.height\n );\n width = containerWidth;\n height = containerHeight;\n } else if (canvas && isTrueBrowser(option.mode)) {\n let canvasNode;\n if (isString(canvas)) {\n canvasNode = document?.getElementById(canvas);\n } else {\n canvasNode = canvas;\n }\n const { width: containerWidth, height: containerHeight } = getContainerSize(\n canvasNode as HTMLCanvasElement,\n defaultSize.width,\n defaultSize.height\n );\n width = containerWidth;\n height = containerHeight;\n } else if (isMiniAppLikeMode(option.mode) && (option.modeParams as any)?.domref) {\n const domRef = (option.modeParams as any).domref;\n width = domRef.width;\n height = domRef.height;\n }\n\n width = userWidth ?? width;\n height = userHeight ?? height;\n\n return {\n width,\n height\n };\n}\n\nexport function mergeUpdateResult(target: IUpdateSpecResult, ...sources: IUpdateSpecResult[]) {\n const merge = (key: keyof IUpdateSpecResult) => sources.reduce((value, cur) => value || cur?.[key], target[key]);\n Object.assign(target, {\n change: merge('change'),\n reCompile: merge('reCompile'),\n reMake: merge('reMake'),\n reRender: merge('reRender'),\n reSize: merge('reSize')\n } as Required);\n return target;\n}\n\nexport function getTrimPaddingConfig(chartType: string, spec: IChartSpec) {\n if (\n chartType === 'line' ||\n chartType === 'area' ||\n (chartType === 'common' && spec.series.every(item => item.type === 'area' || item.type === 'line'))\n ) {\n return {\n paddingInner: 1,\n paddingOuter: 0\n };\n }\n\n return {\n paddingOuter: 0\n };\n}\n","import type { IMarkProgressiveConfig, IMarkStateStyle, MarkType } from '../../mark/interface';\nimport type { IModel } from '../../model/interface';\nimport type { GrammarItemCompileOption, GrammarItemInitOption } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IGrammarItem } from '../interface';\nimport type { MarkStateManager } from './mark-state-manager';\nimport type { DataView } from '@visactor/vdataset';\nimport type {\n IAnimate,\n IAnimateArranger,\n IElement,\n IGroupMark,\n IMark,\n MarkAnimationSpec,\n Nil,\n TransformSpec\n} from '@visactor/vgrammar-core';\nimport type { Maybe, Datum, StringOrNumber } from '../../typings';\nimport type { MarkData } from './mark-data';\nimport type { TransformedLabelSpec } from '../../component/label';\nimport type { IRegion } from '../../region/interface';\nimport type { ICustomPath2D } from '@visactor/vrender-core';\n\nexport interface ICompilableMarkOption extends GrammarItemInitOption {\n key?: string | ((datum: Datum) => string);\n /** 分组字段,更多用于 morphing 动画的 element 匹配 */\n groupKey?: string;\n /** 是否在dataflow的过程中,布局前跳过该mark */\n skipBeforeLayouted?: boolean;\n\n /** 这个mark是否支持3d视角 */\n support3d?: boolean;\n /* VGrammar的组件是否支持3d */\n mode?: '2d' | '3d';\n /** skip theme of vgrammar or not */\n skipTheme?: boolean;\n /** don't separate style of mark */\n noSeparateStyle?: boolean;\n}\n\nexport interface ICompilableMark extends IGrammarItem {\n // 类型\n readonly type: MarkType;\n // id\n readonly id: number;\n // name\n readonly name: string;\n // key field\n readonly key?: string | ((datum: Datum) => string);\n // parent model\n readonly model: IModel;\n\n // 数据 可以没有\n getData: () => MarkData | undefined;\n setData: (d: MarkData) => void;\n getDataView: () => DataView | undefined;\n setDataView: (d?: DataView, productId?: string) => void;\n\n // 分片\n getFacet: () => string | undefined;\n setFacet: (facet: string) => void;\n\n // 状态\n state: MarkStateManager;\n readonly stateStyle: IMarkStateStyle;\n hasState: (state: string) => boolean;\n getState: (state: string) => any;\n updateState: (newState: Record) => Promise;\n /** 更新group | enter中的静态样式 */\n updateStaticEncode: () => void;\n /** 更新 mark 样式 */\n compileEncode: () => void;\n /** 更新encode中的样式 */\n updateLayoutState: (noRender?: boolean, recursion?: boolean) => Promise;\n /** 更新某一个状态 */\n updateMarkState: (key: string) => void;\n\n // transform\n setTransform: (transform: TransformSpec[] | Nil) => void;\n\n // 交互\n getInteractive: () => boolean;\n setInteractive: (interactive: boolean) => void;\n\n // 动画配置\n setAnimationConfig: (config: Partial) => void;\n getAnimationConfig: () => Partial;\n\n // 层级\n getZIndex: () => number;\n setZIndex: (zIndex: number) => void;\n\n // 是否显示\n getVisible: () => boolean;\n setVisible: (visible: boolean) => void;\n\n // 是否开启 morph\n getMorph: () => boolean;\n setMorph: (morph: boolean) => void;\n\n // 是否开启 morph\n getProgressiveConfig: () => IMarkProgressiveConfig;\n setProgressiveConfig: (config: IMarkProgressiveConfig) => void;\n\n // morphKey 配置\n getMorphKey: () => string | undefined;\n setMorphKey: (morphKey: string) => void;\n\n getMorphElementKey: () => string | undefined;\n setMorphElementKey: (morphKey: string) => void;\n\n // groupKey 配置\n getGroupKey: () => string | undefined;\n setGroupKey: (groupKey: string) => void;\n\n // 用户 id\n getUserId: () => StringOrNumber | undefined;\n setUserId: (id: StringOrNumber) => void;\n\n // 是否支持 3d\n getSupport3d: () => boolean | undefined;\n setSupport3d: (support3d: boolean) => void;\n\n compile: (option?: IMarkCompileOption) => void;\n\n getProduct: () => Maybe;\n\n /** 获取子mark */\n getMarks: () => ICompilableMark[];\n\n /** 是否跳过布局阶段 */\n setSkipBeforeLayouted: (skip: boolean) => void;\n getSkipBeforeLayouted: () => boolean;\n\n setCustomizedShapeCallback: (callback: (datum: any[], attrs: any, path: ICustomPath2D) => ICustomPath2D) => void;\n\n /** 开始状态动画 */\n runAnimationByState: (animationState?: string) => IAnimateArranger;\n /** 停止状态动画*/\n stopAnimationByState: (animationState?: string) => IAnimate;\n /** 暂停状态动画*/\n pauseAnimationByState: (animationState: string) => IAnimate;\n /** 恢复状态动画*/\n resumeAnimationByState: (animationState: string) => IAnimate;\n}\n\nexport interface IMarkDataInitOption extends ICompilableMarkOption {\n mark: ICompilableMark;\n}\n\nexport interface IMarkCompileOption extends GrammarItemCompileOption {\n group?: string | IGroupMark;\n ignoreChildren?: boolean;\n}\n\nexport interface IStateInfo {\n /** 状态值 */\n stateValue: StateValue;\n // 对应的数据维度 可以是多维度\n // TODO: fields 是否保留\n fields?: any | null | undefined;\n /** 筛选数据 */\n datums?: any[] | null | undefined;\n /** 筛选数据 */\n datumKeys?: string[] | null | undefined;\n /** 筛选 item */\n items?: any[] | null | undefined;\n /** 筛选函数 */\n filter?: ((datum: any, options: Record) => boolean) | null | undefined;\n cache?: {\n [key: string]: {\n [key: string]: boolean;\n };\n };\n /** 状态优先级 */\n level?: number | undefined;\n}\n// TODO:目前看这个类型没有必要,确认后彻底删除\nexport interface IStateSpec {\n /** 状态值 */\n stateValue: StateValue;\n /** 筛选数据 */\n datums?: any[] | null | undefined;\n /** 筛选数据对应字段 */\n datumKeys?: string[] | null | undefined;\n /** TODO: 暂时不提供 filter 函数形式 */\n // filter?:\n // | ((datum: any, options: Record) => boolean)\n // | null\n // | undefined;\n /** 状态优先级 */\n level?: number | undefined;\n}\n\nexport interface IMarkState {\n readonly id: number;\n // 状态\n getStates: () => IStateInfo[];\n\n // state 相关\n getState: (stateValue: StateValue) => IStateInfo | undefined;\n addState: (stateInfo: IStateInfo) => void;\n changeState: (stateInfo: Partial, update?: boolean) => void;\n checkState: (item: any, datum: any) => string[];\n\n clearState: (stateValues: StateValue[], update?: boolean) => void;\n\n // 更新\n update: () => void;\n}\n\n// TODO: enum to const\nexport enum STATE_VALUE_ENUM {\n STATE_NORMAL = 'normal',\n\n STATE_HOVER = 'hover',\n STATE_HOVER_REVERSE = 'hover_reverse',\n\n STATE_DIMENSION_HOVER = 'dimension_hover',\n STATE_DIMENSION_HOVER_REVERSE = 'dimension_hover_reverse',\n\n STATE_SELECTED = 'selected',\n STATE_SELECTED_REVERSE = 'selected_reverse'\n}\n\n// TODO: 也许有更好的ts写法\nexport enum STATE_VALUE_ENUM_REVERSE {\n STATE_HOVER_REVERSE = 'hover_reverse',\n STATE_DIMENSION_HOVER_REVERSE = 'dimension_hover_reverse',\n STATE_SELECTED_REVERSE = 'selected_reverse'\n}\n\nexport type STATE_NORMAL = typeof STATE_VALUE_ENUM.STATE_NORMAL;\nexport type STATE_HOVER = typeof STATE_VALUE_ENUM.STATE_HOVER;\nexport type STATE_HOVER_REVERSE = typeof STATE_VALUE_ENUM.STATE_HOVER_REVERSE;\nexport type STATE_CUSTOM = string;\n\n// TODO: 待补充\n\nexport type StateValueNot = STATE_HOVER_REVERSE | STATE_CUSTOM;\nexport type StateValue = STATE_NORMAL | STATE_HOVER | STATE_CUSTOM;\nexport type StateValueType = StateValue | StateValueNot;\n\nexport interface IAttributeOpt {\n element: IElement;\n mark: IElement['mark'];\n parent: IElement['mark']['group'];\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelMarkAttributeContext {\n [key: string]: unknown;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ISeriesMarkAttributeContext extends IModelMarkAttributeContext {\n // 通用的默认属性值获取,比如color,如果有散点图有sizeScale,则可以获取 size\n globalScale: (scaleKey: string, value: string | number) => unknown;\n // 传入seriesField值,获取对应的颜色。\n // 如果传入 null ,返回的是当前系列对应的第一个颜色值。\n seriesColor: (seriesValue?: string | number) => string;\n /**\n * 获取当前的 region\n * @returns\n */\n getRegion: () => IRegion;\n}\n","import { array, isNil, merge } from '@visactor/vutils';\nimport type { IMark } from '../interface';\n\n/** 跟随 mark 一起存储的信息 */\nexport interface IMarkInfo {\n /** 样式和 seriesField 有关 */\n styleWithSeriesField?: boolean;\n /** mark name */\n name?: string;\n}\n\nexport class MarkSet {\n protected _children: IMark[] = [];\n protected _markNameMap: Record = {};\n getMarkNameMap() {\n return this._markNameMap;\n }\n\n protected readonly _infoMap = new Map();\n static readonly defaultMarkInfo: IMarkInfo = {};\n\n addMark(mark?: IMark, markInfo?: IMarkInfo) {\n if (isNil(mark)) {\n return;\n }\n this._children.push(mark);\n this._markNameMap[mark.name] = mark;\n this._infoMap.set(mark, merge({}, MarkSet.defaultMarkInfo, markInfo));\n }\n\n removeMark(markName: string): void {\n const index = this._children.findIndex(m => m.name === markName);\n if (index >= 0) {\n this._infoMap.delete(this._children[index]);\n delete this._markNameMap[markName];\n this._children.splice(index, 1);\n }\n }\n clear() {\n this._children = [];\n this._markNameMap = {};\n this._infoMap.clear();\n }\n\n forEach(callbackfn: (value: IMark, index: number, array: IMark[]) => void) {\n this._children.forEach(callbackfn);\n }\n\n includes(mark: IMark, fromIndex?: number) {\n return this._children.includes(mark, fromIndex);\n }\n\n get(key: number | string) {\n if (!isNaN(Number(key))) {\n return this._children[key];\n }\n return this._markNameMap[key];\n }\n\n getMarks() {\n return this._children.slice();\n }\n\n getMarksInType(type: string | string[]): IMark[] {\n const types = array(type);\n return this._children.filter(m => types.includes(m.type));\n }\n\n getMarkInId(markId: number): IMark | undefined {\n return this._children.find(m => m.id === markId);\n }\n\n /**\n * 获取满足某 info 的所有 mark\n * @param info\n * @returns\n */\n getMarkWithInfo(info: Partial) {\n return this._children.find(mark => {\n return Object.keys(info).every(key => info[key] === this._infoMap.get(mark)[key]);\n });\n }\n}\n","import { isEmpty, isArray } from '@visactor/vutils';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { DimensionEventParams } from '../event/events/dimension/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { DimensionEventEnum } from '../event/events/dimension/interface';\n\nimport type { IMark } from '../mark/interface';\nimport type { EventCallback, EventParams, IEvent } from '../event/interface';\nimport type { IHoverSpec, IInteraction, ISelectSpec, ITrigger, ITriggerOption } from './interface';\nimport type { RenderMode } from '../typings/spec';\nimport { MarkSet } from '../mark/mark-set';\nimport { STATE_VALUE_ENUM } from '../compile/mark/interface';\n\nexport class DimensionTrigger implements ITrigger {\n // 事件\n readonly event: IEvent;\n\n protected readonly interaction: IInteraction;\n\n protected _option: ITriggerOption;\n protected _marks: MarkSet = new MarkSet();\n protected _markReverse: MarkSet = new MarkSet();\n\n protected _lastDimensionEvent: DimensionEventParams = null;\n\n private _hover: IHoverSpec;\n get hover() {\n return this._hover;\n }\n private _select: ISelectSpec;\n get select() {\n return this._select;\n }\n\n constructor(option: ITriggerOption) {\n this._option = option;\n this.event = this._option.model.getOption().getChart().getEvent(); // new Event(option.eventDispatcher, option.mode);\n this.interaction = option.interaction;\n this.initConfig(option.mode);\n }\n\n setStateKeys(fields: string[]): void {\n // do nothing\n }\n\n registerMark(mark: IMark): void {\n // do nothing\n if (!isEmpty(mark.stateStyle[STATE_VALUE_ENUM.STATE_DIMENSION_HOVER])) {\n this._marks.addMark(mark);\n }\n if (!isEmpty(mark.stateStyle[STATE_VALUE_ENUM.STATE_DIMENSION_HOVER_REVERSE])) {\n this._markReverse.addMark(mark);\n }\n }\n\n init(): void {\n this.initEvent();\n }\n\n release(): void {\n this.releaseEvent();\n }\n\n // event\n protected initEvent() {\n const event = this.event;\n event.on(DimensionEventEnum.dimensionHover, this.onHover as EventCallback);\n }\n\n protected releaseEvent(): void {\n this.event.release();\n }\n\n private initConfig(mode: RenderMode): void {\n // do nothing\n }\n\n protected getEventElement(params: DimensionEventParams, reverse: boolean = false): { el: IElement; mark: IMark }[] {\n // items 修改遍历方法从 mark\n\n const items: { el: IElement; mark: IMark }[] = [] as unknown as { el: IElement; mark: IMark }[];\n params.dimensionInfo.forEach(df => {\n df.data.forEach(dd => {\n const seriesMark = (reverse ? this._markReverse : this._marks)\n .getMarks()\n .filter(m => m.model === dd.series && m.getVisible());\n seriesMark.forEach(m => {\n const elements = m\n .getProduct()\n .elements.filter(e => {\n const datum = e.getDatum();\n let c;\n if (isArray(datum)) {\n c = datum.every((oneData, i) => oneData === dd.datum[i]);\n } else {\n c = dd.datum.some(dd_d => dd_d === datum);\n }\n return reverse ? !c : c;\n })\n .map(el => {\n return {\n el,\n mark: m\n };\n });\n items.push(...elements);\n });\n });\n });\n return items;\n }\n\n protected dimensionDataEqual(params: DimensionEventParams) {\n if (this._lastDimensionEvent === params) {\n return true;\n }\n if (!this._lastDimensionEvent || !params) {\n return false;\n }\n if (this._lastDimensionEvent.dimensionInfo.length !== params.dimensionInfo.length) {\n return false;\n }\n for (let i = 0; i < this._lastDimensionEvent.dimensionInfo.length; i++) {\n const last = this._lastDimensionEvent.dimensionInfo[i];\n const current = params.dimensionInfo[i];\n if (last.value !== current.value) {\n return false;\n }\n if (last.axis !== current.axis) {\n return false;\n }\n if (last.data.length !== current.data.length) {\n return false;\n }\n for (let j = 0; j < last.data.length; j++) {\n const lastData = last.data[j];\n const currentData = current.data[j];\n if (lastData.series !== currentData.series) {\n return false;\n }\n if (lastData.datum.length !== currentData.datum.length) {\n return false;\n }\n for (let k = 0; k < lastData.datum.length; k++) {\n if (lastData.datum[k] !== currentData.datum[k]) {\n return false;\n }\n }\n }\n }\n return true;\n }\n\n private onHover = (params: DimensionEventParams) => {\n const elements = this.getEventElement(params);\n switch (params.action) {\n case 'enter':\n // clear last hover\n // eslint-disable-next-line no-case-declarations\n const lastHover = this.interaction.getEventElement(STATE_VALUE_ENUM.STATE_DIMENSION_HOVER);\n lastHover.forEach(e => {\n this.interaction.addEventElement(STATE_VALUE_ENUM.STATE_DIMENSION_HOVER_REVERSE, e);\n });\n this.interaction.clearEventElement(STATE_VALUE_ENUM.STATE_DIMENSION_HOVER, false);\n // add new\n elements.forEach(({ el, mark }) => {\n this.interaction.addEventElement(STATE_VALUE_ENUM.STATE_DIMENSION_HOVER, el);\n });\n this.interaction.reverseEventElement(STATE_VALUE_ENUM.STATE_DIMENSION_HOVER);\n break;\n case 'leave':\n // clear all\n this.interaction.clearEventElement(STATE_VALUE_ENUM.STATE_DIMENSION_HOVER, true);\n params = null;\n break;\n case 'click':\n case 'move':\n default:\n break;\n }\n this._lastDimensionEvent = params;\n };\n}\n","import { isFunction } from '@visactor/vutils';\nimport type { IAttrs, IMarkStateStyle } from '../../mark/interface';\nimport { STATE_VALUE_ENUM } from './interface';\n\nexport function isAttrChangeable(key: string, stateStyle: IMarkStateStyle) {\n for (const state in stateStyle) {\n if (state === STATE_VALUE_ENUM.STATE_NORMAL) {\n const style = stateStyle[state][key]?.style;\n const isGradient = isGradientAttribute(key, style);\n if (isGradient) {\n return true;\n }\n const isFunctionStyle = isFunction(style);\n if (isFunctionStyle) {\n return true;\n }\n const isScale = !!style?.scale;\n if (isScale) {\n return true;\n }\n continue;\n }\n if (key in stateStyle[state]) {\n return true;\n }\n }\n return false;\n}\n\nexport function isStateAttrChangeable(key: string, stateStyle: Partial>, facetField: string) {\n const style = stateStyle[key]?.style;\n const isGradient = isGradientAttribute(key, style);\n if (isGradient) {\n return true;\n }\n const isFunctionStyle = isFunction(style);\n if (isFunctionStyle) {\n return true;\n }\n const isScale = !!style?.scale;\n if (isScale) {\n if (style.field !== facetField) {\n return true;\n }\n }\n return false;\n}\n\nfunction isGradientAttribute(key: string, style: any) {\n return (key === 'fill' || key === 'stroke') && style?.gradient && style?.stops;\n}\n\nconst DEFAULT_STATE_VALUE_ENUM = {};\nObject.values(STATE_VALUE_ENUM).forEach(v => {\n DEFAULT_STATE_VALUE_ENUM[v] = true;\n});\n\nexport function stateInDefaultEnum(state: string) {\n return !!DEFAULT_STATE_VALUE_ENUM[state];\n}\n\nconst DEFAULT_STATE_VALUE_TO_REVERSE = {\n [STATE_VALUE_ENUM.STATE_HOVER]: STATE_VALUE_ENUM.STATE_HOVER_REVERSE,\n [STATE_VALUE_ENUM.STATE_SELECTED]: STATE_VALUE_ENUM.STATE_SELECTED_REVERSE,\n [STATE_VALUE_ENUM.STATE_DIMENSION_HOVER]: STATE_VALUE_ENUM.STATE_DIMENSION_HOVER_REVERSE\n};\n\nexport function stateToReverse(state: string) {\n return DEFAULT_STATE_VALUE_TO_REVERSE[state];\n}\n","import { isEmpty } from '@visactor/vutils';\nimport type { StateValue } from '../compile/mark';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { BaseEventParams } from '../event/interface';\nimport type { IMark } from '../mark/interface';\nimport type { IInteraction } from './interface';\nimport { stateToReverse } from '../compile/mark/util';\n\nexport class Interaction implements IInteraction {\n // 数据\n private _stateMarks: Map = new Map();\n // active\n private _stateElements: Map = new Map();\n\n static markStateEnable(mark: IMark, state: string) {\n return !isEmpty(mark.stateStyle[state]);\n }\n\n private _disableTriggerEvent: boolean = false;\n\n setDisableActiveEffect(disable: boolean) {\n this._disableTriggerEvent = disable;\n }\n\n registerMark(state: StateValue, mark: IMark): void {\n if (!this._stateMarks.has(state)) {\n this._stateMarks.set(state, []);\n }\n this._stateMarks.get(state)?.push(mark);\n }\n\n getStateMark(state: StateValue): IMark[] | null {\n return this._stateMarks.get(state);\n }\n\n filterEventMark(params: BaseEventParams, state: StateValue): boolean {\n return !!(params.mark && this._stateMarks.get(state)?.includes(params.mark));\n }\n\n getEventElement(stateValue: StateValue) {\n return this._stateElements.get(stateValue) ?? [];\n }\n\n getEventElementData(stateValue: StateValue) {\n return this.getEventElement(stateValue).map(e => e.getDatum());\n }\n\n exchangeEventElement(stateValue: StateValue, element: IElement) {\n if (this._disableTriggerEvent) {\n return;\n }\n // reverse\n const reState = stateToReverse(stateValue);\n this._stateElements.get(stateValue)?.forEach(e => {\n e.removeState(stateValue);\n if (reState) {\n this.addEventElement(reState, e);\n }\n });\n if (!element.getStates().includes(stateValue)) {\n element.addState(stateValue);\n if (reState) {\n element.removeState(reState);\n }\n }\n this._stateElements.set(stateValue, [element]);\n }\n\n removeEventElement(stateValue: StateValue, element: IElement) {\n if (this._disableTriggerEvent) {\n return;\n }\n element.removeState(stateValue);\n const list = this._stateElements.get(stateValue)?.filter(e => e !== element) ?? [];\n this._stateElements.set(stateValue, list);\n // reverse\n const reState = stateToReverse(stateValue);\n if (reState) {\n if (list.length === 0) {\n // clear reverse\n this.clearEventElement(reState, false);\n } else {\n // add reverse to element\n this.addEventElement(reState, element);\n }\n }\n }\n\n addEventElement(stateValue: StateValue, element: IElement) {\n if (this._disableTriggerEvent) {\n return;\n }\n if (!element.getStates().includes(stateValue)) {\n element.addState(stateValue);\n }\n const list = this._stateElements.get(stateValue) ?? [];\n list.push(element);\n this._stateElements.set(stateValue, list);\n }\n\n clearEventElement(stateValue: StateValue, clearReverse: boolean) {\n if (this._disableTriggerEvent) {\n return;\n }\n this._stateElements.get(stateValue)?.forEach(e => {\n e.removeState(stateValue);\n });\n this._stateElements.set(stateValue, []);\n\n if (clearReverse) {\n const reState = stateToReverse(stateValue);\n if (reState) {\n this.clearEventElement(reState, false);\n }\n }\n }\n\n /**\n * 激活交互元素时 进行反选\n * 需要先将元素添加到已交互状态再使用此方法反选\n * @param stateValue\n * @param activeElement\n * @returns\n */\n reverseEventElement(stateValue: StateValue) {\n if (this._disableTriggerEvent) {\n return;\n }\n // TODO:直接加默认后缀?or再增加一个map?\n const state = stateToReverse(stateValue);\n if (!state) {\n return;\n }\n const marks = this.getStateMark(state);\n if (!marks) {\n return;\n }\n const activeElements = this.getEventElement(stateValue);\n if (!activeElements.length) {\n return;\n }\n const currentReverse = this.getEventElement(state);\n if (!currentReverse.length) {\n // all\n // for performance array.include\n // FIXME: 也许并没有太大必要\n if (activeElements.length === 1) {\n marks.forEach(m => {\n m.getProduct()\n .elements.filter(e => e !== activeElements[0])\n .forEach(e => {\n this.addEventElement(state, e);\n });\n });\n } else {\n marks.forEach(m => {\n m.getProduct()\n .elements.filter(e => !activeElements.includes(e))\n .forEach(e => {\n this.addEventElement(state, e);\n });\n });\n }\n }\n }\n}\n","import { PREFIX } from './base';\n\nexport const DEFAULT_MEASURE_CANVAS_ID = `${PREFIX}_MEASURE_CANVAS_ID`;\n\nexport const DEFAULT_DATA_INDEX = `${PREFIX}_DEFAULT_DATA_INDEX`;\n\nexport const DEFAULT_DATA_KEY = `${PREFIX}_DEFAULT_DATA_KEY`;\n\nexport const DEFAULT_DATA_SERIES_FIELD = `${PREFIX}_DEFAULT_DATA_SERIES_FIELD`;\n\nexport const DEFAULT_SERIES_STYLE_NAME = `${PREFIX}_DEFAULT_SERIES_STYLE_NAME`;\n\nexport enum AttributeLevel {\n Default = 0,\n Theme = 1,\n Chart = 2,\n Base_Series = 3, // general operation in base series\n Series = 4, // specified operation in derived series\n Mark = 5,\n User_Chart = 6,\n User_Series = 7,\n User_Mark = 8,\n Built_In = 99\n}\n\nexport const STACK_FIELD_START = `${PREFIX}_STACK_START`;\nexport const STACK_FIELD_END = `${PREFIX}_STACK_END`;\nexport const STACK_FIELD_START_PERCENT = `${PREFIX}_STACK_START_PERCENT`;\nexport const STACK_FIELD_END_PERCENT = `${PREFIX}_STACK_END_PERCENT`;\nexport const STACK_FIELD_START_OffsetSilhouette = `${PREFIX}_STACK_START_OffsetSilhouette`;\nexport const STACK_FIELD_END_OffsetSilhouette = `${PREFIX}_STACK_END_OffsetSilhouette`;\nexport const STACK_FIELD_TOTAL = `${PREFIX}_STACK_TOTAL`;\nexport const STACK_FIELD_TOTAL_PERCENT = `${PREFIX}_STACK_TOTAL_PERCENT`;\nexport const STACK_FIELD_TOTAL_TOP = `${PREFIX}_STACK_TOTAL_TOP`;\n\nexport const SEGMENT_FIELD_START = `${PREFIX}_SEGMENT_START`;\nexport const SEGMENT_FIELD_END = `${PREFIX}_SEGMENT_END`;\n\nexport enum LayoutZIndex {\n Axis_Grid = 50,\n CrossHair_Grid = 100,\n Region = 450,\n\n Mark = 300,\n\n Node = 400,\n\n Axis = 100,\n\n MarkLine = 500,\n\n MarkArea = 100,\n\n MarkPoint = 500,\n\n DataZoom = 500,\n\n ScrollBar = 500,\n\n Player = 500,\n\n Legend = 500,\n\n CrossHair = 500,\n\n Indicator = 500,\n\n Title = 500,\n\n Label = 500,\n\n Brush = 500,\n\n CustomMark = 500,\n\n Interaction = 700\n}\n/**\n * 数值越大,越先布局\n */\nexport enum LayoutLevel {\n Indicator = 10,\n\n Region = 20,\n\n Axis = 30,\n\n DataZoom = 40,\n\n Player = 40,\n\n ScrollBar = 40,\n\n Legend = 50,\n\n Title = 70,\n\n CustomMark = 70\n}\n\nexport const GradientType = ['linear', 'radial', 'conical'];\n\nexport const DEFAULT_LINEAR_GRADIENT_CONFIG = {\n x0: 0,\n y0: 0,\n x1: 1,\n y1: 1\n};\n\nexport const DEFAULT_RADIAL_GRADIENT_CONFIG = {\n x0: 0,\n y0: 0,\n x1: 1,\n y1: 1,\n r0: 0,\n r1: 1\n};\n\nexport const DEFAULT_CONICAL_GRADIENT_CONFIG = {\n x: 0.5,\n y: 0.5,\n startAngle: 0,\n endAngle: Math.PI * 2\n};\n\nexport const DEFAULT_GRADIENT_CONFIG = {\n linear: DEFAULT_LINEAR_GRADIENT_CONFIG,\n radial: DEFAULT_RADIAL_GRADIENT_CONFIG,\n conical: DEFAULT_CONICAL_GRADIENT_CONFIG\n};\n\nexport * from './base';\nexport * from './label';\nexport * from './polar';\nexport * from './layout';\nexport * from './event';\nexport * from './waterfall';\nexport * from './correlation';\n","import type { Compiler } from './compiler';\nimport type { ICompilableInitOption, ICompilable } from './interface';\n\n/** 可以编译的类的统一基类 */\nexport abstract class CompilableBase implements ICompilable {\n protected _option: ICompilableInitOption;\n getOption() {\n return this._option;\n }\n\n getCompiler: () => Compiler;\n\n constructor(option: ICompilableInitOption) {\n this._option = option;\n this.getCompiler = this._option.getCompiler;\n }\n\n getVGrammarView() {\n return this.getCompiler()?.getVGrammarView();\n }\n\n abstract compile(): void;\n\n release() {\n this._option = null;\n }\n}\n","import { isValid } from \"@visactor/vutils\";\n\nimport { createID } from \"../util/id\";\n\nimport { CompilableBase } from \"./compilable-base\";\n\nexport class GrammarItem extends CompilableBase {\n constructor() {\n super(...arguments), this.id = createID(), this._compiledProductId = null, this._depend = [];\n }\n getProduct() {\n if (isValid(this._product)) return this._product;\n const view = this.getVGrammarView(), id = this.getProductId();\n return isValid(id) && isValid(view) && (this._product = this._lookupGrammar(id)), \n this._product;\n }\n getProductId() {\n var _a;\n return null !== (_a = this._compiledProductId) && void 0 !== _a ? _a : this.generateProductId();\n }\n getDepend() {\n return this._depend;\n }\n setDepend(...depend) {\n this._depend = depend;\n }\n compile(option) {\n this._compileProduct(option), this._afterCompile(option);\n }\n _afterCompile(option) {\n var _a;\n isValid(this._product) && (null === (_a = this.getCompiler()) || void 0 === _a || _a.addGrammarItem(this));\n }\n updateDepend() {\n if (isValid(this._product)) {\n const depend = this.getDepend().map((item => item.getProduct())).filter(isValid);\n return this._product.depend(depend), depend.length === this.getDepend().length;\n }\n return !1;\n }\n release() {\n this.removeProduct(), super.release(), this._depend = [];\n }\n removeProduct(reserveVGrammarModel) {\n this.getCompiler().removeGrammarItem(this, reserveVGrammarModel), this._product = null, \n this._compiledProductId = null;\n }\n}","import type { ISignal, SignalFunctionType } from '@visactor/vgrammar-core';\nimport { GrammarItem } from '../grammar-item';\nimport type { Maybe } from '../../typings';\nimport { isValid } from '../../util/type';\nimport type { GrammarItemInitOption } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarType } from '../interface/compilable-item';\nimport type { ICompilableSignal } from './interface';\n\nexport class CompilableSignal extends GrammarItem implements ICompilableSignal {\n readonly grammarType = GrammarType.signal;\n protected declare _product: Maybe>;\n declare getProduct: () => Maybe>;\n\n readonly name: string;\n\n /** signal 的值 */\n protected _value: Maybe;\n getValue() {\n return this._value;\n }\n /** signal 的值回调 */\n protected _updateFunc: Maybe>;\n getUpdateFunc() {\n return this._updateFunc;\n }\n\n constructor(option: GrammarItemInitOption, name: string, value?: T, updateFunc?: SignalFunctionType) {\n super(option);\n this.name = name;\n this._value = value;\n this._updateFunc = updateFunc;\n }\n\n /** 更新 signal */\n updateSignal(value?: T, updateFunc?: SignalFunctionType) {\n this._value = value;\n this._updateFunc = updateFunc;\n this.compile();\n }\n\n protected _compileProduct() {\n const view = this.getVGrammarView();\n if (!view) {\n return;\n }\n\n const product = this.getProduct();\n if (!product) {\n const id = this.getProductId();\n this._product = view.signal().id(id);\n this._compiledProductId = id;\n }\n if (isValid(this._value)) {\n this._product.value(this._value);\n }\n if (isValid(this._updateFunc)) {\n this._product.update(this._updateFunc);\n }\n }\n\n generateProductId(): string {\n return this.name;\n }\n\n protected _lookupGrammar(id: string) {\n return this.getCompiler().getVGrammarView()?.getSignalById(id);\n }\n}\n","import type { SignalFunctionType } from '@visactor/vgrammar-core';\nimport { CompilableSignal } from './compilable-signal';\nimport { CompilableBase } from '../compilable-base';\n\nexport class SignalManager extends CompilableBase {\n /** signal map */\n protected _signalMap: Record> = {};\n getSignalMap() {\n return this._signalMap;\n }\n getSignal(name: string) {\n return this._signalMap[name];\n }\n\n /** 增加或更新 signal */\n updateSignal(name: string, value: any, updateFunc?: SignalFunctionType) {\n if (!this._signalMap[name]) {\n this._signalMap[name] = new CompilableSignal(this._option, name, value, updateFunc);\n this._signalMap[name].compile();\n } else {\n this._signalMap[name].updateSignal(value, updateFunc);\n }\n }\n\n compile() {\n Object.values(this._signalMap).forEach(signal => {\n signal.compile();\n });\n }\n\n release() {\n super.release();\n\n Object.values(this._signalMap).forEach(signal => {\n signal.release();\n });\n this._signalMap = {};\n }\n}\n","import { merge } from '@visactor/vutils';\nimport type { IStateManagerOption, StateValueMap } from './interface';\nimport { SignalManager } from './signal-manager';\n\n/** 状态管理器,由 SignalManager 继承而来,管理所有和状态相关的 signal */\nexport class StateManager extends SignalManager {\n protected _stateMap: StateValueMap;\n getStateMap() {\n return this._stateMap;\n }\n\n /** 默认 state map */\n protected _getDefaultStateMap(): StateValueMap {\n return {};\n }\n\n /** state key 转为 signal name */\n protected stateKeyToSignalName: (key: string) => string;\n\n constructor(option: IStateManagerOption) {\n super(option);\n if (option.stateKeyToSignalName) {\n this.stateKeyToSignalName = option.stateKeyToSignalName;\n } else {\n this.stateKeyToSignalName = () => 'state_signal';\n }\n this.initStateMap();\n }\n\n /** 初始化 state map */\n initStateMap(state?: StateValueMap) {\n this._stateMap = state ?? this._getDefaultStateMap();\n }\n\n compile(stateMap?: StateValueMap) {\n const state = stateMap ?? this._stateMap;\n Object.keys(state).forEach(key => {\n const name = this.stateKeyToSignalName(key);\n const value = state[key];\n this.updateSignal(name, value);\n });\n }\n\n /** 更新 state 并默认触发重渲染 */\n updateState(newState: Partial, noRender?: boolean) {\n if (!newState) {\n return Promise.resolve();\n }\n merge(this._stateMap, newState);\n\n this.compile(newState);\n\n if (noRender) {\n return Promise.resolve();\n }\n return this.getCompiler().renderAsync();\n }\n}\n","import type { IElement } from '@visactor/vgrammar-core';\nimport { StateManager } from '../compile/signal/state-manager';\nimport type { StateValueMap } from '../compile/signal/interface';\nimport { PREFIX } from '../constant';\nimport { createID } from '../util/id';\nimport type { IAnimate, IAnimateState } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { AnimationStateEnum } from './interface';\n\nexport class AnimateManager extends StateManager implements IAnimate {\n protected declare _stateMap: IAnimateState & StateValueMap;\n\n readonly id: number = createID();\n\n protected stateKeyToSignalName = (key: string) => {\n return `${PREFIX}_animate_${this.id}_${key}`;\n };\n\n getAnimationStateSignalName() {\n return this.stateKeyToSignalName('animationState');\n }\n\n updateAnimateState(state: AnimationStateEnum, noRender?: boolean) {\n // when animation state is 'update', do animations by element diffState(enter & update & exit)\n if (state === AnimationStateEnum.update) {\n this.updateState(\n {\n animationState: {\n callback: (datum: any, element: IElement) => element.diffState\n }\n },\n noRender\n );\n }\n // when animation state is 'appear', all valid elements would do appear animation except from exit elements\n else if (state === AnimationStateEnum.appear) {\n this.updateState(\n {\n animationState: {\n callback: (datum: any, element: IElement) => {\n return element.diffState === 'exit' ? AnimationStateEnum.none : AnimationStateEnum.appear;\n }\n }\n },\n noRender\n );\n }\n // when animation state is other types, all elements would do animation by state\n else {\n this.updateState(\n {\n animationState: {\n callback: (datum: any, element: IElement) => state\n }\n },\n noRender\n );\n }\n }\n\n protected _getDefaultStateMap(): IAnimateState & StateValueMap {\n return {\n animationState: {\n callback: (datum: any, element: IElement) => {\n return element.diffState === 'exit' ? AnimationStateEnum.exit : AnimationStateEnum.appear;\n }\n }\n };\n }\n}\n","import type { IChartSpecInfo } from '../chart/interface';\nimport { isArray, mergeSpec } from '../util';\nimport type { IBaseModelSpecTransformer, IBaseModelSpecTransformerOption, IModelSpec } from './interface';\n\nexport class BaseModelSpecTransformer implements IBaseModelSpecTransformer {\n readonly type: string;\n protected _option: IBaseModelSpecTransformerOption;\n\n protected _theme?: K; // 非全局 theme,是对应于具体 model 的 theme 对象\n\n constructor(option: IBaseModelSpecTransformerOption) {\n this._option = option;\n this.type = option.type;\n }\n\n protected _initTheme(spec: T, chartSpec: any): { spec: T; theme: K } {\n this._theme = this.getTheme(spec, chartSpec);\n return this._mergeThemeToSpec(spec, chartSpec);\n }\n\n getTheme(spec: T, chartSpec: any): K {\n return undefined;\n }\n\n /** 不建议重写该方法,最好重写对应子步骤 */\n transformSpec(spec: T, chartSpec: any, chartSpecInfo?: IChartSpecInfo): { spec: T; theme: K } {\n this._transformSpecBeforeMergingTheme(spec, chartSpec, chartSpecInfo);\n const result = this._initTheme(spec, chartSpec);\n this._transformSpecAfterMergingTheme(result.spec, chartSpec, chartSpecInfo);\n return result;\n }\n\n protected _transformSpecBeforeMergingTheme(spec: T, chartSpec: any, chartSpecInfo?: IChartSpecInfo) {\n // do nothing\n // change spec by default logic\n }\n\n protected _transformSpecAfterMergingTheme(spec: T, chartSpec: any, chartSpecInfo?: IChartSpecInfo) {\n // do nothing\n // change spec by default logic\n }\n\n /** 将 theme merge 到 spec 中 */\n protected _mergeThemeToSpec(spec: T, chartSpec: any): { spec: T; theme: K } {\n const theme = this._theme;\n if (this._shouldMergeThemeToSpec()) {\n const specFromChart = this._getDefaultSpecFromChart(chartSpec);\n // this._originalSpec + specFromChart + this._theme = this._spec\n const merge = (originalSpec: any) => mergeSpec({}, theme, specFromChart, originalSpec);\n\n if (isArray(spec)) {\n return {\n spec: spec.map(specItem => merge(specItem)) as unknown as T,\n theme\n };\n }\n return {\n spec: merge(spec),\n theme\n };\n }\n return { spec, theme };\n }\n\n /** 是否在初始化时将 theme 自动 merge 到 spec */\n protected _shouldMergeThemeToSpec(): boolean {\n return true;\n }\n\n /** 从 chart spec 提取配置作为 model 的默认 spec 配置 */\n protected _getDefaultSpecFromChart(chartSpec: any): Partial | undefined {\n return undefined;\n }\n}\n","import { get, isArray, isFunction, isNil, isObject } from '@visactor/vutils';\n\n/**\n * 判断一个 spec 是否包含另一个 spec 片段\n * @param spec 原始 spec\n * @param searchSpec 要匹配的 spec 片段\n */\nexport const includeSpec = (spec: Partial, searchSpec: Partial): boolean => {\n if (spec === searchSpec) {\n return true;\n }\n if (isFunction(spec) || isFunction(searchSpec)) {\n return false;\n }\n if (isArray(spec) && isArray(searchSpec)) {\n return searchSpec.every(searchItem => spec.some(item => includeSpec(item, searchItem)));\n }\n if (isObject(spec) && isObject(searchSpec)) {\n return Object.keys(searchSpec).every(key => includeSpec(spec[key], searchSpec[key]));\n }\n return false;\n};\n\nexport const setProperty = (target: T, path: Array, value: any): T => {\n if (isNil(path)) {\n return target;\n }\n const key = path[0];\n if (isNil(key)) {\n return target;\n }\n if (path.length === 1) {\n target[key] = value;\n return target;\n }\n if (isNil(target[key])) {\n if (typeof path[1] === 'number') {\n target[key] = [];\n } else {\n target[key] = {};\n }\n }\n return setProperty(target[key], path.slice(1), value);\n};\n\nexport const getProperty = (target: any, path: Array, defaultValue?: T): T => {\n if (isNil(path)) {\n return undefined;\n }\n return get(target, path as string[], defaultValue) as T;\n};\n","import { createID } from '../util/id';\nimport { Event } from '../event/event';\nimport type { IEvent } from '../event/interface';\nimport type {\n IEffect,\n IModel,\n IModelInitOption,\n IModelOption,\n IModelRenderOption,\n IModelEvaluateOption,\n IModelSpec,\n IModelMarkInfo,\n IModelSpecInfo\n} from './interface';\nimport type { CoordinateType } from '../typings/coordinate';\nimport type { IMark, IMarkOption, IMarkRaw, IMarkStyle, MarkTypeEnum } from '../mark/interface';\nimport type {\n Datum,\n StateValueType,\n ConvertToMarkStyleSpec,\n ICommonSpec,\n StringOrNumber,\n IRect,\n ILayoutRect\n} from '../typings';\nimport type { CompilableData } from '../compile/data/compilable-data';\nimport type { IGroupMark } from '@visactor/vgrammar-core';\nimport { isValid } from '@visactor/vutils';\nimport { Factory } from '../core/factory';\nimport { MarkSet } from '../mark/mark-set';\nimport type { ILayoutItem } from '../layout/interface';\nimport { CompilableBase } from '../compile/compilable-base';\nimport { PREFIX } from '../constant/base';\nimport { BaseModelSpecTransformer } from './base-model-transformer';\nimport { getProperty } from '@visactor/vutils-extension';\n\nexport abstract class BaseModel extends CompilableBase implements IModel {\n readonly transformerConstructor = BaseModelSpecTransformer;\n\n protected _spec: T;\n getSpec(): T {\n return this._spec || ({} as T);\n }\n\n /** 获取当前 model 对应在图表 spec 上的路径 */\n getSpecPath() {\n return this._option.specPath;\n }\n\n /** 获取当前 model 对应在图表 specInfo 上的路径 */\n getSpecInfoPath() {\n return this._option.specInfoPath ?? this._option.specPath;\n }\n\n readonly type: string = 'null';\n readonly modelType: string = 'null';\n\n readonly id;\n\n userId: StringOrNumber | undefined = undefined;\n\n // 事件\n readonly event: IEvent;\n\n // 副作用\n readonly effect: IEffect;\n\n // 数据\n protected _data: CompilableData = null;\n getData() {\n return this._data;\n }\n\n // 布局\n protected _layout?: ILayoutItem = null;\n get layout() {\n return this._layout;\n }\n\n protected _specIndex: number = 0;\n getSpecIndex() {\n return this._specIndex;\n }\n\n readonly specKey: string = '';\n\n protected declare _option: IModelOption;\n getOption() {\n return this._option;\n }\n\n protected _marks: MarkSet = new MarkSet();\n getMarks(): IMark[] {\n return this._marks?.getMarks() ?? [];\n }\n getMarkNameMap() {\n return this._marks?.getMarkNameMap();\n }\n getMarkSet() {\n return this._marks;\n }\n getMarkInfoList(): IModelMarkInfo[] {\n return this.getMarks().map(mark => ({\n type: mark.type as MarkTypeEnum,\n name: mark.name\n }));\n }\n\n getChart() {\n return this._option.getChart();\n }\n\n protected get _theme() {\n return this.getSpecInfo()?.theme;\n }\n\n /** for layout diff */\n protected _lastLayoutRect: ILayoutRect = null;\n\n constructor(spec: T, option: IModelOption) {\n super(option);\n this.id = createID();\n this.userId = spec.id;\n this._spec = spec;\n this._specIndex = option.specIndex ?? 0;\n this.effect = {};\n this.event = new Event(option.eventDispatcher, option.mode);\n option.map?.set(this.id, this);\n }\n coordinate?: CoordinateType;\n\n protected _releaseEvent() {\n this.event.release();\n }\n\n created() {\n this.setAttrFromSpec();\n }\n\n init(option: IModelInitOption) {\n // do nothing\n }\n\n afterInit() {\n // do nothing\n }\n\n getVisible() {\n return (this._spec as unknown as any)?.visible !== false;\n }\n\n onLayoutStart(layoutRect: IRect, viewRect: ILayoutRect, ctx: any): void {\n // do nothing\n this._layout?.onLayoutStart(layoutRect, viewRect, ctx);\n }\n onLayoutEnd(ctx: any): void {\n this._layout?.onLayoutEnd(ctx);\n this.getMarks().forEach(m => m.updateLayoutState(true, true));\n }\n\n onEvaluateEnd(ctx: IModelEvaluateOption) {\n // do nothing\n }\n abstract onRender(ctx: IModelRenderOption): void;\n\n onDataUpdate() {\n // do nothing\n }\n\n beforeRelease() {\n // do nothing\n }\n\n release() {\n this._releaseEvent();\n this._spec = undefined;\n this.getMarks().forEach(m => m.release());\n this._data?.release();\n this._data = this._specIndex = null;\n this._marks.clear();\n super.release();\n }\n\n updateSpec(spec: T) {\n const result = this._compareSpec(spec, this._spec);\n this._spec = spec;\n if (!result.reMake) {\n this.reInit();\n }\n return result;\n }\n\n protected _compareSpec(spec: T, prevSpec: T) {\n const result = {\n change: false,\n reMake: false,\n reRender: false,\n reSize: false,\n reCompile: false\n };\n return result;\n }\n\n reInit(spec?: T) {\n if (spec) {\n this._spec = spec;\n }\n this.setAttrFromSpec();\n }\n\n updateLayoutAttribute() {\n // do nothing\n }\n\n setAttrFromSpec() {\n this._layout?.setAttrFromSpec(this._spec, this._option.getChartViewRect());\n }\n\n /** mark style 内部转换逻辑,override 使用 */\n protected _convertMarkStyle(\n style: Partial | ConvertToMarkStyleSpec>\n ): Partial | ConvertToMarkStyleSpec> {\n const newStyle: any = { ...style };\n return newStyle;\n }\n\n setMarkStyle(\n mark: IMarkRaw,\n style?: Partial | ConvertToMarkStyleSpec>,\n state?: StateValueType,\n level?: number\n ) {\n if (!isValid(mark) || !isValid(style)) {\n return;\n }\n mark.setStyle(this._convertMarkStyle(style), state, level);\n }\n\n initMarkStyleWithSpec(mark?: IMark, spec?: any, key?: string) {\n if (!isValid(mark) || !isValid(spec)) {\n return;\n }\n const { style, state } = spec;\n const newSpec = { ...spec };\n\n if (style) {\n newSpec.style = this._convertMarkStyle(style);\n }\n if (state) {\n newSpec.state = {};\n Object.keys(state).forEach(key => {\n newSpec.state[key] = this._convertMarkStyle(state[key]);\n });\n }\n mark.initStyleWithSpec(newSpec, key);\n }\n\n protected stateKeyToSignalName(key: string, opt?: string) {\n let name = `${PREFIX}_${this.modelType}_${this.type}_${this.id}_${key}`;\n opt && (name += `_${opt}`);\n return name;\n }\n\n compileData() {\n this._data?.compile();\n }\n\n compileMarks(group?: string | IGroupMark) {\n this.getMarks().forEach(m => {\n m.compile({ group });\n });\n }\n\n protected _createMark(markInfo: IModelMarkInfo, option: Partial = {}): T {\n const { type, name } = markInfo;\n const m = Factory.createMark(type as any, name, {\n model: this,\n map: this._option.map,\n getCompiler: this.getCompiler,\n globalScale: this._option.globalScale,\n ...option\n }) as T;\n m?.created();\n return m;\n }\n\n /**\n * 数据唯一ID\n * 根据自身动画数据匹配需求设置返回值。\n * 默认返回 undefined 时,根据 VGrammar 默认数据 ID 进行索引和匹配。\n */\n protected _getDataIdKey(): string | ((datum: Datum) => string) | undefined {\n return undefined;\n }\n\n getColorScheme() {\n return this._option.getTheme?.().colorScheme;\n }\n\n getSpecInfo() {\n const specInfo = this._option.getSpecInfo?.() ?? {};\n return getProperty(specInfo, this.getSpecInfoPath());\n }\n}\n","import type { ILayoutModel } from './../model/interface';\nimport type { IPadding, IRect, IPoint } from '../typings';\nimport type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isNil, isValidNumber } from '@visactor/vutils';\nimport { calcLayoutNumber, calcPadding, normalizeLayoutPaddingSpec, boundsInRect } from '../util/space';\nimport { LayoutLevel, DEFAULT_LAYOUT_RECT_LEVEL, USER_LAYOUT_RECT_LEVEL } from '../constant';\n\nimport type { ILayoutItem, ILayoutItemInitOption, ILayoutItemSpec } from './interface';\nimport type { IChartLayoutOption } from '../chart/interface/common';\nimport type { ILayoutAlignSelf, ILayoutPoint, ILayoutRect } from '../typings/layout';\n\nexport class LayoutItem implements ILayoutItem {\n protected _spec: ILayoutItemSpec;\n getSpec() {\n return this._spec || {};\n }\n\n layoutClip: boolean = false;\n\n autoIndent: boolean = false;\n\n private _layoutStartPoint: ILayoutPoint = {\n x: 0,\n y: 0\n };\n\n getLayoutStartPoint(): ILayoutPoint {\n return this._layoutStartPoint;\n }\n\n private _layoutRect: ILayoutRect = { width: 0, height: 0 };\n\n // 处理用户和逻辑的优先级覆盖,让用户也可以设置 rect\n protected _layoutRectLevelMap: ILayoutRect = {\n width: DEFAULT_LAYOUT_RECT_LEVEL,\n height: DEFAULT_LAYOUT_RECT_LEVEL\n };\n get layoutRectLevelMap() {\n return this._layoutRectLevelMap;\n }\n\n protected _minWidth: number = null;\n get minWidth() {\n return this._minWidth;\n }\n set minWidth(v: number) {\n this._minWidth = v;\n }\n protected _maxWidth: number = null;\n get maxWidth() {\n return this._maxWidth;\n }\n set maxWidth(v: number) {\n this._maxWidth = v;\n }\n protected _minHeight: number = null;\n get minHeight() {\n return this._minHeight;\n }\n set minHeight(v: number) {\n this._minHeight = v;\n }\n protected _maxHeight: number = null;\n get maxHeight() {\n return this._maxHeight;\n }\n set maxHeight(v: number) {\n this._maxHeight = v;\n }\n /** for layout diff */\n protected _lastComputeRect: ILayoutRect = null;\n protected _lastComputeOutBounds: IBoundsLike = { x1: 0, x2: 0, y1: 0, y2: 0 };\n getLastComputeOutBounds(): IBoundsLike {\n return this._lastComputeOutBounds;\n }\n\n getLayoutRect: () => ILayoutRect = () => {\n return this._layoutRect;\n };\n\n layoutType: ILayoutItem['layoutType'] = 'normal';\n\n layoutBindRegionID!: ILayoutItem['layoutBindRegionID'];\n\n _layoutOrient: ILayoutItem['layoutOrient'] = 'left';\n get layoutOrient() {\n return this._layoutOrient;\n }\n set layoutOrient(v: ILayoutItem['layoutOrient']) {\n this._layoutOrient = v;\n }\n layoutPaddingLeft: ILayoutItem['layoutPaddingLeft'] = 0;\n layoutPaddingTop: ILayoutItem['layoutPaddingTop'] = 0;\n layoutPaddingRight: ILayoutItem['layoutPaddingRight'] = 0;\n layoutPaddingBottom: ILayoutItem['layoutPaddingBottom'] = 0;\n\n layoutOffsetX: ILayoutItem['layoutOffsetX'] = 0;\n layoutOffsetY: ILayoutItem['layoutOffsetY'] = 0;\n\n layoutLevel: ILayoutItem['layoutLevel'] = LayoutLevel.Region;\n\n chartLayoutRect!: ILayoutRect;\n\n alignSelf: ILayoutAlignSelf;\n\n protected _model: ILayoutModel;\n\n get model() {\n return this._model;\n }\n\n get type() {\n return this._model.type;\n }\n\n protected _option: ILayoutItemInitOption;\n\n constructor(model: ILayoutModel, option: ILayoutItemInitOption) {\n this._model = model;\n this._option = option;\n this.layoutLevel = option.layoutLevel;\n this.layoutType = option.layoutType;\n if (option.layoutOrient) {\n this.layoutOrient = option.layoutOrient;\n }\n this._spec = model?.getSpec?.();\n }\n\n private _setLayoutAttributeFromSpec(spec: ILayoutItemSpec, chartViewRect: ILayoutRect) {\n if (!this._spec) {\n return;\n }\n if ((this._spec as unknown as any).visible !== false) {\n // 处理 user spec value to px;\n const padding = normalizeLayoutPaddingSpec(spec.padding);\n const paddingValue = calcPadding(padding, chartViewRect, chartViewRect);\n this.layoutPaddingLeft = paddingValue.left;\n this.layoutPaddingRight = paddingValue.right;\n this.layoutPaddingTop = paddingValue.top;\n this.layoutPaddingBottom = paddingValue.bottom;\n\n this._minHeight = isNil(spec.minHeight)\n ? this._minHeight ?? null\n : calcLayoutNumber(spec.minHeight, chartViewRect.height, chartViewRect);\n this._maxHeight = isNil(spec.maxHeight)\n ? this._maxHeight ?? null\n : calcLayoutNumber(spec.maxHeight, chartViewRect.height, chartViewRect);\n this._minWidth = isNil(spec.minWidth)\n ? this._minWidth ?? null\n : calcLayoutNumber(spec.minWidth, chartViewRect.width, chartViewRect);\n this._maxWidth = isNil(spec.maxWidth)\n ? this._maxWidth ?? null\n : calcLayoutNumber(spec.maxWidth, chartViewRect.width, chartViewRect);\n // 处理 user width\n if (spec.width) {\n this.setLayoutRect(\n {\n width: calcLayoutNumber(spec.width, chartViewRect.width, chartViewRect)\n },\n {\n width: USER_LAYOUT_RECT_LEVEL\n }\n );\n }\n if (spec.height) {\n this.setLayoutRect(\n {\n height: calcLayoutNumber(spec.height, chartViewRect.height, chartViewRect)\n },\n {\n height: USER_LAYOUT_RECT_LEVEL\n }\n );\n }\n\n // offset\n if (!isNil(spec.offsetX)) {\n this.layoutOffsetX = calcLayoutNumber(spec.offsetX, chartViewRect.width, chartViewRect);\n }\n if (!isNil(spec.offsetY)) {\n this.layoutOffsetY = calcLayoutNumber(spec.offsetY, chartViewRect.height, chartViewRect);\n }\n\n if (spec.alignSelf) {\n this.alignSelf = spec.alignSelf;\n }\n }\n }\n\n setAttrFromSpec(spec: ILayoutItemSpec, chartViewRect: ILayoutRect) {\n this._spec = spec;\n this.layoutType = spec.layoutType ?? this.layoutType;\n this.layoutLevel = spec.layoutLevel ?? this.layoutLevel;\n this.layoutOrient = spec.orient ?? this.layoutOrient;\n\n this._setLayoutAttributeFromSpec(spec, chartViewRect);\n\n this.layoutClip = spec.clip ?? this.layoutClip;\n }\n\n onLayoutStart(layoutRect: IRect, viewRect: ILayoutRect, ctx: any) {\n // 在 layoutStart 时重新计算 spec 中的布局属性值,确保 resize 后,这些值保持正确的px值。\n this._setLayoutAttributeFromSpec(this._spec, viewRect);\n }\n\n onLayoutEnd(option: IChartLayoutOption) {\n // do nothing\n }\n\n private _getAbsoluteSpecValue(layoutRect: ILayoutRect) {\n const result: IPadding = { top: null, bottom: null, left: null, right: null };\n ['top', 'bottom', 'left', 'right'].forEach(k => {\n if (!isNil(this._spec[k])) {\n result[k] = calcLayoutNumber(\n this._spec[k],\n k === 'top' || k === 'bottom' ? layoutRect.height : layoutRect.width,\n layoutRect\n );\n }\n });\n return result;\n }\n\n absoluteLayoutInRect(layoutRect: IRect) {\n const { top, bottom, left, right } = this._getAbsoluteSpecValue(layoutRect);\n\n // size first\n const layoutSize = {\n width: layoutRect.width - this.layoutPaddingLeft - this.layoutPaddingRight,\n height: layoutRect.height - this.layoutPaddingTop - this.layoutPaddingBottom\n };\n if (!isNil(left)) {\n layoutSize.width -= left;\n }\n if (!isNil(right)) {\n layoutSize.width -= right;\n }\n if (!isNil(top)) {\n layoutSize.height -= top;\n }\n if (!isNil(bottom)) {\n layoutSize.height -= bottom;\n }\n\n this.setLayoutRect(layoutSize);\n const { width, height } = this.computeBoundsInRect(this.getLayoutRect());\n this.setLayoutRect({ width, height });\n const pos = { x: layoutRect.x, y: layoutRect.y };\n if (this._spec.center === true) {\n pos.x = layoutRect.x + layoutRect.width * 0.5 - width * 0.5;\n pos.y = layoutRect.y + layoutRect.height * 0.5 - height * 0.5;\n } else {\n if (!isNil(left)) {\n pos.x = layoutRect.x + left + this.layoutPaddingLeft;\n } else if (!isNil(right)) {\n pos.x = layoutRect.x + layoutRect.width - this.layoutPaddingRight - right - width;\n }\n if (!isNil(top)) {\n pos.y = layoutRect.y + top + this.layoutPaddingTop;\n } else if (!isNil(bottom)) {\n pos.y = layoutRect.y + layoutRect.height - this.layoutPaddingBottom - bottom - height;\n }\n }\n\n this.setLayoutStartPosition(pos);\n }\n\n setLayoutStartPosition(pos: Partial): void {\n if (this._option.transformLayoutPosition) {\n pos = this._option.transformLayoutPosition(pos);\n }\n if (isValidNumber(pos.x)) {\n this._layoutStartPoint.x = pos.x;\n }\n if (isValidNumber(pos.y)) {\n this._layoutStartPoint.y = pos.y;\n }\n\n this._model.afterSetLayoutStartPoint?.(this._layoutStartPoint);\n }\n\n setLayoutRect({ width, height }: Partial, levelMap?: Partial) {\n if (isValidNumber(width) && (levelMap?.width ?? DEFAULT_LAYOUT_RECT_LEVEL) >= this._layoutRectLevelMap.width) {\n this._layoutRect.width = width;\n this._layoutRectLevelMap.width = levelMap?.width ?? DEFAULT_LAYOUT_RECT_LEVEL;\n }\n\n if (isValidNumber(height) && (levelMap?.height ?? DEFAULT_LAYOUT_RECT_LEVEL) >= this._layoutRectLevelMap.height) {\n this._layoutRect.height = height;\n this._layoutRectLevelMap.height = levelMap?.height ?? DEFAULT_LAYOUT_RECT_LEVEL;\n }\n\n this.setRectInSpec(this._layoutRect);\n }\n\n getLayout(): IRect {\n return {\n x: this._layoutStartPoint.x,\n y: this._layoutStartPoint.y,\n width: this._layoutRect.width,\n height: this._layoutRect.height\n };\n }\n\n mergeLayoutRect({ width, height }: ILayoutRect): ILayoutRect {\n const rect = { width, height };\n if (this._layoutRectLevelMap.width > DEFAULT_LAYOUT_RECT_LEVEL) {\n rect.width = this._layoutRect.width;\n }\n if (this._layoutRectLevelMap.height > DEFAULT_LAYOUT_RECT_LEVEL) {\n rect.height = this._layoutRect.height;\n }\n return rect;\n }\n\n getOrientPosAttribute() {\n return this._layoutOrient === 'bottom' || this._layoutOrient === 'top' ? 'x' : 'y';\n }\n getOrientSizeAttribute() {\n return this._layoutOrient === 'bottom' || this._layoutOrient === 'top' ? 'width' : 'height';\n }\n\n protected changeBoundsBySetting(bounds: IBoundsLike): IBoundsLike {\n // 用户设置了布局元素宽高的场景下,内部布局结果的 bounds 不能直接作为图表布局bounds\n if (this._layoutRectLevelMap.width > DEFAULT_LAYOUT_RECT_LEVEL) {\n bounds.x2 = bounds.x1 + this._layoutRect.width;\n }\n if (this._layoutRectLevelMap.height > DEFAULT_LAYOUT_RECT_LEVEL) {\n bounds.y2 = bounds.y1 + this._layoutRect.height;\n }\n bounds.x1 -= this._layoutStartPoint.x;\n bounds.x2 -= this._layoutStartPoint.x;\n bounds.y1 -= this._layoutStartPoint.y;\n bounds.y2 -= this._layoutStartPoint.y;\n return bounds;\n }\n\n setRectInSpec(rect: ILayoutRect) {\n const result = { ...rect };\n if (this._layoutRectLevelMap.width < USER_LAYOUT_RECT_LEVEL) {\n if (!isNil(this._minWidth)) {\n result.width = Math.max(result.width, this._minWidth);\n }\n if (!isNil(this._maxWidth)) {\n result.width = Math.min(result.width, this._maxWidth);\n }\n } else {\n result.width = this._layoutRect.width;\n }\n\n if (this._layoutRectLevelMap.height < USER_LAYOUT_RECT_LEVEL) {\n if (!isNil(this._minHeight)) {\n result.height = Math.max(result.height, this._minHeight);\n }\n if (!isNil(this._maxHeight)) {\n result.height = Math.min(result.height, this._maxHeight);\n }\n } else {\n result.height = this._layoutRect.height;\n }\n return result;\n }\n\n computeBoundsInRect(rect: ILayoutRect): ILayoutRect {\n // 保留布局使用的rect\n this._lastComputeRect = rect;\n\n if (\n this.layoutType === 'region-relative' &&\n ((this._layoutRectLevelMap.width === USER_LAYOUT_RECT_LEVEL &&\n (this.layoutOrient === 'left' || this.layoutOrient === 'right')) ||\n (this._layoutRectLevelMap.height === USER_LAYOUT_RECT_LEVEL &&\n (this.layoutOrient === 'bottom' || this.layoutOrient === 'top')))\n ) {\n return this._layoutRect;\n }\n // 将布局空间限制到 spec 设置内\n // 避免操作到元素本身的 aabbbounds\n const bounds = { ...this._model.getBoundsInRect(this.setRectInSpec(rect), rect) };\n // 用户设置了布局元素宽高的场景下,内部布局结果的 bounds 不能直接作为图表布局bounds\n this.changeBoundsBySetting(bounds);\n // 保留当前模块的布局超出内容,用来处理自动缩进\n // 当前 bounds 需要有实际宽高\n if (this.autoIndent && bounds.x2 - bounds.x1 > 0 && bounds.y2 - bounds.y1 > 0) {\n this._lastComputeOutBounds.x1 = Math.ceil(-bounds.x1);\n this._lastComputeOutBounds.x2 = Math.ceil(bounds.x2 - rect.width);\n this._lastComputeOutBounds.y1 = Math.ceil(-bounds.y1);\n this._lastComputeOutBounds.y2 = Math.ceil(bounds.y2 - rect.height);\n }\n // 返回的布局大小也要限制到 spec 设置内\n let result = this.setRectInSpec(boundsInRect(bounds, rect));\n if (this._option.transformLayoutRect) {\n result = this._option.transformLayoutRect(result);\n }\n\n return result;\n }\n\n getModelId() {\n return this._model.id;\n }\n\n getModelVisible() {\n return this._model.getVisible();\n }\n}\n","export const USER_LAYOUT_RECT_LEVEL = 9;\nexport const DEFAULT_LAYOUT_RECT_LEVEL = 0;\nexport const DEFAULT_LAYOUT_RECT_LEVEL_MIN = -1;\n","import type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEqual, merge } from '@visactor/vutils';\nimport type { ILayoutItem } from '../layout/interface';\nimport type { IOrientType, IPolarOrientType, IRect } from '../typings/space';\nimport { BaseModel } from './base-model';\nimport type { IModelSpec } from './interface';\nimport { LayoutItem } from '../layout/layout-item';\nimport type { IPoint } from '../typings/coordinate';\nimport type { ILayoutType, ILayoutPoint, ILayoutRect } from '../typings/layout';\n\nexport abstract class LayoutModel extends BaseModel {\n protected layoutType: ILayoutType | 'none' = 'normal';\n protected layoutLevel?: number = 0;\n protected layoutZIndex: number = 0;\n layoutClip: boolean;\n get layoutOrient() {\n return this._orient as IOrientType;\n }\n\n set layoutOrient(v: IOrientType) {\n this._orient = v;\n this._layout && (this._layout.layoutOrient = v);\n }\n\n protected _forceLayoutTag: boolean = false;\n protected _layout: ILayoutItem = null;\n protected _orient?: IPolarOrientType | IOrientType = null;\n\n protected _layoutRect: ILayoutRect = { width: 0, height: 0 };\n protected _layoutStartPos: IPoint = { x: 0, y: 0 };\n\n // TODO: 有些hack,这个tag是为了避免布局逻辑中,轴的数据变化,又由数据变化触发重新布局\n protected _isLayout: boolean = true;\n\n initLayout() {\n if (this.layoutType === 'none') {\n return;\n }\n this._layout = new LayoutItem(this, {\n layoutType: this.layoutType,\n layoutLevel: this.layoutLevel,\n layoutOrient: this._orient as IOrientType,\n transformLayoutRect: this._transformLayoutRect,\n transformLayoutPosition: this._transformLayoutPosition\n });\n if (this._orient && this._orient !== 'radius' && this._orient !== 'angle' && this.layout) {\n this._layout.layoutOrient = this._orient;\n }\n }\n\n onLayoutStart(layoutRect: IRect, viewRect: ILayoutRect, ctx: any): void {\n this._isLayout = true;\n super.onLayoutStart(layoutRect, viewRect, ctx);\n }\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n // diff layoutRect\n this.updateLayoutAttribute();\n const layoutRect = this.getLayoutRect();\n if (this._forceLayoutTag || !isEqual(this._lastLayoutRect, layoutRect)) {\n this._lastLayoutRect = { ...layoutRect };\n }\n this._forceLayoutTag = false;\n this._isLayout = false;\n }\n\n afterSetLayoutStartPoint(_pos: ILayoutPoint) {\n // do nothing\n }\n\n protected _forceLayout() {\n if (this._isLayout) {\n return;\n }\n this._forceLayoutTag = true;\n this._option.globalInstance.getChart()?.setLayoutTag(true);\n }\n\n // 布局相关\n getLayoutStartPoint() {\n return this._layout ? this._layout.getLayoutStartPoint() : this._layoutStartPos;\n }\n setLayoutStartPosition(pos: Partial) {\n return this._layout\n ? this._layout.setLayoutStartPosition(pos)\n : (this._layoutStartPos = merge(this._layoutStartPos, pos));\n }\n getLayoutRect() {\n return this._layout ? this._layout.getLayoutRect() : this._layoutRect;\n }\n setLayoutRect(rect: Partial, levelMap?: Partial) {\n return this._layout ? this._layout.setLayoutRect(rect) : (this._lastLayoutRect = merge(this._layoutRect, rect));\n }\n\n getLastComputeOutBounds() {\n return this._layout?.getLastComputeOutBounds();\n }\n\n getGraphicBounds = () => {\n if (this._layout) {\n return {\n x1: this._layout.getLayoutStartPoint().x,\n y1: this._layout.getLayoutStartPoint().y,\n x2: this._layout.getLayoutStartPoint().x + this._layout.getLayoutRect().width,\n y2: this._layout.getLayoutStartPoint().y + this._layout.getLayoutRect().height\n };\n }\n return { x1: 0, x2: 0, y1: 0, y2: 0 };\n };\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this.layoutClip = this._spec.clip ?? this.layoutClip;\n this.layoutZIndex = this._spec.zIndex ?? this.layoutZIndex;\n this.layoutType = this._spec.layoutType ?? this.layoutType;\n }\n\n abstract getBoundsInRect(rect: ILayoutRect, fullRect: ILayoutRect): IBoundsLike;\n\n protected _transformLayoutRect: (rect: ILayoutRect) => ILayoutRect = null;\n protected _transformLayoutPosition: (rect: Partial) => Partial = null;\n}\n","import { BaseModelSpecTransformer } from '../model/base-model-transformer';\nimport type { IRegionSpec } from './interface';\n\nexport class RegionSpecTransformer<\n T extends IRegionSpec = IRegionSpec,\n K extends Partial = Partial\n> extends BaseModelSpecTransformer {\n protected _initTheme(spec: T, chartSpec: any): { spec: T; theme: K } {\n // do nothing, region don't need to parse theme\n return {\n spec,\n theme: this._theme\n };\n }\n}\n","import type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEmpty, isEqual, array, isValid } from '@visactor/vutils';\nimport type { IGroupMark as IVGrammarGroupMark, ILayoutOptions, IMark } from '@visactor/vgrammar-core';\nimport { STATE_VALUE_ENUM_REVERSE } from '../compile/mark/interface';\nimport { DimensionTrigger } from '../interaction/dimension-trigger';\nimport { MarkTypeEnum } from '../mark/interface/type';\nimport type { ISeries } from '../series/interface';\nimport type { IModelOption } from '../model/interface';\nimport type { CoordinateType } from '../typings/coordinate';\nimport type { IRegion, IRegionSpec, IRegionSpecInfo } from './interface';\nimport type { IGroupMark } from '../mark/group';\nimport type { IInteraction, ITrigger } from '../interaction/interface';\nimport { Interaction } from '../interaction/interaction';\nimport { AttributeLevel, ChartEvent, LayoutZIndex } from '../constant';\nimport type { IRectMark } from '../mark/rect';\nimport { AnimateManager } from '../animation/animate-manager';\nimport type { IAnimate } from '../animation/interface';\nimport type { ILayoutType, StringOrNumber } from '../typings';\nimport { IFilterMode } from '../component/data-zoom/constant';\nimport { LayoutModel } from '../model/layout-model';\nimport { RegionSpecTransformer } from './region-transformer';\n\nexport class Region extends LayoutModel implements IRegion {\n static type = 'region';\n static readonly transformerConstructor = RegionSpecTransformer;\n readonly transformerConstructor = RegionSpecTransformer as any;\n readonly modelType: string = 'region';\n static specKey = 'region';\n specKey: string = 'region';\n\n type = Region.type;\n protected _series: ISeries[] = [];\n layoutType: ILayoutType = 'region';\n layoutZIndex: number = LayoutZIndex.Region;\n\n animate?: IAnimate;\n\n interaction: IInteraction = new Interaction();\n\n declare getSpecInfo: () => IRegionSpecInfo;\n\n getMaxWidth() {\n return this._layout.maxWidth;\n }\n setMaxWidth(value: number) {\n this._layout.maxWidth = value;\n }\n\n getMaxHeight() {\n return this._layout.maxHeight;\n }\n setMaxHeight(value: number) {\n this._layout.maxHeight = value;\n }\n\n protected _groupMark!: IGroupMark;\n getGroupMark() {\n return this._groupMark;\n }\n\n protected _interactionMark!: IGroupMark;\n getInteractionMark() {\n return this._interactionMark;\n }\n\n getStackInverse() {\n return this._spec.stackInverse === true;\n }\n\n protected _backgroundMark?: IRectMark;\n protected _foregroundMark?: IRectMark;\n\n protected _trigger: ITrigger;\n\n constructor(spec: T, ctx: IModelOption) {\n super(spec, ctx);\n this.userId = spec.id;\n this.coordinate = spec.coordinate ?? 'cartesian';\n if (this._option.animation) {\n this.animate = new AnimateManager({\n getCompiler: ctx.getCompiler\n });\n }\n this.interaction.setDisableActiveEffect(this._option.disableTriggerEvent);\n }\n\n protected _getClipDefaultValue() {\n const chartSpec = this._option.getChart().getSpec();\n const hasDataZoom = (chartSpec as any).dataZoom?.some?.((entry: any) => {\n const filterMode = entry.filterMode ?? IFilterMode.filter;\n return filterMode === IFilterMode.axis;\n });\n const hasScrollBar = (chartSpec as any).scrollBar?.some?.((entry: any) => {\n const filterMode = entry.filterMode ?? IFilterMode.axis;\n return filterMode === IFilterMode.axis;\n });\n\n return hasDataZoom || hasScrollBar ? true : this._layout.layoutClip;\n }\n\n created(): void {\n this.initLayout();\n super.created();\n const clip = this._spec.clip ?? this._getClipDefaultValue();\n this._groupMark = this._createGroupMark('regionGroup', this.userId, this.layoutZIndex);\n // 交互层\n this._interactionMark = this._createGroupMark(\n 'regionInteractionGroup',\n this.userId + '_interaction',\n LayoutZIndex.Interaction\n );\n\n // hack: region 的样式不能设置在groupMark上,因为groupMark目前没有计算dirtyBound,会导致拖影问题\n if (this._spec.style) {\n this._backgroundMark = this._createMark({ type: MarkTypeEnum.rect, name: 'regionBackground' }) as IRectMark;\n if (clip) {\n this._foregroundMark = this._createMark({ type: MarkTypeEnum.rect, name: 'regionForeground' }) as IRectMark;\n }\n [this._backgroundMark, this._foregroundMark].forEach(mark => {\n if (mark) {\n mark.created();\n this.setMarkStyle(\n mark,\n {\n width: () => this.getLayoutRect().width,\n height: () => this.getLayoutRect().height\n },\n 'normal',\n AttributeLevel.Built_In\n );\n this._groupMark.addMark(mark);\n }\n });\n this._backgroundMark && this._backgroundMark.setZIndex(0);\n this._foregroundMark && this._foregroundMark.setZIndex(LayoutZIndex.Mark + 1);\n }\n this.createTrigger();\n }\n\n private _createGroupMark(name: string, userId: StringOrNumber, zIndex: number) {\n const groupMark = this._createMark({ type: MarkTypeEnum.group, name }) as IGroupMark;\n groupMark.setUserId(userId);\n groupMark.setZIndex(zIndex);\n const clip = this._spec.clip ?? this._getClipDefaultValue();\n this.setMarkStyle(\n groupMark,\n {\n x: () => this.getLayoutStartPoint().x,\n y: () => this.getLayoutStartPoint().y,\n width: () => this.getLayoutRect().width,\n height: () => this.getLayoutRect().height,\n clip\n },\n 'normal',\n AttributeLevel.Built_In\n );\n this.setMarkStyle(\n groupMark,\n {\n cornerRadius: this._spec.style?.cornerRadius\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n this._marks.addMark(groupMark);\n return groupMark;\n }\n\n init(option: any) {\n super.init(option);\n this.initMark();\n this.initSeriesDataflow();\n this.initInteraction();\n this.initTrigger();\n }\n initMark() {\n this._initBackgroundMarkStyle();\n this._initForegroundMarkStyle();\n }\n\n protected _initBackgroundMarkStyle() {\n if (this._backgroundMark) {\n this.setMarkStyle(\n this._backgroundMark,\n {\n fillOpacity: this._spec.style?.fill ? 1 : 0,\n ...this._spec.style\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n if (this._spec.clip ?? this._getClipDefaultValue()) {\n this.setMarkStyle(\n this._backgroundMark,\n {\n strokeOpacity: 0\n },\n 'normal',\n AttributeLevel.Built_In\n );\n }\n }\n }\n\n protected _initForegroundMarkStyle() {\n if (this._foregroundMark) {\n this.setMarkStyle(\n this._foregroundMark,\n {\n ...this._spec.style,\n fillOpacity: 0\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n }\n }\n\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n if (!isEqual(prevSpec?.style, spec?.style)) {\n result.reMake = true;\n }\n return result;\n }\n\n reInit(spec?: T) {\n super.reInit(spec);\n this._initBackgroundMarkStyle();\n this._initForegroundMarkStyle();\n }\n\n addSeries(s: ISeries) {\n if (!s) {\n return;\n }\n if (!this._series.includes(s)) {\n this._series.push(s);\n }\n }\n\n removeSeries(s: ISeries) {\n if (!s) {\n return;\n }\n const index = this._series.findIndex(s_ => s_ === s);\n if (index >= 0) {\n this._series.splice(index, 1);\n }\n }\n\n getSeries(\n opt: {\n name?: string;\n userId?: StringOrNumber | StringOrNumber[];\n specIndex?: number | number[];\n id?: StringOrNumber;\n type?: string;\n coordinateType?: CoordinateType;\n dataName?: string;\n } = {}\n ): ISeries[] {\n return this._series.filter(\n s =>\n (opt.name ? s?.name === opt.name : true) &&\n (opt.userId ? array(opt.userId).includes(s.userId) : true) &&\n (isValid(opt.specIndex) && s.getSpecIndex ? array(opt.specIndex).includes(s.getSpecIndex()) : true) &&\n (opt.id ? s.id === opt.id : true) &&\n (opt.type ? s.type === opt.type : true) &&\n (opt.coordinateType ? s.coordinate === opt.coordinateType : true) &&\n (opt.dataName ? s.getRawData?.()?.name === opt.dataName : true)\n );\n }\n\n getSeriesInName(name: string): ISeries {\n return this.getSeries({ name })[0];\n }\n getSeriesInUserId(userId: string): ISeries {\n return this.getSeries({ userId })[0];\n }\n getSeriesInId(id: number): ISeries {\n return this.getSeries({ id })[0];\n }\n getSeriesInType(type: string): ISeries[] {\n return this.getSeries({ type });\n }\n getSeriesInCoordinateType(coordinateType: CoordinateType): ISeries[] {\n return this.getSeries({ coordinateType });\n }\n getSeriesInDataName(dataName: string): ISeries[] {\n return this.getSeries({ dataName });\n }\n\n onRender(ctx: any): void {\n // do nothing\n }\n\n initSeriesDataflow() {\n const viewDataFilters = this._series.map(s => s.getViewDataFilter() ?? s.getViewData()).filter(v => !!v);\n this._option.dataSet.multipleDataViewAddListener(viewDataFilters, 'change', this.seriesDataFilterOver);\n }\n\n seriesDataFilterOver = () => {\n this.event.emit(ChartEvent.regionSeriesDataFilterOver, { model: this });\n this._series.forEach(s => {\n if (s.getViewDataFilter()) {\n s.reTransformViewData();\n }\n });\n };\n\n release() {\n super.release();\n this._series = [];\n }\n /** dimension */\n createTrigger() {\n const triggerOptions = {\n ...this._option,\n model: this,\n interaction: this.interaction\n };\n this._trigger = new DimensionTrigger(triggerOptions);\n }\n\n initTrigger() {\n // register all mark\n // trigger check mark enable\n this._series.forEach(s => {\n s.getMarksWithoutRoot().forEach(m => {\n this._trigger.registerMark(m);\n });\n });\n this._trigger.init();\n }\n\n initInteraction() {\n // 注册所有支持反选状态mark\n this._series.forEach(s => {\n s.getMarksWithoutRoot().forEach(m => {\n for (const key in STATE_VALUE_ENUM_REVERSE) {\n if (!isEmpty(m.stateStyle[STATE_VALUE_ENUM_REVERSE[key]])) {\n this.interaction.registerMark(STATE_VALUE_ENUM_REVERSE[key], m);\n }\n }\n });\n });\n }\n\n compileMarks(group?: string | IVGrammarGroupMark) {\n this.getMarks().forEach(m => {\n m.compile({ group });\n m.getProduct()\n ?.configure({\n context: {\n model: this\n }\n })\n .layout(\n (group: IVGrammarGroupMark, children: IMark[], parentLayoutBounds: IBoundsLike, options?: ILayoutOptions) => {\n // console.log('region mark layout');\n }\n );\n });\n }\n\n compile() {\n this.animate?.compile();\n this.compileMarks();\n }\n\n getBoundsInRect = () => {\n return {\n x1: this._layout.getLayoutStartPoint().x,\n y1: this._layout.getLayoutStartPoint().y,\n x2: this._layout.getLayoutStartPoint().x + this._layout.getLayoutRect().width,\n y2: this._layout.getLayoutStartPoint().y + this._layout.getLayoutRect().height\n };\n };\n\n onLayoutEnd(ctx: any): void {\n this._series.forEach(s => s.onLayoutEnd(ctx));\n super.onLayoutEnd(ctx);\n }\n}\n","import { isNil, last } from '@visactor/vutils';\nimport type { Layout } from './base-layout';\nimport type { ILayoutItem } from './interface';\n\nfunction getPositionItems(items: ILayoutItem[]) {\n const startItems: ILayoutItem[] = [];\n const middleItems: ILayoutItem[] = [];\n const endItems: ILayoutItem[] = [];\n\n items.forEach(item => {\n if (isNil(item.getSpec().position) || item.getSpec().position === 'start') {\n startItems.push(item);\n } else if (item.getSpec().position === 'middle') {\n middleItems.push(item);\n } else if (item.getSpec().position === 'end') {\n endItems.push(item);\n }\n });\n\n return {\n startItems,\n endItems,\n middleItems\n };\n}\n\nfunction adjustItemsToCenter(allItems: ILayoutItem[][], isVertical: boolean, containerLength: number) {\n if (isVertical) {\n allItems.forEach(items => {\n const lastItem = last(items);\n const length =\n lastItem.getLayoutStartPoint().y + lastItem.getLayoutRect().height - items[0].getLayoutStartPoint().y;\n const centerY = (containerLength - length) / 2;\n\n items.forEach(item => {\n item.setLayoutStartPosition({\n x: item.getLayoutStartPoint().x,\n y: item.getLayoutStartPoint().y + centerY\n });\n });\n });\n } else {\n allItems.forEach(items => {\n const lastItem = last(items);\n const length =\n lastItem.getLayoutStartPoint().x + lastItem.getLayoutRect().width - items[0].getLayoutStartPoint().x;\n const centerX = (containerLength - length) / 2;\n\n items.forEach(item => {\n item.setLayoutStartPosition({\n x: item.getLayoutStartPoint().x + centerX,\n y: item.getLayoutStartPoint().y\n });\n });\n });\n }\n}\n\nfunction alignSelfOfItems(allItems: ILayoutItem[][], isVertical: boolean, maxSizes: number[], sign: number) {\n let maxSize: number;\n\n allItems.forEach((lineItems: ILayoutItem[], index: number) => {\n if (lineItems.length > 1) {\n maxSize = maxSizes[index];\n\n lineItems.forEach(item => {\n if (!item.alignSelf || item.alignSelf === 'start') {\n return;\n }\n\n const pos = item.getLayoutStartPoint();\n const ratio = item.alignSelf === 'middle' ? 0.5 : 1;\n const delta = isVertical\n ? maxSize - (item.getLayoutRect().width + item.layoutPaddingLeft + item.layoutPaddingRight)\n : maxSize - (item.getLayoutRect().height + item.layoutPaddingTop + item.layoutPaddingBottom);\n\n if (isVertical) {\n item.setLayoutStartPosition({\n x: pos.x + sign * delta * ratio,\n y: pos.y\n });\n } else {\n item.setLayoutStartPosition({\n x: pos.x,\n y: pos.y + sign * delta * ratio\n });\n }\n });\n }\n });\n}\n\nfunction layoutLeftRightStartOrMiddleItems(\n items: ILayoutItem[],\n layout: Layout,\n limitHeight: number,\n isMiddle: boolean,\n position: 'left' | 'right'\n) {\n if (items.length) {\n let maxWidth = 0;\n const isRight = position === 'right';\n const xSign = isRight ? -1 : 1;\n let preX = isRight ? layout.rightCurrent : layout.leftCurrent;\n let preTop = layout.topCurrent;\n\n const allItems: ILayoutItem[][] = [];\n let singleLineItems: ILayoutItem[] = [];\n const maxWidths: number[] = [];\n items.forEach(item => {\n const layoutRect = layout.getItemComputeLayoutRect(item);\n const rect = item.computeBoundsInRect(layoutRect);\n item.setLayoutRect(rect);\n const itemTotalHeight = rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n const itemTotalWidth = rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n const itemOffsetX = isRight ? -rect.width - item.layoutPaddingRight : item.layoutPaddingLeft;\n item.setLayoutStartPosition({\n x: preX + item.layoutOffsetX + itemOffsetX,\n y: preTop + item.layoutOffsetY + item.layoutPaddingTop\n });\n\n preTop += itemTotalHeight;\n if (preTop > limitHeight && singleLineItems.length) {\n maxWidths.push(maxWidth);\n preX += xSign * maxWidth;\n maxWidth = itemTotalWidth;\n preTop = layout.topCurrent + itemTotalHeight;\n\n item.setLayoutStartPosition({\n x: preX + item.layoutOffsetX + itemOffsetX,\n y: layout.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n allItems.push(singleLineItems);\n singleLineItems = [item];\n } else {\n maxWidth = Math.max(maxWidth, itemTotalWidth);\n singleLineItems.push(item);\n }\n });\n maxWidths.push(maxWidth);\n allItems.push(singleLineItems);\n\n alignSelfOfItems(allItems, true, maxWidths, xSign);\n\n if (isMiddle) {\n adjustItemsToCenter(allItems, true, limitHeight);\n }\n\n if (isRight) {\n layout.rightCurrent = preX + xSign * maxWidth;\n } else {\n layout.leftCurrent = preX + xSign * maxWidth;\n }\n }\n}\n\nfunction layoutLeftRightEndItems(items: ILayoutItem[], layout: Layout, limitWidth: number, position: 'left' | 'right') {\n if (items.length) {\n let maxWidth = 0;\n const isRight = position === 'right';\n const xSign = isRight ? -1 : 1;\n let preX = isRight ? layout.rightCurrent : layout.leftCurrent;\n let preBottom = layout.bottomCurrent;\n\n const allItems: ILayoutItem[][] = [];\n let singleLineItems: ILayoutItem[] = [];\n const maxWidths: number[] = [];\n items.forEach(item => {\n const layoutRect = layout.getItemComputeLayoutRect(item);\n const rect = item.computeBoundsInRect(layoutRect);\n item.setLayoutRect(rect);\n const itemTotalHeight = rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n const itemTotalWidth = rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n const itemOffsetX = isRight ? -rect.width - item.layoutPaddingRight : item.layoutPaddingLeft;\n\n if (preBottom < itemTotalHeight && singleLineItems.length) {\n maxWidths.push(maxWidth);\n preX += xSign * maxWidth;\n maxWidth = itemTotalWidth;\n preBottom = layout.bottomCurrent;\n\n item.setLayoutStartPosition({\n x: preX + item.layoutOffsetX + itemOffsetX,\n y: preBottom + item.layoutOffsetY - rect.height - item.layoutPaddingBottom\n });\n allItems.push(singleLineItems);\n singleLineItems = [item];\n } else {\n item.setLayoutStartPosition({\n x: preX + item.layoutOffsetX + itemOffsetX,\n y: preBottom + item.layoutOffsetY - rect.height - item.layoutPaddingBottom\n });\n maxWidth = Math.max(maxWidth, itemTotalWidth);\n preBottom -= itemTotalHeight;\n singleLineItems.push(item);\n }\n });\n maxWidths.push(maxWidth);\n allItems.push(singleLineItems);\n\n alignSelfOfItems(allItems, true, maxWidths, xSign);\n\n if (isRight) {\n layout.rightCurrent = preX + xSign * maxWidth;\n } else {\n layout.leftCurrent = preX + xSign * maxWidth;\n }\n }\n}\n\nfunction layoutTopBottomStartOrMiddleItems(\n items: ILayoutItem[],\n layout: Layout,\n limitWidth: number,\n isMiddle: boolean,\n position: 'top' | 'bottom'\n) {\n if (items.length) {\n const isTop = position === 'top';\n const ySign = isTop ? 1 : -1;\n let maxHeight = 0;\n let preLeft = layout.leftCurrent;\n let preY = isTop ? layout.topCurrent : layout.bottomCurrent;\n const allItems: ILayoutItem[][] = [];\n let singleLineItems: ILayoutItem[] = [];\n const maxHeights: number[] = [];\n\n items.forEach(item => {\n const layoutRect = layout.getItemComputeLayoutRect(item);\n const rect = item.computeBoundsInRect(layoutRect);\n item.setLayoutRect(rect);\n const itemTotalHeight = rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n const itemTotalWidth = rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n const itemOffsetY = isTop ? item.layoutPaddingTop : -rect.height - item.layoutPaddingBottom;\n item.setLayoutStartPosition({\n x: preLeft + item.layoutOffsetX + item.layoutPaddingLeft,\n y: preY + item.layoutOffsetY + itemOffsetY\n });\n\n preLeft += itemTotalWidth;\n if (preLeft > limitWidth && singleLineItems.length) {\n maxHeights.push(maxHeight);\n preLeft = layout.leftCurrent + itemTotalWidth;\n preY += ySign * maxHeight;\n maxHeight = itemTotalHeight;\n item.setLayoutStartPosition({\n x: layout.leftCurrent + item.layoutOffsetX + item.layoutPaddingLeft,\n y: preY + item.layoutOffsetY + itemOffsetY\n });\n allItems.push(singleLineItems);\n singleLineItems = [item];\n } else {\n maxHeight = Math.max(maxHeight, itemTotalHeight);\n singleLineItems.push(item);\n }\n });\n maxHeights.push(maxHeight);\n allItems.push(singleLineItems);\n\n alignSelfOfItems(allItems, false, maxHeights, ySign);\n\n if (isMiddle) {\n adjustItemsToCenter(allItems, false, limitWidth);\n }\n\n if (isTop) {\n layout.topCurrent = preY + ySign * maxHeight;\n } else {\n layout.bottomCurrent = preY + ySign * maxHeight;\n }\n }\n}\n\nfunction layoutTopBottomEndItems(items: ILayoutItem[], layout: Layout, limitWidth: number, position: 'top' | 'bottom') {\n if (items.length) {\n const isTop = position === 'top';\n const ySign = isTop ? 1 : -1;\n let maxHeight = 0;\n let preRight = layout.rightCurrent;\n let preY = isTop ? layout.topCurrent : layout.bottomCurrent;\n\n const allItems: ILayoutItem[][] = [];\n let singleLineItems: ILayoutItem[] = [];\n const maxHeights: number[] = [];\n\n items.forEach(item => {\n const layoutRect = layout.getItemComputeLayoutRect(item);\n const rect = item.computeBoundsInRect(layoutRect);\n item.setLayoutRect(rect);\n const itemTotalHeight = rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n const itemTotalWidth = rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n const itemOffsetY = isTop ? item.layoutPaddingTop : -rect.height - item.layoutPaddingBottom;\n\n if (preRight < itemTotalWidth && singleLineItems.length) {\n preRight = layout.rightCurrent;\n preY += ySign * maxHeight;\n maxHeight = itemTotalHeight;\n\n item.setLayoutStartPosition({\n x: layout.rightCurrent + item.layoutOffsetX - rect.width - item.layoutPaddingRight,\n y: preY + item.layoutOffsetY + itemOffsetY\n });\n allItems.push(singleLineItems);\n singleLineItems = [item];\n } else {\n singleLineItems.push(item);\n item.setLayoutStartPosition({\n x: preRight + item.layoutOffsetX - rect.width - item.layoutPaddingRight,\n y: preY + item.layoutOffsetY + itemOffsetY\n });\n maxHeight = Math.max(maxHeight, itemTotalHeight);\n preRight -= itemTotalWidth;\n }\n });\n maxHeights.push(maxHeight);\n allItems.push(singleLineItems);\n\n alignSelfOfItems(allItems, false, maxHeights, ySign);\n\n if (isTop) {\n layout.topCurrent = preY + ySign * maxHeight;\n } else {\n layout.bottomCurrent = preY + ySign * maxHeight;\n }\n }\n}\n\nexport function layoutLeftInlineItems(items: ILayoutItem[], layout: Layout, limitHeight: number) {\n const { startItems, middleItems, endItems } = getPositionItems(items);\n if (startItems.length) {\n layoutLeftRightStartOrMiddleItems(startItems, layout, limitHeight, false, 'left');\n }\n\n if (middleItems.length) {\n layoutLeftRightStartOrMiddleItems(middleItems, layout, limitHeight, true, 'left');\n }\n\n if (endItems.length) {\n layoutLeftRightEndItems(endItems, layout, limitHeight, 'left');\n }\n}\n\nexport function layoutRightInlineItems(items: ILayoutItem[], layout: Layout, limitHeight: number) {\n const { startItems, middleItems, endItems } = getPositionItems(items);\n\n if (startItems.length) {\n layoutLeftRightStartOrMiddleItems(startItems, layout, limitHeight, false, 'right');\n }\n\n if (middleItems.length) {\n layoutLeftRightStartOrMiddleItems(middleItems, layout, limitHeight, true, 'right');\n }\n\n if (endItems.length) {\n layoutLeftRightEndItems(endItems, layout, limitHeight, 'right');\n }\n}\n\nexport function layoutTopInlineItems(items: ILayoutItem[], layout: Layout, limitWidth: number) {\n const { startItems, middleItems, endItems } = getPositionItems(items);\n\n if (startItems.length) {\n layoutTopBottomStartOrMiddleItems(startItems, layout, limitWidth, false, 'top');\n }\n\n if (middleItems.length) {\n layoutTopBottomStartOrMiddleItems(middleItems, layout, limitWidth, true, 'top');\n }\n\n if (endItems.length) {\n layoutTopBottomEndItems(endItems, layout, limitWidth, 'top');\n }\n}\n\nexport function layoutBottomInlineItems(items: ILayoutItem[], layout: Layout, limitWidth: number) {\n const { startItems, middleItems, endItems } = getPositionItems(items);\n\n if (startItems.length) {\n layoutTopBottomStartOrMiddleItems(startItems, layout, limitWidth, false, 'bottom');\n }\n\n if (middleItems.length) {\n layoutTopBottomStartOrMiddleItems(middleItems, layout, limitWidth, true, 'bottom');\n }\n\n if (endItems.length) {\n layoutTopBottomEndItems(endItems, layout, limitWidth, 'bottom');\n }\n}\n","import type { utilFunctionCtx } from '../typings/params';\nimport type { IChart } from '../chart/interface/chart';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { IBaseLayout, ILayoutItem } from './interface';\nimport type { IOrientType, IPadding, IRect } from '../typings/space';\nimport { error } from '../util/debug';\nimport { layoutBottomInlineItems, layoutLeftInlineItems, layoutRightInlineItems, layoutTopInlineItems } from './util';\nimport type { ILayoutRect } from '../typings/layout';\n\nexport type LayoutSideType = {\n top: number;\n left: number;\n bottom: number;\n right: number;\n};\n\nexport interface IOffset {\n offsetLeft: number;\n offsetRight: number;\n offsetTop: number;\n offsetBottom: number;\n}\n\ntype overlapInfo = {\n items: ILayoutItem[];\n rect: ILayoutRect;\n};\n\nexport class Layout implements IBaseLayout {\n static type = 'base';\n\n leftCurrent: number = 0;\n topCurrent: number = 0;\n rightCurrent: number = 0;\n bottomCurrent: number = 0;\n\n _chartLayoutRect!: IRect;\n _chartViewBox!: IBoundsLike;\n\n protected _onError: (msg: string) => void;\n\n constructor(_spec?: unknown, ctx?: utilFunctionCtx) {\n this._onError = ctx?.onError;\n }\n\n protected _layoutInit(_chart: IChart, items: ILayoutItem[], chartLayoutRect: IRect, chartViewBox: IBoundsLike) {\n this._chartLayoutRect = chartLayoutRect;\n this._chartViewBox = chartViewBox;\n this.leftCurrent = chartLayoutRect.x;\n this.topCurrent = chartLayoutRect.y;\n this.rightCurrent = chartLayoutRect.x + chartLayoutRect.width;\n this.bottomCurrent = chartLayoutRect.height + chartLayoutRect.y;\n\n // 越大越先处理,进行排序调整,利用原地排序特性,排序会受 level 和传进来的数组顺序共同影响\n items.sort((a, b) => b.layoutLevel - a.layoutLevel);\n }\n\n protected _layoutNormalItems(items: ILayoutItem[]) {\n this.layoutNormalInlineItems(items.filter(x => x.layoutType === 'normal-inline'));\n this.layoutNormalItems(items.filter(x => x.layoutType === 'normal'));\n }\n\n protected _groupItems(items: ILayoutItem[]) {\n const regionItems = items.filter(x => x.layoutType === 'region');\n const relativeItems = items.filter(x => x.layoutType === 'region-relative');\n const relativeOverlapItems = items.filter(x => x.layoutType === 'region-relative-overlap');\n const allRelatives = relativeItems.concat(relativeOverlapItems);\n // 允许重叠元素 ,目前允许重叠元素认为是紧贴region的。最后布局\n const overlapItems: {\n [key in IOrientType]: overlapInfo;\n } = {\n left: { items: [], rect: { width: 0, height: 0 } },\n right: { items: [], rect: { width: 0, height: 0 } },\n top: { items: [], rect: { width: 0, height: 0 } },\n bottom: { items: [], rect: { width: 0, height: 0 } },\n z: { items: [], rect: { width: 0, height: 0 } }\n };\n relativeOverlapItems.forEach(i => {\n overlapItems[i.layoutOrient].items.push(i);\n });\n\n return {\n regionItems,\n relativeItems,\n relativeOverlapItems,\n allRelatives,\n overlapItems\n };\n }\n\n layoutItems(_chart: IChart, items: ILayoutItem[], chartLayoutRect: IRect, chartViewBox: IBoundsLike): void {\n // 布局初始化\n this._layoutInit(_chart, items, chartLayoutRect, chartViewBox);\n // 先布局 normal 类型的元素\n this._layoutNormalItems(items);\n // 开始布局 region 相关元素\n // 为了锁紧先保存一下当前的布局空间\n const layoutTemp: LayoutSideType = {\n left: this.leftCurrent,\n top: this.topCurrent,\n right: this.rightCurrent,\n bottom: this.bottomCurrent\n };\n const { regionItems, relativeItems, relativeOverlapItems, allRelatives, overlapItems } = this._groupItems(items);\n // 有元素开启了自动缩进\n // TODO:目前只有普通占位布局下的 region-relative 元素支持\n // 主要考虑常规元素超出画布一般为用户个性设置,而且可以设置padding规避裁剪,不需要使用自动缩进\n this.layoutRegionItems(regionItems, relativeItems, relativeOverlapItems, overlapItems);\n // 缩进\n this._processAutoIndent(regionItems, relativeItems, relativeOverlapItems, overlapItems, allRelatives, layoutTemp);\n\n this.layoutAbsoluteItems(items.filter(x => x.layoutType === 'absolute'));\n }\n\n protected _processAutoIndent(\n regionItems: ILayoutItem[],\n relativeItems: ILayoutItem[],\n relativeOverlapItems: ILayoutItem[],\n overlapItems: {\n [key in IOrientType]: overlapInfo;\n } = {\n left: { items: [], rect: { width: 0, height: 0 } },\n right: { items: [], rect: { width: 0, height: 0 } },\n top: { items: [], rect: { width: 0, height: 0 } },\n bottom: { items: [], rect: { width: 0, height: 0 } },\n z: { items: [], rect: { width: 0, height: 0 } }\n },\n allRelatives: ILayoutItem[],\n layoutTemp: LayoutSideType\n ): void {\n // 如果有缩进\n if (allRelatives.some(i => i.autoIndent)) {\n // check auto indent\n const { top, bottom, left, right } = this._checkAutoIndent(allRelatives, layoutTemp);\n // 如果出现了需要自动缩进的场景 则基于缩进再次布局\n if (top || bottom || left || right) {\n // set outer bounds to padding\n this.topCurrent = layoutTemp.top + top;\n this.bottomCurrent = layoutTemp.bottom - bottom;\n this.leftCurrent = layoutTemp.left + left;\n this.rightCurrent = layoutTemp.right - right;\n // reLayout\n this.layoutRegionItems(regionItems, relativeItems, relativeOverlapItems, overlapItems);\n }\n }\n }\n\n protected layoutNormalItems(normalItems: ILayoutItem[]): void {\n normalItems.forEach(item => {\n const layoutRect = this.getItemComputeLayoutRect(item);\n const rect = item.computeBoundsInRect(layoutRect);\n item.setLayoutRect(rect);\n\n if (item.layoutOrient === 'left') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX + item.layoutPaddingLeft,\n y: this.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n this.leftCurrent += rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n } else if (item.layoutOrient === 'top') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX + item.layoutPaddingLeft,\n y: this.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n this.topCurrent += rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n } else if (item.layoutOrient === 'right') {\n item.setLayoutStartPosition({\n x: this.rightCurrent + item.layoutOffsetX - rect.width - item.layoutPaddingRight,\n y: this.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n this.rightCurrent -= rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n } else if (item.layoutOrient === 'bottom') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX + item.layoutPaddingRight,\n y: this.bottomCurrent + item.layoutOffsetY - rect.height - item.layoutPaddingBottom\n });\n this.bottomCurrent -= rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n }\n });\n }\n\n protected layoutNormalInlineItems(normalItems: ILayoutItem[]): void {\n const leftItems = normalItems.filter(item => item.layoutOrient === 'left');\n const rightItems = normalItems.filter(item => item.layoutOrient === 'right');\n const topItems = normalItems.filter(item => item.layoutOrient === 'top');\n const bottomItems = normalItems.filter(item => item.layoutOrient === 'bottom');\n\n const limitWidth = this._chartLayoutRect.width + this._chartLayoutRect.x;\n const limitHeight = this._chartLayoutRect.height + this._chartLayoutRect.y;\n\n // 同 normal,按照 left、top、right、bottom 的顺序进行布局\n // 各个方向上再按照 position 进行分组布局,顺序为 start middle end\n leftItems.length && layoutLeftInlineItems(leftItems, this, limitHeight);\n topItems.length && layoutTopInlineItems(topItems, this, limitWidth);\n rightItems.length && layoutRightInlineItems(rightItems, this, limitHeight);\n bottomItems.length && layoutBottomInlineItems(bottomItems, this, limitWidth);\n }\n\n protected _layoutRelativeOverlap(orient: IOrientType, info: overlapInfo) {\n // 得到 max rect\n info.items.forEach((item: ILayoutItem) => {\n const layoutRect = this.getItemComputeLayoutRect(item);\n const rect = item.computeBoundsInRect(layoutRect);\n info.rect.width = Math.max(rect.width, info.rect.width);\n info.rect.height = Math.max(rect.height, info.rect.height);\n });\n\n // 统一设置rect和pos\n info.items.forEach((item: ILayoutItem) => {\n item.setLayoutRect(info.rect);\n if (orient === 'left') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX + item.layoutPaddingLeft\n });\n } else if (orient === 'right') {\n item.setLayoutStartPosition({\n x: this.rightCurrent + item.layoutOffsetX + item.layoutPaddingLeft\n });\n } else if (orient === 'top') {\n item.setLayoutStartPosition({\n x: this.topCurrent + item.layoutOffsetX + item.layoutPaddingLeft\n });\n } else {\n item.setLayoutStartPosition({\n x: this.bottomCurrent + item.layoutOffsetX + item.layoutPaddingLeft\n });\n }\n });\n\n if (orient === 'left') {\n this.leftCurrent += info.rect.width;\n } else if (orient === 'right') {\n this.rightCurrent -= info.rect.width;\n } else if (orient === 'top') {\n this.topCurrent += info.rect.height;\n } else {\n this.bottomCurrent -= info.rect.height;\n }\n }\n\n protected _layoutRelativeItem(item: ILayoutItem, layoutRect: ILayoutRect) {\n const rect = item.computeBoundsInRect(layoutRect);\n if (item.layoutOrient === 'left' || item.layoutOrient === 'right') {\n item.setLayoutRect({ width: rect.width });\n } else {\n item.setLayoutRect({ height: rect.height });\n }\n // 减少尺寸\n if (item.layoutOrient === 'left') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX + item.layoutPaddingLeft\n });\n this.leftCurrent += rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n } else if (item.layoutOrient === 'right') {\n this.rightCurrent -= rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n item.setLayoutStartPosition({\n x: this.rightCurrent + item.layoutOffsetX + item.layoutPaddingLeft\n });\n } // 减少尺寸\n else if (item.layoutOrient === 'top') {\n item.setLayoutStartPosition({\n y: this.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n this.topCurrent += rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n } else if (item.layoutOrient === 'bottom') {\n this.bottomCurrent -= rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n item.setLayoutStartPosition({\n y: this.bottomCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n }\n }\n\n protected _layoutRegionItem(\n regionItems: ILayoutItem[],\n regionRelativeTotalWidth: number,\n regionRelativeTotalHeight: number\n ) {\n // region 处理\n const regionWidth = Math.max(\n Math.min(regionRelativeTotalWidth, ...regionItems.map(region => region.maxWidth ?? Number.MAX_VALUE)),\n 0\n );\n const regionHeight = Math.max(\n Math.min(regionRelativeTotalHeight, ...regionItems.map(region => region.maxHeight ?? Number.MAX_VALUE)),\n 0\n );\n regionItems.forEach(region => {\n region.setLayoutRect({\n width: regionWidth,\n height: regionHeight\n });\n\n region.setLayoutStartPosition({\n x: this.leftCurrent + region.layoutOffsetX + region.layoutPaddingLeft,\n y: this.topCurrent + region.layoutOffsetY + region.layoutPaddingTop\n });\n });\n\n return {\n regionHeight,\n regionWidth\n };\n }\n\n /**\n *\n * 1. 补全 region-relative rect 和部分 layoutStartPoint\n * 2. 补全 region rect 和 layoutStartPoint\n *\n */\n protected layoutRegionItems(\n regionItems: ILayoutItem[],\n regionRelativeItems: ILayoutItem[],\n regionRelativeOverlapItems: ILayoutItem[],\n overlapItems: {\n [key in IOrientType]: overlapInfo;\n } = {\n left: { items: [], rect: { width: 0, height: 0 } },\n right: { items: [], rect: { width: 0, height: 0 } },\n top: { items: [], rect: { width: 0, height: 0 } },\n bottom: { items: [], rect: { width: 0, height: 0 } },\n z: { items: [], rect: { width: 0, height: 0 } }\n }\n ): void {\n let regionRelativeTotalWidth = this.rightCurrent - this.leftCurrent;\n let regionRelativeTotalHeight = this.bottomCurrent - this.topCurrent;\n\n regionRelativeItems\n .filter(x => x.layoutOrient === 'left' || x.layoutOrient === 'right')\n .forEach(item => {\n this._layoutRelativeItem(item, this.getItemComputeLayoutRect(item));\n });\n\n this._layoutRelativeOverlap('left', overlapItems.left);\n this._layoutRelativeOverlap('right', overlapItems.right);\n\n regionRelativeTotalWidth = this.rightCurrent - this.leftCurrent;\n\n regionRelativeItems\n .filter(x => x.layoutOrient === 'top' || x.layoutOrient === 'bottom')\n .forEach(item => {\n this._layoutRelativeItem(item, this.getItemComputeLayoutRect(item));\n });\n\n this._layoutRelativeOverlap('top', overlapItems.top);\n this._layoutRelativeOverlap('bottom', overlapItems.bottom);\n\n // 此时得到height\n regionRelativeTotalHeight = this.bottomCurrent - this.topCurrent;\n\n // region 处理\n const { regionWidth, regionHeight } = this._layoutRegionItem(\n regionItems,\n regionRelativeTotalWidth,\n regionRelativeTotalHeight\n );\n\n // region-relative 特殊处理\n regionRelativeItems.concat(regionRelativeOverlapItems).forEach(item => {\n // 处理特殊元素的宽高\n if (['left', 'right'].includes(item.layoutOrient)) {\n // 用户有配置的话,已经处理过,不需要再次处理\n const relativeRegion = this.filterRegionsWithID(regionItems, item.layoutBindRegionID[0]);\n\n item.setLayoutRect({\n height: relativeRegion.getLayoutRect().height\n });\n item.setLayoutStartPosition({\n y: relativeRegion.getLayoutStartPoint().y + item.layoutOffsetY + item.layoutPaddingTop\n });\n\n if (item.layoutOrient === 'right') {\n item.setLayoutStartPosition({\n x: item.getLayoutStartPoint().x + regionWidth - regionRelativeTotalWidth\n });\n }\n } else if (['top', 'bottom'].includes(item.layoutOrient)) {\n const relativeRegion = this.filterRegionsWithID(regionItems, item.layoutBindRegionID[0]);\n\n item.setLayoutRect({\n width: relativeRegion.getLayoutRect().width\n });\n\n item.setLayoutStartPosition({\n x: relativeRegion.getLayoutStartPoint().x + item.layoutOffsetX + item.layoutPaddingLeft\n });\n\n if (item.layoutOrient === 'bottom') {\n item.setLayoutStartPosition({\n y: item.getLayoutStartPoint().y + regionHeight - regionRelativeTotalHeight\n });\n }\n }\n });\n }\n\n /**\n * 再找出对 absolute 元素,无需排序,在 compiler 层需要排序放置\n *\n * 重要:absolute 默认依据 region 进行相对依赖\n */\n protected layoutAbsoluteItems(absoluteItems: ILayoutItem[]) {\n absoluteItems.forEach(item => {\n // 设置盒子\n item.absoluteLayoutInRect(this._chartLayoutRect);\n });\n }\n\n // 对普通布局来说,只出一个 region 绑定\n filterRegionsWithID(items: ILayoutItem[], id: number): ILayoutItem {\n const target = items.find(x => x.getModelId() === id);\n if (!target) {\n (this._onError ?? error)('can not find target region item, invalid id');\n }\n return target as ILayoutItem;\n }\n\n /**\n * 工具方法 根据item属性获取给item提供的布局空间\n * @param item\n */\n getItemComputeLayoutRect(item: ILayoutItem) {\n const result = {\n width: this.rightCurrent - this.leftCurrent - item.layoutPaddingLeft - item.layoutPaddingRight,\n height: this.bottomCurrent - this.topCurrent - item.layoutPaddingTop - item.layoutPaddingBottom\n };\n return result;\n }\n\n protected _checkAutoIndent(\n items: ILayoutItem[],\n layoutTemp: {\n top: number;\n left: number;\n bottom: number;\n right: number;\n }\n ): IPadding {\n const result = {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0\n };\n items.forEach(i => {\n if (!i.getModelVisible() || !i.autoIndent) {\n return;\n }\n const vOrH = i.layoutOrient === 'left' || i.layoutOrient === 'right';\n const itemOuter = i.getLastComputeOutBounds();\n const outer = this._getOutInLayout(itemOuter, i, layoutTemp);\n if (vOrH) {\n result.top = Math.max(result.top, outer.top);\n result.bottom = Math.max(result.bottom, outer.bottom);\n } else {\n result.left = Math.max(result.left, outer.left);\n result.right = Math.max(result.right, outer.right);\n }\n });\n return result;\n }\n\n private _getOutInLayout(itemOuter: IBoundsLike, i: ILayoutItem, tempBorder: LayoutSideType): LayoutSideType {\n const { x, y } = i.getLayoutStartPoint();\n const { width, height } = i.getLayoutRect();\n\n const result: LayoutSideType = {\n left: tempBorder.left - (x - itemOuter.x1),\n right: x + width + itemOuter.x2 - tempBorder.right,\n top: tempBorder.top - (y - itemOuter.y1),\n bottom: y + height + itemOuter.y2 - tempBorder.bottom\n };\n return result;\n }\n}\n","import isValid from './isValid';\n\nexport function range(start: number, stop?: number, step?: number): number[] {\n if (!isValid(stop)) {\n stop = start;\n start = 0;\n }\n if (!isValid(step)) {\n step = 1;\n }\n\n let i = -1;\n const n = Math.max(0, Math.ceil((stop - start) / step)) | 0;\n const range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export const memoize = any>(func: T) => {\n let lastArgs: any[] = null;\n let lastResult: any = null;\n\n return ((...args: any[]) => {\n if (lastArgs && args.every((val, i) => val === lastArgs[i])) {\n return lastResult;\n }\n\n lastArgs = args;\n lastResult = (func as any)(...args);\n\n return lastResult;\n }) as T;\n};\n","import { ascending } from './ascending';\nimport isNil from './isNil';\n\nexport function bisect(a: number[], x: number, lo: number = 0, hi?: number) {\n if (isNil(hi)) {\n hi = a.length;\n }\n while (lo < (hi as number)) {\n const mid: number = (lo + (hi as number)) >>> 1;\n if (ascending(a[mid], x) > 0) {\n hi = mid;\n } else {\n lo = mid + 1;\n }\n }\n return lo;\n}\n","import { bisect, range } from '@visactor/vutils';\nimport type { FloorCeilType, InterpolateType } from '../interface';\n\nexport function identity(x: any) {\n return x;\n}\n\nexport const generatePow = (exponent: number) => {\n return (x: number) => {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n};\n\nexport const sqrt = (x: number) => {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n};\n\nexport const square = (x: number) => {\n return x < 0 ? -x * x : x * x;\n};\n\nexport const log = (x: number) => {\n return Math.log(x);\n};\n\nexport const exp = (x: number) => {\n return Math.exp(x);\n};\n\nexport const logNegative = (x: number) => {\n return -Math.log(-x);\n};\n\nexport const expNegative = (x: number) => {\n return -Math.exp(-x);\n};\n\nexport const pow10 = (x: number) => {\n return isFinite(x) ? Math.pow(10, x) : x < 0 ? 0 : x;\n};\n\nexport const powp = (base: number) => {\n return base === 10 ? pow10 : base === Math.E ? Math.exp : (x: number) => Math.pow(base, x);\n};\n\nexport const logp = (base: number) => {\n return base === Math.E\n ? Math.log\n : base === 10\n ? Math.log10\n : base === 2\n ? Math.log2\n : ((base = Math.log(base)), (x: number) => Math.log(x) / base);\n};\n\nexport const symlog = (c: number) => {\n return (x: number) => {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n};\n\nexport const symexp = (c: number) => {\n return (x: number) => {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n};\n\nexport function normalize(a: number, b: number): (x: number) => number {\n a = Number(a);\n b = Number(b);\n b -= a;\n if (b) {\n return (x: number) => {\n return (x - a) / b;\n };\n }\n const result = Number.isNaN(b) ? NaN : 0.5;\n return () => {\n return result;\n };\n}\n\n// 基于d3-scale\n// https://github.com/d3/d3-scale/blob/main/src/continuous.js\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nexport function bimap(\n domain: [number, number],\n range: [any, any],\n interpolate: InterpolateType\n): (x: number) => any {\n const d0 = domain[0];\n const d1 = domain[1];\n const r0 = range[0];\n const r1 = range[1];\n let d0Fuc: any;\n let r0Fuc: any;\n if (d1 < d0) {\n d0Fuc = normalize(d1, d0);\n r0Fuc = interpolate(r1, r0);\n } else {\n d0Fuc = normalize(d0, d1);\n r0Fuc = interpolate(r0, r1);\n }\n return (x: number) => {\n return r0Fuc(d0Fuc(x));\n };\n}\n\nexport function bandSpace(count: number, paddingInner: number, paddingOuter: number): number {\n let space;\n // count 等于 1 时需要特殊处理,否则 step 会超出 range 范围\n // 计算公式: step = paddingOuter * step * 2 + paddingInner * step + bandwidth\n if (count === 1) {\n space = count + paddingOuter * 2;\n } else {\n space = count - paddingInner + paddingOuter * 2;\n }\n return count ? (space > 0 ? space : 1) : 0;\n}\n\n/** 计算 scale 的实际 range 长度 */\nexport function scaleWholeRangeSize(count: number, bandwidth: number, paddingInner: number, paddingOuter: number) {\n if (paddingInner === 1) {\n paddingInner = 0; // 保护\n }\n const space = bandSpace(count, paddingInner, paddingOuter);\n const step = bandwidth / (1 - paddingInner);\n const wholeSize = space * step;\n return wholeSize;\n}\n\n/** 根据 scale 的实际 range 长度计算 bandwidth */\nexport function calculateBandwidthFromWholeRangeSize(\n count: number,\n wholeSize: number,\n paddingInner: number,\n paddingOuter: number,\n round: boolean\n) {\n const space = bandSpace(count, paddingInner, paddingOuter);\n let step = wholeSize / Math.max(1, space || 1);\n if (round) {\n step = Math.floor(step);\n }\n let bandwidth = step * (1 - paddingInner);\n if (round) {\n bandwidth = Math.round(bandwidth);\n }\n return bandwidth;\n}\n\n/** 根据可见 range 和 rangeFactor 计算整体 range */\nexport function calculateWholeRangeFromRangeFactor(range: number[], rangeFactor: number[]): [number, number] {\n const k = (range[1] - range[0]) / (rangeFactor[1] - rangeFactor[0]);\n const b = range[0] - k * rangeFactor[0];\n const r0 = b;\n const r1 = k + b;\n return [r0, r1];\n}\n\nexport function polymap(domain: number[], range: any[], interpolate: InterpolateType): (x: number) => any {\n const j = Math.min(domain.length, range.length) - 1;\n const d = new Array(j);\n const r = new Array(j);\n let i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function (x: number) {\n const i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport const nice = (domain: number[] | Date[], options: FloorCeilType) => {\n const newDomain = domain.slice();\n\n let startIndex = 0;\n let endIndex = newDomain.length - 1;\n let x0 = newDomain[startIndex];\n let x1 = newDomain[endIndex];\n\n if (x1 < x0) {\n [startIndex, endIndex] = [endIndex, startIndex];\n [x0, x1] = [x1, x0];\n }\n\n newDomain[startIndex] = options.floor(x0);\n newDomain[endIndex] = options.ceil(x1);\n\n return newDomain;\n};\n\nexport const niceNumber = (value: number, round: boolean = false) => {\n const exponent = Math.floor(Math.log10(value));\n const fraction = value / Math.pow(10, exponent);\n\n let niceFraction: number;\n\n if (round) {\n if (fraction < 1.5) {\n niceFraction = 1;\n } else if (fraction < 3) {\n niceFraction = 2;\n } else if (fraction < 7) {\n niceFraction = 5;\n } else {\n niceFraction = 10;\n }\n } else {\n if (fraction <= 1) {\n niceFraction = 1;\n } else if (fraction <= 2) {\n niceFraction = 2;\n } else if (fraction <= 5) {\n niceFraction = 5;\n } else {\n niceFraction = 10;\n }\n }\n\n return niceFraction * Math.pow(10, exponent);\n};\n\nexport const restrictNumber = (value: number, domain: [number, number]) => {\n let min;\n let max;\n if (domain[0] < domain[1]) {\n min = domain[0];\n max = domain[1];\n } else {\n min = domain[1];\n max = domain[0];\n }\n return Math.min(Math.max(value, min), max);\n};\n","import { range, memoize, isNumber } from '@visactor/vutils';\nimport type { TransformType, ContinuousTicksFunc, NiceOptions, NiceType } from '../interface';\nimport { niceNumber, restrictNumber } from './utils';\n\nconst e10 = Math.sqrt(50);\nconst e5 = Math.sqrt(10);\nconst e2 = Math.sqrt(2);\nconst niceNumbers = [1, 2, 5, 10];\n\ntype TicksFunc = (start: number, stop: number, count: number) => number[];\n// eslint-disable-next-line max-len\ntype TicksBaseTransformFunc = (\n start: number,\n stop: number,\n count: number,\n base: number,\n transformer: TransformType,\n untransformer: TransformType\n) => number[];\n// eslint-disable-next-line max-len\ntype ForceTicksBaseTransformFunc = (\n start: number,\n stop: number,\n count: number,\n transformer: TransformType,\n untransformer: TransformType\n) => number[];\ntype D3TicksForLogTransformFunc = (\n start: number,\n stop: number,\n count: number,\n base: number,\n transformer: TransformType,\n untransformer: TransformType,\n options?: {\n noDecimals?: boolean;\n }\n) => number[];\n\nexport const calculateTicksOfSingleValue = (value: number, tickCount: number, noDecimals?: boolean) => {\n let step = 1;\n let start = value;\n const middleIndex = Math.floor((tickCount - 1) / 2);\n const absVal = Math.abs(value);\n\n if (value >= 0 && value <= Number.MIN_VALUE) {\n start = 0;\n } else if (value < 0 && value >= -Number.MIN_VALUE) {\n start = -(tickCount - 1);\n } else if (!noDecimals && absVal < 1) {\n step = getNickStep(absVal).step;\n // middle = new Decimal(Math.floor(middle.div(step).toNumber())).mul(step);\n } else if (noDecimals || absVal > 1) {\n start = Math.floor(value) - middleIndex * step;\n }\n\n if (step > 0) {\n if (value > 0) {\n start = Math.max(start, 0);\n } else if (value < 0) {\n // < 0;\n start = Math.min(start, -(tickCount - 1) * step);\n }\n\n return range(0, tickCount).map((index: number) => start + index * step);\n }\n\n return value > 0\n ? calculateTicksByStep(0, -(tickCount - 1) / step, step)\n : calculateTicksByStep((tickCount - 1) / step, 0, step);\n};\n\n/**\n * 根据start、stop、count进行分割,不要求count完全准确\n * @param start\n * @param stop\n * @param count\n * @returns\n */\nexport const d3Ticks = memoize(\n (start: number, stop: number, count: number, options?: { noDecimals?: boolean }) => {\n let reverse;\n let i = -1;\n let n;\n let ticks;\n let step;\n\n stop = +stop;\n start = +start;\n count = +count;\n\n // add check for start equal stop\n if (start === stop) {\n return [start];\n }\n\n if (Math.abs(start - stop) <= Number.MIN_VALUE && count > 0) {\n return [start];\n }\n if ((reverse = stop < start)) {\n n = start;\n start = stop;\n stop = n;\n }\n step = tickIncrement(start, stop, count).step;\n // why return empty array when stop === 0 ?\n // if (stop === 0 || !isFinite(step)) {\n if (!isFinite(step)) {\n return [];\n }\n\n if (step > 0) {\n let r0 = Math.round(start / step);\n let r1 = Math.round(stop / step);\n if (r0 * step < start) {\n ++r0;\n }\n if (r1 * step > stop) {\n --r1;\n }\n ticks = new Array((n = r1 - r0 + 1));\n while (++i < n) {\n ticks[i] = (r0 + i) * step;\n }\n } else if (step < 0 && options?.noDecimals) {\n step = 1;\n const r0 = Math.ceil(start);\n const r1 = Math.floor(stop);\n\n if (r0 <= r1) {\n ticks = new Array((n = r1 - r0 + 1));\n while (++i < n) {\n ticks[i] = r0 + i;\n }\n } else {\n return [];\n }\n } else {\n step = -step;\n let r0 = Math.round(start * step);\n let r1 = Math.round(stop * step);\n if (r0 / step < start) {\n ++r0;\n }\n if (r1 / step > stop) {\n --r1;\n }\n ticks = new Array((n = r1 - r0 + 1));\n while (++i < n) {\n ticks[i] = (r0 + i) / step;\n }\n }\n\n if (reverse) {\n ticks.reverse();\n }\n\n return ticks;\n }\n);\n\nconst calculateTicksByStep = (start: number, stop: number, step: number) => {\n let i = -1;\n let n;\n let ticks;\n\n if (step > 0) {\n let r0 = Math.floor(start / step);\n let r1 = Math.ceil(stop / step);\n if ((r0 + 1) * step < start) {\n ++r0;\n }\n if ((r1 - 1) * step > stop) {\n --r1;\n }\n ticks = new Array((n = r1 - r0 + 1));\n while (++i < n) {\n ticks[i] = (r0 + i) * step;\n }\n } else {\n step = -step;\n let r0 = Math.floor(start * step);\n let r1 = Math.ceil(stop * step);\n if ((r0 + 1) / step < start) {\n ++r0;\n }\n if ((r1 - 1) / step > stop) {\n --r1;\n }\n ticks = new Array((n = r1 - r0 + 1));\n while (++i < n) {\n ticks[i] = (r0 + i) / step;\n }\n }\n\n return ticks;\n};\n\nexport const appendTicksToCount = (ticks: number[], count: number, step: number) => {\n let n: number;\n const firstTick = ticks[0];\n const lastTick = ticks[ticks.length - 1];\n const appendCount = count - ticks.length;\n\n if (lastTick <= 0) {\n const headTicks: number[] = [];\n // append to head\n for (n = appendCount; n >= 1; n--) {\n headTicks.push(firstTick - n * step);\n }\n return headTicks.concat(ticks);\n } else if (firstTick >= 0) {\n // append to tail\n for (n = 1; n <= appendCount; n++) {\n ticks.push(lastTick + n * step);\n }\n\n return ticks;\n }\n let headTicks: number[] = [];\n const tailTicks: number[] = [];\n // append to head and tail\n for (n = 1; n <= appendCount; n++) {\n if (n % 2 === 0) {\n headTicks = [firstTick - Math.floor(n / 2) * step].concat(headTicks);\n } else {\n tailTicks.push(lastTick + Math.ceil(n / 2) * step);\n }\n }\n\n return headTicks.concat(ticks).concat(tailTicks);\n};\n\n/**\n * 根据start、stop、count进行分割,不要求count完全准确\n * @param start\n * @param stop\n * @param count\n * @returns\n */\nexport const ticks = memoize(\n (start: number, stop: number, count: number, options?: { noDecimals?: boolean }) => {\n let reverse;\n let ticks;\n let n;\n const maxIterations = 5;\n\n stop = +stop;\n start = +start;\n count = +count;\n\n // add check for start equal stop\n if (start === stop) {\n return calculateTicksOfSingleValue(start, count, options?.noDecimals);\n }\n\n if (Math.abs(start - stop) <= Number.MIN_VALUE && count > 0) {\n return calculateTicksOfSingleValue(start, count, options?.noDecimals);\n }\n if ((reverse = stop < start)) {\n n = start;\n start = stop;\n stop = n;\n }\n const stepRes = tickIncrement(start, stop, count);\n let step = stepRes.step;\n // why return empty array when stop === 0 ?\n // if (stop === 0 || !isFinite(step)) {\n if (!isFinite(step)) {\n return [];\n }\n\n if (step > 0) {\n let cur = 1;\n const { power, gap } = stepRes;\n const delatStep = gap === 10 ? 2 * 10 ** power : 1 * 10 ** power;\n while (\n cur <= maxIterations &&\n ((ticks = calculateTicksByStep(start, stop, step)), ticks.length > count + 1) &&\n count > 2\n ) {\n step += delatStep;\n\n cur += 1;\n }\n\n if (count > 2 && ticks.length < count - 1) {\n ticks = appendTicksToCount(ticks, count, step);\n }\n } else {\n if (options?.noDecimals && step < 0) {\n step = 1;\n }\n ticks = calculateTicksByStep(start, stop, step);\n }\n\n if (reverse) {\n ticks.reverse();\n }\n\n return ticks;\n }\n);\n\nconst getNickStep = (step: number) => {\n const power = Math.floor(Math.log(step) / Math.LN10); // 对数取整\n const error = step / 10 ** power;\n\n let gap = niceNumbers[0];\n if (error >= e10) {\n gap = niceNumbers[3];\n } else if (error >= e5) {\n gap = niceNumbers[2];\n } else if (error >= e2) {\n gap = niceNumbers[1];\n }\n\n if (power >= 0) {\n return { step: gap * 10 ** power, gap, power };\n }\n return { step: -(10 ** -power) / gap, gap, power };\n};\n\nexport function tickIncrement(start: number, stop: number, count: number) {\n const step = (stop - start) / Math.max(0, count);\n return getNickStep(step);\n}\n\n/**\n * 严格根据start、stop、count进行分割,要求start、stop、count完全准确(除了count = 1的情况下stop可能不准确)\n * @param start\n * @param stop\n * @param count\n * @returns\n */\nexport function forceTicks(start: number, stop: number, count: number) {\n let step;\n\n stop = +stop;\n start = +start;\n count = +count;\n if (start === stop && count > 0) {\n return [start];\n }\n if (count <= 0 || (step = forceTickIncrement(start, stop, count)) === 0 || !isFinite(step)) {\n return [];\n }\n\n const ticks = new Array(count);\n for (let i = 0; i < count; i++) {\n ticks[i] = start + i * step;\n }\n\n return ticks;\n}\n\nexport function forceTickIncrement(start: number, stop: number, count: number) {\n // 用绝对数值做步进距离\n const step = (stop - start) / Math.max(1, count - 1);\n return step;\n}\n\n/**\n * 给定step的ticks分割\n * @param start\n * @param stop\n * @param step\n * @returns\n */\nexport function stepTicks(start: number, stop: number, step: number) {\n let i = -1;\n let n;\n let reverse;\n\n stop = +stop;\n start = +start;\n step = +step;\n if ((reverse = stop < start)) {\n n = start;\n start = stop;\n stop = n;\n }\n if (!isFinite(step) || stop - start <= step) {\n return [start];\n }\n const count = Math.floor((stop - start) / step + 1);\n const ticks = new Array(count);\n while (++i < count) {\n ticks[i] = start + i * step;\n }\n if (reverse) {\n ticks.reverse();\n }\n return ticks;\n}\n\nexport function niceLinear(d: number[], count: number = 10) {\n let i0 = 0;\n let i1 = d.length - 1;\n let start = d[i0];\n let stop = d[i1];\n let prestep;\n let step;\n let maxIter = 10;\n\n if (stop < start) {\n step = start;\n start = stop;\n stop = step;\n step = i0;\n i0 = i1;\n i1 = step;\n }\n\n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count).step;\n if (step === prestep) {\n d[i0] = start;\n d[i1] = stop;\n return d;\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return;\n}\n\nexport function parseNiceOptions(originalDomain: number[], option: NiceOptions) {\n const hasForceMin = isNumber(option.forceMin);\n const hasForceMax = isNumber(option.forceMax);\n let niceType: NiceType = null;\n const niceMinMax = [];\n let niceDomain: number[] = null;\n\n const domainValidator =\n hasForceMin && hasForceMax\n ? (x: number) => x >= option.forceMin && x <= option.forceMax\n : hasForceMin\n ? (x: number) => x >= option.forceMin\n : hasForceMax\n ? (x: number) => x <= option.forceMax\n : null;\n\n if (hasForceMin) {\n niceMinMax[0] = option.forceMin;\n } else if (\n isNumber(option.min) &&\n option.min <= Math.min(originalDomain[0], originalDomain[originalDomain.length - 1])\n ) {\n niceMinMax[0] = option.min;\n }\n\n if (hasForceMax) {\n niceMinMax[1] = option.forceMax;\n } else if (\n isNumber(option.max) &&\n option.max >= Math.max(originalDomain[0], originalDomain[originalDomain.length - 1])\n ) {\n niceMinMax[1] = option.max;\n }\n\n if (isNumber(niceMinMax[0]) && isNumber(niceMinMax[1])) {\n niceDomain = originalDomain.slice();\n niceDomain[0] = niceMinMax[0];\n niceDomain[niceDomain.length - 1] = niceMinMax[1];\n } else if (!isNumber(niceMinMax[0]) && !isNumber(niceMinMax[1])) {\n niceType = 'all';\n } else if (!isNumber(niceMinMax[0])) {\n niceType = 'min';\n } else {\n niceType = 'max';\n }\n\n return { niceType, niceDomain, niceMinMax, domainValidator };\n}\n\nexport const fixPrecision = (start: number, stop: number, value: number) => {\n return Math.abs(stop - start) < 1 ? +value.toFixed(1) : Math.round(+value);\n};\n\nexport const d3TicksForLog = memoize(\n (\n start: number,\n stop: number,\n count: number,\n base: number,\n transformer: TransformType,\n untransformer: TransformType,\n options?: { noDecimals?: boolean }\n ) => {\n let u = start;\n let v = stop;\n const r = v < u;\n\n if (r) {\n [u, v] = [v, u];\n }\n\n let i = transformer(u);\n let j = transformer(v);\n let k;\n let t;\n let z = [];\n\n if (!(base % 1) && j - i < count) {\n // this._base is integer\n (i = Math.floor(i)), (j = Math.ceil(j));\n if (u > 0) {\n for (; i <= j; ++i) {\n for (k = 1; k < base; ++k) {\n t = i < 0 ? k / untransformer(-i) : k * untransformer(i);\n if (t < u) {\n continue;\n }\n if (t > v) {\n break;\n }\n z.push(t);\n }\n }\n } else {\n for (; i <= j; ++i) {\n for (k = base - 1; k >= 1; --k) {\n t = i > 0 ? k / untransformer(-i) : k * untransformer(i);\n if (t < u) {\n continue;\n }\n if (t > v) {\n break;\n }\n z.push(t);\n }\n }\n }\n if (z.length * 2 < count) {\n z = ticks(u, v, count);\n }\n } else {\n z = ticks(i, j, Math.min(j - i, count)).map(untransformer);\n }\n z = z.filter((t: number) => t !== 0);\n if (options?.noDecimals) {\n z = Array.from(new Set(z.map((t: number) => Math.floor(t))));\n }\n return r ? z.reverse() : z;\n }\n);\n\nexport const ticksBaseTransform = memoize(\n (\n start: number,\n stop: number,\n count: number,\n base: number,\n transformer: TransformType,\n untransformer: TransformType\n ) => {\n const ticksResult: number[] = [];\n const ticksMap = {};\n const startExp = transformer(start);\n const stopExp = transformer(stop);\n let ticksExp = [];\n // get ticks exp\n if (Number.isInteger(base)) {\n ticksExp = ticks(startExp, stopExp, count);\n } else {\n const stepExp = (stopExp - startExp) / (count - 1);\n for (let i = 0; i < count; i++) {\n ticksExp.push(startExp + i * stepExp);\n }\n }\n ticksExp.forEach((tl: number) => {\n // get pow\n const power = untransformer(tl);\n // nice\n const nicePower = Number.isInteger(base)\n ? fixPrecision(start, stop, power)\n : fixPrecision(start, stop, niceNumber(power));\n // scope\n const scopePower = fixPrecision(start, stop, restrictNumber(nicePower, [start, stop]));\n // dedupe\n if (!ticksMap[scopePower] && !isNaN(scopePower) && ticksExp.length > 1) {\n ticksMap[scopePower] = 1;\n ticksResult.push(scopePower);\n }\n });\n return ticksResult;\n }\n);\n\nexport const forceTicksBaseTransform = memoize(\n (start: number, stop: number, count: number, transformer: TransformType, untransformer: TransformType) => {\n const startExp = transformer(start);\n const stopExp = transformer(stop);\n const ticksExp = forceTicks(startExp, stopExp, count);\n return ticksExp.map((te: number) => niceNumber(untransformer(te)));\n }\n);\n\nexport const forceStepTicksBaseTransform = memoize(\n (start: number, stop: number, step: number, transformer: TransformType, untransformer: TransformType) => {\n const startExp = transformer(start);\n const stopExp = transformer(stop);\n const ticksExp = stepTicks(startExp, stopExp, step);\n return ticksExp.map((te: number) => niceNumber(untransformer(te)));\n }\n);\n","import { clamp, isNil, isValid } from '@visactor/vutils';\nimport type { IRangeFactor, ScaleFishEyeOptions } from './interface';\nimport { calculateWholeRangeFromRangeFactor } from './utils/utils';\n\nexport abstract class BaseScale implements IRangeFactor {\n protected _wholeRange: any[];\n protected _rangeFactorStart?: number = null;\n protected _rangeFactorEnd?: number = null;\n protected _unknown: any;\n protected _fishEyeOptions?: ScaleFishEyeOptions;\n protected _fishEyeTransform?: (output: number) => number;\n\n abstract range(): any[];\n abstract domain(): any[];\n abstract invert(d: any): any;\n\n protected _calculateWholeRange(range: any[]) {\n if (this._wholeRange) {\n return this._wholeRange;\n }\n\n if (isValid(this._rangeFactorStart) && isValid(this._rangeFactorEnd) && range.length === 2) {\n this._wholeRange = calculateWholeRangeFromRangeFactor(range, [this._rangeFactorStart, this._rangeFactorEnd]);\n return this._wholeRange;\n }\n return range;\n }\n\n abstract calculateVisibleDomain(range: any[]): any[];\n\n rangeFactor(): [number, number];\n rangeFactor(_: [number, number], slience?: boolean, clear?: boolean): this;\n rangeFactor(_?: [number, number], slience?: boolean, clear?: boolean): this | any[] {\n if (!_) {\n if (clear) {\n this._wholeRange = null;\n this._rangeFactorStart = null;\n this._rangeFactorEnd = null;\n return this;\n }\n\n if (isValid(this._rangeFactorStart) && isValid(this._rangeFactorEnd)) {\n return [this._rangeFactorStart, this._rangeFactorEnd];\n }\n return null;\n }\n if (_.length === 2 && _.every(r => r >= 0 && r <= 1)) {\n this._wholeRange = null;\n if (_[0] === 0 && _[1] === 1) {\n this._rangeFactorStart = null;\n this._rangeFactorEnd = null;\n } else {\n this._rangeFactorStart = _[0];\n this._rangeFactorEnd = _[1];\n }\n }\n\n return this;\n }\n\n rangeFactorStart(): number;\n rangeFactorStart(_: number, slience?: boolean): this;\n rangeFactorStart(_?: number, slience?: boolean): this | any {\n if (isNil(_)) {\n return this._rangeFactorStart;\n }\n if (_ >= 0 && _ <= 1) {\n this._wholeRange = null;\n if (_ === 0 && (isNil(this._rangeFactorEnd) || this._rangeFactorEnd === 1)) {\n this._rangeFactorStart = null;\n this._rangeFactorEnd = null;\n } else {\n this._rangeFactorStart = _;\n this._rangeFactorEnd = this._rangeFactorEnd ?? 1;\n }\n }\n\n return this;\n }\n\n rangeFactorEnd(): number;\n rangeFactorEnd(_: number, slience?: boolean): this;\n rangeFactorEnd(_?: number, slience?: boolean): this | any {\n if (isNil(_)) {\n return this._rangeFactorEnd;\n }\n if (_ >= 0 && _ <= 1) {\n this._wholeRange = null;\n if (_ === 0 && (isNil(this._rangeFactorStart) || this._rangeFactorStart === 0)) {\n this._rangeFactorStart = null;\n this._rangeFactorEnd = null;\n } else {\n this._rangeFactorEnd = _;\n this._rangeFactorStart = this._rangeFactorStart ?? 0;\n }\n }\n\n return this;\n }\n\n protected generateFishEyeTransform() {\n if (!this._fishEyeOptions) {\n this._fishEyeTransform = null;\n\n return;\n }\n const { distortion = 2, radiusRatio = 0.1, radius } = this._fishEyeOptions;\n const range = this.range();\n const first = range[0];\n const last = range[range.length - 1];\n const min = Math.min(first, last);\n const max = Math.max(first, last);\n const focus = clamp(this._fishEyeOptions.focus ?? 0, min, max);\n const rangeRadius = isNil(radius) ? (max - min) * radiusRatio : radius;\n let k0 = Math.exp(distortion);\n k0 = (k0 / (k0 - 1)) * rangeRadius;\n const k1 = distortion / rangeRadius;\n\n this._fishEyeTransform = (output: number) => {\n const delta = Math.abs(output - focus);\n\n if (delta >= rangeRadius) {\n return output;\n }\n\n if (delta <= 1e-6) {\n return focus;\n }\n const k = ((k0 * (1 - Math.exp(-delta * k1))) / delta) * 0.75 + 0.25;\n\n return focus + (output - focus) * k;\n };\n }\n\n unknown(): any[];\n unknown(_: any): this;\n unknown(_?: any): this | any {\n if (!arguments.length) {\n return this._unknown;\n }\n this._unknown = _;\n return this;\n }\n}\n","import { RGB } from './Color';\n\nexport function interpolateRgb(colorA: RGB, colorB: RGB): (x: number) => RGB {\n const redA = colorA.r;\n const redB = colorB.r;\n const greenA = colorA.g;\n const greenB = colorB.g;\n const blueA = colorA.b;\n const blueB = colorB.b;\n const opacityA = colorA.opacity;\n const opacityB = colorB.opacity;\n\n return (t: number) => {\n const r = Math.round(redA * (1 - t) + redB * t);\n const g = Math.round(greenA * (1 - t) + greenB * t);\n const b = Math.round(blueA * (1 - t) + blueB * t);\n const opacity = opacityA * (1 - t) + opacityB * t;\n\n return new RGB(r, g, b, opacity);\n };\n}\n","export function interpolateNumber(a: number, b: number): (x: number) => number {\n return (t: number) => {\n return a * (1 - t) + b * t;\n };\n}\n\nexport function interpolateNumberRound(a: number, b: number): (x: number) => number {\n return function (t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n\nexport function interpolateDate(a: Date, b: Date) {\n const aVal = a.valueOf();\n const bVal = b.valueOf();\n\n const d = new Date();\n return (t: number) => {\n d.setTime(aVal * (1 - t) + bVal * t);\n return d;\n };\n}\n\nconst reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g;\nconst reB = new RegExp(reA.source, 'g');\n\nfunction zero(b: any) {\n return function () {\n return b;\n };\n}\n\nfunction one(b: any) {\n return function (t: any) {\n return b(t) + '';\n };\n}\n\nexport function interpolateString(a: any, b: any) {\n let bi = (reA.lastIndex = reB.lastIndex = 0); // scan index for next number in b\n let am: any; // current match in a\n let bm: any; // current match in b\n let bs; // string preceding current number in b, if any\n let i = -1; // index in s\n const s: any[] = []; // string constants and placeholders\n const q: any[] = []; // number interpolators\n\n // Coerce inputs to strings.\n (a = a + ''), (b = b + '');\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a)) && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) {\n // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) {\n s[i] += bs;\n } // coalesce with previous string\n else {\n s[++i] = bs;\n }\n }\n if ((am = am[0]) === (bm = bm[0])) {\n // numbers in a & b match\n if (s[i]) {\n s[i] += bm;\n } // coalesce with previous string\n else {\n s[++i] = bm;\n }\n } else {\n // interpolate non-matching numbers\n s[++i] = null;\n q.push({ i: i, x: interpolateNumber(am, bm) });\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) {\n s[i] += bs;\n } // coalesce with previous string\n else {\n s[++i] = bs;\n }\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2\n ? q[0]\n ? one(q[0].x)\n : zero(b)\n : ((b = q.length),\n function (t: any) {\n for (let i = 0, o; i < b; ++i) {\n s[(o = q[i]).i] = o.x(t);\n }\n return s.join('');\n });\n}\n","import { ColorUtil, isNil, interpolateNumber, interpolateDate } from '@visactor/vutils';\n\nconst { interpolateRgb } = ColorUtil;\n\nexport function interpolate(a: any, b: any) {\n const t = typeof b;\n let c;\n\n if (isNil(b) || t === 'boolean') {\n return () => b;\n }\n\n if (t === 'number') {\n return interpolateNumber(a, b);\n }\n\n if (t === 'string') {\n if ((c = ColorUtil.Color.parseColorString(b))) {\n const rgb = interpolateRgb(ColorUtil.Color.parseColorString(a as string), c);\n\n return (t: number) => {\n // #rrggbbaa 格式在部分浏览器存在兼容性问题,rgba()字符串兼容性更好,所以还是支持rgba()字符串\n return rgb(t).formatRgb();\n };\n }\n\n return interpolateNumber(Number(a), Number(b));\n }\n\n if (b instanceof ColorUtil.RGB) {\n return interpolateRgb(a, b);\n }\n\n if (b instanceof ColorUtil.Color) {\n return interpolateRgb(a.color, b.color);\n }\n\n if (b instanceof Date) {\n return interpolateDate(a, b);\n }\n\n return interpolateNumber(Number(a), Number(b));\n}\n","export function clamper(a: number, b: number): (x: number) => number {\n let t;\n if (a > b) {\n t = a;\n a = b;\n b = t;\n }\n return (x: number) => {\n return Math.max(a, Math.min(b, x));\n };\n}\n","import { BaseScale } from './base-scale';\nimport type {\n BimapType,\n InterpolateType,\n PolymapType,\n TransformType,\n IContinuousScale,\n ContinuousScaleType,\n TickData,\n NiceType,\n ScaleFishEyeOptions\n} from './interface';\nimport { interpolate } from './utils/interpolate';\nimport { bimap, identity, polymap } from './utils/utils';\nimport { clamper, toNumber, interpolateNumberRound, interpolateNumber, isValid, isNil } from '@visactor/vutils';\n\nexport class ContinuousScale extends BaseScale implements IContinuousScale {\n readonly type: ContinuousScaleType;\n protected transformer: TransformType;\n protected untransformer: TransformType;\n\n protected _niceDomain: number[];\n protected _niceType?: NiceType;\n protected _domain: number[];\n protected _range: any[];\n protected _unknown: any = undefined;\n protected _forceAlign: boolean;\n\n protected _output?: (x: number) => number;\n protected _input?: (x: number) => number;\n protected _interpolate?: InterpolateType;\n protected _piecewise: BimapType | PolymapType;\n protected _domainValidator?: (val: number) => boolean;\n\n _clamp?: (x: number) => number;\n _autoClamp?: boolean;\n\n constructor(transformer: TransformType = identity, untransformer: TransformType = identity) {\n super();\n this.transformer = transformer;\n this.untransformer = untransformer;\n\n this._forceAlign = true;\n this._domain = [0, 1];\n this._range = [0, 1];\n this._clamp = identity;\n this._piecewise = bimap;\n this._interpolate = interpolate;\n }\n\n calculateVisibleDomain(range: any[]) {\n if (isValid(this._rangeFactorStart) && isValid(this._rangeFactorEnd) && range.length === 2) {\n const d0 = this.invert(range[0]);\n const d1 = this.invert(range[1]);\n\n return [d0, d1];\n }\n\n return this._niceDomain ?? this._domain;\n }\n\n fishEye(): ScaleFishEyeOptions;\n fishEye(options: ScaleFishEyeOptions, slience?: boolean, clear?: boolean): this;\n fishEye(options?: ScaleFishEyeOptions, slience?: boolean, clear?: boolean): this | ScaleFishEyeOptions {\n if (options || clear) {\n this._fishEyeOptions = options;\n this._fishEyeTransform = null;\n\n return this.rescale(slience);\n }\n\n return this._fishEyeOptions;\n }\n\n scale(x: any): any {\n x = Number(x);\n if (Number.isNaN(x) || (this._domainValidator && !this._domainValidator(x))) {\n return this._unknown;\n }\n if (!this._output) {\n this._output = (this._piecewise as PolymapType)(\n (this._niceDomain ?? this._domain).map(this.transformer),\n this._calculateWholeRange(this._range),\n this._interpolate\n );\n }\n const output = this._output(this.transformer(this._clamp(x)));\n\n return this._fishEyeTransform ? this._fishEyeTransform(output) : output;\n }\n\n invert(y: any): any {\n if (!this._input) {\n this._input = (this._piecewise as PolymapType)(\n this._calculateWholeRange(this._range),\n (this._niceDomain ?? this._domain).map(this.transformer),\n interpolateNumber\n );\n }\n return this._clamp(this.untransformer(this._input(y)));\n }\n\n domain(): any[];\n domain(_: any[], slience?: boolean): this;\n domain(_?: any[], slience?: boolean): this | any[] {\n if (!_) {\n return (this._niceDomain ?? this._domain).slice();\n }\n this._domainValidator = null;\n this._niceType = null;\n this._niceDomain = null;\n const nextDomain = Array.from(_, toNumber) as [number, number];\n\n this._domain = nextDomain;\n return this.rescale(slience);\n }\n\n range(): any[];\n range(_: any[], slience?: boolean): this;\n range(_?: any[], slience?: boolean): this | any[] {\n if (!_) {\n return this._range.slice();\n }\n\n const nextRange = Array.from(_) as [number, number];\n this._range = nextRange;\n return this.rescale(slience);\n }\n\n rangeRound(_: any[], slience?: boolean): this {\n const nextRange = Array.from(_) as [number, number];\n this._range = nextRange;\n this._interpolate = interpolateNumberRound;\n return this.rescale(slience);\n }\n\n rescale(slience?: boolean): this {\n if (slience) {\n return this;\n }\n const domain = this._niceDomain ?? this._domain;\n const domainLength = domain.length;\n const rangeLength = this._range.length;\n let n = Math.min(domainLength, rangeLength);\n\n if (domainLength && domainLength < rangeLength && this._forceAlign) {\n // insert steps to domain\n const deltaStep = rangeLength - domainLength + 1;\n const last = domain[domainLength - 1];\n const delta = domainLength >= 2 ? (last - domain[domainLength - 2]) / deltaStep : 0;\n\n for (let i = 1; i <= deltaStep; i++) {\n domain[domainLength - 2 + i] = last - delta * (deltaStep - i);\n }\n n = rangeLength;\n }\n\n if (this._autoClamp) {\n this._clamp = clamper(domain[0], domain[n - 1]);\n }\n this._piecewise = n > 2 ? polymap : bimap;\n this._output = this._input = null;\n this._wholeRange = null;\n\n this.generateFishEyeTransform();\n return this;\n }\n\n clamp(): boolean;\n clamp(_: boolean, f?: (x: number) => number, slience?: boolean): this;\n clamp(_?: boolean, f?: (x: number) => number, slience?: boolean): this | boolean {\n if (!arguments.length) {\n return this._clamp !== identity;\n }\n if (f) {\n this._autoClamp = false;\n this._clamp = f;\n } else {\n this._autoClamp = !!_;\n this._clamp = _ ? undefined : identity;\n }\n\n return this.rescale(slience);\n }\n\n interpolate(): InterpolateType;\n interpolate(_: InterpolateType, slience?: boolean): this;\n interpolate(_?: InterpolateType, slience?: boolean) {\n if (!arguments.length) {\n return this._interpolate;\n }\n this._interpolate = _;\n return this.rescale(slience);\n }\n\n ticks(count: number = 10): any[] {\n return [];\n }\n\n tickData(count: number = 10): TickData[] {\n const ticks = this.ticks(count);\n return (ticks ?? []).map((tick, index) => {\n const scaledValue = this.scale(tick);\n return {\n index,\n tick,\n value: (scaledValue - this._range[0]) / (this._range[1] - this._range[0])\n };\n });\n }\n\n rangeFactor(): [number, number];\n rangeFactor(_: [number, number], slience?: boolean): this;\n rangeFactor(_?: [number, number], slience?: boolean): this | any[] {\n if (!_) {\n return super.rangeFactor();\n }\n super.rangeFactor(_);\n this._output = this._input = null;\n\n return this;\n }\n\n rangeFactorStart(): number;\n rangeFactorStart(_: number, slience?: boolean): this;\n rangeFactorStart(_?: number, slience?: boolean): this | any {\n if (isNil(_)) {\n return super.rangeFactorStart();\n }\n super.rangeFactorStart(_);\n this._output = this._input = null;\n\n return this;\n }\n\n rangeFactorEnd(): number;\n rangeFactorEnd(_: number, slience?: boolean): this;\n rangeFactorEnd(_?: number, slience?: boolean): this | any {\n if (isNil(_)) {\n return super.rangeFactorEnd();\n }\n super.rangeFactorEnd(_);\n this._output = this._input = null;\n\n return this;\n }\n\n forceAlignDomainRange(): boolean;\n forceAlignDomainRange(enable: boolean): this;\n forceAlignDomainRange(forceAlign?: boolean): this | boolean {\n if (!arguments.length) {\n return this._forceAlign;\n }\n this._forceAlign = forceAlign;\n return this;\n }\n}\n","import { ScaleEnum } from './type';\nimport { d3Ticks, forceTicks, niceLinear, parseNiceOptions, stepTicks, ticks } from './utils/tick-sample';\nimport { ContinuousScale } from './continuous-scale';\nimport type { ContinuousScaleType, NiceOptions } from './interface';\nimport { isValid } from '@visactor/vutils';\n\n/**\n * TODO:\n * 1. niceMax/niceMin\n * 2. tickFormat\n */\nexport class LinearScale extends ContinuousScale {\n readonly type: ContinuousScaleType = ScaleEnum.Linear;\n\n clone(): LinearScale {\n return new LinearScale()\n .domain(this._domain, true)\n .range(this._range, true)\n .unknown(this._unknown)\n .clamp(this.clamp(), null, true)\n .interpolate(this._interpolate) as LinearScale;\n }\n\n tickFormat() {\n // TODO\n return () => {\n // TODO\n };\n }\n\n d3Ticks(count: number = 10, options?: { noDecimals?: boolean }) {\n const d = this.calculateVisibleDomain(this._range);\n return d3Ticks(d[0], d[d.length - 1], count, options);\n }\n\n /**\n * the kind of algorithms will generate ticks that is smaller than the min or greater than the max\n * if we don't update niceDomain, the ticks will exceed the domain\n */\n ticks(count: number = 10, options?: { noDecimals?: boolean }) {\n if (\n (isValid(this._rangeFactorStart) &&\n isValid(this._rangeFactorEnd) &&\n (this._rangeFactorStart > 0 || this._rangeFactorEnd < 1) &&\n this._range.length === 2) ||\n !this._niceType\n ) {\n return this.d3Ticks(count, options);\n }\n const curNiceDomain = this._niceDomain ?? this._domain;\n const originalDomain = this._domain;\n const start = curNiceDomain[0];\n const stop = curNiceDomain[curNiceDomain.length - 1];\n let ticksResult = ticks(originalDomain[0], originalDomain[originalDomain.length - 1], count, options);\n\n if (!ticksResult.length) {\n return ticksResult;\n }\n\n if (this._domainValidator) {\n ticksResult = ticksResult.filter(this._domainValidator);\n } else if ((ticksResult[0] !== start || ticksResult[ticksResult.length - 1] !== stop) && this._niceType) {\n const newNiceDomain = curNiceDomain.slice();\n\n if (this._niceType === 'all') {\n newNiceDomain[0] = ticksResult[0];\n newNiceDomain[newNiceDomain.length - 1] = ticksResult[ticksResult.length - 1];\n this._niceDomain = newNiceDomain;\n this.rescale();\n } else if (this._niceType === 'min' && ticksResult[0] !== start) {\n newNiceDomain[0] = ticksResult[0];\n this._niceDomain = newNiceDomain;\n this.rescale();\n } else if (this._niceType === 'max' && ticksResult[ticksResult.length - 1] !== stop) {\n newNiceDomain[newNiceDomain.length - 1] = ticksResult[ticksResult.length - 1];\n this._niceDomain = newNiceDomain;\n this.rescale();\n }\n\n if (this._niceType !== 'all') {\n const min = Math.min(newNiceDomain[0], newNiceDomain[newNiceDomain.length - 1]);\n const max = Math.max(newNiceDomain[0], newNiceDomain[newNiceDomain.length - 1]);\n\n ticksResult = ticksResult.filter((entry: number) => entry >= min && entry <= max);\n }\n }\n\n return ticksResult;\n }\n\n /**\n * 生成tick数组,这个tick数组的长度就是count的长度\n * @param count\n */\n forceTicks(count: number = 10): any[] {\n const d = this.calculateVisibleDomain(this._range);\n return forceTicks(d[0], d[d.length - 1], count);\n }\n\n /**\n * 基于给定step的ticks数组生成\n * @param step\n */\n stepTicks(step: number): any[] {\n const d = this.calculateVisibleDomain(this._range);\n\n return stepTicks(d[0], d[d.length - 1], step);\n }\n\n nice(count: number = 10, option?: NiceOptions): this {\n const originalDomain = this._domain;\n let niceMinMax: number[] = [];\n\n if (option) {\n const res = parseNiceOptions(originalDomain, option);\n niceMinMax = res.niceMinMax;\n this._domainValidator = res.domainValidator;\n this._niceType = res.niceType;\n\n if (res.niceDomain) {\n this._niceDomain = res.niceDomain;\n this.rescale();\n\n return this;\n }\n } else {\n this._niceType = 'all';\n }\n\n if (this._niceType) {\n const niceDomain = niceLinear(originalDomain.slice(), count);\n\n if (this._niceType === 'min') {\n niceDomain[niceDomain.length - 1] = niceMinMax[1] ?? niceDomain[niceDomain.length - 1];\n } else if (this._niceType === 'max') {\n niceDomain[0] = niceMinMax[0] ?? niceDomain[0];\n }\n\n this._niceDomain = niceDomain;\n this.rescale();\n }\n return this;\n }\n\n /**\n * 只对min区间进行nice\n * 如果保持某一边界的值,就很难有好的nice效果,所以这里实现就是nice之后还原固定的边界值\n * @param count\n */\n niceMin(count: number = 10): this {\n this._niceType = 'min';\n\n const maxD = this._domain[this._domain.length - 1];\n const niceDomain = niceLinear(this.domain(), count);\n\n if (niceDomain) {\n niceDomain[niceDomain.length - 1] = maxD;\n\n this._niceDomain = niceDomain;\n\n this.rescale();\n }\n\n return this;\n }\n\n /**\n * 只对max区间进行nice\n * 如果保持某一边界的值,就很难有好的nice效果,所以这里实现就是nice之后还原固定的边界值\n * @param count\n * @returns\n */\n niceMax(count: number = 10): this {\n this._niceType = 'max';\n const minD = this._domain[0];\n const niceDomain = niceLinear(this._domain.slice(), count);\n\n if (niceDomain) {\n niceDomain[0] = minD;\n this._niceDomain = niceDomain;\n\n this.rescale();\n }\n\n return this;\n }\n}\n","import { ScaleEnum } from './type';\nimport type { DiscreteScaleType, IBaseScale } from './interface';\nimport { BaseScale } from './base-scale';\nimport { isValid } from '@visactor/vutils';\n\nexport const implicit = Symbol('implicit');\n\nexport class OrdinalScale extends BaseScale implements IBaseScale {\n readonly type: DiscreteScaleType = ScaleEnum.Ordinal;\n protected _index: Map;\n protected _domain: Array;\n protected _ordinalRange: Array;\n /** specified: support scale to return specific value on special input value */\n protected _specified: Record;\n specified(): Record;\n specified(_: Record): this;\n specified(_?: Record): this | Record {\n if (!_) {\n return Object.assign({}, this._specified);\n }\n this._specified = Object.assign(this._specified ?? {}, _);\n return this;\n }\n\n protected _getSpecifiedValue(input: string): undefined | any {\n if (!this._specified) {\n return undefined;\n }\n return this._specified[input];\n }\n\n constructor() {\n super();\n this._index = new Map();\n this._domain = [];\n this._ordinalRange = [];\n this._unknown = implicit;\n }\n\n // TODO checkPoint\n clone(): IBaseScale {\n return new OrdinalScale().domain(this._domain).range(this._ordinalRange).unknown(this._unknown);\n }\n\n calculateVisibleDomain(range: any[]) {\n if (isValid(this._rangeFactorStart) && isValid(this._rangeFactorEnd) && range.length === 2) {\n const d0 = this.invert(range[0]);\n const d1 = this.invert(range[1]);\n\n return [d0, d1];\n }\n\n return this._domain;\n }\n\n scale(d: any): any {\n const key = `${d}`;\n const special = this._getSpecifiedValue(key);\n if (special !== undefined) {\n return special;\n }\n let i = this._index.get(key);\n if (!i) {\n if (this._unknown !== implicit) {\n return this._unknown;\n }\n // TODO checkPoint\n i = this._domain.push(d);\n this._index.set(key, i);\n }\n const output = this._ordinalRange[(i - 1) % this._ordinalRange.length];\n\n return this._fishEyeTransform ? this._fishEyeTransform(output) : output;\n }\n\n // d3-scale里没有对ordinal-scale添加invert能力,这里只做简单的映射\n invert(d: any): any {\n // 找到index\n let i = 0;\n while (i < this._ordinalRange.length && this._ordinalRange[i] !== d) {\n i++;\n }\n return this._domain[(i - 1) % this._domain.length];\n }\n\n domain(): any[];\n domain(_: any[]): this;\n domain(_?: any[]): this | any {\n if (!_) {\n return this._domain.slice();\n }\n this._domain = [];\n this._index = new Map();\n for (const value of _) {\n const key = `${value}`;\n if (this._index.has(key)) {\n continue;\n }\n this._index.set(key, this._domain.push(value));\n }\n return this;\n }\n\n range(): any[];\n range(_: any[]): this;\n range(_?: any[]): this | any {\n if (!_) {\n return this._ordinalRange.slice();\n }\n const nextRange = Array.from(_);\n\n this._ordinalRange = nextRange;\n return this;\n }\n}\n","import { clamper } from '@visactor/vutils';\n\n/**\n * 根据start、stop、count进行分割,不要求count完全准确,但是保证均匀,输出为整数数组\n * @param start\n * @param stop\n * @param count\n * @param allowExcessive 如果为true,实际输出的tick数 >= count,否则实际输出的tick数 <= count\n * @returns\n */\nexport function ticks(start: number, stop: number, count: number, allowExcessive?: boolean) {\n let reverse: boolean;\n const ticks: number[] = [];\n let step: number;\n\n stop = Math.floor(+stop);\n start = Math.floor(+start);\n count = Math.floor(+count);\n if (!count) {\n return [];\n }\n if (start === stop) {\n return [start];\n }\n if ((reverse = stop < start)) {\n const n = start;\n start = stop;\n stop = n;\n }\n\n let expectedCount = clamper(1, stop - start + 1)(count);\n step = Math.floor((stop - start + 1) / expectedCount);\n if (!allowExcessive) {\n while (\n Math.ceil((stop - start + 1) / step) > count && // 估算实际的tick数量,根据数量调整step\n expectedCount > 1\n ) {\n expectedCount -= 1;\n step = Math.floor((stop - start) / expectedCount);\n }\n }\n\n let ptr = start;\n while (ptr <= stop) {\n ticks.push(ptr);\n ptr += step;\n }\n if (reverse) {\n ticks.reverse();\n }\n\n return ticks;\n}\n\n/**\n * 给定step的ticks分割\n * @param start\n * @param stop\n * @param step\n * @returns\n */\nexport function stepTicks(start: number, stop: number, step: number) {\n const ticks: number[] = [];\n let reverse: boolean;\n\n stop = Math.floor(+stop);\n start = Math.floor(+start);\n step = clamper(1, stop - start + 1)(Math.floor(+step));\n if ((reverse = stop < start)) {\n const n = start;\n start = stop;\n stop = n;\n }\n\n let ptr = start;\n while (ptr <= stop) {\n ticks.push(ptr);\n ptr += step;\n }\n if (reverse) {\n ticks.reverse();\n }\n return ticks;\n}\n","import { toNumber, isGreater, isLess, isNumber, isValid, isNil } from \"@visactor/vutils\";\n\nimport { OrdinalScale, implicit } from \"./ordinal-scale\";\n\nimport { bandSpace, calculateBandwidthFromWholeRangeSize, calculateWholeRangeFromRangeFactor, scaleWholeRangeSize } from \"./utils/utils\";\n\nimport { ScaleEnum } from \"./type\";\n\nimport { stepTicks, ticks } from \"./utils/tick-sample-int\";\n\nexport class BandScale extends OrdinalScale {\n constructor(slience) {\n super(), this.type = ScaleEnum.Band, this._range = [ 0, 1 ], this._step = void 0, \n this._bandwidth = void 0, this._isFixed = !1, this._round = !1, this._paddingInner = 0, \n this._paddingOuter = 0, this._align = .5, this._unknown = void 0, delete this.unknown, \n this.rescale(slience);\n }\n rescale(slience, changeProperty) {\n if (slience) return this;\n this._wholeRange = null;\n const wholeRange = this._calculateWholeRange(this._range, changeProperty), n = super.domain().length, reverse = wholeRange[1] < wholeRange[0];\n let start = wholeRange[Number(reverse) - 0];\n const stop = wholeRange[1 - Number(reverse)], space = bandSpace(n, this._paddingInner, this._paddingOuter);\n return this._step = (stop - start) / Math.max(1, space || 1), this._round && (this._step = Math.floor(this._step)), \n start += (stop - start - this._step * (n - this._paddingInner)) * this._align, this.isBandwidthFixed() || (this._bandwidth = this._step * (1 - this._paddingInner)), \n this._round && (start = Math.round(start), this.isBandwidthFixed() || (this._bandwidth = Math.round(this._bandwidth))), \n this._bandRangeState = {\n reverse: reverse,\n start: reverse ? start + this._step * (n - 1) : start,\n count: n\n }, this.generateFishEyeTransform(), this;\n }\n scale(d) {\n if (!this._bandRangeState) return;\n const key = `${d}`, special = this._getSpecifiedValue(key);\n if (void 0 !== special) return special;\n let i = this._index.get(key);\n if (!i) {\n if (this._unknown !== implicit) return this._unknown;\n i = this._domain.push(d), this._index.set(key, i);\n }\n const {count: count, start: start, reverse: reverse} = this._bandRangeState, output = start + (reverse ? -1 : 1) * ((i - 1) % count) * this._step;\n return this._fishEyeTransform ? this._fishEyeTransform(output) : output;\n }\n _calculateWholeRange(range, changeProperty) {\n if (this._wholeRange) return this._wholeRange;\n if ((this._minBandwidth || this._maxBandwidth) && !this._isBandwidthFixedByUser()) {\n let wholeSize;\n if (isValid(this._rangeFactorStart) && isValid(this._rangeFactorEnd) && 2 === range.length) {\n const wholeRange = calculateWholeRangeFromRangeFactor(range, [ this._rangeFactorStart, this._rangeFactorEnd ]);\n wholeSize = Math.abs(wholeRange[1] - wholeRange[0]);\n } else wholeSize = Math.abs(range[1] - range[0]);\n const autoBandwidth = calculateBandwidthFromWholeRangeSize(super.domain().length, wholeSize, this._paddingInner, this._paddingOuter, this._round);\n autoBandwidth < this._minBandwidth ? (this._bandwidth = this._minBandwidth, this._isFixed = !0) : autoBandwidth > this._maxBandwidth ? (this._bandwidth = this._maxBandwidth, \n this._isFixed = !0) : (this._bandwidth = autoBandwidth, this._isFixed = !1);\n }\n if (this.isBandwidthFixed()) {\n const wholeLength = scaleWholeRangeSize(super.domain().length, this._bandwidth, this._paddingInner, this._paddingOuter) * Math.sign(range[1] - range[0]), rangeFactorSize = Math.min((range[1] - range[0]) / wholeLength, 1);\n if (isValid(this._rangeFactorStart) && isValid(this._rangeFactorEnd)) {\n if (wholeLength > 0) {\n const r0 = range[0] - wholeLength * this._rangeFactorStart, r1 = r0 + wholeLength;\n this._wholeRange = [ r0, r1 ];\n } else {\n const r1 = range[1] + wholeLength * (1 - this._rangeFactorEnd), r0 = r1 - wholeLength;\n this._wholeRange = [ r0, r1 ];\n }\n const canAlignStart = this._rangeFactorStart + rangeFactorSize <= 1, canAlignEnd = this._rangeFactorEnd - rangeFactorSize >= 0;\n \"rangeFactorStart\" === changeProperty && canAlignStart ? this._rangeFactorEnd = this._rangeFactorStart + rangeFactorSize : \"rangeFactorEnd\" === changeProperty && canAlignEnd ? this._rangeFactorStart = this._rangeFactorEnd - rangeFactorSize : range[0] <= range[1] ? canAlignStart ? this._rangeFactorEnd = this._rangeFactorStart + rangeFactorSize : canAlignEnd ? this._rangeFactorStart = this._rangeFactorEnd - rangeFactorSize : (this._rangeFactorStart = 0, \n this._rangeFactorEnd = rangeFactorSize) : canAlignEnd ? this._rangeFactorStart = this._rangeFactorEnd - rangeFactorSize : canAlignStart ? this._rangeFactorEnd = this._rangeFactorStart + rangeFactorSize : (this._rangeFactorStart = 1 - rangeFactorSize, \n this._rangeFactorEnd = 1);\n } else this._rangeFactorStart = 0, this._rangeFactorEnd = rangeFactorSize, this._wholeRange = [ range[0], range[0] + wholeLength ];\n return this._wholeRange;\n }\n return super._calculateWholeRange(range);\n }\n calculateWholeRangeSize() {\n const wholeRange = this._calculateWholeRange(this._range);\n return Math.abs(wholeRange[1] - wholeRange[0]);\n }\n calculateVisibleDomain(range) {\n const domain = this._domain;\n if (isValid(this._rangeFactorStart) && isValid(this._rangeFactorEnd) && domain.length) {\n const d0 = this._getInvertIndex(range[0]), d1 = this._getInvertIndex(range[1]);\n return domain.slice(Math.min(d0, d1), Math.max(d0, d1) + 1);\n }\n return domain;\n }\n domain(_, slience) {\n return _ ? (super.domain(_), this.rescale(slience)) : super.domain();\n }\n range(_, slience) {\n return _ ? (this._range = [ toNumber(_[0]), toNumber(_[1]) ], this.rescale(slience)) : this._range;\n }\n rangeRound(_, slience) {\n return this._range = [ toNumber(_[0]), toNumber(_[1]) ], this._round = !0, this.rescale(slience);\n }\n ticks(count = 10) {\n const d = this.calculateVisibleDomain(this._range);\n if (-1 === count) return d;\n return ticks(0, d.length - 1, count, !1).map((i => d[i]));\n }\n tickData(count = 10) {\n return this.ticks(count).map(((tick, index) => ({\n index: index,\n tick: tick,\n value: (this.scale(tick) - this._range[0] + this._bandwidth / 2) / (this._range[1] - this._range[0])\n })));\n }\n forceTicks(count = 10) {\n const d = this.calculateVisibleDomain(this._range);\n return ticks(0, d.length - 1, count, !0).filter((i => i < d.length)).map((i => d[i]));\n }\n stepTicks(step) {\n const d = this.calculateVisibleDomain(this._range);\n return stepTicks(0, d.length - 1, step).map((i => d[i]));\n }\n _getInvertIndex(d) {\n let i = 0;\n const halfStep = this.step() / 2, halfBandwidth = this.bandwidth() / 2, len = this._domain.length, range = this.range(), reverse = range[0] > range[range.length - 1];\n for (i = 0; i < len; i++) {\n const r = this.scale(this._domain[i]) + halfBandwidth;\n if (0 === i && (!reverse && !isGreater(d, r + halfStep) || reverse && !isLess(d, r - halfStep))) break;\n if (i === len - 1) break;\n if (!isLess(d, r - halfStep) && !isGreater(d, r + halfStep)) break;\n }\n return i >= 0 && i <= len - 1 ? i : len - 1;\n }\n invert(d) {\n return this._domain[this._getInvertIndex(d)];\n }\n padding(p, slience) {\n return void 0 !== p ? (this._paddingOuter = Math.max(0, Math.min(Array.isArray(p) ? Math.min.apply(null, p) : p)), \n this._paddingInner = this._paddingOuter, this.rescale(slience)) : this._paddingInner;\n }\n paddingInner(_, slience) {\n return void 0 !== _ ? (this._paddingInner = Math.max(0, Math.min(1, _)), this.rescale(slience)) : this._paddingInner;\n }\n paddingOuter(_, slience) {\n return void 0 !== _ ? (this._paddingOuter = Math.max(0, Math.min(1, _)), this.rescale(slience)) : this._paddingOuter;\n }\n step() {\n return this._step;\n }\n round(_, slience) {\n return void 0 !== _ ? (this._round = _, this.rescale(slience)) : this._round;\n }\n align(_, slience) {\n return void 0 !== _ ? (this._align = Math.max(0, Math.min(1, _)), this.rescale(slience)) : this._align;\n }\n rangeFactor(_, slience) {\n return _ ? (super.rangeFactor(_), this.rescale(slience)) : super.rangeFactor();\n }\n rangeFactorStart(_, slience) {\n return isNil(_) ? super.rangeFactorStart() : (super.rangeFactorStart(_), this.rescale(slience, \"rangeFactorStart\"));\n }\n rangeFactorEnd(_, slience) {\n return isNil(_) ? super.rangeFactorEnd() : (super.rangeFactorEnd(_), this.rescale(slience, \"rangeFactorEnd\"));\n }\n bandwidth(_, slience) {\n return _ ? (\"auto\" === _ ? (this._bandwidth = void 0, this._isFixed = !1) : (this._bandwidth = _, \n this._isFixed = !0), this._userBandwidth = _, this.rescale(slience)) : this._bandwidth;\n }\n maxBandwidth(_, slience) {\n return _ ? (this._maxBandwidth = \"auto\" === _ ? void 0 : _, this.rescale(slience)) : this._maxBandwidth;\n }\n minBandwidth(_, slience) {\n return _ ? (this._minBandwidth = \"auto\" === _ ? void 0 : _, this.rescale(slience)) : this._minBandwidth;\n }\n fishEye(options, slience, clear) {\n return options || clear ? (this._fishEyeOptions = options, this._fishEyeTransform = null, \n this.rescale(slience)) : this._fishEyeOptions;\n }\n isBandwidthFixed() {\n return this._isFixed && !!this._bandwidth;\n }\n _isBandwidthFixedByUser() {\n return this._isFixed && this._userBandwidth && isNumber(this._userBandwidth);\n }\n clone() {\n var _a, _b, _c;\n return new BandScale(!0).domain(this._domain, !0).range(this._range, !0).round(this._round, !0).paddingInner(this._paddingInner, !0).paddingOuter(this._paddingOuter, !0).align(this._align, !0).bandwidth(null !== (_a = this._userBandwidth) && void 0 !== _a ? _a : \"auto\", !0).maxBandwidth(null !== (_b = this._maxBandwidth) && void 0 !== _b ? _b : \"auto\", !0).minBandwidth(null !== (_c = this._maxBandwidth) && void 0 !== _c ? _c : \"auto\");\n }\n}","import { isNil, isValidNumber, bisect } from '@visactor/vutils';\nimport type { DiscretizingScaleType, IBaseScale } from './interface';\nimport { ScaleEnum } from './type';\n\nexport class ThresholdScale implements IBaseScale {\n readonly type: DiscretizingScaleType = ScaleEnum.Threshold;\n\n protected _range: any[] = [0, 1];\n protected _domain: number[] = [0.5];\n protected n: number = 1;\n\n protected _unknown: any;\n\n unknown(): any[];\n unknown(_: any): this;\n unknown(_?: any): this | any {\n if (!arguments.length) {\n return this._unknown;\n }\n this._unknown = _;\n return this;\n }\n\n scale(x: any) {\n return !isNil(x) && isValidNumber(+x) ? this._range[bisect(this._domain, x, 0, this.n)] : this._unknown;\n }\n\n invertExtent(y: any) {\n const i = this._range.indexOf(y);\n return [this._domain[i - 1], this._domain[i]];\n }\n\n domain(): any[];\n domain(_: any[]): this;\n domain(_?: any[]): this | any {\n if (!_) {\n return this._domain.slice();\n }\n this._domain = Array.from(_);\n this.n = Math.min(this._domain.length, this._range.length - 1);\n return this;\n }\n\n range(): any[];\n range(_: any[]): this;\n range(_?: any[]): this | any {\n if (!_) {\n return this._range.slice();\n }\n this._range = Array.from(_);\n this.n = Math.min(this._domain.length, this._range.length - 1);\n\n return this;\n }\n\n clone(): ThresholdScale {\n return new ThresholdScale().domain(this._domain).range(this._range).unknown(this._unknown);\n }\n}\n","import { OrdinalScale } from '@visactor/vscale';\nimport type { ColorSchemeItem, ProgressiveDataScheme } from '../theme/color-scheme/interface';\nimport { computeActualDataScheme, isProgressiveDataColorScheme } from '../theme/color-scheme/util';\n\n/** vchart 色板 ordinal scale 类型 */\nexport class ColorOrdinalScale extends OrdinalScale {\n /** range(可能为渐进式色板) */\n protected _range: Array | ProgressiveDataScheme;\n\n range(value?: Array | ProgressiveDataScheme): this | any {\n if (!value) {\n return super.range();\n }\n this._range = value;\n this._resetRange();\n return this;\n }\n\n /** domain */\n domain(value?: any[]): this | any {\n if (!value) {\n return super.domain();\n }\n super.domain(value);\n this._resetRange();\n return this;\n }\n\n /** 重新计算色板 */\n protected _resetRange() {\n if (!isProgressiveDataColorScheme(this._range)) {\n super.range(this._range);\n return;\n }\n const range = computeActualDataScheme(this._range, this._domain);\n super.range(range);\n }\n}\n","/**\n * @description Scale 相关的工具函数\n */\nimport { isString, isValid } from '@visactor/vutils';\nimport type { DataView } from '@visactor/vdataset';\nimport type { IGlobalScale } from '../scale/interface';\nimport { type IBaseScale, BandScale, LinearScale, OrdinalScale, PointScale, ThresholdScale } from '@visactor/vscale';\nimport type { IVisual, IVisualSpecBase } from '../typings/visual';\nimport { ColorOrdinalScale } from '../scale/color-ordinal-scale';\n\nconst defaultScaleMap = {\n linear: LinearScale,\n band: BandScale,\n point: PointScale,\n ordinal: OrdinalScale,\n threshold: ThresholdScale,\n colorOrdinal: ColorOrdinalScale\n};\n\nexport function createScale(type: keyof typeof defaultScaleMap): IBaseScale | null {\n const scaleConstructor = defaultScaleMap[type];\n if (scaleConstructor) {\n return new scaleConstructor();\n }\n\n return null;\n}\n\nexport function createScaleWithSpec(\n spec: IVisual,\n context: {\n globalScale: IGlobalScale;\n seriesId: number;\n }\n): IBaseScale | null {\n if ('scale' in spec && spec.scale) {\n if (isString(spec.scale) && context?.globalScale) {\n return context.globalScale.registerMarkAttributeScale(spec, context.seriesId);\n }\n return spec.scale as unknown as IBaseScale;\n }\n const scale = createScale((spec as IVisualSpecBase).type);\n if (scale) {\n initScaleWithSpec(scale, spec as IVisualSpecBase);\n }\n return scale;\n}\n\n// 需要一个通用的从spec初始化scale的方法,避免在scale属性更新后需要维护多组逻辑\nfunction initScaleWithSpec(scale: IBaseScale, spec: IVisualSpecBase) {\n if (!scale || !spec) {\n return;\n }\n\n if (spec.domain) {\n scale.domain(spec.domain);\n }\n\n if (spec.range) {\n scale.range(spec.range);\n }\n\n if (spec.specified && (scale).specified) {\n (scale).specified(spec.specified);\n }\n}\n\nexport function valueInScaleRange(v: number, s?: IBaseScale) {\n if (!s) {\n return v;\n }\n const range = s.range();\n const min = Math.min(range[0], range[range.length - 1]);\n const max = Math.max(range[0], range[range.length - 1]);\n return Math.min(Math.max(min, v), max);\n}\n\nexport function isSpecValueWithScale(specValue: any) {\n return isValid(specValue?.field) && isValid(specValue?.scale);\n}\n","import { ScaleEnum } from './type';\nimport { BandScale } from './band-scale';\nimport type { DiscreteScaleType, IBandLikeScale } from './interface';\n\nexport class PointScale extends BandScale implements IBandLikeScale {\n readonly type: DiscreteScaleType = ScaleEnum.Point;\n protected _padding = 0;\n\n constructor(slience?: boolean) {\n super(false);\n this.paddingInner(1, slience);\n this.padding = this.paddingOuter;\n this.paddingInner = undefined;\n this.paddingOuter = undefined;\n }\n}\n","import { MarkTypeEnum } from '../interface/type';\n\nexport const MultiDatumMark = [MarkTypeEnum.line, MarkTypeEnum.area, 'trail'];\n\nexport function isMultiDatumMark(type: MarkTypeEnum) {\n return MultiDatumMark.includes(type);\n}\n","import type { IElement, IMark as IVGrammarMark } from '@visactor/vgrammar-core';\nimport { isContinuous } from '@visactor/vscale';\nimport { isArray, isObject, isValid, isBoolean } from '@visactor/vutils';\nimport { PREFIX } from '../../constant';\nimport type { MarkTypeEnum } from '../../mark/interface';\nimport { isMultiDatumMark } from '../../mark/utils/common';\nimport type { Datum, StringOrNumber } from '../../typings';\nimport type { IStateManagerOption } from '../signal/interface';\nimport { StateManager } from '../signal/state-manager';\nimport type { CompilableMark } from './compilable-mark';\nimport type { IStateInfo, StateValue } from './interface';\nimport { stateInDefaultEnum } from './util';\n\n/** mark state 管理器 */\nexport class MarkStateManager extends StateManager {\n /** 相关 mark */\n protected _mark: CompilableMark;\n\n // state info:state 种类信息\n private _stateInfoList: IStateInfo[] = [];\n getStateInfoList() {\n return this._stateInfoList;\n }\n\n constructor(option: IStateManagerOption, mark: CompilableMark) {\n super(option);\n this._mark = mark;\n }\n\n protected _getDefaultStateMap(): Record {\n return {\n markUpdateRank: 1\n };\n }\n\n // /** 触发状态更新 */\n // update() {\n // if (this._mark.hasState('stateUpdateRank')) {\n // const rank = this._mark.getState('stateUpdateRank');\n // this._mark.updateState({ stateUpdateRank: rank + 1 });\n // }\n // }\n\n /** 通过 state value 获取 state 信息 */\n getStateInfo(stateValue: StateValue) {\n return this._stateInfoList.find(s => s.stateValue === stateValue);\n }\n\n /** 添加 state info */\n addStateInfo(stateInfo: IStateInfo) {\n if (this.getStateInfo(stateInfo.stateValue)) {\n return;\n }\n stateInfo.level = stateInfo.level || 0;\n\n let needPush = true;\n // 根据 level 大小进行插入,level 最大的插在最后面\n for (let i = 0; i < this._stateInfoList.length; i++) {\n const level = this._stateInfoList[i].level;\n if (level && level > stateInfo.level) {\n this._stateInfoList.splice(i, 0, stateInfo);\n needPush = false;\n break;\n }\n }\n\n if (needPush) {\n this._stateInfoList.push(stateInfo);\n }\n }\n\n /** 设置新状态时,将旧的筛选清除,避免同时存在2种筛选,第二种筛选会不触发 */\n private _clearStateBeforeSet(state: IStateInfo) {\n state.datums = null;\n state.items = null;\n state.fields = null;\n state.filter = null;\n }\n\n /** 更新 state info */\n changeStateInfo(stateInfo: Partial) {\n const s = this.getStateInfo(stateInfo.stateValue);\n if (!s) {\n this.addStateInfo(stateInfo as IStateInfo);\n } else {\n if (stateInfo.datums !== undefined) {\n this._clearStateBeforeSet(s);\n s.datums = stateInfo.datums;\n s.datumKeys = stateInfo.datumKeys;\n }\n if (stateInfo.items !== undefined) {\n this._clearStateBeforeSet(s);\n s.items = stateInfo.items;\n }\n if (stateInfo.fields !== undefined) {\n this._clearStateBeforeSet(s);\n // null\n if (stateInfo.fields === null) {\n s.fields = stateInfo.fields;\n } else {\n s.fields = s.fields || {};\n for (const key in stateInfo.fields) {\n const new_f = stateInfo.fields[key];\n s.fields[key] = s.fields[key] || ({} as any);\n const old_f = s.fields[key];\n isValid(new_f.domain) && (old_f.domain = new_f.domain);\n isValid(new_f.type) && (old_f.type = new_f.type);\n }\n }\n }\n if (stateInfo.filter) {\n this._clearStateBeforeSet(s);\n s.filter = stateInfo.filter;\n }\n }\n }\n\n /** 清除 state info */\n clearStateInfo(stateValues: StateValue[]) {\n stateValues.forEach(stateValue => {\n const state = this.getStateInfo(stateValue);\n if (state) {\n this.changeStateInfo({\n stateValue,\n datumKeys: null,\n datums: null,\n fields: null,\n items: null,\n filter: null,\n cache: {}\n });\n }\n });\n }\n\n checkOneState(\n renderNode: IElement,\n datum: Datum | Datum[],\n state: IStateInfo,\n isMultiMark?: boolean\n ): 'in' | 'out' | 'skip' {\n isMultiMark = isBoolean(isMultiDatumMark)\n ? isMultiMark\n : !renderNode.mark || isMultiDatumMark(renderNode.mark.markType as MarkTypeEnum);\n let inState = false;\n let stateChecked = false;\n // 如果有 state.datum 那么判断是否与datum的所有值相等\n if (isValid(state.datums) && state.datums.length > 0) {\n inState = this.checkDatumState(state, datum, isMultiMark);\n stateChecked = true;\n }\n // 依靠 scenegraph item 引用判断是否在状态中\n else if (state.items) {\n // TODO:确认这个逻辑里为什么有mark比较\n // if (state.marks && !state.marks.includes(renderNode.mark)) {\n // continue;\n // }\n inState = this.checkItemsState(state, renderNode) ?? false;\n stateChecked = true;\n }\n // 每个状态依靠 fields 来判定数据是否在当前状态中\n else if (state.fields) {\n inState = this.checkFieldsState(state, datum, renderNode, isMultiMark);\n stateChecked = true;\n } else if (!inState && state.filter) {\n const options = {\n mark: this._mark,\n renderNode,\n type: renderNode.mark.markType\n };\n inState = state.filter(datum, options);\n stateChecked = true;\n }\n\n // 如果 state 所有字段都为空,此时不应当进入反状态\n if (!stateChecked) {\n return 'skip';\n }\n return inState ? 'in' : 'out';\n }\n\n // TODO:renderNode\n checkState(renderNode: IElement, datum: Datum | Datum[]): StateValue[] {\n // 由于存在多个 stateManager,需要额外返回 state 的优先级\n // 交互状态不要删除,并且交互状态优先级统一为10\n const result: [StateValue, number][] = renderNode\n .getStates()\n .filter(s => stateInDefaultEnum(s))\n .map(s => {\n return [s, 10];\n });\n const isMultiMark = !renderNode.mark || isMultiDatumMark(renderNode.mark.markType as MarkTypeEnum);\n // 优先级从高到低依次检索状态。\n for (let i = 0; i < this._stateInfoList.length; i++) {\n const state = this._stateInfoList[i];\n const inOut = this.checkOneState(renderNode, datum, state, isMultiMark);\n if (inOut === 'skip') {\n continue;\n }\n if (inOut === 'in') {\n result.push([state.stateValue, state.level]);\n }\n }\n // 这里直接返回字符串数组即可\n return result.map(res => res[0]);\n }\n\n checkDatumState(state: IStateInfo, datum: Datum | Datum[], isMultiMark: boolean): boolean {\n let inState = false;\n const datum_v = isMultiMark ? datum[0] : datum;\n if (isArray(state.datums)) {\n const keys = state.datumKeys || Object.keys(state.datums[0]).filter(k => !k.startsWith(PREFIX));\n inState = state.datums.some(d => {\n // 如果 多数据图元情况下 datums 设置为 单一数据,状态判定失败\n // 这里要考虑 state.datum 本身是一条数据,不含item的情况能与单数据图元统一\n return isMultiMark && isArray(d?.items)\n ? keys.every(k => d?.items?.[0]?.[k] === datum_v?.[k])\n : keys.every(k => d?.[k] === datum_v?.[k]);\n });\n } else if (isObject(state.datums)) {\n const keys = state.datumKeys || Object.keys(state.datums).filter(k => !k.startsWith(PREFIX));\n inState = keys.every(k => {\n return isMultiMark ? (state.datums as any).items?.[0][k] === datum_v[k] : state.datums?.[k] === datum_v[k];\n });\n } else {\n inState = datum === state.datums;\n }\n return inState;\n }\n\n checkItemsState(state: IStateInfo, item: any): boolean | undefined {\n return state.items?.includes(item);\n }\n\n checkFieldsState(state: IStateInfo, datum: Datum | Datum[], item: any, isMultiMark: boolean): boolean {\n let inState = true;\n // each fields\n for (const key in state.fields) {\n const field = state.fields[key];\n const type = field.type;\n const domain = field.domain;\n const datum_v = isMultiMark ? datum[0]?.[key] : datum[key];\n if (isContinuous(type) && domain.length > 1) {\n // 连续\n if (this.checkLinearFieldState(domain, key, datum, item, isMultiMark)) {\n inState = false;\n break;\n } else {\n inState = true;\n }\n } else if (domain.some((d: any) => d === datum_v)) {\n // 离散\n inState = true;\n } else {\n inState = false;\n break;\n }\n }\n return inState;\n }\n\n checkLinearFieldState(domain: StringOrNumber[], key: string, datum: any, item: any, isMultiMark: boolean) {\n const datum_v = isMultiMark ? datum[0]?.[key] : datum[key];\n return datum_v < domain[0] || datum_v > domain[domain.length - 1];\n }\n\n updateLayoutState(noRender?: boolean): Promise {\n (this._stateMap.markUpdateRank as number)++;\n return this.updateState({ markUpdateRank: this._stateMap.markUpdateRank }, noRender);\n }\n\n compileState(product: IVGrammarMark) {\n product.state({\n callback: (datum: any, element: any) => {\n return this.checkState(element, datum);\n }\n });\n }\n}\n","import type { DataView } from '@visactor/vdataset';\nimport type { IData as IVGrammarData } from '@visactor/vgrammar-core';\nimport { GrammarItem } from '../grammar-item';\nimport type { Maybe } from '../../typings';\nimport { isNil } from '../../util/type';\nimport type { ICompilableData } from './interface';\nimport type { GrammarItemInitOption } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarType } from '../interface/compilable-item';\n\nexport class CompilableData extends GrammarItem implements ICompilableData {\n readonly grammarType = GrammarType.data;\n protected declare _product: Maybe;\n declare getProduct: () => Maybe;\n\n /** 原始DataView */\n protected _data: Maybe = null;\n getDataView() {\n return this._data;\n }\n setDataView(d?: DataView) {\n this._data = d;\n }\n getLatestData() {\n return this._data?.latestData;\n }\n\n constructor(option: GrammarItemInitOption, dataView?: DataView) {\n super(option);\n this._data = dataView;\n }\n\n release() {\n super.release();\n this._data = null;\n }\n\n /** 更新数据并默认重新渲染 */\n updateData(noRender?: boolean) {\n const product = this.getProduct();\n const data = this.getLatestData();\n if (product && data) {\n product.values(data);\n if (!noRender) {\n // 将实际的 dataflow 推迟到下一次异步操作,以避免同步的数据更新内容被忽略\n return this.getCompiler().renderAsync();\n }\n }\n return Promise.resolve();\n }\n\n protected _compileProduct() {\n const data = this.getLatestData();\n if (isNil(data)) {\n return;\n }\n if (isNil(this.getProduct())) {\n this._initProduct(data);\n } else {\n this._product.values(data);\n }\n }\n\n /** 创建语法元素对象 */\n protected _initProduct(data: any[]) {\n const view = this.getVGrammarView();\n if (!view || !data) {\n return;\n }\n\n const id = this.getProductId();\n this._product = view.data(data).id(id);\n this._compiledProductId = id;\n }\n\n generateProductId(): string {\n return `${this.getDataView()?.name}`;\n }\n\n protected _lookupGrammar(id: string) {\n return this.getCompiler().getVGrammarView()?.getDataById?.(id);\n }\n}\n","import { CompilableData } from '../data/compilable-data';\nimport { PREFIX } from '../../constant';\nimport { isNil, isValid } from '@visactor/vutils';\nimport type { ICompilableMark, IMarkDataInitOption } from './interface';\n\nexport class MarkData extends CompilableData {\n protected _mark: ICompilableMark;\n\n constructor(option: IMarkDataInitOption) {\n super(option);\n this._mark = option.mark;\n }\n\n setCompiledProductId(name: string) {\n this._compiledProductId = name;\n }\n\n generateProductId(): string {\n const name = super.generateProductId();\n if (isValid(name)) {\n return name;\n }\n return `${PREFIX}_markData_${this._mark.id}`;\n }\n\n protected _compileProduct() {\n const data = this._data?.latestData;\n if (isNil(data) || isValid(this.getProduct())) {\n return;\n }\n\n this._initProduct(data);\n }\n}\n","import type {\n IElement,\n IGroupMark,\n IMark,\n IMarkConfig,\n MarkAnimationSpec,\n MarkFunctionCallback,\n MarkFunctionType,\n Nil,\n TransformSpec\n} from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { GrammarMarkType } from '@visactor/vgrammar-core';\nimport type { DataView } from '@visactor/vdataset';\nimport { GrammarItem } from '../grammar-item';\nimport type { Maybe, Datum, StringOrNumber } from '../../typings';\nimport { array, isNil, isValid } from '@visactor/vutils';\nimport { LayoutZIndex, PREFIX, VGRAMMAR_HOOK_EVENT } from '../../constant';\nimport type { IMarkProgressiveConfig, IMarkStateStyle, MarkType } from '../../mark/interface';\nimport type { IModel } from '../../model/interface';\nimport type { ISeries } from '../../series/interface';\nimport { isStateAttrChangeable } from './util';\nimport { MarkStateManager } from './mark-state-manager';\nimport type {\n ICompilableMark,\n IMarkDataInitOption,\n ICompilableMarkOption,\n StateValueType,\n IMarkCompileOption,\n IAttributeOpt\n} from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { STATE_VALUE_ENUM } from './interface';\nimport { MarkData } from './mark-data';\nimport { GrammarType } from '../interface/compilable-item';\nimport type { IComponent } from '../../component/interface';\nimport type { IEvent } from '../../event/interface';\nimport { Event } from '../../event/event';\n// eslint-disable-next-line no-duplicate-imports\nimport { AnimationStateEnum } from '../../animation/interface';\nimport type { ICustomPath2D } from '@visactor/vrender-core';\n\n/** 可编译的 mark 对象,这个基类只存放编译相关的逻辑 */\nexport abstract class CompilableMark extends GrammarItem implements ICompilableMark {\n readonly grammarType = GrammarType.mark;\n /** 类型 */\n readonly type: MarkType = undefined as unknown as MarkType;\n\n /** name */\n readonly name: string = 'mark';\n\n /** key field */\n readonly key: ICompilableMark['key'];\n\n protected _skipTheme?: boolean;\n getSkipTheme() {\n return this._skipTheme;\n }\n setSkipTheme(skipTheme: boolean) {\n this._skipTheme = skipTheme;\n }\n\n /** 3d开关 */\n protected _support3d?: boolean;\n getSupport3d() {\n return this._support3d;\n }\n setSupport3d(support3d: boolean) {\n this._support3d = support3d;\n }\n\n /** 分片 */\n protected _facet?: string;\n getFacet() {\n return this._facet;\n }\n setFacet(facet: string) {\n this._facet = facet;\n }\n\n /** 交互开关 */\n protected _interactive: boolean = true;\n getInteractive() {\n return this._interactive;\n }\n setInteractive(interactive: boolean) {\n this._interactive = interactive;\n }\n\n /** 层级 */\n protected _zIndex: number = LayoutZIndex.Mark;\n getZIndex() {\n return this._zIndex;\n }\n setZIndex(zIndex: number) {\n this._zIndex = zIndex;\n }\n\n /** 可见性 */\n protected _visible: boolean = true;\n getVisible() {\n return this._visible;\n }\n setVisible(visible: boolean) {\n this._visible = visible;\n }\n\n /**\n * 用户设置的 id\n */\n protected _userId: StringOrNumber;\n getUserId() {\n return this._userId;\n }\n setUserId(userId: StringOrNumber) {\n if (isValid(userId)) {\n this._userId = userId;\n }\n }\n\n /** parent model */\n readonly model: IModel;\n\n /** 数据(可以没有) */\n protected _data: Maybe;\n getDataView(): DataView | undefined {\n return this._data?.getDataView();\n }\n setDataView(d?: DataView, productId?: string) {\n if (isNil(this._data)) {\n this.initMarkData({\n ...this._option,\n mark: this\n });\n }\n if (isValid(productId)) {\n this._data.setCompiledProductId(productId);\n }\n this._data.setDataView(d);\n }\n getData() {\n return this._data;\n }\n setData(d?: MarkData) {\n this._data = d;\n }\n\n /** 默认的stateStyle */\n stateStyle: IMarkStateStyle = {};\n\n /** 状态管理器 */\n state: MarkStateManager;\n\n protected _unCompileChannel: { [key in string]: boolean } = {};\n\n hasState(state: string) {\n return state in this.state.getStateMap();\n }\n getState(state: string) {\n return this.state.getStateMap()[state];\n }\n\n protected _event: IEvent;\n\n protected _animationConfig: Partial;\n getAnimationConfig() {\n return this._animationConfig;\n }\n setAnimationConfig(config: Partial) {\n this._animationConfig = config;\n }\n\n /** 布局标记 */\n private _skipBeforeLayouted = false;\n\n setSkipBeforeLayouted(skip: boolean) {\n this._skipBeforeLayouted = skip;\n }\n getSkipBeforeLayouted(): boolean {\n return this._skipBeforeLayouted;\n }\n\n /** morph动画关联关系配置 */\n protected _morph: boolean = false;\n getMorph() {\n return this._morph;\n }\n setMorph(morph: boolean) {\n this._morph = morph;\n }\n protected _morphKey?: string;\n getMorphKey() {\n return this._morphKey;\n }\n setMorphKey(morphKey: string) {\n this._morphKey = morphKey;\n }\n protected _morphElementKey?: string;\n getMorphElementKey() {\n return this._morphElementKey;\n }\n setMorphElementKey(key: string) {\n this._morphElementKey = key;\n }\n\n protected _groupKey?: string;\n getGroupKey() {\n return this._groupKey;\n }\n setGroupKey(groupKey: string) {\n this._groupKey = groupKey;\n }\n\n protected _progressiveConfig: IMarkProgressiveConfig;\n getProgressiveConfig() {\n return this._progressiveConfig;\n }\n setProgressiveConfig(config: IMarkProgressiveConfig) {\n this._progressiveConfig = config;\n }\n\n protected _setCustomizedShape?: (datum: any[], attrs: any, path: ICustomPath2D) => ICustomPath2D;\n setCustomizedShapeCallback(callback: (datum: any[], attrs: any, path: ICustomPath2D) => ICustomPath2D) {\n this._setCustomizedShape = callback;\n }\n\n protected _enableSegments: boolean;\n setEnableSegments(enable: boolean) {\n this._enableSegments = enable;\n }\n\n protected declare _option: ICompilableMarkOption;\n\n constructor(option: ICompilableMarkOption, name: string, model: IModel) {\n super(option);\n this.name = name;\n this.model = model;\n this.key = option.key;\n this.state = new MarkStateManager(\n {\n ...option,\n stateKeyToSignalName: this.stateKeyToSignalName.bind(this)\n },\n this\n );\n this._option.support3d && this.setSupport3d(true);\n this._option.skipTheme && this.setSkipTheme(true);\n this._event = new Event(model.getOption().eventDispatcher, model.getOption().mode);\n }\n\n protected declare _product: Maybe;\n declare getProduct: () => Maybe;\n\n // transform目前在形状词云中使用,但直接用的 vgrammar 接口 (this._wordMark as ICompilableMark).getProduct().transform(wordCloudTransforms);\n // 暂时没有用到这里的setTransform()\n protected _transform: TransformSpec[] | Nil;\n setTransform(transform: TransformSpec[] | Nil) {\n this._transform = transform;\n }\n\n /** 初始化 mark data */\n protected initMarkData(option: IMarkDataInitOption) {\n this._data = new MarkData(option);\n }\n\n protected stateKeyToSignalName(key: string) {\n return `${PREFIX}_${this.type}_${this.id}_${key}`;\n }\n\n getAttribute(key: any, datum: any, state: StateValueType, opt?: IAttributeOpt) {\n // do nothing\n }\n\n protected _compileProduct(option?: IMarkCompileOption) {\n const product = this.getProduct();\n // 处理 visible 为 false 的情况\n if (!this.getVisible()) {\n if (isValid(product)) {\n this.removeProduct();\n }\n return;\n } else if (isValid(product)) {\n return; // 每个mark只执行一次编译\n }\n\n const compiler = this.getCompiler();\n if (!compiler.isInited) {\n return;\n }\n this._initProduct(option?.group);\n if (isNil(this._product)) {\n return;\n }\n\n this.compileSignal();\n this.compileData();\n this.compileState();\n this.compileEncode();\n this.compileAnimation();\n this.compileContext();\n this.compileTransform();\n }\n\n /** 创建语法元素对象 */\n protected _initProduct(group?: string | IGroupMark) {\n const view = this.getVGrammarView();\n\n // 声明语法元素\n const id = this.getProductId();\n this._product = view.mark(this.type as GrammarMarkType, group ?? view.rootMark).id(id);\n this._compiledProductId = id;\n }\n\n generateProductId() {\n if (this._userId) {\n return `${this._userId}`;\n }\n return `${this.name}_${this.id}`;\n }\n\n compileData() {\n if (isNil(this._data)) {\n return;\n }\n this._data.compile();\n\n // 绑定数据\n const dataProduct = this._data.getProduct();\n if (isValid(this._product) && isValid(dataProduct)) {\n this._product.join(dataProduct, this.key, undefined, this._groupKey ?? this._facet);\n }\n }\n\n updateStaticEncode() {\n if (!this._product) {\n return;\n }\n const { enterStyles, updateStyles } = this._separateStyle();\n\n this._product.encodeState('group', enterStyles, true);\n\n this._product.encode(updateStyles, true);\n }\n\n protected _separateStyle() {\n const { [STATE_VALUE_ENUM.STATE_NORMAL]: normalStyle, ...temp } = this.stateStyle;\n\n const enterStyles: Record> = this._option.noSeparateStyle ? null : {};\n const updateStyles: Record> = {};\n Object.keys(normalStyle).forEach(key => {\n if (this._unCompileChannel[key]) {\n return;\n }\n\n if (this._option.noSeparateStyle || isStateAttrChangeable(key, normalStyle, this.getFacet())) {\n updateStyles[key] = {\n callback: this.compileCommonAttributeCallback(key, 'normal'),\n dependency: [this.stateKeyToSignalName('markUpdateRank')]\n };\n } else {\n enterStyles[key] = this.compileCommonAttributeCallback(key, 'normal');\n }\n });\n return { enterStyles, updateStyles };\n }\n\n compileEncode() {\n const { [STATE_VALUE_ENUM.STATE_NORMAL]: normalStyle, ...temp } = this.stateStyle;\n const { enterStyles, updateStyles } = this._separateStyle();\n this._product.encode(updateStyles, true);\n this._product.encodeState('group', enterStyles, true);\n\n Object.keys(temp).forEach(state => {\n const styles: Record> = {};\n Object.keys(temp[state]).forEach(key => {\n if (this._unCompileChannel[key]) {\n return;\n }\n styles[key] = {\n callback: this.compileCommonAttributeCallback(key, state),\n dependency: [this.stateKeyToSignalName('markUpdateRank')]\n };\n });\n this._product.encodeState(state, styles, true);\n });\n\n // 在布局完成前不进行encode\n if (this._skipBeforeLayouted) {\n this._product.layout({\n skipBeforeLayouted: this._skipBeforeLayouted\n });\n }\n }\n\n compileState() {\n this.state.compileState(this._product);\n }\n\n compileAnimation() {\n if (this._animationConfig) {\n let stateSignal: any;\n if (this.type === 'component') {\n // 组件有自己的动画状态\n stateSignal = (this.model as IComponent).animate?.getAnimationStateSignalName();\n } else {\n const region = (this.model as ISeries).getRegion();\n stateSignal = region.animate?.getAnimationStateSignalName();\n }\n this._product.animation(this._animationConfig);\n this._product.animationState({\n callback: (datum: Datum, element: IElement, parameters: Record) => {\n return parameters[stateSignal]?.callback(datum, element);\n },\n dependency: stateSignal\n });\n if (this._animationConfig.normal) {\n this._event.on(VGRAMMAR_HOOK_EVENT.ANIMATION_END, ({ event }) => {\n if (event.mark === this.getProduct() && event.animationState === AnimationStateEnum.appear) {\n this.runAnimationByState(AnimationStateEnum.normal);\n }\n });\n }\n }\n }\n\n compileContext() {\n const config: IMarkConfig = {\n interactive: this.getInteractive(),\n zIndex: this.getZIndex(),\n context: {\n markId: this.id,\n modelId: this.model.id,\n markUserId: this._userId,\n modelUserId: this.model.userId\n },\n skipTheme: this.getSkipTheme(),\n support3d: this.getSupport3d(),\n enableSegments: !!this._enableSegments\n };\n\n if (this._progressiveConfig) {\n config.progressiveStep = this._progressiveConfig.progressiveStep;\n config.progressiveThreshold = this._progressiveConfig.progressiveThreshold;\n config.large = this._progressiveConfig.large;\n config.largeThreshold = this._progressiveConfig.largeThreshold;\n }\n\n if (this._morph && this._morphKey) {\n config.morph = this._morph;\n config.morphKey = this._morphKey;\n config.morphElementKey = this._morphElementKey;\n }\n\n if (this._setCustomizedShape) {\n config.setCustomizedShape = this._setCustomizedShape;\n }\n\n this._product.configure(config);\n }\n\n compileSignal() {\n this.state.compile();\n }\n\n protected _computeAttribute(key: string, state: StateValueType) {\n return (datum: Datum, opt: IAttributeOpt) => {\n return undefined as any;\n };\n }\n\n // TODO: 1. opt内容待定,确实需要再来补充(之前是scale.bindScales/bindSignals,从context.params中可以获取到)\n // TODO: 2. stateSourceItem,是否根据attr区分,存在默认写死的情况,例如\"hover\"/\"normal\";\n protected compileCommonAttributeCallback(key: string, state: string): MarkFunctionCallback {\n const attributeFunctor = this._computeAttribute(key, state);\n // remove state in opt\n const opt: IAttributeOpt = { mark: null, parent: null, element: null };\n return (datum: Datum, element: IElement) => {\n opt.mark = element.mark;\n opt.parent = element.mark.group;\n opt.element = element;\n return attributeFunctor(datum, opt);\n };\n }\n\n protected compileTransform() {\n if (this._transform?.length) {\n this.getProduct().transform(this._transform);\n }\n }\n\n protected _lookupGrammar(id: string) {\n return this.getCompiler().getVGrammarView()?.getMarkById(id);\n }\n\n updateState(newState: Record, noRender?: boolean) {\n return this.state.updateState(newState, noRender);\n }\n\n updateLayoutState(noRender?: boolean, recursion?: boolean): Promise {\n if (recursion && this.getMarks().length > 0) {\n this.getMarks().forEach(m => m.state.updateLayoutState(true));\n }\n return this.state.updateLayoutState(noRender);\n }\n\n updateMarkState(key: string): void {\n if (!this._product) {\n return;\n }\n const stateInfo = this.state.getStateInfo(key);\n this._product.elements.forEach(e => {\n if (this.state.checkOneState(e, e.getDatum(), stateInfo) === 'in') {\n e.addState(key);\n } else {\n e.removeState(key);\n }\n });\n }\n\n getMarks(): ICompilableMark[] {\n return [];\n }\n\n runAnimationByState(state?: string) {\n return this.getProduct()?.animate?.runAnimationByState(state);\n }\n\n stopAnimationByState(state?: string) {\n return this.getProduct()?.animate?.stopAnimationByState(state);\n }\n\n pauseAnimationByState(state?: string) {\n return this.getProduct()?.animate?.pauseAnimationByState(state);\n }\n\n resumeAnimationByState(state?: string) {\n return this.getProduct()?.animate?.resumeAnimationByState(state);\n }\n\n release() {\n super.release();\n this.state.release();\n }\n}\n","import type { IStateInfo, IAttributeOpt, IModelMarkAttributeContext } from '../../compile/mark/interface';\nimport type { BaseSeries } from '../../series/base/base-series';\nimport type {\n Datum,\n IMarkSpec,\n ConvertToMarkStyleSpec,\n GradientStop,\n IVisual,\n IVisualScale,\n IVisualSpecStyle,\n ICommonSpec,\n FunctionType\n} from '../../typings';\n\nimport { mergeSpec } from '../../util/spec/merge-spec';\nimport { Color } from '../../util/color';\nimport { createScaleWithSpec } from '../../util/scale';\nimport type {\n IMarkRaw,\n IMarkStateStyle,\n IMarkStyle,\n IMark,\n IMarkOption,\n StyleConvert,\n VisualScaleType,\n MarkInputStyle\n} from '../interface';\nimport { AttributeLevel, GradientType, DEFAULT_GRADIENT_CONFIG } from '../../constant';\nimport { isValidScaleType } from '@visactor/vscale';\nimport type { DataView } from '@visactor/vdataset';\nimport { computeActualDataScheme, getDataScheme } from '../../theme/color-scheme/util';\nimport type { ISeries } from '../../series/interface';\nimport { CompilableMark } from '../../compile/mark/compilable-mark';\nimport type { StateValueType } from '../../compile/mark';\nimport { degreeToRadian, isBoolean, isFunction, isNil, isValid, isNumber } from '@visactor/vutils';\n\nexport type ExChannelCall = (\n key: string | number | symbol,\n datum: Datum,\n states: StateValueType,\n opt: unknown,\n baseValue: unknown\n) => unknown;\n\nexport class BaseMark extends CompilableMark implements IMarkRaw {\n declare stateStyle: IMarkStateStyle;\n\n protected declare _option: IMarkOption;\n\n protected _attributeContext: IModelMarkAttributeContext;\n\n /** by _unCompileChannel, some channel need add default channel to make sure update available */\n _extensionChannel: {\n [key: string | number | symbol]: string[];\n } = {};\n /** same as _extensionChannel. when compute channel, add extension channel effect */\n _computeExChannel: {\n [key: string | number | symbol]: ExChannelCall;\n } = {};\n\n constructor(name: string, option: IMarkOption) {\n super(option, name, option.model);\n // 这里的上下文多数情况下与 mark 是什么是没有关系的,与mark的使用者,也就是series,component有的逻辑有关。\n this._attributeContext = option.attributeContext;\n option.map?.set(this.id, this as unknown as IMark);\n }\n\n created(): void {\n this._initStyle();\n }\n\n /**\n * 外部调用,根据 spec 初始化 style(如果由 IModel 派生类调用,请使用 IModel.initMarkStyleWithSpec)\n * @param spec\n * @param key\n * @returns\n */\n initStyleWithSpec(spec: IMarkSpec, key?: string) {\n if (!spec) {\n return;\n }\n\n if (isValid(spec.id)) {\n this._userId = spec.id;\n }\n\n // interactive\n if (isBoolean(spec.interactive)) {\n this._interactive = spec.interactive;\n }\n // zIndex\n if (isValid(spec.zIndex)) {\n this.setZIndex(spec.zIndex);\n }\n // visible\n if (isBoolean(spec.visible)) {\n this.setVisible(spec.visible);\n }\n // style\n this._initSpecStyle(spec, this.stateStyle, key);\n }\n\n convertAngleToRadian(styleConverter: StyleConvert): StyleConvert {\n // 用户传入的angle配置,需要做一层转换\n if (isNumber(styleConverter)) {\n return degreeToRadian(styleConverter) as StyleConvert;\n } else if ((styleConverter as VisualScaleType).scale) {\n const range = (styleConverter as VisualScaleType).scale.range();\n\n (styleConverter as VisualScaleType).scale.range(range.map(degreeToRadian));\n\n return styleConverter as StyleConvert;\n } else if (typeof styleConverter === 'function') {\n return ((item: any, ctx: any, opt: IAttributeOpt, source?: DataView) => {\n return degreeToRadian((styleConverter as FunctionType)(item, ctx, opt, source));\n }) as StyleConvert;\n }\n\n return styleConverter;\n }\n\n isUserLevel(level: number) {\n return [AttributeLevel.User_Mark, AttributeLevel.User_Series, AttributeLevel.User_Chart].includes(level);\n }\n\n /**\n * 由外部series调用,设置markStyle的接口(如果由 IModel 派生类调用,请使用 IModel.setMarkStyle)\n * @param style\n * @param level\n * @param state\n */\n setStyle(\n style: Partial>,\n state: StateValueType = 'normal',\n level: number = 0,\n stateStyle = this.stateStyle\n ): void {\n if (isNil(style)) {\n return;\n }\n style = this._filterStyle(style, state, level, stateStyle);\n\n if (stateStyle[state] === undefined) {\n stateStyle[state] = {};\n }\n\n const isUserLevel = this.isUserLevel(level);\n\n Object.keys(style).forEach((attr: string) => {\n let attrStyle = style[attr] as MarkInputStyle;\n if (isNil(attrStyle)) {\n return;\n }\n\n attrStyle = this._filterAttribute(attr as any, attrStyle, state, level, isUserLevel, stateStyle);\n\n this.setAttribute(attr as any, attrStyle, state, level, stateStyle);\n });\n }\n\n getStyle(key: string, state: StateValueType = 'normal'): any {\n return this.stateStyle[state][key]?.style;\n }\n\n /** 过滤用户传来的 style 对象 */\n protected _filterStyle(\n style: Partial>,\n state: StateValueType,\n level: number,\n stateStyle = this.stateStyle\n ): Partial> {\n return style;\n }\n\n /** 过滤单个 attribute */\n protected _filterAttribute(\n attr: U,\n style: MarkInputStyle,\n state: StateValueType,\n level: number,\n isUserLevel: boolean,\n stateStyle = this.stateStyle\n ): StyleConvert {\n let newStyle = this._styleConvert(style);\n if (isUserLevel && attr === 'angle') {\n newStyle = this.convertAngleToRadian(newStyle as StyleConvert);\n }\n return newStyle;\n }\n\n /**\n * TODO: 没有外部调用\n * 设置mark样式所参考的图元\n */\n setReferer(mark: IMarkRaw, styleKey?: U, state?: StateValueType, stateStyle = this.stateStyle) {\n if (!mark) {\n return;\n }\n if (styleKey && state) {\n const style = stateStyle[state] ?? { [styleKey]: {} };\n stateStyle[state][styleKey] = {\n ...(style[styleKey] as unknown as any),\n ...{ referer: mark }\n };\n return;\n }\n\n Object.entries(stateStyle).forEach(([state, style]) => {\n Object.entries(style).forEach(([styleKey, style]) => {\n stateStyle[state][styleKey].referer = mark;\n });\n });\n }\n\n setPostProcess(key: U, postProcessFunc: any, state: StateValueType = 'normal') {\n if (this.stateStyle[state]?.[key]) {\n this.stateStyle[state][key].postProcess = postProcessFunc;\n }\n }\n\n getAttribute(key: U, datum: Datum, state: StateValueType = 'normal', opt?: IAttributeOpt) {\n return this._computeAttribute(key, state)(datum, opt);\n }\n\n setAttribute(\n attr: U,\n style: MarkInputStyle,\n state: StateValueType = 'normal',\n level: number = 0,\n stateStyle = this.stateStyle\n ) {\n if (stateStyle[state] === undefined) {\n stateStyle[state] = {};\n }\n\n if (stateStyle[state][attr] === undefined) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n stateStyle[state][attr] = {\n level,\n style,\n referer: undefined\n };\n }\n const attrLevel = stateStyle[state][attr]?.level;\n if (isValid(attrLevel) && attrLevel <= level) {\n mergeSpec(stateStyle[state][attr], { style, level });\n }\n\n // some attr has extension channel in VChart to make some effect\n if (state !== 'normal') {\n if (attr in this._extensionChannel) {\n this._extensionChannel[attr].forEach(key => {\n if (stateStyle[state][key] === undefined) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n stateStyle[state][key as keyof T] = stateStyle.normal[key];\n }\n });\n }\n }\n }\n\n /**\n * 与 vgrammar 默认值一致的样式可以不设置默认值或设置为undefined, 减少encode属性\n */\n protected _getDefaultStyle() {\n return {\n visible: true,\n // mark的层级应该在mark层 不在encode属性层\n // zIndex: LayoutZIndex.Mark,\n x: 0,\n y: 0\n } as IMarkStyle;\n }\n\n // /**\n // * 获取该 mark 不支持的图形属性,由子类覆写\n // * @returns\n // */\n // protected getIgnoreAttributes(): string[] {\n // return [];\n // }\n\n protected _styleConvert(style?: MarkInputStyle): StyleConvert | undefined {\n if (!style) {\n return style as undefined;\n }\n // visual spec 转换为 scale 类型的mark style\n if (isValidScaleType((style as IVisualSpecStyle).type) || (style as IVisualScale).scale) {\n // const _style = style as IVisual;\n const scale = createScaleWithSpec(style as IVisual, {\n globalScale: this._option.globalScale,\n seriesId: this._option.seriesId\n });\n if (scale) {\n return {\n scale,\n field: (style as IVisual).field,\n changeDomain: (style as IVisualScale).changeDomain\n };\n }\n }\n return style as StyleConvert;\n }\n\n protected _computeAttribute(key: U, state: StateValueType) {\n let stateStyle = this.stateStyle[state]?.[key];\n if (!stateStyle) {\n stateStyle = this.stateStyle.normal[key];\n }\n const baseValueFunctor = this._computeStateAttribute(stateStyle, key, state);\n const hasPostProcess = isFunction(stateStyle?.postProcess);\n const hasExCompute = key in this._computeExChannel;\n\n if (hasPostProcess && hasExCompute) {\n const exCompute = this._computeExChannel[key];\n return (datum: Datum, opt: IAttributeOpt) => {\n let baseValue = baseValueFunctor(datum, opt);\n\n baseValue = stateStyle.postProcess(baseValue, datum, this._attributeContext, opt, this.getDataView());\n\n return exCompute(key, datum, state, opt, baseValue);\n };\n } else if (hasPostProcess) {\n return (datum: Datum, opt: IAttributeOpt) => {\n return stateStyle.postProcess(\n baseValueFunctor(datum, opt),\n datum,\n this._attributeContext,\n opt,\n this.getDataView()\n );\n };\n } else if (hasExCompute) {\n const exCompute = this._computeExChannel[key];\n return (datum: Datum, opt: IAttributeOpt) => {\n return exCompute(key, datum, state, opt, baseValueFunctor(datum, opt));\n };\n }\n return baseValueFunctor;\n }\n\n protected _computeStateAttribute(stateStyle: any, key: U, state: StateValueType) {\n if (!stateStyle) {\n return (datum: Datum, opt: IAttributeOpt) => undefined as any;\n }\n if (stateStyle.referer) {\n return stateStyle.referer._computeAttribute(key, state);\n }\n\n if (typeof stateStyle.style === 'function') {\n return (datum: Datum, opt: IAttributeOpt) =>\n stateStyle.style(datum, this._attributeContext, opt, this.getDataView());\n }\n\n if (GradientType.includes(stateStyle.style.gradient)) {\n // 渐变色处理,支持各个属性回调\n return this._computeGradientAttr(stateStyle.style);\n }\n\n if (['outerBorder', 'innerBorder'].includes(key as string)) {\n // 内外描边处理,支持各个属性回调\n return this._computeBorderAttr(stateStyle.style);\n }\n\n if (isValidScaleType(stateStyle.style.scale?.type)) {\n return (datum: Datum, opt: IAttributeOpt) => stateStyle.style.scale.scale(datum[stateStyle.style.field]);\n }\n return (datum: Datum, opt: IAttributeOpt) => {\n return stateStyle.style;\n };\n }\n\n private _initStyle(): void {\n const defaultStyle = this._getDefaultStyle();\n this.setStyle(defaultStyle, 'normal', 0);\n }\n\n private _initSpecStyle(spec: IMarkSpec, stateStyle: IMarkStateStyle, key?: string) {\n // style\n if (spec.style) {\n this.setStyle(spec.style, 'normal', AttributeLevel.User_Mark, stateStyle);\n }\n const state = spec.state;\n if (state) {\n Object.keys(state).forEach(key => {\n const stateTemp = state[key];\n if ('style' in stateTemp) {\n const style = stateTemp.style;\n let stateInfo: IStateInfo = { stateValue: key };\n if ('level' in stateTemp) {\n stateInfo.level = stateTemp.level as number;\n }\n if ('filter' in stateTemp) {\n if (isFunction(stateTemp.filter)) {\n stateInfo = {\n filter: stateTemp.filter as (datum: any, options: Record) => boolean,\n ...stateInfo\n };\n } else {\n stateInfo = { ...stateTemp.filter, ...stateInfo };\n }\n }\n this.state.addStateInfo(stateInfo);\n this.setStyle(style as ConvertToMarkStyleSpec, key, AttributeLevel.User_Mark, stateStyle);\n } else {\n this.setStyle(stateTemp, key, AttributeLevel.User_Mark, stateStyle);\n }\n });\n }\n }\n\n private _computeGradientAttr(gradientStyle: any) {\n const { gradient, scale, field, ...rest } = gradientStyle;\n\n let colorScale = scale;\n let colorField = field;\n if ((!scale || !field) && this.model.modelType === 'series') {\n // 目前只有series有这个属性\n const { scale: globalColorScale, field: globalField } = (this.model as BaseSeries).getColorAttribute();\n if (!scale) {\n // 获取全局的 colorScale\n colorScale = globalColorScale;\n }\n if (!colorField) {\n colorField = globalField;\n }\n }\n\n const themeColor = computeActualDataScheme(\n getDataScheme(\n this.model.getColorScheme(),\n this.model.modelType === 'series' ? this.model.getSpec?.() : undefined\n ),\n (this.model as ISeries).getDefaultColorDomain()\n );\n // 默认配置处理\n const mergedStyle = {\n ...DEFAULT_GRADIENT_CONFIG[gradient],\n ...rest\n };\n return (data: Datum, opt: IAttributeOpt) => {\n const computeStyle: any = {};\n const markData = this.getDataView();\n Object.keys(mergedStyle).forEach(key => {\n const value = mergedStyle[key];\n if (key === 'stops') {\n computeStyle.stops = value.map((stop: GradientStop) => {\n const { opacity, color, offset } = stop;\n let computeColor = color ?? colorScale?.scale(data[colorField]);\n if (isFunction(color)) {\n computeColor = color(data, this._attributeContext, opt, markData);\n }\n\n if (isValid(opacity)) {\n computeColor = Color.SetOpacity(computeColor as string, opacity);\n }\n\n return {\n offset: isFunction(offset) ? offset(data, this._attributeContext, opt, markData) : offset,\n color: computeColor || themeColor[0]\n };\n });\n } else if (isFunction(value)) {\n computeStyle[key] = value(data, this._attributeContext, opt, markData);\n } else {\n computeStyle[key] = value;\n }\n });\n\n computeStyle.gradient = gradient;\n\n return computeStyle;\n };\n }\n\n private _computeBorderAttr(borderStyle: any) {\n const { scale, field, ...mergedStyle } = borderStyle;\n\n return (data: Datum, opt: IAttributeOpt) => {\n const computeStyle: any = {};\n\n Object.keys(mergedStyle).forEach(key => {\n const value = mergedStyle[key];\n if (isFunction(value)) {\n computeStyle[key] = value(data, this._attributeContext, opt, this.getDataView());\n } else {\n computeStyle[key] = value;\n }\n });\n if (!('stroke' in computeStyle)) {\n const themeColor = computeActualDataScheme(\n getDataScheme(\n this.model.getColorScheme(),\n this.model.modelType === 'series' ? this.model.getSpec?.() : undefined\n ),\n (this.model as ISeries).getDefaultColorDomain()\n );\n let colorScale = scale;\n let colorField = field;\n if ((!scale || !field) && this.model.modelType === 'series') {\n // 目前只有series有这个属性\n const { scale: globalColorScale, field: globalField } = (this.model as BaseSeries).getColorAttribute();\n if (!scale) {\n // 获取全局的 colorScale\n colorScale = globalColorScale;\n }\n if (!colorField) {\n colorField = globalField;\n }\n computeStyle.stroke = colorScale?.scale(data[colorField]) || themeColor[0];\n }\n } else if (GradientType.includes(mergedStyle.stroke?.gradient)) {\n computeStyle.stroke = this._computeGradientAttr(mergedStyle.stroke)(data, opt);\n }\n return computeStyle;\n };\n }\n}\n","import type { AABBBounds, Matrix } from '@visactor/vutils';\nimport type { GraphicType, IGraphic, IGroup } from '../interface';\nimport { Group } from './group';\n\nexport class ShadowRoot extends Group {\n type: GraphicType = 'shadowroot';\n declare shadowHost: IGraphic;\n\n constructor(graphic?: IGraphic) {\n super({ x: 0, y: 0 });\n this.shadowHost = graphic;\n }\n\n override addUpdateBoundTag() {\n super.addUpdateBoundTag();\n if (this.shadowHost) {\n this.shadowHost.addUpdateBoundTag();\n }\n }\n\n override addUpdateShapeAndBoundsTag() {\n super.addUpdateShapeAndBoundsTag();\n if (this.shadowHost) {\n this.shadowHost.addUpdateBoundTag();\n }\n }\n\n // 计算localMatrix不受影响\n // 计算globalMatrix需要用到shadowHost的globalMatrix\n protected tryUpdateGlobalTransMatrix(clearTag: boolean = true): Matrix {\n if (this.shouldUpdateGlobalMatrix()) {\n const m = this.transMatrix;\n if (!this._globalTransMatrix) {\n this._globalTransMatrix = m.clone();\n } else {\n this._globalTransMatrix.setValue(m.a, m.b, m.c, m.d, m.e, m.f);\n }\n this.doUpdateGlobalMatrix();\n clearTag && this.clearUpdateGlobalPositionTag();\n }\n return this._globalTransMatrix;\n }\n protected doUpdateGlobalMatrix() {\n if (this.shadowHost) {\n // 基于shadowHost的matrix修改\n const parentMatrix = this.shadowHost.globalTransMatrix;\n this._globalTransMatrix.multiply(\n parentMatrix.a,\n parentMatrix.b,\n parentMatrix.c,\n parentMatrix.d,\n parentMatrix.e,\n parentMatrix.f\n );\n }\n }\n // 计算AABBBounds不受影响\n // 计算globalAABBBounds\n protected tryUpdateGlobalAABBBounds(): AABBBounds {\n if (!this._globalAABBBounds) {\n this._globalAABBBounds = this._AABBBounds.clone();\n } else {\n this._globalAABBBounds.setValue(\n this._AABBBounds.x1,\n this._AABBBounds.y1,\n this._AABBBounds.x2,\n this._AABBBounds.y2\n );\n }\n // 使用shadowHost的grloalAABBBounds\n // todo: 考虑是否需要性能优化\n if (this.shadowHost) {\n this._globalAABBBounds.transformWithMatrix(this.shadowHost.globalTransMatrix);\n }\n return this._globalAABBBounds;\n }\n}\n\nexport function createShadowRoot(graphic?: IGraphic): IGroup {\n return new ShadowRoot(graphic);\n}\n","import { registerShadowRootGraphic } from '@visactor/vrender-core';\n\nfunction _registerShadowRoot() {\n if (_registerShadowRoot.__loaded) {\n return;\n }\n _registerShadowRoot.__loaded = true;\n registerShadowRootGraphic();\n}\n\n_registerShadowRoot.__loaded = false;\n\nexport const registerShadowRoot = _registerShadowRoot;\n","import type { AABBBounds, OBBBounds } from '@visactor/vutils';\nimport { pi2, sin, epsilon, abs, asin, clampAngleByRadian, isNumber, cos, sqrt } from '@visactor/vutils';\nimport type { IArc, IArcGraphicAttribute } from '../interface/graphic/arc';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { parsePadding } from '../common/utils';\nimport { getTheme } from './theme';\nimport { application } from '../application';\nimport type { GraphicType } from '../interface';\nimport { ARC_NUMBER_TYPE } from './constants';\n\n/**\n * 部分代码参考 https://github.com/d3/d3-shape/\n * Copyright 2010-2022 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n\nconst ARC_UPDATE_TAG_KEY = [\n 'innerRadius',\n 'outerRadius',\n 'startAngle',\n 'endAngle',\n 'cornerRadius',\n 'padAngle',\n 'padRadius',\n 'cap',\n ...GRAPHIC_UPDATE_TAG_KEY\n];\n\n/**\n * 圆形图元\n * 默认顺时针绘制\n */\nexport class Arc extends Graphic implements IArc {\n type: GraphicType = 'arc';\n\n static NOWORK_ANIMATE_ATTR = {\n cap: 1,\n ...NOWORK_ANIMATE_ATTR\n };\n\n // static parseCornerRadius(r: IArcGraphicAttribute['cornerRadius']) {\n // if (isArray(r)) {\n // if ((r as any[]).length === 1) {\n // const value = r[0];\n // return [value, value, value, value];\n // }\n\n // if ((r as any[]).length === 2) {\n // return [r[0], r[0], r[1], r[1]];\n // }\n\n // if ((r as any[]).length === 3) {\n // return [r[0], r[1], r[2], 0];\n // }\n\n // return (r as any[]).slice(0, 4);\n // }\n\n // return [r as string | number, r as string | number, r as string | number, r as string | number];\n // }\n\n // static isCornerRadiusEqual(oldR: IArcGraphicAttribute['cornerRadius'], newR: IArcGraphicAttribute['cornerRadius']) {\n // throw new Error('暂不支持');\n // if (oldR === newR) {\n // return true;\n // }\n\n // if (isArray(oldR) && !isArray(newR)) {\n // return (oldR as (string | number)[]).every(r => r === newR);\n // }\n\n // if (!isArray(oldR) && isArray(newR)) {\n // return (newR as (string | number)[]).every(r => r === oldR);\n // }\n\n // return arrayEqual(oldR as (string | number)[], newR as (string | number)[]);\n // }\n\n constructor(params: IArcGraphicAttribute) {\n super(params);\n this.numberType = ARC_NUMBER_TYPE;\n }\n\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n private _isValid(): boolean {\n const { startAngle, endAngle, outerRadius, innerRadius } = this.attribute;\n return (\n this._validNumber(startAngle) &&\n this._validNumber(endAngle) &&\n this._validNumber(outerRadius) &&\n this._validNumber(innerRadius)\n );\n }\n\n getParsedCornerRadius() {\n const arcTheme = getTheme(this).arc;\n const {\n cornerRadius = arcTheme.cornerRadius,\n outerRadius = arcTheme.outerRadius,\n innerRadius = arcTheme.innerRadius\n } = this.attribute;\n if (cornerRadius === 0 || cornerRadius === '0%') {\n return 0;\n }\n const deltaRadius = Math.abs(outerRadius - innerRadius);\n return Math.min(\n isNumber(cornerRadius, true)\n ? (cornerRadius as number)\n : (deltaRadius * parseFloat(cornerRadius as string)) / 100,\n deltaRadius / 2\n );\n }\n\n getParsedAngle() {\n const arcTheme = getTheme(this).arc;\n let { startAngle = arcTheme.startAngle, endAngle = arcTheme.endAngle } = this.attribute;\n const { cap = arcTheme.cap } = this.attribute;\n\n const sign = endAngle - startAngle >= 0 ? 1 : -1;\n const deltaAngle = endAngle - startAngle;\n\n startAngle = clampAngleByRadian(startAngle);\n endAngle = startAngle + deltaAngle;\n\n if (cap && abs(deltaAngle) < pi2 - epsilon) {\n let startCap = 1;\n let endCap = 1;\n if ((cap as boolean[]).length) {\n startCap = Number(cap[0]);\n endCap = Number(cap[1]);\n }\n const { outerRadius = arcTheme.outerRadius, innerRadius = arcTheme.innerRadius } = this.attribute;\n const capWidth = Math.abs(outerRadius - innerRadius) / 2;\n // 以外边界长度为准\n const capAngle = capWidth / outerRadius;\n\n if (capWidth > epsilon && outerRadius > epsilon) {\n return {\n startAngle: startAngle - sign * capAngle * startCap,\n endAngle: endAngle + sign * capAngle * endCap,\n sc: sign * capAngle * startCap,\n ec: sign * capAngle * endCap\n };\n }\n }\n\n return {\n startAngle: startAngle,\n endAngle: endAngle\n };\n }\n\n // 参考 https://github.com/d3/d3-shape/blob/main/src/arc.js\n getParsePadAngle(startAngle: number, endAngle: number) {\n const arcTheme = getTheme(this).arc;\n const {\n outerRadius = arcTheme.outerRadius,\n innerRadius = arcTheme.innerRadius,\n padAngle = arcTheme.padAngle\n } = this.attribute;\n\n const { padRadius = sqrt(outerRadius * outerRadius + innerRadius * innerRadius) } = this.attribute;\n const deltaAngle = abs(endAngle - startAngle);\n\n // Or is it a circular or annular sector?\n let outerStartAngle = startAngle;\n let outerEndAngle = endAngle;\n let innerStartAngle = startAngle;\n let innerEndAngle = endAngle;\n const halfPadAngle = padAngle / 2;\n let innerDeltaAngle = deltaAngle;\n let outerDeltaAngle = deltaAngle;\n\n // Apply padding? Note that since r1 ≥ r0, outerDeltaAngle ≥ innerDeltaAngle.\n if (halfPadAngle > epsilon && padRadius > epsilon) {\n const sign = endAngle > startAngle ? 1 : -1;\n\n let p0 = asin((Number(padRadius) / innerRadius) * sin(halfPadAngle));\n let p1 = asin((Number(padRadius) / outerRadius) * sin(halfPadAngle));\n if ((innerDeltaAngle -= p0 * 2) > epsilon) {\n p0 *= sign;\n innerStartAngle += p0;\n innerEndAngle -= p0;\n } else {\n innerDeltaAngle = 0;\n innerStartAngle = innerEndAngle = (startAngle + endAngle) / 2;\n }\n if ((outerDeltaAngle -= p1 * 2) > epsilon) {\n p1 *= sign;\n outerStartAngle += p1;\n outerEndAngle -= p1;\n } else {\n outerDeltaAngle = 0;\n outerStartAngle = outerEndAngle = (startAngle + endAngle) / 2;\n }\n\n return {\n outerStartAngle,\n outerEndAngle,\n innerStartAngle,\n innerEndAngle,\n innerDeltaAngle,\n outerDeltaAngle\n };\n }\n\n return {\n outerStartAngle,\n outerEndAngle,\n innerStartAngle,\n innerEndAngle,\n innerDeltaAngle,\n outerDeltaAngle\n };\n }\n\n protected doUpdateAABBBounds(full?: boolean): AABBBounds {\n const arcTheme = getTheme(this).arc;\n this._AABBBounds.setValue(Infinity, Infinity, -Infinity, -Infinity);\n const attribute = this.attribute;\n const bounds = application.graphicService.updateArcAABBBounds(\n attribute,\n getTheme(this).arc,\n this._AABBBounds,\n full,\n this\n ) as AABBBounds;\n\n const { boundsPadding = arcTheme.boundsPadding } = attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray);\n }\n this.clearUpdateBoundTag();\n return bounds;\n }\n\n protected tryUpdateOBBBounds(): OBBBounds {\n throw new Error('暂不支持');\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, ARC_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, ARC_UPDATE_TAG_KEY);\n }\n\n getDefaultAttribute(name: string) {\n const arcTheme = getTheme(this).arc;\n return arcTheme[name];\n }\n\n toCustomPath() {\n const x = 0;\n const y = 0;\n\n const attribute = this.attribute;\n const { startAngle, endAngle } = this.getParsedAngle();\n let innerRadius = attribute.innerRadius;\n let outerRadius = attribute.outerRadius;\n const deltaAngle = abs(endAngle - startAngle);\n const clockwise: boolean = endAngle > startAngle;\n\n if (outerRadius < innerRadius) {\n const temp = outerRadius;\n outerRadius = innerRadius;\n innerRadius = temp;\n }\n\n const path = new CustomPath2D();\n\n if (outerRadius <= epsilon) {\n path.moveTo(x, y);\n } else if (deltaAngle >= pi2 - epsilon) {\n // 是个完整的圆环\n // Or is it a circle or annulus?\n path.moveTo(x + outerRadius * cos(startAngle), y + outerRadius * sin(startAngle));\n path.arc(x, y, outerRadius, startAngle, endAngle, !clockwise);\n if (innerRadius > epsilon) {\n path.moveTo(x + innerRadius * cos(endAngle), y + innerRadius * sin(endAngle));\n path.arc(x, y, innerRadius, endAngle, startAngle, clockwise);\n }\n } else {\n const xors = outerRadius * cos(startAngle);\n const yors = outerRadius * sin(startAngle);\n const xire = innerRadius * cos(endAngle);\n const yire = innerRadius * sin(endAngle);\n\n path.moveTo(x + xors, y + yors);\n path.arc(x, y, outerRadius, startAngle, endAngle, !clockwise);\n path.lineTo(x + xire, y + yire);\n path.arc(x, y, innerRadius, endAngle, startAngle, clockwise);\n path.closePath();\n }\n\n return path;\n }\n\n clone() {\n return new Arc({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record {\n return Arc.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createArc(attributes: IArcGraphicAttribute): IArc {\n return new Arc(attributes);\n}\n\n// addAttributeToPrototype(DefaultCircleStyle, Circle, PURE_STYLE_KEY);\n","interface Threshold {\n CLEAN_THRESHOLD?: number;\n L_TIME?: number;\n R_COUNT?: number;\n R_TIMESTAMP_MAX_SIZE?: number;\n}\n// LRU清除\nexport class LRU {\n private CLEAN_THRESHOLD = 1e3;\n private L_TIME = 1000; // 1000ms以内\n private R_COUNT = 1; // 使用次数为0\n private R_TIMESTAMP_MAX_SIZE = 20; // timestamp最大长度\n\n clearCache(cache: Map, params: Threshold): number {\n const { CLEAN_THRESHOLD = this.CLEAN_THRESHOLD, L_TIME = this.L_TIME, R_COUNT = this.R_COUNT } = params;\n if (cache.size < CLEAN_THRESHOLD) {\n return 0;\n }\n // 开始清理,清理最近1000ms内使用次数为0的缓存\n let clearNum = 0;\n const clear = (key: TK) => {\n clearNum++;\n cache.delete(key);\n };\n const now = Date.now();\n cache.forEach((item, key) => {\n if (item.timestamp.length < R_COUNT) {\n return clear(key);\n } // 最近使用次数小于R_COUNT,清除\n let useCount = 0;\n while (now - item.timestamp[item.timestamp.length - 1 - useCount] < L_TIME) {\n useCount++;\n if (useCount >= R_COUNT) {\n break;\n }\n }\n if (useCount < R_COUNT) {\n return clear(key);\n } // 最近L_TIME以内使用次数小于R_COUNT,清除\n // 清除L_TIME以外的key,避免数组过长\n while (now - item.timestamp[0] > L_TIME) {\n item.timestamp.shift();\n }\n return;\n });\n return clearNum;\n }\n\n addLimitedTimestamp(cacheItem: T, t: number, params: Threshold) {\n const { R_TIMESTAMP_MAX_SIZE = this.R_TIMESTAMP_MAX_SIZE } = params;\n if (cacheItem.timestamp.length > R_TIMESTAMP_MAX_SIZE) {\n // cacheItem.timestamp[cacheItem.timestamp.length-1] =\n cacheItem.timestamp.shift();\n }\n cacheItem.timestamp.push(t);\n }\n\n clearTimeStamp(cache: Map, params: Threshold) {\n const { L_TIME = this.L_TIME } = params;\n const now = Date.now();\n cache.forEach(item => {\n while (now - item.timestamp[0] > L_TIME) {\n item.timestamp.shift();\n }\n });\n }\n\n clearItemTimestamp(cacheItem: T, params: Threshold) {\n const { L_TIME = this.L_TIME } = params;\n const now = Date.now();\n while (now - cacheItem.timestamp[0] > L_TIME) {\n cacheItem.timestamp.shift();\n }\n }\n}\n","/**\n * 环形渐变部分源码借鉴https://github.com/parksben/create-conical-gradient/blob/master/LICENSE\n * MIT License\n\n * Copyright (c) 2020 parksben\n\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nimport { pi2, LRU } from '@visactor/vutils';\nimport { application } from '../application';\nimport type { IConicalGradient, IContext2d } from '../interface';\nimport { interpolateColor } from '../color-string';\n\nclass ConicalCanvas {\n static canvas: HTMLCanvasElement;\n static ctx: CanvasRenderingContext2D | null;\n\n static GetCanvas() {\n try {\n if (!ConicalCanvas.canvas) {\n ConicalCanvas.canvas = application.global.createCanvas({});\n }\n return ConicalCanvas.canvas;\n } catch (err) {\n return null;\n }\n }\n\n static GetCtx() {\n if (!ConicalCanvas.ctx) {\n const conicalCanvas = ConicalCanvas.GetCanvas();\n ConicalCanvas.ctx = conicalCanvas.getContext('2d');\n }\n return ConicalCanvas.ctx;\n }\n}\n\n// todo 目前环形渐变缓存还是依赖于x和y,后续优化环形渐变\nexport class ColorInterpolate extends LRU {\n private readonly rgbaSet: Uint8ClampedArray;\n private cacheParams: {\n CLEAN_THRESHOLD?: number;\n L_TIME?: number;\n R_COUNT?: number;\n R_TIMESTAMP_MAX_SIZE?: number;\n } = { CLEAN_THRESHOLD: 100, L_TIME: 1e3 };\n static _instance: ColorInterpolate;\n\n static getInstance() {\n if (!ColorInterpolate._instance) {\n ColorInterpolate._instance = new ColorInterpolate();\n }\n return ColorInterpolate._instance;\n }\n\n constructor(stops: [number, string][] = [], precision = 100) {\n super();\n const canvas = ConicalCanvas.GetCanvas();\n const conicalCtx = ConicalCanvas.GetCtx();\n canvas.width = precision;\n canvas.height = 1;\n if (!conicalCtx) {\n return;\n }\n conicalCtx.translate(0, 0);\n if (!conicalCtx) {\n throw new Error('获取ctx发生错误');\n }\n\n const gradient = conicalCtx.createLinearGradient(0, 0, precision, 0);\n stops.forEach(stop => {\n gradient.addColorStop(stop[0], stop[1]);\n });\n\n conicalCtx.fillStyle = gradient;\n conicalCtx.fillRect(0, 0, precision, 1);\n\n this.rgbaSet = conicalCtx.getImageData(0, 0, precision, 1).data;\n }\n\n getColor(offset: number): string {\n const rgba = this.rgbaSet.slice(4 * offset, 4 * offset + 4);\n return `rgba(${rgba[0]}, ${rgba[1]}, ${rgba[2]}, ${rgba[3] / 255})`;\n }\n\n dataMap: Map = new Map();\n // static lastCache: {\n // stops: [number, string][],\n // precision: number,\n // colorInter: ColorInterpolate,\n // step: number,\n // stepNum: number,\n // r: number,\n // lineWidth: number,\n // } | null = null;\n\n GetOrCreate(x: number, y: number, w: number, h: number, stops: [number, string][] = [], precision = 100) {\n let str = `${x}${y}${w}${h}`;\n stops.forEach(item => (str += item.join()));\n str += precision;\n let colorInter = this.dataMap.get(str);\n if (!colorInter) {\n const data = new ColorInterpolate(stops, precision);\n colorInter = { data, timestamp: [] };\n this.addLimitedTimestamp(colorInter, Date.now(), {});\n this.dataMap.set(str, colorInter);\n }\n this.clearCache(this.dataMap, this.cacheParams);\n return colorInter.data;\n }\n}\n\nclass ConicalPatternStore {\n private static cache: {\n [key: string]: {\n width: number;\n height: number;\n pattern: CanvasPattern;\n }[];\n } = {};\n private static ImageSize = [20, 40, 80, 160, 320, 640, 1280, 2560];\n\n static GetSize(minSize: number): number {\n for (let i = 0; i < ConicalPatternStore.ImageSize.length; i++) {\n if (ConicalPatternStore.ImageSize[i] >= minSize) {\n return ConicalPatternStore.ImageSize[i];\n }\n }\n return minSize;\n }\n\n static Get(\n stops: Array<[number, string]>,\n x: number,\n y: number,\n startAngle: number,\n endAngle: number,\n w: number,\n h: number\n ): CanvasPattern | null {\n const key = ConicalPatternStore.GenKey(stops, x, y, startAngle, endAngle);\n const data = ConicalPatternStore.cache[key];\n if (!data || data.length === 0) {\n return null;\n }\n for (let i = 0; i < data.length; i++) {\n if (data[i].width >= w && data[i].height >= h) {\n return data[i].pattern;\n }\n }\n return null;\n }\n\n static Set(\n stops: Array<[number, string]>,\n x: number,\n y: number,\n startAngle: number,\n endAngle: number,\n pattern: CanvasPattern,\n w: number,\n h: number\n ) {\n const key = ConicalPatternStore.GenKey(stops, x, y, startAngle, endAngle);\n // 必然是顺序的,因为如果能get到的话就不需要set\n if (!ConicalPatternStore.cache[key]) {\n ConicalPatternStore.cache[key] = [\n {\n width: w,\n height: h,\n pattern\n }\n ];\n } else {\n ConicalPatternStore.cache[key].push({\n width: w,\n height: h,\n pattern\n });\n }\n }\n\n static GenKey(stops: Array<[number, string]>, x: number, y: number, startAngle: number, endAngle: number): string {\n return `${x},${y},${startAngle},${endAngle},${stops.join()}`;\n }\n}\n\nexport function getConicGradientAt(x: number, y: number, angle: number, color: IConicalGradient) {\n const { stops, startAngle, endAngle } = color;\n\n while (angle < 0) {\n angle += pi2;\n }\n while (angle > pi2) {\n angle -= pi2;\n }\n\n if (angle < startAngle) {\n return stops[0].color;\n }\n if (angle > endAngle) {\n return stops[0].color;\n }\n let percent = (angle - startAngle) / (endAngle - startAngle);\n let startStop: any;\n let endStop: any;\n for (let i = 0; i < stops.length; i++) {\n if (stops[i].offset >= percent) {\n startStop = stops[i - 1];\n endStop = stops[i];\n break;\n }\n }\n percent = (percent - startStop.offset) / (endStop.offset - startStop.offset);\n return interpolateColor(startStop.color, endStop.color, percent, false);\n}\n\n/**\n * 环形渐变效果\n * @param context\n * @param stops\n * @param x\n * @param y\n * @param deltaAngle 用于细分出颜色插值数组[start,,,,,,end, (没有用到的颜色)]\n * @param startAngle 实际开始的angle\n * @param endAngle 实际结束的angle\n * @param minW\n * @param minH\n * @returns\n */\nexport function createConicalGradient(\n context: IContext2d,\n stops: Array<[number, string]>,\n x: number,\n y: number,\n deltaAngle: number,\n startAngle: number,\n endAngle: number,\n minW: number,\n minH: number\n): null | CanvasPattern {\n const deltaDeg = Math.floor((deltaAngle * 180) / Math.PI);\n\n const conicalCanvas = ConicalCanvas.GetCanvas();\n const conicalCtx = ConicalCanvas.GetCtx();\n\n if (!conicalCtx) {\n return null;\n }\n const width = ConicalPatternStore.GetSize(minW);\n const height = ConicalPatternStore.GetSize(minH);\n let pattern = ConicalPatternStore.Get(stops, x, y, startAngle, endAngle, width, height);\n if (pattern) {\n return pattern;\n }\n\n const r = Math.sqrt(\n Math.max(\n Math.max(Math.pow(x, 2) + Math.pow(y, 2), Math.pow(width - x, 2) + Math.pow(y, 2)),\n Math.max(Math.pow(width - x, 2) + Math.pow(height - y, 2), Math.pow(x, 2) + Math.pow(height - y, 2))\n )\n );\n // 每一度一个三角形\n const stepNum = deltaDeg + 1;\n const step = deltaAngle / Math.max(1, stepNum - 1);\n const colorInter = ColorInterpolate.getInstance().GetOrCreate(x, y, width, height, stops, stepNum);\n\n const lineWidth = (2 * Math.PI * r) / 360;\n\n conicalCanvas.width = width;\n conicalCanvas.height = height;\n conicalCtx.setTransform(1, 0, 0, 1, 0, 0);\n conicalCtx.clearRect(0, 0, width, height);\n conicalCtx.translate(x, y);\n conicalCtx.rotate(startAngle);\n for (let i = 0, len = stepNum - 1; i < len; i++) {\n if (startAngle + i * step > endAngle) {\n break;\n }\n const color = colorInter.getColor(i);\n conicalCtx.beginPath();\n conicalCtx.rotate(step);\n conicalCtx.moveTo(0, 0);\n conicalCtx.lineTo(r, -2 * lineWidth);\n conicalCtx.lineTo(r, 0);\n conicalCtx.fillStyle = color;\n conicalCtx.closePath();\n conicalCtx.fill();\n }\n\n const imageData = conicalCtx.getImageData(0, 0, width, height);\n\n conicalCanvas.width = imageData.width;\n conicalCanvas.height = imageData.height;\n conicalCtx.putImageData(imageData, 0, 0);\n pattern = context.createPattern(conicalCanvas, 'no-repeat');\n pattern && ConicalPatternStore.Set(stops, x, y, startAngle, endAngle, pattern, width, height);\n return pattern;\n}\n","import type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IArc,\n IArcGraphicAttribute,\n IThemeAttribute,\n IArcRenderContribution,\n IDrawContext\n} from '../../../../interface';\nimport { getScaledStroke } from '../../../../common/canvas-utils';\nimport { defaultBaseBackgroundRenderContribution } from './base-contribution-render';\nimport { drawArcPath } from '../utils';\nimport { BaseRenderContributionTime } from '../../../../common/enums';\nimport { defaultBaseTextureRenderContribution } from './base-texture-contribution-render';\n\nexport class DefaultArcRenderContribution implements IArcRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n arc: IArc,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n arcAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const { outerBorder, innerBorder } = arc.attribute;\n const doOuterBorder = outerBorder && outerBorder.visible !== false;\n const doInnerBorder = innerBorder && innerBorder.visible !== false;\n if (!(doOuterBorder || doInnerBorder)) {\n return;\n }\n const {\n innerRadius = arcAttribute.innerRadius,\n outerRadius = arcAttribute.outerRadius,\n startAngle = arcAttribute.startAngle,\n endAngle = arcAttribute.endAngle,\n opacity = arcAttribute.opacity,\n x: originX = arcAttribute.x,\n y: originY = arcAttribute.y,\n scaleX = arcAttribute.scaleX,\n scaleY = arcAttribute.scaleY\n } = arc.attribute;\n const doStrokeOuter = !!(outerBorder && outerBorder.stroke);\n const doStrokeInner = !!(innerBorder && innerBorder.stroke);\n\n if (doOuterBorder) {\n const { distance = arcAttribute.outerBorder.distance } = outerBorder;\n const d = getScaledStroke(context, distance as number, context.dpr);\n const deltaAngle = (distance as number) / outerRadius;\n arc.setAttributes({\n outerRadius: outerRadius + d,\n innerRadius: innerRadius - d,\n startAngle: startAngle - deltaAngle,\n endAngle: endAngle + deltaAngle\n } as any);\n context.beginPath();\n drawArcPath(arc, context, x, y, outerRadius + d, innerRadius - d);\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(arc, arc.attribute, arcAttribute);\n\n if (strokeCb) {\n strokeCb(context, outerBorder, arcAttribute.outerBorder);\n } else if (doStrokeOuter) {\n // 存在stroke\n const lastOpacity = (arcAttribute.outerBorder as any).opacity;\n (arcAttribute.outerBorder as any).opacity = opacity;\n context.setStrokeStyle(\n arc,\n outerBorder,\n (originX - x) / scaleX,\n (originY - y) / scaleY,\n arcAttribute.outerBorder as any\n );\n (arcAttribute.outerBorder as any).opacity = lastOpacity;\n context.stroke();\n }\n }\n\n if (doInnerBorder) {\n const { distance = arcAttribute.innerBorder.distance } = innerBorder;\n const d = getScaledStroke(context, distance as number, context.dpr);\n const deltaAngle = (distance as number) / outerRadius;\n arc.setAttributes({\n outerRadius: outerRadius - d,\n innerRadius: innerRadius + d,\n startAngle: startAngle + deltaAngle,\n endAngle: endAngle - deltaAngle\n } as any);\n context.beginPath();\n drawArcPath(arc, context, x, y, outerRadius - d, innerRadius + d);\n // arc.setAttributes({ outerRadius: outerRadius, innerRadius: innerRadius });\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(arc, arc.attribute, arcAttribute);\n\n if (strokeCb) {\n strokeCb(context, innerBorder, arcAttribute.innerBorder);\n } else if (doStrokeInner) {\n // 存在stroke\n const lastOpacity = (arcAttribute.innerBorder as any).opacity;\n (arcAttribute.innerBorder as any).opacity = opacity;\n context.setStrokeStyle(\n arc,\n innerBorder,\n (originX - x) / scaleX,\n (originY - y) / scaleY,\n arcAttribute.innerBorder as any\n );\n (arcAttribute.innerBorder as any).opacity = lastOpacity;\n context.stroke();\n }\n }\n\n arc.setAttributes({ outerRadius: outerRadius, innerRadius: innerRadius, startAngle, endAngle } as any);\n }\n}\n\nexport const defaultArcRenderContribution = new DefaultArcRenderContribution();\nexport const defaultArcTextureRenderContribution = defaultBaseTextureRenderContribution;\nexport const defaultArcBackgroundRenderContribution = defaultBaseBackgroundRenderContribution;\n","import { abs, acos, atan2, cos, epsilon, min, pi, sin, sqrt, pi2, isBoolean } from '@visactor/vutils';\nimport { inject, injectable, named } from '../../../common/inversify-lite';\nimport { getTheme } from '../../../graphic/theme';\nimport { parseStroke } from '../../../common/utils';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport type {\n IContext2d,\n IArc,\n IPath2D,\n IGraphicAttribute,\n IMarkAttribute,\n IThemeAttribute,\n IGradientColor,\n IArcRenderContribution,\n IDrawContext,\n IRenderService,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IContributionProvider,\n IConicalGradient\n} from '../../../interface';\nimport {\n cornerTangents,\n drawArcPath,\n drawPathProxy,\n fillVisible,\n intersect,\n runFill,\n runStroke,\n strokeVisible\n} from './utils';\nimport { getConicGradientAt } from '../../../canvas/conical-gradient';\nimport { ArcRenderContribution } from './contributions/constants';\nimport { BaseRenderContributionTime } from '../../../common/enums';\nimport { ARC_NUMBER_TYPE } from '../../../graphic/constants';\nimport { BaseRender } from './base-render';\nimport {\n defaultArcBackgroundRenderContribution,\n defaultArcRenderContribution,\n defaultArcTextureRenderContribution\n} from './contributions';\n/**\n * 部分源码参考 https://github.com/d3/d3-shape/\n * Copyright 2010-2022 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n\n@injectable()\nexport class DefaultCanvasArcRender extends BaseRender implements IGraphicRender {\n type: 'arc';\n numberType: number = ARC_NUMBER_TYPE;\n\n constructor(\n @inject(ContributionProvider)\n @named(ArcRenderContribution)\n protected readonly arcRenderContribitions: IContributionProvider\n ) {\n super();\n this.builtinContributions = [\n defaultArcRenderContribution,\n defaultArcBackgroundRenderContribution,\n defaultArcTextureRenderContribution\n ];\n this.init(arcRenderContribitions);\n }\n\n // 绘制尾部cap\n drawArcTailCapPath(\n arc: IArc,\n context: IContext2d | IPath2D,\n cx: number,\n cy: number,\n outerRadius: number,\n innerRadius: number,\n _sa: number,\n _ea: number\n ) {\n const capAngle = _ea - _sa;\n const data = arc.getParsedAngle();\n const startAngle = data.startAngle;\n let endAngle = data.endAngle;\n endAngle = _ea;\n const deltaAngle = abs(endAngle - startAngle);\n const clockwise: boolean = endAngle > startAngle;\n let collapsedToLine: boolean = false;\n // 规范化outerRadius和innerRadius\n if (outerRadius < innerRadius) {\n const temp = outerRadius;\n outerRadius = innerRadius;\n innerRadius = temp;\n }\n\n const cornerRadius = arc.getParsedCornerRadius();\n // Or is it a circular or annular sector?\n const { outerDeltaAngle, innerDeltaAngle, outerStartAngle, outerEndAngle, innerEndAngle, innerStartAngle } =\n arc.getParsePadAngle(startAngle, endAngle);\n\n const outerCornerRadiusStart = cornerRadius;\n const outerCornerRadiusEnd = cornerRadius;\n const innerCornerRadiusEnd = cornerRadius;\n const innerCornerRadiusStart = cornerRadius;\n const maxOuterCornerRadius = Math.max(outerCornerRadiusEnd, outerCornerRadiusStart);\n const maxInnerCornerRadius = Math.max(innerCornerRadiusEnd, innerCornerRadiusStart);\n let limitedOcr = maxOuterCornerRadius;\n let limitedIcr = maxInnerCornerRadius;\n\n const xors = outerRadius * cos(outerStartAngle);\n const yors = outerRadius * sin(outerStartAngle);\n const xire = innerRadius * cos(innerEndAngle);\n const yire = innerRadius * sin(innerEndAngle);\n\n // Apply rounded corners?\n let xore: number;\n let yore: number;\n let xirs: number;\n let yirs: number;\n\n if (maxInnerCornerRadius > epsilon || maxOuterCornerRadius > epsilon) {\n xore = outerRadius * cos(outerEndAngle);\n yore = outerRadius * sin(outerEndAngle);\n xirs = innerRadius * cos(innerStartAngle);\n yirs = innerRadius * sin(innerStartAngle);\n\n // Restrict the corner radius according to the sector angle.\n if (deltaAngle < pi) {\n const oc = intersect(xors, yors, xirs, yirs, xore, yore, xire, yire);\n\n if (oc) {\n const ax = xors - oc[0];\n const ay = yors - oc[1];\n const bx = xore - oc[0];\n const by = yore - oc[1];\n const kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2);\n const lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n\n limitedIcr = min(maxInnerCornerRadius, (innerRadius - lc) / (kc - 1));\n limitedOcr = min(maxOuterCornerRadius, (outerRadius - lc) / (kc + 1));\n }\n }\n }\n\n if (limitedOcr > epsilon) {\n const cornerRadiusStart = min(outerCornerRadiusStart, limitedOcr);\n const cornerRadiusEnd = min(outerCornerRadiusEnd, limitedOcr);\n // Does the sector’s outer ring have rounded corners?\n const t0 = cornerTangents(xirs, yirs, xors, yors, outerRadius, cornerRadiusStart, Number(clockwise));\n const t1 = cornerTangents(xore, yore, xire, yire, outerRadius, cornerRadiusEnd, Number(clockwise));\n\n // Have the corners merged?\n if (limitedOcr < maxOuterCornerRadius && cornerRadiusStart === cornerRadiusEnd) {\n context.moveTo(cx + t0.cx + t0.x01, cy + t0.cy + t0.y01);\n context.arc(cx + t0.cx, cy + t0.cy, limitedOcr, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !clockwise);\n } else {\n const a1 = endAngle - capAngle - 0.03;\n const a2 = atan2(t1.y11, t1.x11);\n context.arc(cx, cy, outerRadius, a1, a2, !clockwise);\n cornerRadiusEnd > 0 &&\n context.arc(\n cx + t1.cx,\n cy + t1.cy,\n cornerRadiusEnd,\n atan2(t1.y11, t1.x11),\n atan2(t1.y01, t1.x01),\n !clockwise\n );\n }\n } else {\n context.moveTo(cx + xors, cy + yors);\n }\n // else {\n // // Or is the outer ring just a circular arc?\n // if (!partStroke || partStroke[0]) {\n // context.moveTo(cx + xors, cy + yors);\n // context.arc(cx, cy, outerRadius, outerStartAngle, outerEndAngle, !clockwise);\n // } else {\n // // context.moveTo(cx + outerRadius * cos(outerEndAngle), cy + yore);\n // }\n // }\n // // Is there no inner ring, and it’s a circular sector?\n // // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(innerRadius > epsilon) || innerDeltaAngle < 0.001) {\n context.lineTo(cx + xire, cy + yire);\n collapsedToLine = true;\n } else if (limitedIcr > epsilon) {\n const cornerRadiusStart = min(innerCornerRadiusStart, limitedIcr);\n const cornerRadiusEnd = min(innerCornerRadiusEnd, limitedIcr);\n // Does the sector’s inner ring (or point) have rounded corners?\n const t0 = cornerTangents(xire, yire, xore, yore, innerRadius, -cornerRadiusEnd, Number(clockwise));\n const t1 = cornerTangents(xors, yors, xirs, yirs, innerRadius, -cornerRadiusStart, Number(clockwise));\n\n context.lineTo(cx + t0.cx + t0.x01, cy + t0.cy + t0.y01);\n\n // Have the corners merged?\n if (limitedIcr < maxInnerCornerRadius && cornerRadiusStart === cornerRadiusEnd) {\n const arcEndAngle = atan2(t1.y01, t1.x01);\n context.arc(cx + t0.cx, cy + t0.cy, limitedIcr, atan2(t0.y01, t0.x01), arcEndAngle, !clockwise);\n } else {\n cornerRadiusEnd > 0 &&\n context.arc(\n cx + t0.cx,\n cy + t0.cy,\n cornerRadiusEnd,\n atan2(t0.y01, t0.x01),\n atan2(t0.y11, t0.x11),\n !clockwise\n );\n const a1 = atan2(t0.cy + t0.y11, t0.cx + t0.x11);\n const a2 = endAngle - capAngle - 0.03;\n context.arc(cx, cy, innerRadius, a1, a2, clockwise);\n }\n } else {\n context.lineTo(cx + innerRadius * cos(innerStartAngle), cy + innerRadius * sin(innerStartAngle));\n }\n\n return collapsedToLine;\n }\n\n drawShape(\n arc: IArc,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // const arcAttribute = graphicService.themeService.getCurrentTheme().arcAttribute;\n const arcAttribute = getTheme(arc, params?.theme).arc;\n const {\n fill = arcAttribute.fill,\n stroke = arcAttribute.stroke,\n x: originX = arcAttribute.x,\n y: originY = arcAttribute.y\n } = arc.attribute;\n const data = this.valid(arc, arcAttribute, fillCb, strokeCb);\n if (!data) {\n return;\n }\n const { fVisible, sVisible, doFill, doStroke } = data;\n\n const {\n outerRadius = arcAttribute.outerRadius,\n innerRadius = arcAttribute.innerRadius,\n cap = arcAttribute.cap,\n forceShowCap = arcAttribute.forceShowCap\n } = arc.attribute;\n // 判断是否是环形渐变,且有头部cap,那就偏移渐变色角度\n let conicalOffset = 0;\n const tempChangeConicalColor =\n ((isBoolean(cap) && cap) || cap[0]) && (fill as IGradientColor).gradient === 'conical';\n if (tempChangeConicalColor) {\n const { sc, startAngle, endAngle } = arc.getParsedAngle();\n if (abs(endAngle - startAngle) < pi2 - epsilon) {\n conicalOffset = sc || 0;\n (fill as IConicalGradient).startAngle -= conicalOffset;\n (fill as IConicalGradient).endAngle -= conicalOffset;\n }\n }\n\n let beforeRenderContribitionsRuned = false;\n const { isFullStroke, stroke: arrayStroke } = parseStroke(stroke);\n if (doFill || isFullStroke) {\n context.beginPath();\n // if (arc.shouldUpdateShape()) {\n // // 更新shape\n // arc.cache = new Path2D(context);\n // this.drawArcPath(arc, arc.cache, x, y, outerRadius, innerRadius);\n // arc.clearUpdateShapeTag();\n // } else {\n // if (arc.cache) {\n // renderCommandList(arc.cache.commandList, context);\n // }\n // }\n // 测试后,cache对于重绘性能提升不大,但是在首屏有一定性能损耗,因此arc不再使用cache\n drawArcPath(arc, context, x, y, outerRadius, innerRadius);\n\n beforeRenderContribitionsRuned = true;\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(arc, arc.attribute, arcAttribute);\n this.beforeRenderStep(\n arc,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n arcAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n\n if (doFill) {\n if (fillCb) {\n fillCb(context, arc.attribute, arcAttribute);\n } else if (fVisible) {\n context.setCommonStyle(arc, arc.attribute, originX - x, originY - y, arcAttribute);\n context.fill();\n }\n }\n\n if (doStroke && isFullStroke) {\n if (strokeCb) {\n strokeCb(context, arc.attribute, arcAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(arc, arc.attribute, originX - x, originY - y, arcAttribute);\n context.stroke();\n }\n }\n }\n\n // 需要局部渲染描边的时候\n if (!isFullStroke && doStroke) {\n context.beginPath();\n const collapsedToLine = drawArcPath(arc, context, x, y, outerRadius, innerRadius, arrayStroke);\n\n if (!beforeRenderContribitionsRuned) {\n this.beforeRenderStep(\n arc,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n arcAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n\n if (strokeCb) {\n strokeCb(context, arc.attribute, arcAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(arc, arc.attribute, x, y, arcAttribute);\n context.stroke();\n }\n }\n\n // 绘制cap\n if (((isBoolean(cap) && cap) || cap[1]) && forceShowCap) {\n const { startAngle: sa, endAngle: ea } = arc.getParsedAngle();\n const deltaAngle = abs(ea - sa);\n if (deltaAngle >= pi2 - epsilon) {\n context.beginPath();\n const capWidth = Math.abs(outerRadius - innerRadius) / 2;\n // 以外边界长度为准\n const capAngle = capWidth / outerRadius;\n const { endAngle = arcAttribute.endAngle, fill = arcAttribute.fill } = arc.attribute;\n const startAngle = endAngle;\n this.drawArcTailCapPath(arc, context, x, y, outerRadius, innerRadius, startAngle, startAngle + capAngle);\n\n if (!beforeRenderContribitionsRuned) {\n this.beforeRenderStep(\n arc,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n arcAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n\n if (doFill) {\n // 获取渐变色最后一个颜色\n const color = fill;\n if ((color as IGradientColor).gradient === 'conical') {\n const lastColor = getConicGradientAt(0, 0, endAngle, color as any);\n if (fillCb) {\n // fillCb(context, arc.attribute, arcAttribute);\n } else if (fillVisible) {\n // context.closePath();\n context.setCommonStyle(arc, arc.attribute, x, y, arcAttribute);\n context.fillStyle = lastColor as string;\n context.fill();\n }\n }\n }\n if (doStroke) {\n if (strokeCb) {\n // fillCb(context, arc.attribute, arcAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(arc, arc.attribute, x, y, arcAttribute);\n // context.strokeStyle = 'red';\n context.stroke();\n }\n }\n }\n }\n\n this.afterRenderStep(\n arc,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n arcAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n\n if (tempChangeConicalColor) {\n (fill as IConicalGradient).startAngle += conicalOffset;\n (fill as IConicalGradient).endAngle += conicalOffset;\n }\n }\n\n draw(arc: IArc, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const arcAttribute = getTheme(arc, params?.theme).arc;\n this._draw(arc, arcAttribute, false, drawContext, params);\n }\n}\n","import { bindContributionProvider } from '../../../common/contribution-provider';\nimport { ContainerModule } from '../../../common/inversify';\nimport { DefaultCanvasArcRender } from './arc-render';\nimport { DefaultBaseInteractiveRenderContribution } from './contributions';\nimport { ArcRenderContribution } from './contributions/constants';\nimport { ArcRender, GraphicRender } from './symbol';\n\nlet loadArcModule = false;\nexport const arcModule = new ContainerModule(bind => {\n if (loadArcModule) {\n return;\n }\n loadArcModule = true;\n // arc 渲染器\n bind(DefaultCanvasArcRender).toSelf().inSingletonScope();\n bind(ArcRender).to(DefaultCanvasArcRender).inSingletonScope();\n bind(GraphicRender).toService(ArcRender);\n bind(ArcRenderContribution).toService(DefaultBaseInteractiveRenderContribution);\n // arc 渲染器注入contributions\n bindContributionProvider(bind, ArcRenderContribution);\n});\n","import { inject, injectable, getTheme, ArcRender, getScaledStroke, ARC_NUMBER_TYPE } from '@visactor/vrender-core';\nimport type { IPoint } from '@visactor/vutils';\nimport type {\n IArc,\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IThemeAttribute,\n IGraphicPicker,\n IGraphicRender,\n IPickParams\n} from '@visactor/vrender-core';\n\n@injectable()\nexport class DefaultCanvasArcPicker implements IGraphicPicker {\n type: string = 'arc';\n numberType: number = ARC_NUMBER_TYPE;\n\n constructor(@inject(ArcRender) public readonly canvasRenderer: IGraphicRender) {}\n\n contains(arc: IArc, point: IPoint, params?: IPickParams): boolean {\n if (!arc.AABBBounds.containsPoint(point)) {\n return false;\n }\n if (arc.attribute.pickMode === 'imprecise') {\n return true;\n }\n\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n const arcAttribute = getTheme(arc).arc;\n\n // const arcAttribute = graphicService.themeService.getCurrentTheme().arcAttribute;\n\n pickContext.highPerformanceSave();\n let { x = arcAttribute.x, y = arcAttribute.y } = arc.attribute;\n if (!arc.transMatrix.onlyTranslate()) {\n // 性能较差\n x = 0;\n y = 0;\n pickContext.transformFromMatrix(arc.transMatrix, true);\n } else {\n const point = arc.getOffsetXY(arcAttribute);\n x += point.x;\n y += point.y;\n // 当前context有rotate/scale,重置matrix\n pickContext.setTransformForCurrent();\n }\n\n // 详细形状判断\n let picked = false;\n this.canvasRenderer.drawShape(\n arc,\n pickContext,\n x,\n y,\n {} as any,\n null,\n (\n context: IContext2d,\n arcAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n picked = context.isPointInPath(point.x, point.y);\n return picked;\n },\n (\n context: IContext2d,\n arcAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n const lineWidth = arcAttribute.lineWidth || themeAttribute.lineWidth;\n const pickStrokeBuffer = arcAttribute.pickStrokeBuffer || themeAttribute.pickStrokeBuffer;\n pickContext.lineWidth = getScaledStroke(pickContext, lineWidth + pickStrokeBuffer, pickContext.dpr);\n picked = context.isPointInStroke(point.x, point.y);\n return picked;\n }\n );\n\n pickContext.highPerformanceRestore();\n return picked;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { DefaultCanvasArcPicker } from './arc-picker';\nimport { CanvasArcPicker, CanvasPickerContribution } from '../constants';\n\nlet loadArcPick = false;\nexport const arcCanvasPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadArcPick) {\n return;\n }\n loadArcPick = true;\n bind(CanvasArcPicker).to(DefaultCanvasArcPicker).inSingletonScope();\n bind(CanvasPickerContribution).toService(CanvasArcPicker);\n});\n","import { inject, injectable, getTheme, ArcRender, ARC_NUMBER_TYPE } from '@visactor/vrender-core';\nimport type { IPoint } from '@visactor/vutils';\nimport type {\n IArc,\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IThemeAttribute,\n IGraphicPicker,\n IGraphicRender,\n IPickParams\n} from '@visactor/vrender-core';\n\n@injectable()\nexport class DefaultMathArcPicker implements IGraphicPicker {\n type: string = 'arc';\n numberType: number = ARC_NUMBER_TYPE;\n\n constructor(@inject(ArcRender) public readonly canvasRenderer: IGraphicRender) {}\n\n contains(arc: IArc, point: IPoint, params?: IPickParams): boolean {\n if (!arc.AABBBounds.containsPoint(point)) {\n return false;\n }\n if (arc.attribute.pickMode === 'imprecise') {\n return true;\n }\n\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n // const arcAttribute = graphicService.themeService.getCurrentTheme().arcAttribute;\n const arcAttribute = getTheme(arc).arc;\n pickContext.highPerformanceSave();\n let { x = arcAttribute.x, y = arcAttribute.y } = arc.attribute;\n if (!arc.transMatrix.onlyTranslate()) {\n // 性能较差\n x = 0;\n y = 0;\n pickContext.transformFromMatrix(arc.transMatrix, true);\n } else {\n const point = arc.getOffsetXY(arcAttribute);\n x += point.x;\n y += point.y;\n // 当前context有rotate/scale,重置matrix\n pickContext.setTransformForCurrent();\n }\n\n // 详细形状判断\n let picked = false;\n this.canvasRenderer.drawShape(\n arc,\n pickContext,\n x,\n y,\n {} as any,\n null,\n (\n context: IContext2d,\n arcAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n picked = context.isPointInPath(point.x, point.y);\n return picked;\n },\n (\n context: IContext2d,\n arcAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n const lineWidth = arcAttribute.lineWidth || themeAttribute.lineWidth;\n const pickStrokeBuffer = arcAttribute.pickStrokeBuffer || themeAttribute.pickStrokeBuffer;\n pickContext.lineWidth = lineWidth + pickStrokeBuffer;\n picked = context.isPointInStroke(point.x, point.y);\n return picked;\n }\n );\n\n pickContext.highPerformanceRestore();\n return picked;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { DefaultMathArcPicker } from './arc-picker';\nimport { MathArcPicker, MathPickerContribution } from '../constants';\n\nlet loadArcPick = false;\nexport const arcMathPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadArcPick) {\n return;\n }\n loadArcPick = true;\n // arc picker\n bind(MathArcPicker).to(DefaultMathArcPicker).inSingletonScope();\n bind(MathPickerContribution).toService(MathArcPicker);\n});\n","import { arcModule, container, registerArcGraphic } from '@visactor/vrender-core';\nimport { browser } from './env';\nimport { arcCanvasPickModule } from '../picker/contributions/canvas-picker/arc-module';\nimport { arcMathPickModule } from '../picker/contributions/math-picker/arc-module';\n\nexport function _registerArc() {\n if (_registerArc.__loaded) {\n return;\n }\n _registerArc.__loaded = true;\n registerArcGraphic();\n container.load(arcModule);\n container.load(browser ? arcCanvasPickModule : arcMathPickModule);\n}\n\n_registerArc.__loaded = false;\n\nexport const registerArc = _registerArc;\n","import type { AABBBounds } from '@visactor/vutils';\nimport type { GraphicType, IArc3d, IArc3dGraphicAttribute } from '../interface';\nimport { Arc } from './arc';\nimport { getTheme } from './theme';\nimport { application } from '../application';\nimport { parsePadding } from '../common/utils';\nimport { ARC3D_NUMBER_TYPE } from './constants';\nimport { NOWORK_ANIMATE_ATTR } from './graphic';\n\nexport class Arc3d extends Arc implements IArc3d {\n type: GraphicType = 'arc3d';\n declare attribute: IArc3dGraphicAttribute;\n\n static NOWORK_ANIMATE_ATTR = {\n cap: 1,\n ...NOWORK_ANIMATE_ATTR\n };\n\n constructor(params: IArc3dGraphicAttribute) {\n super(params);\n this.numberType = ARC3D_NUMBER_TYPE;\n }\n\n protected doUpdateAABBBounds(): AABBBounds {\n const polygonTheme = getTheme(this).arc;\n this._AABBBounds.setValue(Infinity, Infinity, -Infinity, -Infinity);\n\n const attribute = this.attribute;\n const bounds = application.graphicService.updateArc3dAABBBounds(\n attribute,\n getTheme(this).polygon as any,\n this._AABBBounds,\n this\n ) as AABBBounds;\n\n const { boundsPadding = polygonTheme.boundsPadding } = attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray);\n }\n\n this.clearUpdateBoundTag();\n\n return this._AABBBounds;\n }\n\n getNoWorkAnimateAttr(): Record {\n return Arc3d.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createArc3d(attributes: IArc3dGraphicAttribute): IArc3d {\n return new Arc3d(attributes);\n}\n","import type { vec3 } from '@visactor/vutils';\nimport { abs, cos, epsilon, sin, pi2, pi } from '@visactor/vutils';\nimport { injectable } from '../../../common/inversify-lite';\nimport { getTheme } from '../../../graphic/theme';\nimport type {\n IContext2d,\n IArc,\n IPath2D,\n IGraphicAttribute,\n IMarkAttribute,\n IThemeAttribute,\n IArc3d,\n IDrawContext,\n IRenderService,\n IGraphicRender,\n IGraphicRenderDrawParams\n} from '../../../interface';\nimport { drawPathProxy, fillVisible, runFill, runStroke, strokeVisible } from './utils';\nimport { mat4Allocate } from '../../../allocator/matrix-allocate';\nimport { BaseRender } from './base-render';\nimport { ARC3D_NUMBER_TYPE } from '../../../graphic/constants';\nimport { ColorStore, ColorType } from '../../../color-string';\n\n/**\n * 部分源码参考 https://github.com/d3/d3-shape/\n * Copyright 2010-2022 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n\n// 基于d3-shape\n// https://github.com/d3/d3-shape/blob/main/src/arc.js\nfunction drawArcPath(\n arc: IArc,\n context: IContext2d | IPath2D,\n cx: number,\n cy: number,\n z: number,\n outerRadius: number,\n innerRadius: number\n) {\n const { startAngle, endAngle } = arc.getParsedAngle();\n\n const deltaAngle = abs(endAngle - startAngle);\n const clockwise: boolean = endAngle > startAngle;\n let collapsedToLine: boolean = false;\n // 规范化outerRadius和innerRadius\n if (outerRadius < innerRadius) {\n const temp = outerRadius;\n outerRadius = innerRadius;\n innerRadius = temp;\n }\n // Is it a point?\n if (outerRadius <= epsilon) {\n context.moveTo(cx, cy, z);\n } else if (deltaAngle >= pi2 - epsilon) {\n // 是个完整的圆环\n // Or is it a circle or annulus?\n context.moveTo(cx + outerRadius * cos(startAngle), cy + outerRadius * sin(startAngle), z);\n context.arc(cx, cy, outerRadius, startAngle, endAngle, !clockwise, z);\n if (innerRadius > epsilon) {\n context.moveTo(cx + innerRadius * cos(endAngle), cy + innerRadius * sin(endAngle), z);\n context.arc(cx, cy, innerRadius, endAngle, startAngle, clockwise, z);\n }\n } else {\n // Or is it a circular or annular sector?\n const { outerDeltaAngle, innerDeltaAngle, outerStartAngle, outerEndAngle, innerEndAngle, innerStartAngle } =\n arc.getParsePadAngle(startAngle, endAngle);\n\n const xors = outerRadius * cos(outerStartAngle);\n const yors = outerRadius * sin(outerStartAngle);\n const xire = innerRadius * cos(innerEndAngle);\n const yire = innerRadius * sin(innerEndAngle);\n\n // Is the sector collapsed to a line?\n // 角度过小,会将acr处理为圆心到半径的一条线\n if (outerDeltaAngle < 0.001) {\n // 如果有左右边的话\n collapsedToLine = true;\n } else {\n context.moveTo(cx + xors, cy + yors, z);\n context.arc(cx, cy, outerRadius, outerStartAngle, outerEndAngle, !clockwise, z);\n }\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(innerRadius > epsilon) || innerDeltaAngle < 0.001) {\n context.lineTo(cx + xire, cy + yire, z);\n collapsedToLine = true;\n } else {\n // Or is the inner ring just a circular arc?\n context.lineTo(cx + xire, cy + yire, z);\n context.arc(cx, cy, innerRadius, innerEndAngle, innerStartAngle, clockwise, z);\n }\n }\n\n context.closePath();\n\n return collapsedToLine;\n}\n\nfunction drawInnerOuterArcPath(\n arc: IArc,\n context: IContext2d | IPath2D,\n cx: number,\n cy: number,\n z1: number,\n z2: number,\n radius: number,\n getParsePadAngle: (\n startAngle: number,\n endAngle: number\n ) => {\n innerouterDeltaAngle: number;\n innerouterStartAngle: number;\n innerouterEndAngle: number;\n }\n) {\n const { startAngle, endAngle } = arc.getParsedAngle();\n\n const deltaAngle = abs(endAngle - startAngle);\n const clockwise: boolean = endAngle > startAngle;\n let collapsedToLine: boolean = false;\n // Is it a point?\n if (radius <= epsilon) {\n context.moveTo(cx, cy, z1);\n } else if (deltaAngle >= pi2 - epsilon) {\n // 是个完整的圆环\n // Or is it a circle or annulus?\n context.moveTo(cx + radius * cos(startAngle), cy + radius * sin(startAngle), z1);\n context.arc(cx, cy, radius, startAngle, endAngle, !clockwise, z1);\n context.lineTo(cx + radius * cos(endAngle), cy + radius * sin(endAngle), z2);\n context.arc(cx, cy, radius, endAngle, startAngle, clockwise, z2);\n } else {\n // Or is it a circular or annular sector?\n const { innerouterDeltaAngle, innerouterStartAngle, innerouterEndAngle } = getParsePadAngle(startAngle, endAngle);\n\n const xors = radius * cos(innerouterStartAngle);\n const yors = radius * sin(innerouterStartAngle);\n const xore = radius * cos(innerouterEndAngle);\n const yore = radius * sin(innerouterEndAngle);\n\n // Is the sector collapsed to a line?\n // 角度过小,会将acr处理为圆心到半径的一条线\n if (innerouterDeltaAngle < 0.001) {\n collapsedToLine = true;\n } else {\n context.moveTo(cx + xors, cy + yors, z1);\n context.arc(cx, cy, radius, innerouterStartAngle, innerouterEndAngle, !clockwise, z1);\n context.lineTo(cx + xore, cy + yore, z2);\n context.arc(cx, cy, radius, innerouterEndAngle, innerouterStartAngle, clockwise, z2);\n }\n }\n\n context.closePath();\n\n return collapsedToLine;\n}\n\n@injectable()\nexport class DefaultCanvasArc3DRender extends BaseRender implements IGraphicRender {\n type: 'arc3d';\n numberType: number = ARC3D_NUMBER_TYPE;\n declare z: number;\n\n drawShape(\n arc: IArc3d,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // const arcAttribute = graphicService.themeService.getCurrentTheme().arcAttribute;\n const arcAttribute = getTheme(arc, params?.theme).arc;\n\n const { fill = arcAttribute.fill } = arc.attribute;\n // 不绘制或者透明\n const data = this.valid(arc, arcAttribute, fillCb, strokeCb);\n if (!data) {\n return;\n }\n const { fVisible, sVisible, doFill, doStroke } = data;\n const z = this.z ?? 0;\n\n const {\n outerRadius = arcAttribute.outerRadius,\n innerRadius = arcAttribute.innerRadius,\n // TODO 3d视角下直接硬编码,避免theme消耗性能\n height = 10\n } = arc.attribute;\n\n const rgbArray = ColorStore.Get(fill as string, ColorType.Color255);\n const { light } = drawContext.stage || {};\n const face = drawContext.hack_pieFace;\n\n const z_face = {\n top: z,\n bottom: z + height\n };\n\n const n_face: Record = {\n top: [0, 1, 0],\n bottom: [0, -1, 0],\n outside: [1, 0, -1],\n inside: [1, 0, -1]\n };\n\n if (face === 'bottom' || face === 'top') {\n context.beginPath();\n // 测试后,cache对于重绘性能提升不大,但是在首屏有一定性能损耗,因此arc不再使用cache\n drawArcPath(arc, context, x, y, z_face[face], outerRadius, innerRadius);\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(arc, arc.attribute, arcAttribute);\n\n if (doFill) {\n if (fillCb) {\n fillCb(context, arc.attribute, arcAttribute);\n } else if (fVisible) {\n context.setCommonStyle(arc, arc.attribute, x, y, arcAttribute);\n context.fillStyle = light ? light.computeColor(n_face[face], rgbArray as any) : (fill as string);\n context.fill();\n }\n }\n\n if (doStroke) {\n if (strokeCb) {\n strokeCb(context, arc.attribute, arcAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(arc, arc.attribute, x, y, arcAttribute);\n context.stroke();\n }\n }\n } else if (face === 'outside' || face === 'inside') {\n // 需要clip,避免绘制到外面\n if (face === 'inside') {\n context.save();\n context.beginPath();\n context.arc(x, y, innerRadius, 0, pi2, true, z_face.top);\n context.clip();\n }\n context.beginPath();\n // 测试后,cache对于重绘性能提升不大,但是在首屏有一定性能损耗,因此arc不再使用cache\n drawInnerOuterArcPath(\n arc,\n context,\n x,\n y,\n z_face.top,\n z_face.bottom,\n face === 'outside' ? outerRadius : innerRadius,\n (startAngle, endAngle) => {\n const { outerDeltaAngle, innerDeltaAngle, outerStartAngle, outerEndAngle, innerEndAngle, innerStartAngle } =\n arc.getParsePadAngle(startAngle, endAngle);\n if (face === 'outside') {\n return {\n innerouterDeltaAngle: outerDeltaAngle,\n innerouterEndAngle: outerEndAngle,\n innerouterStartAngle: outerStartAngle\n };\n }\n return {\n innerouterDeltaAngle: innerDeltaAngle,\n innerouterEndAngle: innerEndAngle,\n innerouterStartAngle: innerStartAngle\n };\n }\n );\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(arc, arc.attribute, arcAttribute);\n\n if (doFill) {\n if (fillCb) {\n fillCb(context, arc.attribute, arcAttribute);\n } else if (fVisible) {\n context.setCommonStyle(arc, arc.attribute, x, y, arcAttribute);\n context.fillStyle = light ? light.computeColor(n_face[face], rgbArray as any) : (fill as string);\n context.fill();\n }\n }\n\n if (doStroke) {\n if (strokeCb) {\n strokeCb(context, arc.attribute, arcAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(arc, arc.attribute, x, y, arcAttribute);\n context.stroke();\n }\n }\n\n if (face === 'inside') {\n context.restore();\n }\n }\n }\n\n draw(arc: IArc3d, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const arcAttribute = getTheme(arc, params?.theme).arc;\n this._draw(arc, arcAttribute, false, drawContext, params);\n }\n}\n","import { ContainerModule } from '../../../common/inversify';\nimport { DefaultCanvasArcRender } from './arc-render';\nimport { DefaultCanvasArc3DRender } from './arc3d-render';\nimport { DefaultBaseInteractiveRenderContribution } from './contributions';\nimport { ArcRenderContribution } from './contributions/constants';\nimport { Arc3dRender, ArcRender, GraphicRender } from './symbol';\n\nlet loadArc3dModule = false;\nexport const arc3dModule = new ContainerModule(bind => {\n if (loadArc3dModule) {\n return;\n }\n loadArc3dModule = true;\n // arc3d 渲染器\n bind(Arc3dRender).to(DefaultCanvasArc3DRender).inSingletonScope();\n bind(GraphicRender).toService(Arc3dRender);\n});\n","import type { IPoint } from '@visactor/vutils';\nimport { AABBBounds } from '@visactor/vutils';\nimport { inject, injectable, getTheme, Arc3dRender, mat4Allocate, ARC3D_NUMBER_TYPE } from '@visactor/vrender-core';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IArc3d,\n IThemeAttribute,\n IGraphicPicker,\n IGraphicRender,\n IPickParams\n} from '@visactor/vrender-core';\nimport { BasePicker } from './base-picker';\n\n@injectable()\nexport class DefaultCanvasArc3dPicker extends BasePicker implements IGraphicPicker {\n type: string = 'arc3d';\n numberType: number = ARC3D_NUMBER_TYPE;\n\n constructor(@inject(Arc3dRender) public readonly canvasRenderer: IGraphicRender) {\n super();\n }\n\n contains(arc3d: IArc3d, point: IPoint, params?: IPickParams): boolean {\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n const arc3dAttribute = getTheme(arc3d).arc;\n\n pickContext.highPerformanceSave();\n const data = this.transform(arc3d, arc3dAttribute, pickContext);\n const { x, y, z, lastModelMatrix } = data;\n\n let pickPoint = point;\n if (pickContext.camera) {\n pickPoint = point.clone();\n const globalMatrix = arc3d.parent.globalTransMatrix;\n pickPoint.x = globalMatrix.a * point.x + globalMatrix.c * point.y + globalMatrix.e;\n pickPoint.y = globalMatrix.b * point.x + globalMatrix.d * point.y + globalMatrix.f;\n }\n\n this.canvasRenderer.z = z;\n // 详细形状判断\n let picked = false;\n this.canvasRenderer.drawShape(\n arc3d,\n pickContext,\n x,\n y,\n params as any,\n null,\n (\n context: IContext2d,\n arc3dAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n picked = context.isPointInPath(pickPoint.x, pickPoint.y);\n return picked;\n }\n );\n this.canvasRenderer.z = 0;\n\n // mat4Allocate.free(pickContext.modelMatrix);\n if (pickContext.modelMatrix !== lastModelMatrix) {\n mat4Allocate.free(pickContext.modelMatrix);\n }\n pickContext.modelMatrix = lastModelMatrix;\n\n pickContext.highPerformanceRestore();\n return picked;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { CanvasArc3dPicker, CanvasPickerContribution } from '../constants';\nimport { DefaultCanvasArc3dPicker } from './arc3d-picker';\n\nlet loadArc3dPick = false;\nexport const arc3dCanvasPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadArc3dPick) {\n return;\n }\n loadArc3dPick = true;\n // arc3d picker\n bind(CanvasArc3dPicker).to(DefaultCanvasArc3dPicker).inSingletonScope();\n bind(CanvasPickerContribution).toService(CanvasArc3dPicker);\n});\n","import { arc3dModule, container, registerArc3dGraphic } from '@visactor/vrender-core';\nimport { browser } from './env';\nimport { arc3dCanvasPickModule } from '../picker/contributions/canvas-picker/arc3d-module';\n\nfunction _registerArc3d() {\n if (_registerArc3d.__loaded) {\n return;\n }\n _registerArc3d.__loaded = true;\n registerArc3dGraphic();\n container.load(arc3dModule);\n container.load(browser ? arc3dCanvasPickModule : arc3dCanvasPickModule);\n}\n\n_registerArc3d.__loaded = false;\n\nexport const registerArc3d = _registerArc3d;\n","import type { AABBBounds, OBBBounds } from '@visactor/vutils';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport type { IPolygon, IPolygonGraphicAttribute } from '../interface/graphic/polygon';\nimport { getTheme } from './theme';\nimport { parsePadding, pointsInterpolation } from '../common/utils';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { application } from '../application';\nimport type { GraphicType } from '../interface';\nimport { POLYGON_NUMBER_TYPE } from './constants';\n\nconst POLYGON_UPDATE_TAG_KEY = ['points', 'cornerRadius', ...GRAPHIC_UPDATE_TAG_KEY];\n\nexport class Polygon extends Graphic implements IPolygon {\n type: GraphicType = 'polygon';\n\n static NOWORK_ANIMATE_ATTR = NOWORK_ANIMATE_ATTR;\n\n constructor(params: IPolygonGraphicAttribute) {\n super(params);\n this.numberType = POLYGON_NUMBER_TYPE;\n }\n\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n protected _isValid(): boolean {\n const { points } = this.attribute;\n return points && points.length >= 2;\n }\n\n protected doUpdateAABBBounds(): AABBBounds {\n const polygonTheme = getTheme(this).polygon;\n this._AABBBounds.setValue(Infinity, Infinity, -Infinity, -Infinity);\n\n const attribute = this.attribute;\n const bounds = application.graphicService.updatePolygonAABBBounds(\n attribute,\n getTheme(this).polygon,\n this._AABBBounds,\n this\n ) as AABBBounds;\n\n const { boundsPadding = polygonTheme.boundsPadding } = attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray);\n }\n\n this.clearUpdateBoundTag();\n\n return this._AABBBounds;\n }\n\n protected tryUpdateOBBBounds(): OBBBounds {\n throw new Error('暂不支持');\n }\n\n protected _interpolate(key: string, ratio: number, lastStepVal: any, nextStepVal: any, nextAttributes: any): void {\n if (key === 'points') {\n (nextAttributes as any).points = pointsInterpolation(lastStepVal, nextStepVal, ratio);\n }\n }\n\n getDefaultAttribute(name: string) {\n const polygonTheme = getTheme(this).polygon;\n return polygonTheme[name];\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, POLYGON_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, POLYGON_UPDATE_TAG_KEY);\n }\n\n toCustomPath() {\n const points = this.attribute.points;\n const path = new CustomPath2D();\n\n points.forEach((point, index) => {\n if (index === 0) {\n path.moveTo(point.x, point.y);\n } else {\n path.lineTo(point.x, point.y);\n }\n });\n path.closePath();\n\n return path;\n }\n\n clone() {\n return new Polygon({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record {\n return Polygon.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createPolygon(attributes: IPolygonGraphicAttribute): IPolygon {\n return new Polygon(attributes);\n}\n","import type { AABBBounds, IPointLike } from '@visactor/vutils';\nimport { max, PointService } from '@visactor/vutils';\nimport { parsePadding } from '../common/utils';\nimport type { GraphicType, IPyramid3d, IPyramid3dGraphicAttribute } from '../interface';\nimport type { IFace3d } from '../interface/graphic/face3d';\nimport { application } from '../application';\nimport { Polygon } from './polygon';\nimport { getTheme } from './theme';\nimport { PYRAMID3D_NUMBER_TYPE } from './constants';\nimport { NOWORK_ANIMATE_ATTR } from './graphic';\n\nexport class Pyramid3d extends Polygon implements IPyramid3d {\n type: GraphicType = 'pyramid3d';\n declare attribute: IPyramid3dGraphicAttribute;\n\n static NOWORK_ANIMATE_ATTR = NOWORK_ANIMATE_ATTR;\n\n constructor(params: IPyramid3dGraphicAttribute) {\n super(params);\n this.numberType = PYRAMID3D_NUMBER_TYPE;\n }\n\n protected doUpdateAABBBounds(): AABBBounds {\n const polygonTheme = getTheme(this).polygon;\n this._AABBBounds.setValue(Infinity, Infinity, -Infinity, -Infinity);\n\n const attribute = this.attribute;\n const bounds = application.graphicService.updatePyramid3dAABBBounds(\n attribute,\n getTheme(this).polygon as any,\n this._AABBBounds,\n this\n ) as AABBBounds;\n\n const { boundsPadding = polygonTheme.boundsPadding } = attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray);\n }\n\n this.clearUpdateBoundTag();\n\n return this._AABBBounds;\n }\n\n findFace(): IFace3d {\n const { points } = this.attribute;\n // 找到斜率相同的两条边\n const kList = points.map((p, i) => {\n const p1 = i === 3 ? points[0] : points[i + 1];\n const dx = p.x - p1.x;\n if (dx === 0) {\n return 0;\n }\n return (p.y - p1.y) / dx;\n });\n\n const pointsMap: { p: IPointLike; d: number }[] = points.map(p => ({ p, d: 0 }));\n let find = false;\n let maxD = 0;\n for (let i = 0; i < kList.length - 1; i++) {\n for (let j = i + 1; j < kList.length; j++) {\n if (kList[i] === kList[j]) {\n find = true;\n const d1 = PointService.distancePP(pointsMap[i].p, pointsMap[i + 1].p);\n pointsMap[i].d = d1;\n pointsMap[i + 1].d = d1;\n maxD = max(maxD, d1);\n const d2 = PointService.distancePP(pointsMap[j].p, pointsMap[j + 1].p);\n pointsMap[j].d = d2;\n pointsMap[j + 1].d = d2;\n maxD = max(maxD, d2);\n }\n if (find) {\n break;\n }\n }\n if (find) {\n break;\n }\n }\n\n for (let i = points.length - 1; i >= 0; i--) {\n const p = points[i];\n pointsMap.unshift({\n p,\n d: 0\n });\n }\n\n for (let i = 0; i < points.length; i++) {\n const delta = (maxD - pointsMap[i + points.length].d) / 2;\n pointsMap[i].d += delta;\n pointsMap[i + points.length].d += delta;\n }\n\n const faces: IFace3d = { polygons: [], vertices: [], edges: [] };\n\n pointsMap.forEach(p => {\n faces.vertices.push([p.p.x, p.p.y, p.d]);\n });\n\n // 上\n faces.polygons.push({ polygon: [0, 4, 5, 1], normal: [0, -1, 0] });\n // 下\n faces.polygons.push({ polygon: [7, 6, 2, 3], normal: [0, 1, 0] });\n // 左\n faces.polygons.push({ polygon: [0, 4, 7, 3], normal: [-1, 0, 0] });\n // 右\n faces.polygons.push({ polygon: [1, 5, 6, 2], normal: [1, 0, 0] });\n // 前\n faces.polygons.push({ polygon: [0, 1, 2, 3], normal: [0, 0, -1] });\n // 后\n faces.polygons.push({ polygon: [4, 5, 6, 7], normal: [0, 0, 1] });\n\n faces.edges = [\n [0, 1],\n [1, 2],\n [2, 3],\n [3, 0],\n [4, 5],\n [5, 6],\n [6, 7],\n [7, 4],\n [0, 4],\n [3, 7],\n [1, 5],\n [2, 6]\n ];\n\n return faces;\n }\n\n protected _isValid(): boolean {\n return super._isValid() && this.attribute.points.length === 4;\n }\n\n getNoWorkAnimateAttr(): Record {\n return Pyramid3d.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createPyramid3d(attributes: IPyramid3dGraphicAttribute): IPyramid3d {\n return new Pyramid3d(attributes);\n}\n","import { injectable } from '../../../common/inversify-lite';\nimport { getTheme } from '../../../graphic/theme';\nimport { PYRAMID3D_NUMBER_TYPE } from '../../../graphic/constants';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IDirectionLight,\n IMarkAttribute,\n IPyramid3d,\n IFace3d,\n IThemeAttribute,\n ICamera,\n IPolygonItem,\n IGraphicRender,\n IDrawContext,\n IGraphicRenderDrawParams,\n IRenderService\n} from '../../../interface';\nimport { fillVisible, runFill, runStroke, strokeVisible } from './utils';\nimport { mat4Allocate } from '../../../allocator/matrix-allocate';\nimport { BaseRender } from './base-render';\nimport { ColorStore, ColorType } from '../../../color-string';\n\n@injectable()\nexport class DefaultCanvasPyramid3dRender extends BaseRender implements IGraphicRender {\n type = 'pyramid3d';\n numberType: number = PYRAMID3D_NUMBER_TYPE;\n declare z: number;\n\n drawShape(\n pyramid3d: IPyramid3d,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // const rectAttribute = graphicService.themeService.getCurrentTheme().rectAttribute;\n const pyramidAttribute = getTheme(pyramid3d, params?.theme).polygon;\n const {\n fill = pyramidAttribute.fill,\n stroke = pyramidAttribute.stroke,\n face = [true, true, true, true, true, true]\n } = pyramid3d.attribute;\n\n const z = this.z ?? 0;\n\n const data = this.valid(pyramid3d, pyramidAttribute, fillCb, strokeCb);\n if (!data) {\n return;\n }\n // const { fVisible, sVisible, doFill, doStroke } = data;\n\n const { light, camera } = drawContext.stage || {};\n\n const face3d = pyramid3d.findFace();\n\n if (fill !== false) {\n context.setCommonStyle(pyramid3d, pyramid3d.attribute, x, y, pyramidAttribute);\n let fc = fill;\n if (typeof fc !== 'string') {\n fc = 'black';\n }\n this.fill(x, y, z, face3d, face, fc, context, light, camera, pyramid3d, pyramidAttribute, fillCb);\n }\n if (stroke !== false) {\n context.setStrokeStyle(pyramid3d, pyramid3d.attribute, x, y, pyramidAttribute);\n this.stroke(x, y, z, face3d, context);\n }\n }\n\n stroke(x: number, y: number, z: number, face3d: IFace3d, context: IContext2d) {\n const vertices = face3d.vertices;\n face3d.edges.forEach(p => {\n const p1 = vertices[p[0]];\n const p2 = vertices[p[1]];\n const v1 = {\n x: x + p1[0],\n y: y + p1[1],\n z: z + p1[2]\n };\n const v2 = {\n x: x + p2[0],\n y: y + p2[1],\n z: z + p2[2]\n };\n context.beginPath();\n context.moveTo(v1.x, v1.y, v1.z);\n context.lineTo(v2.x, v2.y, v2.z);\n context.stroke();\n });\n }\n fill(\n x: number,\n y: number,\n z: number,\n face3d: IFace3d,\n faces: [boolean, boolean, boolean, boolean, boolean, boolean],\n fillColor: string,\n context: IContext2d,\n light: IDirectionLight,\n camera: ICamera,\n pyramid3d: IPyramid3d,\n pyramid3dAttribute: Partial,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const rgbArray = ColorStore.Get(fillColor as string, ColorType.Color255);\n\n // 上下左右前后\n // 0,1,2,3,4,5\n const vertices = face3d.vertices;\n // 计算每个顶点的view\n const viewdVerticesZ = vertices.map(v => {\n return context.view(v[0], v[1], v[2])[2];\n });\n // 排序\n const sortFace: { faceIdx: number; polygon: IPolygonItem }[] = [];\n face3d.polygons.forEach((p, i) => {\n if (!faces[i]) {\n return;\n }\n sortFace.push({\n faceIdx: i,\n polygon: p\n });\n // 设置ave_z进行排序\n const { polygon, normal } = p;\n\n const z1 = viewdVerticesZ[polygon[0]];\n const z2 = viewdVerticesZ[polygon[1]];\n const z3 = viewdVerticesZ[polygon[2]];\n const z4 = viewdVerticesZ[polygon[3]];\n\n p.ave_z = z1 + z2 + z3 + z4;\n });\n sortFace.sort((a, b) => b.polygon.ave_z - a.polygon.ave_z);\n sortFace.forEach(item => {\n const { polygon, normal } = item.polygon;\n\n const p1 = vertices[polygon[0]];\n const p2 = vertices[polygon[1]];\n const p3 = vertices[polygon[2]];\n const p4 = vertices[polygon[3]];\n\n const v1 = {\n x: x + p1[0],\n y: y + p1[1],\n z: z + p1[2]\n };\n const v2 = {\n x: x + p2[0],\n y: y + p2[1],\n z: z + p2[2]\n };\n const v3 = {\n x: x + p3[0],\n y: y + p3[1],\n z: z + p3[2]\n };\n const v4 = {\n x: x + p4[0],\n y: y + p4[1],\n z: z + p4[2]\n };\n context.beginPath();\n context.moveTo(v1.x, v1.y, v1.z);\n context.lineTo(v2.x, v2.y, v2.z);\n context.lineTo(v3.x, v3.y, v3.z);\n context.lineTo(v4.x, v4.y, v4.z);\n context.closePath();\n if (fillCb) {\n fillCb(context, pyramid3d.attribute, pyramid3dAttribute);\n } else {\n context.fillStyle = light ? light.computeColor(normal, rgbArray as any) : fillColor;\n context.fill();\n }\n });\n }\n\n draw(pyramid3d: IPyramid3d, renderService: IRenderService, drawContext: IDrawContext) {\n const pyramid3dAttribute = getTheme(pyramid3d).polygon;\n this._draw(pyramid3d, pyramid3dAttribute, false, drawContext);\n }\n}\n","import { ContainerModule } from '../../../common/inversify';\nimport { DefaultCanvasPyramid3dRender } from './pyramid3d-render';\nimport { GraphicRender, Pyramid3dRender, Rect3DRender } from './symbol';\n\nlet loadPyramid3dModule = false;\nexport const pyramid3dModule = new ContainerModule(bind => {\n if (loadPyramid3dModule) {\n return;\n }\n loadPyramid3dModule = true;\n // pyramid3d 渲染器\n bind(Pyramid3dRender).to(DefaultCanvasPyramid3dRender).inSingletonScope();\n bind(GraphicRender).toService(Pyramid3dRender);\n});\n","import type { IPoint } from '@visactor/vutils';\nimport { AABBBounds } from '@visactor/vutils';\nimport {\n inject,\n injectable,\n getTheme,\n Pyramid3dRender,\n mat4Allocate,\n PYRAMID3D_NUMBER_TYPE\n} from '@visactor/vrender-core';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IPyramid3d,\n IThemeAttribute,\n IGraphicRender,\n IGraphicPicker,\n IPickParams\n} from '@visactor/vrender-core';\nimport { BasePicker } from './base-picker';\n\n@injectable()\nexport class DefaultCanvasPyramid3dPicker extends BasePicker implements IGraphicPicker {\n type: string = 'pyramid3d';\n numberType: number = PYRAMID3D_NUMBER_TYPE;\n\n constructor(@inject(Pyramid3dRender) public readonly canvasRenderer: IGraphicRender) {\n super();\n }\n\n contains(pyramid3d: IPyramid3d, point: IPoint, params?: IPickParams): boolean {\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n const pyramid3dAttribute = getTheme(pyramid3d).polygon;\n\n pickContext.highPerformanceSave();\n const data = this.transform(pyramid3d, pyramid3dAttribute, pickContext);\n const { x, y, z, lastModelMatrix } = data;\n\n let pickPoint = point;\n if (pickContext.camera) {\n pickPoint = point.clone();\n const globalMatrix = pyramid3d.parent.globalTransMatrix;\n pickPoint.x = globalMatrix.a * point.x + globalMatrix.c * point.y + globalMatrix.e;\n pickPoint.y = globalMatrix.b * point.x + globalMatrix.d * point.y + globalMatrix.f;\n }\n\n this.canvasRenderer.z = z;\n // 详细形状判断\n let picked = false;\n this.canvasRenderer.drawShape(\n pyramid3d,\n pickContext,\n x,\n y,\n {} as any,\n null,\n (\n context: IContext2d,\n pyramid3dAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n picked = context.isPointInPath(pickPoint.x, pickPoint.y);\n return picked;\n },\n (\n context: IContext2d,\n pyramid3dAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // // 选中后面就不需要再走逻辑了\n // if (picked) {\n // return true;\n // }\n // const lineWidth = pyramid3dAttribute.lineWidth || themeAttribute.lineWidth;\n // pickContext.lineWidth = getScaledStroke(pickContext, lineWidth, pickContext.dpr);\n // picked = context.isPointInStroke(point.x, point.y);\n // return picked;\n return false;\n }\n );\n this.canvasRenderer.z = 0;\n\n if (pickContext.modelMatrix !== lastModelMatrix) {\n mat4Allocate.free(pickContext.modelMatrix);\n }\n pickContext.modelMatrix = lastModelMatrix;\n pickContext.highPerformanceRestore();\n return picked;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { CanvasPickerContribution, CanvasPyramid3dPicker } from '../constants';\nimport { DefaultCanvasPyramid3dPicker } from './pyramid3d-picker';\n\nlet loadPyramid3dPick = false;\nexport const pyramid3dCanvasPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadPyramid3dPick) {\n return;\n }\n loadPyramid3dPick = true;\n // pyramid3d picker\n bind(CanvasPyramid3dPicker).to(DefaultCanvasPyramid3dPicker).inSingletonScope();\n bind(CanvasPickerContribution).toService(CanvasPyramid3dPicker);\n});\n","import { container, pyramid3dModule, registerPyramid3dGraphic } from '@visactor/vrender-core';\nimport { browser } from './env';\nimport { pyramid3dCanvasPickModule } from '../picker/contributions/canvas-picker/pyramid3d-module';\n\nfunction _registerPyramid3d() {\n if (_registerPyramid3d.__loaded) {\n return;\n }\n _registerPyramid3d.__loaded = true;\n registerPyramid3dGraphic();\n container.load(pyramid3dModule);\n container.load(browser ? pyramid3dCanvasPickModule : pyramid3dCanvasPickModule);\n}\n\n_registerPyramid3d.__loaded = false;\n\nexport const registerPyramid3d = _registerPyramid3d;\n","import type { AABBBounds, OBBBounds, IPointLike } from '@visactor/vutils';\nimport type { IArea, IAreaCacheItem, IAreaGraphicAttribute } from '../interface';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { parsePadding, pointsInterpolation } from '../common/utils';\nimport { getTheme } from './theme';\nimport { application } from '../application';\nimport { AREA_NUMBER_TYPE } from './constants';\n\nconst AREA_UPDATE_TAG_KEY = ['segments', 'points', 'curveType', ...GRAPHIC_UPDATE_TAG_KEY];\n\nexport class Area extends Graphic implements IArea {\n type: 'area' = 'area';\n\n static NOWORK_ANIMATE_ATTR = {\n segments: 1,\n curveType: 1,\n ...NOWORK_ANIMATE_ATTR\n };\n\n cache?: IAreaCacheItem;\n\n constructor(params: IAreaGraphicAttribute) {\n super(params);\n this.numberType = AREA_NUMBER_TYPE;\n }\n\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n private _isValid(): boolean {\n if (this.pathProxy) {\n return true;\n }\n const { points, segments } = this.attribute;\n if (segments) {\n if (segments.length === 0) {\n return false;\n }\n return true;\n } else if (points) {\n if (points.length === 0) {\n return false;\n }\n return true;\n }\n return false;\n }\n\n protected doUpdateAABBBounds(): AABBBounds {\n const areaTheme = getTheme(this).area;\n this._AABBBounds.setValue(Infinity, Infinity, -Infinity, -Infinity);\n\n const attribute = this.attribute;\n const bounds = application.graphicService.updateAreaAABBBounds(\n attribute,\n getTheme(this).area,\n this._AABBBounds,\n this\n ) as AABBBounds;\n\n const { boundsPadding = areaTheme.boundsPadding } = attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray);\n }\n\n this.clearUpdateBoundTag();\n return bounds;\n }\n // private tryUpdateAABBBoundsByPoints(): AABBBounds {\n // const areaTheme = getTheme(this).area;\n // const { points = areaTheme.points } = this.attribute;\n // const b = this._AABBBounds;\n // points.forEach(p => {\n // b.add(p.x, p.y);\n // b.add(p.x1 ?? p.x, p.y1 ?? p.y); //面积图特殊性:由三个值构成,横向面积图,x1会省略;纵向面积图,y1会省略\n // });\n // const {\n // x = areaTheme.x,\n // y = areaTheme.y,\n // dx = areaTheme.dx,\n // dy = areaTheme.dy,\n // scaleX = areaTheme.scaleX,\n // scaleY = areaTheme.scaleY,\n // angle = areaTheme.angle\n // } = this.attribute;\n // // 合并shadowRoot的bounds\n // this.combindShadowAABBBounds(this._AABBBounds);\n // // TODO 加上锚点\n // transformBounds(b, x, y, scaleX, scaleY, angle);\n // this._AABBBounds.translate(dx, dy);\n // return b;\n // }\n // private tryUpdateAABBBoundsBySegments(): AABBBounds {\n // const areaTheme = getTheme(this).area;\n // const { segments = areaTheme.segments } = this.attribute;\n // const b = this._AABBBounds;\n // segments.forEach(s => {\n // s.points.forEach(p => {\n // b.add(p.x, p.y);\n // b.add(p.x1 ?? p.x, p.y1 ?? p.y); //面积图特殊性:由三个值构成,横向面积图,x1会省略;纵向面积图,y1会省略\n // });\n // });\n // const {\n // x = areaTheme.x,\n // y = areaTheme.y,\n // dx = areaTheme.dx,\n // dy = areaTheme.dy,\n // scaleX = areaTheme.scaleX,\n // scaleY = areaTheme.scaleY,\n // angle = areaTheme.angle\n // } = this.attribute;\n // // 合并shadowRoot的bounds\n // this.combindShadowAABBBounds(this._AABBBounds);\n // // TODO 加上锚点\n // transformBounds(b, x, y, scaleX, scaleY, angle);\n // this._AABBBounds.translate(dx, dy);\n // return b;\n // }\n\n protected tryUpdateOBBBounds(): OBBBounds {\n throw new Error('暂不支持');\n }\n\n protected _interpolate(key: string, ratio: number, lastStepVal: any, nextStepVal: any, nextAttributes: any): void {\n if (key === 'points') {\n (nextAttributes as any).points = pointsInterpolation(lastStepVal, nextStepVal, ratio);\n }\n }\n\n getDefaultAttribute(name: string) {\n const areaTheme = getTheme(this).area;\n return areaTheme[name];\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, AREA_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, AREA_UPDATE_TAG_KEY);\n }\n\n toCustomPath() {\n const path = new CustomPath2D();\n const attribute = this.attribute;\n const segments = attribute.segments;\n\n const parsePoints = (points: IPointLike[]) => {\n if (points && points.length) {\n let isFirst = true;\n const basePoints: IPointLike[] = [];\n points.forEach(point => {\n if (point.defined === false) {\n return;\n }\n if (isFirst) {\n path.moveTo(point.x, point.y);\n } else {\n path.lineTo(point.x, point.y);\n }\n basePoints.push({ x: point.x1 ?? point.x, y: point.y1 ?? point.y });\n\n isFirst = false;\n });\n\n if (basePoints.length) {\n for (let i = basePoints.length - 1; i >= 0; i--) {\n path.lineTo(basePoints[i].x, basePoints[i].y);\n }\n\n path.closePath();\n }\n }\n };\n\n if (attribute.points) {\n parsePoints(attribute.points);\n } else if (segments && segments.length) {\n segments.forEach(seg => {\n parsePoints(seg.points);\n });\n }\n\n return path;\n }\n\n clone() {\n return new Area({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record {\n return Area.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createArea(attributes: IAreaGraphicAttribute): IArea {\n return new Area(attributes);\n}\n","import { bindContributionProvider } from '../../../common/contribution-provider';\nimport { ContainerModule } from '../../../common/inversify';\nimport { DefaultCanvasAreaRender } from './area-render';\nimport { DefaultBaseInteractiveRenderContribution } from './contributions';\nimport { AreaRenderContribution } from './contributions/constants';\nimport { DefaultIncrementalCanvasAreaRender } from './incremental-area-render';\nimport { AreaRender, GraphicRender } from './symbol';\n\nlet loadAreaModule = false;\nexport const areaModule = new ContainerModule(bind => {\n if (loadAreaModule) {\n return;\n }\n loadAreaModule = true;\n // area渲染器\n bind(DefaultCanvasAreaRender).toSelf().inSingletonScope();\n bind(AreaRender).to(DefaultCanvasAreaRender).inSingletonScope();\n bind(GraphicRender).toService(AreaRender);\n bind(AreaRenderContribution).toService(DefaultBaseInteractiveRenderContribution);\n\n // area 渲染器注入contributions\n bindContributionProvider(bind, AreaRenderContribution);\n\n // incremental-line渲染器\n bind(DefaultIncrementalCanvasAreaRender).toSelf().inSingletonScope();\n});\n","import { inject, injectable, getTheme, AreaRender, AREA_NUMBER_TYPE, getScaledStroke } from '@visactor/vrender-core';\nimport type { IPoint } from '@visactor/vutils';\nimport type {\n IArea,\n IContext2d,\n IGraphicAttribute,\n IGraphicPicker,\n IGraphicRender,\n IMarkAttribute,\n IPickParams,\n IThemeAttribute\n} from '@visactor/vrender-core';\n\n@injectable()\nexport class DefaultCanvasAreaPicker implements IGraphicPicker {\n type: string = 'area';\n numberType: number = AREA_NUMBER_TYPE;\n\n constructor(@inject(AreaRender) public readonly canvasRenderer: IGraphicRender) {}\n\n contains(area: IArea, point: IPoint, params?: IPickParams): boolean {\n if (!area.AABBBounds.containsPoint(point)) {\n return false;\n }\n if (area.attribute.pickMode === 'imprecise') {\n return true;\n }\n\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n // const areaAttribute = graphicService.themeService.getCurrentTheme().areaAttribute;\n const areaAttribute = getTheme(area).area;\n let { x = areaAttribute.x, y = areaAttribute.y } = area.attribute;\n const { fillPickable = areaAttribute.fillPickable, strokePickable = areaAttribute.strokePickable } = area.attribute;\n\n pickContext.highPerformanceSave();\n if (!area.transMatrix.onlyTranslate()) {\n // 性能较差\n x = 0;\n y = 0;\n pickContext.transformFromMatrix(area.transMatrix, true);\n } else {\n const point = area.getOffsetXY(areaAttribute);\n x += point.x;\n y += point.y;\n // 当前context有rotate/scale,重置matrix\n pickContext.setTransformForCurrent();\n }\n\n // 详细形状判断\n let picked = false;\n this.canvasRenderer.drawShape(\n area,\n pickContext,\n x,\n y,\n {} as any,\n null,\n context => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n if (!fillPickable) {\n return false;\n }\n picked = context.isPointInPath(point.x, point.y);\n return picked;\n },\n (\n context: IContext2d,\n areaAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n if (!strokePickable) {\n return false;\n }\n const lineWidth = areaAttribute.lineWidth || themeAttribute.lineWidth;\n const pickStrokeBuffer = areaAttribute.pickStrokeBuffer || themeAttribute.pickStrokeBuffer;\n pickContext.lineWidth = getScaledStroke(pickContext, lineWidth + pickStrokeBuffer, pickContext.dpr);\n picked = context.isPointInStroke(point.x, point.y);\n return picked;\n }\n );\n\n pickContext.highPerformanceRestore();\n // area没有stroke pick\n return picked;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { CanvasAreaPicker, CanvasPickerContribution } from '../constants';\nimport { DefaultCanvasAreaPicker } from './area-picker';\n\nlet loadAreaPick = false;\nexport const areaCanvasPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadAreaPick) {\n return;\n }\n loadAreaPick = true;\n // area picker\n bind(CanvasAreaPicker).to(DefaultCanvasAreaPicker).inSingletonScope();\n bind(CanvasPickerContribution).toService(CanvasAreaPicker);\n});\n","import { inject, injectable, getTheme, AreaRender, AREA_NUMBER_TYPE } from '@visactor/vrender-core';\nimport type { IPoint } from '@visactor/vutils';\nimport type { IArea, IGraphicPicker, IGraphicRender, IPickParams } from '@visactor/vrender-core';\n\n@injectable()\nexport class DefaultMathAreaPicker implements IGraphicPicker {\n type: string = 'area';\n numberType: number = AREA_NUMBER_TYPE;\n\n constructor(@inject(AreaRender) public readonly canvasRenderer: IGraphicRender) {}\n\n contains(area: IArea, point: IPoint, params?: IPickParams): boolean {\n if (!area.AABBBounds.containsPoint(point)) {\n return false;\n }\n if (area.attribute.pickMode === 'imprecise') {\n return true;\n }\n\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n // const areaAttribute = graphicService.themeService.getCurrentTheme().areaAttribute;\n const areaAttribute = getTheme(area).area;\n let { x = areaAttribute.x, y = areaAttribute.y } = area.attribute;\n\n pickContext.highPerformanceSave();\n if (!area.transMatrix.onlyTranslate()) {\n // 性能较差\n x = 0;\n y = 0;\n pickContext.transformFromMatrix(area.transMatrix, true);\n } else {\n const point = area.getOffsetXY(areaAttribute);\n x += point.x;\n y += point.y;\n // 当前context有rotate/scale,重置matrix\n pickContext.setTransformForCurrent();\n }\n\n // 详细形状判断\n let picked = false;\n this.canvasRenderer.drawShape(area, pickContext, x, y, {} as any, null, context => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n picked = context.isPointInPath(point.x, point.y);\n return picked;\n });\n\n pickContext.highPerformanceRestore();\n // area没有stroke pick\n return picked;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { MathAreaPicker, MathLinePicker, MathPickerContribution } from '../constants';\nimport { DefaultMathLinePicker } from './line-picker';\nimport { DefaultMathAreaPicker } from './area-picker';\n\nlet loadAreaPick = false;\nexport const areaMathPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadAreaPick) {\n return;\n }\n loadAreaPick = true;\n // area picker\n bind(MathAreaPicker).to(DefaultMathAreaPicker).inSingletonScope();\n bind(MathPickerContribution).toService(MathAreaPicker);\n});\n","import { areaModule, container, registerAreaGraphic } from '@visactor/vrender-core';\nimport { browser } from './env';\nimport { areaCanvasPickModule } from '../picker/contributions/canvas-picker/area-module';\nimport { areaMathPickModule } from '../picker/contributions/math-picker/area-module';\n\nfunction _registerArea() {\n if (_registerArea.__loaded) {\n return;\n }\n _registerArea.__loaded = true;\n registerAreaGraphic();\n container.load(areaModule);\n container.load(browser ? areaCanvasPickModule : areaMathPickModule);\n}\n\n_registerArea.__loaded = false;\n\nexport const registerArea = _registerArea;\n","import type { AABBBounds, OBBBounds } from '@visactor/vutils';\nimport type { IImage, IImageGraphicAttribute, IRepeatType, ISetAttributeContext } from '../interface';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { DefaultImageAttribute } from './config';\nimport { getTheme } from './theme';\nimport { application } from '../application';\nimport { parsePadding } from '../common/utils';\nimport { IMAGE_NUMBER_TYPE } from './constants';\n\nconst IMAGE_UPDATE_TAG_KEY = ['width', 'height', 'image', ...GRAPHIC_UPDATE_TAG_KEY];\n\n/**\n * TODO image 需要考虑加载问题 等load模块\n * 同时需要在Graphic增加 图片填充 or 图片按形状clip功能\n */\nexport class Image extends Graphic implements IImage {\n type: 'image' = 'image';\n // 资源加载完成后回调,外部通过回调获取图片资源尺寸\n successCallback?: () => void;\n failCallback?: () => void;\n\n static NOWORK_ANIMATE_ATTR = {\n image: 1,\n repeatX: 1,\n repeatY: 1,\n ...NOWORK_ANIMATE_ATTR\n };\n\n constructor(params: IImageGraphicAttribute) {\n super(params);\n this.numberType = IMAGE_NUMBER_TYPE;\n\n this.loadImage(this.attribute.image);\n }\n\n get width(): number {\n return this.attribute.width ?? 0;\n }\n set width(width: number) {\n if (this.attribute.width === width) {\n this.attribute.width = width;\n this.addUpdateShapeAndBoundsTag();\n }\n }\n\n get height(): number {\n return this.attribute.height ?? 0;\n }\n set height(height: number) {\n if (this.attribute.height === height) {\n this.attribute.height = height;\n this.addUpdateShapeAndBoundsTag();\n }\n }\n get repeatX(): IRepeatType {\n return this.attribute.repeatX ?? 'no-repeat';\n }\n set repeatX(repeatX: IRepeatType) {\n if (this.attribute.repeatX === repeatX) {\n this.attribute.repeatX = repeatX;\n }\n }\n get repeatY(): IRepeatType {\n return this.attribute.repeatY ?? 'no-repeat';\n }\n set repeatY(repeatY: IRepeatType) {\n if (this.attribute.repeatY === repeatY) {\n this.attribute.repeatY = repeatY;\n }\n }\n get image(): string | HTMLImageElement | HTMLCanvasElement {\n return this.attribute.image;\n }\n set image(image: string | HTMLImageElement | HTMLCanvasElement) {\n if (image !== this.attribute.image) {\n this.attribute.image = image;\n this.loadImage(this.attribute.image);\n // this.addUpdateShapeAndBoundsTag();\n }\n }\n\n imageLoadSuccess(url: string, image: HTMLImageElement, cb?: () => void): void {\n super.imageLoadSuccess(url, image, () => {\n if (this.successCallback) {\n this.successCallback();\n }\n });\n }\n\n imageLoadFail(url: string, cb?: () => void): void {\n super.imageLoadFail(url, () => {\n if (this.failCallback) {\n this.failCallback();\n }\n });\n }\n\n setAttributes(\n params: Partial,\n forceUpdateTag?: boolean,\n context?: ISetAttributeContext\n ): void {\n if (params.image) {\n this.loadImage(params.image);\n }\n return super.setAttributes(params, forceUpdateTag, context);\n }\n\n setAttribute(key: string, value: any, forceUpdateTag?: boolean, context?: ISetAttributeContext): void {\n if (key === 'image') {\n this.loadImage(value);\n }\n return super.setAttribute(key, value, forceUpdateTag, context);\n }\n\n protected doUpdateAABBBounds(): AABBBounds {\n const imageTheme = getTheme(this).image;\n this._AABBBounds.setValue(Infinity, Infinity, -Infinity, -Infinity);\n const attribute = this.attribute;\n const bounds = application.graphicService.updateImageAABBBounds(\n attribute,\n getTheme(this).image,\n this._AABBBounds,\n this\n ) as AABBBounds;\n\n const { boundsPadding = imageTheme.boundsPadding } = attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray);\n }\n\n this.clearUpdateBoundTag();\n return bounds;\n }\n\n protected tryUpdateOBBBounds(): OBBBounds {\n throw new Error('暂不支持');\n }\n\n getDefaultAttribute(name: string) {\n return DefaultImageAttribute[name];\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, IMAGE_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, IMAGE_UPDATE_TAG_KEY);\n }\n\n clone() {\n return new Image({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record {\n return Image.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createImage(attributes: IImageGraphicAttribute): IImage {\n return new Image(attributes);\n}\n","import type {\n IGraphicAttribute,\n IContext2d,\n IImage,\n IThemeAttribute,\n IImageRenderContribution,\n IDrawContext,\n IBackgroundConfig,\n IGraphic\n} from '../../../../interface';\nimport { getTheme } from '../../../../graphic';\nimport { DefaultBaseBackgroundRenderContribution } from './base-contribution-render';\nimport { BaseRenderContributionTime } from '../../../../common/enums';\nimport { isNumber, isObject } from '@visactor/vutils';\nimport { parsePadding } from '../../../../common/utils';\nimport { createRectPath } from '../../../../common/shape/rect';\n\nexport class DefaultImageBackgroundRenderContribution\n extends DefaultBaseBackgroundRenderContribution\n implements IImageRenderContribution\n{\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n\n drawShape(\n graphic: IImage,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean\n ) {\n const {\n background,\n backgroundMode = graphicAttribute.backgroundMode,\n backgroundFit = graphicAttribute.backgroundFit\n } = graphic.attribute;\n if (!background) {\n return;\n }\n\n if (!graphic.backgroundImg) {\n if (isObject(background)) {\n const {\n stroke,\n fill,\n lineWidth = 1,\n cornerRadius = 0,\n expandX = 0,\n expandY = 0\n } = background as IBackgroundConfig;\n\n if (!stroke && !fill) {\n return;\n }\n\n context.beginPath();\n const { x, y, width, height } = getActualPosition(graphic);\n if (cornerRadius) {\n createRectPath(context, x - expandX, y - expandY, width + expandX * 2, height + expandY * 2, cornerRadius);\n } else {\n context.rect(x - expandX, y - expandY, width + expandX * 2, height + expandY * 2);\n }\n\n context.globalAlpha = 1;\n if (fill) {\n context.fillStyle = fill as string;\n context.fill();\n }\n\n if (stroke && lineWidth > 0) {\n context.lineWidth = lineWidth;\n context.strokeStyle = stroke as string;\n context.stroke();\n }\n } else {\n context.beginPath();\n const b = graphic.AABBBounds;\n context.rect(x, y, b.width(), b.height());\n context.fillStyle = background as string;\n context.globalAlpha = 1;\n context.fill();\n }\n } else {\n const res = graphic.resources.get(background as any);\n if (res.state !== 'success' || !res.data) {\n return;\n }\n context.save();\n if (graphic.parent && !graphic.transMatrix.onlyTranslate()) {\n const groupAttribute = getTheme(graphic.parent).group;\n const { scrollX = groupAttribute.scrollX, scrollY = groupAttribute.scrollY } = graphic.parent.attribute;\n context.setTransformFromMatrix(graphic.parent.globalTransMatrix, true);\n context.translate(scrollX, scrollY);\n }\n // context.clip();\n const b = graphic.AABBBounds;\n this.doDrawImage(context, res.data, b, backgroundMode, backgroundFit);\n context.restore();\n if (!graphic.transMatrix.onlyTranslate()) {\n context.setTransformForCurrent();\n }\n }\n }\n}\n\nfunction getActualPosition(graphic: IGraphic) {\n const boundsPadding = parsePadding(graphic.attribute.boundsPadding);\n const bounds = graphic.AABBBounds;\n let x = bounds.x1;\n let y = bounds.y1;\n let width = bounds.width();\n let height = bounds.height();\n\n if (isNumber(boundsPadding)) {\n x += boundsPadding;\n y += boundsPadding;\n width -= boundsPadding * 2;\n height -= boundsPadding * 2;\n } else {\n x += boundsPadding[3];\n y += boundsPadding[0];\n width -= boundsPadding[1] + boundsPadding[3];\n height -= boundsPadding[0] + boundsPadding[2];\n }\n\n return {\n x,\n y,\n width,\n height\n };\n}\n\nexport const defaultImageBackgroundRenderContribution = new DefaultImageBackgroundRenderContribution();\n","import { inject, injectable, named } from '../../../common/inversify-lite';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport { getTheme } from '../../../graphic/theme';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IImage,\n IThemeAttribute,\n IGraphicRender,\n IImageRenderContribution,\n IContributionProvider,\n IDrawContext,\n IGraphicRenderDrawParams,\n IRenderService\n} from '../../../interface';\nimport { ImageRenderContribution } from './contributions/constants';\nimport { fillVisible, runFill } from './utils';\nimport { IMAGE_NUMBER_TYPE } from '../../../graphic/constants';\nimport { BaseRenderContributionTime } from '../../../common/enums';\nimport { isArray } from '@visactor/vutils';\nimport { createRectPath } from '../../../common/shape/rect';\nimport { BaseRender } from './base-render';\nimport { defaultImageBackgroundRenderContribution } from './contributions';\n\nconst repeatStr = ['', 'repeat-x', 'repeat-y', 'repeat'];\n\n@injectable()\nexport class DefaultCanvasImageRender extends BaseRender implements IGraphicRender {\n type: 'image';\n numberType: number = IMAGE_NUMBER_TYPE;\n\n constructor(\n @inject(ContributionProvider)\n @named(ImageRenderContribution)\n protected readonly imageRenderContribitions: IContributionProvider\n ) {\n super();\n this.builtinContributions = [defaultImageBackgroundRenderContribution];\n this.init(imageRenderContribitions);\n }\n\n drawShape(\n image: IImage,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // const imageAttribute = graphicService.themeService.getCurrentTheme().imageAttribute;\n const imageAttribute = getTheme(image).image;\n const {\n width = imageAttribute.width,\n height = imageAttribute.height,\n repeatX = imageAttribute.repeatX,\n repeatY = imageAttribute.repeatY,\n cornerRadius = imageAttribute.cornerRadius,\n image: url\n } = image.attribute;\n\n const data = this.valid(image, imageAttribute, fillCb);\n if (!data) {\n return;\n }\n const { fVisible, sVisible, doFill, doStroke } = data;\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(image, imageAttribute);\n\n this.beforeRenderStep(image, context, x, y, doFill, false, fVisible, false, imageAttribute, drawContext, fillCb);\n\n // context.beginPath();\n // context.image(x, y, width, height);\n\n if (doFill) {\n if (fillCb) {\n fillCb(context, image.attribute, imageAttribute);\n } else if (fVisible) {\n if (!url || !image.resources) {\n return;\n }\n const res = image.resources.get(url);\n if (res.state !== 'success') {\n return;\n }\n\n // deal with cornerRadius\n let needRestore = false;\n if (cornerRadius === 0 || (isArray(cornerRadius) && (cornerRadius).every(num => num === 0))) {\n // 不需要处理圆角\n } else {\n context.beginPath();\n createRectPath(context, x, y, width, height, cornerRadius);\n context.save();\n context.clip();\n needRestore = true;\n }\n\n context.setCommonStyle(image, image.attribute, x, y, imageAttribute);\n let repeat = 0;\n if (repeatX === 'repeat') {\n repeat |= 0b0001;\n }\n if (repeatY === 'repeat') {\n repeat |= 0b0010;\n }\n if (repeat) {\n const pattern = context.createPattern(res.data, repeatStr[repeat]);\n context.fillStyle = pattern;\n context.translate(x, y, true);\n context.fillRect(0, 0, width, height);\n context.translate(-x, -y, true);\n } else {\n context.drawImage(res.data, x, y, width, height);\n }\n\n if (needRestore) {\n context.restore();\n }\n }\n }\n\n this.afterRenderStep(image, context, x, y, doFill, false, fVisible, false, imageAttribute, drawContext, fillCb);\n }\n\n draw(image: IImage, renderService: IRenderService, drawContext: IDrawContext) {\n const { image: url } = image.attribute;\n if (!url || !image.resources) {\n return;\n }\n const res = image.resources.get(url);\n if (res.state !== 'success') {\n return;\n }\n\n const { context } = renderService.drawParams;\n if (!context) {\n return;\n }\n const imageAttribute = getTheme(image).image;\n this._draw(image, imageAttribute, false, drawContext);\n }\n}\n","import { bindContributionProvider } from '../../../common/contribution-provider';\nimport { ContainerModule } from '../../../common/inversify';\nimport { DefaultBaseInteractiveRenderContribution } from './contributions';\nimport { ImageRenderContribution } from './contributions/constants';\nimport { DefaultCanvasImageRender } from './image-render';\nimport { GraphicRender, ImageRender } from './symbol';\n\nlet loadImageModule = false;\nexport const imageModule = new ContainerModule(bind => {\n if (loadImageModule) {\n return;\n }\n loadImageModule = true;\n // image渲染器\n bind(ImageRender).to(DefaultCanvasImageRender).inSingletonScope();\n bind(GraphicRender).toService(ImageRender);\n bind(ImageRenderContribution).toService(DefaultBaseInteractiveRenderContribution);\n // image 渲染器注入contributions\n bindContributionProvider(bind, ImageRenderContribution);\n});\n","import type { IPoint } from '@visactor/vutils';\nimport { injectable, IMAGE_NUMBER_TYPE } from '@visactor/vrender-core';\nimport type { IGraphicPicker, IImage, IPickParams } from '@visactor/vrender-core';\n\n@injectable()\nexport class DefaultCanvasImagePicker implements IGraphicPicker {\n type: string = 'image';\n numberType: number = IMAGE_NUMBER_TYPE;\n\n contains(image: IImage, point: IPoint, params?: IPickParams): boolean {\n // const { imageAttribute } = graphicService.themeService.getCurrentTheme();\n // const {\n // x = imageAttribute.x,\n // y = imageAttribute.y,\n // } = image.attribute;\n\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n if (!image.AABBBounds.containsPoint(point)) {\n return false;\n }\n\n // TODO: 详细形状判断\n return true;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { CanvasGlyphPicker, CanvasImagePicker, CanvasPickerContribution } from '../constants';\nimport { DefaultCanvasGlyphPicker } from './glyph-picker';\nimport { DefaultCanvasImagePicker } from './image-picker';\n\nlet loadImagePick = false;\nexport const imageCanvasPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadImagePick) {\n return;\n }\n loadImagePick = true;\n // image picker\n bind(CanvasImagePicker).to(DefaultCanvasImagePicker).inSingletonScope();\n bind(CanvasPickerContribution).toService(CanvasImagePicker);\n});\n","import type { IPoint } from '@visactor/vutils';\nimport { injectable, IMAGE_NUMBER_TYPE } from '@visactor/vrender-core';\nimport type { IGraphicPicker, IImage, IPickParams } from '@visactor/vrender-core';\n\n@injectable()\nexport class DefaultMathImagePicker implements IGraphicPicker {\n type: string = 'image';\n numberType: number = IMAGE_NUMBER_TYPE;\n\n contains(image: IImage, point: IPoint, params?: IPickParams): boolean {\n // const { imageAttribute } = graphicService.themeService.getCurrentTheme();\n // const {\n // x = imageAttribute.x,\n // y = imageAttribute.y,\n // } = image.attribute;\n\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n if (!image.AABBBounds.containsPoint(point)) {\n return false;\n }\n\n // TODO: 详细形状判断\n return true;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { MathImagePicker } from '../constants';\nimport { DefaultMathImagePicker } from './image-picker';\n\nlet loadImagePick = false;\nexport const imageMathPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadImagePick) {\n return;\n }\n loadImagePick = true;\n // glyph picker\n bind(MathImagePicker).to(DefaultMathImagePicker).inSingletonScope();\n bind(DefaultMathImagePicker).toService(MathImagePicker);\n});\n","import { container, imageModule, registerImageGraphic } from '@visactor/vrender-core';\nimport { browser } from './env';\nimport { imageCanvasPickModule } from '../picker/contributions/canvas-picker/image-module';\nimport { imageMathPickModule } from '../picker/contributions/math-picker/image-module';\n\nfunction _registerImage() {\n if (_registerImage.__loaded) {\n return;\n }\n _registerImage.__loaded = true;\n registerImageGraphic();\n container.load(imageModule);\n container.load(browser ? imageCanvasPickModule : imageMathPickModule);\n}\n\n_registerImage.__loaded = false;\n\nexport const registerImage = _registerImage;\n","import type { AABBBounds, OBBBounds, IPointLike } from '@visactor/vutils';\nimport type { ILine, ILineGraphicAttribute } from '../interface';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { getTheme } from './theme';\nimport { application } from '../application';\nimport { parsePadding, pointsInterpolation } from '../common/utils';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { LINE_NUMBER_TYPE } from './constants';\n\nconst LINE_UPDATE_TAG_KEY = ['segments', 'points', 'curveType', ...GRAPHIC_UPDATE_TAG_KEY];\n\nexport class Line extends Graphic implements ILine {\n type: 'line' = 'line';\n\n constructor(params: ILineGraphicAttribute = {}) {\n super(params);\n this.numberType = LINE_NUMBER_TYPE;\n }\n\n static NOWORK_ANIMATE_ATTR = {\n segments: 1,\n curveType: 1,\n ...NOWORK_ANIMATE_ATTR\n };\n\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n private _isValid(): boolean {\n if (this.pathProxy) {\n return true;\n }\n const { points, segments } = this.attribute;\n if (segments) {\n if (segments.length === 0) {\n return false;\n }\n return true;\n } else if (points) {\n if (points.length <= 1) {\n return false;\n }\n return true;\n }\n return false;\n }\n\n protected _interpolate(key: string, ratio: number, lastStepVal: any, nextStepVal: any, nextAttributes: any): void {\n if (key === 'points') {\n (nextAttributes as any).points = pointsInterpolation(lastStepVal, nextStepVal, ratio);\n }\n }\n\n protected doUpdateAABBBounds(): AABBBounds {\n const lineTheme = getTheme(this).line;\n this._AABBBounds.setValue(Infinity, Infinity, -Infinity, -Infinity);\n const attribute = this.attribute;\n const bounds = application.graphicService.updateLineAABBBounds(\n attribute,\n getTheme(this).line,\n this._AABBBounds,\n this\n ) as AABBBounds;\n\n const { boundsPadding = lineTheme.boundsPadding } = attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray);\n }\n\n this.clearUpdateBoundTag();\n return bounds;\n }\n\n protected tryUpdateOBBBounds(): OBBBounds {\n throw new Error('暂不支持');\n }\n\n getDefaultAttribute(name: string) {\n const lineTheme = getTheme(this).line;\n return lineTheme[name];\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, LINE_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, LINE_UPDATE_TAG_KEY);\n }\n\n toCustomPath() {\n const attribute = this.attribute;\n const path = new CustomPath2D();\n const segments = attribute.segments;\n\n const parsePoints = (points: IPointLike[]) => {\n if (points && points.length) {\n let isFirst = true;\n points.forEach(point => {\n if (point.defined === false) {\n return;\n }\n if (isFirst) {\n path.moveTo(point.x, point.y);\n } else {\n path.lineTo(point.x, point.y);\n }\n\n isFirst = false;\n });\n }\n };\n\n if (segments && segments.length) {\n segments.forEach(seg => {\n parsePoints(seg.points);\n });\n } else if (attribute.points) {\n parsePoints(attribute.points);\n }\n\n return path;\n }\n\n clone() {\n return new Line({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record {\n return Line.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createLine(attributes: ILineGraphicAttribute): ILine {\n return new Line(attributes);\n}\n\n// addAttributeToPrototype(DefaultLineStyle, Line, PURE_STYLE_KEY);\n","import { ContainerModule } from '../../../common/inversify';\nimport { DefaultIncrementalCanvasLineRender } from './incremental-line-render';\nimport { DefaultCanvasLineRender } from './line-render';\nimport { GraphicRender, LineRender } from './symbol';\n\nlet loadLineModule = false;\nexport const lineModule = new ContainerModule(bind => {\n if (loadLineModule) {\n return;\n }\n loadLineModule = true;\n // line渲染器\n bind(DefaultCanvasLineRender).toSelf().inSingletonScope();\n bind(DefaultIncrementalCanvasLineRender).toSelf().inSingletonScope();\n bind(LineRender).to(DefaultCanvasLineRender).inSingletonScope();\n bind(GraphicRender).toService(LineRender);\n});\n","import {\n inject,\n injectable,\n LineRender,\n getTheme,\n mat4Allocate,\n getScaledStroke,\n LINE_NUMBER_TYPE\n} from '@visactor/vrender-core';\nimport type { IPoint } from '@visactor/vutils';\nimport type {\n ILine,\n IContext2d,\n IMarkAttribute,\n IGraphicAttribute,\n IThemeAttribute,\n IGraphicPicker,\n IGraphicRender,\n IPickParams\n} from '@visactor/vrender-core';\nimport { BasePicker } from './base-picker';\n\n@injectable()\nexport class DefaultCanvasLinePicker extends BasePicker implements IGraphicPicker {\n type: string = 'line';\n numberType: number = LINE_NUMBER_TYPE;\n\n constructor(@inject(LineRender) public readonly canvasRenderer: IGraphicRender) {\n super();\n }\n // numberType?: number = LINE_NUMBER_TYPE;\n\n contains(line: ILine, point: IPoint, params?: IPickParams): boolean {\n if (!line.AABBBounds.containsPoint(point)) {\n return false;\n }\n if (line.attribute.pickMode === 'imprecise') {\n return true;\n }\n\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n // const lineAttribute = graphicService.themeService.getCurrentTheme().lineAttribute;\n pickContext.highPerformanceSave();\n const lineAttribute = getTheme(line).line;\n\n const data = this.transform(line, lineAttribute, pickContext);\n const { x, y, z, lastModelMatrix } = data;\n\n let pickPoint = point;\n if (pickContext.camera) {\n pickPoint = point.clone();\n const globalMatrix = line.parent.globalTransMatrix;\n pickPoint.x = globalMatrix.a * point.x + globalMatrix.c * point.y + globalMatrix.e;\n pickPoint.y = globalMatrix.b * point.x + globalMatrix.d * point.y + globalMatrix.f;\n }\n\n this.canvasRenderer.z = z;\n // 详细形状判断\n let picked = false;\n this.canvasRenderer.drawShape(\n line,\n pickContext,\n x,\n y,\n {} as any,\n null,\n context => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n picked = context.isPointInPath(pickPoint.x, pickPoint.y);\n return picked;\n },\n (\n context: IContext2d,\n lineAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n const lineWidth = lineAttribute.lineWidth || themeAttribute.lineWidth;\n const pickStrokeBuffer = lineAttribute.pickStrokeBuffer || themeAttribute.pickStrokeBuffer;\n pickContext.lineWidth = getScaledStroke(pickContext, lineWidth + pickStrokeBuffer, pickContext.dpr);\n picked = context.isPointInStroke(pickPoint.x, pickPoint.y);\n return picked;\n }\n );\n this.canvasRenderer.z = 0;\n\n if (pickContext.modelMatrix !== lastModelMatrix) {\n mat4Allocate.free(pickContext.modelMatrix);\n }\n pickContext.modelMatrix = lastModelMatrix;\n pickContext.highPerformanceRestore();\n return picked;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { CanvasLinePicker, CanvasPickerContribution } from '../constants';\nimport { DefaultCanvasLinePicker } from './line-picker';\n\nlet loadLinePick = false;\nexport const lineCanvasPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadLinePick) {\n return;\n }\n loadLinePick = true;\n bind(CanvasLinePicker).to(DefaultCanvasLinePicker).inSingletonScope();\n bind(CanvasPickerContribution).toService(CanvasLinePicker);\n});\n","import { inject, injectable, LineRender, getTheme, LINE_NUMBER_TYPE } from '@visactor/vrender-core';\nimport type { IPoint } from '@visactor/vutils';\nimport type {\n ILine,\n IContext2d,\n IMarkAttribute,\n IGraphicAttribute,\n IThemeAttribute,\n IGraphicPicker,\n IGraphicRender,\n IPickParams\n} from '@visactor/vrender-core';\n@injectable()\nexport class DefaultMathLinePicker implements IGraphicPicker {\n type: string = 'line';\n numberType: number = LINE_NUMBER_TYPE;\n\n constructor(@inject(LineRender) public readonly canvasRenderer: IGraphicRender) {}\n // numberType?: number = LINE_NUMBER_TYPE;\n\n contains(line: ILine, point: IPoint, params?: IPickParams): boolean {\n if (!line.AABBBounds.containsPoint(point)) {\n return false;\n }\n if (line.attribute.pickMode === 'imprecise') {\n return true;\n }\n\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n // const lineAttribute = graphicService.themeService.getCurrentTheme().lineAttribute;\n const lineAttribute = getTheme(line).line;\n let { x = lineAttribute.x, y = lineAttribute.y } = line.attribute;\n\n pickContext.highPerformanceSave();\n if (!line.transMatrix.onlyTranslate()) {\n // 性能较差\n x = 0;\n y = 0;\n pickContext.transformFromMatrix(line.transMatrix, true);\n } else {\n const point = line.getOffsetXY(lineAttribute);\n x += point.x;\n y += point.y;\n // 当前context有rotate/scale,重置matrix\n pickContext.setTransformForCurrent();\n }\n\n // 详细形状判断\n let picked = false;\n this.canvasRenderer.drawShape(\n line,\n pickContext,\n x,\n y,\n {} as any,\n null,\n context => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n picked = context.isPointInPath(point.x, point.y);\n return picked;\n },\n (\n context: IContext2d,\n circleAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n const lineWidth = circleAttribute.lineWidth || themeAttribute.lineWidth;\n const pickStrokeBuffer = circleAttribute.pickStrokeBuffer || themeAttribute.pickStrokeBuffer;\n pickContext.lineWidth = lineWidth + pickStrokeBuffer;\n picked = context.isPointInStroke(point.x, point.y);\n return picked;\n }\n );\n\n pickContext.highPerformanceRestore();\n return picked;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { MathLinePicker, MathPickerContribution } from '../constants';\nimport { DefaultMathLinePicker } from './line-picker';\n\nlet loadLinePick = false;\nexport const lineMathPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadLinePick) {\n return;\n }\n loadLinePick = true;\n // line picker\n bind(MathLinePicker).to(DefaultMathLinePicker).inSingletonScope();\n bind(MathPickerContribution).toService(MathLinePicker);\n});\n","import { container, lineModule, registerLineGraphic } from '@visactor/vrender-core';\nimport { browser } from './env';\nimport { lineCanvasPickModule } from '../picker/contributions/canvas-picker/line-module';\nimport { lineMathPickModule } from '../picker/contributions/math-picker/line-module';\n\nfunction _registerLine() {\n if (_registerLine.__loaded) {\n return;\n }\n _registerLine.__loaded = true;\n registerLineGraphic();\n container.load(lineModule);\n container.load(browser ? lineCanvasPickModule : lineMathPickModule);\n}\n\n_registerLine.__loaded = false;\n\nexport const registerLine = _registerLine;\n","import type { AABBBounds, OBBBounds } from '@visactor/vutils';\nimport { isString, isNil } from '@visactor/vutils';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport type { ICustomPath2D, IPath, IPathGraphicAttribute } from '../interface';\nimport { parsePadding } from '../common/utils';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { getTheme } from './theme';\nimport { application } from '../application';\nimport { PATH_NUMBER_TYPE } from './constants';\n\nconst PATH_UPDATE_TAG_KEY = ['path', 'customPath', ...GRAPHIC_UPDATE_TAG_KEY];\n\nexport class Path extends Graphic implements IPath {\n type: 'path' = 'path';\n cache?: ICustomPath2D;\n\n static NOWORK_ANIMATE_ATTR = {\n path: 1,\n customPath: 1,\n ...NOWORK_ANIMATE_ATTR\n };\n\n constructor(params: IPathGraphicAttribute) {\n super(params);\n this.numberType = PATH_NUMBER_TYPE;\n }\n\n get pathShape(): ICustomPath2D {\n this.tryUpdateAABBBounds();\n return this.getParsedPathShape();\n }\n\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n private _isValid(): boolean {\n const { path } = this.attribute;\n return path != null && path !== '';\n }\n\n getParsedPathShape(): CustomPath2D {\n const pathTheme = getTheme(this).path;\n if (!this.valid) {\n return pathTheme.path as CustomPath2D;\n }\n const attribute = this.attribute;\n if (attribute.path instanceof CustomPath2D) {\n return attribute.path;\n }\n\n if (isNil(this.cache)) {\n this.doUpdatePathShape();\n }\n\n if (this.cache instanceof CustomPath2D) {\n return this.cache;\n }\n return pathTheme.path as CustomPath2D;\n }\n\n protected doUpdateAABBBounds(): AABBBounds {\n const pathTheme = getTheme(this).path;\n this.doUpdatePathShape();\n this._AABBBounds.setValue(Infinity, Infinity, -Infinity, -Infinity);\n const attribute = this.attribute;\n const bounds = application.graphicService.updatePathAABBBounds(\n attribute,\n getTheme(this).path,\n this._AABBBounds,\n this\n ) as AABBBounds;\n\n const { boundsPadding = pathTheme.boundsPadding } = attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray);\n }\n\n this.clearUpdateBoundTag();\n return bounds;\n }\n\n protected doUpdatePathShape() {\n const attribute = this.attribute;\n if (isString(attribute.path, true)) {\n this.cache = new CustomPath2D().fromString(attribute.path as string);\n } else if (attribute.customPath) {\n this.cache = new CustomPath2D();\n attribute.customPath(this.cache, this);\n }\n }\n\n protected tryUpdateOBBBounds(): OBBBounds {\n throw new Error('暂不支持');\n }\n\n getDefaultAttribute(name: string) {\n const pathTheme = getTheme(this).path;\n return pathTheme[name];\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, PATH_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, PATH_UPDATE_TAG_KEY);\n }\n\n toCustomPath() {\n const x = 0;\n const y = 0;\n\n return new CustomPath2D().fromCustomPath2D(this.getParsedPathShape(), x, y);\n }\n\n clone() {\n return new Path({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record {\n return Path.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createPath(attributes: IPathGraphicAttribute): IPath {\n return new Path(attributes);\n}\n","import { inject, injectable, named } from '../../../common/inversify-lite';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport { renderCommandList } from '../../../common/render-command-list';\nimport type {\n IPath,\n ICustomPath2D,\n IContext2d,\n IThemeAttribute,\n IGraphicAttribute,\n IMarkAttribute,\n IPathRenderContribution,\n IGraphicRender,\n IContributionProvider,\n IDrawContext,\n IGraphicRenderDrawParams,\n IRenderService,\n IPathGraphicAttribute\n} from '../../../interface';\nimport { getTheme } from '../../../graphic/theme';\nimport { PATH_NUMBER_TYPE } from '../../../graphic/constants';\nimport { drawPathProxy, fillVisible, runFill, runStroke, strokeVisible } from './utils';\nimport { PathRenderContribution } from './contributions/constants';\nimport { BaseRenderContributionTime } from '../../../common/enums';\nimport { BaseRender } from './base-render';\nimport { mat4Allocate } from '../../../allocator/matrix-allocate';\nimport {\n defaultPathBackgroundRenderContribution,\n defaultPathTextureRenderContribution\n} from './contributions/path-contribution-render';\n\n@injectable()\nexport class DefaultCanvasPathRender extends BaseRender implements IGraphicRender {\n type: 'path';\n numberType: number = PATH_NUMBER_TYPE;\n tempTheme: Required;\n\n constructor(\n @inject(ContributionProvider)\n @named(PathRenderContribution)\n protected readonly pathRenderContribitions: IContributionProvider\n ) {\n super();\n this.builtinContributions = [defaultPathBackgroundRenderContribution, defaultPathTextureRenderContribution];\n this.init(pathRenderContribitions);\n }\n\n drawShape(\n path: IPath,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // const pathAttribute = graphicService.themeService.getCurrentTheme().pathAttribute;\n const pathAttribute = this.tempTheme ?? getTheme(path, params?.theme).path;\n const { x: originX = pathAttribute.x, y: originY = pathAttribute.y } = path.attribute;\n\n const z = this.z ?? 0;\n\n const data = this.valid(path, pathAttribute, fillCb, strokeCb);\n if (!data) {\n return;\n }\n const { fVisible, sVisible, doFill, doStroke } = data;\n\n context.beginPath();\n if (path.pathShape) {\n renderCommandList((path.pathShape as ICustomPath2D).commandList, context, x, y, 1, 1, z);\n } else {\n const path2D = path.attribute.path ?? pathAttribute.path;\n renderCommandList((path2D as ICustomPath2D).commandList, context, x, y, 1, 1, z);\n }\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(path, path.attribute, pathAttribute);\n\n this.beforeRenderStep(\n path,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n pathAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n\n if (doStroke) {\n if (strokeCb) {\n strokeCb(context, path.attribute, pathAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(path, path.attribute, originX - x, originY - y, pathAttribute);\n context.stroke();\n }\n }\n if (doFill) {\n if (fillCb) {\n fillCb(context, path.attribute, pathAttribute);\n } else if (fVisible) {\n context.setCommonStyle(path, path.attribute, originX - x, originY - y, pathAttribute);\n context.fill();\n }\n }\n\n this.afterRenderStep(\n path,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n pathAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n\n draw(path: IPath, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const pathAttribute = getTheme(path, params?.theme).path;\n this.tempTheme = pathAttribute;\n this._draw(path, pathAttribute, false, drawContext, params);\n this.tempTheme = null;\n }\n}\n","import { bindContributionProvider } from '../../../common/contribution-provider';\nimport { ContainerModule } from '../../../common/inversify';\nimport { DefaultBaseInteractiveRenderContribution } from './contributions';\nimport { PathRenderContribution } from './contributions/constants';\nimport { DefaultCanvasPathRender } from './path-render';\nimport { GraphicRender, PathRender } from './symbol';\n\nlet loadPathModule = false;\nexport const pathModule = new ContainerModule(bind => {\n if (loadPathModule) {\n return;\n }\n loadPathModule = true;\n // path 渲染器\n bind(DefaultCanvasPathRender).toSelf().inSingletonScope();\n bind(PathRender).to(DefaultCanvasPathRender).inSingletonScope();\n bind(GraphicRender).toService(PathRender);\n bind(PathRenderContribution).toService(DefaultBaseInteractiveRenderContribution);\n\n // path 渲染器注入contributions\n bindContributionProvider(bind, PathRenderContribution);\n});\n","import {\n inject,\n injectable,\n getTheme,\n PathRender,\n mat4Allocate,\n getScaledStroke,\n PATH_NUMBER_TYPE\n} from '@visactor/vrender-core';\nimport type { IPoint } from '@visactor/vutils';\nimport type {\n IContext2d,\n IPath,\n IMarkAttribute,\n IGraphicAttribute,\n IThemeAttribute,\n IGraphicRender,\n IGraphicPicker,\n IPickParams\n} from '@visactor/vrender-core';\nimport { BasePicker } from './base-picker';\n\n@injectable()\nexport class DefaultCanvasPathPicker extends BasePicker implements IGraphicPicker {\n type: string = 'path';\n numberType: number = PATH_NUMBER_TYPE;\n\n constructor(@inject(PathRender) public readonly canvasRenderer: IGraphicRender) {\n super();\n }\n\n contains(path: IPath, point: IPoint, params?: IPickParams): boolean {\n if (!path.AABBBounds.containsPoint(point)) {\n return false;\n }\n if (path.attribute.pickMode === 'imprecise') {\n return true;\n }\n\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n // const pathAttribute = graphicService.themeService.getCurrentTheme().pathAttribute;\n const pathAttribute = getTheme(path).path;\n\n pickContext.highPerformanceSave();\n const data = this.transform(path, pathAttribute, pickContext);\n const { x, y, z, lastModelMatrix } = data;\n\n let pickPoint = point;\n if (pickContext.camera) {\n pickPoint = point.clone();\n const globalMatrix = path.parent.globalTransMatrix;\n pickPoint.x = globalMatrix.a * point.x + globalMatrix.c * point.y + globalMatrix.e;\n pickPoint.y = globalMatrix.b * point.x + globalMatrix.d * point.y + globalMatrix.f;\n }\n\n this.canvasRenderer.z = z;\n // 详细形状判断\n let picked = false;\n this.canvasRenderer.drawShape(\n path,\n pickContext,\n x,\n y,\n {} as any,\n null,\n (\n context: IContext2d,\n pathAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n picked = context.isPointInPath(pickPoint.x, pickPoint.y);\n return picked;\n },\n (\n context: IContext2d,\n pathAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n const lineWidth = pathAttribute.lineWidth || themeAttribute.lineWidth;\n const pickStrokeBuffer = pathAttribute.pickStrokeBuffer || themeAttribute.pickStrokeBuffer;\n pickContext.lineWidth = getScaledStroke(pickContext, lineWidth + pickStrokeBuffer, pickContext.dpr);\n picked = context.isPointInStroke(pickPoint.x, pickPoint.y);\n return picked;\n }\n );\n this.canvasRenderer.z = 0;\n\n if (pickContext.modelMatrix !== lastModelMatrix) {\n mat4Allocate.free(pickContext.modelMatrix);\n }\n pickContext.modelMatrix = lastModelMatrix;\n\n pickContext.highPerformanceRestore();\n\n return picked;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { CanvasPathPicker, CanvasPickerContribution } from '../constants';\nimport { DefaultCanvasPathPicker } from './path-picker';\n\nlet loadPathPick = false;\nexport const pathCanvasPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadPathPick) {\n return;\n }\n loadPathPick = true;\n // path picker\n bind(CanvasPathPicker).to(DefaultCanvasPathPicker).inSingletonScope();\n bind(CanvasPickerContribution).toService(CanvasPathPicker);\n});\n","import { inject, injectable, getTheme, PathRender, PATH_NUMBER_TYPE } from '@visactor/vrender-core';\nimport type { IPoint } from '@visactor/vutils';\nimport type {\n IContext2d,\n IPath,\n IMarkAttribute,\n IGraphicAttribute,\n IThemeAttribute,\n IGraphicPicker,\n IGraphicRender,\n IPickParams\n} from '@visactor/vrender-core';\n\n@injectable()\nexport class DefaultMathPathPicker implements IGraphicPicker {\n type: string = 'path';\n numberType: number = PATH_NUMBER_TYPE;\n\n constructor(@inject(PathRender) public readonly canvasRenderer: IGraphicRender) {}\n\n contains(path: IPath, point: IPoint, params?: IPickParams): boolean {\n if (!path.AABBBounds.containsPoint(point)) {\n return false;\n }\n if (path.attribute.pickMode === 'imprecise') {\n return true;\n }\n\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n // const pathAttribute = graphicService.themeService.getCurrentTheme().pathAttribute;\n const pathAttribute = getTheme(path).path;\n let { x = pathAttribute.x, y = pathAttribute.y } = path.attribute;\n\n pickContext.highPerformanceSave();\n if (!path.transMatrix.onlyTranslate()) {\n // 性能较差\n x = 0;\n y = 0;\n pickContext.transformFromMatrix(path.transMatrix, true);\n } else {\n const point = path.getOffsetXY(pathAttribute);\n x += point.x;\n y += point.y;\n // 当前context有rotate/scale,重置matrix\n pickContext.setTransformForCurrent();\n }\n\n // 详细形状判断\n let picked = false;\n this.canvasRenderer.drawShape(\n path,\n pickContext,\n x,\n y,\n {} as any,\n null,\n (\n context: IContext2d,\n pathAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n picked = context.isPointInPath(point.x, point.y);\n return picked;\n },\n (\n context: IContext2d,\n pathAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n const lineWidth = pathAttribute.lineWidth || themeAttribute.lineWidth;\n const pickStrokeBuffer = pathAttribute.pickStrokeBuffer || themeAttribute.pickStrokeBuffer;\n pickContext.lineWidth = lineWidth + pickStrokeBuffer;\n picked = context.isPointInStroke(point.x, point.y);\n return picked;\n }\n );\n\n pickContext.highPerformanceRestore();\n\n return picked;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { MathCirclePicker, MathPathPicker, MathPickerContribution, MathPolygonPicker } from '../constants';\nimport { DefaultMathCirclePicker } from './circle-picker';\nimport { DefaultMathPolygonPicker } from './polygon-picker';\nimport { DefaultMathPathPicker } from './path-picker';\n\nlet loadPathPick = false;\nexport const pathMathPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadPathPick) {\n return;\n }\n loadPathPick = true;\n // path picker\n bind(MathPathPicker).to(DefaultMathPathPicker).inSingletonScope();\n bind(MathPickerContribution).toService(MathPathPicker);\n});\n","import { container, pathModule, registerPathGraphic } from '@visactor/vrender-core';\nimport { browser } from './env';\nimport { pathCanvasPickModule } from '../picker/contributions/canvas-picker/path-module';\nimport { pathMathPickModule } from '../picker/contributions/math-picker/path-module';\n\nfunction _registerPath() {\n if (_registerPath.__loaded) {\n return;\n }\n _registerPath.__loaded = true;\n registerPathGraphic();\n container.load(pathModule);\n container.load(browser ? pathCanvasPickModule : pathMathPickModule);\n}\n\n_registerPath.__loaded = false;\n\nexport const registerPath = _registerPath;\n","import { min } from '@visactor/vutils';\nimport type { GraphicType, IFace3d, IRect3d, IRect3dGraphicAttribute } from '../interface';\nimport { Rect } from './rect';\nimport { getTheme } from './theme';\nimport { RECT3D_NUMBER_TYPE } from './constants';\nimport { NOWORK_ANIMATE_ATTR } from './graphic';\n\nconst CUBE_VERTICES = [\n [0, 0, 0],\n [1, 0, 0],\n [1, 1, 0],\n [0, 1, 0],\n [0, 0, 1],\n [1, 0, 1],\n [1, 1, 1],\n [0, 1, 1]\n];\n\nexport class Rect3d extends Rect implements IRect3d {\n type: GraphicType = 'rect3d';\n declare attribute: IRect3dGraphicAttribute;\n\n static NOWORK_ANIMATE_ATTR = NOWORK_ANIMATE_ATTR;\n\n constructor(params: IRect3dGraphicAttribute) {\n super(params);\n this.numberType = RECT3D_NUMBER_TYPE;\n }\n\n findFace(): IFace3d {\n const faces: IFace3d = { polygons: [], vertices: [], edges: [] };\n const rectTheme = getTheme(this).rect3d;\n const { x1, y1, x, y, length = min(rectTheme.width, rectTheme.height) } = this.attribute;\n let { width, height } = this.attribute;\n width = width ?? x1 - x;\n height = height ?? y1 - y;\n for (let i = 0; i < CUBE_VERTICES.length; i++) {\n const v = CUBE_VERTICES[i];\n faces.vertices.push([v[0] * width, v[1] * height, v[2] * length]);\n }\n\n // 上\n faces.polygons.push({ polygon: [0, 1, 5, 4], normal: [0, -1, 0] });\n // 下\n faces.polygons.push({ polygon: [2, 3, 7, 6], normal: [0, 1, 0] });\n // 左\n faces.polygons.push({ polygon: [4, 7, 3, 0], normal: [-1, 0, 0] });\n // 右\n faces.polygons.push({ polygon: [1, 2, 6, 5], normal: [1, 0, 0] });\n // 前\n faces.polygons.push({ polygon: [0, 1, 2, 3], normal: [0, 0, -1] });\n // 后\n faces.polygons.push({ polygon: [4, 5, 6, 7], normal: [0, 0, 1] });\n\n faces.edges = [\n [0, 1],\n [1, 2],\n [2, 3],\n [3, 0],\n [4, 5],\n [5, 6],\n [6, 7],\n [7, 4],\n [0, 4],\n [3, 7],\n [1, 5],\n [2, 6]\n ];\n\n return faces;\n }\n\n getNoWorkAnimateAttr(): Record {\n return Rect3d.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createRect3d(attributes: IRect3dGraphicAttribute): IRect3d {\n return new Rect3d(attributes);\n}\n","import { injectable } from '../../../common/inversify-lite';\nimport { getTheme } from '../../../graphic/theme';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IDirectionLight,\n IFace3d,\n IMarkAttribute,\n IPolygonItem,\n IRect3d,\n IThemeAttribute,\n IGraphicRender,\n IDrawContext,\n IGraphicRenderDrawParams,\n IRenderService\n} from '../../../interface';\nimport { rectFillVisible, rectStrokeVisible, runFill, runStroke } from './utils';\nimport { mat4Allocate } from '../../../allocator/matrix-allocate';\nimport { BaseRender } from './base-render';\nimport { RECT3D_NUMBER_TYPE } from '../../../graphic/constants';\nimport { ColorStore, ColorType } from '../../../color-string';\n@injectable()\nexport class DefaultCanvasRect3dRender extends BaseRender implements IGraphicRender {\n type = 'rect3d';\n numberType: number = RECT3D_NUMBER_TYPE;\n declare z: number;\n\n drawShape(\n rect: IRect3d,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // const rectAttribute = graphicService.themeService.getCurrentTheme().rectAttribute;\n const rectAttribute = getTheme(rect, params?.theme).rect3d;\n const {\n fill = rectAttribute.fill,\n stroke = rectAttribute.stroke,\n x1,\n y1,\n x: originX,\n y: originY,\n opacity = rectAttribute.opacity,\n fillOpacity = rectAttribute.fillOpacity,\n lineWidth = rectAttribute.lineWidth,\n strokeOpacity = rectAttribute.strokeOpacity,\n visible = rectAttribute.visible\n } = rect.attribute;\n let { width, height } = rect.attribute;\n\n width = (width ?? x1 - originX) || 0;\n height = (height ?? y1 - originY) || 0;\n\n const z = this.z ?? 0;\n\n // 不绘制或者透明\n const fVisible = rectFillVisible(opacity, fillOpacity, width, height, fill);\n const sVisible = rectStrokeVisible(opacity, strokeOpacity, width, height);\n const doFill = runFill(fill);\n const doStroke = runStroke(stroke, lineWidth);\n\n if (!(rect.valid && visible)) {\n return;\n }\n\n if (!(doFill || doStroke)) {\n return;\n }\n\n // 如果存在fillCb和strokeCb,那就不直接跳过\n if (!(fVisible || sVisible || fillCb || strokeCb)) {\n return;\n }\n\n const { light, camera } = drawContext.stage || {};\n const face3d = rect.findFace();\n\n if (fill !== false) {\n context.setCommonStyle(rect, rect.attribute, x, y, rectAttribute);\n let fc = fill;\n if (typeof fc !== 'string') {\n fc = 'black';\n }\n this.fill(x, y, z, face3d, fc, context, light, fillCb);\n }\n if (stroke !== false) {\n context.setStrokeStyle(rect, rect.attribute, x, y, rectAttribute);\n this.stroke(x, y, z, face3d, context);\n }\n }\n\n stroke(x: number, y: number, z: number, face3d: IFace3d, context: IContext2d) {\n const vertices = face3d.vertices;\n face3d.edges.forEach(edge => {\n const p1 = vertices[edge[0]];\n const v1 = {\n x: x + p1[0],\n y: y + p1[1],\n z: z + p1[2]\n };\n const p2 = vertices[edge[1]];\n const v2 = {\n x: x + p2[0],\n y: y + p2[1],\n z: z + p2[2]\n };\n context.beginPath();\n context.moveTo(v1.x, v1.y, v1.z);\n context.lineTo(v2.x, v2.y, v2.z);\n context.stroke();\n });\n }\n fill(\n x: number,\n y: number,\n z: number,\n face3d: IFace3d,\n fillColor: string,\n context: IContext2d,\n light: IDirectionLight,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const rgbArray = ColorStore.Get(fillColor as string, ColorType.Color255);\n // 上下左右前后\n // 0,1,2,3,4,5\n const vertices = face3d.vertices;\n // 计算每个顶点的view\n const viewdVerticesZ = vertices.map(v => {\n return context.view(v[0], v[1], v[2])[2];\n });\n // 排序\n const sortFace: { faceIdx: number; polygon: IPolygonItem }[] = [];\n face3d.polygons.forEach((p, i) => {\n sortFace.push({\n faceIdx: i,\n polygon: p\n });\n // 设置ave_z进行排序\n const { polygon, normal } = p;\n\n const z1 = viewdVerticesZ[polygon[0]];\n const z2 = viewdVerticesZ[polygon[1]];\n const z3 = viewdVerticesZ[polygon[2]];\n const z4 = viewdVerticesZ[polygon[3]];\n\n p.ave_z = z1 + z2 + z3 + z4;\n });\n sortFace.sort((a, b) => b.polygon.ave_z - a.polygon.ave_z);\n\n sortFace.forEach(item => {\n const { polygon, normal } = item.polygon;\n\n const p1 = vertices[polygon[0]];\n const p2 = vertices[polygon[1]];\n const p3 = vertices[polygon[2]];\n const p4 = vertices[polygon[3]];\n\n const v1 = {\n x: x + p1[0],\n y: y + p1[1],\n z: z + p1[2]\n };\n const v2 = {\n x: x + p2[0],\n y: y + p2[1],\n z: z + p2[2]\n };\n const v3 = {\n x: x + p3[0],\n y: y + p3[1],\n z: z + p3[2]\n };\n const v4 = {\n x: x + p4[0],\n y: y + p4[1],\n z: z + p4[2]\n };\n context.beginPath();\n context.moveTo(v1.x, v1.y, v1.z);\n context.lineTo(v2.x, v2.y, v2.z);\n context.lineTo(v3.x, v3.y, v3.z);\n context.lineTo(v4.x, v4.y, v4.z);\n context.closePath();\n if (fillCb) {\n fillCb(context, null, null);\n } else {\n context.fillStyle = light ? light.computeColor(normal, rgbArray as any) : fillColor;\n context.fill();\n }\n });\n }\n\n draw(rect: IRect3d, renderService: IRenderService, drawContext: IDrawContext) {\n const rectAttribute = getTheme(rect).rect;\n this._draw(rect, rectAttribute, false, drawContext);\n }\n}\n","import { ContainerModule } from '../../../common/inversify';\nimport { DefaultCanvasRect3dRender } from './rect3d-render';\nimport { GraphicRender, Rect3DRender } from './symbol';\n\nlet loadRect3dModule = false;\nexport const rect3dModule = new ContainerModule(bind => {\n if (loadRect3dModule) {\n return;\n }\n loadRect3dModule = true;\n // rect3d 渲染器\n bind(Rect3DRender).to(DefaultCanvasRect3dRender).inSingletonScope();\n bind(GraphicRender).toService(Rect3DRender);\n});\n","import type { IPoint } from '@visactor/vutils';\nimport { AABBBounds } from '@visactor/vutils';\nimport { inject, injectable, getTheme, mat4Allocate, Rect3DRender, RECT3D_NUMBER_TYPE } from '@visactor/vrender-core';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IRect3d,\n IThemeAttribute,\n IGraphicPicker,\n IGraphicRender,\n IPickParams\n} from '@visactor/vrender-core';\nimport { BasePicker } from './base-picker';\n\nconst _bounds = new AABBBounds();\n\n@injectable()\nexport class DefaultCanvasRect3dPicker extends BasePicker implements IGraphicPicker {\n type: string = 'rect3d';\n numberType: number = RECT3D_NUMBER_TYPE;\n\n constructor(@inject(Rect3DRender) public readonly canvasRenderer: IGraphicRender) {\n super();\n }\n\n contains(rect: IRect3d, point: IPoint, params?: IPickParams): boolean {\n // if (!rect.AABBBounds.containsPoint(point)) {\n // return false;\n // }\n // if (rect.attribute.pickMode === 'imprecise') {\n // return true;\n // }\n\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n // const { rectAttribute } = graphicService.themeService.getCurrentTheme();\n const rectAttribute = getTheme(rect).rect;\n\n pickContext.highPerformanceSave();\n const data = this.transform(rect, rectAttribute, pickContext);\n const { x, y, z, lastModelMatrix } = data;\n\n let pickPoint = point;\n if (pickContext.camera) {\n pickPoint = point.clone();\n const globalMatrix = rect.parent.globalTransMatrix;\n pickPoint.x = globalMatrix.a * point.x + globalMatrix.c * point.y + globalMatrix.e;\n pickPoint.y = globalMatrix.b * point.x + globalMatrix.d * point.y + globalMatrix.f;\n }\n\n this.canvasRenderer.z = z;\n let picked = false;\n this.canvasRenderer.drawShape(\n rect,\n pickContext,\n x,\n y,\n params as any,\n null,\n (\n context: IContext2d,\n arc3dAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n picked = context.isPointInPath(pickPoint.x, pickPoint.y);\n return picked;\n }\n // (\n // context: IContext2d,\n // arc3dAttribute: Partial,\n // themeAttribute: IThemeAttribute\n // ) => {\n // // 选中后面就不需要再走逻辑了\n // if (picked) {\n // return true;\n // }\n // const lineWidth = arc3dAttribute.lineWidth || themeAttribute.lineWidth;\n // pickContext.lineWidth = getScaledStroke(pickContext, lineWidth, pickContext.dpr);\n // picked = context.isPointInStroke(point.x, point.y);\n // return picked;\n // }\n );\n this.canvasRenderer.z = 0;\n\n if (pickContext.modelMatrix !== lastModelMatrix) {\n mat4Allocate.free(pickContext.modelMatrix);\n }\n pickContext.modelMatrix = lastModelMatrix;\n pickContext.highPerformanceRestore();\n return picked; // 无圆角形状判断通过\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { DefaultCanvasArcPicker } from './arc-picker';\nimport { CanvasArcPicker, CanvasPickerContribution, CanvasRect3dPicker, CanvasRectPicker } from '../constants';\nimport { DefaultCanvasRectPicker } from './rect-picker';\nimport { DefaultCanvasRect3dPicker } from './rect3d-picker';\n\nlet loadRect3dPick = false;\nexport const rect3dCanvasPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadRect3dPick) {\n return;\n }\n loadRect3dPick = true;\n // reat3d picker\n bind(CanvasRect3dPicker).to(DefaultCanvasRect3dPicker).inSingletonScope();\n bind(CanvasPickerContribution).toService(CanvasRect3dPicker);\n});\n","import { container, rect3dModule, registerRect3dGraphic } from '@visactor/vrender-core';\nimport { browser } from './env';\nimport { rect3dCanvasPickModule } from '../picker/contributions/canvas-picker/rect3d-module';\n\nfunction _registerRect3d() {\n if (_registerRect3d.__loaded) {\n return;\n }\n _registerRect3d.__loaded = true;\n registerRect3dGraphic();\n container.load(rect3dModule);\n container.load(browser ? rect3dCanvasPickModule : rect3dCanvasPickModule);\n}\n\n_registerRect3d.__loaded = false;\n\nexport const registerRect3d = _registerRect3d;\n","import type { IAABBBounds } from '@visactor/vutils';\nimport { isObject } from '@visactor/vutils';\nimport { BaseRenderContributionTime } from '../../../../common/enums';\nimport type {\n IContext2d,\n IDrawContext,\n IGraphicAttribute,\n IText,\n ITextRenderContribution,\n IThemeAttribute\n} from '../../../../interface';\nimport { DefaultBaseBackgroundRenderContribution } from './base-contribution-render';\nimport { boundsAllocate } from '../../../../allocator/bounds-allocate';\nimport { getTextBounds } from '../../../../graphic';\n\nexport class DefaultTextBackgroundRenderContribution\n extends DefaultBaseBackgroundRenderContribution\n implements ITextRenderContribution\n{\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n\n drawShape(\n graphic: IText,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean\n ) {\n const { backgroundMode = graphicAttribute.backgroundMode, backgroundFit = graphicAttribute.backgroundFit } =\n graphic.attribute;\n let { background } = graphic.attribute;\n if (!background) {\n return;\n }\n let b: IAABBBounds;\n const shouldReCalBounds = isObject(background) && (background as any).background;\n const onlyTranslate = graphic.transMatrix.onlyTranslate();\n if (shouldReCalBounds) {\n const _b = graphic.AABBBounds;\n const x = ((background as any).x ?? _b.x1) + ((background as any).dx ?? 0);\n const y = ((background as any).y ?? _b.y1) + ((background as any).dy ?? 0);\n const w = (background as any).width ?? _b.width();\n const h = (background as any).height ?? _b.height();\n b = boundsAllocate.allocate(x, y, x + w, y + h);\n background = (background as any).background;\n if (!onlyTranslate) {\n const w = b.width();\n const h = b.height();\n b.set(\n ((background as any).x ?? 0) + ((background as any).dx ?? 0),\n ((background as any).y ?? 0) + ((background as any).dy ?? 0),\n w,\n h\n );\n }\n } else {\n b = graphic.AABBBounds;\n if (!onlyTranslate) {\n b.set(0, 0, b.width(), b.height());\n }\n }\n\n if (graphic.backgroundImg && graphic.resources) {\n const res = graphic.resources.get(background as any);\n if (res.state !== 'success' || !res.data) {\n return;\n }\n\n context.highPerformanceSave();\n // 默认应用旋转\n if (!onlyTranslate) {\n // TODO 性能优化\n // const _b = getTextBounds({ ...graphic.attribute, angle: 0, scaleX: 1, scaleY: 1, x: 0, y: 0, dx: 0, dy: 0 });\n // b.copy(_b);\n } else {\n context.setTransformFromMatrix(graphic.parent.globalTransMatrix, true);\n }\n\n context.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute);\n this.doDrawImage(context, res.data, b, backgroundMode, backgroundFit);\n context.highPerformanceRestore();\n context.setTransformForCurrent();\n } else {\n context.highPerformanceSave();\n context.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute);\n context.fillStyle = background as string;\n context.fillRect(b.x1, b.y1, b.width(), b.height());\n context.highPerformanceRestore();\n }\n\n if (shouldReCalBounds) {\n boundsAllocate.free(b);\n }\n }\n}\n\nexport const defaultTextBackgroundRenderContribution = new DefaultTextBackgroundRenderContribution();\n\n// @injectable()\n// export class DefaultTextPopTipRenderContribution\n// extends DefaultBasePopTipRenderContribution\n// implements ITextRenderContribution\n// {\n// time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n// }\n","import { inject, injectable, named } from '../../../common/inversify-lite';\nimport { getTheme } from '../../../graphic/theme';\nimport { TEXT_NUMBER_TYPE } from '../../../graphic/constants';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IThemeAttribute,\n IDrawContext,\n IRenderService,\n IGraphicRender,\n IGraphicRenderDrawParams,\n ITextRenderContribution,\n IContributionProvider\n} from '../../../interface';\nimport { textDrawOffsetX, textLayoutOffsetY } from '../../../common/text';\nimport type { IText, ITextGraphicAttribute } from '../../../interface/graphic/text';\nimport { BaseRender } from './base-render';\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport { TextRenderContribution } from './contributions/constants';\nimport { matrixAllocate } from '../../../allocator/matrix-allocate';\nimport { max } from '@visactor/vutils';\nimport { calculateLineHeight } from '../../../common/utils';\nimport { defaultTextBackgroundRenderContribution } from './contributions/text-contribution-render';\n\n@injectable()\nexport class DefaultCanvasTextRender extends BaseRender implements IGraphicRender {\n type: 'text';\n numberType: number = TEXT_NUMBER_TYPE;\n\n constructor(\n @inject(ContributionProvider)\n @named(TextRenderContribution)\n protected readonly textRenderContribitions: IContributionProvider\n ) {\n super();\n this.builtinContributions = [defaultTextBackgroundRenderContribution as any];\n this.init(textRenderContribitions);\n }\n\n drawShape(\n text: IText,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const textAttribute = getTheme(text, params?.theme).text;\n const {\n text: str,\n underline = textAttribute.underline,\n lineThrough = textAttribute.lineThrough,\n keepDirIn3d = textAttribute.keepDirIn3d,\n direction = textAttribute.direction,\n // lineHeight = textAttribute.lineHeight,\n whiteSpace = textAttribute.whiteSpace,\n fontSize = textAttribute.fontSize,\n verticalMode = textAttribute.verticalMode,\n x: originX = textAttribute.x,\n y: originY = textAttribute.y\n } = text.attribute;\n\n let { textAlign = textAttribute.textAlign, textBaseline = textAttribute.textBaseline } = text.attribute;\n if (!verticalMode && direction === 'vertical') {\n const t = textAlign;\n textAlign = text.getBaselineMapAlign()[textBaseline] ?? ('left' as any);\n textBaseline = text.getAlignMapBaseline()[t] ?? ('top' as any);\n }\n const lineHeight = calculateLineHeight(text.attribute.lineHeight, fontSize) ?? fontSize;\n\n const data = this.valid(text, textAttribute, fillCb, strokeCb);\n if (!data) {\n return;\n }\n const { fVisible, sVisible, doFill, doStroke } = data;\n\n // 文字如果需要变换,那就需要将3dmatrix转成context的2dmatrix\n const transform3dMatrixToContextMatrix = !keepDirIn3d;\n\n const z = this.z || 0;\n\n context.beginPath();\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(text, text.attribute, textAttribute);\n\n this.beforeRenderStep(\n text,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n textAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n\n transform3dMatrixToContextMatrix && this.transformUseContext2d(text, textAttribute, z, context);\n\n const drawText = (t: string, offsetX: number, offsetY: number, direction: number) => {\n let _x = x + offsetX;\n const _y = y + offsetY;\n if (direction) {\n context.highPerformanceSave();\n _x += fontSize;\n const matrix = matrixAllocate.allocate(1, 0, 0, 1, 0, 0);\n // matrix.translate(fontSize, 0);\n matrix.rotateByCenter(Math.PI / 2, _x, _y);\n context.transformFromMatrix(matrix, true);\n matrixAllocate.free(matrix);\n }\n\n if (doStroke) {\n if (strokeCb) {\n strokeCb(context, text.attribute, textAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n context.strokeText(t, _x, _y, z);\n }\n }\n if (doFill) {\n if (fillCb) {\n fillCb(context, text.attribute, textAttribute);\n } else if (fVisible) {\n context.setCommonStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n context.fillText(t, _x, _y, z);\n this.drawUnderLine(underline, lineThrough, text, _x, _y, z, textAttribute, context);\n }\n }\n\n if (direction) {\n context.highPerformanceRestore();\n context.setTransformForCurrent();\n }\n };\n if (text.isMultiLine) {\n context.setTextStyleWithoutAlignBaseline(text.attribute, textAttribute, z);\n if (direction === 'horizontal') {\n const { multilineLayout } = text;\n if (!multilineLayout) {\n context.highPerformanceRestore();\n return;\n } // 如果不存在的话,需要render层自行布局\n const { xOffset, yOffset } = multilineLayout.bbox;\n if (doStroke) {\n if (strokeCb) {\n strokeCb(context, text.attribute, textAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n multilineLayout.lines.forEach(line => {\n context.strokeText(\n line.str,\n (line.leftOffset || 0) + xOffset + x,\n (line.topOffset || 0) + yOffset + y,\n z\n );\n });\n }\n }\n if (doFill) {\n if (fillCb) {\n fillCb(context, text.attribute, textAttribute);\n } else if (fVisible) {\n context.setCommonStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n multilineLayout.lines.forEach(line => {\n context.fillText(line.str, (line.leftOffset || 0) + xOffset + x, (line.topOffset || 0) + yOffset + y, z);\n this.drawMultiUnderLine(\n underline,\n lineThrough,\n text,\n (line.leftOffset || 0) + x, // 中下划线都是从文字左侧开始,因此不需要+xOffset\n (line.topOffset || 0) + yOffset + y,\n z,\n line.width,\n textAttribute,\n context\n );\n });\n }\n }\n } else {\n text.tryUpdateAABBBounds(); // 更新cache\n const cache = text.cache;\n const { verticalList } = cache;\n context.textAlign = 'left';\n context.textBaseline = 'top';\n const totalHeight = lineHeight * verticalList.length;\n let totalW = 0;\n verticalList.forEach(verticalData => {\n const _w = verticalData.reduce((a, b) => a + (b.width || 0), 0);\n totalW = max(_w, totalW);\n });\n let offsetY = 0;\n let offsetX = 0;\n if (textBaseline === 'bottom') {\n offsetX = -totalHeight;\n } else if (textBaseline === 'middle') {\n offsetX = -totalHeight / 2;\n }\n if (textAlign === 'center') {\n offsetY -= totalW / 2;\n } else if (textAlign === 'right') {\n offsetY -= totalW;\n }\n verticalList.forEach((verticalData, i) => {\n const currentW = verticalData.reduce((a, b) => a + (b.width || 0), 0);\n const dw = totalW - currentW;\n let currentOffsetY = offsetY;\n if (textAlign === 'center') {\n currentOffsetY += dw / 2;\n } else if (textAlign === 'right') {\n currentOffsetY += dw;\n }\n verticalData.forEach(item => {\n const { text, width, direction } = item;\n drawText(text, totalHeight - (i + 1) * lineHeight + offsetX, currentOffsetY, direction);\n currentOffsetY += width;\n });\n });\n }\n } else {\n if (direction === 'horizontal') {\n context.setTextStyle(text.attribute, textAttribute, z);\n const t = text.clipedText as string;\n let dy = 0;\n if (lineHeight !== fontSize) {\n if (textBaseline === 'top') {\n dy = (lineHeight - fontSize) / 2;\n } else if (textBaseline === 'middle') {\n // middle do nothing\n } else if (textBaseline === 'bottom') {\n dy = -(lineHeight - fontSize) / 2;\n } else {\n // alphabetic do nothing\n // dy = (lineHeight - fontSize) / 2 - fontSize * 0.79;\n }\n }\n drawText(t, 0, dy, 0);\n } else {\n text.tryUpdateAABBBounds(); // 更新cache\n const cache = text.cache;\n if (cache) {\n context.setTextStyleWithoutAlignBaseline(text.attribute, textAttribute, z);\n const { verticalList } = cache;\n let offsetY = 0;\n const totalW = verticalList[0].reduce((a, b) => a + (b.width || 0), 0);\n let offsetX = 0;\n if (textBaseline === 'bottom') {\n offsetX = -lineHeight;\n } else if (textBaseline === 'middle') {\n offsetX = -lineHeight / 2;\n }\n if (textAlign === 'center') {\n offsetY -= totalW / 2;\n } else if (textAlign === 'right') {\n offsetY -= totalW;\n }\n context.textAlign = 'left';\n context.textBaseline = 'top';\n verticalList[0].forEach(item => {\n const { text, width, direction } = item;\n drawText(text, offsetX, offsetY, direction);\n offsetY += width;\n });\n }\n }\n }\n transform3dMatrixToContextMatrix && this.restoreTransformUseContext2d(text, textAttribute, z, context);\n\n this.afterRenderStep(\n text,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n textAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n\n draw(text: IText, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const textAttribute = getTheme(text, params?.theme).text;\n const { keepDirIn3d = textAttribute.keepDirIn3d } = text.attribute;\n // 文字如果需要变换,那就一定要计算3d矩阵\n const computed3dMatrix = !keepDirIn3d;\n this._draw(text, textAttribute, computed3dMatrix, drawContext, params);\n }\n\n drawUnderLine(\n underline: number,\n lineThrough: number,\n text: IText,\n x: number,\n y: number,\n z: number,\n textAttribute: Required,\n context: IContext2d\n ) {\n if (lineThrough + underline <= 0) {\n return;\n }\n\n const {\n textAlign = textAttribute.textAlign,\n textBaseline = textAttribute.textBaseline,\n fontSize = textAttribute.fontSize,\n fill = textAttribute.fill,\n opacity = textAttribute.opacity,\n fillOpacity = textAttribute.fillOpacity\n } = text.attribute;\n const w = text.clipedWidth;\n const offsetX = textDrawOffsetX(textAlign, w);\n const offsetY = textLayoutOffsetY(textBaseline, fontSize, fontSize);\n const attribute = { lineWidth: 0, stroke: fill, opacity, strokeOpacity: fillOpacity };\n if (underline) {\n attribute.lineWidth = underline;\n context.setStrokeStyle(text, attribute, x, y, textAttribute);\n context.beginPath();\n const dy = y + offsetY + fontSize;\n context.moveTo(x + offsetX, dy, z);\n context.lineTo(x + offsetX + w, dy, z);\n context.stroke();\n }\n if (lineThrough) {\n attribute.lineWidth = lineThrough;\n context.setStrokeStyle(text, attribute, x, y, textAttribute);\n context.beginPath();\n const dy = y + offsetY + fontSize / 2;\n context.moveTo(x + offsetX, dy, z);\n context.lineTo(x + offsetX + w, dy, z);\n context.stroke();\n }\n }\n\n drawMultiUnderLine(\n underline: number,\n lineThrough: number,\n text: IText,\n x: number,\n y: number,\n z: number,\n w: number,\n textAttribute: Required,\n context: IContext2d\n ) {\n if (lineThrough + underline <= 0) {\n return;\n }\n\n const {\n textAlign = textAttribute.textAlign,\n fontSize = textAttribute.fontSize,\n fill = textAttribute.fill,\n opacity = textAttribute.opacity,\n fillOpacity = textAttribute.fillOpacity\n } = text.attribute;\n\n const offsetX = textDrawOffsetX(textAlign, w);\n const offsetY = textLayoutOffsetY('alphabetic', fontSize, fontSize);\n const attribute = { lineWidth: 0, stroke: fill, opacity, strokeOpacity: fillOpacity };\n let deltaY = -3;\n if (underline) {\n attribute.lineWidth = underline;\n context.setStrokeStyle(text, attribute, x, y, textAttribute);\n context.beginPath();\n const dy = y + offsetY + fontSize + deltaY;\n context.moveTo(x + offsetX, dy, z);\n context.lineTo(x + offsetX + w, dy, z);\n context.stroke();\n }\n deltaY = -1;\n if (lineThrough) {\n attribute.lineWidth = lineThrough;\n context.setStrokeStyle(text, attribute, x, y, textAttribute);\n context.beginPath();\n const dy = y + offsetY + fontSize / 2 + deltaY;\n context.moveTo(x + offsetX, dy, z);\n context.lineTo(x + offsetX + w, dy, z);\n context.stroke();\n }\n }\n}\n","import { bindContributionProvider } from '../../../common/contribution-provider';\nimport { ContainerModule } from '../../../common/inversify';\nimport { DefaultCanvasCircleRender } from './circle-render';\nimport { DefaultBaseInteractiveRenderContribution } from './contributions';\nimport { CircleRenderContribution, TextRenderContribution } from './contributions/constants';\nimport { CircleRender, GraphicRender, TextRender } from './symbol';\nimport { DefaultCanvasTextRender } from './text-render';\n\nlet loadTextModule = false;\nexport const textModule = new ContainerModule(bind => {\n if (loadTextModule) {\n return;\n }\n loadTextModule = true;\n // text 渲染器\n bind(TextRender).to(DefaultCanvasTextRender).inSingletonScope();\n bind(GraphicRender).toService(TextRender);\n bind(TextRenderContribution).toService(DefaultBaseInteractiveRenderContribution);\n\n bindContributionProvider(bind, TextRenderContribution);\n});\n","import {\n inject,\n injectable,\n getTheme,\n TextRender,\n textDrawOffsetX,\n textLayoutOffsetY,\n mat4Allocate,\n TEXT_NUMBER_TYPE\n} from '@visactor/vrender-core';\nimport type { IPoint } from '@visactor/vutils';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IText,\n IThemeAttribute,\n IGraphicPicker,\n IGraphicRender,\n IPickParams\n} from '@visactor/vrender-core';\nimport { BasePicker } from './base-picker';\n\n@injectable()\nexport class DefaultCanvasTextPicker extends BasePicker implements IGraphicPicker {\n type: string = 'text';\n numberType: number = TEXT_NUMBER_TYPE;\n\n constructor(@inject(TextRender) public readonly canvasRenderer: IGraphicRender) {\n super();\n }\n\n contains(text: IText, point: IPoint, params?: IPickParams): boolean {\n // const { textAttribute } = graphicService.themeService.getCurrentTheme();\n // const {\n // x = textAttribute.x,\n // y = textAttribute.y,\n // } = text.attribute;\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n const bounds = text.AABBBounds;\n\n if (!pickContext.camera) {\n if (!bounds.containsPoint(point)) {\n return false;\n }\n return true;\n }\n\n // const symbolAttribute = graphicService.themeService.getCurrentTheme().symbolAttribute;\n pickContext.highPerformanceSave();\n const textAttribute = getTheme(text).text;\n\n const { keepDirIn3d = textAttribute.keepDirIn3d } = text.attribute;\n // 文字如果需要变换,那就一定要计算3d矩阵\n const computed3dMatrix = !keepDirIn3d;\n\n const data = this.transform(text, textAttribute, pickContext, computed3dMatrix);\n const { x, y, z, lastModelMatrix } = data;\n\n this.canvasRenderer.z = z;\n let pickPoint = point;\n if (pickContext.camera) {\n pickPoint = point.clone();\n const globalMatrix = text.parent.globalTransMatrix;\n pickPoint.x = globalMatrix.a * point.x + globalMatrix.c * point.y + globalMatrix.e;\n pickPoint.y = globalMatrix.b * point.x + globalMatrix.d * point.y + globalMatrix.f;\n }\n\n // 详细形状判断\n let picked = false;\n this.canvasRenderer.drawShape(\n text,\n pickContext,\n x,\n y,\n {} as any,\n null,\n (\n context: IContext2d,\n symbolAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n const {\n fontSize = textAttribute.fontSize,\n textBaseline = textAttribute.textBaseline,\n textAlign = textAttribute.textAlign\n } = text.attribute;\n // 拾取基于xy的rect\n const bounds = text.AABBBounds;\n const height = bounds.height();\n const width = bounds.width();\n const offsetY = textLayoutOffsetY(textBaseline, height, fontSize);\n const offsetX = textDrawOffsetX(textAlign, width);\n context.rect(offsetX + x, offsetY + y, width, height, z);\n picked = context.isPointInPath(pickPoint.x, pickPoint.y);\n return picked;\n },\n (\n context: IContext2d,\n symbolAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n // if (picked) {\n // return true;\n // }\n // const lineWidth = symbolAttribute.lineWidth || themeAttribute.lineWidth;\n // pickContext.lineWidth = getScaledStroke(pickContext, lineWidth, pickContext.dpr);\n // picked = context.isPointInStroke(pickPoint.x, pickPoint.y);\n return picked;\n }\n );\n\n this.canvasRenderer.z = 0;\n if (pickContext.modelMatrix !== lastModelMatrix) {\n mat4Allocate.free(pickContext.modelMatrix);\n }\n pickContext.modelMatrix = lastModelMatrix;\n pickContext.highPerformanceRestore();\n\n return picked;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { CanvasLinePicker, CanvasPickerContribution, CanvasTextPicker } from '../constants';\nimport { DefaultCanvasLinePicker } from './line-picker';\nimport { DefaultCanvasTextPicker } from './text-picker';\n\nlet loadTextPick = false;\nexport const textCanvasPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadTextPick) {\n return;\n }\n loadTextPick = true;\n // text picker\n bind(CanvasTextPicker).to(DefaultCanvasTextPicker).inSingletonScope();\n bind(CanvasPickerContribution).toService(CanvasTextPicker);\n});\n","import { injectable, TEXT_NUMBER_TYPE } from '@visactor/vrender-core';\nimport type { IPoint } from '@visactor/vutils';\nimport type { IGraphicPicker, IPickParams, IText } from '@visactor/vrender-core';\n\n@injectable()\nexport class DefaultMathTextPicker implements IGraphicPicker {\n type: string = 'text';\n numberType: number = TEXT_NUMBER_TYPE;\n\n contains(text: IText, point: IPoint, params?: IPickParams): boolean {\n if (!text.AABBBounds.containsPoint(point)) {\n return false;\n }\n\n // const { pickContext } = params ?? {};\n // if (!pickContext) {\n // return false;\n // }\n\n // TODO: 详细形状判断\n return true;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { DefaultMathArcPicker } from './arc-picker';\nimport { MathArcPicker, MathPickerContribution, MathTextPicker } from '../constants';\nimport { DefaultMathTextPicker } from './text-picker';\n\nlet loadTextPick = false;\nexport const textMathPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadTextPick) {\n return;\n }\n loadTextPick = true;\n // text picker\n bind(MathTextPicker).to(DefaultMathTextPicker).inSingletonScope();\n bind(MathPickerContribution).toService(MathTextPicker);\n});\n","import { container, registerTextGraphic, textModule } from '@visactor/vrender-core';\nimport { browser } from './env';\nimport { textCanvasPickModule } from '../picker/contributions/canvas-picker/text-module';\nimport { textMathPickModule } from '../picker/contributions/math-picker/text-module';\nfunction _registerText() {\n if (_registerText.__loaded) {\n return;\n }\n _registerText.__loaded = true;\n registerTextGraphic();\n container.load(textModule);\n container.load(browser ? textCanvasPickModule : textMathPickModule);\n}\n\n_registerText.__loaded = false;\n\nexport const registerText = _registerText;\n","// import { IContext2d } from '../../IContext';\nimport type { IContext2d, IRichTextIcon } from '../../interface';\nimport type Line from './line';\nimport { DIRECTION_KEY } from './utils';\n\n/**\n * 部分代码参考 https://github.com/danielearwicker/carota/\n * The MIT License (MIT)\n\n \"Carota\" - Copyright (c) 2013 Daniel Earwicker\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\n// 文字窗口\n// 参考carota\n// https://github.com/danielearwicker/carota/blob/master/src/frame.js\nexport default class Frame {\n left: number;\n top: number;\n bottom: number;\n right: number;\n width: number;\n height: number;\n actualHeight: number;\n ellipsis: boolean | string;\n wordBreak: 'break-word' | 'break-all';\n verticalDirection: 'top' | 'middle' | 'bottom';\n lines: Line[];\n // ctx: IContext2d;\n globalAlign: 'left' | 'center' | 'right';\n globalBaseline: 'top' | 'middle' | 'bottom';\n layoutDirection: 'horizontal' | 'vertical';\n directionKey: { width: string; height: string; left: string; top: string; bottom: string };\n isWidthMax: boolean;\n isHeightMax: boolean;\n\n singleLine: boolean;\n\n icons: Map;\n\n constructor(\n left: number,\n top: number,\n width: number,\n height: number,\n ellipsis: boolean | string,\n wordBreak: 'break-word' | 'break-all',\n verticalDirection: 'top' | 'middle' | 'bottom',\n // ctx: IContext2d,\n globalAlign: 'left' | 'center' | 'right',\n globalBaseline: 'top' | 'middle' | 'bottom',\n layoutDirection: 'horizontal' | 'vertical',\n isWidthMax: boolean,\n isHeightMax: boolean,\n singleLine: boolean,\n icons?: Map\n ) {\n this.left = left;\n this.top = top;\n this.width = width;\n this.height = height;\n this.actualHeight = 0;\n this.bottom = top + height;\n this.right = left + width;\n this.ellipsis = ellipsis;\n this.wordBreak = wordBreak;\n this.verticalDirection = verticalDirection;\n this.lines = [];\n // this.ctx = ctx;\n this.globalAlign = globalAlign;\n this.globalBaseline = globalBaseline;\n this.layoutDirection = layoutDirection;\n this.directionKey = DIRECTION_KEY[this.layoutDirection];\n\n this.isWidthMax = isWidthMax;\n this.isHeightMax = isHeightMax;\n\n this.singleLine = singleLine;\n\n if (icons) {\n icons.clear();\n this.icons = icons;\n } else {\n this.icons = new Map();\n }\n }\n\n draw(\n ctx: IContext2d,\n drawIcon: (icon: IRichTextIcon, context: IContext2d, x: number, y: number, baseline: number) => void\n ) {\n const { width: actualWidth, height: actualHeight } = this.getActualSize();\n const width = this.isWidthMax ? Math.min(this.width, actualWidth) : this.width || actualWidth || 0;\n let height = this.isHeightMax ? Math.min(this.height, actualHeight) : this.height || actualHeight || 0;\n // 1. height 可能受 maxHeight 影响大于 actualHeight 计算出来的实际高度\n // 2. actualHeight 是不加省略内容的高度,可能会大于 height\n // 以上两种情况都可以通过 Math.min 解决\n height = Math.min(height, actualHeight);\n /**\n * 根据 align 和 baseline 进行偏移\n */\n let deltaY = 0;\n switch (this.globalBaseline) {\n case 'top':\n deltaY = 0;\n break;\n case 'middle':\n deltaY = -height / 2;\n break;\n case 'bottom':\n deltaY = -height;\n break;\n default:\n break;\n }\n\n let deltaX = 0;\n switch (this.globalAlign) {\n case 'left':\n deltaX = 0;\n break;\n case 'center':\n deltaX = -width / 2;\n break;\n case 'right':\n deltaX = -width;\n break;\n default:\n break;\n }\n\n let frameHeight = this[this.directionKey.height];\n if (this.singleLine) {\n frameHeight = this.lines[0].height + 1;\n }\n let lastLineTag = false;\n if (this.verticalDirection === 'middle') {\n if (this.actualHeight >= frameHeight && frameHeight !== 0) {\n for (let i = 0; i < this.lines.length; i++) {\n const { top, height } = this.lines[i];\n if (top + height < this[this.directionKey.top] || top + height > this[this.directionKey.top] + frameHeight) {\n return lastLineTag; // 不在展示范围内的line不绘制\n }\n // 判断需要显示省略号且是展示范围内的最后一行\n let lastLine = false;\n if (\n this.ellipsis &&\n this.lines[i + 1] &&\n this.lines[i + 1].top + this.lines[i + 1].height > this[this.directionKey.top] + frameHeight\n ) {\n lastLine = true;\n lastLineTag = true;\n }\n this.lines[i].draw(\n ctx,\n lastLine,\n this.lines[i][this.directionKey.left] + deltaX,\n this.lines[i][this.directionKey.top] + deltaY,\n drawIcon\n );\n }\n } else {\n const detalHeight = Math.floor((frameHeight - this.actualHeight) / 2);\n if (this.layoutDirection === 'vertical') {\n deltaX += detalHeight;\n } else {\n deltaY += detalHeight;\n }\n for (let i = 0; i < this.lines.length; i++) {\n this.lines[i].draw(\n ctx,\n false,\n this.lines[i][this.directionKey.left] + deltaX,\n this.lines[i][this.directionKey.top] + deltaY,\n drawIcon\n );\n }\n }\n\n // top = this.top + (this.height - this.actualHeight) / 2\n } else if (this.verticalDirection === 'bottom' && this.layoutDirection !== 'vertical') {\n for (let i = 0; i < this.lines.length; i++) {\n const { top, height } = this.lines[i];\n const y = frameHeight - this.lines[i].top - this.lines[i].height;\n // if (y + height < this.top || y + height > this.bottom) {\n if (frameHeight === 0) {\n this.lines[i].draw(ctx, false, deltaX, y + deltaY, drawIcon);\n } else if (y + height > this[this.directionKey.top] + frameHeight || y < this[this.directionKey.top]) {\n return lastLineTag; // 不在展示范围内的line不绘制\n } else {\n // 判断需要显示省略号且是展示范围内的最后一行\n let lastLine = false;\n if (this.ellipsis && this.lines[i + 1] && y - this.lines[i + 1].height < this[this.directionKey.top]) {\n lastLine = true;\n lastLineTag = true;\n }\n this.lines[i].draw(ctx, lastLine, deltaX, y + deltaY, drawIcon);\n }\n }\n } else {\n if (\n this.verticalDirection === 'bottom' &&\n this.layoutDirection === 'vertical' &&\n this.singleLine &&\n this.isWidthMax\n ) {\n deltaX += this.lines[0].height + 1;\n }\n for (let i = 0; i < this.lines.length; i++) {\n if (this.verticalDirection === 'bottom' && this.layoutDirection === 'vertical') {\n deltaX -= this.lines[i].height + this.lines[i].top;\n }\n const { top, height } = this.lines[i];\n if (frameHeight === 0) {\n this.lines[i].draw(\n ctx,\n false,\n this.lines[i][this.directionKey.left] + deltaX,\n this.lines[i][this.directionKey.top] + deltaY,\n drawIcon\n );\n } else if (\n top + height < this[this.directionKey.top] ||\n top + height > this[this.directionKey.top] + frameHeight\n ) {\n return lastLineTag; // 不在展示范围内的line不绘制\n } else {\n // 判断需要显示省略号且是展示范围内的最后一行\n let lastLine = false;\n if (\n this.ellipsis &&\n this.lines[i + 1] &&\n this.lines[i + 1].top + this.lines[i + 1].height > this[this.directionKey.top] + frameHeight\n ) {\n lastLine = true;\n lastLineTag = true;\n }\n this.lines[i].draw(\n ctx,\n lastLine,\n this.lines[i][this.directionKey.left] + deltaX,\n this.lines[i][this.directionKey.top] + deltaY,\n drawIcon\n );\n }\n }\n }\n\n return lastLineTag;\n }\n\n getActualSize(): { width: number; height: number } {\n if (this.ellipsis) {\n return this.getActualSizeWidthEllipsis();\n }\n\n return this.getRawActualSize();\n }\n\n getRawActualSize(): { width: number; height: number } {\n let width: number = 0;\n let height: number = 0;\n for (let i = 0; i < this.lines.length; i++) {\n const line = this.lines[i];\n if (line.actualWidth > width) {\n width = line.actualWidth;\n }\n height += line.height;\n }\n\n // return { width, height };\n return {\n width: this.layoutDirection === 'vertical' ? height : width,\n height: this.layoutDirection === 'vertical' ? width : height\n };\n }\n\n getActualSizeWidthEllipsis(): { width: number; height: number } {\n let widthBound: number = 0;\n let heightBound: number = 0;\n\n const { width: actualWidth, height: actualHeight } = this.getRawActualSize();\n const width = this.width || actualWidth || 0;\n let height = this.height || actualHeight || 0;\n // 1. height 可能受 maxHeight 影响大于 actualHeight 计算出来的实际高度\n // 2. actualHeight 是不加省略内容的高度,可能会大于 height\n // 以上两种情况都可以通过 Math.min 解决\n height = Math.min(height, actualHeight);\n /**\n * 根据 align 和 baseline 进行偏移\n */\n const deltaY = 0;\n\n let frameHeight = this[this.directionKey.height];\n if (this.singleLine) {\n frameHeight = this.lines[0].height + 1;\n }\n\n if (this.verticalDirection === 'middle') {\n if (this.actualHeight >= frameHeight && frameHeight !== 0) {\n for (let i = 0; i < this.lines.length; i++) {\n const { top, height } = this.lines[i];\n if (top + height < this[this.directionKey.top] || top + height > this[this.directionKey.top] + frameHeight) {\n // return; // 不在展示范围内的line不绘制\n } else {\n // 判断需要显示省略号且是展示范围内的最后一行\n if (\n this.ellipsis &&\n this.lines[i + 1] &&\n this.lines[i + 1].top + this.lines[i + 1].height > this[this.directionKey.top] + frameHeight\n ) {\n const lineWidth = this.lines[i].getWidthWithEllips();\n if (lineWidth > widthBound) {\n widthBound = lineWidth;\n }\n heightBound += this.lines[i].height;\n } else {\n if (this.lines[i].actualWidth > widthBound) {\n widthBound = this.lines[i].actualWidth;\n }\n heightBound += this.lines[i].height;\n }\n // this.lines[i].draw(ctx, lastLine, deltaX, this.lines[i].top + deltaY);\n }\n }\n } else {\n const detalHeight = Math.floor((frameHeight - this.actualHeight) / 2);\n for (let i = 0; i < this.lines.length; i++) {\n if (this.lines[i].actualWidth > widthBound) {\n widthBound = this.lines[i].actualWidth;\n }\n heightBound += this.lines[i].height;\n }\n }\n\n // top = this.top + (this.height - this.actualHeight) / 2\n } else if (this.verticalDirection === 'bottom') {\n for (let i = 0; i < this.lines.length; i++) {\n const { top, height } = this.lines[i];\n const y = frameHeight - this.lines[i].top - this.lines[i].height;\n // if (y + height < this.top || y + height > this.bottom) {\n if (frameHeight === 0) {\n if (this.lines[i].actualWidth > widthBound) {\n widthBound = this.lines[i].actualWidth;\n }\n heightBound += this.lines[i].height;\n } else if (y + height > this[this.directionKey.top] + frameHeight || y < this[this.directionKey.top]) {\n // return; // 不在展示范围内的line不绘制\n } else {\n // 判断需要显示省略号且是展示范围内的最后一行\n const lastLine = false;\n if (this.ellipsis && this.lines[i + 1] && y - this.lines[i + 1].height < this[this.directionKey.top]) {\n const lineWidth = this.lines[i].getWidthWithEllips();\n if (lineWidth > widthBound) {\n widthBound = lineWidth;\n }\n heightBound += this.lines[i].height;\n } else {\n if (this.lines[i].actualWidth > widthBound) {\n widthBound = this.lines[i].actualWidth;\n }\n heightBound += this.lines[i].height;\n }\n }\n }\n } else {\n for (let i = 0; i < this.lines.length; i++) {\n const { top, height } = this.lines[i];\n if (frameHeight === 0) {\n if (this.lines[i].actualWidth > widthBound) {\n widthBound = this.lines[i].actualWidth;\n }\n heightBound += this.lines[i].height;\n } else if (\n top + height < this[this.directionKey.top] ||\n top + height > this[this.directionKey.top] + frameHeight\n ) {\n // return; // 不在展示范围内的line不绘制\n } else {\n // 判断需要显示省略号且是展示范围内的最后一行\n const lastLine = false;\n if (\n this.ellipsis &&\n this.lines[i + 1] &&\n this.lines[i + 1].top + this.lines[i + 1].height > this[this.directionKey.top] + frameHeight\n ) {\n const lineWidth = this.lines[i].getWidthWithEllips();\n if (lineWidth > widthBound) {\n widthBound = lineWidth;\n }\n heightBound += this.lines[i].height;\n } else {\n if (this.lines[i].actualWidth > widthBound) {\n widthBound = this.lines[i].actualWidth;\n }\n heightBound += this.lines[i].height;\n }\n }\n }\n }\n\n return {\n width: this.layoutDirection === 'vertical' ? heightBound : widthBound,\n height: this.layoutDirection === 'vertical' ? widthBound : heightBound\n };\n }\n}\n","import { calculateLineHeight } from '../../common/utils';\nimport type { IContext2d, IRichTextParagraphCharacter } from '../../interface';\nimport { measureTextCanvas, applyFillStyle, applyStrokeStyle, getStrByWithCanvas } from './utils';\n\n/**\n * 部分代码参考 https://github.com/danielearwicker/carota/\n * The MIT License (MIT)\n\n \"Carota\" - Copyright (c) 2013 Daniel Earwicker\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\n// 文字段\n// 参考carota\n// https://github.com/danielearwicker/carota/blob/master/src/text.js\nexport default class Paragraph {\n text: string;\n ascent: number;\n descent: number;\n width: number;\n height: number;\n lineHeight: number;\n fontSize: number;\n length: number;\n newLine: boolean;\n character: IRichTextParagraphCharacter;\n left: number;\n top: number;\n // rotate?: number;\n direction?: 'horizontal' | 'vertical';\n // bounds?: Bounds;\n widthOrigin?: number;\n heightOrigin?: number;\n textBaseline?: CanvasTextBaseline;\n\n ellipsis: 'normal' | 'add' | 'replace' | 'hide';\n ellipsisWidth: number;\n ellipsisOtherParagraphWidth: number;\n verticalEllipsis?: boolean;\n\n constructor(text: string, newLine: boolean, character: IRichTextParagraphCharacter) {\n // 测量文字\n this.fontSize = character.fontSize || 16;\n this.textBaseline = character.textBaseline || 'alphabetic';\n\n // 处理行高:\n // lineHeight为数字时,大于fontSize取lineHeight,小于fontSize时取fontSize\n // lineHeight不为数字时,统一认为lineHeight为'normal',值取1.2 * fontSize\n const lineHeight = calculateLineHeight(character.lineHeight, this.fontSize);\n if (typeof lineHeight === 'number') {\n this.lineHeight = lineHeight > this.fontSize ? lineHeight : this.fontSize;\n } else {\n this.lineHeight = Math.floor(1.2 * this.fontSize);\n }\n\n this.height = this.lineHeight;\n\n const { ascent, height, descent, width } = measureTextCanvas(text, character);\n\n let halfDetaHeight = 0;\n let deltaAscent = 0;\n let deltaDescent = 0;\n if (this.height > height) {\n // measureTextCanvas测量出的是纯文字高度,this.height是考虑行高后的高度\n // 如果this.height > height,将超过的高度平均分配到ascent和descent上\n halfDetaHeight = (this.height - height) / 2;\n deltaAscent = Math.ceil(halfDetaHeight);\n deltaDescent = Math.floor(halfDetaHeight);\n }\n\n if (this.textBaseline === 'top') {\n this.ascent = halfDetaHeight;\n this.descent = height - halfDetaHeight;\n } else if (this.textBaseline === 'bottom') {\n this.ascent = height - halfDetaHeight;\n this.descent = halfDetaHeight;\n } else if (this.textBaseline === 'middle') {\n this.ascent = this.height / 2;\n this.descent = this.height / 2;\n } else {\n this.ascent = ascent + deltaAscent;\n this.descent = descent + deltaDescent;\n }\n\n this.length = text.length;\n this.width = width || 0;\n this.text = text || '';\n this.newLine = newLine || false;\n this.character = character;\n\n this.left = 0;\n this.top = 0;\n\n this.ellipsis = 'normal';\n this.ellipsisWidth = 0;\n this.ellipsisOtherParagraphWidth = 0;\n\n // 处理旋转\n if (character.direction === 'vertical') {\n this.direction = character.direction;\n this.widthOrigin = this.width;\n this.heightOrigin = this.height;\n // const bounds = new Bounds();\n // bounds.set(0, 0, this.width, this.height);\n // bounds.rotate(Math.PI / 2, this.width / 2, this.height / 2);\n // this.bounds = bounds;\n // this.width = bounds.width();\n // this.height = bounds.height();\n this.width = this.heightOrigin;\n this.height = this.widthOrigin;\n this.lineHeight = this.height;\n }\n }\n\n updateWidth() {\n const { width } = measureTextCanvas(this.text, this.character);\n this.width = width;\n if (this.direction === 'vertical') {\n this.widthOrigin = this.width;\n this.width = this.heightOrigin;\n this.height = this.widthOrigin;\n }\n }\n\n draw(ctx: IContext2d, baseline: number, deltaLeft: number, isLineFirst: boolean, textAlign: string) {\n let text = this.text;\n let left = this.left + deltaLeft;\n baseline += this.top;\n let direction = this.direction;\n\n if (this.verticalEllipsis) {\n text = '...';\n direction = 'vertical';\n baseline -= this.ellipsisWidth / 2;\n } else if (this.ellipsis === 'hide') {\n return;\n } else if (this.ellipsis === 'add') {\n text += '...';\n\n if (textAlign === 'right') {\n left -= this.ellipsisWidth;\n }\n } else if (this.ellipsis === 'replace') {\n // 找到需要截断的字符长度\n // const index = getStrByWith(text, this.width - this.ellipsisWidth + this.ellipsisOtherParagraphWidth, this.style, text.length - 1);\n const index = getStrByWithCanvas(\n text,\n (direction === 'vertical' ? this.height : this.width) - this.ellipsisWidth + this.ellipsisOtherParagraphWidth,\n this.character,\n text.length - 1\n );\n text = text.slice(0, index);\n text += '...';\n\n if (textAlign === 'right') {\n const { width } = measureTextCanvas(this.text.slice(index), this.character);\n if (direction === 'vertical') {\n // baseline -= this.ellipsisWidth - width;\n } else {\n left -= this.ellipsisWidth - width;\n }\n }\n }\n\n // prepareContext(ctx);\n switch (this.character.script) {\n case 'super':\n baseline -= this.ascent * (1 / 3);\n break;\n case 'sub':\n baseline += this.descent / 2;\n break;\n }\n\n // if (isLineFirst) {\n // const result = regFirstSpace.exec(text);\n // if (result?.index !== 0) {\n // text = text.slice(result?.index);\n // }\n // }\n\n // 处理旋转\n if (direction === 'vertical') {\n ctx.save();\n ctx.rotateAbout(Math.PI / 2, left, baseline);\n ctx.translate(-(this.heightOrigin as number) || -this.lineHeight / 2, -this.descent / 2);\n ctx.translate(left, baseline);\n left = 0;\n baseline = 0;\n }\n\n if (this.character.stroke) {\n applyStrokeStyle(ctx, this.character);\n ctx.strokeText(text, left, baseline);\n }\n\n // 下面绘制underline和line-through时需要设置FillStyle\n applyFillStyle(ctx, this.character);\n\n if (this.character.fill) {\n ctx.fillText(text, left, baseline);\n }\n\n if (this.character.fill) {\n if (typeof this.character.lineThrough === 'boolean' || typeof this.character.underline === 'boolean') {\n if (this.character.underline) {\n ctx.fillRect(\n left,\n 1 + baseline,\n this.widthOrigin || this.width,\n this.character.fontSize ? Math.max(1, Math.floor(this.character.fontSize / 10)) : 1\n );\n }\n if (this.character.lineThrough) {\n ctx.fillRect(\n left,\n 1 + baseline - this.ascent / 2,\n this.widthOrigin || this.width,\n this.character.fontSize ? Math.max(1, Math.floor(this.character.fontSize / 10)) : 1\n );\n }\n } else if (this.character.textDecoration === 'underline') {\n ctx.fillRect(\n left,\n 1 + baseline,\n this.widthOrigin || this.width,\n this.character.fontSize ? Math.max(1, Math.floor(this.character.fontSize / 10)) : 1\n );\n } else if (this.character.textDecoration === 'line-through') {\n ctx.fillRect(\n left,\n 1 + baseline - this.ascent / 2,\n this.widthOrigin || this.width,\n this.character.fontSize ? Math.max(1, Math.floor(this.character.fontSize / 10)) : 1\n );\n }\n }\n\n if (direction === 'vertical') {\n ctx.restore();\n }\n }\n\n getWidthWithEllips(direction: string): number {\n let text = this.text;\n // const direction = this.direction;\n const width = direction === 'vertical' ? this.height : this.width;\n // const height = direction === 'vertical' ? this.width: this.height;\n\n if (this.ellipsis === 'hide') {\n return width;\n } else if (this.ellipsis === 'add') {\n return width + this.ellipsisWidth;\n } else if (this.ellipsis === 'replace') {\n // 找到需要截断的字符长度\n // const index = getStrByWith(text, width - this.ellipsisWidth + this.ellipsisOtherParagraphWidth, this.style, text.length - 1);\n const index = getStrByWithCanvas(\n text,\n width - this.ellipsisWidth + this.ellipsisOtherParagraphWidth,\n this.character,\n text.length - 1\n );\n text = text.slice(0, index);\n text += '...';\n\n const { width: measureWidth } = measureTextCanvas(this.text.slice(index), this.character);\n return width + this.ellipsisWidth - measureWidth;\n }\n return width;\n }\n}\n\nexport function seperateParagraph(paragraph: Paragraph, index: number) {\n const text1 = paragraph.text.slice(0, index);\n const text2 = paragraph.text.slice(index);\n const p1 = new Paragraph(text1, paragraph.newLine, paragraph.character);\n const p2 = new Paragraph(text2, true, paragraph.character);\n\n return [p1, p2];\n}\n","import type { AABBBounds } from '@visactor/vutils';\nimport { isArray } from '@visactor/vutils';\nimport type { ICustomPath2D, IRichTextIcon, IRichTextIconGraphicAttribute } from '../../interface';\nimport { Image } from '../image';\nimport { DefaultImageAttribute } from '../config';\nimport { parsePadding } from '../../common/utils';\n\n// export const IMAGE_NUMBER_TYPE = genNumberType();\n\nexport class RichTextIcon extends Image implements IRichTextIcon {\n // type: 'richtext-icon' = 'richtext-icon';\n declare attribute: IRichTextIconGraphicAttribute;\n richtextId?: string;\n // 全局坐标,供外部用户pick后使用\n globalX?: number;\n globalY?: number;\n _x: number = 0;\n _y: number = 0;\n _hovered: boolean = false;\n _marginArray: [number, number, number, number] = [0, 0, 0, 0];\n\n constructor(params: IRichTextIconGraphicAttribute) {\n super(params);\n\n if (params.backgroundShowMode === 'always') {\n this._hovered = true;\n }\n\n if (params.margin) {\n const marginArray = parsePadding(params.margin);\n if (typeof marginArray === 'number') {\n this._marginArray = [marginArray, marginArray, marginArray, marginArray];\n } else {\n this._marginArray = marginArray;\n }\n }\n\n this.onBeforeAttributeUpdate = (val: any, attributes: any, key: null | string | string[]) => {\n if ((isArray(key) && key.indexOf('margin') !== -1) || key === 'margin') {\n if (attributes.margin) {\n const marginArray = parsePadding(attributes.margin);\n if (typeof marginArray === 'number') {\n this._marginArray = [marginArray, marginArray, marginArray, marginArray];\n } else {\n this._marginArray = marginArray;\n }\n } else {\n this._marginArray = [0, 0, 0, 0];\n }\n }\n return undefined;\n };\n }\n animationBackUps?: { from: Record; to: Record } | undefined;\n incrementalAt?: number | undefined;\n toCustomPath?: (() => ICustomPath2D) | undefined;\n\n get width(): number {\n return (this.attribute.width ?? 0) + this._marginArray[1] + this._marginArray[3];\n }\n\n get height(): number {\n return (this.attribute.height ?? 0) + this._marginArray[0] + this._marginArray[2];\n }\n\n protected tryUpdateAABBBounds(): AABBBounds {\n if (!this.shouldUpdateAABBBounds()) {\n return this._AABBBounds;\n }\n\n this.doUpdateAABBBounds();\n\n // 扩大范围\n const { width = DefaultImageAttribute.width, height = DefaultImageAttribute.height } = this.attribute;\n const { backgroundWidth = width, backgroundHeight = height } = this.attribute;\n const expandX = (backgroundWidth - width) / 2;\n const expandY = (backgroundHeight - height) / 2;\n this._AABBBounds.expand([0, expandX * 2, expandY * 2, 0]);\n\n return this._AABBBounds;\n }\n\n setHoverState(hovered: boolean) {\n if (this.attribute.backgroundShowMode === 'hover' && this._hovered !== hovered) {\n this._hovered = hovered;\n }\n }\n}\n","// import { IContext2d } from '../../IContext';\nimport type { IContext2d, IRichTextIcon } from '../../interface';\nimport { RichTextIcon } from './icon';\nimport Paragraph from './paragraph';\nimport { DIRECTION_KEY, measureTextCanvas, regFirstSpace } from './utils';\n\n/**\n * 部分代码参考 https://github.com/danielearwicker/carota/\n * The MIT License (MIT)\n\n \"Carota\" - Copyright (c) 2013 Daniel Earwicker\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\n// 行\n// 参考carota\n// https://github.com/danielearwicker/carota/blob/master/src/line.js\nexport default class Line {\n left: number;\n top: number;\n width: number;\n height: number;\n baseline: number;\n ascent: number;\n descent: number;\n paragraphs: (Paragraph | RichTextIcon)[];\n actualWidth: number;\n blankWidth: number;\n textAlign: string;\n direction: 'horizontal' | 'vertical';\n directionKey: { width: string; height: string; left: string; x: string; y: string };\n\n constructor(\n left: number,\n width: number,\n baseline: number,\n ascent: number,\n descent: number,\n lineBuffer: (Paragraph | RichTextIcon)[],\n direction: 'horizontal' | 'vertical',\n isWidthMax: boolean\n ) {\n this.left = left;\n this.width = width;\n this.baseline = baseline;\n this.ascent = ascent;\n this.descent = descent;\n // this.height = ascent + descent;\n this.top = baseline - ascent;\n this.paragraphs = lineBuffer.map(p => p);\n this.textAlign =\n (this.paragraphs[0] instanceof RichTextIcon\n ? this.paragraphs[0].attribute.textAlign\n : this.paragraphs[0].character.textAlign) || 'left'; // 对齐方式选择第一个paragraph属性\n this.direction = direction;\n this.directionKey = DIRECTION_KEY[this.direction];\n\n this.actualWidth = 0;\n let maxHeight = 0;\n this.paragraphs.forEach((word, index) => {\n // 每行中第一个字符不能是空格\n if (index === 0 && word instanceof Paragraph) {\n const result = regFirstSpace.exec(word.text);\n if (result?.index !== 0) {\n word.text = word.text.slice(result?.index);\n word.updateWidth();\n }\n }\n this.actualWidth += word[this.directionKey.width];\n maxHeight = Math.max(word[this.directionKey.height], maxHeight);\n });\n this.height = maxHeight;\n\n this.blankWidth = !isWidthMax ? this.width - this.actualWidth : 0;\n\n this.calcOffset(width, isWidthMax);\n }\n\n calcOffset(width: number, isWidthMax: boolean) {\n // 处理对齐方式,计算左侧偏移距离和字符之间间距\n const directionKey = this.directionKey;\n const maxHeight = this.height;\n let x = this.left;\n let spacing = 0;\n if (this.actualWidth < width && !isWidthMax) {\n switch (this.textAlign) {\n case 'right':\n x = width - this.actualWidth;\n break;\n case 'center':\n x = (width - this.actualWidth) / 2;\n break;\n case 'justify':\n if (this.paragraphs.length < 2) {\n // 只有一个paragraph两端对齐居中显示\n x = (width - this.actualWidth) / 2;\n } else {\n spacing = (width - this.actualWidth) / (this.paragraphs.length - 1);\n }\n break;\n }\n }\n\n this.paragraphs.map(function (paragraph) {\n if (paragraph instanceof RichTextIcon) {\n // paragraph.setAttribute(directionKey.x, x);\n paragraph['_' + directionKey.x] = x;\n x += paragraph[directionKey.width] + spacing;\n // 处理纵向对齐\n paragraph['_' + directionKey.y] =\n paragraph.attribute.textBaseline === 'top'\n ? 0\n : paragraph.attribute.textBaseline === 'bottom'\n ? maxHeight - paragraph.height\n : (maxHeight - paragraph.height) / 2;\n } else {\n paragraph[directionKey.left] = x;\n x += paragraph[directionKey.width] + spacing;\n }\n });\n }\n\n draw(\n ctx: IContext2d,\n lastLine: boolean,\n x: number,\n y: number,\n drawIcon: (icon: IRichTextIcon, context: IContext2d, x: number, y: number, baseline: number) => void\n ) {\n if (lastLine) {\n // 处理省略号\n let otherParagraphWidth = 0;\n for (let i = this.paragraphs.length - 1; i >= 0; i--) {\n const paragraph = this.paragraphs[i];\n if (paragraph instanceof RichTextIcon) {\n break; // todo: 处理最后为图标,显示省略号的情况\n }\n if (this.direction === 'vertical' && paragraph.direction !== 'vertical') {\n paragraph.verticalEllipsis = true;\n break;\n }\n // const { width } = measureText('...', paragraph.style);\n const { width } = measureTextCanvas('...', paragraph.character);\n const ellipsisWidth = width || 0;\n if (ellipsisWidth <= this.blankWidth + otherParagraphWidth) {\n // 省略号可以直接接在后面paragraph\n paragraph.ellipsis = 'add';\n\n break;\n } else if (ellipsisWidth <= this.blankWidth + otherParagraphWidth + paragraph.width) {\n // 省略号需要替换paragraph中的字符\n paragraph.ellipsis = 'replace';\n paragraph.ellipsisWidth = ellipsisWidth;\n paragraph.ellipsisOtherParagraphWidth = this.blankWidth + otherParagraphWidth;\n\n break;\n } else {\n // 省略号需要的width大于paragraph的width,隐藏paragraph,向前搜索\n paragraph.ellipsis = 'hide';\n otherParagraphWidth += paragraph.width;\n }\n }\n }\n\n // 正常绘制\n this.paragraphs.map((paragraph, index) => {\n if (paragraph instanceof RichTextIcon) {\n // 更新icon位置\n paragraph.setAttributes({\n x: x + paragraph._x,\n y: y + paragraph._y\n });\n\n // 绘制icon\n drawIcon(paragraph, ctx, x + paragraph._x, y + paragraph._y, this.ascent);\n return;\n }\n paragraph.draw(ctx, y + this.ascent, x, index === 0, this.textAlign);\n });\n }\n\n getWidthWithEllips() {\n // 处理省略号\n let otherParagraphWidth = 0;\n for (let i = this.paragraphs.length - 1; i >= 0; i--) {\n const paragraph = this.paragraphs[i];\n if (paragraph instanceof RichTextIcon) {\n break; // todo: 处理最后为图标,显示省略号的情况\n }\n\n const { width } = measureTextCanvas('...', paragraph.character);\n const ellipsisWidth = width || 0;\n if (ellipsisWidth <= this.blankWidth + otherParagraphWidth) {\n // 省略号可以直接接在后面paragraph\n paragraph.ellipsis = 'add';\n paragraph.ellipsisWidth = ellipsisWidth;\n break;\n } else if (ellipsisWidth <= this.blankWidth + otherParagraphWidth + paragraph.width) {\n // 省略号需要替换paragraph中的字符\n paragraph.ellipsis = 'replace';\n paragraph.ellipsisWidth = ellipsisWidth;\n paragraph.ellipsisOtherParagraphWidth = this.blankWidth + otherParagraphWidth;\n\n break;\n } else {\n // 省略号需要的width大于paragraph的width,隐藏paragraph,向前搜索\n paragraph.ellipsis = 'hide';\n otherParagraphWidth += paragraph.width;\n }\n }\n\n let width = 0;\n // 正常绘制\n this.paragraphs.map((paragraph, index) => {\n if (paragraph instanceof RichTextIcon) {\n width += paragraph.width; // todo: 处理direction\n } else {\n width += paragraph.getWidthWithEllips(this.direction);\n }\n });\n\n return width;\n }\n}\n","import Line from './line';\nimport type Frame from './frame';\nimport type Paragraph from './paragraph';\nimport { seperateParagraph } from './paragraph';\nimport { DIRECTION_KEY, getStrByWithCanvas } from './utils';\nimport { RichTextIcon } from './icon';\n\n/**\n * 部分代码参考 https://github.com/danielearwicker/carota/\n * The MIT License (MIT)\n\n \"Carota\" - Copyright (c) 2013 Daniel Earwicker\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\n// 布局器\n// 参考carota\n// https://github.com/danielearwicker/carota/blob/master/src/wrap.js\nexport default class Wrapper {\n frame: Frame;\n\n lineWidth: number;\n width: number;\n height: number;\n y: number;\n maxAscent: number;\n maxDescent: number;\n maxAscentForBlank: number;\n maxDescentForBlank: number;\n lineBuffer: (Paragraph | RichTextIcon)[];\n direction: 'horizontal' | 'vertical';\n directionKey: { width: string; height: string };\n\n constructor(frame: Frame) {\n this.frame = frame;\n this.width = this.frame.width;\n this.height = this.frame.height;\n\n this.lineWidth = 0;\n this.y = this.frame.top;\n this.maxAscent = 0;\n this.maxDescent = 0;\n // 空字符串测量出的Ascent和Descent和文字不一致(空字符串测量结果ascent和descent一半一半),需要特殊处理\n this.maxAscentForBlank = 0;\n this.maxDescentForBlank = 0;\n this.lineBuffer = [];\n\n this.direction = frame.layoutDirection;\n this.directionKey = DIRECTION_KEY[this.direction];\n }\n\n // 不满一行,存储\n store(paragraph: Paragraph | RichTextIcon) {\n if (paragraph instanceof RichTextIcon) {\n this.frame.icons.set(paragraph.richtextId, paragraph);\n this.lineBuffer.push(paragraph);\n this.lineWidth += paragraph[this.directionKey.width];\n\n // 处理icon textBaseline ascent descent\n let iconAscent = 0;\n let iconDescent = 0;\n if (paragraph.attribute.textBaseline === 'top') {\n iconAscent = 0;\n iconDescent = paragraph.height;\n } else if (paragraph.attribute.textBaseline === 'bottom') {\n iconAscent = paragraph.height;\n iconDescent = 0;\n } else {\n iconAscent = paragraph.height / 2;\n iconDescent = paragraph.height / 2;\n }\n this.maxAscent = Math.max(this.maxAscent, iconAscent);\n this.maxDescent = Math.max(this.maxDescent, iconDescent);\n } else {\n this.lineBuffer.push(paragraph);\n if (paragraph.text.length !== 0) {\n this.lineWidth += paragraph[this.directionKey.width];\n this.maxAscent = Math.max(this.maxAscent, paragraph.ascent);\n this.maxDescent = Math.max(this.maxDescent, paragraph.descent);\n } else {\n this.maxAscentForBlank = Math.max(this.maxAscentForBlank, paragraph.ascent);\n this.maxDescentForBlank = Math.max(this.maxDescentForBlank, paragraph.descent);\n }\n }\n }\n\n // 满一行,生成line\n send() {\n if (this.lineBuffer.length === 0) {\n return;\n }\n // 当一行中有文字和空白时,不考虑空白的ascent和descent;如果只有空白(\\n引起的空行),取空白部分的ascent和descent\n const maxAscent = this.maxAscent === 0 ? this.maxAscentForBlank : this.maxAscent;\n const maxDescent = this.maxDescent === 0 ? this.maxDescentForBlank : this.maxDescent;\n const line = new Line(\n this.frame.left,\n this[this.directionKey.width],\n this.y + maxAscent,\n maxAscent,\n maxDescent,\n this.lineBuffer,\n this.direction,\n this.direction === 'horizontal' ? this.frame.isWidthMax : this.frame.isHeightMax\n );\n this.frame.lines.push(line);\n this.frame.actualHeight += line.height;\n\n // this.y += maxAscent + maxDescent;\n this.y += line.height;\n\n this.lineBuffer.length = 0;\n this.lineWidth = this.maxAscent = this.maxDescent = this.maxAscentForBlank = this.maxDescentForBlank = 0;\n }\n\n // 处理paragraph\n deal(paragraph: Paragraph | RichTextIcon) {\n if (paragraph instanceof RichTextIcon) {\n if (\n (this.direction === 'horizontal' && this.width === 0) ||\n (this.direction === 'vertical' && this.height === 0)\n ) {\n // width为0时,宽度不设限制,不主动换行\n this.store(paragraph);\n } else {\n if (this.lineWidth + paragraph[this.directionKey.width] <= this[this.directionKey.width]) {\n this.store(paragraph);\n } else if (this.lineBuffer.length === 0) {\n this.store(paragraph);\n this.send();\n } else {\n this.send();\n this.deal(paragraph);\n }\n }\n\n return;\n }\n\n // 可能会出现宽度为负的情况,此时不处理数据\n if (typeof this.width !== 'number' || this.width < 0) {\n return;\n }\n\n if (paragraph.newLine) {\n // 需要换行前,先完成上一行绘制\n this.send();\n }\n\n if (paragraph.text.length === 0) {\n return;\n } // 换行符分割出的Paragraph不进入line\n\n if ((this.direction === 'horizontal' && this.width === 0) || (this.direction === 'vertical' && this.height === 0)) {\n // width为0时,宽度不设限制,不主动换行\n this.store(paragraph);\n } else {\n // // width为有效值时,按照宽度限制,主动换行\n // if (this.lineWidth + paragraph.width <= this.width) {\n // this.store(paragraph);\n // } else if (this.lineWidth === this.width) {\n // this.send();\n // // this.store(paragraph);\n // this.deal(paragraph);\n // } else {\n // this.cut(paragraph);\n // }\n if (this.lineWidth + paragraph[this.directionKey.width] <= this[this.directionKey.width]) {\n this.store(paragraph);\n } else if (this.lineWidth === this[this.directionKey.width]) {\n this.send();\n this.deal(paragraph);\n } else {\n this.cut(paragraph);\n }\n }\n }\n\n // 文字超长,按需截断\n cut(paragraph: Paragraph) {\n // if (this.direction === 'vertical' && this.lineBuffer.length) {\n // // 纵排不做paragraph内截断\n // this.send();\n // this.deal(paragraph);\n // return;\n // } else if (this.direction === 'vertical') {\n // // 超长不处理?\n // this.store(paragraph);\n // this.send();\n // return;\n // }\n const availableWidth = this[this.directionKey.width] - this.lineWidth || 0;\n const guessIndex = Math.ceil((availableWidth / paragraph[this.directionKey.width]) * paragraph.length) || 0;\n // const index = getStrByWith(paragraph.text, availableWidth, paragraph.style, guessIndex, true);\n const index = getStrByWithCanvas(\n paragraph.text,\n availableWidth,\n paragraph.character,\n guessIndex,\n this.frame.wordBreak === 'break-word'\n );\n if (index !== 0) {\n const [p1, p2] = seperateParagraph(paragraph, index);\n this.store(p1);\n this.deal(p2);\n } else if (this.lineBuffer.length !== 0) {\n // 当前行无法容纳,转下一行处理\n this.send();\n this.deal(paragraph);\n }\n // 宽度过低,无法截断(容不下第一个字符的宽度),不处理\n }\n}\n","import type { AABBBounds, OBBBounds } from '@visactor/vutils';\nimport type {\n IRichText,\n IRichTextCharacter,\n RichTextGlobalAlignType,\n RichTextGlobalBaselineType,\n RichTextVerticalDirection,\n RichTextWordBreak,\n IRichTextGraphicAttribute,\n IRichTextImageCharacter,\n IRichTextParagraphCharacter,\n IStage,\n ILayer,\n IRichTextIcon,\n EventPoint\n} from '../interface';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { DefaultRichTextAttribute } from './config';\nimport Frame from './richtext/frame';\nimport Paragraph from './richtext/paragraph';\nimport Wrapper from './richtext/wrapper';\nimport { getTheme } from './theme';\nimport { RichTextIcon } from './richtext/icon';\nimport type { FederatedMouseEvent } from '../event';\nimport { application } from '../application';\nimport { parsePadding } from '../common/utils';\nimport { RICHTEXT_NUMBER_TYPE } from './constants';\n\nconst RICHTEXT_UPDATE_TAG_KEY = [\n 'width',\n 'height',\n 'ellipsis',\n 'wordBreak',\n 'verticalDirection',\n 'maxHeight',\n 'maxWidth',\n 'textAlign',\n 'textBaseline',\n 'textConfig',\n 'layoutDirection',\n ...GRAPHIC_UPDATE_TAG_KEY\n];\n\nexport class RichText extends Graphic implements IRichText {\n type: 'richtext' = 'richtext';\n\n _frameCache: Frame; // 富文本布局画布\n _currentHoverIcon: IRichTextIcon | null = null;\n\n static NOWORK_ANIMATE_ATTR = {\n ellipsis: 1,\n wordBreak: 1,\n verticalDirection: 1,\n textAlign: 1,\n textBaseline: 1,\n textConfig: 1,\n layoutDirection: 1,\n ...NOWORK_ANIMATE_ATTR\n };\n\n constructor(params?: IRichTextGraphicAttribute) {\n super(params);\n this.numberType = RICHTEXT_NUMBER_TYPE;\n }\n\n get width(): number {\n return this.attribute.width ?? DefaultRichTextAttribute.width;\n }\n set width(w: number) {\n if (this.attribute.width === w) {\n return;\n }\n this.attribute.width = w;\n this.addUpdateShapeAndBoundsTag();\n }\n get height(): number {\n return this.attribute.height ?? DefaultRichTextAttribute.height;\n }\n set height(h: number) {\n if (this.attribute.height === h) {\n return;\n }\n this.attribute.height = h;\n this.addUpdateShapeAndBoundsTag();\n }\n get maxWidth(): number | undefined {\n return this.attribute.maxWidth;\n }\n set maxWidth(mw: number | undefined) {\n if (this.attribute.maxWidth === mw) {\n return;\n }\n this.attribute.maxWidth = mw;\n this.addUpdateShapeAndBoundsTag();\n }\n get maxHeight(): number | undefined {\n return this.attribute.maxHeight;\n }\n set maxHeight(mh: number | undefined) {\n if (this.attribute.maxHeight === mh) {\n return;\n }\n this.attribute.maxHeight = mh;\n this.addUpdateShapeAndBoundsTag();\n }\n get ellipsis(): boolean | string {\n return this.attribute.ellipsis ?? DefaultRichTextAttribute.ellipsis;\n }\n set ellipsis(e: boolean | string) {\n if (this.attribute.ellipsis === e) {\n return;\n }\n this.attribute.ellipsis = e;\n this.addUpdateShapeAndBoundsTag();\n }\n get wordBreak(): RichTextWordBreak {\n return this.attribute.wordBreak ?? DefaultRichTextAttribute.wordBreak;\n }\n set wordBreak(wb: RichTextWordBreak) {\n if (this.attribute.wordBreak === wb) {\n return;\n }\n this.attribute.wordBreak = wb;\n this.addUpdateShapeAndBoundsTag();\n }\n get verticalDirection(): RichTextVerticalDirection {\n return this.attribute.verticalDirection ?? DefaultRichTextAttribute.verticalDirection;\n }\n set verticalDirection(vd: RichTextVerticalDirection) {\n if (this.attribute.verticalDirection === vd) {\n return;\n }\n this.attribute.verticalDirection = vd;\n this.addUpdateShapeAndBoundsTag();\n }\n get textAlign(): RichTextGlobalAlignType {\n return this.attribute.textAlign ?? DefaultRichTextAttribute.textAlign;\n }\n set textAlign(align: RichTextGlobalAlignType) {\n if (this.attribute.textAlign === align) {\n return;\n }\n this.attribute.textAlign = align;\n this.addUpdateShapeAndBoundsTag();\n }\n get textBaseline(): RichTextGlobalBaselineType {\n return this.attribute.textBaseline ?? DefaultRichTextAttribute.textBaseline;\n }\n set textBaseline(baseline: RichTextGlobalBaselineType) {\n if (this.attribute.textBaseline === baseline) {\n return;\n }\n this.attribute.textBaseline = baseline;\n this.addUpdateShapeAndBoundsTag();\n }\n get textConfig(): IRichTextCharacter[] {\n return this.attribute.textConfig ?? DefaultRichTextAttribute.textConfig;\n }\n set textConfig(config: IRichTextCharacter[]) {\n this.attribute.textConfig = config;\n this.addUpdateShapeAndBoundsTag();\n }\n\n protected doUpdateAABBBounds(): AABBBounds {\n const richTextTheme = getTheme(this).richtext;\n this._AABBBounds.setValue(Infinity, Infinity, -Infinity, -Infinity);\n const attribute = this.attribute;\n const bounds = application.graphicService.updateRichTextAABBBounds(\n attribute,\n getTheme(this).richtext,\n this._AABBBounds,\n this\n ) as AABBBounds;\n\n const { boundsPadding = richTextTheme.boundsPadding } = attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray);\n }\n\n this.clearUpdateBoundTag();\n return bounds;\n }\n\n protected tryUpdateOBBBounds(): OBBBounds {\n throw new Error('暂不支持');\n }\n\n getDefaultAttribute(name: string) {\n return DefaultRichTextAttribute[name];\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, RICHTEXT_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, RICHTEXT_UPDATE_TAG_KEY);\n }\n getFrameCache(): Frame {\n if (this.shouldUpdateShape()) {\n this.doUpdateFrameCache();\n this.clearUpdateShapeTag();\n }\n return this._frameCache;\n }\n doUpdateFrameCache() {\n // 1. 测量,生成paragraph\n const {\n textConfig = [],\n maxWidth,\n maxHeight,\n width,\n height,\n ellipsis,\n wordBreak,\n verticalDirection,\n textAlign,\n textBaseline,\n layoutDirection,\n singleLine\n } = this.attribute;\n const paragraphs: (Paragraph | RichTextIcon)[] = [];\n\n for (let i = 0; i < textConfig.length; i++) {\n if ('image' in textConfig[i]) {\n const config = textConfig[i] as IRichTextImageCharacter;\n // 直接创建icon Mark\n const iconCache =\n config.id && this._frameCache && this._frameCache.icons && this._frameCache.icons.get(config.id);\n if (iconCache) {\n paragraphs.push(iconCache as RichTextIcon);\n } else {\n const icon = new RichTextIcon(config);\n icon.successCallback = () => {\n this.addUpdateBoundTag();\n this.stage?.renderNextFrame();\n };\n icon.richtextId = config.id;\n paragraphs.push(icon);\n }\n } else if ((textConfig[i] as IRichTextParagraphCharacter).text.includes('\\n')) {\n // 如果有文字内有换行符,将该段文字切为多段,并在后一段加入newLine标记\n const textParts = (textConfig[i] as IRichTextParagraphCharacter).text.split('\\n');\n for (let j = 0; j < textParts.length; j++) {\n paragraphs.push(new Paragraph(textParts[j], j !== 0, textConfig[i] as IRichTextParagraphCharacter));\n }\n } else {\n paragraphs.push(\n new Paragraph(\n (textConfig[i] as IRichTextParagraphCharacter).text,\n false,\n textConfig[i] as IRichTextParagraphCharacter\n )\n );\n }\n }\n\n // 2. 布局,生成frame\n // const frameHeight =\n // typeof maxHeight === 'number' && (!height || height > maxHeight) // height = 0或height>maxHeight,使用maxHeight布局\n // ? maxHeight\n // : height;\n // const frameWidth =\n // typeof maxWidth === 'number' && (!width || width > maxWidth) // height = 0或height>maxWidth,使用maxWidth布局\n // ? maxWidth\n // : width;\n\n const maxWidthFinite = typeof maxWidth === 'number' && Number.isFinite(maxWidth) && maxWidth > 0;\n const maxHeightFinite = typeof maxHeight === 'number' && Number.isFinite(maxHeight) && maxHeight > 0;\n\n const richTextWidthEnable =\n typeof width === 'number' &&\n Number.isFinite(width) &&\n width > 0 &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (!maxWidthFinite || width <= maxWidth);\n const richTextHeightEnable =\n typeof height === 'number' &&\n Number.isFinite(height) &&\n height > 0 &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (!maxHeightFinite || height <= maxHeight);\n\n const frameWidth = richTextWidthEnable ? width : maxWidthFinite ? maxWidth : 0;\n const frameHeight = richTextHeightEnable ? height : maxHeightFinite ? maxHeight : 0;\n\n const frame = new Frame(\n 0,\n 0,\n frameWidth || 0,\n frameHeight || 0,\n ellipsis,\n wordBreak,\n verticalDirection,\n textAlign,\n textBaseline,\n layoutDirection || 'horizontal',\n // typeof maxWidth === 'number' && (!width || width > maxWidth),\n // typeof maxHeight === 'number' && (!height || height > maxHeight),\n !richTextWidthEnable && maxWidthFinite,\n !richTextHeightEnable && maxHeightFinite,\n singleLine || false,\n this._frameCache?.icons\n );\n const wrapper = new Wrapper(frame);\n for (let i = 0; i < paragraphs.length; i++) {\n wrapper.deal(paragraphs[i]);\n }\n\n wrapper.send(); // 最后一行手动输出\n\n // 如果对应的配置宽度不可用,那么需要额外进行一次对齐\n const directionEnable = frame.layoutDirection === 'horizontal' ? richTextWidthEnable : richTextHeightEnable;\n if (!directionEnable) {\n // 使用实际宽度\n const frameSize = frame.getActualSizeWidthEllipsis();\n let offsetSize = frame.layoutDirection === 'horizontal' ? frameSize.width : frameSize.height;\n // 如果最大值可用\n if (frame.layoutDirection === 'horizontal' ? maxWidthFinite : maxHeightFinite) {\n // 取2者中的较小值\n offsetSize = Math.min(\n offsetSize,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n frame.layoutDirection === 'horizontal' ? maxWidth : maxHeight\n );\n }\n\n frame.lines.forEach(function (l) {\n l.calcOffset(offsetSize, false);\n });\n }\n\n this._frameCache = frame;\n\n // this.bindIconEvent();\n }\n\n clone() {\n return new RichText({ ...this.attribute });\n }\n\n setStage(stage?: IStage, layer?: ILayer) {\n super.setStage(stage, layer);\n const frameCache = this.getFrameCache();\n // for (let i = 0; i < frameCache.icons.length; i++) {\n // const icon = frameCache.icons[i];\n // icon.setStage(stage, layer);\n // }\n frameCache.icons.forEach(icon => {\n icon.setStage(stage, layer);\n });\n }\n\n // richtext绑定icon交互事件,供外部调用\n bindIconEvent() {\n this.addEventListener('pointermove', (e: FederatedMouseEvent) => {\n const pickedIcon = this.pickIcon(e.global);\n if (pickedIcon && pickedIcon === this._currentHoverIcon) {\n // do nothing\n } else if (pickedIcon) {\n this._currentHoverIcon?.setHoverState(false);\n this._currentHoverIcon = pickedIcon;\n this._currentHoverIcon.setHoverState(true);\n this.stage?.setCursor(pickedIcon.attribute.cursor);\n this.stage?.renderNextFrame();\n } else if (!pickedIcon && this._currentHoverIcon) {\n this._currentHoverIcon.setHoverState(false);\n this._currentHoverIcon = null;\n this.stage?.setCursor();\n // console.log('setCursor()');\n\n this.stage?.renderNextFrame();\n }\n });\n\n this.addEventListener('pointerleave', (e: FederatedMouseEvent) => {\n if (this._currentHoverIcon) {\n this._currentHoverIcon.setHoverState(false);\n this._currentHoverIcon = null;\n this.stage?.setCursor();\n this.stage?.renderNextFrame();\n }\n });\n }\n\n pickIcon(point: EventPoint): IRichTextIcon | undefined {\n const frameCache = this.getFrameCache();\n const { e: x, f: y } = this.globalTransMatrix;\n // for (let i = 0; i < frameCache.icons.length; i++) {\n // const icon = frameCache.icons[i];\n // if (icon.containsPoint(point.x - x, point.y - y)) {\n // return icon;\n // }\n // }\n let pickIcon: IRichTextIcon | undefined;\n frameCache.icons.forEach(icon => {\n if (icon.AABBBounds.containsPoint({ x: point.x - x, y: point.y - y })) {\n pickIcon = icon;\n\n pickIcon.globalX = (pickIcon.attribute.x ?? 0) + x;\n pickIcon.globalY = (pickIcon.attribute.y ?? 0) + y;\n }\n });\n\n return pickIcon;\n }\n\n getNoWorkAnimateAttr(): Record {\n return RichText.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createRichText(attributes: IRichTextGraphicAttribute): IRichText {\n return new RichText(attributes);\n}\n","import { injectable } from '../../../common/inversify-lite';\nimport { createRectPath } from '../../../common/shape/rect';\nimport { getTheme } from '../../../graphic/theme';\nimport { RICHTEXT_NUMBER_TYPE } from '../../../graphic/constants';\nimport type {\n IContext2d,\n IRichText,\n IRichTextIcon,\n IDrawContext,\n IRenderService,\n IGraphicRender\n} from '../../../interface';\nimport { fillVisible } from './utils';\nimport { BaseRender } from './base-render';\nimport { defaultTextBackgroundRenderContribution } from './contributions/text-contribution-render';\n\n@injectable()\nexport class DefaultCanvasRichTextRender extends BaseRender implements IGraphicRender {\n type: 'richtext';\n numberType: number = RICHTEXT_NUMBER_TYPE;\n\n constructor() {\n super();\n this.builtinContributions = [defaultTextBackgroundRenderContribution as any];\n this.init();\n }\n\n drawShape(richtext: IRichText, context: IContext2d, x: number, y: number, drawContext: IDrawContext) {\n const richtextAttribute = getTheme(richtext).richtext;\n const {\n strokeOpacity = richtextAttribute.strokeOpacity,\n opacity = richtextAttribute.opacity,\n fillOpacity = richtextAttribute.fillOpacity,\n visible = richtextAttribute.visible\n } = richtext.attribute;\n\n if (!(richtext.valid && visible)) {\n return;\n }\n\n const fVisible = fillVisible(opacity, fillOpacity, true);\n const sVisible = fillVisible(opacity, strokeOpacity, true);\n if (!fVisible) {\n return;\n }\n\n context.translate(x, y);\n this.beforeRenderStep(\n richtext,\n context,\n x,\n y,\n fVisible,\n sVisible,\n fVisible,\n sVisible,\n richtextAttribute,\n drawContext\n );\n const frame = richtext.getFrameCache();\n frame.draw(context, this.drawIcon);\n\n this.afterRenderStep(\n richtext,\n context,\n x,\n y,\n fVisible,\n sVisible,\n fVisible,\n sVisible,\n richtextAttribute,\n drawContext\n );\n }\n\n drawIcon(icon: IRichTextIcon, context: IContext2d, x: number, y: number, baseline: number) {\n const richtextIconAttribute = getTheme(icon).richtextIcon;\n\n const {\n width = richtextIconAttribute.width,\n height = richtextIconAttribute.height,\n opacity = richtextIconAttribute.opacity,\n image: url,\n backgroundFill = richtextIconAttribute.backgroundFill,\n // backgroundFillColor = richtextIconAttribute.backgroundFillColor,\n backgroundFillOpacity = richtextIconAttribute.backgroundFillOpacity,\n backgroundStroke = richtextIconAttribute.backgroundStroke,\n // backgroundStrokeColor = richtextIconAttribute.backgroundStrokeColor,\n backgroundStrokeOpacity = richtextIconAttribute.backgroundStrokeOpacity,\n backgroundRadius = richtextIconAttribute.backgroundRadius,\n margin\n } = icon.attribute;\n\n const { backgroundWidth = width, backgroundHeight = height } = icon.attribute;\n\n if (margin) {\n x += icon._marginArray[3];\n y += icon._marginArray[0];\n }\n\n // y -= height / 2 - baseline;\n\n // 绘制background\n if (icon._hovered) {\n const expandX = (backgroundWidth - width) / 2;\n const expandY = (backgroundHeight - height) / 2;\n\n if (backgroundRadius === 0) {\n // 不需要处理圆角\n context.beginPath();\n context.rect(x - expandX, y - expandY, backgroundWidth, backgroundHeight);\n } else {\n context.beginPath();\n createRectPath(context, x - expandX, y - expandY, backgroundWidth, backgroundHeight, backgroundRadius);\n }\n if (backgroundFill) {\n // context.setCommonStyle(rect, rect.attribute, x, y, rectAttribute);\n context.globalAlpha = backgroundFillOpacity;\n context.fillStyle = backgroundFill as string;\n context.fill();\n }\n if (backgroundStroke) {\n // context.setStrokeStyle(rect, rect.attribute, x, y, rectAttribute);\n context.globalAlpha = backgroundStrokeOpacity;\n context.strokeStyle = backgroundStroke as string;\n context.stroke();\n }\n }\n\n // 绘制图标\n const res = url && icon?.resources?.get(url);\n if (!res || res.state !== 'success') {\n return;\n }\n // context.setCommonStyle(icon, icon.attribute, x, y, iconAttribute);\n context.globalAlpha = opacity;\n context.drawImage(res.data, x, y, width, height);\n }\n\n draw(richtext: IRichText, renderService: IRenderService, drawContext: IDrawContext) {\n const richtextAttribute = getTheme(richtext).richtext;\n this._draw(richtext, richtextAttribute, false, drawContext);\n }\n}\n","import { ContainerModule } from '../../../common/inversify';\nimport { DefaultCanvasRichTextRender } from './richtext-render';\nimport { GraphicRender, RichTextRender } from './symbol';\n\nlet loadRichtextModule = false;\nexport const richtextModule = new ContainerModule(bind => {\n if (loadRichtextModule) {\n return;\n }\n loadRichtextModule = true;\n // richtext渲染器\n bind(RichTextRender).to(DefaultCanvasRichTextRender).inSingletonScope();\n bind(GraphicRender).toService(RichTextRender);\n});\n","import type { IPoint } from '@visactor/vutils';\nimport { inject, injectable, RICHTEXT_NUMBER_TYPE, RichTextRender } from '@visactor/vrender-core';\nimport type { IGraphicPicker, IGraphicRender, IPickParams, IRichText } from '@visactor/vrender-core';\n@injectable()\nexport class DefaultCanvasRichTextPicker implements IGraphicPicker {\n type: string = 'richtext';\n numberType: number = RICHTEXT_NUMBER_TYPE;\n\n constructor(@inject(RichTextRender) public readonly canvasRenderer: IGraphicRender) {}\n\n contains(richtext: IRichText, point: IPoint, params?: IPickParams): boolean {\n if (richtext.AABBBounds.containsPoint(point)) {\n return true;\n }\n return false;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { CanvasPickerContribution, CanvasRichTextPicker } from '../constants';\nimport { DefaultCanvasRichTextPicker } from './richtext-picker';\n\nlet loadRichtextPick = false;\nexport const richtextCanvasPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadRichtextPick) {\n return;\n }\n loadRichtextPick = true;\n // richtext picker\n bind(CanvasRichTextPicker).to(DefaultCanvasRichTextPicker).inSingletonScope();\n bind(CanvasPickerContribution).toService(CanvasRichTextPicker);\n});\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { MathImagePicker } from '../constants';\nimport { DefaultMathImagePicker } from './image-picker';\n\nlet loadRichTextPick = false;\nexport const richTextMathPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadRichTextPick) {\n return;\n }\n loadRichTextPick = true;\n // glyph picker\n bind(MathImagePicker).to(DefaultMathImagePicker).inSingletonScope();\n bind(DefaultMathImagePicker).toService(MathImagePicker);\n});\n","import { container, registerRichtextGraphic, richtextModule } from '@visactor/vrender-core';\nimport { browser } from './env';\nimport { richtextCanvasPickModule } from '../picker/contributions/canvas-picker/richtext-module';\nimport { richTextMathPickModule } from '../picker/contributions/math-picker/richtext-module';\n\nfunction _registerRichtext() {\n if (_registerRichtext.__loaded) {\n return;\n }\n _registerRichtext.__loaded = true;\n registerRichtextGraphic();\n container.load(richtextModule);\n container.load(browser ? richtextCanvasPickModule : richTextMathPickModule);\n}\n\n_registerRichtext.__loaded = false;\n\nexport const registerRichtext = _registerRichtext;\n","import type { IPointLike } from '@visactor/vutils';\nimport type { IPath2D } from '../interface';\n\n/**\n * 绘制闭合的常规多边形\n * TODO polygon 图元的xy属性没有意义\n * @param path\n * @param points\n * @param x\n * @param y\n */\nexport function drawPolygon(path: IPath2D, points: IPointLike[], x: number, y: number) {\n path.moveTo(points[0].x + x, points[0].y + y);\n for (let i = 1; i < points.length; i++) {\n path.lineTo(points[i].x + x, points[i].y + y);\n }\n}\n\n/**\n * algorithm detail see: https://stackoverflow.com/a/24780108\n */\nexport function drawRoundedPolygon(\n path: IPath2D,\n points: IPointLike[],\n x: number,\n y: number,\n cornerRadius: number | number[],\n closePath: boolean = true\n) {\n if (points.length < 3) {\n drawPolygon(path, points, x, y);\n return;\n }\n\n let startI = 0;\n let endI = points.length - 1;\n if (!closePath) {\n startI += 1;\n endI -= 1;\n path.moveTo(points[0].x + x, points[0].y + y);\n }\n for (let i = startI; i <= endI; i++) {\n const p1 = points[i === 0 ? endI : (i - 1) % points.length];\n const angularPoint = points[i % points.length];\n const p2 = points[(i + 1) % points.length];\n\n //Vector 1\n const dx1 = angularPoint.x - p1.x;\n const dy1 = angularPoint.y - p1.y;\n\n //Vector 2\n const dx2 = angularPoint.x - p2.x;\n const dy2 = angularPoint.y - p2.y;\n\n //Angle between vector 1 and vector 2 divided by 2\n const angle = (Math.atan2(dy1, dx1) - Math.atan2(dy2, dx2)) / 2;\n\n // The length of segment between angular point and the\n // points of intersection with the circle of a given radius\n const tan = Math.abs(Math.tan(angle));\n\n // get config radius\n let radius = Array.isArray(cornerRadius) ? cornerRadius[i % points.length] ?? 0 : cornerRadius;\n let segment = radius / tan;\n\n //Check the segment\n const length1 = getLength(dx1, dy1);\n const length2 = getLength(dx2, dy2);\n\n const length = Math.min(length1, length2);\n\n if (segment > length) {\n segment = length;\n radius = length * tan;\n }\n\n // Points of intersection are calculated by the proportion between\n // the coordinates of the vector, length of vector and the length of the segment.\n const p1Cross = getProportionPoint(angularPoint, segment, length1, dx1, dy1);\n const p2Cross = getProportionPoint(angularPoint, segment, length2, dx2, dy2);\n\n // Calculation of the coordinates of the circle\n // center by the addition of angular vectors.\n const dx = angularPoint.x * 2 - p1Cross.x - p2Cross.x;\n const dy = angularPoint.y * 2 - p1Cross.y - p2Cross.y;\n\n const L = getLength(dx, dy);\n const d = getLength(segment, radius);\n\n const circlePoint = getProportionPoint(angularPoint, d, L, dx, dy);\n\n //StartAngle and EndAngle of arc\n let startAngle = Math.atan2(p1Cross.y - circlePoint.y, p1Cross.x - circlePoint.x);\n const endAngle = Math.atan2(p2Cross.y - circlePoint.y, p2Cross.x - circlePoint.x);\n\n //Sweep angle\n let sweepAngle = endAngle - startAngle;\n\n //Some additional checks\n if (sweepAngle < 0) {\n startAngle = endAngle;\n sweepAngle = -sweepAngle;\n }\n\n if (sweepAngle > Math.PI) {\n sweepAngle = sweepAngle - Math.PI;\n }\n\n if (i === 0) {\n path.moveTo(p1Cross.x + x, p1Cross.y + y);\n } else {\n path.lineTo(p1Cross.x + x, p1Cross.y + y);\n }\n\n if (sweepAngle) {\n path.arcTo(angularPoint.x + x, angularPoint.y + y, p2Cross.x + x, p2Cross.y + y, radius);\n }\n\n path.lineTo(p2Cross.x + x, p2Cross.y + y);\n }\n\n if (!closePath) {\n path.lineTo(points[endI + 1].x + x, points[endI + 1].y + y);\n }\n}\n\nfunction getLength(dx: number, dy: number) {\n return Math.sqrt(dx * dx + dy * dy);\n}\n\nfunction getProportionPoint(point: IPointLike, segment: number, length: number, dx: number, dy: number) {\n const factor = segment / length;\n\n return {\n x: point.x - dx * factor,\n y: point.y - dy * factor\n };\n}\n","import { isArray } from '@visactor/vutils';\nimport { inject, injectable, named } from '../../../common/inversify-lite';\nimport { getTheme } from '../../../graphic/theme';\nimport { POLYGON_NUMBER_TYPE } from '../../../graphic/constants';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IPolygon,\n IThemeAttribute,\n IGraphicRender,\n IPolygonRenderContribution,\n IContributionProvider,\n IDrawContext,\n IGraphicRenderDrawParams,\n IRenderService\n} from '../../../interface';\nimport { drawPolygon, drawRoundedPolygon } from '../../../common/polygon';\nimport { drawPathProxy, fillVisible, runFill, runStroke, strokeVisible } from './utils';\nimport { PolygonRenderContribution } from './contributions/constants';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport { BaseRenderContributionTime } from '../../../common/enums';\nimport { BaseRender } from './base-render';\nimport {\n defaultPolygonBackgroundRenderContribution,\n defaultPolygonTextureRenderContribution\n} from './contributions/polygon-contribution-render';\n\n@injectable()\nexport class DefaultCanvasPolygonRender extends BaseRender implements IGraphicRender {\n type: 'polygon';\n numberType: number = POLYGON_NUMBER_TYPE;\n\n constructor(\n @inject(ContributionProvider)\n @named(PolygonRenderContribution)\n protected readonly polygonRenderContribitions: IContributionProvider\n ) {\n super();\n this.builtinContributions = [defaultPolygonBackgroundRenderContribution, defaultPolygonTextureRenderContribution];\n this.init(polygonRenderContribitions);\n }\n\n drawShape(\n polygon: IPolygon,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // const polygonAttribute = graphicService.themeService.getCurrentTheme().polygonAttribute;\n const polygonAttribute = getTheme(polygon, params?.theme).polygon;\n const {\n points = polygonAttribute.points,\n cornerRadius = polygonAttribute.cornerRadius,\n x: originX = polygonAttribute.x,\n y: originY = polygonAttribute.y,\n closePath = polygonAttribute.closePath\n } = polygon.attribute;\n\n const data = this.valid(polygon, polygonAttribute, fillCb, strokeCb);\n if (!data) {\n return;\n }\n const { fVisible, sVisible, doFill, doStroke } = data;\n\n context.beginPath();\n\n if ((cornerRadius as number) <= 0 || (isArray(cornerRadius) && (cornerRadius).every(num => num === 0))) {\n drawPolygon(context.camera ? context : context.nativeContext, points, x, y);\n } else {\n // FIXME: type\n drawRoundedPolygon(context.camera ? context : context.nativeContext, points, x, y, cornerRadius, closePath);\n }\n // polygon 默认闭合\n closePath && context.closePath();\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(polygon, polygon.attribute, polygonAttribute);\n\n this.beforeRenderStep(\n polygon,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n polygonAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n\n if (doFill) {\n if (fillCb) {\n fillCb(context, polygon.attribute, polygonAttribute);\n } else if (fVisible) {\n // 存在fill\n context.setCommonStyle(polygon, polygon.attribute, originX - x, originY - y, polygonAttribute);\n context.fill();\n }\n }\n if (doStroke) {\n if (strokeCb) {\n strokeCb(context, polygon.attribute, polygonAttribute);\n } else if (sVisible) {\n // 存在stroke\n context.setStrokeStyle(polygon, polygon.attribute, originX - x, originY - y, polygonAttribute);\n context.stroke();\n }\n }\n\n this.afterRenderStep(\n polygon,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n polygonAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n\n draw(polygon: IPolygon, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const polygonAttribute = getTheme(polygon, params?.theme).polygon;\n this._draw(polygon, polygonAttribute, false, drawContext, params);\n }\n}\n","import { bindContributionProvider } from '../../../common/contribution-provider';\nimport { ContainerModule } from '../../../common/inversify';\nimport { DefaultBaseInteractiveRenderContribution } from './contributions';\nimport { PathRenderContribution, PolygonRenderContribution } from './contributions/constants';\nimport { DefaultCanvasPathRender } from './path-render';\nimport { DefaultCanvasPolygonRender } from './polygon-render';\nimport { GraphicRender, PathRender, PolygonRender } from './symbol';\n\nlet loadPolygonModule = false;\nexport const polygonModule = new ContainerModule(bind => {\n if (loadPolygonModule) {\n return;\n }\n loadPolygonModule = true;\n // polygon渲染器\n bind(PolygonRender).to(DefaultCanvasPolygonRender).inSingletonScope();\n bind(GraphicRender).toService(PolygonRender);\n bind(PolygonRenderContribution).toService(DefaultBaseInteractiveRenderContribution);\n\n // polygon 渲染器注入contributions\n bindContributionProvider(bind, PolygonRenderContribution);\n});\n","import {\n inject,\n injectable,\n getTheme,\n PolygonRender,\n POLYGON_NUMBER_TYPE,\n getScaledStroke\n} from '@visactor/vrender-core';\nimport type { IPoint } from '@visactor/vutils';\nimport type {\n IContext2d,\n IMarkAttribute,\n IGraphicAttribute,\n IThemeAttribute,\n IPolygon,\n IGraphicPicker,\n IGraphicRender,\n IPickParams\n} from '@visactor/vrender-core';\n\n@injectable()\nexport class DefaultCanvasPolygonPicker implements IGraphicPicker {\n type: string = 'polygon';\n numberType: number = POLYGON_NUMBER_TYPE;\n\n constructor(@inject(PolygonRender) public readonly canvasRenderer: IGraphicRender) {}\n\n contains(polygon: IPolygon, point: IPoint, params?: IPickParams): boolean {\n if (!polygon.AABBBounds.contains(point.x, point.y)) {\n return false;\n }\n\n if (polygon.attribute.pickMode === 'imprecise') {\n return true;\n }\n\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n // const polygonAttribute = graphicService.themeService.getCurrentTheme().pathAttribute;\n const polygonAttribute = getTheme(polygon).polygon;\n let { x = polygonAttribute.x, y = polygonAttribute.y } = polygon.attribute;\n\n pickContext.highPerformanceSave();\n if (!polygon.transMatrix.onlyTranslate()) {\n // 性能较差\n x = 0;\n y = 0;\n pickContext.transformFromMatrix(polygon.transMatrix, true);\n } else {\n const point = polygon.getOffsetXY(polygonAttribute);\n x += point.x;\n y += point.y;\n // 当前context有rotate/scale,重置matrix\n pickContext.setTransformForCurrent();\n }\n\n // 详细形状判断\n let picked = false;\n this.canvasRenderer.drawShape(\n polygon,\n pickContext,\n x,\n y,\n {} as any,\n null,\n (\n context: IContext2d,\n pathAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n picked = context.isPointInPath(point.x, point.y);\n return picked;\n },\n (\n context: IContext2d,\n pathAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n const lineWidth = pathAttribute.lineWidth || themeAttribute.lineWidth;\n const pickStrokeBuffer = pathAttribute.pickStrokeBuffer || themeAttribute.pickStrokeBuffer;\n pickContext.lineWidth = getScaledStroke(pickContext, lineWidth + pickStrokeBuffer, pickContext.dpr);\n picked = context.isPointInStroke(point.x, point.y);\n return picked;\n }\n );\n\n pickContext.highPerformanceRestore();\n\n return picked;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { CanvasPickerContribution, CanvasPolygonPicker } from '../constants';\nimport { DefaultCanvasPolygonPicker } from './polygon-picker';\n\nlet loadPolygonPick = false;\nexport const polygonCanvasPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadPolygonPick) {\n return;\n }\n loadPolygonPick = true;\n // polygon picker\n bind(CanvasPolygonPicker).to(DefaultCanvasPolygonPicker).inSingletonScope();\n bind(CanvasPickerContribution).toService(CanvasPolygonPicker);\n});\n","import { inject, injectable, getTheme, PolygonRender, POLYGON_NUMBER_TYPE } from '@visactor/vrender-core';\nimport type { IPoint } from '@visactor/vutils';\nimport type {\n IContext2d,\n IMarkAttribute,\n IGraphicAttribute,\n IThemeAttribute,\n IPolygon,\n IGraphicPicker,\n IGraphicRender,\n IPickParams\n} from '@visactor/vrender-core';\n\n@injectable()\nexport class DefaultMathPolygonPicker implements IGraphicPicker {\n type: string = 'polygon';\n numberType: number = POLYGON_NUMBER_TYPE;\n\n constructor(@inject(PolygonRender) public readonly canvasRenderer: IGraphicRender) {}\n\n contains(polygon: IPolygon, point: IPoint, params?: IPickParams): boolean {\n if (!polygon.AABBBounds.contains(point.x, point.y)) {\n return false;\n }\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n // const pathAttribute = graphicService.themeService.getCurrentTheme().pathAttribute;\n const pathAttribute = getTheme(polygon).polygon;\n let { x = pathAttribute.x, y = pathAttribute.y } = polygon.attribute;\n\n pickContext.highPerformanceSave();\n if (!polygon.transMatrix.onlyTranslate()) {\n // 性能较差\n x = 0;\n y = 0;\n pickContext.transformFromMatrix(polygon.transMatrix, true);\n } else {\n const point = polygon.getOffsetXY(pathAttribute);\n x += point.x;\n y += point.y;\n // 当前context有rotate/scale,重置matrix\n pickContext.setTransformForCurrent();\n }\n\n // 详细形状判断\n let picked = false;\n this.canvasRenderer.drawShape(\n polygon,\n pickContext,\n x,\n y,\n {} as any,\n null,\n (\n context: IContext2d,\n pathAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n picked = context.isPointInPath(point.x, point.y);\n return picked;\n },\n (\n context: IContext2d,\n pathAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n const lineWidth = pathAttribute.lineWidth || themeAttribute.lineWidth;\n const pickStrokeBuffer = pathAttribute.pickStrokeBuffer || themeAttribute.pickStrokeBuffer;\n pickContext.lineWidth = lineWidth + pickStrokeBuffer;\n picked = context.isPointInStroke(point.x, point.y);\n return picked;\n }\n );\n\n pickContext.highPerformanceRestore();\n\n return picked;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { MathCirclePicker, MathPickerContribution, MathPolygonPicker } from '../constants';\nimport { DefaultMathCirclePicker } from './circle-picker';\nimport { DefaultMathPolygonPicker } from './polygon-picker';\n\nlet loadPolygonPick = false;\nexport const polygonMathPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadPolygonPick) {\n return;\n }\n loadPolygonPick = true;\n // polygon picker\n bind(MathPolygonPicker).to(DefaultMathPolygonPicker).inSingletonScope();\n bind(MathPickerContribution).toService(MathPolygonPicker);\n});\n","import { container, polygonModule, registerPolygonGraphic } from '@visactor/vrender-core';\nimport { browser } from './env';\nimport { polygonCanvasPickModule } from '../picker/contributions/canvas-picker/polygon-module';\nimport { polygonMathPickModule } from '../picker/contributions/math-picker/polygon-module';\n\nfunction _registerPolygon() {\n if (_registerPolygon.__loaded) {\n return;\n }\n _registerPolygon.__loaded = true;\n registerPolygonGraphic();\n container.load(polygonModule);\n container.load(browser ? polygonCanvasPickModule : polygonMathPickModule);\n}\n\n_registerPolygon.__loaded = false;\n\nexport const registerPolygon = _registerPolygon;\n","import type { AABBBounds, IPointLike, OBBBounds } from '@visactor/vutils';\nimport { Graphic, NOWORK_ANIMATE_ATTR } from './graphic';\nimport type {\n GraphicType,\n IGraphic,\n IGlyph,\n IGlyphGraphicAttribute,\n IGraphicAttribute,\n ISetAttributeContext\n} from '../interface';\nimport { getTheme } from './theme';\nimport { application } from '../application';\nimport { GLYPH_NUMBER_TYPE } from './constants';\n\nexport class Glyph extends Graphic implements IGlyph {\n type: GraphicType = 'glyph';\n declare _onInit: (g: IGlyph) => void;\n declare _onUpdate: (g: IGlyph) => void;\n declare glyphStates?: Record<\n string,\n {\n attributes: Partial;\n subAttributes: Partial[];\n }\n >;\n declare glyphStateProxy?: (\n stateName: string,\n targetStates?: string[]\n ) => {\n attributes: Partial;\n subAttributes: Partial[];\n };\n protected declare subGraphic: IGraphic[];\n\n static NOWORK_ANIMATE_ATTR = NOWORK_ANIMATE_ATTR;\n\n constructor(params: Partial) {\n super(params);\n this.numberType = GLYPH_NUMBER_TYPE;\n this.subGraphic = [];\n this._onInit && this._onInit(this);\n this.valid = this.isValid();\n }\n\n setSubGraphic(subGraphic: IGraphic[]) {\n this.detachSubGraphic();\n this.subGraphic = subGraphic;\n subGraphic.forEach(g => {\n g.glyphHost = this;\n Object.setPrototypeOf(g.attribute, this.attribute);\n });\n this.valid = this.isValid();\n this.addUpdateBoundTag();\n }\n\n protected detachSubGraphic() {\n this.subGraphic.forEach(g => {\n g.glyphHost = null;\n Object.setPrototypeOf(g.attribute, {});\n });\n }\n\n getSubGraphic() {\n return this.subGraphic;\n }\n\n onInit(cb: (g: this) => void): void {\n this._onInit = cb;\n }\n\n onUpdate(cb: (g: this) => void): void {\n this._onUpdate = cb;\n }\n\n isValid(): boolean {\n return true;\n }\n\n setAttribute(key: string, value: any, forceUpdateTag?: boolean, context?: ISetAttributeContext) {\n super.setAttribute(key, value, forceUpdateTag, context);\n this.subGraphic.forEach(g => {\n g.addUpdateShapeAndBoundsTag();\n g.addUpdatePositionTag();\n });\n }\n\n setAttributes(\n params: Partial,\n forceUpdateTag: boolean = false,\n context?: ISetAttributeContext\n ) {\n super.setAttributes(params, forceUpdateTag, context);\n this.subGraphic.forEach(g => {\n g.addUpdateShapeAndBoundsTag();\n g.addUpdatePositionTag();\n });\n }\n\n translate(x: number, y: number) {\n super.translate(x, y);\n\n this.subGraphic.forEach(g => {\n g.addUpdatePositionTag();\n g.addUpdateBoundTag();\n });\n return this;\n }\n\n translateTo(x: number, y: number) {\n super.translateTo(x, y);\n\n this.subGraphic.forEach(g => {\n g.addUpdatePositionTag();\n g.addUpdateBoundTag();\n });\n return this;\n }\n\n scale(scaleX: number, scaleY: number, scaleCenter?: IPointLike) {\n super.scale(scaleX, scaleY, scaleCenter);\n\n this.subGraphic.forEach(g => {\n g.addUpdatePositionTag();\n g.addUpdateBoundTag();\n });\n return this;\n }\n\n scaleTo(scaleX: number, scaleY: number) {\n super.scaleTo(scaleX, scaleY);\n\n this.subGraphic.forEach(g => {\n g.addUpdatePositionTag();\n g.addUpdateBoundTag();\n });\n return this;\n }\n\n rotate(angle: number) {\n super.rotate(angle);\n\n this.subGraphic.forEach(g => {\n g.addUpdatePositionTag();\n g.addUpdateBoundTag();\n });\n return this;\n }\n\n rotateTo(angle: number) {\n super.rotate(angle);\n\n this.subGraphic.forEach(g => {\n g.addUpdatePositionTag();\n g.addUpdateBoundTag();\n });\n return this;\n }\n\n protected doUpdateAABBBounds(): AABBBounds {\n this._AABBBounds.setValue(Infinity, Infinity, -Infinity, -Infinity);\n const bounds = application.graphicService.updateGlyphAABBBounds(\n this.attribute,\n getTheme(this).glyph,\n this._AABBBounds,\n this\n ) as AABBBounds;\n this.clearUpdateBoundTag();\n return bounds;\n }\n\n protected tryUpdateOBBBounds(): OBBBounds {\n throw new Error('暂不支持');\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return false;\n }\n protected needUpdateTag(key: string): boolean {\n return false;\n }\n\n useStates(states: string[], hasAnimation?: boolean): void {\n if (!states.length) {\n this.clearStates(hasAnimation);\n return;\n }\n\n const isChange =\n this.currentStates?.length !== states.length ||\n states.some((stateName, index) => this.currentStates[index] !== stateName);\n if (!isChange) {\n return;\n }\n\n const stateAttrs = {};\n const subAttrs = this.subGraphic.map(() => ({}));\n states.forEach(stateName => {\n const attrs = this.glyphStateProxy ? this.glyphStateProxy(stateName, states) : this.glyphStates[stateName];\n\n if (attrs) {\n Object.assign(stateAttrs, attrs.attributes);\n\n if (attrs.subAttributes?.length) {\n subAttrs.forEach((subAttrs, index) => {\n Object.assign(subAttrs, attrs.subAttributes[index]);\n });\n }\n }\n });\n\n this.subGraphic.forEach((graphic, index) => {\n graphic.updateNormalAttrs(subAttrs[index]);\n graphic.applyStateAttrs(subAttrs[index], states, hasAnimation);\n });\n\n this.updateNormalAttrs(stateAttrs);\n this.currentStates = states;\n this.applyStateAttrs(stateAttrs, states, hasAnimation);\n }\n\n clearStates(hasAnimation?: boolean) {\n if (!this.hasState() || !this.normalAttrs) {\n return;\n }\n\n this.subGraphic.forEach(graphic => {\n graphic.applyStateAttrs(graphic.normalAttrs, this.currentStates, hasAnimation, true);\n graphic.normalAttrs = null;\n });\n\n this.applyStateAttrs(this.normalAttrs, this.currentStates, hasAnimation, true);\n this.normalAttrs = null;\n\n this.currentStates = [];\n }\n\n clone(): Graphic> {\n const glyph = new Glyph({ ...this.attribute });\n glyph.setSubGraphic(this.subGraphic.map(g => g.clone()));\n return glyph;\n }\n\n getNoWorkAnimateAttr(): Record {\n return Glyph.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createGlyph(attributes: IGlyphGraphicAttribute): IGlyph {\n return new Glyph(attributes);\n}\n","import { injectable } from '../../../common/inversify-lite';\nimport { getTheme } from '../../../graphic/theme';\nimport { GLYPH_NUMBER_TYPE } from '../../../graphic/constants';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IGlyph,\n IMarkAttribute,\n IThemeAttribute,\n IDrawContext,\n IRenderService,\n IGraphicRender,\n IGraphicRenderDrawParams\n} from '../../../interface';\n\n@injectable()\nexport class DefaultCanvasGlyphRender implements IGraphicRender {\n type: 'glyph';\n numberType: number = GLYPH_NUMBER_TYPE;\n\n // constructor() {}\n\n drawShape(\n glyph: IGlyph,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n if (!drawContext.drawContribution) {\n return;\n }\n glyph.getSubGraphic().forEach(item => {\n const renderer = drawContext.drawContribution.getRenderContribution(item);\n if (renderer && renderer.drawShape) {\n renderer.drawShape(item, context, x, y, drawContext, params, fillCb, strokeCb);\n }\n });\n }\n\n draw(glyph: IGlyph, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const { context } = drawContext;\n if (!context) {\n return;\n }\n\n context.highPerformanceSave();\n\n if (!drawContext.drawContribution) {\n return;\n }\n const glyphTheme = getTheme(glyph);\n const subGraphic = glyph.getSubGraphic();\n subGraphic.length &&\n subGraphic.forEach(g => {\n drawContext.drawContribution.renderItem(g, drawContext, { theme: glyphTheme });\n });\n\n context.highPerformanceRestore();\n }\n}\n","import { ContainerModule } from '../../../common/inversify';\nimport { DefaultCanvasGlyphRender } from './glyph-render';\nimport { GlyphRender, GraphicRender } from './symbol';\n\nlet loadGlyphModule = false;\nexport const glyphModule = new ContainerModule(bind => {\n if (loadGlyphModule) {\n return;\n }\n loadGlyphModule = true;\n // glyph渲染器\n bind(GlyphRender).to(DefaultCanvasGlyphRender).inSingletonScope();\n bind(GraphicRender).toService(GlyphRender);\n});\n","import type { IPoint } from '@visactor/vutils';\nimport { inject, injectable, GLYPH_NUMBER_TYPE, GlyphRender } from '@visactor/vrender-core';\nimport type { IGlyph, IGraphicPicker, IGraphicRender, IPickParams } from '@visactor/vrender-core';\n\n@injectable()\nexport class DefaultCanvasGlyphPicker implements IGraphicPicker {\n type: string = 'glyph';\n numberType: number = GLYPH_NUMBER_TYPE;\n\n constructor(@inject(GlyphRender) public readonly canvasRenderer: IGraphicRender) {}\n\n contains(glyph: IGlyph, point: IPoint, params?: IPickParams): boolean {\n if (!glyph.AABBBounds.containsPoint(point)) {\n return false;\n }\n if (glyph.attribute.pickMode === 'imprecise') {\n return true;\n }\n\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n const pickerService = params?.pickerService;\n if (pickerService) {\n // 遍历所有的子元素pick\n let picked = false;\n glyph.getSubGraphic().forEach(g => {\n if (picked) {\n return;\n }\n const data = pickerService.pickItem(g, point, null, params);\n picked = !!(data && data.graphic);\n });\n return picked;\n }\n return false;\n\n // const { rectAttribute } = graphicService.themeService.getCurrentTheme();\n // const glyphAttribute = getTheme(glyph).glyph;\n // let { x = glyphAttribute.x, y = glyphAttribute.y } = glyph.attribute;\n\n // pickContext.highPerformanceSave();\n // if (!glyph.transMatrix.onlyTranslate()) {\n // // 性能较差\n // x = 0;\n // y = 0;\n // pickContext.transformFromMatrix(glyph.transMatrix, true);\n // } else {\n // const { dx = glyphAttribute.dx, dy = glyphAttribute.dy } = glyph.attribute;\n // x += dx;\n // y += dy;\n // // 当前context有rotate/scale,重置matrix\n // pickContext.setTransformForCurrent();\n // }\n // // 详细形状判断\n // let picked = false;\n // this.canvasRenderer.drawShape(\n // glyph,\n // pickContext,\n // x,\n // y,\n // {\n // drawContribution: params.pickerService?.drawContribution\n // } as any,\n // null,\n // context => {\n // // 选中后面就不需要再走逻辑了\n // if (picked) {\n // return true;\n // }\n // picked = context.isPointInPath(point.x, point.y);\n // return picked;\n // }\n // );\n\n // pickContext.highPerformanceRestore();\n // return picked; // 无圆角形状判断通过\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { CanvasGlyphPicker, CanvasPickerContribution } from '../constants';\nimport { DefaultCanvasGlyphPicker } from './glyph-picker';\n\nlet loadGlyphPick = false;\nexport const glyphCanvasPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadGlyphPick) {\n return;\n }\n loadGlyphPick = true;\n // glyph picker\n bind(CanvasGlyphPicker).to(DefaultCanvasGlyphPicker).inSingletonScope();\n bind(CanvasPickerContribution).toService(CanvasGlyphPicker);\n});\n","import type { IPoint } from '@visactor/vutils';\nimport { inject, injectable, GLYPH_NUMBER_TYPE, GlyphRender } from '@visactor/vrender-core';\nimport type { IGlyph, IGraphicPicker, IGraphicRender, IPickParams } from '@visactor/vrender-core';\n\n@injectable()\nexport class DefaultMathGlyphPicker implements IGraphicPicker {\n type: string = 'glyph';\n numberType: number = GLYPH_NUMBER_TYPE;\n\n constructor(@inject(GlyphRender) public readonly canvasRenderer: IGraphicRender) {}\n\n contains(glyph: IGlyph, point: IPoint, params?: IPickParams): boolean {\n if (!glyph.AABBBounds.containsPoint(point)) {\n return false;\n }\n if (glyph.attribute.pickMode === 'imprecise') {\n return true;\n }\n\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n const pickerService = params?.pickerService;\n if (pickerService) {\n // 遍历所有的子元素pick\n let picked = false;\n glyph.getSubGraphic().forEach(g => {\n if (picked) {\n return;\n }\n picked = !!pickerService.pickItem(g, point, null, params);\n });\n return picked;\n }\n return false;\n\n // const { rectAttribute } = graphicService.themeService.getCurrentTheme();\n // const glyphAttribute = getTheme(glyph).glyph;\n // let { x = glyphAttribute.x, y = glyphAttribute.y } = glyph.attribute;\n\n // pickContext.highPerformanceSave();\n // if (!glyph.transMatrix.onlyTranslate()) {\n // // 性能较差\n // x = 0;\n // y = 0;\n // pickContext.transformFromMatrix(glyph.transMatrix, true);\n // } else {\n // const { dx = glyphAttribute.dx, dy = glyphAttribute.dy } = glyph.attribute;\n // x += dx;\n // y += dy;\n // // 当前context有rotate/scale,重置matrix\n // pickContext.setTransformForCurrent();\n // }\n // // 详细形状判断\n // let picked = false;\n // this.canvasRenderer.drawShape(\n // glyph,\n // pickContext,\n // x,\n // y,\n // {\n // drawContribution: params.pickerService?.drawContribution\n // } as any,\n // null,\n // context => {\n // // 选中后面就不需要再走逻辑了\n // if (picked) {\n // return true;\n // }\n // picked = context.isPointInPath(point.x, point.y);\n // return picked;\n // }\n // );\n\n // pickContext.highPerformanceRestore();\n // return picked; // 无圆角形状判断通过\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { MathGlyphPicker } from '../constants';\nimport { DefaultMathGlyphPicker } from './glyph-picker';\n\nlet loadGlyphPick = false;\nexport const glyphMathPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadGlyphPick) {\n return;\n }\n loadGlyphPick = true;\n // glyph picker\n bind(MathGlyphPicker).to(DefaultMathGlyphPicker).inSingletonScope();\n bind(DefaultMathGlyphPicker).toService(MathGlyphPicker);\n});\n","import { container, glyphModule, registerGlyphGraphic } from '@visactor/vrender-core';\nimport { browser } from './env';\nimport { glyphCanvasPickModule } from '../picker/contributions/canvas-picker/glyph-module';\nimport { glyphMathPickModule } from '../picker/contributions/math-picker/glyph-module';\n\nfunction _registerGlyph() {\n if (_registerGlyph.__loaded) {\n return;\n }\n _registerGlyph.__loaded = true;\n registerGlyphGraphic();\n container.load(glyphModule);\n container.load(browser ? glyphCanvasPickModule : glyphMathPickModule);\n}\n\n_registerGlyph.__loaded = false;\n\nexport const registerGlyph = _registerGlyph;\n","import { Factory } from '../../core/factory';\nimport { GrammarMarkType } from '../enums';\nimport { LargeRects } from './large-rects';\nimport { LargeSymbols } from './large-symbols';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport {\n registerCircle,\n registerArc,\n registerArc3d,\n registerPyramid3d,\n registerArea,\n registerGroup,\n registerImage,\n registerRect3d,\n registerLine,\n registerPath,\n registerRect,\n registerSymbol,\n registerText,\n registerPolygon,\n registerRichtext,\n registerGlyph,\n registerShadowRoot\n} from '@visactor/vrender-kits';\nimport {\n createArc,\n createCircle,\n createArc3d,\n createPyramid3d,\n createArea,\n createGroup,\n createImage,\n createRect3d,\n createLine,\n createPath,\n createRect,\n createSymbol,\n createText,\n createPolygon,\n createRichText,\n createGlyph\n} from '@visactor/vrender-core';\n\nexport const registerCircleGraphic = () => {\n registerShadowRoot();\n registerCircle();\n Factory.registerGraphic(GrammarMarkType.circle, createCircle);\n};\n\nexport const registerArcGraphic = () => {\n registerShadowRoot();\n registerArc();\n Factory.registerGraphic(GrammarMarkType.arc, createArc);\n};\n\nexport const registerArc3dGraphic = () => {\n registerShadowRoot();\n registerArc3d();\n Factory.registerGraphic(GrammarMarkType.arc3d, createArc3d);\n};\n\nexport const registerPyramid3dGraphic = () => {\n registerShadowRoot();\n registerPyramid3d();\n Factory.registerGraphic(GrammarMarkType.pyramid3d, createPyramid3d);\n};\n\nexport const registerAreaGraphic = () => {\n registerShadowRoot();\n registerArea();\n Factory.registerGraphic(GrammarMarkType.area, createArea);\n};\n\nexport const registerGroupGraphic = () => {\n registerShadowRoot();\n registerGroup();\n Factory.registerGraphic(GrammarMarkType.group, createGroup);\n};\n\nexport const registerImageGraphic = () => {\n registerShadowRoot();\n registerImage();\n Factory.registerGraphic(GrammarMarkType.image, createImage);\n};\n\nexport const registerLineGraphic = () => {\n registerShadowRoot();\n registerLine();\n Factory.registerGraphic(GrammarMarkType.line, createLine);\n};\n\nexport const registerPathGraphic = () => {\n registerShadowRoot();\n registerPath();\n Factory.registerGraphic(GrammarMarkType.path, createPath);\n};\n\nexport const registerRectGraphic = () => {\n registerShadowRoot();\n registerRect();\n Factory.registerGraphic(GrammarMarkType.rect, createRect);\n};\n\nexport const registerRect3dGraphic = () => {\n registerShadowRoot();\n registerRect3d();\n Factory.registerGraphic(GrammarMarkType.rect3d, createRect3d);\n};\n\nexport const registerRuleGraphic = () => {\n registerShadowRoot();\n registerLine();\n Factory.registerGraphic(GrammarMarkType.rule, createLine);\n};\n\nexport const registerShapeGraphic = () => {\n registerShadowRoot();\n registerPath();\n Factory.registerGraphic(GrammarMarkType.shape, createPath);\n};\n\nexport const registerSymbolGraphic = () => {\n registerShadowRoot();\n registerSymbol();\n Factory.registerGraphic(GrammarMarkType.symbol, createSymbol);\n};\n\nexport const registerTextGraphic = () => {\n registerShadowRoot();\n registerText();\n registerRichtext();\n Factory.registerGraphic(GrammarMarkType.text, createText);\n};\n\nexport const registerPolygonGraphic = () => {\n registerShadowRoot();\n registerPolygon();\n Factory.registerGraphic(GrammarMarkType.polygon, createPolygon);\n};\n\nexport const registerRichTextGraphic = () => {\n registerShadowRoot();\n registerRichtext();\n Factory.registerGraphic(GrammarMarkType.richtext, createRichText);\n};\n\nexport const registerCellGraphic = () => {\n registerShadowRoot();\n registerSymbol();\n Factory.registerGraphic(GrammarMarkType.cell, createSymbol);\n};\n\nexport const registerIntervalGraphic = () => {\n registerShadowRoot();\n registerRect();\n registerArc();\n Factory.registerGraphic(GrammarMarkType.interval, createRect);\n};\n\nexport const registerGlyphGraphic = () => {\n registerShadowRoot();\n registerGlyph();\n Factory.registerGraphic(GrammarMarkType.glyph, createGlyph);\n};\n\nexport const registerLargeRectsGraphic = () => {\n registerShadowRoot();\n registerPath();\n Factory.registerGraphic(GrammarMarkType.largeRects, (attrs: any) => {\n return new LargeRects(attrs) as unknown as IGraphic;\n });\n};\n\nexport const registerLargeSymbolsGraphic = () => {\n registerShadowRoot();\n registerPath();\n Factory.registerGraphic(GrammarMarkType.largeSymbols, (attrs: any) => {\n return new LargeSymbols(attrs) as unknown as IGraphic;\n });\n};\n","import { Factory } from './../core/factory';\nimport type { Maybe } from '../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport { warn } from '../util/debug';\nimport type { IGroupMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IMark, IMarkRaw, IMarkStyle, MarkType } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerGroupGraphic, type IGroupMark as IVGrammarGroupMark } from '@visactor/vgrammar-core';\nimport type { IMarkCompileOption } from '../compile/mark';\n\nexport interface IGroupMark extends IMarkRaw {\n // groupMark的zIndex只能配在外层,encode里不生效,且无法写成signal\n // {type:'group', zIndex: 100} ✅\n // {type:'group', encode:{enter:{zIndex:{value:100}}}} ❌\n // {type:'group', zIndex: {signal: }} ❌\n\n addMark: (m: IMark) => boolean;\n removeMark: (m: IMark) => boolean;\n // TODO: 这里可能会出现mark嵌套的问题\n getMarks: () => IMark[];\n getMarkInType: (type: MarkType) => IMark[];\n getMarkInId: (id: number) => IMark | undefined;\n getMarkInName: (name: string) => IMark | undefined;\n}\n\nexport class GroupMark extends BaseMark implements IGroupMark {\n static readonly type = MarkTypeEnum.group;\n readonly type = GroupMark.type;\n protected _marks: IMark[] = [];\n getMarks(): IMark[] {\n return this._marks;\n }\n\n protected declare _product: Maybe;\n declare getProduct: () => Maybe;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n clip: false\n };\n return defaultStyle;\n }\n\n protected isMarkExist(mark: IMark): boolean {\n return this._marks.find(m => m.id === mark.id || m.name === mark.name) !== undefined;\n }\n\n addMark(mark: IMark): boolean {\n if (this.isMarkExist(mark)) {\n warn('Mark already exists, add mark failed.');\n return false;\n }\n\n this._marks.push(mark);\n return true;\n }\n\n removeMark(mark: IMark): boolean {\n const index = this._marks.findIndex(m => m.id === mark.id || m.name === mark.name);\n if (index === -1) {\n warn('Mark does not exists, removeMark failed.');\n return false;\n }\n this._marks.splice(index, 1);\n return true;\n }\n\n getMarkInType(type: MarkType) {\n return this._marks.filter(m => m.type === type);\n }\n\n getMarkInId(id: number) {\n return this._marks.find(m => m.id === id);\n }\n\n getMarkInName(name: string) {\n return this._marks.find(m => m.name === name);\n }\n\n protected _compileProduct(option?: IMarkCompileOption): void {\n // 编译自身\n super._compileProduct(option);\n\n // 设置zIndex\n this._product.configure({\n zIndex: this.getZIndex()\n });\n\n // 编译子元素\n if (!option?.ignoreChildren) {\n this.getMarks().forEach(mark => {\n // TODO: 如果语法元素已创建,先删除再重新指定父结点生成。vgrammar 是否可以动态指定 mark 父结点?\n if (mark.getProduct()) {\n mark.removeProduct();\n }\n mark.compile({ group: this._product });\n });\n }\n }\n}\n\nexport const registerGroupMark = () => {\n registerGroupGraphic();\n Factory.registerMark(GroupMark.type, GroupMark);\n};\n","import { Direction } from '../../typings/space';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DirectionType } from '../../typings';\nimport type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\n\nexport interface ILineAnimationParams {\n direction: DirectionType;\n}\n\nexport type LineAppearPreset = 'clipIn' | 'fadeIn' | 'grow';\n\nconst Appear_ClipIn: IAnimationTypeConfig = {\n type: 'clipIn'\n};\n\nconst Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nconst Appear_Grow = (params: ILineAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growPointsXIn' : 'growPointsYIn',\n options: {\n orient: params.direction === Direction.horizontal ? 'positive' : 'negative'\n }\n };\n};\n\nexport function linePresetAnimation(params: ILineAnimationParams, preset: LineAppearPreset): IAnimationTypeConfig {\n switch (preset) {\n case 'grow':\n return Appear_Grow(params);\n case 'fadeIn':\n return Appear_FadeIn;\n default:\n return Appear_ClipIn;\n }\n}\n","import type { IElement } from '../../../types';\nimport type { IAnimationParameters, IClipAnimationOptions, TypeAnimation } from '../../../types/animate';\n\nexport const clipIn: TypeAnimation = (\n element: IElement,\n options: IClipAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const clipDimension = element.getGraphicAttribute('clipRangeByDimension', false);\n const clipRange = element.getGraphicAttribute('clipRange', false) ?? 1;\n if (options && options.clipDimension) {\n return {\n from: { clipRange: 0, clipRangeByDimension: options.clipDimension },\n to: { clipRange: clipRange, clipRangeByDimension: clipDimension }\n };\n }\n return {\n from: { clipRange: 0 },\n to: { clipRange: clipRange }\n };\n};\n\nexport const clipOut: TypeAnimation = (\n element: IElement,\n options: IClipAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const clipDimension = element.getGraphicAttribute('clipRangeByDimension', true);\n const clipRange = element.getGraphicAttribute('clipRange', true) ?? 1;\n if (options && options.clipDimension) {\n return {\n from: { clipRange: clipRange, clipRangeByDimension: options.clipDimension },\n to: { clipRange: 0, clipRangeByDimension: clipDimension }\n };\n }\n return {\n from: { clipRange: clipRange },\n to: { clipRange: 0 }\n };\n};\n","import type { IElement } from '../../../types';\nimport type { IAnimationParameters, TypeAnimation } from '../../../types/animate';\n\nexport const fadeIn: TypeAnimation = (\n element: IElement,\n options: any,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: {\n opacity: 0,\n fillOpacity: 0,\n strokeOpacity: 0\n },\n to: {\n opacity: element.getGraphicAttribute('opacity', false) ?? 1,\n fillOpacity: element.getGraphicAttribute('fillOpacity', false) ?? 1,\n strokeOpacity: element.getGraphicAttribute('strokeOpacity', false) ?? 1\n }\n };\n};\n\nexport const fadeOut: TypeAnimation = (\n element: IElement,\n options: any,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: {\n opacity: element.getGraphicAttribute('opacity', true) ?? 1,\n fillOpacity: element.getGraphicAttribute('fillOpacity', true) ?? 1,\n strokeOpacity: element.getGraphicAttribute('strokeOpacity', true) ?? 1\n },\n to: {\n opacity: 0,\n fillOpacity: 0,\n strokeOpacity: 0\n }\n };\n};\n","import { isNil, isNumber, isValid } from '@visactor/vutils';\nimport type { IGrowCartesianAnimationOptions, IAnimationParameters, IElement, TypeAnimation } from '../../../types';\n\n// grow center\nexport const growCenterIn: TypeAnimation = (\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n switch (options?.direction) {\n case 'x': {\n const x = element.getGraphicAttribute('x', false);\n const x1 = element.getGraphicAttribute('x1', false);\n const width = element.getGraphicAttribute('width', false);\n\n return {\n from: isValid(width)\n ? {\n x: x + width / 2,\n x1: undefined,\n width: 0\n }\n : {\n x: (x + x1) / 2,\n x1: (x + x1) / 2,\n width: undefined\n },\n to: { x, x1, width }\n };\n }\n case 'y': {\n const y = element.getGraphicAttribute('y', false);\n const y1 = element.getGraphicAttribute('y1', false);\n const height = element.getGraphicAttribute('height', false);\n\n return {\n from: isValid(height)\n ? {\n y: y + height / 2,\n y1: undefined,\n height: 0\n }\n : {\n y: (y + y1) / 2,\n y1: (y + y1) / 2,\n height: undefined\n },\n to: { y, y1, height }\n };\n }\n case 'xy':\n default: {\n const x = element.getGraphicAttribute('x', false);\n const x1 = element.getGraphicAttribute('x1', false);\n const width = element.getGraphicAttribute('width', false);\n const y = element.getGraphicAttribute('y', false);\n const y1 = element.getGraphicAttribute('y1', false);\n const height = element.getGraphicAttribute('height', false);\n const from: any = {};\n\n if (isValid(width)) {\n from.x = x + width / 2;\n from.width = 0;\n from.x1 = undefined;\n } else {\n from.x = (x + x1) / 2;\n from.x1 = (x + x1) / 2;\n from.width = undefined;\n }\n\n if (isValid(height)) {\n from.y = y + height / 2;\n from.height = 0;\n from.y1 = undefined;\n } else {\n from.y = (y + y1) / 2;\n from.y1 = (y + y1) / 2;\n from.height = undefined;\n }\n\n return {\n from,\n to: { x, y, x1, y1, width, height }\n };\n }\n }\n};\n\nexport const growCenterOut: TypeAnimation = (\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n switch (options?.direction) {\n case 'x': {\n const x = element.getGraphicAttribute('x', false);\n const x1 = element.getGraphicAttribute('x1', false);\n const width = element.getGraphicAttribute('width', false);\n\n return {\n to: isValid(width)\n ? {\n x: x + width / 2,\n x1: undefined,\n width: 0\n }\n : {\n x: (x + x1) / 2,\n x1: (x + x1) / 2,\n width: undefined\n }\n };\n }\n case 'y': {\n const y = element.getGraphicAttribute('y', false);\n const y1 = element.getGraphicAttribute('y1', false);\n const height = element.getGraphicAttribute('height', false);\n\n return {\n to: isValid(height)\n ? {\n y: y + height / 2,\n y1: undefined,\n height: 0\n }\n : {\n y: (y + y1) / 2,\n y1: (y + y1) / 2,\n height: undefined\n }\n };\n }\n case 'xy':\n default: {\n const x = element.getGraphicAttribute('x', false);\n const y = element.getGraphicAttribute('y', false);\n const x1 = element.getGraphicAttribute('x1', false);\n const y1 = element.getGraphicAttribute('y1', false);\n const width = element.getGraphicAttribute('width', false);\n const height = element.getGraphicAttribute('height', false);\n const to: any = {};\n\n if (isValid(width)) {\n to.x = x + width / 2;\n to.width = 0;\n to.x1 = undefined;\n } else {\n to.x = (x + x1) / 2;\n to.x1 = (x + x1) / 2;\n to.width = undefined;\n }\n\n if (isValid(height)) {\n to.y = y + height / 2;\n to.height = 0;\n to.y1 = undefined;\n } else {\n to.y = (y + y1) / 2;\n to.y1 = (y + y1) / 2;\n to.height = undefined;\n }\n\n return {\n to\n };\n }\n }\n};\n\n// grow width\nfunction growWidthInIndividual(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n const x = element.getGraphicAttribute('x', false);\n const x1 = element.getGraphicAttribute('x1', false);\n const width = element.getGraphicAttribute('width', false);\n\n if (options && options.orient === 'negative') {\n const computedX1 = isValid(width) ? Math.max(x, x + width) : Math.max(x, x1);\n\n return {\n from: { x: computedX1, x1: isNil(x1) ? undefined : computedX1, width: isNil(width) ? undefined : 0 },\n to: { x: x, x1: x1, width: width }\n };\n }\n\n const computedX = isValid(width) ? Math.min(x, x + width) : Math.min(x, x1);\n return {\n from: { x: computedX, x1: isNil(x1) ? undefined : computedX, width: isNil(width) ? undefined : 0 },\n to: { x: x, x1: x1, width: width }\n };\n}\n\nfunction growWidthInOverall(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n // no need to handle the situation where x > x1\n const x = element.getGraphicAttribute('x', false);\n const x1 = element.getGraphicAttribute('x1', false);\n const width = element.getGraphicAttribute('width', false);\n let overallValue: number;\n if (options && options.orient === 'negative') {\n if (isNumber(options.overall)) {\n overallValue = options.overall;\n } else if (animationParameters.group) {\n overallValue = (animationParameters as any).groupWidth ?? animationParameters.group.getBounds().width();\n\n (animationParameters as any).groupWidth = overallValue;\n } else {\n overallValue = animationParameters.width;\n }\n } else {\n overallValue = isNumber(options?.overall) ? options?.overall : 0;\n }\n return {\n from: { x: overallValue, x1: isNil(x1) ? undefined : overallValue, width: isNil(width) ? undefined : 0 },\n to: { x: x, x1: x1, width: width }\n };\n}\n\nexport const growWidthIn: TypeAnimation = (\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growWidthInOverall(element, options, animationParameters)\n : growWidthInIndividual(element, options, animationParameters);\n};\n\nfunction growWidthOutIndividual(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n const x = element.getGraphicAttribute('x', false);\n const x1 = element.getGraphicAttribute('x1', false);\n const width = element.getGraphicAttribute('width', false);\n\n if (options && options.orient === 'negative') {\n const computedX1 = isValid(width) ? Math.max(x, x + width) : Math.max(x, x1);\n\n return {\n to: { x: computedX1, x1: isNil(x1) ? undefined : computedX1, width: isNil(width) ? undefined : 0 }\n };\n }\n\n const computedX = isValid(width) ? Math.min(x, x + width) : Math.min(x, x1);\n return {\n to: { x: computedX, x1: isNil(x1) ? undefined : computedX, width: isNil(width) ? undefined : 0 }\n };\n}\n\nfunction growWidthOutOverall(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n const x1 = element.getGraphicAttribute('x1', false);\n const width = element.getGraphicAttribute('width', false);\n\n let overallValue: number;\n if (options && options.orient === 'negative') {\n if (isNumber(options.overall)) {\n overallValue = options.overall;\n } else if (animationParameters.group) {\n overallValue = (animationParameters as any).groupWidth ?? animationParameters.group.getBounds().width();\n\n (animationParameters as any).groupWidth = overallValue;\n } else {\n overallValue = animationParameters.width;\n }\n } else {\n overallValue = isNumber(options?.overall) ? options.overall : 0;\n }\n return {\n to: { x: overallValue, x1: isNil(x1) ? undefined : overallValue, width: isNil(width) ? undefined : 0 }\n };\n}\n\nexport const growWidthOut: TypeAnimation = (\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growWidthOutOverall(element, options, animationParameters)\n : growWidthOutIndividual(element, options, animationParameters);\n};\n\n// grow height\n\nfunction growHeightInIndividual(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n const y = element.getGraphicAttribute('y', false);\n const y1 = element.getGraphicAttribute('y1', false);\n const height = element.getGraphicAttribute('height', false);\n\n if (options && options.orient === 'negative') {\n const computedY1 = isValid(height) ? Math.max(y, y + height) : Math.max(y, y1);\n return {\n from: { y: computedY1, y1: isNil(y1) ? undefined : computedY1, height: isNil(height) ? undefined : 0 },\n to: { y: y, y1: y1, height: height }\n };\n }\n\n const computedY = isValid(height) ? Math.min(y, y + height) : Math.min(y, y1);\n return {\n from: { y: computedY, y1: isNil(y1) ? undefined : computedY, height: isNil(height) ? undefined : 0 },\n to: { y: y, y1: y1, height: height }\n };\n}\n\nfunction growHeightInOverall(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n const y = element.getGraphicAttribute('y', false);\n const y1 = element.getGraphicAttribute('y1', false);\n const height = element.getGraphicAttribute('height', false);\n\n let overallValue: number;\n if (options && options.orient === 'negative') {\n if (isNumber(options.overall)) {\n overallValue = options.overall;\n } else if (animationParameters.group) {\n overallValue = (animationParameters as any).groupHeight ?? animationParameters.group.getBounds().height();\n\n (animationParameters as any).groupHeight = overallValue;\n } else {\n overallValue = animationParameters.height;\n }\n } else {\n overallValue = isNumber(options?.overall) ? options.overall : 0;\n }\n return {\n from: { y: overallValue, y1: isNil(y1) ? undefined : overallValue, height: isNil(height) ? undefined : 0 },\n to: { y: y, y1: y1, height: height }\n };\n}\n\nexport const growHeightIn: TypeAnimation = (\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growHeightInOverall(element, options, animationParameters)\n : growHeightInIndividual(element, options, animationParameters);\n};\n\nfunction growHeightOutIndividual(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n const y = element.getGraphicAttribute('y', false);\n const y1 = element.getGraphicAttribute('y1', false);\n const height = element.getGraphicAttribute('height', false);\n\n if (options && options.orient === 'negative') {\n const computedY1 = isValid(height) ? Math.max(y, y + height) : Math.max(y, y1);\n\n return {\n to: { y: computedY1, y1: isNil(y1) ? undefined : computedY1, height: isNil(height) ? undefined : 0 }\n };\n }\n\n const computedY = isValid(height) ? Math.min(y, y + height) : Math.min(y, y1);\n return {\n to: { y: computedY, y1: isNil(y1) ? undefined : computedY, height: isNil(height) ? undefined : 0 }\n };\n}\n\nfunction growHeightOutOverall(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n const y1 = element.getGraphicAttribute('y1', false);\n const height = element.getGraphicAttribute('height', false);\n\n let overallValue: number;\n if (options && options.orient === 'negative') {\n if (isNumber(options.overall)) {\n overallValue = options.overall;\n } else if (animationParameters.group) {\n overallValue = (animationParameters as any).groupHeight ?? animationParameters.group.getBounds().height();\n\n (animationParameters as any).groupHeight = overallValue;\n } else {\n overallValue = animationParameters.height;\n }\n } else {\n overallValue = isNumber(options?.overall) ? options.overall : 0;\n }\n return {\n to: { y: overallValue, y1: isNil(y1) ? undefined : overallValue, height: isNil(height) ? undefined : 0 }\n };\n}\n\nexport const growHeightOut: TypeAnimation = (\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growHeightOutOverall(element, options, animationParameters)\n : growHeightOutIndividual(element, options, animationParameters);\n};\n","import { isNumber } from '@visactor/vutils';\nimport type {\n IElement,\n IGrowAngleAnimationOptions,\n IAnimationParameters,\n IGrowRadiusAnimationOptions,\n TypeAnimation\n} from '../../../types';\n\n// grow angle\n\nconst growAngleInIndividual = (\n element: IElement,\n options: IGrowAngleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n if (options && options.orient === 'anticlockwise') {\n return {\n from: { startAngle: element.getGraphicAttribute('endAngle', false) },\n to: { startAngle: element.getGraphicAttribute('startAngle', false) }\n };\n }\n return {\n from: { endAngle: element.getGraphicAttribute('startAngle', false) },\n to: { endAngle: element.getGraphicAttribute('endAngle', false) }\n };\n};\n\nconst growAngleInOverall = (\n element: IElement,\n options: IGrowAngleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n if (options && options.orient === 'anticlockwise') {\n const overallValue = isNumber(options.overall) ? options.overall : Math.PI * 2;\n return {\n from: {\n startAngle: overallValue,\n endAngle: overallValue\n },\n to: {\n startAngle: element.getGraphicAttribute('startAngle', false),\n endAngle: element.getGraphicAttribute('endAngle', false)\n }\n };\n }\n const overallValue = isNumber(options?.overall) ? options.overall : 0;\n return {\n from: {\n startAngle: overallValue,\n endAngle: overallValue\n },\n to: {\n startAngle: element.getGraphicAttribute('startAngle', false),\n endAngle: element.getGraphicAttribute('endAngle', false)\n }\n };\n};\n\nexport const growAngleIn: TypeAnimation = (\n element: IElement,\n options: IGrowAngleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growAngleInOverall(element, options, animationParameters)\n : growAngleInIndividual(element, options, animationParameters);\n};\n\nconst growAngleOutIndividual = (\n element: IElement,\n options: IGrowAngleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n if (options && options.orient === 'anticlockwise') {\n return {\n from: { startAngle: element.getGraphicAttribute('startAngle', true) },\n to: { startAngle: element.getGraphicAttribute('endAngle', false) }\n };\n }\n return {\n from: { endAngle: element.getGraphicAttribute('endAngle', true) },\n to: { endAngle: element.getGraphicAttribute('startAngle', false) }\n };\n};\n\nconst growAngleOutOverall = (\n element: IElement,\n options: IGrowAngleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n if (options && options.orient === 'anticlockwise') {\n const overallValue = isNumber(options.overall) ? options.overall : Math.PI * 2;\n return {\n from: {\n startAngle: element.getGraphicAttribute('startAngle', true),\n endAngle: element.getGraphicAttribute('endAngle', true)\n },\n to: {\n startAngle: overallValue,\n endAngle: overallValue\n }\n };\n }\n const overallValue = isNumber(options?.overall) ? options.overall : 0;\n return {\n from: {\n startAngle: element.getGraphicAttribute('startAngle', true),\n endAngle: element.getGraphicAttribute('endAngle', true)\n },\n to: {\n startAngle: overallValue,\n endAngle: overallValue\n }\n };\n};\n\nexport const growAngleOut: TypeAnimation = (\n element: IElement,\n options: IGrowAngleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growAngleOutOverall(element, options, animationParameters)\n : growAngleOutIndividual(element, options, animationParameters);\n};\n\n// grow radius\n\nconst growRadiusInIndividual = (\n element: IElement,\n options: IGrowRadiusAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n if (options && options.orient === 'inside') {\n return {\n from: { innerRadius: element.getGraphicAttribute('outerRadius', false) },\n to: { innerRadius: element.getGraphicAttribute('innerRadius', false) }\n };\n }\n return {\n from: { outerRadius: element.getGraphicAttribute('innerRadius', false) },\n to: { outerRadius: element.getGraphicAttribute('outerRadius', false) }\n };\n};\n\nconst growRadiusInOverall = (\n element: IElement,\n options: IGrowRadiusAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const overallValue = isNumber(options?.overall) ? options.overall : 0;\n return {\n from: {\n innerRadius: overallValue,\n outerRadius: overallValue\n },\n to: {\n innerRadius: element.getGraphicAttribute('innerRadius', false),\n outerRadius: element.getGraphicAttribute('outerRadius', false)\n }\n };\n};\n\nexport const growRadiusIn: TypeAnimation = (\n element: IElement,\n options: IGrowRadiusAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growRadiusInOverall(element, options, animationParameters)\n : growRadiusInIndividual(element, options, animationParameters);\n};\n\nconst growRadiusOutIndividual = (\n element: IElement,\n options: IGrowRadiusAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n if (options && options.orient === 'inside') {\n return {\n from: { innerRadius: element.getGraphicAttribute('innerRadius', true) },\n to: { innerRadius: element.getGraphicAttribute('outerRadius', false) }\n };\n }\n return {\n from: { outerRadius: element.getGraphicAttribute('outerRadius', true) },\n to: { outerRadius: element.getGraphicAttribute('innerRadius', false) }\n };\n};\n\nconst growRadiusOutOverall = (\n element: IElement,\n options: IGrowRadiusAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const overallValue = isNumber(options?.overall) ? options.overall : 0;\n return {\n from: {\n innerRadius: element.getGraphicAttribute('innerRadius', true),\n outerRadius: element.getGraphicAttribute('outerRadius', true)\n },\n to: {\n innerRadius: overallValue,\n outerRadius: overallValue\n }\n };\n};\n\nexport const growRadiusOut: TypeAnimation = (\n element: IElement,\n options: IGrowRadiusAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growRadiusOutOverall(element, options, animationParameters)\n : growRadiusOutIndividual(element, options, animationParameters);\n};\n","import type { IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isValidNumber } from '@visactor/vutils';\nimport type {\n IElement,\n IGrowPointsOverallAnimationOptions,\n IAnimationParameters,\n IGrowPointsAnimationOptions,\n TypeAnimation\n} from '../../../types';\n\nconst getCenterPoints = (\n element: IElement,\n options: IGrowPointsOverallAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const points: IPointLike[] = element.getGraphicAttribute('points', false);\n const center: IPointLike = { x: 0, y: 0 };\n points.forEach(point => {\n center.x += point.x;\n center.y += point.y;\n });\n center.x /= points.length;\n center.y /= points.length;\n\n if (options && options.center) {\n if (isValidNumber(options.center.x)) {\n center.x = options.center.x;\n }\n if (isValidNumber(options.center.y)) {\n center.y = options.center.y;\n }\n }\n\n if (element.mark.markType === 'area') {\n center.x1 = center.x;\n center.y1 = center.y;\n }\n\n return points.map(() => Object.assign(center));\n};\n\nexport const growPointsIn: TypeAnimation = (\n element: IElement,\n options: IGrowPointsOverallAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: { points: getCenterPoints(element, options, animationParameters) },\n to: { points: element.getGraphicAttribute('points', false) }\n };\n};\n\nexport const growPointsOut: TypeAnimation = (\n element: IElement,\n options: IGrowPointsOverallAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: { points: element.getGraphicAttribute('points', true) },\n to: { points: getCenterPoints(element, options, animationParameters) }\n };\n};\n\n// grow points x\n\nconst changePointsX = (\n element: IElement,\n options: IGrowPointsAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const points = element.getGraphicAttribute('points', false);\n return points.map((point: IPointLike) => {\n if (options && options.orient === 'negative') {\n let groupRight = animationParameters.width;\n\n if (animationParameters.group) {\n groupRight = (animationParameters as any).groupWidth ?? animationParameters.group.getBounds().width();\n\n (animationParameters as any).groupWidth = groupRight;\n }\n\n return {\n x: groupRight,\n y: point.y,\n x1: groupRight,\n y1: point.y1,\n defined: point.defined !== false\n } as IPointLike;\n }\n return {\n x: 0,\n y: point.y,\n x1: 0,\n y1: point.y1,\n defined: point.defined !== false\n } as IPointLike;\n });\n};\n\nexport const growPointsXIn: TypeAnimation = (\n element: IElement,\n options: IGrowPointsAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: { points: changePointsX(element, options, animationParameters) },\n to: { points: element.getGraphicAttribute('points', false) }\n };\n};\n\nexport const growPointsXOut: TypeAnimation = (\n element: IElement,\n options: IGrowPointsAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: { points: element.getGraphicAttribute('points', true) },\n to: { points: changePointsX(element, options, animationParameters) }\n };\n};\n\n// grow points y\n\nconst changePointsY = (\n element: IElement,\n options: IGrowPointsAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const points = element.getGraphicAttribute('points', false);\n return points.map((point: IPointLike) => {\n if (options && options.orient === 'negative') {\n let groupBottom = animationParameters.height;\n\n if (animationParameters.group) {\n groupBottom = (animationParameters as any).groupHeight ?? animationParameters.group.getBounds().height();\n\n (animationParameters as any).groupHeight = groupBottom;\n }\n\n return {\n x: point.x,\n y: groupBottom,\n x1: point.x1,\n y1: groupBottom,\n defined: point.defined !== false\n } as IPointLike;\n }\n return {\n x: point.x,\n y: 0,\n x1: point.x1,\n y1: 0,\n defined: point.defined !== false\n } as IPointLike;\n });\n};\n\nexport const growPointsYIn: TypeAnimation = (\n element: IElement,\n options: IGrowPointsAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: { points: changePointsY(element, options, animationParameters) },\n to: { points: element.getGraphicAttribute('points', false) }\n };\n};\n\nexport const growPointsYOut: TypeAnimation = (\n element: IElement,\n options: IGrowPointsAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: { points: element.getGraphicAttribute('points', true) },\n to: { points: changePointsY(element, options, animationParameters) }\n };\n};\n","import { isFunction, isValidNumber } from '@visactor/vutils';\nimport type { IElement, IMoveAnimationOptions, IAnimationParameters, TypeAnimation } from '../../../types';\n\n// When user did not provide proper x/y value, move animation will never work properly,\n// due to that, default x/y value won't be set.\n\nexport const moveIn: TypeAnimation = (\n element: IElement,\n options: IMoveAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const { offset = 0, orient, direction, point: pointOpt } = options ?? {};\n let changedX = 0;\n let changedY = 0;\n\n if (orient === 'negative') {\n // consider the offset of group\n if (animationParameters.group) {\n changedX = (animationParameters as any).groupWidth ?? animationParameters.group.getBounds().width();\n changedY = (animationParameters as any).groupHeight ?? animationParameters.group.getBounds().height();\n\n (animationParameters as any).groupWidth = changedX;\n (animationParameters as any).groupHeight = changedY;\n } else {\n changedX = animationParameters.width;\n changedY = animationParameters.height;\n }\n }\n\n changedX += offset;\n changedY += offset;\n const point = isFunction(pointOpt) ? pointOpt.call(null, element.getDatum(), element, animationParameters) : pointOpt;\n const fromX = point && isValidNumber(point.x) ? point.x : changedX;\n const fromY = point && isValidNumber(point.y) ? point.y : changedY;\n switch (direction) {\n case 'x':\n return {\n from: { x: fromX },\n to: { x: element.getGraphicAttribute('x', false) }\n };\n case 'y':\n return {\n from: { y: fromY },\n to: { y: element.getGraphicAttribute('y', false) }\n };\n case 'xy':\n default:\n return {\n from: { x: fromX, y: fromY },\n to: {\n x: element.getGraphicAttribute('x', false),\n y: element.getGraphicAttribute('y', false)\n }\n };\n }\n};\n\nexport const moveOut: TypeAnimation = (\n element: IElement,\n options: IMoveAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const { offset = 0, orient, direction, point: pointOpt } = options ?? {};\n\n // consider the offset of group\n const groupBounds = animationParameters.group ? animationParameters.group.getBounds() : null;\n const groupWidth = groupBounds?.width() ?? animationParameters.width;\n const groupHeight = groupBounds?.height() ?? animationParameters.height;\n const changedX = (orient === 'negative' ? groupWidth : 0) + offset;\n const changedY = (orient === 'negative' ? groupHeight : 0) + offset;\n const point = isFunction(pointOpt) ? pointOpt.call(null, element.getDatum(), element, animationParameters) : pointOpt;\n const fromX = point && isValidNumber(point.x) ? point.x : changedX;\n const fromY = point && isValidNumber(point.y) ? point.y : changedY;\n\n switch (direction) {\n case 'x':\n return {\n from: { x: element.getGraphicAttribute('x', true) },\n to: { x: fromX }\n };\n case 'y':\n return {\n from: { y: element.getGraphicAttribute('y', true) },\n to: { y: fromY }\n };\n case 'xy':\n default:\n return {\n from: {\n x: element.getGraphicAttribute('x', true),\n y: element.getGraphicAttribute('y', true)\n },\n to: { x: fromX, y: fromY }\n };\n }\n};\n","import type { IElement, IScaleAnimationOptions, IAnimationParameters, TypeAnimation } from '../../../types';\n\n// TODO: negative direction, need support from VRender\n\nexport const scaleIn: TypeAnimation = (\n element: IElement,\n options: IScaleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n switch (options?.direction) {\n case 'x':\n return {\n from: { scaleX: 0 },\n to: { scaleX: element.getGraphicAttribute('scaleX', false) ?? 1 }\n };\n case 'y':\n return {\n from: { scaleY: 0 },\n to: { scaleY: element.getGraphicAttribute('scaleY', false) ?? 1 }\n };\n case 'xy':\n default:\n return {\n from: { scaleX: 0, scaleY: 0 },\n to: {\n scaleX: element.getGraphicAttribute('scaleX', false) ?? 1,\n scaleY: element.getGraphicAttribute('scaleY', false) ?? 1\n }\n };\n }\n};\n\nexport const scaleOut: TypeAnimation = (\n element: IElement,\n options: IScaleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n switch (options?.direction) {\n case 'x':\n return {\n from: { scaleX: element.getGraphicAttribute('scaleX', true) ?? 1 },\n to: { scaleX: 0 }\n };\n case 'y':\n return {\n from: { scaleY: element.getGraphicAttribute('scaleY', true) ?? 1 },\n to: { scaleY: 0 }\n };\n case 'xy':\n default:\n return {\n from: {\n scaleX: element.getGraphicAttribute('scaleX', true) ?? 1,\n scaleY: element.getGraphicAttribute('scaleY', true) ?? 1\n },\n to: { scaleX: 0, scaleY: 0 }\n };\n }\n};\n","import { array } from '@visactor/vutils';\nimport { isEqual } from '@visactor/vgrammar-util';\nimport type { IElement } from '../../../types';\nimport type { IAnimationParameters, TypeAnimation } from '../../../types/animate';\n\nexport interface IUpdateAnimationOptions {\n excludeChannels: string[];\n}\n\nexport const update: TypeAnimation = (\n element: IElement,\n options: IUpdateAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const from = Object.assign({}, element.getPrevGraphicAttributes());\n const to = Object.assign({}, element.getNextGraphicAttributes());\n if (options) {\n array(options.excludeChannels).forEach(key => {\n delete from[key];\n delete to[key];\n });\n }\n Object.keys(to).forEach(key => {\n if (isEqual(key, from, to)) {\n delete from[key];\n delete to[key];\n }\n });\n return { from, to };\n};\n","import { isNumberClose, isValidNumber } from '@visactor/vutils';\nimport type { IAnimationParameters, IRotateAnimationOptions, TypeAnimation, IElement } from '../../../types';\n\nexport const rotateIn: TypeAnimation = (\n element: IElement,\n options: IRotateAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const finalAngle = element.getGraphicAttribute('angle', false) ?? 0;\n let angle = 0;\n if (isNumberClose(finalAngle / (Math.PI * 2), 0)) {\n angle = Math.round(finalAngle / (Math.PI * 2)) * Math.PI * 2;\n } else if (isValidNumber(options?.angle)) {\n angle = options.angle;\n } else if (options?.orient === 'anticlockwise') {\n angle = Math.ceil(finalAngle / (Math.PI * 2)) * Math.PI * 2;\n } else {\n angle = Math.floor(finalAngle / (Math.PI * 2)) * Math.PI * 2;\n }\n return {\n from: { angle },\n to: { angle: finalAngle }\n };\n};\n\nexport const rotateOut: TypeAnimation = (\n element: IElement,\n options: IRotateAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const finalAngle = element.getGraphicAttribute('angle', true) ?? 0;\n let angle = 0;\n if (isNumberClose(finalAngle / (Math.PI * 2), 0)) {\n angle = Math.round(finalAngle / (Math.PI * 2)) * Math.PI * 2;\n } else if (isValidNumber(options?.angle)) {\n angle = options.angle;\n } else if (options?.orient === 'anticlockwise') {\n angle = Math.ceil(finalAngle / (Math.PI * 2)) * Math.PI * 2;\n } else {\n angle = Math.floor(finalAngle / (Math.PI * 2)) * Math.PI * 2;\n }\n return {\n from: { angle: finalAngle },\n to: { angle }\n };\n};\n","import { clipIn, clipOut } from './clip';\nimport { fadeIn, fadeOut } from './fade';\nimport { growCenterIn, growCenterOut, growHeightIn, growHeightOut, growWidthIn, growWidthOut } from './grow-cartesian';\nimport { growAngleIn, growAngleOut, growRadiusIn, growRadiusOut } from './grow-polar';\nimport {\n growPointsIn,\n growPointsOut,\n growPointsXIn,\n growPointsXOut,\n growPointsYIn,\n growPointsYOut\n} from './grow-points';\nimport { growIntervalIn, growIntervalOut } from './grow-interval';\nimport { moveIn, moveOut } from './move';\nimport { scaleIn, scaleOut } from './scale';\nimport { update } from './update';\nimport { rotateIn, rotateOut } from './rotate';\nimport { Factory } from '../../../core/factory';\n\nexport {\n clipIn,\n clipOut,\n fadeIn,\n fadeOut,\n moveIn,\n moveOut,\n scaleIn,\n scaleOut,\n rotateIn,\n rotateOut,\n growCenterIn,\n growCenterOut,\n growWidthIn,\n growWidthOut,\n growHeightIn,\n growHeightOut,\n growAngleIn,\n growAngleOut,\n growRadiusIn,\n growRadiusOut,\n growPointsIn,\n growPointsOut,\n growPointsXIn,\n growPointsXOut,\n growPointsYIn,\n growPointsYOut,\n growIntervalIn,\n growIntervalOut,\n update\n};\n\nexport const registerClipInAnimation = () => {\n Factory.registerAnimationType('clipIn', clipIn);\n};\nexport const registerClipOutAnimation = () => {\n Factory.registerAnimationType('clipOut', clipOut);\n};\n\nexport const registerFadeInAnimation = () => {\n Factory.registerAnimationType('fadeIn', fadeIn);\n};\nexport const registerFadeOutAnimation = () => {\n Factory.registerAnimationType('fadeOut', fadeOut);\n};\n\nexport const registerGrowCenterInAnimation = () => {\n Factory.registerAnimationType('growCenterIn', growCenterIn);\n};\nexport const registerGrowCenterOutAnimation = () => {\n Factory.registerAnimationType('growCenterOut', growCenterOut);\n};\nexport const registerGrowHeightInAnimation = () => {\n Factory.registerAnimationType('growHeightIn', growHeightIn);\n};\nexport const registerGrowHeightOutAnimation = () => {\n Factory.registerAnimationType('growHeightOut', growHeightOut);\n};\nexport const registerGrowWidthInAnimation = () => {\n Factory.registerAnimationType('growWidthIn', growWidthIn);\n};\nexport const registerGrowWidthOutAnimation = () => {\n Factory.registerAnimationType('growWidthOut', growWidthOut);\n};\n\nexport const registerGrowIntervalInAnimation = () => {\n Factory.registerAnimationType('growIntervalIn', growIntervalIn);\n};\nexport const registerGrowIntervalOutAnimation = () => {\n Factory.registerAnimationType('growIntervalOut', growIntervalOut);\n};\n\nexport const registerGrowPointsInAnimation = () => {\n Factory.registerAnimationType('growPointsIn', growPointsIn);\n};\nexport const registerGrowPointsOutAnimation = () => {\n Factory.registerAnimationType('growPointsOut', growPointsOut);\n};\nexport const registerGrowPointsXInAnimation = () => {\n Factory.registerAnimationType('growPointsXIn', growPointsXIn);\n};\nexport const registerGrowPointsXOutAnimation = () => {\n Factory.registerAnimationType('growPointsXOut', growPointsXOut);\n};\nexport const registerGrowPointsYInAnimation = () => {\n Factory.registerAnimationType('growPointsYIn', growPointsYIn);\n};\nexport const registerGrowPointsYOutAnimation = () => {\n Factory.registerAnimationType('growPointsYOut', growPointsYOut);\n};\n\nexport const registerGrowAngleInAnimation = () => {\n Factory.registerAnimationType('growAngleIn', growAngleIn);\n};\nexport const registerGrowAngleOutAnimation = () => {\n Factory.registerAnimationType('growAngleOut', growAngleOut);\n};\nexport const registerGrowRadiusInAnimation = () => {\n Factory.registerAnimationType('growRadiusIn', growRadiusIn);\n};\nexport const registerGrowRadiusOutAnimation = () => {\n Factory.registerAnimationType('growRadiusOut', growRadiusOut);\n};\n\nexport const registerMoveInAnimation = () => {\n Factory.registerAnimationType('moveIn', moveIn);\n};\nexport const registerMoveOutAnimation = () => {\n Factory.registerAnimationType('moveOut', moveOut);\n};\n\nexport const registerScaleInAnimation = () => {\n Factory.registerAnimationType('scaleIn', scaleIn);\n};\nexport const registerScaleOutAnimation = () => {\n Factory.registerAnimationType('scaleOut', scaleOut);\n};\n\nexport const registerRotateInAnimation = () => {\n Factory.registerAnimationType('rotateIn', rotateIn);\n};\nexport const registerRotateOutAnimation = () => {\n Factory.registerAnimationType('rotateOut', rotateOut);\n};\n\nexport const registerUpdateAnimation = () => {\n Factory.registerAnimationType('update', update);\n};\n","/* eslint-disable no-duplicate-imports */\nimport { TagPointsUpdate, ClipDirectionAnimate } from '@visactor/vrender-core';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { ILineAnimationParams, LineAppearPreset } from '../series/line/animation';\nimport { linePresetAnimation } from '../series/line/animation';\nimport type { MarkAnimationSpec, ICartesianGroupAnimationParams } from './interface';\nimport { Factory } from '../core/factory';\nimport {\n View,\n registerScaleInAnimation,\n registerScaleOutAnimation,\n registerFadeInAnimation,\n registerFadeOutAnimation,\n registerClipInAnimation,\n registerClipOutAnimation,\n registerGrowAngleInAnimation,\n registerGrowAngleOutAnimation,\n registerGrowCenterInAnimation,\n registerGrowCenterOutAnimation,\n registerGrowHeightInAnimation,\n registerGrowHeightOutAnimation,\n registerGrowPointsInAnimation,\n registerGrowPointsOutAnimation,\n registerGrowPointsXInAnimation,\n registerGrowPointsXOutAnimation,\n registerGrowPointsYInAnimation,\n registerGrowPointsYOutAnimation,\n registerGrowRadiusInAnimation,\n registerGrowRadiusOutAnimation,\n registerGrowWidthInAnimation,\n registerGrowWidthOutAnimation,\n registerMoveInAnimation,\n registerMoveOutAnimation,\n registerRotateInAnimation,\n registerRotateOutAnimation,\n registerUpdateAnimation\n} from '@visactor/vgrammar-core';\n\nexport const DEFAULT_ANIMATION_CONFIG = {\n appear: {\n duration: 1000,\n easing: 'cubicOut'\n },\n update: {\n type: 'update',\n duration: 300,\n easing: 'linear'\n },\n enter: {\n duration: 300,\n easing: 'linear'\n },\n exit: {\n duration: 300,\n easing: 'linear'\n },\n disappear: {\n duration: 500,\n easing: 'cubicIn'\n }\n};\n\nexport const ScaleInOutAnimation = {\n appear: { type: 'scaleIn' },\n enter: { type: 'scaleIn' },\n exit: { type: 'scaleOut' },\n disappear: { type: 'scaleOut' }\n};\n\nexport const FadeInOutAnimation = {\n appear: { type: 'fadeIn' },\n enter: { type: 'fadeIn' },\n exit: { type: 'fadeOut' },\n disappear: { type: 'fadeOut' }\n};\n\nexport const registerScaleInOutAnimation = () => {\n Factory.registerAnimation('scaleInOut', () => ScaleInOutAnimation);\n};\n\nexport const registerFadeInOutAnimation = () => {\n Factory.registerAnimation('fadeInOut', () => FadeInOutAnimation);\n};\n\nexport const registerCartesianGroupClipAnimation = () => {\n Factory.registerAnimation('cartesianGroupClip', (params?: ICartesianGroupAnimationParams) => {\n return {\n appear: {\n custom: ClipDirectionAnimate,\n customParameters: (datum: any, element: IElement) => {\n return {\n animationType: 'in',\n group: element.getGraphicItem(),\n direction: params.direction(),\n width: params.width(),\n height: params.height(),\n orient: params.orient()\n };\n }\n },\n disappear: {\n custom: ClipDirectionAnimate,\n customParameters: (datum: any, element: IElement) => {\n return {\n animationType: 'out',\n group: element.getGraphicItem(),\n direction: params.direction(),\n width: params.width(),\n height: params.height(),\n orient: params.orient()\n };\n }\n }\n };\n });\n};\n\nexport const registerLineAnimation = () => {\n Factory.registerAnimation('line', (params: ILineAnimationParams, preset: LineAppearPreset) => {\n return {\n appear: linePresetAnimation(params, preset),\n enter: { type: 'fadeIn' },\n exit: { type: 'fadeOut' },\n update: [\n {\n type: 'update',\n options: { excludeChannels: ['points', 'defined'] }\n },\n {\n channel: ['points'],\n custom: TagPointsUpdate,\n duration: DEFAULT_ANIMATION_CONFIG.update.duration,\n easing: DEFAULT_ANIMATION_CONFIG.update.easing\n }\n ],\n disappear: { type: 'clipOut' }\n } as MarkAnimationSpec;\n });\n};\n\nexport const registerVGrammarCommonAnimation = () => {\n View.useRegisters([\n registerScaleInAnimation,\n registerScaleOutAnimation,\n registerFadeInAnimation,\n registerFadeOutAnimation,\n registerMoveInAnimation,\n registerMoveOutAnimation,\n registerRotateInAnimation,\n registerRotateOutAnimation,\n registerUpdateAnimation\n ]);\n};\n\nexport const registerVGrammarRectAnimation = () => {\n View.useRegisters([\n registerGrowHeightInAnimation,\n registerGrowHeightOutAnimation,\n registerGrowWidthInAnimation,\n registerGrowWidthOutAnimation,\n registerGrowCenterInAnimation,\n registerGrowCenterOutAnimation\n ]);\n};\n\nexport const registerVGrammarArcAnimation = () => {\n View.useRegisters([\n registerGrowRadiusInAnimation,\n registerGrowRadiusOutAnimation,\n registerGrowAngleInAnimation,\n registerGrowAngleOutAnimation\n ]);\n};\n\nexport const registerVGrammarLineOrAreaAnimation = () => {\n View.useRegisters([\n registerGrowPointsInAnimation,\n registerGrowPointsOutAnimation,\n registerGrowPointsXInAnimation,\n registerGrowPointsXOutAnimation,\n registerGrowPointsYInAnimation,\n registerGrowPointsYOutAnimation,\n registerClipInAnimation,\n registerClipOutAnimation\n ]);\n};\n\nexport const registerVGrammarPolygonAnimation = () => {\n View.useRegisters([registerGrowPointsInAnimation, registerGrowPointsOutAnimation]);\n};\n","import type { FilterTransformOption } from '../../types';\n\nexport const transform = (options: FilterTransformOption, data: any[], parameters?: any) => {\n return data.filter(entry => {\n return options.callback(entry, parameters);\n });\n};\n","import { isNil } from '@visactor/vutils';\nimport type { MapTransformOption } from '../../types';\n\nexport const transform = (options: MapTransformOption, upstreamData: any[], params?: any) => {\n const func = options.callback;\n const as = options.as;\n\n if (!options.all) {\n upstreamData.forEach(entry => {\n const data = func(entry, params);\n\n if (!isNil(as)) {\n if (isNil(entry)) {\n return;\n }\n entry[as] = data;\n }\n\n return data;\n });\n\n return upstreamData;\n }\n const data = func(upstreamData, params);\n\n if (isNil(as) || isNil(upstreamData)) {\n return data;\n }\n\n (upstreamData as any)[as] = data;\n\n return upstreamData;\n};\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-transforms/src/util/util.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { isNil, isString } from '@visactor/vutils';\nimport type { FieldGetterFunction } from '@visactor/vgrammar-util';\nimport { accessorName } from '@visactor/vgrammar-util';\n\n// use either provided alias or accessor field name\nexport function fieldNames(fields: string[] | FieldGetterFunction[], as?: string[]) {\n if (!fields) {\n return null;\n }\n return fields.map((f, i) => {\n return as[i] ?? (isString(f) ? f : accessorName(f));\n });\n}\n\nexport function partition(data?: any[], groupBy?: FieldGetterFunction[], field?: FieldGetterFunction) {\n // partition data points into groups\n if (isNil(groupBy)) {\n return [data.map(field)];\n }\n\n const groups: any[] = [];\n const map: Record = {};\n data.forEach((entry: any) => {\n const groupKey = groupBy.map((groupFunc: (arg: any) => any) => groupFunc(entry)).toString();\n\n if (!map[groupKey]) {\n const groupItem: any[] = [];\n (groupItem as any).dims = groupKey;\n groups.push(groupItem);\n map[groupKey] = groupItem;\n } else {\n map[groupKey].push(field(entry));\n }\n });\n\n return groups;\n}\n\nexport function normalizeAngle(angle: number): number {\n while (angle < 0) {\n angle += Math.PI * 2;\n }\n while (angle >= Math.PI * 2) {\n angle -= Math.PI * 2;\n }\n return angle;\n}\n\nexport function computeQuadrant(angle: number): 1 | 2 | 3 | 4 {\n angle = normalizeAngle(angle);\n if (angle > 0 && angle <= Math.PI / 2) {\n return 2;\n } else if (angle > Math.PI / 2 && angle <= Math.PI) {\n return 3;\n } else if (angle > Math.PI && angle <= (3 * Math.PI) / 2) {\n return 4;\n }\n return 1;\n}\n\nexport function sum(arr: any[]) {\n return arr.reduce((accumulator, currentValue) => accumulator + currentValue, 0);\n}\n\nexport function average(arr: any[]) {\n if (arr.length === 0) {\n return 0;\n }\n const total = sum(arr);\n return total / arr.length;\n}\n","import { maxInArray, minInArray } from '@visactor/vutils';\nimport type { SampleTransformOptions } from '../../types';\nimport { average, sum } from '../util/util';\n\nconst samplerMap = {\n min: minInArray,\n max: maxInArray,\n average: average,\n sum: sum\n};\n\nfunction lttb(size: number, array: any[], isGroup: boolean, yfield: string) {\n const frameSize = Math.floor(array.length / size);\n const newIndices = [];\n const len = array.length;\n\n let currentIndex = 0;\n let sampledIndex = 0;\n let maxArea;\n let area;\n let nextIndex;\n\n // First frame use the first data.\n newIndices[sampledIndex++] = currentIndex;\n\n for (let i = 1; i < len - 1; i += frameSize) {\n const nextFrameStart = Math.min(i + frameSize, len - 1);\n const nextFrameEnd = Math.min(i + frameSize * 2, len);\n\n const avgX = (nextFrameEnd + nextFrameStart) / 2;\n let avgY = 0;\n\n for (let idx = nextFrameStart; idx < nextFrameEnd; idx++) {\n const value = array[idx][yfield];\n if (Number.isNaN(value)) {\n continue;\n }\n avgY += value;\n }\n avgY /= nextFrameEnd - nextFrameStart;\n\n const frameStart = i;\n const frameEnd = Math.min(i + frameSize, len);\n\n const pointAX = i - 1;\n const pointAY = array[currentIndex][yfield];\n\n maxArea = -1;\n\n nextIndex = frameStart;\n // Find a point from current frame that construct a triangel with largest area with previous selected point\n // And the average of next frame.\n for (let idx = frameStart; idx < frameEnd; idx++) {\n const value = array[idx][yfield];\n if (Number.isNaN(yfield)) {\n continue;\n }\n // Calculate triangle area over three buckets\n area = Math.abs((pointAX - avgX) * (value - pointAY) - (pointAX - idx) * (avgY - pointAY));\n if (area > maxArea) {\n maxArea = area;\n nextIndex = idx; // Next a is this b\n }\n }\n\n newIndices[sampledIndex++] = nextIndex;\n\n currentIndex = nextIndex; // This a is the next a (chosen b)\n }\n\n // First frame use the last data.\n if (newIndices[sampledIndex - 1] !== len - 1) {\n newIndices[sampledIndex++] = len - 1;\n }\n\n // output newly added tuples\n const newRawIndices = newIndices.map(i => (isGroup ? array[i].i : i));\n return newRawIndices;\n}\n\nfunction sample(size: number, array: any[], isGroup: boolean, mode: 'min' | 'max' | 'average' | 'sum', yfield: string) {\n let frameSize = Math.floor(array.length / size);\n const newIndices = [];\n const len = array.length;\n let sampledIndex = 0;\n let frameValues = [];\n\n newIndices.push(sampledIndex);\n array[sampledIndex][yfield] = array[sampledIndex][yfield];\n\n for (let i = 1; i < len - 1; i += frameSize) {\n if (frameSize > len - i) {\n frameSize = len - i;\n frameValues.length = frameSize;\n }\n frameValues = [];\n for (let k = 0; k < frameSize; k++) {\n frameValues.push(array[i + k][yfield]);\n }\n const value = samplerMap[mode](frameValues);\n sampledIndex = Math.min(Math.round(i + frameValues.length / 2) || 0, len - 1);\n array[sampledIndex][yfield] = value;\n newIndices.push(sampledIndex);\n }\n const newRawIndices = newIndices.map(i => (isGroup ? array[i].i : i));\n return newRawIndices;\n}\n\nfunction sampleMin(size: number, array: any[], isGroup: boolean, yfield: string) {\n return sample(size, array, isGroup, 'min', yfield);\n}\n\nfunction sampleMax(size: number, array: any[], isGroup: boolean, yfield: string) {\n return sample(size, array, isGroup, 'max', yfield);\n}\n\nfunction sampleAverage(size: number, array: any[], isGroup: boolean, yfield: string) {\n return sample(size, array, isGroup, 'average', yfield);\n}\n\nfunction sampleSum(size: number, array: any[], isGroup: boolean, yfield: string) {\n return sample(size, array, isGroup, 'sum', yfield);\n}\n\n/**\n * Samples tuples passing through this operator.\n * mode: 'lttb' - Uses lttb sampling to maintain a trend-maintained sample.\n * mode: 'min' | 'max' | 'average' | 'sum' - Uses aggregation methods to location sample points.\n * @constructor\n * @param {object} options - The parameters for this operator.\n * @param {number} [options.size=1000] - The maximum number of samples.\n * @param {string} [options.yfield] - The yfield string of data.\n * @param {string} [options.groupBy] - The groupBy string of data.\n */\n\nexport const transform = (options: SampleTransformOptions, upstreamData: any[]) => {\n let size = options.size;\n const factor = options.factor || 1;\n\n if (Array.isArray(size)) {\n size = Math.floor(size[1] - size[0]);\n }\n\n size *= factor;\n\n // size<=0的特殊情况不采样,返回空\n if (size <= 0) {\n return [];\n }\n\n // 数据 {\n const group = groups[groupName];\n if (group.length <= size) {\n const indices = group.map((datum: any) => {\n return datum.i;\n });\n rawIndice = rawIndice.concat(indices);\n } else {\n const indices = sampler(size, group, true, yfield);\n rawIndice = rawIndice.concat(indices);\n group.forEach((datum: any) => (upstreamData[datum.i][yfield] = datum[yfield]));\n }\n });\n\n // 采样后,按照原始顺序排序\n rawIndice.sort((a, b) => a - b);\n\n return rawIndice.map((index: number) => upstreamData[index]);\n }\n return sampler(size, upstreamData, false, yfield).map(index => upstreamData[index]);\n }\n\n return [];\n};\n","import { isNil } from '@visactor/vutils';\nimport type { IElement, MarkOverlapTransformOptions } from '../../types';\n\nconst HIDE_KEY = '_mo_hide_';\n\nfunction reset(elements: IElement[]) {\n elements.forEach(element => {\n const hide = element.getGraphicAttribute('HIDE_KEY');\n\n if (hide) {\n element.setGraphicAttribute('visible', true);\n element.setGraphicAttribute(HIDE_KEY, false);\n }\n });\n return elements;\n}\n\nfunction overlapX(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n let lastX = -Infinity;\n let lastR = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentX = element.getGraphicAttribute('x');\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n if (Math.abs(currentX - lastX) < itemDelta + lastR + r) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastX = currentX;\n }\n\n lastR = r;\n });\n }\n}\n\nfunction overlapY(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n let lastY = -Infinity;\n let lastR = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentY = element.getGraphicAttribute('y');\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n if (Math.abs(currentY - lastY) < itemDelta + lastR + r) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastY = currentY;\n }\n\n lastR = r;\n });\n }\n}\n\nfunction overlapXY(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n const lastX = -Infinity;\n let lastY = -Infinity;\n let lastR = 0;\n let dis = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentX = element.getGraphicAttribute('x');\n const currentY = element.getGraphicAttribute('y');\n\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n dis = (lastX - currentX) ** 2 + (lastY - currentY) ** 2;\n if (dis < (itemDelta + lastR + r) ** 2) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastY = currentY;\n }\n\n lastR = r;\n });\n }\n}\n\n/**\n * 针对mark的防重叠\n * @param {object} options - The parameters for this operator.\n * @param {data} [options.followMark]\n * @constructor\n */\nexport const transform = (options: MarkOverlapTransformOptions, upstreamData: IElement[]) => {\n if (!upstreamData || upstreamData.length === 0) {\n return;\n }\n let { radius } = options;\n if (isNil(radius)) {\n if (upstreamData[0].mark.markType === 'symbol') {\n radius = true;\n }\n }\n\n const { direction, delta, deltaMul = 1, groupBy } = options;\n\n const handleOverlap = (elements: IElement[]) => {\n reset(elements);\n\n const sortedElements = elements.slice().sort((a, b) => {\n return a.getGraphicAttribute('x') - b.getGraphicAttribute('x');\n });\n\n if (direction === 0) {\n overlapXY(sortedElements, delta, deltaMul, radius);\n } else if (direction === 1) {\n overlapX(sortedElements, delta, deltaMul, radius);\n } else {\n overlapY(sortedElements, delta, deltaMul, radius);\n }\n };\n\n if (!groupBy) {\n handleOverlap(upstreamData);\n } else {\n // 分组\n const map = upstreamData.reduce((res: { [key: string]: IElement[] }, element: IElement) => {\n const groupName = element.getDatum()[groupBy];\n\n if (res[groupName]) {\n res[groupName].push(element);\n } else {\n res[groupName] = [element];\n }\n\n return res;\n }, {});\n\n Object.keys(map).forEach(key => {\n handleOverlap(map[key]);\n });\n }\n\n return upstreamData;\n};\n","import type { IRichTextAttribute, ITextGraphicAttribute } from '../interface';\nimport { graphicCreator } from './graphic-creator';\n// import { createRichText, createText } from './graphic-creator';\n\ntype ITextBoundsParams = Partial;\nlet text: any;\nexport function getTextBounds(params: ITextBoundsParams) {\n if (!text) {\n text = graphicCreator.CreateGraphic('text', {});\n }\n text.initAttributes(params);\n return text.AABBBounds;\n}\n\ntype IRichTextBoundsParams = Partial;\nlet richText: any;\nexport function getRichTextBounds(params: IRichTextBoundsParams) {\n if (!richText) {\n richText = graphicCreator.CreateGraphic('richtext', {});\n }\n richText.setAttributes(params);\n return richText.AABBBounds;\n}\n","import type { ITextMeasureOption } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { TextMeasure } from '@visactor/vutils';\nimport { ITextGraphicAttribute } from '@visactor/vrender-core';\nimport { getTextBounds } from '@visactor/vrender-core';\n\nexport const initTextMeasure = (\n textSpec?: Partial,\n option?: Partial,\n useNaiveCanvas?: boolean,\n defaultFontParams?: Partial\n): TextMeasure => {\n return new TextMeasure(\n {\n defaultFontParams: {\n fontFamily:\n // eslint-disable-next-line max-len\n 'PingFang SC,Helvetica Neue,Microsoft Yahei,system-ui,-apple-system,segoe ui,Roboto,Helvetica,Arial,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol',\n fontSize: 14,\n ...defaultFontParams\n },\n getTextBounds: useNaiveCanvas ? undefined : getTextBounds,\n specialCharSet: '-/: .,@%\\'\"~' + TextMeasure.ALPHABET_CHAR_SET + TextMeasure.ALPHABET_CHAR_SET.toUpperCase(),\n ...(option ?? {})\n },\n textSpec\n );\n};\n","import { measureText } from '../util';\n\n/** 存放一些业务方可能会在扩展功能里用到的工具方法 */\nexport const VCHART_UTILS = {\n measureText\n};\n","import type { ITextMeasureOption, ITextSize } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport type { TextMeasure } from '@visactor/vutils';\nimport { THEME_CONSTANTS } from '../theme/builtin/common/constants';\nimport { initTextMeasure as initTextMeasureFunc } from '@visactor/vutils-extension';\nimport type { ITextGraphicAttribute } from '@visactor/vrender-core';\n\nexport const initTextMeasure = (\n textSpec?: Partial,\n option?: Partial,\n useNaiveCanvas?: boolean\n): TextMeasure => {\n return initTextMeasureFunc(textSpec, option, useNaiveCanvas, {\n fontFamily: THEME_CONSTANTS.defaultFontFamily,\n fontSize: THEME_CONSTANTS.defaultFontSize\n });\n};\n\nexport const measureText = (\n text: string,\n textSpec?: Partial,\n option?: Partial,\n useNaiveCanvas?: boolean\n): ITextSize => {\n return initTextMeasure(textSpec, option, useNaiveCanvas).measure(text);\n};\n","export class ExpressionFunction {\n functions: { [key: string]: Function };\n\n static instance_: ExpressionFunction;\n\n // 单例模式\n static instance(): ExpressionFunction {\n if (!ExpressionFunction.instance_) {\n ExpressionFunction.instance_ = new ExpressionFunction();\n }\n return ExpressionFunction.instance_;\n }\n\n constructor() {\n this.functions = {};\n }\n\n // 注册函数\n registerFunction(name: string, fun: Function) {\n if (!name || !fun) {\n return;\n }\n this.functions[name] = fun;\n }\n\n // 注销函数\n unregisterFunction(name: string) {\n if (!name) {\n return;\n }\n delete this.functions[name];\n }\n\n // 获取函数\n getFunction(name: string): Function | null {\n return this.functions[name] || null;\n }\n\n // 获取函数名列表\n getFunctionNameList(): string[] | null {\n return Object.keys(this.functions);\n }\n}\n","import { injectable } from '../../common/inversify-lite';\nimport type { CanvasConfigType, ICanvas, IContext2d, EnvType } from '../../interface';\n\nconst DefaultConfig = {\n WIDTH: 500,\n HEIGHT: 500,\n DPR: 1\n};\n\n@injectable()\nexport abstract class BaseCanvas implements ICanvas {\n static env: EnvType = 'browser';\n // 显示的宽高,如果是离屏canvas,就是pixelWidth / pixelRatio\n protected _displayWidth: number; // 显示的宽度\n protected _displayHeight: number; // 显示的高度\n protected _id: number | string;\n // 像素宽高\n protected _pixelWidth: number; // 像素宽度\n protected _pixelHeight: number; // 像素高度\n\n protected _x: number;\n protected _y: number;\n protected _dpr: number;\n\n protected _container?: HTMLElement | null;\n protected _nativeCanvas: HTMLCanvasElement;\n protected _context: IContext2d;\n protected _visiable: boolean;\n protected controled: boolean;\n\n get displayWidth(): number {\n return this._pixelWidth / this._dpr;\n }\n\n get displayHeight(): number {\n return this._pixelHeight / this._dpr;\n }\n\n get id(): number | string {\n return this._id;\n }\n get x(): number {\n return this._x;\n }\n set x(_x: number) {\n this._x = _x;\n }\n get y(): number {\n return this._y;\n }\n set y(_y: number) {\n this._y = _y;\n }\n get nativeCanvas(): HTMLCanvasElement {\n return this._nativeCanvas;\n }\n\n get width(): number {\n return this._pixelWidth;\n }\n set width(width: number) {\n this._pixelWidth = width;\n this._displayWidth = width / (this._dpr || 1);\n }\n\n get height(): number {\n return this._pixelHeight;\n }\n set height(height: number) {\n this._pixelHeight = height;\n this._displayHeight = height / (this._dpr || 1);\n }\n getContext(str?: string): IContext2d {\n return this._context;\n }\n\n get visiable(): boolean {\n return this._visiable;\n }\n set visiable(visiable: boolean) {\n this._visiable = visiable;\n visiable ? this.show() : this.hide();\n }\n\n get dpr(): number {\n return this._dpr;\n }\n set dpr(dpr: number) {\n // this._lastPixelRatio = this._pixelRatio;\n this._dpr = dpr;\n this.resize(this._displayWidth, this._displayHeight);\n }\n\n /**\n * 通过canvas生成一个wrap对象,初始化时不会再设置canvas的属性\n * @param params\n */\n constructor(params: CanvasConfigType) {\n const {\n nativeCanvas,\n width = DefaultConfig.WIDTH,\n height = DefaultConfig.HEIGHT,\n dpr = DefaultConfig.DPR,\n x,\n y,\n id,\n canvasControled = true\n } = params;\n const offsetX = 0;\n const offsetY = 0;\n this._x = x ?? offsetX;\n this._y = y ?? offsetY;\n this._pixelWidth = width * dpr;\n this._pixelHeight = height * dpr;\n this._visiable = params.visiable !== false;\n this.controled = canvasControled;\n\n // 离屏canvas\n this._displayWidth = width;\n this._displayHeight = height;\n this._dpr = dpr;\n this._nativeCanvas = nativeCanvas;\n this._id = nativeCanvas.id ?? id;\n if (id) {\n nativeCanvas.id = id;\n }\n\n this.init(params);\n }\n\n getNativeCanvas(): HTMLCanvasElement {\n return this._nativeCanvas;\n }\n hide() {\n return;\n }\n show() {\n return;\n }\n\n abstract init(params: CanvasConfigType): void;\n\n applyPosition(): void {\n return;\n }\n\n resetStyle(params: Partial): void {\n return;\n }\n\n /**\n * 设置canvas的size大小,设置context的scale\n * @param width\n * @param height\n */\n resize(width: number, height: number): void {\n return;\n }\n\n toDataURL(): string;\n toDataURL(mimeType: 'image/png'): string;\n toDataURL(mimeType: 'image/jpeg', quality: number): string;\n toDataURL(mimeType?: string, quality?: number) {\n return '';\n }\n\n readPixels(x: number, y: number, w: number, h: number): ImageData | Promise {\n return this._context.getImageData(x, y, w, h);\n }\n\n convertToBlob(options?: { type?: string | undefined; quality?: number | undefined } | undefined): Promise {\n throw new Error('暂未实现');\n }\n\n transferToImageBitmap(): ImageBitmap {\n throw new Error('暂未实现');\n }\n\n release(...params: any): void {\n if (this.controled) {\n this._nativeCanvas.parentElement && this._nativeCanvas.parentElement.removeChild(this._nativeCanvas);\n }\n }\n}\n","/**\n * 部分源码参考konva\n * MIT License\n\n Original work Copyright (C) 2011 - 2013 by Eric Rowell (KineticJS)\n Modified work Copyright (C) 2014 - present by Anton Lavrenov (Konva)\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n */\nimport type { IPointLike, TextMeasure, ITextMeasureSpec } from '@visactor/vutils';\nimport { Matrix, pi, pi2, Logger } from '@visactor/vutils';\nimport {\n injectable,\n DefaultFillStyle,\n DefaultStrokeStyle,\n DefaultTextStyle,\n createColor,\n getScaledStroke,\n application,\n matrixAllocate,\n transformMat4,\n getContextFont,\n createConicalGradient\n} from '@visactor/vrender-core';\nimport type {\n ICamera,\n ICanvas,\n ICommonStyleParams,\n IConicalGradientData,\n IContext2d,\n ISetCommonStyleParams,\n ISetStrokeStyleParams,\n IStrokeStyleParams,\n ITextStyleParams,\n mat4,\n EnvType,\n vec3\n} from '@visactor/vrender-core';\n\nconst outP: [number, number, number] = [0, 0, 0];\n\n// https://github.com/konvajs/konva/blob/master/src/Context.ts\nconst initMatrix = new Matrix(1, 0, 0, 1, 0, 0);\n\nconst addArcToBezierPath = (\n bezierPath: Array,\n startAngle: number,\n endAngle: number,\n cx: number,\n cy: number,\n rx: number,\n ry: number,\n clockwise: boolean\n) => {\n if (clockwise) {\n while (endAngle > startAngle) {\n endAngle -= pi2;\n }\n } else {\n while (endAngle < startAngle) {\n endAngle += pi2;\n }\n }\n // https://stackoverflow.com/questions/1734745/how-to-create-circle-with-b%C3%A9zier-curves\n const step = (pi / 3) * (endAngle > startAngle ? 1 : -1);\n let sa = startAngle;\n let ea = sa;\n while (ea !== endAngle) {\n ea = step > 0 ? Math.min(ea + step, endAngle) : Math.max(ea + step, endAngle);\n const delta = Math.abs(ea - sa);\n const len = (Math.tan(delta / 4) * 4) / 3;\n const dir = ea < sa ? -1 : 1;\n\n const c1 = Math.cos(sa);\n const s1 = Math.sin(sa);\n const c2 = Math.cos(ea);\n const s2 = Math.sin(ea);\n\n const x1 = c1 * rx + cx;\n const y1 = s1 * ry + cy;\n\n const x4 = c2 * rx + cx;\n const y4 = s2 * ry + cy;\n\n const hx = rx * len * dir;\n const hy = ry * len * dir;\n\n bezierPath.push([x1 - hx * s1, y1 + hy * c1, x4 + hx * s2, y4 - hy * c2, x4, y4]);\n sa = ea;\n }\n};\n\n@injectable()\nexport class BrowserContext2d implements IContext2d {\n static env: EnvType = 'browser';\n drawPromise?: Promise;\n declare mathTextMeasure: TextMeasure;\n\n declare canvas: ICanvas;\n declare camera?: ICamera;\n modelMatrix?: mat4;\n declare nativeContext: CanvasRenderingContext2D | any;\n declare _inuse: boolean;\n declare stack: Matrix[];\n declare disableFill?: boolean;\n declare disableStroke?: boolean;\n declare disableBeginPath?: boolean;\n protected matrix: Matrix;\n protected applyedMatrix?: Matrix; // 被应用的matrix\n declare fontFamily: string;\n declare fontSize: number;\n // 属性代理\n set fillStyle(d: string | CanvasGradient | CanvasPattern) {\n this.nativeContext.fillStyle = d;\n }\n get fillStyle(): string | CanvasGradient | CanvasPattern {\n return this.nativeContext.fillStyle;\n }\n set font(d: string) {\n this.nativeContext.font = d;\n }\n get font(): string {\n return this.nativeContext.font;\n }\n set globalAlpha(d: number) {\n this.nativeContext.globalAlpha = d;\n }\n get globalAlpha(): number {\n return this.nativeContext.globalAlpha;\n }\n set lineCap(d: CanvasLineCap) {\n this.nativeContext.lineCap = d;\n }\n get lineCap(): CanvasLineCap {\n return this.nativeContext.lineCap;\n }\n set lineDashOffset(d: number) {\n this.nativeContext.lineDashOffset = d;\n }\n get lineDashOffset(): number {\n return this.nativeContext.lineDashOffset;\n }\n set lineJoin(d: CanvasLineJoin) {\n this.nativeContext.lineJoin = d;\n }\n get lineJoin(): CanvasLineJoin {\n return this.nativeContext.lineJoin;\n }\n set lineWidth(d: number) {\n this.nativeContext.lineWidth = d;\n }\n get lineWidth(): number {\n return this.nativeContext.lineWidth;\n }\n set miterLimit(d: number) {\n this.nativeContext.miterLimit = d;\n }\n get miterLimit(): number {\n return this.nativeContext.miterLimit;\n }\n set shadowBlur(d: number) {\n this.nativeContext.shadowBlur = d;\n }\n get shadowBlur(): number {\n return this.nativeContext.shadowBlur;\n }\n set shadowColor(d: string) {\n this.nativeContext.shadowColor = d;\n }\n get shadowColor(): string {\n return this.nativeContext.shadowColor;\n }\n set shadowOffsetX(d: number) {\n this.nativeContext.shadowOffsetX = d;\n }\n get shadowOffsetX(): number {\n return this.nativeContext.shadowOffsetX;\n }\n set shadowOffsetY(d: number) {\n this.nativeContext.shadowOffsetY = d;\n }\n get shadowOffsetY(): number {\n return this.nativeContext.shadowOffsetY;\n }\n set strokeStyle(d: string | CanvasGradient | CanvasPattern) {\n this.nativeContext.strokeStyle = d;\n }\n get strokeStyle(): string | CanvasGradient | CanvasPattern {\n return this.nativeContext.strokeStyle;\n }\n set textAlign(d: CanvasTextAlign) {\n this.nativeContext.textAlign = d;\n }\n get textAlign(): CanvasTextAlign {\n return this.nativeContext.textAlign;\n }\n set textBaseline(d: CanvasTextBaseline) {\n this.nativeContext.textBaseline = d;\n }\n get textBaseline(): CanvasTextBaseline {\n return this.nativeContext.textBaseline;\n }\n\n get inuse(): boolean {\n return !!this._inuse;\n }\n\n set inuse(use: boolean) {\n if (use === !!this._inuse) {\n return;\n }\n this._inuse = use;\n if (use) {\n this.nativeContext.save();\n this.reset();\n } else {\n this.nativeContext.restore();\n }\n }\n\n dpr: number;\n\n constructor(canvas: ICanvas, dpr: number) {\n const context = canvas.nativeCanvas.getContext('2d');\n if (!context) {\n throw new Error('发生错误,获取2d上下文失败');\n }\n this.nativeContext = context;\n this.canvas = canvas;\n this.matrix = new Matrix(1, 0, 0, 1, 0, 0);\n this.stack = [];\n this.dpr = dpr;\n this.applyedMatrix = new Matrix(1, 0, 0, 1, 0, 0);\n }\n\n reset() {\n if (this.stack.length) {\n Logger.getInstance().warn('可能存在bug,matrix没有清空');\n }\n this.matrix.setValue(1, 0, 0, 1, 0, 0);\n this.applyedMatrix = new Matrix(1, 0, 0, 1, 0, 0);\n this.stack.length = 0;\n this.nativeContext.setTransform(1, 0, 0, 1, 0, 0);\n }\n\n getCanvas() {\n return this.canvas;\n }\n\n getContext() {\n return this.nativeContext;\n }\n /**\n * 设置当前ctx 的transform信息\n */\n setTransformForCurrent(force: boolean = false) {\n // 只作简单判断\n // 增加判断,可以降低80%setTransform调用,降低50%setTransformForCurrent执行时间\n if (!force && this.applyedMatrix.equalToMatrix(this.matrix)) {\n return;\n }\n\n // this.applyedMatrix = this.cloneMatrix(this.matrix);\n // 避免直接使用cloneMatrix,重复创建Matrix,优化GC\n this.applyedMatrix.setValue(\n this.matrix.a,\n this.matrix.b,\n this.matrix.c,\n this.matrix.d,\n this.matrix.e,\n this.matrix.f\n );\n this.nativeContext.setTransform(\n this.matrix.a,\n this.matrix.b,\n this.matrix.c,\n this.matrix.d,\n this.matrix.e,\n this.matrix.f\n );\n }\n /**\n * 获取当前矩阵信息\n */\n get currentMatrix() {\n return this.matrix;\n }\n\n cloneMatrix(m: Matrix) {\n return matrixAllocate.allocateByObj(m);\n }\n\n /**\n * 清空画布\n */\n clear() {\n this.save();\n this.resetTransform();\n this.nativeContext.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.restore();\n }\n\n restore() {\n this.nativeContext.restore();\n if (this.stack.length > 0) {\n matrixAllocate.free(this.matrix);\n this.matrix = this.stack.pop() as Matrix;\n this.setTransformForCurrent(true);\n }\n }\n highPerformanceRestore() {\n if (this.stack.length > 0) {\n matrixAllocate.free(this.matrix);\n this.matrix = this.stack.pop() as Matrix;\n }\n }\n\n /**\n *\n * @param angle 弧度数\n */\n rotate(rad: number, setTransform: boolean = true) {\n this.matrix.rotate(rad);\n setTransform && this.setTransformForCurrent();\n }\n\n save() {\n const matrix = this.cloneMatrix(this.matrix);\n this.stack.push(matrix);\n this.nativeContext.save();\n }\n highPerformanceSave() {\n const matrix = this.cloneMatrix(this.matrix);\n this.stack.push(matrix);\n }\n\n /**\n * 基于当前matrix再次scale\n * @param sx\n * @param sy\n * @param setTransform 是否设置transform到context中\n */\n scale(sx: number, sy: number, setTransform: boolean = true) {\n this.matrix.scale(sx, sy);\n setTransform && this.setTransformForCurrent();\n }\n setScale(sx: number, sy: number, setTransform: boolean = true): void {\n this.matrix.setScale(sx, sy);\n setTransform && this.setTransformForCurrent();\n }\n /**\n * 基于某个点进行缩放\n * @param sx\n * @param sy\n * @param px\n * @param py\n */\n scalePoint(sx: number, sy: number, px: number, py: number, setTransform: boolean = true) {\n this.translate(px, py, false);\n this.scale(sx, sy, false);\n this.translate(-px, -py, false);\n setTransform && this.setTransformForCurrent();\n }\n /**\n *\n * @param a\n * @param b\n * @param c\n * @param d\n * @param e\n * @param f\n * @param setTransform\n */\n setTransform(\n a: number,\n b: number,\n c: number,\n d: number,\n e: number,\n f: number,\n setTransform: boolean = true,\n dpr: number = this.dpr\n ) {\n this.matrix.setValue(dpr * a, dpr * b, dpr * c, dpr * d, dpr * e, dpr * f);\n setTransform && this.setTransformForCurrent();\n }\n\n setTransformFromMatrix(matrix: Matrix, setTransform: boolean = true, dpr: number = this.dpr) {\n this.matrix.setValue(\n matrix.a * dpr,\n matrix.b * dpr,\n matrix.c * dpr,\n matrix.d * dpr,\n matrix.e * dpr,\n matrix.f * dpr\n );\n setTransform && this.setTransformForCurrent();\n }\n\n resetTransform(setTransform: boolean = true, dpr: number = this.dpr) {\n this.setTransform(dpr, 0, 0, dpr, 0, 0);\n setTransform && this.setTransformForCurrent();\n }\n\n // transform(m11: number, m12: number, m21: number, m22: number, dx: number, dy: number): void;\n transform(a: number, b: number, c: number, d: number, e: number, f: number, setTransform: boolean = true) {\n this.matrix.multiply(a, b, c, d, e, f);\n setTransform && this.setTransformForCurrent();\n }\n transformFromMatrix(matrix: Matrix, setTransform?: boolean): void {\n this.matrix.multiply(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f);\n setTransform && this.setTransformForCurrent();\n }\n\n translate(x: number, y: number, setTransform: boolean = true) {\n this.matrix.translate(x, y);\n setTransform && this.setTransformForCurrent();\n }\n /**\n * 旋转角度,自动转换为弧度\n * @param deg 角度数\n */\n rotateDegrees(deg: number, setTransform: boolean = true) {\n const rad = (deg * Math.PI) / 180;\n this.rotate(rad, setTransform);\n }\n\n /**\n * 绕点旋转\n * @param rad 弧度\n * @param x 旋转中心点x\n * @param y 旋转中心点y\n */\n rotateAbout(rad: number, x: number, y: number, setTransform: boolean = true) {\n this.translate(x, y, false);\n this.rotate(rad, false);\n this.translate(-x, -y, false);\n setTransform && this.setTransformForCurrent();\n }\n\n /**\n * 绕点旋转\n * @param deg 旋转角度\n * @param x 旋转中心点x\n * @param y 旋转中心点y\n */\n rotateDegreesAbout(deg: number, x: number, y: number, setTransform: boolean = true) {\n this.translate(x, y, false);\n this.rotateDegrees(deg, false);\n this.translate(-x, -y, false);\n setTransform && this.setTransformForCurrent();\n }\n\n // /**\n // * 全局坐标 -> 当前矩阵的局部坐标\n // * @param x x\n // * @param y y\n // */\n // transformPoint(x: number, y: number): Point {\n // const inverseMatrix = this.matrix.getInverse();\n // // dpr\n // x = x * this.dpr;\n // y = y * this.dpr;\n // return new Point(\n // x * inverseMatrix.a + y * inverseMatrix.c + inverseMatrix.e,\n // x * inverseMatrix.b + y * inverseMatrix.d + inverseMatrix.f\n // );\n // }\n\n // /**\n // * 坐标转换\n // * @param x x\n // * @param y y\n // */\n // transformPoint2(x: number, y: number): Point {\n // const inverseMatrix = this.matrix;\n // return new Point(\n // x * inverseMatrix.a + y * inverseMatrix.c + inverseMatrix.e,\n // x * inverseMatrix.b + y * inverseMatrix.d + inverseMatrix.f\n // );\n // }\n\n // transformPoint3(x: number, y: number, matrix: Matrix): Point {\n // // dpr\n // x = x * this.dpr;\n // y = y * this.dpr;\n // return new Point(x * matrix.a + y * matrix.c + matrix.e, x * matrix.b + y * matrix.d + matrix.f);\n // }\n\n //////// 代理方法\n // isPointInStroke ,drawFocusIfNeeded 方法没有代理,如有需要再添加\n\n beginPath() {\n if (this.disableBeginPath) {\n return;\n }\n this.nativeContext.beginPath();\n }\n\n clip(fillRule?: CanvasFillRule): void;\n clip(path: Path2D, fillRule?: CanvasFillRule): void;\n clip(path?: Path2D | CanvasFillRule, fillRule?: CanvasFillRule) {\n if (path) {\n if (typeof path === 'string') {\n this.nativeContext.clip(path);\n } else {\n this.nativeContext.clip(path, fillRule);\n }\n } else {\n this.nativeContext.clip();\n }\n }\n\n arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean, z?: number) {\n z = z || 0;\n if (this.camera) {\n const arr = [] as any;\n addArcToBezierPath(arr, startAngle, endAngle, x, y, radius, radius, anticlockwise);\n for (let i = 0; i < arr.length; ++i) {\n const bez = arr[i];\n this.bezierCurveTo(bez[0], bez[1], bez[2], bez[3], bez[4], bez[5], z);\n }\n } else {\n this.nativeContext.arc(x, y, radius, startAngle, endAngle, anticlockwise);\n }\n }\n\n arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void;\n arcTo(x1: number, y1: number, x2: number, y2: number, radiusX: number) {\n this.nativeContext.arcTo(x1, y1, x2, y2, radiusX);\n }\n\n bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number, z?: number) {\n z = z || 0;\n if (this.camera) {\n let cp1z = z;\n let cp2z = z;\n if (this.modelMatrix) {\n transformMat4(outP, [cp1x, cp1y, z], this.modelMatrix);\n cp1x = outP[0];\n cp1y = outP[1];\n cp1z = outP[2];\n\n transformMat4(outP, [cp2x, cp2y, z], this.modelMatrix);\n cp2x = outP[0];\n cp2y = outP[1];\n cp2z = outP[2];\n\n transformMat4(outP, [x, y, z], this.modelMatrix);\n x = outP[0];\n y = outP[1];\n z = outP[2];\n }\n let data = this.camera.vp(x, y, z);\n x = data.x;\n y = data.y;\n data = this.camera.vp(cp1x, cp1y, cp1z);\n cp1x = data.x;\n cp1y = data.y;\n data = this.camera.vp(cp2x, cp2y, cp2z);\n cp2x = data.x;\n cp2y = data.y;\n }\n this.nativeContext.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n }\n\n closePath() {\n this.nativeContext.closePath();\n }\n\n ellipse(\n x: number,\n y: number,\n radiusX: number,\n radiusY: number,\n rotation: number,\n startAngle: number,\n endAngle: number,\n anticlockwise?: boolean\n ) {\n if (anticlockwise == null) {\n this.nativeContext.ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle);\n } else {\n this.nativeContext.ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);\n }\n }\n lineTo(x: number, y: number, z: number) {\n z = z || 0;\n if (this.camera) {\n if (this.modelMatrix) {\n transformMat4(outP, [x, y, z], this.modelMatrix);\n x = outP[0];\n y = outP[1];\n z = outP[2];\n }\n const data = this.camera.vp(x, y, z);\n x = data.x;\n y = data.y;\n }\n this.nativeContext.lineTo(x, y);\n }\n\n moveTo(x: number, y: number, z: number) {\n z = z || 0;\n if (this.camera) {\n if (this.modelMatrix) {\n transformMat4(outP, [x, y, z], this.modelMatrix);\n x = outP[0];\n y = outP[1];\n z = outP[2];\n }\n const data = this.camera.vp(x, y, z);\n x = data.x;\n y = data.y;\n }\n this.nativeContext.moveTo(x, y);\n }\n\n quadraticCurveTo(cpx: number, cpy: number, x: number, y: number, z: number) {\n z = z || 0;\n if (this.camera) {\n let cpz = z;\n if (this.modelMatrix) {\n transformMat4(outP, [cpx, cpy, z], this.modelMatrix);\n cpx = outP[0];\n cpy = outP[1];\n cpz = outP[2];\n\n transformMat4(outP, [x, y, z], this.modelMatrix);\n x = outP[0];\n y = outP[1];\n z = outP[2];\n }\n let data = this.camera.vp(x, y, z);\n x = data.x;\n y = data.y;\n data = this.camera.vp(cpx, cpy, cpz);\n cpx = data.x;\n cpy = data.y;\n }\n this.nativeContext.quadraticCurveTo(cpx, cpy, x, y);\n }\n\n rect(x: number, y: number, w: number, h: number, z: number) {\n z = z || 0;\n if (this.camera) {\n this.moveTo(x, y, z);\n this.lineTo(x + w, y, z);\n this.lineTo(x + w, y + h, z);\n this.lineTo(x, y + h, z);\n this.closePath();\n } else {\n this.nativeContext.rect(x, y, w, h);\n }\n }\n\n createImageData(imageDataOrSw: number | ImageData, sh?: number): ImageData;\n createImageData() {\n const a = arguments;\n if (a.length === 2) {\n return this.nativeContext.createImageData(a[0], a[1]);\n } else if (a.length === 1) {\n return this.nativeContext.createImageData(a[0]);\n }\n return null;\n }\n\n createLinearGradient(x0: number, y0: number, x1: number, y1: number) {\n return this.nativeContext.createLinearGradient(x0, y0, x1, y1);\n }\n\n createPattern(image: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement, repetition: string): CanvasPattern {\n if (image.width === 0 || image.height === 0) {\n return null;\n } // 宽高为0时createPattern会报错\n return this.nativeContext.createPattern(image, repetition);\n }\n\n createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): CanvasGradient {\n return this.nativeContext.createRadialGradient(x0, y0, r0, x1, y1, r1);\n }\n\n createConicGradient(x: number, y: number, startAngle: number, endAngle: number): IConicalGradientData {\n let edit = false;\n let pattern: CanvasPattern | null;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const ctx = this;\n const obj: IConicalGradientData = {\n stops: [],\n addColorStop(offset: number, color: string) {\n this.stops.push([offset, color]);\n edit = true;\n },\n GetPattern(minW: number, minH: number, deltaAngle?: number): CanvasPattern | null {\n if (edit) {\n if (!deltaAngle) {\n deltaAngle = endAngle - startAngle;\n }\n pattern = createConicalGradient(\n ctx as IContext2d,\n this.stops,\n x,\n y,\n deltaAngle,\n startAngle,\n endAngle,\n minW,\n minH\n );\n edit = false;\n }\n return pattern;\n }\n };\n return obj;\n }\n\n // createConicGradient(x: number, y: number, startAngle: number, endAngle: number): IConicalGradient | null {\n // // let edit = false;\n // // let pattern: CanvasPattern | null;\n // // // eslint-disable-next-line @typescript-eslint/no-this-alias\n // // const ctx = this;\n // // const obj: IConicalGradient = {\n // // stops: [],\n // // addColorStop(offset: number, color: string) {\n // // this.stops.push([offset, color]);\n // // edit = true;\n // // },\n // // GetPattern(minW: number, minH: number, deltaAngle?: number): CanvasPattern | null {\n // // if (edit) {\n // // if (!deltaAngle) deltaAngle = endAngle - startAngle;\n // // pattern = createConicalGradient(ctx, this.stops, x, y, deltaAngle, startAngle, endAngle, minW, minH);\n // // edit = false;\n // // }\n // // return pattern;\n // // }\n // // };\n // // return obj;\n // }\n\n // fill(fillRule?: CanvasFillRule): void;\n // fill(path?: Path2D, fillRule?: CanvasFillRule): void;\n fill(path?: Path2D, fillRule?: CanvasFillRule) {\n if (this.disableFill) {\n return;\n }\n path ? this.nativeContext.fill(path) : this.nativeContext.fill();\n }\n\n fillRect(x: number, y: number, width: number, height: number) {\n this.nativeContext.fillRect(x, y, width, height);\n }\n\n clearRect(x: number, y: number, w: number, h: number) {\n this.nativeContext.clearRect(x, y, w, h);\n }\n\n project(x: number, y: number, z: number): IPointLike {\n z = z || 0;\n if (this.camera) {\n if (this.modelMatrix) {\n transformMat4(outP, [x, y, z], this.modelMatrix);\n x = outP[0];\n y = outP[1];\n z = outP[2];\n }\n const data = this.camera.vp(x, y, z);\n x = data.x;\n y = data.y;\n }\n return { x, y };\n }\n\n view(x: number, y: number, z: number): vec3 {\n z = z || 0;\n if (this.camera) {\n if (this.modelMatrix) {\n transformMat4(outP, [x, y, z], this.modelMatrix);\n x = outP[0];\n y = outP[1];\n z = outP[2];\n }\n return this.camera.view(x, y, z);\n }\n return [x, y, z];\n }\n\n fillText(text: string, x: number, y: number, z: number) {\n z = z || 0;\n if (this.camera) {\n if (this.modelMatrix) {\n transformMat4(outP, [x, y, z], this.modelMatrix);\n x = outP[0];\n y = outP[1];\n z = outP[2];\n }\n const data = this.camera.vp(x, y, z);\n x = data.x;\n y = data.y;\n }\n this.nativeContext.fillText(text, x, y);\n }\n\n getImageData(sx: number, sy: number, sw: number, sh: number): ImageData {\n return this.nativeContext.getImageData(sx, sy, sw, sh);\n }\n\n getLineDash(): number[] {\n return this.nativeContext.getLineDash();\n }\n\n isPointInPath(x: number, y: number) {\n return this.nativeContext.isPointInPath(x, y);\n }\n\n isPointInStroke(x: number, y: number) {\n return this.nativeContext.isPointInStroke(x, y);\n }\n\n measureText(\n text: string,\n method: 'native' | 'simple' | 'quick' = application.global.measureTextMethod\n ): { width: number } {\n if (!method || method === 'native') {\n return this.nativeContext.measureText(text);\n }\n if (!this.mathTextMeasure) {\n this.mathTextMeasure = application.graphicUtil.createTextMeasureInstance({}, {}, () => this.canvas.nativeCanvas);\n }\n\n const fontFamily = this.fontFamily ?? DefaultTextStyle.fontFamily;\n const fontSize = this.fontSize ?? DefaultTextStyle.fontSize;\n if (\n this.mathTextMeasure.textSpec.fontFamily !== fontFamily ||\n this.mathTextMeasure.textSpec.fontSize !== fontSize\n ) {\n this.mathTextMeasure.textSpec.fontFamily = fontFamily;\n this.mathTextMeasure.textSpec.fontSize = fontSize;\n this.mathTextMeasure._numberCharSize = null;\n this.mathTextMeasure._fullCharSize = null;\n this.mathTextMeasure._letterCharSize = null;\n this.mathTextMeasure._specialCharSizeMap = {};\n }\n return this.mathTextMeasure.measure(text, method);\n }\n\n putImageData(imagedata: ImageData, dx: number, dy: number) {\n this.nativeContext.putImageData(imagedata, dx, dy);\n }\n\n setLineDash(segments: number[]) {\n const a = arguments;\n const _context = this.nativeContext;\n\n // works for Chrome and IE11\n if (!!this.nativeContext.setLineDash) {\n _context.setLineDash(a[0]);\n } else if ('mozDash' in _context) {\n // verified that this works in firefox\n (_context as any).mozDash = a[0];\n } else if ('webkitLineDash' in _context) {\n // does not currently work for Safari\n (_context as any).webkitLineDash = a[0];\n }\n\n // no support for IE9 and IE10\n }\n\n stroke(path?: Path2D) {\n if (this.disableStroke) {\n return;\n }\n path ? this.nativeContext.stroke(path) : this.nativeContext.stroke();\n }\n\n strokeRect(x: number, y: number, width: number, height: number) {\n this.nativeContext.strokeRect(x, y, width, height);\n }\n\n strokeText(text: string, x: number, y: number, z: number) {\n z = z || 0;\n if (this.camera) {\n if (this.modelMatrix) {\n transformMat4(outP, [x, y, z], this.modelMatrix);\n x = outP[0];\n y = outP[1];\n z = outP[2];\n }\n const data = this.camera.vp(x, y, z);\n x = data.x;\n y = data.y;\n }\n this.nativeContext.strokeText(text, x, y);\n }\n\n drawImage(\n image: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | ImageBitmap,\n dstX: number,\n dstY: number\n ): void;\n drawImage(\n image: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | ImageBitmap,\n dstX: number,\n dstY: number,\n dstW: number,\n dstH: number\n ): void;\n drawImage(\n image: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | ImageBitmap,\n srcX: number,\n srcY: number,\n srcW: number,\n srcH: number,\n dstX: number,\n dstY: number,\n dstW: number,\n dstH: number\n ): void;\n\n drawImage() {\n const _context = this.nativeContext;\n const a = arguments;\n if (a.length === 3) {\n _context.drawImage(a[0], a[1], a[2]);\n } else if (a.length === 5) {\n _context.drawImage(a[0], a[1], a[2], a[3], a[4]);\n } else if (a.length === 9) {\n _context.drawImage(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);\n }\n }\n\n protected fillAttributes = { ...DefaultFillStyle, opacity: 1 };\n protected strokeAttributes = { ...DefaultStrokeStyle, opacity: 1 };\n protected textAttributes = { ...DefaultTextStyle, opacity: 1 };\n\n setCommonStyle(\n params: ISetCommonStyleParams,\n attribute: ICommonStyleParams,\n // 用于渐变色\n offsetX: number,\n offsetY: number,\n defaultParams?: ICommonStyleParams | Partial[]\n ) {\n if (Array.isArray(defaultParams)) {\n if (defaultParams.length <= 1) {\n return this._setCommonStyle(params, attribute, offsetX, offsetY, defaultParams[0]);\n }\n // TODO 是否存在性能问题?\n // TODO 默认第一个是theme\n const dp = Object.create(defaultParams[0]);\n defaultParams.forEach((p, i) => {\n if (i === 0) {\n return;\n }\n Object.assign(dp, p);\n });\n return this._setCommonStyle(params, attribute, offsetX, offsetY, dp as Required);\n }\n return this._setCommonStyle(params, attribute, offsetX, offsetY, defaultParams);\n }\n\n protected _setCommonStyle(\n params: ISetCommonStyleParams,\n attribute: ICommonStyleParams,\n // 用于渐变色\n offsetX: number,\n offsetY: number,\n defaultParams?: ICommonStyleParams\n ) {\n const _context = this.nativeContext;\n if (!defaultParams) {\n defaultParams = this.fillAttributes;\n }\n const {\n fillOpacity = defaultParams.fillOpacity,\n opacity = defaultParams.opacity,\n fill = defaultParams.fill\n } = attribute;\n if (fillOpacity > 1e-12 && opacity > 1e-12) {\n _context.globalAlpha = fillOpacity * opacity;\n _context.fillStyle = createColor(this, fill, params, offsetX, offsetY);\n // todo 小程序\n } else {\n _context.globalAlpha = fillOpacity * opacity;\n }\n }\n\n setShadowBlendStyle(\n params: ISetCommonStyleParams,\n attribute: ICommonStyleParams,\n defaultParams?: ICommonStyleParams | Partial[]\n ) {\n if (Array.isArray(defaultParams)) {\n if (defaultParams.length <= 1) {\n return this._setShadowBlendStyle(params, defaultParams[0]);\n }\n // TODO 是否存在性能问题?\n // TODO 默认第一个是theme\n const dp = Object.create(defaultParams[0]);\n defaultParams.forEach((p, i) => {\n if (i === 0) {\n return;\n }\n Object.assign(dp, p);\n });\n return this._setShadowBlendStyle(params, attribute, dp as Required);\n }\n return this._setShadowBlendStyle(params, attribute, defaultParams);\n }\n\n protected _clearShadowStyle = false;\n protected _clearFilterStyle = false;\n protected _clearGlobalCompositeOperationStyle = false;\n\n protected _setShadowBlendStyle(\n params: ISetCommonStyleParams,\n attribute: ICommonStyleParams,\n defaultParams?: ICommonStyleParams\n ) {\n const _context = this.nativeContext;\n if (!defaultParams) {\n defaultParams = this.fillAttributes;\n }\n const {\n opacity = defaultParams.opacity,\n shadowBlur = defaultParams.shadowBlur,\n shadowColor = defaultParams.shadowColor,\n shadowOffsetX = defaultParams.shadowOffsetX,\n shadowOffsetY = defaultParams.shadowOffsetY,\n blur = defaultParams.blur,\n globalCompositeOperation = defaultParams.globalCompositeOperation\n } = attribute;\n if (opacity <= 1e-12) {\n return;\n }\n if (shadowBlur || shadowOffsetX || shadowOffsetY) {\n // canvas的shadow不支持dpr,这里手动设置\n _context.shadowBlur = shadowBlur * this.dpr;\n _context.shadowColor = shadowColor;\n _context.shadowOffsetX = shadowOffsetX * this.dpr;\n _context.shadowOffsetY = shadowOffsetY * this.dpr;\n this._clearShadowStyle = true;\n // todo 小程序\n } else if (this._clearShadowStyle) {\n _context.shadowBlur = 0;\n _context.shadowOffsetX = 0;\n _context.shadowOffsetY = 0;\n }\n\n if (blur) {\n _context.filter = `blur(${blur}px)`;\n this._clearFilterStyle = true;\n } else if (this._clearFilterStyle) {\n _context.filter = 'blur(0px)';\n this._clearFilterStyle = false;\n }\n\n if (globalCompositeOperation) {\n _context.globalCompositeOperation = globalCompositeOperation;\n this._clearGlobalCompositeOperationStyle = true;\n } else if (this._clearGlobalCompositeOperationStyle) {\n _context.globalCompositeOperation = 'source-over';\n this._clearGlobalCompositeOperationStyle = false;\n }\n }\n\n setStrokeStyle(\n params: ISetStrokeStyleParams,\n attribute: IStrokeStyleParams,\n // 用于渐变色\n offsetX: number,\n offsetY: number,\n defaultParams?: IStrokeStyleParams | IStrokeStyleParams[]\n ) {\n if (Array.isArray(defaultParams)) {\n if (defaultParams.length <= 1) {\n return this._setStrokeStyle(params, attribute, offsetX, offsetY, defaultParams[0]);\n }\n // TODO 是否存在性能问题?\n // TODO 默认第一个是theme\n const dp = Object.create(defaultParams[0]);\n defaultParams.forEach((p, i) => {\n if (i === 0) {\n return;\n }\n Object.assign(dp, p);\n });\n return this._setStrokeStyle(params, attribute, offsetX, offsetY, dp as IStrokeStyleParams);\n }\n return this._setStrokeStyle(params, attribute, offsetX, offsetY, defaultParams);\n }\n protected _setStrokeStyle(\n params: ISetStrokeStyleParams,\n attribute: IStrokeStyleParams,\n // 用于渐变色\n offsetX: number,\n offsetY: number,\n defaultParams?: IStrokeStyleParams\n ) {\n const _context = this.nativeContext;\n if (!defaultParams) {\n defaultParams = this.strokeAttributes;\n }\n const { strokeOpacity = defaultParams.strokeOpacity, opacity = defaultParams.opacity } = attribute;\n if (strokeOpacity > 1e-12 && opacity > 1e-12) {\n const {\n lineWidth = defaultParams.lineWidth,\n stroke = defaultParams.stroke,\n lineJoin = defaultParams.lineJoin,\n lineDash = defaultParams.lineDash,\n lineCap = defaultParams.lineCap,\n miterLimit = defaultParams.miterLimit\n } = attribute;\n _context.globalAlpha = strokeOpacity * opacity;\n _context.lineWidth = getScaledStroke(this, lineWidth, this.dpr);\n _context.strokeStyle = createColor(this, stroke as any, params, offsetX, offsetY);\n _context.lineJoin = lineJoin;\n _context.setLineDash(lineDash);\n _context.lineCap = lineCap;\n _context.miterLimit = miterLimit;\n }\n }\n setTextStyleWithoutAlignBaseline(params: Partial, defaultParams?: ITextStyleParams, z?: number) {\n const _context = this.nativeContext;\n if (!defaultParams) {\n defaultParams = this.textAttributes;\n }\n const { scaleIn3d = defaultParams.scaleIn3d } = params;\n if (params.font) {\n _context.font = params.font;\n } else {\n _context.font = getContextFont(\n params,\n defaultParams,\n scaleIn3d && this.camera && this.camera.getProjectionScale(z)\n );\n }\n const { fontFamily = defaultParams.fontFamily, fontSize = defaultParams.fontSize } = params;\n this.fontFamily = fontFamily;\n this.fontSize = fontSize;\n _context.textAlign = 'left';\n _context.textBaseline = 'alphabetic';\n // // 这里不使用defaultParams\n // _context.textAlign = params.textAlign || 'left';\n // _context.textBaseline = params.textBaseline || 'alphabetic';\n }\n setTextStyle(params: Partial, defaultParams?: ITextStyleParams, z?: number) {\n const _context = this.nativeContext;\n if (!defaultParams) {\n defaultParams = this.textAttributes;\n }\n if (params.font) {\n _context.font = params.font;\n } else {\n _context.font = getContextFont(params, defaultParams, this.camera && this.camera.getProjectionScale(z));\n }\n const { fontFamily = defaultParams.fontFamily, fontSize = defaultParams.fontSize } = params;\n this.fontFamily = fontFamily;\n this.fontSize = fontSize;\n _context.textAlign = params.textAlign ?? defaultParams.textAlign;\n _context.textBaseline = params.textBaseline ?? defaultParams.textBaseline;\n }\n\n draw() {\n return;\n }\n\n clearMatrix(setTransform: boolean = true, dpr: number = this.dpr) {\n this.setTransformFromMatrix(initMatrix, setTransform, dpr);\n }\n\n onlyTranslate(dpr: number = this.dpr): boolean {\n return this.matrix.a === dpr && this.matrix.b === 0 && this.matrix.c === 0 && this.matrix.d === dpr;\n }\n\n release(...params: any): void {\n this.stack.forEach(m => matrixAllocate.free(m));\n this.stack.length = 0;\n return;\n }\n}\n","import { injectable, application, BaseCanvas } from '@visactor/vrender-core';\nimport type { CanvasConfigType, ICanvas, EnvType } from '@visactor/vrender-core';\nimport { BrowserContext2d } from './context';\n\n@injectable()\nexport class BrowserCanvas extends BaseCanvas implements ICanvas {\n static env: EnvType = 'browser';\n\n /**\n * 通过canvas生成一个wrap对象,初始化时不会再设置canvas的属性\n * @param params\n */\n constructor(params: CanvasConfigType) {\n super(params);\n }\n\n init(params: CanvasConfigType) {\n const { container } = params;\n if (typeof container === 'string') {\n const _c = application.global.getElementById(container);\n if (_c) {\n this._container = _c;\n }\n } else {\n this._container = container;\n }\n this._context = new BrowserContext2d(this, this._dpr);\n this.initStyle();\n }\n\n protected initStyle() {\n if (!this.controled) {\n return;\n }\n const { nativeCanvas } = this;\n nativeCanvas.width = this._pixelWidth;\n nativeCanvas.height = this._pixelHeight;\n\n const isOffscreen = !nativeCanvas.style;\n if (!isOffscreen) {\n this.setCanvasStyle(nativeCanvas, this._x, this._y, this._displayWidth, this._displayHeight);\n }\n // if (this.id != null) {\n // nativeCanvas.id = this.id.toString();\n // }\n if (this._container) {\n this._container.appendChild(nativeCanvas);\n }\n if (!this.visiable) {\n this.hide();\n }\n }\n\n hide() {\n this._nativeCanvas && (this._nativeCanvas.style.display = 'none');\n }\n show() {\n this._nativeCanvas && (this._nativeCanvas.style.display = 'block');\n }\n\n applyPosition() {\n const canvas = this._nativeCanvas;\n canvas.style.position = 'absolute';\n canvas.style.top = `${this._y}px`;\n canvas.style.left = `${this._x}px`;\n }\n\n resetStyle(params: Partial) {\n if (!this.controled) {\n return;\n }\n const {\n width = this._displayWidth,\n height = this._displayHeight,\n dpr = this._dpr,\n x = this._x,\n y = this._y\n } = params;\n const { nativeCanvas } = this;\n nativeCanvas.width = width * dpr;\n nativeCanvas.height = height * dpr;\n\n const isOffscreen = !nativeCanvas.style;\n if (!isOffscreen) {\n this.setCanvasStyle(nativeCanvas, x, y, width, height);\n }\n params.id && (nativeCanvas.id = params.id);\n if (!this.visiable) {\n this.hide();\n }\n // this._context.setScale(dpr, dpr);\n }\n\n private setCanvasStyle(canvas: HTMLCanvasElement, x: number, y: number, w: number, h: number) {\n if (!this.controled) {\n return;\n }\n // canvas.style.padding = '0';\n // canvas.style.margin = '0';\n // canvas.style.border = '0';\n // canvas.style.background = 'transparent';\n // canvas.style.position = 'absolute';\n // canvas.style.top = `${y}px`;\n // canvas.style.left = `${x}px`;\n\n canvas.style.width = `${w}px`;\n canvas.style.height = `${h}px`;\n }\n\n toDataURL(): string;\n toDataURL(mimeType: 'image/png'): string;\n toDataURL(mimeType: 'image/jpeg', quality: number): string;\n toDataURL(mimeType?: string, quality?: number) {\n if (mimeType === 'image/jpeg') {\n return this._nativeCanvas.toDataURL(mimeType, quality);\n } else if (mimeType === 'image/png') {\n return this._nativeCanvas.toDataURL(mimeType);\n }\n return this._nativeCanvas.toDataURL(mimeType, quality);\n }\n\n /**\n * 设置canvas的size大小,设置context的scale\n * @param width\n * @param height\n */\n resize(width: number, height: number) {\n if (!this.controled) {\n return;\n }\n // 设置Canvas的w和h\n this._pixelWidth = width * this._dpr;\n this._pixelHeight = height * this._dpr;\n this._displayWidth = width;\n this._displayHeight = height;\n // 可能是离屏canvas\n if (this._nativeCanvas.style) {\n this._nativeCanvas.style.width = `${width}px`;\n this._nativeCanvas.style.height = `${height}px`;\n }\n this._nativeCanvas.width = this._pixelWidth;\n this._nativeCanvas.height = this._pixelHeight;\n\n // 设置context的dpr\n const _context = this._context;\n _context.dpr = this._dpr;\n // _context.setScale(this._dpr, this._dpr);\n }\n}\n","import { ContainerModule, CanvasFactory, Context2dFactory } from '@visactor/vrender-core';\nimport type { CanvasConfigType, ICanvas } from '@visactor/vrender-core';\n\nexport function createModule(CanvasConstructor: any, ContextConstructor: any) {\n return new ContainerModule(bind => {\n bind(CanvasFactory)\n .toDynamicValue(() => {\n return (params: CanvasConfigType) => new CanvasConstructor(params);\n })\n .whenTargetNamed(CanvasConstructor.env);\n\n bind(Context2dFactory)\n .toDynamicValue(() => {\n return (params: ICanvas, dpr: number) => new ContextConstructor(params, dpr);\n })\n .whenTargetNamed(ContextConstructor.env);\n });\n}\n","import type { IMatrix, IPoint, IPointLike } from '@visactor/vutils';\nimport { Matrix, Point } from '@visactor/vutils';\nimport { inject, injectable, named } from '../common/inversify-lite';\nimport { foreach } from '../common/sort';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../common/contribution-provider';\nimport type {\n IContext2d,\n IGraphic,\n IGroup,\n EnvType,\n IGlobal,\n IPickerService,\n IGraphicPicker,\n IPickParams,\n PickResult,\n IPickItemInterceptorContribution,\n IContributionProvider\n} from '../interface';\nimport { DefaultAttribute, getTheme, mat3Tomat4, multiplyMat4Mat4 } from '../graphic';\nimport { mat4Allocate, matrixAllocate } from '../allocator/matrix-allocate';\nimport { PickItemInterceptor } from './pick-interceptor';\nimport { application } from '../application';\n\n@injectable()\nexport abstract class DefaultPickService implements IPickerService {\n type: string = 'default';\n declare pickerMap: Map;\n declare pickContext?: IContext2d;\n declare InterceptorContributions: IPickItemInterceptorContribution[];\n declare global: IGlobal;\n\n constructor(\n // 拦截器\n @inject(ContributionProvider)\n @named(PickItemInterceptor)\n protected readonly pickItemInterceptorContributions: IContributionProvider\n ) {\n this.global = application.global;\n }\n\n protected _init() {\n this.InterceptorContributions = this.pickItemInterceptorContributions\n .getContributions()\n .sort((a, b) => a.order - b.order);\n }\n\n abstract configure(global: IGlobal, env: EnvType): void;\n\n // todo: params支持\n // todo: 性能优化\n pick(graphics: IGraphic[], point: IPoint, params: IPickParams): PickResult {\n let result: PickResult = {\n graphic: null,\n group: null\n };\n params.pickerService = this;\n let offsetX = 0;\n let offsetY = 0;\n if (params && params.bounds) {\n if (!params.bounds.contains(point.x, point.y)) {\n return result;\n }\n offsetX = params.bounds.x1;\n offsetY = params.bounds.y1;\n }\n if (this.pickContext) {\n this.pickContext.inuse = true;\n }\n params.pickContext = this.pickContext;\n this.pickContext && this.pickContext.clearMatrix(true, 1);\n\n const parentMatrix = new Matrix(1, 0, 0, 1, offsetX, offsetY);\n let group: IGroup;\n for (let i = graphics.length - 1; i >= 0; i--) {\n if (graphics[i].isContainer) {\n result = this.pickGroup(graphics[i] as IGroup, point, parentMatrix, params);\n } else {\n result = this.pickItem(graphics[i], point, parentMatrix, params);\n }\n if (result.graphic) {\n break;\n }\n if (!group) {\n group = result.group;\n }\n }\n if (!result.graphic) {\n result.group = group;\n }\n if (this.pickContext) {\n this.pickContext.inuse = false;\n }\n\n // 判断是否有shadow-dom\n if (result.graphic) {\n let g = result.graphic;\n while (g.parent) {\n g = g.parent;\n }\n if (g.shadowHost) {\n result.params = {\n shadowTarget: result.graphic\n };\n result.graphic = g.shadowHost;\n }\n }\n return result;\n }\n\n containsPoint(graphic: IGraphic, point: IPointLike, params: IPickParams): boolean {\n return !!this.pickItem(graphic, point, null, params ?? { pickContext: this.pickContext, pickerService: this })\n ?.graphic;\n }\n\n // TODO: 支持3d模式的拾取和自定义path的拾取\n pickGroup(group: IGroup, point: IPointLike, parentMatrix: IMatrix, params: IPickParams): PickResult {\n let result: PickResult = {\n group: null,\n graphic: null\n };\n if (group.attribute.visibleAll === false) {\n return result;\n }\n const context = params.pickContext;\n const lastMatrix = context.modelMatrix;\n // 如果是3d,那么需要生成modelMatrix\n if (context.camera) {\n const m = group.transMatrix;\n const matrix = mat4Allocate.allocate();\n mat3Tomat4(matrix, m);\n if (lastMatrix) {\n if (matrix) {\n const m = mat4Allocate.allocate();\n context.modelMatrix = multiplyMat4Mat4(m, lastMatrix, matrix);\n mat4Allocate.free(matrix);\n }\n } else {\n // 转化context的matrix为lastMatrix\n mat3Tomat4(matrix, group.globalTransMatrix);\n context.modelMatrix = matrix;\n }\n }\n // 添加拦截器\n if (this.InterceptorContributions.length) {\n for (let i = 0; i < this.InterceptorContributions.length; i++) {\n const drawContribution = this.InterceptorContributions[i];\n if (drawContribution.beforePickItem) {\n const result = drawContribution.beforePickItem(group, this, point, params, { parentMatrix });\n if (result) {\n if (context.modelMatrix !== lastMatrix) {\n mat4Allocate.free(context.modelMatrix);\n }\n context.modelMatrix = lastMatrix;\n return result;\n }\n }\n }\n }\n // 转换坐标空间\n const transMatrix = group.transMatrix;\n const currentGroupMatrix = matrixAllocate.allocateByObj(parentMatrix);\n const newPoint: IPoint = new Point(point.x, point.y);\n currentGroupMatrix.transformPoint(newPoint, newPoint);\n // todo: 支持带有path的group的选中\n const insideGroup = group.AABBBounds.containsPoint(newPoint);\n // 如果group没有被选中,直接跳过(如果是3d模式,那么继续)\n if (!insideGroup && !group.stage.camera) {\n return result;\n }\n // pickGroup,Group目前只支持拦截模式(用于shadow节点)\n const pickedItem = this.pickItem(group, newPoint.clone(), parentMatrix, params);\n if (pickedItem && pickedItem.graphic) {\n result.graphic = pickedItem.graphic;\n result.params = pickedItem.params;\n }\n const groupPicked = group.attribute.pickable !== false && insideGroup;\n\n currentGroupMatrix.multiply(\n transMatrix.a,\n transMatrix.b,\n transMatrix.c,\n transMatrix.d,\n transMatrix.e,\n transMatrix.f\n );\n if (group.attribute.childrenPickable !== false && !(pickedItem && pickedItem.graphic)) {\n foreach(\n group,\n DefaultAttribute.zIndex,\n (graphic: IGraphic) => {\n if (graphic.isContainer) {\n // 偏移scrollX和scrollY\n const newPoint: IPoint = new Point(point.x, point.y);\n const theme = getTheme(group).group;\n const { scrollX = theme.scrollX, scrollY = theme.scrollY } = group.attribute;\n newPoint.x -= scrollX;\n newPoint.y -= scrollY;\n result = this.pickGroup(graphic as IGroup, newPoint, currentGroupMatrix, params);\n } else {\n const newPoint: IPoint = new Point(point.x, point.y);\n currentGroupMatrix.transformPoint(newPoint, newPoint);\n // 偏移scrollX和scrollY\n const theme = getTheme(group).group;\n const { scrollX = theme.scrollX, scrollY = theme.scrollY } = group.attribute;\n newPoint.x -= scrollX;\n newPoint.y -= scrollY;\n const pickedItem = this.pickItem(graphic, newPoint, parentMatrix, params);\n if (pickedItem && pickedItem.graphic) {\n result.graphic = pickedItem.graphic;\n result.params = pickedItem.params;\n }\n }\n return !!result.graphic || !!result.group;\n },\n true,\n !!context.camera\n );\n }\n if (context.modelMatrix !== lastMatrix) {\n mat4Allocate.free(context.modelMatrix);\n }\n context.modelMatrix = lastMatrix;\n\n if (!result.graphic && !result.group && groupPicked && !group.stage.camera) {\n result.group = group;\n }\n matrixAllocate.free(currentGroupMatrix);\n return result;\n }\n\n // todo: switch统一改为数字map\n abstract pickItem(\n graphic: IGraphic,\n point: IPointLike,\n parentMatrix: IMatrix | null,\n params: IPickParams\n ): PickResult | null;\n\n protected selectPicker(graphic: IGraphic): IGraphicPicker | null {\n const picker = this.pickerMap.get(graphic.numberType);\n if (!picker) {\n return null;\n }\n return picker;\n }\n}\n","var __decorate = this && this.__decorate || function(decorators, target, key, desc) {\n var d, c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc;\n if (\"object\" == typeof Reflect && \"function\" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) (d = decorators[i]) && (r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r);\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}, __metadata = this && this.__metadata || function(k, v) {\n if (\"object\" == typeof Reflect && \"function\" == typeof Reflect.metadata) return Reflect.metadata(k, v);\n}, __param = this && this.__param || function(paramIndex, decorator) {\n return function(target, key) {\n decorator(target, key, paramIndex);\n };\n};\n\nimport { ContributionProvider, inject, injectable, named, DefaultPickService, DrawContribution, PickItemInterceptor, canvasAllocate } from \"@visactor/vrender-core\";\n\nimport { CanvasPickerContribution } from \"./contributions/constants\";\n\nlet DefaultCanvasPickerService = class extends DefaultPickService {\n constructor(contributions, drawContribution, pickItemInterceptorContributions) {\n super(pickItemInterceptorContributions), this.contributions = contributions, this.drawContribution = drawContribution, \n this.pickItemInterceptorContributions = pickItemInterceptorContributions, this.global.hooks.onSetEnv.tap(\"canvas-picker-service\", ((_, env, global) => {\n this.configure(global, env);\n })), this.configure(this.global, this.global.env), this.pickerMap = new Map, this.init();\n }\n init() {\n this.contributions.getContributions().forEach((item => {\n this.pickerMap.set(item.numberType, item);\n })), super._init();\n }\n configure(global, env) {\n this.pickCanvas = canvasAllocate.shareCanvas(), this.pickContext = this.pickCanvas.getContext(\"2d\");\n }\n pickItem(graphic, point, parentMatrix, params) {\n if (!1 === graphic.attribute.pickable) return null;\n if (this.InterceptorContributions.length) for (let i = 0; i < this.InterceptorContributions.length; i++) {\n const drawContribution = this.InterceptorContributions[i];\n if (drawContribution.beforePickItem) {\n const ret = drawContribution.beforePickItem(graphic, this, point, params, {\n parentMatrix: parentMatrix\n });\n if (ret) return ret;\n }\n }\n const picker = this.pickerMap.get(graphic.numberType);\n if (!picker) return null;\n const g = picker.contains(graphic, point, params) ? graphic : null, data = {\n graphic: g\n };\n if (g) return data;\n if (this.InterceptorContributions.length) for (let i = 0; i < this.InterceptorContributions.length; i++) {\n const drawContribution = this.InterceptorContributions[i];\n if (drawContribution.afterPickItem) {\n const ret = drawContribution.afterPickItem(graphic, this, point, params, {\n parentMatrix: parentMatrix\n });\n if (ret) return ret;\n }\n }\n return data;\n }\n};\n\nDefaultCanvasPickerService = __decorate([ injectable(), __param(0, inject(ContributionProvider)), __param(0, named(CanvasPickerContribution)), __param(1, inject(DrawContribution)), __param(2, inject(ContributionProvider)), __param(2, named(PickItemInterceptor)), __metadata(\"design:paramtypes\", [ Object, Object, Object ]) ], DefaultCanvasPickerService);\n\nexport { DefaultCanvasPickerService };","import type { IPoint } from '@visactor/vutils';\nimport { injectable, GROUP_NUMBER_TYPE } from '@visactor/vrender-core';\nimport type { IGraphicPicker, IPickParams, IGroup } from '@visactor/vrender-core';\n\n@injectable()\nexport class DefaultCanvasGroupPicker implements IGraphicPicker {\n type: string = 'group';\n numberType: number = GROUP_NUMBER_TYPE;\n\n // constructor(@inject(RectRender) public readonly canvasRenderer: IGraphicRender) {}\n\n contains(group: IGroup, point: IPoint, params?: IPickParams): boolean {\n // Group作为特殊节点,本身不支持被pick\n // 存在shadowDOM的group,它的shadow可以被pick,但是不会冒泡到场景树中\n return false;\n // if (group.attribute.pickMode === 'imprecise') {\n // return true;\n // }\n }\n}\n","import { ContainerModule, bindContributionProvider } from '@visactor/vrender-core';\nimport { CanvasGroupPicker, CanvasPickerContribution } from '../constants';\nimport { DefaultCanvasGroupPicker } from './group-picker';\n\nconst m = new ContainerModule((bind, unbind, isBound, rebind) => {\n if ((m as any).__vloaded) {\n return;\n }\n (m as any).__vloaded = true;\n // group picker\n bind(CanvasGroupPicker).to(DefaultCanvasGroupPicker).inSingletonScope();\n bind(CanvasPickerContribution).toService(CanvasGroupPicker);\n\n bindContributionProvider(bind, CanvasPickerContribution);\n});\n\n(m as any).__vloaded = false;\n\nexport default m;\n","import type { container } from '@visactor/vrender-core';\nimport { ContainerModule, PickerService } from '@visactor/vrender-core';\nimport { DefaultCanvasPickerService } from './canvas-picker-service';\nimport canvasModule from './contributions/canvas-picker/module';\n\n// canvas\nexport const canvasPickerModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (!isBound(DefaultCanvasPickerService)) {\n bind(DefaultCanvasPickerService).toSelf().inSingletonScope();\n }\n if (isBound(PickerService)) {\n rebind(PickerService).toService(DefaultCanvasPickerService);\n } else {\n bind(PickerService).toService(DefaultCanvasPickerService);\n }\n});\n\nexport function loadCanvasPicker(c: typeof container) {\n c.load(canvasModule);\n c.load(canvasPickerModule);\n}\n","import { injectable } from '../../../common/inversify-lite';\nimport { Generator } from '../../../common/generator';\nimport type {\n ICanvas,\n IContext2d,\n IDomRectLike,\n EnvType,\n IGlobal,\n IWindowHandlerContribution,\n IWindow,\n IWindowParams\n} from '../../../interface';\nimport type { IBoundsLike } from '@visactor/vutils';\n\ntype OnchangeCbType = (params?: { x?: number; y?: number; width?: number; height?: number }) => void;\n\n@injectable()\nexport abstract class BaseWindowHandlerContribution implements IWindowHandlerContribution {\n declare type: EnvType;\n\n declare _uid: number;\n\n constructor() {\n this._uid = Generator.GenAutoIncrementId();\n }\n\n protected declare _onChangeCb?: OnchangeCbType;\n\n onChange(cb: OnchangeCbType) {\n this._onChangeCb = cb;\n }\n\n configure(window: IWindow, global: IGlobal) {\n if (global.env === this.type) {\n window.setWindowHandler(this);\n }\n }\n release(...params: any) {\n this.releaseWindow();\n }\n abstract createWindow(params: IWindowParams): void;\n abstract releaseWindow(): void;\n abstract setDpr(dpr: number): void;\n abstract resizeWindow(width: number, height: number): void;\n abstract getContext(): IContext2d;\n abstract getWH(): { width: number; height: number };\n abstract getTitle(): string;\n abstract getXY(): { x: number; y: number };\n abstract getNativeHandler(): ICanvas | any;\n abstract getDpr(): number;\n abstract clearViewBox(vb: IBoundsLike, color?: string): void;\n abstract addEventListener(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void;\n abstract addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions\n ): void;\n abstract removeEventListener(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions\n ): void;\n abstract removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions\n ): void;\n abstract dispatchEvent(event: any): boolean;\n\n abstract getStyle(): CSSStyleDeclaration | Record;\n abstract setStyle(style: CSSStyleDeclaration | Record): void;\n abstract getBoundingClientRect(): IDomRectLike;\n\n isVisible(bbox?: IBoundsLike) {\n return true;\n }\n\n onVisibleChange(cb: (currentVisible: boolean) => void) {\n return;\n }\n\n getTopLeft(baseWindow?: boolean): { top: number; left: number } {\n return {\n top: 0,\n left: 0\n };\n }\n}\n","import {\n inject,\n injectable,\n Generator,\n BaseWindowHandlerContribution,\n ContainerModule,\n WindowHandlerContribution,\n application\n} from '@visactor/vrender-core';\nimport type {\n IContext2d,\n ICanvas,\n IDomRectLike,\n EnvType,\n IGlobal,\n IWindowHandlerContribution,\n IWindowParams\n} from '@visactor/vrender-core';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport { BrowserCanvas } from '../../canvas/contributions/browser';\n\n@injectable()\nexport class BrowserWindowHandlerContribution\n extends BaseWindowHandlerContribution\n implements IWindowHandlerContribution\n{\n static env: EnvType = 'browser';\n\n type: EnvType = 'browser';\n\n canvas: ICanvas;\n\n observer?: MutationObserver;\n\n protected _canvasIsIntersecting: boolean;\n protected _onVisibleChangeCb: (currentVisible: boolean) => void;\n\n private readonly global: IGlobal;\n\n get container(): HTMLElement | null {\n return this.canvas.nativeCanvas.parentElement;\n }\n\n static idprefix: string = 'visactor_window';\n static prefix_count: number = 0;\n\n static GenerateCanvasId() {\n return `${BrowserWindowHandlerContribution.idprefix}_${BrowserWindowHandlerContribution.prefix_count++}`;\n }\n\n constructor() {\n super();\n this._canvasIsIntersecting = true;\n this.global = application.global;\n }\n\n getTitle(): string {\n return this.canvas.id.toString();\n }\n\n getWH(): { width: number; height: number } {\n return {\n width: this.canvas.width / (this.canvas.dpr || 1),\n height: this.canvas.height / (this.canvas.dpr || 1)\n };\n }\n\n getXY(): { x: number; y: number } {\n return this.canvas.nativeCanvas.getBoundingClientRect();\n }\n\n createWindow(params: IWindowParams): void {\n // 如果没有传入canvas,那么就创建一个canvas\n if (!params.canvas) {\n this.createWindowByConfig(params);\n } else {\n this.createWindowByCanvas(params);\n }\n\n this.postInit();\n\n // this.bindOnChangeEvent();\n }\n\n protected postInit() {\n if (!this.global.optimizeVisible) {\n return;\n }\n try {\n this.observerCanvas();\n } catch (err) {\n console.error('发生错误,该环境不存在IntersectionObserver');\n }\n }\n\n isElementVisible(el: HTMLElement) {\n const rect = el.getBoundingClientRect();\n const vWidth = window.innerWidth || document.documentElement.clientWidth;\n const vHeight = window.innerHeight || document.documentElement.clientHeight;\n\n if (rect.right < 0 || rect.bottom < 0 || rect.left > vWidth || rect.top > vHeight) {\n return false;\n }\n\n return true;\n }\n\n protected observerCanvas() {\n this._canvasIsIntersecting = this.isElementVisible(this.canvas.nativeCanvas);\n const observer = new IntersectionObserver((entries, observer) => {\n entries.forEach(entry => {\n if (this._canvasIsIntersecting !== entry.isIntersecting) {\n this._canvasIsIntersecting = entry.isIntersecting;\n this._onVisibleChangeCb && this._onVisibleChangeCb(entry.isIntersecting);\n } else {\n this._canvasIsIntersecting = entry.isIntersecting;\n }\n });\n });\n if (!observer) {\n return;\n }\n observer.observe(this.canvas.nativeCanvas);\n }\n\n // private bindOnChangeEvent() {\n // const { nativeCanvas } = this.canvas;\n // const observer = new MutationObserver((mutations, observer) => {\n // mutations.forEach((mutaion) => {\n // console.log(mutaion);\n // })\n // });\n // observer.observe(nativeCanvas, { attributes: true, childList: true, subtree: true })\n // }\n\n private createWindowByConfig(params: IWindowParams) {\n // 创建canvas\n const nativeCanvas = this.global.createCanvas({\n width: params.width,\n height: params.height\n });\n // 保存到dom中\n let container: HTMLElement | null;\n if (typeof params.container === 'string') {\n container = this.global.getElementById(params.container);\n } else if (params.container) {\n container = params.container;\n } else {\n container = this.global.getRootElement();\n }\n if (!container) {\n throw new Error('发生错误,containerId可能传入有误');\n }\n\n if (!params.offscreen) {\n container.appendChild(nativeCanvas);\n } else {\n container = null;\n }\n\n // 绑定\n const options = {\n width: params.width,\n height: params.height,\n dpr: params.dpr,\n nativeCanvas,\n container,\n id: BrowserWindowHandlerContribution.GenerateCanvasId(),\n canvasControled: true\n };\n this.canvas = new BrowserCanvas(options);\n // 应用位置属性\n // window上的不需要设置position\n // this.canvas.applyPosition();\n // this.canvas.resetStyle(options);\n }\n private createWindowByCanvas(params: IWindowParams) {\n // 获取canvas\n let canvas: HTMLCanvasElement | null;\n if (typeof params.canvas === 'string') {\n canvas = this.global.getElementById(params.canvas) as HTMLCanvasElement | null;\n if (!canvas) {\n throw new Error('canvasId 参数不正确,请确认canvas存在并插入dom');\n }\n } else {\n canvas = params!.canvas as HTMLCanvasElement | null;\n }\n if (!canvas) {\n throw new Error('发生错误,传入的canvas不正确');\n }\n\n // 如果没有传入wh,或者是不受控制的canvas,那就用canvas的原始wh\n let width = params.width;\n let height = params.height;\n if (width == null || height == null || !params.canvasControled) {\n const data = canvas.getBoundingClientRect();\n width = data.width;\n height = data.height;\n }\n // 如果没有dpr,就使用canvas的原始dpr\n let dpr = params.dpr;\n // if (params.canvasControled === false) {\n // if (dpr) {\n // console.warn('canvasControled为false后,dpr参数将无效');\n // }\n // dpr = null;\n // }\n if (dpr == null) {\n const ctx = canvas.getContext('2d');\n // 兼容XTable\n dpr = (ctx as any).pixelRatio ?? canvas.width / width;\n }\n this.canvas = new BrowserCanvas({\n width: width,\n height: height,\n dpr: dpr,\n nativeCanvas: canvas,\n canvasControled: params.canvasControled\n });\n // if (params.canvasControled) {\n // this.canvas.resetStyle({\n // width,\n // height,\n // dpr\n // });\n // }\n }\n releaseWindow(): void {\n this.canvas.release();\n }\n resizeWindow(width: number, height: number): void {\n this.canvas.resize(width, height);\n }\n setDpr(dpr: number): void {\n this.canvas.dpr = dpr;\n }\n\n getContext(): IContext2d {\n return this.canvas.getContext();\n }\n getNativeHandler(): ICanvas {\n return this.canvas;\n }\n getDpr(): number {\n return this.canvas.dpr;\n }\n\n addEventListener(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void;\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions\n ): void {\n return (this.canvas.nativeCanvas as HTMLCanvasElement).addEventListener(type, listener, options);\n }\n removeEventListener(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions\n ): void {\n return (this.canvas.nativeCanvas as HTMLCanvasElement).removeEventListener(type, listener, options);\n }\n dispatchEvent(event: any): boolean {\n return (this.canvas.nativeCanvas as HTMLCanvasElement).dispatchEvent(event);\n }\n\n getStyle(): CSSStyleDeclaration | Record {\n return this.canvas.nativeCanvas.style;\n }\n setStyle(style: CSSStyleDeclaration | Record) {\n this.canvas.nativeCanvas.style = style;\n }\n\n getBoundingClientRect(): IDomRectLike {\n const c = this.canvas.nativeCanvas as HTMLCanvasElement;\n const wh = this.getWH();\n if (!c.parentElement) {\n return {\n x: 0,\n y: 0,\n width: wh.width,\n height: wh.height,\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n }\n return this.canvas.nativeCanvas.getBoundingClientRect();\n }\n\n clearViewBox(vb: IBoundsLike, color?: string): void {\n const context = this.getContext();\n const dpr = this.getDpr();\n context.nativeContext.save();\n (context.nativeContext as CanvasRenderingContext2D).setTransform(dpr, 0, 0, dpr, 0, 0);\n context.clearRect(vb.x1, vb.y1, vb.x2 - vb.x1, vb.y2 - vb.y1);\n if (color) {\n context.fillStyle = color;\n context.fillRect(vb.x1, vb.y1, vb.x2 - vb.x1, vb.y2 - vb.y1);\n }\n context.nativeContext.restore();\n }\n\n isVisible(bbox?: IBoundsLike) {\n return this._canvasIsIntersecting;\n }\n\n onVisibleChange(cb: (currentVisible: boolean) => void) {\n this._onVisibleChangeCb = cb;\n }\n\n getTopLeft(baseWindow?: boolean): { top: number; left: number } {\n return this.global.getElementTopLeft(this.canvas.nativeCanvas, baseWindow);\n }\n}\n\nexport const browserWindowModule = new ContainerModule(bind => {\n // browser\n bind(BrowserWindowHandlerContribution).toSelf();\n bind(WindowHandlerContribution)\n .toDynamicValue(ctx => ctx.container.get(BrowserWindowHandlerContribution))\n .whenTargetNamed(BrowserWindowHandlerContribution.env);\n});\n","import { injectable } from '../../../common/inversify-lite';\nimport type {\n ICanvasLike,\n EnvType,\n ICreateCanvasParams,\n IEnvContribution,\n IGlobal,\n CreateDOMParamsType\n} from '../../../interface';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport { AABBBounds } from '@visactor/vutils';\n\n@injectable()\nexport abstract class BaseEnvContribution implements IEnvContribution {\n type: EnvType;\n\n supportsTouchEvents: boolean;\n supportsPointerEvents: boolean;\n supportsMouseEvents: boolean;\n applyStyles: boolean;\n supportEvent: boolean;\n\n configure(service: IGlobal, ...p: any) {\n if (service.env === this.type) {\n service.setActiveEnvContribution(this);\n }\n }\n\n getNativeAABBBounds(dom: any): IBoundsLike {\n return new AABBBounds();\n }\n\n removeDom(dom: HTMLElement): boolean {\n return false;\n }\n\n createDom(params: CreateDOMParamsType): any {\n return null;\n }\n\n /**\n * 获取动态canvas的数量,offscreenCanvas或者framebuffer\n */\n getDynamicCanvasCount(): number {\n return 999;\n }\n\n /**\n * 获取静态canvas的数量,纯粹canvas\n */\n getStaticCanvasCount(): number {\n return 999;\n }\n\n abstract loadImage(url: string): Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | ImageData | null;\n }>;\n\n abstract loadSvg(url: string): Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | ImageData | null;\n }>;\n\n abstract createCanvas(params: ICreateCanvasParams): ICanvasLike | any;\n abstract createOffscreenCanvas(params: ICreateCanvasParams): ICanvasLike | any;\n\n abstract releaseCanvas(canvas: ICanvasLike | string): void;\n\n abstract getDevicePixelRatio(): number;\n\n abstract getRequestAnimationFrame(): (callback: FrameRequestCallback) => number;\n abstract getCancelAnimationFrame(): (h: number) => void;\n\n abstract addEventListener(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions | undefined\n ): void;\n abstract addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions | undefined\n ): void;\n abstract addEventListener(type: unknown, listener: unknown, options?: unknown): void;\n\n abstract removeEventListener(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions | undefined\n ): void;\n abstract removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions | undefined\n ): void;\n abstract removeEventListener(type: unknown, listener: unknown, options?: unknown): void;\n\n abstract dispatchEvent(event: any): boolean;\n\n getElementById(str: string): HTMLElement | null {\n return document.getElementById(str);\n }\n\n getRootElement(): HTMLElement | null {\n return document.body;\n }\n\n abstract release(...params: any): void;\n\n loadJson(url: string): Promise<{\n loadState: 'success' | 'fail';\n data: Record | null;\n }> {\n const jsonPromise = fetch(url).then(data => data.json());\n jsonPromise\n .then(json => {\n return {\n data: json,\n state: 'success'\n };\n })\n .catch(() => {\n return {\n data: null,\n state: 'fail'\n };\n });\n return jsonPromise;\n }\n\n loadArrayBuffer(url: string): Promise<{\n loadState: 'success' | 'fail';\n data: ArrayBuffer | null;\n }> {\n const arrayBufferPromise = fetch(url).then(data => data.arrayBuffer());\n return arrayBufferPromise\n .then((arrayBuffer: ArrayBuffer) => {\n return {\n data: arrayBuffer,\n loadState: 'success' as const\n };\n })\n .catch(() => {\n return {\n data: null,\n loadState: 'fail'\n };\n });\n }\n\n loadBlob(url: string): Promise<{\n loadState: 'success' | 'fail';\n data: Blob | null;\n }> {\n const blobPromise = fetch(url).then(data => data.blob());\n return blobPromise\n .then((blob: Blob) => {\n return {\n data: blob,\n loadState: 'success' as const\n };\n })\n .catch(() => {\n return {\n data: null,\n loadState: 'fail'\n };\n });\n }\n\n getElementTop(dom: any, baseWindow?: boolean) {\n return 0;\n }\n getElementLeft(dom: any, baseWindow?: boolean) {\n return 0;\n }\n getElementTopLeft(dom: any, baseWindow?: boolean): { top: number; left: number } {\n return { top: 0, left: 0 };\n }\n}\n","import { injectable, Generator, BaseEnvContribution } from '@visactor/vrender-core';\nimport type {\n ICanvasLike,\n EnvType,\n ICreateCanvasParams,\n IEnvContribution,\n CreateDOMParamsType\n} from '@visactor/vrender-core';\nimport type { IBoundsLike, IPointLike } from '@visactor/vutils';\nimport { AABBBounds, isString, isValidNumber } from '@visactor/vutils';\n\nclass DynamicB {\n get x1(): number {\n return this.dom.getBoundingClientRect().left;\n }\n get x2(): number {\n return this.dom.getBoundingClientRect().right;\n }\n get y1(): number {\n return this.dom.getBoundingClientRect().top;\n }\n get y2(): number {\n return this.dom.getBoundingClientRect().bottom;\n }\n get width(): number {\n return this.dom.getBoundingClientRect().width;\n }\n get height(): number {\n return this.dom.getBoundingClientRect().height;\n }\n\n dom: HTMLElement;\n\n constructor(dom: HTMLElement) {\n this.dom = dom;\n }\n}\n\nexport function createImageElement(src: string, isSvg: boolean = false): Promise {\n const img = document.createElement('img');\n img.crossOrigin = 'anonymous';\n if (isSvg) {\n const data = new Blob([src], { type: 'image/svg+xml' });\n src = window.URL.createObjectURL(data);\n }\n img.src = src;\n if (img.complete) {\n return Promise.resolve(img);\n }\n const promise: Promise = new Promise((resolve, reject) => {\n img.onload = () => {\n resolve(img);\n };\n img.onerror = () => {\n reject(new Error('加载失败'));\n };\n });\n return promise;\n}\n\n@injectable()\nexport class BrowserEnvContribution extends BaseEnvContribution implements IEnvContribution {\n type: EnvType = 'browser';\n supportEvent: boolean = true;\n\n constructor() {\n super();\n try {\n this.supportsTouchEvents = 'ontouchstart' in globalThis;\n this.supportsPointerEvents = !!globalThis.PointerEvent;\n this.supportsMouseEvents = !!globalThis.MouseEvent;\n } catch (err) {\n this.supportsTouchEvents = false;\n this.supportsPointerEvents = false;\n this.supportsPointerEvents = false;\n }\n this.applyStyles = true;\n }\n\n mapToCanvasPoint(nativeEvent: PointerEvent | WheelEvent, domElement?: any): IPointLike {\n if (domElement) {\n const { clientX: x, clientY: y } = nativeEvent;\n const rect = domElement.getBoundingClientRect();\n const nativeCanvas = domElement.getNativeHandler?.().nativeCanvas;\n let scaleX;\n let scaleY;\n if (nativeCanvas) {\n scaleX = rect.width / nativeCanvas.offsetWidth;\n scaleY = rect.height / nativeCanvas.offsetHeight;\n }\n\n return {\n x: (x - rect.left) / (isValidNumber(scaleX) ? scaleX : 1),\n y: (y - rect.top) / (isValidNumber(scaleY) ? scaleY : 1)\n };\n }\n return {\n x: nativeEvent.offsetX,\n y: nativeEvent.offsetY\n };\n }\n\n getNativeAABBBounds(_dom: any): IBoundsLike {\n let dom = _dom;\n if (typeof _dom === 'string') {\n dom = new DOMParser().parseFromString(_dom, 'text/html').firstChild;\n if ((dom as any).lastChild) {\n dom = (dom as any).lastChild.firstChild;\n }\n }\n if (dom.getBoundingClientRect) {\n const b = dom.getBoundingClientRect();\n return new DynamicB(b);\n }\n return new AABBBounds();\n }\n\n removeDom(dom: HTMLElement): boolean {\n dom.parentElement.removeChild(dom);\n return true;\n }\n\n createDom(params: CreateDOMParamsType): HTMLElement | null {\n const { tagName = 'div', width, height, style, parent } = params;\n const element = document.createElement(tagName);\n if (style) {\n if (isString(style)) {\n element.setAttribute('style', style);\n } else {\n Object.keys(style).forEach(k => {\n element.setAttribute(k, style[k]);\n });\n }\n }\n if (width != null) {\n element.style.width = `${width}px`;\n }\n if (height != null) {\n element.style.height = `${height}px`;\n }\n\n if (parent) {\n const pd = isString(parent) ? this.getElementById(parent) : parent;\n if (pd && pd.appendChild) {\n pd.appendChild(element);\n }\n }\n\n return element;\n }\n\n loadImage(url: string): Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | ImageData | null;\n }> {\n const imagePromise = createImageElement(url, false);\n return imagePromise\n .then((img: HTMLImageElement) => {\n return {\n data: img,\n loadState: 'success' as const\n };\n })\n .catch(() => {\n return {\n data: null,\n loadState: 'fail'\n };\n });\n }\n\n loadSvg(url: string): Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | ImageData | null;\n }> {\n const imagePromise = createImageElement(url, true);\n return imagePromise\n .then((img: HTMLImageElement) => {\n return {\n data: img,\n loadState: 'success' as const\n };\n })\n .catch(() => {\n return {\n data: null,\n loadState: 'fail'\n };\n });\n }\n\n createCanvas(params: ICreateCanvasParams): HTMLCanvasElement {\n const canvas = document.createElement('canvas');\n params.id && (canvas.id = params.id ?? Generator.GenAutoIncrementId().toString());\n // 默认dpr\n const dpr = params.dpr ?? window.devicePixelRatio;\n if (params.width && params.height) {\n canvas.style.width = `${params.width}px`;\n canvas.style.height = `${params.height}px`;\n canvas.width = params.width * dpr;\n canvas.height = params.height * dpr;\n }\n return canvas;\n }\n\n createOffscreenCanvas(params: ICreateCanvasParams) {\n const dpr = params.dpr ?? window.devicePixelRatio;\n const canvas = new OffscreenCanvas(params.width * dpr, params.height * dpr);\n return canvas;\n }\n\n releaseCanvas(canvas: ICanvasLike | string) {\n let c: HTMLCanvasElement | null;\n if (typeof canvas === 'string') {\n c = document.getElementById(canvas) as HTMLCanvasElement | null;\n } else {\n c = canvas as unknown as HTMLCanvasElement;\n }\n\n if (!c) {\n return;\n }\n if (c.parentElement) {\n c.parentElement.removeChild(c);\n }\n }\n\n getDevicePixelRatio(): number {\n return window.devicePixelRatio;\n }\n\n getRequestAnimationFrame(): (callback: FrameRequestCallback) => number {\n return window.requestAnimationFrame;\n }\n\n getCancelAnimationFrame(): (h: number) => void {\n return window.cancelAnimationFrame;\n }\n\n addEventListener(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions | undefined\n ): void;\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions | undefined\n ): void;\n addEventListener(type: unknown, listener: unknown, options?: unknown): void {\n return document.addEventListener(type as any, listener as any, options as any);\n }\n\n removeEventListener(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions | undefined\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions | undefined\n ): void;\n removeEventListener(type: unknown, listener: unknown, options?: unknown): void {\n return document.removeEventListener(type as any, listener as any, options as any);\n }\n\n dispatchEvent(event: any): boolean {\n return document.dispatchEvent(event);\n }\n\n getElementById(str: string): HTMLElement | null {\n return document.getElementById(str);\n }\n\n getRootElement(): HTMLElement | null {\n return document.body;\n }\n\n getDocument(): Document | null {\n return document;\n }\n\n release(...params: any): void {\n return;\n }\n\n getElementTop(element: HTMLElement, baseWindow?: boolean) {\n let actualTop = element.offsetTop;\n let current = element.offsetParent as HTMLElement;\n\n while (current !== null) {\n actualTop += current.offsetTop;\n current = current.offsetParent as HTMLElement;\n }\n\n return actualTop;\n }\n getElementLeft(element: HTMLElement, baseWindow?: boolean) {\n let actualLeft = element.offsetLeft;\n let current = element.offsetParent as HTMLElement;\n\n while (current !== null) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent as HTMLElement;\n }\n\n return actualLeft;\n }\n getElementTopLeft(element: HTMLElement, baseWindow?: boolean): { top: number; left: number } {\n let actualTop = element.offsetTop;\n let actualLeft = element.offsetLeft;\n let current = element.offsetParent as HTMLElement;\n\n while (current !== null) {\n actualTop += current.offsetTop;\n actualLeft += current.offsetLeft;\n current = current.offsetParent as HTMLElement;\n }\n\n return {\n top: actualTop,\n left: actualLeft\n };\n }\n}\n","import { container, ContainerModule, type Container, EnvContribution } from '@visactor/vrender-core';\n// import { browserEnvModule } from './contributions/module';\nimport { browserCanvasModule } from '../canvas/contributions/browser/modules';\nimport { loadCanvasPicker } from '../picker/canvas-module';\nimport { browserWindowModule } from '../window/contributions/browser-contribution';\nimport { BrowserEnvContribution } from './contributions/browser-contribution';\n\nexport const browserEnvModule = new ContainerModule(bind => {\n // browser\n if (!(browserEnvModule as any).isBrowserBound) {\n (browserEnvModule as any).isBrowserBound = true;\n bind(BrowserEnvContribution).toSelf().inSingletonScope();\n bind(EnvContribution).toService(BrowserEnvContribution);\n }\n});\n\n(browserEnvModule as any).isBrowserBound = false;\n\nexport function loadBrowserEnv(container: Container, loadPicker: boolean = true) {\n if (!loadBrowserEnv.__loaded) {\n loadBrowserEnv.__loaded = true;\n container.load(browserEnvModule);\n container.load(browserCanvasModule);\n container.load(browserWindowModule);\n loadPicker && loadCanvasPicker(container);\n }\n}\n\nloadBrowserEnv.__loaded = false;\n\nexport function initBrowserEnv() {\n loadBrowserEnv(container);\n}\n","// 参考konva\nimport { Matrix } from '@visactor/vutils';\nimport { injectable } from '@visactor/vrender-core';\nimport type { IContext2d, EnvType, ICanvas } from '@visactor/vrender-core';\nimport { BrowserContext2d } from '../browser';\n\n@injectable()\nexport class NodeContext2d extends BrowserContext2d implements IContext2d {\n static env: EnvType = 'node';\n\n constructor(canvas: ICanvas, dpr: number) {\n super(canvas, dpr);\n const context = canvas.nativeCanvas.getContext('2d');\n if (!context) {\n throw new Error('发生错误,获取2d上下文失败');\n }\n this.nativeContext = context;\n this.canvas = canvas;\n this.matrix = new Matrix(1, 0, 0, 1, 0, 0);\n this.stack = [];\n this.dpr = dpr ?? 1;\n }\n\n release(...params: any): void {\n return;\n }\n}\n","import { injectable, BaseCanvas } from '@visactor/vrender-core';\nimport type { ICanvas, CanvasConfigType, EnvType } from '@visactor/vrender-core';\nimport { NodeContext2d } from './context';\nimport { isFunction } from '@visactor/vutils';\n\n@injectable()\nexport class NodeCanvas extends BaseCanvas implements ICanvas {\n static env: EnvType = 'node';\n\n /**\n * 通过canvas生成一个wrap对象,初始化时不会再设置canvas的属性\n * @param params\n */\n constructor(params: CanvasConfigType) {\n super(params);\n }\n\n init() {\n this._context = new NodeContext2d(this, this._dpr);\n this.nativeCanvas.width = this._pixelWidth;\n this.nativeCanvas.height = this._pixelHeight;\n }\n\n release(...params: any): void {\n if ((this._nativeCanvas as any).release && isFunction((this._nativeCanvas as any).release)) {\n (this._nativeCanvas as any).release();\n }\n }\n}\n","import {\n inject,\n injectable,\n Generator,\n BaseWindowHandlerContribution,\n VGlobal,\n ContainerModule,\n WindowHandlerContribution\n} from '@visactor/vrender-core';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type {\n EnvType,\n IGlobal,\n IContext2d,\n ICanvas,\n IDomRectLike,\n IWindowHandlerContribution,\n IWindowParams\n} from '@visactor/vrender-core';\nimport { NodeCanvas } from '../../canvas/contributions/node';\n\n@injectable()\nexport class NodeWindowHandlerContribution extends BaseWindowHandlerContribution implements IWindowHandlerContribution {\n static env: EnvType = 'node';\n type: EnvType = 'node';\n\n canvas: ICanvas;\n get container(): HTMLElement | null {\n return null;\n }\n\n constructor(@inject(VGlobal) private readonly global: IGlobal) {\n super();\n }\n\n getTitle(): string {\n return '';\n }\n\n getWH(): { width: number; height: number } {\n return {\n width: this.canvas.displayWidth,\n height: this.canvas.displayHeight\n };\n }\n\n getXY(): { x: number; y: number } {\n return { x: 0, y: 0 };\n }\n\n createWindow(params: IWindowParams): void {\n // 如果没有传入canvas,那么就创建一个canvas\n if (!params.canvas) {\n this.createWindowByConfig(params);\n } else {\n this.createWindowByCanvas(params);\n }\n }\n private createWindowByConfig(params: IWindowParams) {\n // 创建canvas\n const nativeCanvas = this.global.createCanvas({ width: params.width, height: params.height });\n\n // 绑定\n const options = {\n width: params.width,\n height: params.height,\n dpr: params.dpr,\n nativeCanvas,\n id: Generator.GenAutoIncrementId().toString(),\n canvasControled: true\n };\n this.canvas = new NodeCanvas(options);\n }\n private createWindowByCanvas(params: IWindowParams) {\n // 获取canvas\n const canvas = params!.canvas as HTMLCanvasElement | null;\n\n // 如果没有传入wh,或者是不受控制的canvas,那就用canvas的原始wh\n let width = params.width;\n let height = params.height;\n if (width == null || height == null || !params.canvasControled) {\n width = canvas.width;\n height = canvas.height;\n }\n\n this.canvas = new NodeCanvas({\n width: width,\n height: height,\n dpr: 1,\n nativeCanvas: canvas,\n canvasControled: params.canvasControled\n });\n }\n releaseWindow(): void {\n this.canvas.release();\n }\n resizeWindow(width: number, height: number): void {\n this.canvas.resize(width, height);\n }\n setDpr(dpr: number): void {\n this.canvas.dpr = dpr;\n }\n\n getContext(): IContext2d {\n return this.canvas.getContext();\n }\n getNativeHandler(): ICanvas {\n return this.canvas;\n }\n getDpr(): number {\n return this.canvas.dpr;\n }\n\n getImageBuffer(type: string = 'image/png'): any {\n const canvas = this.canvas.nativeCanvas;\n return canvas.toBuffer(type);\n }\n\n addEventListener(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void;\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions\n ): void;\n addEventListener(type: unknown, listener: unknown, options?: unknown): void {\n return;\n }\n\n dispatchEvent(event: any): boolean {\n return true;\n }\n\n removeEventListener(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions\n ): void;\n removeEventListener(type: unknown, listener: unknown, options?: unknown): void {\n return;\n }\n\n getStyle(): CSSStyleDeclaration | Record {\n return;\n }\n setStyle(style: CSSStyleDeclaration | Record): void {\n return;\n }\n\n getBoundingClientRect(): IDomRectLike {\n return null;\n }\n\n clearViewBox(vb: IBoundsLike, color?: string): void {\n return;\n }\n}\n\nexport const nodeWindowModule = new ContainerModule(bind => {\n // node\n bind(NodeWindowHandlerContribution).toSelf();\n bind(WindowHandlerContribution)\n .toDynamicValue(ctx => ctx.container.get(NodeWindowHandlerContribution))\n .whenTargetNamed(NodeWindowHandlerContribution.env);\n});\n","import { injectable, BaseEnvContribution, rafBasedSto } from '@visactor/vrender-core';\n// import { loadTaroContributions } from '../../../kits';\nimport type { EnvType, ICreateCanvasParams, IEnvContribution, IGlobal } from '@visactor/vrender-core';\n\ntype Canvas = any;\n\ntype NodePkg = {\n createCanvas: (width: number, height: number, type?: 'pdf' | 'svg') => Canvas;\n createImageData: (data: Uint8ClampedArray, width: number, height?: number) => ImageData;\n loadImage: (src: string | any, options?: any) => Promise;\n Resvg?: any;\n};\n\n// let last = 0;\n// function nodeRequestAnimationFrame(callback: FrameRequestCallback) {\n// const now = Date.now();\n// const timeLeft = Math.max(0, 16 - (now - last));\n// const id = setTimeout(function () {\n// callback(now + timeLeft);\n// }, timeLeft);\n// last = now + timeLeft;\n// return id;\n// }\n\n@injectable()\nexport class NodeEnvContribution extends BaseEnvContribution implements IEnvContribution {\n type: EnvType = 'node';\n pkg: NodePkg;\n _lastTime: number = 0;\n supportEvent: boolean = false;\n\n configure(service: IGlobal, pkg: NodePkg) {\n if (service.env === this.type) {\n service.setActiveEnvContribution(this);\n this.pkg = pkg;\n }\n }\n\n /**\n * 获取动态canvas的数量,offscreenCanvas或者framebuffer\n */\n getDynamicCanvasCount(): number {\n return 0;\n }\n\n /**\n * 获取静态canvas的数量,纯粹canvas\n */\n getStaticCanvasCount(): number {\n return 999;\n }\n\n loadJson(url: string): Promise<{\n loadState: 'success' | 'fail';\n data: Record | null;\n }> {\n const jsonPromise = fetch(url).then(data => data.json()) as Promise; // ignore_security_alert\n jsonPromise\n .then(json => {\n return {\n data: json,\n state: 'success'\n };\n })\n .catch(() => {\n return {\n data: null,\n state: 'fail'\n };\n });\n return jsonPromise;\n }\n\n loadArrayBuffer(url: string): Promise<{\n loadState: 'success' | 'fail';\n data: ArrayBuffer | null;\n }> {\n const arrayBufferPromise = fetch(url).then(data => data.arrayBuffer()); // ignore_security_alert\n return arrayBufferPromise\n .then((arrayBuffer: ArrayBuffer) => {\n return {\n data: arrayBuffer,\n loadState: 'success' as const\n };\n })\n .catch(() => {\n return {\n data: null,\n loadState: 'fail'\n };\n });\n }\n\n loadImage(url: string): Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | null;\n }> {\n const { loadImage } = this.pkg;\n if (loadImage) {\n return loadImage(url)\n .then((image: any) => {\n const loadState: 'success' | 'fail' = image ? 'success' : 'fail';\n return {\n loadState,\n data: image as HTMLImageElement\n };\n })\n .catch(() => {\n return {\n loadState: 'fail',\n data: null\n } as any;\n });\n }\n return Promise.reject(new Error('node-canvas loadImage could not be found!'));\n }\n\n // 此处的\n loadSvg(svgStr: string): Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | null;\n }> {\n // // eslint-disable-next-line @typescript-eslint/no-var-requires\n // const { Resvg } = require('@resvg/resvg-js');\n const Resvg = this.pkg.Resvg;\n if (!Resvg) {\n return Promise.reject(new Error('@resvg/resvg-js svgParser could not be found!'));\n }\n const resvg = new Resvg(svgStr);\n const pngData = resvg.render().asPng();\n return this.loadImage(pngData as unknown as string);\n }\n\n createCanvas(params: any): Canvas {\n const canvas = this.pkg.createCanvas(params.width, params.height);\n return canvas;\n }\n\n releaseCanvas(canvas: Canvas | any) {\n return;\n }\n\n getDevicePixelRatio(): number {\n return 1;\n }\n\n getRequestAnimationFrame(): (callback: FrameRequestCallback) => number {\n // return function (callback: FrameRequestCallback) {\n // return setTimeout(callback, 1000 / 60, true);\n // } as any;\n return function (callback: FrameRequestCallback) {\n return rafBasedSto.call(callback);\n } as any;\n }\n\n getCancelAnimationFrame(): (h: number) => void {\n return (h: number) => {\n rafBasedSto.clear(h);\n };\n }\n\n addEventListener(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions | undefined\n ): void;\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions | undefined\n ): void;\n addEventListener(type: unknown, listener: unknown, options?: unknown): void {\n return;\n }\n\n removeEventListener(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions | undefined\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions | undefined\n ): void;\n removeEventListener(type: unknown, listener: unknown, options?: unknown): void {\n return;\n }\n\n getElementById(str: string): HTMLElement | null {\n return null;\n }\n\n getRootElement(): HTMLElement | null {\n return null;\n }\n\n dispatchEvent(event: any): boolean {\n return;\n }\n\n release(...params: any): void {\n return;\n }\n\n createOffscreenCanvas(params: ICreateCanvasParams) {\n return;\n }\n}\n","import { container, ContainerModule, type Container, EnvContribution } from '@visactor/vrender-core';\n// import { loadMathPicker } from '../picker/math-module';\n// import { nodeEnvModule } from './contributions/module';\nimport { nodeCanvasModule } from '../canvas/contributions/node/modules';\nimport { nodeWindowModule } from '../window/contributions/node-contribution';\nimport { NodeEnvContribution } from './contributions/node-contribution';\n\nexport const nodeEnvModule = new ContainerModule(bind => {\n // node\n if (!(nodeEnvModule as any).isNodeBound) {\n (nodeEnvModule as any).isNodeBound = true;\n bind(NodeEnvContribution).toSelf().inSingletonScope();\n bind(EnvContribution).toService(NodeEnvContribution);\n }\n});\n\n(nodeEnvModule as any).isNodeBound = false;\n\nexport function loadNodeEnv(container: Container, loadPicker: boolean = true) {\n if (!loadNodeEnv.__loaded) {\n loadNodeEnv.__loaded = true;\n container.load(nodeEnvModule);\n container.load(nodeCanvasModule);\n container.load(nodeWindowModule);\n // loadPicker && loadMathPicker(container);\n }\n}\nloadNodeEnv.__loaded = false;\n\nexport function initNodeEnv() {\n loadNodeEnv(container);\n}\n","import {\n initAllEnv,\n loadBrowserEnv,\n loadFeishuEnv,\n loadLynxEnv,\n loadNodeEnv,\n loadTaroEnv,\n loadWxEnv\n} from '@visactor/vrender-kits';\nimport { container } from '@visactor/vrender-core';\n\n/**\n * 加载所有环境兼容代码\n */\nexport const registerAllEnv = () => {\n initAllEnv();\n};\n\n/**\n * 加载浏览器环境代码\n */\nexport const registerBrowserEnv = () => {\n loadBrowserEnv(container);\n};\n\n/**\n * 加载飞书(飞书小程序/block/tt)环境代码\n */\nexport const registerLarkEnv = () => {\n // TODO: 后续统一为 loadLarkEnv\n loadFeishuEnv(container);\n};\n\n/**\n * 加载 Lynx 环境代码\n */\nexport const registerLynxEnv = () => {\n loadLynxEnv(container);\n};\n\n/**\n * 加载 Node 环境代码\n */\nexport const registerNodeEnv = () => {\n loadNodeEnv(container);\n};\n\n/**\n * 加载 Taro 环境代码\n */\nexport const registerTaroEnv = () => {\n loadTaroEnv(container);\n};\n\n/**\n * 加载微信小程序环境代码\n */\nexport const registerWXEnv = () => {\n loadWxEnv(container);\n};\n","/**\n * 主题的命名,不要使用类似 arco,default 等字段,应该要以主题的特征来,颜色/场景特征(light, dark)\n *\n * 1. 对除了 color 外的一些主题设置,应该要有专门的设计,**不要直接复制**\n * 2. 原则上来讲,默认值尽量都放主题中,但是也可根据情况自行判断\n * 3. 目前主题只到系列,不到系列的 mark,对于这个分界没有太清楚,后续根据需求再做开放\n */\nimport type { ITheme } from '../../interface';\nimport { colorScheme } from './color-scheme';\n\nexport const darkTheme: ITheme = {\n name: 'dark',\n colorScheme,\n component: {\n dataZoom: {\n selectedBackground: {\n style: {\n fillOpacity: 0.4,\n outerBorder: {\n strokeOpacity: 0.4\n }\n }\n }\n }\n }\n};\n","import type { IThemeColorScheme } from '../../color-scheme/interface';\nimport { dataScheme } from '../../color-scheme/builtin/default';\nimport type { BuiltinColorPalette } from '../../color-scheme/builtin/interface';\n\nexport const colorScheme: IThemeColorScheme = {\n default: {\n dataScheme,\n palette: {\n /** 背景色 */\n backgroundColor: '#202226',\n /** 图表边框色 */\n borderColor: '#404349',\n /** 默认阴影颜色 */\n shadowColor: 'rgba(0,0,0,0.1)',\n /** 鼠标 hover 项背景颜色 */\n hoverBackgroundColor: '#404349',\n /** 滑块类组件背景条填充颜色 */\n sliderRailColor: '#404349',\n /** 滑块类组件滑块填充颜色 */\n sliderHandleColor: '#202226',\n /** 滑块类组件已选范围填充颜色 */\n sliderTrackColor: '#4284FF',\n /** 浮层背景区域颜色 */\n popupBackgroundColor: '#404349',\n\n /** 主要字色 */\n primaryFontColor: '#fdfdfd',\n /** 次要字色 */\n secondaryFontColor: '#bbbdc3',\n /** 第三字色 */\n tertiaryFontColor: '#888c93',\n /** 轴标签字色 */\n axisLabelFontColor: '#888c93',\n /** 禁用字色 */\n disableFontColor: '#55595f',\n /** 轴高亮标记字色 */\n axisMarkerFontColor: '#202226',\n\n /** 轴网格线颜色 */\n axisGridColor: '#404349',\n /** 轴线颜色 */\n axisDomainColor: '#4b4f54',\n\n /** 缩略轴滑块描边颜色 */\n dataZoomHandleStrokeColor: '#bbbdc3',\n /** 缩略轴图表区域颜色 */\n dataZoomChartColor: '#55595F',\n\n /** 播放器控制器填充颜色 */\n playerControllerColor: '#4284FF',\n\n /** 滚动条滑块颜色 */\n scrollBarSliderColor: 'rgba(255,255,255,0.3)',\n\n /** 轴高亮标记背景色 */\n axisMarkerBackgroundColor: '#fdfdfd',\n /** 标注标签背景颜色 */\n markLabelBackgroundColor: '#404349',\n /** 标注线颜色 */\n markLineStrokeColor: '#bbbdc3',\n\n /** 危险色 */\n dangerColor: '#eb4b4b',\n /** 警告色 */\n warningColor: '#f0bd30',\n /** 成功色 */\n successColor: '#14b267',\n /** 信息色 */\n infoColor: '#4284ff'\n } as BuiltinColorPalette\n }\n};\n","import type { IBasePlugin, IBasePluginService } from './interface';\nimport { createID } from '../../util/id';\nimport { warn } from '../../util/debug';\n\nexport class BasePluginService implements IBasePluginService {\n protected _plugins: T[];\n readonly id: number = createID();\n\n constructor() {\n this._plugins = [];\n }\n\n add(plugins: T[]): T[] | null {\n if (!plugins || plugins.length === 0) {\n return null;\n }\n const unloadedPlugins: T[] = [];\n plugins.forEach(plugin => {\n const isExist = this._plugins.find(p => p.id === plugin.id);\n if (isExist) {\n warn('不要重复添加相同的plugin');\n return;\n }\n this._plugins.push(plugin);\n unloadedPlugins.push(plugin);\n plugin.onAdd && plugin.onAdd(this);\n });\n\n return unloadedPlugins;\n }\n\n load(plugins: T[]): void {\n const unloadedPlugins = this.add(plugins);\n if (!unloadedPlugins || !unloadedPlugins.length) {\n return;\n }\n\n this.activate(plugins);\n }\n\n activate(plugins: T[]): void {\n if (!plugins.length) {\n return;\n }\n\n plugins.forEach(plugin => {\n plugin.init && plugin.init();\n });\n }\n\n get(id: number): T | undefined {\n return this._plugins.find(p => p.id === id);\n }\n\n getAll(): T[] {\n return this._plugins.slice();\n }\n\n dispose(pluginsId: number): void {\n const plugin = this._plugins.find(p => p.id === pluginsId);\n if (!plugin) {\n return;\n }\n plugin.dispose && plugin.dispose(this);\n }\n\n disposeAll(): void {\n this._plugins.forEach(plugin => {\n plugin.dispose && plugin.dispose(this);\n });\n }\n}\n","import type { IChartPlugin, IChartPluginService } from './interface';\nimport type { IVChart } from '../../core';\nimport { BasePluginService } from '../base/base-plugin-service';\nimport type { VChartRenderActionSource } from '../../core/interface';\n\nexport class ChartPluginService\n extends BasePluginService\n implements IChartPluginService\n{\n globalInstance: IVChart;\n\n constructor(globalInstance: IVChart) {\n super();\n this.globalInstance = globalInstance;\n }\n\n onInit(chartSpec: any) {\n this._plugins.forEach(plugin => {\n plugin.onInit && plugin.onInit(this, chartSpec);\n });\n }\n\n onBeforeResize(width: number, height: number) {\n this._plugins.forEach(plugin => {\n plugin.onBeforeResize && plugin.onBeforeResize(this, width, height);\n });\n }\n\n onAfterChartSpecTransform(chartSpec: any, actionSource: VChartRenderActionSource) {\n this._plugins.forEach(plugin => {\n plugin.onAfterChartSpecTransform && plugin.onAfterChartSpecTransform(this, chartSpec, actionSource);\n });\n }\n\n onBeforeInitChart(chartSpec: any, actionSource: VChartRenderActionSource) {\n this._plugins.forEach(plugin => {\n plugin.onBeforeInitChart && plugin.onBeforeInitChart(this, chartSpec, actionSource);\n });\n }\n}\n","import type { ISeries } from '../series/interface/series';\nimport { arrayParser } from '../data/parser/array';\nimport type { ILayoutConstructor, LayoutCallBack } from '../layout/interface';\nimport type { IDataValues, IMarkStateSpec, IInitOption } from '../typings/spec/common';\n// eslint-disable-next-line no-duplicate-imports\nimport { RenderModeEnum } from '../typings/spec/common';\nimport type { ISeriesConstructor } from '../series/interface';\nimport type {\n DimensionIndexOption,\n IChart,\n IChartConstructor,\n IChartSpecInfo,\n IChartSpecTransformer\n} from '../chart/interface';\nimport type { IComponentConstructor } from '../component/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../component/interface/type';\nimport type {\n EventCallback,\n EventParams,\n EventParamsDefinition,\n EventQuery,\n EventType,\n IEvent,\n IEventDispatcher\n} from '../event/interface';\nimport type { IParserOptions } from '@visactor/vdataset/es/parser';\nimport type { IFields, Transform } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport { DataSet, dataViewParser, DataView } from '@visactor/vdataset';\nimport type { Stage } from '@visactor/vrender-core';\nimport { isString, isValid, isNil, array, debounce, functionTransform } from '../util';\nimport { createID } from '../util/id';\nimport { convertPoint } from '../util/space';\nimport { isTrueBrowser } from '../util/env';\nimport { warn } from '../util/debug';\nimport { mergeSpec, mergeSpecWithFilter } from '../util/spec/merge-spec';\nimport { specTransform } from '../util/spec/transform';\nimport { getThemeObject } from '../util/spec/common';\nimport { Factory } from './factory';\nimport { Event } from '../event/event';\nimport { EventDispatcher } from '../event/event-dispatcher';\nimport type { GeoSourceType } from '../typings/geo';\nimport type { GeoSourceOption } from '../series/map/geo-source';\n// eslint-disable-next-line no-duplicate-imports\nimport { getMapSource } from '../series/map/geo-source';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IMark, MarkConstructor } from '../mark/interface';\nimport { registerDataSetInstanceParser, registerDataSetInstanceTransform } from '../data/register';\nimport { dataToDataView } from '../data/initialize';\nimport { stackSplit } from '../data/transforms/stack-split';\nimport { copyDataView } from '../data/transforms/copy-data-view';\nimport type { ITooltipHandler } from '../typings/tooltip';\nimport type { Tooltip } from '../component/tooltip';\nimport type {\n Datum,\n IPoint,\n IRegionQuerier,\n IShowTooltipOption,\n ISpec,\n Maybe,\n MaybeArray,\n StringOrNumber\n} from '../typings';\nimport { AnimationStateEnum } from '../animation/interface';\nimport type { IBoundsLike, ILogger } from '@visactor/vutils';\nimport { ThemeManager } from '../theme/theme-manager';\nimport type { ITheme } from '../theme';\nimport type { IModel, IUpdateSpecResult } from '../model/interface';\nimport { Compiler } from '../compile/compiler';\nimport type { IMorphConfig } from '../animation/spec';\nimport type { ILegend } from '../component/legend/interface';\nimport { getCanvasDataURL, URLToImage } from '../util/image';\nimport { ChartEvent, DEFAULT_CHART_HEIGHT, DEFAULT_CHART_WIDTH, VGRAMMAR_HOOK_EVENT } from '../constant';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n getContainerSize,\n isArray,\n isEmpty,\n Logger,\n merge as mergeOrigin,\n isFunction,\n LoggerLevel,\n isEqual,\n get,\n cloneDeep\n} from '@visactor/vutils';\nimport type {\n DataLinkAxis,\n DataLinkSeries,\n IGlobalConfig,\n IVChart,\n IVChartRenderOption,\n VChartRenderActionSource\n} from './interface';\nimport { InstanceManager } from './instance-manager';\nimport type { IAxis } from '../component/axis';\nimport { setPoptipTheme } from '@visactor/vrender-components';\nimport { calculateChartSize, mergeUpdateResult } from '../chart/util';\nimport { Region } from '../region/region';\nimport { Layout } from '../layout/base-layout';\nimport { registerGroupMark } from '../mark/group';\nimport { registerVGrammarCommonAnimation } from '../animation/config';\nimport { View, registerFilterTransform, registerMapTransform } from '@visactor/vgrammar-core';\nimport { VCHART_UTILS } from './util';\nimport { ExpressionFunction } from './expression-function';\nimport { registerBrowserEnv, registerNodeEnv } from '../env';\nimport { mergeTheme, preprocessTheme } from '../util/spec';\nimport { darkTheme, registerTheme } from '../theme/builtin';\nimport type { IChartPluginService } from '../plugin/chart/interface';\nimport { ChartPluginService } from '../plugin/chart/plugin-service';\n\nexport class VChart implements IVChart {\n readonly id = createID();\n\n /**\n * 按需注册图表和组件\n * @param comps\n * @since 1.5.1\n */\n static useRegisters(comps: (() => void)[]) {\n comps.forEach((fn: () => void) => {\n if (typeof fn === 'function') {\n // 确保元素是函数类型\n fn();\n } else {\n console.error('Invalid function:', fn);\n }\n });\n }\n\n /**\n * 注册自定义图表\n * @param charts 图表类\n * @description 若用于按需加载,1.5.1版本后,请统一使用 `useRegisters` API,例如:`VChart.useRegisters([registerLineChart])`。\n */\n static useChart(charts: IChartConstructor[]) {\n charts.forEach(c => Factory.registerChart(c.type, c));\n }\n /**\n * 注册自定义系列\n * @param series 系列类\n * @description 若用于按需加载,1.5.1版本后,统一使用 `useRegisters` API,例如 `VChart.useRegisters([registerLineSeries])`。\n */\n static useSeries(series: ISeriesConstructor[]) {\n series.forEach(s => Factory.registerSeries(s.type, s));\n }\n /**\n * 注册自定义组件\n * @param components 组件类\n * @description 若用于按需加载,1.5.1版本后,统一使用 `useRegisters` API,例如 `VChart.useRegisters([registerCartesianLinearAxis])`。\n */\n static useComponent(components: IComponentConstructor[]) {\n components.forEach(c => Factory.registerComponent(c.type, c));\n }\n /**\n * 注册自定义 Mark\n * @param marks Mark 图元类\n */\n static useMark(marks: MarkConstructor[]) {\n marks.forEach(m => Factory.registerMark(m.constructorType ?? m.type, m));\n }\n /**\n * 注册自定义布局\n * @param layouts 布局类\n */\n static useLayout(layouts: ILayoutConstructor[]) {\n layouts.forEach(l => Factory.registerLayout(l.type, l));\n }\n /**\n * 注册 DataSet 数据方法\n * @param name 数据 transform 方法名称\n * @param transform 具体的 Transform 执行方法\n */\n static registerDataSetTransform(name: string, transform: Transform) {\n Factory.registerTransform(name, transform);\n }\n\n /**\n * 注册函数(全局注册)\n * @param key 函数名称\n * @param fun 函数内容\n */\n static registerFunction(key: string, fun: Function) {\n if (!key || !fun) {\n return;\n }\n ExpressionFunction.instance().registerFunction(key, fun);\n }\n\n /**\n * 注销函数(全局注销)\n * @param key 函数名称\n */\n static unregisterFunction(key: string) {\n if (!key) {\n return;\n }\n ExpressionFunction.instance().unregisterFunction(key);\n }\n\n /**\n * 获取函数(全局)\n * @param key\n * @returns\n */\n static getFunction(key: string): Function | null {\n if (!key) {\n return null;\n }\n return ExpressionFunction.instance().getFunction(key);\n }\n\n /**\n * 获取函数列表(全局获取)\n * @returns\n */\n static getFunctionList(): string[] | null {\n return ExpressionFunction.instance().getFunctionNameList();\n }\n\n /**\n * 注册地图数据\n * @param key 地图名称\n * @param source 地图数据\n * @param option 地图数据配置\n */\n static registerMap(key: string, source: GeoSourceType, option?: GeoSourceOption) {\n const impl = Factory.getImplementInKey('registerMap');\n impl && impl(key, source, option);\n }\n\n /**\n * 注销地图数据\n * @param key 地图名称\n */\n static unregisterMap(key: string) {\n const impl = Factory.getImplementInKey('unregisterMap');\n impl && impl(key);\n }\n\n /**\n * 根据地图名称获取地图数据\n * @param key 地图名称\n * @returns 地图数据\n */\n static getMap(key: string): GeoSourceType {\n return getMapSource(key);\n }\n\n /**\n * 全局关闭 tooltip\n * @param excludeId 可选,指定不需要关闭 tooltip 的实例 id\n */\n static hideTooltip(excludeId: MaybeArray = []): void {\n InstanceManager.forEach(instance => instance?.hideTooltip?.(), excludeId);\n }\n\n /** 获取 Logger */\n static getLogger(): ILogger {\n return Logger.getInstance();\n }\n\n /** 图表实例管理器 */\n static readonly InstanceManager = InstanceManager;\n /** 主题管理器 */\n static readonly ThemeManager = ThemeManager;\n\n /** 全局配置 */\n static globalConfig: IGlobalConfig = {\n uniqueTooltip: true\n };\n\n /** 工具方法 */\n static readonly Utils = VCHART_UTILS;\n\n protected _originalSpec: any;\n protected _spec: any;\n getSpec() {\n return this._spec;\n }\n\n protected _specInfo: IChartSpecInfo;\n getSpecInfo() {\n return this._specInfo;\n }\n\n private _viewBox: IBoundsLike;\n private _chart!: Maybe;\n private _chartSpecTransformer!: Maybe;\n private _compiler: Compiler;\n private _event: Maybe;\n private _userEvents: {\n eType: EventType;\n query: EventQuery | EventCallback;\n handler?: EventCallback;\n }[] = [];\n private _eventDispatcher: Maybe;\n private _dataSet!: Maybe;\n getDataSet() {\n return this._dataSet;\n }\n\n private _container?: HTMLElement;\n private _canvas?: HTMLCanvasElement | OffscreenCanvas | string;\n private _stage?: Stage;\n\n private _autoSize: boolean = true;\n private _option: IInitOption = {\n mode: RenderModeEnum['desktop-browser'],\n onError: (msg: string) => {\n throw new Error(msg);\n },\n optimize: {\n disableCheckGraphicWidthOutRange: true\n }\n };\n\n private _currentSize: { width: number; height: number };\n private _observer: ResizeObserver = null;\n\n private _currentThemeName: string;\n private _currentTheme: ITheme;\n\n private _onError?: (...args: any[]) => void;\n\n private _context: any = {}; // 存放用户在model初始化前通过实例方法传入的配置等\n private _isReleased: boolean;\n\n private _chartPlugin?: IChartPluginService;\n\n constructor(spec: ISpec, options: IInitOption) {\n this._option = mergeOrigin(this._option, { animation: (spec as any).animation !== false }, options);\n this._onError = this._option?.onError;\n\n const { dom, renderCanvas, mode, stage, poptip, ...restOptions } = this._option;\n const isTrueBrowseEnv = isTrueBrowser(mode);\n\n if (isTrueBrowseEnv && dom) {\n this._container = isString(dom) ? document?.getElementById(dom) : dom;\n }\n if (renderCanvas) {\n this._canvas = renderCanvas;\n }\n if (stage) {\n this._stage = stage as unknown as Stage; // FIXME: 等待 vrender 解决类型和接口不匹配的问题 @zhouxinyu\n }\n\n if (mode !== 'node' && !this._container && !this._canvas && !this._stage) {\n this._option?.onError('please specify container or renderCanvas!');\n return;\n }\n // 根据 mode 配置动态加载浏览器或 node 环境代码\n if (isTrueBrowseEnv) {\n registerBrowserEnv();\n } else if (mode === 'node') {\n registerNodeEnv();\n }\n\n this._viewBox = this._option.viewBox;\n this._currentThemeName = ThemeManager.getCurrentThemeName();\n this._setNewSpec(spec);\n this._updateCurrentTheme();\n this._currentSize = this.getCurrentSize();\n this._compiler = new Compiler(\n {\n dom: this._container ?? 'none',\n canvas: renderCanvas\n },\n {\n mode: this._option.mode,\n stage,\n pluginList: poptip !== false ? ['poptipForText'] : [],\n ...restOptions,\n background: this._getBackground(),\n onError: this._onError\n }\n );\n this._compiler.setSize(this._currentSize.width, this._currentSize.height);\n this._eventDispatcher = new EventDispatcher(this, this._compiler);\n this._event = new Event(this._eventDispatcher, mode);\n this._compiler.initView();\n // TODO: 如果通过 updateSpec 更新主题字体的验证\n // 设置全局字体\n this.getStage()?.setTheme({\n text: { fontFamily: this._currentTheme?.fontFamily }\n });\n this._initDataSet(this._option.dataSet);\n this._autoSize = isTrueBrowseEnv ? spec.autoFit ?? this._option.autoFit ?? true : false;\n this._bindResizeEvent();\n this._bindVGrammarViewEvent();\n this._initChartPlugin();\n\n InstanceManager.registerInstance(this);\n }\n\n /** 设置新 spec,返回是否成功 */\n private _setNewSpec(spec: any, forceMerge?: boolean): boolean {\n if (!spec) {\n return false;\n }\n if (isString(spec)) {\n spec = JSON.parse(spec);\n }\n if (forceMerge && this._originalSpec) {\n spec = mergeSpec({}, this._originalSpec, spec);\n }\n this._originalSpec = spec;\n this._spec = this._getSpecFromOriginalSpec();\n return true;\n }\n\n private _getSpecFromOriginalSpec() {\n // 转换在实例上注册的函数 + 深拷贝 spec,保证 _originalSpec 和 _spec 的不同\n const spec = specTransform(this._originalSpec) as any;\n // because of in data-init, data will be set as array;\n spec.data = spec.data ?? [];\n return spec;\n }\n\n private _initChartSpec(spec: any, actionSource: VChartRenderActionSource) {\n // 如果用户注册了函数,在配置中替换相应函数名为函数内容\n if (VChart.getFunctionList() && VChart.getFunctionList().length) {\n spec = functionTransform(spec, VChart);\n }\n this._spec = spec;\n if (!this._chartSpecTransformer) {\n this._chartSpecTransformer = Factory.createChartSpecTransformer(this._spec.type, {\n type: this._spec.type,\n getTheme: () => this._currentTheme ?? {},\n animation: this._option.animation\n });\n }\n\n this._chartSpecTransformer.transformSpec(this._spec);\n\n // 插件生命周期\n this._chartPluginApply('onAfterChartSpecTransform', this._spec, actionSource);\n\n this._specInfo = this._chartSpecTransformer?.transformModelSpec(this._spec);\n\n // 插件生命周期\n this._chartPluginApply('onAfterModelSpecTransform', this._spec, this._specInfo, actionSource);\n }\n\n private _updateSpecInfo() {\n if (!this._chartSpecTransformer) {\n this._chartSpecTransformer = Factory.createChartSpecTransformer(this._spec.type, {\n type: this._spec.type,\n getTheme: () => this._currentTheme ?? {}\n });\n }\n this._specInfo = this._chartSpecTransformer?.createSpecInfo(this._spec);\n }\n\n private _initChart(spec: any) {\n if (!this._compiler) {\n this._option?.onError('compiler is not initialized');\n return;\n }\n\n // 放到这里而不是放到chart内的考虑\n // 用户spec更新,也许会有core上图表实例的内容存在\n // 如果要支持spec的类似Proxy监听,更新逻辑应当从这一层开始。如果在chart上做,就需要在再向上发送spec更新消息,不是很合理。\n // todo: 问题1 存不存在 chart 需要在这个阶段处理的特殊字段?目前没有,但是理论上可以有?\n const chart = Factory.createChart(spec.type, spec, {\n type: spec.type,\n globalInstance: this,\n eventDispatcher: this._eventDispatcher!,\n dataSet: this._dataSet!,\n container: this._container,\n canvas: this._canvas,\n map: new Map(),\n mode: this._option.mode || RenderModeEnum['desktop-browser'],\n modeParams: this._option.modeParams,\n getCompiler: () => this._compiler,\n performanceHook: this._option.performanceHook,\n viewBox: this._viewBox,\n animation: this._option.animation,\n getTheme: () => this._currentTheme ?? {},\n getSpecInfo: () => this._specInfo ?? {},\n\n layout: this._option.layout,\n onError: this._onError,\n disableTriggerEvent: this._option.disableTriggerEvent === true\n });\n if (!chart) {\n this._option?.onError('init chart fail');\n return;\n }\n this._chart = chart;\n this._chart.setCanvasRect(this._currentSize.width, this._currentSize.height);\n this._chart.created();\n this._chart.init();\n this._event.emit(ChartEvent.initialized, {});\n }\n\n private _releaseData() {\n if (this._dataSet) {\n // Object.values(this._dataSet.dataViewMap).forEach(d => {\n // d.target.removeAllListeners();\n // d.destroy();\n // });\n this._dataSet.dataViewMap = {};\n this._dataSet = null;\n }\n }\n\n private _bindVGrammarViewEvent() {\n if (!this._compiler || this._compiler.isReleased) {\n return;\n }\n this._compiler.getVGrammarView().addEventListener(VGRAMMAR_HOOK_EVENT.ALL_ANIMATION_END, () => {\n this._event.emit(ChartEvent.animationFinished, {});\n });\n this._compiler.getVGrammarView().addEventListener(VGRAMMAR_HOOK_EVENT.AFTER_VRENDER_NEXT_RENDER, () => {\n this._event.emit(ChartEvent.renderFinished, {});\n });\n }\n\n private _bindResizeEvent() {\n if (this._autoSize) {\n if (this._container) {\n const ResizeObserverWindow: any = window.ResizeObserver;\n this._observer = new ResizeObserverWindow(this._onResize);\n this._observer?.observe(this._container);\n }\n window.addEventListener('resize', this._onResize);\n }\n }\n\n private _unBindResizeEvent() {\n if (this._autoSize) {\n window.removeEventListener('resize', this._onResize);\n if (this._observer) {\n this._observer.disconnect();\n this._observer = null;\n }\n }\n }\n\n getCurrentSize() {\n return calculateChartSize(\n this._spec,\n {\n container: this._container,\n canvas: this._canvas,\n mode: this._option.mode || RenderModeEnum['desktop-browser'],\n modeParams: this._option.modeParams\n },\n {\n width: this._currentSize?.width ?? DEFAULT_CHART_WIDTH,\n height: this._currentSize?.height ?? DEFAULT_CHART_HEIGHT\n }\n );\n }\n\n private _doResize() {\n const { width, height } = this.getCurrentSize();\n if (this._currentSize.width !== width || this._currentSize.height !== height) {\n this._currentSize = { width, height };\n this.resize(width, height);\n }\n }\n\n private _onResize = debounce((...args: any[]) => {\n this._doResize();\n }, 100);\n\n private _initDataSet(dataSet?: DataSet) {\n if (dataSet instanceof DataSet) {\n this._dataSet = dataSet;\n } else {\n this._dataSet = new DataSet();\n }\n registerDataSetInstanceParser(this._dataSet, 'dataview', dataViewParser);\n registerDataSetInstanceParser(this._dataSet, 'array', arrayParser);\n registerDataSetInstanceTransform(this._dataSet, 'stackSplit', stackSplit);\n registerDataSetInstanceTransform(this._dataSet, 'copyDataView', copyDataView);\n // 注册 dataset transform\n for (const key in Factory.transforms) {\n registerDataSetInstanceTransform(this._dataSet, key, Factory.transforms[key]);\n }\n // 注册 dataview parser\n for (const key in Factory.dataParser) {\n registerDataSetInstanceParser(this._dataSet, key, Factory.dataParser[key]);\n }\n }\n\n /** 在修改图表配置后重新渲染 */\n updateCustomConfigAndRerender(\n updateSpecResult: IUpdateSpecResult | (() => IUpdateSpecResult),\n sync?: boolean,\n option: IVChartRenderOption = {}\n ) {\n if (this._isReleased || !updateSpecResult) {\n return undefined;\n }\n if (isFunction(updateSpecResult)) {\n updateSpecResult = updateSpecResult();\n }\n this._reCompile(updateSpecResult);\n if (sync) {\n return this._renderSync(option);\n }\n return this._renderAsync(option);\n }\n\n /** 执行自定义的回调修改图表配置,并重新编译(不渲染) */\n protected _updateCustomConfigAndRecompile(updateSpecResult: IUpdateSpecResult, option: IVChartRenderOption = {}) {\n if (!updateSpecResult) {\n return false;\n }\n this._reCompile(updateSpecResult);\n return this._beforeRender(option);\n }\n\n protected _reCompile(updateResult: IUpdateSpecResult, morphConfig?: IMorphConfig) {\n if (updateResult.reMake) {\n this._releaseData();\n this._initDataSet();\n // 释放图表等等\n this._chartSpecTransformer = null;\n this._chart.release();\n this._chart = null as unknown as IChart;\n // 如果不需要动画,那么释放item,避免元素残留\n this._compiler?.releaseGrammar(this._option?.animation === false || this._spec?.animation === false);\n // chart 内部事件 模块自己必须删除\n // 内部模块删除事件时,调用了event Dispatcher.release() 导致用户事件被一起删除\n // 外部事件现在需要重新添加\n this._userEvents.forEach(e => this._event?.on(e.eType as any, e.query as any, e.handler as any));\n\n if (updateResult.reSize) {\n this._doResize();\n }\n } else {\n if (updateResult.reCompile) {\n // recompile\n // 清除之前的所有 compile 内容\n this._compiler?.clear({ chart: this._chart, vChart: this }, !this._option.animation || !this._spec.animation);\n // TODO: 释放事件? vgrammar 的 view 应该不需要释放,响应的stage也没有释放,所以事件可以不绑定\n // 重新绑定事件\n // TODO: 释放XX?\n // 重新compile\n this._compiler?.compile({ chart: this._chart, vChart: this }, {});\n }\n if (updateResult.reSize) {\n const { width, height } = this.getCurrentSize();\n this._chart.onResize(width, height, false);\n this._compiler.resize?.(width, height, false);\n }\n }\n }\n\n /** 渲染之前的步骤,返回是否成功 */\n protected _beforeRender(option: IVChartRenderOption = {}): boolean {\n // 如果 vchart 实例已经卸载,终止渲染\n if (this._isReleased) {\n return false;\n }\n // 如果图表已经实例化,跳过该步骤\n if (this._chart) {\n return true;\n }\n\n const { transformSpec, actionSource } = option;\n if (transformSpec) {\n // 初始化图表 spec\n this._initChartSpec(this._spec, 'render');\n }\n\n // 插件生命周期\n this._chartPluginApply('onBeforeInitChart', this._spec, actionSource);\n\n // 实例化图表\n this._option.performanceHook?.beforeInitializeChart?.();\n this._initChart(this._spec);\n this._option.performanceHook?.afterInitializeChart?.();\n // 如果实例化失败,终止渲染\n if (!this._chart || !this._compiler) {\n return false;\n }\n\n // compile\n this._option.performanceHook?.beforeCompileToVGrammar?.();\n this._compiler.compile({ chart: this._chart, vChart: this }, { performanceHook: this._option.performanceHook });\n this._option.performanceHook?.afterCompileToVGrammar?.();\n return true;\n }\n\n /** 渲染之后的步骤 */\n protected _afterRender(): boolean {\n if (this._isReleased) {\n return false;\n }\n this._updateAnimateState();\n this._event.emit(ChartEvent.rendered, {});\n return true;\n }\n\n /**\n * **同步方法** 渲染图表。\n * @param morphConfig 图表 morph 动画配置,可选\n * @returns VChart 实例\n */\n renderSync(morphConfig?: IMorphConfig) {\n return this._renderSync({\n morphConfig,\n transformSpec: true,\n actionSource: 'render'\n });\n }\n\n /**\n * **异步方法** 渲染图表。\n * @param morphConfig 图表 morph 动画配置,可选\n * @returns VChart 实例\n */\n async renderAsync(morphConfig?: IMorphConfig) {\n return this._renderAsync({\n morphConfig,\n transformSpec: true,\n actionSource: 'render'\n });\n }\n\n protected _renderSync(option: IVChartRenderOption = {}) {\n const self = this as unknown as IVChart;\n if (!this._beforeRender(option)) {\n return self;\n }\n // 填充数据绘图\n this._compiler?.renderSync(option.morphConfig);\n this._afterRender();\n return self;\n }\n\n protected async _renderAsync(option: IVChartRenderOption = {}) {\n const self = this as unknown as IVChart;\n if (!this._beforeRender(option)) {\n return self;\n }\n // 填充数据绘图\n await this._compiler?.renderAsync(option.morphConfig);\n this._afterRender();\n return self;\n }\n\n private _updateAnimateState() {\n if (this._option.animation) {\n this._chart?.getAllRegions().forEach(region => {\n region.animate?.updateAnimateState(AnimationStateEnum.update, true);\n });\n this._chart?.getAllComponents().forEach(component => {\n component.animate?.updateAnimateState(AnimationStateEnum.update, true);\n });\n }\n }\n\n /**\n * 销毁图表\n */\n release() {\n if ((this._onResize as any)?.cancel) {\n (this._onResize as any).cancel();\n }\n this._chartPluginApply('disposeAll');\n this._chartSpecTransformer = null;\n this._chart?.release();\n this._compiler?.release();\n this._eventDispatcher?.release();\n this._unBindResizeEvent();\n // resetID(); // 为什么要重置ID呢?\n\n this._releaseData();\n\n this._chart = null;\n this._compiler = null;\n this._spec = null;\n this._originalSpec = null;\n // this._option = null;\n this._userEvents = null;\n this._event = null;\n this._eventDispatcher = null;\n this._isReleased = true;\n\n InstanceManager.unregisterInstance(this);\n }\n\n /**\n * **异步方法** 更新数据。\n * @param id 数据 id\n * @param data 数据值\n * @param options 数据参数\n * @returns VChart 实例\n */\n async updateData(id: StringOrNumber, data: DataView | Datum[] | string, options?: IParserOptions): Promise {\n if (isNil(this._dataSet)) {\n return this as unknown as IVChart;\n }\n if (this._chart) {\n this._chart.updateData(id, data, true, options);\n\n // after layout\n await this._compiler.renderAsync();\n return this as unknown as IVChart;\n }\n this._spec.data = array(this._spec.data);\n const preDV = this._spec.data.find((dv: any) => dv.name === id || dv.id === id);\n if (preDV) {\n if (preDV.id === id) {\n preDV.values = data;\n } else if (preDV.name === id) {\n preDV.parse(data, options);\n }\n } else {\n if (isArray(data)) {\n this._spec.data.push({\n id,\n values: data\n });\n } else {\n this._spec.data.push(data);\n }\n }\n return this as unknown as IVChart;\n }\n\n /**\n * **异步方法** 批量更新数据。\n * @param list 待更新的数据列表\n * @returns VChart 实例\n */\n async updateDataInBatches(list: { id: string; data: Datum[]; options?: IParserOptions }[]): Promise {\n if (this._chart) {\n this._chart.updateFullData(\n list.map(({ id, data, options }) => {\n return { id, values: data, parser: options };\n })\n );\n this._chart.updateGlobalScaleDomain();\n await this._compiler.renderAsync();\n return this as unknown as IVChart;\n }\n list.forEach(({ id, data, options }) => {\n const preDV = (this._spec.data as DataView[]).find(dv => dv.name === id);\n if (preDV) {\n preDV.parse(data, options);\n } else {\n const dataView = new DataView(this._dataSet, { name: id });\n dataView.parse(data, options);\n this._spec.data.push(dataView);\n }\n });\n return this as unknown as IVChart;\n }\n\n /**\n * **同步方法** 更新数据\n * @param id 数据 id\n * @param data 数据值\n * @param options 数据参数\n * @returns VChart 实例\n */\n updateDataSync(id: StringOrNumber, data: DataView | Datum[], options?: IParserOptions) {\n if (isNil(this._dataSet)) {\n return this as unknown as IVChart;\n }\n if (this._chart) {\n this._chart.updateData(id, data, true, options);\n // after layout\n this._compiler.renderSync();\n return this as unknown as IVChart;\n }\n const preDV = (this._spec.data as DataView[]).find(dv => dv.name === id);\n if (preDV) {\n preDV.parse(data, options);\n } else {\n const dataView = new DataView(this._dataSet, { name: id as string });\n dataView.parse(data, options);\n this._spec.data.push(dataView);\n }\n return this as unknown as IVChart;\n }\n\n /**\n * **同步方法** 更新数据\n * @param data 图表配置结构中的数据对象\n * @returns VChart 实例\n * @since 1.3.0\n */\n updateFullDataSync(data: IDataValues | IDataValues[], reRender: boolean = true) {\n if (this._chart) {\n this._chart.updateFullData(data);\n if (reRender) {\n this._compiler.renderSync();\n }\n return this as unknown as IVChart;\n }\n const list: IDataValues[] = array(data);\n list.forEach(d => {\n // only support update this attrs\n const { id, values, parser, fields } = d;\n const preDV = (this._spec.data as DataView[]).find(dv => dv.name === id);\n if (preDV) {\n preDV.setFields(cloneDeep(fields) as IFields);\n preDV.parse(values, cloneDeep(parser) as IParserOptions);\n } else {\n // new data\n const dataView = dataToDataView(d, this._dataSet, this._spec.data, {\n onError: this._option?.onError\n });\n this._spec.data.push(dataView);\n }\n });\n return this as unknown as IVChart;\n }\n\n /**\n * **异步方法** 更新数据\n * @param data 图表配置结构中的数据对象\n * @returns VChart 实例\n * @since 1.3.0\n */\n async updateFullData(data: IDataValues | IDataValues[], reRender: boolean = true) {\n if (this._chart) {\n this._chart.updateFullData(data);\n if (reRender) {\n await this._compiler.renderAsync();\n }\n return this as unknown as IVChart;\n }\n const list: IDataValues[] = array(data);\n list.forEach(d => {\n // only support update this attrs\n const { id, values, parser, fields } = d;\n const preDV = (this._spec.data as DataView[]).find(dv => dv.name === id);\n if (preDV) {\n preDV.setFields(cloneDeep(fields) as IFields);\n preDV.parse(values, cloneDeep(parser) as IParserOptions);\n } else {\n // new data\n const dataView = dataToDataView(d, this._dataSet, this._spec.data, {\n onError: this._option?.onError\n });\n this._spec.data.push(dataView);\n }\n });\n return this as unknown as IVChart;\n }\n\n /**\n * **异步方法** spec 更新\n * @param spec\n * @param forceMerge\n * @returns\n */\n async updateSpec(spec: ISpec, forceMerge: boolean = false, morphConfig?: IMorphConfig) {\n const result = this._updateSpec(spec, forceMerge);\n await this.updateCustomConfigAndRerender(result, false, {\n morphConfig,\n transformSpec: true,\n actionSource: 'updateSpec'\n });\n return this as unknown as IVChart;\n }\n\n /**\n * **同步方法** spec 更新\n * @param spec\n * @param forceMerge\n * @returns\n */\n updateSpecSync(spec: ISpec, forceMerge: boolean = false, morphConfig?: IMorphConfig) {\n const result = this._updateSpec(spec, forceMerge);\n this.updateCustomConfigAndRerender(result, true, {\n morphConfig,\n transformSpec: true,\n actionSource: 'updateSpec'\n });\n return this as unknown as IVChart;\n }\n\n /** 更新 spec 并重新编译(不渲染),返回是否成功 */\n updateSpecAndRecompile(spec: ISpec, forceMerge: boolean = false, option: IVChartRenderOption = {}) {\n const result = this._updateSpec(spec, forceMerge);\n return this._updateCustomConfigAndRecompile(result, {\n actionSource: 'updateSpecAndRecompile',\n ...option\n });\n }\n\n private _updateSpec(spec: ISpec, forceMerge: boolean = false): IUpdateSpecResult | undefined {\n const lastSpec = this._spec;\n if (!this._setNewSpec(spec, forceMerge)) {\n return undefined;\n }\n\n if (!isEqual(lastSpec.theme, this._spec.theme)) {\n this._setCurrentTheme();\n }\n\n const reSize = this._shouldChartResize(lastSpec);\n this._compiler?.getVGrammarView()?.updateLayoutTag();\n\n return mergeUpdateResult(this._chart.updateSpec(this._spec), {\n change: reSize,\n reMake: false,\n reCompile: false,\n reSize\n });\n }\n\n /**\n * **异步方法** spec 更新\n * @param filter\n * @param spec\n * @param forceMerge\n * @returns\n * @sync 1.4.0\n */\n async updateModelSpec(\n filter: string | { type: string; index: number } | ((model: IModel) => boolean),\n spec: unknown,\n forceMerge: boolean = false,\n morphConfig?: IMorphConfig\n ) {\n if (!spec || !this._spec) {\n return this as unknown as IVChart;\n }\n if (isString(spec)) {\n spec = JSON.parse(spec);\n }\n\n if (!isFunction(filter)) {\n // find spec and update\n mergeSpecWithFilter(this._spec, filter, spec, forceMerge);\n }\n\n if (this._chart) {\n const model = this._chart.getModelInFilter(filter);\n if (model) {\n return this._updateModelSpec(model, spec, false, forceMerge, morphConfig);\n }\n }\n return this as unknown as IVChart;\n }\n\n /**\n * **同步方法** spec 更新\n * @param filter\n * @param spec\n * @param forceMerge\n * @returns\n * @sync 1.4.0\n */\n updateModelSpecSync(\n filter: string | { type: string; index: number } | ((model: IModel) => boolean),\n spec: unknown,\n forceMerge: boolean = false,\n morphConfig?: IMorphConfig\n ) {\n if (!spec || !this._spec) {\n return this as unknown as IVChart;\n }\n if (isString(spec)) {\n spec = JSON.parse(spec);\n }\n\n if (!isFunction(filter)) {\n // find spec and update\n mergeSpecWithFilter(this._spec, filter, spec, forceMerge);\n }\n\n if (this._chart) {\n const model = this._chart.getModelInFilter(filter);\n if (model) {\n return this._updateModelSpec(model, spec, true, forceMerge, morphConfig) as IVChart;\n }\n }\n return this as unknown as IVChart;\n }\n\n /**\n * **同步方法** 模块 spec 更新\n * @param model\n * @param spec\n * @param forceMerge\n * @returns\n */\n protected _updateModelSpec(\n model: IModel,\n spec: unknown,\n sync: boolean = false,\n forceMerge: boolean = false,\n morphConfig?: IMorphConfig\n ) {\n if (forceMerge) {\n spec = mergeSpec({}, model.getSpec(), spec);\n }\n\n const result = model.updateSpec(spec);\n model.reInit(spec);\n if (result.change || result.reCompile || result.reMake || result.reSize || result.reRender) {\n this._chart.reDataFlow();\n }\n\n return this.updateCustomConfigAndRerender(result, sync, {\n morphConfig,\n transformSpec: false,\n actionSource: 'updateModelSpec'\n });\n }\n\n /**\n * **异步方法**,图表尺寸更新方法\n * @param width 宽度\n * @param height 高度\n * @returns VChart 当前实例\n */\n async resize(width: number, height: number) {\n if (!this._chart || !this._compiler) {\n return this as unknown as IVChart;\n }\n // 如果宽高未变化,不需要重新执行 resize,防止当图表初始化时会执行一次多余的 resize\n const chartCanvasRect = this._chart.getCanvasRect();\n if (chartCanvasRect && chartCanvasRect.width === width && chartCanvasRect.height === height) {\n return this as unknown as IVChart;\n }\n\n // 插件生命周期\n this._chartPluginApply('onBeforeResize', width, height);\n\n this._option.performanceHook?.beforeResizeWithUpdate?.();\n this._chart.onResize(width, height, false);\n this._option.performanceHook?.afterResizeWithUpdate?.();\n\n await this._compiler.resize?.(width, height);\n\n if (this._isReleased) {\n return this as unknown as IVChart;\n }\n // emit resize event\n this._event.emit(ChartEvent.afterResize, { chart: this._chart });\n return this as unknown as IVChart;\n }\n\n /**\n * 更新绘制区域\n * @param viewBox 绘制区域\n * @param reRender 是否重新渲染,默认为 true\n * @param reLayout 是否重新布局,默认为 true\n * @returns\n */\n updateViewBox(viewBox: IBoundsLike, reRender: boolean = true, reLayout: boolean = true) {\n if (!this._chart || !this._compiler) {\n return this as unknown as IVChart;\n }\n this._viewBox = viewBox;\n // 更新 layout 参数\n this._chart.updateViewBox(viewBox, reLayout);\n if (reLayout) {\n // 重新布局\n this._compiler.renderSync();\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this._chart.onEvaluateEnd();\n }\n // 获取 compiler\n this._compiler.updateViewBox(viewBox, reRender);\n return this as unknown as IVChart;\n }\n\n // 事件相关方法\n on(eType: EventType, handler: EventCallback): void;\n on(eType: EventType, query: EventQuery, handler: EventCallback): void;\n on(eType: EventType, query: EventQuery | EventCallback, handler?: EventCallback): void {\n if (!this._userEvents) {\n // userEvents正常情况下有默认值,如果!userEvents,说明此时chart被release了,就可以终止流程\n return;\n }\n this._userEvents.push({\n eType,\n query: typeof query === 'function' ? null : query,\n handler: typeof query === 'function' ? query : handler\n });\n this._event?.on(eType as any, query as any, handler as any);\n }\n off(eType: string, handler?: EventCallback): void {\n if (!this._userEvents || this._userEvents.length === 0) {\n return;\n }\n if (handler) {\n const index = this._userEvents.findIndex(e => e.eType === eType && e.handler === handler);\n if (index >= 0) {\n this._userEvents.splice(index, 1);\n this._event?.off(eType, handler);\n }\n } else {\n this._userEvents.forEach(e => {\n if (e.eType === eType) {\n this._event?.off(eType, e.handler);\n }\n });\n this._userEvents = this._userEvents.filter(e => e.eType !== eType);\n }\n }\n\n // 状态相关方法\n /**\n * 更新或设置图元状态\n * @param state 状态筛选器\n * @param filter 筛选器\n */\n updateState(\n state: Record, 'style'>>,\n filter?: (series: ISeries, mark: IMark, stateKey: string) => boolean //series + mark 筛选\n ): void {\n if (!this._chart) {\n return;\n }\n this._chart.updateState(state, filter);\n }\n\n /**\n * 更新图元选中状态\n * @param datum hover 图元数据\n * @param filter 筛选器 用来筛选系列与mark\n * @param region region 筛选器\n */\n setSelected(\n datum: MaybeArray | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ): void {\n if (!this._chart) {\n return;\n }\n this._chart.setSelected(datum, filter, region);\n }\n\n /**\n * 更新图元 hover 状态\n * @param datum hover 图元数据\n * @param filter 筛选器 用来筛选系列与mark\n * @param region region 筛选器\n */\n setHovered(\n datum: MaybeArray | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ): void {\n if (!this._chart) {\n return;\n }\n this._chart.setHovered(datum, filter, region);\n }\n\n // 主题相关方法\n /**\n * 当 spec 或者 currentThemeName 有变化时需要调用此方法对 currentTheme 进行更新\n * @param nextThemeName 通过 setCurrentTheme 方法新设的主题\n */\n private _updateCurrentTheme(nextThemeName?: string) {\n const optionTheme: Maybe = this._option.theme;\n const specTheme: Maybe = this._spec?.theme;\n\n if (nextThemeName) {\n this._currentThemeName = nextThemeName;\n }\n\n // 处理 specTheme 和 optionTheme, merge -> transform\n // 优先级 currentTheme < optionTheme < specTheme\n if (!isEmpty(optionTheme) || !isEmpty(specTheme)) {\n if (\n (isString(optionTheme) && (!specTheme || isString(specTheme))) ||\n (isString(specTheme) && (!optionTheme || isString(optionTheme)))\n ) {\n const finalTheme = mergeTheme(\n {},\n getThemeObject(this._currentThemeName, true),\n getThemeObject(optionTheme, true),\n getThemeObject(specTheme, true)\n );\n this._currentTheme = finalTheme;\n } else {\n const finalTheme = mergeTheme(\n {},\n getThemeObject(this._currentThemeName),\n getThemeObject(optionTheme),\n getThemeObject(specTheme)\n );\n this._currentTheme = preprocessTheme(finalTheme, finalTheme.colorScheme);\n }\n } else {\n this._currentTheme = getThemeObject(this._currentThemeName, true);\n }\n\n // 设置 poptip 的主题\n setPoptipTheme(get(this._currentTheme, 'component.poptip'));\n // 设置背景色\n this._compiler?.setBackground(this._getBackground());\n }\n\n private _shouldChartResize(oldSpec: ISpec): boolean {\n let resize = false;\n\n if (isNil(this._spec.width)) {\n this._spec.width = oldSpec.width;\n } else if (this._spec.width !== oldSpec.width) {\n resize = true;\n }\n\n if (isNil(this._spec.height)) {\n this._spec.height = oldSpec.height;\n } else if (this._spec.height !== oldSpec.height) {\n resize = true;\n }\n\n const lasAutoSize = this._autoSize;\n this._autoSize = isTrueBrowser(this._option.mode) ? this._spec.autoFit ?? this._option.autoFit ?? true : false;\n if (this._autoSize !== lasAutoSize) {\n resize = true;\n }\n return resize;\n }\n\n private _getBackground() {\n const specBackground = typeof this._spec.background === 'string' ? this._spec.background : null;\n // spec > spec.theme > initOptions.theme\n return specBackground || (this._currentTheme.background as string) || this._option.background;\n }\n\n /**\n * 获取当前主题,会返回完整的主题配置(只能获取用户通过`setCurrentTheme`方法设置过的主题,默认值为`ThemeManager`统一设置的主题)\n * */\n getCurrentTheme() {\n return getThemeObject(this._currentThemeName);\n }\n\n /**\n * 获取当前主题名称(只能获取用户通过`setCurrentTheme`方法设置过的主题,默认值为`ThemeManager`统一设置的主题)\n */\n getCurrentThemeName() {\n return this._currentThemeName;\n }\n\n /**\n * **异步方法**, 设置当前主题。\n * **注意,如果在 spec 上配置了 theme,则 spec 上的 theme 优先级更高。**\n * @param name 主题名称\n * @returns\n */\n async setCurrentTheme(name: string) {\n if (!ThemeManager.themeExist(name)) {\n return this as unknown as IVChart;\n }\n const result = this._setCurrentTheme(name);\n await this.updateCustomConfigAndRerender(result, false, {\n transformSpec: false,\n actionSource: 'setCurrentTheme'\n });\n return this as unknown as IVChart;\n }\n\n /**\n * **同步方法** 设置当前主题。\n * **注意,如果在 spec 上配置了 theme,则 spec 上的 theme 优先级更高。**\n * @param name 主题名称\n * @returns\n */\n setCurrentThemeSync(name: string) {\n if (!ThemeManager.themeExist(name)) {\n return this as unknown as IVChart;\n }\n const result = this._setCurrentTheme(name);\n this.updateCustomConfigAndRerender(result, true, {\n transformSpec: false,\n actionSource: 'setCurrentTheme'\n });\n return this as unknown as IVChart;\n }\n\n protected _setCurrentTheme(name?: string): IUpdateSpecResult {\n this._updateCurrentTheme(name);\n this._initChartSpec(this._getSpecFromOriginalSpec(), 'setCurrentTheme');\n this._chart?.setCurrentTheme();\n return { change: true, reMake: false };\n }\n\n // Tooltip 相关方法\n private _getTooltipComponent(): Tooltip | undefined {\n const tooltip = this._chart?.getAllComponents().find(c => c.type === ComponentTypeEnum.tooltip) as Tooltip;\n return tooltip;\n }\n\n /**\n * 自定义 TooltipHandler\n * @param tooltipHandler\n */\n setTooltipHandler(tooltipHandler: ITooltipHandler) {\n this._context.tooltipHandler = tooltipHandler;\n const tooltip = this._getTooltipComponent();\n if (tooltip) {\n tooltip.tooltipHandler?.release?.();\n tooltip.tooltipHandler = tooltipHandler;\n }\n }\n\n /**\n * 获取用户定义的 TooltipHandler\n * @returns ITooltipHandler\n */\n getTooltipHandlerByUser(): ITooltipHandler | undefined {\n return this._context?.tooltipHandler;\n }\n\n /**\n * 获取 TooltipHandler\n * @returns\n */\n getTooltipHandler(): ITooltipHandler | undefined {\n const tooltip = this._getTooltipComponent();\n if (tooltip) {\n return tooltip.tooltipHandler;\n }\n return this._context.tooltipHandler;\n }\n\n /**\n * 手动调用展示 tooltip\n * @param datum 原始数据\n * @param options\n * @returns\n */\n showTooltip(datum: Datum, options: IShowTooltipOption): boolean {\n const tooltip = this._getTooltipComponent();\n return (isValid(datum) && tooltip?.showTooltip(datum, options) !== 'none') ?? false;\n }\n\n /**\n * 手动调用,关闭 tooltip\n * @returns\n */\n hideTooltip(): boolean {\n const tooltip = this._getTooltipComponent();\n return tooltip?.hideTooltip() ?? false;\n }\n\n // 图例相关 api\n /**\n * 根据图例组件 id 获取图例数据\n * @param id 组件 id\n * @returns\n */\n getLegendDataById(id: string) {\n const legendComponent = this._chart?.getComponentByUserId(id) as ILegend;\n if (legendComponent) {\n return legendComponent.getLegendData();\n }\n return [];\n }\n\n /**\n * 根据图例组件索引获取图例数据\n * @param index 图例索引,默认为 0\n * @returns\n */\n getLegendDataByIndex(index: number = 0) {\n const legends = this._chart\n ?.getAllComponents()\n .filter(c => c.type === ComponentTypeEnum.discreteLegend) as ILegend[];\n\n if (legends[index]) {\n return legends[index].getLegendData();\n }\n\n return [];\n }\n\n /**\n * 根据图例组件 id 获取当前图例的选中项\n * @param id 组件 id\n * @returns\n */\n getLegendSelectedDataById(id: string) {\n const legendComponent = this._chart?.getComponentByUserId(id) as ILegend;\n if (legendComponent) {\n return legendComponent.getSelectedData();\n }\n return [];\n }\n\n /**\n * 根据图例组件索引获取当前图例的选中项\n * @param index 图例索引,默认为 0\n * @returns\n */\n getLegendSelectedDataByIndex(index: number = 0) {\n const legends = this._chart\n ?.getAllComponents()\n .filter(c => c.type === ComponentTypeEnum.discreteLegend) as ILegend[];\n\n if (legends[index]) {\n return legends[index].getSelectedData();\n }\n\n return [];\n }\n\n /**\n * 根据图例组件 id 更新图例选中数据\n * @param id\n * @returns\n */\n setLegendSelectedDataById(id: string, selectedData: StringOrNumber[]) {\n const legendComponent = this._chart?.getComponentByUserId(id) as ILegend;\n if (legendComponent) {\n legendComponent.setSelectedData(selectedData);\n }\n }\n\n /**\n * 根据图例组件索引更新图例选中数据\n * @param index 图例索引,默认为 0\n * @returns\n */\n setLegendSelectedDataByIndex(index: number = 0, selectedData: StringOrNumber[]) {\n const legends = this._chart\n ?.getAllComponents()\n .filter(c => c.type === ComponentTypeEnum.discreteLegend) as ILegend[];\n\n if (legends[index]) {\n legends[index].setSelectedData(selectedData);\n }\n }\n\n // 保存图片相关的方法\n /**\n * **异步方法**返回一个包含图片展示的 data URI。\n * @returns data URI\n */\n async getDataURL() {\n const stage = this.getStage();\n if (this._chart && stage) {\n // 因为 vrender 是 autoRender 的,它不能确认第几帧才是完整的图表,所以这里调用一次 render 以保证获取到的是完整的画布\n stage.render();\n const canvas = this._chart.getCanvas();\n const url = await getCanvasDataURL(canvas, {\n onError: this._onError\n });\n return url;\n }\n this._option?.onError(new ReferenceError(`render is not defined`));\n\n return null;\n }\n\n /**\n * **异步方法** 导出图表图片,只支持浏览器端。\n * @param name 保存的图片名称\n * @returns\n */\n async exportImg(name?: string) {\n if (!isTrueBrowser(this._option.mode)) {\n this._option?.onError(new TypeError(`non-browser environment can not export img`));\n return;\n }\n\n const dataURL = await this.getDataURL();\n if (dataURL) {\n URLToImage(name, dataURL);\n } else {\n this._option?.onError(new ReferenceError(`render is not defined`));\n }\n }\n /**\n * 导出绘制了图表内容的 canvas\n * @returns HTMLCanvasElement\n */\n exportCanvas(): HTMLCanvasElement | undefined {\n const stage = this.getStage();\n if (this._chart && stage) {\n return stage.toCanvas();\n }\n this._option?.onError(new ReferenceError(`render is not defined`));\n return undefined;\n }\n\n /**\n * 目前仅支持 node 环境,用于 node 端的图片导出\n * @returns\n */\n getImageBuffer() {\n if (this._option.mode !== 'node') {\n this._option?.onError(new TypeError('getImageBuffer() now only support node environment.'));\n return;\n }\n const stage = this.getStage();\n if (stage) {\n stage.render();\n const buffer = stage.window.getImageBuffer();\n return buffer;\n }\n this._option?.onError(new ReferenceError(`render is not defined`));\n\n return null;\n }\n\n // 布局相关的方法\n /**\n * 设置自定义布局\n */\n setLayout(layout: LayoutCallBack) {\n this._option.layout = layout;\n this._chart?.setLayout(layout);\n }\n /**\n * 强制重新布局\n */\n reLayout() {\n this._chart?.setLayoutTag(true);\n }\n\n /**\n * 获取编译器实例\n * @returns\n */\n getCompiler() {\n return this._compiler;\n }\n\n /**\n * Get the chart instance\n * 获取 Chart 图表实例。\n * @returns Chart 实例\n */\n getChart() {\n return this._chart;\n }\n\n /**\n * Get the renderer instance.\n * 获取渲染引擎实例。\n * @returns the instance of VRender Stage\n */\n getStage(): Stage {\n return this._compiler.getStage();\n }\n\n /**\n * 获取 canvas dom\n * @returns HTMLCanvasElement | undefined\n */\n getCanvas(): HTMLCanvasElement | undefined {\n return this._compiler?.getCanvas();\n }\n\n /**\n * 获取图表的 dom 容器\n * @returns\n */\n getContainer(): Maybe {\n // 用户传入 dom container\n if (isValid(this._container)) {\n return this._container;\n }\n\n // 用户传入 canvas\n let canvasNode: Maybe;\n if (isString(this._canvas)) {\n canvasNode = document?.getElementById(this._canvas) as HTMLCanvasElement;\n } else {\n canvasNode = this._canvas as HTMLCanvasElement;\n }\n if (isValid(canvasNode)) {\n return canvasNode.parentElement;\n }\n\n // 用户传入 stage\n return this.getCanvas()?.parentElement;\n }\n\n /**\n * 获取图表所有的组件实例\n * @returns 组件实例\n */\n getComponents() {\n return this._chart.getAllComponents();\n }\n\n /**\n * setDimensionIndex could trigger mark state, tooltip, crosshair\n * @param value dimension value\n * @param opt option for set trigger\n */\n setDimensionIndex(value: StringOrNumber, opt: DimensionIndexOption = {}) {\n return this._chart?.setDimensionIndex(value, opt);\n }\n\n /** 停止正在进行的所有动画 */\n stopAnimation() {\n this._compiler?.getVGrammarView()?.animate?.stop();\n }\n\n /** 暂停正在进行的所有动画 */\n pauseAnimation() {\n this._compiler?.getVGrammarView()?.animate?.pause();\n }\n\n /** 恢复暂停时正在进行的所有动画 */\n resumeAnimation() {\n this._compiler?.getVGrammarView()?.animate?.resume();\n }\n\n // TODO: 后续需要考虑滚动场景\n /**\n * Convert the data corresponding to the graph into coordinates\n * 将图形对应的数据转换为坐标,该数据需要从传入图表的数据集中获取,如果数据不存在数据集中,可以使用 `convertValueToPosition` 方法\n * @param datum 要转化的数据 the datum(from data source)to convert\n * @param dataLinkInfo 数据的绑定信息,the data link info, could be seriesId or seriesIndex, default is { seriesIndex: 0 }\n * @param isRelativeToCanvas 是否相对画布坐标 Whether relative to canvas coordinates\n * @returns\n */\n convertDatumToPosition(\n datum: Datum,\n dataLinkInfo: DataLinkSeries = {},\n isRelativeToCanvas: boolean = false\n ): IPoint | null {\n if (!this._chart) {\n return null;\n }\n if (isEmpty(datum)) {\n return null;\n }\n const { seriesId, seriesIndex = 0 } = dataLinkInfo;\n\n let series: ISeries;\n if (isValid(seriesId)) {\n series = this._chart.getSeriesInUserId(seriesId);\n } else if (isValid(seriesIndex)) {\n series = this._chart.getSeriesInIndex([seriesIndex])?.[0];\n }\n\n if (series) {\n const keys = Object.keys(datum);\n const handledDatum = series\n .getViewData()\n // eslint-disable-next-line eqeqeq\n .latestData.find((viewDatum: Datum) => keys.every(k => viewDatum[k] == datum[k]));\n const seriesLayoutStartPoint = series.getRegion().getLayoutStartPoint();\n let point: IPoint;\n if (handledDatum) {\n point = series.dataToPosition(handledDatum);\n } else {\n point = series.dataToPosition(datum);\n }\n return convertPoint(point, seriesLayoutStartPoint, isRelativeToCanvas);\n }\n\n return null;\n }\n\n // TODO: 1. 后续需要考虑滚动场景 2. 极坐标场景支持\n convertValueToPosition(\n value: StringOrNumber,\n dataLinkInfo: DataLinkAxis,\n isRelativeToCanvas?: boolean\n ): number | null;\n convertValueToPosition(\n value: [StringOrNumber, StringOrNumber],\n dataLinkInfo: DataLinkSeries,\n isRelativeToCanvas?: boolean\n ): IPoint | null;\n convertValueToPosition(\n value: StringOrNumber | [StringOrNumber, StringOrNumber],\n dataLinkInfo: DataLinkAxis | DataLinkSeries,\n isRelativeToCanvas: boolean = false\n ): number | IPoint | null {\n if (!this._chart || isNil(value) || isEmpty(dataLinkInfo)) {\n return null;\n }\n\n if (!isArray(value)) {\n // 如果单个值,则默认使用 axis 绑定信息\n const { axisId, axisIndex } = dataLinkInfo as DataLinkAxis;\n let axis;\n if (isValid(axisId)) {\n axis = this._chart.getComponentsByKey('axes').find(s => s.userId === axisId);\n } else if (isValid(axisIndex)) {\n axis = this._chart.getComponentsByKey('axes')?.[axisIndex];\n }\n if (!axis) {\n warn('Please check whether the `axisId` or `axisIndex` is set!');\n return null;\n }\n\n const pointValue = (axis as IAxis)?.valueToPosition(value);\n if (isRelativeToCanvas) {\n const axisLayoutStartPoint = axis.getLayoutStartPoint();\n const axisOrient = (axis as IAxis).getOrient();\n return (\n pointValue +\n (axisOrient === 'bottom' || axisOrient === 'top' ? axisLayoutStartPoint.x : axisLayoutStartPoint.y)\n );\n }\n\n return pointValue;\n }\n const { seriesId, seriesIndex } = dataLinkInfo as DataLinkSeries;\n let series;\n if (isValid(seriesId)) {\n series = this._chart.getSeriesInUserId(seriesId);\n } else if (isValid(seriesIndex)) {\n series = this._chart.getSeriesInIndex([seriesIndex])?.[0];\n }\n\n if (!series) {\n warn('Please check whether the `seriesId` or `seriesIndex` is set!');\n return null;\n }\n\n return convertPoint(\n (series as ISeries).valueToPosition(value[0], value[1]),\n series.getRegion().getLayoutStartPoint(),\n isRelativeToCanvas\n );\n }\n\n /**\n * 获取实例函数\n * @param key 函数名称\n * @returns\n */\n getFunction(key: string): Function | null {\n return ExpressionFunction.instance().getFunction(key);\n }\n\n /**\n * 注册实例函数(对内包装一层,区分名字,避免重名问题)\n * @param key 函数名称\n * @param fun 函数内容\n * @returns\n */\n registerFunction(key: string, fun: Function) {\n if (!key || !fun) {\n return;\n }\n ExpressionFunction.instance().registerFunction(key, fun);\n }\n\n /**\n * 注销实例函数\n * @param key 函数名称\n */\n unregisterFunction(key: string) {\n if (!key) {\n return;\n }\n ExpressionFunction.instance().unregisterFunction(key);\n }\n\n /**\n * 获取实例函数列表\n * @returns\n */\n getFunctionList() {\n return ExpressionFunction.instance().getFunctionNameList();\n }\n\n /** 设置运行时 spec */\n setRuntimeSpec(spec: any) {\n this._spec = spec;\n this._updateSpecInfo();\n }\n\n private _initChartPlugin() {\n const pluginList = Factory.getChartPlugins();\n if (pluginList.length > 0) {\n this._chartPlugin = new ChartPluginService(this);\n this._chartPlugin.load(pluginList.map(p => new p()));\n // 插件生命周期\n this._chartPluginApply('onInit', this._spec);\n }\n }\n\n private _chartPluginApply(funcName: keyof IChartPluginService, ...args: any[]) {\n if (!this._chartPlugin || !this._chartPlugin[funcName]) {\n return;\n }\n (this._chartPlugin[funcName] as (...args: any[]) => any).apply(this._chartPlugin, args);\n }\n}\n\nexport const registerVChartCore = () => {\n // install region module\n Factory.registerRegion('region', Region);\n // install layout module\n Factory.registerLayout('base', Layout);\n // install essential marks\n registerGroupMark();\n // install essential vgrammar transform\n View.useRegisters([registerFilterTransform, registerMapTransform]);\n // install animation\n registerVGrammarCommonAnimation();\n // install default theme\n registerTheme(darkTheme.name, darkTheme);\n // set default logger level to Level.error\n Logger.getInstance(LoggerLevel.Error);\n};\n\nregisterVChartCore();\n","import { container } from '@visactor/vrender-core';\nimport { merge } from '@visactor/vutils';\nimport type { PopTipAttributes } from './type';\nimport { DEFAULT_THEME, theme } from './theme';\nimport { registerGroup, registerRect, registerSymbol, registerWrapText } from '@visactor/vrender-kits';\n\nexport function loadPoptipComponent() {\n registerGroup();\n registerWrapText();\n registerSymbol();\n registerRect();\n}\n\nexport function setPoptipTheme(defaultPoptipTheme: PopTipAttributes) {\n merge(theme.poptip, DEFAULT_THEME, defaultPoptipTheme);\n}\n","import type { DataView } from '@visactor/vdataset';\nimport type { StatisticOperations } from '../data/transforms/dimension-statistics';\nimport {\n STACK_FIELD_END,\n STACK_FIELD_START_PERCENT,\n STACK_FIELD_END_PERCENT,\n STACK_FIELD_END_OffsetSilhouette,\n STACK_FIELD_START_OffsetSilhouette,\n STACK_FIELD_TOTAL,\n STACK_FIELD_TOTAL_PERCENT,\n STACK_FIELD_TOTAL_TOP,\n STACK_FIELD_START\n} from '../constant';\nimport { toValidNumber } from './type';\nimport { max, sum } from './math';\nimport type { ISeries, ISeriesStackDataMeta } from '../series/interface';\n\nexport function mergeFields(\n targetFields: {\n key: string;\n operations: StatisticOperations;\n }[],\n mergeFields: {\n key: string;\n operations: StatisticOperations;\n }[]\n): {\n key: string;\n operations: StatisticOperations;\n}[] {\n for (let i = 0; i < mergeFields.length; i++) {\n const element = mergeFields[i];\n const _target = findFields(targetFields, element.key);\n if (!_target) {\n targetFields.push(element);\n } else {\n _target.operations = [...new Set(_target.operations.concat(element.operations))];\n }\n }\n return targetFields;\n}\n\nfunction findFields(\n list: {\n key: string;\n operations: StatisticOperations;\n }[],\n fieldKey: string\n) {\n return list.find(i => i.key === fieldKey);\n}\n\n// 如果不存在别名就返回 field\nexport function getFieldAlias(dataView: DataView, field: string) {\n if (!dataView) {\n return field ?? null;\n }\n const fields = dataView.getFields();\n if (!fields) {\n return field ?? null;\n }\n if (!fields[field]) {\n return field ?? null;\n }\n return fields[field].alias ?? field;\n}\n\nexport interface IStackCacheNode {\n values: any[];\n series: {\n s: ISeries;\n values: any[];\n }[];\n nodes: {\n [key: string]: IStackCacheNode;\n };\n}\nexport interface IStackCacheRoot {\n nodes: {\n [key: string]: IStackCacheNode;\n };\n}\n\nexport function getRegionStackGroup(\n region: { getSeries: () => any[] },\n setInitialValue: boolean,\n filter?: (s: any) => boolean\n) {\n const stackValueGroup: { [key: string]: IStackCacheRoot } = {};\n // 分组\n region.getSeries().forEach(s => {\n const stackData = s.getStackData();\n const stackValue = s.getStackValue();\n const stackValueField = s.getStackValueField();\n const filterEnable = filter ? filter(s) : true;\n if (stackData && stackValueField && filterEnable) {\n stackValueGroup[stackValue] = stackValueGroup[stackValue] ?? {\n nodes: {}\n };\n stackGroup(s, stackData, stackValueGroup[stackValue] as IStackCacheNode, stackValueField, setInitialValue);\n }\n });\n return stackValueGroup;\n}\n\nexport function stackTotal(stackData: IStackCacheNode, valueField: string) {\n if ('values' in stackData && stackData.values.length) {\n const total = sum(stackData.values, valueField);\n const percent = max(stackData.values, STACK_FIELD_END_PERCENT);\n stackData.values.forEach(v => {\n v[STACK_FIELD_TOTAL] = total;\n v[STACK_FIELD_TOTAL_PERCENT] = percent;\n delete v[STACK_FIELD_TOTAL_TOP];\n });\n const maxNode = stackData.values.reduce((max, current) => {\n return current[STACK_FIELD_END] > max[STACK_FIELD_END] ? current : max;\n });\n maxNode[STACK_FIELD_TOTAL_TOP] = true;\n return;\n }\n for (const key in stackData.nodes) {\n stackTotal(stackData.nodes[key], valueField);\n }\n}\n\nexport function stackOffsetSilhouette(stackCache: IStackCacheNode) {\n if (!stackCache.values.length) {\n return;\n }\n const centerValue = stackCache.values[stackCache.values.length - 1][STACK_FIELD_END] / 2;\n for (let j = 0; j < stackCache.values.length; j++) {\n stackCache.values[j][STACK_FIELD_START_OffsetSilhouette] = stackCache.values[j][STACK_FIELD_START] - centerValue;\n stackCache.values[j][STACK_FIELD_END_OffsetSilhouette] = stackCache.values[j][STACK_FIELD_END] - centerValue;\n }\n}\n\nexport function stack(stackCache: IStackCacheNode, stackInverse: boolean, hasPercent?: boolean) {\n if (stackCache.values.length > 0) {\n // 设置一个小数以保证 log 计算不会报错\n let positiveStart = 0;\n let negativeStart = 0;\n // temp\n let sign = 1;\n let value = 0;\n\n // stack\n const maxLength = stackCache.values.length;\n for (let index = 0; index < maxLength; index++) {\n const v = stackCache.values[stackInverse ? maxLength - 1 - index : index];\n value = v[STACK_FIELD_END];\n if (value >= 0) {\n v[STACK_FIELD_START] = positiveStart;\n positiveStart += v[STACK_FIELD_END];\n v[STACK_FIELD_END] = positiveStart;\n } else {\n v[STACK_FIELD_START] = negativeStart;\n negativeStart += v[STACK_FIELD_END];\n v[STACK_FIELD_END] = negativeStart;\n }\n }\n if (hasPercent) {\n // normalize\n for (let index = 0; index < maxLength; index++) {\n const v = stackCache.values[stackInverse ? maxLength - 1 - index : index];\n value = v[STACK_FIELD_END];\n const denominator = value >= 0 ? positiveStart : negativeStart;\n sign = value >= 0 ? 1 : -1;\n v[STACK_FIELD_START_PERCENT] = denominator === 0 ? 0 : Math.min(1, v[STACK_FIELD_START] / denominator) * sign;\n v[STACK_FIELD_END_PERCENT] = denominator === 0 ? 0 : Math.min(1, v[STACK_FIELD_END] / denominator) * sign;\n }\n }\n }\n\n for (const key in stackCache.nodes) {\n stack(stackCache.nodes[key], stackInverse, hasPercent);\n }\n}\n\nexport function stackGroup(\n s: ISeries,\n stackData: ISeriesStackDataMeta,\n stackCache: IStackCacheNode,\n valueField: string,\n setInitialValue: boolean\n) {\n if ('values' in stackData) {\n // 初值\n setInitialValue && stackData.values.forEach(v => (v[STACK_FIELD_END] = toValidNumber(v[valueField])));\n stackCache.values.push(...stackData.values);\n stackCache.series.push({ s: s, values: stackData.values });\n return;\n }\n for (const key in stackData.nodes) {\n !stackCache.nodes[key] &&\n (stackCache.nodes[key] = {\n values: [],\n series: [],\n nodes: {}\n });\n stackGroup(s, stackData.nodes[key], stackCache.nodes[key], valueField, setInitialValue);\n }\n}\n","import { transform as binTransform } from './data/bin';\nimport { transform as contourTransform } from './data/contour';\nimport { transform as sortTransform } from './data/sort';\nimport { transform as filterTransform } from './data/filter';\nimport { transform as mapTransform } from './data/map';\nimport { transform as kdeTransform } from './data/kde';\nimport { transform as joinTransform } from './data/join';\nimport { transform as pickTransform } from './data/pick';\nimport { transform as rangeTransform } from './data/range';\nimport { transform as stackTransform } from './data/stack';\nimport { transform as foldTransform } from './data/fold';\nimport { transform as unfoldTransform } from './data/unfold';\n\nimport { transform as funnelTransform } from './data/funnel';\nimport { transform as pieTransform } from './data/pie';\nimport { transform as circularRelationTransform } from './data/circular-relation';\n\nimport { transform as sampleTransform } from './data/sampling';\nimport { transform as markoverlapTransform } from './mark/mark-overlap';\n\nimport { transform as identifierTransform } from './view/identifier';\n\nimport { transform as dodgeTransform } from './mark/dodge';\nimport { transform as jitterTransform, jitterX as jitterXTransform, jitterY as jitterYTransform } from './mark/jitter';\nimport { symmetry as symmetryTransform } from './mark/symmetry';\nimport { Factory } from '../core/factory';\nimport type { ITransform } from '../types';\n\nexport const registerBinTransform = () => {\n Factory.registerTransform(\n 'bin',\n { transform: binTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerContourTransform = () => {\n Factory.registerTransform(\n 'contour',\n { transform: contourTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerSortTransform = () => {\n Factory.registerTransform(\n 'sort',\n { transform: sortTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerFilterTransform = () => {\n Factory.registerTransform(\n 'filter',\n { transform: filterTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerJoinTransform = () => {\n Factory.registerTransform(\n 'join',\n { transform: joinTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerKdeTransform = () => {\n Factory.registerTransform(\n 'kde',\n { transform: kdeTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerMapTransform = () => {\n Factory.registerTransform(\n 'map',\n { transform: mapTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerPickTransform = () => {\n Factory.registerTransform(\n 'pick',\n { transform: pickTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerRangeTransform = () => {\n Factory.registerTransform(\n 'range',\n { transform: rangeTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerStackTransform = () => {\n Factory.registerTransform(\n 'stack',\n { transform: stackTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerFunnelTransform = () => {\n Factory.registerTransform(\n 'funnel',\n { transform: funnelTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerPieTransform = () => {\n Factory.registerTransform(\n 'pie',\n { transform: pieTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerCircularRelationTransform = () => {\n Factory.registerTransform(\n 'circularRelation',\n { transform: circularRelationTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerFoldTransform = () => {\n Factory.registerTransform(\n 'fold',\n { transform: foldTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerUnfoldTransform = () => {\n Factory.registerTransform(\n 'unfold',\n { transform: unfoldTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerIdentifierTransform = () => {\n Factory.registerTransform(\n 'identifier',\n { transform: identifierTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerSampleTransform = () => {\n Factory.registerTransform(\n 'sampling',\n { transform: sampleTransform, markPhase: 'afterEncode' } as Omit,\n true\n );\n};\n\nexport const registerMarkOverlapTransform = () => {\n Factory.registerTransform(\n 'markoverlap',\n { transform: markoverlapTransform, markPhase: 'afterEncode' } as Omit,\n true\n );\n};\n\nexport const registerDodgeTransform = () => {\n Factory.registerTransform(\n 'dodge',\n { transform: dodgeTransform, markPhase: 'afterEncodeItems' } as Omit,\n true\n );\n};\n\nexport const registerJitterTransform = () => {\n Factory.registerTransform(\n 'jitter',\n { transform: jitterTransform, markPhase: 'afterEncodeItems' } as Omit,\n true\n );\n};\n\nexport const registerJitterXTransform = () => {\n Factory.registerTransform(\n 'jitterX',\n { transform: jitterXTransform, markPhase: 'afterEncodeItems' } as Omit,\n true\n );\n};\n\nexport const registerJitterYTransform = () => {\n Factory.registerTransform(\n 'jitterY',\n { transform: jitterYTransform, markPhase: 'afterEncodeItems' } as Omit,\n true\n );\n};\n\nexport const registerSymmetryTransform = () => {\n Factory.registerTransform(\n 'symmetry',\n { transform: symmetryTransform, markPhase: 'afterEncodeItems' } as Omit,\n true\n );\n};\n","export type AddVChartPropertyContext = {\n keyMap: Map;\n needDefaultSeriesField: boolean;\n defaultSeriesField?: string;\n getKey?: (d: any, i: number, context: AddVChartPropertyContext) => string;\n categoryField?: string;\n};\nexport interface IAddVChartPropertyOpt {\n beforeCall: () => AddVChartPropertyContext;\n call: (d: any, i: number, context: AddVChartPropertyContext) => void;\n}\n\nexport const addVChartProperty = (data: Array, op: IAddVChartPropertyOpt) => {\n const context = op.beforeCall();\n data.forEach((d, i) => op.call(d, i, context));\n\n if (context.keyMap) {\n context.keyMap.clear();\n context.keyMap = null;\n }\n\n return data;\n};\n","import { Event } from '../event/event';\nimport { getDefaultInteractionConfigByMode } from './config';\nimport { isBoolean, isObject, array } from '@visactor/vutils';\nimport { mergeSpec } from '../util/spec/merge-spec';\n\nimport type { IMark } from '../mark/interface';\nimport type { BaseEventParams, EventCallback, EventParams, IEvent } from '../event/interface';\nimport type { IHoverSpec, IInteraction, ISelectSpec, ITrigger, ITriggerOption, ITriggerSpec } from './interface';\nimport type { RenderMode } from '../typings/spec';\nimport { MarkSet } from '../mark/mark-set';\nimport { STATE_VALUE_ENUM } from '../compile/mark/interface';\nimport { Event_Bubble_Level, Event_Source_Type } from '../constant';\n\nexport class Trigger implements ITrigger {\n // 事件\n readonly event: IEvent;\n\n protected readonly interaction: IInteraction;\n\n protected _spec: ITriggerSpec;\n protected _option: ITriggerOption;\n\n protected _hover: IHoverSpec;\n get hover() {\n return this._hover;\n }\n protected _select: ISelectSpec;\n get select() {\n return this._select;\n }\n\n protected _fields: string[] | null = null;\n protected _marks: MarkSet = new MarkSet();\n protected _markReverse: MarkSet = new MarkSet();\n private _isHovered?: boolean;\n\n constructor(spec: ITriggerSpec, option: ITriggerOption) {\n this._spec = spec;\n this._option = option;\n this.event = new Event(option.eventDispatcher, option.mode);\n this.interaction = option.interaction;\n this.initConfig(option.mode);\n }\n\n setStateKeys(fields: string[]): void {\n this._fields = fields.slice();\n }\n\n registerMark(mark: IMark): void {\n this._marks.addMark(mark);\n if (this._hover.enable) {\n this.interaction.registerMark(STATE_VALUE_ENUM.STATE_HOVER, mark);\n }\n if (this._select.enable) {\n this.interaction.registerMark(STATE_VALUE_ENUM.STATE_SELECTED, mark);\n }\n }\n\n init(): void {\n this.initEvent();\n }\n\n release(): void {\n this.releaseEvent();\n this._marks.clear();\n }\n\n // event\n protected initEvent() {\n const event = this.event;\n const { enable: hoverEnable, trigger: hoverTrigger, triggerOff: hoverTriggerOff } = this._hover;\n const { enable: selectEnable, trigger: selectTrigger, triggerOff: selectTriggerOff } = this._select;\n if (hoverEnable) {\n // 进行 hover 交互相关的事件绑定\n array(hoverTrigger).forEach(trigger => {\n event.on(trigger, { level: Event_Bubble_Level.chart }, this.onHover as EventCallback);\n });\n if (hoverTriggerOff && hoverTriggerOff !== 'none') {\n array(hoverTriggerOff).forEach(trigger => {\n event.on(\n trigger,\n { level: Event_Bubble_Level.vchart, source: Event_Source_Type.chart },\n this.onUnHover as EventCallback\n );\n });\n }\n }\n\n if (selectEnable) {\n // 进行 select 交互相关的事件绑定\n array(selectTrigger).forEach(trigger => {\n event.on(trigger, { level: Event_Bubble_Level.mark }, this.onSelect as EventCallback);\n });\n if (selectTriggerOff && selectTriggerOff !== 'none') {\n array(selectTriggerOff).forEach(trigger => {\n event.on(trigger, { level: Event_Bubble_Level.mark }, this.onUnSelect as EventCallback);\n });\n }\n // default triggerOff: active without mark , unselected\n if (!selectTriggerOff) {\n array(selectTriggerOff ?? selectTrigger).forEach(trigger => {\n event.on(trigger, { level: Event_Bubble_Level.vchart }, this.onUnSelect as EventCallback);\n });\n }\n }\n }\n\n protected releaseEvent(): void {\n this.event.release();\n }\n\n private initConfig(mode: RenderMode): void {\n const defaultConfig = getDefaultInteractionConfigByMode(mode);\n this._hover = { ...defaultConfig?.hover };\n this._select = { ...defaultConfig?.select };\n\n const hoverSpec = this._spec.hover;\n if (isBoolean(hoverSpec)) {\n this._hover.enable = hoverSpec;\n } else if (isObject(hoverSpec)) {\n this._hover.enable = true;\n this._hover = mergeSpec(this._hover, hoverSpec);\n }\n\n const selectSpec = this._spec.select;\n if (isBoolean(selectSpec)) {\n this._select.enable = selectSpec;\n } else if (isObject(selectSpec)) {\n this._select.enable = true;\n this._select = mergeSpec(this._select, selectSpec);\n }\n }\n\n private onHover = (params: BaseEventParams) => {\n /**\n * 多个series的时候,trigger会有多个,每个trigger管理自己的marks\n * 如果不加状态\n * 会存在A系列触发hover,B系列触发unhover清空A系列高亮元素的情况\n */\n if (this.filterEventMark(params)) {\n this._isHovered = true;\n this.hoverItem(params);\n } else if (this._isHovered) {\n this._isHovered = false;\n this.unhoverItem();\n }\n };\n\n private onUnHover = (params: BaseEventParams) => {\n if (this.filterEventMark(params) || this.interaction.filterEventMark(params, STATE_VALUE_ENUM.STATE_HOVER)) {\n return;\n }\n if (this.interaction.getEventElement(STATE_VALUE_ENUM.STATE_HOVER)[0]) {\n this.unhoverItem();\n }\n };\n\n private onSelect = (params: BaseEventParams) => {\n this.handleSingleEventSelect(params);\n };\n\n private onUnSelect = (params: BaseEventParams) => {\n if (!this.interaction.filterEventMark(params, STATE_VALUE_ENUM.STATE_SELECTED)) {\n this.clearSelectedItems();\n }\n };\n\n // hover\n protected hoverItem(params: BaseEventParams): void {\n const { datum } = params;\n const lastEl = this.interaction.getEventElement(STATE_VALUE_ENUM.STATE_HOVER)[0];\n if (params.item === lastEl) {\n return;\n }\n this.interaction.exchangeEventElement(STATE_VALUE_ENUM.STATE_HOVER, params.item);\n this.interaction.reverseEventElement(STATE_VALUE_ENUM.STATE_HOVER);\n this.event.emit('hovered', {\n model: this._option.model,\n value: [datum]\n });\n }\n\n protected unhoverItem(): void {\n const lastHoveredDatums = this.interaction.getEventElementData(STATE_VALUE_ENUM.STATE_HOVER);\n this.interaction.clearEventElement(STATE_VALUE_ENUM.STATE_HOVER, true);\n\n this.event.emit('unhovered', {\n model: this._option.model,\n value: lastHoveredDatums\n });\n }\n\n protected handleSingleEventHover(params: BaseEventParams): void {\n if (this.filterEventMark(params)) {\n this.hoverItem(params);\n } else if (\n this.interaction.getEventElement(STATE_VALUE_ENUM.STATE_HOVER)[0] &&\n !this.interaction.filterEventMark(params, STATE_VALUE_ENUM.STATE_HOVER)\n ) {\n this.unhoverItem();\n }\n }\n\n // select\n protected selectItems(datums: any[]): void {\n this.event.emit('selected', {\n model: this._option.model,\n value: datums\n });\n }\n\n protected clearSelectedItems() {\n const lastSelectedItem = this.interaction.getEventElementData(STATE_VALUE_ENUM.STATE_SELECTED);\n this.interaction.clearEventElement(STATE_VALUE_ENUM.STATE_SELECTED, true);\n\n this.event.emit('unselected', {\n model: this._option.model,\n value: lastSelectedItem\n });\n }\n\n protected unselectItems(params: BaseEventParams): void {\n const { triggerOff } = this._select;\n if (triggerOff !== 'none') {\n this.interaction.removeEventElement(STATE_VALUE_ENUM.STATE_SELECTED, params.item);\n this.event.emit('unselected', {\n model: this._option.model,\n value: params.item\n });\n }\n }\n\n protected handleSingleEventSelect(params: BaseEventParams): void {\n if (this.filterEventMark(params)) {\n if (params.item.getStates().includes(STATE_VALUE_ENUM.STATE_SELECTED)) {\n this.unselectItems(params);\n } else {\n switch (this._select.mode) {\n case 'multiple':\n this.interaction.addEventElement(STATE_VALUE_ENUM.STATE_SELECTED, params.item);\n break;\n case 'single':\n default:\n this.interaction.exchangeEventElement(STATE_VALUE_ENUM.STATE_SELECTED, params.item);\n }\n this.interaction.reverseEventElement(STATE_VALUE_ENUM.STATE_SELECTED);\n const items = this.interaction.getEventElementData(STATE_VALUE_ENUM.STATE_SELECTED);\n this.selectItems(items);\n }\n } else if (\n // 不做已选内容的判断,因为选中的元素可能由用户 API 控制\n // this._selectedItems.length > 0 &&\n !this.interaction.filterEventMark(params, STATE_VALUE_ENUM.STATE_SELECTED)\n ) {\n this.clearSelectedItems();\n }\n }\n\n // util\n protected filterEventMark(params: BaseEventParams): boolean {\n return !!(params.mark && this._marks.includes(params.mark));\n }\n\n protected isDatumEqual(datumA: any, datumB: any): boolean {\n const fields = this._fields ? this._fields : Object.keys(datumA);\n return fields.every(f => datumA[f] === datumB[f]);\n }\n}\n","import type { RenderMode } from '../typings/spec/common';\nimport { RenderModeEnum } from '../typings/spec/common';\nimport { isMiniAppLikeMode, isMobileLikeMode } from '../util';\n\nexport function getDefaultInteractionConfigByMode(mode: RenderMode) {\n if (mode === RenderModeEnum['desktop-browser'] || mode === RenderModeEnum['desktop-miniApp']) {\n return {\n hover: {\n enable: true,\n trigger: 'pointermove',\n triggerOff: 'pointerleave'\n },\n select: {\n enable: true,\n trigger: 'pointertap'\n }\n };\n }\n\n if (isMobileLikeMode(mode) || isMiniAppLikeMode(mode)) {\n return {\n hover: {\n enable: true,\n trigger: ['pointerdown', 'pointermove'],\n triggerOff: 'pointerleave'\n },\n select: {\n enable: true,\n trigger: 'tap'\n }\n };\n }\n\n return null;\n}\n","import type { ITooltipActiveTypeAsKeys, ITooltipSpec } from '../component/tooltip/interface';\nimport type { TooltipActiveType } from '../typings';\nimport type { IModel } from './interface';\nimport type { IMark } from '../mark/interface';\n\nexport type TooltipTrigger = IModel | IMark;\n\nexport interface ITooltipHelper {\n /** tooltip对应spec */\n spec: ITooltipSpec | undefined;\n\n /** 实际生效的tooltip activeType */\n activeType: TooltipActiveType[];\n\n /** 可以响应mark tooltip或者dimension tooltip的对象 */\n activeTriggerSet: ITooltipActiveTypeAsKeys, Set>;\n /** 不响应tooltip且不会影响已有tooltip的对象 */\n ignoreTriggerSet: ITooltipActiveTypeAsKeys, Set>;\n\n /** 更新spec */\n updateTooltipSpec: () => void;\n}\n\nexport abstract class BaseTooltipHelper implements ITooltipHelper {\n spec: ITooltipSpec | undefined;\n activeType: TooltipActiveType[];\n\n activeTriggerSet = {\n mark: new Set(),\n dimension: new Set()\n };\n ignoreTriggerSet = {\n mark: new Set(),\n dimension: new Set()\n };\n\n abstract updateTooltipSpec(): void;\n}\n","import { isNil, isValid } from '@visactor/vutils';\nimport type { TooltipActiveType } from '../../../typings';\nimport type { ITooltipActiveTypeAsKeys, ITooltipSpec } from '../interface';\nimport type { BaseEventParams } from '../../../event/interface';\n\nexport const getTooltipActualActiveType = (spec?: ITooltipSpec): TooltipActiveType[] => {\n if (spec?.visible === false) {\n return [];\n }\n\n const activeTypeMap: ITooltipActiveTypeAsKeys = {\n mark: spec?.mark?.visible !== false,\n dimension: spec?.dimension?.visible !== false\n };\n\n if (isValid(spec?.activeType)) {\n Object.keys(activeTypeMap).forEach(t => {\n activeTypeMap[t] = spec?.activeType?.includes(t as TooltipActiveType);\n });\n }\n\n return Object.keys(activeTypeMap).filter(t => activeTypeMap[t]) as TooltipActiveType[];\n};\n\nexport function isEmptyPos(params: BaseEventParams): boolean {\n return isNil(params.mark) && isNil(params.model) && isNil(params.datum);\n}\n","import type { ITooltipActiveTypeAsKeys, ITooltipSpec, TooltipHandlerParams } from '../../component/tooltip/interface';\nimport type { IToolTipLinePattern, ITooltipPattern, ShapeType, TooltipActiveType } from '../../typings';\nimport { array, isFunction, isValid } from '@visactor/vutils';\nimport type { ISeries, ISeriesTooltipHelper } from '../interface';\nimport { BaseTooltipHelper } from '../../model/tooltip-helper';\nimport type { IDimensionInfo } from '../../event/events/dimension/interface';\nimport type { Datum } from '@visactor/vgrammar-core';\nimport { getTooltipActualActiveType } from '../../component/tooltip/utils/common';\n\ninterface ISeriesCacheInfo {\n seriesFields: string[];\n dimensionFields: string[];\n measureFields: string[];\n type: string;\n}\n\nexport class BaseSeriesTooltipHelper extends BaseTooltipHelper implements ISeriesTooltipHelper {\n series: ISeries;\n\n protected _seriesCacheInfo: ISeriesCacheInfo;\n\n constructor(series: ISeries) {\n super();\n this.series = series;\n this.updateTooltipSpec();\n }\n\n updateTooltipSpec() {\n const seriesTooltipSpec = this.series.getSpec()?.tooltip ?? {};\n const chartTooltipSpec = this.series.getChart().getSpec()?.tooltip ?? {};\n\n const spec = {\n ...chartTooltipSpec,\n ...seriesTooltipSpec\n } as ITooltipSpec;\n\n // 将 series id 放入 pattern\n (['mark', 'dimension'] as Array>).forEach(activeType => {\n const pattern = spec[activeType];\n if (isValid(pattern)) {\n spec[activeType] = {\n ...pattern,\n title: isValid(pattern.title)\n ? isFunction(pattern.title)\n ? pattern.title\n : ({\n ...pattern.title,\n seriesId: this.series.id\n } as IToolTipLinePattern)\n : undefined,\n content: isValid(pattern.content)\n ? isFunction(pattern.content)\n ? pattern.content\n : array(pattern.content).map(line =>\n isFunction(line)\n ? line\n : ({\n ...line,\n seriesId: this.series.id\n } as IToolTipLinePattern)\n )\n : undefined\n };\n }\n });\n\n this.spec = spec;\n this.activeType = getTooltipActualActiveType(spec);\n\n this._seriesCacheInfo = this._getSeriesCacheInfo();\n }\n\n protected _getSeriesCacheInfo = (): ISeriesCacheInfo => {\n const { series } = this;\n const _seriesField = series.getSeriesField();\n const seriesFields = isValid(_seriesField) ? array(_seriesField) : series.getSeriesKeys() ?? [];\n return {\n seriesFields,\n dimensionFields: series.getDimensionField() ?? [],\n measureFields: series.getMeasureField() ?? [],\n type: series.type\n };\n };\n\n protected _getDimensionData = (datum: any) => {\n const { dimensionFields } = this._seriesCacheInfo;\n return dimensionFields[0] && datum?.[dimensionFields[0]];\n };\n\n protected _getMeasureData = (datum: any) => {\n const { measureFields } = this._seriesCacheInfo;\n return measureFields[0] && datum?.[measureFields[0]];\n };\n\n protected _getSeriesStyle = (datum: any, styleKey: string | string[], defaultValue?: any) => {\n for (const key of array(styleKey)) {\n const value = this.series.getSeriesStyle(datum)?.(key);\n if (isValid(value)) {\n return value;\n }\n }\n return defaultValue;\n };\n\n contentKeyCallback = (datum: Datum, params?: TooltipHandlerParams): string | undefined => {\n const { dimensionFields, seriesFields } = this._seriesCacheInfo;\n const subDimensionField = dimensionFields[dimensionFields.length - 1];\n\n if (isValid(seriesFields[0]) && datum?.[seriesFields[0]]) {\n return datum?.[seriesFields[0]];\n }\n\n if (dimensionFields.length > 1 && (seriesFields.length === 0 || this.series.getSeriesKeys().length <= 1)) {\n return datum?.[subDimensionField];\n }\n\n return datum?.[subDimensionField];\n };\n\n contentValueCallback = (datum: Datum, params?: TooltipHandlerParams): string | undefined => {\n return this._getMeasureData(datum);\n };\n\n contentShapeTypeCallback = (datum: Datum, params?: TooltipHandlerParams): ShapeType | undefined => {\n return (\n this._getSeriesStyle(datum, 'shape', null) ??\n this._getSeriesStyle(datum, 'symbolType', this.series.getDefaultShapeType())\n );\n };\n\n contentShapeColorCallback = (datum: Datum, params?: TooltipHandlerParams): string | undefined => {\n return this._getSeriesStyle(datum, ['fill', 'stroke']);\n };\n\n titleValueCallback = (datum: Datum, params?: TooltipHandlerParams): string | undefined => {\n return this._getDimensionData(datum);\n };\n\n /** 获取默认的tooltip pattern */\n getDefaultTooltipPattern(activeType: TooltipActiveType, dimensionInfo?: IDimensionInfo[]): ITooltipPattern | null {\n if (activeType === 'mark') {\n return {\n visible: true,\n activeType,\n title: {\n key: undefined,\n value: this.titleValueCallback,\n hasShape: false\n },\n content: [\n {\n seriesId: this.series.id,\n key: this.contentKeyCallback,\n value: this.contentValueCallback,\n hasShape: true,\n shapeType: this.contentShapeTypeCallback,\n shapeColor: this.contentShapeColorCallback,\n shapeStroke: this.contentShapeColorCallback,\n shapeHollow: false\n }\n ]\n };\n } else if (activeType === 'dimension' && dimensionInfo) {\n const title: IToolTipLinePattern = {\n key: undefined,\n value: this._getDimensionData,\n hasShape: false\n };\n const content: IToolTipLinePattern[] = [];\n dimensionInfo.forEach(({ data }) =>\n data.forEach(({ series }) => {\n content.push({\n seriesId: series.id,\n key: this.contentKeyCallback,\n value: this.contentValueCallback,\n hasShape: true,\n shapeType: this.contentShapeTypeCallback,\n shapeColor: this.contentShapeColorCallback,\n shapeStroke: this.contentShapeColorCallback,\n shapeHollow: false\n });\n })\n );\n return {\n visible: true,\n activeType,\n title,\n content\n };\n }\n\n return null;\n }\n}\n","import { isNil, isFunction, minInArray, maxInArray } from '@visactor/vutils';\nimport type { IFieldsMeta } from '../../typings/spec';\nimport { couldBeValidNumber } from '../../util/type';\nimport { mergeFields } from '../../util/data';\nimport type { DataView } from '@visactor/vdataset';\nimport type { Datum } from '../../typings';\n\nconst methods = {\n min: (arr: any[]) => {\n return arr.length ? minInArray(arr.map(n => n * 1)) : 0;\n },\n max: (arr: any[]) => {\n return arr.length ? maxInArray(arr.map(n => n * 1)) : 0;\n },\n 'array-min': (arr: any[]) => {\n return arr.length ? minInArray(arr.map(n => n * 1)) : 0;\n },\n 'array-max': (arr: any[]) => {\n return arr.length ? maxInArray(arr.map(n => n * 1)) : 0;\n },\n values: (arr: any[]) => {\n const map = {};\n const res: any[] = [];\n\n for (const entry of arr) {\n if (!map[entry]) {\n res.push(entry);\n map[entry] = 1;\n }\n }\n\n return res;\n }\n};\n\nexport type StatisticOperations = Array<'max' | 'min' | 'values' | 'array-max' | 'array-min' | 'allValid'>;\n\nexport interface IStatisticsOption {\n fields: {\n key: string;\n operations: StatisticOperations;\n customize?: { max: number; min: number } | any[];\n }[];\n // operations: Array<'max' | 'min' | 'values'>;\n target?: 'parser' | 'latest';\n}\n\n/**\n * 聚合统计主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果\n * @param data\n * @param options\n * @returns\n */\nexport const dimensionStatistics = (data: Array, op: IStatisticsOption) => {\n // const operations = op.operations;\n let fields = op.fields;\n if (isFunction(fields)) {\n fields = fields();\n }\n if (!fields?.length || !data?.length) {\n return {};\n }\n\n // merge same key\n fields = mergeFields([], fields);\n\n const dataKey = op.target === 'parser' ? 'parserData' : 'latestData';\n const latestData = data[0][dataKey] ? data[0][dataKey] : data || [];\n const dataFields = data[0].getFields?.() as Record<\n /** 字段key */\n string,\n IFieldsMeta\n >;\n\n return dimensionStatisticsOfSimpleData(latestData, fields, dataFields);\n};\n\n/**\n * 聚合统计主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果\n * @param data\n * @param options\n * @returns\n */\nexport const dimensionStatisticsOfSimpleData = (\n latestData: Datum[],\n fields: {\n key: string;\n operations: StatisticOperations;\n customize?: { max: number; min: number } | any[];\n }[],\n dataFields?: Record<\n /** 字段key */\n string,\n IFieldsMeta\n >\n) => {\n const result = {};\n\n let fValues: any[] = [];\n let nextFValues: any[] = [];\n fields.forEach(f => {\n const key = f.key;\n // NOTE: the same key in fields has been merge already\n result[key] = {};\n const dataFieldInKey = dataFields?.[key];\n const operations: StatisticOperations = f.operations;\n const isNumberField = operations.some(op => op === 'min' || op === 'max' || op === 'allValid');\n let allValid = true;\n fValues.length = 0;\n\n latestData.forEach((d: Datum) => {\n if (d) {\n fValues.push(d[key]);\n }\n });\n const len = fValues.length;\n\n if (isNumberField) {\n nextFValues.length = 0;\n fValues.forEach((item, i) => {\n if (couldBeValidNumber(item)) {\n nextFValues.push(item);\n }\n });\n const t = fValues;\n fValues = nextFValues;\n nextFValues = t;\n // fValues = fValues.filter(couldBeValidNumber);\n allValid = fValues.length === len;\n } else if (operations.some(op => op === 'array-min' || op === 'array-max')) {\n fValues = fValues.reduce((res, entry) => {\n if (entry) {\n entry.forEach((d: any) => {\n if (couldBeValidNumber(d)) {\n res.push(d);\n }\n });\n }\n\n return res;\n }, []);\n } else {\n fValues = fValues.filter((entry: any) => entry !== undefined);\n }\n\n operations.forEach(op => {\n // @chensij 如果指定了计算的domain结果,则忽略计算(目前该逻辑仅在dot series中维护,因为dot series期望在filter data之后x轴改变domain,y轴不改变domain)\n if (f.customize) {\n result[key][op] = f.customize;\n } else {\n if (dataFieldInKey && dataFieldInKey.lockStatisticsByDomain && !isNil(dataFieldInKey.domain)) {\n if (op === 'values') {\n result[key][op] = dataFieldInKey.domain.slice();\n return;\n }\n } else if (op === 'allValid') {\n return;\n }\n\n result[key][op] = methods[op](fValues);\n\n if (op === 'array-max') {\n result[key].max = result[key][op];\n }\n if (op === 'array-min') {\n result[key].min = result[key][op];\n }\n }\n });\n\n if (isNumberField) {\n result[key].allValid = allValid;\n }\n });\n\n return result;\n};\n","import type { Datum, IInvalidType, StringOrNumber } from '../../typings';\nimport { couldBeValidNumber } from '../../util/type';\n\nexport interface ITravelOpt {\n config: () => {\n invalidType: IInvalidType;\n checkField: StringOrNumber;\n };\n}\n\nexport const invalidTravel = (data: Array, op: ITravelOpt) => {\n const { config } = op;\n if (!config) {\n return data;\n }\n const { invalidType, checkField } = config();\n if (invalidType !== 'zero') {\n return data;\n }\n data.forEach((datum: Datum) => {\n if (!couldBeValidNumber(datum[checkField])) {\n datum[checkField] = 0;\n }\n });\n return data;\n};\n","import { isNil, isValid } from '@visactor/vutils';\nimport { CompilableData } from '../../compile/data/compilable-data';\n\nexport class SeriesData extends CompilableData {\n protected _compileProduct() {\n const data = this._data?.latestData;\n if (isNil(data) || isValid(this.getProduct())) {\n return;\n }\n this._initProduct([]); // 性能优化:初次编译不需要数据\n }\n\n generateProductId(): string {\n return this._data?.name as string;\n }\n}\n","import { PREFIX } from \"./base\";\n\nexport const DEFAULT_HIERARCHY_DEPTH = `${PREFIX}_HIERARCHY_DEPTH`;\n\nexport const DEFAULT_HIERARCHY_ROOT = `${PREFIX}_HIERARCHY_ROOT`;\n\nexport const DEFAULT_HIERARCHY_ROOT_INDEX = `${PREFIX}_HIERARCHY_ROOT_INDEX`;","import { DEFAULT_DATA_INDEX, DEFAULT_DATA_KEY, DEFAULT_DATA_SERIES_FIELD } from '../../constant';\nimport type { BaseSeries } from '../../series/base/base-series';\nimport type { TreemapSeries } from '../../series/treemap/treemap';\nimport type { AddVChartPropertyContext } from './add-property';\nimport {\n DEFAULT_HIERARCHY_DEPTH,\n DEFAULT_HIERARCHY_ROOT,\n DEFAULT_HIERARCHY_ROOT_INDEX\n} from '../../constant/hierarchy';\nimport type { SunburstSeries } from '../../series/sunburst/sunburst';\nimport type { CirclePackingSeries } from '../../series/circle-packing/circle-packing';\n\nexport function initKeyMap(this: BaseSeries) {\n return {\n keyMap: new Map(),\n needDefaultSeriesField: !this._seriesField,\n defaultSeriesField: !this._seriesField ? this.getSeriesKeys()[0] : null,\n getKey: this.generateDefaultDataKey(this._spec.dataKey)\n };\n}\n\nexport function addDataKey(d: any, i: number, context: AddVChartPropertyContext) {\n if (!d) {\n return;\n }\n if (context.needDefaultSeriesField) {\n d[DEFAULT_DATA_SERIES_FIELD] = context.defaultSeriesField;\n }\n d[DEFAULT_DATA_INDEX] = i;\n d[DEFAULT_DATA_KEY] = context.getKey(d, i, context);\n}\n\nexport function initHierarchyKeyMap(this: TreemapSeries | SunburstSeries | CirclePackingSeries) {\n return {\n keyMap: new Map(),\n needDefaultSeriesField: true,\n defaultSeriesField: this.getSeriesKeys()[0],\n getKey: (this as any).generateDefaultDataKey((this as any)._spec.dataKey),\n categoryField: this.getCategoryField()\n };\n}\n\nexport function addHierarchyDataKey(\n d: any,\n i: number,\n context: AddVChartPropertyContext,\n depth: number = 0,\n root?: string,\n rootIndex?: number\n) {\n if (rootIndex === undefined) {\n rootIndex = i;\n }\n addDataKey(d, i, context);\n d[DEFAULT_HIERARCHY_DEPTH] = depth;\n d[DEFAULT_HIERARCHY_ROOT] = root || d[context.categoryField];\n d[DEFAULT_HIERARCHY_ROOT_INDEX] = rootIndex;\n if (d.children && d.children.length) {\n d.children.forEach((_d: any, _i: number) =>\n addHierarchyDataKey(_d, _i, context, d[DEFAULT_HIERARCHY_DEPTH] + 1, d[DEFAULT_HIERARCHY_ROOT], rootIndex)\n );\n }\n}\n","import type { IAnimationConfig } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type {\n IElement,\n IAnimationTypeConfig,\n IStateAnimationConfig,\n IAnimationTimeline\n} from '@visactor/vgrammar-core';\nimport type { MarkAnimationSpec, IAnimationState } from './interface';\nimport type { IStateAnimateSpec, IAnimationSpec } from './spec';\nimport { isFunction, isValidNumber } from '../util/type';\nimport { DEFAULT_DATA_INDEX } from '../constant';\nimport { DEFAULT_ANIMATION_CONFIG } from './config';\nimport { cloneDeep, isArray, isObject, isValid } from '@visactor/vutils';\nimport type { SeriesMarkNameEnum } from '../series/interface/type';\nimport { mergeSpec } from '../util/spec/merge-spec';\nimport type { ISeries } from '../series';\nimport type { ISeriesSpec } from '../typings';\nimport type { ISeriesMarkAttributeContext } from '../compile/mark';\n\nexport const AnimationStates = ['appear', 'enter', 'update', 'exit', 'disappear', 'normal'];\n\nexport function animationConfig(\n defaultConfig: MarkAnimationSpec = {},\n userConfig?: Partial<\n Record | IAnimationConfig | IAnimationConfig[]>\n >,\n params?: {\n dataIndex: (datum: any) => number;\n dataCount: () => number;\n }\n) {\n const config = {} as MarkAnimationSpec;\n for (let i = 0; i < AnimationStates.length; i++) {\n const state = AnimationStates[i];\n const userStateConfig = userConfig ? userConfig[state] : undefined;\n\n if (userStateConfig === false) {\n continue;\n }\n\n if (state === 'normal') {\n userStateConfig && (config.normal = userStateConfig as IAnimationTypeConfig);\n continue;\n }\n\n if (state !== 'update' && !userStateConfig && !defaultConfig[state]) {\n // no user config and default config\n continue;\n }\n\n // 开始处理默认动画逻辑\n let defaultStateConfig: IAnimationConfig[];\n if (isArray(defaultConfig[state])) {\n defaultStateConfig = defaultConfig[state] as IAnimationConfig[];\n } else {\n defaultStateConfig = [{ ...DEFAULT_ANIMATION_CONFIG[state], ...defaultConfig[state] } as any];\n }\n // FIXME: 用来控制当动画状态发生变更时是否清除正在执行的动画。\n // 现在 vrender 对于同一个视觉通道的 tween 不会做覆盖的处理。若不做动画清空同时 exit 动画比 update 动画时间长的情况下,效果会不正确\n if (state === 'exit') {\n defaultStateConfig.forEach(exitConfig => {\n exitConfig.controlOptions = { stopWhenStateChange: true };\n });\n }\n\n if (!userStateConfig) {\n config[state] = defaultStateConfig;\n continue;\n }\n\n // 开始处理用户配置的动画逻辑\n let stateConfig: IAnimationConfig[];\n if (isArray(userStateConfig)) {\n stateConfig = userStateConfig.map((userConfig, i) => {\n let singleConfig: IAnimationConfig = userConfig;\n // not merge default config when user animation config is array\n if (isChannelAnimation(singleConfig)) {\n // `type` and `channel` is conflict, and `type` has a higher priority.\n // here if user configured `channel`, we should remove `type` which will come from default animation config\n delete (singleConfig as IAnimationTypeConfig).type;\n }\n if (singleConfig.oneByOne) {\n singleConfig = produceOneByOne(\n singleConfig as IAnimationTypeConfig,\n params?.dataIndex ?? defaultDataIndex,\n params?.dataCount\n );\n }\n return singleConfig;\n });\n } else {\n stateConfig = defaultStateConfig.map((stateConfig, i) => {\n let singleConfig: IAnimationConfig = mergeSpec({}, defaultStateConfig[i], userStateConfig) as IAnimationConfig;\n if (isChannelAnimation(singleConfig)) {\n // `type` and `channel` is conflict, and `type` has a higher priority.\n // here if user configured `channel`, we should remove `type` which will come from default animation config\n delete (singleConfig as IAnimationTypeConfig).type;\n }\n\n if (singleConfig.oneByOne) {\n singleConfig = produceOneByOne(\n singleConfig as IAnimationTypeConfig,\n params?.dataIndex ?? defaultDataIndex,\n params?.dataCount\n );\n }\n return singleConfig;\n });\n }\n\n config[state] = stateConfig;\n }\n\n // 将 update copy 到 state 保证 useState 效果与 update 对齐\n config.state = config.update as IStateAnimationConfig;\n return config;\n}\n\nexport function userAnimationConfig(\n markName: SeriesMarkNameEnum | string,\n spec: IAnimationSpec,\n ctx: ISeriesMarkAttributeContext\n) {\n const userConfig: Partial<\n Record | IAnimationConfig | IAnimationConfig[]>\n > = {};\n\n if (spec.animationAppear) {\n userConfig.appear = spec.animationAppear[markName] ?? spec.animationAppear;\n }\n\n if (spec.animationDisappear) {\n userConfig.disappear = spec.animationDisappear[markName] ?? spec.animationDisappear;\n }\n if (spec.animationEnter) {\n userConfig.enter = spec.animationEnter[markName] ?? spec.animationEnter;\n }\n\n if (spec.animationExit) {\n userConfig.exit = spec.animationExit[markName] ?? spec.animationExit;\n }\n if (spec.animationUpdate) {\n userConfig.update = spec.animationUpdate[markName] ?? spec.animationUpdate;\n }\n if (spec.animationNormal && spec.animationNormal[markName]) {\n userConfig.normal = spec.animationNormal[markName];\n }\n\n return uniformAnimationConfig(userConfig, ctx);\n}\n\n/**\n * oneByOne\n */\nfunction produceOneByOne(\n stateConfig: IAnimationTypeConfig,\n dataIndex: (datum: any) => number,\n dataCount?: () => number\n) {\n const { oneByOne, duration, delay, delayAfter } = stateConfig;\n stateConfig.delay = (datum: any, element: IElement, params: any) => {\n const index = dataIndex(datum);\n const durationTime = isFunction(duration)\n ? duration(datum, element, params)\n : isValidNumber(duration)\n ? duration\n : 0;\n const userDelay = isFunction(delay) ? delay(datum, element, params) : isValidNumber(delay) ? delay : 0;\n let oneByOneTime = isFunction(oneByOne) ? oneByOne(datum, element, params) : oneByOne;\n if (oneByOneTime === false) {\n return userDelay;\n }\n oneByOneTime = oneByOneTime === true ? 0 : oneByOneTime;\n return userDelay + index * (durationTime + oneByOneTime);\n };\n stateConfig.delayAfter = (datum: any, element: IElement, params: any) => {\n const index = dataIndex(datum);\n const durationTime = isFunction(duration)\n ? duration(datum, element, params)\n : isValidNumber(duration)\n ? duration\n : 0;\n const userDelayAfter = isFunction(delayAfter)\n ? delayAfter(datum, element, params)\n : isValidNumber(delayAfter)\n ? delayAfter\n : 0;\n let oneByOneTime = isFunction(oneByOne) ? oneByOne(datum, element, params) : oneByOne;\n if (oneByOneTime === false) {\n return userDelayAfter;\n }\n const indexCount = dataCount ? dataCount() : element.mark.elements.length;\n oneByOneTime = oneByOneTime === true ? 0 : oneByOneTime;\n return userDelayAfter + (indexCount - index) * (durationTime + oneByOneTime);\n };\n delete stateConfig.oneByOne;\n return stateConfig;\n}\n\nfunction defaultDataIndex(datum: any) {\n return datum?.[DEFAULT_DATA_INDEX];\n}\n\nexport function shouldMarkDoMorph(spec: ISeriesSpec & IAnimationSpec, markName: string) {\n if (spec.animation === false) {\n return false;\n }\n\n if (spec.morph?.enable === false) {\n return false;\n }\n\n const appearAnimationEnabled = (spec.animationAppear?.[markName] ?? spec.animationAppear) !== false;\n const updateAnimationEnabled = (spec.animationUpdate?.[markName] ?? spec.animationUpdate) !== false;\n\n if (!appearAnimationEnabled || !updateAnimationEnabled) {\n return false;\n }\n\n return true;\n}\n\nexport function isTimeLineAnimation(animationConfig: IAnimationConfig) {\n return isValid((animationConfig as IAnimationTimeline).timeSlices);\n}\n\nexport function isChannelAnimation(animationConfig: IAnimationConfig) {\n return !isTimeLineAnimation(animationConfig) && isValid((animationConfig as IAnimationTypeConfig).channel);\n}\n\nexport function uniformAnimationConfig(\n config: Partial | IAnimationConfig | IAnimationConfig[]>>,\n ctx: ISeriesMarkAttributeContext\n) {\n if (!config) {\n return config;\n }\n config = cloneDeep(config);\n traverseSpec(config, (node: any) => {\n // 将函数转换为 vchart 代理的函数\n // 这里可能会传自定义动画的构造函数,不能被代理\n if (isFunction(node) && node.prototype?.constructor !== node) {\n const name = (...args: any) => {\n return node(...args, ctx);\n };\n return name;\n }\n return node;\n });\n\n return config;\n}\n\nfunction traverseSpec(spec: any, transform: (node: any, key: string | number) => any) {\n if (isArray(spec)) {\n spec.forEach((i: any, index: number) => {\n spec[index] = transform(spec[index], index);\n traverseSpec(spec[index], transform);\n });\n } else if (isObject(spec)) {\n for (const key in spec) {\n spec[key] = transform(spec[key], key);\n traverseSpec(spec[key], transform);\n }\n }\n}\n\nexport function isAnimationEnabledForSeries(series: ISeries) {\n return series.getSpec().animation !== false && isValid(series.getRegion().animate);\n}\n","import type { IChartSpecInfo } from '../../chart/interface';\nimport type { ILabelSpec, TransformedLabelSpec } from '../../component/label';\nimport type { IBaseModelSpecTransformerResult } from '../../model/interface';\nimport { BaseModelSpecTransformer } from '../../model/base-model-transformer';\nimport type { ISeriesSpec } from '../../typings';\nimport { array, get, isValid, mergeSpec, transformSeriesThemeToMerge } from '../../util';\nimport type { SeriesMarkNameEnum } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ISeries } from '../interface';\nimport { getDirectionFromSeriesSpec } from '../util/spec';\n\nexport class BaseSeriesSpecTransformer extends BaseModelSpecTransformer {\n markLabelSpec: Partial> = {};\n\n getLabelSpec(markName: string) {\n return this.markLabelSpec[markName];\n }\n\n setLabelSpec(markName: string, label: TransformedLabelSpec | TransformedLabelSpec[]) {\n this.markLabelSpec[markName] = array(label);\n }\n\n addLabelSpec(markName: string, label: TransformedLabelSpec, head = false) {\n if (!this.markLabelSpec[markName]) {\n this.markLabelSpec[markName] = [];\n }\n if (head) {\n // 排序靠前的 label 优先布局,尽可能避免碰撞隐藏\n this.markLabelSpec[markName].unshift(label);\n } else {\n this.markLabelSpec[markName].push(label);\n }\n }\n\n getTheme(spec: T, chartSpec: any): K {\n const direction = getDirectionFromSeriesSpec(spec);\n const chartTheme = this._option?.getTheme();\n const { markByName, mark } = chartTheme;\n const type = this._option.type;\n const theme = transformSeriesThemeToMerge(get(chartTheme, `series.${type}`), type, mark, markByName);\n const themeWithDirection = transformSeriesThemeToMerge(\n get(chartTheme, `series.${type}_${direction}`),\n `${type}_${direction}`,\n mark,\n markByName\n );\n return mergeSpec({}, theme, themeWithDirection);\n }\n\n /** 不建议重写该方法,最好重写对应子步骤 */\n transformSpec(spec: T, chartSpec: any, chartSpecInfo?: IChartSpecInfo): IBaseModelSpecTransformerResult {\n const result = super.transformSpec(spec, chartSpec, chartSpecInfo);\n this._transformLabelSpec(result.spec);\n return {\n ...result,\n markLabelSpec: this.markLabelSpec\n };\n }\n\n protected _transformLabelSpec(spec: T) {\n // empty\n }\n\n protected _addMarkLabelSpec(\n spec: T,\n markName: SeriesMarkNameEnum,\n labelSpecKey: keyof T = 'label' as any,\n styleHandlerName: keyof V = 'initLabelMarkStyle',\n hasAnimation?: boolean,\n head?: boolean\n ): void {\n const labelSpec = spec?.[labelSpecKey] as ILabelSpec;\n if (labelSpec?.visible) {\n this.addLabelSpec(\n markName,\n {\n animation: hasAnimation ?? spec.animation,\n ...labelSpec,\n getStyleHandler: (series: V) => (series[styleHandlerName] as any)?.bind(series)\n } as TransformedLabelSpec,\n head\n );\n }\n }\n\n protected _getDefaultSpecFromChart(chartSpec: any): any {\n const spec = (super._getDefaultSpecFromChart(chartSpec) as any) ?? {};\n const { outerRadius, innerRadius } = chartSpec;\n if (isValid(outerRadius)) {\n spec.outerRadius = outerRadius;\n }\n if (isValid(innerRadius)) {\n spec.innerRadius = innerRadius;\n }\n return Object.keys(spec).length > 0 ? spec : undefined;\n }\n}\n","import { ChartEvent } from '../../constant/event';\nimport {\n AttributeLevel,\n DEFAULT_DATA_KEY,\n DEFAULT_DATA_SERIES_FIELD,\n DEFAULT_SERIES_STYLE_NAME,\n PREFIX,\n STACK_FIELD_END,\n STACK_FIELD_END_PERCENT,\n STACK_FIELD_START,\n STACK_FIELD_START_PERCENT\n} from '../../constant/index';\nimport { seriesMarkInfoMap } from '../interface/theme';\nimport { DataView } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DataSet, ITransformOptions } from '@visactor/vdataset';\nimport type { IRegion } from '../../region/interface';\nimport type { IMark } from '../../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type {\n CoordinateType,\n IInvalidType,\n IPoint,\n DataKeyType,\n Datum,\n Maybe,\n ISeriesSpec,\n IExtensionMarkSpec,\n IExtensionGroupMarkSpec,\n EnableMarkType,\n IGroup,\n ILayoutType,\n ILayoutPoint,\n ILayoutRect\n} from '../../typings';\nimport { BaseModel } from '../../model/base-model';\n// eslint-disable-next-line no-duplicate-imports\nimport type {\n ISeriesOption,\n ISeries,\n ISeriesMarkInitOption,\n ISeriesStackData,\n ISeriesTooltipHelper,\n SeriesMarkMap,\n ISeriesMarkInfo,\n ISeriesSpecInfo\n} from '../interface';\nimport { dataToDataView, dataViewFromDataView, updateDataViewInData } from '../../data/initialize';\nimport { mergeFields, getFieldAlias } from '../../util/data';\nimport { couldBeValidNumber } from '../../util/type';\nimport { mergeSpec } from '../../util/spec/merge-spec';\nimport type { IModelEvaluateOption, IModelRenderOption } from '../../model/interface';\nimport type { AddVChartPropertyContext } from '../../data/transforms/add-property';\n// eslint-disable-next-line no-duplicate-imports\nimport { addVChartProperty } from '../../data/transforms/add-property';\nimport type { ITrigger } from '../../interaction/interface';\nimport { Trigger } from '../../interaction/trigger';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { BaseSeriesTooltipHelper } from './tooltip-helper';\nimport type { StatisticOperations } from '../../data/transforms/dimension-statistics';\n// eslint-disable-next-line no-duplicate-imports\nimport { dimensionStatistics, dimensionStatisticsOfSimpleData } from '../../data/transforms/dimension-statistics';\nimport { invalidTravel } from '../../data/transforms/invalid-travel';\nimport { getDataScheme } from '../../theme/color-scheme/util';\nimport { SeriesData } from './series-data';\nimport { addDataKey, initKeyMap } from '../../data/transforms/data-key';\nimport type { IGroupMark } from '../../mark/group';\nimport type { ISeriesMarkAttributeContext } from '../../compile/mark';\nimport {\n array,\n isEqual,\n isNil,\n isValid,\n isBoolean,\n isString,\n isFunction,\n isArray,\n isValidNumber,\n minInArray,\n maxInArray\n} from '@visactor/vutils';\nimport { ColorOrdinalScale } from '../../scale/color-ordinal-scale';\nimport { baseSeriesMark } from './constant';\nimport { animationConfig, userAnimationConfig, isAnimationEnabledForSeries } from '../../animation/utils';\nimport { BaseSeriesSpecTransformer } from './base-series-transformer';\n\nexport abstract class BaseSeries extends BaseModel implements ISeries {\n readonly specKey: string = 'series';\n readonly type: string = 'series';\n layoutType: ILayoutType = 'absolute';\n readonly modelType: string = 'series';\n readonly name: string | undefined = undefined;\n\n static readonly mark: SeriesMarkMap = baseSeriesMark;\n static readonly transformerConstructor = BaseSeriesSpecTransformer;\n readonly transformerConstructor = BaseSeriesSpecTransformer as any;\n\n declare getSpecInfo: () => ISeriesSpecInfo;\n\n protected _trigger!: ITrigger;\n /**\n * getTrigger\n */\n getTrigger() {\n return this._trigger;\n }\n\n protected declare _option: ISeriesOption;\n\n // 坐标系信息\n readonly coordinate: CoordinateType = 'none';\n\n // 区域\n protected _region: IRegion = null as unknown as IRegion;\n getRegion(): IRegion {\n return this._region;\n }\n\n private _layoutStartPoint: ILayoutPoint = {\n x: 0,\n y: 0\n };\n\n getLayoutStartPoint(): ILayoutPoint {\n return this._region.getLayoutStartPoint();\n }\n\n private _layoutRect: ILayoutRect = { width: null, height: null };\n\n getLayoutRect: () => ILayoutRect = () => {\n return {\n width: this._layoutRect.width ?? this._region.getLayoutRect().width,\n height: this._layoutRect.height ?? this._region.getLayoutRect().height\n };\n };\n\n /** 系列的根 mark */\n protected _rootMark: IGroupMark = null;\n getRootMark() {\n return this._rootMark;\n }\n\n /** series field 所作用的 mark */\n protected _seriesMark: Maybe = null;\n\n protected _layoutLevel!: number;\n\n /**\n * data\n * 数据节点\n * rawData 只进行 fields 相关能力,筛选+sort。\n * rawDataStatistics 的统计值是fields筛选后的。是符合预期的。\n * viewDatFilter 节点用来做组件等图表逻辑的数据筛选\n * viewData上不允许挂 filter\n * 数据更新流程一:重新做数据变换\n * viewData.reRunAllTransform()=>viewDataStatistics();\n * 数据更新流程二:图表逻辑更新,进行数据筛选\n * viewDatFilter.reRunAllTransform() => region.waitAllSeriesFilterOver()=>\n * viewData.reRunAllTransform()=>viewDataStatistics();\n * 数据更新流程三:用户更新数据\n * rawData().parse().rawDataStatistics()=>\n * viewDatFilter.reRunAllTransform() => region.waitAllSeriesFilterOver()=>\n * viewData.reRunAllTransform()=>viewDataStatistics();\n *\n * NEED-OPTIMIZATION:\n * 一:额外增加了 filter 节点,流程断开为2部分。只是因为堆积需要,因为 filter 和数据变换可以用排序解决。\n * 二:running tag 没有找到好办法消除。只是增加了一个易用 api 到 dataView 上\n */\n protected _rawData!: DataView;\n getRawData() {\n return this._rawData;\n }\n\n protected _rawDataStatistics?: DataView;\n protected _rawStatisticsCache: Record;\n\n protected _viewDataMap: Map = new Map();\n\n // only add viewDataFilter when this._stack is true\n protected _viewDataFilter: DataView = null;\n\n getViewDataFilter() {\n return this._viewDataFilter;\n }\n\n // view data\n protected _data: SeriesData = null;\n getViewData() {\n return this._data?.getDataView();\n }\n getViewDataProductId() {\n return this._data?.getProductId();\n }\n\n protected _viewDataStatistics!: DataView;\n getViewDataStatistics() {\n return this._viewDataStatistics;\n }\n protected _viewStackData!: DataView;\n getViewStackData() {\n return this._viewStackData;\n }\n\n protected _seriesField?: string;\n getSeriesField() {\n return this._seriesField;\n }\n setSeriesField(field: string) {\n if (isValid(field)) {\n this._seriesField = field;\n this.getMarks()\n .filter(m => {\n return m.getDataView() === this.getViewData();\n })\n .forEach(m => {\n m.setFacet(this._seriesField);\n });\n }\n }\n\n protected _groups?: IGroup;\n getGroups() {\n return this._groups;\n }\n\n protected _stack: boolean;\n protected _supportStack: boolean;\n getStack() {\n return this._stack;\n }\n\n getStackValue() {\n return this._spec.stackValue ?? `${PREFIX}_series_${this.type}`;\n }\n protected _percent: boolean = false;\n getPercent() {\n return this._percent;\n }\n protected _stackOffsetSilhouette: boolean = false;\n getStackOffsetSilhouette() {\n return this._stackOffsetSilhouette;\n }\n protected _dataSet: DataSet;\n\n protected declare _tooltipHelper: ISeriesTooltipHelper | undefined;\n get tooltipHelper() {\n if (!this._tooltipHelper) {\n this.initTooltip();\n }\n\n return this._tooltipHelper;\n }\n\n layoutZIndex: number = 0;\n\n protected _invalidType: IInvalidType = 'break';\n getInvalidType() {\n return this._invalidType;\n }\n setInvalidType(t: IInvalidType) {\n this._invalidType = t;\n this.getViewData()?.reRunAllTransform();\n }\n\n protected _markAttributeContext: ISeriesMarkAttributeContext;\n getMarkAttributeContext() {\n return this._markAttributeContext;\n }\n\n constructor(spec: T, options: ISeriesOption) {\n super(spec, options);\n this._region = options.region;\n this._dataSet = options.dataSet;\n this._spec?.name && (this.name = this._spec.name);\n }\n\n created(): void {\n super.created();\n this._buildMarkAttributeContext();\n // data\n this.initData();\n this.initGroups();\n // 调整统计数据的创建时机,需要等待group创建完成\n this.initStatisticalData();\n this.event.emit(ChartEvent.afterInitData, { model: this });\n // trigger\n this.initTrigger();\n // mark\n this.initRootMark();\n this.initMark();\n\n const hasAnimation = isAnimationEnabledForSeries(this);\n\n this._initExtensionMark({ hasAnimation });\n this.initMarkStyle();\n this.initMarkState();\n if (hasAnimation) {\n this.initAnimation();\n }\n this.afterInitMark();\n\n // event\n this.initEvent();\n this.event.emit(ChartEvent.afterInitEvent, { model: this });\n }\n\n protected _buildMarkAttributeContext() {\n this._markAttributeContext = {\n vchart: this._option.globalInstance,\n globalScale: (key: string, value: string | number) => {\n return this._option.globalScale.getScale(key)?.scale(value);\n },\n seriesColor: (seriesValue: string | number) => {\n if (isNil(seriesValue)) {\n seriesValue = this.getSeriesKeys()[0];\n }\n return this._option.globalScale.getScale('color')?.scale(seriesValue);\n },\n getRegion: () => this._region\n };\n }\n\n /** 预处理spec信息 */\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this.setSeriesField(this._spec.seriesField);\n if (isBoolean(this._spec.stack)) {\n this._stack = this._spec.stack;\n }\n if (isBoolean(this._spec.percent)) {\n this._percent = this._spec.percent;\n this._stack = this._spec.percent || this._stack; // this._stack is `true` in bar/area series\n }\n if (isBoolean(this._spec.stackOffsetSilhouette)) {\n this._stackOffsetSilhouette = this._spec.stackOffsetSilhouette;\n this._stack = this._spec.stackOffsetSilhouette || this._stack; // this._stack is `true` in bar/area series\n }\n if (isValid(this._spec.stackValue)) {\n this._stack = true;\n }\n\n if (isNil(this._stack) && this._supportStack && this._seriesField) {\n // only set default value of stack to be `true` when series support stack and seriesField is not null\n this._stack = true;\n }\n if (isValid(this._spec.invalidType)) {\n this._invalidType = this._spec.invalidType;\n }\n }\n\n /** data */\n protected initData(): void {\n const d = this._spec.data ?? this._option.getSeriesData(this._spec.dataId, this._spec.dataIndex);\n if (d) {\n this._rawData = dataToDataView(d, this._dataSet, this._option.sourceDataList, {\n onError: this._option?.onError\n });\n }\n this._rawData?.target?.addListener('change', this.rawDataUpdate.bind(this));\n this._addDataIndexAndKey();\n // 初始化viewData\n if (this._rawData) {\n if (this._stack) {\n // 初始化viewDataFilter\n this._viewDataFilter = dataViewFromDataView(this._rawData, this._dataSet, {\n name: `${this.type}_${this.id}_viewDataFilter`\n });\n }\n\n // 初始化viewData\n const viewData = dataViewFromDataView(this._stack ? this._viewDataFilter : this._rawData, this._dataSet, {\n name: `${this.type}_${this.id}_viewData`\n });\n this._data = new SeriesData(this._option, viewData);\n\n if (this._stack) {\n this._viewDataFilter.target.removeListener('change', viewData.reRunAllTransform);\n }\n }\n\n // _invalidType 默认为 break/ignore,直接走图形层面的解析,不需要走 transform 数据处理逻辑\n if (this._invalidType === 'zero' && this._rawData?.dataSet) {\n registerDataSetInstanceTransform(this._rawData.dataSet, 'invalidTravel', invalidTravel);\n // make sure each series only transform once\n this._rawData?.transform(\n {\n type: 'invalidTravel',\n options: {\n config: () => {\n return {\n invalidType: this._invalidType,\n checkField: this.getStackValueField()\n };\n }\n }\n },\n false\n );\n }\n }\n\n protected initGroups() {\n const groupFields = this.getGroupFields();\n if (groupFields && groupFields.length) {\n this._groups = { fields: groupFields };\n // this._data && this._groups.initData(this._data.getDataView(), this._dataSet);\n }\n }\n\n protected initStatisticalData(): void {\n if (this._data) {\n this._statisticViewData();\n }\n }\n\n getRawDataStatisticsByField(field: string, isNumeric?: boolean) {\n if (!this._rawStatisticsCache) {\n this._rawStatisticsCache = {};\n }\n\n if (!this._rawStatisticsCache[field]) {\n const canUseViewStatistics =\n this._viewDataStatistics &&\n (!this._viewDataFilter || this._viewDataFilter.transformsArr.length <= 1) &&\n this.getViewData().transformsArr.length <= 1;\n\n if (canUseViewStatistics && this._viewDataStatistics.latestData?.[field]) {\n this._rawStatisticsCache[field] = this._viewDataStatistics.latestData[field];\n } else if (this._rawData) {\n // 如果有设置统计信息,应当与设置值保持一致\n const fieldInfo = this._rawData.getFields()?.[field];\n if (fieldInfo && fieldInfo.lockStatisticsByDomain && fieldInfo.domain) {\n this._rawStatisticsCache[field] = {};\n if (isNumeric) {\n this._rawStatisticsCache[field].min = minInArray(fieldInfo.domain);\n this._rawStatisticsCache[field].max = maxInArray(fieldInfo.domain);\n } else {\n this._rawStatisticsCache[field].values = fieldInfo.domain;\n }\n } else {\n this._rawStatisticsCache[field] = dimensionStatisticsOfSimpleData(this._rawData.latestData, [\n { key: field, operations: isNumeric ? ['min', 'max'] : ['values'] }\n ])[field];\n }\n }\n }\n\n if (isNumeric && (isNil(this._rawStatisticsCache[field].min) || isNil(this._rawStatisticsCache[field].max))) {\n this._rawStatisticsCache[field].min = minInArray(this._rawStatisticsCache[field].values);\n this._rawStatisticsCache[field].max = maxInArray(this._rawStatisticsCache[field].values);\n }\n\n return this._rawStatisticsCache[field];\n }\n\n protected _statisticViewData() {\n registerDataSetInstanceTransform(this._dataSet, 'dimensionStatistics', dimensionStatistics);\n const viewDataStatisticsName = `${this.type}_${this.id}_viewDataStatic`;\n this._viewDataStatistics = new DataView(this._dataSet, { name: viewDataStatisticsName });\n this._viewDataStatistics.parse([this._data.getDataView()], {\n type: 'dataview'\n });\n this._viewDataStatistics.transform(\n {\n type: 'dimensionStatistics',\n options: {\n fields: () => {\n const fields = this.getStatisticFields();\n if (this._seriesField) {\n mergeFields(fields, [\n {\n key: this._seriesField,\n operations: ['values']\n }\n ]);\n }\n return fields;\n },\n target: 'latest'\n }\n },\n false\n );\n\n this._data.getDataView().target.removeListener('change', this._viewDataStatistics.reRunAllTransform);\n if (this._stack) {\n this.createdStackData();\n }\n }\n\n protected createStatisticalData(\n dataName: string,\n rawData: DataView,\n staticFields?: (dataId: string) => {\n key: string;\n operations: StatisticOperations;\n }[]\n ) {\n registerDataSetInstanceTransform(this._dataSet, 'dimensionStatistics', dimensionStatistics);\n const data = new DataView(this._dataSet, { name: dataName });\n data.parse([rawData], {\n type: 'dataview'\n });\n // data.name = dataName;\n data.transform(\n {\n type: 'dimensionStatistics',\n options: {\n operations: ['max', 'min', 'values'],\n fields: () => {\n const fields = mergeFields(this.getStatisticFields(), staticFields?.(rawData.name as string) ?? []);\n if (this._seriesField) {\n mergeFields(fields, [\n {\n key: this._seriesField,\n operations: ['values']\n }\n ]);\n }\n\n return fields;\n },\n target: 'latest'\n }\n },\n false\n );\n return data;\n }\n\n // stack\n private createdStackData(): void {\n const dataName = `${this.type}_${this.id}_viewStackData`;\n this._viewStackData = new DataView(this._dataSet, { name: dataName });\n this._viewStackData.parse([this._viewDataFilter], {\n type: 'dataview'\n });\n this._viewStackData.transform(\n {\n type: 'stackSplit',\n options: {\n fields: this.getStackGroupFields()\n }\n },\n false\n );\n }\n\n // make sure this function fast\n protected _noAnimationDataKey(datum: Datum, index: number): unknown | undefined {\n return index;\n }\n\n protected generateDefaultDataKey(dataKey: DataKeyType) {\n if (isNil(dataKey)) {\n return (datum: Datum, index: number, context: AddVChartPropertyContext) => {\n // check if need animation data key\n if (this._spec.animation === false) {\n const v = this._noAnimationDataKey(datum, index);\n if (v !== undefined) {\n return v;\n }\n }\n const { keyMap } = context;\n const seriesDataKey = this._getSeriesDataKey(datum);\n if (keyMap.get(seriesDataKey) === undefined) {\n keyMap.set(seriesDataKey, 0);\n\n return seriesDataKey;\n }\n\n keyMap.set(seriesDataKey, keyMap.get(seriesDataKey) + 1);\n return `${seriesDataKey}_${keyMap.get(seriesDataKey)}`;\n };\n }\n\n if (isString(dataKey)) {\n return (datum: Datum) => datum[dataKey];\n }\n\n if (isArray(dataKey) && dataKey.every(d => isString(d))) {\n return (datum: Datum) => dataKey.map(k => datum[k]).join('-');\n }\n\n if (isFunction(dataKey)) {\n return (datum: Datum, index: number) => dataKey(datum, index);\n }\n\n this._option?.onError(`invalid dataKey: ${dataKey}`);\n return (datum: Datum, index: number) => undefined as string;\n }\n\n protected _addDataIndexAndKey() {\n if (this._rawData?.dataSet) {\n registerDataSetInstanceTransform(this._rawData.dataSet, 'addVChartProperty', addVChartProperty);\n this._rawData.transform(\n {\n type: 'addVChartProperty',\n options: {\n beforeCall: initKeyMap.bind(this),\n call: addDataKey\n }\n },\n false\n );\n }\n }\n\n updateRawData(d: any): void {\n if (!this._rawData) {\n return;\n }\n this._rawData.updateRawData(d);\n }\n rawDataUpdate(d: DataView): void {\n this._rawDataStatistics?.reRunAllTransform();\n this._rawStatisticsCache = null;\n this.event.emit(ChartEvent.rawDataUpdate, { model: this });\n }\n viewDataFilterOver(d: DataView): void {\n this.event.emit(ChartEvent.viewDataFilterOver, { model: this });\n }\n viewDataUpdate(d: DataView): void {\n this.event.emit(ChartEvent.viewDataUpdate, { model: this });\n // 依据数据更新设置渲染结果\n // 初始化时会触发 viewDataUpdate,但是此时 srView 还未生成,因此实际上不会产生多余的 updateData 调用\n this._data?.updateData();\n this._viewDataStatistics && this._viewDataStatistics.reRunAllTransform();\n }\n viewDataStatisticsUpdate(d: DataView): void {\n this.event.emit(ChartEvent.viewDataStatisticsUpdate, { model: this });\n }\n\n // 数据到位置值\n getDatumPositionValue(datum: Datum, field: string) {\n if (!datum || isNil(field)) {\n return null;\n }\n return datum[field];\n }\n getDatumPositionValues(datum: Datum, fields: string | string[]) {\n if (!datum || isNil(fields)) {\n return [];\n }\n\n if (isString(fields)) {\n return [datum[fields]];\n }\n return fields.map(f => datum[f]);\n }\n /** mark end */\n\n /** 获取参与统计的字段与统计类型 */\n abstract getStatisticFields(): {\n key: string;\n operations: StatisticOperations;\n }[];\n /** 获取分组字段 */\n abstract getGroupFields(): string[];\n /** 数据到坐标点的映射 */\n abstract dataToPosition(data: Datum): IPoint;\n /** 数据到 x 坐标点的映射 */\n abstract dataToPositionX(data: Datum): number;\n /** 数据到 y 坐标点的映射 */\n abstract dataToPositionY(data: Datum): number;\n /** 数据到坐标点的映射 */\n abstract valueToPosition(value1: any, value2?: any): IPoint;\n abstract initMark(): void;\n abstract initMarkStyle(): void;\n\n /** stack start */\n abstract getStackGroupFields(): string[];\n abstract getStackValueField(): string | undefined;\n setValueFieldToStack() {\n // do nothing\n }\n setValueFieldToPercent() {\n // do nothing;\n }\n setValueFieldToStackOffsetSilhouette() {\n // do nothing\n }\n\n /** 获取系列中可以被操作的mark(brush需要通过在图元spec中内置state的方式实现框选样式,所以需要获取可被框选的mark) */\n abstract getActiveMarks(): IMark[];\n\n initRootMark() {\n this._rootMark = this._createMark(\n { type: MarkTypeEnum.group, name: `seriesGroup_${this.type}_${this.id}` },\n {\n parent: this._region.getGroupMark?.(),\n dataView: false\n }\n ) as IGroupMark;\n this._rootMark.setZIndex(this.layoutZIndex);\n }\n\n protected _initExtensionMark(options: { hasAnimation: boolean }) {\n if (!this._spec.extensionMark) {\n return;\n }\n this._spec.extensionMark?.forEach((m, i) => {\n this._createExtensionMark(m, null, `${PREFIX}_series_${this.id}_extensionMark`, i, options);\n });\n }\n\n private _createExtensionMark(\n spec: IExtensionMarkSpec> | IExtensionGroupMarkSpec,\n parentMark: null | IGroupMark,\n namePrefix: string,\n index: number,\n options: { hasAnimation: boolean }\n ) {\n const mark = this._createMark(\n { type: spec.type, name: `${namePrefix}_${index}` },\n {\n // 避免二次dataflow\n skipBeforeLayouted: true,\n markSpec: spec,\n parent: parentMark,\n dataView: false,\n customShape: spec?.customShape\n }\n ) as IGroupMark;\n if (!mark) {\n return;\n }\n\n if (options.hasAnimation) {\n // 自定义图元默认不添加动画\n const config = animationConfig({}, userAnimationConfig(spec.type, spec as any, this._markAttributeContext));\n mark.setAnimationConfig(config);\n }\n\n if (spec.type === 'group') {\n namePrefix = `${namePrefix}_${index}`;\n spec.children?.forEach((s, i) => {\n this._createExtensionMark(s as any, mark, namePrefix, i, options);\n });\n } else if (!parentMark && (!isNil(spec.dataId) || !isNil(spec.dataIndex))) {\n const dataView = this._option.getSeriesData(spec.dataId, spec.dataIndex);\n if (dataView === this._rawData) {\n mark.setDataView(this.getViewData(), this.getViewDataProductId());\n } else {\n mark.setDataView(dataView);\n }\n }\n }\n\n protected _updateExtensionMarkSpec(lastSpec?: any) {\n this._spec.extensionMark?.forEach((spec, i) => {\n const mark = this._marks.getMarkWithInfo({ name: `${this.type}_${this.id}_extensionMark_${i}` });\n if (!mark) {\n return;\n }\n if (lastSpec && isEqual(lastSpec.extensionMark?.[i], spec)) {\n return;\n }\n this.initMarkStyleWithSpec(mark, spec);\n mark.updateStaticEncode();\n mark.updateLayoutState();\n });\n }\n\n getStackData(): ISeriesStackData {\n return this._viewStackData?.latestData;\n }\n /** stack end */\n\n /** mark */\n initTrigger() {\n const triggerSpec = {\n hover: this._spec.hover,\n select: this._spec.select\n };\n const triggerOptions = {\n ...this._option,\n model: this,\n interaction: this._region.interaction\n };\n this._trigger = new Trigger(triggerSpec, triggerOptions);\n }\n\n initAnimation() {\n // do nothing\n }\n\n initMarkState() {\n this.initSeriesStyleState();\n }\n\n /**\n * 初始化initSeriesStyleState所对应的state,配置series-style数组会转化到state实现,每一个seriesItem都对应一个state\n * @returns\n */\n initSeriesStyleState() {\n const seriesStyle = this._spec.seriesStyle;\n if (!seriesStyle || !seriesStyle.length) {\n return;\n }\n const groupBy = this._seriesField ?? DEFAULT_DATA_SERIES_FIELD;\n this.getMarksWithoutRoot().forEach(mark => {\n const filterMap: { [key: string]: true } = {};\n const attrMap: { [key: string]: true } = {};\n const markStyle: { [key: string]: { [key: string]: any } } = {};\n seriesStyle.forEach(item => {\n const style = item[mark.name]?.style;\n if (style) {\n filterMap[item.name] = true;\n markStyle[item.name] = markStyle[item.name] || {};\n Object.keys(style).forEach(key => {\n attrMap[key] = true;\n markStyle[item.name][key] = style[key];\n });\n }\n });\n mark.state.addStateInfo({\n stateValue: DEFAULT_SERIES_STYLE_NAME,\n level: -1,\n filter: (datum: Datum) => {\n if (Array.isArray(datum)) {\n if (datum.length === 0) {\n return false;\n }\n return filterMap[datum[0][groupBy]] === true;\n }\n return filterMap[datum[groupBy]] === true;\n }\n });\n const style = {};\n Object.keys(attrMap).forEach(key => {\n style[key] = (datum: Datum) => {\n let style;\n if (Array.isArray(datum)) {\n if (datum.length === 0) {\n return undefined;\n }\n style = markStyle[datum[0][groupBy]]?.[key];\n }\n style = markStyle[datum[groupBy]]?.[key];\n if (style) {\n return style;\n }\n return mark.getAttribute(key as any, datum);\n };\n });\n this.setMarkStyle(mark, style, DEFAULT_SERIES_STYLE_NAME);\n });\n }\n\n afterInitMark(): void {\n this.event.emit(ChartEvent.afterInitMark, { model: this });\n this.setSeriesField(this._spec.seriesField);\n\n let animationThreshold = this._spec.animationThreshold ?? Number.MAX_SAFE_INTEGER;\n // set mark stroke color follow series color\n // only set normal state in the level lower than level Series\n this.getMarks().forEach(m => {\n if (m.stateStyle?.normal?.lineWidth) {\n m.setAttribute('stroke', this.getColorAttribute(), 'normal', AttributeLevel.Base_Series);\n }\n const config = m.getProgressiveConfig();\n if (config) {\n if (config.large && config.largeThreshold) {\n animationThreshold = Math.min(animationThreshold, config.largeThreshold);\n }\n if (config.progressiveThreshold) {\n animationThreshold = Math.min(animationThreshold, config.progressiveThreshold);\n }\n }\n });\n // auto close animation\n if (this._rawData?.latestData?.length >= animationThreshold) {\n this._spec.animation = false;\n }\n }\n\n getMarksWithoutRoot(): IMark[] {\n return this.getMarks().filter(m => !m.name.includes('seriesGroup'));\n }\n getMarksInType(type: string | string[]): IMark[] {\n return this._marks.getMarksInType(type);\n }\n getMarkInName(name: string): IMark | undefined {\n return this._marks.get(name);\n }\n getMarkInId(markId: number): IMark | undefined {\n return this.getMarks().find(m => m.id === markId);\n }\n /** mark end */\n\n /** event */\n protected initEvent() {\n this._trigger.init();\n this._data?.getDataView()?.target.addListener('change', this.viewDataUpdate.bind(this));\n this._viewDataStatistics?.target.addListener('change', this.viewDataStatisticsUpdate.bind(this));\n }\n\n protected _releaseEvent(): void {\n super._releaseEvent();\n this._trigger.release();\n }\n\n /** event end */\n\n /** 初始化tooltip helper */\n protected initTooltip() {\n this._tooltipHelper = new BaseSeriesTooltipHelper(this);\n }\n\n /** updateSpec */\n _compareSpec(spec: T, prevSpec: T, ignoreCheckKeys?: { [key: string]: true }) {\n const result = super._compareSpec(spec, prevSpec);\n\n const currentKeys = Object.keys(prevSpec || {}).sort();\n const nextKeys = Object.keys(spec || {}).sort();\n if (!isEqual(currentKeys, nextKeys)) {\n result.reMake = true;\n return result;\n }\n\n ignoreCheckKeys = ignoreCheckKeys ?? { data: true };\n\n ignoreCheckKeys.invalidType = true;\n if (spec.invalidType !== prevSpec.invalidType) {\n result.reCompile = true;\n }\n\n ignoreCheckKeys.extensionMark = true;\n if (\n array(spec.extensionMark).length !== array(prevSpec.extensionMark).length ||\n (>prevSpec.extensionMark)?.some(\n (mark, index) => mark.type !== spec.extensionMark[index].type || mark.id !== spec.extensionMark[index].id\n )\n ) {\n result.reMake = true;\n }\n\n if (result.reMake) {\n return result;\n }\n\n // mark visible logic in compile\n if (\n (>prevSpec.extensionMark)?.some((mark, index) => mark.visible !== spec.extensionMark[index].visible)\n ) {\n result.reCompile = true;\n }\n\n // mark visible logic in compile\n if (\n this._marks.getMarks().some(m => {\n ignoreCheckKeys[m.name] = true;\n return prevSpec[m.name]?.visible !== spec[m.name]?.visible;\n })\n ) {\n result.reCompile = true;\n }\n\n if (\n currentKeys.some(k => {\n if (ignoreCheckKeys[k]) {\n return false;\n } else if (!isEqual(spec[k], prevSpec[k])) {\n return true;\n }\n return false;\n })\n ) {\n result.reMake = true;\n return result;\n }\n\n return result;\n }\n\n _updateSpecData() {\n if (this._rawData && this._spec.data && !(this._spec.data instanceof DataView)) {\n updateDataViewInData(this._rawData, this._spec.data, true);\n }\n }\n\n reInit(spec?: T) {\n super.reInit(spec);\n\n const marks = this.getMarksWithoutRoot();\n // FIXME: 合并 mark spec 的时机是否需要统一调整到 this.initMarkStyle() 中?\n marks.forEach(mark => {\n this._spec[mark.name] && this.initMarkStyleWithSpec(mark, this._spec[mark.name]);\n });\n this.initMarkStyle();\n marks.forEach(mark => {\n mark.updateStaticEncode();\n mark.updateLayoutState(true);\n });\n this._updateExtensionMarkSpec(spec);\n this._updateSpecData();\n\n if (this._tooltipHelper) {\n this._tooltipHelper.updateTooltipSpec();\n }\n }\n\n // 首次布局完成后填充系列数据\n onEvaluateEnd(ctx: IModelEvaluateOption): void {\n this._data.updateData();\n }\n onRender(ctx: IModelRenderOption): void {\n return;\n }\n release(): void {\n super.release();\n this._viewDataMap.clear();\n // TODO: rawData transform clear;\n // this._dataSet=>// _rawData.tag = vchart\n // clear add transforms of rawData\n const transformIndex = this._rawData?.transformsArr?.findIndex(t => t.type === 'addVChartProperty');\n if (transformIndex >= 0) {\n this._rawData.transformsArr.splice(transformIndex, 1);\n }\n this._data?.release();\n this._dataSet =\n this._data =\n this._rawData =\n this._rawDataStatistics =\n this._spec =\n this._region =\n this._viewDataStatistics =\n this._viewStackData =\n null;\n }\n\n setLayoutStartPosition(pos: Partial): void {\n if (isValidNumber(pos.x)) {\n this._layoutStartPoint.x = pos.x;\n }\n if (isValidNumber(pos.y)) {\n this._layoutStartPoint.y = pos.y;\n }\n }\n\n setLayoutRect({ width, height }: Partial, levelMap?: Partial) {\n if (isValidNumber(width)) {\n this._layoutRect.width = width;\n }\n\n if (isValidNumber(height)) {\n this._layoutRect.height = height;\n }\n }\n\n /** seriesField */\n getSeriesKeys(): string[] {\n if (this._seriesField) {\n return this.getRawDataStatisticsByField(this._seriesField)?.values ?? [];\n }\n if (this.name) {\n return [this.name];\n }\n if (this.userId) {\n return [`${this.userId}`];\n }\n return [`${this.type}_${this.id}`];\n }\n\n getSeriesStyle(datum: Datum) {\n return (attribute: string) => this._seriesMark?.getAttribute(attribute as any, datum) ?? undefined;\n }\n\n protected _getSeriesInfo(field: string, keys: string[]) {\n const defaultShapeType = this.getDefaultShapeType();\n return keys.map(key => {\n return {\n key,\n style: this.getSeriesStyle({\n [field]: key\n }),\n shapeType: defaultShapeType\n };\n });\n }\n\n getSeriesInfoInField(field: string) {\n return this._getSeriesInfo(field, this.getRawDataStatisticsByField(field)?.values ?? []);\n }\n\n getSeriesInfoList() {\n return this._getSeriesInfo(this._seriesField ?? DEFAULT_DATA_SERIES_FIELD, this.getSeriesKeys());\n }\n\n /** seriesField end */\n\n // get default color scale\n // 重复代码太多了,整合一下\n protected _getDefaultColorScale() {\n const colorDomain = this.getDefaultColorDomain();\n const colorRange = this._getDataScheme();\n return new ColorOrdinalScale().domain(colorDomain).range?.(colorRange);\n }\n\n protected _getDataScheme() {\n return getDataScheme(this.getColorScheme(), this.type as any);\n }\n\n /** 获取默认 color scale 的 domain */\n getDefaultColorDomain(): any[] {\n return this._seriesField ? this.getViewDataStatistics()?.latestData[this._seriesField]?.values : [];\n }\n\n // 通用的默认颜色映射 用户设置优先级比这个高,会在setStyle中处理\n getColorAttribute() {\n return {\n scale: this._option.globalScale.getScale('color') ?? this._getDefaultColorScale(),\n field: this._seriesField ?? DEFAULT_DATA_SERIES_FIELD\n };\n }\n\n /** 获取维度field */\n getDimensionField(): string[] {\n return [];\n }\n /** 获取指标field */\n getMeasureField(): string[] {\n return [];\n }\n\n // 用于 axisHelper 更新\n protected onMarkPositionUpdate(): void {\n this.onMarkTreePositionUpdate(this.getMarksWithoutRoot());\n }\n\n protected onMarkTreePositionUpdate(marks: IMark[]): void {\n // do nothing\n }\n\n protected _createMark(markInfo: ISeriesMarkInfo, option: ISeriesMarkInitOption = {}) {\n const {\n key,\n groupKey,\n skipBeforeLayouted,\n themeSpec = {},\n markSpec,\n dataView,\n dataProductId,\n parent,\n isSeriesMark,\n depend,\n progressive,\n support3d = this._spec.support3d || !!(this._spec as any).zField,\n morph = false,\n customShape\n } = option;\n const m = super._createMark(markInfo, {\n key: key ?? this._getDataIdKey(),\n support3d,\n seriesId: this.id,\n attributeContext: this._markAttributeContext\n });\n if (isValid(m)) {\n this._marks.addMark(m, { name: markInfo.name });\n\n if (isSeriesMark) {\n this._seriesMark = m;\n }\n\n if (isNil(parent)) {\n this._rootMark?.addMark(m);\n } else if (parent !== false) {\n parent.addMark(m);\n }\n\n if (isNil(dataView)) {\n m.setDataView(this.getViewData(), this.getViewDataProductId());\n m.setSkipBeforeLayouted(true);\n } else if (dataView !== false) {\n m.setDataView(dataView, dataProductId);\n }\n\n if (isBoolean(skipBeforeLayouted)) {\n m.setSkipBeforeLayouted(skipBeforeLayouted);\n }\n\n if (isValid(depend)) {\n m.setDepend(...array(depend));\n }\n\n const spec = this.getSpec() || ({} as T);\n\n m.setMorph(morph);\n m.setMorphKey(spec.morph?.morphKey || `${this._specIndex}`);\n m.setMorphElementKey(spec.morph?.morphElementKey ?? option.defaultMorphElementKey);\n\n if (!isNil(progressive)) {\n m.setProgressiveConfig(progressive);\n }\n\n if (!isNil(groupKey)) {\n m.setGroupKey(groupKey);\n }\n\n if (customShape) {\n m.setCustomizedShapeCallback(customShape);\n }\n\n this.initMarkStyleWithSpec(m, mergeSpec({}, themeSpec, markSpec || spec[m.name]));\n }\n return m;\n }\n\n protected _getDataIdKey() {\n // 系列图元默认使用 rawData 初始生成的唯一数据 id 作为 key\n return super._getDataIdKey() ?? DEFAULT_DATA_KEY;\n }\n\n /**\n * 默认数据 id 生成逻辑。\n * 数据中的 维度A的值_维度B的值_***_维度C的值_seriesField的值_index\n * index作用是为了避免 id 重复\n */\n protected _getSeriesDataKey(datum: Datum) {\n let key = '';\n if (!datum) {\n return key;\n }\n\n const dimensionFields = this.getDimensionField();\n key = dimensionFields.map(field => datum[field]).join('_');\n\n const seriesField = this.getSeriesField();\n\n if (seriesField && !dimensionFields.includes(seriesField)) {\n key += `_${datum[seriesField]}`;\n }\n\n return key;\n }\n\n /**\n * data\n */\n addViewDataFilter(option: ITransformOptions) {\n (this._viewDataFilter ?? this.getViewData())?.transform(option, false);\n }\n\n reFilterViewData() {\n (this._viewDataFilter ?? this.getViewData())?.reRunAllTransform();\n }\n\n reTransformViewData() {\n this._data?.getDataView()?.reRunAllTransform();\n }\n\n fillData() {\n this.getRawData()?.reRunAllTransform();\n }\n\n compile() {\n this.compileData(); // 系列只需要编译数据,mark 将在 region 编译过程中编译\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getFieldAlias(field: string) {\n if (\n field === STACK_FIELD_END ||\n field === STACK_FIELD_END_PERCENT ||\n field === STACK_FIELD_START ||\n field === STACK_FIELD_START_PERCENT\n ) {\n field = this.getStackValueField();\n }\n return getFieldAlias(this.getRawData(), field) ?? field;\n }\n\n getMarkInfoList() {\n const list = super.getMarkInfoList();\n if (!list.length) {\n return Object.values(seriesMarkInfoMap[this.type] ?? {});\n }\n return list;\n }\n\n protected _getInvalidConnectType() {\n return this._invalidType === 'zero' ? 'zero' : this._invalidType === 'link' ? 'connect' : 'none';\n }\n\n protected _getInvalidDefined = (datum: Datum) => couldBeValidNumber(datum[this.getStackValueField()]);\n}\n","import type { IAxisHelper as CartesianHelper } from '../../component/axis/cartesian/interface/common';\nimport { SeriesTypeEnum } from '../interface/type';\nimport type { Datum } from '../../typings';\nimport { isContinuous } from '@visactor/vscale';\nimport type { IPolarAxisHelper } from '../../component/axis';\nimport type { ICartesianSeries, ISeries } from '..';\n\nexport function isPolarAxisSeries(type: string) {\n return ([SeriesTypeEnum.rose, SeriesTypeEnum.radar, SeriesTypeEnum.circularProgress] as string[]).includes(type);\n}\n\nexport function sortDataInAxisHelper(axisHelper: CartesianHelper | IPolarAxisHelper, field: string, dataList: Datum[]) {\n const scale = axisHelper.getScale(0);\n const isRevert = 'isInverse' in axisHelper ? axisHelper.isInverse() : false;\n if (isContinuous(scale.type)) {\n dataList.sort((datumA: Datum, datumB: Datum) => {\n return (datumA[field] - datumB[field]) * (isRevert ? -1 : 1);\n });\n } else {\n dataList.sort((datumA: Datum, datumB: Datum) => {\n // @ts-ignore TODO: vscale support api to get index\n return (scale._index.get(datumA[field]) - scale._index.get(datumB[field])) * (isRevert ? -1 : 1);\n });\n }\n}\n\nexport function getGroupAnimationParams(series: ICartesianSeries) {\n // 分组数据的 dataIndex 应该与轴顺序一致,而非 data[DEFAULT_DATA_INDEX] 顺序\n const dataIndex = (datum: any) => {\n const indexField = series.direction === 'horizontal' ? series.fieldY[0] : series.fieldX[0];\n const indexValue = datum?.[indexField];\n const scale = series.direction === 'horizontal' ? series.scaleY : series.scaleX;\n const index = (scale?.domain?.() ?? []).indexOf(indexValue);\n // 不应该出现xIndex === -1 || undefined的情况\n return index || 0;\n };\n const dataCount = () => {\n const scale = series.direction === 'horizontal' ? series.scaleY : series.scaleX;\n return (scale?.domain?.() ?? []).length ?? 0;\n };\n return { dataIndex, dataCount };\n}\n","import type { DataView } from '@visactor/vdataset';\nimport type { ICartesianSeries } from '../interface';\nimport { BaseSeries } from '../base/base-series';\nimport type { IPoint } from '../../typings/coordinate';\nimport type { IBaseScale } from '@visactor/vscale';\nimport {\n STACK_FIELD_END,\n STACK_FIELD_END_PERCENT,\n STACK_FIELD_END_OffsetSilhouette,\n STACK_FIELD_START,\n STACK_FIELD_START_PERCENT,\n STACK_FIELD_START_OffsetSilhouette,\n PREFIX\n} from '../../constant';\nimport type { IAxisHelper } from '../../component/axis/cartesian/interface';\nimport type { DirectionType } from '../../typings/space';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../typings/space';\nimport type { Datum, StringOrNumber } from '../../typings';\nimport { couldBeValidNumber } from '../../util/type';\nimport { array, isValid } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous } from '@visactor/vscale';\nimport type { StatisticOperations } from '../../data/transforms/dimension-statistics';\nimport type { ICartesianSeriesSpec } from './interface';\nimport { sortDataInAxisHelper } from '../util/utils';\nimport type { IAxisLocationCfg } from '../../component/axis';\n\nexport abstract class CartesianSeries\n extends BaseSeries\n implements ICartesianSeries\n{\n readonly coordinate: 'cartesian' = 'cartesian';\n protected _bandPosition = 0.5;\n protected _scaleConfig: IAxisLocationCfg = {\n bandPosition: this._bandPosition\n };\n protected _buildScaleConfig() {\n this._scaleConfig = {\n bandPosition: this._bandPosition\n };\n }\n\n protected _fieldX!: string[];\n get fieldX() {\n return this._fieldX;\n }\n setFieldX(f: string | string[]) {\n this._fieldX = array(f);\n }\n\n protected _fieldY!: string[];\n get fieldY() {\n return this._fieldY;\n }\n setFieldY(f: string | string[]) {\n this._fieldY = array(f);\n }\n\n protected _fieldZ?: string[];\n get fieldZ(): string[] | undefined {\n return this._fieldZ;\n }\n setFieldZ(f?: string | string[]) {\n this._fieldZ = f && array(f);\n }\n\n protected _fieldX2!: string;\n get fieldX2() {\n return this._fieldX2;\n }\n setFieldX2(f: string) {\n this._fieldX2 = f;\n }\n\n protected _fieldY2!: string;\n get fieldY2() {\n return this._fieldY2;\n }\n setFieldY2(f: string) {\n this._fieldY2 = f;\n }\n\n protected _specXField: string[];\n protected _specYField: string[];\n\n protected _direction: DirectionType = Direction.vertical;\n get direction() {\n return this._direction;\n }\n\n protected _scaleX!: IBaseScale;\n get scaleX() {\n return this._scaleX;\n }\n setScaleX(s: IBaseScale) {\n this._scaleX = s;\n }\n\n protected _scaleY!: IBaseScale;\n get scaleY() {\n return this._scaleY;\n }\n setScaleY(s: IBaseScale) {\n this._scaleY = s;\n }\n\n protected _scaleZ?: IBaseScale;\n get scaleZ() {\n return this._scaleZ;\n }\n setScaleZ(s: IBaseScale) {\n this._scaleZ = s;\n }\n\n _xAxisHelper!: IAxisHelper;\n getXAxisHelper() {\n return this._xAxisHelper;\n }\n setXAxisHelper(h: IAxisHelper) {\n this._xAxisHelper = h;\n this.onXAxisHelperUpdate();\n }\n\n _yAxisHelper!: IAxisHelper;\n getYAxisHelper() {\n return this._yAxisHelper;\n }\n setYAxisHelper(h: IAxisHelper) {\n this._yAxisHelper = h;\n this.onYAxisHelperUpdate();\n }\n\n _zAxisHelper?: IAxisHelper;\n getZAxisHelper() {\n return this._zAxisHelper;\n }\n setZAxisHelper(h: IAxisHelper) {\n this._zAxisHelper = h;\n this.onYAxisHelperUpdate();\n }\n\n protected _sortDataByAxis: boolean = false;\n get sortDataByAxis() {\n return this._sortDataByAxis;\n }\n\n getStatisticFields() {\n const fields: { key: string; operations: StatisticOperations }[] = [];\n if (this.getXAxisHelper()?.getScale) {\n (this._fieldX2 ? [...this._fieldX, this._fieldX2] : this._fieldX).forEach(f => {\n const result: { key: string; operations: Array<'max' | 'min' | 'values'> } = { key: f, operations: [] };\n if (isContinuous(this.getXAxisHelper().getScale(0).type)) {\n result.operations = ['max', 'min'];\n } else {\n result.operations = ['values'];\n }\n fields.push(result);\n });\n }\n if (this.getYAxisHelper()?.getScale) {\n (this._fieldY2 ? [...this._fieldY, this._fieldY2] : this._fieldY).forEach(f => {\n const result: { key: string; operations: Array<'max' | 'min' | 'values'> } = { key: f, operations: [] };\n if (isContinuous(this.getYAxisHelper().getScale(0).type)) {\n result.operations = ['max', 'min'];\n } else {\n result.operations = ['values'];\n }\n fields.push(result);\n });\n }\n if (this._fieldZ && this.getZAxisHelper()?.getScale) {\n this._fieldZ.forEach(f => {\n const result: { key: string; operations: Array<'max' | 'min' | 'values'> } = { key: f, operations: [] };\n if (isContinuous(this.getZAxisHelper().getScale(0).type)) {\n result.operations = ['max', 'min'];\n } else {\n result.operations = ['values'];\n }\n fields.push(result);\n });\n }\n if (this.getStack()) {\n fields.push({\n key: this.getStackValueField(),\n operations: ['allValid']\n });\n }\n return fields;\n }\n\n getGroupFields() {\n return this.direction === 'vertical' ? this._fieldX : this._fieldY;\n }\n\n getStackGroupFields(): string[] {\n return this.getGroupFields();\n }\n\n getStackValue() {\n return (\n this._spec.stackValue ??\n `${PREFIX}_series_${this.type}_${(this.direction === Direction.horizontal\n ? this.getXAxisHelper()\n : this.getYAxisHelper()\n ).getAxisId()}`\n );\n }\n\n getStackValueField() {\n // TODO: hack\n if (this.direction === Direction.vertical) {\n return array(this._spec.yField)[0];\n }\n return array(this._spec.xField)[0];\n }\n\n setValueFieldToStack(): void {\n if (this.direction === Direction.vertical) {\n this.setFieldY(STACK_FIELD_END);\n this.setFieldY2(STACK_FIELD_START);\n } else {\n this.setFieldX(STACK_FIELD_END);\n this.setFieldX2(STACK_FIELD_START);\n }\n }\n\n setValueFieldToPercent(): void {\n if (this.direction === Direction.vertical) {\n this.setFieldY(STACK_FIELD_END_PERCENT);\n this.setFieldY2(STACK_FIELD_START_PERCENT);\n } else {\n this.setFieldX(STACK_FIELD_END_PERCENT);\n this.setFieldX2(STACK_FIELD_START_PERCENT);\n }\n }\n\n setValueFieldToStackOffsetSilhouette(): void {\n if (this.direction === Direction.vertical) {\n this.setFieldY(STACK_FIELD_END_OffsetSilhouette);\n this.setFieldY2(STACK_FIELD_START_OffsetSilhouette);\n } else {\n this.setFieldX(STACK_FIELD_END_OffsetSilhouette);\n this.setFieldX2(STACK_FIELD_START_OffsetSilhouette);\n }\n }\n\n onXAxisHelperUpdate(): void {\n this.onMarkPositionUpdate();\n }\n\n onYAxisHelperUpdate(): void {\n this.onMarkPositionUpdate();\n }\n\n onZAxisHelperUpdate(): void {\n this.onMarkPositionUpdate();\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.setFieldX(this._spec.xField);\n this.setFieldY(this._spec.yField);\n this.setFieldZ(this._spec.zField);\n this._specXField = array(this._spec.xField);\n this._specYField = array(this._spec.yField);\n if (isValid(this._spec.direction)) {\n this._direction = this._spec.direction;\n }\n\n this.setFieldX2(this._spec?.x2Field);\n this.setFieldY2(this._spec?.y2Field);\n\n if (this._stack) {\n this.setValueFieldToStack();\n }\n if (this._percent) {\n this.setValueFieldToPercent();\n }\n if (this._stackOffsetSilhouette) {\n this.setValueFieldToStackOffsetSilhouette();\n }\n\n if (isValid(this._spec.sortDataByAxis)) {\n this._sortDataByAxis = this._spec.sortDataByAxis === true;\n }\n }\n\n dataToPosition(datum: Datum): IPoint | null {\n if (!datum) {\n return null;\n }\n return {\n x: this.dataToPositionX(datum),\n y: this.dataToPositionY(datum)\n } as IPoint;\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n // position\n this._markAttributeContext.valueToX = this.valueToPositionX.bind(this);\n this._markAttributeContext.valueToY = this.valueToPositionY.bind(this);\n this._markAttributeContext.xBandwidth = (depth: number = 0) => this.getXAxisHelper().getBandwidth?.(depth) ?? 0;\n this._markAttributeContext.yBandwidth = (depth: number = 0) => this.getYAxisHelper().getBandwidth?.(depth) ?? 0;\n this._markAttributeContext.valueToPosition = this.valueToPosition.bind(this);\n }\n\n valueToPosition(xValue: StringOrNumber | StringOrNumber[], yValue: StringOrNumber | StringOrNumber[]) {\n return {\n x: this.valueToPositionX(xValue),\n y: this.valueToPositionY(yValue)\n };\n }\n\n protected _axisPosition(helper: IAxisHelper, value: StringOrNumber | StringOrNumber[], datum?: any) {\n this._scaleConfig.datum = datum;\n if (helper.isContinuous) {\n return helper.valueToPosition(value, this._scaleConfig);\n }\n return helper.dataToPosition(array(value), this._scaleConfig);\n }\n\n valueToPositionX(value: StringOrNumber | StringOrNumber[], datum?: any) {\n return this._axisPosition(this._xAxisHelper, value, datum);\n }\n valueToPositionY(value: StringOrNumber | StringOrNumber[], datum?: any) {\n return this._axisPosition(this._yAxisHelper, value, datum);\n }\n\n protected _positionXEncoder?: (datum: Datum) => number;\n\n dataToPositionX(datum: Datum): number {\n if (this._positionXEncoder) {\n return this._positionXEncoder(datum);\n }\n\n if (!this._xAxisHelper) {\n this._positionXEncoder = (datum: Datum) => Number.NaN;\n\n return Number.NaN;\n }\n const fields = this._xAxisHelper.getFields ? this._xAxisHelper.getFields() : this._fieldX;\n if (!fields || fields.length === 0) {\n this._positionXEncoder = (datum: Datum) => null;\n return null;\n }\n\n if (this._xAxisHelper.isContinuous) {\n this._positionXEncoder = (datum: Datum) => {\n this._scaleConfig.datum = datum;\n return this._xAxisHelper.valueToPosition(this.getDatumPositionValue(datum, fields[0]), this._scaleConfig);\n };\n } else {\n this._positionXEncoder = (datum: Datum) => {\n this._scaleConfig.datum = datum;\n return this._xAxisHelper.dataToPosition(array(this.getDatumPositionValues(datum, fields)), this._scaleConfig);\n };\n }\n\n return this._positionXEncoder(datum);\n }\n\n protected _positionYEncoder?: (datum: Datum) => number;\n\n dataToPositionY(datum: Datum): number {\n if (this._positionYEncoder) {\n return this._positionYEncoder(datum);\n }\n\n if (!this._yAxisHelper) {\n this._positionYEncoder = (datum: Datum) => Number.NaN;\n return Number.NaN;\n }\n const fields = this._yAxisHelper.getFields ? this._yAxisHelper.getFields() : this._fieldY;\n if (!fields || fields.length === 0) {\n this._positionYEncoder = (datum: Datum) => null;\n return null;\n }\n\n if (this._yAxisHelper.isContinuous) {\n this._positionYEncoder = (datum: Datum) => {\n this._scaleConfig.datum = datum;\n return this._yAxisHelper.valueToPosition(this.getDatumPositionValue(datum, fields[0]), this._scaleConfig);\n };\n } else {\n this._positionYEncoder = (datum: Datum) => {\n this._scaleConfig.datum = datum;\n return this._yAxisHelper.dataToPosition(array(this.getDatumPositionValues(datum, fields)), this._scaleConfig);\n };\n }\n\n return this._positionYEncoder(datum);\n }\n\n dataToPositionZ(datum: Datum): number {\n if (!this._zAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._zAxisHelper;\n\n return dataToPosition(this.getDatumPositionValues(datum, this._fieldZ), {\n bandPosition: this._bandPosition\n });\n }\n\n dataToPositionX1(datum: Datum): number {\n if (!this._xAxisHelper) {\n return Number.NaN;\n }\n return this._fieldX2 && this._fieldX2 in datum\n ? this.valueToPositionX(this.getDatumPositionValues(datum, this._fieldX2))\n : this.valueToPositionX(0);\n }\n\n dataToPositionY1(datum: Datum): number {\n if (!this._yAxisHelper) {\n return Number.NaN;\n }\n return this._fieldY2 && this._fieldY2 in datum\n ? this.valueToPositionY(this.getDatumPositionValues(datum, this._fieldY2))\n : this.valueToPositionY(0);\n }\n\n positionToData(p: IPoint): IPoint | null {\n if (!p) {\n return null;\n }\n return {\n x: this.positionToDataX(p.x),\n y: this.positionToDataY(p.y)\n };\n }\n\n positionToDataX(xPos: number): any | null {\n if (!this._scaleX) {\n return null;\n }\n return this._scaleX.invert(xPos);\n }\n\n positionToDataY(yPos: number): any | null {\n if (!this._scaleY) {\n return null;\n }\n return this._scaleY.invert(yPos);\n }\n\n getRegionRectLeft(): number {\n if (!this._xAxisHelper) {\n return Number.NaN;\n }\n const { getScale } = this._xAxisHelper;\n return getScale(0).range()[0];\n }\n\n getRegionRectRight(): number {\n if (!this._xAxisHelper) {\n return Number.NaN;\n }\n const { getScale } = this._xAxisHelper;\n return getScale(0).range()[1];\n }\n\n afterInitMark(): void {\n super.afterInitMark();\n this.setFieldX(this._fieldX);\n this.setFieldY(this._fieldY);\n this._trigger.setStateKeys([...this._fieldX, ...this._fieldY]);\n this._buildScaleConfig();\n }\n\n getDimensionField(): string[] {\n if (this._direction === Direction.vertical) {\n return this._specXField;\n }\n return this._specYField;\n }\n\n getMeasureField(): string[] {\n if (this._direction === Direction.vertical) {\n return this._specYField;\n }\n return this._specXField;\n }\n\n viewDataUpdate(d: DataView): void {\n super.viewDataUpdate(d);\n if (this.sortDataByAxis) {\n this._sortDataInAxisDomain();\n }\n }\n\n _sortDataInAxisDomain() {\n if (this.getViewData()?.latestData?.length) {\n sortDataInAxisHelper(\n this._direction === Direction.horizontal ? this._yAxisHelper : this._xAxisHelper,\n this._direction === Direction.horizontal ? this._fieldY[0] : this._fieldX[0],\n this.getViewData().latestData\n );\n this._data?.updateData(true);\n }\n }\n\n protected _getInvalidDefined = (datum: Datum) => {\n if (this._xAxisHelper?.isContinuous) {\n if (!couldBeValidNumber(datum[this._specXField[0]])) {\n return false;\n }\n }\n if (this._yAxisHelper?.isContinuous) {\n if (!couldBeValidNumber(datum[this._specYField[0]])) {\n return false;\n }\n }\n return true;\n };\n\n reInit(spec: T) {\n if (this._positionXEncoder) {\n this._positionXEncoder = null;\n }\n if (this._positionYEncoder) {\n this._positionYEncoder = null;\n }\n\n super.reInit(spec);\n }\n}\n","export type InterpolateType =\n | 'basis'\n | 'bundle'\n | 'cardinal'\n | 'catmullRom'\n | 'linear'\n | 'monotone'\n | 'monotoneX'\n | 'monotoneY'\n | 'natural'\n | 'step'\n | 'stepAfter'\n | 'stepBefore'\n | 'linearClosed'\n | 'cardinalClosed';\n\nexport const DEFAULT_SMOOTH_INTERPOLATE = 'monotone';\nexport const DEFAULT_LINEAR_INTERPOLATE = 'linear';\nexport const DEFAULT_LINEAR_CLOSED_INTERPOLATE = 'linearClosed';\nexport const DEFAULT_CIRCLE_CLOSED_INTERPOLATE = 'cardinalClosed';\n","import { PREFIX } from '../../constant/base';\nimport type { ISeriesOption } from '../interface/common';\nimport { DataView } from '@visactor/vdataset';\nimport { ChartEvent } from '../../constant/event';\nimport type { ITrigger } from '../../interaction/interface';\nimport type { ISeries } from '../interface/series';\nimport { AttributeLevel } from '../../constant';\n\nimport type { IMark, IMarkProgressiveConfig } from '../../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type { ILineMark } from '../../mark/line';\nimport type { ISymbolMark } from '../../mark/symbol';\nimport type { ITextMark } from '../../mark/text';\nimport type {\n DirectionType,\n IInvalidType,\n InterpolateType,\n ILineMarkSpec,\n ISymbolMarkSpec,\n Maybe,\n Datum,\n IMarkTheme,\n ILayoutRect\n} from '../../typings';\nimport { DEFAULT_LINEAR_INTERPOLATE, DEFAULT_SMOOTH_INTERPOLATE } from '../../typings/interpolate';\nimport { Direction } from '../../typings/space';\n// eslint-disable-next-line no-duplicate-imports\nimport { DEFAULT_CLOSE_STROKE_JOIN } from '../../typings/line-stroke';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ISeriesMarkInfo, ISeriesMarkInitOption, ISeriesTooltipHelper } from '../interface';\nimport type { ILabelSpec, TransformedLabelSpec } from '../../component/label';\nimport { shouldMarkDoMorph } from '../../animation/utils';\nimport { DimensionEventEnum, type DimensionEventParams } from '../../event/events/dimension';\nimport type { EventCallback, EventParams } from '../../event/interface';\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { lineLikeSeriesMark } from './constant';\nimport type { ILabelMark } from '../../mark/label';\nimport type { Functional } from '@visactor/vrender-components';\nimport type { IRegion } from '../../region/interface';\nimport type { SeriesData } from '../base/series-data';\nimport { mergeSpec } from '../../util/spec';\n\nexport interface ILineLikeSeriesTheme {\n line?: Partial>;\n point?: Partial> & { visibleInActive?: boolean };\n label?: Partial;\n}\n\nexport type ILineLikeLabelSpec = Omit & {\n /** 标签位置\n * @since 1.6.0\n * 支持以函数形式配置\n */\n position?: Functional<\n 'top' | 'bottom' | 'left' | 'right' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center'\n >;\n};\n\nexport interface LineLikeSeriesMixin extends ISeries {\n _spec: any;\n _option: ISeriesOption;\n _seriesField: string;\n _theme: Maybe;\n _trigger: ITrigger;\n _tooltipHelper: ISeriesTooltipHelper;\n _invalidType: IInvalidType;\n _region: IRegion;\n _direction: DirectionType;\n _data: SeriesData;\n\n _lineMark: ILineMark;\n _symbolMark: ISymbolMark;\n _symbolActiveMark: ISymbolMark;\n _labelMark: ITextMark;\n _fieldX?: string[];\n _fieldY?: string[];\n _fieldZ?: string[];\n\n _createMark: (markInfo: ISeriesMarkInfo, option?: ISeriesMarkInitOption) => IMark;\n _getInvalidDefined: () => boolean;\n _getInvalidConnectType: () => IInvalidType;\n\n getLayoutRect: () => ILayoutRect;\n}\n\nexport class LineLikeSeriesMixin {\n addSamplingCompile(): void {\n if (this._spec.sampling) {\n const { width, height } = this._region.getLayoutRect();\n const samplingTrans = [];\n const fieldsY = this._fieldY;\n const fieldsX = this._fieldX;\n\n samplingTrans.push({\n type: 'sampling',\n size: this._direction === Direction.vertical ? width : height,\n factor: this._spec.samplingFactor,\n yfield: this._direction === Direction.vertical ? fieldsY[0] : fieldsX[0],\n groupBy: this._seriesField,\n mode: this._spec.sampling\n });\n this._data.getProduct().transform(samplingTrans);\n }\n }\n\n addOverlapCompile(): void {\n if (this._spec.markOverlap) {\n const overlapTrans = [];\n overlapTrans.push({\n type: 'markoverlap',\n direction: this._direction === Direction.horizontal && this.coordinate === 'cartesian' ? 2 : 1,\n delta: this._spec.pointDis,\n deltaMul: this._spec.pointDisMul,\n groupBy: this._seriesField\n });\n this._symbolMark?.getProduct().transform(overlapTrans);\n }\n }\n\n reCompileSampling(): void {\n if (this._spec.sampling) {\n this.compile();\n }\n }\n\n initLineMark(progressive?: IMarkProgressiveConfig, isSeriesMark?: boolean) {\n this._lineMark = this._createMark(lineLikeSeriesMark.line, {\n defaultMorphElementKey: this.getDimensionField()[0],\n groupKey: this._seriesField,\n isSeriesMark: isSeriesMark ?? true,\n progressive,\n customShape: this._spec.line?.customShape\n }) as ILineMark;\n return this._lineMark;\n }\n\n initLineMarkStyle(direction?: DirectionType, areaCurveType?: InterpolateType) {\n const lineMark = this._lineMark;\n if (lineMark) {\n this.setMarkStyle(\n lineMark,\n {\n stroke: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(\n lineMark,\n {\n defined: this._getInvalidDefined,\n connectedType: this._getInvalidConnectType()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n this.event.on(ChartEvent.viewDataStatisticsUpdate, { filter: param => param.model === this }, () => {\n this.encodeDefined(lineMark, 'defined');\n });\n if (this.coordinate === 'polar') {\n // 极坐标系下需要关闭\n this.setMarkStyle(\n lineMark,\n {\n lineJoin: DEFAULT_CLOSE_STROKE_JOIN,\n curveType: DEFAULT_LINEAR_INTERPOLATE,\n closePath: true\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n const userCurveType = areaCurveType ?? this.getSpec().line?.style?.curveType;\n const curveType =\n userCurveType === DEFAULT_SMOOTH_INTERPOLATE\n ? direction === Direction.vertical\n ? 'monotoneX'\n : 'monotoneY'\n : userCurveType;\n\n this.setMarkStyle(\n lineMark,\n {\n curveType\n },\n 'normal',\n AttributeLevel.Built_In\n );\n }\n\n this.setMarkStyle(\n lineMark,\n {\n x: this.dataToPositionX.bind(this),\n y: this.dataToPositionY.bind(this),\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n },\n 'normal',\n AttributeLevel.Series\n );\n this._trigger.registerMark(lineMark);\n }\n return lineMark;\n }\n\n protected _getEventElement(params: DimensionEventParams, reverse: boolean = false): Datum[] {\n // items 修改遍历方法从 mark\n let data: Datum[] = [];\n params.dimensionInfo.some(df => {\n df.data.some(dd => {\n if (dd.series === this) {\n data = dd.datum;\n return true;\n }\n return false;\n });\n return !data.length;\n });\n return data;\n }\n\n protected _dimensionTrigger(params: DimensionEventParams) {\n const elements = this._getEventElement(params);\n switch (params.action) {\n case 'enter':\n this._symbolActiveMark.getDataView().parse(elements);\n this._symbolActiveMark.getData().updateData(false);\n break;\n case 'leave':\n this._symbolActiveMark.getDataView().parse([]);\n this._symbolActiveMark.getData().updateData(false);\n case 'click':\n case 'move':\n default:\n break;\n }\n }\n\n initSymbolMark(progressive?: IMarkProgressiveConfig, isSeriesMark?: boolean) {\n if (this._spec.point?.visible !== false) {\n this._symbolMark = this._createMark(lineLikeSeriesMark.point, {\n morph: shouldMarkDoMorph(this._spec, lineLikeSeriesMark.point.name),\n defaultMorphElementKey: this.getDimensionField()[0],\n groupKey: this._seriesField,\n progressive,\n isSeriesMark: !!isSeriesMark,\n customShape: this._spec.point?.customShape\n }) as ISymbolMark;\n }\n\n if (this._spec.activePoint === true) {\n const activeData = new DataView(this._option.dataSet, { name: `${PREFIX}_series_${this.id}_active_point` });\n activeData.parse([]);\n this._symbolActiveMark = this._createMark(\n { name: `active_point`, type: MarkTypeEnum.symbol },\n {\n morph: false,\n groupKey: this._seriesField,\n isSeriesMark: false,\n dataView: activeData,\n parent: this._region.getInteractionMark(),\n customShape: this._spec.point?.customShape\n }\n ) as ISymbolMark;\n this._symbolActiveMark.setVisible(false);\n }\n\n return this._symbolMark;\n }\n\n initSymbolMarkStyle() {\n const symbolMark = this._symbolMark;\n if (!symbolMark) {\n this._initSymbolActiveMarkAlone();\n return symbolMark;\n }\n // 设置基础样式\n this._initSymbolMark(symbolMark);\n\n this._trigger.registerMark(symbolMark);\n\n // setStyle to active point\n if (this._symbolActiveMark && this._symbolMark.stateStyle.dimension_hover) {\n // active point will show\n this._symbolActiveMark.setVisible(true);\n this.event.on(DimensionEventEnum.dimensionHover, this._dimensionTrigger.bind(this) as EventCallback);\n // set style with referer\n for (const state in this._symbolMark.stateStyle) {\n this._symbolActiveMark.stateStyle[state] = {};\n for (const key in this._symbolMark.stateStyle[state]) {\n this._symbolActiveMark.stateStyle[state][key] = {\n style: null,\n level: AttributeLevel.Series,\n referer: symbolMark\n };\n }\n }\n // make sure activeMark in state\n this._symbolActiveMark.state.changeStateInfo({\n stateValue: STATE_VALUE_ENUM.STATE_DIMENSION_HOVER,\n filter: () => true\n });\n }\n\n return symbolMark;\n }\n\n private _initSymbolMark(symbolMark: ISymbolMark) {\n if (!symbolMark) {\n return;\n }\n this.setMarkStyle(\n symbolMark,\n {\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(\n symbolMark,\n {\n visible: this._getInvalidDefined\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n this.event.on(ChartEvent.viewDataStatisticsUpdate, { filter: param => param.model === this }, () => {\n this.encodeDefined(symbolMark, 'visible');\n });\n\n this.setMarkStyle(\n symbolMark,\n {\n x: this.dataToPositionX.bind(this),\n y: this.dataToPositionY.bind(this),\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n private _initSymbolActiveMarkAlone() {\n const symbolMark = this._symbolActiveMark;\n if (!symbolMark) {\n return;\n }\n this._initSymbolMark(symbolMark);\n\n // 这里应该不能讲trigger-mark改为activeMark,activeMark数据会变,并且目前不支持selected等操作改变它的数据\n // this._trigger.registerMark(symbolMark);\n\n // setStyle to active point\n if (symbolMark && this._spec[lineLikeSeriesMark.point.name]?.state?.dimension_hover) {\n // active point will show\n symbolMark.setVisible(true);\n this.event.on(DimensionEventEnum.dimensionHover, this._dimensionTrigger.bind(this) as EventCallback);\n // set style with referer\n this.initMarkStyleWithSpec(\n symbolMark,\n mergeSpec({}, this._spec[lineLikeSeriesMark.point.name], { visible: true })\n );\n // make sure activeMark in state\n this._symbolActiveMark.state.changeStateInfo({\n stateValue: STATE_VALUE_ENUM.STATE_DIMENSION_HOVER,\n filter: () => true\n });\n }\n }\n\n initLabelMarkStyle(labelMark?: ILabelMark) {\n if (!labelMark) {\n return;\n }\n if (labelMark.getTarget()?.type !== 'symbol') {\n labelMark.setRule('line-data');\n }\n this.setMarkStyle(labelMark, {\n fill: this.getColorAttribute(),\n text: (datum: Datum) => {\n return datum[this.getStackValueField()];\n },\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n });\n\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(\n labelMark,\n {\n visible: this._getInvalidDefined\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n this.event.on(ChartEvent.viewDataStatisticsUpdate, { filter: param => param.model === this }, () => {\n this.encodeDefined(labelMark, 'visible');\n });\n }\n\n initLineLabelMarkStyle(labelMark?: ILabelMark) {\n if (!labelMark) {\n return;\n }\n\n this.setMarkStyle(labelMark, {\n fill: this.getColorAttribute(),\n text: (datum: Datum) => {\n return datum[this.getSeriesField()];\n },\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n });\n }\n\n encodeDefined(mark: IMark, attr: string) {\n if (!mark) {\n return;\n }\n const statistics = this.getViewDataStatistics()?.latestData?.[this.getStackValueField()];\n if (this._invalidType === 'zero' || (statistics && statistics?.allValid)) {\n if (mark.stateStyle.normal?.[attr]?.style === true) {\n // no change\n return;\n }\n this.setMarkStyle(mark, { [attr]: true }, 'normal', AttributeLevel.Series);\n } else {\n if (mark.stateStyle.normal?.[attr]?.style !== true) {\n // no change\n return;\n }\n this.setMarkStyle(mark, { [attr]: this._getInvalidDefined }, 'normal', AttributeLevel.Series);\n }\n // if has produce, reCompile encode to set attribute to product\n if (mark.getProduct()) {\n mark.compileEncode();\n }\n }\n}\n","// somehow? 使用 vrender 的声明文件会 build 报错\n// import { LineJoinType, LineCapType } from '@visactor/vrender-core';\nexport type ILineStrokeCap = 'butt' | 'round' | 'square';\nexport type ILineStrokeJoin = 'arcs' | 'bevel' | 'miter' | 'miter-clip' | 'round';\n\nexport const DEFAULT_CLOSE_STROKE_JOIN = 'bevel';\n","import type { Dict } from '../type';\n\nexport type KeyOfDistributive = T extends unknown ? keyof T : never;\n\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint\nexport function keys(obj: T): (KeyOfDistributive & string)[] {\n if (!obj) {\n return [];\n }\n // Return type should be `keyof T` but exclude `number`, becuase\n // `Object.keys` only return string rather than `number | string`.\n type TKeys = KeyOfDistributive & string;\n if (Object.keys) {\n return Object.keys(obj) as TKeys[];\n }\n const keyList: TKeys[] = [];\n for (const key in obj) {\n // eslint-disable-next-line no-prototype-builtins\n if (obj.hasOwnProperty(key)) {\n keyList.push(key as any);\n }\n }\n return keyList;\n}\n\nexport function defaults, S extends Dict>(target: T, source: S, overlay?: boolean): T & S {\n const keysArr = keys(source);\n for (let i = 0; i < keysArr.length; i++) {\n const key = keysArr[i];\n if (overlay ? source[key] != null : (target as T & S)[key] == null) {\n (target as S & T)[key] = (source as T & S)[key];\n }\n }\n return target as T & S;\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function mixin(target: T | Function, source: S | Function, override: boolean = true) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n target = 'prototype' in target ? target.prototype : target;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n source = 'prototype' in source ? source.prototype : source;\n // If build target is ES6 class. prototype methods is not enumerable. Use getOwnPropertyNames instead\n // TODO: Determine if source is ES6 class?\n if (Object.getOwnPropertyNames) {\n const keyList = Object.getOwnPropertyNames(source);\n for (let i = 0; i < keyList.length; i++) {\n const key = keyList[i];\n if (key !== 'constructor') {\n if (override ? (source as any)[key] != null : (target as any)[key] == null) {\n (target as any)[key] = (source as any)[key];\n }\n }\n }\n } else {\n defaults(target as Dict, source as Dict, override);\n }\n}\n","import { isValidScaleType } from '@visactor/vscale';\nimport type { StateValueType } from '../../compile/mark';\nimport type { ConvertToMarkStyleSpec, ILineLikeMarkSpec } from '../../typings/visual';\nimport { isFunction, isNil } from '@visactor/vutils';\nimport { BaseMark } from './base-mark';\nimport type { IMarkStyle, StyleConvert } from '../interface';\n\nexport abstract class BaseLineMark extends BaseMark {\n protected abstract _getIgnoreAttributes(): string[];\n\n /**\n * @override\n * 之所以覆写是因为 vgrammar 侧默认都会处理 lineSegments,非常耗性能,所以需要 VChart 给一个标志位用于是否执行。\n * 由外部series调用,设置markStyle的接口。\n * @param style\n * @param level\n * @param state\n */\n setStyle(\n style: Partial> | Partial>,\n state: StateValueType = 'normal',\n level: number = 0,\n stateStyle = this.stateStyle\n ): void {\n if (isNil(style)) {\n return;\n }\n\n if (stateStyle[state] === undefined) {\n stateStyle[state] = {};\n }\n\n const ignoreAttributes = this._getIgnoreAttributes();\n const segmentAttributes = [\n 'strokeWidth',\n 'lineWidth',\n 'lineDash',\n 'strokeDash',\n 'lineJoin',\n 'stroke',\n 'strokeOpacity',\n 'opacity',\n 'fill',\n 'fillOpacity',\n 'texture',\n 'texturePadding',\n 'textureSize',\n 'textureColor'\n ];\n const isUserLevel = this.isUserLevel(level);\n let enableSegments = false;\n Object.keys(style).forEach(attr => {\n const attrStyle = style[attr];\n if (isNil(attrStyle) || ignoreAttributes.includes(attr)) {\n return;\n }\n if (\n isUserLevel &&\n segmentAttributes.includes(attr) &&\n (isValidScaleType(attrStyle?.type) || attrStyle?.scale || isFunction(attrStyle))\n ) {\n enableSegments = true;\n }\n\n let styleConverter = this._styleConvert(attrStyle);\n\n if (isUserLevel && attr === 'angle') {\n styleConverter = this.convertAngleToRadian(styleConverter as StyleConvert);\n }\n\n this.setAttribute(attr as any, styleConverter, state, level, stateStyle);\n });\n if (enableSegments) {\n this.setEnableSegments(enableSegments);\n }\n }\n}\n","import { Factory } from './../core/factory';\nimport { SeriesTypeEnum } from '../series/interface/type';\nimport type { ILineMarkSpec } from '../typings/visual';\nimport { BaseLineMark } from './base/base-line';\nimport type { IMarkRaw, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerLineGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarLineOrAreaAnimation } from '../animation/config';\n\nexport type ILineMark = IMarkRaw;\n\nexport class LineMark extends BaseLineMark implements ILineMark {\n static readonly type = MarkTypeEnum.line;\n readonly type = LineMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n lineWidth: 1\n };\n return defaultStyle;\n }\n\n /**\n * TODO: SeriesTypeEnum 移到最外层\n * @override 线不支持填充\n * @returns\n */\n protected _getIgnoreAttributes(): string[] {\n if (this.model?.type === SeriesTypeEnum.radar && this.model?.coordinate === 'polar') {\n return [];\n }\n return ['fill', 'fillOpacity'];\n }\n}\n\nexport const registerLineMark = () => {\n Factory.registerMark(LineMark.type, LineMark);\n registerLineGraphic();\n registerVGrammarLineOrAreaAnimation();\n};\n","import { Factory } from './../core/factory';\nimport type { ISymbolMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IMarkRaw, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerSymbolGraphic } from '@visactor/vgrammar-core';\n\nexport type ISymbolMark = IMarkRaw;\n\nexport class BaseSymbolMark extends BaseMark {\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n size: 1,\n symbolType: 'circle',\n fill: undefined,\n lineWidth: 0\n };\n return defaultStyle as IMarkStyle;\n }\n}\n\nexport class SymbolMark extends BaseSymbolMark implements ISymbolMark {\n static readonly type = MarkTypeEnum.symbol;\n readonly type = SymbolMark.type;\n}\n\nexport const registerSymbolMark = () => {\n Factory.registerMark(SymbolMark.type, SymbolMark);\n registerSymbolGraphic();\n};\n","import type { ISeriesSpec } from '../../typings';\nimport { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\n\nexport class LineLikeSeriesSpecTransformer extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: any): void {\n const isPointVisible = spec.point?.visible !== false && spec.point?.style?.visible !== false;\n if (!isPointVisible) {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.line);\n } else {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.point);\n }\n this._addMarkLabelSpec(\n spec,\n SeriesMarkNameEnum.line,\n 'lineLabel' as any,\n 'initLineLabelMarkStyle' as any,\n undefined,\n true\n );\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { LineLikeSeriesMixin } from '../mixin/line-mixin';\nimport { mixin } from '@visactor/vutils';\nimport type { Datum } from '../../typings';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { registerLineAnimation, registerScaleInOutAnimation } from '../../animation/config';\nimport type { ILineSeriesSpec } from './interface';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { LineAppearPreset } from './animation';\nimport { lineSeriesMark } from './constant';\nimport { registerLineMark } from '../../mark/line';\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { Factory } from '../../core/factory';\nimport type { IMark } from '../../mark/interface';\nimport { registerSampleTransform, registerMarkOverlapTransform } from '@visactor/vgrammar-core';\nimport { LineLikeSeriesSpecTransformer } from '../mixin/line-mixin-transformer';\nimport { getGroupAnimationParams } from '../util/utils';\n\nexport interface LineSeries\n extends Pick<\n LineLikeSeriesMixin,\n | 'initLineMark'\n | 'initSymbolMark'\n | 'initLabelMarkStyle'\n | 'initLineMarkStyle'\n | 'initSymbolMarkStyle'\n | '_lineMark'\n | '_symbolMark'\n | 'addSamplingCompile'\n | 'addOverlapCompile'\n | 'reCompileSampling'\n >,\n CartesianSeries {}\n\nexport class LineSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.line;\n type = SeriesTypeEnum.line;\n\n static readonly mark: SeriesMarkMap = lineSeriesMark;\n static readonly transformerConstructor = LineLikeSeriesSpecTransformer;\n readonly transformerConstructor = LineLikeSeriesSpecTransformer;\n\n protected _sortDataByAxis: boolean = false;\n\n compile(): void {\n super.compile();\n this.addSamplingCompile();\n this.addOverlapCompile();\n }\n\n initMark(): void {\n const progressive = {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n };\n const seriesMark = this._spec.seriesMark ?? 'line';\n this.initLineMark(progressive, seriesMark === 'line');\n this.initSymbolMark(progressive, seriesMark === 'point');\n }\n\n protected initTooltip() {\n super.initTooltip();\n this._lineMark && this._tooltipHelper.activeTriggerSet.dimension.add(this._lineMark);\n this._symbolMark && this._tooltipHelper.activeTriggerSet.mark.add(this._symbolMark);\n }\n\n initMarkStyle(): void {\n this.initLineMarkStyle(this._direction);\n this.initSymbolMarkStyle();\n }\n\n initAnimation() {\n const lineAnimationParams = { direction: this.direction };\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n this._lineMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('line')?.(lineAnimationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.line, this._spec, this._markAttributeContext)\n )\n );\n\n if (this._symbolMark) {\n const animationParams = getGroupAnimationParams(this);\n this._symbolMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('scaleInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.point, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n }\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this.reCompileSampling();\n }\n\n getSeriesStyle(datum: Datum) {\n const isLineAsSeriesMark = this._spec?.seriesMark !== 'point'; // 加判空防止某些特殊时刻(如 updateSpec 时)鼠标滑过图表导致报错\n return (attribute: string) => {\n if (isLineAsSeriesMark) {\n // 增加一个标识位,用于是否替换,因为图例获取颜色的时候是不需要替换的\n attribute === 'fill' && (attribute = 'stroke');\n }\n return this._seriesMark?.getAttribute(attribute as any, datum) ?? undefined;\n };\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getActiveMarks(): IMark[] {\n return [this._lineMark, this._symbolMark];\n }\n}\n\nmixin(LineSeries, LineLikeSeriesMixin);\n\nexport const registerLineSeries = () => {\n registerSampleTransform();\n registerMarkOverlapTransform();\n registerLineMark();\n registerSymbolMark();\n registerLineAnimation();\n registerScaleInOutAnimation();\n Factory.registerSeries(LineSeries.type, LineSeries);\n};\n","import { has, isValid } from '@visactor/vutils';\nimport type { IChartSpec, IRegionSpec, ISeriesSpec } from '../../typings';\nimport type { IChartSpecInfo, IChartSpecTransformer, IChartSpecTransformerOption } from '../interface';\nimport type { IModelConstructor, IModelSpecInfo } from '../../model/interface';\nimport type { IRegionConstructor, IRegionSpecInfo } from '../../region/interface';\nimport { Factory } from '../../core';\nimport type { ISeriesConstructor } from '../../series';\nimport type { IComponentConstructor } from '../../component/interface/common';\nimport { ComponentTypeEnum } from '../../component/interface';\nimport { setProperty } from '@visactor/vutils-extension';\n\nexport class BaseChartSpecTransformer implements IChartSpecTransformer {\n readonly type: string;\n readonly seriesType: string;\n\n protected _option: IChartSpecTransformerOption;\n\n constructor(option: IChartSpecTransformerOption) {\n this._option = option;\n this.type = option.type;\n this.seriesType = option.seriesType;\n }\n\n /** 此方法不建议重写 */\n initChartSpec(chartSpec: T): IChartSpecInfo {\n this.transformSpec(chartSpec);\n return this.transformModelSpec(chartSpec);\n }\n\n /**\n * 转换 chart spec。包含以下步骤:\n * - 将图表 spec 统一转换为 common 图表 spec\n * - 图表层级的在初始化阶段的 spec 修改\n */\n transformSpec(chartSpec: T): void {\n if (!chartSpec.region || chartSpec.region.length === 0) {\n chartSpec.region = [{}];\n }\n if (!has(chartSpec, 'tooltip')) {\n chartSpec.tooltip = {};\n }\n if (isValid(chartSpec.stackInverse)) {\n chartSpec.region.forEach(\n (r: IRegionSpec) => !isValid(r.stackInverse) && (r.stackInverse = chartSpec.stackInverse)\n );\n }\n }\n\n /**\n * 转换 model spec。包含以下步骤:\n * - model 层级的主题合并\n * - model 层级的在初始化阶段的 spec 修改,如添加 label spec\n */\n transformModelSpec(chartSpec: T): IChartSpecInfo {\n const transform = (constructor: IModelConstructor, specInfo: IModelSpecInfo, chartSpecInfo?: IChartSpecInfo) => {\n const { spec, specPath, specInfoPath, type } = specInfo;\n const transformer = new constructor.transformerConstructor({\n type,\n getTheme: this._option.getTheme\n });\n // 调用 model 自己的 transformer 进行转换\n const transformResult = transformer.transformSpec(spec, chartSpec, chartSpecInfo);\n setProperty(chartSpec, specPath, transformResult.spec);\n setProperty(chartSpecInfo, specInfoPath ?? specPath, {\n ...specInfo,\n ...transformResult\n });\n };\n return this.createSpecInfo(chartSpec, transform);\n }\n\n /** 遍历图表 spec 中包含的所有的 model,进行 spec 转换并生成图表 spec info */\n createSpecInfo(\n chartSpec: T,\n transform?: (\n /** 当前 model 的类 */\n constructor: IModelConstructor,\n /** 当前 model 的 spec info */\n specInfo: IModelSpecInfo,\n /** 图表 spec info */\n chartSpecInfo?: IChartSpecInfo\n ) => void\n ): IChartSpecInfo {\n if (!transform) {\n transform = (constructor: IModelConstructor, specInfo: IModelSpecInfo, chartSpecInfo?: IChartSpecInfo) => {\n const { spec, specPath, specInfoPath, type } = specInfo;\n const transformer = new constructor.transformerConstructor({\n type,\n getTheme: this._option.getTheme\n });\n setProperty(chartSpecInfo, specInfoPath ?? specPath, {\n ...specInfo,\n theme: transformer.getTheme(spec, chartSpec)\n });\n };\n }\n\n const currentChartSpecInfo: IChartSpecInfo = {};\n\n // 预处理 region\n this.forEachRegionInSpec(chartSpec, transform, currentChartSpecInfo);\n // 预处理 series\n this.forEachSeriesInSpec(chartSpec, transform, currentChartSpecInfo);\n // 记录每个 region 包含哪些 series\n let region: IRegionSpecInfo;\n currentChartSpecInfo.series?.forEach(({ spec: { regionId, regionIndex } }, i) => {\n if (isValid(regionId)) {\n region = currentChartSpecInfo.region?.find(({ spec }) => spec.id === regionId);\n } else if (isValid(regionIndex)) {\n region = currentChartSpecInfo.region?.[regionIndex];\n }\n if (region || (region = currentChartSpecInfo.region?.[0])) {\n if (!region.seriesIndexes) {\n region.seriesIndexes = [];\n }\n region.seriesIndexes.push(i);\n }\n });\n // 预处理 component\n this.forEachComponentInSpec(chartSpec, transform, currentChartSpecInfo);\n return currentChartSpecInfo;\n }\n\n protected _isValidSeries(seriesType: string): boolean {\n return true;\n }\n\n protected _getDefaultSeriesSpec(chartSpec: any) {\n const series: any = {\n dataKey: chartSpec.dataKey,\n\n hover: chartSpec.hover,\n select: chartSpec.select,\n\n label: chartSpec.label,\n\n seriesStyle: chartSpec.seriesStyle,\n\n animation: chartSpec.animation ?? this._option.animation,\n animationThreshold: chartSpec.animationThreshold ?? this._option.getTheme?.().animationThreshold,\n animationAppear: chartSpec.animationAppear,\n animationDisappear: chartSpec.animationDisappear,\n animationEnter: chartSpec.animationEnter,\n animationUpdate: chartSpec.animationUpdate,\n animationExit: chartSpec.animationExit,\n animationNormal: chartSpec.animationNormal,\n\n extensionMark: chartSpec.extensionMark,\n\n large: chartSpec.large,\n largeThreshold: chartSpec.largeThreshold,\n progressiveStep: chartSpec.progressiveStep,\n progressiveThreshold: chartSpec.progressiveThreshold,\n background: chartSpec.seriesBackground,\n\n invalidType: chartSpec.invalidType,\n\n seriesField: chartSpec.seriesField,\n\n morph: chartSpec.morph\n };\n return series;\n }\n\n /** 遍历 spec 中每个有效的 region */\n forEachRegionInSpec(\n chartSpec: T,\n callbackfn: (constructor: IRegionConstructor, specInfo: IModelSpecInfo, chartSpecInfo?: IChartSpecInfo) => K,\n chartSpecInfo?: IChartSpecInfo\n ): K[] {\n const regionSpec = (chartSpec.region as IRegionSpec[]) ?? [];\n return regionSpec.map((spec, index) =>\n callbackfn(\n Factory.getRegionInType('region'),\n {\n spec,\n specIndex: index,\n specPath: ['region', index],\n type: 'region'\n },\n chartSpecInfo\n )\n );\n }\n\n /** 遍历 spec 中每个有效的 series */\n forEachSeriesInSpec(\n chartSpec: T,\n callbackfn: (constructor: ISeriesConstructor, specInfo: IModelSpecInfo, chartSpecInfo?: IChartSpecInfo) => K,\n chartSpecInfo?: IChartSpecInfo\n ): K[] {\n const seriesSpec = (chartSpec.series as ISeriesSpec[]) ?? [];\n return seriesSpec.map((spec, index) =>\n callbackfn(\n Factory.getSeriesInType(spec.type),\n {\n spec,\n specIndex: index,\n specPath: ['series', index],\n type: spec.type\n },\n chartSpecInfo\n )\n );\n }\n\n /** 遍历 spec 中每个有效的 component */\n forEachComponentInSpec(\n chartSpec: T,\n callbackfn: (constructor: IComponentConstructor, specInfo: IModelSpecInfo, chartSpecInfo?: IChartSpecInfo) => K,\n chartSpecInfo?: IChartSpecInfo\n ): K[] {\n const results: K[] = [];\n const components = Factory.getComponents();\n\n // 坐标轴组件只需要调用一次\n let cartesianAxis: IComponentConstructor;\n let polarAxis: IComponentConstructor;\n let geoCoordinate: IComponentConstructor;\n let label: IComponentConstructor;\n let totalLabel: IComponentConstructor;\n const noAxisComponents = [];\n for (let index = 0; index < components.length; index++) {\n const { cmp, alwaysCheck } = components[index];\n if (cmp.type.startsWith(ComponentTypeEnum.cartesianAxis)) {\n cartesianAxis = cmp;\n } else if (cmp.type.startsWith(ComponentTypeEnum.polarAxis)) {\n polarAxis = cmp;\n } else if (cmp.type === ComponentTypeEnum.geoCoordinate) {\n geoCoordinate = cmp;\n } else if (alwaysCheck || chartSpec[cmp.specKey ?? cmp.type]) {\n if (cmp.type === ComponentTypeEnum.label) {\n label = cmp;\n } else if (cmp.type === ComponentTypeEnum.totalLabel) {\n totalLabel = cmp;\n }\n noAxisComponents.push(cmp);\n }\n }\n\n let hasInitAxis = false;\n // NOTE: 坐标轴组件需要在其他组件之前创建\n if (cartesianAxis) {\n const infoList = cartesianAxis.getSpecInfo(chartSpec);\n if (infoList?.length > 0) {\n hasInitAxis = true;\n infoList.forEach(info => {\n const cmp = Factory.getComponentInKey(info.type);\n results.push(callbackfn(cmp, info, chartSpecInfo));\n });\n }\n }\n\n if (polarAxis && !hasInitAxis) {\n const infoList = polarAxis.getSpecInfo(chartSpec);\n if (infoList?.length > 0) {\n hasInitAxis = true;\n infoList.forEach(info => {\n const cmp = Factory.getComponentInKey(info.type);\n results.push(callbackfn(cmp, info, chartSpecInfo));\n });\n }\n }\n\n if (geoCoordinate && !hasInitAxis) {\n geoCoordinate.getSpecInfo(chartSpec)?.forEach(info => {\n results.push(callbackfn(geoCoordinate, info, chartSpecInfo));\n });\n }\n\n if (label && chartSpecInfo) {\n label.getSpecInfo(chartSpec, chartSpecInfo)?.forEach(info => {\n results.push(callbackfn(label, info, chartSpecInfo));\n });\n }\n if (totalLabel && chartSpecInfo) {\n totalLabel.getSpecInfo(chartSpec, chartSpecInfo)?.forEach(info => {\n results.push(callbackfn(totalLabel, info, chartSpecInfo));\n });\n }\n\n noAxisComponents.forEach(C => {\n C.getSpecInfo(chartSpec)?.forEach(info => {\n results.push(callbackfn(C, info, chartSpecInfo));\n });\n });\n\n return results;\n }\n}\n","import type { ICartesianAxisSpec } from '../../component';\nimport type { ISeriesSpec } from '../../typings';\nimport { get, mergeSpec } from '../../util';\nimport { BaseChartSpecTransformer } from '../base';\nimport { getTrimPaddingConfig } from '../util';\nimport type { ICartesianChartSpec } from './interface';\n\nexport class CartesianChartSpecTransformer extends BaseChartSpecTransformer {\n protected needAxes(): boolean {\n return true;\n }\n\n protected _isValidSeries(type: string): boolean {\n return this.seriesType ? type === this.seriesType : true;\n }\n\n protected _getDefaultSeriesSpec(spec: any): any {\n const series: any = {\n ...super._getDefaultSeriesSpec(spec),\n xField: spec.xField,\n yField: spec.yField,\n zField: spec.zField,\n seriesField: spec.seriesField,\n seriesStyle: spec.seriesStyle,\n direction: spec.direction,\n stack: spec.stack, // 是否堆叠\n percent: spec.percent, // 是否百分比堆叠\n stackOffsetSilhouette: spec.stackOffsetSilhouette, // 是否围绕中心轴偏移轮廓,\n totalLabel: spec.totalLabel,\n sortDataByAxis: spec.sortDataByAxis\n };\n const seriesType = this.seriesType;\n if (seriesType) {\n series.type = seriesType;\n series[seriesType] = spec[seriesType];\n }\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n if (this.needAxes()) {\n if (!spec.axes) {\n spec.axes = [];\n }\n const haxAxes = { x: false, y: false, z: false };\n spec.axes.forEach((axis: ICartesianAxisSpec) => {\n const { orient } = axis;\n if (orient === 'top' || orient === 'bottom') {\n haxAxes.x = true;\n }\n if (orient === 'left' || orient === 'right') {\n haxAxes.y = true;\n }\n if (orient === 'z') {\n haxAxes.z = true;\n }\n if (get(axis, 'trimPadding')) {\n mergeSpec(axis, getTrimPaddingConfig(this.type, spec));\n }\n });\n if (!haxAxes.x) {\n spec.axes.push({\n orient: 'bottom'\n });\n }\n if (!haxAxes.y) {\n spec.axes.push({\n orient: 'left'\n });\n }\n // 如果有zField字段,但是没有配置z轴,那么添加一个z轴\n if ((spec as any).zField && !haxAxes.z) {\n spec.axes.push({\n orient: 'z'\n });\n }\n }\n\n const defaultSeriesSpec = this._getDefaultSeriesSpec(spec);\n\n if (!spec.series || spec.series.length === 0) {\n spec.series = [defaultSeriesSpec];\n } else {\n spec.series.forEach((s: ISeriesSpec) => {\n if (!this._isValidSeries(s.type)) {\n return;\n }\n Object.keys(defaultSeriesSpec).forEach(k => {\n if (!(k in s)) {\n s[k] = defaultSeriesSpec[k];\n }\n });\n });\n }\n }\n}\n","import { CartesianChartSpecTransformer } from '../cartesian';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { ILineChartSpec } from './interface';\n\nexport class LineChartSpecTransformer extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n return {\n ...super._getDefaultSeriesSpec(spec),\n point: spec.point,\n line: spec.line,\n seriesMark: spec.seriesMark ?? 'line',\n activePoint: spec.activePoint,\n sampling: spec.sampling,\n samplingFactor: spec.samplingFactor,\n pointDis: spec.pointDis,\n pointDisMul: spec.pointDisMul,\n markOverlap: spec.markOverlap,\n lineLabel: spec.lineLabel\n };\n }\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n setDefaultCrosshairForCartesianChart(spec);\n }\n}\n","import { array } from '@visactor/vutils';\nimport type { IData } from './../../typings/spec/common';\nimport { DataView } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DataSet } from '@visactor/vdataset';\nimport type { IDataValues, StringOrNumber } from '../../typings';\nimport { dataToDataView, updateDataViewInData } from '../../data/initialize';\nexport class ChartData {\n protected _dataArr: DataView[] = [];\n get dataList() {\n return this._dataArr;\n }\n\n protected _onError: (...args: any[]) => void;\n protected _dataSet: DataSet;\n\n constructor(dataSet: DataSet, onError: (...args: any[]) => void) {\n this._onError = onError;\n this._dataSet = dataSet;\n }\n\n parseData(dataSpec: IData) {\n this._dataArr = [];\n const list = array(dataSpec);\n for (let i = 0; i < list.length; i++) {\n this._dataArr.push(dataToDataView(list[i], this._dataSet, this._dataArr, { onError: this._onError }));\n }\n }\n\n updateData(dataSpec: IData, fullUp: boolean = false, forceMerge: boolean = true) {\n const list = array(dataSpec);\n if (fullUp && list.length !== this._dataArr.length) {\n return false;\n }\n this._dataValueForEach(list, (_data, dv) => {\n dv.markRunning();\n });\n this._dataValueForEach(list, (data, dv) => {\n updateDataViewInData(dv, data, forceMerge);\n });\n return true;\n }\n\n private _dataValueForEach(\n list: (IDataValues | DataView)[],\n callBack: (data: IDataValues, dv: DataView, index: number) => void\n ) {\n list.forEach((data, i) => {\n if (data instanceof DataView) {\n // ignore DataView, it should be update by use DataView api\n return;\n }\n const dv = this.getSeriesData(data.id, i);\n if (!dv) {\n return;\n }\n callBack(data, dv, i);\n });\n }\n\n getSeriesData(id: StringOrNumber | undefined, index: number | undefined): DataView | undefined {\n if (!this._dataArr.length) {\n return null;\n }\n\n // dataId 优先\n if (typeof id === 'string') {\n const metchData = this._dataArr.filter((data: any) => {\n return data.name === id;\n });\n\n if (metchData[0]) {\n return metchData[0];\n }\n\n // id不匹配,报错处理\n this._onError?.(`no data matches dataId ${id}!`);\n return null;\n }\n\n // 其次使用dataIndex\n if (typeof index === 'number') {\n if (this._dataArr[index]) {\n return this._dataArr[index];\n }\n // index不匹配,报错处理\n this._onError?.(`no data matches dataIndex ${index}!`);\n return null;\n }\n\n // 最后返回第一条数据\n return this._dataArr[0];\n }\n}\n","import type { IGlobalScale } from './interface';\nimport { isArray, isEmpty, isEqual, isNil } from '@visactor/vutils';\nimport type { IBaseScale, OrdinalScale } from '@visactor/vscale';\nimport { isContinuous } from '@visactor/vscale';\nimport type { IChart } from '../chart/interface';\nimport type { IChartSpec } from '../typings/spec';\nimport { createScale } from '../util/scale';\nimport { isDataDomainSpec } from '../util/type';\nimport { mergeFields } from '../util/data';\nimport type { IVisualScale, IVisualSpecScale } from '../typings';\nimport type { StatisticOperations } from '../data/transforms/dimension-statistics';\nimport type { ISeries } from '../series';\n\nexport class GlobalScale implements IGlobalScale {\n private _scaleSpecMap: Map> = new Map();\n private _scaleMap: Map = new Map();\n private _modelScaleSpecMap: Map> = new Map();\n private _markAttributeScaleMap: Map =\n new Map();\n private _spec: IChartSpec['scales'] = null;\n private readonly _chart: IChart = null;\n constructor(spec: IChartSpec['scales'], chart: IChart) {\n this._spec = spec;\n this._chart = chart;\n this._setAttrFromSpec();\n }\n\n private _createFromSpec(s: IVisualSpecScale): IBaseScale {\n if (!s.id) {\n return null;\n }\n let scale = this._scaleMap.get(s.id);\n if (!scale) {\n if (s.type === 'ordinal' && s.id === 'color') {\n scale = createScale('colorOrdinal'); // 全局颜色色板的特殊逻辑\n } else {\n scale = createScale(s.type);\n }\n }\n if (!scale) {\n return null;\n }\n if (isArray(s.range)) {\n scale.range(s.range);\n }\n if (isArray(s.domain)) {\n if (!isDataDomainSpec(s.domain)) {\n scale.domain(s.domain);\n }\n }\n if (s.specified && (scale).specified) {\n (scale).specified(s.specified);\n }\n return scale;\n }\n\n private _setAttrFromSpec() {\n if (!this._spec?.length) {\n return;\n }\n const newScaleMap: Map = new Map();\n const newScaleSpecMap: Map> = new Map();\n this._spec.forEach(s => {\n const scale = this._createFromSpec(s);\n if (!scale) {\n return;\n }\n newScaleMap.set(s.id, scale);\n newScaleSpecMap.set(s.id, s);\n });\n this._modelScaleSpecMap.forEach(s => {\n const scale = this._createFromSpec(s);\n if (!scale) {\n return;\n }\n newScaleMap.set(s.id, scale);\n newScaleSpecMap.set(s.id, s);\n });\n\n this._scaleSpecMap = newScaleSpecMap;\n this._scaleMap = newScaleMap;\n }\n\n updateSpec(spec: IChartSpec['scales']) {\n const result = {\n change: false,\n reMake: false,\n reRender: false,\n reSize: false,\n reCompile: false\n };\n if (isEqual(spec, this._spec)) {\n return result;\n }\n result.change = true;\n for (let i = 0; i < spec.length; i++) {\n const s = spec[i];\n const scale = this._scaleMap.get(s.id);\n if (!scale) {\n // new global scale need remake chart\n result.reMake = true;\n return result;\n }\n const lastSpec = this._spec.find(_s => _s.id === s.id);\n if (!lastSpec.id) {\n // new global scale need remake chart\n result.reMake = true;\n return result;\n }\n if (lastSpec.type !== s.type) {\n // scale cannot change type, need remake chart\n result.reMake = true;\n return result;\n }\n if (s.range && !isEqual(s.range, scale.range())) {\n scale.range(s.range);\n result.reRender = true;\n }\n if (isDataDomainSpec(s.domain)) {\n result.reRender = true;\n } else if (!isEqual(s.domain, scale.domain())) {\n scale.domain(s.domain);\n result.reRender = true;\n }\n // replace specMap, this use for data domain\n this._scaleSpecMap.set(s.id, s);\n }\n this._spec = spec;\n return result;\n }\n\n registerModelScale(spec: IVisualSpecScale) {\n const scale = this._createFromSpec(spec);\n if (!scale) {\n return;\n }\n this._modelScaleSpecMap.set(spec.id, spec);\n this._scaleSpecMap.set(spec.id, spec);\n this._scaleMap.set(spec.id, scale);\n }\n\n removeModelScale(filter: (spec: IVisualSpecScale) => boolean) {\n this._modelScaleSpecMap.forEach(spec => {\n if (filter(spec)) {\n this._modelScaleSpecMap.delete(spec.id);\n this._scaleSpecMap.delete(spec.id);\n this._scaleMap.delete(spec.id);\n }\n });\n }\n\n getScale(user_id: string): IBaseScale | null {\n return this._scaleMap.get(user_id);\n }\n\n getScaleSpec(user_id: string): IVisualSpecScale | null {\n return this._scaleSpecMap.get(user_id);\n }\n\n getStatisticalFields = (\n dataId: string\n ): {\n key: string;\n operations: StatisticOperations;\n }[] => {\n const result: {\n key: string;\n operations: StatisticOperations;\n }[] = [];\n this._scaleSpecMap.forEach((v, k) => {\n if (!isDataDomainSpec(v.domain)) {\n return;\n }\n v.domain.forEach(spec => {\n if (spec.dataId === dataId) {\n spec.fields.forEach(key => {\n mergeFields(result, [\n {\n key,\n operations: isContinuous(v.type) ? ['max', 'min'] : ['values']\n }\n ]);\n });\n }\n });\n });\n this._markAttributeScaleMap.forEach((specList, scaleName) => {\n const scale = this.getScale(scaleName);\n specList.forEach(spec => {\n const series = this._getSeriesBySeriesId(spec.seriesId);\n\n if (series.getRawData().name === dataId && spec.field) {\n mergeFields(result, [\n {\n key: spec.field,\n operations: isContinuous(scale.type) ? ['max', 'min'] : ['values']\n }\n ]);\n }\n });\n });\n return result;\n };\n\n private _getSeriesByRawDataId(id: string): ISeries {\n const series = this._chart.getAllSeries();\n\n for (let i = 0; i < series.length; i++) {\n const s = series[i];\n if (s.getRawData().name === id) {\n return s;\n }\n }\n return null;\n }\n\n private _getSeriesBySeriesId(id: number): ISeries {\n const series = this._chart.getAllSeries();\n\n for (let i = 0; i < series.length; i++) {\n const s = series[i];\n if (s.id === id) {\n return s;\n }\n }\n return null;\n }\n\n updateScaleDomain(defaultDomain: unknown[]) {\n this._scaleSpecMap.forEach((scaleSpec, id) => {\n const scale = this._scaleMap.get(id);\n if (!scale) {\n return;\n }\n if (!isDataDomainSpec(scaleSpec.domain)) {\n if (!scaleSpec.domain || scaleSpec.domain.length === 0) {\n scale.domain(defaultDomain);\n }\n this._updateMarkScale(id, scale, scale.domain().slice());\n return;\n }\n let domain: unknown[] | Set;\n if (isContinuous(scaleSpec.type)) {\n domain = [null, null];\n } else {\n domain = new Set();\n }\n scaleSpec.domain.forEach(spec => {\n const series = this._getSeriesByRawDataId(spec.dataId);\n\n if (!series) {\n return;\n }\n\n const isContinuousField = isContinuous(scaleSpec.type);\n spec.fields.forEach(key => {\n const statistics = series.getRawDataStatisticsByField(key, isContinuousField);\n if (!statistics) {\n return;\n }\n if (isContinuousField) {\n if (isNil(domain[0])) {\n domain[0] = statistics.min;\n } else {\n domain[0] = Math.min(statistics.min, domain[0]);\n }\n if (isNil(domain[1])) {\n domain[1] = statistics.max;\n } else {\n domain[1] = Math.max(statistics.max, domain[1]);\n }\n } else {\n statistics.values.forEach((value: string) => {\n (domain as Set).add(value);\n });\n }\n });\n });\n\n const scaleDomain = domain;\n if (!isContinuous(scaleSpec.type)) {\n domain = Array.from(domain);\n }\n scale.domain(domain as unknown[]);\n this._updateMarkScale(id, scale, scaleDomain);\n });\n }\n\n private _updateMarkScale(id: string, scale: IBaseScale, domain: unknown[] | Set) {\n const list = this._markAttributeScaleMap.get(id);\n if (!list || list.length === 0) {\n return;\n }\n list.forEach(info => {\n if (!info.field || !info.markScale || info.markScale === scale) {\n return;\n }\n if (isNil(info.changeDomain) || info.changeDomain === 'none' || isNil(info.seriesId)) {\n isContinuous(scale.type) ? info.markScale.domain(domain as unknown[]) : scale.domain(Array.from(domain));\n return;\n }\n\n const series = this._getSeriesBySeriesId(info.seriesId);\n const isContinuousScale = isContinuous(scale.type);\n const statistics = series.getRawDataStatisticsByField(info.field, isContinuousScale);\n\n if (isEmpty(statistics)) {\n isContinuous(scale.type) ? info.markScale.domain(domain as unknown[]) : scale.domain(Array.from(domain));\n return;\n }\n\n if (info.changeDomain === 'expand') {\n if (isContinuousScale) {\n domain[0] = Math.min(domain[0], statistics.min);\n domain[1] = Math.max(domain[1], statistics.max);\n } else {\n statistics.values.forEach((value: string) => {\n (domain as Set).add(value);\n });\n domain = Array.from(domain);\n }\n info.markScale.domain(domain as any[]);\n return;\n }\n if (info.changeDomain === 'replace') {\n if (isContinuousScale) {\n info.markScale.domain([statistics.min, statistics.max]);\n } else {\n info.markScale.domain(statistics.values);\n }\n return;\n }\n });\n }\n\n registerMarkAttributeScale(spec: IVisualScale, seriesId: number): IBaseScale {\n const scale = this._scaleMap.get(spec.scale);\n let list = this._markAttributeScaleMap.get(spec.scale);\n if (!list) {\n list = [];\n this._markAttributeScaleMap.set(spec.scale, list);\n }\n let markScale = scale;\n if (isNil(spec.field) || (!isNil(spec.changeDomain) && spec.changeDomain !== 'none' && !isNil(seriesId))) {\n markScale = scale.clone();\n }\n list.push({\n ...spec,\n seriesId,\n markScale\n });\n return markScale;\n }\n}\n","import isPlainObject from './isPlainObject';\nimport isString from './isString';\n\nexport default function pickWithout>(obj: T, keys: (string | RegExp)[]): Partial {\n if (!obj || !isPlainObject(obj)) {\n return obj;\n }\n const result = {};\n\n Object.keys(obj).forEach((k: string) => {\n const v = obj[k];\n\n let match = false;\n\n keys.forEach(itKey => {\n if (isString(itKey) && itKey === k) {\n match = true;\n } else if (itKey instanceof RegExp && k.match(itKey)) {\n match = true;\n }\n });\n\n if (!match) {\n result[k] = v;\n }\n });\n\n return result as Partial;\n}\n","import { ChartEvent } from '../constant/index';\nimport type { IRegion } from '../region/interface';\nimport type { IChart } from './interface';\nimport type { IStackCacheNode } from '../util';\n// eslint-disable-next-line no-duplicate-imports\nimport { getRegionStackGroup, stack, stackOffsetSilhouette, stackTotal } from '../util';\nimport type { EventCallback } from '../event/interface';\n\n// stack\n// 1. 不可以多个region之间的series进行堆积,目前看这种需求没有场景。将堆积改为针对 region\n// 2. 堆积是一个数据层面的逻辑,但是会影响系列当前使用的yField到底是什么。\n// 3. ECharts 线系列参与堆积后,线系列的y不变,但是与它一起堆积的柱图,数据变化了了,是堆积后的值\n// 4. x 方向分组的功能,是属于轴的,与堆积和怎么堆积无关。\n// 现有功能,有支持堆积时的方向可以调整。也就是sort\nexport class Stack {\n protected _chart: IChart;\n\n constructor(chart: IChart) {\n this._chart = chart;\n }\n\n init() {\n this._chart.getAllRegions().forEach(r => {\n r.event.on(\n ChartEvent.regionSeriesDataFilterOver,\n { filter: ({ model }) => model?.id === r.id },\n this.stackRegion as EventCallback\n );\n });\n }\n\n stackAll() {\n this._chart.getAllRegions().forEach(r => {\n this.stackRegion({ model: r });\n });\n }\n\n stackRegion = ({ model }: { model: IRegion }) => {\n const series = model.getSeries();\n const hasStack = series.some(s => s.getStack());\n\n if (!hasStack) {\n return;\n }\n // total label need percent\n const hasTotalLabel = series.some(s => s.getSpec()?.totalLabel?.visible);\n const hasPercent = hasTotalLabel || series.some(s => s.getPercent());\n const hasOffsetSilhouette = series.some(s => s.getStackOffsetSilhouette());\n\n const stackValueGroup = getRegionStackGroup(model, true);\n\n // 计算堆积\n for (const stackValue in stackValueGroup) {\n for (const key in stackValueGroup[stackValue].nodes) {\n stack(stackValueGroup[stackValue].nodes[key], model.getStackInverse(), hasPercent);\n }\n }\n\n if (hasOffsetSilhouette) {\n // 围绕中心轴偏移轮廓\n for (const stackValue in stackValueGroup) {\n for (const key in stackValueGroup[stackValue].nodes) {\n stackOffsetSilhouette(stackValueGroup[stackValue].nodes[key]);\n }\n }\n }\n\n if (hasTotalLabel) {\n model.getSeries().forEach(s => {\n const stackData = s.getStackData();\n const stackValue = s.getStackValue();\n const stackValueField = s.getStackValueField(); // yField\n if (stackData && stackValueField) {\n stackTotal(stackValueGroup[stackValue] as IStackCacheNode, stackValueField);\n }\n });\n }\n };\n}\n","import type { IRegionConstructor } from '../../region/interface';\nimport { ChartData } from '../chart-meta/data';\nimport type { ICrossHair } from '../../component/crosshair/interface/spec';\nimport type { IDimensionInfo } from '../../event/events/dimension/interface';\nimport type {\n Datum,\n IMarkStateSpec,\n IVisual,\n IVisualSpecScale,\n IRegionQuerier,\n MaybeArray,\n IPadding,\n IRect,\n StringOrNumber,\n IChartSpec,\n IDataValues,\n ILayoutRect,\n ILayoutOrientPadding\n} from '../../typings';\nimport type { ILayoutItem, LayoutCallBack } from '../../layout/interface';\nimport { GlobalScale } from '../../scale/global-scale';\nimport type { ILayoutModelState, IModel, IModelOption, IModelSpecInfo, IUpdateSpecResult } from '../../model/interface';\nimport type {\n IChart,\n IChartLayoutOption,\n IChartRenderOption,\n IChartOption,\n IChartEvaluateOption,\n ILayoutParams,\n DimensionIndexOption,\n IChartSpecTransformerOption,\n IChartSpecTransformer\n} from '../interface';\nimport type { ICartesianSeries, ISeries, ISeriesConstructor } from '../../series/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IRegion } from '../../region/interface';\nimport { ComponentTypeEnum } from '../../component/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IComponent, IComponentConstructor } from '../../component/interface';\nimport { MarkTypeEnum, type IMark } from '../../mark/interface';\nimport type { IEvent } from '../../event/interface';\nimport type { DataView } from '@visactor/vdataset';\nimport type { DataSet } from '@visactor/vdataset/es/data-set';\nimport { Factory } from '../../core/factory';\nimport { Event } from '../../event/event';\nimport {\n isArray,\n isValid,\n createID,\n calcPadding,\n normalizeLayoutPaddingSpec,\n array,\n convertBackgroundSpec\n} from '../../util';\nimport { Stack } from '../stack';\nimport { BaseModel } from '../../model/base-model';\nimport { BaseMark } from '../../mark/base/base-mark';\nimport { DEFAULT_CHART_WIDTH, DEFAULT_CHART_HEIGHT } from '../../constant/base';\nimport type { IParserOptions } from '@visactor/vdataset/es/parser';\nimport type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { has, isFunction, isEmpty, isNil, isString, isEqual } from '@visactor/vutils';\nimport { getDataScheme } from '../../theme/color-scheme/util';\nimport type { IRunningConfig as IMorphConfig, IView } from '@visactor/vgrammar-core';\nimport { CompilableBase } from '../../compile/compilable-base';\nimport type { IStateInfo } from '../../compile/mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { ChartEvent, VGRAMMAR_HOOK_EVENT } from '../../constant';\nimport type { IGlobalScale } from '../../scale/interface';\nimport { DimensionEventEnum } from '../../event/events/dimension';\nimport type { ITooltip } from '../../component/tooltip/interface';\nimport type { IRectMark } from '../../mark/rect';\nimport { calculateChartSize, mergeUpdateResult } from '../util';\nimport { isDiscrete } from '@visactor/vscale';\nimport { updateDataViewInData } from '../../data/initialize';\n\nexport class BaseChart extends CompilableBase implements IChart {\n readonly type: string = 'chart';\n readonly seriesType: string;\n readonly transformerConstructor: new (option: IChartSpecTransformerOption) => IChartSpecTransformer;\n\n readonly id: number = createID();\n\n protected _transformer: IChartSpecTransformer;\n\n //FIXME: 转换后的 spec 需要声明 ITransformedChartSpec\n protected _spec: T;\n getSpec() {\n return this._spec;\n }\n setSpec(s: T) {\n // TODO 通过spec设置进行图表更新\n this._spec = s;\n }\n\n getOption() {\n return this._option;\n }\n\n protected _regions: IRegion[] = [];\n // 系列\n protected _series: ISeries[] = [];\n // 组件\n protected _components: IComponent[] = [];\n\n // 布局\n protected _layoutFunc: LayoutCallBack;\n protected _layoutRect: IRect = {\n x: 0,\n y: 0,\n width: DEFAULT_CHART_WIDTH,\n height: DEFAULT_CHART_HEIGHT\n };\n getLayoutRect() {\n return this._layoutRect;\n }\n protected _viewRect: ILayoutRect = {\n width: DEFAULT_CHART_WIDTH,\n height: DEFAULT_CHART_HEIGHT\n };\n getViewRect() {\n return this._viewRect;\n }\n protected _viewBox: IBoundsLike = {\n x1: 0,\n y1: 0,\n x2: DEFAULT_CHART_WIDTH,\n y2: DEFAULT_CHART_HEIGHT\n };\n\n protected _layoutTag: boolean = true;\n getLayoutTag() {\n return this._layoutTag;\n }\n setLayoutTag(tag: boolean, morphConfig?: IMorphConfig, reLayout: boolean = true): boolean {\n this._layoutTag = tag;\n if (this.getCompiler()?.getVGrammarView()) {\n this.getCompiler().getVGrammarView().updateLayoutTag();\n tag && reLayout && this.getCompiler().renderAsync(morphConfig);\n }\n return this._layoutTag;\n }\n\n // 模块参数\n protected _modelOption: IModelOption;\n\n // 全局通道\n // protected _globalScale: { [key: string]: IBaseScale } = {};\n protected _globalScale: IGlobalScale;\n\n // mark & model 的 id 映射\n protected _idMap: Map = new Map();\n\n protected _event: IEvent;\n getEvent() {\n return this._event;\n }\n\n // data\n protected _dataSet: DataSet;\n protected _chartData: ChartData;\n get chartData() {\n return this._chartData;\n }\n\n protected declare _option: IChartOption;\n\n // 模块内的需要动态影像图表的属性\n readonly state: ILayoutModelState = {\n layoutUpdateRank: 1\n };\n\n // stack\n protected _stack: Stack;\n protected _canStack: boolean;\n\n padding: IPadding = { top: 0, left: 0, right: 0, bottom: 0 };\n protected _paddingSpec: ILayoutOrientPadding;\n\n protected _canvasRect: ILayoutRect;\n\n // background\n protected _backgroundMark: IRectMark;\n\n constructor(spec: T, option: IChartOption) {\n super(option);\n this._paddingSpec = normalizeLayoutPaddingSpec(spec.padding ?? option.getTheme().padding);\n\n this._event = new Event(option.eventDispatcher, option.mode);\n this._dataSet = option.dataSet;\n this._chartData = new ChartData(this._dataSet, this._option?.onError);\n this._modelOption = {\n ...option,\n mode: this._option.mode,\n map: this._idMap,\n getChartLayoutRect: () => this._layoutRect,\n getChartViewRect: () => this._viewRect,\n getChart: () => this,\n globalScale: this._globalScale,\n onError: this._option?.onError,\n disableTriggerEvent: this._option?.disableTriggerEvent === true,\n getSeriesData: this._chartData.getSeriesData.bind(this._chartData)\n };\n\n this._spec = spec;\n }\n\n created() {\n this._transformer = new this.transformerConstructor({\n type: this.type,\n seriesType: this.seriesType,\n getTheme: this._option.getTheme,\n animation: this._option.animation\n });\n // data\n this._chartData.parseData(this._spec.data);\n // scale\n this._createGlobalScale();\n // background\n this._spec.background && typeof this._spec.background === 'object' && this._createBackground();\n // 基础内容\n this._createLayout();\n // 基于spec 创建元素。\n // region\n this._transformer.forEachRegionInSpec(this._spec, this._createRegion.bind(this));\n // series\n this._transformer.forEachSeriesInSpec(this._spec, this._createSeries.bind(this));\n // components\n this._transformer.forEachComponentInSpec(this._spec, this._createComponent.bind(this), this._option.getSpecInfo());\n }\n\n init() {\n // 元素创建完毕后再执行各元素的初始化 方便各元素能获取到其他模块\n this._regions.forEach(r => r.init({}));\n this._series.forEach(s => s.init({}));\n this._components.forEach(c => c.init({ dataSet: this._dataSet }));\n\n // event\n this._initEvent();\n\n // TODO: to component\n // stack\n if (this._canStack) {\n this._stack = new Stack(this);\n this._stack.init();\n }\n // data flow start\n this.reDataFlow();\n }\n\n reDataFlow() {\n this._series.forEach(s => s.getRawData()?.markRunning());\n this._series.forEach(s => s.fillData());\n this.updateGlobalScaleDomain();\n }\n\n onResize(width: number, height: number, reRender: boolean = true): void {\n const canvasRect = {\n width,\n height\n };\n this._canvasRect = canvasRect;\n this._updateLayoutRect(this._option.viewBox);\n this.setLayoutTag(true, null, reRender);\n }\n\n updateViewBox(viewBox: IBoundsLike, reLayout: boolean) {\n this._option.viewBox = viewBox;\n this._updateLayoutRect(viewBox);\n this.setLayoutTag(true, null, reLayout);\n }\n\n private _createBackground() {\n const backgroundStyle = convertBackgroundSpec(this._spec.background);\n if (backgroundStyle) {\n this._backgroundMark = Factory.createMark(MarkTypeEnum.group, 'chart-background', {\n model: this as any,\n map: this._option.map,\n getCompiler: this.getCompiler,\n globalScale: this._globalScale\n }) as IRectMark;\n this._backgroundMark.created();\n this._backgroundMark.setStyle({\n ...backgroundStyle,\n x: () => this._viewBox.x1,\n y: () => this._viewBox.y1,\n width: () => this._viewBox.x2 - this._viewBox.x1,\n height: () => this._viewBox.y2 - this._viewBox.y1\n });\n }\n }\n\n protected _createRegion(constructor: IRegionConstructor, specInfo: IModelSpecInfo) {\n if (!constructor) {\n return;\n }\n\n const { spec, ...others } = specInfo;\n const region = new constructor(spec, {\n ...this._modelOption,\n ...others\n });\n if (region) {\n region.created();\n this._regions.push(region);\n }\n }\n\n protected _createSeries(constructor: ISeriesConstructor, specInfo: IModelSpecInfo) {\n if (!constructor) {\n return;\n }\n\n const { spec, ...others } = specInfo;\n\n let region: IRegion | undefined;\n if (isValid(spec.regionId)) {\n region = this.getRegionsInUserId(spec.regionId);\n } else if (isValid(spec.regionIndex)) {\n region = this.getRegionsInIndex([spec.regionIndex])[0];\n }\n\n if (!region && !(region = this._regions[0])) {\n return;\n }\n\n const series = new constructor(spec, {\n ...this._modelOption,\n ...others,\n type: spec.type,\n region,\n globalScale: this._globalScale,\n sourceDataList: this._chartData.dataList\n });\n\n if (series) {\n series.created();\n this._series.push(series);\n region.addSeries(series);\n }\n }\n\n getAllSeries = (): ISeries[] => {\n return this._series ?? [];\n };\n\n getSeriesById(id: number): ISeries | undefined {\n return this._series.find(x => x.id === id);\n }\n\n protected _createComponent(constructor: IComponentConstructor, specInfo: IModelSpecInfo) {\n const component = constructor.createComponent(specInfo, {\n ...this._modelOption,\n type: constructor.type,\n getAllRegions: this.getAllRegions,\n getRegionsInIndex: this.getRegionsInIndex,\n getRegionsInIds: this.getRegionsInIds,\n getRegionsInUserIdOrIndex: this.getRegionsInUserIdOrIndex,\n getAllSeries: this.getAllSeries,\n getSeriesInIndex: this.getSeriesInIndex,\n getSeriesInIds: this.getSeriesInIds,\n getSeriesInUserIdOrIndex: this.getSeriesInUserIdOrIndex,\n getAllComponents: this.getComponents,\n getComponentByIndex: this.getComponentByIndex,\n getComponentByUserId: this.getComponentByUserId,\n getComponentsByKey: this.getComponentsByKey\n });\n if (!component) {\n return;\n }\n component.created();\n this._components.push(component);\n }\n\n getAllComponents(): IComponent[] {\n return this._components;\n }\n\n getAllModels(): IModel[] {\n return [].concat(this.getAllSeries(), this.getAllComponents(), this.getAllRegions());\n }\n\n getModelInFilter(filter: string | { type: string; index: number } | ((model: IModel) => boolean)) {\n if (isString(filter)) {\n return this.getAllModels().find(m => m.userId === filter);\n } else if (isFunction(filter)) {\n return this.getAllModels().find(m => filter(m));\n }\n let index = 0;\n return this.getAllModels().find(m => {\n if ((m.specKey ?? m.type) === filter.type) {\n if (index === filter.index) {\n return true;\n }\n index++;\n }\n return false;\n });\n }\n\n private _createLayout() {\n this._updateLayoutRect(this._option.viewBox);\n this._initLayoutFunc();\n }\n\n setLayout(layout: LayoutCallBack) {\n // 统一自定义 layout 到 option 中\n this._option.layout = layout;\n this._initLayoutFunc();\n }\n\n /** 可以通过设置 layout = null 来取消自定义布局。启用spec上的布局配置 */\n private _initLayoutFunc() {\n this._layoutFunc = this._option.layout;\n if (!this._layoutFunc) {\n // 判断是否使用3d的layout\n let use3dLayout = false;\n // 查找是否需要使用3d布局模块\n if ((this._spec as any).zField || (this._spec.series && this._spec.series.some((s: any) => s.zField))) {\n use3dLayout = true;\n }\n const constructor = Factory.getLayoutInKey(this._spec.layout?.type ?? (use3dLayout ? 'layout3d' : 'base'));\n if (constructor) {\n const layout = new constructor(this._spec.layout, {\n onError: this._option?.onError\n });\n this._layoutFunc = layout.layoutItems.bind(layout);\n }\n }\n }\n\n layout(params: ILayoutParams): void {\n this._option.performanceHook?.beforeLayoutWithSceneGraph?.();\n if (this.getLayoutTag()) {\n this._event.emit(ChartEvent.layoutStart, { chart: this });\n\n this.onLayoutStart(params);\n const elements = this.getLayoutElements();\n this._layoutFunc(this, elements, this._layoutRect, this._viewBox);\n this._event.emit(ChartEvent.afterLayout, { elements });\n this.setLayoutTag(false);\n this.onLayoutEnd(params);\n\n this._event.emit(ChartEvent.layoutEnd, { chart: this });\n }\n this._option.performanceHook?.afterLayoutWithSceneGraph?.();\n }\n\n // 通知所有需要通知的元素 onLayout 钩子\n onLayoutStart(option: IChartLayoutOption) {\n const elements = this.getAllModels();\n elements.forEach(element => element.onLayoutStart(this._layoutRect, this._viewRect, option));\n }\n\n // 通知所有需要通知的元素 onLayoutEnd 钩子\n onLayoutEnd(option: IChartLayoutOption) {\n const elements = this.getAllModels();\n elements.forEach(element => element.onLayoutEnd(option));\n }\n\n onEvaluateEnd(option: IChartEvaluateOption) {\n const elements = [...this._components, ...this._regions, ...this._series];\n elements.forEach(element => element.onEvaluateEnd(option));\n }\n\n getLayoutElements(): ILayoutItem[] {\n return this.getAllModels()\n .map(i => i.layout)\n .filter(i => !!i);\n }\n\n // 区域\n getRegionsInIndex = (index?: number[]): IRegion[] => {\n if (!index || index.length === 0) {\n return [this._regions[0]];\n }\n return this._regions.filter((_r, i) => index.includes(i));\n };\n\n getAllRegions = () => {\n return this._regions;\n };\n\n getRegionsInIds = (ids: number[]): IRegion[] => {\n if (!ids) {\n return [];\n }\n return this._regions.filter(r => ids.includes(r.id));\n };\n\n getRegionsInQuerier = (region?: MaybeArray) => {\n if (region) {\n return this._regions.filter((r, index) => {\n return array(region).some(\n regionFilter =>\n (isValid(regionFilter.regionId) && regionFilter.regionId === r.userId) || regionFilter.regionIndex === index\n );\n });\n }\n return this._regions;\n };\n\n getRegionsInUserId = (userId: StringOrNumber): IRegion | undefined => {\n if (!userId) {\n return undefined;\n }\n return this._regions.find(r => r.userId === userId);\n };\n\n getRegionsInUserIdOrIndex = (user_ids?: StringOrNumber[], index?: number[]): IRegion[] => {\n const regions = this.getAllRegions();\n return regions.filter(r => {\n if (user_ids?.length) {\n return r.userId && user_ids.includes(r.userId);\n } else if (index?.length) {\n return index.includes(r.getSpecIndex());\n }\n return true;\n });\n };\n\n // 模块\n getComponents = () => {\n return this._components;\n };\n\n // 区域\n getSeriesInIndex = (index?: number[]): ISeries[] => {\n if (!index || index.length === 0) {\n return [this._series[0]];\n }\n return this._series.filter((_r, i) => index.includes(i));\n };\n\n getSeriesInIds = (ids?: number[]): ISeries[] => {\n if (!ids) {\n return [];\n }\n return this._series.filter(r => ids.includes(r.id));\n };\n\n getSeriesInUserId = (userId: StringOrNumber): ISeries | undefined => {\n if (!userId) {\n return undefined;\n }\n return this._series.find(r => r.userId === userId);\n };\n\n getSeriesInUserIdOrIndex = (user_ids?: StringOrNumber[], index?: number[]): ISeries[] => {\n const series = this.getAllSeries();\n return series.filter(s => {\n if (user_ids?.length) {\n return s.userId && user_ids.includes(s.userId);\n } else if (index?.length) {\n return index.includes(s.getSpecIndex());\n }\n return true;\n });\n };\n\n getComponentByIndex = (key: string, index: number) => {\n const components = this._components.filter(c => (c.specKey || c.type) === key);\n if (!components || components.length === 0) {\n return undefined;\n }\n return components[index];\n };\n\n getComponentsByKey = (key: string) => {\n return this._components.filter(c => (c.specKey || c.type) === key);\n };\n\n getComponentByUserId = (userId: StringOrNumber) => {\n const component = this._components.find(s => s.userId === userId);\n if (component) {\n return component;\n }\n return undefined;\n };\n\n getModelById(id: number): IModel | undefined {\n const model = this._idMap.get(id);\n if (model && model instanceof BaseModel) {\n return model;\n }\n return undefined;\n }\n\n getModelByUserId(userId: StringOrNumber): IModel | undefined {\n // TODO: 考虑通过 map 结构优化获取方式 & 补充所有 model 的寻找方法\n const series = this._series.find(s => s.userId === userId);\n if (series) {\n return series;\n }\n const region = this._regions.find(s => s.userId === userId);\n if (region) {\n return region;\n }\n const component = this._components.find(s => s.userId === userId);\n if (component) {\n return component;\n }\n return undefined;\n }\n\n getAllMarks(): IMark[] {\n const items = Array.from(this._idMap.values());\n return items.filter(item => item && item instanceof BaseMark) as IMark[];\n }\n\n getMarkById(id: number): IMark | undefined {\n const mark = this._idMap.get(id);\n if (mark && mark instanceof BaseMark) {\n return mark;\n }\n return undefined;\n }\n\n updateData(id: StringOrNumber, data: unknown, updateGlobalScale: boolean = true, options?: IParserOptions) {\n const dv = this._dataSet.getDataView(id as string);\n if (dv) {\n dv.markRunning();\n dv.parseNewData(data, options);\n }\n\n if (updateGlobalScale) {\n this.updateGlobalScaleDomain();\n }\n this.getAllModels().forEach(model => model.onDataUpdate());\n }\n\n updateFullData(data: IDataValues | IDataValues[], updateGlobalScale: boolean = true) {\n array(data).forEach(d => {\n const dv = this._dataSet.getDataView(d.id);\n if (dv) {\n dv.markRunning();\n }\n });\n array(data).forEach(d => {\n const dv = this._dataSet.getDataView(d.id);\n if (dv) {\n updateDataViewInData(dv, d, true);\n }\n });\n if (updateGlobalScale) {\n this.updateGlobalScaleDomain();\n }\n this.getAllModels().forEach(model => model.onDataUpdate());\n }\n\n onRender(option: IChartRenderOption) {\n // do nothing\n }\n\n setCanvasRect(width: number, height: number) {\n this._canvasRect = { width, height };\n }\n\n getCanvasRect(): Omit {\n if (this._canvasRect) {\n return this._canvasRect;\n }\n\n this._canvasRect = calculateChartSize(this._spec, this._option, {\n width: DEFAULT_CHART_WIDTH,\n height: DEFAULT_CHART_HEIGHT\n });\n\n return this._canvasRect;\n }\n\n getSeriesData(id: StringOrNumber | undefined, index: number | undefined): DataView | undefined {\n return this._chartData.getSeriesData(id, index);\n }\n\n private _transformSpecScale() {\n const scales: IChartSpec['scales'] = this._spec.scales ?? [];\n let colorScaleSpec: IVisualSpecScale = scales.find(s => s.id === 'color');\n const colorScheme = this.getColorScheme();\n if (!colorScaleSpec) {\n colorScaleSpec = {\n type: 'ordinal',\n id: 'color',\n domain: null,\n range: null\n };\n scales.push(colorScaleSpec);\n if (this._spec.color) {\n const colorSpec = this._spec.color as string[] | IVisual;\n\n // range array\n if (isArray(colorSpec)) {\n colorScaleSpec.range = colorSpec;\n } else {\n const tempSpec = colorSpec as IVisualSpecScale;\n Object.prototype.hasOwnProperty.call(tempSpec, 'type') && (colorScaleSpec.type = tempSpec.type);\n Object.prototype.hasOwnProperty.call(tempSpec, 'domain') && (colorScaleSpec.domain = tempSpec.domain);\n Object.prototype.hasOwnProperty.call(tempSpec, 'range') && (colorScaleSpec.range = tempSpec.range);\n Object.prototype.hasOwnProperty.call(tempSpec, 'specified') &&\n (colorScaleSpec.specified = tempSpec.specified);\n }\n }\n }\n // 如果没有range设置\n // length === 0 就认为是没有配置,用户配置 color: [] 依然认为是无效配置,启用主题色板\n if (!colorScaleSpec.range?.length) {\n colorScaleSpec.range = getDataScheme(colorScheme);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n colorScaleSpec.rangeTheme = true;\n }\n return scales;\n }\n\n // 全局通道\n private _createGlobalScale() {\n this._globalScale = new GlobalScale(this._transformSpecScale(), this);\n this._modelOption.globalScale = this._globalScale;\n }\n\n updateGlobalScaleDomain() {\n const domainSet = new Set();\n this._series.forEach(s => {\n const keys = s.getSeriesKeys();\n keys && keys.forEach(k => domainSet.add(k));\n });\n // domain\n const domain = Array.from(domainSet);\n // 如果 global scale 当前没有 domain 的话,就使用这个domain\n // 整理了目前会影响全局 scale 的逻辑,但是当前这个节点使用这个逻辑可行\n // 但是考虑到组件也可能会有修改 scale 的逻辑\n // 增加一个属性设置优先级也许是必须的?\n this._globalScale.updateScaleDomain(domain);\n }\n\n updateGlobalScale(result: IUpdateSpecResult) {\n mergeUpdateResult(result, this._globalScale.updateSpec(this._transformSpecScale()));\n }\n\n updateGlobalScaleTheme() {\n const colorSpec = this._globalScale.getScaleSpec('color');\n const colorScheme = this.getColorScheme();\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (colorSpec.rangeTheme) {\n colorSpec.range = getDataScheme(colorScheme);\n this._globalScale.getScale('color').range(colorSpec.range);\n }\n }\n\n updateSpec(spec: T) {\n const result = {\n change: false,\n reMake: false,\n reRender: false,\n reSize: false,\n reCompile: false\n };\n // 需要重新布局\n this.setLayoutTag(true, null, false);\n // 第一版简易逻辑如果配置项出现增删,直接重新创建chart\n // 如果出现类型不同,同上\n if (spec.type !== this.type) {\n result.reMake = true;\n return result;\n }\n // spec set & transformSpec\n // diff meta length;\n const currentKeys = Object.keys(this._spec).sort();\n const nextKeys = Object.keys(spec).sort();\n if (JSON.stringify(currentKeys) !== JSON.stringify(nextKeys)) {\n result.reMake = true;\n return result;\n }\n const oldSpec = this._spec;\n this._spec = spec;\n // update chart config\n this.updateChartConfig(result, oldSpec);\n if (result.reMake) {\n return result;\n }\n\n this.updateGlobalScale(result);\n if (result.reMake) {\n return result;\n }\n // region 变化\n this.updateRegionSpec(result);\n if (result.reMake) {\n return result;\n }\n this.updateComponentSpec(result);\n if (result.reMake) {\n return result;\n }\n this.updateSeriesSpec(result);\n if (result.reMake) {\n return result;\n }\n this.updateDataSpec(result);\n if (result.reMake) {\n return result;\n }\n // ensure that the domain of the scale follows the data change\n this.updateGlobalScaleDomain();\n return result;\n }\n\n updateChartConfig(result: IUpdateSpecResult, oldSpec: IChartSpec) {\n // padding;\n this._paddingSpec = normalizeLayoutPaddingSpec(this._spec.padding ?? this._option?.getTheme().padding);\n\n // re compute padding & layout\n this._updateLayoutRect(this._viewBox);\n\n // background need remake\n if (!isEqual(this._spec.background, oldSpec.background)) {\n result.reMake = true;\n }\n }\n\n updateDataSpec(result: IUpdateSpecResult) {\n if (!this._spec.data) {\n return;\n }\n this._chartData.updateData(this._spec.data, false, true);\n }\n\n updateRegionSpec(result: IUpdateSpecResult) {\n if (!this._spec?.region) {\n return;\n }\n // 长度不同,直接判定为 remake\n if (this._spec.region.length !== this._regions.length) {\n result.reMake = true;\n return;\n }\n this._regions.forEach(r => {\n mergeUpdateResult(result, r.updateSpec(this._spec.region[r.getSpecIndex()]));\n });\n }\n\n updateComponentSpec(result: IUpdateSpecResult) {\n // 用来检测组件是否有新增\n const componentCache: {\n [key in string]: {\n specCount: number;\n componentCount: number;\n };\n } = {};\n this._components.forEach(c => {\n const compSpecKey = c.specKey || c.type;\n // 每一个组件获取对应的speck\n const cmpSpec = this._spec[compSpecKey] ?? {};\n if (isArray(cmpSpec)) {\n componentCache[compSpecKey] = componentCache[compSpecKey] || {\n specCount: cmpSpec.length,\n componentCount: 0\n };\n componentCache[compSpecKey].componentCount++;\n mergeUpdateResult(result, c.updateSpec(cmpSpec[c.getSpecIndex()] ?? {}, cmpSpec));\n } else {\n mergeUpdateResult(result, c.updateSpec(cmpSpec));\n }\n });\n for (const key in componentCache) {\n if (Object.prototype.hasOwnProperty.call(componentCache, key)) {\n const element = componentCache[key];\n if (element.componentCount !== element.specCount) {\n result.reMake = true;\n }\n }\n }\n }\n\n updateSeriesSpec(result: IUpdateSpecResult) {\n // 长度不同,直接判定为 remake\n if (this._spec.series.length !== this._series.length) {\n result.reMake = true;\n return;\n }\n this._series.forEach(s => {\n const spec = this._spec.series[s.getSpecIndex()];\n mergeUpdateResult(result, s.updateSpec(spec));\n });\n }\n\n getCanvas() {\n return this.getCompiler()?.getCanvas() ?? null;\n }\n\n private _updateLayoutRect(viewBox: IBoundsLike) {\n const canvasRect = this.getCanvasRect();\n let viewRect = canvasRect;\n if (viewBox) {\n this._viewBox = viewBox;\n const { x1 = 0, y1 = 0, x2, y2 } = viewBox;\n viewRect = {\n width: x2 - x1,\n height: y2 - y1\n };\n } else {\n this._viewBox = { x1: 0, y1: 0, x2: viewRect.width, y2: viewRect.height };\n }\n this._viewRect = viewRect;\n // resize 时 padding 也应该会发生变化 先计算\n this.padding = calcPadding(this._paddingSpec, viewRect, viewRect);\n this._layoutRect.width = viewRect.width - this.padding.left - this.padding.right;\n this._layoutRect.height = viewRect.height - this.padding.top - this.padding.bottom;\n this._layoutRect.x = this.padding.left;\n this._layoutRect.y = this.padding.top;\n\n this._event.emit(ChartEvent.layoutRectUpdate, {});\n }\n\n /** 设置当前全局主题 */\n setCurrentTheme() {\n // update chart config\n this.updateChartConfig({ change: true, reMake: false }, this._spec);\n\n // 需要重新布局\n this.setLayoutTag(true, null, false);\n\n // 设置色板,只设置 colorScale 的 range\n this.updateGlobalScaleTheme();\n\n this._regions.forEach(r => r.reInit(r.getSpecInfo().spec));\n this._series.forEach(s => s.reInit(s.getSpecInfo().spec));\n this._components.forEach(c => c.reInit(c.getSpecInfo().spec));\n }\n\n clear() {\n // call on recompile & release\n this.getAllModels().forEach(i => i.clear?.());\n }\n\n compile() {\n this.compileBackground();\n this.compileLayout();\n this.compileRegions();\n this.compileSeries();\n this.compileComponents();\n }\n\n afterCompile() {\n this.getAllRegions().forEach(r => {\n r.afterCompile?.();\n });\n this.getAllSeries().forEach(s => {\n s.afterCompile?.();\n });\n this.getAllComponents().forEach(c => {\n c.afterCompile?.();\n });\n }\n\n compileLayout() {\n const { width, height } = this.getCanvasRect();\n this.getCompiler().setSize(width, height);\n }\n\n compileBackground() {\n if (!this._backgroundMark) {\n return;\n }\n this._backgroundMark.compile();\n this._backgroundMark\n .getProduct()\n ?.configure({\n context: {\n model: this\n }\n })\n .layout(() => {\n // console.log('region mark layout');\n });\n }\n\n compileRegions() {\n this._option.performanceHook?.beforeRegionCompile?.();\n this.getAllRegions().forEach(r => {\n r.compile();\n });\n this._option.performanceHook?.afterRegionCompile?.();\n }\n\n compileSeries() {\n this._option.performanceHook?.beforeSeriesCompile?.();\n this.getAllSeries().forEach(s => {\n s.compile();\n });\n this._option.performanceHook?.afterSeriesCompile?.();\n }\n\n compileComponents() {\n this._option.performanceHook?.beforeComponentCompile?.();\n this.getAllComponents().forEach(c => {\n c.compile();\n });\n this._option.performanceHook?.afterComponentCompile?.();\n }\n\n release() {\n /* release 前的处理 */\n [...this._components, ...this._regions, ...this._series].forEach(m => {\n m.beforeRelease();\n });\n\n /* 开始 release */\n super.release();\n // clear event , temporary function of chart items\n this.clear();\n\n [...this._components, ...this._regions, ...this._series].forEach(m => {\n m.release();\n });\n this._components = this._regions = this._series = [];\n this._spec = {} as any;\n // FIXME: type lint\n this._dataSet = this._globalScale = this._layoutFunc = null as unknown as any;\n this._layoutTag = false;\n this._idMap.clear();\n }\n\n onLayout(srView: IView) {\n const root = srView.rootMark;\n this.layout({ group: root, srView });\n }\n\n /**\n * 更新或设置图元状态\n * @param state 状态筛选器\n * @param filter 筛选器\n */\n updateState(\n state: Record, 'style'>>,\n filter?: (series: ISeries, mark: IMark, stateKey: string) => boolean //series + mark 筛选\n ): void {\n const seriesArr = this.getAllSeries();\n for (const key in state) {\n if (isEmpty(state[key])) {\n continue;\n }\n const stateSpec = state[key];\n let stateInfo: IStateInfo = { stateValue: key };\n if (isFunction(stateSpec.filter)) {\n stateInfo = { filter: stateSpec.filter, ...stateInfo };\n } else {\n stateInfo = { ...stateSpec.filter, ...stateInfo };\n }\n if (stateSpec.level) {\n stateInfo.level = stateSpec.level;\n }\n seriesArr.forEach(series => {\n series.getMarks().forEach(m => {\n if (!m.stateStyle[key]) {\n return;\n }\n if (!filter || filter(series, m, key)) {\n m.state.changeStateInfo(stateInfo);\n m.updateMarkState(key);\n }\n });\n });\n }\n }\n\n /**\n * 更新图元选中状态\n * @param datum hover 图元数据\n * @param filter 筛选器 用来筛选系列与mark\n * @param region region 筛选器\n */\n setSelected(\n datum: MaybeArray | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ): void {\n this._setStateInDatum(STATE_VALUE_ENUM.STATE_SELECTED, true, datum, filter, region);\n }\n\n /**\n * 更新图元 hover 状态\n * @param datum hover 图元数据\n * @param filter 筛选器 用来筛选系列与mark\n * @param region region 筛选器\n */\n setHovered(\n datum: MaybeArray | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ): void {\n this._setStateInDatum(STATE_VALUE_ENUM.STATE_HOVER, true, datum, filter, region);\n }\n\n private _initEvent() {\n [ChartEvent.dataZoomChange, ChartEvent.scrollBarChange].forEach(event => {\n this._event.on(event, ({ value }) => {\n // 非数据筛选的方式,图元不存在增删,可以保持动画效果\n if (!value.filterData) {\n return;\n }\n this._disableMarkAnimation(['exit', 'update']);\n const enableMarkAnimate = () => {\n this._enableMarkAnimation(['exit', 'update']);\n this._event.off(VGRAMMAR_HOOK_EVENT.AFTER_MARK_RENDER_END, enableMarkAnimate);\n };\n this._event.on(VGRAMMAR_HOOK_EVENT.AFTER_MARK_RENDER_END, enableMarkAnimate);\n });\n });\n }\n\n protected _enableMarkAnimation(states: string | string[]) {\n const marks = this.getAllMarks();\n marks.forEach(mark => {\n const product = mark.getProduct();\n if (product && product.animate) {\n product.animate.enableAnimationState(states);\n }\n });\n }\n\n protected _disableMarkAnimation(states: string | string[]) {\n const marks = this.getAllMarks();\n marks.forEach(mark => {\n const product = mark.getProduct();\n if (product && product.animate) {\n product.animate.disableAnimationState(states);\n }\n });\n }\n\n protected _setStateInDatum(\n stateKey: string,\n checkReverse: boolean,\n datum: MaybeArray | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ) {\n datum = datum ? array(datum) : null;\n const keys = !datum ? null : Object.keys(datum[0]);\n this.getRegionsInQuerier(region).forEach(r => {\n if (!datum) {\n r.interaction.clearEventElement(stateKey, true);\n return;\n }\n r.getSeries().forEach(s => {\n s.getMarks().forEach(m => {\n if (!m.getProduct()) {\n return;\n }\n if (!filter || (isFunction(filter) && filter(s, m))) {\n const isCollect = m.getProduct().isCollectionMark();\n const elements = m.getProduct().elements;\n let pickElements = elements;\n if (isCollect) {\n pickElements = elements.filter(e => {\n const elDatum = e.getDatum();\n // eslint-disable-next-line max-nested-callbacks, eqeqeq\n (datum as Datum[]).every((d, index) => keys.every(k => d[k] == elDatum[index][k]));\n });\n } else {\n if (datum.length > 1) {\n const datumTemp = (datum as Datum[]).slice();\n pickElements = elements.filter(e => {\n if (datumTemp.length === 0) {\n return false;\n }\n const elDatum = e.getDatum();\n // eslint-disable-next-line max-nested-callbacks, eqeqeq\n const index = datumTemp.findIndex(d => keys.every(k => d[k] == elDatum[k]));\n if (index >= 0) {\n datumTemp.splice(index, 1);\n return true;\n }\n return false;\n });\n } else {\n // eslint-disable-next-line eqeqeq\n const el = elements.find(e => keys.every(k => datum[0][k] == e.getDatum()[k]));\n el && (pickElements = [el]);\n }\n }\n pickElements.forEach(element => {\n r.interaction.addEventElement(stateKey, element);\n });\n }\n });\n });\n if (checkReverse) {\n r.interaction.reverseEventElement(stateKey);\n }\n });\n }\n\n /**\n * setDimensionIndex could trigger mark state, tooltip, crosshair\n * @param value dimension value\n * @param opt option for set trigger\n */\n setDimensionIndex(value: StringOrNumber, opt: DimensionIndexOption) {\n // event\n let dimensionInfo: IDimensionInfo[] | null = null;\n Array.from(this._event.getComposedEventMap().values()).forEach(e => {\n const { eventType, event } = e;\n if (eventType === DimensionEventEnum.dimensionHover || eventType === DimensionEventEnum.dimensionClick) {\n const info = event.dispatch(value, opt) as [];\n if (info?.length) {\n dimensionInfo = info;\n }\n }\n });\n const isUnableValue =\n isNil(value) || !dimensionInfo || dimensionInfo.every(d => isDiscrete(d.axis.getScale().type) && isNil(d.index));\n // tooltip\n if (opt.tooltip !== false) {\n const tooltip = this._components.find(c => c.type === ComponentTypeEnum.tooltip) as unknown as ITooltip;\n if (tooltip?.getVisible()) {\n if (isUnableValue) {\n (tooltip).hideTooltip?.();\n } else {\n const dataFilter = {};\n dimensionInfo.forEach((d: IDimensionInfo) => {\n const { axis, value, data } = d;\n const isY = axis.getOrient() === 'left' || axis.getOrient() === 'right';\n data.forEach(d => {\n if (isY) {\n dataFilter[(d.series).fieldY[0]] = value;\n } else {\n dataFilter[(d.series).fieldX[0]] = value;\n }\n });\n });\n tooltip.showTooltip(dataFilter, opt.showTooltipOption);\n }\n }\n }\n if (opt.crosshair !== false) {\n const crosshair = this._components.find(\n c => c.type === ComponentTypeEnum.cartesianCrosshair\n ) as unknown as ICrossHair;\n if (crosshair && crosshair.clearAxisValue && crosshair.setAxisValue) {\n if (isUnableValue) {\n crosshair.clearAxisValue?.();\n crosshair.hide?.();\n } else {\n dimensionInfo.forEach((d: IDimensionInfo) => {\n const { axis, value } = d;\n crosshair.clearAxisValue();\n crosshair.setAxisValue(value, axis);\n crosshair.layoutByValue();\n });\n }\n }\n }\n }\n\n getColorScheme() {\n return this._option.getTheme?.().colorScheme;\n }\n}\n","import { pickWithout } from '@visactor/vutils';\nimport type { IBackgroundSpec, IBackgroundStyleSpec } from '../../typings';\n\nexport function convertBackgroundSpec(\n bg: IBackgroundSpec\n): Omit & { background?: IBackgroundStyleSpec['image'] } {\n if (!bg) {\n return null;\n }\n if (typeof bg === 'string') {\n return {\n fill: bg,\n fillOpacity: 1\n };\n }\n if (typeof bg !== 'object') {\n return null;\n }\n const result = pickWithout(bg, ['x', 'y', 'width', 'height', 'x1', 'y1', 'image']);\n result.background = bg.image;\n return result;\n}\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { ILineChartSpec } from './interface';\nimport { registerLineSeries } from '../../series/line/line';\nimport { Factory } from '../../core/factory';\nimport { LineChartSpecTransformer } from './line-transformer';\nimport { BaseChart } from '../base';\n\nexport class LineChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.line;\n static readonly seriesType: string = SeriesTypeEnum.line;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = LineChartSpecTransformer;\n readonly transformerConstructor = LineChartSpecTransformer;\n readonly type: string = ChartTypeEnum.line;\n readonly seriesType: string = SeriesTypeEnum.line;\n\n protected _canStack: boolean = true;\n}\n\nexport const registerLineChart = () => {\n registerLineSeries();\n Factory.registerChart(LineChart.type, LineChart);\n};\n","import { Factory } from './../core/factory';\nimport type { IAreaMarkSpec } from '../typings/visual';\nimport { BaseLineMark } from './base/base-line';\nimport type { IMarkRaw, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerAreaGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarLineOrAreaAnimation } from '../animation/config';\n\nexport type IAreaMark = IMarkRaw;\n\nexport class AreaMark extends BaseLineMark implements IAreaMark {\n static readonly type = MarkTypeEnum.area;\n readonly type = AreaMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n lineWidth: 0\n };\n return defaultStyle;\n }\n\n protected _getIgnoreAttributes(): string[] {\n return [];\n }\n}\n\nexport const registerAreaMark = () => {\n Factory.registerMark(AreaMark.type, AreaMark);\n registerAreaGraphic();\n registerVGrammarLineOrAreaAnimation();\n};\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport { array, isValid } from '@visactor/vutils';\n\nexport class AreaSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n protected _getSeriesStyle = (datum: any, styleKey: string | string[], defaultValue?: any) => {\n for (const key of array(styleKey)) {\n let value = this.series.getSeriesStyle(datum)?.(key);\n // because of line mark merge into area mark\n // TODO: if tooltip symbol use mark fill & stroke ,remove this code\n if (value === false && (key === 'fill' || key === 'stroke')) {\n if (key === 'fill') {\n value = this.series.getSeriesStyle(datum)?.('stroke')?.[0];\n } else {\n value = this.series.getSeriesStyle(datum)?.('fill');\n }\n }\n if (isValid(value)) {\n return value;\n }\n }\n return defaultValue;\n };\n}\n","import { registerLineAnimation, registerScaleInOutAnimation } from '../../animation/config';\nimport { Factory } from '../../core/factory';\nimport { Direction } from '../../typings/space';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DirectionType } from '../../typings';\nimport type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\n\nexport interface IAreaAnimationParams {\n direction: DirectionType;\n}\n\nexport type AreaAppearPreset = 'clipIn' | 'fadeIn' | 'grow';\n\nconst Appear_ClipIn: IAnimationTypeConfig = {\n type: 'clipIn'\n};\n\nconst Appear_Grow = (params: IAreaAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growPointsXIn' : 'growPointsYIn',\n options: {\n orient: params.direction === Direction.horizontal ? 'positive' : 'negative'\n }\n };\n};\n\nconst Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nexport function areaPresetAnimation(\n params: IAreaAnimationParams,\n preset: AreaAppearPreset | boolean\n): IAnimationTypeConfig {\n if (preset === false) {\n return {};\n }\n switch (preset) {\n case 'grow':\n return Appear_Grow(params);\n case 'fadeIn':\n return Appear_FadeIn;\n default:\n return Appear_ClipIn;\n }\n}\n\nexport const registerAreaAnimation = () => {\n Factory.registerAnimation('area', (params: IAreaAnimationParams, preset: AreaAppearPreset) => {\n return {\n appear: areaPresetAnimation(params, preset),\n enter: { type: 'fadeIn' },\n exit: { type: 'fadeOut' },\n disappear: { type: 'clipOut' }\n };\n });\n registerLineAnimation();\n registerScaleInOutAnimation();\n};\n","import { isNil, isValid } from '@visactor/vutils';\nimport type { IChartSpecInfo } from '../../chart/interface';\nimport { SeriesMarkNameEnum } from '../interface';\nimport { LineLikeSeriesSpecTransformer } from '../mixin/line-mixin-transformer';\nimport type { AreaSeries } from './area';\nimport type { IAreaSeriesSpec, IAreaSeriesTheme } from './interface';\nimport type { ConvertToMarkStyleSpec, IAreaMarkSpec } from '../../typings';\nimport { mergeSpec } from '../../util';\n\nexport class AreaSeriesSpecTransformer<\n T extends IAreaSeriesSpec = IAreaSeriesSpec,\n K extends IAreaSeriesTheme = IAreaSeriesTheme\n> extends LineLikeSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n super._transformLabelSpec(spec);\n this._addMarkLabelSpec(\n spec,\n SeriesMarkNameEnum.area,\n 'areaLabel' as any,\n 'initLineLabelMarkStyle',\n undefined,\n true\n );\n const isPointVisible = spec.point?.visible !== false && spec.point?.style?.visible !== false;\n if (!isPointVisible) {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.area);\n }\n }\n\n protected _transformSpecAfterMergingTheme(spec: T, chartSpec: any, chartSpecInfo?: IChartSpecInfo) {\n super._transformSpecAfterMergingTheme(spec, chartSpec, chartSpecInfo);\n\n const { area = {}, line = {}, seriesMark = 'area' } = spec;\n const isAreaVisible = area.visible !== false && area.style?.visible !== false;\n const isLineVisible = line.visible !== false && line.style?.visible !== false;\n // merge line to area\n area.interactive = !!(area.interactive || (line.interactive ?? true));\n area.support3d = !!(area.support3d || line.support3d);\n area.zIndex =\n isValid(area.zIndex) || isValid(line.zIndex) ? Math.max(area.zIndex ?? 0, line.zIndex ?? 0) : undefined;\n\n // remove area stroke\n if (area.style) {\n delete area.style.stroke;\n }\n if (area.state) {\n Object.keys(area.state).forEach(state => {\n if ('style' in area.state[state]) {\n delete area.state[state].style.stroke;\n } else {\n delete (>area.state[state]).stroke;\n }\n });\n }\n // check which one is main\n let mainSpec = area;\n let subSpec = line;\n if (seriesMark === 'line' || (isLineVisible && !isAreaVisible)) {\n mainSpec = line;\n subSpec = area;\n }\n area.style = mergeSpec({}, subSpec.style, mainSpec.style);\n area.state = mergeSpec({}, subSpec.state, mainSpec.state);\n if (!isAreaVisible) {\n area.style.fill = false;\n }\n if (!isLineVisible) {\n area.style.stroke = false;\n }\n area.visible = !(!isAreaVisible && !isLineVisible);\n\n spec.area = area;\n spec.line = line;\n }\n}\n","import type { DataView } from '@visactor/vdataset';\nimport { isValid, isArray } from '@visactor/vutils';\n/* eslint-disable no-duplicate-imports */\nimport { LineLikeSeriesMixin } from '../mixin/line-mixin';\nimport type { IAreaMark } from '../../mark/area';\nimport { Direction } from '../../typings/space';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport { AttributeLevel } from '../../constant';\nimport type { Datum, ConvertToMarkStyleSpec, IAreaMarkSpec, InterpolateType } from '../../typings';\nimport { mergeSpec } from '../../util/spec/merge-spec';\nimport { valueInScaleRange } from '../../util/scale';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { mixin } from '@visactor/vutils';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { DEFAULT_SMOOTH_INTERPOLATE } from '../../typings/interpolate';\nimport type { IAreaSeriesSpec } from './interface';\nimport type { IMarkAnimateSpec } from '../../animation/spec';\nimport { registerLineMark } from '../../mark/line';\nimport { registerAreaMark } from '../../mark/area';\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { AreaSeriesTooltipHelper } from './tooltip-helpter';\nimport { areaSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { registerAreaAnimation } from './animation';\nimport type { IMark } from '../../mark/interface';\nimport { registerSampleTransform, registerMarkOverlapTransform } from '@visactor/vgrammar-core';\nimport { AreaSeriesSpecTransformer } from './area-transformer';\nimport { getGroupAnimationParams } from '../util/utils';\n\nexport interface AreaSeries\n extends Pick<\n LineLikeSeriesMixin,\n | 'initLineMark'\n | 'initSymbolMark'\n | 'initLabelMarkStyle'\n | 'initLineMarkStyle'\n | 'initSymbolMarkStyle'\n | 'encodeDefined'\n | '_lineMark'\n | '_symbolMark'\n | 'addSamplingCompile'\n | 'addOverlapCompile'\n | 'reCompileSampling'\n | 'initLineLabelMarkStyle'\n >,\n CartesianSeries {}\n\nexport class AreaSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.area;\n type = SeriesTypeEnum.area;\n\n static readonly mark: SeriesMarkMap = areaSeriesMark;\n static readonly transformerConstructor = AreaSeriesSpecTransformer as any;\n readonly transformerConstructor = AreaSeriesSpecTransformer;\n\n protected _areaMark!: IAreaMark;\n protected _supportStack: boolean = true;\n protected _sortDataByAxis: boolean = false;\n\n initMark(): void {\n const progressive = {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n };\n\n const isAreaVisible = this._spec.area?.visible !== false && this._spec.area?.style?.visible !== false;\n\n const seriesMark = this._spec.seriesMark ?? 'area';\n // area\n this._areaMark = this._createMark(AreaSeries.mark.area, {\n groupKey: this._seriesField,\n defaultMorphElementKey: this.getDimensionField()[0],\n progressive,\n isSeriesMark: isAreaVisible && seriesMark !== 'point',\n customShape: this._spec.area?.customShape\n }) as IAreaMark;\n this.initSymbolMark(progressive, seriesMark === 'point');\n }\n\n initMarkStyle(): void {\n // FIXME 是不是应该把curveType提前到上层配置\n // 不允许area和line的curveType不一致\n const userCurveType = (this.getSpec().area?.style?.curveType ??\n this.getSpec().line?.style?.curveType) as InterpolateType;\n const curveType =\n userCurveType === DEFAULT_SMOOTH_INTERPOLATE\n ? this._direction === Direction.vertical\n ? 'monotoneX'\n : 'monotoneY'\n : userCurveType;\n\n // area\n const areaMark = this._areaMark;\n if (areaMark) {\n if (this._direction === Direction.vertical) {\n this.setMarkStyle(\n this._areaMark,\n {\n x: this.dataToPositionX.bind(this),\n y1: (datum: Datum) => {\n return valueInScaleRange(this.dataToPositionY1(datum), this._yAxisHelper?.getScale?.(0));\n },\n y: this.dataToPositionY.bind(this),\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._areaMark,\n {\n x: this.dataToPositionX.bind(this),\n x1: (datum: Datum) => {\n return valueInScaleRange(this.dataToPositionX1(datum), this._xAxisHelper?.getScale?.(0));\n },\n y: this.dataToPositionY.bind(this),\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null,\n orient: this._direction\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n this.setMarkStyle(\n areaMark,\n {\n fill: this.getColorAttribute(),\n stroke: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(\n areaMark,\n {\n defined: this._getInvalidDefined,\n connectedType: this._getInvalidConnectType()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n this.setMarkStyle(\n areaMark,\n {\n curveType\n },\n 'normal',\n AttributeLevel.Built_In\n );\n this._trigger.registerMark(areaMark);\n\n // change stroke to area stoke = [lineStroke,false,false,false]\n Object.keys(areaMark.stateStyle).forEach(state => {\n if (areaMark.stateStyle[state].stroke) {\n areaMark.setPostProcess(\n 'stroke',\n result => {\n return [result, false, false, false];\n },\n state\n );\n }\n });\n }\n\n this.initLineMarkStyle(this._direction, userCurveType);\n this.initSymbolMarkStyle();\n }\n\n initAnimation() {\n const areaAnimationParams = { direction: this.direction };\n const appearPreset = (this._spec.animationAppear as IMarkAnimateSpec)?.preset;\n if (this._lineMark) {\n this._lineMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('line')?.(areaAnimationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.line, this._spec, this._markAttributeContext)\n )\n );\n }\n\n if (this._areaMark) {\n this._areaMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('area')?.(areaAnimationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.area, this._spec, this._markAttributeContext)\n )\n );\n }\n\n if (this._symbolMark) {\n const animationParams = getGroupAnimationParams(this);\n this._symbolMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('scaleInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.point, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n }\n }\n\n protected initTooltip() {\n this._tooltipHelper = new AreaSeriesTooltipHelper(this);\n this._areaMark && this._tooltipHelper.activeTriggerSet.dimension.add(this._areaMark);\n this._lineMark && this._tooltipHelper.activeTriggerSet.dimension.add(this._lineMark);\n this._symbolMark && this._tooltipHelper.activeTriggerSet.mark.add(this._symbolMark);\n }\n\n viewDataStatisticsUpdate(d: DataView) {\n super.viewDataStatisticsUpdate(d);\n this.encodeDefined(this._areaMark, 'defined');\n }\n\n compile(): void {\n super.compile();\n this.addSamplingCompile();\n this.addOverlapCompile();\n }\n\n getDefaultShapeType() {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._areaMark, this._symbolMark, this._lineMark];\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this.reCompileSampling();\n }\n\n getSeriesStyle(datum: Datum) {\n return (attribute: string) => {\n const seriesMarkType = this._spec.seriesMark ?? 'area';\n\n let result = this._seriesMark?.getAttribute(attribute as any, datum) ?? undefined;\n if (attribute === 'fill' && (!result || seriesMarkType === 'line')) {\n attribute = 'stroke';\n result = this._seriesMark?.getAttribute(attribute, datum) ?? undefined;\n }\n if (attribute === 'stroke' && isArray(result)) {\n return result[0];\n }\n return result;\n };\n }\n}\n\nmixin(AreaSeries, LineLikeSeriesMixin);\n\nexport const registerAreaSeries = () => {\n registerSampleTransform();\n registerMarkOverlapTransform();\n registerLineMark();\n registerAreaMark();\n registerSymbolMark();\n registerAreaAnimation();\n Factory.registerSeries(AreaSeries.type, AreaSeries);\n};\n","import { CartesianChartSpecTransformer } from '../cartesian';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { IAreaChartSpec } from './interface';\n\nexport class AreaChartSpecTransformer<\n T extends IAreaChartSpec = IAreaChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n return {\n ...super._getDefaultSeriesSpec(spec),\n point: spec.point,\n line: spec.line,\n area: spec.area,\n seriesMark: spec.seriesMark ?? 'area',\n activePoint: spec.activePoint,\n sampling: spec.sampling,\n samplingFactor: spec.samplingFactor,\n pointDis: spec.pointDis,\n pointDisMul: spec.pointDisMul,\n markOverlap: spec.markOverlap,\n areaLabel: spec.areaLabel\n };\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n setDefaultCrosshairForCartesianChart(spec);\n }\n}\n","import { registerAreaSeries } from '../../series/area/area';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IAreaChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { AreaChartSpecTransformer } from './area-transformer';\nimport { BaseChart } from '../base';\n\nexport class AreaChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.area;\n static readonly seriesType: string = SeriesTypeEnum.area;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = AreaChartSpecTransformer;\n readonly transformerConstructor = AreaChartSpecTransformer;\n readonly type: string = ChartTypeEnum.area;\n readonly seriesType: string = SeriesTypeEnum.area;\n protected _canStack: boolean = true;\n}\n\nexport const registerAreaChart = () => {\n registerAreaSeries();\n Factory.registerChart(AreaChart.type, AreaChart);\n};\n","import { Factory } from '../../core/factory';\nimport { Direction } from '../../typings/space';\n// eslint-disable-next-line no-duplicate-imports\nimport type { Datum, DirectionType } from '../../typings';\nimport type { IElement, IAnimationTypeConfig } from '@visactor/vgrammar-core';\n\nexport interface IBarAnimationParams {\n xField: string;\n yField: string;\n direction: DirectionType;\n // growHeightOverall,需要知道一起生长的起始点\n // 即 x轴 在canvas上的y( 或 y轴 在canvas上的x )。\n growFrom: () => number;\n}\n\nexport type BarAppearPreset = 'grow' | 'fadeIn' | 'scaleIn';\n\n/**\n * grow生长option\n * 在appear时,所有柱子一起从同一个位置生长,需要growXXXOverall效果;\n * 在enter时,柱子应该从自身位置生长;\n * @param params\n * @param isOverall\n * @returns\n */\nfunction barGrowOption(barParams: IBarAnimationParams, isOverall = true) {\n return (datum: Datum, element: IElement, params: any) => {\n const field = barParams.direction === 'vertical' ? barParams.yField : barParams.xField;\n const data = datum?.[field];\n if (barParams.direction === 'vertical') {\n return {\n overall: isOverall ? barParams.growFrom() : isOverall,\n orient: data > 0 ? 'negative' : 'positive'\n };\n }\n return {\n overall: isOverall ? barParams.growFrom() : false,\n orient: data > 0 ? 'positive' : 'negative'\n };\n };\n}\nexport const barGrowIn = (params: IBarAnimationParams, isOverall: boolean = true): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growWidthIn' : 'growHeightIn',\n options: barGrowOption(params, isOverall)\n };\n};\n\nexport const barGrowOut = (params: IBarAnimationParams, isOverall: boolean = true): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growWidthOut' : 'growHeightOut',\n options: barGrowOption(params, isOverall)\n };\n};\n\nconst Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nconst Appear_ScaleIn: IAnimationTypeConfig = {\n type: 'growCenterIn'\n};\n\nexport function barPresetAnimation(\n params: IBarAnimationParams,\n preset: BarAppearPreset | boolean\n): IAnimationTypeConfig {\n if (preset === false) {\n return {};\n }\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n case 'scaleIn':\n return Appear_ScaleIn;\n default:\n return barGrowIn(params);\n }\n}\n\nexport const registerBarAnimation = () => {\n Factory.registerAnimation('bar', (params: IBarAnimationParams, preset: BarAppearPreset) => {\n return {\n appear: barPresetAnimation(params, preset),\n enter: barGrowIn(params, false),\n exit: barGrowOut(params, false),\n disappear: barGrowOut(params)\n };\n });\n};\n\nexport const registerBar3dAnimation = () => {\n Factory.registerAnimation('bar3d', (params: IBarAnimationParams, preset: BarAppearPreset) => {\n return {\n appear: barPresetAnimation(params, preset),\n enter: barGrowIn(params, false),\n exit: barGrowOut(params, false),\n disappear: barGrowOut(params)\n };\n });\n};\n","import { Factory } from './../core/factory';\nimport type { IRectMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IMarkRaw, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerRectGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarRectAnimation } from '../animation/config';\n\nexport type IRectMark = IMarkRaw;\n\nexport class RectMark extends BaseMark implements IRectMark {\n static readonly type = MarkTypeEnum.rect;\n readonly type = RectMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n width: undefined,\n height: undefined,\n lineWidth: 0\n };\n return defaultStyle;\n }\n}\n\nexport const registerRectMark = () => {\n Factory.registerMark(RectMark.type, RectMark);\n registerRectGraphic();\n registerVGrammarRectAnimation();\n};\n","import type { IStackCacheNode } from '../../util/data';\nimport { valueInScaleRange } from '../../util/scale';\n\nexport function stackWithMinHeight(\n stackCache: IStackCacheNode,\n stackInverse: boolean,\n context: {\n isVertical: boolean;\n start: string;\n end: string;\n startMethod: string;\n endMethod: string;\n axisHelper: string;\n }\n) {\n if (stackCache.values.length > 0) {\n // stack one group\n let seriesInfo = stackCache.series;\n if (stackInverse) {\n seriesInfo = seriesInfo.slice().reverse();\n }\n // temp\n let lastY: number;\n seriesInfo.forEach(({ s, values }, sIndex) => {\n // stack info in series\n const barMinHeight = s.getSpec().barMinHeight;\n const seriesScale = s[context.axisHelper].getScale?.(0);\n const inverse = s[context.axisHelper].isInverse();\n\n // stack\n for (let index = 0; index < values.length; index++) {\n const obj = values[stackInverse ? values.length - 1 - index : index];\n const y1 = valueInScaleRange(s[context.startMethod](obj), seriesScale);\n let y = valueInScaleRange(s[context.endMethod](obj), seriesScale);\n\n if (index === 0 && sIndex === 0) {\n lastY = y1;\n }\n\n let height = Math.abs(y1 - y);\n if (height < barMinHeight) {\n height = barMinHeight;\n }\n\n let flag = 1;\n if (y < y1) {\n flag = -1;\n } else if (y === y1) {\n flag = context.isVertical ? (inverse ? 1 : -1) : inverse ? -1 : 1;\n }\n y = lastY + flag * height;\n obj[context.start] = lastY;\n obj[context.end] = y;\n lastY = y;\n }\n });\n }\n for (const key in stackCache.nodes) {\n stackWithMinHeight(stackCache.nodes[key], stackInverse, context);\n }\n}\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IBarSeriesSpec, IBarSeriesTheme } from './interface';\n\nexport class BarSeriesSpecTransformer<\n T extends IBarSeriesSpec = IBarSeriesSpec,\n K extends IBarSeriesTheme = IBarSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.bar);\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport { isContinuous } from '@visactor/vscale';\nimport { Direction } from '../../typings/space';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport type { IMark, IMarkProgressiveConfig } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport { AttributeLevel } from '../../constant';\nimport type { Datum, DirectionType } from '../../typings';\nimport { valueInScaleRange } from '../../util/scale';\nimport { getRegionStackGroup } from '../../util/data';\nimport { getActualNumValue } from '../../util/space';\nimport { registerBarAnimation, type BarAppearPreset, type IBarAnimationParams } from './animation';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport type { IBarSeriesSpec } from './interface';\nimport type { IAxisHelper } from '../../component/axis/cartesian/interface';\nimport type { IRectMark } from '../../mark/rect';\nimport type { IModelInitOption } from '../../model/interface';\nimport type { ITextMark } from '../../mark/text';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerRectMark } from '../../mark/rect';\nimport { array, isValid, last } from '@visactor/vutils';\nimport { barSeriesMark } from './constant';\nimport { stackWithMinHeight } from '../util/stack';\nimport { Factory } from '../../core/factory';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { SeriesData } from '../base/series-data';\nimport { DataView } from '@visactor/vdataset';\nimport { addVChartProperty } from '../../data/transforms/add-property';\nimport { addDataKey, initKeyMap } from '../../data/transforms/data-key';\nimport { registerSampleTransform } from '@visactor/vgrammar-core';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { BarSeriesSpecTransformer } from './bar-transformer';\nimport { RECT_X, RECT_X1, RECT_Y, RECT_Y1 } from '../base/constant';\n\nexport const DefaultBandWidth = 6; // 默认的bandWidth,避免连续轴没有bandWidth\n\nexport class BarSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.bar;\n type = SeriesTypeEnum.bar;\n protected _barMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.bar;\n protected _barMarkType: MarkTypeEnum = MarkTypeEnum.rect;\n\n static readonly mark: SeriesMarkMap = barSeriesMark;\n static readonly transformerConstructor = BarSeriesSpecTransformer as any;\n readonly transformerConstructor = BarSeriesSpecTransformer;\n\n protected _supportStack: boolean = true;\n protected _bandPosition = 0;\n protected _barMark!: IRectMark;\n protected _barBackgroundMark!: IRectMark;\n\n protected _barBackgroundViewData: SeriesData;\n\n initMark(): void {\n const progressive = {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n };\n\n this._initBarBackgroundMark(progressive);\n\n this._barMark = this._createMark(\n {\n ...BarSeries.mark.bar,\n name: this._barMarkName,\n type: this._barMarkType\n },\n {\n morph: shouldMarkDoMorph(this._spec, this._barMarkName),\n defaultMorphElementKey: this.getDimensionField()[0],\n groupKey: this._seriesField,\n isSeriesMark: true,\n progressive,\n customShape: this._spec.bar?.customShape\n }\n ) as IRectMark;\n }\n\n protected _initBarBackgroundMark(progressive?: IMarkProgressiveConfig): void {\n if (this._spec.barBackground?.visible) {\n this._barBackgroundMark = this._createMark(BarSeries.mark.barBackground, {\n dataView: this._barBackgroundViewData.getDataView(),\n dataProductId: this._barBackgroundViewData.getProductId(),\n progressive,\n customShape: this._spec.barBackground?.customShape\n }) as IRectMark;\n }\n }\n\n initMarkStyle(): void {\n if (this._barMark) {\n this.setMarkStyle(\n this._barMark,\n {\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n\n this._trigger.registerMark(this._barMark);\n }\n }\n\n initLabelMarkStyle(textMark: ITextMark) {\n if (!textMark) {\n return;\n }\n this.setMarkStyle(textMark, {\n fill: this.getColorAttribute(),\n text: (datum: Datum) => {\n return datum[this.getStackValueField()];\n },\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n });\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._barMark && this._tooltipHelper.activeTriggerSet.mark.add(this._barMark);\n }\n\n protected _statisticViewData(): void {\n super._statisticViewData();\n\n if (!this._spec.barBackground?.visible) {\n return;\n }\n\n /**\n * @description 准备 barBackground 数据\n */\n const dimensionItems = ([data]: DataView[], op: string) => {\n let dataCollect: any[] = [{}];\n const fields = this.getDimensionField();\n // 将维度轴的所有层级 field 的对应数据做笛卡尔积\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i];\n const values = data.latestData[field]?.values;\n if (!values?.length) {\n continue;\n }\n const newDataCollect: any[] = [];\n for (let j = 0; j < values.length; j++) {\n for (let k = 0; k < dataCollect.length; k++) {\n newDataCollect.push({\n ...dataCollect[k],\n [field]: values[j]\n });\n }\n }\n dataCollect = newDataCollect;\n }\n return dataCollect;\n };\n\n registerDataSetInstanceTransform(this._option.dataSet, 'addVChartProperty', addVChartProperty);\n registerDataSetInstanceTransform(this._option.dataSet, 'dimensionItems', dimensionItems);\n\n const barBackgroundData = new DataView(this._option.dataSet)\n .parse([this._viewDataStatistics], {\n type: 'dataview'\n })\n .transform(\n {\n type: 'dimensionItems'\n },\n false\n )\n .transform(\n {\n type: 'addVChartProperty',\n options: {\n beforeCall: initKeyMap.bind(this),\n call: addDataKey\n }\n },\n false\n );\n\n this._viewDataStatistics?.target.addListener('change', barBackgroundData.reRunAllTransform);\n this._barBackgroundViewData = new SeriesData(this._option, barBackgroundData);\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n if (this.direction === 'vertical') {\n this._xAxisHelper?.getScale(0).type === 'band' ? this.initBandRectMarkStyle() : this.initLinearRectMarkStyle();\n } else {\n this._yAxisHelper?.getScale(0).type === 'band' ? this.initBandRectMarkStyle() : this.initLinearRectMarkStyle();\n }\n }\n\n private _shouldDoPreCalculate() {\n const region = this.getRegion();\n return this._stack && region.getSeries().filter(s => s.type === this.type && s.getSpec().barMinHeight).length;\n }\n\n private _calculateStackRectPosition(isVertical: boolean) {\n const region = this.getRegion();\n\n // @ts-ignore\n if (region._bar_series_position_calculated) {\n return;\n }\n // @ts-ignore\n region._bar_series_position_calculated = true; // 因为是 region 内堆叠矩形的计算,所以加一个 hack 标识位用于避免重复计算\n let start: string;\n let end: string;\n let startMethod: string;\n let endMethod: string;\n let axisHelper: string;\n if (isVertical) {\n start = RECT_Y1;\n end = RECT_Y;\n startMethod = '_dataToPosY1';\n endMethod = '_dataToPosY';\n axisHelper = '_yAxisHelper';\n } else {\n start = RECT_X1;\n end = RECT_X;\n startMethod = '_dataToPosX1';\n endMethod = '_dataToPosX';\n axisHelper = '_xAxisHelper';\n }\n\n // only reCompute bar\n const stackValueGroup = getRegionStackGroup(region, false, s => s.type === this.type);\n\n // 按照堆积逻辑 重新计算一次图形的堆积位置并设置到数据上\n for (const stackValue in stackValueGroup) {\n for (const key in stackValueGroup[stackValue].nodes) {\n stackWithMinHeight(stackValueGroup[stackValue].nodes[key], region.getStackInverse(), {\n isVertical,\n start,\n end,\n startMethod,\n endMethod,\n axisHelper\n });\n }\n }\n }\n\n private _calculateRectPosition(datum: Datum, isVertical: boolean) {\n let startMethod: string;\n let endMethod: string;\n let axisHelper: string;\n if (isVertical) {\n startMethod = '_dataToPosY1';\n endMethod = '_dataToPosY';\n axisHelper = '_yAxisHelper';\n } else {\n startMethod = '_dataToPosX1';\n endMethod = '_dataToPosX';\n axisHelper = '_xAxisHelper';\n }\n\n const seriesScale = this[axisHelper].getScale?.(0);\n const inverse = this[axisHelper].isInverse();\n const barMinHeight = this._spec.barMinHeight;\n const y1 = valueInScaleRange(this[startMethod](datum), seriesScale);\n const y = valueInScaleRange(this[endMethod](datum), seriesScale);\n\n let height = Math.abs(y1 - y);\n if (height < barMinHeight) {\n height = barMinHeight;\n }\n\n let flag = 1;\n if (y < y1) {\n flag = -1;\n } else if (y === y1) {\n flag = isVertical ? (inverse ? 1 : -1) : inverse ? -1 : 1;\n }\n return y1 + flag * height;\n }\n\n // 用于 bar-like 的位置转换,考虑到 range-column 的方式差异,所以提取出这样的方式\n protected _dataToPosX(datum: Datum) {\n return this.dataToPositionX(datum);\n }\n\n // 用于 bar-like 的位置转换,考虑到 range-column 的方式差异,所以提取出这样的方式\n protected _dataToPosX1(datum: Datum) {\n return this.dataToPositionX1(datum);\n }\n\n // 用于 bar-like 的位置转换,考虑到 range-column 的方式差异,所以提取出这样的方式\n protected _dataToPosY(datum: Datum) {\n return this.dataToPositionY(datum);\n }\n\n // 用于 bar-like 的位置转换,考虑到 range-column 的方式差异,所以提取出这样的方式\n protected _dataToPosY1(datum: Datum) {\n return this.dataToPositionY1(datum);\n }\n\n initBandRectMarkStyle() {\n const xScale = this._xAxisHelper?.getScale?.(0);\n const yScale = this._yAxisHelper?.getScale?.(0);\n\n // guess the direction which the user want\n if (this.direction === Direction.horizontal) {\n this.setMarkStyle(\n this._barMark,\n {\n x: (datum: Datum) => {\n if (this._shouldDoPreCalculate()) {\n this._calculateStackRectPosition(false);\n return datum[RECT_X];\n }\n\n if (this._spec.barMinHeight) {\n return this._calculateRectPosition(datum, false);\n }\n\n return valueInScaleRange(this._dataToPosX(datum), xScale);\n },\n x1: (datum: Datum) => {\n if (this._shouldDoPreCalculate()) {\n this._calculateStackRectPosition(false);\n return datum[RECT_X1];\n }\n\n return valueInScaleRange(this._dataToPosX1(datum), xScale);\n },\n y: (datum: Datum) => this._getPosition(this.direction, datum),\n height: () => this._getBarWidth(this._yAxisHelper)\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._barMark,\n {\n x: (datum: Datum) => this._getPosition(this.direction, datum),\n y: (datum: Datum, ctx, opt, dataView) => {\n if (this._shouldDoPreCalculate()) {\n this._calculateStackRectPosition(true);\n return datum[RECT_Y];\n }\n\n if (this._spec.barMinHeight) {\n return this._calculateRectPosition(datum, true);\n }\n\n return valueInScaleRange(this._dataToPosY(datum), yScale);\n },\n y1: (datum: Datum) => {\n if (this._shouldDoPreCalculate()) {\n this._calculateStackRectPosition(true);\n return datum[RECT_Y1];\n }\n return valueInScaleRange(this._dataToPosY1(datum), yScale);\n },\n width: () => {\n return this._getBarWidth(this._xAxisHelper);\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n this._initBarBackgroundMarkStyle();\n }\n\n protected _initBarBackgroundMarkStyle() {\n if (!this._barBackgroundMark) {\n return;\n }\n\n const xScale = this._xAxisHelper?.getScale?.(0);\n const yScale = this._yAxisHelper?.getScale?.(0);\n\n // guess the direction which the user want\n if (this.direction === Direction.horizontal) {\n this.setMarkStyle(\n this._barBackgroundMark,\n {\n x: () => {\n const range = xScale.range();\n const min = Math.min(range[0], range[range.length - 1]);\n return min;\n },\n x1: () => {\n const range = xScale.range();\n const max = Math.max(range[0], range[range.length - 1]);\n return max;\n },\n y: (datum: Datum) => this._getPosition(this.direction, datum),\n height: () => this._getBarWidth(this._yAxisHelper)\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._barBackgroundMark,\n {\n x: (datum: Datum) => this._getPosition(this.direction, datum),\n y: () => {\n const range = yScale.range();\n const min = Math.min(range[0], range[range.length - 1]);\n return min;\n },\n y1: () => {\n const range = yScale.range();\n const max = Math.max(range[0], range[range.length - 1]);\n return max;\n },\n width: () => {\n return this._getBarWidth(this._xAxisHelper);\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initLinearRectMarkStyle() {\n const xScale = this._xAxisHelper?.getScale?.(0);\n const yScale = this._yAxisHelper?.getScale?.(0);\n\n if (this.direction === Direction.vertical) {\n this.setMarkStyle(\n this._barMark,\n {\n x: (datum: Datum) => valueInScaleRange(this.dataToPositionX(datum), xScale),\n x1: (datum: Datum) => valueInScaleRange(this.dataToPositionX1(datum), xScale),\n y: (datum: Datum, ctx, opt, dataView) => {\n if (this._shouldDoPreCalculate()) {\n this._calculateStackRectPosition(true);\n return datum[RECT_Y];\n }\n\n if (this._spec.barMinHeight) {\n return this._calculateRectPosition(datum, true);\n }\n\n return valueInScaleRange(this.dataToPositionY(datum), yScale);\n },\n y1: (datum: Datum) => {\n if (this._shouldDoPreCalculate()) {\n this._calculateStackRectPosition(true);\n return datum[RECT_Y1];\n }\n return valueInScaleRange(this.dataToPositionY1(datum), yScale);\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._barMark,\n {\n x: (datum: Datum) => {\n if (this._shouldDoPreCalculate()) {\n this._calculateStackRectPosition(false);\n\n return datum[RECT_X];\n }\n\n if (this._spec.barMinHeight) {\n return this._calculateRectPosition(datum, false);\n }\n\n return valueInScaleRange(this.dataToPositionX(datum), xScale);\n },\n x1: (datum: Datum) => {\n if (this._shouldDoPreCalculate()) {\n this._calculateStackRectPosition(false);\n return datum[RECT_X1];\n }\n return valueInScaleRange(this.dataToPositionX1(datum), xScale);\n },\n y: (datum: Datum) => valueInScaleRange(this.dataToPositionY(datum), yScale),\n y1: (datum: Datum) => valueInScaleRange(this.dataToPositionY1(datum), yScale)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initAnimation() {\n // 这个数据在这个时候拿不到,因为组件还没创建结束,统计和筛选也还没添加。\n // 而且这个值理论上是动态的,建议 监听 viewDataStatisticsUpdate 消息动态更新\n const barAnimationParams: IBarAnimationParams = {\n yField: this._fieldY[0],\n xField: this._fieldX[0],\n direction: this.direction,\n growFrom: () =>\n this.direction === 'horizontal'\n ? this._xAxisHelper?.getScale(0).scale(0)\n : this._yAxisHelper?.getScale(0).scale(0)\n };\n const appearPreset = (this._spec.animationAppear as IStateAnimateSpec)?.preset;\n const animationParams = getGroupAnimationParams(this);\n\n this._barMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('bar')?.(barAnimationParams, appearPreset),\n userAnimationConfig(this._barMarkName, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n }\n\n protected _getBarWidth(axisHelper: IAxisHelper) {\n const hasBarWidth = this._spec.barWidth !== undefined;\n const bandWidth = axisHelper.getBandwidth?.(this._groups ? this._groups.fields.length - 1 : 0) ?? DefaultBandWidth;\n\n if (hasBarWidth) {\n return getActualNumValue(this._spec.barWidth, bandWidth);\n }\n const hasBarMinWidth = this._spec.barMinWidth !== undefined;\n const hasBarMaxWidth = this._spec.barMaxWidth !== undefined;\n let width = bandWidth;\n if (hasBarMinWidth) {\n width = Math.max(width, getActualNumValue(this._spec.barMinWidth, bandWidth));\n }\n if (hasBarMaxWidth) {\n width = Math.min(width, getActualNumValue(this._spec.barMaxWidth, bandWidth));\n }\n return width;\n }\n\n protected _getPosition(direction: DirectionType, datum: Datum) {\n let axisHelper;\n let sizeAttribute;\n let dataToPosition;\n if (direction === Direction.horizontal) {\n axisHelper = this.getYAxisHelper();\n sizeAttribute = 'height';\n dataToPosition = this.dataToPositionY.bind(this);\n } else {\n axisHelper = this.getXAxisHelper();\n sizeAttribute = 'width';\n dataToPosition = this.dataToPositionX.bind(this);\n }\n const scale = axisHelper.getScale(0);\n const size = this._barMark.getAttribute(sizeAttribute, datum) as number;\n const bandWidth = axisHelper.getBandwidth?.(this._groups ? this._groups.fields.length - 1 : 0) ?? DefaultBandWidth;\n if (this._groups?.fields?.length > 1 && isValid(this._spec.barGapInGroup)) {\n // 自里向外计算,沿着第一层分组的中心点进行位置调整\n const groupFields = this._groups.fields;\n const barInGroup = array(this._spec.barGapInGroup);\n let totalWidth: number = 0;\n let offSet: number = 0;\n\n for (let index = groupFields.length - 1; index >= 1; index--) {\n const groupField = groupFields[index];\n const groupValues = this.getViewDataStatistics()?.latestData?.[groupField]?.values ?? [];\n const groupCount = groupValues.length;\n const gap = getActualNumValue(barInGroup[index - 1] ?? last(barInGroup), bandWidth);\n const i = groupValues.indexOf(datum[groupField]);\n if (index === groupFields.length - 1) {\n totalWidth += groupCount * size + (groupCount - 1) * gap;\n offSet += i * (size + gap);\n } else {\n offSet += i * (totalWidth + gap);\n totalWidth += totalWidth + (groupCount - 1) * gap;\n }\n }\n\n const center = scale.scale(datum[groupFields[0]]) + axisHelper.getBandwidth(0) / 2;\n return center - totalWidth / 2 + offSet;\n }\n\n const continuous = isContinuous(scale.type || 'band');\n const pos = dataToPosition(datum);\n return pos + (bandWidth - size) * 0.5 + (continuous ? -bandWidth / 2 : 0);\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n const region = this.getRegion();\n // @ts-ignore\n region._bar_series_position_calculated = false;\n if (this._spec.sampling) {\n this.compile();\n }\n }\n\n compile(): void {\n super.compile();\n\n if (this._spec.sampling) {\n const { width, height } = this._region.getLayoutRect();\n const samplingTrans = [];\n const fieldsY = this._fieldY;\n const fieldsX = this._fieldX;\n\n samplingTrans.push({\n type: 'sampling',\n size: this._direction === Direction.vertical ? width : height,\n factor: this._spec.samplingFactor,\n yfield: this._direction === Direction.vertical ? fieldsY[0] : fieldsX[0],\n groupBy: this._seriesField,\n mode: this._spec.sampling\n });\n this._data.getProduct().transform(samplingTrans);\n }\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._barMark];\n }\n\n compileData() {\n super.compileData();\n this._barBackgroundViewData?.compile();\n }\n\n fillData() {\n super.fillData();\n this._barBackgroundViewData?.getDataView()?.reRunAllTransform();\n }\n\n viewDataUpdate(d: DataView): void {\n super.viewDataUpdate(d);\n this._barBackgroundViewData?.getDataView()?.reRunAllTransform();\n this._barBackgroundViewData?.updateData();\n }\n\n release() {\n super.release();\n this._barBackgroundViewData?.release();\n this._barBackgroundViewData = null;\n }\n}\n\nexport const registerBarSeries = () => {\n registerSampleTransform();\n registerRectMark();\n registerBarAnimation();\n Factory.registerSeries(BarSeries.type, BarSeries);\n};\n","import { CartesianChartSpecTransformer } from '../cartesian';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { IBarChartSpec } from './interface';\n\nexport class BarChartSpecTransformer extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n return {\n ...super._getDefaultSeriesSpec(spec),\n barWidth: spec.barWidth,\n barMaxWidth: spec.barMaxWidth,\n barMinWidth: spec.barMinWidth,\n barGapInGroup: spec.barGapInGroup,\n barMinHeight: spec.barMinHeight,\n sampling: spec.sampling,\n samplingFactor: spec.samplingFactor,\n barBackground: spec.barBackground\n };\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n setDefaultCrosshairForCartesianChart(spec);\n }\n}\n","import { registerBarSeries } from '../../series/bar/bar';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IBarChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { BarChartSpecTransformer } from './bar-transformer';\nimport { BaseChart } from '../base';\n\nexport class BarChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.bar;\n static readonly seriesType: string = SeriesTypeEnum.bar;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = BarChartSpecTransformer;\n readonly transformerConstructor = BarChartSpecTransformer;\n readonly type: string = ChartTypeEnum.bar;\n readonly seriesType: string = SeriesTypeEnum.bar;\n protected _canStack: boolean = true;\n}\n\nexport const registerBarChart = () => {\n registerBarSeries();\n Factory.registerChart(BarChart.type, BarChart);\n};\n","import { Factory } from './../core/factory';\nimport type { IRect3dMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IMarkRaw, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerRect3dGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarRectAnimation } from '../animation/config';\n\nexport type IRect3dMark = IMarkRaw;\n\nexport class Rect3dMark extends BaseMark implements IRect3dMark {\n static readonly type = MarkTypeEnum.rect3d;\n readonly type = Rect3dMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n width: undefined,\n height: undefined,\n length: 3\n };\n return defaultStyle;\n }\n}\n\nexport const registerRect3dMark = () => {\n Factory.registerMark(Rect3dMark.type, Rect3dMark);\n registerRect3dGraphic();\n registerVGrammarRectAnimation();\n};\n","/* eslint-disable no-duplicate-imports */\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesTypeEnum, SeriesMarkNameEnum } from '../interface/type';\nimport { BarSeries } from './bar';\nimport { Rect3dMark, registerRect3dMark } from '../../mark/rect-3d';\nimport type { IBar3dSeriesSpec } from './interface';\nimport type { AdaptiveSpec } from '../../typings';\nimport { bar3dSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { registerBar3dAnimation } from './animation';\n\nexport class Bar3dSeries extends BarSeries> {\n static readonly type: string = SeriesTypeEnum.bar3d;\n type = SeriesTypeEnum.bar3d;\n\n static readonly mark: SeriesMarkMap = bar3dSeriesMark;\n\n protected _barMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.bar3d;\n protected _barMarkType: MarkTypeEnum = MarkTypeEnum.rect3d;\n}\n\nexport const registerBar3dSeries = () => {\n registerBar3dAnimation();\n registerRect3dMark();\n Factory.registerSeries(Bar3dSeries.type, Bar3dSeries);\n};\n","import type { AdaptiveSpec } from '../../../typings';\nimport type { IBar3dChartSpec } from '../interface';\nimport { BarChartSpecTransformer } from '../bar-transformer';\n\nexport class Bar3dChartSpecTransformer extends BarChartSpecTransformer<\n AdaptiveSpec\n> {\n protected _getDefaultSeriesSpec(spec: AdaptiveSpec): any {\n return {\n ...super._getDefaultSeriesSpec(spec),\n barWidth: spec.barWidth,\n barMaxWidth: spec.barMaxWidth,\n barMinWidth: spec.barMinWidth,\n barGapInGroup: spec.barGapInGroup\n };\n }\n}\n","import { registerBar3dSeries } from '../../../series/bar/bar-3d';\nimport { SeriesTypeEnum } from '../../../series/interface/type';\nimport { ChartTypeEnum } from '../../interface/type';\nimport type { IBar3dChartSpec } from '../interface';\nimport { Factory } from '../../../core/factory';\nimport { BarChart } from '../bar';\nimport type { AdaptiveSpec } from '../../../typings';\nimport { Bar3dChartSpecTransformer } from './bar-3d-transformer';\n\nexport class Bar3dChart extends BarChart<\n AdaptiveSpec\n> {\n static readonly type: string = ChartTypeEnum.bar3d;\n static readonly seriesType: string = SeriesTypeEnum.bar3d;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = Bar3dChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = Bar3dChartSpecTransformer;\n readonly type: string = ChartTypeEnum.bar3d;\n readonly seriesType: string = SeriesTypeEnum.bar3d;\n}\n\nexport const registerBar3dChart = () => {\n registerBar3dSeries();\n Factory.registerChart(Bar3dChart.type, Bar3dChart);\n};\n","/**\n * Checks if `value` is classified as a legal string number\n *\n * @param {*} value The string value to check.\n * @returns {boolean} Returns `true` if `value` is a legal string number, else `false`.\n * @example\n *\n * isNumeric(1)\n * // => false\n *\n * isNumeric('2.0')\n * // => true\n *\n * isNumeric('3a')\n * // => false\n *\n * isNumeric('4.a')\n * // => false\n *\n * isNumeric(Infinity)\n * // => false\n *\n * isNumeric('01')\n * // => true\n */\nconst isNumeric = (value: string): boolean => {\n if (typeof value !== 'string') {\n return false;\n }\n return !isNaN(Number(value)) && !isNaN(parseFloat(value));\n};\n\nexport default isNumeric;\n","import { ScaleEnum } from '@visactor/vscale';\n\nexport const SCATTER_DEFAULT_SIZE = 10;\nexport const SCATTER_DEFAULT_RANGE_SIZE = [10, 20];\nexport const SCATTER_DEFAULT_SIZE_SCALE_TYPE = ScaleEnum.Linear;\n\nexport const SCATTER_DEFAULT_SHAPE = 'circle';\nexport const SCATTER_DEFAULT_SHAPE_SCALE_TYPE = ScaleEnum.Ordinal;\nexport const SCATTER_DEFAULT_RANGE_SHAPE = ['circle', 'square', 'triangle', 'diamond', 'star'];\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core/factory';\nimport { ScaleInOutAnimation } from '../../animation/config';\n\nexport type ScatterMarks = 'point' | 'label';\n\nexport type ScatterAppearPreset = 'scaleIn' | 'fadeIn';\n\nexport interface IScatterAnimationParams {\n [key: string]: object;\n}\n\nexport const scatterPresetAnimation = (\n _params: IScatterAnimationParams, // 此处仅为保持结构统一\n preset: ScatterAppearPreset\n): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'scaleIn': {\n return {\n type: 'scaleIn'\n };\n }\n default: {\n return {\n type: 'scaleIn'\n };\n }\n }\n};\n\nexport const registerScatterAnimation = () => {\n Factory.registerAnimation('scatter', (params: IScatterAnimationParams, preset: ScatterAppearPreset) => ({\n appear: scatterPresetAnimation(params, preset),\n ...ScaleInOutAnimation\n }));\n};\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IScatterSeriesSpec, IScatterSeriesTheme } from './interface';\n\nexport class ScatterSeriesSpecTransformer<\n T extends IScatterSeriesSpec = IScatterSeriesSpec,\n K extends IScatterSeriesTheme = IScatterSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.point);\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport { PREFIX } from '../../constant/base';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { DataView } from '@visactor/vdataset';\nimport type { Datum, ScaleType, VisualType, IScatterInvalidType } from '../../typings';\nimport type { ISymbolMark } from '../../mark/symbol';\nimport type { IScatterSeriesSpec } from './interface';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport { isNil, isValid, isObject, isFunction, isString, isArray, isNumber, isNumeric } from '@visactor/vutils';\nimport { AttributeLevel } from '../../constant';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport {\n SCATTER_DEFAULT_RANGE_SHAPE,\n SCATTER_DEFAULT_RANGE_SIZE,\n SCATTER_DEFAULT_SHAPE,\n SCATTER_DEFAULT_SHAPE_SCALE_TYPE,\n SCATTER_DEFAULT_SIZE,\n SCATTER_DEFAULT_SIZE_SCALE_TYPE\n} from '../../constant/scatter';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerScatterAnimation, type ScatterAppearPreset } from './animation';\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { scatterSeriesMark } from './constant';\nimport type { ILabelMark } from '../../mark/label';\nimport { Factory } from '../../core/factory';\nimport type { IMark } from '../../mark/interface';\nimport { ScatterSeriesSpecTransformer } from './scatter-transformer';\nimport { getGroupAnimationParams } from '../util/utils';\n\nexport class ScatterSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.scatter;\n type = SeriesTypeEnum.scatter;\n\n static readonly mark: SeriesMarkMap = scatterSeriesMark;\n static readonly transformerConstructor = ScatterSeriesSpecTransformer as any;\n readonly transformerConstructor = ScatterSeriesSpecTransformer;\n\n private _symbolMark: ISymbolMark;\n private _labelMark: ILabelMark;\n\n private _size: IScatterSeriesSpec['size'];\n private _sizeField: string;\n private _shape: IScatterSeriesSpec['shape'];\n private _shapeField: string;\n\n protected _invalidType: IScatterInvalidType = 'zero';\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n // size\n this._size = this._spec.size;\n this._sizeField = this._spec.sizeField;\n // shape\n this._shape = this._spec.shape;\n this._shapeField = this._spec.shapeField;\n }\n\n private _getSeriesAttribute(\n field: string,\n spec: VisualType,\n {\n defaultScaleType,\n defaultRange\n }: {\n defaultScaleType: ScaleType;\n defaultRange: T[];\n },\n key: string\n ): VisualType {\n // 若sizeSpec是函数\n if (isFunction(spec)) {\n return spec;\n }\n\n if (isArray(spec)) {\n if (isNil(field)) {\n this._option?.onError(`${key}Field is required.`);\n return spec;\n }\n\n if (defaultScaleType !== 'ordinal' && (spec as any[]).length > 2) {\n this._option?.onError(`${key} length is invalid, specify up to 2 ${key}s.`);\n return spec;\n }\n const scaleName = `${PREFIX}_series_scatter_${this.id}_scale_${key}`;\n this._option.globalScale.registerModelScale({\n id: scaleName,\n type: defaultScaleType,\n domain: [\n {\n dataId: this._rawData.name,\n fields: [field]\n }\n ],\n range: spec\n });\n return {\n scale: scaleName,\n field\n };\n }\n\n // 若sizeSpec是对象\n if (isObject(spec)) {\n if (isNil(field)) {\n this._option?.onError(`${key}Field is required.`);\n return spec;\n }\n const scaleName = `${PREFIX}_series_scatter_${this.id}_scale_${key}`;\n const visualSpec = {\n id: scaleName,\n type: defaultScaleType,\n domain: [\n {\n dataId: this._rawData.name,\n fields: [field]\n }\n ],\n range: defaultRange,\n ...spec\n };\n\n this._option.globalScale.registerModelScale(visualSpec);\n return {\n scale: visualSpec.id,\n field\n };\n }\n\n // 其余情况报错\n this._option?.onError(`${key} attribute is invalid.`);\n return spec;\n }\n\n /**\n * 计算sizeScale\n * @param field 数据对应字段\n * @param sizeSpec size配置\n */\n private getSizeAttribute(field: string, sizeSpec: IScatterSeriesSpec['size']): VisualType {\n // 若sizeSpec不存在\n if (isNil(sizeSpec)) {\n // Tips: spec会被theme配置merge, 所以Spec没配置, 不一定会触发这里.\n return SCATTER_DEFAULT_SIZE;\n }\n\n // 若sizeSpec是数值\n if (isNumber(sizeSpec)) {\n return sizeSpec;\n }\n\n // 若sizeSpec是字符串中的数值\n if (isString(sizeSpec) && isNumeric(sizeSpec)) {\n return parseFloat(sizeSpec);\n }\n\n return this._getSeriesAttribute(\n field,\n sizeSpec as VisualType,\n {\n defaultScaleType: SCATTER_DEFAULT_SIZE_SCALE_TYPE,\n defaultRange: SCATTER_DEFAULT_RANGE_SIZE\n },\n 'size'\n );\n }\n\n /**\n * 计算shapeScale\n * @param field 数据对应字段\n * @param shapeSpec shape配置\n */\n private getShapeAttribute(field: string, shapeSpec: IScatterSeriesSpec['shape']): VisualType {\n // 若shapeSpec不存在\n if (isNil(shapeSpec)) {\n // Tips: spec会被theme配置merge, 所以Spec没配置, 不一定会触发这里.\n return SCATTER_DEFAULT_SHAPE;\n }\n\n // 若shapeSpec是字符串\n if (isString(shapeSpec)) {\n return shapeSpec;\n }\n\n return this._getSeriesAttribute(\n field,\n shapeSpec as VisualType,\n {\n defaultScaleType: SCATTER_DEFAULT_SHAPE_SCALE_TYPE,\n defaultRange: SCATTER_DEFAULT_RANGE_SHAPE\n },\n 'shape'\n );\n }\n\n /**\n * 初始化Mark\n */\n initMark(): void {\n const progressive = {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n };\n\n this._symbolMark = this._createMark(ScatterSeries.mark.point, {\n morph: shouldMarkDoMorph(this._spec, ScatterSeries.mark.point.name),\n defaultMorphElementKey: this.getDimensionField()[0],\n groupKey: this._seriesField,\n progressive,\n isSeriesMark: true,\n customShape: this._spec.point?.customShape\n }) as ISymbolMark;\n }\n\n /**\n * 初始化散点图各类Mark的Style\n */\n initMarkStyle(): void {\n this.initSymbolMarkStyle();\n }\n\n /**\n * 初始化动画\n */\n initAnimation(): void {\n const animationParams = getGroupAnimationParams(this);\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n this._symbolMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('scatter')?.({}, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.point, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n }\n\n /**\n * 初始化SymbolMark\n */\n private initSymbolMarkStyle(): void {\n const symbolMark = this._symbolMark;\n if (!symbolMark) {\n return;\n }\n\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(symbolMark, {\n visible: this._getInvalidDefined\n });\n }\n\n this.setMarkStyle(\n symbolMark,\n {\n x: this.dataToPositionX.bind(this),\n y: this.dataToPositionY.bind(this),\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null,\n fill: this.getColorAttribute(),\n size: isNumber(this._size) || isFunction(this._size) ? this._size : SCATTER_DEFAULT_SIZE,\n symbolType: isString(this._shape) || isFunction(this._shape) ? this._shape : SCATTER_DEFAULT_SHAPE\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n\n if (isValid(this._sizeField) || isValid(this._size)) {\n this.setMarkStyle(\n symbolMark,\n {\n size: this.getSizeAttribute(this._sizeField, this._size) as VisualType\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.User_Mark\n );\n }\n\n if (isValid(this._shapeField) || isValid(this._shape)) {\n this.setMarkStyle(\n symbolMark,\n {\n symbolType: this.getShapeAttribute(this._shapeField, this._shape) as VisualType\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.User_Mark\n );\n }\n\n this._trigger.registerMark(symbolMark);\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._symbolMark && this._tooltipHelper.activeTriggerSet.mark.add(this._symbolMark);\n }\n\n viewDataStatisticsUpdate(d: DataView) {\n super.viewDataStatisticsUpdate(d);\n const fields = [this.getDimensionField()[0], this.getStackValueField()];\n const allValid = fields.every(field => field && this.getViewDataStatistics()?.latestData?.[field]?.allValid);\n if (this._invalidType === 'zero' || allValid) {\n this.setMarkStyle(this._symbolMark, { visible: true }, 'normal', AttributeLevel.Series);\n } else {\n this.setMarkStyle(this._symbolMark, { visible: this._getInvalidDefined }, 'normal', AttributeLevel.Series);\n }\n }\n\n /**\n * 初始化LabelMark\n */\n initLabelMarkStyle(labelMark?: ILabelMark): void {\n if (!labelMark) {\n return;\n }\n this._labelMark = labelMark;\n this.setMarkStyle(\n labelMark,\n {\n fill: this.getColorAttribute(),\n text: (datum: Datum) => {\n return datum[this.getStackValueField()];\n },\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(\n labelMark,\n {\n visible: this._getInvalidDefined\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n }\n\n /**\n * 处理缩放\n */\n handleZoom(e: any) {\n this.getMarksWithoutRoot().forEach(mark => {\n const vGrammarMark = mark.getProduct();\n\n if (!vGrammarMark || !vGrammarMark.elements || !vGrammarMark.elements.length) {\n return;\n }\n const elements = vGrammarMark.elements;\n\n elements.forEach((el: IElement, i: number) => {\n const graphicItem = el.getGraphicItem();\n const datum = el.getDatum();\n const newPosition = this.dataToPosition(datum);\n if (newPosition && graphicItem) {\n graphicItem.translateTo(newPosition.x, newPosition.y);\n }\n });\n });\n\n const vgrammarLabel = this._labelMark?.getComponent()?.getProduct();\n\n if (vgrammarLabel) {\n vgrammarLabel.evaluateSync(null, null);\n }\n }\n\n handlePan(e: any) {\n this.getMarksWithoutRoot().forEach(mark => {\n const vGrammarMark = mark.getProduct();\n\n if (!vGrammarMark || !vGrammarMark.elements || !vGrammarMark.elements.length) {\n return;\n }\n const elements = vGrammarMark.elements;\n\n elements.forEach((el: IElement, i: number) => {\n const graphicItem = el.getGraphicItem();\n const datum = el.getDatum();\n const newPosition = this.dataToPosition(datum);\n if (newPosition && graphicItem) {\n graphicItem.translateTo(newPosition.x, newPosition.y);\n }\n });\n });\n const vgrammarLabel = this._labelMark?.getComponent()?.getProduct();\n\n if (vgrammarLabel) {\n vgrammarLabel.evaluateSync(null, null);\n }\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getActiveMarks(): IMark[] {\n return [this._symbolMark];\n }\n}\n\nexport const registerScatterSeries = () => {\n registerSymbolMark();\n registerScatterAnimation();\n Factory.registerSeries(ScatterSeries.type, ScatterSeries);\n};\n","import { CartesianChartSpecTransformer } from '../cartesian';\nimport type { IScatterChartSpec } from './interface';\n\nexport class ScatterChartSpecTransformer<\n T extends IScatterChartSpec = IScatterChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: IScatterChartSpec): any {\n return {\n ...super._getDefaultSeriesSpec(spec),\n point: spec.point,\n size: spec.size,\n sizeField: spec.sizeField,\n shape: spec.shape,\n shapeField: spec.shapeField\n };\n }\n}\n","import { registerScatterSeries } from '../../series/scatter/scatter';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IScatterChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { ScatterChartSpecTransformer } from './scatter-transformer';\nimport { BaseChart } from '../base';\n\nexport class ScatterChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.scatter;\n static readonly seriesType: string = SeriesTypeEnum.scatter;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = ScatterChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = ScatterChartSpecTransformer;\n readonly type: string = ChartTypeEnum.scatter;\n readonly seriesType: string = SeriesTypeEnum.scatter;\n protected _canStack: boolean = true;\n}\n\nexport const registerScatterChart = () => {\n registerScatterSeries();\n Factory.registerChart(ScatterChart.type, ScatterChart);\n};\n","import noop from \"../noop.js\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y, m) {\n line.push([x, y, m]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n if (pointEqual(p0, p1)) {\n if (!p0[2] && !p1[2]) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n // handle degenerate cases by moving the point\n p1[0] += 2 * epsilon;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import adder from \"./adder.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nvar sum = adder();\n\nfunction longitude(point) {\n if (abs(point[0]) <= pi)\n return point[0];\n else\n return sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n var lambda = longitude(point),\n phi = point[1],\n sinPhi = sin(phi),\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n sum.reset();\n\n if (sinPhi === 1) phi = halfPi + epsilon;\n else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = longitude(point0),\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = longitude(point1),\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(arrays) {\n var n = arrays.length,\n m,\n i = -1,\n j = 0,\n merged,\n array;\n\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n\n return merged;\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream));\n fitBounds(boundsStream.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n function transform(x, y) {\n x *= sx; y *= sy;\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k * sx, (dy - y) / k * sy];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n var cosAlpha = cos(alpha),\n sinAlpha = sin(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n x *= sx; y *= sy;\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n };\n return transform;\n}\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate angle\n sx = 1, // reflectX\n sy = 1, // reflectX\n theta = null, preclip = clipAntimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n };\n\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], sx, sy, alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n var cr = cos(radius),\n delta = 6 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n point1[2] = 1;\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1], 2);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1], 3);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","import {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n","import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y,\n l = atan2(x, abs(r0y)) * sign(r0y);\n if (r0y * n < 0)\n l -= pi * sign(x) * sign(r0y);\n return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n","import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n","import conicEqualArea from \"./conicEqualArea.js\";\n\nexport default function() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import {asin, sqrt} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\nexport default function() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nexport default function() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n","import {abs, atan, atan2, cos, epsilon, halfPi, log, pi, pow, sign, sin, sqrt, tan} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {mercatorRaw} from \"./mercator.js\";\n\nfunction tany(y) {\n return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n f = cy0 * pow(tany(y0), n) / n;\n\n if (!n) return mercatorRaw;\n\n function project(x, y) {\n if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n var r = f / pow(tany(y), n);\n return [r * sin(n * x), f - r * cos(n * x)];\n }\n\n project.invert = function(x, y) {\n var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy),\n l = atan2(x, abs(fy)) * sign(fy);\n if (fy * n < 0)\n l -= pi * sign(x) * sign(fy);\n return [l / n, 2 * atan(pow(f / r, 1 / n)) - halfPi];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n}\n","import projection from \"./index.js\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","import {abs, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {equirectangularRaw} from \"./equirectangular.js\";\n\nexport function conicEquidistantRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n g = cy0 / n + y0;\n\n if (abs(n) < epsilon) return equirectangularRaw;\n\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * sin(nx), g - gy * cos(nx)];\n }\n\n project.invert = function(x, y) {\n var gy = g - y,\n l = atan2(x, abs(gy)) * sign(gy);\n if (gy * n < 0)\n l -= pi * sign(x) * sign(gy);\n return [l / n, g - sign(n) * sqrt(x * x + gy * gy)];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n}\n","import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = sqrt(3) / 2,\n iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n return [\n lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n if (abs(delta) < epsilon2) break;\n }\n return [\n M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n asin(sin(l) / M)\n ];\n};\n\nexport default function() {\n return projection(equalEarthRaw)\n .scale(177.158);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function gnomonicRaw(x, y) {\n var cy = cos(y), k = cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n}\n","import projection from \"./index.js\";\nimport {abs, epsilon} from \"../math.js\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs(delta) > epsilon && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n};\n\nexport default function() {\n return projection(naturalEarth1Raw)\n .scale(175.295);\n}\n","import {asin, cos, epsilon, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function stereographicRaw(x, y) {\n var cy = cos(y), k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\nexport default function() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n","import {atan, exp, halfPi, log, tan} from \"../math.js\";\nimport {mercatorProjection} from \"./mercator.js\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n var m = mercatorProjection(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n}\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-projection/src/projection.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport {\n geoAlbers,\n geoAlbersUsa,\n geoAzimuthalEqualArea,\n geoAzimuthalEquidistant,\n geoConicConformal,\n geoConicEqualArea,\n geoConicEquidistant,\n geoEqualEarth,\n geoEquirectangular,\n geoGnomonic,\n geoIdentity,\n geoMercator,\n geoNaturalEarth1,\n geoOrthographic,\n geoStereographic,\n geoTransverseMercator,\n geoPath\n} from 'd3-geo';\nimport { error } from '@visactor/vgrammar-util';\nimport { isString } from '@visactor/vutils';\n\nconst defaultPath = geoPath();\n\nexport function getProjectionPath(proj: any) {\n return (proj && proj.path) || defaultPath;\n}\n\nconst projections = {\n // base d3-geo projection types\n};\n\nexport const projectionProperties = [\n // standard properties in d3-geo\n 'clipAngle',\n 'clipExtent',\n 'scale',\n 'translate',\n 'center',\n 'rotate',\n 'precision',\n 'reflectX',\n 'reflectY',\n\n // extended properties in d3-geo-projections\n 'parallels',\n 'coefficient',\n 'distance',\n 'fraction',\n 'lobes',\n 'parallel',\n 'radius',\n 'ratio',\n 'spacing',\n 'tilt'\n];\n\n/**\n * Augment projections with their type and a copy method.\n */\nfunction create(type: string, constructor: any) {\n return function projectionGenerator() {\n const p = constructor();\n\n p.type = type;\n\n p.path = geoPath().projection(p);\n\n p.copy =\n p.copy ||\n function () {\n const c = projectionGenerator();\n projectionProperties.forEach(prop => {\n if (p[prop]) {\n c[prop](p[prop]());\n }\n });\n c.path.pointRadius(p.path.pointRadius());\n return c;\n };\n\n return p;\n };\n}\n\nexport function projection(type: string, proj?: () => any) {\n if (!type || !isString(type)) {\n error('Projection type must be a name string.');\n }\n const projectionType = type.toLowerCase();\n if (arguments.length > 1) {\n projections[projectionType] = create(projectionType, proj);\n }\n return projections[projectionType] || null;\n}\n\nconst builtInProjections = {\n albers: geoAlbers,\n albersusa: geoAlbersUsa,\n azimuthalequalarea: geoAzimuthalEqualArea,\n azimuthalequidistant: geoAzimuthalEquidistant,\n conicconformal: geoConicConformal,\n conicequalarea: geoConicEqualArea,\n conicequidistant: geoConicEquidistant,\n equalEarth: geoEqualEarth,\n equirectangular: geoEquirectangular,\n gnomonic: geoGnomonic,\n identity: geoIdentity,\n mercator: geoMercator,\n naturalEarth1: geoNaturalEarth1,\n orthographic: geoOrthographic,\n stereographic: geoStereographic,\n transversemercator: geoTransverseMercator\n};\n\nObject.keys(builtInProjections).forEach((projectionType: string) => {\n projection(projectionType, builtInProjections[projectionType]);\n});\n","import {epsilon} from \"../math.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n","import clipRectangle from \"../clip/rectangle.js\";\nimport identity from \"../identity.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport {cos, degrees, radians, sin} from \"../math.js\";\n\nexport default function() {\n var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, // scale, translate and reflect\n alpha = 0, ca, sa, // angle\n x0 = null, y0, x1, y1, // clip extent\n kx = 1, ky = 1,\n transform = transformer({\n point: function(x, y) {\n var p = projection([x, y])\n this.stream.point(p[0], p[1]);\n }\n }),\n postclip = identity,\n cache,\n cacheStream;\n\n function reset() {\n kx = k * sx;\n ky = k * sy;\n cache = cacheStream = null;\n return projection;\n }\n\n function projection (p) {\n var x = p[0] * kx, y = p[1] * ky;\n if (alpha) {\n var t = y * ca - x * sa;\n x = x * ca + y * sa;\n y = t;\n } \n return [x + tx, y + ty];\n }\n projection.invert = function(p) {\n var x = p[0] - tx, y = p[1] - ty;\n if (alpha) {\n var t = y * ca + x * sa;\n x = x * ca - y * sa;\n y = t;\n }\n return [x / kx, y / ky];\n };\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n };\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n projection.scale = function(_) {\n return arguments.length ? (k = +_, reset()) : k;\n };\n projection.translate = function(_) {\n return arguments.length ? (tx = +_[0], ty = +_[1], reset()) : [tx, ty];\n }\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, sa = sin(alpha), ca = cos(alpha), reset()) : alpha * degrees;\n };\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, reset()) : sx < 0;\n };\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, reset()) : sy < 0;\n };\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n return projection;\n}\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-geo/src/Projection.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { array, isFunction, isNil } from '@visactor/vutils';\nimport { error } from '@visactor/vgrammar-util';\nimport { projection, projectionProperties } from './projections';\nimport type {\n IView,\n IGrammarBase,\n Nil,\n FeatureCollectionData,\n FeatureData,\n IProjection,\n ProjectionSpec\n} from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarBase, parseFunctionType, invokeFunctionType } from '@visactor/vgrammar-core';\n\nconst Feature = 'Feature';\nconst FeatureCollection = 'FeatureCollection';\n\nfunction featurize(f: FeatureCollectionData | FeatureData) {\n return f.type === FeatureCollection\n ? f.features\n : array(f)\n .filter(d => !isNil(d))\n .map(d => (d.type === Feature ? d : { type: Feature, geometry: d }));\n}\n\nexport function collectGeoJSON(data: any) {\n const arrayData = array(data);\n return arrayData.length === 1\n ? arrayData[0]\n : {\n type: FeatureCollection,\n features: arrayData.reduce((a, f) => a.concat(featurize(f)), [])\n };\n}\n\nfunction create(type: string) {\n const constructor = projection((type || 'mercator').toLowerCase());\n if (!constructor) {\n error('Unrecognized projection type: ' + type);\n }\n return constructor();\n}\n\nfunction set(proj: any, key: string, value: any) {\n if (isFunction(proj[key])) {\n proj[key](value);\n }\n}\n\nconst projectionOptions = projectionProperties.concat(['pointRadius', 'fit', 'extent', 'size']);\n\nexport function parseProjection(spec: ProjectionSpec, view: IView) {\n let refs: IGrammarBase[] = [];\n\n if (!spec) {\n return refs;\n }\n\n Object.keys(spec).forEach(key => {\n if (projectionOptions.includes(key)) {\n refs = refs.concat(parseFunctionType(spec[key], view));\n }\n });\n\n return refs;\n}\n\nexport class Projection extends GrammarBase implements IProjection {\n readonly grammarType = 'projection';\n\n private projection: any;\n\n constructor(view: IView) {\n super(view);\n }\n\n parse(spec: ProjectionSpec) {\n super.parse(spec);\n this.pointRadius(spec.pointRadius);\n this.size(spec.size);\n this.extent(spec.extent);\n this.fit(spec.fit);\n this.configure(spec);\n\n this.commit();\n\n return this;\n }\n\n pointRadius(pointRadius: ProjectionSpec['pointRadius']) {\n if (!isNil(this.spec.pointRadius)) {\n this.detach(parseFunctionType(this.spec.pointRadius, this.view));\n }\n this.spec.pointRadius = pointRadius;\n this.attach(parseFunctionType(pointRadius, this.view));\n this.commit();\n return this;\n }\n\n size(data: ProjectionSpec['size']) {\n if (!isNil(this.spec.size)) {\n this.detach(parseFunctionType(this.spec.size, this.view));\n }\n this.spec.size = data;\n this.attach(parseFunctionType(data, this.view));\n this.commit();\n return this;\n }\n\n extent(data: ProjectionSpec['extent']) {\n if (!isNil(this.spec.extent)) {\n this.detach(parseFunctionType(this.spec.extent, this.view));\n }\n this.spec.extent = data;\n this.attach(parseFunctionType(data, this.view));\n this.commit();\n return this;\n }\n\n fit(data: ProjectionSpec['fit']) {\n if (!isNil(this.spec.fit)) {\n this.detach(parseFunctionType(this.spec.fit, this.view));\n }\n this.spec.fit = data;\n this.attach(parseFunctionType(data, this.view));\n this.commit();\n return this;\n }\n\n configure(config: Omit | Nil) {\n this.detach(parseProjection(this.spec, this.view));\n\n if (isNil(config)) {\n this.spec = {\n type: this.spec.type,\n fit: this.spec.fit,\n extent: this.spec.extent,\n size: this.spec.size,\n pointRadius: this.spec.pointRadius\n };\n } else {\n Object.assign(this.spec, config);\n this.attach(parseProjection(this.spec, this.view));\n }\n this.commit();\n return this;\n }\n\n evaluate(upstream: any, parameters: any) {\n if (!this.projection || this.projection.type !== this.spec.type) {\n this.projection = create(this.spec.type);\n this.projection.type = this.spec.type;\n }\n projectionProperties.forEach(prop => {\n if (!isNil(this.spec[prop])) {\n set(this.projection, prop, invokeFunctionType(this.spec[prop], parameters, projection));\n }\n });\n\n if (!isNil(this.spec.pointRadius)) {\n this.projection.path.pointRadius(invokeFunctionType(this.spec.pointRadius, parameters, projection));\n }\n if (!isNil(this.spec.fit) && (!isNil(this.spec.extent) || !isNil(this.spec.size))) {\n const fit = invokeFunctionType(this.spec.fit, parameters, projection);\n const data = collectGeoJSON(fit);\n\n if (this.spec.extent) {\n this.projection.fitExtent(invokeFunctionType(this.spec.extent, parameters, projection), data);\n } else if (this.spec.size) {\n this.projection.fitSize(invokeFunctionType(this.spec.size, parameters, projection), data);\n }\n }\n\n return this.projection;\n }\n\n output() {\n return this.projection;\n }\n}\n","import { Factory } from '@visactor/vgrammar-core';\nexport { projection, projectionProperties, getProjectionPath } from './projections';\nimport { Projection } from './projection';\nimport { transform as geoPathTransform } from './geo-path';\n\nexport const registerProjection = () => {\n Factory.registerGrammar('projection', Projection, 'projections');\n};\n\nexport { Projection };\n\nexport const registerGeoTransforms = () => {\n Factory.registerTransform(\n 'geoPath',\n {\n transform: geoPathTransform,\n markPhase: 'beforeJoin'\n },\n true\n );\n};\n","import type { DataView } from '@visactor/vdataset';\nimport { isFunction, isNil, isValid } from '@visactor/vutils';\nimport type { Datum } from '../../typings';\n\nexport interface ILookUpOpt {\n from: () => object[];\n key: string;\n // 暂时不支持Multi-field lookup\n fields: string;\n values?: string[];\n as?: string[];\n default?: any;\n set?: (A: Datum, B: Datum) => void;\n}\n\nexport const lookup = (data: Array, opt: ILookUpOpt) => {\n if (!opt.from || !opt.from()) {\n return data;\n }\n\n const fields = opt.fields;\n const key = opt.key;\n const values = opt.values;\n const defaultValue = opt.default;\n const as = opt.as || [fields];\n const index = opt.from().reduce(function (map: Map, obj) {\n if (obj[fields]) {\n map.set(obj[fields], obj);\n }\n return map;\n }, new Map());\n\n let set: (d: any) => void;\n if (isFunction(opt.set)) {\n set = function (d: any) {\n const v = (index as Map).get(d[key]);\n opt.set(d, v);\n };\n } else if (values) {\n const m = values.length;\n set = function (d: any) {\n const v = (index as Map).get(d[key]);\n if (isNil(v)) {\n for (let i = 0; i < m; ++i) {\n d[as[i]] = defaultValue;\n }\n } else {\n for (let i = 0; i < m; ++i) {\n d[as[i]] = v[values[i]];\n }\n }\n };\n } else {\n set = function (d: any) {\n const v = (index as Map).get(d[key]);\n d[as[0]] = isValid(v) ? v : defaultValue;\n };\n }\n\n if (data.length === 0) {\n return [];\n }\n return data.map(d => {\n set(d);\n return d;\n });\n};\n","import type { IGeoCoordinateHelper } from '../../component/geo/interface';\nimport type { IPoint } from '../../typings';\nimport type { IGeoSeries } from '../interface';\nimport { SeriesTypeEnum } from '../interface/type';\nimport { BaseSeries } from '../base/base-series';\nimport { isNil } from '@visactor/vutils';\nimport type { SeriesData } from '../base/series-data';\nimport type { DataView } from '@visactor/vdataset';\nimport { PREFIX } from '../../constant';\nimport type { IGeoSeriesSpec } from './interface';\nimport type { IMark } from '../../mark/interface';\n\nexport abstract class GeoSeries extends BaseSeries implements IGeoSeries {\n type = SeriesTypeEnum.geo;\n readonly coordinate = 'geo';\n\n protected _mapViewData: SeriesData;\n getMapViewData() {\n return this._mapViewData?.getDataView();\n }\n\n protected _mapViewDataStatistics!: DataView;\n\n _nameField!: string;\n get nameField() {\n return this._nameField;\n }\n set nameField(f: string) {\n this._nameField = f;\n }\n\n _valueField!: string;\n get valueField() {\n return this._valueField;\n }\n set valueField(f: string) {\n this._valueField = f;\n }\n\n protected _nameProperty: string = 'name';\n getNameProperty() {\n return this._nameProperty;\n }\n\n protected _centroidProperty?: string;\n getCentroidProperty() {\n return this._centroidProperty;\n }\n\n _coordinateHelper!: IGeoCoordinateHelper;\n getCoordinateHelper() {\n return this._coordinateHelper;\n }\n setCoordinateHelper(h: IGeoCoordinateHelper) {\n this._coordinateHelper = h;\n }\n\n getStatisticFields() {\n const fields: { key: string; operations: Array<'max' | 'min' | 'values'> }[] = [];\n fields.push({ key: this._nameField, operations: ['values'] });\n fields.push({ key: this._valueField, operations: ['max', 'min'] });\n return fields;\n }\n\n getGroupFields(): string[] {\n return null;\n }\n\n // position\n dataToPosition(datum: any): IPoint | null {\n let result: IPoint | null = null;\n\n if (!datum) {\n return result;\n }\n const { dataToPosition, latitudeField, longitudeField } = this._coordinateHelper;\n\n // 从地理数据映射中获取\n result = this.nameToPosition(datum);\n\n // 从用户传入的经纬度获取\n if (result === null) {\n const lonValue = longitudeField ? datum?.[longitudeField] : Number.NaN;\n const latValue = latitudeField ? datum?.[latitudeField] : Number.NaN;\n result = dataToPosition?.([lonValue, latValue]) ?? null;\n }\n\n return result;\n }\n\n protected nameToPosition(datum: any): IPoint | null {\n const name = this.getDatumName(datum);\n if (isNil(name)) {\n return null;\n }\n\n const mapData = this.getMapViewData()?.latestData?.filter((data: any) => this.getDatumName(data) === name)[0];\n if (isNil(mapData)) {\n return null;\n }\n\n const { dataToPosition } = this._coordinateHelper;\n const center = this.getDatumCenter(mapData);\n\n const pos = dataToPosition?.(center);\n if (isNil(pos) || isNaN(pos.x) || isNaN(pos.y)) {\n return null;\n }\n return pos;\n }\n\n abstract getDatumCenter(datum: any): [number, number];\n abstract getDatumName(datum: any): string;\n\n dataToLatitude(latValue: number) {\n if (!this._coordinateHelper) {\n return Number.NaN;\n }\n const { dataToLatitude } = this._coordinateHelper;\n return dataToLatitude(latValue);\n }\n\n dataToLongitude(lonValue: number) {\n if (!this._coordinateHelper) {\n return Number.NaN;\n }\n const { dataToLatitude } = this._coordinateHelper;\n return dataToLatitude(lonValue);\n }\n\n valueToPosition(lonValue: number, latValue: number): IPoint {\n return {\n x: this.dataToLongitude(lonValue),\n y: this.dataToLatitude(latValue)\n };\n }\n\n positionToData(p: IPoint) {\n // TODO\n }\n latitudeToData(lat: number) {\n // TODO\n }\n longitudeToData(lon: number) {\n // TODO\n }\n\n dataToPositionX(data: any): number {\n this._option?.onError('Method not implemented.');\n return 0;\n }\n dataToPositionY(data: any): number {\n this._option?.onError('Method not implemented.');\n return 0;\n }\n dataToPositionZ(data: any): number {\n this._option?.onError('Method not implemented.');\n return 0;\n }\n\n release() {\n super.release();\n this._mapViewData.release();\n this._mapViewData = this._mapViewDataStatistics = null;\n }\n\n // TODO: geo 不支持 stack,这些方法没有意义\n getStackGroupFields() {\n return [this._nameField];\n }\n\n getStackValueField() {\n // TODO: hack\n return this._spec.valueField;\n }\n\n compileData() {\n this._mapViewData?.compile();\n }\n\n protected initStatisticalData(): void {\n super.initStatisticalData();\n if (this._mapViewData) {\n const viewDataName = `${PREFIX}_series_${this.id}_mapViewDataStatic`;\n this._mapViewDataStatistics = this.createStatisticalData(viewDataName, this._mapViewData.getDataView());\n this._mapViewData.getDataView().target.removeListener('change', this._mapViewDataStatistics.reRunAllTransform);\n }\n }\n\n /** seriesField */\n getSeriesKeys(): string[] {\n if (this._seriesField) {\n return (\n this.getRawDataStatisticsByField(this._seriesField)?.values ??\n this._mapViewDataStatistics?.latestData[this._seriesField]?.values ??\n []\n );\n }\n if (this.name) {\n return [this.name];\n }\n if (this.userId) {\n return [`${this.userId}`];\n }\n return [`${this.type}_${this.id}`];\n }\n\n fillData() {\n super.fillData();\n this._mapViewData.getDataView()?.reRunAllTransform();\n this._mapViewDataStatistics?.reRunAllTransform();\n }\n\n getActiveMarks(): IMark[] {\n return [];\n }\n}\n","import { DEFAULT_DATA_INDEX, PREFIX } from '../../constant';\nimport type { GeoSourceType } from '../../typings/geo';\n\nexport interface IMapOpt {\n nameMap: Record;\n nameProperty: string;\n}\n\nexport const DEFAULT_MAP_LOOK_UP_KEY = `${PREFIX}_MAP_LOOK_UP_KEY`;\n\nexport const map = (data: GeoSourceType, opt: IMapOpt) => {\n if (data.features) {\n data.features.forEach((f: any, index: number) => {\n f[DEFAULT_DATA_INDEX] = index;\n if (opt.nameMap) {\n f[DEFAULT_MAP_LOOK_UP_KEY] = opt.nameMap[f.properties?.[opt.nameProperty]];\n } else {\n f[DEFAULT_MAP_LOOK_UP_KEY] = f.properties?.[opt.nameProperty];\n }\n });\n }\n return data.features;\n};\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { MapSeries } from './map';\n\nexport class MapSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n titleValueCallback = (datum: any) => {\n const series = this.series as MapSeries;\n return this._getDimensionData(datum) ?? series.getDatumName(datum);\n };\n}\n","import { Factory } from './../core/factory';\nimport type { IPathMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IMarkRaw, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerPathGraphic } from '@visactor/vgrammar-core';\n\nexport type IPathMark = IMarkRaw;\n\nexport class PathMark extends BaseMark implements IPathMark {\n static readonly type = MarkTypeEnum.path;\n readonly type = PathMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n lineWidth: 0,\n path: ''\n };\n return defaultStyle;\n }\n}\n\nexport const registerPathMark = () => {\n Factory.registerMark(PathMark.type, PathMark);\n registerPathGraphic();\n};\n","import { projection } from '@visactor/vgrammar-projection';\nimport type { IProjectionSpec } from './interface';\n\n// TODO: 待 vgrammar 补充上后修改回去\ntype GeoJsonFeatureSpec = any;\nexport class Projection {\n projection: any;\n\n constructor(projectionSpec: IProjectionSpec) {\n // TODO: vgrammar 类型问题\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.projection = projection(projectionSpec.type)();\n }\n\n fit(start: number[], size: number[], features: GeoJsonFeatureSpec[]) {\n const fitData = { type: 'FeatureCollection', features };\n this.projection.fitExtent([start, size], fitData);\n }\n\n center(center: [number, number]) {\n this.projection?.center?.(center);\n }\n\n project(point: [number, number]) {\n return this.projection?.(point);\n }\n\n shape(data: GeoJsonFeatureSpec) {\n return this.projection?.path?.(data);\n }\n\n invert(point: [number, number]) {\n return this.projection?.invert?.(point);\n }\n\n scale(): number;\n scale(scale: number): void;\n scale(scale?: number): number | void {\n if (this.projection?.scale) {\n if (scale !== undefined) {\n this.projection.scale(scale);\n } else {\n return this.projection.scale() as number;\n }\n }\n }\n\n translate(): [number, number];\n translate(point: [number, number]): void;\n translate(point?: [number, number] | void) {\n if (this.projection?.scale) {\n if (point !== undefined) {\n this.projection.translate(point);\n } else {\n return this.projection.translate();\n }\n }\n }\n\n evaluate(start: number[], size: number[], features: GeoJsonFeatureSpec[]) {\n const tmp = this.projection.copy();\n return tmp?.fitExtent([start, size], {\n type: 'FeatureCollection',\n features\n });\n }\n}\n","import type { IComponentPlugin, IComponentPluginService } from './interface';\nimport type { IComponent } from '../../component/interface';\nimport { BasePluginService } from '../base/base-plugin-service';\n\nexport class ComponentPluginService\n extends BasePluginService\n implements IComponentPluginService\n{\n component: IComponent;\n\n constructor(component: IComponent) {\n super();\n this.component = component;\n }\n}\n","import { degreeToRadian, isEmpty, isFunction } from '@visactor/vutils';\nimport type { Datum } from '../typings';\nimport type { LegendItemDatum } from '@visactor/vrender-components';\n\n/**\n * 针对一些可以配置状态样式的属性的转换函数,结构如下:\n * { style: {}, state: { hover: {} } }\n * @param cfg\n * @returns\n */\nexport function transformComponentStyle(cfg: any = {}) {\n const newConfig = {\n ...cfg\n };\n\n if (isFunction(cfg.style)) {\n newConfig.style = (item: LegendItemDatum, isSelected: boolean, index: number, allItems: LegendItemDatum[]) =>\n transformToGraphic(cfg.style(item, isSelected, index, allItems));\n } else if (!isEmpty(cfg.style)) {\n newConfig.style = transformToGraphic(cfg.style);\n }\n\n if (!isEmpty(cfg.state)) {\n const newStateStyle = {};\n Object.keys(cfg.state).forEach(key => {\n if (isFunction(cfg.state[key])) {\n newStateStyle[key] = (item: LegendItemDatum, isSelected: boolean, index: number, allItems: LegendItemDatum[]) =>\n transformToGraphic(cfg.state[key](item, isSelected, index, allItems));\n } else if (!isEmpty(cfg.state[key])) {\n newStateStyle[key] = transformToGraphic(cfg.state[key]);\n }\n });\n newConfig.state = newStateStyle;\n }\n\n return newConfig;\n}\n\nexport function transformStateStyle(stateStyle: any) {\n if (isEmpty(stateStyle)) {\n return null;\n }\n const newStateStyle = {};\n Object.keys(stateStyle).forEach(key => {\n if (isFunction(stateStyle[key])) {\n newStateStyle[key] = (value: any, index: number, datum: Datum, data: Datum[]) =>\n transformToGraphic(stateStyle[key](value, index, datum, data));\n } else if (!isEmpty(stateStyle[key])) {\n newStateStyle[key] = transformToGraphic(stateStyle[key]);\n }\n });\n\n return newStateStyle;\n}\n\nexport function transformAxisLabelStateStyle(stateStyle: any) {\n if (isEmpty(stateStyle)) {\n return null;\n }\n const newStateStyle = {};\n Object.keys(stateStyle).forEach(key => {\n if (isFunction(stateStyle[key])) {\n newStateStyle[key] = (datum: Datum, index: number, data: Datum[], layer?: number) => {\n return transformToGraphic(stateStyle[key](datum.rawValue, index, datum, data, layer));\n };\n } else if (!isEmpty(stateStyle[key])) {\n newStateStyle[key] = transformToGraphic(stateStyle[key]);\n }\n });\n\n return newStateStyle;\n}\n\nexport function transformToGraphic(style: any) {\n if (style?.angle) {\n style.angle = degreeToRadian(style.angle);\n }\n\n return style;\n}\n","import { get } from '@visactor/vutils';\nimport type { ITheme } from '../theme';\n\nexport function getComponentThemeFromOption(type: string, chartTheme: ITheme) {\n return get(chartTheme, `component.${type}`);\n}\n","import { get } from '@visactor/vutils';\nimport { mergeSpec } from '../../util/spec/merge-spec';\nimport type { IOrientType, IPolarOrientType } from '../../typings';\nimport type { AxisType, ICommonAxisSpec, ILinearAxisSpec } from './interface';\nimport { transformComponentStyle } from '../../util/style';\nimport { isXAxis, isYAxis } from './cartesian/util/common';\nimport { getComponentThemeFromOption } from '../util';\nimport type { ITheme } from '../../theme';\n\nexport const DEFAULT_TITLE_STYLE = {\n left: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n right: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n radius: {},\n angle: {}\n};\n\nexport function transformAxisLineStyle(lineCfg: any) {\n lineCfg = transformComponentStyle(lineCfg);\n lineCfg.startSymbol = transformComponentStyle(lineCfg.startSymbol);\n lineCfg.endSymbol = transformComponentStyle(lineCfg.endSymbol);\n\n return lineCfg;\n}\n\nexport function getAxisLabelOffset(axisSpec: ICommonAxisSpec) {\n let labelOffset = 0;\n if (get(axisSpec, 'tick.visible')) {\n labelOffset += get(axisSpec, 'tick.tickSize');\n }\n\n if (get(axisSpec, 'label.visible')) {\n labelOffset += get(axisSpec, 'label.space');\n }\n\n return labelOffset;\n}\n\nexport function getLinearAxisSpecDomain(\n axisSpec: ILinearAxisSpec,\n defaultDomain?: {\n min?: number;\n max?: number;\n }\n) {\n // 兼容策略\n return {\n min: axisSpec.min ?? axisSpec.range?.min ?? defaultDomain?.min,\n max: axisSpec.max ?? axisSpec.range?.max ?? defaultDomain?.max\n };\n}\n\nexport function isValidCartesianAxis(spec: any) {\n const orient = spec?.orient;\n return orient === 'top' || orient === 'bottom' || orient === 'left' || orient === 'right' || orient === 'z';\n}\n\nexport function isValidPolarAxis(spec: any) {\n const orient = spec?.orient;\n return orient === 'angle' || orient === 'radius';\n}\n\nexport const getCartesianAxisTheme = (orient: IOrientType, type: AxisType, chartTheme: ITheme) => {\n const axisTypeTheme =\n (type === 'band'\n ? getComponentThemeFromOption('axisBand', chartTheme)\n : (['linear', 'log', 'symlog'] as AxisType[]).includes(type)\n ? getComponentThemeFromOption('axisLinear', chartTheme)\n : {}) ?? {};\n const axisTheme = isXAxis(orient)\n ? getComponentThemeFromOption('axisX', chartTheme)\n : isYAxis(orient)\n ? getComponentThemeFromOption('axisY', chartTheme)\n : getComponentThemeFromOption('axisZ', chartTheme);\n return mergeSpec({}, getComponentThemeFromOption('axis', chartTheme), axisTypeTheme, axisTheme);\n};\n\nexport const getPolarAxisTheme = (orient: IPolarOrientType, type: AxisType, chartTheme: ITheme) => {\n const axisTypeTheme =\n (type === 'band'\n ? getComponentThemeFromOption('axisBand', chartTheme)\n : type === 'linear'\n ? getComponentThemeFromOption('axisLinear', chartTheme)\n : {}) ?? {};\n const axisTheme =\n orient === 'angle'\n ? getComponentThemeFromOption('axisAngle', chartTheme)\n : getComponentThemeFromOption('axisRadius', chartTheme);\n return mergeSpec({}, getComponentThemeFromOption('axis', chartTheme), axisTypeTheme, axisTheme);\n};\n\nexport const isDiscreteAxis = (axisType: AxisType) =>\n axisType === 'band' || axisType === 'ordinal' || axisType === 'point';\n","import type { Tag } from '@visactor/vrender-components';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { Datum } from '../../typings';\nimport type { ICrosshairTheme } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { array, isValid } from '@visactor/vutils';\nimport { mergeSpec } from '../../util/spec/merge-spec';\nimport { isXAxis, isYAxis } from '../axis/cartesian/util/common';\nimport { isDiscrete } from '@visactor/vscale';\nimport type { ICartesianAxisCommonSpec, IPolarAxisCommonSpec } from '../axis';\nimport { getComponentThemeFromOption } from '../util';\nimport { ComponentTypeEnum } from '../interface/type';\nimport type { ITheme } from '../../theme';\nimport { isDiscreteAxis } from '../axis/util';\n\nexport function limitTagInBounds(shape: Tag, bounds: IBoundsLike) {\n const { x1: regionMinX, y1: regionMinY, x2: regionMaxX, y2: regionMaxY } = bounds;\n const { x1, y1, x2, y2 } = shape.AABBBounds;\n const { dx: originDx = 0, dy: originDy = 0 } = shape.attribute;\n\n let dx = 0;\n let dy = 0;\n if (x1 < regionMinX) {\n // 超出左侧\n dx = regionMinX - x1;\n }\n if (y1 < regionMinY) {\n // 超出顶部\n dy = regionMinY - y1;\n }\n\n if (x2 > regionMaxX) {\n // 超出右侧\n dx = regionMaxX - x2;\n }\n\n if (y2 > regionMaxY) {\n // 整体超出顶部\n dy = regionMaxY - y2;\n }\n if (dx) {\n shape.setAttribute('dx', dx + originDx);\n }\n if (dy) {\n shape.setAttribute('dy', dy + originDy);\n }\n}\n\n// 二分查找数据\nexport function getDatumByValue(data: Datum[], value: number, startField: string, endField?: string): Datum | null {\n let left = 0;\n let right = data.length - 1;\n\n while (left <= right) {\n const mid = Math.floor((left + right) / 2);\n const record = data[mid];\n\n if (record[startField] <= value && record[endField || startField] >= value) {\n return record;\n }\n\n if (record[startField] > value) {\n right = mid - 1;\n } else {\n left = mid + 1;\n }\n }\n\n return null;\n}\n\nexport const getCartesianCrosshairTheme = (chartTheme: ITheme, chartSpec: any): ICrosshairTheme => {\n const axes: ICartesianAxisCommonSpec[] = array(chartSpec.axes ?? []);\n const { bandField, linearField, xField, yField } =\n getComponentThemeFromOption(ComponentTypeEnum.crosshair, chartTheme) ?? {};\n\n const xAxis = axes.find(axis => isXAxis(axis.orient));\n let newXField;\n if (isValid(xAxis)) {\n newXField = mergeSpec({}, isDiscreteAxis(xAxis.type) ? bandField : linearField, xField);\n } else {\n newXField = xField;\n }\n\n const yAxis = axes.find(axis => isYAxis(axis.orient));\n let newYField;\n if (isValid(yAxis)) {\n newYField = mergeSpec({}, isDiscrete(yAxis.type) ? bandField : linearField, yField);\n } else {\n newYField = yField;\n }\n\n return {\n xField: newXField,\n yField: newYField\n };\n};\n\nexport const getPolarCrosshairTheme = (chartTheme: ITheme, chartSpec: any): ICrosshairTheme => {\n const axes: IPolarAxisCommonSpec[] = array(chartSpec.axes ?? []);\n const { bandField, linearField, categoryField, valueField } =\n getComponentThemeFromOption(ComponentTypeEnum.crosshair, chartTheme) ?? {};\n\n const angleAxis = axes.find(axis => axis.orient === 'angle');\n let newAngleField;\n if (isValid(angleAxis)) {\n newAngleField = mergeSpec({}, isDiscreteAxis(angleAxis.type) ? bandField : linearField, categoryField);\n } else {\n newAngleField = categoryField;\n }\n\n const radiusAxis = axes.find(axis => axis.orient === 'radius');\n let newRadiusField;\n if (isValid(radiusAxis)) {\n newRadiusField = mergeSpec({}, isDiscrete(radiusAxis.type) ? bandField : linearField, valueField);\n } else {\n newRadiusField = valueField;\n }\n\n return {\n categoryField: newAngleField,\n valueField: newRadiusField\n };\n};\n","import type { IModelOption } from '../../model/interface';\nimport { Direction, type IOrientType } from '../../typings';\nimport { array, isNil, mergeSpec } from '../../util';\nimport type { DataView } from '@visactor/vdataset';\nimport type { ComponentTypeEnum } from '../interface';\nimport { getComponentThemeFromOption } from '../util';\nimport { getDirectionByOrient } from '../axis/cartesian/util';\nimport type { ITheme } from '../../theme';\n\nexport interface IDataFilterWithNewDomainOption {\n getNewDomain: () => any[];\n isContinuous: () => boolean;\n field: () => string;\n}\n\n/**\n * 保证数据筛选的结果全都在坐标轴的新domain范围中,防止出现point数据因为超出domain范围而绘制在原点的情况\n */\nexport const dataFilterWithNewDomain = (data: Array, op: IDataFilterWithNewDomainOption) => {\n const { getNewDomain, isContinuous, field } = op;\n const datumField = field();\n const newDomain = getNewDomain();\n if (isNil(newDomain) || isNil(datumField)) {\n return data;\n }\n if (newDomain.length === 0) {\n return [];\n }\n\n let filter = null;\n if (isContinuous()) {\n filter = (d: any) => d[datumField] >= newDomain[0] && d[datumField] <= newDomain[1];\n } else {\n filter = (d: any) => {\n // 这里d[f] + ''的原因是:数据是number类型的,但轴声明为band轴,domain会强制将number => string,所以filter的时候要将data中的number => string\n return newDomain.indexOf(d[datumField] + '') >= 0 || newDomain.indexOf(d[datumField]) >= 0;\n };\n }\n\n return data.filter(filter);\n};\n\nexport interface IDataFilterComputeDomainOption {\n input: {\n dataCollection: any[];\n stateFields: string[];\n valueFields: string[];\n method: 'sum'; // todo: 也许可以提供多种数据统计方法 @chensiji\n };\n output: {\n stateField: string;\n valueField: string;\n };\n}\n\nexport const dataFilterComputeDomain = (data: Array, op: IDataFilterComputeDomainOption) => {\n const { stateFields, valueFields, dataCollection } = op.input;\n const { stateField, valueField } = op.output;\n const resultObj = {};\n const resultData: any[] = [];\n\n dataCollection.forEach((dv: DataView, i) => {\n if (isNil(stateFields[i])) {\n return;\n }\n // 按照用户指定的domain进行排序(这里不通过getRawDataStatistics来取是因为时机不对,此时getRawDataStatistics还没有正确结果)\n const stateFieldInfo = dv.getFields()?.[stateFields[i]];\n if (stateFieldInfo && stateFieldInfo.lockStatisticsByDomain) {\n stateFieldInfo.domain.forEach((d: any) => {\n resultObj[d] = 0;\n });\n }\n dv.latestData.forEach((d: any) => {\n // 针对rangeColumn等xField为数组形式的图表,需要将xField的所有value都记录下来\n array(stateFields[i]).forEach(state => {\n if (!isNil(d[state])) {\n if (isNil(resultObj[d[state]])) {\n resultObj[d[state]] = 0;\n }\n if (!isNil(valueFields[i])) {\n // 传进来的d[yFields[i]]可能是stringnumber\n // 传进来的d[yFields[i]]可能是普通的字符串,这时计数按1计算(其实相当于计算数据条数)\n resultObj[d[state]] += isNaN(parseFloat(d[valueFields[i]])) ? 1 : parseFloat(d[valueFields[i]]);\n }\n }\n });\n });\n });\n Object.keys(resultObj).forEach((d, i) => {\n const res = { [stateField]: d };\n\n if (valueField) {\n res[valueField] = resultObj[d];\n }\n\n resultData.push(res);\n });\n\n return resultData;\n};\n\nexport const getDataFilterTheme = (orient: IOrientType, type: ComponentTypeEnum, chartTheme: ITheme) => {\n const theme = getComponentThemeFromOption(type, chartTheme);\n const directionTheme = theme[getDirectionByOrient(orient)];\n const finalTheme = mergeSpec({}, theme, directionTheme);\n\n delete finalTheme[Direction.horizontal];\n delete finalTheme[Direction.vertical];\n return finalTheme;\n};\n","import type { ILegendCommonSpec, ITitle } from './interface';\nimport { isEmpty } from '@visactor/vutils';\nimport { mergeSpec } from '../../util/spec/merge-spec';\nimport { transformToGraphic } from '../../util/style';\n\nexport function transformLegendTitleAttributes(title: ITitle) {\n const transformedTitle = {\n ...title\n };\n if (!isEmpty(title.style)) {\n transformedTitle.textStyle = transformToGraphic(title.style);\n }\n if (!isEmpty(title.textStyle)) {\n mergeSpec(transformedTitle.textStyle, transformToGraphic(title.textStyle));\n }\n\n if (title.shape?.style) {\n transformToGraphic(transformedTitle.shape.style);\n }\n\n if (title.background?.style) {\n transformToGraphic(transformedTitle.background.style);\n }\n return transformedTitle;\n}\n\n/**\n * 根据图例 spec.orient 参数判断是水平还是垂直布局\n * @param spec\n * @returns\n */\nexport function getLayout(spec: ILegendCommonSpec) {\n return spec.orient === 'bottom' || spec.orient === 'top' ? 'horizontal' : 'vertical';\n}\n","import type { ITheme } from '../../theme';\nimport { getOrient } from '../axis/cartesian/util/common';\nimport { getCartesianAxisTheme, getPolarAxisTheme } from '../axis/util';\nimport { getCartesianCrosshairTheme, getPolarCrosshairTheme } from '../crosshair/util';\nimport { getDataFilterTheme } from '../data-zoom/util';\nimport { ComponentTypeEnum } from '../interface/type';\nimport { getLayout } from '../legend/util';\nimport { getComponentThemeFromOption } from '../util';\n\nexport function getComponentThemeFromGlobalTheme(\n type: ComponentTypeEnum,\n chartTheme: ITheme,\n componentSpec: any,\n chartSpec: any\n) {\n switch (type) {\n case ComponentTypeEnum.cartesianBandAxis:\n return getCartesianAxisTheme(getOrient(componentSpec, ['z']), 'band', chartTheme);\n case ComponentTypeEnum.cartesianLinearAxis:\n return getCartesianAxisTheme(getOrient(componentSpec, ['z']), 'linear', chartTheme);\n case ComponentTypeEnum.cartesianLogAxis:\n return getCartesianAxisTheme(getOrient(componentSpec, ['z']), 'log', chartTheme);\n case ComponentTypeEnum.cartesianSymlogAxis:\n return getCartesianAxisTheme(getOrient(componentSpec, ['z']), 'symlog', chartTheme);\n case ComponentTypeEnum.cartesianAxis:\n case ComponentTypeEnum.cartesianTimeAxis:\n return getCartesianAxisTheme(getOrient(componentSpec), undefined, chartTheme);\n case ComponentTypeEnum.polarBandAxis:\n return getPolarAxisTheme(componentSpec.orient, 'band', chartTheme);\n case ComponentTypeEnum.polarLinearAxis:\n return getPolarAxisTheme(componentSpec.orient, 'linear', chartTheme);\n case ComponentTypeEnum.polarAxis:\n return getPolarAxisTheme(componentSpec.orient, undefined, chartTheme);\n case ComponentTypeEnum.cartesianCrosshair:\n return getCartesianCrosshairTheme(chartTheme, chartSpec);\n case ComponentTypeEnum.polarCrosshair:\n return getPolarCrosshairTheme(chartTheme, chartSpec);\n case ComponentTypeEnum.colorLegend:\n case ComponentTypeEnum.sizeLegend:\n return getComponentThemeFromOption(`${type}.${getLayout(componentSpec)}`, chartTheme);\n case ComponentTypeEnum.dataZoom:\n case ComponentTypeEnum.scrollBar:\n return getDataFilterTheme(getOrient(componentSpec), type, chartTheme);\n default:\n return getComponentThemeFromOption(type, chartTheme);\n }\n}\n","import { BaseModelSpecTransformer } from '../../model';\nimport { normalizeLayoutPaddingSpec } from '../../util';\nimport type { ComponentTypeEnum } from '../interface';\nimport type { IComponentSpec } from './interface';\nimport { getComponentThemeFromGlobalTheme } from './util';\n\nexport class BaseComponentSpecTransformer<\n T extends IComponentSpec = IComponentSpec,\n K = any\n> extends BaseModelSpecTransformer {\n getTheme(spec: T, chartSpec: any): K {\n return getComponentThemeFromGlobalTheme(this.type as ComponentTypeEnum, this._option.getTheme(), spec, chartSpec);\n }\n\n protected _mergeThemeToSpec(spec: T, chartSpec: any): { spec: T; theme: K } {\n const { spec: newSpec, theme } = super._mergeThemeToSpec(spec, chartSpec);\n this._adjustPadding(newSpec);\n return { spec: newSpec, theme };\n }\n\n protected _adjustPadding(spec: T) {\n // 默认忽略外侧 padding\n const { padding, noOuterPadding = true, orient } = spec;\n if (noOuterPadding && padding && orient) {\n spec.padding = {\n ...normalizeLayoutPaddingSpec(padding),\n [orient]: 0\n };\n }\n }\n}\n","import type { IGraphic, IGroup, INode } from '@visactor/vrender-core';\nimport type { IRegion } from '../../region/interface';\nimport type { IComponent, IComponentOption } from '../interface';\nimport type { BaseEventParams } from '../../event/interface';\nimport { ComponentPluginService } from '../../plugin/components/plugin-service';\nimport type { IComponentPluginService, IComponentPlugin } from '../../plugin/components/interface';\nimport type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEqual } from '@visactor/vutils';\nimport type { IGroupMark } from '@visactor/vgrammar-core';\nimport { Event_Source_Type } from '../../constant';\nimport type { IAnimate } from '../../animation/interface';\nimport { AnimateManager } from '../../animation/animate-manager';\n// import { preprocessSpecOrTheme } from '../../util/spec/preprocess';\nimport type { Datum, ILayoutRect } from '../../typings';\nimport type { IComponentSpec } from './interface';\nimport { LayoutModel } from '../../model/layout-model';\nimport { BaseComponentSpecTransformer } from './base-component-transformer';\nimport type { IModelRenderOption, IModelSpecInfo } from '../../model/interface';\n\nexport class BaseComponent extends LayoutModel implements IComponent {\n static transformerConstructor = BaseComponentSpecTransformer;\n name: string = 'component';\n readonly modelType: string = 'component';\n readonly transformerConstructor = BaseComponentSpecTransformer as any;\n pluginService?: IComponentPluginService;\n\n static createComponent(specInfo: IModelSpecInfo, options: IComponentOption): IComponent {\n const { spec, ...others } = specInfo;\n return new this(spec, {\n ...options,\n ...others\n });\n }\n\n protected declare _option: IComponentOption;\n\n protected _regions: IRegion[];\n getRegions() {\n return this._regions;\n }\n\n protected _container: IGroup;\n\n created() {\n this.initLayout();\n super.created();\n this.pluginService = new ComponentPluginService(this);\n }\n\n animate?: IAnimate;\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n // 创建组件自己的动画管理器\n if (this._option.animation) {\n this.animate = new AnimateManager({\n getCompiler: options.getCompiler\n });\n }\n }\n\n initLayout(): void {\n super.initLayout();\n this._regions = this._regions ?? this._option.getRegionsInIndex();\n this._layout && (this._layout.layoutBindRegionID = this._regions.map(x => x?.id));\n }\n\n changeRegions(regions: IRegion[]): void {\n throw new Error('Method not implemented.');\n }\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n throw new Error('Method not implemented.');\n }\n onRender(ctx: IModelRenderOption): void {\n throw new Error('Method not implemented.');\n }\n\n getVRenderComponents() {\n return this._getNeedClearVRenderComponents();\n }\n\n protected callPlugin(cb: (plugin: IComponentPlugin) => void) {\n if (this.pluginService) {\n this.pluginService.getAll().forEach(plugin => cb(plugin));\n }\n }\n\n protected eventPos(markEventParams: BaseEventParams) {\n return {\n x: (markEventParams.event as any).viewX - this.getLayoutStartPoint().x,\n y: (markEventParams.event as any).viewY - this.getLayoutStartPoint().y\n };\n }\n\n protected getContainer() {\n if (!this._container) {\n this._container = this._option?.globalInstance.getStage().find(node => node.name === 'root', true);\n }\n\n return this._container;\n }\n\n /**\n * updateSpec\n */\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n if (!result.reMake) {\n result.reMake = ['seriesId', 'seriesIndex', 'regionId', 'regionIndex'].some(k => {\n return isEqual(prevSpec?.[k], spec[k]);\n });\n }\n if ((prevSpec as any)?.visible !== (spec as any).visible) {\n result.reCompile = true;\n }\n return result;\n }\n\n release() {\n super.release();\n this.clear();\n }\n\n clear() {\n const components = this._getNeedClearVRenderComponents();\n if (components && components.length) {\n components.forEach(c => {\n if (c) {\n this.getContainer()?.removeChild(c as unknown as INode);\n c = null;\n }\n });\n }\n this._container = null;\n this.pluginService?.disposeAll();\n this.pluginService = null;\n }\n\n compile(): void {\n this.compileMarks();\n }\n\n compileMarks(group?: string | IGroupMark) {\n this.getMarks().forEach(m => {\n m.compile({ group });\n m.getProduct()?.configure({\n context: {\n model: this\n }\n });\n });\n }\n\n // 代理组件事件\n protected _delegateEvent = (component: IGraphic, event: any, type: string, item: any = null, datum: Datum = null) => {\n this.event.emit(\n type,\n {\n model: this,\n node: component,\n event,\n item: item,\n datum: datum,\n source: Event_Source_Type.chart,\n chart: this._option?.globalInstance?.getChart()\n },\n 'model'\n );\n };\n\n getBoundsInRect(rect: ILayoutRect, fullRect: ILayoutRect): IBoundsLike {\n return { x1: 0, x2: 0, y1: 0, y2: 0 };\n }\n}\n","import type { IZoomTrigger } from './interface';\n\nexport class DeskTopTrigger implements IZoomTrigger {\n pointerId: number;\n\n parserScrollEvent(e: any) {\n if (!e) {\n return e;\n }\n\n // 经过测试ctrlKey这个字段只有在双指方向不一致时,才会为true,根据这个判断是否触发scroll事件\n if (!e.ctrlKey && (e.deltaY !== 0 || e.deltaX !== 0)) {\n e.scrollX = e.deltaX;\n e.scrollY = e.deltaY;\n return e;\n }\n\n return false;\n }\n\n parserZoomEvent(e: any) {\n if (!e) {\n return e;\n }\n // @see https://vega.github.io/vega/examples/zoomable-world-map/\n const zoom = Math.pow(1.0005, -e.deltaY * Math.pow(16, e.deltaMode));\n e.zoomDelta = zoom;\n e.zoomX = e.canvasX;\n e.zoomY = e.canvasY;\n return e;\n }\n clearZoom(): void {\n // do nothing\n }\n\n clearScroll(): void {\n // do nothing\n }\n\n clearDrag(): void {\n // do nothing\n }\n parserDragEvent(): boolean {\n return true;\n }\n}\n","import type { IZoomTrigger } from './interface';\nexport class MobileTrigger implements IZoomTrigger {\n private _lastScale = 0;\n pointerId: number;\n\n clearZoom(): void {\n this._lastScale = 0;\n this.pointerId = null;\n }\n\n parserDragEvent(event: any): boolean {\n if (this.pointerId) {\n return this.pointerId === event.pointerId;\n }\n this.pointerId = event.pointerId;\n return true;\n }\n\n parserZoomEvent(event: any) {\n const scale = event.scale;\n if (this._lastScale === 0) {\n this._lastScale = scale;\n return event;\n }\n event.zoomDelta = scale / this._lastScale;\n\n const center = event.center;\n event.zoomX = center.x;\n event.zoomY = center.y;\n this._lastScale = scale;\n\n return event;\n }\n\n parserScrollEvent(event: any) {\n // todo\n return event;\n }\n\n clearScroll(): void {\n // do nothing\n }\n\n clearDrag(): void {\n // do nothing\n }\n}\n","import type { RenderMode } from '../../../typings/spec';\n// eslint-disable-next-line no-duplicate-imports\nimport { RenderModeEnum } from '../../../typings/spec/common';\nimport { isMiniAppLikeMode, isMobileLikeMode } from '../../../util/env';\nimport { DeskTopTrigger } from './desktop';\nimport { MobileTrigger } from './mobile';\n\nexport function getDefaultTriggerEventByMode(mode: RenderMode) {\n if (mode === RenderModeEnum['desktop-browser'] || mode === RenderModeEnum['desktop-miniApp']) {\n return {\n start: 'pointerdown',\n move: 'pointermove',\n end: 'pointerup',\n zoom: 'wheel',\n zoomEnd: 'pointerup',\n scroll: 'wheel',\n // scrollEnd: 'pointerup',\n trigger: DeskTopTrigger\n };\n }\n\n if (isMobileLikeMode(mode) || isMiniAppLikeMode(mode)) {\n return {\n start: 'pointerdown',\n move: 'pointermove',\n end: 'pointerup',\n zoom: 'pinch',\n zoomEnd: 'pinchend',\n scroll: 'pan',\n scrollEnd: 'panend',\n trigger: MobileTrigger\n };\n }\n\n return null;\n}\n","import type { IModelOption } from './../../model/interface';\n/* eslint-disable no-duplicate-imports */\nimport { debounce, isNil, pointInRect, throttle } from '@visactor/vutils';\nimport type { BaseEventParams, EventQuery, EventType, ExtendEventParam, IEvent } from '../../event/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { RenderMode } from '../../typings/spec';\nimport { RenderModeEnum } from '../../typings/spec/common';\nimport { getDefaultTriggerEventByMode } from '../../component/common/trigger/config';\nimport type { IZoomTrigger } from '../../component/common/trigger/interface';\nimport type { ISeries } from '../../series/interface';\nimport { Event_Bubble_Level, Event_Source_Type } from '../../constant';\nimport type { IDelayType } from '../../typings/event';\nimport { isMiniAppLikeMode, isMobileLikeMode } from '../../util';\nimport type { Gesture } from '@visactor/vrender-kits';\n\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\n\nexport interface ITriggerOption {\n delayType: IDelayType;\n delayTime: number;\n realTime: boolean;\n}\nexport interface IZoomEventOptions {\n shouldZoom?: boolean;\n zoomCallback?: (params: { zoomDelta: number; zoomX: number; zoomY: number }, e: BaseEventParams['event']) => void;\n shouldScroll?: boolean;\n scrollCallback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void;\n}\nexport interface IZoomable {\n initZoomable: (evt: IEvent, mode?: RenderMode) => void;\n initZoomEventOfSeries: (\n s: ISeries,\n callback?: (params: { zoomDelta: number; zoomX: number; zoomY: number }, e: BaseEventParams['event']) => void\n ) => any;\n initZoomEventOfRegions: (\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (params: { zoomDelta: number; zoomX: number; zoomY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) => void;\n\n initScrollEventOfSeries: (\n s: ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void\n ) => any;\n initScrollEventOfRegions: (\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) => void;\n\n initDragEventOfSeries: (\n s: ISeries,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) => any;\n\n initDragEventOfRegions: (\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) => void;\n}\n\nexport class Zoomable implements IZoomable {\n private _clickEnable: boolean;\n\n private _option: IModelOption;\n\n private _zoomableTrigger: IZoomTrigger;\n\n private _eventObj: IEvent;\n\n private _renderMode: RenderMode;\n\n private _gestureController!: Gesture | null;\n\n private _isGestureListener: boolean = false;\n\n initZoomable(evt: IEvent, mode: RenderMode = RenderModeEnum['desktop-browser']) {\n this._eventObj = evt;\n this._renderMode = mode;\n this._gestureController = (this._option.getChart().getVGrammarView().renderer as any)._gestureController;\n this._isGestureListener = isMobileLikeMode(this._renderMode) || isMiniAppLikeMode(this._renderMode);\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n // hack 应该由事件系统做?或者事件系统有更好的方式处理这种交互冲突场景\n this._clickEnable = true;\n this._zoomableTrigger = new (this._getZoomTriggerEvent('trigger') as any)();\n }\n }\n\n // event\n private _getZoomTriggerEvent(type: string): EventType {\n return getDefaultTriggerEventByMode(this._renderMode)[type];\n }\n\n private _zoomEventDispatch(\n params: BaseEventParams,\n regionOrSeries: IRegion | ISeries,\n callback?: (params: { zoomDelta: number; zoomX: number; zoomY: number }, e: BaseEventParams['event']) => void\n ) {\n if (!this._isGestureListener && !params.event) {\n return;\n }\n const event = this._isGestureListener ? params : params.event.clone();\n this._zoomableTrigger.parserZoomEvent(event);\n // FIXME: event类型目前不全\n const { zoomDelta, zoomX, zoomY } = event as any;\n if (isNil(zoomDelta)) {\n return;\n }\n if (\n !pointInRect(\n {\n x: zoomX,\n y: zoomY\n },\n this._getRegionOrSeriesLayout(regionOrSeries),\n false\n )\n ) {\n return;\n }\n this._clickEnable = false;\n\n if (callback) {\n // zoomDelta, zoomX, zoomY can be changed in the callback\n callback({ zoomDelta, zoomX, zoomY }, event);\n }\n this._eventObj.emit('zoom', {\n scale: event.zoomDelta,\n scaleCenter: { x: event.zoomX, y: event.zoomY },\n model: this\n } as unknown as ExtendEventParam);\n }\n\n private _getRegionOrSeriesLayout(rs: IRegion | ISeries) {\n if (rs.type !== 'region') {\n rs = (rs).getRegion();\n }\n const { x, y, width, height } = rs.layout.getLayout();\n return {\n x1: x,\n y1: y,\n x2: x + width,\n y2: y + height\n };\n }\n\n private _bindZoomEventAsRegion(\n eventObj: IEvent,\n regionOrSeries: IRegion | ISeries,\n callback?: (params: { zoomDelta: number; zoomX: number; zoomY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n const delayType = option?.delayType ?? 'throttle';\n const delayTime = option?.delayTime ?? 0;\n\n const event = this._isGestureListener ? this._gestureController : eventObj;\n const zoomParams = this._isGestureListener\n ? [this._getZoomTriggerEvent('zoom')]\n : [this._getZoomTriggerEvent('zoom'), { level: Event_Bubble_Level.chart, consume: true }];\n const zoomEndParams: [string] | [string, EventQuery] = this._isGestureListener\n ? [this._getZoomTriggerEvent('zoomEnd')]\n : [this._getZoomTriggerEvent('zoomEnd'), { level: Event_Bubble_Level.chart, consume: false }];\n\n // pc端没有scrollEnd事件,所以漫游模式下scroll仅支持realTime\n (event as any).on(\n ...zoomEndParams,\n delayMap[delayType]((params: BaseEventParams) => {\n this._zoomableTrigger.clearZoom();\n }, delayTime) as any\n );\n\n (event as any).on(\n ...zoomParams,\n delayMap[delayType]((params: BaseEventParams) => {\n // if (realTime) {\n this._zoomEventDispatch(params, regionOrSeries, callback);\n // }\n }, delayTime) as any\n );\n }\n\n initZoomEventOfSeries(\n s: ISeries,\n callback?: (params: { zoomDelta: number; zoomX: number; zoomY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n this._bindZoomEventAsRegion(s.event, s, callback, option);\n }\n }\n\n initZoomEventOfRegions(\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (params: { zoomDelta: number; zoomX: number; zoomY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n regions.forEach(r => {\n if (filter) {\n r.getSeries().forEach(s => {\n if (filter(s)) {\n this._bindZoomEventAsRegion(s.event, s, callback, option);\n }\n });\n } else {\n this._bindZoomEventAsRegion(this._eventObj, r, callback, option);\n }\n });\n }\n }\n\n private _scrollEventDispatch(\n params: BaseEventParams,\n regionOrSeries: IRegion | ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => any\n ) {\n let stopBubble: boolean | undefined = false;\n if (!this._isGestureListener && (!params.event || this._option.disableTriggerEvent)) {\n return stopBubble;\n }\n const event = this._isGestureListener ? params : params.event;\n this._zoomableTrigger.parserScrollEvent(event);\n // FIXME: event类型目前不全\n const { scrollX, scrollY, canvasX, canvasY } = event as any;\n if (isNil(scrollX) && isNil(scrollY)) {\n return stopBubble;\n }\n if (\n !pointInRect(\n {\n x: canvasX,\n y: canvasY\n },\n this._getRegionOrSeriesLayout(regionOrSeries),\n false\n )\n ) {\n return stopBubble;\n }\n this._clickEnable = false;\n\n if (callback) {\n stopBubble = callback({ scrollX, scrollY }, event as any);\n }\n this._eventObj.emit('scroll', {\n scrollX,\n scrollY,\n model: this\n } as unknown as ExtendEventParam);\n\n return stopBubble;\n }\n\n private _bindScrollEventAsRegion(\n eventObj: IEvent,\n regionOrSeries: IRegion | ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => any,\n option?: ITriggerOption\n ) {\n const delayType = option?.delayType ?? 'throttle';\n const delayTime = option?.delayTime ?? 0;\n\n const event = this._isGestureListener ? this._gestureController : eventObj;\n const scrollParams = this._isGestureListener\n ? [this._getZoomTriggerEvent('scroll')]\n : [this._getZoomTriggerEvent('scroll'), { level: Event_Bubble_Level.chart, consume: true }];\n const scrollEndParams = this._isGestureListener\n ? [this._getZoomTriggerEvent('scrollEnd')]\n : [this._getZoomTriggerEvent('scrollEnd'), { level: Event_Bubble_Level.chart, consume: false }];\n\n // pc端没有scrollEnd事件,所以漫游模式下scroll仅支持realTime\n (event as any).on(\n ...scrollEndParams,\n delayMap[delayType]((params: any) => {\n this._zoomableTrigger.clearScroll();\n }, delayTime)\n );\n\n (event as any).on(\n ...scrollParams,\n delayMap[delayType]((params: any) => {\n // if (realTime) {\n return this._scrollEventDispatch(params, regionOrSeries, callback);\n // }\n }, delayTime)\n );\n }\n\n initScrollEventOfSeries(\n s: ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n this._bindScrollEventAsRegion(s.event, s, callback, option);\n }\n }\n\n initScrollEventOfRegions(\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n regions.forEach(r => {\n if (filter) {\n r.getSeries().forEach(s => {\n if (filter(s)) {\n this._bindScrollEventAsRegion(s.event, s, callback, option);\n }\n });\n } else {\n this._bindScrollEventAsRegion(this._eventObj, r, callback, option);\n }\n });\n }\n }\n\n private _bindDragEventAsRegion(\n eventObj: IEvent,\n regionOrSeries: IRegion | ISeries,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n eventObj.on(this._getZoomTriggerEvent('start'), { level: Event_Bubble_Level.chart }, (params: any) => {\n if (!params.event) {\n return;\n }\n\n const { event } = params;\n const shouldTrigger = pointInRect(\n {\n x: event.canvasX,\n y: event.canvasY\n },\n this._getRegionOrSeriesLayout(regionOrSeries),\n false\n );\n if (shouldTrigger) {\n this._handleDrag(params, callback, option);\n }\n });\n // click 事件需要在drag和zoom时被屏蔽\n // hack 应该由事件系统做?或者事件系统有更好的方式处理这种交互冲突场景\n eventObj.on('click', { level: Event_Bubble_Level.chart }, () => {\n return !this._clickEnable;\n });\n }\n\n initDragEventOfSeries(\n s: ISeries,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n s.event.on(\n this._getZoomTriggerEvent('start'),\n { level: Event_Bubble_Level.model, filter: ({ model }) => model?.id === s.id },\n params => {\n this._handleDrag(params, callback, option);\n }\n );\n }\n }\n\n initDragEventOfRegions(\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n regions.forEach(r => {\n if (filter) {\n r.getSeries().forEach(s => {\n if (filter(s)) {\n s.event.on(\n this._getZoomTriggerEvent('start'),\n { level: Event_Bubble_Level.model, filter: ({ model }) => model?.id === s.id },\n params => {\n this._handleDrag(params, callback);\n }\n );\n\n // click 事件需要在drag和zoom时被屏蔽\n // hack 应该由事件系统做?或者事件系统有更好的方式处理这种交互冲突场景\n s.event.on(\n 'click',\n { level: Event_Bubble_Level.model, filter: ({ model }) => model?.id === s.id },\n () => {\n return !this._clickEnable;\n }\n );\n }\n });\n } else {\n this._bindDragEventAsRegion(this._eventObj, r, callback, option);\n }\n });\n }\n }\n\n protected _handleDrag(\n params: ExtendEventParam,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n this._clickEnable = true;\n if (!this._zoomableTrigger.parserDragEvent(params.event)) {\n return;\n }\n const delayType = option?.delayType ?? 'throttle';\n const delayTime = option?.delayTime ?? 0;\n const realTime = option?.realTime ?? true;\n const move = this._getZoomTriggerEvent('move');\n const end = this._getZoomTriggerEvent('end');\n const event = params.event;\n let moveX = event.canvasX;\n let moveY = event.canvasY;\n let upX = event.canvasX;\n let upY = event.canvasY;\n\n const mouseup = delayMap[delayType]((params: BaseEventParams) => {\n this._clickEnable = false;\n const event = params.event as any;\n const dx = event.canvasX - upX;\n const dy = event.canvasY - upY;\n const delta: [number, number] = [dx, dy];\n\n upX = event.canvasX;\n upY = event.canvasY;\n\n if (!realTime && callback) {\n callback(delta, params.event);\n }\n\n this._eventObj.emit('panend', {\n delta,\n model: this\n } as unknown as BaseEventParams);\n this._zoomableTrigger.pointerId = null;\n this._eventObj.off(move, { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart }, mousemove as any);\n this._eventObj.off(end, { level: Event_Bubble_Level.chart, source: Event_Source_Type.window }, mouseup as any);\n }, delayTime);\n const mousemove = delayMap[delayType]((params: BaseEventParams) => {\n if (!this._zoomableTrigger.parserDragEvent(params.event)) {\n return;\n }\n this._clickEnable = false;\n const event = params.event;\n const dx = event.canvasX - moveX;\n const dy = event.canvasY - moveY;\n const delta: [number, number] = [dx, dy];\n\n moveX = event.canvasX;\n moveY = event.canvasY;\n\n if (realTime && callback) {\n callback(delta, params.event);\n }\n this._eventObj.emit('panmove', {\n delta,\n model: this\n } as unknown as ExtendEventParam);\n }, delayTime);\n\n this._eventObj.on(move, { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart }, mousemove as any);\n this._eventObj.on(end, { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart }, mouseup as any);\n }\n}\n","import { LayoutZIndex } from './../../constant/index';\n/* eslint-disable no-duplicate-imports */\nimport type { IPoint } from '../../typings/coordinate';\nimport { Projection } from './projection';\nimport type { IEffect, IModelLayoutOption, IModelRenderOption, IModelSpecInfo } from '../../model/interface';\nimport type { IComponentOption } from '../interface';\nimport { ComponentTypeEnum } from '../interface/type';\nimport { BaseComponent } from '../base/base-component';\nimport type { IGeoRegionSpec, IRegion, IRegionSpec } from '../../region/interface';\nimport { eachSeries } from '../../util/model';\nimport { mergeSpec } from '../../util/spec/merge-spec';\nimport { ChartEvent, PREFIX } from '../../constant/index';\nimport type { ICartesianSeries, IGeoSeries } from '../../series/interface';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport type { IGeoCoordinate, IGeoCoordinateHelper, IGeoCoordinateSpec, IProjectionSpec } from './interface';\nimport type { BaseEventParams, ExtendEventParam, PanEventParam, ZoomEventParam } from '../../event/interface';\nimport type { IChartSpec, StringOrNumber } from '../../typings';\nimport type { IZoomable } from '../../interaction/zoom/zoomable';\nimport { Zoomable } from '../../interaction/zoom/zoomable';\nimport { isValid, mixin, isNil, Matrix } from '@visactor/vutils';\nimport type { Maybe } from '@visactor/vutils';\nimport { DEFAULT_MAP_LOOK_UP_KEY } from '../../data/transforms/map';\nimport { Factory } from '../../core/factory';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport type { MapSeries } from '../../series';\n\nexport function projectionName(key: string, id: number) {\n return `${PREFIX}_${id}_${key}`;\n}\nexport class GeoCoordinate extends BaseComponent implements IGeoCoordinate {\n static type = ComponentTypeEnum.geoCoordinate;\n type = ComponentTypeEnum.geoCoordinate;\n name: string = ComponentTypeEnum.geoCoordinate;\n\n layoutType: 'none' = 'none';\n protected layoutZIndex: number = LayoutZIndex.Mark;\n\n _longitudeField?: string;\n get longitudeField() {\n return this._longitudeField;\n }\n\n _latitudeField?: string;\n get latitudeField() {\n return this._latitudeField;\n }\n\n protected _projectionSpec: IProjectionSpec = {\n name: projectionName(this.type, this.id),\n type: 'mercator'\n };\n get projectionSpec() {\n return this._projectionSpec;\n }\n setProjection(projectionSpec: IGeoCoordinateSpec['projection']) {\n this._projectionSpec = {\n ...projectionSpec,\n name: this._projectionSpec.name\n };\n }\n\n protected _projection!: Projection;\n\n protected _centerCache: Map;\n\n private _actualScale = 1;\n\n getZoom() {\n return this._actualScale;\n }\n\n private _initialScale = 1;\n\n static getSpecInfo(chartSpec: any): Maybe {\n if (isNil(chartSpec)) {\n return null;\n }\n const specInfos: IModelSpecInfo[] = [];\n chartSpec.region.forEach((r: IRegionSpec, i: number) => {\n if (r.coordinate === 'geo') {\n // 去除 padding 配置,避免重复计算\n const spec = { ...r, padding: 0 };\n specInfos.push({\n spec,\n regionIndex: i,\n type: ComponentTypeEnum.geoCoordinate,\n specInfoPath: ['region', i, 'geoCoordinate']\n } as any);\n }\n });\n return specInfos;\n }\n\n effect: IEffect = {\n scaleUpdate: () => {\n this.coordinateHelper();\n }\n };\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n if (this._spec.roam) {\n (this as unknown as IZoomable).initZoomable(this.event, this._option.mode);\n }\n\n this._projectionSpec = mergeSpec(this._projectionSpec, this._spec.projection);\n if (this._projectionSpec.zoom > this._spec.zoomLimit?.max) {\n this._projectionSpec.zoom = this._spec.zoomLimit.max;\n }\n if (this._projectionSpec.zoom < this._spec.zoomLimit?.min) {\n this._projectionSpec.zoom = this._spec.zoomLimit.min;\n }\n\n this._actualScale = this._projectionSpec.zoom ?? 1;\n this._initialScale = this._actualScale;\n this._longitudeField = this._spec.longitudeField;\n this._latitudeField = this._spec.latitudeField;\n }\n\n // life cycle\n created() {\n super.created();\n this._regions = this._option.getRegionsInIndex([(this._option as any).regionIndex]);\n this.initProjection();\n this.coordinateHelper();\n this.initEvent();\n this._initCenterCache();\n // FIXME: 这里是在开启缩放时,处理关联的symbol等mark,在地图缩放时应该同步缩放\n // this.rescaleMark();\n }\n\n private _handleChartZoom = (\n params: { zoomDelta: number; zoomX?: number; zoomY?: number },\n event?: BaseEventParams['event']\n ) => {\n let scale = params.zoomDelta;\n // check if the next scale will outrange\n const _lastActualScale = this._actualScale;\n this._actualScale *= scale;\n if (this._actualScale < this._spec.zoomLimit?.min) {\n this._actualScale = this._spec.zoomLimit?.min;\n scale = this._spec.zoomLimit?.min / _lastActualScale;\n } else if (this._actualScale > this._spec.zoomLimit?.max) {\n this._actualScale = this._spec.zoomLimit?.max;\n scale = this._spec.zoomLimit?.max / _lastActualScale;\n }\n if (event) {\n (event as any).zoomDelta = scale;\n }\n this.zoom(scale, [params.zoomX, params.zoomY]);\n return scale;\n };\n\n dispatchZoom(zoomDelta: number, center?: { x: number; y: number }) {\n const scaleCenter = center || {\n x: this.getLayoutStartPoint().x + this.getLayoutRect().width / 2,\n y: this.getLayoutStartPoint().y + this.getLayoutRect().height / 2\n };\n const scale = this._handleChartZoom({ zoomDelta, zoomX: scaleCenter.x, zoomY: scaleCenter.y });\n if (scale !== 1) {\n this.event.emit('zoom', {\n scale,\n scaleCenter,\n model: this\n } as unknown as ExtendEventParam);\n }\n }\n\n initEvent() {\n this.event.on(\n ChartEvent.scaleUpdate,\n { filter: ({ model }) => model?.id === this.id },\n this.effect.scaleUpdate.bind(this)\n );\n\n if (this._spec.roam) {\n (this as unknown as IZoomable).initZoomEventOfRegions(this._regions, null, this._handleChartZoom);\n (this as unknown as IZoomable).initDragEventOfRegions(this._regions, () => true, this.pan);\n\n this._regions.forEach(r => {\n r.getSeries().forEach(s => {\n s.event.on('zoom', e => {\n s.handleZoom(e as ZoomEventParam);\n return true;\n });\n\n s.event.on('panmove', e => {\n s.handlePan(e as PanEventParam);\n return true;\n });\n });\n });\n }\n }\n\n initProjection() {\n this._projection = new Projection(this._projectionSpec);\n if (this._projection.projection === null) {\n this._option?.onError('unsupported projection type!');\n return;\n }\n }\n\n coordinateHelper() {\n const helper: IGeoCoordinateHelper = {\n longitudeField: this._longitudeField,\n latitudeField: this._latitudeField,\n dataToPosition: this.dataToPosition.bind(this),\n dataToLongitude: this.dataToLongitude.bind(this),\n dataToLatitude: this.dataToLatitude.bind(this),\n shape: this.shape.bind(this),\n getCoordinateId: () => this.id\n };\n\n this._regions.forEach(r => {\n r.getSeries().forEach(s => {\n if (s.type === SeriesTypeEnum.map) {\n (s as IGeoSeries).setCoordinateHelper(helper);\n } else {\n // 散点地图\n (s as ICartesianSeries).setXAxisHelper({\n ...helper,\n isContinuous: true,\n dataToPosition: (values: any[], option) => {\n let value = values[0];\n if (isNil(value) && option?.datum) {\n const nameFieldValue = option.datum[(s as ICartesianSeries).getDimensionField()[0]];\n value = this._centerCache.get(nameFieldValue)?.x;\n }\n return this.dataToLongitude(value);\n },\n valueToPosition: (value: any, option) => {\n if (isNil(value) && option?.datum) {\n const nameFieldValue = option.datum[(s as ICartesianSeries).getDimensionField()[0]];\n value = this._centerCache.get(nameFieldValue)?.x;\n }\n return this.dataToLongitude(value);\n },\n getFields: () => [this._longitudeField],\n getAxisType: () => this.type,\n getAxisId: () => this.id,\n isInverse: () => false\n });\n (s as unknown as ICartesianSeries).setYAxisHelper({\n ...helper,\n isContinuous: true,\n dataToPosition: (values: any[], option) => {\n let value = values[0];\n if (isNil(value) && option?.datum) {\n const nameFieldValue = option.datum[(s as ICartesianSeries).getDimensionField()[0]];\n value = this._centerCache.get(nameFieldValue)?.y;\n }\n return this.dataToLatitude(value);\n },\n valueToPosition: (value: any, option) => {\n if (isNil(value) && option?.datum) {\n const nameFieldValue = option.datum[(s as ICartesianSeries).getDimensionField()[0]];\n value = this._centerCache.get(nameFieldValue)?.y;\n }\n return this.dataToLatitude(value);\n },\n getFields: () => [this._latitudeField],\n getAxisType: () => this.type,\n getAxisId: () => this.id,\n isInverse: () => false\n });\n }\n });\n });\n }\n\n onLayoutEnd(ctx: IModelLayoutOption) {\n this.setLayoutRect(this._regions[0].getLayoutRect());\n this.setLayoutStartPosition(this._regions[0].getLayoutStartPoint());\n const { width, height } = this.getLayoutRect();\n const { translate, scale, center } = this.evaluateProjection([0, 0], [width, height]);\n translate && this._projection.translate(translate);\n scale && this._projection.scale(scale);\n center && this._projection.center(center);\n eachSeries(this._regions, s => {\n if (s.type === SeriesTypeEnum.map) {\n (s as MapSeries).areaPath.clear();\n const pathGroup = s.getRootMark().getProduct()?.getGroupGraphicItem();\n if (pathGroup) {\n if (pathGroup.attribute.postMatrix) {\n pathGroup.setAttributes({\n postMatrix: new Matrix()\n });\n }\n }\n }\n });\n this._actualScale = this._initialScale;\n\n super.onLayoutEnd(ctx);\n }\n\n onRender(ctx: IModelRenderOption) {\n // do nothing\n }\n\n // region\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [];\n }\n\n // util\n protected collectFeatures() {\n const features: any[] = [];\n this._regions.forEach(r => {\n r.getSeries().forEach(s => {\n if (s.type === SeriesTypeEnum.map) {\n features.push(...((s as unknown as IGeoSeries).getMapViewData()?.latestData ?? []));\n }\n });\n });\n return features;\n }\n\n // API\n dataToPosition(values: number[] = []): IPoint {\n const point = this._projection?.project([values[0], values[1]]);\n return {\n x: point?.[0],\n y: point?.[1]\n };\n }\n\n dataToLatitude(lat: number): number {\n const point = this._projection?.project([0, lat]);\n return point?.[1];\n }\n\n dataToLongitude(lon: number): number {\n const point = this._projection?.project([lon, 0]);\n return point?.[0];\n }\n\n // interaction\n zoom(p: number, anchor: [number, number] = [0, 0]) {\n let s = this._projection?.scale() ?? 0;\n const t = this._projection?.translate() ?? [0, 0];\n let t_x = t[0];\n let t_y = t[1];\n s = s * p;\n t_x -= (anchor[0] - t_x) * (p - 1);\n t_y -= (anchor[1] - t_y) * (p - 1);\n\n this._projection?.scale(s);\n this._projection?.translate([t_x, t_y]);\n }\n\n pan = (delta: [number, number] = [0, 0]) => {\n const t = this._projection?.translate() ?? [0, 0];\n let t_x = t[0];\n let t_y = t[1];\n t_x += delta[0];\n t_y += delta[1];\n this._projection?.translate([t_x, t_y]);\n };\n\n shape(datum?: any) {\n return this._projection.shape(datum);\n }\n\n /**\n * 根据像素坐标获取经纬度位置\n */\n invert(point: [number, number]) {\n return this._projection.invert(point);\n }\n\n private evaluateProjection(start: [number, number], size: [number, number]) {\n const evaluated = this._projection.evaluate(start, size, this.collectFeatures());\n let translate = evaluated.translate();\n const scale = evaluated.scale() * this._initialScale;\n const center = this._projectionSpec.center ?? evaluated.invert([size[0] / 2, size[1] / 2]);\n center && (translate = [size[0] / 2, size[1] / 2]);\n return { translate, scale, center };\n }\n\n protected _initCenterCache() {\n if (!this._centerCache) {\n this._centerCache = new Map();\n }\n this._regions.forEach(r => {\n r.getSeries().forEach(s => {\n if (s.type === 'map') {\n const mapData = (s as IGeoSeries).getMapViewData()?.latestData ?? [];\n mapData.forEach((feature: any = {}) => {\n const key = feature[s.getDimensionField()[0]] || feature[DEFAULT_MAP_LOOK_UP_KEY];\n const center = (s as IGeoSeries).getDatumCenter(feature);\n if (key && isValid(center)) {\n this._centerCache.set(key, { x: center[0], y: center[1] });\n }\n });\n }\n });\n });\n }\n\n release(): void {\n super.release();\n this._centerCache && this._centerCache.clear();\n this._centerCache = null;\n }\n}\n\nmixin(GeoCoordinate, Zoomable);\n\nexport const registerGeoCoordinate = () => {\n Factory.registerComponent(GeoCoordinate.type, GeoCoordinate);\n};\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IMapSeriesSpec, IMapSeriesTheme } from './interface';\n\nexport class MapSeriesSpecTransformer<\n T extends IMapSeriesSpec = IMapSeriesSpec,\n K extends IMapSeriesTheme = IMapSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.area, undefined, undefined, false); // 地图交互通过 vrender api,自身不支持动画,所以 label 也不支持动画\n }\n}\n","import { Matrix, isValid, isValidNumber } from '@visactor/vutils';\n/* eslint-disable no-duplicate-imports */\nimport type { FeatureData } from '@visactor/vgrammar-core';\nimport { registerProjection } from '@visactor/vgrammar-projection';\nimport { DataView } from '@visactor/vdataset';\nimport type { IPathMark } from '../../mark/path';\nimport { geoSourceMap, registerMapSource, unregisterMapSource } from './geo-source';\nimport { lookup } from '../../data/transforms/lookup';\nimport type { Maybe, Datum, StringOrNumber } from '../../typings';\nimport { GeoSeries } from '../geo/geo';\nimport { DEFAULT_MAP_LOOK_UP_KEY, map } from '../../data/transforms/map';\nimport { copyDataView } from '../../data/transforms/copy-data-view';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { MapSeriesTooltipHelper } from './tooltip-helper';\nimport { AttributeLevel, DEFAULT_DATA_SERIES_FIELD, DEFAULT_DATA_INDEX } from '../../constant/index';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IMapSeriesSpec, IMapSeriesTheme } from './interface';\nimport { SeriesData } from '../base/series-data';\nimport type { PanEventParam, ZoomEventParam } from '../../event/interface';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport { PathMark, registerPathMark } from '../../mark/path';\nimport { mapSeriesMark } from './constant';\nimport type { ILabelMark } from '../../mark/label';\nimport { Factory } from '../../core/factory';\nimport { registerGeoCoordinate } from '../../component/geo';\nimport type { IMark } from '../../mark/interface';\nimport { TransformLevel } from '../../data/initialize';\nimport { MapSeriesSpecTransformer } from './map-transformer';\n\nexport class MapSeries extends GeoSeries {\n static readonly type: string = SeriesTypeEnum.map;\n type = SeriesTypeEnum.map;\n\n static readonly mark: SeriesMarkMap = mapSeriesMark;\n static readonly transformerConstructor = MapSeriesSpecTransformer as any;\n readonly transformerConstructor = MapSeriesSpecTransformer;\n\n map!: string;\n\n protected _nameMap!: { [key: StringOrNumber]: StringOrNumber };\n getNameMap() {\n return this._nameMap;\n }\n\n private _areaCache: Map = new Map();\n get areaPath() {\n return this._areaCache;\n }\n\n private _pathMark: IPathMark;\n private _labelMark: ILabelMark;\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.map = this._spec.map;\n this._nameMap = this._spec.nameMap;\n this._nameField = this._spec.nameField;\n this._valueField = this._spec.valueField;\n this._spec.nameProperty && (this._nameProperty = this._spec.nameProperty);\n this._spec.centroidProperty && (this._centroidProperty = this._spec.centroidProperty);\n\n if (!this.map) {\n this._option?.onError(`map type '${this.map}' is not specified !`);\n }\n\n if (!geoSourceMap.get(this.map)) {\n this._option?.onError(`'${this.map}' data is not registered !`);\n }\n }\n\n // data\n initData(): void {\n super.initData();\n\n registerDataSetInstanceTransform(this._dataSet, 'copyDataView', copyDataView);\n registerDataSetInstanceTransform(this._dataSet, 'map', map);\n registerDataSetInstanceTransform(this._dataSet, 'lookup', lookup);\n\n // 初始化地图数据\n const features = geoSourceMap.get(this.map);\n if (!features) {\n this._option?.onError('no valid map data found!');\n }\n const mapData = new DataView(this._dataSet, { name: `map_${this.id}_data` });\n\n mapData\n .parse([features], {\n type: 'dataview'\n })\n .transform({ type: 'copyDataView', options: { deep: true }, level: TransformLevel.copyDataView })\n .transform({\n type: 'map',\n options: {\n nameMap: this._nameMap,\n nameProperty: this._nameProperty\n }\n })\n .transform({\n type: 'lookup',\n options: {\n from: () => this._data?.getLatestData(),\n key: DEFAULT_MAP_LOOK_UP_KEY,\n fields: this._nameField,\n set: (feature: FeatureData, datum: Datum) => {\n if (datum) {\n Object.keys(datum).forEach(key => {\n if (!(key in feature)) {\n feature[key] = datum[key];\n }\n });\n }\n }\n }\n });\n this._data?.getDataView().target.addListener('change', mapData.reRunAllTransform);\n this._mapViewData = new SeriesData(this._option, mapData);\n }\n\n // mark\n initMark() {\n this._pathMark = this._createMark(MapSeries.mark.area, {\n morph: shouldMarkDoMorph(this._spec, MapSeries.mark.area.name),\n defaultMorphElementKey: this.getDimensionField()[0],\n groupKey: this.getDimensionField()[0],\n isSeriesMark: true,\n skipBeforeLayouted: true,\n dataView: this._mapViewData.getDataView(),\n dataProductId: this._mapViewData.getProductId()\n }) as IPathMark;\n }\n\n initMarkStyle() {\n const pathMark = this._pathMark;\n if (pathMark) {\n this.setMarkStyle(\n pathMark,\n {\n fill: (datum: any) => {\n if (isValid(datum[this._seriesField ?? DEFAULT_DATA_SERIES_FIELD])) {\n return (this._option.globalScale.getScale('color') ?? this._getDefaultColorScale()).scale(\n datum[this._seriesField ?? DEFAULT_DATA_SERIES_FIELD]\n );\n }\n return this._spec?.defaultFillColor;\n },\n path: this.getPath.bind(this)\n },\n 'normal',\n AttributeLevel.Series\n );\n\n pathMark.setPostProcess('fill', result => {\n if (!isValid(result)) {\n return this._spec.defaultFillColor;\n }\n return result;\n });\n\n this.setMarkStyle(\n pathMark,\n {\n smoothScale: true\n },\n 'normal',\n AttributeLevel.Built_In\n );\n this._trigger.registerMark(pathMark);\n }\n }\n\n initLabelMarkStyle(labelMark: ILabelMark) {\n if (!labelMark) {\n return;\n }\n this._labelMark = labelMark;\n this.setMarkStyle(labelMark, {\n text: (datum: Datum) => {\n const text = this.getDatumName(datum);\n return text;\n },\n x: (datum: Datum) => this.dataToPosition(datum)?.x,\n y: (datum: Datum) => this.dataToPosition(datum)?.y\n });\n }\n\n initAnimation() {\n this._pathMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.area, this._spec, this._markAttributeContext)\n )\n );\n }\n\n protected initTooltip() {\n this._tooltipHelper = new MapSeriesTooltipHelper(this);\n this._pathMark && this._tooltipHelper.activeTriggerSet.mark.add(this._pathMark);\n }\n\n protected getPath(datum: any) {\n const area = this._areaCache.get(datum[DEFAULT_DATA_INDEX]);\n if (area) {\n return area.shape;\n }\n const shape = this._coordinateHelper?.shape(datum);\n this._areaCache.set(datum[DEFAULT_DATA_INDEX], {\n shape\n });\n return shape;\n }\n\n // life cycle\n onEvaluateEnd() {\n this._mapViewData.updateData();\n }\n\n getDimensionField(): string[] {\n return [this.nameField];\n }\n\n getMeasureField(): string[] {\n return [this.valueField];\n }\n\n release() {\n super.release();\n this._areaCache.clear();\n this._nameMap = {};\n this._trigger = this._mapViewData = null as any;\n }\n\n handleZoom(e: ZoomEventParam) {\n const { scale, scaleCenter } = e;\n if (scale === 1) {\n return;\n }\n\n const pathGroup = this.getRootMark().getProduct()?.getGroupGraphicItem();\n if (pathGroup) {\n if (!pathGroup.attribute.postMatrix) {\n pathGroup.setAttributes({\n postMatrix: new Matrix()\n });\n }\n pathGroup.scale(scale, scale, scaleCenter);\n }\n const vgrammarLabel = this._labelMark?.getComponent()?.getProduct();\n\n if (vgrammarLabel) {\n vgrammarLabel.evaluateSync(null, null);\n }\n }\n\n handlePan(e: PanEventParam) {\n const { delta } = e;\n if (delta[0] === 0 && delta[1] === 0) {\n return;\n }\n const pathGroup = this.getRootMark().getProduct()?.getGroupGraphicItem();\n if (pathGroup) {\n if (!pathGroup.attribute.postMatrix) {\n pathGroup.setAttributes({\n postMatrix: new Matrix()\n });\n }\n pathGroup.translate(delta[0], delta[1]);\n }\n const vgrammarLabel = this._labelMark?.getComponent()?.getProduct();\n\n if (vgrammarLabel) {\n vgrammarLabel.evaluateSync(null, null);\n }\n }\n\n getDatumCenter(datum: any): [number, number] {\n if (this._centroidProperty && datum.properties?.[this._centroidProperty]) {\n return datum.properties?.[this._centroidProperty];\n }\n\n if (isValidNumber(datum.centroidX * datum.centroidY)) {\n return [datum.centroidX, datum.centroidY];\n }\n\n if (datum.properties?.center) {\n return datum.properties.center;\n }\n\n if (datum.properties?.centroid) {\n return datum.properties.centroid;\n }\n\n return [Number.NaN, Number.NaN];\n }\n\n getDatumName(datum: any): string {\n if (datum[this.nameField]) {\n return datum[this.nameField];\n }\n if (datum.properties?.[this._nameProperty]) {\n if (this._spec?.nameMap) {\n return this._spec.nameMap[datum.properties[this._nameProperty]] ?? '';\n }\n return datum.properties[this._nameProperty] ?? '';\n }\n return '';\n }\n\n dataToPositionX(data: any): number {\n this._option?.onError('Method not implemented.');\n return 0;\n }\n dataToPositionY(data: any): number {\n this._option?.onError('Method not implemented.');\n return 0;\n }\n\n viewDataUpdate(d: DataView): void {\n super.viewDataUpdate(d);\n this._mapViewData?.getDataView()?.reRunAllTransform();\n this._mapViewData?.updateData();\n }\n\n protected _getDataIdKey() {\n return DEFAULT_DATA_INDEX;\n }\n\n getActiveMarks(): IMark[] {\n return [this._pathMark];\n }\n}\n\nexport const registerMapSeries = () => {\n // 注册语法元素\n registerProjection();\n registerGeoCoordinate();\n registerPathMark();\n Factory.registerSeries(MapSeries.type, MapSeries);\n Factory.registerImplement('registerMap', registerMapSource);\n Factory.registerImplement('unregisterMap', unregisterMapSource);\n registerFadeInOutAnimation();\n};\n","import type { IMapSeriesSpec } from '../../series';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesTypeEnum } from '../../series';\nimport type { IRegionSpec, ISeriesSpec } from '../../typings';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { IMapChartSpec } from './interface';\n\nexport class MapChartSpecTransformer extends BaseChartSpecTransformer {\n protected _isValidSeries(type: string) {\n return type === SeriesTypeEnum.map;\n }\n\n protected _getDefaultSeriesSpec(spec: IMapChartSpec): IMapSeriesSpec {\n const series: any = {\n ...super._getDefaultSeriesSpec(spec),\n\n type: spec.type,\n\n nameField: spec.nameField,\n valueField: spec.valueField,\n seriesField: spec.seriesField,\n\n map: spec.map,\n\n nameProperty: spec.nameProperty,\n centroidProperty: spec.centroidProperty,\n nameMap: spec.nameMap,\n area: spec.area,\n\n defaultFillColor: spec.defaultFillColor\n };\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n\n spec.region.forEach((r: IRegionSpec) => {\n r.coordinate = 'geo';\n });\n\n const defaultSeriesSpec = this._getDefaultSeriesSpec(spec);\n if (!spec.series || spec.series.length === 0) {\n spec.series = [defaultSeriesSpec];\n } else {\n spec.series.forEach((s: ISeriesSpec) => {\n if (!this._isValidSeries(s.type)) {\n return;\n }\n Object.keys(defaultSeriesSpec).forEach(k => {\n if (!(k in s)) {\n s[k] = defaultSeriesSpec[k];\n }\n });\n });\n }\n }\n}\n","import { registerMapSeries } from '../../series/map/map';\nimport { BaseChart } from '../base/base-chart';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IMapChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { MapChartSpecTransformer } from './map-transformer';\n\nexport class MapChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.map;\n static readonly seriesType: string = SeriesTypeEnum.map;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = MapChartSpecTransformer;\n readonly transformerConstructor = MapChartSpecTransformer;\n readonly type: string = ChartTypeEnum.map;\n readonly seriesType: string = SeriesTypeEnum.map;\n}\n\nexport const registerMapChart = () => {\n registerMapSeries();\n Factory.registerChart(MapChart.type, MapChart);\n};\n","import { PREFIX } from './base';\n\nexport const DEFAULT_LABEL_LIMIT = `${PREFIX}_LABEL_LIMIT`;\nexport const DEFAULT_LABEL_ALIGN = `${PREFIX}_LABEL_ALIGN`;\nexport const DEFAULT_LABEL_TEXT = `${PREFIX}_LABEL_TEXT`;\nexport const DEFAULT_LABEL_VISIBLE = `${PREFIX}_LABEL_VISIBLE`;\nexport const DEFAULT_LABEL_X = `${PREFIX}_LABEL_X`;\nexport const DEFAULT_LABEL_Y = `${PREFIX}_LABEL_Y`;\n","import { get, pick, cloneDeep, isArray } from '@visactor/vutils';\n\nexport { get, pick, cloneDeep };\n\nexport function field(f: string | string[]) {\n return function (datum: any) {\n let value: any;\n if (!isArray(f)) {\n value = datum?.[f];\n } else {\n value = f.reduce((cur, g) => cur?.[g], datum);\n }\n return value;\n };\n}\n","import type { IBaseScale } from '@visactor/vscale';\nimport type { IPoint, IPolarPoint } from '../../typings/coordinate';\nimport type { IPolarSeries } from '../interface';\nimport { array, isValid, isNil } from '@visactor/vutils';\nimport { couldBeValidNumber } from '../../util/type';\nimport type { IPolarAxisHelper } from '../../component/axis/polar/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous } from '@visactor/vscale';\nimport { POLAR_DEFAULT_RADIUS } from '../../constant/polar';\nimport { BaseSeries } from '../base/base-series';\nimport type { IPolarSeriesSpec } from './interface';\nimport type { Datum, StringOrNumber } from '../../typings';\nimport { sortDataInAxisHelper } from '../util/utils';\n\nexport abstract class PolarSeries\n extends BaseSeries\n implements IPolarSeries\n{\n readonly coordinate: 'polar' = 'polar';\n\n protected _outerRadius: number = POLAR_DEFAULT_RADIUS;\n public get outerRadius() {\n return this._outerRadius;\n }\n\n protected _innerRadius: number = 0;\n public get innerRadius() {\n return this._innerRadius;\n }\n\n protected _angleField: string[] = [];\n getAngleField() {\n return this._angleField;\n }\n setAngleField(f: string | string[]): string[] {\n this._angleField = isValid(f) ? array(f) : [];\n return this._angleField;\n }\n\n protected _radiusField: string[] = [];\n getRadiusField() {\n return this._radiusField;\n }\n setRadiusField(f: string | string[]): string[] {\n this._radiusField = isValid(f) ? array(f) : [];\n return this._radiusField;\n }\n\n protected _specAngleField: string[];\n protected _specRadiusField: string[];\n\n protected _innerRadiusField!: string[];\n public get innerRadiusField() {\n return this._innerRadiusField;\n }\n setInnerRadiusField(f: string | string[]): string[] {\n this._innerRadiusField = array(f);\n return this._innerRadiusField;\n }\n\n protected _radiusScale!: IBaseScale;\n public get radiusScale() {\n return this._radiusScale;\n }\n setRadiusScale(s: IBaseScale) {\n this._radiusScale = s;\n return s;\n }\n\n protected _angleScale!: IBaseScale;\n public get angleScale() {\n return this._angleScale;\n }\n setAngleScale(s: IBaseScale) {\n this._angleScale = s;\n return s;\n }\n\n private _angleAxisHelper!: IPolarAxisHelper;\n public get angleAxisHelper() {\n return this._angleAxisHelper;\n }\n public set angleAxisHelper(h: IPolarAxisHelper) {\n this._angleAxisHelper = h;\n this.onAngleAxisHelperUpdate();\n }\n\n private _radiusAxisHelper!: IPolarAxisHelper;\n public get radiusAxisHelper() {\n return this._radiusAxisHelper;\n }\n public set radiusAxisHelper(h: IPolarAxisHelper) {\n this._radiusAxisHelper = h;\n this.onRadiusAxisHelperUpdate();\n }\n\n protected _sortDataByAxis: boolean = false;\n get sortDataByAxis() {\n return this._sortDataByAxis;\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n // position\n this._markAttributeContext.valueToPosition = this.valueToPosition.bind(this);\n this._markAttributeContext.getCenter = () => this.angleAxisHelper.center();\n this._markAttributeContext.getLayoutRadius = () => this._computeLayoutRadius();\n }\n\n valueToPosition(angleValue: StringOrNumber | StringOrNumber[], radiusValue: StringOrNumber | StringOrNumber[]) {\n if (isNil(angleValue) || isNil(radiusValue) || !this.angleAxisHelper || !this.radiusAxisHelper) {\n return { x: Number.NaN, y: Number.NaN };\n }\n const angle = this.angleAxisHelper.dataToPosition(array(angleValue));\n const radius = this.radiusAxisHelper.dataToPosition(array(radiusValue));\n // FIXME: 由于存在两个轴,这里的 坐标系转换逻辑会有点尬\n return this.angleAxisHelper.coordToPoint({ angle, radius });\n }\n\n dataToPosition(datum: Datum): IPoint {\n if (!datum || !this.angleAxisHelper || !this.radiusAxisHelper) {\n return { x: Number.NaN, y: Number.NaN };\n }\n // FIXME: 由于存在两个轴,这里的 坐标系转换逻辑会有点尬\n return this.valueToPosition(\n this.getDatumPositionValues(datum, this._angleField),\n this.getDatumPositionValues(datum, this._radiusField)\n );\n }\n\n dataToPositionX(datum: Datum): number {\n return this.dataToPosition(datum).x;\n }\n\n dataToPositionY(datum: Datum): number {\n return this.dataToPosition(datum).y;\n }\n\n dataToPositionZ(datum: Datum): number {\n return 0;\n }\n\n // todo: 待实现\n positionToData(p: IPolarPoint): any {\n /* do nothing */\n }\n radiusToData(r: number): any {\n /* do nothing */\n }\n angleToData(a: number): any {\n /* do nothing */\n }\n\n getStatisticFields() {\n const fields: { key: string; operations: Array<'max' | 'min' | 'values'> }[] = [];\n if (this.radiusAxisHelper?.getScale) {\n this._radiusField.forEach(f => {\n const result: { key: string; operations: Array<'max' | 'min' | 'values'> } = { key: f, operations: [] };\n if (isContinuous(this.radiusAxisHelper.getScale(0).type)) {\n result.operations = ['max', 'min'];\n } else {\n result.operations = ['values'];\n }\n fields.push(result);\n });\n }\n if (this.angleAxisHelper?.getScale) {\n this._angleField.forEach(f => {\n const result: { key: string; operations: Array<'max' | 'min' | 'values'> } = { key: f, operations: [] };\n if (isContinuous(this.angleAxisHelper.getScale(0).type)) {\n result.operations = ['max', 'min'];\n } else {\n result.operations = ['values'];\n }\n fields.push(result);\n });\n }\n return fields;\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n if (isValid(this._spec.outerRadius)) {\n this._outerRadius = this._spec.outerRadius;\n }\n if (isValid(this._spec.radius)) {\n // 优先使用outerRadius, 但要兼容spec.radius\n this._outerRadius = this._spec.radius;\n }\n if (isValid(this._spec.innerRadius)) {\n this._innerRadius = this._spec.innerRadius;\n }\n\n if (isValid(this._spec.sortDataByAxis)) {\n this._sortDataByAxis = this._spec.sortDataByAxis === true;\n }\n }\n\n onRadiusAxisHelperUpdate(): void {\n this.onMarkPositionUpdate();\n }\n onAngleAxisHelperUpdate(): void {\n this.onMarkPositionUpdate();\n }\n\n afterInitMark(): void {\n super.afterInitMark();\n this._trigger.setStateKeys([...this._angleField, ...this._radiusField]);\n }\n\n protected _computeLayoutRadius() {\n const { width, height } = this._region.getLayoutRect();\n return Math.min(width / 2, height / 2);\n }\n\n fillData(): void {\n super.fillData();\n if (this.sortDataByAxis) {\n this._sortDataInAxisDomain();\n }\n }\n\n _sortDataInAxisDomain() {\n if (this.getViewData()?.latestData?.length) {\n sortDataInAxisHelper(this.angleAxisHelper, this._angleField[0], this.getViewData().latestData);\n }\n }\n\n protected _getInvalidDefined = (datum: Datum) => {\n if (this.angleAxisHelper.isContinuous) {\n if (!couldBeValidNumber(datum[this._angleField[0]])) {\n return false;\n }\n }\n if (this.radiusAxisHelper.isContinuous) {\n if (!couldBeValidNumber(datum[this._radiusField[0]])) {\n return false;\n }\n }\n return true;\n };\n}\n","import type { DataView } from '@visactor/vdataset';\nimport type { Datum } from '../../typings';\nimport { couldBeValidNumber } from '../../util/type';\nimport { computeQuadrant } from '../../util/math';\nimport { ARC_TRANSFORM_VALUE } from '../../constant/polar';\n\nexport interface IPieOpt {\n angleField: string;\n\n startAngle: number;\n endAngle: number;\n minAngle: number;\n\n asStartAngle: string;\n asEndAngle: string;\n asMiddleAngle: string;\n asRadian: string;\n asRatio: string;\n asQuadrant: string;\n asK: string;\n}\n\nfunction transformInvalidValue(value: any) {\n if (!couldBeValidNumber(value)) {\n return 0;\n }\n return Number.parseFloat(value);\n}\n\nexport const pie = (originData: Array, op: IPieOpt) => {\n const data = originData.map((datum: Datum) => ({ ...datum }));\n if (!data || data.length === 0) {\n return data;\n }\n const {\n angleField,\n startAngle,\n endAngle,\n minAngle,\n asStartAngle,\n asEndAngle,\n asMiddleAngle,\n asRadian,\n asRatio,\n asQuadrant,\n asK\n } = op;\n\n const appendArcInfo = (data: Datum, startAngle: number, angle: number) => {\n data[asStartAngle] = startAngle;\n data[asEndAngle] = startAngle + angle;\n data[asMiddleAngle] = startAngle + angle / 2;\n data[asRadian] = angle;\n data[asQuadrant] = computeQuadrant(startAngle + angle / 2);\n };\n\n let total = 0;\n let max = -Infinity;\n for (let index = 0; index < data.length; index++) {\n const angleFieldValue = transformInvalidValue(data[index][angleField]);\n total += angleFieldValue;\n max = Math.max(angleFieldValue, max);\n\n data[index][ARC_TRANSFORM_VALUE] = angleFieldValue;\n }\n\n const angleRange = endAngle - startAngle;\n let lastAngle = startAngle;\n let restAngle = angleRange;\n let largeThanMinAngleTotal = 0;\n\n data.forEach(d => {\n const angleFieldValue = d[ARC_TRANSFORM_VALUE];\n const ratio = total ? angleFieldValue / total : 0;\n let radian = ratio * angleRange;\n\n if (radian < minAngle) {\n radian = minAngle;\n restAngle -= minAngle;\n } else {\n largeThanMinAngleTotal += angleFieldValue;\n }\n\n const dStartAngle = lastAngle;\n const dEndAngle = lastAngle + radian;\n\n d[asRatio] = ratio;\n d[asK] = max ? angleFieldValue / max : 0;\n appendArcInfo(d, dStartAngle, radian);\n\n lastAngle = dEndAngle;\n });\n\n if (restAngle < angleRange) {\n if (restAngle <= 1e-3) {\n const angle = angleRange / data.length;\n data.forEach((d, index) => {\n appendArcInfo(d, startAngle + index * angle, angle);\n });\n } else {\n const unitRadian = restAngle / largeThanMinAngleTotal;\n lastAngle = startAngle;\n data.forEach(d => {\n const angle = d[asRadian] === minAngle ? minAngle : d[ARC_TRANSFORM_VALUE] * unitRadian;\n appendArcInfo(d, lastAngle, angle);\n\n lastAngle += angle;\n });\n }\n }\n\n if (total !== 0) {\n // 数据都为 0 时,起始角和结束角相同,不应该强制赋值\n // 防止一个扇区的角度会因为浮点数精度问题和传入的 endAngle 不相等\n data[data.length - 1][asEndAngle] = endAngle;\n }\n return data;\n};\n","import type { IElement, IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { AnimationStateEnum } from '../../../animation/interface';\nimport type { Datum } from '../../../typings';\nimport { Factory } from '../../../core/factory';\n\nexport interface IPieAnimationParams {\n growField?: 'angle' | 'radius';\n growFrom: (datum: Datum, element: IElement, state: AnimationStateEnum) => number;\n}\n\nexport type PieAppearPreset = 'growAngle' | 'growRadius' | 'fadeIn';\n\n/**\n * grow生长option\n * 在appear时,所有柱子一起从同一个位置生长,需要growXXXOverall效果;\n * 在enter时,柱子应该从自身位置生长;\n * @param params\n * @param isOverall\n * @returns\n */\nexport function pieGrowOption(pieParams: IPieAnimationParams, isOverall: boolean, state: AnimationStateEnum) {\n return (datum: Datum, element: IElement, params: AnimationStateEnum) => {\n if (isOverall) {\n if (pieParams.growField === 'radius') {\n return {\n overall: 0\n };\n }\n return {\n overall: pieParams.growFrom(datum, element, state)\n };\n }\n return {\n overall: false\n };\n };\n}\n\nexport const Appear_Grow = (params: IPieAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.growField === 'radius' ? 'growRadiusIn' : 'growAngleIn',\n options: pieGrowOption(params, true, AnimationStateEnum.appear)\n };\n};\n\nexport const Appear_FadeIn = {\n type: 'fadeIn'\n};\n\nexport const pieEnter = (params: IPieAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.growField === 'radius' ? 'growRadiusIn' : 'growAngleIn',\n easing: 'linear',\n options: pieGrowOption(params, true, AnimationStateEnum.enter)\n };\n};\n\nexport const pieExit = (params: IPieAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.growField === 'radius' ? 'growRadiusOut' : 'growAngleOut',\n easing: 'linear',\n options: pieGrowOption(params, true, AnimationStateEnum.exit)\n };\n};\n\nexport const pieDisappear = (params: IPieAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.growField === 'radius' ? 'growRadiusOut' : 'growAngleOut',\n options: pieGrowOption(params, true, AnimationStateEnum.exit)\n };\n};\n\nexport function piePresetAnimation(params: IPieAnimationParams, preset: PieAppearPreset | boolean) {\n if (preset === false) {\n return {};\n }\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n case 'growRadius':\n return Appear_Grow({\n ...params,\n growField: 'radius'\n });\n default:\n return Appear_Grow({\n ...params,\n growField: 'angle'\n });\n }\n}\n\nexport const registerPieAnimation = () => {\n Factory.registerAnimation('pie', (params: IPieAnimationParams, preset: PieAppearPreset) => {\n return {\n appear: piePresetAnimation(params, preset),\n enter: pieEnter(params),\n exit: pieExit(params),\n disappear: pieDisappear(params)\n };\n });\n};\n\nexport const registerPie3dAnimation = () => {\n Factory.registerAnimation('pie3d', (params: IPieAnimationParams, preset: PieAppearPreset) => {\n return {\n appear: piePresetAnimation(params, preset),\n enter: pieEnter(params),\n exit: pieExit(params),\n disappear: pieDisappear(params)\n };\n });\n};\n","import { Factory } from './../core/factory';\nimport { ARC_MIDDLE_ANGLE } from '../constant';\nimport type { IArcMarkSpec, Datum, StateValueType } from '../typings';\nimport { polarToCartesian } from '../util/math';\nimport type { ExChannelCall } from './base/base-mark';\nimport { BaseMark } from './base/base-mark';\nimport type { IMarkOption, IMarkRaw, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerArcGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarArcAnimation } from '../animation/config';\n\nexport type IArcMark = IMarkRaw;\n\nexport class BaseArcMark extends BaseMark implements IMarkRaw {\n readonly type: MarkTypeEnum = ArcMark.type;\n\n _unCompileChannel = { centerOffset: true, radiusOffset: true };\n\n constructor(name: string, option: IMarkOption) {\n super(name, option);\n\n // because of set object.function, this setting should be write after object init\n this._computeExChannel.x = this.computeCenter as ExChannelCall;\n this._computeExChannel.y = this.computeCenter as ExChannelCall;\n this._computeExChannel.outerRadius = this.computeOuterRadius as ExChannelCall;\n\n this._extensionChannel.centerOffset = ['x', 'y'];\n this._extensionChannel.radiusOffset = ['outerRadius'];\n }\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n startAngle: 0,\n endAngle: 0,\n outerRadius: 0,\n innerRadius: 0,\n cornerRadius: 0,\n lineWidth: 0\n };\n return defaultStyle;\n }\n\n protected computeOuterRadius = (\n key: string,\n datum: Datum,\n states: StateValueType = 'normal',\n opt: any,\n superValue: number\n ): number => {\n const offset = (this.getAttribute('radiusOffset', datum, states, opt) as number) ?? 0;\n return superValue + offset;\n };\n\n protected computeCenter = (\n key: 'x' | 'y',\n datum: Datum,\n states: StateValueType = 'normal',\n opt: any,\n center: number\n ) => {\n const offset = polarToCartesian({\n angle: datum[ARC_MIDDLE_ANGLE],\n radius: this.getAttribute('centerOffset', datum, states, opt) as number\n });\n return center + offset[key];\n };\n}\n\nexport class ArcMark extends BaseArcMark implements IArcMark {\n static readonly type = MarkTypeEnum.arc;\n readonly type: MarkTypeEnum = ArcMark.type;\n}\n\nexport const registerArcMark = () => {\n registerArcGraphic();\n registerVGrammarArcAnimation();\n Factory.registerMark(ArcMark.type, ArcMark);\n};\n","import { mergeSpec } from '../../util';\nimport { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IBasePieSeriesSpec, IPieSeriesTheme } from './interface';\n\nexport class PieSeriesSpecTransformer<\n T extends IBasePieSeriesSpec = IBasePieSeriesSpec,\n K extends IPieSeriesTheme = IPieSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.pie);\n }\n\n /** 将 theme merge 到 spec 中 */\n protected _mergeThemeToSpec(spec: T, chartSpec: any): { spec: T; theme: K } {\n const theme = this._theme;\n let newSpec = spec;\n if (this._shouldMergeThemeToSpec()) {\n const specFromChart = this._getDefaultSpecFromChart(chartSpec);\n\n // this._originalSpec + specFromChart + this._theme = this._spec\n // 动态处理 label 样式,对于展示在内部的 label 默认使用 innerLabel 样式\n newSpec = mergeSpec({}, this._theme, specFromChart, spec) as any;\n if (newSpec.label.position === 'inside') {\n newSpec.label = mergeSpec({}, this._theme.innerLabel, newSpec.label);\n } else {\n newSpec.label = mergeSpec({}, this._theme.outerLabel, newSpec.label);\n }\n }\n\n return { spec: newSpec, theme };\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport { array, degreeToRadian, isValid } from '@visactor/vutils';\nimport { DataView } from '@visactor/vdataset';\nimport {\n AttributeLevel,\n ARC_START_ANGLE,\n ARC_END_ANGLE,\n ARC_RATIO,\n ARC_MIDDLE_ANGLE,\n ARC_RADIAN,\n ARC_QUADRANT,\n ARC_K,\n PREFIX,\n DEFAULT_LABEL_VISIBLE,\n POLAR_START_RADIAN,\n POLAR_END_RADIAN,\n DEFAULT_DATA_INDEX,\n ChartEvent,\n DEFAULT_DATA_KEY\n} from '../../constant';\nimport type { Maybe, IPoint, Datum, StateValueType } from '../../typings';\nimport { normalizeStartEndAngle, polarToCartesian } from '../../util/math';\nimport { isSpecValueWithScale } from '../../util/scale';\nimport { field } from '../../util/object';\nimport type { IModelLayoutOption } from '../../model/interface';\nimport { PolarSeries } from '../polar/polar';\nimport type { IMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type { IArcMark } from '../../mark/arc';\nimport type { ITextMark } from '../../mark/text';\nimport type { IPathMark } from '../../mark/path';\nimport type { IArcSeries, SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IPieOpt } from '../../data/transforms/pie';\n// eslint-disable-next-line no-duplicate-imports\nimport { pie } from '../../data/transforms/pie';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { registerPieAnimation, type IPieAnimationParams, type PieAppearPreset } from './animation/animation';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport { AnimationStateEnum } from '../../animation/interface';\nimport type { IArcLabelSpec, IBasePieSeriesSpec, IPieSeriesSpec, IPieSeriesTheme } from './interface';\nimport { SeriesData } from '../base/series-data';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { centerOffsetConfig } from './animation/centerOffset';\nimport { ArcMark, registerArcMark } from '../../mark/arc';\nimport { mergeSpec } from '../../util/spec/merge-spec';\nimport { pieSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { isNil } from '@visactor/vutils';\nimport { PieSeriesSpecTransformer } from './pie-transformer';\n\nexport class BasePieSeries extends PolarSeries implements IArcSeries {\n static readonly transformerConstructor = PieSeriesSpecTransformer as any;\n readonly transformerConstructor = PieSeriesSpecTransformer;\n\n protected _pieMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.pie;\n protected _pieMarkType: MarkTypeEnum = MarkTypeEnum.arc;\n\n static readonly mark: SeriesMarkMap = pieSeriesMark;\n\n protected _viewDataLabel!: SeriesData;\n\n // 饼图渲染不依赖于极坐标系轴,因此由 series 自己存储相关配置信息\n protected _center!: IPoint | null;\n public get center(): IPoint {\n return {\n x: this._spec?.centerX ?? this._region.getLayoutRect().width / 2,\n y: this._spec?.centerY ?? this._region.getLayoutRect().height / 2\n };\n }\n protected _centerOffset!: number;\n\n protected _cornerRadius!: number;\n\n protected _startAngle: number = POLAR_START_RADIAN;\n protected _endAngle: number = POLAR_END_RADIAN;\n protected _padAngle!: number;\n\n protected _pieMark: IArcMark | null = null;\n protected _labelMark: ITextMark | null = null;\n protected _labelLineMark: IPathMark | null = null;\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n // center\n this._markAttributeContext.getCenter = () => {\n return {\n x: () => this._center?.x ?? this._region.getLayoutRect().width / 2,\n y: () => this._center?.y ?? this._region.getLayoutRect().height / 2\n };\n };\n\n // angle scale\n this._markAttributeContext.startAngleScale = (datum: Datum) => this.startAngleScale(datum);\n this._markAttributeContext.endAngleScale = (datum: Datum) => this.endAngleScale(datum);\n }\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this._centerOffset = this._spec.centerOffset ?? 0;\n this._cornerRadius = this._spec.cornerRadius ?? 0;\n\n const normalized = normalizeStartEndAngle(\n isValid(this._spec.startAngle) ? degreeToRadian(this._spec.startAngle) : this._startAngle,\n isValid(this._spec.endAngle) ? degreeToRadian(this._spec.endAngle) : this._endAngle\n );\n this._startAngle = normalized.startAngle;\n this._endAngle = normalized.endAngle;\n this._padAngle = isValid(this._spec.padAngle) ? degreeToRadian(this._spec.padAngle) : 0;\n\n // 值信息给角度,angleField 是为了兼容小组件用法,因为 spec 改造前已经开放了\n this.setAngleField(this._spec.valueField || this._spec.angleField);\n if (this._spec.categoryField) {\n this.setSeriesField(this._spec.categoryField);\n }\n this._radiusField = [];\n\n this._specAngleField = this._angleField.slice();\n this._specRadiusField = [];\n }\n\n initData() {\n super.initData();\n\n const viewData = this.getViewData();\n if (!viewData) {\n return;\n }\n\n registerDataSetInstanceTransform(this._dataSet, 'pie', pie);\n\n viewData.transform(\n {\n type: 'pie',\n options: {\n angleField: this._angleField[0],\n startAngle: this._startAngle,\n endAngle: this._endAngle,\n minAngle: isValid(this._spec.minAngle) ? degreeToRadian(this._spec.minAngle) : 0,\n asStartAngle: ARC_START_ANGLE,\n asEndAngle: ARC_END_ANGLE,\n asRatio: ARC_RATIO,\n asMiddleAngle: ARC_MIDDLE_ANGLE,\n asRadian: ARC_RADIAN,\n asQuadrant: ARC_QUADRANT,\n asK: ARC_K\n } as IPieOpt\n },\n false\n );\n\n const viewDataLabel = new DataView(this._dataSet, { name: `${PREFIX}_series_${this.id}_viewDataLabel` });\n viewDataLabel.parse([this.getViewData()], {\n type: 'dataview'\n });\n\n this._viewDataLabel = new SeriesData(this._option, viewDataLabel);\n }\n\n initMark(): void {\n this._pieMark = this._createMark(\n {\n ...BasePieSeries.mark.pie,\n name: this._pieMarkName,\n type: this._pieMarkType\n },\n {\n morph: shouldMarkDoMorph(this._spec, this._pieMarkName),\n defaultMorphElementKey: this._seriesField,\n key: DEFAULT_DATA_KEY,\n groupKey: this._seriesField,\n skipBeforeLayouted: true,\n isSeriesMark: true,\n customShape: this._spec.pie?.customShape\n }\n ) as IArcMark;\n }\n\n private startAngleScale(datum: Datum) {\n return field(ARC_START_ANGLE)(datum);\n }\n\n private endAngleScale(datum: Datum) {\n return field(ARC_END_ANGLE)(datum);\n }\n\n initMarkStyle(): void {\n const pieMark = this._pieMark;\n if (pieMark) {\n this.setMarkStyle(\n pieMark,\n {\n x: () => this._center?.x ?? this._region.getLayoutRect().width / 2,\n y: () => this._center?.y ?? this._region.getLayoutRect().height / 2,\n fill: this.getColorAttribute(),\n outerRadius: isSpecValueWithScale(this._outerRadius)\n ? this._outerRadius\n : () => this.computeLayoutRadius() * this._outerRadius,\n innerRadius: isSpecValueWithScale(this._innerRadius)\n ? this._innerRadius\n : () => this.computeLayoutRadius() * this._innerRadius,\n cornerRadius: () => this.computeLayoutRadius() * this._cornerRadius,\n startAngle: datum => this.startAngleScale(datum),\n endAngle: datum => this.endAngleScale(datum),\n padAngle: this._padAngle,\n centerOffset: this._centerOffset\n },\n 'normal',\n AttributeLevel.Series\n );\n\n this._trigger.registerMark(pieMark);\n }\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._pieMark && this._tooltipHelper.activeTriggerSet.mark.add(this._pieMark);\n }\n\n initMarkStyleWithSpec(mark?: IMark, spec?: any, key?: string): void {\n super.initMarkStyleWithSpec(mark, spec, key);\n if (mark.name === this._pieMarkName) {\n // radius 配置需要额外处理比例值\n const pieSpec = this.getSpec()[mark.name];\n if (pieSpec) {\n for (const state in pieSpec.state || {}) {\n this.setMarkStyle(mark, this.generateRadiusStyle(pieSpec.state[state]), state, AttributeLevel.User_Mark);\n }\n }\n }\n }\n\n initLabelMarkStyle(textMark: ITextMark) {\n if (!textMark) {\n return;\n }\n this.setMarkStyle(textMark, {\n visible: field(DEFAULT_LABEL_VISIBLE).bind(this),\n text: (datum: Datum) => {\n return datum[this.getDimensionField()[0]];\n },\n fill: this._spec.label?.style?.fill || this.getColorAttribute(),\n angle: this._spec.label?.style?.angle,\n limit: this._spec.label?.style?.limit,\n z: this.dataToPositionZ.bind(this)\n });\n }\n\n afterInitMark(): void {\n super.afterInitMark();\n this._trigger.setStateKeys([this._seriesField as string, ...this._radiusField]);\n }\n\n initEvent(): void {\n super.initEvent();\n this._viewDataLabel.getDataView()?.target.addListener('change', this.viewDataLabelUpdate.bind(this));\n }\n\n // 饼图不支持分组\n initGroups() {\n return;\n }\n\n /**\n * @override\n * @param ctx\n */\n onLayoutEnd(ctx: IModelLayoutOption): void {\n this._viewDataLabel.getDataView().reRunAllTransform();\n this.onMarkPositionUpdate();\n super.onLayoutEnd(ctx);\n }\n\n getDimensionField(): string[] {\n return this._seriesField ? [this._seriesField] : [];\n }\n getMeasureField(): string[] {\n return this._specAngleField;\n }\n\n private viewDataLabelUpdate() {\n this.event.emit(ChartEvent.viewDataLabelUpdate, { model: this });\n this._viewDataLabel.updateData();\n }\n\n protected generateRadiusStyle(spec: any) {\n if (!spec) {\n return;\n }\n const style: any = {};\n spec.outerRadius && (style.outerRadius = () => this.computeLayoutRadius() * spec.outerRadius);\n spec.innerRadius && (style.innerRadius = () => this.computeLayoutRadius() * spec.innerRadius);\n spec.cornerRadius && (style.cornerRadius = () => this.computeLayoutRadius() * spec.cornerRadius);\n return style;\n }\n\n protected computeLayoutRadius() {\n const { width, height } = this._region.getLayoutRect();\n return Math.min(width / 2, height / 2);\n }\n\n computeCenter(datum: Datum): IPoint {\n return {\n x: this._pieMark.getAttribute('x', datum, 'normal') as number,\n y: this._pieMark.getAttribute('y', datum, 'normal') as number\n };\n }\n\n getRadius(state: StateValueType = 'normal'): number {\n const styleRadius =\n state === 'normal'\n ? this.getSpec()[this._pieMark?.name || 'pie']?.style?.outerRadius\n : this.getSpec()[this._pieMark?.name || 'pie']?.state?.[state]?.outerRadius;\n return styleRadius ?? this._outerRadius;\n }\n\n getInnerRadius(state: StateValueType = 'normal'): number {\n const styleRadius =\n state === 'normal'\n ? this.getSpec()[this._pieMark?.name || 'pie']?.style?.innerRadius\n : this.getSpec()[this._pieMark?.name || 'pie']?.state?.[state]?.innerRadius;\n return styleRadius ?? this._innerRadius;\n }\n\n computeRadius(r: number, k?: number): number {\n return this.computeLayoutRadius() * r * (isNil(k) ? 1 : k) + this._centerOffset;\n }\n\n computeDatumRadius(datum: Datum, state?: string): number {\n return this.computeLayoutRadius() * this.getRadius(state) + this._centerOffset;\n }\n\n _compareSpec(spec: T, prevSpec: T, ignoreCheckKeys?: { [key: string]: true }) {\n ignoreCheckKeys = ignoreCheckKeys ?? { data: true };\n ignoreCheckKeys.centerX = true;\n ignoreCheckKeys.centerX = true;\n ignoreCheckKeys.centerY = true;\n ignoreCheckKeys.centerOffset = true;\n ignoreCheckKeys.radius = true;\n ignoreCheckKeys.innerRadius = true;\n ignoreCheckKeys.cornerRadius = true;\n ignoreCheckKeys.startAngle = true;\n ignoreCheckKeys.endAngle = true;\n ignoreCheckKeys.padAngle = true;\n const { centerX, centerY, centerOffset, radius, innerRadius, cornerRadius, startAngle, endAngle, padAngle } =\n prevSpec;\n const result = super._compareSpec(spec, prevSpec, ignoreCheckKeys);\n spec = spec ?? ({} as T);\n if (\n spec.centerY !== centerY ||\n spec.centerX !== centerX ||\n spec.centerOffset !== centerOffset ||\n spec.radius !== radius ||\n spec.innerRadius !== innerRadius ||\n spec.cornerRadius !== cornerRadius ||\n spec.startAngle !== startAngle ||\n spec.endAngle !== endAngle ||\n spec.padAngle !== padAngle\n ) {\n result.reRender = true;\n result.change = true;\n }\n return result;\n }\n\n computeDatumInnerRadius(datum: Datum, state?: string): number {\n return this.computeLayoutRadius() * this.getInnerRadius(state) + this._centerOffset;\n }\n\n dataToPosition(datum: Datum): IPoint | null {\n const angle = datum[ARC_MIDDLE_ANGLE];\n if (isNil(angle)) {\n return null;\n }\n const radius = this.computeDatumRadius(datum);\n const center = this.computeCenter(datum);\n const delta = polarToCartesian({ angle, radius });\n return { x: center.x + delta.x, y: center.y + delta.y };\n }\n\n dataToCentralPosition = (datum: Datum): IPoint | null => {\n // 和 PieSeries.dataToPosition 实现不同,这里考虑了美观性,返回的位置是曲边梯形的中心\n const angle = datum[ARC_MIDDLE_ANGLE];\n if (isNil(angle)) {\n return null;\n }\n const radius = this.computeDatumRadius(datum);\n const innerRadius = this.computeDatumInnerRadius(datum);\n const center = this.computeCenter(datum);\n const delta = polarToCartesian({ angle, radius: (radius + innerRadius) / 2 });\n return { x: center.x + delta.x, y: center.y + delta.y };\n };\n\n initAnimation() {\n const animationParams: IPieAnimationParams = {\n growFrom: (datum, element, state) => {\n if (state === AnimationStateEnum.appear) {\n return this._startAngle;\n }\n if (state === AnimationStateEnum.disappear) {\n return this._endAngle;\n }\n\n const outState = [AnimationStateEnum.disappear, AnimationStateEnum.exit];\n const markElements = element.mark.elements;\n\n const data = datum;\n const dataIndex = data?.[DEFAULT_DATA_INDEX];\n\n // 当前 mark 在上个状态是否处于第一个\n if (markElements.find(e => e.data[0]?.[DEFAULT_DATA_INDEX] < dataIndex) === undefined) {\n return this._startAngle;\n }\n // 当前 mark 在上个状态是否处于最后一个\n if (markElements.find(e => e.data[0]?.[DEFAULT_DATA_INDEX] > dataIndex) === undefined) {\n return this._endAngle;\n }\n\n // 扇形不在边缘时,获取扇形生长点:获取相邻状态下相邻扇形的边缘\n const prevMarkElement = [...markElements].reverse().find(e => e.data[0]?.[DEFAULT_DATA_INDEX] < dataIndex);\n\n if (outState.includes(state)) {\n return prevMarkElement?.getNextGraphicAttributes()?.endAngle;\n }\n return prevMarkElement?.getGraphicAttribute('endAngle', true);\n }\n };\n const appearPreset = (this._spec.animationAppear as IStateAnimateSpec)?.preset;\n\n if (this._pieMark) {\n const pieAnimationConfig = animationConfig(\n Factory.getAnimationInKey('pie')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.pie, this._spec, this._markAttributeContext)\n );\n\n if (pieAnimationConfig.normal && (pieAnimationConfig.normal as IAnimationTypeConfig).type) {\n pieAnimationConfig.normal = centerOffsetConfig(\n this._pieMark,\n pieAnimationConfig.normal as IAnimationTypeConfig\n );\n }\n\n this._pieMark.setAnimationConfig(pieAnimationConfig);\n }\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getGroupFields(): string[] {\n // do nothing\n return [];\n }\n\n getStackGroupFields(): string[] {\n // do nothing\n return [];\n }\n\n getStackValueField(): string {\n // do nothing\n return '';\n }\n\n // make sure this function fast\n protected _noAnimationDataKey(datum: Datum, index: number) {\n return index;\n }\n\n getActiveMarks(): IMark[] {\n return [this._pieMark];\n }\n}\n\nexport class PieSeries extends BasePieSeries implements IArcSeries {\n static readonly type: string = SeriesTypeEnum.pie;\n type = SeriesTypeEnum.pie;\n}\n\nexport const registerPieSeries = () => {\n registerArcMark();\n registerPieAnimation();\n Factory.registerSeries(PieSeries.type, PieSeries);\n};\n","import type { IAnimationTimeline, IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { polarToCartesian } from '../../../util/math';\nimport { ARC_MIDDLE_ANGLE } from '../../../constant';\nimport type { IArcMark } from '../../../mark/arc';\nimport type { Datum } from '../../../typings';\nimport { isValidNumber } from '@visactor/vutils';\n\nexport type ICenterOffsetAnimationOptions = {\n distance?: number;\n};\n\nexport function centerOffsetConfig(mark: IArcMark, originalConfig: IAnimationTypeConfig): IAnimationTimeline {\n const offset = originalConfig.options?.distance ?? 10;\n const duration = isValidNumber(originalConfig.duration) ? originalConfig.duration / 2 : 1000;\n const easing = originalConfig.options.easing ?? 'cubicOut';\n return {\n oneByOne: originalConfig.oneByOne,\n loop: originalConfig.loop ?? false,\n timeSlices: [\n {\n duration,\n effects: {\n easing,\n channel: {\n x: {\n from: (datum: Datum) => mark.getAttribute('x', datum),\n to: (datum: Datum) => {\n const center = mark.getAttribute('x', datum) as number;\n const point = polarToCartesian({\n angle: datum[ARC_MIDDLE_ANGLE],\n radius: offset\n });\n return center + point.x;\n }\n },\n y: {\n from: (datum: Datum) => mark.getAttribute('y', datum),\n to: (datum: Datum) => {\n const center = mark.getAttribute('y', datum) as number;\n const point = polarToCartesian({\n angle: datum[ARC_MIDDLE_ANGLE],\n radius: offset\n });\n return center + point.y;\n }\n }\n }\n }\n },\n {\n duration,\n effects: {\n easing,\n channel: {\n x: {\n to: (datum: Datum) => mark.getAttribute('x', datum),\n from: (datum: Datum) => {\n const center = mark.getAttribute('x', datum) as number;\n const point = polarToCartesian({\n angle: datum[ARC_MIDDLE_ANGLE],\n radius: offset\n });\n return center + point.x;\n }\n },\n y: {\n to: (datum: Datum) => mark.getAttribute('y', datum),\n from: (datum: Datum) => {\n const center = mark.getAttribute('y', datum) as number;\n const point = polarToCartesian({\n angle: datum[ARC_MIDDLE_ANGLE],\n radius: offset\n });\n return center + point.y;\n }\n }\n }\n }\n }\n ]\n };\n}\n","import { array, isArray, isNil, isValid } from '@visactor/vutils';\nimport type { IDataZoomSpec, IIndicatorSpec } from '../../component';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { IPolarChartSpec } from './interface';\nimport { IFilterMode } from '../../component/data-zoom/constant';\nimport type { ISeriesSpec } from '../../typings';\n\nexport class PolarChartSpecTransformer extends BaseChartSpecTransformer {\n protected _isValidSeries(type: string): boolean {\n return this.seriesType ? type === this.seriesType : true;\n }\n\n protected getIndicatorSpec(spec: any): IIndicatorSpec[] {\n const indicatorSpec = array(spec.indicator) as IIndicatorSpec[];\n const limitRatio = spec.innerRadius ?? spec.series?.[0]?.innerRadius;\n if (isValid(limitRatio)) {\n indicatorSpec.forEach(indicator => {\n if (isNil(indicator.limitRatio)) {\n indicator.limitRatio = limitRatio;\n }\n });\n }\n return indicatorSpec;\n }\n\n protected _getDefaultSeriesSpec(spec: any): any {\n const series: any = {\n ...super._getDefaultSeriesSpec(spec),\n\n /**\n * 旧的radius写法, 仅做兼容\n * @deprecated use outerRadius instead\n */\n radius: spec.radius,\n outerRadius: spec.outerRadius,\n innerRadius: spec.innerRadius,\n\n startAngle: spec.startAngle,\n endAngle: spec.endAngle,\n sortDataByAxis: spec.sortDataByAxis\n };\n const seriesType = this.seriesType;\n if (seriesType) {\n series.type = seriesType;\n series[seriesType] = spec[seriesType];\n }\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n /** 处理极坐标系下的 datazoom */\n if (isArray(spec.dataZoom) && spec.dataZoom.length > 0) {\n spec.dataZoom.forEach((zoom: IDataZoomSpec) => {\n // 极坐标系下 datazoom 目前只支持数据过滤\n // 理想效果:角度轴不支持 axis, 径向轴均支持(通过 group.clip 自定义 clipPath 支持)\n if (zoom.filterMode === IFilterMode.axis) {\n zoom.filterMode = IFilterMode.filter;\n }\n });\n }\n /* 处理 series 配置 */\n const defaultSeriesSpec = this._getDefaultSeriesSpec(spec);\n if (!spec.series || spec.series.length === 0) {\n spec.series = [defaultSeriesSpec];\n } else {\n spec.series.forEach((s: ISeriesSpec) => {\n if (!this._isValidSeries(s.type)) {\n return;\n }\n Object.keys(defaultSeriesSpec).forEach(k => {\n if (!(k in s)) {\n s[k] = defaultSeriesSpec[k];\n }\n });\n });\n }\n\n /* 处理 indicator 配置 */\n if (isValid((spec as any).indicator)) {\n (spec as any).indicator = this.getIndicatorSpec(spec);\n }\n }\n}\n","import type { AdaptiveSpec } from '../../../typings';\nimport { PolarChartSpecTransformer } from '../../polar';\nimport type { IPieChartSpec } from '../interface';\n\nexport class BasePieChartSpecTransformer extends PolarChartSpecTransformer<\n AdaptiveSpec\n> {\n protected needAxes(): boolean {\n return false;\n }\n\n protected _getDefaultSeriesSpec(spec: any): any {\n return {\n ...super._getDefaultSeriesSpec(spec),\n\n // 兼容旧版写法\n categoryField: spec.categoryField || spec.seriesField,\n valueField: spec.valueField || spec.angleField,\n\n center: spec.center,\n centerOffset: spec.centerOffset,\n\n cornerRadius: spec.cornerRadius,\n\n padAngle: spec.padAngle,\n minAngle: spec.minAngle\n };\n }\n}\n","import type { AdaptiveSpec } from '../../../typings';\nimport { BaseChart } from '../../base';\nimport type { IPieChartSpec } from '../interface';\nimport { BasePieChartSpecTransformer } from './pie-transformer';\n\nexport class BasePieChart extends BaseChart> {\n static readonly transformerConstructor = BasePieChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = BasePieChartSpecTransformer;\n}\n","import { registerPieSeries } from '../../series/pie/pie';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport { BasePieChart } from './base/base';\nimport { Factory } from '../../core/factory';\nimport type { IPieChartSpec } from './interface';\nimport { BasePieChartSpecTransformer } from './base';\n\nexport class PieChart extends BasePieChart {\n static readonly type: string = ChartTypeEnum.pie;\n static readonly seriesType: string = SeriesTypeEnum.pie;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = BasePieChartSpecTransformer;\n readonly transformerConstructor = BasePieChartSpecTransformer;\n readonly type: string = ChartTypeEnum.pie;\n readonly seriesType: string = SeriesTypeEnum.pie;\n}\n\nexport const registerPieChart = () => {\n registerPieSeries();\n Factory.registerChart(PieChart.type, PieChart);\n};\n","import { Factory } from './../core/factory';\nimport type { IArc3dMarkSpec } from '../typings';\nimport { BaseArcMark } from './arc';\nimport type { IMarkRaw } from './interface';\nimport { MarkTypeEnum } from './interface/type';\nimport { registerArc3dGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarArcAnimation } from '../animation/config';\n\nexport type IArc3dMark = IMarkRaw;\n\nexport class Arc3dMark extends BaseArcMark implements IArc3dMark {\n static readonly type = MarkTypeEnum.arc3d;\n readonly type: MarkTypeEnum = Arc3dMark.type;\n protected _support3d?: boolean = true;\n}\n\nexport const registerArc3dMark = () => {\n registerVGrammarArcAnimation();\n registerArc3dGraphic();\n Factory.registerMark(Arc3dMark.type, Arc3dMark);\n};\n","import type { IPie3dSeriesSpec, IPie3dSeriesTheme } from '../interface';\nimport { SeriesMarkNameEnum } from '../../interface';\nimport { PieSeriesSpecTransformer } from '../pie-transformer';\n\nexport class Pie3dSeriesSpecTransformer<\n T extends IPie3dSeriesSpec = IPie3dSeriesSpec,\n K extends IPie3dSeriesTheme = IPie3dSeriesTheme\n> extends PieSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.pie3d);\n }\n}\n","import { AttributeLevel, ARC_MIDDLE_ANGLE } from '../../../constant';\nimport type { Datum } from '../../../typings';\nimport { MarkTypeEnum } from '../../../mark/interface/type';\nimport type { IArcSeries, SeriesMarkMap } from '../../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IPie3dSeriesSpec } from '../interface';\nimport { registerArc3dMark } from '../../../mark/arc-3d';\nimport { BasePieSeries } from '../pie';\nimport { pie3dSeriesMark } from '../constant';\nimport { radianToDegree } from '@visactor/vutils';\nimport { Factory } from '../../../core/factory';\nimport { registerPie3dAnimation } from '../animation/animation';\nimport { Pie3dSeriesSpecTransformer } from './pie-3d-transformer';\nimport type { ITextMark } from '../../../mark/text';\n\nexport class Pie3dSeries extends BasePieSeries implements IArcSeries {\n static readonly type: string = SeriesTypeEnum.pie3d;\n type = SeriesTypeEnum.pie3d;\n protected _pieMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.pie3d;\n protected _pieMarkType: MarkTypeEnum = MarkTypeEnum.arc3d;\n\n static readonly mark: SeriesMarkMap = pie3dSeriesMark;\n static readonly transformerConstructor = Pie3dSeriesSpecTransformer as any;\n readonly transformerConstructor = Pie3dSeriesSpecTransformer as any;\n\n protected _angle3d: number;\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this._angle3d = this._spec?.angle3d ?? -Math.PI / 3;\n }\n\n initMarkStyle(): void {\n super.initMarkStyle();\n const pieMark = this._pieMark;\n if (pieMark) {\n this.setMarkStyle(\n pieMark,\n {\n beta: () => this._angle3d\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initLabelMarkStyle(textMark: ITextMark): void {\n if (!textMark) {\n return;\n }\n super.initLabelMarkStyle(textMark);\n\n const params3d: {\n beta?: number;\n anchor3d?: (datum: Datum) => any;\n angle?: (datum: Datum) => any;\n } = {};\n textMark.setSupport3d(true);\n params3d.beta = this._angle3d;\n params3d.anchor3d = (datum: Datum) => {\n const anchor = [\n // TODO: label 布局依赖自身图元属性,这里无法获取到\n this._center?.x ?? this._region.getLayoutRect().width / 2,\n this._center?.y ?? this._region.getLayoutRect().height / 2\n ];\n return anchor;\n };\n params3d.angle = (datum: Datum) => {\n const angle = datum[ARC_MIDDLE_ANGLE];\n return this._spec.label?.position === 'inside' ? radianToDegree(angle) : 0;\n };\n this.setMarkStyle(textMark, { ...params3d, z: 100 }, undefined, AttributeLevel.Mark);\n }\n}\n\nexport const registerPie3dSeries = () => {\n registerPie3dAnimation();\n registerArc3dMark();\n Factory.registerSeries(Pie3dSeries.type, Pie3dSeries);\n};\n","import { registerPie3dSeries } from '../../../series/pie/3d/pie-3d';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesTypeEnum } from '../../../series/interface/type';\nimport { ChartTypeEnum } from '../../interface/type';\nimport { BasePieChart } from '../base/base';\nimport { Factory } from '../../../core/factory';\nimport type { IPie3dChartSpec } from '../interface';\nimport type { AdaptiveSpec, ISeriesSpec } from '../../../typings';\nimport { BasePieChartSpecTransformer } from '../base';\n\nexport class Pie3dChartSpecTransformer extends BasePieChartSpecTransformer<\n AdaptiveSpec\n> {\n transformSpec(spec: any): void {\n super.transformSpec(spec);\n spec.series.forEach((s: ISeriesSpec) => {\n if (s.type === 'pie3d') {\n (s as any).angle3d = spec.angle3d;\n }\n });\n }\n}\n\nexport class Pie3dChart extends BasePieChart> {\n static readonly type: string = ChartTypeEnum.pie3d;\n static readonly seriesType: string = SeriesTypeEnum.pie3d;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = Pie3dChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = Pie3dChartSpecTransformer;\n readonly type: string = ChartTypeEnum.pie3d;\n readonly seriesType: string = SeriesTypeEnum.pie3d;\n}\n\nexport const registerPie3dChart = () => {\n registerPie3dSeries();\n Factory.registerChart(Pie3dChart.type, Pie3dChart);\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport type { Datum } from '../../typings';\nimport { Factory } from '../../core/factory';\n\nexport interface IRoseAnimationParams {\n innerRadius: () => number;\n growField?: 'angle' | 'radius';\n}\n\nexport type RoseAppearPreset = 'growAngle' | 'growRadius' | 'fadeIn';\n\nexport const Appear_Grow = (params: IRoseAnimationParams): IAnimationTypeConfig => {\n const from = params.growField === 'angle' ? 0 : params.innerRadius;\n //TODO: 待 vgrammar 内置后替换\n return params.growField === 'angle'\n ? {\n type: params.growField === 'angle' ? 'growAngleIn' : 'growRadiusIn'\n }\n : {\n channel: {\n innerRadius: { from, to: (datum: Datum, element: any) => element.getGraphicAttribute('innerRadius') },\n outerRadius: { from, to: (datum: Datum, element: any) => element.getGraphicAttribute('outerRadius') }\n }\n };\n};\n\nexport const Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nexport const roseEnter = (params: IRoseAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.growField === 'angle' ? 'growAngleIn' : 'growRadiusIn'\n };\n};\n\nexport const roseExit = (params: IRoseAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.growField === 'angle' ? 'growAngleOut' : 'growRadiusOut'\n };\n};\n\nexport const roseDisappear = (params: IRoseAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.growField === 'angle' ? 'growAngleOut' : 'growRadiusOut'\n };\n};\n\nexport function rosePresetAnimation(\n params: IRoseAnimationParams,\n preset: RoseAppearPreset | boolean\n): IAnimationTypeConfig {\n if (preset === false) {\n return {};\n }\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n case 'growAngle':\n return Appear_Grow({\n ...params,\n growField: 'angle'\n });\n default:\n return Appear_Grow({\n ...params,\n growField: 'radius'\n });\n }\n}\n\nexport const registerRoseAnimation = () => {\n Factory.registerAnimation('rose', (params: IRoseAnimationParams, preset: RoseAppearPreset) => {\n return {\n appear: rosePresetAnimation(params, preset),\n enter: roseEnter(params),\n exit: roseExit(params),\n disappear: roseDisappear(params)\n };\n });\n};\n","import { array } from '@visactor/vutils';\nimport {\n STACK_FIELD_END,\n STACK_FIELD_END_PERCENT,\n STACK_FIELD_START,\n STACK_FIELD_START_PERCENT\n} from '../../../constant';\nimport { PolarSeries } from '../polar';\nimport type { IRoseLikeSeriesSpec } from './interface';\n\nexport abstract class RoseLikeSeries extends PolarSeries {\n getStackGroupFields(): string[] {\n return this._angleField;\n }\n\n getStackValueField() {\n return array(this._spec.valueField)[0] || array(this._spec.radiusField)[0];\n }\n\n getGroupFields() {\n return this._angleField;\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n // 兼容小组件写法,因为 spec 改造前已经开放了\n this.setAngleField(this._spec.categoryField || this._spec.angleField);\n this.setRadiusField(this._spec.valueField || this._spec.radiusField);\n this._specAngleField = this._angleField.slice();\n this._specRadiusField = this._radiusField.slice();\n this.setInnerRadiusField(this._spec.valueField || this._spec.radiusField);\n if (this._stack) {\n this.setValueFieldToStack();\n }\n if (this._percent) {\n this.setValueFieldToPercent();\n }\n }\n\n setValueFieldToStack(): void {\n this.setRadiusField(STACK_FIELD_END);\n this.setInnerRadiusField(STACK_FIELD_START);\n }\n\n setValueFieldToPercent(): void {\n this.setRadiusField(STACK_FIELD_END_PERCENT);\n this.setInnerRadiusField(STACK_FIELD_START_PERCENT);\n }\n\n getDimensionField(): string[] {\n return this._specAngleField;\n }\n getMeasureField(): string[] {\n return this._specRadiusField;\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n}\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IRoseSeriesSpec, IRoseSeriesTheme } from './interface';\n\nexport class RoseSeriesSpecTransformer<\n T extends IRoseSeriesSpec = IRoseSeriesSpec,\n K extends IRoseSeriesTheme = IRoseSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.rose);\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport type { IArcMark } from '../../mark/arc';\nimport type { Maybe, Datum } from '../../typings';\nimport { valueInScaleRange } from '../../util/scale';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { registerRoseAnimation, type IRoseAnimationParams, type RoseAppearPreset } from './animation';\nimport type { IRoseSeriesSpec, IRoseSeriesTheme } from './interface';\nimport { RoseLikeSeries } from '../polar/rose-like';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { ITextMark } from '../../mark/text';\nimport { ArcMark, registerArcMark } from '../../mark/arc';\nimport { roseSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport type { IMark } from '../../mark/interface';\nimport type { ILabelMark } from '../../mark/label';\nimport { RoseSeriesSpecTransformer } from './rose-transformer';\n\nexport const DefaultBandWidth = 0.5;\n\nexport class RoseSeries extends RoseLikeSeries {\n static readonly type: string = SeriesTypeEnum.rose;\n type = SeriesTypeEnum.rose;\n\n static readonly mark: SeriesMarkMap = roseSeriesMark;\n static readonly transformerConstructor = RoseSeriesSpecTransformer as any;\n readonly transformerConstructor = RoseSeriesSpecTransformer;\n\n protected _supportStack: boolean = true;\n\n private _roseMark: IArcMark | null = null;\n protected _labelMark: ITextMark | null = null;\n\n initMark(): void {\n this.initRoseMark();\n }\n\n initMarkStyle(): void {\n this.initRoseMarkStyle();\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n // center\n this._markAttributeContext.getCenter = () => {\n return {\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y\n };\n };\n // angle scale\n this._markAttributeContext.startAngleScale = (datum: Datum) => this.startAngleScale(datum);\n this._markAttributeContext.endAngleScale = (datum: Datum) => this.endAngleScale(datum);\n }\n\n private initRoseMark() {\n this._roseMark = this._createMark(RoseSeries.mark.rose, {\n morph: shouldMarkDoMorph(this._spec, RoseSeries.mark.rose.name),\n defaultMorphElementKey: this.getDimensionField()[0],\n groupKey: this._seriesField,\n isSeriesMark: true,\n customShape: this._spec.rose?.customShape\n }) as IArcMark;\n }\n\n private getRoseAngle() {\n const angleBandWidth =\n this.angleAxisHelper.getBandwidth?.(this._groups ? this._groups.fields.length - 1 : 0) ?? DefaultBandWidth;\n return angleBandWidth;\n }\n\n private startAngleScale(datum: Datum) {\n return (\n this.angleAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this.getGroupFields())) -\n this.angleAxisHelper.getBandwidth(this.getGroupFields().length - 1) * 0.5\n );\n }\n\n private endAngleScale(datum: Datum) {\n return (\n this.angleAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this.getGroupFields())) +\n this.getRoseAngle() -\n this.angleAxisHelper.getBandwidth(this.getGroupFields().length - 1) * 0.5\n );\n }\n\n private initRoseMarkStyle() {\n const roseMark = this._roseMark;\n if (roseMark) {\n this.setMarkStyle(roseMark, {\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y,\n startAngle: (datum: Datum) => this.startAngleScale(datum),\n endAngle: (datum: Datum) => this.endAngleScale(datum),\n fill: this.getColorAttribute(),\n outerRadius: (datum: Datum) =>\n valueInScaleRange(\n this.radiusAxisHelper.dataToPosition([datum[this._radiusField[0]]]),\n this.radiusAxisHelper.getScale(0)\n ),\n innerRadius: (datum: Datum) => {\n if (!this._stack) {\n return 0;\n }\n const stackStart = valueInScaleRange(\n this.radiusAxisHelper.dataToPosition([datum[this._innerRadiusField[0]]]),\n this.radiusAxisHelper.getScale(0)\n );\n return stackStart <= Number.MIN_VALUE\n ? this._computeLayoutRadius() * (this._spec.innerRadius ?? 0)\n : stackStart;\n }\n });\n this._trigger.registerMark(roseMark);\n }\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._roseMark && this._tooltipHelper.activeTriggerSet.mark.add(this._roseMark);\n }\n\n initLabelMarkStyle(textMark: ILabelMark) {\n if (!textMark) {\n return;\n }\n this.setMarkStyle(textMark, {\n visible: this._spec?.label?.visible,\n text: (datum: Datum) => {\n return datum[this.getDimensionField()[0]];\n },\n fill: this._spec.label?.style?.fill || this.getColorAttribute(),\n angle: this._spec.label?.style?.angle,\n limit: this._spec.label?.style?.limit,\n z: 0\n });\n }\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n\n if (this._roseMark) {\n const animationParams: IRoseAnimationParams = {\n innerRadius: () => this._computeLayoutRadius() * (this._spec.innerRadius ?? 0)\n };\n this._roseMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('rose')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.rose, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getActiveMarks(): IMark[] {\n return [this._roseMark];\n }\n}\n\nexport const registerRoseSeries = () => {\n Factory.registerSeries(RoseSeries.type, RoseSeries);\n registerArcMark();\n registerRoseAnimation();\n};\n","import type { IPolarAxisSpec } from '../../../component';\nimport type { IPolarChartSpec } from '../interface';\nimport { PolarChartSpecTransformer } from '../polar-transformer';\n\nexport class RoseLikeChartSpecTransformer extends PolarChartSpecTransformer {\n protected needAxes(): boolean {\n return true;\n }\n\n protected _getDefaultSeriesSpec(spec: any): any {\n const series: any = {\n ...super._getDefaultSeriesSpec(spec),\n\n // 兼容旧版写法\n categoryField: spec.categoryField || spec.angleField,\n valueField: spec.valueField || spec.radiusField\n };\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n\n // set default config for axis\n if (this.needAxes()) {\n if (!spec.axes) {\n spec.axes = [];\n }\n const haxAxes = { radius: false, angle: false };\n (spec.axes ?? []).forEach((axis: IPolarAxisSpec) => {\n const { orient } = axis;\n if (orient === 'radius') {\n haxAxes.radius = true;\n }\n if (orient === 'angle') {\n haxAxes.angle = true;\n }\n });\n if (!haxAxes.angle) {\n spec.axes.push({\n orient: 'angle'\n });\n }\n if (!haxAxes.radius) {\n spec.axes.push({\n orient: 'radius'\n });\n }\n }\n }\n}\n","import { array, isNil } from '@visactor/vutils';\nimport type { IPolarAxisSpec, IPolarBandAxisSpec } from '../../component';\nimport { POLAR_DEFAULT_RADIUS } from '../../constant';\nimport { RoseLikeChartSpecTransformer } from '../polar';\nimport type { IRoseChartSpec } from './interface';\nimport { mergeSpec } from '../../util';\n\nexport class RoseChartSpecTransformer<\n T extends IRoseChartSpec = IRoseChartSpec\n> extends RoseLikeChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n return {\n ...super._getDefaultSeriesSpec(spec),\n radius: spec.radius ?? POLAR_DEFAULT_RADIUS,\n outerRadius: spec.outerRadius ?? POLAR_DEFAULT_RADIUS,\n innerRadius: spec.innerRadius ?? 0,\n seriesField: spec.seriesField,\n stack: spec.stack,\n percent: spec.percent\n // startAngle: degreeToRadian(spec.startAngle || 0),\n };\n }\n\n transformSpec(spec: T) {\n super.transformSpec(spec);\n //默认不显示轴\n (spec.axes ?? []).forEach((axis: IPolarAxisSpec) => {\n ['domainLine', 'grid', 'label', 'tick'].forEach(configName => {\n if (!axis[configName]) {\n axis[configName] = { visible: false };\n }\n });\n if (axis.orient === 'angle' && isNil((axis as IPolarBandAxisSpec).bandPosition)) {\n // 玫瑰图的中心点应该是带宽的中心,保证第一个扇形是从坐标系的 startAngle 开始的\n (axis as IPolarBandAxisSpec).bandPosition = 0.5;\n }\n });\n\n // set default config for crosshair\n spec.crosshair = array(spec.crosshair || {}).map(crosshairCfg => {\n return mergeSpec(\n {\n categoryField: {\n visible: true,\n line: {\n visible: true,\n type: 'rect'\n }\n }\n },\n crosshairCfg\n );\n });\n }\n}\n","import { registerRoseSeries } from '../../series/rose/rose';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport { Factory } from '../../core/factory';\nimport type { IRoseChartSpec } from './interface';\nimport { RoseChartSpecTransformer } from './rose-transformer';\nimport { BaseChart } from '../base';\n\nexport class RoseChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.rose;\n static readonly seriesType: string = SeriesTypeEnum.rose;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = RoseChartSpecTransformer;\n readonly transformerConstructor = RoseChartSpecTransformer;\n readonly type: string = ChartTypeEnum.rose;\n readonly seriesType: string = SeriesTypeEnum.rose;\n protected _canStack: boolean = true;\n}\n\nexport const registerRoseChart = () => {\n registerRoseSeries();\n Factory.registerChart(RoseChart.type, RoseChart);\n};\n","/* eslint-disable no-duplicate-imports */\nimport type { EasingType } from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\nimport { ACustomAnimate, TagPointsUpdate } from '@visactor/vrender-core';\nimport { Point, isFunction, isValidNumber } from '@visactor/vutils';\nimport type { IPolarAxisHelper } from '../../component/axis';\n\nexport class PolarPointUpdate extends ACustomAnimate<{ x: number; y: number }> {\n declare valid: boolean;\n\n private _fromAngle: number;\n private _fromRadius: number;\n\n private _toAngle: number;\n private _toRadius: number;\n\n private _pointToCoord: IPolarAxisHelper['pointToCoord'];\n private _coordToPoint: IPolarAxisHelper['coordToPoint'];\n\n constructor(\n from: { x: number; y: number },\n to: { x: number; y: number },\n duration: number,\n easing: EasingType,\n params: {\n pointToCoord: IPolarAxisHelper['pointToCoord'];\n coordToPoint: IPolarAxisHelper['coordToPoint'];\n }\n ) {\n super(from, to, duration, easing, params);\n\n const pointToCoord = this.params.pointToCoord as IPolarAxisHelper['pointToCoord'];\n const coordToPoint = this.params.coordToPoint as IPolarAxisHelper['coordToPoint'];\n\n if (!isFunction(pointToCoord) || !isFunction(coordToPoint)) {\n this.valid = false;\n }\n this._pointToCoord = pointToCoord;\n this._coordToPoint = coordToPoint;\n }\n\n getEndProps(): Record {\n if (this.valid === false) {\n return {};\n }\n\n return this._coordToPoint({ angle: this._toAngle, radius: this._toRadius });\n }\n\n onBind(): void {\n const { angle: fromAngle, radius: fromRadius } = this._pointToCoord(this.from);\n if (!isValidNumber(fromAngle * fromRadius)) {\n this.valid = false;\n }\n this._fromAngle = fromAngle;\n this._fromRadius = fromRadius;\n\n const { angle: toAngle, radius: toRadius } = this._pointToCoord(this.to);\n if (!isValidNumber(toAngle * toRadius)) {\n this.valid = false;\n }\n this._toAngle = toAngle;\n this._toRadius = toRadius;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.valid === false) {\n return;\n }\n if (end) {\n const { x, y } = this.getEndProps();\n out.x = x;\n out.y = y;\n } else {\n const { x, y } = this._coordToPoint({\n angle: this._fromAngle + (this._toAngle - this._fromAngle) * ratio,\n radius: this._fromRadius + (this._toRadius - this._fromRadius) * ratio\n });\n out.x = x;\n out.y = y;\n }\n }\n}\n\n// @ts-ignore\n// FIXME: some private attribute should be changed to protected for better inheritance\nexport class PolarTagPointsUpdate extends TagPointsUpdate {\n private declare points: IPointLike[];\n private declare interpolatePoints: [IPointLike, IPointLike][];\n\n private _pointToCoord: IPolarAxisHelper['pointToCoord'];\n private _coordToPoint: IPolarAxisHelper['coordToPoint'];\n\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params?: {\n newPointAnimateType?: 'grow' | 'appear';\n pointToCoord: IPolarAxisHelper['pointToCoord'];\n coordToPoint: IPolarAxisHelper['coordToPoint'];\n }\n ) {\n super(from, to, duration, easing, params);\n const pointToCoord = this.params.pointToCoord as IPolarAxisHelper['pointToCoord'];\n const coordToPoint = this.params.coordToPoint as IPolarAxisHelper['coordToPoint'];\n this._pointToCoord = pointToCoord;\n this._coordToPoint = coordToPoint;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n // if not create new points, multi points animation might not work well.\n this.points = this.points.map((point, index) => {\n const newPoint = this.polarPointInterpolation(\n this.interpolatePoints[index][0],\n this.interpolatePoints[index][1],\n ratio\n );\n\n newPoint.context = point.context;\n return newPoint;\n });\n out.points = this.points;\n }\n\n private polarPointInterpolation(pointA: IPointLike, pointB: IPointLike, ratio: number): IPointLike {\n const polarPointA0 = this._pointToCoord(pointA);\n const polarPointA1 = this._pointToCoord({ x: pointA.x1, y: pointA.y1 });\n\n const polarPointB0 = this._pointToCoord(pointB);\n const polarPointB1 = this._pointToCoord({ x: pointB.x1, y: pointB.y1 });\n\n const angle0 = polarPointA0.angle + (polarPointB0.angle - polarPointA0.angle) * ratio;\n const radius0 = polarPointA0.radius + (polarPointB0.radius - polarPointA0.radius) * ratio;\n\n const angle1 = polarPointA1.angle + (polarPointB1.angle - polarPointA1.angle) * ratio;\n const radius1 = polarPointA1.radius + (polarPointB1.radius - polarPointA1.radius) * ratio;\n\n const { x, y } = this._coordToPoint({ angle: angle0, radius: radius0 });\n const { x: x1, y: y1 } = this._coordToPoint({ angle: angle1, radius: radius1 });\n\n const point = new Point(x as number, y as number, x1, y1);\n point.defined = pointB.defined;\n return point;\n }\n}\n","import type { Datum, IAnimationTypeConfig, IElement, MarkAnimationSpec } from '@visactor/vgrammar-core';\nimport type { IPoint, Maybe } from '../../typings';\nimport { ClipAngleAnimate } from '@visactor/vrender-core';\nimport type { IPolarAxisHelper } from '../../component/axis';\nimport { Factory } from '../../core/factory';\nimport { PolarPointUpdate, PolarTagPointsUpdate } from '../polar/animation';\nimport { DEFAULT_ANIMATION_CONFIG } from '../../animation/config';\n\nexport interface IRadarAnimationParams {\n center: () => Maybe;\n radius: () => number;\n startAngle: number;\n pointToCoord: IPolarAxisHelper['pointToCoord'];\n coordToPoint: IPolarAxisHelper['coordToPoint'];\n}\n\nexport type RadarAppearPreset = 'grow' | 'fadeIn' | 'clipIn';\n\nexport const radarFadeAnimation = (animationType: 'in' | 'out') => ({\n type: animationType === 'in' ? 'fadeIn' : 'fadeOut'\n});\n\nexport const radarGrowAnimation = (params: IRadarAnimationParams, animationType: 'in' | 'out') => ({\n type: animationType === 'in' ? 'growPointsIn' : 'growPointsOut',\n options: () => ({\n center: params.center()\n })\n});\n\nexport function radarPresetAnimation(\n params: IRadarAnimationParams,\n preset: RadarAppearPreset,\n animationType: 'in' | 'out'\n) {\n switch (preset) {\n case 'fadeIn':\n return radarFadeAnimation(animationType);\n case 'clipIn':\n case 'grow':\n default:\n return radarGrowAnimation(params, animationType);\n }\n}\n\nexport const radarSymbolMoveAnimation = (params: IRadarAnimationParams, animationType: 'in' | 'out') => {\n const xFrom = () => params.center()?.x;\n const xTo = (datum: Datum, element: IElement) => element.getGraphicAttribute('x');\n const yFrom = () => params.center()?.y;\n const yTo = (datum: Datum, element: IElement) => element.getGraphicAttribute('y');\n if (animationType === 'in') {\n return {\n channel: {\n x: { from: xFrom, to: xTo },\n y: { from: yFrom, to: yTo }\n }\n };\n }\n return {\n channel: {\n x: { from: xTo, to: xFrom },\n y: { from: yTo, to: yFrom }\n }\n };\n};\n\nexport function radarSymbolPresetAnimation(\n params: IRadarAnimationParams,\n preset: RadarAppearPreset,\n animationType: 'in' | 'out'\n) {\n switch (preset) {\n case 'fadeIn':\n return radarFadeAnimation(animationType);\n case 'clipIn':\n case 'grow':\n default:\n return radarSymbolMoveAnimation(params, animationType);\n }\n}\n\nexport const radarGroupClipAnimation = (\n params: IRadarAnimationParams,\n animationType: 'in' | 'out'\n): IAnimationTypeConfig => {\n return {\n custom: ClipAngleAnimate,\n customParameters: (datum: any, element: IElement) => {\n return {\n group: element.getGraphicItem(),\n startAngle: params.startAngle ?? Math.PI / 2,\n orient: 'clockwise',\n center: params.center(),\n radius: params.radius(),\n animationType\n };\n }\n };\n};\n\nexport const registerRadarAnimation = () => {\n Factory.registerAnimation('radar', (params: IRadarAnimationParams, preset: RadarAppearPreset) => {\n return {\n appear: preset === 'clipIn' ? undefined : radarPresetAnimation(params, preset, 'in'),\n enter: radarPresetAnimation(params, preset, 'in'),\n exit: radarPresetAnimation(params, preset, 'out'),\n disappear: preset === 'clipIn' ? undefined : radarPresetAnimation(params, preset, 'out'),\n update: [\n {\n options: { excludeChannels: ['points', 'defined'] }\n },\n {\n channel: ['points'],\n custom: PolarTagPointsUpdate,\n customParameters: params,\n duration: DEFAULT_ANIMATION_CONFIG.update.duration,\n easing: DEFAULT_ANIMATION_CONFIG.update.easing\n }\n ]\n } as MarkAnimationSpec;\n });\n Factory.registerAnimation(\n 'radarSymbol',\n (params: IRadarAnimationParams, preset: RadarAppearPreset) =>\n ({\n appear: preset === 'clipIn' ? undefined : radarSymbolPresetAnimation(params, preset, 'in'),\n enter: { type: 'scaleIn' },\n exit: { type: 'scaleOut' },\n disappear: preset === 'clipIn' ? undefined : radarSymbolPresetAnimation(params, preset, 'out'),\n update: [\n {\n options: { excludeChannels: ['x', 'y'] }\n },\n {\n channel: ['x', 'y'],\n custom: PolarPointUpdate,\n customParameters: params,\n duration: DEFAULT_ANIMATION_CONFIG.update.duration,\n easing: DEFAULT_ANIMATION_CONFIG.update.easing\n }\n ]\n } as MarkAnimationSpec)\n );\n Factory.registerAnimation('radarGroup', (params: IRadarAnimationParams, preset: RadarAppearPreset) => {\n return {\n appear: radarGroupClipAnimation(params, 'in'),\n disappear: radarGroupClipAnimation(params, 'out')\n };\n });\n};\n","/* eslint-disable no-duplicate-imports */\nimport { LineLikeSeriesMixin } from '../mixin/line-mixin';\nimport type { ILineMark } from '../../mark/line';\nimport type { IMark, IMarkProgressiveConfig } from '../../mark/interface';\nimport { AttributeLevel, ChartEvent, POLAR_START_RADIAN } from '../../constant';\nimport { DEFAULT_LINEAR_INTERPOLATE } from '../../typings/interpolate';\nimport type { Datum, IPoint, IPolarPoint, Maybe } from '../../typings';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { degreeToRadian, isArray, mixin, isValid } from '@visactor/vutils';\nimport type { IRadarSeriesSpec, IRadarSeriesTheme } from './interface';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { registerRadarAnimation, type IRadarAnimationParams, type RadarAppearPreset } from './animation';\nimport { RoseLikeSeries } from '../polar/rose-like';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { IAreaMark } from '../../mark/area';\nimport { AreaMark, registerAreaMark } from '../../mark/area';\nimport { LineMark, registerLineMark } from '../../mark/line';\nimport { SymbolMark, registerSymbolMark } from '../../mark/symbol';\nimport { radarSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { registerMarkOverlapTransform } from '@visactor/vgrammar-core';\nimport { LineLikeSeriesSpecTransformer } from '../mixin/line-mixin-transformer';\n\nexport interface RadarSeries\n extends Pick<\n LineLikeSeriesMixin,\n | 'initLineMark'\n | 'initSymbolMark'\n | 'initLabelMarkStyle'\n | 'initLineMarkStyle'\n | 'initSymbolMarkStyle'\n | 'encodeDefined'\n | '_lineMark'\n | '_symbolMark'\n | 'addOverlapCompile'\n >,\n RoseLikeSeries {}\n\nexport class RadarSeries extends RoseLikeSeries {\n static readonly type: string = SeriesTypeEnum.radar;\n type = SeriesTypeEnum.radar;\n\n static readonly mark: SeriesMarkMap = radarSeriesMark;\n static readonly transformerConstructor = LineLikeSeriesSpecTransformer as any;\n readonly transformerConstructor = LineLikeSeriesSpecTransformer;\n\n private _areaMark: ILineMark;\n protected _sortDataByAxis: boolean = false;\n\n initGroups() {\n // do nothing\n }\n\n compile(): void {\n super.compile();\n this.addOverlapCompile();\n }\n\n initMark(): void {\n const progressive = {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n };\n\n const isAreaVisible = this._spec.area?.visible !== false && this._spec.area?.style?.visible !== false;\n const seriesMark = this._spec.seriesMark ?? 'area';\n this.initAreaMark(progressive, isAreaVisible && seriesMark === 'area');\n this.initLineMark(progressive, seriesMark === 'line' || (seriesMark === 'area' && !isAreaVisible));\n this.initSymbolMark(progressive, seriesMark === 'point');\n }\n\n initMarkStyle(): void {\n this.initAreaMarkStyle();\n this.initLineMarkStyle();\n this.initSymbolMarkStyle();\n }\n\n initAreaMark(progressive: IMarkProgressiveConfig, isSeriesMark: boolean) {\n this._areaMark = this._createMark(RadarSeries.mark.area, {\n progressive,\n isSeriesMark,\n customShape: this._spec.area?.customShape\n }) as IAreaMark;\n }\n\n initAreaMarkStyle() {\n const areaMark = this._areaMark;\n if (areaMark) {\n this.setMarkStyle(\n areaMark,\n {\n x: this.dataToPositionX.bind(this),\n y: this.dataToPositionY.bind(this),\n x1: (datum: Datum) => {\n if (!datum || !this.angleAxisHelper || !this.radiusAxisHelper) {\n return Number.NaN;\n }\n return this.valueToPosition(\n this.getDatumPositionValues(datum, this._angleField),\n this._stack ? this.getDatumPositionValues(datum, this._innerRadiusField) : this.radiusScale.domain()[0]\n ).x;\n },\n y1: (datum: Datum) => {\n if (!datum || !this.angleAxisHelper || !this.radiusAxisHelper) {\n return Number.NaN;\n }\n\n const value = this.valueToPosition(\n this.getDatumPositionValues(datum, this._angleField),\n this._stack ? this.getDatumPositionValues(datum, this._innerRadiusField) : this.radiusScale.domain()[0]\n ).y;\n return value;\n },\n fill: this.getColorAttribute(),\n curveType: DEFAULT_LINEAR_INTERPOLATE,\n closePath: true\n },\n 'normal',\n AttributeLevel.Series\n );\n\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(\n areaMark,\n {\n defined: this._getInvalidDefined,\n connectedType: this._getInvalidConnectType()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n this.event.on(ChartEvent.viewDataStatisticsUpdate, { filter: param => param.model === this }, () => {\n this.encodeDefined(areaMark, 'defined');\n });\n this._trigger.registerMark(areaMark);\n }\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._lineMark && this._tooltipHelper.activeTriggerSet.dimension.add(this._lineMark);\n this._symbolMark && this._tooltipHelper.activeTriggerSet.mark.add(this._symbolMark);\n this._areaMark && this._tooltipHelper.activeTriggerSet.dimension.add(this._areaMark);\n }\n\n initAnimation() {\n const animationParams: IRadarAnimationParams = {\n center: () => this.angleAxisHelper?.center(),\n radius: () => {\n const rect = this.getLayoutRect();\n return Math.min(rect.width, rect.height);\n },\n startAngle: isValid(this._spec.startAngle) ? degreeToRadian(this._spec.startAngle) : POLAR_START_RADIAN,\n pointToCoord: (point: IPoint) => this.angleAxisHelper?.pointToCoord(point),\n coordToPoint: (coord: IPolarPoint) => this.angleAxisHelper.coordToPoint(coord)\n };\n const appearPreset = ((this._spec?.animationAppear as IStateAnimateSpec)?.preset ??\n 'clipIn') as RadarAppearPreset;\n\n if (appearPreset === 'clipIn') {\n if (this._rootMark) {\n this._rootMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('radarGroup')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.group, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n\n // TODO: animationType\n const markAnimationMap: [IMark, string][] = [\n [this._areaMark, 'radar'],\n [this._lineMark, 'radar'],\n [this._symbolMark, 'radarSymbol']\n ];\n\n // 为 mark 添加动画\n markAnimationMap.forEach(([mark, animation]) => {\n if (isValid(mark)) {\n const getAnimation = Factory.getAnimationInKey(animation);\n mark.setAnimationConfig(\n animationConfig(\n getAnimation?.(animationParams, appearPreset),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n }\n });\n }\n\n getDefaultShapeType() {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._areaMark, this._symbolMark, this._lineMark];\n }\n\n getSeriesStyle(datum: Datum) {\n return (attribute: string) => {\n let result = this._seriesMark?.getAttribute(attribute as any, datum) ?? undefined;\n if (attribute === 'fill' && !result) {\n attribute = 'stroke';\n result = this._seriesMark?.getAttribute(attribute, datum) ?? undefined;\n }\n if (attribute === 'stroke' && isArray(result)) {\n return result[0];\n }\n return result;\n };\n }\n}\n\nmixin(RadarSeries, LineLikeSeriesMixin);\n\nexport const registerRadarSeries = () => {\n registerMarkOverlapTransform();\n registerAreaMark();\n registerLineMark();\n registerSymbolMark();\n registerRadarAnimation();\n Factory.registerSeries(RadarSeries.type, RadarSeries);\n};\n","import { array, mergeSpec } from '../../util';\nimport { RoseLikeChartSpecTransformer } from '../polar';\nimport type { IRoseChartSpec } from '../rose';\n\nexport class RadarChartSpecTransformer<\n T extends IRoseChartSpec = IRoseChartSpec\n> extends RoseLikeChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: any): any {\n return {\n ...super._getDefaultSeriesSpec(spec),\n seriesField: spec.seriesField,\n line: spec.line,\n point: spec.point,\n stack: spec.stack,\n percent: spec.percent,\n area: mergeSpec(\n {\n visible: false\n },\n spec.area\n ),\n seriesMark: spec.seriesMark ?? 'area',\n activePoint: spec.activePoint,\n pointDis: spec.pointDis,\n pointDisMul: spec.pointDisMul,\n markOverlap: spec.markOverlap\n };\n }\n\n transformSpec(spec: T) {\n super.transformSpec(spec);\n //默认不显示轴的domainLine和Tick\n (spec.axes ?? []).forEach((axis: any) => {\n if (axis.orient === 'radius') {\n ['domainLine', 'label', 'tick'].forEach(configName => {\n if (!axis[configName]) {\n axis[configName] = { visible: false };\n }\n });\n if (!axis.grid) {\n axis.grid = { visible: true, smooth: true };\n }\n }\n });\n\n // set default config for crosshair\n spec.crosshair = array(spec.crosshair || {}).map(crosshairCfg => {\n return mergeSpec(\n {\n categoryField: {\n visible: true,\n line: {\n visible: true,\n type: 'line'\n }\n }\n },\n crosshairCfg\n );\n });\n }\n}\n","import { registerRadarSeries } from '../../series/radar/radar';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport { Factory } from '../../core/factory';\nimport type { IRoseChartSpec } from '../rose';\nimport { RadarChartSpecTransformer } from './radar-transformer';\nimport { BaseChart } from '../base';\n\nexport class RadarChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.radar;\n static readonly seriesType: string = SeriesTypeEnum.radar;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = RadarChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = RadarChartSpecTransformer;\n readonly type: string = ChartTypeEnum.radar;\n readonly seriesType: string = SeriesTypeEnum.radar;\n protected _canStack: boolean = true;\n}\n\nexport const registerRadarChart = () => {\n registerRadarSeries();\n Factory.registerChart(RadarChart.type, RadarChart);\n};\n","import type { AdaptiveSpec, ISeriesSpec } from '../../typings';\nimport { get, mergeSpec } from '../../util';\nimport { BaseChartSpecTransformer } from '../base';\nimport { getTrimPaddingConfig } from '../util';\nimport type { ICommonChartSpec } from './interface';\n\nexport class CommonChartSpecTransformer extends BaseChartSpecTransformer<\n AdaptiveSpec\n> {\n protected _getDefaultSeriesSpec(spec: AdaptiveSpec) {\n const defaultSpec = super._getDefaultSeriesSpec(spec);\n // 组合图系列的默认配置由系列自身配置 data/dataIndex/dataId 决定,无需默认配置\n delete defaultSpec.data;\n return defaultSpec;\n }\n\n transformSpec(spec: AdaptiveSpec): void {\n super.transformSpec(spec);\n if (spec.series && spec.series.length) {\n const defaultSeriesSpec = this._getDefaultSeriesSpec(spec);\n spec.series.forEach((s: ISeriesSpec) => {\n if (!this._isValidSeries(s.type)) {\n return;\n }\n Object.keys(defaultSeriesSpec).forEach(k => {\n if (!(k in s)) {\n s[k] = defaultSeriesSpec[k];\n }\n });\n });\n }\n if (spec.axes && spec.axes.length) {\n spec.axes.forEach((axis: any) => {\n if (get(axis, 'trimPadding')) {\n mergeSpec(axis, getTrimPaddingConfig(this.type, spec));\n }\n });\n }\n }\n}\n","import { BaseChart } from '../base/base-chart';\nimport { ChartTypeEnum } from '../interface/type';\nimport { Factory } from '../../core/factory';\nimport type { ICommonChartSpec } from './interface';\nimport type { AdaptiveSpec } from '../../typings';\nimport { CommonChartSpecTransformer } from './common-transformer';\n\nexport class CommonChart extends BaseChart> {\n static readonly type: string = ChartTypeEnum.common;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = CommonChartSpecTransformer;\n readonly transformerConstructor = CommonChartSpecTransformer;\n readonly type: string = ChartTypeEnum.common;\n protected _canStack: boolean = true;\n}\n\nexport const registerCommonChart = () => {\n Factory.registerChart(CommonChart.type, CommonChart);\n};\n","/* Adapted from d3-time-format by Mike Bostock\n * https://github.com/d3/d3-time-format\n * Licensed under the ISC\n\n * url: https://github.com/d3/d3-time-format/blob/d6feb945baa4b7a45898a9ca926ebca044e20657/src/locale.js\n * License: https://github.com/d3/d3-time-format/blob/main/LICENSE\n * @license\n */\n\nimport type { StringOrNumber } from '../../../../typings';\n\ninterface dateInfo {\n y?: number;\n m?: number;\n d?: number;\n w?: number;\n p?: number;\n H?: number;\n M?: number;\n S?: number;\n L?: number;\n}\n\nexport class TimeUtil {\n private locale_shortWeekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n private locale_periods = ['AM', 'PM'];\n private locale_weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n private locale_shortMonths = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n private numberRe = /^\\s*\\d+/; // note: ignores next directive\n private pads = { '-': '', _: ' ', '0': '0' };\n\n // const percentRe = /^%/;\n private requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\n private periodRe: RegExp;\n private periodLookup: Map;\n private weekdayRe: RegExp;\n private weekdayLookup: Map;\n private shortWeekdayRe: RegExp;\n private shortWeekdayLookup: Map;\n private monthRe: RegExp;\n private monthLookup: Map;\n private shortMonthRe: RegExp;\n private shortMonthLookup: Map;\n\n //#region singleton\n private static instance: TimeUtil;\n static getInstance(): TimeUtil {\n if (!TimeUtil.instance) {\n TimeUtil.instance = new TimeUtil();\n }\n\n return TimeUtil.instance;\n }\n\n private requoteF;\n private constructor() {\n this.requoteF = this.requote.bind(this);\n this.periodRe = this.formatRe(this.locale_periods);\n this.periodLookup = this.formatLookup(this.locale_periods);\n this.weekdayRe = this.formatRe(this.locale_weekdays);\n this.weekdayLookup = this.formatLookup(this.locale_weekdays);\n this.shortWeekdayRe = this.formatRe(this.locale_shortWeekdays);\n this.shortWeekdayLookup = this.formatLookup(this.locale_shortWeekdays);\n this.monthRe = this.formatRe(this.locale_months);\n this.monthLookup = this.formatLookup(this.locale_months);\n this.shortMonthRe = this.formatRe(this.locale_shortMonths);\n this.shortMonthLookup = this.formatLookup(this.locale_shortMonths);\n }\n //#endregion\n\n private requote(s: string) {\n return s.replace(this.requoteRe, '\\\\$&');\n }\n\n private localDate(d: dateInfo) {\n if (0 <= d.y && d.y < 100) {\n const date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n }\n\n private utcDate(d: dateInfo) {\n if (0 <= d.y && d.y < 100) {\n const date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n }\n\n private newDate(y: number, m: number, d: number) {\n return { y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0 };\n }\n private formatRe(names: string[]) {\n return new RegExp('^(?:' + names.map(this.requoteF).join('|') + ')', 'i');\n }\n private formatLookup(names: string[]) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n }\n\n private locale_months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ];\n\n private formatShortWeekday = (d: Date) => {\n return this.locale_shortWeekdays[d.getDay()];\n };\n\n private formatWeekday = (d: Date) => {\n return this.locale_weekdays[d.getDay()];\n };\n\n private formatShortMonth = (d: Date) => {\n return this.locale_shortMonths[d.getMonth()];\n };\n\n private formatMonth = (d: Date) => {\n return this.locale_months[d.getMonth()];\n };\n\n private pad(value: number, fill: string, width: number) {\n const sign = value < 0 ? '-' : '';\n const string = (sign ? -value : value) + '';\n const length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n }\n\n private formatDayOfMonth = (d: Date, p: string) => {\n return this.pad(d.getDate(), p, 2);\n };\n\n private formatHour24 = (d: Date, p: string) => {\n return this.pad(d.getHours(), p, 2);\n };\n\n private formatHour12 = (d: Date, p: string) => {\n return this.pad(d.getHours() % 12 || 12, p, 2);\n };\n\n private formatMilliseconds = (d: Date, p: string) => {\n return this.pad(d.getMilliseconds(), p, 3);\n };\n\n private formatMonthNumber = (d: Date, p: string) => {\n return this.pad(d.getMonth() + 1, p, 2);\n };\n\n private formatMinutes = (d: Date, p: string) => {\n return this.pad(d.getMinutes(), p, 2);\n };\n\n private formatPeriod = (d: Date) => {\n return this.locale_periods[+(d.getHours() >= 12)];\n };\n\n private formatSeconds = (d: Date, p: string) => {\n return this.pad(d.getSeconds(), p, 2);\n };\n\n private formatFullYear = (d: Date, p: string) => {\n return this.pad(d.getFullYear() % 10000, p, 4);\n };\n\n private formatUTCShortWeekday = (d: Date) => {\n return this.locale_shortWeekdays[d.getUTCDay()];\n };\n\n private formatUTCWeekday = (d: Date) => {\n return this.locale_weekdays[d.getUTCDay()];\n };\n\n private formatUTCShortMonth = (d: Date) => {\n return this.locale_shortMonths[d.getUTCMonth()];\n };\n\n private formatUTCMonth = (d: Date) => {\n return this.locale_months[d.getUTCMonth()];\n };\n\n private formatUTCDayOfMonth = (d: Date, p: string) => {\n return this.pad(d.getUTCDate(), p, 2);\n };\n\n private formatUTCHour24 = (d: Date, p: string) => {\n return this.pad(d.getUTCHours(), p, 2);\n };\n\n private formatUTCHour12 = (d: Date, p: string) => {\n return this.pad(d.getUTCHours() % 12 || 12, p, 2);\n };\n\n private formatUTCMilliseconds = (d: Date, p: string) => {\n return this.pad(d.getUTCMilliseconds(), p, 3);\n };\n\n private formatUTCMonthNumber = (d: Date, p: string) => {\n return this.pad(d.getUTCMonth() + 1, p, 2);\n };\n\n private formatUTCMinutes = (d: Date, p: string) => {\n return this.pad(d.getUTCMinutes(), p, 2);\n };\n\n private formatUTCPeriod = (d: Date) => {\n return this.locale_periods[+(d.getUTCHours() >= 12)];\n };\n\n private formatUTCSeconds = (d: Date, p: string) => {\n return this.pad(d.getUTCSeconds(), p, 2);\n };\n\n private formatUTCFullYear = (d: Date, p: string) => {\n return this.pad(d.getUTCFullYear() % 10000, p, 4);\n };\n\n private formats = {\n a: this.formatShortWeekday,\n A: this.formatWeekday,\n b: this.formatShortMonth,\n B: this.formatMonth,\n d: this.formatDayOfMonth,\n e: this.formatDayOfMonth,\n H: this.formatHour24,\n I: this.formatHour12,\n L: this.formatMilliseconds,\n m: this.formatMonthNumber,\n M: this.formatMinutes,\n p: this.formatPeriod,\n S: this.formatSeconds,\n Y: this.formatFullYear\n };\n\n private utcFormats = {\n a: this.formatUTCShortWeekday,\n A: this.formatUTCWeekday,\n b: this.formatUTCShortMonth,\n B: this.formatUTCMonth,\n d: this.formatUTCDayOfMonth,\n e: this.formatUTCDayOfMonth,\n H: this.formatUTCHour24,\n I: this.formatUTCHour12,\n L: this.formatUTCMilliseconds,\n m: this.formatUTCMonthNumber,\n M: this.formatUTCMinutes,\n p: this.formatUTCPeriod,\n S: this.formatUTCSeconds,\n Y: this.formatUTCFullYear\n };\n\n private parseShortWeekday = (d: dateInfo, string: string, i: number) => {\n const n = this.shortWeekdayRe.exec(string.slice(i));\n return n ? ((d.w = this.shortWeekdayLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseWeekday = (d: dateInfo, string: string, i: number) => {\n const n = this.weekdayRe.exec(string.slice(i));\n return n ? ((d.w = this.weekdayLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseShortMonth = (d: dateInfo, string: string, i: number) => {\n const n = this.shortMonthRe.exec(string.slice(i));\n return n ? ((d.m = this.shortMonthLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseMonth = (d: dateInfo, string: string, i: number) => {\n const n = this.monthRe.exec(string.slice(i));\n return n ? ((d.m = this.monthLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseDayOfMonth = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.d = +n[0]), i + n[0].length) : -1;\n };\n\n private parseHour24 = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.H = +n[0]), i + n[0].length) : -1;\n };\n\n private parseMilliseconds = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 3));\n return n ? ((d.L = +n[0]), i + n[0].length) : -1;\n };\n\n private parseMonthNumber = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.m = (n as any[0]) - 1), i + n[0].length) : -1;\n };\n\n private parseMinutes = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.M = +n[0]), i + n[0].length) : -1;\n };\n\n private parsePeriod = (d: dateInfo, string: string, i: number) => {\n const n = this.periodRe.exec(string.slice(i));\n return n ? ((d.p = this.periodLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseSeconds = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.S = +n[0]), i + n[0].length) : -1;\n };\n\n private parseFullYear = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 4));\n return n ? ((d.y = +n[0]), i + n[0].length) : -1;\n };\n\n private parses = {\n a: this.parseShortWeekday,\n A: this.parseWeekday,\n b: this.parseShortMonth,\n B: this.parseMonth,\n d: this.parseDayOfMonth,\n e: this.parseDayOfMonth,\n H: this.parseHour24,\n I: this.parseHour24,\n L: this.parseMilliseconds,\n m: this.parseMonthNumber,\n M: this.parseMinutes,\n p: this.parsePeriod,\n S: this.parseSeconds,\n Y: this.parseFullYear\n };\n\n private parseSpecifier(d: dateInfo, specifier: string, string: string, j: number) {\n let i = 0;\n const n = specifier.length;\n const m = string.length;\n let c;\n let parse;\n\n while (i < n) {\n if (j >= m) {\n return -1;\n }\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = this.parses[c in this.pads ? specifier.charAt(i++) : c];\n if (!parse || (j = parse(d, string, j)) < 0) {\n return -1;\n }\n } else if (c !== string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n private newParse(specifier: string, Z: boolean) {\n const that = this;\n return function (string: string) {\n const d = that.newDate(1900, undefined, 1) as any;\n const i = that.parseSpecifier(d, specifier, (string += ''), 0);\n if (i !== string.length) {\n return null;\n }\n\n // If a UNIX timestamp is specified, return it.\n if ('Q' in d) {\n return new Date(d.Q);\n }\n if ('s' in d) {\n return new Date(d.s * 1000 + ('L' in d ? d.L : 0));\n }\n\n // If this is utcParse, never use the local timezone.\n if (Z && !('Z' in d)) {\n d.Z = 0;\n }\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if ('p' in d) {\n d.H = (d.H % 12) + d.p * 12;\n }\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) {\n d.m = 'q' in d ? d.q : 0;\n }\n if ('Z' in d) {\n d.H += (d.Z / 100) | 0;\n d.M += d.Z % 100;\n return that.utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return that.localDate(d);\n };\n }\n private newFormat(specifier: string, formats: any) {\n const that = this;\n return function (date: Date) {\n const string = [];\n let i = -1;\n let j = 0;\n const n = specifier.length;\n let c;\n let pad;\n let format;\n if (!(date instanceof Date)) {\n date = new Date(+date);\n }\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = that.pads[(c = specifier.charAt(++i))])) {\n c = specifier.charAt(++i);\n } else {\n pad = c === 'e' ? ' ' : '0';\n }\n format = formats[c];\n c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join('');\n };\n }\n\n private getFullTimeStamp(timeText: StringOrNumber) {\n const timeOriStamp = parseInt(timeText + '', 10);\n return String(timeOriStamp).length === 10 ? timeOriStamp * 1000 : timeOriStamp;\n }\n\n //#region public\n\n timeFormat = (specifier: string, timeText: StringOrNumber) => {\n return this.newFormat(specifier, this.formats)(new Date(this.getFullTimeStamp(timeText)));\n };\n\n timeUTCFormat = (specifier: string, timeText: StringOrNumber) => {\n return this.newFormat(specifier, this.utcFormats)(new Date(this.getFullTimeStamp(timeText)));\n };\n\n timeParse = (specifier: string, timeText: string | string) => {\n return this.newParse(specifier, false)(timeText + '');\n };\n //#region public\n}\n\n// export const timeUtil = () => {\n\n// };\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { ITooltipPattern, TooltipActiveType } from '../../typings';\nimport { TimeUtil } from '../../component/axis/cartesian/util/time';\n\nexport class LinkSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n /** 获取默认的tooltip pattern */\n getDefaultTooltipPattern(activeType: TooltipActiveType): ITooltipPattern | null {\n if (activeType === 'mark') {\n return {\n visible: true,\n activeType,\n title: {\n key: 'link info',\n value: 'link info'\n },\n content: [\n {\n hasShape: true,\n shapeType: 'square',\n shapeColor: this.contentShapeColorCallback,\n shapeStroke: this.contentShapeColorCallback,\n key: 'time',\n value: (datum: any) => TimeUtil.getInstance().timeFormat('%Y%m%d %H:%M', datum.from.split('_')[1])\n },\n {\n hasShape: true,\n shapeType: 'square',\n shapeColor: this.contentShapeColorCallback,\n shapeStroke: this.contentShapeColorCallback,\n key: 'type',\n value: (datum: any) => datum.action_type\n },\n {\n hasShape: true,\n shapeType: 'square',\n shapeColor: this.contentShapeColorCallback,\n shapeStroke: this.contentShapeColorCallback,\n key: 'from',\n value: (datum: any) => datum.from\n },\n {\n hasShape: true,\n shapeType: 'square',\n shapeColor: this.contentShapeColorCallback,\n shapeStroke: this.contentShapeColorCallback,\n key: 'to',\n value: (datum: any) => datum.to\n }\n ]\n };\n }\n return null;\n }\n}\n","import { Factory } from './../core/factory';\nimport type { IRuleMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IMarkRaw, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerRuleGraphic } from '@visactor/vgrammar-core';\n\nexport type IRuleMark = IMarkRaw;\n\nexport class RuleMark extends BaseMark implements IRuleMark {\n static readonly type = MarkTypeEnum.rule;\n readonly type = RuleMark.type;\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n x1: 0,\n y1: 0\n };\n return defaultStyle;\n }\n}\n\nexport const registerRuleMark = () => {\n Factory.registerMark(RuleMark.type, RuleMark);\n registerRuleGraphic();\n};\n","import type { Datum } from '../../typings';\n\nexport interface ILinkDotInfoOpt {\n infoKey: string;\n fields: () => {\n fromField: string;\n toField: string;\n xField: string | string[];\n yField: string | string[];\n };\n linkData: () => Datum[];\n dotData: () => Datum[];\n}\n\n/**\n * @description 根据link数据以及对应的dot数据生成node name和node data的哈希表,并将node data的信息放进来\n */\nexport const linkDotInfo = (data: Array, op: ILinkDotInfoOpt) => {\n const { infoKey, fields, linkData, dotData } = op;\n const { fromField, toField, xField, yField } = fields();\n const dataLinkObj = linkData();\n const dataDotObj = dotData();\n const dataLinkDotHash = {};\n\n // 遍历dot数据,生成哈希表\n dataDotObj.forEach((datum: any) => {\n const dataCopy: any = {};\n for (const key in datum) {\n if (key !== infoKey) {\n dataCopy[key] = datum[key];\n }\n }\n const dataOp = datum[infoKey];\n dataOp?.forEach((d: any) => {\n dataLinkDotHash[d.node_name] = Object.assign({}, dataCopy, d);\n });\n });\n\n // 将起始点的node data加入进来\n dataLinkObj.forEach((datum: any) => {\n datum[fromField + '_xField'] = dataLinkDotHash?.[datum[fromField]]?.[xField];\n datum[fromField + '_yField'] = dataLinkDotHash?.[datum[fromField]]?.[yField];\n datum[toField + '_xField'] = dataLinkDotHash?.[datum[toField]]?.[xField];\n datum[toField + '_yField'] = dataLinkDotHash?.[datum[toField]]?.[yField];\n });\n return dataLinkObj;\n};\n","/* eslint-disable no-duplicate-imports */\nimport { AttributeLevel, DEFAULT_DATA_SERIES_FIELD } from '../../constant/index';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport type { Maybe, Datum } from '../../typings';\nimport { isValid } from '@visactor/vutils';\nimport type { IRuleMark } from '../../mark/rule';\nimport type { IMark } from '../../mark/interface';\nimport { SeriesTypeEnum } from '../interface/type';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport type { ISymbolMark } from '../../mark/symbol';\nimport type { IDotSeriesSpec } from '../dot/interface';\nimport type { IGroupMark } from '../../mark/group';\nimport { LinkSeriesTooltipHelper } from './tooltip-helper';\nimport type { ILinkSeriesSpec, ILinkSeriesTheme } from './interface';\nimport type { SeriesMarkMap } from '../interface';\nimport { RuleMark, registerRuleMark } from '../../mark/rule';\nimport { SymbolMark, registerSymbolMark } from '../../mark/symbol';\nimport { linkSeriesMark } from './constant';\nimport { linkDotInfo } from '../../data/transforms/link-dot-info';\nimport { Factory } from '../../core/factory';\nimport { TransformLevel } from '../../data/initialize';\n\nexport class LinkSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.link;\n type = SeriesTypeEnum.link;\n\n static readonly mark: SeriesMarkMap = linkSeriesMark;\n\n protected _fromField?: string;\n getFromField() {\n return this._fromField;\n }\n setFromField(field: string) {\n if (isValid(field)) {\n this._fromField = field;\n }\n }\n\n protected _toField?: string;\n getToField() {\n return this._toField;\n }\n setToField(field: string) {\n if (isValid(field)) {\n this._toField = field;\n }\n }\n\n protected _dotTypeField?: string;\n getDotTypeField() {\n return this._dotTypeField;\n }\n setDotTypeField(field: string) {\n if (isValid(field)) {\n this._dotTypeField = field;\n }\n }\n\n protected _dotSeriesSpec?: IDotSeriesSpec;\n getDotSeriesSpec() {\n return this._dotSeriesSpec;\n }\n setDotSeriesSpec(spec: IDotSeriesSpec) {\n if (isValid(spec)) {\n this._dotSeriesSpec = spec;\n }\n }\n\n protected _getDotData() {\n const dotSeries = this._option.getChart().getSeriesInIndex([this._spec.dotSeriesIndex])[0];\n if (!dotSeries) {\n return [];\n }\n return dotSeries.getRawData().latestData;\n }\n\n initData() {\n super.initData();\n\n registerDataSetInstanceTransform(this._option.dataSet, 'linkDotInfo', linkDotInfo);\n this.getViewData()?.transform(\n {\n type: 'linkDotInfo',\n options: {\n infoKey: 'dots',\n fields: () => {\n return {\n fromField: this._fromField,\n toField: this._toField,\n xField: this._dotSeriesSpec.xField,\n yField: this._dotSeriesSpec.yField\n };\n },\n linkData: () => this._rawData.latestData,\n dotData: () => this._getDotData()\n },\n level: TransformLevel.linkDotInfo\n },\n false\n );\n }\n\n /**\n * @override\n */\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.setFromField(this._spec.fromField);\n this.setToField(this._spec.toField);\n this.setDotTypeField(this._spec.dotTypeField);\n this.setDotSeriesSpec(this._spec.dotSeriesSpec);\n }\n\n private _clipMark: IGroupMark;\n private _containerMark: IGroupMark;\n private _linkMark: IRuleMark;\n private _arrowMark: ISymbolMark;\n initMark(): void {\n this._clipMark = this._createMark(LinkSeries.mark.group) as IGroupMark;\n\n this._containerMark = this._createMark(LinkSeries.mark.group, {\n parent: this._clipMark\n }) as IGroupMark;\n\n this._linkMark = this._createMark(LinkSeries.mark.link, {\n skipBeforeLayouted: false,\n parent: this._containerMark\n }) as IRuleMark;\n\n this._arrowMark = this._createMark(LinkSeries.mark.arrow, {\n skipBeforeLayouted: false,\n isSeriesMark: true,\n parent: this._containerMark\n }) as ISymbolMark;\n }\n\n initMarkStyle(): void {\n const clipMark = this._clipMark;\n if (clipMark) {\n this.setMarkStyle(\n clipMark,\n {\n x: -this._spec.leftAppendPadding,\n y: 0,\n // 本应使用this.getLayoutRect().width, 但这该返回值为0。考虑到横向不需要裁剪,故先采用一个较大值\n width: 10000,\n height: this._spec.clipHeight,\n clip: true\n },\n 'normal',\n AttributeLevel.Series\n );\n clipMark.setInteractive(false);\n }\n\n const containerMark = this._containerMark;\n if (containerMark) {\n this.setMarkStyle(\n containerMark,\n {\n x: this._spec.leftAppendPadding,\n width: this.getLayoutRect().width\n },\n 'normal',\n AttributeLevel.Series\n );\n containerMark.setInteractive(false);\n }\n\n const linkMark = this._linkMark;\n if (linkMark) {\n this.setMarkStyle(\n linkMark,\n {\n stroke: this.getColorAttribute(),\n strokeOpacity: this.dataToOpacity.bind(this),\n x: this.dataToPositionXFrom.bind(this),\n y: this.dataToPositionYFrom.bind(this),\n x1: this.dataToPositionXTo.bind(this),\n y1: this.dataToPositionYTo.bind(this)\n },\n 'normal',\n AttributeLevel.Series\n );\n this._trigger.registerMark(linkMark);\n }\n\n const arrowMark = this._arrowMark;\n if (arrowMark) {\n const arrowSize = (this._theme?.arrow?.style?.size as number) ?? 10;\n this.setMarkStyle(\n arrowMark,\n {\n x: this.dataToPositionXTo.bind(this),\n y: (datum: Datum) => this.dataToPositionArrowYTo(datum, arrowSize), // csj-to do:箭头的dy不生效,暂时改变y position逻辑\n fill: this.getColorAttribute(),\n fillOpacity: this.dataToOpacity.bind(this),\n size: arrowSize,\n symbolType: (datum: Datum) => {\n return this.isPositionYFromHigher(datum) ? 'triangleDown' : 'triangleUp';\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n this._trigger.registerMark(arrowMark);\n }\n }\n\n afterInitMark(): void {\n super.afterInitMark();\n this._trigger.setStateKeys([this._seriesField as string, this._fromField]);\n }\n\n /** 以下函数用于定位link和arrow */\n\n dataToPositionXFrom(datum: Datum): number {\n if (!this._xAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._xAxisHelper;\n\n return dataToPosition(this.getDatumPositionValues(datum, this._fromField + '_xField'), {\n bandPosition: this._bandPosition\n });\n }\n\n dataToPositionYFrom(datum: Datum): number {\n if (!this._yAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._yAxisHelper;\n\n return dataToPosition(this.getDatumPositionValues(datum, this._fromField + '_yField'));\n }\n\n dataToPositionXTo(datum: Datum): number {\n if (!this._xAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._xAxisHelper;\n return dataToPosition(this.getDatumPositionValues(datum, this._toField + '_xField'), {\n bandPosition: this._bandPosition\n });\n }\n\n dataToPositionYTo(datum: Datum): number {\n if (!this._yAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._yAxisHelper;\n\n return dataToPosition(this.getDatumPositionValues(datum, this._toField + '_yField'), {\n bandPosition: this._bandPosition\n });\n }\n\n dataToPositionArrowYTo(datum: Datum, arrowSize: number): number {\n if (!this._yAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._yAxisHelper;\n const offset = this.isPositionYFromHigher(datum) ? -arrowSize / 2 : arrowSize / 2;\n return (\n dataToPosition(this.getDatumPositionValues(datum, this._toField + '_yField'), {\n bandPosition: this._bandPosition\n }) + offset\n );\n }\n\n dataToOpacity(datum: Datum): number {\n if (\n this.isPositionXOuterRange(datum, this._fromField + '_xField') ||\n this.isPositionXOuterRange(datum, this._toField + '_xField') ||\n datum[this._fromField] === datum[this._toField]\n ) {\n return 0;\n }\n return 1;\n }\n\n /**\n * @description 用于判断link的箭头方向\n */\n isPositionYFromHigher(datum: Datum): boolean {\n return this.dataToPositionYFrom(datum) < this.dataToPositionYTo(datum);\n }\n\n /**\n * @description 用于判断link的起点、终点坐标是否超出range范围\n */\n isPositionXOuterRange(datum: Datum, field: string): boolean {\n if (!this._xAxisHelper) {\n return false;\n }\n const { dataToPosition, getScale } = this._xAxisHelper;\n\n if (\n dataToPosition(this.getDatumPositionValues(datum, field), {\n bandPosition: this._bandPosition\n }) < getScale(0).range()[0] ||\n dataToPosition(this.getDatumPositionValues(datum, field), {\n bandPosition: this._bandPosition\n }) > getScale(0).range()[1]\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * @override\n * @description 如果用户设置了dotType,则seriesGroup作为颜色映射字段\n */\n getDefaultColorDomain() {\n return this._dotTypeField\n ? this.getViewDataStatistics()?.latestData[this._dotTypeField].values\n : this._seriesField\n ? this.getViewDataStatistics()?.latestData[this._seriesField].values\n : [];\n }\n\n /**\n * @override\n */\n // 通用的默认颜色映射 用户设置优先级比这个高,会在setStyle中处理\n getColorAttribute() {\n return {\n scale: this._option.globalScale.getScale('color') ?? this._getDefaultColorScale(),\n field: this._dotTypeField ?? this._seriesField ?? DEFAULT_DATA_SERIES_FIELD\n };\n }\n\n protected initTooltip() {\n this._tooltipHelper = new LinkSeriesTooltipHelper(this);\n this._linkMark && this._tooltipHelper.activeTriggerSet.mark.add(this._linkMark);\n this._arrowMark && this._tooltipHelper.activeTriggerSet.mark.add(this._arrowMark);\n }\n\n protected onMarkTreePositionUpdate(marks: IMark[]): void {\n marks.forEach(m => {\n if (m.type === 'group') {\n this.onMarkTreePositionUpdate((m as IGroupMark).getMarks());\n } else {\n m.updateLayoutState();\n }\n });\n }\n\n getDotInfoData() {\n return (this._linkMark ?? this._arrowMark)?.getData();\n }\n\n getActiveMarks(): IMark[] {\n return [this._linkMark, this._arrowMark];\n }\n}\n\nexport const registerLinkSeries = () => {\n registerRuleMark();\n registerSymbolMark();\n Factory.registerSeries(LinkSeries.type, LinkSeries);\n};\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { IToolTipLinePattern, ITooltipPattern, TooltipActiveType } from '../../typings';\nimport { TimeUtil } from '../../component/axis/cartesian/util/time';\nimport { isValid } from '@visactor/vutils';\n\nexport class DotSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n updateTooltipSpec() {\n super.updateTooltipSpec();\n if (isValid(this.spec?.mark)) {\n this.spec!.mark.updateContent = (prev: any, datum: any, params: any) => {\n const childrenContent: IToolTipLinePattern[] = [];\n const childrenPrev = prev.filter((p: any) => p.key === 'children');\n childrenPrev.length > 0 &&\n childrenPrev[0].value.forEach((element: any) => {\n let flag = true;\n for (const key in element) {\n childrenContent.push({\n shapeType: 'circle',\n hasShape: flag,\n shapeColor: this.contentShapeColorCallback(datum[0].datum[0]),\n shapeStroke: this.contentShapeColorCallback(datum[0].datum[0]),\n key: key,\n value: element[key] + ''\n });\n flag = false;\n }\n });\n return prev.concat(childrenContent);\n };\n }\n }\n\n /** 获取默认的tooltip pattern */\n getDefaultTooltipPattern(activeType: TooltipActiveType): ITooltipPattern | null {\n if (activeType === 'mark') {\n return {\n visible: true,\n activeType,\n title: {\n key: 'event info',\n value: 'event info'\n },\n content: [\n {\n hasShape: true,\n shapeType: 'square',\n shapeColor: this.contentShapeColorCallback,\n shapeStroke: this.contentShapeColorCallback,\n key: (datum: any) => datum.type,\n value: (datum: any) => datum.id\n },\n {\n hasShape: true,\n shapeType: 'square',\n shapeColor: this.contentShapeColorCallback,\n shapeStroke: this.contentShapeColorCallback,\n key: 'event_time',\n value: (datum: any) => TimeUtil.getInstance().timeFormat('%Y%m%d', datum.event_time)\n },\n {\n hasShape: true,\n shapeType: 'square',\n shapeColor: this.contentShapeColorCallback,\n shapeStroke: this.contentShapeColorCallback,\n key: 'action_type',\n value: (datum: any) => datum.action_type\n },\n {\n shapeType: 'square',\n hasShape: true,\n shapeColor: this.contentShapeColorCallback,\n shapeStroke: this.contentShapeColorCallback,\n key: 'children',\n value: (datum: any) => {\n return datum.children;\n }\n }\n ],\n updateContent: (prev: any, datum: any, params: any) => {\n const childrenContent: IToolTipLinePattern[] = [];\n prev[3].value.forEach((element: any) => {\n let flag = true;\n for (const key in element) {\n childrenContent.push({\n shapeType: 'circle',\n hasShape: flag,\n shapeColor: this.contentShapeColorCallback(datum[0].datum[0]),\n shapeStroke: this.contentShapeColorCallback(datum[0].datum[0]),\n key: key,\n value: element[key] + ''\n } as IToolTipLinePattern);\n flag = false;\n }\n });\n return prev.concat(childrenContent);\n }\n };\n }\n return null;\n }\n}\n","import type { DataView } from '@visactor/vdataset';\n/**\n * @description 针对某个数组进行数据展开,将数组中的每个元素拆出来加入数据集\n */\nexport const objFlat = (data: Array, op: string) => {\n // 数据处理\n const dataCollect = data[0]?.latestData ? data[0].latestData : data || [];\n const result: any[] = [];\n dataCollect.forEach((datum: any) => {\n const dataKey: any = {};\n for (const key in datum) {\n if (key !== op) {\n dataKey[key] = datum[key];\n }\n }\n const dataOp = datum[op];\n dataOp?.forEach((d: any) => {\n result.push(Object.assign({}, dataKey, d));\n });\n });\n return result;\n};\n","export const DEFAULT_GRID_BACKGROUND = {\n fill: '#bbb',\n fillOpacity: 0.2\n};\n","import { Factory } from './../core/factory';\nimport type { ITextMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IMarkRaw, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface';\nimport { GrammarMarkType, registerRichTextGraphic, registerTextGraphic } from '@visactor/vgrammar-core';\nimport type { IGroupMark } from '@visactor/vgrammar-core';\n\nexport type ITextMark = IMarkRaw;\n\nexport class TextMark extends BaseMark implements ITextMark {\n static readonly type = MarkTypeEnum.text;\n readonly type = TextMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n // TODO: 删除后会有显示问题,待排查\n angle: 0,\n textAlign: 'center',\n lineWidth: 0,\n textConfig: []\n };\n return defaultStyle;\n }\n\n protected _initProduct(group?: string | IGroupMark) {\n const view = this.getVGrammarView();\n\n // 声明语法元素\n const id = this.getProductId();\n\n if (this.getStyle('textType') === 'rich') {\n this._product = view.mark(GrammarMarkType.richtext as GrammarMarkType, group ?? view.rootMark).id(id);\n } else {\n this._product = view.mark(GrammarMarkType.text as GrammarMarkType, group ?? view.rootMark).id(id);\n }\n\n this._compiledProductId = id;\n }\n}\n\nexport const registerTextMark = () => {\n Factory.registerMark(TextMark.type, TextMark);\n registerTextGraphic();\n registerRichTextGraphic();\n};\n","/* eslint-disable no-duplicate-imports */\nimport { AttributeLevel, DEFAULT_DATA_SERIES_FIELD } from '../../constant/index';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport type { Maybe, Datum } from '../../typings';\nimport { mergeSpec } from '../../util/spec/merge-spec';\nimport { isValid } from '@visactor/vutils';\nimport type { ISymbolMark } from '../../mark/symbol';\nimport type { ITextMark } from '../../mark/text';\nimport type { IRuleMark } from '../../mark/rule';\nimport type { IMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport { SeriesTypeEnum } from '../interface/type';\nimport { dataViewParser } from '@visactor/vdataset';\nimport { registerDataSetInstanceParser, registerDataSetInstanceTransform } from '../../data/register';\nimport type { IGroupMark } from '../../mark/group';\nimport type { IModelEvaluateOption } from '../../model/interface';\nimport { DotSeriesTooltipHelper } from './tooltip-helper';\nimport type { IRectMark } from '../../mark/rect';\nimport type { FunctionType, IFillMarkSpec, VisualType } from '../../typings/visual';\nimport type { IDotSeriesSpec, IDotSeriesTheme } from './interface';\nimport { copyDataView } from '../../data/transforms/copy-data-view';\nimport { objFlat } from '../../data/transforms/obj-flat';\nimport { DEFAULT_GRID_BACKGROUND } from './config';\nimport { ColorOrdinalScale } from '../../scale/color-ordinal-scale';\nimport type { SeriesMarkMap } from '../interface';\nimport { SymbolMark, registerSymbolMark } from '../../mark/symbol';\nimport { TextMark, registerTextMark } from '../../mark/text';\nimport { RuleMark, registerRuleMark } from '../../mark/rule';\nimport { RectMark, registerRectMark } from '../../mark/rect';\nimport { dotSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { TransformLevel } from '../../data/initialize';\n\nexport class DotSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.dot;\n type = SeriesTypeEnum.dot;\n\n static readonly mark: SeriesMarkMap = dotSeriesMark;\n\n private _xDimensionStatisticsDomain: any[];\n\n // csj-Q: 是否需要把这些属性写成接口?\n protected _seriesGroupField?: string;\n getSeriesGroupField() {\n return this._seriesField;\n }\n setSeriesGroupField(field: string) {\n if (isValid(field)) {\n this._seriesGroupField = field;\n }\n }\n\n protected _titleField?: string;\n getTitleField() {\n return this._titleField;\n }\n setTitleField(field: string) {\n if (isValid(field)) {\n this._titleField = field;\n }\n }\n\n protected _subTitleField?: string;\n getSubTitleField() {\n return this._subTitleField;\n }\n setSubTitleField(field: string) {\n if (isValid(field)) {\n this._subTitleField = field;\n }\n }\n\n protected _dotTypeField?: string;\n getDotTypeField() {\n return this._dotTypeField;\n }\n setDotTypeField(field: string) {\n if (isValid(field)) {\n this._dotTypeField = field;\n }\n }\n\n protected _highLightSeriesGroup?: string;\n getHighLightSeriesGroup() {\n return this._highLightSeriesGroup;\n }\n setHighLightSeriesGroup(field: string) {\n if (isValid(field)) {\n this._highLightSeriesGroup = field;\n }\n }\n\n protected _gridBackground?: IFillMarkSpec;\n setGridBackground(gridBackground: IFillMarkSpec) {\n if (isValid(gridBackground)) {\n this._gridBackground = gridBackground;\n }\n }\n\n /**\n * @override\n */\n initData(): void {\n super.initData();\n this._xDimensionStatisticsDomain = this.getRawData().latestData.map((d: Datum) => d[this._fieldY[0]]);\n\n // data to dataview\n registerDataSetInstanceTransform(this._option.dataSet, 'objFlat', objFlat);\n registerDataSetInstanceTransform(this._option.dataSet, 'copyDataView', copyDataView);\n registerDataSetInstanceParser(this._option.dataSet, 'dataview', dataViewParser);\n\n this.getViewData()?.transform(\n {\n type: 'objFlat',\n options: 'dots',\n level: TransformLevel.dotObjFlat\n },\n false\n );\n }\n\n /**\n * @override\n */\n setSeriesField(field: string) {\n if (isValid(field)) {\n this._seriesField = field;\n this.getMarksInType([MarkTypeEnum.line, MarkTypeEnum.area]).forEach(m => {\n m.setFacet(this._seriesField);\n });\n }\n }\n\n getStatisticFields() {\n return [{ key: this._fieldY[0], operations: ['values'], customize: this._xDimensionStatisticsDomain }] as {\n key: string;\n operations: Array<'max' | 'min' | 'values'>;\n customize: any[];\n }[];\n }\n\n /**\n * @override\n */\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.setSeriesGroupField(this._spec.seriesGroupField);\n this.setTitleField(this._spec.titleField);\n this.setSubTitleField(this._spec.subTitleField);\n this.setDotTypeField(this._spec.dotTypeField);\n this.setHighLightSeriesGroup(this._spec.highLightSeriesGroup);\n this.setGridBackground(mergeSpec(DEFAULT_GRID_BACKGROUND, this._spec.grid?.background || {}));\n }\n\n private _clipMark: IGroupMark;\n private _containerMark: IGroupMark;\n private _gridBackgroundMark: IRectMark;\n private _gridMark: IRuleMark;\n private _dotMark: ISymbolMark;\n private _titleMark: ITextMark;\n private _subTitleMark: ITextMark;\n private _symbolMark: ISymbolMark;\n initMark(): void {\n this._clipMark = this._createMark(DotSeries.mark.group) as IGroupMark;\n\n this._containerMark = this._createMark(DotSeries.mark.group, {\n parent: this._clipMark,\n dataView: this.getRawData()\n }) as IGroupMark;\n\n this._gridBackgroundMark = this._createMark(DotSeries.mark.gridBackground, {\n parent: this._containerMark,\n dataView: this.getRawData()\n }) as IRectMark;\n\n this._gridMark = this._createMark(DotSeries.mark.grid, {\n parent: this._containerMark,\n dataView: this.getRawData()\n }) as IRuleMark;\n\n this._dotMark = this._createMark(DotSeries.mark.dot, {\n skipBeforeLayouted: false,\n isSeriesMark: true,\n parent: this._containerMark\n }) as ISymbolMark;\n\n this._titleMark = this._createMark(DotSeries.mark.title, {\n parent: this._containerMark,\n dataView: this.getRawData()\n }) as ITextMark;\n\n this._subTitleMark = this._createMark(DotSeries.mark.subTitle, {\n parent: this._containerMark,\n dataView: this.getRawData()\n }) as ITextMark;\n\n this._symbolMark = this._createMark(DotSeries.mark.symbol, {\n parent: this._containerMark,\n dataView: this.getRawData()\n }) as ISymbolMark;\n }\n\n initMarkStyle(): void {\n const clipMark = this._clipMark;\n if (clipMark) {\n this.setMarkStyle(\n clipMark,\n {\n x: -this._spec.leftAppendPadding,\n y: 0,\n // 本应使用this.getLayoutRect().width, 但这该返回值为0。考虑到横向不需要裁剪,故先采用一个较大值\n width: 10000,\n height: this._spec.clipHeight,\n clip: true\n },\n 'normal',\n AttributeLevel.Series\n );\n clipMark.setInteractive(false);\n }\n\n const containerMark = this._containerMark;\n if (containerMark) {\n this.setMarkStyle(\n containerMark,\n {\n x: this._spec.leftAppendPadding\n },\n 'normal',\n AttributeLevel.Series\n );\n containerMark.setInteractive(false);\n }\n\n const gridBackgroundMark = this._gridBackgroundMark;\n if (gridBackgroundMark) {\n this.setMarkStyle(\n gridBackgroundMark,\n {\n x: this.getRegionRectLeft.bind(this),\n x1: this.getRegionRectRight.bind(this),\n y: this.dataToGridBackgroundPositionY.bind(this),\n y1: this.dataToGridBackgroundPositionY1.bind(this),\n fill: this._gridBackground.fill,\n fillOpacity: this.dataToGridBackgroundOpacity.bind(this) as FunctionType\n },\n 'normal',\n AttributeLevel.Series\n );\n this._trigger.registerMark(gridBackgroundMark);\n // this._tooltipHelper?.activeTriggerSet.mark.add(gridMark);\n }\n\n const gridMark = this._gridMark;\n if (gridMark) {\n this.setMarkStyle(\n gridMark,\n {\n stroke: this.getColorAttribute(),\n x: this.getRegionRectLeft.bind(this),\n y: this.dataToPositionY.bind(this),\n x1: this.getRegionRectRight.bind(this),\n y1: this.dataToPositionY.bind(this)\n },\n 'normal',\n AttributeLevel.Series\n );\n this._trigger.registerMark(gridMark);\n // this._tooltipHelper?.activeTriggerSet.mark.add(gridMark);\n }\n\n const dotMark = this._dotMark;\n if (dotMark) {\n this.setMarkStyle(\n dotMark,\n {\n x: this.dataToPositionX.bind(this),\n y: this.dataToPositionY.bind(this),\n fill: this.getDotColorAttribute(),\n fillOpacity: this.dataToOpacity.bind(this)\n },\n 'normal',\n AttributeLevel.Series\n );\n this._trigger.registerMark(dotMark);\n }\n\n const titleMark = this._titleMark;\n if (titleMark) {\n this.setMarkStyle(\n titleMark,\n {\n fill: this.getColorAttribute(),\n text: (datum: any) => {\n return datum[this.getTitleField()];\n },\n x: this.getRegionRectLeft.bind(this),\n y: this.dataToPositionY.bind(this)\n },\n 'normal',\n AttributeLevel.Series\n );\n this._trigger.registerMark(titleMark);\n // this._tooltipHelper?.activeTriggerSet.mark.add(titleMark);\n }\n\n const subTitleMark = this._subTitleMark;\n if (subTitleMark) {\n this.setMarkStyle(\n subTitleMark,\n {\n fill: this.getColorAttribute(),\n text: (datum: any) => {\n return datum[this.getSubTitleField()];\n },\n x: this.getRegionRectLeft.bind(this),\n y: this.dataToPositionY.bind(this)\n },\n 'normal',\n AttributeLevel.Series\n );\n this._trigger.registerMark(subTitleMark);\n // this._tooltipHelper?.activeTriggerSet.mark.add(subTitleMark);\n }\n\n const symbolMark = this._symbolMark;\n if (symbolMark) {\n this.setMarkStyle(\n symbolMark,\n {\n x: this.getRegionRectLeft.bind(this),\n y: this.dataToPositionY.bind(this),\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n this._trigger.registerMark(symbolMark);\n // this._tooltipHelper?.activeTriggerSet.mark.add(symbolMark);\n }\n }\n\n dataToGridBackgroundPositionY(datum: Datum): number {\n if (!this._yAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition, getBandwidth } = this._yAxisHelper;\n\n return (\n dataToPosition(this.getDatumPositionValues(datum, this._fieldY), {\n bandPosition: this._bandPosition\n }) -\n getBandwidth(0) / 2\n );\n }\n\n dataToGridBackgroundPositionY1(datum: Datum): number {\n if (!this._yAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition, getBandwidth } = this._yAxisHelper;\n\n return (\n dataToPosition(this.getDatumPositionValues(datum, this._fieldY), {\n bandPosition: this._bandPosition\n }) +\n getBandwidth(0) / 2\n );\n }\n\n dataToOpacity(datum: Datum): number {\n if (!this._xAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition, getScale } = this._xAxisHelper;\n\n if (\n dataToPosition(this.getDatumPositionValues(datum, this._fieldX), {\n bandPosition: this._bandPosition\n }) < getScale(0).range()[0] ||\n dataToPosition(this.getDatumPositionValues(datum, this._fieldX), {\n bandPosition: this._bandPosition\n }) > getScale(0).range()[1]\n ) {\n return 0;\n }\n return this._theme?.dot?.style?.fillOpacity ?? 1;\n }\n\n dataToGridBackgroundOpacity(datum: Datum): VisualType {\n if (datum[this._seriesGroupField] === this._highLightSeriesGroup) {\n return this._gridBackground.fillOpacity;\n }\n return 0;\n }\n\n onLayoutEnd(ctx: any) {\n super.onLayoutEnd(ctx);\n const layoutOffsetX = this._spec?.leftAppendPadding ?? 0;\n this.setMarkStyle(\n this._clipMark,\n {\n width: this.getLayoutRect().width + layoutOffsetX //clip的数值只能在layoutEnd之后获得\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n /**\n * @override\n * @description 如果用户设置了seriesGroup,则seriesGroup作为颜色映射字段\n */\n getDefaultColorDomain() {\n return this._seriesGroupField\n ? this.getViewDataStatistics()?.latestData[this._seriesGroupField].values\n : this._seriesField\n ? this.getViewDataStatistics()?.latestData[this._seriesField].values\n : [];\n }\n\n /**\n * @override\n */\n // 通用的默认颜色映射 用户设置优先级比这个高,会在setStyle中处理\n getColorAttribute() {\n return {\n scale: this._option.globalScale.getScale('color') ?? this._getDefaultColorScale(),\n field: this._seriesGroupField ?? this._seriesField ?? DEFAULT_DATA_SERIES_FIELD\n };\n }\n\n /**\n * @override\n * @description 对于dot来说,dotType优先级高于seriesGroup,作为颜色映射字段\n */\n protected getDotColorScale() {\n const colorDomain = this._dotTypeField\n ? this.getViewDataStatistics()?.latestData[this._dotTypeField].values\n : this._seriesGroupField\n ? this.getViewDataStatistics()?.latestData[this._seriesGroupField].values\n : this._seriesField\n ? this.getViewDataStatistics()?.latestData[this._seriesField].values\n : [];\n const colorRange = this._getDataScheme();\n return new ColorOrdinalScale().domain(colorDomain).range(colorRange);\n }\n\n /**\n * @override\n */\n // 通用的默认颜色映射 用户设置优先级比这个高,会在setStyle中处理\n getDotColorAttribute() {\n return {\n scale: this._option.globalScale.getScale('color') ?? this.getDotColorScale(),\n field: this._dotTypeField ?? this._seriesGroupField ?? this._seriesField ?? DEFAULT_DATA_SERIES_FIELD\n };\n }\n\n protected initTooltip() {\n this._tooltipHelper = new DotSeriesTooltipHelper(this);\n this._dotMark && this._tooltipHelper.activeTriggerSet.mark.add(this._dotMark);\n }\n\n /**\n * @description onEvaluateEnd之后可以拿到canvas element,将滚动条挂载到canvas element上\n */\n onEvaluateEnd(ctx: IModelEvaluateOption): void {\n super.onEvaluateEnd(ctx);\n }\n\n protected onMarkTreePositionUpdate(marks: IMark[]): void {\n marks.forEach(m => {\n if (m.type === 'group') {\n this.onMarkTreePositionUpdate((m as IGroupMark).getMarks());\n } else {\n m.updateLayoutState();\n }\n });\n }\n\n getDotData() {\n return this._dotMark?.getData();\n }\n\n protected _getDataIdKey() {\n // dot 系列没有动画,可以使用默认的 dataKey\n return undefined as any;\n }\n\n getStackValueField(): string {\n return null;\n }\n\n getActiveMarks(): IMark[] {\n return [this._dotMark];\n }\n}\n\nexport const registerDotSeries = () => {\n registerSymbolMark();\n registerRuleMark();\n registerRectMark();\n registerTextMark();\n\n Factory.registerSeries(DotSeries.type, DotSeries);\n};\n","import { array } from '@visactor/vutils';\nimport { DataView } from '@visactor/vdataset';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { ISequenceChartSpec, ISequenceSeriesSpec } from './interface';\nimport type { Datum, IRegionSpec } from '../../typings';\nimport type { ICartesianAxisSpec, IScrollBarSpec } from '../../component';\nimport { SeriesTypeEnum } from '../../series';\nimport { normalizeLayoutPaddingSpec } from '../../util';\nimport { IFilterMode } from '../../component/data-zoom/constant';\nimport type { IGridLayoutSpec } from '../../layout';\nimport { SCROLL_BAR_DEFAULT_SIZE } from '../../constant/scroll-bar';\n\nexport class SequenceChartSpecTransformer<\n T extends ISequenceChartSpec = ISequenceChartSpec\n> extends BaseChartSpecTransformer {\n private _getSeriesDataLength(spec: T, seriesSpec: any) {\n if (seriesSpec.data) {\n const _d = array(seriesSpec.data)[0];\n if (_d instanceof DataView) {\n return _d.latestData?.length;\n }\n return _d.values?.length;\n }\n const dataTemp = array(spec.data).find((_d, index) => {\n if (seriesSpec.dataId) {\n if (_d instanceof DataView) {\n return _d.name === seriesSpec.dataId;\n }\n return _d.id === seriesSpec.dataId;\n }\n return seriesSpec.dataIndex === index;\n });\n if (!dataTemp) {\n return 0;\n }\n if (dataTemp instanceof DataView) {\n return dataTemp.latestData.length;\n }\n return dataTemp.values.length;\n }\n\n addAttrToComponentSpec(componentSpec: any, attr: string, value: any) {\n if (Array.isArray(componentSpec)) {\n componentSpec[0][attr] = value;\n } else {\n componentSpec[attr] = value;\n }\n return componentSpec;\n }\n\n /**\n * @override\n * @description 主要是处理布局逻辑 & 部分仅针对sequenceChart的特殊属性\n */\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n\n // 初始化目标属性\n let rowNum = 0;\n const elements: any[] = [];\n const region: IRegionSpec[] = [];\n const axes: ICartesianAxisSpec[] = [];\n const scrollBar: IScrollBarSpec[] = [];\n const rowHeight: any = [];\n\n // FIXME: 重构之前这里取的是 chart 上的 this._layoutRect,这里有点问题。\n // 重构之前 chart 上的 transformSpec() 本来就在布局之前执行,\n // 原始代码中的 this._layoutRect 中取到的永远是常量 { width: 500, height: 500 }。\n // 重构之后保留这个 mock 值,可以尽快修改下 @skie1997\n const mocklayoutRect = { width: 500, height: 500 };\n\n // 计算默认series padding和series高度\n const defaultSeriesPadding = 20;\n const seriesRegionNum = spec.series.filter(d => d.type !== SeriesTypeEnum.link).length;\n const defaultSeriesRowHeight =\n (mocklayoutRect.height - defaultSeriesPadding * (seriesRegionNum - 1)) / seriesRegionNum;\n const leftAppendPadding = spec?.appendPadding?.left || 0;\n const rightAppendPadding = spec?.appendPadding?.right || 0;\n\n if (spec?.legends) {\n elements.push({\n modelId: `legendRow${rowNum}`,\n col: 1,\n row: rowNum\n });\n this.addAttrToComponentSpec(spec.legends, 'id', `legendRow${rowNum}`);\n // legend offset 和 padding 兼容处理\n const legendSpec = array(spec.legends);\n let legendHeight: any = legendSpec[0].height ?? 40;\n if (legendSpec[0].padding) {\n const legendPadding = normalizeLayoutPaddingSpec(legendSpec[0].padding);\n legendHeight += Number(legendPadding?.bottom ?? 0);\n legendHeight += Number(legendPadding?.top ?? 0);\n legendSpec[0].offsetY = Number(legendSpec[0]?.offsetY ?? 0) + Number(legendPadding?.top ?? 0);\n }\n rowHeight.push({\n index: rowNum,\n size: legendHeight\n });\n rowNum++;\n }\n\n if (spec?.dataZoom) {\n elements.push({\n modelId: `dataZoomRow${rowNum}`,\n col: 1,\n row: rowNum\n });\n this.addAttrToComponentSpec(spec.dataZoom, 'id', `dataZoomRow${rowNum}`);\n rowNum++;\n\n // 增加空行,拟合series padding效果\n rowHeight.push({\n index: rowNum,\n size: 10\n });\n rowNum++;\n }\n\n // 遍历axes\n // 1. 在elements中添加时间轴元素\n // 2. 并统计rowNum\n // 在sequenceChart中,axes有几种情况(本期先考虑1和2,也就是默认只有1个top轴):1.不声明axes 2.声明且为仅有一个top axes 3.声明且仅有一个bottom axes 4.多个axes组合\n // if(spec.axes === null || spec?.axes[0]?.orient === 'top') {\n // Tips: id should not has duplicate name\n region.push({\n id: `regionAxesRow${rowNum}`\n });\n elements.push({\n modelId: `axesRow${rowNum}`,\n col: 1,\n row: rowNum\n });\n spec.axes[0].id = `axesRow${rowNum}`;\n spec.axes[0].regionIndex = Array.from(Array(spec.series.length), (_, index) => index + 1);\n rowNum++;\n // }\n\n // 遍历series\n // 1. 在spec.layout => elements、region数组和spec.axes的数组中中添加元素\n // 2. 为series绑定regionIndex\n // 3. 统计rowNum\n // 4. 用空行拟合series padding\n spec?.series?.forEach((seriesSpec: ISequenceSeriesSpec) => {\n if (\n ([SeriesTypeEnum.bar, SeriesTypeEnum.line, SeriesTypeEnum.area, SeriesTypeEnum.dot] as string[]).includes(\n seriesSpec.type\n )\n ) {\n // elements数组\n elements.push({\n modelId: `${seriesSpec.type}Row${rowNum}`,\n col: 1,\n row: rowNum\n });\n elements.push({\n modelId: `axesLeftRow${rowNum}`,\n col: 0,\n row: rowNum\n });\n\n // region数组\n region.push({\n id: `${seriesSpec.type}Row${rowNum}`,\n clip: false\n });\n\n rowHeight.push({\n index: rowNum,\n size: seriesSpec?.height || defaultSeriesRowHeight\n });\n\n // axes数组添加left axes(每个series都需要一个left axes)\n axes.push({\n orient: 'left',\n id: `axesLeftRow${rowNum}`,\n type: seriesSpec.type === SeriesTypeEnum.dot ? 'band' : 'linear',\n visible: seriesSpec.type !== SeriesTypeEnum.dot,\n\n // 对于bar series,axes title模拟bar title\n title: {\n visible: true,\n // 特殊处理时序图的 title 样式,默认的坐标轴左右轴会进行旋转\n autoRotate: false,\n style: {\n text: (seriesSpec as any)?.barTitle,\n dx: -20,\n textBaseline: 'middle',\n textAlign: 'end'\n }\n },\n // 对于bar series,axes grid模拟series分割线\n grid: {\n visible:\n typeof (seriesSpec as any)?.grid?.visible === 'boolean' ? (seriesSpec as any)?.grid?.visible : true, // bar grid默认绘制\n style: (datum: Datum, index: number) => {\n let lineWidth = 0;\n if (index === 0) {\n const style = (seriesSpec as any)?.grid?.style;\n\n // 兼容一下spec中通过strokeWidth申明的方式\n lineWidth = style?.lineWidth ?? style?.strokeWidth ?? 1;\n }\n return {\n lineWidth,\n stroke: (seriesSpec as any)?.grid?.style?.stroke || '#dfdfdf',\n lineDash: [0, 0]\n };\n }\n },\n // 其他轴元素隐藏\n domainLine: {\n visible: false\n },\n tick: {\n visible: false\n },\n label: {\n visible: false\n },\n\n // 绑定regionIndex\n regionIndex: region.length - 1\n });\n\n // scrollBar 内置\n if (seriesSpec.type === SeriesTypeEnum.dot) {\n elements.push({\n modelId: `scrollBarRightRow${rowNum}`,\n col: 2,\n row: rowNum\n });\n const dataLength = this._getSeriesDataLength(spec, seriesSpec);\n let ratio = 0;\n if (dataLength) {\n ratio = (seriesSpec?.height || defaultSeriesRowHeight) / (dataLength * 30);\n }\n // scrollBar数组增加一个right scrollBar\n scrollBar.push({\n orient: 'right',\n visible: seriesSpec.type === SeriesTypeEnum.dot && ratio < 1,\n id: `scrollBarRightRow${rowNum}`,\n start: 0,\n end: Math.min(ratio, 1),\n filterMode: IFilterMode.axis,\n regionIndex: region.length - 1,\n axisId: `axesLeftRow${rowNum}`,\n ...array(spec?.scrollBar)[0]\n });\n }\n\n // seriesSpec绑定regionIndex\n seriesSpec.regionIndex = region.length - 1;\n\n rowNum++;\n\n // 增加空行,拟合series padding效果\n rowHeight.push({\n index: rowNum,\n size: seriesSpec?.padding || defaultSeriesPadding\n });\n rowNum++;\n\n // chart的leftAppendPadding用于具体元素的dx偏移\n (seriesSpec as any).leftAppendPadding = leftAppendPadding;\n\n // title和subTitle自动定位到画布最左端\n if (seriesSpec.type === SeriesTypeEnum.dot) {\n (seriesSpec as any).title.style.dx = -leftAppendPadding;\n (seriesSpec as any).subTitle.style.dx = -leftAppendPadding;\n }\n }\n });\n\n // 对于link series,所有属性跟随它绑定的dot series\n spec?.series?.forEach((seriesSpec: ISequenceSeriesSpec) => {\n if (seriesSpec.type === SeriesTypeEnum.link) {\n const dotRowNum = seriesSpec.dotSeriesIndex + 1;\n elements.push({\n modelId: `${seriesSpec.type}Row${dotRowNum}`,\n col: 1,\n row: dotRowNum - 1\n });\n seriesSpec.regionIndex = spec.series[seriesSpec.dotSeriesIndex].regionIndex;\n (seriesSpec as any).leftAppendPadding = leftAppendPadding;\n (seriesSpec as any).height = (spec.series[seriesSpec.dotSeriesIndex] as any).height;\n (seriesSpec as any).clipHeight = (spec.series[seriesSpec.dotSeriesIndex] as any).clipHeight;\n }\n });\n\n // 添加legends和datazoom的regionIndex\n if (spec?.legends) {\n this.addAttrToComponentSpec(spec.legends, 'regionIndex', [region.length - 1]);\n }\n // if ((spec as any)?.dataZoom) {\n // (spec as any).dataZoom[0].regionIndex = Array.from({length: region.length - 1},(item, index)=> index+1);\n // }\n\n const layout: IGridLayoutSpec = {\n type: 'grid',\n col: 4,\n row: rowNum,\n colWidth: [\n {\n index: 0,\n size: leftAppendPadding\n },\n {\n index: 2,\n size: SCROLL_BAR_DEFAULT_SIZE\n },\n {\n index: 3,\n size: rightAppendPadding\n }\n ],\n rowHeight: rowHeight,\n elements: elements\n };\n\n spec.layout = layout;\n spec.region = region;\n spec.axes?.push(...axes);\n spec.scrollBar = scrollBar;\n }\n}\n","export const SCROLL_BAR_DEFAULT_SIZE = 12;\n","import { registerLinkSeries } from '../../series/link/link';\nimport { registerDotSeries } from '../../series/dot/dot';\nimport { BaseChart } from '../base/base-chart';\nimport type { ISequenceChartSpec } from './interface';\nimport type { IRegion } from '../../region/interface';\nimport { Factory } from '../../core/factory';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { ISeriesConstructor, ISeriesOption } from '../../series/interface';\nimport type { IModelSpecInfo } from '../../model/interface';\nimport { SequenceChartSpecTransformer } from './sequence-transformer';\n\nexport class SequenceChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.sequence;\n static readonly view: string = 'singleDefault'; // csj-Q: view是什么含义\n static readonly transformerConstructor = SequenceChartSpecTransformer;\n readonly transformerConstructor = SequenceChartSpecTransformer;\n readonly type: string = ChartTypeEnum.sequence;\n\n /**\n * @override\n * @description 主要是将link series关联的dot data放到link series中\n */\n protected _createSeries(constructor: ISeriesConstructor, specInfo: IModelSpecInfo) {\n if (!constructor) {\n return;\n }\n\n const { spec, ...others } = specInfo;\n\n if (spec.type === SeriesTypeEnum.link) {\n spec.dotSeriesSpec = this._spec.series[spec.dotSeriesIndex];\n }\n\n let region: IRegion | undefined;\n if (spec.regionId) {\n region = this.getRegionsInUserId(spec.regionId);\n }\n if (!region) {\n region = this.getRegionsInIndex(spec.regionIndex ? [spec.regionIndex] : undefined)[0];\n }\n if (!region) {\n return;\n }\n const series = new constructor(spec, {\n ...this._modelOption,\n ...others,\n region,\n specKey: 'series',\n globalScale: this._globalScale\n } as ISeriesOption);\n\n if (series) {\n series.created();\n this._series.push(series);\n region.addSeries(series);\n }\n }\n}\n\nexport const registerSequenceChart = () => {\n registerDotSeries();\n registerLinkSeries();\n Factory.registerChart(SequenceChart.type, SequenceChart);\n};\n","import type { ICartesianAxisCommonSpec } from '../../../component/axis';\nimport { CartesianChartSpecTransformer } from '../../cartesian';\nimport type { IHistogramChartSpec } from '../interface';\n\nexport class BaseHistogramChartSpecTransformer extends CartesianChartSpecTransformer {\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n spec.axes.forEach((axis: ICartesianAxisCommonSpec) => (axis.type = 'linear'));\n }\n\n protected _getDefaultSeriesSpec(spec: T): any {\n return {\n ...super._getDefaultSeriesSpec(spec),\n x2Field: spec?.x2Field,\n y2Field: spec?.y2Field,\n barMinHeight: spec?.barMinHeight\n };\n }\n}\n","import { BaseChart } from '../../base';\nimport type { IHistogramChartSpec } from '../interface';\nimport { BaseHistogramChartSpecTransformer } from './histogram-base-transformer';\n\nexport class BaseHistogramChart extends BaseChart {\n static readonly transformerConstructor = BaseHistogramChartSpecTransformer;\n readonly transformerConstructor = BaseHistogramChartSpecTransformer;\n protected _canStack: boolean = true;\n}\n","import { setDefaultCrosshairForCartesianChart } from '../util';\nimport { BaseHistogramChartSpecTransformer } from './base';\nimport type { IHistogramChartSpec } from './interface';\n\nexport class HistogramChartSpecTransformer<\n T extends IHistogramChartSpec = IHistogramChartSpec\n> extends BaseHistogramChartSpecTransformer {\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n setDefaultCrosshairForCartesianChart(spec);\n }\n}\n","import { registerBarSeries } from '../../series/bar/bar';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport { BaseHistogramChart } from './base/base';\nimport { Factory } from '../../core/factory';\nimport type { IHistogramChartSpec } from './interface';\nimport { HistogramChartSpecTransformer } from './histogram-transformer';\n\nexport class HistogramChart extends BaseHistogramChart {\n static readonly type: string = ChartTypeEnum.histogram;\n static readonly seriesType: string = SeriesTypeEnum.bar;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = HistogramChartSpecTransformer;\n readonly transformerConstructor = HistogramChartSpecTransformer;\n readonly type: string = ChartTypeEnum.histogram;\n readonly seriesType: string = SeriesTypeEnum.bar;\n}\n\nexport const registerHistogramChart = () => {\n registerBarSeries();\n Factory.registerChart(HistogramChart.type, HistogramChart);\n};\n","import { registerBar3dSeries } from '../../../series/bar/bar-3d';\nimport { SeriesTypeEnum } from '../../../series/interface/type';\nimport { ChartTypeEnum } from '../../interface/type';\nimport { BaseHistogramChart } from '../base/base';\nimport { Factory } from '../../../core/factory';\nimport type { IHistogram3dChartSpec } from '../interface';\nimport type { AdaptiveSpec } from '../../../typings';\nimport { HistogramChartSpecTransformer } from '../histogram-transformer';\n\nexport class Histogram3dChart extends BaseHistogramChart> {\n static readonly type: string = ChartTypeEnum.histogram3d;\n static readonly seriesType: string = SeriesTypeEnum.bar3d;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = HistogramChartSpecTransformer;\n readonly transformerConstructor = HistogramChartSpecTransformer;\n readonly type: string = ChartTypeEnum.histogram3d;\n readonly seriesType: string = SeriesTypeEnum.bar3d;\n}\nexport const registerHistogram3dChart = () => {\n registerBar3dSeries();\n Factory.registerChart(Histogram3dChart.type, Histogram3dChart);\n};\n","/**\n * 二分靠近框架,返回数组中第一个大于等于目标值的数的索引\n * @param arr 数组\n * @param compareFn 比较函数,返回(当前值-目标值)\n */\nexport const binaryFuzzySearch = (arr: T[], compareFn: (value: T) => number) => {\n return binaryFuzzySearchInNumberRange(0, arr.length, value => compareFn(arr[value]));\n};\n\n/**\n * 二分靠近框架,返回数字区间中第一个大于等于目标值的数字\n * @param x1 区间上界\n * @param x2 区间下界(不包含)\n * @param compareFn 比较函数,返回(当前值-目标值)\n */\nexport const binaryFuzzySearchInNumberRange = (x1: number, x2: number, compareFn: (value: number) => number) => {\n let left = x1;\n let right = x2;\n while (left < right) {\n const mid = Math.floor((left + right) / 2);\n if (compareFn(mid) >= 0) {\n right = mid; // 第一个大于等于目标值的数\n } else {\n left = mid + 1;\n }\n }\n return left;\n};\n","import type { Datum } from '@visactor/vgrammar-core';\nimport { degreeToRadian, isNil, isValid, isValidNumber } from '@visactor/vutils';\nimport {\n AttributeLevel,\n POLAR_END_RADIAN,\n POLAR_START_RADIAN,\n SEGMENT_FIELD_START,\n STACK_FIELD_END,\n STACK_FIELD_START\n} from '../../../constant';\nimport type { IMarkStyle } from '../../../mark/interface';\nimport type { ConvertToMarkStyleSpec, ICommonSpec } from '../../../typings';\nimport { valueInScaleRange } from '../../../util/scale';\nimport { PolarSeries } from '../polar';\nimport type { IContinuousTickData, IProgressLikeSeriesSpec } from './interface';\nimport type { IPolarAxis, IPolarAxisSpec } from '../../../component/axis';\nimport type { IGroupMark } from '../../../mark/group';\nimport { createArc, createRect } from '@visactor/vrender-core';\nimport type { SeriesMarkMap } from '../../interface';\nimport { progressLikeSeriesMark } from './constant';\nimport { binaryFuzzySearch } from '@visactor/vutils-extension';\n\nexport abstract class ProgressLikeSeries extends PolarSeries {\n static readonly mark: SeriesMarkMap = progressLikeSeriesMark;\n\n protected _supportStack: boolean = true;\n\n protected _startAngle: number;\n protected _endAngle: number;\n\n protected _arcGroupMark: IGroupMark | null = null;\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n const chartSpec = this._option.globalInstance.getChart()?.getSpec() as any;\n const startAngle = this._spec.startAngle ?? chartSpec?.startAngle;\n this._startAngle = isValid(startAngle) ? degreeToRadian(startAngle) : POLAR_START_RADIAN;\n const endAngle = this._spec.endAngle ?? chartSpec?.endAngle;\n this._endAngle = isValid(endAngle) ? degreeToRadian(endAngle) : POLAR_END_RADIAN;\n\n // 值信息给角度\n this.setAngleField(this._spec.valueField || this._spec.angleField);\n // 分类信息给半径\n this.setRadiusField(this._spec.categoryField || this._spec.radiusField);\n\n this._specAngleField = this._angleField.slice();\n this._specRadiusField = this._radiusField.slice();\n }\n\n getStackGroupFields(): string[] {\n return this._radiusField;\n }\n\n getStackValueField() {\n return this._angleField?.[0];\n }\n\n getGroupFields() {\n return this._angleField;\n }\n\n /** 重载 mark style 赋值前转换逻辑 */\n protected _convertMarkStyle(\n style: Partial | ConvertToMarkStyleSpec>\n ): Partial | ConvertToMarkStyleSpec> {\n const newStyle = super._convertMarkStyle(style) as unknown as any;\n\n const fillKey = 'fill';\n if (newStyle[fillKey]) {\n const value = style[fillKey] as unknown as any;\n // 为环形渐变色自动加 startAngle 和 endAngle\n if (value?.gradient === 'conical' && !isValid(value?.startAngle) && !isValid(value?.endAngle)) {\n newStyle[fillKey] = {\n ...value,\n startAngle: this._startAngle,\n endAngle: this._endAngle\n };\n }\n }\n\n return newStyle;\n }\n\n protected _getAngleValueStart = (datum: Datum) => {\n const axis = this._getAngleAxis();\n const { tickMask } = this._spec;\n\n if (tickMask?.forceAlign && this._isTickMaskVisible(axis)) {\n const field = this._stack ? STACK_FIELD_START : SEGMENT_FIELD_START;\n const originValue = datum[field];\n const subTickData = this._getAngleAxisSubTickData(axis);\n const step = subTickData[1].value - subTickData[0].value;\n const offsetAngle = degreeToRadian(tickMask.offsetAngle);\n\n let pos: number | undefined;\n if (isValid(originValue)) {\n // 找到第一个大于等于数据值的 tick\n const index = binaryFuzzySearch(subTickData, tick => tick.value - originValue);\n // 对齐\n const targetIndex =\n originValue > subTickData[index].value - step / 2\n ? Math.min(index, subTickData.length - 1)\n : index > 0\n ? index - 1\n : undefined;\n if (targetIndex !== undefined) {\n pos = this.angleAxisHelper.dataToPosition([\n subTickData[targetIndex].value - step / 2 // 确保占满整个 tick mask\n ]);\n }\n }\n if (isNil(pos)) {\n pos = this.angleAxisHelper.dataToPosition(\n [subTickData[0].value - step / 2] // 确保空出整个 tick mask\n );\n }\n return pos + offsetAngle;\n }\n return this._getAngleValueStartWithoutMask(datum);\n };\n\n protected _getAngleValueEnd = (datum: Datum) => {\n const axis = this._getAngleAxis();\n const { tickMask } = this._spec;\n\n if (tickMask?.forceAlign && this._isTickMaskVisible(axis)) {\n const field = this._stack ? STACK_FIELD_END : this._angleField[0];\n const originValue = datum[field];\n const subTickData = this._getAngleAxisSubTickData(axis);\n const step = subTickData[1].value - subTickData[0].value;\n const offsetAngle = degreeToRadian(tickMask.offsetAngle);\n\n // 找到第一个大于等于数据值的 tick\n const index = binaryFuzzySearch(subTickData, tick => tick.value - originValue);\n // 对齐\n const targetIndex =\n originValue > subTickData[index].value - step / 2\n ? Math.min(index, subTickData.length - 1)\n : index > 0\n ? index - 1\n : undefined;\n let pos: number;\n if (targetIndex !== undefined) {\n pos = this.angleAxisHelper.dataToPosition([\n subTickData[targetIndex].value + step / 2 // 确保占满整个 tick mask\n ]);\n } else {\n pos = this.angleAxisHelper.dataToPosition([\n subTickData[0].value - step / 2 // 确保空出整个 tick mask\n ]);\n }\n return pos + offsetAngle;\n }\n return this._getAngleValueEndWithoutMask(datum);\n };\n\n protected _getAngleValueStartWithoutMask(datum: Datum) {\n if (this._stack) {\n const value = valueInScaleRange(\n this.angleAxisHelper.dataToPosition([datum[STACK_FIELD_START]]),\n this.angleAxisHelper.getScale(0)\n );\n if (isValidNumber(value)) {\n return value;\n }\n }\n return this._startAngle;\n }\n\n protected _getAngleValueEndWithoutMask(datum: Datum) {\n if (this._stack) {\n const value = valueInScaleRange(\n this.angleAxisHelper.dataToPosition([datum[STACK_FIELD_END]]),\n this.angleAxisHelper.getScale(0)\n );\n if (isValidNumber(value)) {\n return value;\n }\n }\n return this.angleAxisHelper.dataToPosition([datum[this._angleField[0]]]);\n }\n\n getDimensionField(): string[] {\n return this._specRadiusField;\n }\n\n getMeasureField(): string[] {\n return this._specAngleField;\n }\n\n initMark(): void {\n this._initArcGroupMark();\n }\n\n initMarkStyle(): void {\n this._initArcGroupMarkStyle();\n }\n\n protected _initArcGroupMark() {\n // FIXME: disable group mark layout to prevent reevaluate after layout end\n this._arcGroupMark = this._createMark(ProgressLikeSeries.mark.group, {\n skipBeforeLayouted: false\n }) as IGroupMark;\n return this._arcGroupMark;\n }\n\n protected _initArcGroupMarkStyle() {\n const groupMark = this._arcGroupMark;\n groupMark.setZIndex(this.layoutZIndex);\n groupMark.created();\n this.setMarkStyle(\n groupMark,\n {\n clip: true,\n x: 0,\n y: 0,\n path: () => {\n const axis = this._getAngleAxis();\n if (this._isTickMaskVisible(axis)) {\n const { tickMask } = this._spec;\n const { angle, offsetAngle, style = {} } = tickMask;\n const subTickData = this._getAngleAxisSubTickData(axis);\n const { x, y } = this.angleAxisHelper.center();\n const radius = this._computeLayoutRadius();\n const markStyle = style as any;\n return subTickData.map(({ value }) => {\n const pos = this.angleAxisHelper.dataToPosition([value]) + degreeToRadian(offsetAngle);\n const angleUnit = degreeToRadian(angle) / 2;\n return createArc({\n ...markStyle,\n x,\n y,\n startAngle: pos - angleUnit,\n endAngle: pos + angleUnit,\n innerRadius: radius * this._innerRadius,\n outerRadius: radius * this._outerRadius,\n fill: true\n });\n });\n }\n const { width, height } = this.getLayoutRect();\n return [\n createRect({\n width,\n height,\n fill: true\n })\n ];\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n this._arcGroupMark.setInteractive(false);\n }\n\n protected _getAngleAxis() {\n if (!this.angleAxisHelper) {\n return undefined;\n }\n const angleAxisId = this.angleAxisHelper.getAxisId();\n const angleAxis = this._option\n .getChart()\n .getAllComponents()\n .find(component => component.id === angleAxisId) as IPolarAxis;\n return angleAxis;\n }\n\n protected _getAngleAxisTickData(angleAxis?: IPolarAxis): IContinuousTickData[] {\n const tickData = angleAxis?.getTickData()?.getLatestData();\n return tickData;\n }\n\n protected _isTickMaskVisible(angleAxis?: IPolarAxis) {\n const tickData = this._getAngleAxisTickData(angleAxis);\n const { tickMask } = this._spec;\n return tickMask && tickMask.visible !== false && tickData?.length > 1;\n }\n\n protected _getAngleAxisSubTickData(angleAxis: IPolarAxis) {\n const tickData = this._getAngleAxisTickData(angleAxis);\n // TODO: 这块照搬了 vrender-components 的计算方法,需要抽出这块的公用逻辑\n const subTickData: IContinuousTickData[] = [];\n const { subTick = {}, tick = {} } = (angleAxis?.getSpec() ?? {}) as IPolarAxisSpec;\n const { tickCount: subTickCount = 4 } = subTick;\n const { alignWithLabel } = tick;\n // 刻度线的数量大于 2 时,才绘制子刻度\n if (tickData?.length >= 2) {\n const tickSegment = tickData[1].value - tickData[0].value;\n for (let i = 0; i < tickData.length - 1; i++) {\n const pre = tickData[i];\n const next = tickData[i + 1];\n subTickData.push(pre);\n for (let j = 0; j < subTickCount; j++) {\n const percent = (j + 1) / (subTickCount + 1);\n const value =\n (1 - percent) * pre.value + percent * (next ? next.value : alignWithLabel ? 1 : pre.value + tickSegment);\n subTickData.push({\n value\n });\n }\n }\n subTickData.push(tickData[tickData.length - 1]);\n return subTickData;\n }\n return tickData;\n }\n}\n","import { Factory } from './../core/factory';\nimport { isFunction, isValid } from '@visactor/vutils';\nimport type { DataView } from '@visactor/vdataset';\nimport type { StateValueType } from '../typings/spec';\nimport type { ConvertToMarkStyleSpec, IProgressArcMarkSpec } from '../typings/visual';\nimport type { IMarkRaw, IMarkStateStyle, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { BaseArcMark } from './arc';\nimport type { IAttributeOpt } from '../compile/mark/interface';\nimport { registerVGrammarArcAnimation } from '../animation/config';\nimport { registerArcGraphic } from '@visactor/vgrammar-core';\n\nexport type IProgressArcMark = IMarkRaw;\n\nexport class ProgressArcMark extends BaseArcMark implements IProgressArcMark {\n static readonly type = MarkTypeEnum.arc;\n static readonly constructorType = MarkTypeEnum.progressArc;\n\n protected _cacheStateStyle: IMarkStateStyle = {};\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n innerPadding: 0,\n outerPadding: 0\n };\n return defaultStyle;\n }\n\n protected _filterStyle(\n style: Partial>,\n state: StateValueType,\n level: number,\n stateStyle = this.stateStyle\n ): Partial> | Partial> {\n // 记录 radius 缓存\n if (isValid(style.innerRadius)) {\n this.setAttribute(\n 'innerRadius',\n this._styleConvert<'innerRadius'>(style.innerRadius),\n state,\n level,\n this._cacheStateStyle\n );\n }\n if (isValid(style.outerRadius)) {\n this.setAttribute(\n 'outerRadius',\n this._styleConvert<'innerRadius'>(style.outerRadius),\n state,\n level,\n this._cacheStateStyle\n );\n }\n\n const innerPadding = style.innerPadding ?? stateStyle[state]?.innerPadding?.style;\n const outerPadding = style.outerPadding ?? stateStyle[state]?.outerPadding?.style;\n const innerRadius =\n style.innerRadius ?? this._cacheStateStyle[state]?.innerRadius?.style ?? stateStyle[state]?.innerRadius?.style;\n const outerRadius =\n style.outerRadius ?? this._cacheStateStyle[state]?.outerRadius?.style ?? stateStyle[state]?.outerRadius?.style;\n\n if (innerRadius === 0 && outerRadius === 0) {\n return style;\n }\n\n // 情况一:本次改动了 padding\n const paddingModified =\n (isValid(style.innerPadding) && isValid(innerRadius)) || (isValid(style.outerPadding) && isValid(outerRadius));\n\n // 情况二:本次改动了 radius,但是 padding 已经提前设置且不为 0\n const radiusModified = (isValid(style.innerRadius) && innerPadding) || (isValid(style.outerRadius) && outerPadding);\n\n // 如果触发任意一种情况,则重新计算 radius\n if (paddingModified || radiusModified) {\n const newStyle = Object.assign({}, style);\n\n if (innerPadding && isValid(innerRadius)) {\n // 将 innerPadding 应用到 innerRadius\n if (isFunction(innerRadius)) {\n newStyle.innerRadius = (item: any, ctx: any, opt?: IAttributeOpt, source?: DataView) => {\n const result = innerRadius(item, ctx, opt, source) as number;\n const padding = isFunction(innerPadding)\n ? (innerPadding(item, ctx, opt, source) as number)\n : (innerPadding as number);\n return result + padding;\n };\n } else {\n if (isFunction(innerPadding)) {\n newStyle.innerRadius = (item: any, ctx: any, opt?: IAttributeOpt, source?: DataView) => {\n const padding = innerPadding(item, ctx, opt, source) as number;\n return (innerRadius as number) + padding;\n };\n } else {\n newStyle.innerRadius = (innerRadius as number) + (innerPadding as number);\n }\n }\n }\n\n if (outerPadding && isValid(outerRadius)) {\n // 将 outerPadding 应用到 outerRadius\n if (isFunction(outerRadius)) {\n newStyle.outerRadius = (item: any, ctx: any, opt?: IAttributeOpt, source?: DataView) => {\n const result = outerRadius(item, ctx, opt, source) as number;\n const padding = isFunction(outerPadding)\n ? (outerPadding(item, ctx, opt, source) as number)\n : (outerPadding as number);\n return result - padding;\n };\n } else {\n if (isFunction(outerPadding)) {\n newStyle.outerRadius = (item: any, ctx: any, opt?: IAttributeOpt, source?: DataView) => {\n const padding = outerPadding(item, ctx, opt, source) as number;\n return (outerRadius as number) - padding;\n };\n } else {\n newStyle.outerRadius = (outerRadius as number) - (outerPadding as number);\n }\n }\n }\n\n return newStyle;\n }\n\n return style;\n }\n}\n\nexport const registerProgressArcMark = () => {\n registerArcGraphic();\n registerVGrammarArcAnimation();\n Factory.registerMark(ProgressArcMark.constructorType, ProgressArcMark);\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../../core/factory';\n\nexport type ProgressLikeAppearPreset = 'grow' | 'fadeIn';\n\nexport interface IProgressLikeAnimationParams {\n startAngle?: number;\n}\n\nconst Appear_Grow = (params: IProgressLikeAnimationParams): IAnimationTypeConfig => ({\n type: 'growAngleIn',\n options: {\n overall: params.startAngle\n }\n});\n\nconst Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nexport function progressLikePresetAnimation(params: IProgressLikeAnimationParams, preset: ProgressLikeAppearPreset) {\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n default:\n return Appear_Grow(params);\n }\n}\n\nexport const registerProgressLikeAnimation = () => {\n Factory.registerAnimation(\n 'circularProgress',\n (params: IProgressLikeAnimationParams, preset: ProgressLikeAppearPreset) => ({\n appear: progressLikePresetAnimation(params, preset),\n enter: { type: 'growAngleIn' },\n disappear: { type: 'growAngleOut' }\n })\n );\n};\n","/* eslint-disable no-duplicate-imports */\nimport type { BandScale } from '@visactor/vscale';\nimport type { IArcMark } from '../../../mark/arc';\nimport type { Maybe, Datum } from '../../../typings';\nimport { isValidNumber } from '@visactor/vutils';\nimport type { SeriesMarkMap } from '../../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../../interface/type';\nimport { animationConfig, userAnimationConfig } from '../../../animation/utils';\nimport type { ICircularProgressSeriesSpec, ICircularProgressSeriesTheme } from './interface';\nimport { ProgressLikeSeries } from '../../polar/progress-like/progress-like';\nimport type { IStateAnimateSpec } from '../../../animation/spec';\nimport type { IProgressArcMark } from '../../../mark/progress-arc';\nimport { ArcMark, registerArcMark } from '../../../mark/arc';\nimport { ProgressArcMark, registerProgressArcMark } from '../../../mark/progress-arc';\nimport { circularProgressSeriesMark } from './constant';\nimport { STACK_FIELD_END, STACK_FIELD_START, AttributeLevel } from '../../../constant';\nimport { Factory } from '../../../core/factory';\nimport { registerProgressLikeAnimation } from '../../polar/progress-like';\nimport { registerFadeInOutAnimation } from '../../../animation/config';\nimport type { IMark } from '../../../mark/interface';\n\nexport class CircularProgressSeries<\n T extends ICircularProgressSeriesSpec = ICircularProgressSeriesSpec\n> extends ProgressLikeSeries {\n static readonly type: string = SeriesTypeEnum.circularProgress;\n type = SeriesTypeEnum.circularProgress;\n\n static readonly mark: SeriesMarkMap = circularProgressSeriesMark;\n\n private _progressMark: IProgressArcMark | null = null;\n private _trackMark: IProgressArcMark | null = null;\n\n getStackGroupFields(): string[] {\n return this.getGroupFields();\n }\n\n getGroupFields() {\n return this._radiusField;\n }\n\n initMark(): void {\n super.initMark();\n this._initTrackMark();\n this._initProgressMark();\n }\n\n initMarkStyle(): void {\n super.initMarkStyle();\n this._initTrackMarkStyle();\n this._initProgressMarkStyle();\n }\n\n private _initProgressMark() {\n this._progressMark = this._createMark(CircularProgressSeries.mark.progress, {\n parent: this._arcGroupMark,\n isSeriesMark: true,\n customShape: this._spec.progress?.customShape\n }) as IArcMark;\n return this._progressMark;\n }\n\n private _initProgressMarkStyle() {\n const progressMark = this._progressMark;\n if (progressMark) {\n this.setMarkStyle(\n progressMark,\n {\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y,\n startAngle: this._getAngleValueStart,\n endAngle: this._getAngleValueEnd,\n innerRadius: this._getRadiusValueStart,\n outerRadius: this._getRadiusValueEnd,\n cap: this._spec.roundCap ?? false,\n boundsMode: 'imprecise',\n cornerRadius: this._spec.cornerRadius,\n fill: this.getColorAttribute(),\n zIndex: 200,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // forceShowCap 是内部属性,不在接口中暴露\n forceShowCap: true\n },\n 'normal',\n AttributeLevel.Series\n );\n this._trigger.registerMark(progressMark);\n }\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._progressMark && this._tooltipHelper.activeTriggerSet.mark.add(this._progressMark);\n }\n\n private _initTrackMark() {\n this._trackMark = this._createMark(CircularProgressSeries.mark.track, {\n parent: this._arcGroupMark,\n customShape: this._spec.track?.customShape\n }) as IArcMark;\n return this._trackMark;\n }\n\n private _initTrackMarkStyle() {\n const trackMark = this._trackMark;\n if (trackMark) {\n this.setMarkStyle(\n trackMark,\n {\n visible: (datum: Datum) => {\n const scale = this.angleAxisHelper.getScale(0);\n const range = scale.range();\n const min = Math.min(range[0], range[range.length - 1]);\n const startValue = this._getAngleValueStartWithoutMask(datum);\n // 堆叠情况只显示第一组的背景\n return Math.abs(startValue - min) <= 1e-14;\n },\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y,\n startAngle: () => {\n const fieldName = this._stack ? STACK_FIELD_START : this._angleField[0];\n const scale = this.angleAxisHelper.getScale(0);\n const domain = scale.domain();\n return this._getAngleValueStart({ [fieldName]: domain[0] });\n },\n endAngle: () => {\n const fieldName = this._stack ? STACK_FIELD_END : this._angleField[0];\n const scale = this.angleAxisHelper.getScale(0);\n const domain = scale.domain();\n return this._getAngleValueEnd({ [fieldName]: domain[domain.length - 1] });\n },\n innerRadius: this._getRadiusValueStart,\n outerRadius: this._getRadiusValueEnd,\n cornerRadius: this._spec.cornerRadius,\n fill: this.getColorAttribute(),\n zIndex: 100\n },\n 'normal',\n AttributeLevel.Series\n );\n this._trigger.registerMark(trackMark);\n }\n }\n\n protected _getRadiusValueStart = (datum: Datum) => {\n if (this.getGroupFields().length > 1) {\n const value = this.radiusAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this.getGroupFields()));\n if (isValidNumber(value)) {\n return value;\n }\n }\n return this.radiusAxisHelper.dataToPosition([datum[this._radiusField[0]]]);\n };\n\n protected _getRadiusValueEnd = (datum: Datum) => {\n if (this.getGroupFields().length > 1) {\n const value =\n this.radiusAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this.getGroupFields())) +\n this.radiusAxisHelper.getBandwidth?.(this._groups ? this._groups.fields.length - 1 : 0);\n if (isValidNumber(value)) {\n return value;\n }\n }\n return (\n this.radiusAxisHelper.dataToPosition([datum[this._radiusField[0]]]) +\n (this.radiusAxisHelper.getScale(0) as BandScale).step()\n );\n };\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n\n this._progressMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('circularProgress')?.({ startAngle: this._startAngle }, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.progress, this._spec, this._markAttributeContext)\n )\n );\n\n this._trackMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.track, this._spec, this._markAttributeContext)\n )\n );\n }\n\n getActiveMarks(): IMark[] {\n return [this._progressMark];\n }\n}\n\nexport const registerCircularProgressSeries = () => {\n registerProgressArcMark();\n registerArcMark();\n registerProgressLikeAnimation();\n registerFadeInOutAnimation();\n Factory.registerSeries(CircularProgressSeries.type, CircularProgressSeries);\n};\n","import { isNil } from '@visactor/vutils';\nimport type { IPolarAxisSpec, IPolarBandAxisSpec, IPolarLinearAxisSpec } from '../../../component';\nimport type { IPolarChartSpec } from '../interface';\nimport { PolarChartSpecTransformer } from '../polar-transformer';\nimport { getLinearAxisSpecDomain } from '../../../component/axis/util';\nimport { mergeSpec } from '../../../util';\n\nexport class ProgressLikeChartSpecTransformer extends PolarChartSpecTransformer {\n protected needAxes(): boolean {\n return false;\n }\n\n protected _getDefaultSeriesSpec(spec: any): any {\n const series: any = {\n ...super._getDefaultSeriesSpec(spec),\n\n seriesField: spec.seriesField,\n categoryField: spec.categoryField || spec.radiusField,\n valueField: spec.valueField || spec.angleField,\n\n startAngle: spec.startAngle,\n endAngle: spec.endAngle,\n\n radius: spec.radius,\n innerRadius: spec.innerRadius,\n\n centerX: spec.centerX,\n centerY: spec.centerY\n };\n return series;\n }\n\n protected _transformProgressAxisSpec(\n spec: T,\n angleAxisDefaultSpec: IPolarAxisSpec,\n radiusAxisDefaultSpec: IPolarAxisSpec,\n angleAxisAppendSpec?: Partial,\n radiusAxisAppendSpec?: Partial\n ): void {\n if (!spec.axes) {\n spec.axes = [];\n }\n // 找到用户配的角度轴和半径轴\n let radiusAxis: IPolarBandAxisSpec = (spec.axes ?? []).find((axis: IPolarAxisSpec) => axis.orient === 'radius');\n let angleAxis: IPolarLinearAxisSpec = (spec.axes ?? []).find((axis: IPolarAxisSpec) => axis.orient === 'angle');\n // 如果没有找到对应的轴,则自动补充默认配置\n if (!angleAxis) {\n angleAxis = angleAxisDefaultSpec;\n spec.axes.push(angleAxis);\n }\n if (!radiusAxis) {\n radiusAxis = radiusAxisDefaultSpec;\n spec.axes.push(radiusAxis);\n }\n\n // 在以上配置的基础上,对轴 spec 进行统一修改\n\n // 自动补充缺失的配置\n if (isNil(angleAxis.type)) {\n angleAxis.type = 'linear';\n }\n if (isNil(radiusAxis.type)) {\n radiusAxis.type = 'band';\n }\n const domain = getLinearAxisSpecDomain(angleAxis, { min: 0, max: 1 });\n if (isNil(angleAxis.min)) {\n angleAxis.min = domain.min;\n }\n if (isNil(angleAxis.max)) {\n angleAxis.max = domain.max;\n }\n\n // merge 额外的配置\n if (angleAxisAppendSpec) {\n Object.assign(angleAxis, mergeSpec({}, angleAxisAppendSpec, angleAxis));\n }\n if (radiusAxisAppendSpec) {\n Object.assign(radiusAxis, mergeSpec({}, radiusAxisAppendSpec, radiusAxis));\n }\n }\n}\n","import type { AdaptiveSpec } from '../../../typings';\nimport { ProgressLikeChartSpecTransformer } from '../../polar';\nimport type { ICircularProgressChartSpec } from './interface';\n\nexport class CircularProgressChartSpecTransformer<\n T extends ICircularProgressChartSpec = ICircularProgressChartSpec\n> extends ProgressLikeChartSpecTransformer> {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series = super._getDefaultSeriesSpec(spec);\n return {\n ...series,\n\n cornerRadius: spec.cornerRadius ?? 0,\n roundCap: spec.roundCap ?? false,\n\n progress: spec.progress,\n track: spec.track,\n\n tickMask: spec.tickMask\n };\n }\n\n transformSpec(spec: AdaptiveSpec): void {\n super.transformSpec(spec);\n this._transformProgressAxisSpec(\n spec,\n {\n orient: 'angle',\n visible: false\n },\n {\n orient: 'radius',\n visible: false\n }\n );\n }\n}\n","import { SeriesTypeEnum } from '../../../series/interface/type';\nimport { ChartTypeEnum } from '../../interface';\nimport { registerCircularProgressSeries } from '../../../series/progress/circular';\nimport { Factory } from '../../../core/factory';\nimport type { ICircularProgressChartSpec } from './interface';\nimport { CircularProgressChartSpecTransformer } from './circular-progress-transformer';\nimport type { AdaptiveSpec } from '../../../typings';\nimport { BaseChart } from '../../base';\n\nexport class CircularProgressChart extends BaseChart<\n AdaptiveSpec\n> {\n static readonly type: string = ChartTypeEnum.circularProgress;\n static readonly seriesType: string = SeriesTypeEnum.circularProgress;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = CircularProgressChartSpecTransformer;\n readonly transformerConstructor = CircularProgressChartSpecTransformer;\n readonly type: string = ChartTypeEnum.circularProgress;\n readonly seriesType: string = SeriesTypeEnum.circularProgress;\n protected _canStack: boolean = true;\n}\n\nexport const registerCircularProgressChart = () => {\n registerCircularProgressSeries();\n Factory.registerChart(CircularProgressChart.type, CircularProgressChart);\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core';\n\nexport type ProgressLikeAppearPreset = 'grow' | 'fadeIn';\n\nexport interface IProgressLikeAnimationParams {\n startAngle?: number;\n}\n\nconst Appear_Grow = (params: IProgressLikeAnimationParams): IAnimationTypeConfig => ({\n channel: {\n angle: {\n from: params.startAngle + Math.PI / 2\n }\n }\n});\n\nconst Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nexport function gaugePointerPresetAnimation(params: IProgressLikeAnimationParams, preset: ProgressLikeAppearPreset) {\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n default:\n return Appear_Grow(params);\n }\n}\n\nexport const registerGaugePointerAnimation = () => {\n Factory.registerAnimation(\n 'gaugePointer',\n (params: IProgressLikeAnimationParams, preset: ProgressLikeAppearPreset) => {\n const animation = gaugePointerPresetAnimation(params, preset);\n return {\n appear: animation,\n enter: animation,\n disappear: { type: 'fadeOut' }\n };\n }\n );\n};\n","/* eslint-disable no-duplicate-imports */\nimport type { IMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport { isValid } from '@visactor/vutils';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IGaugePointerSeriesSpec, IGaugePointerSeriesTheme, PinMarkSpec, PointerMarkSpec } from './interface';\nimport type { Datum, Maybe } from '../../typings';\nimport type { IPathMark } from '../../mark/path';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { ProgressLikeSeries, registerProgressLikeAnimation } from '../polar/progress-like';\nimport type { IRectMark } from '../../mark/rect';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { PathMark, registerPathMark } from '../../mark/path';\nimport { RectMark, registerRectMark } from '../../mark/rect';\nimport { gaugePointerSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { registerGaugePointerAnimation } from './animation';\n\nexport class GaugePointerSeries<\n T extends IGaugePointerSeriesSpec = IGaugePointerSeriesSpec\n> extends ProgressLikeSeries {\n static readonly type: string = SeriesTypeEnum.gaugePointer;\n type = SeriesTypeEnum.gaugePointer;\n\n static readonly mark: SeriesMarkMap = gaugePointerSeriesMark;\n\n private _pinMark: IPathMark | null = null;\n private _pointerMark: IPathMark | IRectMark | null = null;\n private _pinBackgroundMark: IPathMark | null = null;\n protected _stack: boolean = false;\n\n protected _pointerType: MarkTypeEnum;\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n // 半径信息\n this.setRadiusField(this._spec.radiusField);\n\n this._pointerType = this._spec.pointer?.type === 'rect' ? MarkTypeEnum.rect : MarkTypeEnum.path;\n }\n\n initMark(): void {\n this._pinBackgroundMark = this._createMark(GaugePointerSeries.mark.pinBackground) as IPathMark;\n this._pointerMark = this._createMark(\n {\n ...GaugePointerSeries.mark.pointer,\n type: this._pointerType\n },\n {\n isSeriesMark: true\n }\n ) as IPathMark;\n this._pinMark = this._createMark(GaugePointerSeries.mark.pin) as IPathMark;\n }\n\n initMarkStyle(): void {\n this.initPinBackgroundMarkStyle();\n this.initPointerMarkStyle();\n this.initPinMarkStyle();\n }\n\n initGroups() {\n // do nothing\n }\n\n private initPointerMarkStyle() {\n const pointerMark = this._pointerMark;\n const pointerSpec = this._spec.pointer;\n if (pointerMark) {\n this.setMarkStyle(pointerMark, {\n x: (datum: Datum) => {\n const { x } = this._getPointerAnchor(datum, pointerSpec);\n const dx = this._getPointerWidth() * (pointerSpec?.center?.[0] ?? 0);\n return x - dx;\n },\n y: (datum: Datum) => {\n const { y } = this._getPointerAnchor(datum, pointerSpec);\n const dy = this._getPointerHeight(datum) * (pointerSpec?.center?.[1] ?? 0);\n return y - dy;\n },\n anchor: (datum: Datum) => {\n const { x, y } = this._getPointerAnchor(datum, pointerSpec);\n return [x, y];\n },\n fill: this.getColorAttribute(),\n zIndex: 200\n });\n if (this._pointerType === MarkTypeEnum.path) {\n this.setMarkStyle(pointerMark as IPathMark, {\n scaleX: this._getPointerWidth.bind(this),\n scaleY: this._getPointerHeight.bind(this),\n angle: (datum: Datum) => this._getPointerAngle(datum) + Math.PI / 2\n });\n } else {\n this.setMarkStyle(pointerMark as IRectMark, {\n width: this._getPointerWidth.bind(this),\n height: this._getPointerHeight.bind(this),\n angle: (datum: Datum) => this._getPointerAngle(datum) - Math.PI / 2\n });\n }\n this._trigger.registerMark(pointerMark);\n }\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._pointerMark && this._tooltipHelper.activeTriggerSet.mark.add(this._pointerMark);\n }\n\n protected _getPointerAnchor(datum: Datum, markSpec: PinMarkSpec | PointerMarkSpec) {\n if (markSpec.isOnCenter ?? true) {\n return this.angleAxisHelper.center();\n }\n return this.radiusAxisHelper.coordToPoint({\n radius: this._innerRadius * this._computeLayoutRadius(),\n angle: this.angleAxisHelper.dataToPosition([datum[this._angleField[0]]])\n });\n }\n\n protected _getPointerWidth() {\n return this._spec.pointer.width * this._computeLayoutRadius();\n }\n\n protected _getPointerHeight(datum: Datum) {\n const pointerSpec = this._spec.pointer;\n const radiusField = this._radiusField[0];\n if (isValid(this.radiusAxisHelper) && isValid(radiusField)) {\n return (\n this.radiusAxisHelper.dataToPosition([datum[radiusField]]) -\n (pointerSpec?.innerPadding ?? 0) -\n (pointerSpec?.outerPadding ?? 10)\n );\n }\n return pointerSpec.height * this._computeLayoutRadius();\n }\n\n protected _getPointerAngle(datum: Datum) {\n return this.angleAxisHelper.dataToPosition([datum[this._angleField[0]]]);\n }\n\n protected _getRotatedPointerCenterOffset(datum: Datum) {\n const pointerSpec = this._spec.pointer;\n const x = this._getPointerWidth() * (pointerSpec?.center?.[0] ?? 0);\n const y = -this._getPointerHeight(datum) * (pointerSpec?.center?.[1] ?? 0);\n const angle = this._getPointerAngle(datum) - Math.PI / 2;\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const x1 = x * cos + y * sin;\n const y1 = y * cos - x * sin;\n return {\n x: x1,\n y: -y1\n };\n }\n\n private initPinBackgroundMarkStyle() {\n const pinBackgroundMark = this._pinBackgroundMark;\n const pinBackgroundSpec = this._spec.pinBackground;\n if (pinBackgroundMark) {\n this.setMarkStyle(pinBackgroundMark, {\n x: (datum: Datum) => this._getPointerAnchor(datum, pinBackgroundSpec).x,\n y: (datum: Datum) => this._getPointerAnchor(datum, pinBackgroundSpec).y,\n scaleX: () => pinBackgroundSpec.width * this._computeLayoutRadius(),\n scaleY: () => pinBackgroundSpec.height * this._computeLayoutRadius(),\n fill: this.getColorAttribute(),\n zIndex: 100\n });\n }\n }\n\n private initPinMarkStyle() {\n const pinMark = this._pinMark;\n const pinSpec = this._spec.pin;\n if (pinMark) {\n this.setMarkStyle(pinMark, {\n x: (datum: Datum) => this._getPointerAnchor(datum, pinSpec).x,\n y: (datum: Datum) => this._getPointerAnchor(datum, pinSpec).y,\n scaleX: () => pinSpec.width * this._computeLayoutRadius(),\n scaleY: () => pinSpec.height * this._computeLayoutRadius(),\n fill: this.getColorAttribute(),\n zIndex: 300\n });\n }\n }\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n\n this._pointerMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('gaugePointer')?.(\n {\n startAngle: this._startAngle\n },\n appearPreset\n ),\n userAnimationConfig(SeriesMarkNameEnum.pointer, this._spec, this._markAttributeContext)\n )\n );\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getActiveMarks(): IMark[] {\n return [];\n }\n}\n\nexport const registerGaugePointerSeries = () => {\n registerPathMark();\n registerRectMark();\n registerGaugePointerAnimation();\n Factory.registerSeries(GaugePointerSeries.type, GaugePointerSeries);\n};\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IGaugeSeriesSpec, IGaugeSeriesTheme } from './interface';\n\nexport class GaugeSeriesSpecTransformer<\n T extends IGaugeSeriesSpec = IGaugeSeriesSpec,\n K extends IGaugeSeriesTheme = IGaugeSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.segment);\n }\n}\n","import type { SeriesMarkMap } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IGaugeSeriesSpec, IGaugeSeriesTheme } from './interface';\nimport { ProgressLikeSeries } from '../polar/progress-like/progress-like';\nimport type { IProgressArcMark } from '../../mark/progress-arc';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { SEGMENT_FIELD_END, SEGMENT_FIELD_START } from '../../constant';\nimport type { Datum } from '@visactor/vgrammar-core';\nimport type { Maybe } from '../../typings';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\n// eslint-disable-next-line no-duplicate-imports\nimport { ProgressArcMark, registerProgressArcMark } from '../../mark/progress-arc';\nimport { gaugeSeriesMark } from './constant';\nimport { degreeToRadian, isValid } from '@visactor/vutils';\nimport { Factory } from '../../core/factory';\nimport { registerProgressLikeAnimation } from '../polar/progress-like';\nimport type { IMark } from '../../mark/interface';\nimport { GaugeSeriesSpecTransformer } from './gauge-transformer';\n\nexport class GaugeSeries extends ProgressLikeSeries {\n static readonly type: string = SeriesTypeEnum.gauge;\n type = SeriesTypeEnum.gauge;\n\n static readonly mark: SeriesMarkMap = gaugeSeriesMark;\n static readonly transformerConstructor = GaugeSeriesSpecTransformer as any;\n readonly transformerConstructor = GaugeSeriesSpecTransformer;\n\n private _segmentMark: IProgressArcMark | null = null;\n private _trackMark: IProgressArcMark | null = null;\n\n protected _stack: boolean = false;\n protected _padAngle: number = 0;\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this._padAngle = degreeToRadian(this._spec.padAngle ?? 0);\n }\n\n initData(): void {\n super.initData();\n\n /**\n * @description 将数据排序并调整图元的起始点为上一个数据的终点,但是终点维持不变\n */\n const spiltSegment = (data: Datum[], op: string) => {\n // 数据处理\n const dataCollect = data.slice();\n dataCollect.sort((a, b) => a[this._angleField[0]] - b[this._angleField[0]]);\n dataCollect.forEach((datum: any, i) => {\n datum[SEGMENT_FIELD_END] = datum[this._angleField[0]];\n if (i > 0) {\n datum[SEGMENT_FIELD_START] = dataCollect[i - 1][SEGMENT_FIELD_END];\n } else {\n datum[SEGMENT_FIELD_START] = undefined;\n }\n });\n return dataCollect;\n };\n\n registerDataSetInstanceTransform(this._option.dataSet, 'spiltSegment', spiltSegment);\n this.getViewData()?.transform(\n {\n type: 'spiltSegment'\n },\n false\n );\n }\n\n initMark(): void {\n super.initMark();\n this._trackMark = this._createMark(GaugeSeries.mark.track, {\n parent: this._arcGroupMark,\n dataView: false\n }) as IProgressArcMark;\n this._segmentMark = this._createMark(GaugeSeries.mark.segment, {\n parent: this._arcGroupMark,\n isSeriesMark: true\n }) as IProgressArcMark;\n }\n\n initMarkStyle(): void {\n super.initMarkStyle();\n this.initTrackMarkStyle();\n this.initSegmentMarkStyle();\n }\n\n private initSegmentMarkStyle() {\n const segmentMark = this._segmentMark;\n if (segmentMark) {\n this.setMarkStyle(segmentMark, {\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y,\n startAngle: this._getAngleValueStart.bind(this),\n endAngle: this._getAngleValueEnd.bind(this),\n innerRadius: () => this._computeLayoutRadius() * (this._spec.innerRadius ?? 0),\n outerRadius: () => this._computeLayoutRadius() * (this._spec.radius ?? this._spec.outerRadius ?? 1), // 需要优先兼容this._spec.radius\n cap: this._spec.roundCap ?? false,\n boundsMode: 'imprecise',\n cornerRadius: this._spec.cornerRadius,\n fill: this.getColorAttribute(),\n zIndex: 200,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // forceShowCap 是内部属性,不在接口中暴露\n forceShowCap: true\n });\n this._trigger.registerMark(segmentMark);\n }\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._segmentMark && this._tooltipHelper.activeTriggerSet.mark.add(this._segmentMark);\n }\n\n private initTrackMarkStyle() {\n const trackMark = this._trackMark;\n if (trackMark) {\n this.setMarkStyle(trackMark, {\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y,\n startAngle: this._startAngle,\n endAngle: this._endAngle,\n innerRadius: () => this._computeLayoutRadius() * (this._spec.innerRadius ?? 0),\n outerRadius: () => this._computeLayoutRadius() * (this._spec.radius ?? this._spec.outerRadius ?? 1), // 需要优先兼容this._spec.radius\n cap: this._spec.roundCap ?? false,\n boundsMode: 'imprecise',\n cornerRadius: this._spec.cornerRadius,\n zIndex: 100\n });\n this._trigger.registerMark(trackMark);\n }\n }\n\n protected _getAngleValueStartWithoutMask(datum: Datum) {\n const startAngle = this._getAngleValueStartWithoutPadAngle(datum);\n const endAngle = this._getAngleValueEndWithoutPadAngle(datum);\n return Math.min(startAngle + this._padAngle / 2, (startAngle + endAngle) / 2);\n }\n\n protected _getAngleValueEndWithoutMask(datum: Datum) {\n const startAngle = this._getAngleValueStartWithoutPadAngle(datum);\n const endAngle = this._getAngleValueEndWithoutPadAngle(datum);\n return Math.max(endAngle - this._padAngle / 2, (startAngle + endAngle) / 2);\n }\n\n protected _getAngleValueStartWithoutPadAngle(datum: Datum) {\n return isValid(datum[SEGMENT_FIELD_START])\n ? this.angleAxisHelper.dataToPosition([datum[SEGMENT_FIELD_START]])\n : this._startAngle;\n }\n\n protected _getAngleValueEndWithoutPadAngle(datum: Datum) {\n return this.angleAxisHelper.dataToPosition([datum[SEGMENT_FIELD_END]]);\n }\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n\n this._segmentMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('circularProgress')?.(\n {\n startAngle: this._startAngle\n },\n appearPreset\n ),\n userAnimationConfig(SeriesMarkNameEnum.segment, this._spec, this._markAttributeContext)\n )\n );\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getActiveMarks(): IMark[] {\n return [];\n }\n}\n\nexport const registerGaugeSeries = () => {\n registerProgressArcMark();\n registerProgressLikeAnimation();\n Factory.registerSeries(GaugeSeries.type, GaugeSeries);\n};\n","import { isNil } from '@visactor/vutils';\nimport type { ICircularProgressSeriesSpec, IGaugeSeriesSpec } from '../../series';\nimport { SeriesTypeEnum } from '../../series/interface';\nimport type { AdaptiveSpec, ISeriesSpec } from '../../typings';\nimport { ProgressLikeChartSpecTransformer } from '../polar';\nimport type { IGaugeChartSpec } from './interface';\nimport { LayoutZIndex } from '../../constant';\nimport type { IPolarAxisSpec, IPolarLinearAxisSpec } from '../../component';\n\nexport class GaugeChartSpecTransformer<\n T extends IGaugeChartSpec = IGaugeChartSpec\n> extends ProgressLikeChartSpecTransformer> {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series = super._getDefaultSeriesSpec(spec);\n return {\n ...series,\n radiusField: spec.radiusField,\n\n pin: spec.pin,\n pinBackground: spec.pinBackground,\n pointer: spec.pointer\n };\n }\n\n protected _getDefaultCircularProgressSeriesSpec(spec: T): any {\n const series: any = {\n ...super._getDefaultSeriesSpec(spec),\n type: SeriesTypeEnum.circularProgress\n };\n return series;\n }\n\n transformSpec(spec: AdaptiveSpec): void {\n super.transformSpec(spec);\n\n /** 充当仪表图非指针部分的系列 */\n let backgroundSeries = spec.series?.find(\n (series: ISeriesSpec) => series.type === SeriesTypeEnum.gauge || series.type === SeriesTypeEnum.circularProgress\n ) as ICircularProgressSeriesSpec | IGaugeSeriesSpec;\n if (isNil(backgroundSeries)) {\n backgroundSeries = spec.gauge ?? this._getDefaultCircularProgressSeriesSpec(spec as any);\n\n // 补充可能缺失的属性\n if (backgroundSeries.type === 'circularProgress') {\n if (isNil(backgroundSeries.radiusField) && isNil(backgroundSeries.categoryField)) {\n backgroundSeries.radiusField = spec.radiusField ?? (spec.categoryField as string) ?? spec.seriesField;\n }\n if (isNil(backgroundSeries.valueField) && isNil(backgroundSeries.angleField)) {\n backgroundSeries.valueField = spec.valueField ?? spec.angleField;\n }\n }\n\n if (spec.series.length === 1) {\n spec.series.push(backgroundSeries);\n } else {\n spec.series.forEach((s: ISeriesSpec) => {\n if (s.type !== backgroundSeries.type) {\n return;\n }\n Object.keys(backgroundSeries).forEach(k => {\n if (!(k in s)) {\n s[k] = backgroundSeries[k];\n }\n });\n });\n }\n }\n\n if (backgroundSeries.type === SeriesTypeEnum.circularProgress) {\n this._transformProgressAxisSpec(\n spec,\n {\n orient: 'angle',\n visible: true,\n domainLine: {\n visible: false\n },\n grid: {\n visible: false\n }\n },\n {\n orient: 'radius',\n visible: false\n },\n {\n zIndex: LayoutZIndex.Region + 50 // 仪表图特例:轴在 region 上层\n }\n );\n } else {\n this._transformGaugeAxisSpec(spec);\n }\n }\n\n protected _transformGaugeAxisSpec(spec: AdaptiveSpec): void {\n if (!spec.axes) {\n spec.axes = [];\n }\n const axesPtr: {\n radius: IPolarLinearAxisSpec | null;\n angle: IPolarLinearAxisSpec | null;\n } = { radius: null, angle: null };\n (spec.axes ?? []).forEach((axis: IPolarAxisSpec) => {\n const { orient } = axis;\n if (orient === 'radius') {\n axesPtr.radius = axis;\n }\n if (orient === 'angle') {\n axesPtr.angle = axis;\n }\n });\n if (!axesPtr.angle) {\n axesPtr.angle = {\n orient: 'angle',\n visible: true\n };\n spec.axes.push(axesPtr.angle);\n }\n if (!axesPtr.radius) {\n axesPtr.radius = {\n orient: 'radius',\n visible: false\n };\n spec.axes.push(axesPtr.radius);\n }\n\n // 自动补充缺失的配置\n if (isNil(axesPtr.angle.type)) {\n axesPtr.angle.type = 'linear';\n }\n if (isNil(axesPtr.radius.type)) {\n axesPtr.radius.type = 'linear';\n }\n if (isNil(axesPtr.angle.zIndex)) {\n axesPtr.angle.zIndex = LayoutZIndex.Region + 50; // 仪表图特例:轴在 region 上层\n }\n }\n}\n","import { registerGaugePointerSeries, registerGaugeSeries } from '../../series/gauge';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport { Factory } from '../../core/factory';\nimport type { IGaugeChartSpec } from './interface';\nimport { GaugeChartSpecTransformer } from './gauge-transformer';\nimport type { AdaptiveSpec } from '../../typings';\nimport { BaseChart } from '../base';\n\nexport class GaugeChart extends BaseChart> {\n static readonly type: string = ChartTypeEnum.gauge;\n static readonly seriesType: string = SeriesTypeEnum.gaugePointer;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = GaugeChartSpecTransformer;\n readonly transformerConstructor = GaugeChartSpecTransformer;\n readonly type: string = ChartTypeEnum.gauge;\n readonly seriesType: string = SeriesTypeEnum.gaugePointer;\n}\n\nexport const registerGaugeChart = () => {\n registerGaugePointerSeries();\n registerGaugeSeries();\n Factory.registerChart(GaugeChart.type, GaugeChart);\n};\n","import type { ISeriesSpec } from '../../../typings';\nimport { BaseChartSpecTransformer } from '../../base';\nimport type { IWordCloudChartSpec } from '../interface';\n\nexport class BaseWordCloudChartSpecTransformer extends BaseChartSpecTransformer {\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n\n /* 处理 series 配置 */\n const defaultSeriesSpec = this._getDefaultSeriesSpec(spec);\n if (!spec.series || spec.series.length === 0) {\n spec.series = [defaultSeriesSpec];\n } else {\n spec.series.forEach((s: ISeriesSpec) => {\n if (!this._isValidSeries(s.type)) {\n return;\n }\n Object.keys(defaultSeriesSpec).forEach(k => {\n if (!(k in s)) {\n s[k] = defaultSeriesSpec[k];\n }\n });\n });\n }\n }\n}\n","import { SeriesTypeEnum } from '../../../series/interface/type';\nimport { ChartTypeEnum } from '../../interface/type';\nimport { BaseChart } from '../../base/base-chart';\nimport type { IWordCloudChartSpec } from '../interface';\nimport { BaseWordCloudChartSpecTransformer } from './word-cloud-base-transformer';\n\nexport class BaseWordCloudChart extends BaseChart {\n static readonly transformerConstructor = BaseWordCloudChartSpecTransformer;\n readonly transformerConstructor = BaseWordCloudChartSpecTransformer;\n readonly type: string = ChartTypeEnum.wordCloud;\n readonly seriesType: string = SeriesTypeEnum.wordCloud;\n}\n","export const DEFAULT_ROTATE_ANGLES: number[] = [0];\nexport const DEFAULT_DRAW_OUT_OF_BOUND = 'hidden';\nexport const DEFAULT_MIN_FONT_SIZE = 20;\nexport const DEFAULT_FONTSIZE_RANGE: [number, number] = [20, 40];\nexport const DEFAULT_FONT_WEIGHT_RANGE: [number, number] = [200, 500];\nexport const DEFAULT_MASK_SHAPE = 'circle';\nexport const DEFAULT_ZOOM_TO_FIT = {\n shrink: false,\n enlarge: false,\n fontSizeLimitMin: 0\n};\nexport const DEFAULT_RANDOM = true;\nexport const DEFAULT_FONT_PADDING = 1;\nexport const DEFAULT_TEXT_ALIGN = 'center';\nexport const DEFAULT_TEXT_BASE_LINE = 'alphabetic';\nexport const SHAPE_TYPE = [\n 'triangleForward',\n 'triangle',\n 'diamond',\n 'square',\n 'star',\n 'cardioid',\n 'circle',\n 'pentagon'\n];\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-util/src/extent.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { isFunction, isNumber, isNil } from '@visactor/vutils';\nimport type { ReturnNumberFunction } from './types';\n\n/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nexport const extent = (array: any[], func?: ReturnNumberFunction) => {\n const valueGetter = isFunction(func) ? func : (val: any) => val;\n let min: number;\n let max: number;\n\n if (array && array.length) {\n const n = array.length;\n\n // find first valid value\n for (let i = 0; i < n; i += 1) {\n let value = valueGetter(array[i]);\n if (!isNil(value) && isNumber((value = +value)) && !Number.isNaN(value)) {\n if (isNil(min)) {\n min = value;\n max = value;\n } else {\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n }\n }\n\n return [min, max];\n }\n\n return [min, max];\n};\n","import { PREFIX } from './base';\n\nexport const WORD_CLOUD_ANGLE = `${PREFIX}_WORD_CLOUD_ANGLE`;\nexport const WORD_CLOUD_FILLING_ANGLE = `${PREFIX}_WORD_CLOUD_FILLING_ANGLE`;\nexport const WORD_CLOUD_WEIGHT = `${PREFIX}_WORD_CLOUD_WEIGHT`;\nexport const WORDCLOUD_COLOR = `${PREFIX}_WORDCLOUD_COLOR`;\nexport const WORDCLOUD_DATA_TOTAL = `${PREFIX}_WORDCLOUD_DATA_TOTAL`;\nexport const WORD_CLOUD_TEXT = `${PREFIX}_WORD_CLOUD_TEXT`;\n\nexport const WORDCLOUD_SHAPE_DATA_TOTAL = `${PREFIX}_WORDCLOUD_SHAPE_DATA_TOTAL`;\n","/* eslint-disable no-duplicate-imports */\nimport type { IPadding } from '@visactor/vutils';\nimport { isValidNumber } from '@visactor/vutils';\nimport { isValid } from '@visactor/vutils';\nimport { AttributeLevel, DEFAULT_DATA_KEY, DEFAULT_DATA_SERIES_FIELD } from '../../constant';\nimport type { ITextMark } from '../../mark/text';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum } from '../interface/type';\nimport { isTrueBrowser } from '../../util/env';\nimport {\n DEFAULT_DRAW_OUT_OF_BOUND,\n DEFAULT_FONTSIZE_RANGE,\n DEFAULT_FONT_PADDING,\n DEFAULT_FONT_WEIGHT_RANGE,\n DEFAULT_MASK_SHAPE,\n DEFAULT_MIN_FONT_SIZE,\n DEFAULT_RANDOM,\n DEFAULT_ROTATE_ANGLES,\n DEFAULT_ZOOM_TO_FIT,\n SHAPE_TYPE\n} from './config';\nimport type {\n IWordCloudSeriesSpec,\n WordCloudConfigType,\n WordCloudShapeConfigType,\n WordCloudShapeType\n} from './interface';\nimport type { Datum, IPoint } from '../../typings';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { LinearScale } from '@visactor/vscale';\nimport { extent } from '@visactor/vgrammar-util';\nimport {\n WORD_CLOUD_ANGLE,\n WORD_CLOUD_FILLING_ANGLE,\n WORD_CLOUD_TEXT,\n WORD_CLOUD_WEIGHT\n} from '../../constant/word-cloud';\nimport type { ICompilableMark } from '../../compile/mark';\nimport { BaseSeries } from '../base/base-series';\nimport { ColorOrdinalScale } from '../../scale/color-ordinal-scale';\nimport { wordCloudSeriesMark } from './constant';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { Factory } from '../../core/factory';\nimport type { IMark } from '../../mark/interface';\n\nexport type IBaseWordCloudSeriesSpec = Omit & { type: string };\n\nexport class BaseWordCloudSeries extends BaseSeries {\n static readonly mark: SeriesMarkMap = wordCloudSeriesMark;\n\n protected _nameField: string;\n protected _valueField?: string;\n setValueField(field: string) {\n if (isValid(field)) {\n this._valueField = field;\n }\n }\n\n protected _fontFamilyField: string;\n protected _fontWeightField: string;\n protected _fontStyleField: string;\n protected _colorHexField: string;\n protected _colorMode: 'linear' | 'ordinal';\n protected _colorList: string[];\n protected _rotateAngles?: number[];\n protected _fontWeightRange?: [number, number];\n protected _textField?: string;\n\n protected _fontSizeRange?: [number, number] | 'auto' = [DEFAULT_MIN_FONT_SIZE, DEFAULT_MIN_FONT_SIZE];\n setFontSizeRange(fontSizeRange: [number, number] | 'auto') {\n if (isValid(fontSizeRange)) {\n this._fontSizeRange = fontSizeRange;\n } else {\n this._fontSizeRange = DEFAULT_FONTSIZE_RANGE;\n }\n }\n\n protected _maskShape?: string | WordCloudShapeType;\n protected _isWordCloudShape: boolean = false;\n\n protected _keepAspect?: boolean;\n protected _random?: boolean;\n protected _fontPadding?: number;\n protected _fillingFontPadding?: number;\n protected _wordCloudConfig?: WordCloudConfigType;\n protected _wordCloudShapeConfig?: WordCloudShapeConfigType;\n\n protected _padding?: IPadding;\n protected _defaultFontFamily: string;\n\n /**\n * @override\n */\n setAttrFromSpec() {\n super.setAttrFromSpec();\n // series布局相关\n this._padding = this._option.getChart().padding;\n\n // 普通词云 & 形状词云 共有spec相关\n this._nameField = this._spec.nameField;\n this._fontFamilyField = this._spec.fontFamilyField;\n this._fontWeightField = this._spec.fontWeightField;\n this._fontStyleField = this._spec.fontStyleField;\n this._colorHexField = this._spec.colorHexField;\n this._colorMode = this._spec.colorMode ?? 'ordinal';\n this._colorList = this._spec.colorList;\n this.setValueField(this._spec.valueField);\n this._fontWeightRange = this._spec.fontWeightRange ?? DEFAULT_FONT_WEIGHT_RANGE;\n this._rotateAngles = this._spec.rotateAngles ?? DEFAULT_ROTATE_ANGLES;\n this.setFontSizeRange(this._spec.fontSizeRange);\n this._maskShape = this._spec.maskShape ?? DEFAULT_MASK_SHAPE;\n this._keepAspect = this._spec.keepAspect;\n this._random = this._spec.random ?? DEFAULT_RANDOM;\n this._fontPadding = this._spec.word?.padding ?? DEFAULT_FONT_PADDING;\n this._textField = this._spec.word?.formatMethod ? WORD_CLOUD_TEXT : this._nameField;\n // 普通词云spec相关\n this._wordCloudConfig = {\n drawOutOfBound: DEFAULT_DRAW_OUT_OF_BOUND,\n layoutMode: 'default',\n zoomToFit: DEFAULT_ZOOM_TO_FIT,\n ...this._spec.wordCloudConfig\n };\n\n // 形状词云spec相关\n this._wordCloudShapeConfig = {\n fillingSeriesField: this.getSeriesField(),\n fillingRotateAngles: DEFAULT_ROTATE_ANGLES,\n layoutMode: 'default',\n ...this._spec.wordCloudShapeConfig\n };\n this._fillingFontPadding = this._spec.fillingWord?.padding ?? DEFAULT_FONT_PADDING;\n\n this._isWordCloudShape = !SHAPE_TYPE.includes(this._maskShape);\n this._defaultFontFamily = this._option.getTheme().fontFamily;\n }\n\n protected _wordMark: ITextMark;\n protected _fillingWordMark: ITextMark;\n initMark(): void {\n this._wordMark = this._createMark(BaseWordCloudSeries.mark.word, {\n defaultMorphElementKey: this._seriesField,\n groupKey: this._seriesField,\n isSeriesMark: true\n }) as ITextMark;\n if (this._isWordCloudShape) {\n this._fillingWordMark = this._createMark(BaseWordCloudSeries.mark.fillingWord) as ITextMark;\n }\n }\n\n initMarkStyle() {\n const wordMark = this._wordMark;\n const fillingWordMark = this._fillingWordMark;\n const wordSpec = this._spec.word ?? {};\n if (wordMark) {\n this.setMarkStyle(\n wordMark,\n {\n fill: this._colorHexField\n ? (datum: Datum) => datum[this._colorHexField]\n : this.getWordColorAttribute(this._seriesField, false),\n text: (datum: Datum) => datum[this._textField],\n x: (datum: Datum) => datum.x,\n y: (datum: Datum) => datum.y,\n fontFamily: (datum: Datum) => datum.fontFamily,\n fontSize: (datum: Datum) => datum.fontSize,\n fontStyle: (datum: Datum) => datum.fontStyle,\n fontWeight: (datum: Datum) => datum.fontWeight,\n angle: (datum: Datum) => datum.angle,\n visible: (datum: Datum) => !datum.isFillingWord && datum.visible\n },\n 'normal',\n AttributeLevel.Series\n );\n this.setMarkStyle(\n wordMark,\n {\n fontFamily: wordSpec.style?.fontFamily ?? this._defaultFontFamily\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n }\n if (fillingWordMark) {\n this.setMarkStyle(\n fillingWordMark,\n {\n fill: this._wordCloudShapeConfig.fillingColorHexField\n ? (datum: Datum) => datum[this._wordCloudShapeConfig.fillingColorHexField]\n : this.getWordColorAttribute(this._wordCloudShapeConfig.fillingSeriesField, true),\n text: (datum: Datum) => datum[this._textField],\n x: (datum: Datum) => datum.x,\n y: (datum: Datum) => datum.y,\n fontFamily: (datum: Datum) => datum.fontFamily,\n fontSize: (datum: Datum) => datum.fontSize,\n fontStyle: (datum: Datum) => datum.fontStyle,\n fontWeight: (datum: Datum) => datum.fontWeight,\n angle: (datum: Datum) => datum.angle,\n visible: (datum: Datum) => datum.isFillingWord && datum.visible\n },\n 'normal',\n AttributeLevel.Series\n );\n\n this.setMarkStyle(\n fillingWordMark,\n {\n fontFamily: wordSpec.style?.fontFamily ?? this._defaultFontFamily\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n }\n this._trigger.registerMark(wordMark);\n this._trigger.registerMark(fillingWordMark);\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._wordMark && this._tooltipHelper.activeTriggerSet.mark.add(this._wordMark);\n this._fillingWordMark && this._tooltipHelper.activeTriggerSet.mark.add(this._fillingWordMark);\n }\n\n initAnimation() {\n [this._wordMark, this._fillingWordMark].forEach(mark => {\n if (mark) {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n const params = {\n animationConfig: () => mark.getAnimationConfig()?.appear?.[0]\n };\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('wordCloud')(params, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.word, this._spec, this._markAttributeContext)\n )\n );\n }\n });\n }\n\n protected getWordOrdinalColorScale(field: string, isFillingWord: boolean) {\n const colorList = isFillingWord ? this._wordCloudShapeConfig.fillingColorList : this._colorList;\n const colorDomain = field ? this.getViewData()?.latestData.map((datum: Datum) => datum[field]) : [];\n const colorRange = colorList ?? this._option.globalScale.getScale('color')?.range() ?? this._getDataScheme();\n return new ColorOrdinalScale().domain(colorDomain).range?.(colorRange);\n }\n\n getWordColorAttribute(field: string, isFillingWord: boolean) {\n if (this._colorMode === 'ordinal') {\n return {\n scale: this.getWordOrdinalColorScale(field, isFillingWord),\n field: this._seriesField ?? DEFAULT_DATA_SERIES_FIELD\n };\n }\n // const valueScale = new LinearScale()\n // .domain(extent(this.getViewData()?.latestData.map((datum: Datum) => datum[field])), true)\n // .range([0, 1]);\n let colorList =\n (isFillingWord ? this._colorList : this._wordCloudShapeConfig.fillingColorList) ??\n this._option.globalScale.getScale('color').range();\n // 如果用户只输入了一个 color,无法构成 colorRange,则进行兜底\n if (colorList.length === 1) {\n colorList = [colorList[0], colorList[0]];\n }\n // 颜色插值 todo@chensiji\n // const interpolate = interpolateColors(colorList)\n // return (datum: Datum) => interpolate(valueScale.scale(datum[field]))\n return (datum: Datum) => colorList[0];\n }\n\n compile(): void {\n super.compile();\n const { width, height } = this._region.getLayoutRect();\n // 非正常尺寸下不进行布局\n if (!isValidNumber(width) || !isValidNumber(height) || !(height > 0 && width > 0)) {\n return;\n }\n\n const wordCloudTransforms: any[] = [];\n const valueField = this._valueField;\n const valueScale = new LinearScale();\n const fontWeightRange = this._fontWeightRange;\n const rotateAngles = this._rotateAngles;\n const fillingRotateAngles = this._wordCloudShapeConfig.fillingRotateAngles;\n\n // fontWeight处理\n if (valueField) {\n const [minValue, maxValue] = extent(this.getViewData()?.latestData.map((datum: any) => +datum[valueField]));\n valueScale.domain([minValue, maxValue], true).range(fontWeightRange);\n wordCloudTransforms.push({\n type: 'map',\n as: WORD_CLOUD_WEIGHT,\n callback: (datum: any) => {\n if (minValue === maxValue) {\n return valueScale.scale(maxValue);\n }\n return valueScale.scale(datum[valueField]);\n }\n });\n }\n\n // rotateAngles处理\n wordCloudTransforms.push({\n type: 'map',\n as: WORD_CLOUD_ANGLE,\n callback: () => {\n return rotateAngles[Math.floor(Math.random() * rotateAngles.length)];\n }\n });\n wordCloudTransforms.push({\n type: 'map',\n as: WORD_CLOUD_FILLING_ANGLE,\n callback: () => {\n return fillingRotateAngles[Math.floor(Math.random() * fillingRotateAngles.length)];\n }\n });\n const wordSpec = this._spec.word ?? {};\n\n // text fromat method 处理\n if (wordSpec.formatMethod) {\n wordCloudTransforms.push({\n type: 'map',\n as: WORD_CLOUD_TEXT,\n callback: wordSpec.formatMethod\n });\n }\n\n // 词云 transform\n if (!this._isWordCloudShape) {\n wordCloudTransforms.push({\n type: 'wordcloud',\n ...this._wordCloudTransformOption()\n });\n // 挂到mark的transform上\n (this._wordMark as ICompilableMark).getProduct().transform(wordCloudTransforms);\n }\n // 形状词云 transform\n else {\n wordCloudTransforms.push({\n type: 'wordcloudShape',\n // 形状词云中必须要传入dataIndexKey, 否则填充词无法绘制\n ...this._wordCloudShapeTransformOption()\n });\n }\n // 把transform挂载到data的product上\n this._data.getProduct().transform(wordCloudTransforms);\n }\n\n protected _wordCloudTransformOption(): Object {\n const { width, height } = this._region.getLayoutRect();\n const wordStyleSpec = this._spec.word?.style ?? {};\n\n return {\n // TIP: 非浏览器环境下,使用 fast 布局,否则会出现兼容问题\n layoutType: !isTrueBrowser(this._option.mode) ? 'fast' : this._wordCloudConfig.layoutMode,\n size: [width, height],\n shape: this._maskShape,\n dataIndexKey: DEFAULT_DATA_KEY,\n text: { field: this._textField },\n fontSize: this._valueField ? { field: this._valueField } : this._fontSizeRange[0],\n fontSizeRange: this._fontSizeRange === 'auto' ? null : this._fontSizeRange,\n padding: this._fontPadding,\n rotate: { field: WORD_CLOUD_ANGLE },\n fontFamily: this._fontFamilyField ?? wordStyleSpec.fontFamily ?? this._defaultFontFamily,\n fontWeight: this._fontWeightField\n ? { field: this._fontWeightField }\n : this._valueField\n ? { field: WORD_CLOUD_WEIGHT }\n : null,\n fontStyle: this._fontStyleField ?? wordStyleSpec.fontStyle,\n\n randomVisible: this._random,\n clip: this._wordCloudConfig.drawOutOfBound === 'clip',\n shrink: this._wordCloudConfig.zoomToFit.shrink,\n enlarge: this._wordCloudConfig.zoomToFit.enlarge,\n minFontSize: this._wordCloudConfig.zoomToFit.fontSizeLimitMin,\n progressiveTime: this._wordCloudConfig.progressiveTime,\n progressiveStep: this._wordCloudConfig.progressiveStep\n };\n }\n\n protected _wordCloudShapeTransformOption(): Object {\n const { width, height } = this._region.getLayoutRect();\n const wordStyleSpec = this._spec.word?.style ?? {};\n const wordCloudShapeConfig = this._wordCloudShapeConfig ?? {};\n const fillingRotateAngles = this._wordCloudShapeConfig.fillingRotateAngles;\n\n return {\n dataIndexKey: DEFAULT_DATA_KEY,\n\n size: [width, height],\n shape: this._maskShape,\n\n text: { field: this._textField },\n fontSize: this._valueField ? { field: this._valueField } : this._fontSizeRange[0],\n fontSizeRange: this._fontSizeRange === 'auto' ? null : this._fontSizeRange, // 如果配置为'auto', 则形状词云fontSizeRange不设默认值(对齐3.x效果)\n padding: this._fontPadding,\n rotateList: this._rotateAngles,\n fontFamily: this._fontFamilyField ?? wordStyleSpec.fontFamily ?? this._defaultFontFamily,\n fontWeight: this._fontWeightField\n ? { field: this._fontWeightField }\n : this._valueField\n ? { field: WORD_CLOUD_WEIGHT }\n : null,\n fontStyle: this._fontStyleField ?? wordStyleSpec.fontStyle,\n\n fillingFontFamily:\n wordCloudShapeConfig.fillingFontFamilyField ?? wordStyleSpec.fontFamily ?? this._defaultFontFamily,\n fillingPadding: this._fillingFontPadding,\n fillingFontStyle: wordCloudShapeConfig.fillingFontStyleField ?? wordStyleSpec.fontStyle,\n fillingFontWeight: wordCloudShapeConfig.fillingFontWeightField ?? wordStyleSpec.fontWeight, // 填充词fontWeight默认不跟随valueField\n fillingRotateList: fillingRotateAngles,\n\n fillingTimes: wordCloudShapeConfig.fillingTimes,\n fillingXStep: wordCloudShapeConfig.fillingXStep,\n fillingYStep: wordCloudShapeConfig.fillingYStep,\n fillingXRatioStep: wordCloudShapeConfig.fillingXRatioStep,\n fillingYRatioStep: wordCloudShapeConfig.fillingYRatioStep,\n fillingInitialOpacity: wordCloudShapeConfig.fillingInitialOpacity,\n fillingDeltaOpacity: wordCloudShapeConfig.fillingDeltaOpacity,\n fillingInitialFontSize: wordCloudShapeConfig.fillingInitialFontSize,\n fillingDeltaFontSize: wordCloudShapeConfig.fillingDeltaFontSize,\n\n ratio: wordCloudShapeConfig.ratio,\n fillingRatio: wordCloudShapeConfig.fillingRatio,\n removeWhiteBorder: wordCloudShapeConfig.removeWhiteBorder,\n textLayoutTimes: wordCloudShapeConfig.textLayoutTimes,\n fontSizeShrinkFactor: wordCloudShapeConfig.fontSizeShrinkFactor,\n stepFactor: wordCloudShapeConfig.stepFactor,\n layoutMode: wordCloudShapeConfig.layoutMode,\n importantWordCount: wordCloudShapeConfig.importantWordCount,\n globalShinkLimit: wordCloudShapeConfig.globalShinkLimit,\n fontSizeEnlargeFactor: wordCloudShapeConfig.fontSizeEnlargeFactor,\n fillingDeltaFontSizeFactor: wordCloudShapeConfig.fillingDeltaFontSizeFactor\n };\n }\n\n getStatisticFields() {\n const fields: { key: string; operations: Array<'max' | 'min' | 'values'> }[] = [];\n fields.push({ key: this._nameField, operations: ['values'] });\n fields.push({ key: this._valueField, operations: ['max', 'min'] });\n return fields;\n }\n dataToPosition(data: Datum): IPoint {\n return null;\n }\n dataToPositionX(data: any): number {\n return null;\n }\n dataToPositionY(data: any): number {\n return null;\n }\n dataToPositionZ(data: any): number {\n return null;\n }\n valueToPosition(value1: any, value2?: any): IPoint {\n return null;\n }\n\n getGroupFields(): string[] {\n // do nothing\n return [];\n }\n\n getStackGroupFields(): string[] {\n // do nothing\n return [];\n }\n\n getStackValueField(): string {\n // do nothing\n return '';\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this.compile();\n }\n\n getActiveMarks(): IMark[] {\n return [this._wordMark, this._fillingWordMark];\n }\n}\n","import type { IAnimationTypeConfig, IElement } from '@visactor/vgrammar-core';\nimport { RotateBySphereAnimate } from '@visactor/vrender-core';\nimport { DEFAULT_ANIMATION_CONFIG } from '../../animation/config';\nimport { Factory } from '../../core/factory';\n\nexport interface IWordcloud3dAnimationParams {\n radius: number;\n depth_3d: number;\n}\n\nexport interface IWordcloudAnimationParams {\n animationConfig: () => IAnimationTypeConfig;\n}\n\nexport type WordcloudAppearPreset = 'scaleIn' | 'fadeIn';\n\nexport const WordCloud3dAnimation = (params: IWordcloud3dAnimationParams | (() => any)): IAnimationTypeConfig => {\n return {\n custom: RotateBySphereAnimate,\n customParameters: (datum: any, element: IElement) => {\n return params;\n // return { center: { x: params.radius, y: params.radius, z: params.depth_3d }, r: params.radius };\n },\n easing: 'linear',\n loop: Infinity,\n duration: 6000\n };\n};\n\nfunction computeWordDelay(duration: number, totalTime: number, wordCount: number) {\n if (duration * wordCount < totalTime) {\n return duration + (totalTime - wordCount * duration) / (wordCount - 1);\n }\n return (totalTime - duration) / (wordCount - 1);\n}\n\nexport const WordCloudScaleInAnimation = (params: IWordcloudAnimationParams): IAnimationTypeConfig => {\n return {\n channel: {\n fontSize: {\n from: 0\n }\n },\n duration: 200,\n delay: (datum, element, vgrammarParams) => {\n const animationConfig = params.animationConfig();\n const duration = animationConfig?.duration || 200;\n const totalTime = animationConfig?.totalTime || DEFAULT_ANIMATION_CONFIG.appear.duration;\n const count = vgrammarParams.VGRAMMAR_ANIMATION_PARAMETERS.elementCount;\n const index = vgrammarParams.VGRAMMAR_ANIMATION_PARAMETERS.elementIndex;\n return index * computeWordDelay(duration as number, totalTime as number, count);\n }\n };\n};\n\nexport function wordcloudPresetAnimation(\n params: IWordcloudAnimationParams,\n preset: WordcloudAppearPreset | boolean\n): IAnimationTypeConfig {\n if (preset === false) {\n return {};\n }\n switch (preset) {\n case 'fadeIn':\n return { type: 'fadeIn' };\n case 'scaleIn':\n default:\n return WordCloudScaleInAnimation(params);\n }\n}\n\nexport const registerWordCloudAnimation = () => {\n Factory.registerAnimation('wordCloud', (params: IWordcloudAnimationParams, preset: WordcloudAppearPreset) => ({\n appear: wordcloudPresetAnimation(params, preset),\n enter: { type: 'fadeIn' },\n exit: { type: 'fadeOut' },\n disappear: { type: 'fadeOut' }\n }));\n};\n\nexport const registerWordCloud3dAnimation = () => {\n Factory.registerAnimation('wordCloud3d', (params: IWordcloud3dAnimationParams) => ({\n appear: WordCloud3dAnimation(params)\n }));\n};\n","export const shapes = {\n triangleForward: triangleForward,\n triangleUpright: triangle,\n triangle, // 三角形\n diamond, // 菱形\n square, // 方形\n star, // 星形\n cardioid, // 心形\n circle, // 圆形\n pentagon // 五角形\n};\n\nfunction diamond() {\n return function (theta: number) {\n const thetaPrime = theta % ((2 * Math.PI) / 4);\n return 1 / (Math.cos(thetaPrime) + Math.sin(thetaPrime));\n };\n}\nfunction star() {\n return function (theta: number) {\n const thetaPrime = (theta + 0.955) % ((2 * Math.PI) / 10);\n if (((theta + 0.955) % ((2 * Math.PI) / 5)) - (2 * Math.PI) / 10 >= 0) {\n return 1 / (Math.cos((2 * Math.PI) / 10 - thetaPrime) + 3.07768 * Math.sin((2 * Math.PI) / 10 - thetaPrime));\n }\n return 1 / (Math.cos(thetaPrime) + 3.07768 * Math.sin(thetaPrime));\n };\n}\nfunction square() {\n return function (theta: number) {\n return Math.min(1 / Math.abs(Math.cos(theta)), 1 / Math.abs(Math.sin(theta)));\n };\n}\n\nfunction triangle() {\n return function (theta: number) {\n const thetaPrime = (theta + (Math.PI * 3) / 2) % ((2 * Math.PI) / 3);\n return 1 / (Math.cos(thetaPrime) + Math.sqrt(3) * Math.sin(thetaPrime));\n };\n}\nfunction triangleForward() {\n return function (theta: number) {\n const thetaPrime = theta % ((2 * Math.PI) / 3);\n return 1 / (Math.cos(thetaPrime) + Math.sqrt(3) * Math.sin(thetaPrime));\n };\n}\nfunction cardioid() {\n return function (theta: number) {\n return 1 - Math.sin(theta);\n };\n}\nfunction circle() {\n return function () {\n return 1;\n };\n}\n\nfunction pentagon() {\n return function (theta: number) {\n const thetaPrime = (theta + 0.955) % ((2 * Math.PI) / 5);\n return 1 / (Math.cos(thetaPrime) + 0.726543 * Math.sin(thetaPrime));\n };\n}\n\nexport function getMaxRadiusAndCenter(shape: string, size: [number, number]) {\n const w = size[0];\n const h = size[1];\n let maxRadius = 1;\n const center = [size[0] >> 1, size[1] >> 1];\n\n switch (shape) {\n case 'cardioid':\n center[1] = ~~((h / 2.7) * 0.6);\n maxRadius = Math.floor(Math.min(w / 2.3, h / 2.6));\n break;\n case 'triangleForward':\n maxRadius = h / Math.sqrt(0.75) > w ? Math.floor(w / 2) : Math.floor(h / (2 * Math.sqrt(0.75)));\n break;\n case 'triangle':\n case 'triangleUpright':\n center[1] = ~~(h / 1.5);\n maxRadius = Math.floor(Math.min(h / 1.5, w / 2));\n break;\n case 'rect':\n maxRadius = Math.floor(Math.max(h / 2, w / 2));\n break;\n default:\n maxRadius = Math.floor(Math.min(w / 2, h / 2));\n break;\n }\n return { maxRadius, center };\n}\n\nexport const getShapeFunction = (type: string) => {\n if (shapes[type]) {\n return shapes[type]();\n }\n\n return shapes.circle();\n};\n","import { isFunction } from '@visactor/vutils';\n\nexport function isSupported() {\n // eslint-disable-next-line no-undef\n const canvas = document.createElement('canvas');\n if (!canvas || !canvas.getContext) {\n return false;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return false;\n }\n if (!ctx.getImageData) {\n return false;\n }\n if (!ctx.fillText) {\n return false;\n }\n\n if (!Array.prototype.some) {\n return false;\n }\n if (!Array.prototype.push) {\n return false;\n }\n\n return true;\n}\n\nexport function getMinFontSizeOfEnv() {\n // eslint-disable-next-line no-undef\n const ctx = document.createElement('canvas').getContext('2d');\n\n // start from 20\n let size = 20;\n\n // two sizes to measure\n let hanWidth;\n let mWidth;\n\n while (size) {\n ctx.font = size.toString(10) + 'px sans-serif';\n if (ctx.measureText('\\uFF37').width === hanWidth && ctx.measureText('m').width === mWidth) {\n return size + 1;\n }\n\n hanWidth = ctx.measureText('\\uFF37').width;\n mWidth = ctx.measureText('m').width;\n\n size--;\n }\n\n return 12;\n}\n\nexport const randomHslColor = (min: number, max: number) => {\n return (\n 'hsl(' +\n (Math.random() * 360).toFixed() +\n ',' +\n (Math.random() * 30 + 70).toFixed() +\n '%,' +\n (Math.random() * (max - min) + min).toFixed() +\n '%)'\n );\n};\n\nexport function functor(d: any) {\n return isFunction(d)\n ? d\n : function () {\n return d;\n };\n}\n","import { degreeToRadian, isFunction, isNil, merge } from \"@visactor/vutils\";\n\nimport { getShapeFunction } from \"./shapes\";\n\nimport { functor, randomHslColor } from \"./util\";\n\nexport class BaseLayout {\n constructor(options) {\n var _a, _b;\n switch (this.options = merge({}, BaseLayout.defaultOptions, options), isFunction(this.options.shape) ? this.shape = this.options.shape : this.shape = getShapeFunction(this.options.shape), \n this.getText = null !== (_a = functor(this.options.text)) && void 0 !== _a ? _a : d => d, \n this.getTextFontWeight = functor(this.options.fontWeight), this.getTextFontSize = functor(this.options.fontSize), \n this.getTextFontStyle = functor(this.options.fontStyle), this.getTextFontFamily = functor(this.options.fontFamily), \n this.outputCallback = null !== (_b = this.options.outputCallback) && void 0 !== _b ? _b : res => res, \n this.options.color) {\n case \"random-dark\":\n this.getTextColor = () => randomHslColor(10, 50);\n break;\n\n case \"random-light\":\n this.getTextColor = () => randomHslColor(50, 90);\n break;\n\n default:\n this.getTextColor = functor(this.options.color);\n }\n if (isNil(this.options.rotate)) if (this.options.useRandomRotate) {\n const rotationRange = Math.abs(this.options.maxRotation - this.options.minRotation), rotationSteps = Math.abs(Math.floor(this.options.rotationSteps)), minRotation = Math.min(this.options.maxRotation, this.options.minRotation);\n this.getTextRotate = () => 0 === this.options.rotateRatio || Math.random() > this.options.rotateRatio ? 0 : 0 === rotationRange ? minRotation : rotationSteps > 0 ? minRotation + Math.floor(Math.random() * rotationSteps) * rotationRange / (rotationSteps - 1) : minRotation + Math.random() * rotationRange;\n } else this.getTextRotate = () => 0; else this.getTextRotate = isFunction(this.options.rotate) ? d => {\n var _a;\n return degreeToRadian(null !== (_a = this.options.rotate(d)) && void 0 !== _a ? _a : 0);\n } : () => {\n var _a;\n return degreeToRadian(null !== (_a = this.options.rotate) && void 0 !== _a ? _a : 0);\n };\n }\n exceedTime() {\n var _a;\n return this.options.progressiveStep > 0 ? this.progressiveIndex >= ((null !== (_a = this.currentStepIndex) && void 0 !== _a ? _a : 0) + 1) * this.options.progressiveStep : this.options.progressiveTime > 0 && (new Date).getTime() - this.escapeTime > this.options.progressiveTime;\n }\n progressiveRun() {\n var _a;\n if (this.options.progressiveStep > 0 ? this.currentStepIndex = (null !== (_a = this.currentStepIndex) && void 0 !== _a ? _a : 0) + 1 : this.options.progressiveTime > 0 && (this.escapeTime = Date.now()), \n this.data && this.progressiveIndex && this.progressiveIndex < this.data.length) {\n this.progressiveResult = [];\n const len = this.data.length;\n let i = this.progressiveIndex;\n for (;i < len; ) {\n this.layoutWord(i);\n if (i++, this.progressiveIndex = i, this.exceedTime()) break;\n }\n return this.progressiveResult;\n }\n return this.result;\n }\n initProgressive() {\n this.progressiveIndex = -1, this.options.progressiveStep > 0 ? this.currentStepIndex = 0 : this.options.progressiveTime > 0 && (this.escapeTime = Date.now()), \n this.progressiveResult = [];\n }\n output() {\n return this.result ? this.outputCallback(this.result) : null;\n }\n progressiveOutput() {\n return this.progressiveResult ? this.outputCallback(this.progressiveResult) : null;\n }\n unfinished() {\n return this.data && this.data.length && !isNil(this.progressiveIndex) && this.progressiveIndex < this.data.length;\n }\n release() {\n this.data = null, this.result = null, this.progressiveIndex = null, this.progressiveResult = null;\n }\n}\n\nBaseLayout.defaultOptions = {\n fontFamily: '\"Trebuchet MS\", \"Heiti TC\", \"微軟正黑體\", \"Arial Unicode MS\", \"Droid Fallback Sans\", sans-serif',\n fontWeight: \"normal\",\n color: \"random-dark\",\n fontStyle: \"normal\",\n minFontSize: 12,\n drawOutOfBound: !1,\n shrink: !1,\n minRotation: -Math.PI / 2,\n maxRotation: Math.PI / 2,\n rotationSteps: 0,\n rotateRatio: .1,\n random: !1,\n shape: \"circle\",\n progressiveTime: 0,\n progressiveStep: 0,\n backgroundColor: \"#fff\"\n};","export const spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral\n};\n\nfunction archimedeanSpiral(size: [number, number]) {\n const e = size[0] / size[1];\n return (t: number) => {\n return [e * (t *= 0.1) * Math.cos(t), t * Math.sin(t)] as [number, number];\n };\n}\n\nfunction rectangularSpiral(size: number) {\n const dy = 4;\n const dx = (dy * size[0]) / size[1];\n let x = 0;\n let y = 0;\n return (t: number) => {\n const sign = t < 0 ? -1 : 1;\n // See triangular numbers: T_n = n * (n + 1) / 2.\n switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) {\n case 0:\n x += dx;\n break;\n case 1:\n y += dy;\n break;\n case 2:\n x -= dx;\n break;\n default:\n y -= dy;\n break;\n }\n return [x, y] as [number, number];\n };\n}\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-wordcloud/src/CloudLayout.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\n/**\n * 小程序canvas相关API,getImageData、draw都是异步的,导致渐进渲染流程处理非常麻烦,实际上小程序并未使用这个算法,所以暂时不考虑支持小程序\n */\nimport { vglobal } from '@visactor/vrender-core';\nimport type { IProgressiveTransformResult } from '@visactor/vgrammar-core';\nimport { isString, merge } from '@visactor/vutils';\nimport type { Bounds, IBaseLayoutOptions, TagItemAttribute, TagItemFunction, TagOutputItem } from './interface';\nimport { getMaxRadiusAndCenter } from './shapes';\nimport { BaseLayout } from './base';\nimport { spirals } from './spirals';\nimport { functor } from './util';\n\n// Word cloud layout by Jason Davies, https://www.jasondavies.com/wordcloud/\n// Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf\n\n// 一次扩充数组的数量\nconst MAX_ARGUMENTS_LENGTH = 60000;\n\nexport interface TagItem {\n text: number | string;\n /** font-family */\n fontFamily?: string;\n /** font-style */\n fontStyle?: string;\n /** font-weight */\n fontWeight?: string;\n /** 旋转角度 */\n angle?: number;\n /** font-size */\n fontSize?: number;\n padding?: number;\n /** 偏移量,仅内部计算使用 */\n xoff?: number;\n /** 偏移量,仅内部计算使用 */\n yoff?: number;\n /** 中心点坐标 */\n x?: number;\n /** 中心点坐标 */\n y?: number;\n /** 右下角点坐标 */\n x1?: number;\n /** 右下角点坐标 */\n y1?: number;\n /** 左上角点坐标 */\n x0?: number;\n /** 左上角点坐标 */\n y0?: number;\n hasText?: boolean;\n /** 像素是否有填充 */\n sprite?: number[];\n datum: any;\n /** 旋转后,词语所占区域的宽度 */\n width: number;\n /** 旋转后,词语所占区域的高度 */\n height: number;\n}\n\ninterface ICloudLayoutOptions extends IBaseLayoutOptions {\n spiral?: 'archimedean' | 'rectangular' | ((size: [number, number]) => (t: number) => [number, number]);\n\n padding?: TagItemAttribute;\n enlarge?: boolean;\n}\n\nexport class CloudLayout extends BaseLayout implements IProgressiveTransformResult {\n getTextPadding: TagItemFunction;\n spiral: (size: [number, number]) => (t: any) => [number, number];\n random: () => number;\n\n /* ==================== runtime vars ======================== */\n cw: number = (1 << 11) >> 5;\n ch: number = 1 << 11;\n _size: [number, number] = [256, 256];\n _originSize: [number, number];\n _isBoardExpandCompleted = false;\n _placeStatus: number = 0;\n _tTemp?: number = null;\n _dtTemp?: number = null;\n _dy: number = 0;\n\n contextAndRatio?: { context: CanvasRenderingContext2D; ratio: number; canvas: HTMLCanvasElement };\n _board: number[];\n /** 已经绘制文字的最小包围盒 */\n _bounds: Bounds;\n\n /**\n * 最大无法放置字体缓存, key值为rotate + 摆放顺序(顺时针|逆时针)的组合\n */\n cacheMap = new Map();\n\n static defaultOptions: Partial = {\n enlarge: false,\n minFontSize: 2\n };\n\n constructor(options: ICloudLayoutOptions) {\n super(merge({}, CloudLayout.defaultOptions, options));\n\n if (this.options.minFontSize <= CloudLayout.defaultOptions.minFontSize) {\n this.options.minFontSize = CloudLayout.defaultOptions.minFontSize;\n }\n\n this.spiral = isString(this.options.spiral)\n ? spirals[this.options.spiral as string] ?? spirals.archimedean\n : (this.options.spiral as (size: [number, number]) => (t: any) => [number, number]);\n this.random = this.options.random ? Math.random : () => 1;\n this.getTextPadding = functor(this.options.padding);\n }\n\n zoomRatio() {\n return this._originSize[0] / this._size[0];\n }\n\n dy() {\n return this._dy;\n }\n\n layoutWord(index: number) {\n const d = this.data[index];\n\n // 当 text 为空时,直接跳过对其的布局,否则会卡死\n if (('' + d.text).trim() === '') {\n return true;\n }\n\n // size可能会更新\n const { maxRadius, center } = getMaxRadiusAndCenter(this.options.shape as string, this._size);\n d.x = center[0];\n d.y = center[1];\n cloudSprite(this.contextAndRatio, d, this.data, index, this.cw, this.ch);\n /* 一次place判断可能发生的情况:\n * 1. 成功找到位置,更新board,返回true ==》 更新词语位置,完成布局\n * 2. range和shape判断一直无法通过,直到delta大于max,返回false,等待扩大board范围再次尝试布局\n * 3. 在螺旋的过程中collide检测一直无法找到合适位置,直到delta大于max,返回false,等待扩大board范围再次尝试布局\n *\n * 目标:\n * 1. `超长词`语判断(d.fontSize > size),返回false,size扩大到可以容纳d.fontSize\n * 2. range和shape判断一直无法通过,直到delta大于max,返回false,等待扩大board范围再次尝试布局\n * `长词`?记录可以容纳词语的最小fontSize(一次),扩大board范围再次尝试布局;目前测试数据只命中1,3,未发现命中2的情况\n * 3. 在螺旋的过程中collide检测一直无法找到合适位置,直到delta大于max,返回false,等待扩大board范围再次尝试布局\n * 从起点开始不断进行collide检测,第一次未通过range和shape判断时,记录当时的dt,扩大画布以后从该dt开始扫描\n *\n */\n this._placeStatus = 0;\n if (d.hasText && this.place(this._board, d, this._bounds, maxRadius)) {\n this.result.push(d);\n if (this._bounds) {\n cloudBounds(this._bounds, d);\n } else {\n this._bounds = [\n { x: d.x + d.x0, y: d.y + d.y0 },\n { x: d.x + d.x1, y: d.y + d.y1 }\n ];\n }\n // Temporary hack\n d.x -= this._size[0] >> 1;\n d.y -= this._size[1] >> 1;\n\n // 清空t, dt缓存\n this._tTemp = null; // 初始化t缓存\n this._dtTemp = null; // 初始化dt缓存\n\n return true;\n }\n // 扩大画布问题:\n // 每次扩大画布,都是依据当前单词的d.fontSize和minFontSize比较后再扩大,\n // 如果某个词绘制顺序比较靠前,且尺寸较大,就会在绘制时将board拉大,\n // 后续尺寸较小的词语再画在borad后,其实际大小就会远远小于minFontSize,\n // 是不是应该先遍历数据,找到最小的词语尺寸,按照minFontSize算出board能扩大的最大尺寸,\n // 后面再绘制时board扩大不能超过这个尺寸。\n this.updateBoardExpandStatus(d.fontSize);\n if (d.hasText && this.shouldShrinkContinue()) {\n // 不需要为hasText为false时扩大画布\n if (this._placeStatus === 1) {\n // 按照字体要求能扩大的最大尺寸\n const maxSize0 = (d.fontSize * this._originSize[0]) / this.options.minFontSize;\n const distSize0 = Math.max(d.width, d.height);\n if (distSize0 <= maxSize0) {\n // 扩大尺寸满足最小字体要求 =》 按照要求扩大board\n this.expandBoard(this._board, this._bounds, distSize0 / this._size[0]);\n } else if (this.options.clip) {\n // 扩大尺寸不满足最小字体要求,但支持裁剪 =》 按最大尺寸扩大,裁剪词语\n this.expandBoard(this._board, this._bounds, maxSize0 / this._size[0]);\n } else {\n // 扩大尺寸不满足最小字体要求,且不支持裁剪 =》 丢弃词语\n return true;\n }\n } else if (this._placeStatus === 3) {\n // 扩大画布\n this.expandBoard(this._board, this._bounds);\n } else {\n // 扩大画布\n this.expandBoard(this._board, this._bounds);\n }\n // 更新一次状态,下次大尺寸词语进入裁剪\n this.updateBoardExpandStatus(d.fontSize);\n return false;\n }\n this._tTemp = null; // 初始化t缓存\n this._dtTemp = null; // 初始化dt缓存\n return true;\n }\n\n layout(words: any[], config: { width: number; height: number }) {\n this.initProgressive();\n this.result = [];\n this._size = [config.width, config.height];\n // console.time('prepare data');\n // 开始新的layout时清除旧的缓存\n this.clearCache();\n this._originSize = [...this._size];\n const contextAndRatio = this.getContext(vglobal.createCanvas({ width: 1, height: 1 }));\n this.contextAndRatio = contextAndRatio;\n this._board = new Array((this._size[0] >> 5) * this._size[1]).fill(0);\n // 已经绘制文字的最小包围盒\n this._bounds = null;\n\n const n = words.length;\n let i = 0;\n\n this.result = [];\n const data = words\n .map((d: any) => {\n return {\n text: this.getText(d),\n fontFamily: this.getTextFontFamily(d),\n fontStyle: this.getTextFontStyle(d),\n fontWeight: this.getTextFontWeight(d),\n angle: this.getTextRotate(d),\n fontSize: ~~this.getTextFontSize(d),\n padding: this.getTextPadding(d),\n xoff: 0,\n yoff: 0,\n x1: 0,\n y1: 0,\n x0: 0,\n y0: 0,\n hasText: false,\n sprite: null,\n datum: d,\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n })\n .sort(function (a, b) {\n return b.fontSize - a.fontSize;\n });\n\n this.data = data;\n const maxSingleWordTryCount = 2;\n let curWordTryCount = 0;\n\n while (i < n) {\n const drawn = this.layoutWord(i);\n\n if (drawn || curWordTryCount >= maxSingleWordTryCount) {\n i++;\n curWordTryCount = 0;\n } else {\n curWordTryCount++;\n }\n this.progressiveIndex = i;\n if (this.exceedTime()) {\n break;\n }\n }\n\n if (!this.options.clip && this.options.enlarge && this._bounds) {\n this.shrinkBoard(this._bounds);\n }\n\n // 处理y方向偏移\n if (this._bounds && ['cardioid', 'triangle', 'triangle-upright'].includes(this.options.shape as string)) {\n const currentCenterY = (this._bounds[0].y + this._bounds[1].y) / 2;\n this._dy = -(currentCenterY - this._size[1] / 2);\n }\n\n return this.result;\n }\n\n formatTagItem(words: TagOutputItem[]) {\n /** 调整结果 */\n const size = this._size;\n const zoomRatio = this.zoomRatio();\n const globalDy = this.dy();\n const dx = size[0] >> 1;\n const dy = size[1] >> 1;\n\n const n = words.length;\n const result = [];\n let w;\n let t: any;\n\n for (let i = 0; i < n; ++i) {\n w = words[i];\n t = {};\n t.datum = w.datum;\n t.x = (w.x + dx) * zoomRatio;\n t.y = (w.y + dy + globalDy) * zoomRatio;\n t.fontFamily = w.fontFamily;\n t.fontSize = w.fontSize * zoomRatio;\n t.fontStyle = w.fontStyle;\n t.fontWeight = w.fontWeight;\n t.angle = w.angle;\n\n result.push(t);\n }\n\n return result;\n }\n\n output() {\n return this.outputCallback ? this.outputCallback(this.formatTagItem(this.result)) : this.formatTagItem(this.result);\n }\n\n progressiveOutput() {\n return this.outputCallback\n ? this.outputCallback(this.formatTagItem(this.progressiveResult))\n : this.formatTagItem(this.progressiveResult);\n }\n // 词语尺寸是否达小于最小尺寸,true时不能继续扩大画布“\n private updateBoardExpandStatus(fontSize: number) {\n this._isBoardExpandCompleted = fontSize * (this._originSize[0] / this._size[0]) < this.options.minFontSize;\n }\n\n // 是否可以继续扩大画布,true可以继续扩大\n private shouldShrinkContinue() {\n return !this.options.clip && this.options.shrink && !this._isBoardExpandCompleted;\n }\n\n // 根据 bounds 最大比例缩小 size\n private shrinkBoard(bounds: Bounds) {\n const leftTopPoint = bounds[0];\n const rightBottomPoint = bounds[1];\n if (rightBottomPoint.x >= this._size[0] || rightBottomPoint.y >= this._size[1]) {\n return;\n }\n const minXValue = Math.min(leftTopPoint.x, this._size[0] - rightBottomPoint.x);\n const minYValue = Math.min(leftTopPoint.y, this._size[1] - rightBottomPoint.y);\n const minRatio = Math.min(minXValue / this._size[0], minYValue / this._size[1]) * 2;\n this._size = this._size.map(v => v * (1 - minRatio)) as any;\n }\n\n // 扩充 bitmap\n private expandBoard(board: number[], bounds: Bounds, factor?: any) {\n const expandedLeftWidth = (this._size[0] * (factor || 1.1) - this._size[0]) >> 5;\n let diffWidth = expandedLeftWidth * 2 > 2 ? expandedLeftWidth : 2;\n if (diffWidth % 2 !== 0) {\n diffWidth++;\n }\n let diffHeight = Math.ceil((this._size[1] * (diffWidth << 5)) / this._size[0]);\n if (diffHeight % 2 !== 0) {\n diffHeight++;\n }\n const w = this._size[0];\n const h = this._size[1];\n const widthArr = new Array(diffWidth).fill(0);\n\n const heightArr = new Array((diffHeight / 2) * (diffWidth + (w >> 5))).fill(0);\n this.insertZerosToArray(board, h * (w >> 5), heightArr.length + diffWidth / 2);\n for (let i = h - 1; i > 0; i--) {\n this.insertZerosToArray(board, i * (w >> 5), widthArr.length);\n }\n this.insertZerosToArray(board, 0, heightArr.length + diffWidth / 2);\n this._size = [w + (diffWidth << 5), h + diffHeight];\n if (bounds) {\n bounds[0].x += (diffWidth << 5) / 2;\n bounds[0].y += diffHeight / 2;\n bounds[1].x += (diffWidth << 5) / 2;\n bounds[1].y += diffHeight / 2;\n }\n }\n\n // 分组扩充填充数组, 一次填充超过大概126000+会报stack overflow,worker环境下大概6w,这边取个比较小的\n // https://stackoverflow.com/questions/22123769/rangeerror-maximum-call-stack-size-exceeded-why\n private insertZerosToArray(array: any[], index: number, length: number) {\n const len = Math.floor(length / MAX_ARGUMENTS_LENGTH);\n const restLen = length % MAX_ARGUMENTS_LENGTH;\n\n for (let i = 0; i < len; i++) {\n array.splice(index + i * MAX_ARGUMENTS_LENGTH, 0, ...new Array(MAX_ARGUMENTS_LENGTH).fill(0));\n }\n array.splice(index + len * MAX_ARGUMENTS_LENGTH, 0, ...new Array(restLen).fill(0));\n }\n\n private getContext(canvas: any) {\n // 缩放比例\n canvas.width = 1;\n canvas.height = 1;\n const tempContext = canvas.getContext('2d');\n const imageData = tempContext.getImageData(0, 0, 1, 1);\n const ratio = Math.sqrt(imageData.data.length >> 2);\n\n canvas.width = (this.cw << 5) / ratio;\n canvas.height = this.ch / ratio;\n const context = canvas.getContext('2d');\n context.fillStyle = context.strokeStyle = 'red';\n context.textAlign = 'center';\n\n return { context: context, ratio: ratio, canvas };\n }\n\n private place(board: number[], tag: TagItem, bounds: Bounds, maxRadius: number) {\n let isCollide = false;\n // 情况1,超长词语\n if (this.shouldShrinkContinue() && (tag.width > this._size[0] || tag.height > this._size[1])) {\n this._placeStatus = 1;\n return false;\n }\n\n const dt: number = this.random() < 0.5 ? 1 : -1;\n // 根据缓存判断是否有放置空间\n if (!this.shouldShrinkContinue() && this.isSizeLargerThanMax(tag, dt)) {\n return null;\n }\n const startX = tag.x;\n const startY = tag.y;\n const maxDelta = Math.sqrt(this._size[0] * this._size[0] + this._size[1] * this._size[1]);\n const s = this.spiral(this._size);\n let t: number = -dt;\n let dxdy;\n let dx;\n let dy;\n let _tag;\n\n this._tTemp = null; // 初始化t缓存\n this._dtTemp = null; // 初始化dt缓存\n while ((dxdy = s((t += dt)))) {\n dx = dxdy[0];\n dy = dxdy[1];\n\n // 半径\n const radius = Math.sqrt(dx ** 2 + dy ** 2);\n // 弧度\n let rad = Math.atan(dy / dx);\n /*\n * 弧度从x轴正方向开始,逆时针方向为正,范围[0, 2PI]\n * atan返回值∈[-1/2PI, 1/2PI],可以正确描述一四象限\n * 第一象限atan为正,弧度正确\n * 第二象限atan为负,等同于第四象限,弧度需要+PI矫正到第二象限\n * 第三象限atan为正,等同于第一象限,弧度需要+PI矫正到第三象限\n * 第四象限atan为负,需要矫正到正值,因此弧度需要+2PI\n */\n if (dx < 0) {\n rad += Math.PI;\n } else if (dy < 0) {\n rad = 2 * Math.PI + rad;\n }\n\n // 半径更改比例[0, 1]\n const rx = this.shape(rad);\n\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) {\n break;\n } // (dx, dy)距离中心超过maxDelta,跳出螺旋返回false\n\n if (radius >= maxRadius) {\n if (isCollide && this._tTemp === null) {\n this._tTemp = t;\n this._dtTemp = dt;\n }\n continue; // 判断是否在指定形状内\n }\n\n tag.x = startX + ~~(radius * rx * Math.cos(-rad));\n tag.y = startY + ~~(radius * rx * Math.sin(-rad));\n\n // 超出画布范围\n _tag = tag;\n if (this.options.clip) {\n // 通过剪裁文字,让文字能够正常渲染\n\n if (!this.shouldShrinkContinue()) {\n // 当文字全部在外面时\n if (isFullOutside(_tag, this._size)) {\n if (isCollide && this._tTemp === null) {\n this._tTemp = t;\n this._dtTemp = dt;\n }\n continue;\n } else if (isPartOutside(_tag, this._size)) {\n // 部分在外面\n _tag = clipInnerTag(_tag, this._size);\n }\n } else {\n if (isPartOutside(_tag, this._size)) {\n if (isCollide && this._tTemp === null) {\n this._tTemp = t;\n this._dtTemp = dt;\n }\n continue;\n }\n }\n } else {\n if (isPartOutside(_tag, this._size)) {\n if (isCollide && this._tTemp === null) {\n this._tTemp = t;\n this._dtTemp = dt;\n }\n continue;\n }\n }\n\n // 进入collide检测\n isCollide = true;\n // TODO only check for collisions within current bounds.\n if (!bounds || collideRects(_tag, bounds)) {\n if (!bounds || !cloudCollide(_tag, board, this._size)) {\n // 合并文字占用部分到board\n const sprite = _tag.sprite;\n const w = _tag.width >> 5;\n const sw = this._size[0] >> 5;\n const lx = _tag.x - (w << 4);\n const sx = lx & 0x7f;\n const msx = 32 - sx;\n const h = _tag.y1 - _tag.y0;\n let x = (_tag.y + _tag.y0) * sw + (lx >> 5);\n let last;\n for (let j = 0; j < h; j++) {\n last = 0;\n for (let i = 0; i <= w; i++) {\n board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n // paint(board, size, originSize)\n x += sw;\n }\n // paint(_tag.sprite, [_tag.width, _tag.height])\n // paint(board, size, originSize)\n tag.sprite = null;\n _tag.sprite = null;\n // if (Date.now() - start > 10) {\n // console.log(_tag.text, Date.now() - start, placeCount)\n // }\n return true;\n }\n }\n }\n // if (Date.now() - start > 50) {\n // console.log(_tag.text, Date.now() - start, placeCount)\n // }\n if (this._tTemp !== null) {\n this._placeStatus = 3;\n }\n !this.shouldShrinkContinue() && this.setCache(_tag, dt);\n return false;\n }\n\n /**\n * 清除缓存\n */\n private clearCache() {\n this.cacheMap.clear();\n }\n /**\n * 设置缓存\n * @param {*} tag\n * @param {number} dt 旋转方向, 1, -1\n */\n private setCache(tag: TagItem, dt: number) {\n const cacheKey = `${tag.angle}-${dt}`;\n const w = tag.x1 - tag.x0;\n const h = tag.y1 - tag.y0;\n if (!this.cacheMap.has(cacheKey)) {\n this.cacheMap.set(cacheKey, {\n width: w,\n height: h\n });\n return;\n }\n const { width, height } = this.cacheMap.get(cacheKey);\n if ((w < width && h < height) || (w <= width && h < height)) {\n this.cacheMap.set(cacheKey, {\n width: w,\n height: h\n });\n }\n }\n\n /**\n * 判断当前text是否能放置\n * 如果缓存中有同旋转角度和旋转方向的text,\n * 且当前text的boundingBox大于缓存boundingBox, 则跳过放置尝试\n * @param {*} tag\n * @param {*} dt 旋转方向, 1, -1\n */\n private isSizeLargerThanMax(tag: TagItem, dt: number) {\n const cacheKey = `${tag.angle}-${dt}`;\n if (!this.cacheMap.has(cacheKey)) {\n return false;\n }\n const { width, height } = this.cacheMap.get(cacheKey);\n const w = tag.x1 - tag.x0;\n const h = tag.y1 - tag.y0;\n return w >= width && h >= height;\n }\n}\n\n// Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\n// cloudSprite从索引di开始向后绘制词语sprite,直到可以一次绘制的最大范围;\n// 如果索引di在它自己的轮次都无法绘制(hasText = true),那么它就是超大词语,无法在屏幕出现\n// 此时,不需要为他扩大画布\nfunction cloudSprite(contextAndRatio: any, d: TagItem, data: TagItem[], di: number, cw: number, ch: number) {\n if (d.sprite) {\n return;\n }\n const c = contextAndRatio.context;\n const ratio = contextAndRatio.ratio;\n // 设置transform\n c.setTransform(ratio, 0, 0, ratio, 0, 0);\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n let x = 0;\n let y = 0;\n let maxh = 0;\n const n = data.length;\n let w;\n let w32;\n let h;\n let i;\n let j;\n --di;\n while (++di < n) {\n d = data[di];\n c.save();\n c.font = d.fontStyle + ' ' + d.fontWeight + ' ' + ~~((d.fontSize + 1) / ratio) + 'px ' + d.fontFamily;\n w = c.measureText(d.text + 'm').width * ratio;\n h = d.fontSize << 1;\n if (d.angle) {\n const sr = Math.sin(d.angle);\n const cr = Math.cos(d.angle);\n const wcr = w * cr;\n const wsr = w * sr;\n const hcr = h * cr;\n const hsr = h * sr;\n w = ((Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 31) >> 5) << 5;\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n } else {\n w = ((w + 31) >> 5) << 5;\n }\n // w, h为旋转后,词语所占区域的宽高\n if (h > maxh) {\n maxh = h;\n } // 记录当前行最大高度\n // 如果当前行放不下,就另起一行,y方向向下移动当前行的最大高度\n if (x + w >= cw << 5) {\n x = 0;\n y += maxh;\n maxh = 0;\n }\n\n if (y + h >= ch) {\n break;\n } // 绘制区域的高度为2048px,超过长度下次绘制(TODO: 如果存在超高词语,这里是否可以当做一个退出机制?)\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n if (d.angle) {\n c.rotate(d.angle);\n }\n c.fillText(d.text, 0, 0);\n if (d.padding) {\n c.lineWidth = 2 * d.padding;\n c.strokeText(d.text, 0, 0);\n }\n c.restore();\n // 词语绘制完成,记录其在画布上的相对位置和范围\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n // x0, x1, y0, y1是四角相对于中心点的相对坐标\n d.x1 = w >> 1;\n d.y1 = h >> 1;\n d.x0 = -d.x1;\n d.y0 = -d.y1;\n d.hasText = true;\n // x位置右移,等待下一个词语绘制\n x += w;\n }\n\n const pixelsImageData = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio);\n const pixels = pixelsImageData.data;\n const sprite: any[] = [];\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText) {\n continue;\n }\n w = d.width;\n w32 = w >> 5;\n h = d.y1 - d.y0;\n // Zero the buffer\n for (i = 0; i < h * w32; i++) {\n sprite[i] = 0;\n }\n x = d.xoff;\n if (x == null) {\n return;\n }\n y = d.yoff;\n let seen = 0;\n let seenRow = -1;\n for (j = 0; j < h; j++) {\n for (i = 0; i < w; i++) {\n // 在sprite数组中,每一个Uint32的数字记录了32个像素的绘制情况\n // 在pixels中,只取alpha通道的值,因此需要每个像素需要 << 2 得到alpha通道\n const k = w32 * j + (i >> 5);\n const m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0;\n sprite[k] |= m;\n seen |= m;\n }\n // 如果当前行发现着色,开始记录行号\n if (seen) {\n seenRow = j;\n } else {\n // 如果当前行未发现着色,则在结果中省去改行(高度--,y坐标++,左上角相对坐标++)\n d.y0++;\n h--;\n j--;\n y++;\n }\n }\n d.y1 = d.y0 + seenRow; // 更新右下角相对坐标\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32); // 舍弃数组中冗余部分\n }\n}\n\n// Use mask-based collision detection.\nfunction cloudCollide(tag: TagItem, board: number[], size: [number, number]) {\n const sw = size[0] >> 5;\n const sprite = tag.sprite;\n const w = tag.width >> 5;\n const lx = tag.x - (w << 4);\n const sx = lx & 0x7f;\n const msx = 32 - sx;\n const h = tag.y1 - tag.y0;\n let x = (tag.y + tag.y0) * sw + (lx >> 5);\n let last;\n for (let j = 0; j < h; j++) {\n last = 0;\n for (let i = 0; i <= w; i++) {\n if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) & board[x + i]) {\n return true;\n }\n }\n x += sw;\n }\n return false;\n}\n\nfunction cloudBounds(bounds: Bounds, d: TagItem) {\n const b0 = bounds[0];\n const b1 = bounds[1];\n if (d.x + d.x0 < b0.x) {\n b0.x = d.x + d.x0;\n }\n if (d.y + d.y0 < b0.y) {\n b0.y = d.y + d.y0;\n }\n if (d.x + d.x1 > b1.x) {\n b1.x = d.x + d.x1;\n }\n if (d.y + d.y1 > b1.y) {\n b1.y = d.y + d.y1;\n }\n}\n\nfunction collideRects(a: TagItem, b: Bounds) {\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\n\nconst isFullOutside = (tag: TagItem, size: [number, number]) => {\n return tag.x + tag.x0 > size[0] || tag.y + tag.y0 > size[0] || tag.x + tag.x1 < 0 || tag.y + tag.y1 < 0;\n};\n\nconst isPartOutside = (tag: TagItem, size: [number, number]) => {\n return tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1];\n};\n\nfunction clipInnerTag(tag: TagItem, size: [number, number]) {\n const sprite = tag.sprite;\n const h = tag.y1 - tag.y0;\n const w = tag.width >> 5;\n let x = 0;\n\n const _sprite: number[] = [];\n const js = Math.max(-(tag.y0 + tag.y), 0);\n const je = Math.min(h + (size[1] - (tag.y1 + tag.y)), h);\n const is = Math.max(-(tag.x0 + tag.x), 0) >> 5;\n const ie = Math.min(w + ((size[0] - (tag.x1 + tag.x)) >> 5) + 1, w);\n\n for (let j = 0; j < h; j++) {\n for (let i = 0; i < w; i++) {\n if (j < js || je <= j || i < is || ie <= i) {\n // sprite[x + i] = null\n // if (ie === i) {\n // var value = sprite[x + i]\n // var overflow = (ie << 5) - (tag.x1 + tag.x)\n // _sprite.push((value >> overflow << overflow))\n // }\n } else {\n _sprite.push(sprite[x + i]);\n }\n }\n x += w;\n }\n // paint(sprite, [tag.width, tag.height])\n // var _sprite = sprite.filter(d => d !== null)\n const xl = is << 5;\n const xr = (w - ie) << 5;\n const yb = js;\n const yt = h - je;\n // paint(_sprite, [tag.width - xl - xr, tag.height - yb - yt])\n\n return {\n ...tag,\n width: tag.width - xl - xr,\n height: tag.height - yb - yt,\n x0: tag.x0 + xl,\n x1: tag.x1 - xr,\n y0: tag.y0 + yb,\n y1: tag.y1 - yt,\n x: tag.x + xl / 2 - xr / 2,\n // y: tag.y + yb / 2 - yt / 2,\n sprite: _sprite\n };\n}\n","import type { IProgressiveTransformResult } from '@visactor/vgrammar-core';\n/*!\n * wordcloud2.js\n * http://timdream.org/wordcloud2.js/\n *\n * Copyright 2011 - 2019 Tim Guan-tin Chien and contributors.\n * Released under the MIT license\n */\n\nimport type { IBaseLayoutOptions } from './interface';\nimport { getMaxRadiusAndCenter } from './shapes';\nimport { merge, shuffleArray } from '@visactor/vutils';\nimport { BaseLayout } from './base';\n\ninterface IGridLayoutOptions extends IBaseLayoutOptions {\n gridSize?: number;\n\n ellipticity?: number;\n}\n\ninterface TextInfo {\n datum: any;\n /** Read the pixels and save the information to the occupied array */\n occupied: [number, number][];\n bounds: [number, number, number, number];\n gw: number;\n gh: number;\n fillTextOffsetX: number;\n fillTextOffsetY: number;\n fillTextWidth: number;\n fillTextHeight: number;\n fontSize: number;\n fontWeight: string;\n fontStyle: string;\n fontFamily: string;\n angle: number;\n text: string;\n distance?: number;\n theta?: number;\n}\n\nexport class GridLayout extends BaseLayout implements IProgressiveTransformResult {\n static defaultOptions: Partial = {\n gridSize: 8,\n ellipticity: 1\n };\n\n private gridSize: number;\n\n /* ================== runtime vars ================== */\n private center: [number, number];\n private pointsAtRadius: [number, number, number][][];\n private ngx: number;\n private ngy: number;\n private grid: boolean[][];\n private maxRadius: number;\n\n constructor(options: IGridLayoutOptions) {\n super(merge({}, GridLayout.defaultOptions, options));\n\n this.gridSize = Math.max(Math.floor(this.options.gridSize), 4);\n }\n\n private getPointsAtRadius(radius: number) {\n if (this.pointsAtRadius[radius]) {\n return this.pointsAtRadius[radius];\n }\n\n // Look for these number of points on each radius\n const T = radius * 8;\n\n // Getting all the points at this radius\n let t = T;\n const points: [number, number, number][] = [];\n\n if (radius === 0) {\n points.push([this.center[0], this.center[1], 0]);\n }\n\n while (t--) {\n // distort the radius to put the cloud in shape\n const rx = this.shape((t / T) * 2 * Math.PI); // 0 to 1\n\n // Push [x, y, t] t is used solely for getTextColor()\n points.push([\n this.center[0] + radius * rx * Math.cos((-t / T) * 2 * Math.PI),\n this.center[1] + radius * rx * Math.sin((-t / T) * 2 * Math.PI) * this.options.ellipticity,\n (t / T) * 2 * Math.PI\n ]);\n }\n\n this.pointsAtRadius[radius] = points;\n return points;\n }\n\n private getTextInfo(item: any, shrinkRatio: number = 1): TextInfo {\n // calculate the acutal font size\n // fontSize === 0 means weightFactor function wants the text skipped,\n // and size < minSize means we cannot draw the text.\n const sizeShrinkRatio = this.options.clip ? 1 : shrinkRatio;\n const fontSize = Math.max(Math.floor(this.getTextFontSize(item) * sizeShrinkRatio), this.options.minFontSize);\n let word = this.getText(item) + '';\n\n if (this.options.clip) {\n word = word.slice(0, Math.ceil(word.length * shrinkRatio));\n }\n\n if (!word) {\n return null;\n }\n\n // Get fontWeight that will be used to set fctx.font\n const fontWeight = this.getTextFontWeight(item);\n const fontStyle = this.getTextFontStyle(item);\n const angle = this.getTextRotate ? this.getTextRotate(item) ?? 0 : 0;\n const fontFamily = this.getTextFontFamily(item);\n\n // eslint-disable-next-line no-undef\n const fcanvas = document.createElement('canvas');\n const fctx = fcanvas.getContext('2d', { willReadFrequently: true });\n\n fctx.font = fontStyle + ' ' + fontWeight + ' ' + fontSize.toString(10) + 'px ' + fontFamily;\n\n // Estimate the dimension of the text with measureText().\n const fw = fctx.measureText(word).width;\n const fh = Math.max(fontSize, fctx.measureText('m').width, fctx.measureText('\\uFF37').width);\n\n // Create a boundary box that is larger than our estimates,\n // so text don't get cut of (it sill might)\n let boxWidth = fw + fh * 2;\n let boxHeight = fh * 3;\n const fgw = Math.ceil(boxWidth / this.gridSize);\n const fgh = Math.ceil(boxHeight / this.gridSize);\n boxWidth = fgw * this.gridSize;\n boxHeight = fgh * this.gridSize;\n\n // Calculate the proper offsets to make the text centered at\n // the preferred position.\n\n // This is simply half of the width.\n const fillTextOffsetX = -fw / 2;\n // Instead of moving the box to the exact middle of the preferred\n // position, for Y-offset we move 0.4 instead, so Latin alphabets look\n // vertical centered.\n const fillTextOffsetY = -fh * 0.4;\n\n // Calculate the actual dimension of the canvas, considering the rotation.\n const cgh = Math.ceil(\n (boxWidth * Math.abs(Math.sin(angle)) + boxHeight * Math.abs(Math.cos(angle))) / this.gridSize\n );\n const cgw = Math.ceil(\n (boxWidth * Math.abs(Math.cos(angle)) + boxHeight * Math.abs(Math.sin(angle))) / this.gridSize\n );\n const width = cgw * this.gridSize;\n const height = cgh * this.gridSize;\n\n fcanvas.setAttribute('width', '' + width);\n fcanvas.setAttribute('height', '' + height);\n\n // Scale the canvas with |mu|.\n fctx.scale(1, 1);\n fctx.translate(width / 2, height / 2);\n fctx.rotate(-angle);\n\n // Once the width/height is set, ctx info will be reset.\n // Set it again here.\n fctx.font = fontStyle + ' ' + fontWeight + ' ' + fontSize.toString(10) + 'px ' + fontFamily;\n\n // Fill the text into the fcanvas.\n // XXX: We cannot because textBaseline = 'top' here because\n // Firefox and Chrome uses different default line-height for canvas.\n // Please read https://bugzil.la/737852#c6.\n // Here, we use textBaseline = 'middle' and draw the text at exactly\n // 0.5 * fontSize lower.\n fctx.fillStyle = '#000';\n fctx.textBaseline = 'middle';\n fctx.fillText(word, fillTextOffsetX, fillTextOffsetY);\n\n // Get the pixels of the text\n const imageData = fctx.getImageData(0, 0, width, height).data;\n\n if (this.exceedTime()) {\n return null;\n }\n\n // Read the pixels and save the information to the occupied array\n const occupied: [number, number][] = [];\n let gx = cgw;\n let gy;\n const bounds: [number, number, number, number] = [cgh / 2, cgw / 2, cgh / 2, cgw / 2];\n\n const singleGridLoop = (gx: number, gy: number, out: [number, number][]) => {\n let y = this.gridSize;\n while (y--) {\n let x = this.gridSize;\n while (x--) {\n if (imageData[((gy * this.gridSize + y) * width + (gx * this.gridSize + x)) * 4 + 3]) {\n out.push([gx, gy]);\n\n if (gx < bounds[3]) {\n bounds[3] = gx;\n }\n if (gx > bounds[1]) {\n bounds[1] = gx;\n }\n if (gy < bounds[0]) {\n bounds[0] = gy;\n }\n if (gy > bounds[2]) {\n bounds[2] = gy;\n }\n\n return;\n }\n }\n }\n };\n while (gx--) {\n gy = cgh;\n while (gy--) {\n singleGridLoop(gx, gy, occupied);\n }\n }\n\n // Return information needed to create the text on the real canvas\n return {\n datum: item,\n occupied: occupied,\n bounds: bounds,\n gw: cgw,\n gh: cgh,\n fillTextOffsetX: fillTextOffsetX,\n fillTextOffsetY: fillTextOffsetY,\n fillTextWidth: fw,\n fillTextHeight: fh,\n fontSize,\n fontStyle,\n fontWeight,\n fontFamily,\n angle,\n text: word\n };\n }\n\n /* Help function to updateGrid */\n private fillGridAt = (x: number, y: number) => {\n if (x >= this.ngx || y >= this.ngy || x < 0 || y < 0) {\n return;\n }\n\n this.grid[x][y] = false;\n };\n\n /* Update the filling information of the given space with occupied points.\n Draw the mask on the canvas if necessary. */\n private updateGrid = (gx: number, gy: number, gw: number, gh: number, info: TextInfo) => {\n const occupied = info.occupied;\n\n let i = occupied.length;\n while (i--) {\n const px = gx + occupied[i][0];\n const py = gy + occupied[i][1];\n\n if (px >= this.ngx || py >= this.ngy || px < 0 || py < 0) {\n continue;\n }\n\n this.fillGridAt(px, py);\n }\n };\n\n /* Determine if there is room available in the given dimension */\n private canFitText(gx: number, gy: number, gw: number, gh: number, occupied: number[][]) {\n // Go through the occupied points,\n // return false if the space is not available.\n let i = occupied.length;\n while (i--) {\n const px = gx + occupied[i][0];\n const py = gy + occupied[i][1];\n\n if (px >= this.ngx || py >= this.ngy || px < 0 || py < 0) {\n if (!this.options.drawOutOfBound) {\n return false;\n }\n continue;\n }\n\n if (!this.grid[px][py]) {\n return false;\n }\n }\n return true;\n }\n\n /* putWord() processes each item on the list,\n calculate it's size and determine it's position, and actually\n put it on the canvas. */\n layoutWord(index: number, shrinkRatio: number = 1): boolean {\n // get info needed to put the text onto the canvas\n const item = this.data[index];\n const info = this.getTextInfo(item, shrinkRatio);\n\n // not getting the info means we shouldn't be drawing this one.\n if (!info) {\n return false;\n }\n\n if (this.exceedTime()) {\n return false;\n }\n\n // If drawOutOfBound is set to false,\n // skip the loop if we have already know the bounding box of\n // word is larger than the canvas.\n if (\n !this.options.drawOutOfBound &&\n (!this.options.shrink || info.fontSize <= this.options.minFontSize) &&\n !this.options.clip\n ) {\n const bounds = info.bounds;\n if (bounds[1] - bounds[3] + 1 > this.ngx || bounds[2] - bounds[0] + 1 > this.ngy) {\n return false;\n }\n }\n\n // Determine the position to put the text by\n // start looking for the nearest points\n let r = this.maxRadius + 1;\n\n const tryToPutWordAtPoint = (gxy: [number, number, number]) => {\n const gx = Math.floor(gxy[0] - info.gw / 2);\n const gy = Math.floor(gxy[1] - info.gh / 2);\n const gw = info.gw;\n const gh = info.gh;\n\n // If we cannot fit the text at this position, return false\n // and go to the next position.\n if (!this.canFitText(gx, gy, gw, gh, info.occupied)) {\n return false;\n }\n\n info.distance = this.maxRadius - r;\n info.theta = gxy[2];\n\n // Actually put the text on the canvas\n this.outputText(gx, gy, info);\n\n // Mark the spaces on the grid as filled\n this.updateGrid(gx, gy, gw, gh, info);\n\n // Return true so some() will stop and also return true.\n return true;\n };\n\n while (r--) {\n let points = this.getPointsAtRadius(this.maxRadius - r);\n\n if (this.options.random) {\n points = [].concat(points);\n shuffleArray(points);\n }\n\n // Try to fit the words by looking at each point.\n // array.some() will stop and return true\n // when putWordAtPoint() returns true.\n // If all the points returns false, array.some() returns false.\n const drawn = points.some(tryToPutWordAtPoint);\n\n if (drawn) {\n // leave putWord() and return true\n return true;\n }\n }\n if (this.options.clip) {\n return this.layoutWord(index, shrinkRatio * 0.75);\n } else if (this.options.shrink && info.fontSize > this.options.minFontSize) {\n return this.layoutWord(index, shrinkRatio * 0.75);\n }\n // we tried all distances but text won't fit, return false\n return false;\n }\n\n private outputText(gx: number, gy: number, info: TextInfo) {\n const color = this.getTextColor(info);\n const output = {\n text: info.text,\n datum: info.datum,\n color,\n fontStyle: info.fontStyle,\n fontWeight: info.fontWeight,\n fontFamily: info.fontFamily,\n angle: info.angle,\n width: info.fillTextWidth,\n height: info.fillTextHeight,\n x: (gx + info.gw / 2) * this.gridSize,\n y: (gy + info.gh / 2) * this.gridSize + info.fillTextOffsetY + info.fontSize * 0.5,\n fontSize: info.fontSize\n };\n\n this.result.push(output);\n if (this.progressiveResult) {\n this.progressiveResult.push(output);\n }\n }\n\n private initGrid(canvas?: HTMLCanvasElement) {\n /* Clear the canvas only if the clearCanvas is set,\n if not, update the grid to the current canvas state */\n this.grid = [];\n\n let i;\n\n if (!canvas) {\n /* fill the grid with empty state */\n let gx = this.ngx;\n while (gx--) {\n this.grid[gx] = [];\n let gy = this.ngy;\n while (gy--) {\n this.grid[gx][gy] = true;\n }\n }\n } else {\n /* Determine bgPixel by creating\n another canvas and fill the specified background color. */\n // eslint-disable-next-line no-undef\n let bctx = document.createElement('canvas').getContext('2d');\n\n bctx.fillStyle = this.options.backgroundColor;\n bctx.fillRect(0, 0, 1, 1);\n let bgPixel = bctx.getImageData(0, 0, 1, 1).data;\n\n /* Read back the pixels of the canvas we got to tell which part of the\n canvas is empty.\n (no clearCanvas only works with a canvas, not divs) */\n let imageData = canvas\n .getContext('2d')\n .getImageData(0, 0, this.ngx * this.gridSize, this.ngy * this.gridSize).data;\n\n const singleGridLoop = (gx: number, gy: number) => {\n let y = this.gridSize;\n while (y--) {\n let x = this.gridSize;\n while (x--) {\n i = 4;\n while (i--) {\n if (\n imageData[((gy * this.gridSize + y) * this.ngx * this.gridSize + (gx * this.gridSize + x)) * 4 + i] !==\n bgPixel[i]\n ) {\n this.grid[gx][gy] = false;\n return;\n }\n }\n }\n }\n };\n\n let gx = this.ngx;\n while (gx--) {\n this.grid[gx] = [];\n let gy = this.ngy;\n while (gy--) {\n /* eslint no-labels: [\"error\", { \"allowLoop\": true }] */\n singleGridLoop(gx, gy);\n if (this.grid[gx][gy] !== false) {\n this.grid[gx][gy] = true;\n }\n }\n }\n\n imageData = bctx = bgPixel = undefined;\n }\n }\n\n layout(\n data: any[],\n config: { width: number; height: number; origin?: [number, number]; canvas?: HTMLCanvasElement }\n ) {\n this.initProgressive();\n this.data = data;\n this.pointsAtRadius = [];\n this.ngx = Math.floor(config.width / this.gridSize);\n this.ngy = Math.floor(config.height / this.gridSize);\n const { center, maxRadius } = getMaxRadiusAndCenter(this.options.shape as string, [config.width, config.height]);\n\n // Determine the center of the word cloud\n this.center = config.origin\n ? [config.origin[0] / this.gridSize, config.origin[1] / this.gridSize]\n : [center[0] / this.gridSize, center[1] / this.gridSize];\n\n // Maxium radius to look for space\n this.maxRadius = Math.floor(maxRadius / this.gridSize);\n\n this.initGrid(config.canvas);\n this.result = [];\n\n let i = 0;\n\n while (i < data.length) {\n const drawn = this.layoutWord(i);\n\n i++;\n this.progressiveIndex = i;\n\n if (this.exceedTime()) {\n break;\n }\n }\n\n return this.result;\n }\n}\n","/**\n * 主要用于小程序环境的快速布局算法\n */\nimport type { ITextAttribute } from '@visactor/vrender-core';\nimport { getTextBounds } from '@visactor/vrender-core';\nimport type { IProgressiveTransformResult } from '@visactor/vgrammar-core';\nimport type { IBaseLayoutOptions, TagItemAttribute } from './interface';\nimport { BaseLayout } from './base';\nimport { merge } from '@visactor/vutils';\nexport interface TagItem {\n datum: any;\n width: number;\n height: number;\n text: string;\n fontSize: number;\n fontWeight: string;\n fontStyle: string;\n fontFamily: string;\n angle: number;\n x: number;\n y: number;\n top: number;\n left: number;\n}\n\ninterface IFastLayoutOptions extends IBaseLayoutOptions {\n padding?: TagItemAttribute;\n enlarge?: boolean;\n}\n\nexport class FastLayout extends BaseLayout implements IProgressiveTransformResult {\n private random: () => number;\n\n /* ==================== runtime vars ======================== */\n private center: [number, number];\n private aspectRatio: number;\n private maxRadius: number;\n private width: number;\n private height: number;\n\n static defaultOptions: Partial = {\n enlarge: false\n };\n\n constructor(options: IFastLayoutOptions) {\n super(merge({}, FastLayout.defaultOptions, options));\n this.random = this.options.random ? Math.random : () => 0;\n this.aspectRatio = 1;\n }\n\n // 新词是否与目前layout结果重叠\n private fit(word: TagItem) {\n for (let i = 0, len = this.result.length; i < len; i++) {\n if (isOverlap(word, this.result[i] as TagItem)) {\n return false;\n }\n }\n return true;\n }\n\n private getTextInfo(datum: any) {\n const info: Partial = {\n datum,\n fontSize: this.getTextFontSize(datum),\n fontWeight: this.getTextFontWeight(datum),\n fontStyle: this.getTextFontStyle(datum),\n fontFamily: this.getTextFontFamily(datum),\n angle: this.getTextRotate(datum),\n text: this.getText(datum) + '',\n x: this.center[0],\n y: this.center[1]\n };\n\n const bounds = getTextBounds(info as ITextAttribute);\n\n info.width = bounds.width();\n info.height = bounds.height();\n info.top = this.center[1] - info.height + info.height * 0.21;\n info.left = this.center[0] - info.width / 2;\n\n return info as TagItem;\n }\n\n layoutWord(index: number) {\n const step = 0.5; // 步长决定布局时间,也决定布局结果\n const info = this.getTextInfo(this.data[index]);\n\n let angle = 2 * Math.PI;\n let radius = 0;\n let left = info.left;\n let top = info.top;\n const width = info.width;\n const height = info.height;\n let rx = 1;\n let isFit = this.fit(info);\n\n while (!isFit && radius < this.maxRadius) {\n // elliptic shape\n radius += step; // spiral radius\n rx = this.shape((radius / this.maxRadius) * 2 * Math.PI); // 0 to 1\n angle += (this.options.random ? (this.random() > 0.5 ? 1 : -1) : index % 2 === 0 ? 1 : -1) * step;\n\n left = this.center[0] - width / 2 + radius * rx * Math.cos(angle) * this.aspectRatio;\n top = this.center[1] - height / 2 + radius * rx * Math.sin(angle);\n\n info.left = left;\n info.top = top;\n info.x = left + width / 2;\n info.y = top + height / 2;\n\n isFit = this.fit(info);\n }\n\n if (!isFit) {\n return false;\n }\n\n if (\n this.options.clip ||\n (info.left >= 0 && info.left + info.width <= this.width && info.top >= 0 && info.top + info.height <= this.height)\n ) {\n this.result.push(info);\n\n return true;\n }\n\n return false;\n }\n\n layout(data: any[], config: { width: number; height: number }) {\n if (!data?.length) {\n return [];\n }\n\n this.initProgressive();\n this.result = [];\n this.maxRadius = Math.sqrt(config.width * config.width + config.height * config.height) / 2;\n this.center = [config.width / 2, config.height / 2];\n this.width = config.width;\n this.height = config.height;\n this.data = data.sort((a: any, b: any) => {\n return this.getTextFontSize(b) - this.getTextFontSize(a);\n });\n\n // 将words按照fontSize排序,结果更美观\n // words.sort((a, b) => b.fontSize - a.fontSize);\n\n let i = 0;\n\n while (i < data.length) {\n const drawn = this.layoutWord(i);\n\n i++;\n this.progressiveIndex = i;\n\n if (this.exceedTime()) {\n break;\n }\n }\n\n return this.result;\n }\n}\n\n// 判断矩形是否重叠\nfunction isOverlap(a: TagItem, b: TagItem) {\n if (a.left + a.width < b.left || a.top + a.height < b.top || a.left > b.left + b.width || a.top > b.top + b.height) {\n return false;\n }\n return true;\n}\n","import { CloudLayout } from './cloud-layout';\nimport { isFunction, isNumber, isString, toNumber, Logger } from '@visactor/vutils';\nimport type { TagOutputItem, TagItemAttribute } from './interface';\nimport { GridLayout } from './grid-layout';\nimport { FastLayout } from './fast-layout';\n\nconst OUTPUT = {\n x: 'x',\n y: 'y',\n z: 'z',\n fontFamily: 'fontFamily',\n fontSize: 'fontSize',\n fontStyle: 'fontStyle',\n fontWeight: 'fontWeight',\n angle: 'angle'\n};\n\nexport type FieldOption = { field: string };\nexport type CallbackOption = (datum: any) => any;\nexport type AsType = {\n x: string;\n y: string;\n z: string;\n fontFamily: string;\n fontSize: string;\n fontStyle: string;\n fontWeight: string;\n angle: string;\n};\n\nexport const transform = (\n options: {\n size?: [number, number];\n fontFamily?: FieldOption | TagItemAttribute;\n fontStyle?: FieldOption | TagItemAttribute;\n fontWeight?: FieldOption | TagItemAttribute;\n fontSize?: FieldOption | TagItemAttribute;\n fontSizeRange?: [number, number];\n rotate?: FieldOption | TagItemAttribute;\n text: FieldOption | CallbackOption | string;\n spiral?: string;\n padding?: FieldOption | TagItemAttribute;\n shape?: string;\n shrink?: boolean;\n enlarge?: boolean;\n clip?: boolean;\n minFontSize?: number;\n randomVisible?: boolean;\n as?: AsType;\n layoutType?: string;\n progressiveTime?: number;\n progressiveStep?: number;\n depth_3d?: number;\n postProjection?: string;\n },\n upstreamData: any[]\n) => {\n if (options.size && (options.size[0] <= 0 || options.size[1] <= 0)) {\n const logger = Logger.getInstance();\n logger.info('Wordcloud size dimensions must be greater than 0');\n // size非法不报错,不进行布局,ChartSpace层会有用户初始化size为0的情况\n return [];\n }\n\n /** 输入数据转换 */\n const data = upstreamData;\n const canvasSize = (options.size ?? [500, 500]).slice() as [number, number];\n // canvasSize必须是整数\n canvasSize[0] = Math.floor(canvasSize[0]);\n canvasSize[1] = Math.floor(canvasSize[1]);\n const fontFamily = options.fontFamily ? field(options.fontFamily) : 'sans-serif';\n const fontStyle = options.fontStyle ? field(options.fontStyle) : 'normal';\n const fontWeight = options.fontWeight ? field(options.fontWeight) : 'normal';\n const rotate = options.rotate ? field(options.rotate) : 0;\n const text = field(options.text);\n const spiral = options.spiral ?? 'archimedean';\n const padding = options.padding ? field(options.padding) : 1;\n const shape = options.shape ?? 'square';\n const shrink = options.shrink ?? false;\n const enlarge = options.enlarge ?? false;\n const clip = options.clip ?? false;\n const minFontSize = options.minFontSize;\n const randomVisible = options.randomVisible;\n const as = options.as || OUTPUT;\n const depth_3d = options.depth_3d;\n const postProjection = options.postProjection;\n\n // 根据range转换fontSize\n let fontSize = options.fontSize ? field(options.fontSize) : 14;\n const fontSizeRange = options.fontSizeRange;\n // 只有fontSize不为固定值时,fontSizeRange才生效\n if (fontSizeRange && !isNumber(fontSize)) {\n const fsize: any = fontSize;\n const fontSizeSqrtScale = generateSqrtScale(extent(fsize, data), fontSizeRange as number[]);\n\n fontSize = datum => {\n return fontSizeSqrtScale(fsize(datum));\n };\n }\n\n let Layout: any = CloudLayout;\n\n if (options.layoutType === 'fast') {\n Layout = FastLayout;\n } else if (options.layoutType === 'grid') {\n Layout = GridLayout;\n }\n\n /** 执行布局算法 */\n const layout = new Layout({\n text,\n padding,\n spiral,\n shape,\n rotate,\n fontFamily,\n fontStyle,\n fontWeight,\n fontSize,\n shrink,\n clip,\n enlarge,\n minFontSize,\n random: randomVisible,\n progressiveStep: options.progressiveStep,\n progressiveTime: options.progressiveTime,\n outputCallback: (words: any[]) => {\n const res: any[] = [];\n let t: any;\n let w: TagOutputItem;\n\n for (let i = 0, len = words.length; i < len; i++) {\n w = words[i];\n t = w.datum;\n t[as.x] = w.x;\n t[as.y] = w.y;\n t[as.fontFamily] = w.fontFamily;\n t[as.fontSize] = w.fontSize;\n t[as.fontStyle] = w.fontStyle;\n t[as.fontWeight] = w.fontWeight;\n t[as.angle] = w.angle;\n\n if (postProjection === 'StereographicProjection') {\n stereographicProjection(canvasSize, w, t, as, depth_3d);\n }\n\n res.push(t);\n }\n return res;\n }\n });\n\n layout.layout(data, {\n width: canvasSize[0],\n height: canvasSize[1]\n });\n\n if (options.progressiveStep > 0 || options.progressiveTime > 0) {\n return {\n progressive: layout\n };\n }\n\n return layout.output();\n};\n\n// 取数逻辑\nconst field = (option: FieldOption | TagItemAttribute) => {\n if (isString(option) || isNumber(option) || isFunction(option)) {\n return option as TagItemAttribute;\n }\n return (datum: any) => datum[(option as FieldOption).field] as T;\n};\n\nconst sqrt = (x: number) => {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n};\n\n// simulation sqrt scale\nconst generateSqrtScale = (domain: number[], range: number[]) => {\n if (domain[0] === domain[1]) {\n return (datum: number) => range[0]; // match smallest fontsize\n }\n\n const s0 = sqrt(domain[0]);\n const s1 = sqrt(domain[1]);\n const min = Math.min(s0, s1);\n const max = Math.max(s0, s1);\n\n return (datum: number) => ((sqrt(datum) - min) / (max - min)) * (range[1] - range[0]) + range[0];\n};\n\nconst extent = (field: any, data: any[]) => {\n let min = +Infinity;\n let max = -Infinity;\n const n = data.length;\n let v: any;\n\n for (let i = 0; i < n; ++i) {\n // 字符串类型转换\n v = toNumber(field(data[i]));\n if (v < min) {\n min = v;\n }\n if (v > max) {\n max = v;\n }\n }\n\n // 如果单条数据,匹配最大字号\n if (data.length === 1 && min === max) {\n min -= 10000;\n }\n\n return [min, max];\n};\n\nfunction stereographicProjection(canvasSize: [number, number], w: any, t: any, as: any, depth_3d?: number) {\n const maxSize = Math.max(canvasSize[0], canvasSize[1]);\n const r = maxSize / 2;\n const out = _StereographicProjection(canvasSize[0], canvasSize[1], r, { x: r, y: r, z: depth_3d ?? r }, w);\n t[as.x] = out.x;\n t[as.y] = out.y;\n t[as.z] = out.z;\n}\n\nfunction _StereographicProjection(\n w: number,\n h: number,\n r: number,\n center: { x: number; y: number; z: number },\n word: { x: number; y: number }\n) {\n const { x, y } = word;\n const theta = (x / w) * Math.PI * 2;\n let phi = Math.PI - (y / h) * Math.PI;\n // 由于cos函数的特性,调整phi的分布,向内聚\n phi += ((phi < Math.PI / 2 ? 1 : -1) * Math.pow(Math.min(phi - Math.PI / 2, 1), 2)) / 5;\n const nx = r * Math.sin(phi) * Math.cos(theta) + center.x;\n const ny = r * Math.cos(phi) + center.y;\n const nz = r * Math.sin(phi) * Math.sin(theta) + center.z;\n return {\n x: nx,\n y: ny,\n z: nz\n };\n}\n","import { Factory } from '@visactor/vgrammar-core';\n\nimport { transform } from './wordcloud';\n\nexport const registerWordCloudTransforms = () => {\n Factory.registerTransform(\n 'wordcloud',\n {\n transform,\n markPhase: 'beforeJoin'\n },\n true\n );\n};\n\nexport { shapes } from './shapes';\n","import { vglobal, createImage } from '@visactor/vrender-core';\nimport { isBase64, isNil, isValidUrl, Logger } from '@visactor/vutils';\nimport type { CloudWordType, LayoutConfigType, SegmentationOutputType } from './interface';\n\nexport enum WORDCLOUD_SHAPE_HOOK_EVENT {\n BEFORE_WORDCLOUD_SHAPE_LAYOUT = 'beforeWordcloudShapeLayout',\n AFTER_WORDCLOUD_SHAPE_LAYOUT = 'afterWordcloudShapeLayout'\n}\n\nexport const colorListEqual = (arr0: string[], arr1: string[]) => {\n if (arr1.length === 1 && arr1[0] === '#537EF5') {\n // 填充词默认值认为与核心词一致\n return true;\n }\n\n if (!Array.isArray(arr0) || !Array.isArray(arr1) || arr0.length !== arr1.length) {\n return false;\n }\n\n for (let i = 0; i < arr0.length; i++) {\n if (arr0[i] !== arr1[i]) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * 随机拟合\n */\nexport const fakeRandom = () => {\n let i = -1;\n const arr = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9];\n return () => {\n i = (i + 1) % arr.length;\n return arr[i];\n };\n};\n\n/**\n * 判断是否为中文\n */\nexport const isChinese = (text: string) => {\n return /^[\\u4e00-\\u9fa5]+$/.test(text);\n};\n\n/**\n * 计算字符长度,中文为1,符号/字母/其他字符为0.5\n */\nexport const calTextLength = (text: string, textLengthLimit?: number) => {\n if (isNil(text)) {\n return 0;\n }\n\n let length = 0;\n for (const char of text) {\n isChinese(char) ? (length += 1) : (length += 0.53);\n }\n return length;\n // return length > textLengthLimit ? textLengthLimit + 1.5 : textLengthLimit;\n};\n\n/**\n * 使用 ResourceLoader 加载图片\n */\nexport function loadImage(url: string) {\n if (!url || (!isValidUrl(url) && !isBase64(url) && !url.startsWith(' {\n const imageMark = createImage({ image: url });\n const imgData = imageMark.resources?.get(url);\n\n if (imgData && imgData.state === 'success' && imgData.data) {\n resolve(imgData.data);\n\n return;\n }\n\n imageMark.successCallback = () => {\n if (imageMark) {\n const imgData = imageMark.resources?.get(url);\n if (imgData && imgData.state === 'success' && imgData.data) {\n resolve(imgData.data);\n } else {\n reject(new Error('image load failed' + url));\n }\n } else {\n reject(new Error('image load failed' + url));\n }\n };\n imageMark.failCallback = () => {\n // eslint-disable-next-line no-undef\n const logger = Logger.getInstance();\n logger.error('image 加载失败!', url);\n };\n });\n}\n\n/**\n * 绘制连通区域相关信息,用于 debug\n * 红色为边缘、黑方块为中心、黑色数字为面积\n */\nexport function paintLabels(segmentationOutput: SegmentationOutputType) {\n const {\n size,\n segmentation: { regions, labels },\n shapeBounds,\n shapeCenter\n } = segmentationOutput;\n const paintCanvas = vglobal.createCanvas({ width: size[0], height: size[1] });\n const ctx = paintCanvas.getContext('2d');\n const colorList = ['#FF0000', '#00FF00', '#0000FF', '#FFFF00', '#00FFFF', '#FF00FF'];\n\n for (let i = 0; i < size[1]; i++) {\n for (let j = 0; j < size[0]; j++) {\n if (labels[i * size[0] + j] === 0) {\n ctx.fillStyle = '#fff';\n } else {\n ctx.fillStyle = colorList[labels[i * size[0] + j] % colorList.length];\n }\n ctx.fillRect(j, i, 1, 1);\n }\n }\n\n regions.forEach((region: any) => {\n const {\n center: [x, y],\n area,\n boundary,\n maxPoint,\n label\n } = region;\n // 绘制中心点\n ctx.fillStyle = '#000';\n ctx.fillRect(x, y, 3, 3);\n ctx.font = '15px serif';\n ctx.fillText(area, x, y);\n\n // 绘制边缘\n for (const [x, y] of boundary) {\n ctx.fillStyle = '#f00';\n ctx.fillRect(x, y, 1, 1);\n }\n\n // 绘制最大点\n const [iMin, iMax, jMin, jMax] = maxPoint;\n ctx.fillStyle = '#00f';\n ctx.font = '15px serif';\n ctx.fillRect(jMin, iMin, 3, 3);\n ctx.fillText(`${label}_min`, jMin, iMin);\n ctx.fillRect(jMax, iMax, 3, 3);\n ctx.fillText(`${label}_max`, jMax, iMax);\n });\n\n // 绘制边界\n const { x1, y1, width, height } = shapeBounds;\n ctx.strokeStyle = '#000';\n ctx.strokeRect(x1, y1, width, height);\n\n // 绘制整个 shape 的中心点\n ctx.fillStyle = '#000';\n ctx.fillRect(shapeCenter[0], shapeCenter[1], 3, 3);\n ctx.fillText('shape center', shapeCenter[0], shapeCenter[1]);\n\n // eslint-disable-next-line no-undef\n document.body.prepend(paintCanvas);\n}\n\n/**\n * 绘制 board\n */\nexport function paint(board: number[], paintSize: [number, number]) {\n const curSize = paintSize;\n const imageData = new ImageData(curSize[0], curSize[1]);\n const array = imageData.data;\n const w32 = paintSize[0] >> 5;\n\n for (let y = 0; y < curSize[1]; y++) {\n for (let x = 0; x < w32; x++) {\n const value = board[y * w32 + x];\n const string = (value >>> 0).toString(2).padStart(32, '0');\n for (let k = 0; k < 32; k++) {\n if (string[k] === '1') {\n // 占用像素, 填充白色\n array[((x << 5) + y * curSize[0] + k) * 4 + 0] = 255;\n array[((x << 5) + y * curSize[0] + k) * 4 + 1] = 255;\n array[((x << 5) + y * curSize[0] + k) * 4 + 2] = 255;\n array[((x << 5) + y * curSize[0] + k) * 4 + 3] = 255;\n } else {\n // 未占用像素, 填充黑色\n array[((x << 5) + y * curSize[0] + k) * 4 + 0] = 0;\n array[((x << 5) + y * curSize[0] + k) * 4 + 1] = 0;\n array[((x << 5) + y * curSize[0] + k) * 4 + 2] = 0;\n array[((x << 5) + y * curSize[0] + k) * 4 + 3] = 255;\n }\n // 数组元素分割线, 填充红色, 间隔32px\n if (k === 0) {\n array[((x << 5) + y * curSize[0] + k) * 4 + 0] = 255;\n array[((x << 5) + y * curSize[0] + k) * 4 + 1] = 0;\n array[((x << 5) + y * curSize[0] + k) * 4 + 2] = 0;\n array[((x << 5) + y * curSize[0] + k) * 4 + 3] = 255;\n }\n }\n }\n }\n\n // eslint-disable-next-line no-undef\n const canvas = document.createElement('canvas');\n canvas.width = curSize[0];\n canvas.height = curSize[1];\n const ctx = canvas.getContext('2d');\n ctx.putImageData(imageData, 0, 0);\n // eslint-disable-next-line no-undef\n document.body.prepend(canvas);\n}\n\n/**\n * 绘制单词,查看布局效果\n */\nexport function draw(\n words: CloudWordType[],\n fillingWords: CloudWordType[],\n layoutConfig: LayoutConfigType,\n resizeFactor: number = 1\n) {\n // eslint-disable-next-line no-undef\n const canvas = document.createElement('canvas');\n const radians = Math.PI / 180;\n const { size } = layoutConfig;\n canvas.width = size[0] * resizeFactor;\n canvas.height = size[1] * resizeFactor;\n const ctx = canvas.getContext('2d');\n\n words.forEach(word => {\n word.visible && drawText(word);\n });\n fillingWords.forEach(word => {\n word.visible && drawText(word, '#308ebc');\n });\n\n // eslint-disable-next-line no-undef\n document.body.prepend(canvas);\n\n function drawText(word: CloudWordType, color?: string) {\n ctx.save();\n ctx.textAlign = 'center';\n // ctx.textBaseline = 'middle'\n ctx.font = word.fontStyle + ' ' + word.fontWeight + ' ' + word.fontSize * resizeFactor + 'px ' + word.fontFamily;\n // ctx.fillStyle = color || colorList[~~(Math.random() * colorList.length)]\n ctx.globalAlpha = word.opacity;\n ctx.translate(word.x * resizeFactor, word.y * resizeFactor);\n if (word.rotate) {\n ctx.rotate((word.rotate * Math.PI) / 180);\n }\n ctx.fillText(word.text, 0, word.fontSize * 0.3 * resizeFactor);\n // ctx.fillStyle = '#f00'\n // ctx.beginPath()\n // ctx.arc(0, 0, 1, 0, 2 * Math.PI)\n // ctx.fill()\n ctx.restore();\n }\n}\n\n/**\n * 绘制螺旋线\n */\n\nexport function drawSpiral(spiral: any, center: [number, number], maxR: number, size: [number, number]) {\n // eslint-disable-next-line no-undef\n const canvas = document.createElement('canvas');\n canvas.width = size[0];\n canvas.height = size[1];\n const ctx = canvas.getContext('2d');\n const dt = 1;\n let dxdy;\n let dx;\n let dy;\n let t = -dt;\n\n while ((dxdy = spiral((t += dt)))) {\n dx = dxdy[0];\n dy = dxdy[1];\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxR) {\n break;\n }\n\n // ctx.beginPath()\n // ctx.moveTo(center[0] + dx, center[1] + dy)\n // ctx.lineTo(center[0] + dx, center[1] + dy)\n // ctx.stroke()\n ctx.fillStyle = '#f00';\n ctx.fillRect(center[0] + dx, center[1] + dy, 3, 3);\n }\n\n // eslint-disable-next-line no-undef\n document.body.prepend(canvas);\n}\n\nexport function functor(d: any) {\n return typeof d === 'function'\n ? d\n : function () {\n return d;\n };\n}\n","import type { CloudWordType, SegmentationInputType, SegmentationOutputType } from './interface';\nimport { loadImage } from './util';\n\nexport async function loadAndHandleImage(segmentationInput: SegmentationInputType): Promise {\n const shapeImage = (await loadImage(segmentationInput.shapeUrl)) as CanvasImageSource;\n\n if (segmentationInput.removeWhiteBorder && shapeImage) {\n return removeBorder(shapeImage, segmentationInput.tempCanvas, segmentationInput.tempCtx);\n }\n\n return shapeImage;\n}\n\n/**\n * 求图像连通区域的个数、面积、边界、中心点\n * @param {*} shape 图像 base64\n * @param {*} size 画布大小\n */\nexport function segmentation(shapeImage: CanvasImageSource, segmentationInput: SegmentationInputType) {\n const { size, tempCanvas, tempCtx: ctx } = segmentationInput;\n const shapeConfig = scaleAndMiddleShape(shapeImage, size);\n // config.shapeConfig = shapeConfig\n\n tempCanvas.width = size[0];\n tempCanvas.height = size[1];\n ctx.clearRect(0, 0, tempCanvas.width, tempCanvas.height);\n ctx.drawImage(shapeImage, shapeConfig.x, shapeConfig.y, shapeConfig.width, shapeConfig.height);\n const imageData = ctx.getImageData(0, 0, size[0], size[1]);\n // 保存分组标签,0 是背景(像素为白色或透明度为 0),>1 的分组\n const labels = new Array(size[0] * size[1]).fill(0);\n // 当前的种子标签\n let curLabel = 1;\n // 四连通位置偏移\n const offset = [\n [0, 1],\n [1, 0],\n [-1, 0],\n [0, -1]\n ];\n // 当前连通域中的单位域队列\n let queue = [];\n // 注意此处,i 为行数即 y,j为x,下同\n for (let i = 0; i < size[1]; i++) {\n for (let j = 0; j < size[0]; j++) {\n // 当前单位域已被标记或者属于背景区域, 则跳过\n if (labels[i * size[0] + j] !== 0 || isEmptyPixel(imageData, i, j)) {\n continue;\n }\n\n labels[i * size[0] + j] = curLabel;\n // 加入当前域队列\n queue.push([i, j]);\n\n // 遍历当前域队列\n for (let k = 0; k < queue.length; k++) {\n // 四连通范围内检查未标记的前景单位域\n for (let m = 0; m < 4; m++) {\n let row: number = queue[k][0] + offset[m][0];\n let col: number = queue[k][1] + offset[m][1];\n\n // 防止坐标溢出图像边界\n row = row < 0 ? 0 : row >= size[1] ? size[1] - 1 : row;\n col = col < 0 ? 0 : col >= size[0] ? size[0] - 1 : col;\n\n // 邻近单位域未标记并且属于前景区域, 标记并加入队列\n if (labels[row * size[0] + col] === 0 && !isEmptyPixel(imageData, row, col)) {\n labels[row * size[0] + col] = curLabel;\n queue.push([row, col]);\n }\n }\n }\n\n // 一个完整连通域查找完毕,标签更新\n curLabel++;\n // 清空队列\n queue = [];\n }\n }\n\n /**\n * 使用一次扫描线算法,识别出连通域的边界、面积、最大的边界点以求的最大半径\n * 边界:二值图像发生突变的地方\n * 面积:连通域中的像素个数\n * ratio: 连通区域的大致宽高比\n */\n const boundaries = {};\n const areas = {};\n const centers = {};\n const maxPoints = {}; // 存储顺序为 iMin, iMax, jMin, jMax\n const maxR = {};\n const ratios = {};\n // 存储形状的范围\n const shapeBounds = {\n x1: Infinity,\n x2: -Infinity,\n y1: Infinity,\n y2: -Infinity,\n width: 0,\n height: 0\n };\n\n for (let i = 0; i < size[1]; i++) {\n for (let j = 0; j < size[0]; j++) {\n const label = labels[i * size[0] + j];\n if (label === 0) {\n continue;\n }\n\n // 当前像素为边界\n if (isBoundaryPixel(i, j)) {\n boundaries[label] = boundaries[label] || [];\n boundaries[label].push([j, i]);\n\n if (!maxPoints[label]) {\n maxPoints[label] = [Infinity, -Infinity, Infinity, -Infinity];\n }\n if (i < maxPoints[label][0]) {\n maxPoints[label][0] = i;\n }\n if (i > maxPoints[label][1]) {\n maxPoints[label][1] = i;\n }\n if (j < maxPoints[label][2]) {\n maxPoints[label][2] = j;\n }\n if (j > maxPoints[label][3]) {\n maxPoints[label][3] = j;\n }\n\n // 更新 bounds\n if (j < shapeBounds.x1) {\n shapeBounds.x1 = j;\n }\n if (j > shapeBounds.x2) {\n shapeBounds.x2 = j;\n }\n if (i < shapeBounds.y1) {\n shapeBounds.y1 = i;\n }\n if (i > shapeBounds.y2) {\n shapeBounds.y2 = i;\n }\n }\n\n // 计算面积\n areas[label] = areas[label] || 0;\n areas[label]++;\n }\n }\n\n // 用于计算整个 shape 的中心点\n const allBoundaries = [];\n\n // 计算中心点\n for (const label in boundaries) {\n const boundary = boundaries[label];\n // 计算多边形重心\n const x = ~~(boundary.reduce((acc: any, cur: any) => acc + cur[0], 0) / boundary.length);\n const y = ~~(boundary.reduce((acc: any, cur: any) => acc + cur[1], 0) / boundary.length);\n centers[label] = [x, y];\n allBoundaries.push(...boundary);\n\n const [yMin, yMax, xMin, xMax] = maxPoints[label];\n\n maxR[label] = ~~Math.max(\n Math.sqrt((x - xMin) ** 2 + (y - yMin) ** 2),\n Math.sqrt((x - xMax) ** 2 + (y - yMax) ** 2),\n Math.sqrt((x - xMin) ** 2 + (y - yMax) ** 2),\n Math.sqrt((x - xMax) ** 2 + (y - yMin) ** 2)\n );\n\n ratios[label] = (xMax - xMin) / (yMax - yMin);\n }\n\n const regions = Object.keys(centers).map((key: any) => ({\n label: key - 1,\n boundary: boundaries[key],\n area: areas[key],\n center: centers[key],\n maxPoint: maxPoints[key],\n maxR: maxR[key],\n ratio: ratios[key]\n }));\n\n // 计算整个 shape 的一些属性\n shapeBounds.width = shapeBounds.x2 - shapeBounds.x1 + 1;\n shapeBounds.height = shapeBounds.y2 - shapeBounds.y1 + 1;\n\n const x = ~~(allBoundaries.reduce((acc, cur) => acc + cur[0], 0) / allBoundaries.length);\n const y = ~~(allBoundaries.reduce((acc, cur) => acc + cur[1], 0) / allBoundaries.length);\n\n const shapeMaxR = ~~Math.max(\n Math.sqrt((x - shapeBounds.x1) ** 2 + (y - shapeBounds.y1) ** 2),\n Math.sqrt((x - shapeBounds.x2) ** 2 + (y - shapeBounds.y2) ** 2),\n Math.sqrt((x - shapeBounds.x1) ** 2 + (y - shapeBounds.y2) ** 2),\n Math.sqrt((x - shapeBounds.x2) ** 2 + (y - shapeBounds.y1) ** 2)\n );\n const shapeRatio = shapeBounds.width / shapeBounds.height;\n const shapeArea = Object.keys(areas).reduce((acc, key) => (acc += areas[key]), 0);\n // 输出到 config 上\n const segmentation = {\n regions,\n labels,\n labelNumber: curLabel - 1\n };\n return Object.assign(segmentationInput, {\n segmentation,\n shapeConfig,\n shapeBounds,\n shapeMaxR,\n shapeRatio,\n shapeCenter: [x, y],\n shapeArea\n });\n\n /**\n * 用四联通去判断是否是边缘像素\n * @param {*} i\n * @param {*} j\n */\n function isBoundaryPixel(i: number, j: number) {\n // 四连通位置偏移\n const offset = [\n [0, 1],\n [1, 0],\n [-1, 0],\n [0, -1]\n ];\n\n // 当 i,j 非背景,且是画布边缘时,则为 boundary\n if (i === 0 || j === 0 || i === size[1] - 1 || j === size[0] - 1) {\n return true;\n }\n\n // 其他情况用四连通去判断\n for (let k = 0; k < 4; k++) {\n let row = i + offset[k][0];\n let col = j + offset[k][1];\n\n // 防止坐标溢出图像边界\n row = row < 0 ? 0 : row >= size[1] ? size[1] - 1 : row;\n col = col < 0 ? 0 : col >= size[0] ? size[0] - 1 : col;\n\n if (labels[row * size[0] + col] === 0) {\n return true;\n }\n }\n return false;\n }\n}\n\n/**\n * 判断一个像素是否是前景\n * 即 白色像素 or 透明度为 0\n * @param {*} i\n * @param {*} j\n */\nfunction isEmptyPixel(imageData: ImageData, i: number, j: number) {\n const width = imageData.width;\n return (\n imageData.data[i * width * 4 + j * 4 + 3] === 0 ||\n (imageData.data[i * width * 4 + j * 4 + 0] === 255 &&\n imageData.data[i * width * 4 + j * 4 + 1] === 255 &&\n imageData.data[i * width * 4 + j * 4 + 2] === 255)\n );\n}\n\n/**\n * 移除图像中的白边\n */\nfunction removeBorder(image: any, canvas: HTMLCanvasElement | any, ctx: CanvasRenderingContext2D | null) {\n canvas.width = image.width;\n canvas.height = image.height;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(image, 0, 0);\n const width = canvas.width;\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n let top = 0;\n let bottom = imageData.height;\n let left = 0;\n let right = imageData.width;\n\n while (top < bottom && rowBlank(imageData, width, top)) {\n ++top;\n }\n while (bottom - 1 > top && rowBlank(imageData, width, bottom - 1)) {\n --bottom;\n }\n while (left < right && columnBlank(imageData, width, left, top, bottom)) {\n ++left;\n }\n while (right - 1 > left && columnBlank(imageData, width, right - 1, top, bottom)) {\n --right;\n }\n\n const trimmed = ctx.getImageData(left, top, right - left, bottom - top);\n canvas.width = trimmed.width;\n canvas.height = trimmed.height;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.putImageData(trimmed, 0, 0);\n\n return canvas;\n}\n\nfunction rowBlank(imageData: ImageData, width: number, y: number) {\n for (let x = 0; x < width; ++x) {\n if (!isEmptyPixel(imageData, y, x)) {\n return false;\n }\n }\n return true;\n}\n\nfunction columnBlank(imageData: ImageData, width: number, x: number, top: number, bottom: number) {\n for (let y = top; y < bottom; ++y) {\n if (!isEmptyPixel(imageData, y, x)) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * 调整图像大小和位置,将图像按照长边缩放到适应画布大小,并且居中\n * 此处让图片占满画布,padding 不是这个 transform 需要考虑的\n */\nfunction scaleAndMiddleShape(image: any, size: [number, number]) {\n const width = image.width;\n const height = image.height;\n let scale = size[0] / width;\n if (height * scale > size[1]) {\n scale = size[1] / height;\n }\n\n const newWidth = Math.floor(scale * width);\n const newHeight = Math.floor(scale * height);\n // 图片绘制时的坐标\n const x = (size[0] - newWidth) / 2;\n const y = (size[1] - newHeight) / 2;\n\n return {\n x,\n y,\n width: newWidth,\n height: newHeight,\n scale\n };\n}\n/**\n * 将单词分配到不同的区域内\n *\n * 先使用相对简单的分配逻辑,即根据区域面积来决定分配到的单词的 权重大小和数量\n * @param {*} words\n * @param {*} config\n */\nexport function allocateWords(words: CloudWordType[], segmentationOutput: SegmentationOutputType) {\n const {\n segmentation: { regions }\n } = segmentationOutput;\n let areaMax = -Infinity;\n let totalArea = 0;\n let areaMaxIndex = 0;\n\n // 查找最大面积的区域,同时计算总的面积\n regions.forEach((region: any, index: number) => {\n const area = region.area;\n if (area > areaMax) {\n areaMax = area;\n areaMaxIndex = index;\n }\n totalArea += area;\n });\n\n // 根据每个区域的面积大小给每个区域分配单词数量和权重限制\n let wordsSum = 0;\n regions.forEach((region: any) => {\n const area = region.area;\n const regionNum = Math.ceil((area / totalArea) * words.length);\n const regionWeight = area / areaMax;\n\n region.words = [];\n region.regionNum = regionNum;\n region.regionWeight = regionWeight;\n wordsSum += regionNum;\n });\n // 如果有未分配的单词, 则分配到面积最大区域\n if (wordsSum < words.length) {\n regions[areaMaxIndex].wordsNum += words.length - wordsSum;\n }\n\n // 对单词进行分配,先分配面积最大的区域\n let currIndex = areaMaxIndex;\n const regionNums = regions.map((region: any) => region.regionNum);\n words.forEach((word: any) => {\n // 记录总的失败次数\n let failCounter = 0;\n // 记录失败次数,超过区域的数量,则更新一下所有区域的权重上限\n let updateCounter = 0;\n word.regionIndex = -1;\n\n do {\n if (regionNums[currIndex] > 0 && word.weight <= regions[currIndex].regionWeight) {\n word.regionIndex = currIndex;\n regions[currIndex].words.push(word);\n regionNums[currIndex]--;\n currIndex = (currIndex + 1) % regions.length;\n break;\n }\n currIndex = (currIndex + 1) % regions.length;\n\n failCounter++;\n updateCounter++;\n // 如果没有找到合适的区域,则更新所有区域的权重\n if (updateCounter > regions.length + 1) {\n regions.forEach((region: any) => {\n // 这里 0.15 是经验值,可以后续根据业务场景调整\n region.regionWeight += 0.15;\n });\n updateCounter = 0;\n }\n } while (word.regionIndex === -1 && failCounter < regions.length * 3);\n\n // 未分配则分配为 area 最大的区域\n if (word.regionIndex === -1) {\n word.regionIndex = areaMaxIndex;\n regions[areaMaxIndex].words.push(word);\n regionNums[areaMaxIndex]--;\n }\n });\n\n // 对每个区域里的单词根据权重进行排序\n regions.forEach((region: any) => {\n region.words.sort((a: CloudWordType, b: CloudWordType) => b.weight - a.weight);\n });\n}\n","import { sqrt, square } from './utils/utils';\nimport { LinearScale } from './linear-scale';\nimport { ScaleEnum } from './type';\nimport type { ContinuousScaleType } from './interface';\n\nexport class SqrtScale extends LinearScale {\n readonly type: ContinuousScaleType = ScaleEnum.Sqrt;\n\n constructor() {\n super(sqrt, square);\n }\n\n clone(): SqrtScale {\n return new SqrtScale()\n .domain(this._domain, true)\n .range(this._range, true)\n .unknown(this._unknown)\n .clamp(this.clamp(), null, true)\n .interpolate(this._interpolate) as LinearScale;\n }\n}\n","import type { CloudWordType, LayoutConfigType, SegmentationOutputType } from './interface';\n\nexport function layout(\n words: CloudWordType[],\n layoutConfig: LayoutConfigType,\n segmentationOutput: SegmentationOutputType\n) {\n const { size, stepFactor } = layoutConfig;\n const {\n segmentation: { regions },\n tempCtx: ctx,\n tempCanvas: canvas,\n boardSize,\n shapeCenter,\n shapeMaxR,\n shapeRatio\n } = segmentationOutput;\n const board = initBoardWithShape(segmentationOutput);\n\n // 对每个区域开始进行布局\n for (const region of regions) {\n const { words: regionWords, center, maxR, ratio } = region;\n\n for (let i = 0; i < regionWords.length; i++) {\n // 批量测量单词的 bounds\n measureSprite(canvas, ctx, words, i);\n const word = regionWords[i];\n word.x = center[0];\n word.y = center[1];\n\n if (word.hasText && word.sprite && place(board, word, maxR, ratio, size, boardSize, stepFactor)) {\n word.hasPlaced = true;\n }\n }\n }\n\n // 对于放置失败的单词,缩小文字大小, 以 shapeCenter 为中心进行布局\n // 最多尝试尝试3次,如果还是失败,则认为该单词不能放置\n for (let _ = 0; _ < layoutConfig.textLayoutTimes; _++) {\n const failedWords = words.filter((word: CloudWordType) => {\n if (!word.hasPlaced) {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = Math.max(~~(word.fontSize * layoutConfig.fontSizeShrinkFactor), layoutConfig.minFontSize);\n }\n\n return !word.hasPlaced;\n });\n\n if (failedWords.length === 0) {\n break;\n }\n\n for (let i = 0; i < failedWords.length; i++) {\n const word = failedWords[i];\n measureSprite(canvas, ctx, failedWords, i);\n word.x = shapeCenter[0];\n word.y = shapeCenter[1];\n if (word.hasText && place(board, word, shapeMaxR, shapeRatio, size, boardSize, stepFactor)) {\n word.hasPlaced = true;\n }\n }\n }\n\n layoutConfig.board = board;\n}\n\nexport function layoutSelfShrink(\n words: CloudWordType,\n layoutConfig: LayoutConfigType,\n segmentationOutput: SegmentationOutputType\n) {\n const { size, stepFactor } = layoutConfig;\n const {\n segmentation: { regions },\n tempCtx: ctx,\n tempCanvas: canvas,\n boardSize,\n shapeCenter,\n shapeMaxR,\n shapeRatio\n } = segmentationOutput;\n const board = initBoardWithShape(segmentationOutput);\n\n // 对每个区域开始进行布局\n for (const region of regions) {\n const { words: regionWords, center, maxR, ratio } = region;\n let fontFactor = 1;\n\n for (let i = 0; i < regionWords.length; i++) {\n // 批量测量单词的 bounds\n measureSprite(canvas, ctx, words, i);\n const word = regionWords[i];\n word.x = center[0];\n word.y = center[1];\n\n if (word.hasText && word.sprite && place(board, word, maxR, ratio, size, boardSize, stepFactor)) {\n word.hasPlaced = true;\n } else {\n // console.log('失败迭代', word.text);\n fontFactor = fontFactor * layoutConfig.fontSizeShrinkFactor;\n for (let j = i; j < regionWords.length; j++) {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = Math.max(~~(word.fontSize * fontFactor), layoutConfig.minFontSize);\n }\n i--;\n }\n }\n }\n\n // // 对于放置失败的单词,缩小文字大小, 以 shapeCenter 为中心进行布局\n // // 最多尝试尝试3次,如果还是失败,则认为该单词不能放置\n // for (let _ = 0; _ < config.textLayoutTimes; _++) {\n // const failedWords = words.filter((word) => {\n // if (!word.hasPlaced) {\n // word.hasText = false\n // word.sprite = null\n // word.fontSize = ~~(word.fontSize * config.fontSizeShrinkFactor)\n // }\n\n // return !word.hasPlaced\n // })\n\n // if (failedWords.length === 0) break\n\n // for (let i = 0; i < failedWords.length; i++) {\n // const word = failedWords[i]\n // measureSprite(canvas, ctx, failedWords, i)\n // word.x = shapeCenter[0]\n // word.y = shapeCenter[1]\n // if (\n // word.hasText &&\n // place(board, word, shapeMaxR, shapeRatio, size, boardSize, stepFactor)\n // ) {\n // word.hasPlaced = true\n // }\n // }\n // }\n\n layoutConfig.board = board;\n}\n\nexport function layoutGlobalShrink(\n words: CloudWordType[],\n layoutConfig: LayoutConfigType,\n segmentationOutput: SegmentationOutputType\n) {\n const { stepFactor, importantWordCount, globalShinkLimit } = layoutConfig;\n const {\n size,\n segmentation: { regions },\n tempCtx: ctx,\n tempCanvas: canvas,\n boardSize,\n shapeCenter,\n shapeMaxR,\n shapeRatio\n } = segmentationOutput;\n const boardOrigin = initBoardWithShape(segmentationOutput);\n let board = boardOrigin.slice(0);\n\n const fontFactor = layoutConfig.fontSizeShrinkFactor;\n\n // 同一个词如果降低到globalShinkLimit还没有布局成功,恢复到该词未布局状态\n let id = null;\n let idIntialFactor = 1;\n /* eslint-disable no-loop-func */\n let globalShinkFactor = 1;\n // 找到高优保障词weight,暂定10个\n const importantCount = importantWordCount;\n let weightStd = 0;\n if (words.length > importantCount) {\n const wordWeights = words.sort((word0, word1) => {\n return word1.weight - word0.weight;\n });\n weightStd = wordWeights[importantCount].weight;\n }\n\n // 对每个区域开始进行布局\n for (let k = 0; k < regions.length; k++) {\n const region = regions[k];\n const { words: regionWords, center, maxR, ratio } = region;\n let restartTag = false;\n for (let i = 0; i < regionWords.length; i++) {\n // 批量测量单词的 bounds\n measureSprite(canvas, ctx, words, i);\n const word = regionWords[i];\n word.x = center[0];\n word.y = center[1];\n\n if (!word.skip && word.hasText && word.sprite && place(board, word, maxR, ratio, size, boardSize, stepFactor)) {\n word.hasPlaced = true;\n } else if (!word.skip && word.weight > weightStd && globalShinkFactor > globalShinkLimit) {\n const wordId = word.datum[Symbol.for('vGrammar_id')];\n if (wordId !== id) {\n id = wordId;\n idIntialFactor = globalShinkFactor;\n }\n // 缩小字号\n globalShinkFactor = globalShinkFactor * fontFactor;\n words.forEach(word => {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = word.fontSize * fontFactor; // 这里因为存在字号缩小-还原逻辑,因此不加最小字号限制\n });\n\n // 清空布局画布\n board = boardOrigin.slice(0);\n // console.log('重启布局', word.text, globalShinkFactor);\n restartTag = true;\n break;\n } else if (!word.skip && word.datum[Symbol.for('vGrammar_id')] === id) {\n words.forEach(word => {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = word.fontSize / globalShinkFactor;\n });\n\n word.skip = true;\n globalShinkFactor = idIntialFactor;\n id = null;\n\n // 清空布局画布\n board = boardOrigin.slice(0);\n // console.log('重启布局0', word.text, idIntialFactor);\n restartTag = true;\n break;\n }\n }\n if (restartTag) {\n // 重新布局\n // k--;\n k = -1;\n continue;\n }\n }\n\n // 对于放置失败的单词,缩小文字大小, 以 shapeCenter 为中心进行布局\n // 最多尝试尝试3次,如果还是失败,则认为该单词不能放置\n for (let _ = 0; _ < layoutConfig.textLayoutTimes; _++) {\n const failedWords = words.filter(word => {\n if (!word.hasPlaced) {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = Math.max(~~(word.fontSize * layoutConfig.fontSizeShrinkFactor), layoutConfig.minFontSize);\n }\n\n return !word.hasPlaced;\n });\n\n if (failedWords.length === 0) {\n break;\n }\n\n for (let i = 0; i < failedWords.length; i++) {\n const word = failedWords[i];\n measureSprite(canvas, ctx, failedWords, i);\n word.x = shapeCenter[0];\n word.y = shapeCenter[1];\n if (word.hasText && place(board, word, shapeMaxR, shapeRatio, size, boardSize, stepFactor)) {\n word.hasPlaced = true;\n }\n }\n }\n\n layoutConfig.board = board;\n}\n\nexport function layoutSelfEnlarge(\n words: CloudWordType[],\n layoutConfig: LayoutConfigType,\n segmentationOutput: SegmentationOutputType\n) {\n const { size, stepFactor, importantWordCount } = layoutConfig;\n const {\n segmentation: { regions },\n tempCtx: ctx,\n tempCanvas: canvas,\n boardSize,\n shapeCenter,\n shapeMaxR,\n shapeRatio\n } = segmentationOutput;\n const boardOrigin = initBoardWithShape(segmentationOutput);\n let board = boardOrigin.slice(0);\n\n const fontFactor = layoutConfig.fontSizeEnlargeFactor;\n // const fontFactor = 1.5;\n\n // 找到高优保障词weight,暂定10个\n const importantCount = Math.min(importantWordCount, words.length);\n let weightStd = 0;\n if (words.length > importantCount) {\n const wordWeights = words.sort((word0, word1) => {\n return word1.weight - word0.weight;\n });\n weightStd = wordWeights[importantCount - 1].weight;\n }\n\n // 高优词布局成功数量\n let importantWordSuccessedNum = 0;\n // 目前放大系数\n let globalEnlargeFactor = 1;\n // 回退标志\n let layoutFinish = false;\n\n // 对每个区域开始进行布局\n for (let k = 0; k < regions.length; k++) {\n const region = regions[k];\n const { words: regionWords, center, maxR, ratio } = region;\n let restartTag = false;\n for (let i = 0; i < regionWords.length; i++) {\n // 批量测量单词的 bounds\n measureSprite(canvas, ctx, words, i);\n const word = regionWords[i];\n word.x = center[0];\n word.y = center[1];\n\n if (word.hasText && word.sprite && place(board, word, maxR, ratio, size, boardSize, stepFactor)) {\n word.hasPlaced = true;\n if (word.weight >= weightStd) {\n importantWordSuccessedNum++;\n }\n if (importantWordSuccessedNum >= importantCount && !layoutFinish) {\n // 重点词完全布局,尝试增大字号\n // 增大系数\n globalEnlargeFactor = globalEnlargeFactor * fontFactor;\n\n // 增大字号\n words.forEach(word => {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = word.fontSize * fontFactor; // 这里因为存在字号缩小-还原逻辑,因此不加最小字号限制\n });\n\n // 清空布局画布\n board = boardOrigin.slice(0);\n // console.log('重启布局', word.text, globalEnlargeFactor);\n restartTag = true;\n importantWordSuccessedNum = 0;\n\n break;\n }\n } else if (word.weight >= weightStd && globalEnlargeFactor > 1) {\n // 之前重点词完全布局,此次重点词未完成布局,回退字号\n words.forEach(word => {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = word.fontSize / fontFactor;\n });\n\n // 恢复系数\n globalEnlargeFactor = globalEnlargeFactor / fontFactor;\n layoutFinish = true;\n\n // 清空布局画布\n board = boardOrigin.slice(0);\n // console.log('重启布局0', word.text, globalEnlargeFactor);\n restartTag = true;\n\n break;\n } else if (word.weight >= weightStd) {\n // 初次未完成布局,使用ensureMapping算法\n // console.log('use layoutGlobalShrink')\n return layoutGlobalShrink(words, layoutConfig, segmentationOutput);\n }\n }\n if (restartTag) {\n // 重新布局\n // k--;\n k = -1;\n continue;\n }\n }\n\n // 对于放置失败的单词,缩小文字大小, 以 shapeCenter 为中心进行布局\n // 最多尝试尝试3次,如果还是失败,则认为该单词不能放置\n for (let _ = 0; _ < layoutConfig.textLayoutTimes; _++) {\n const failedWords = words.filter(word => {\n if (!word.hasPlaced) {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = Math.max(~~(word.fontSize * layoutConfig.fontSizeShrinkFactor), layoutConfig.minFontSize);\n }\n\n return !word.hasPlaced;\n });\n\n if (failedWords.length === 0) {\n break;\n }\n\n for (let i = 0; i < failedWords.length; i++) {\n const word = failedWords[i];\n measureSprite(canvas, ctx, failedWords, i);\n word.x = shapeCenter[0];\n word.y = shapeCenter[1];\n if (word.hasText && place(board, word, shapeMaxR, shapeRatio, size, boardSize, stepFactor)) {\n word.hasPlaced = true;\n }\n }\n }\n\n layoutConfig.board = board;\n}\n\n/**\n * 使用螺旋线放置单词,成功返回 true\n */\nfunction place(\n board: number[],\n word: CloudWordType,\n maxR: number,\n ratio: number,\n size: [number, number],\n boardSize: [number, number],\n stepFactor: number\n) {\n const startX = word.x;\n const startY = word.y;\n const spiral = archimedeanSpiral(ratio);\n\n const dt = 1 * stepFactor;\n let dxdy;\n let dx;\n let dy;\n let t = -dt;\n\n while ((dxdy = spiral((t += dt)))) {\n const {\n wordSize,\n bounds: { dTop, dBottom, dLeft, dRight }\n } = word;\n dx = dxdy[0];\n dy = dxdy[1];\n\n // 判断螺旋线是否超出了最大的半径\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxR) {\n break;\n }\n word.x = ~~(startX + dx);\n word.y = ~~(startY + dy);\n\n // 检测根据单词的 bounds 检测是否超出范围\n if (word.x - dLeft < 0 || word.x + dRight > size[0] || word.y - dTop < 0 || word.y + dBottom > size[1]) {\n continue;\n }\n\n if (!isCollideWithBoard(word, board, boardSize)) {\n placeWordOnBoard(word, board, boardSize);\n\n return true;\n }\n }\n return false;\n}\n\n/**\n * 在 board 中放置 word\n * 会在 filling 中复用\n */\nexport function placeWordOnBoard(word: CloudWordType, board: number[], boardSize: [number, number]) {\n const { wordSize } = word;\n // 放置单词,以 x, y 为中心\n const sprite = word.sprite;\n const w = wordSize[0] >> 5; // 单词占用的 int 的数量\n const sw = boardSize[0] >> 5; // board 的宽度\n const lx = word.x - (w << 4); // 单词的左边界\n const sx = lx % 32; // 单词偏移(px), 当前元素右侧移除数量\n const msx = 32 - sx; // 需要从sprite上一个元素中移除的数量\n const h = wordSize[1];\n let x = (word.y - (wordSize[1] >> 1)) * sw + (lx >> 5); // 数组的起始位置\n let last;\n\n if (sx === 0) {\n // 恰好对齐,不需要偏移\n for (let j = 0; j < h; j++) {\n for (let i = 0; i < w; i++) {\n board[x + i] |= sprite[j * w + i];\n }\n x += sw;\n }\n } else {\n for (let j = 0; j < h; j++) {\n last = 0;\n for (let i = 0; i <= w; i++) {\n board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n x += sw;\n }\n }\n}\n\n/**\n * 检测 word 是否与 board 中的元素发生碰撞\n *\n * 会在 filling words 中复用\n */\nexport function isCollideWithBoard(word: CloudWordType, board: number[], boardSize: [number, number]) {\n const { sprite, wordSize } = word;\n\n const sw = boardSize[0] >> 5;\n const w = wordSize[0] >> 5;\n const lx = word.x - (w << 4); // 单词的左边界\n const sx = lx % 32; // sprite数组左侧偏移\n const msx = 32 - sx; // 位移遮罩\n const h = wordSize[1];\n let last;\n let x = (word.y - (wordSize[1] >> 1)) * sw + (lx >> 5); // 数组的起始位置\n\n // 逐行遍历单词sprite,判断与已绘制内容重叠\n if (sx === 0) {\n // 恰好对齐,不需要偏移\n for (let j = 0; j < h; j++) {\n for (let i = 0; i < w; i++) {\n if (board[x + i] & sprite[j * w + i]) {\n return true;\n }\n }\n x += sw;\n }\n } else {\n for (let j = 0; j < h; j++) {\n last = 0;\n for (let i = 0; i <= w; i++) {\n if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) & board[x + i]) {\n return true;\n }\n }\n x += sw;\n }\n }\n\n return false;\n}\n\nfunction archimedeanSpiral(ratio: number) {\n // t 为弧度值\n return function (t: number) {\n return [ratio * (t *= 0.1) * Math.cos(t), t * Math.sin(t)];\n };\n}\n\n/**\n * 测量一批单词的 sprite\n * 会在测量 filling words 时复用,修改时注意兼容性\n */\nexport function measureSprite(\n canvas: HTMLCanvasElement | any,\n ctx: CanvasRenderingContext2D | null,\n words: CloudWordType[] | any,\n wi: number\n) {\n if (words[wi].sprite || words[wi].fontSize === 0) {\n return;\n }\n\n const cw = 2048;\n const ch = 2048;\n const radians = Math.PI / 180;\n const n = words.length;\n\n canvas.width = cw;\n canvas.height = ch;\n ctx.clearRect(0, 0, cw, ch);\n ctx.textAlign = 'center';\n\n let x = 0;\n let y = 0;\n let maxHeight = 0;\n let wordW; // 单词盒子 宽度\n let wordH;\n let yMax = 0; // 记录画布中绘制的 y 最大范围\n\n const wiDist = wi;\n --wi;\n while (++wi < n) {\n const word = words[wi];\n const fontSize = Math.max(word.fontSize, 2); // 最小字号2px\n ctx.save();\n ctx.font = word.fontStyle + ' ' + word.fontWeight + ' ' + fontSize + 'px ' + word.fontFamily;\n\n // 计算单词盒子宽高\n wordW = ctx.measureText(word.text + 'm').width + word.padding * 2;\n wordH = fontSize * 2 + word.padding * 2;\n\n if (word.rotate !== 0) {\n const sr = Math.sin(word.rotate * radians);\n const cr = Math.cos(word.rotate * radians);\n const wcr = wordW * cr;\n const wsr = wordW * sr;\n const hcr = wordH * cr;\n const hsr = wordH * sr;\n wordW = Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr));\n wordH = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n }\n wordW = ((wordW + 31) >> 5) << 5; // 宽度必须是 32 的倍数\n wordH = Math.ceil(wordH);\n\n // 记录当前行最大高度\n if (wordH > maxHeight) {\n maxHeight = wordH;\n }\n\n // 如果当前行放不下,就另起一行,y方向向下移动当前行的最大高度\n if (x + wordW >= cw) {\n x = 0;\n y += maxHeight;\n maxHeight = wordH;\n }\n\n // 如果绘制不下,则停止\n if (y + wordH >= ch) {\n if (y === 0) {\n word.hasText = false;\n continue;\n } else {\n break;\n }\n }\n // 更新绘制范围 y 的最大值\n if (y + wordH >= yMax) {\n yMax = y + wordH;\n }\n\n ctx.translate(x + (wordW >> 1), y + (wordH >> 1));\n if (word.rotate !== 0) {\n ctx.rotate(word.rotate * radians);\n }\n ctx.fillText(word.text, 0, 0);\n if (word.padding) {\n ctx.lineWidth = 2 * word.padding;\n ctx.strokeText(word.text, 0, 0);\n }\n ctx.restore();\n\n // 词语绘制完成,记录其在画布上位置信息\n word.LT = [x, y]; // 左上角点\n word.wordSize = [wordW, wordH];\n\n // 指示在临时画布上绘制过了单词\n word.hasText = true;\n\n // x位置右移,等待下一个词语绘制\n x += wordW;\n }\n\n if (yMax === 0) {\n return;\n }\n const pixels = ctx.getImageData(0, 0, cw, yMax).data;\n\n let i;\n let j;\n\n // 提取画布上的 sprite 信息\n while (--wi >= wiDist) {\n const word = words[wi];\n if (!word.hasText) {\n word.bounds = {\n dTop: Infinity,\n dBottom: -Infinity,\n dLeft: Infinity,\n dRight: -Infinity\n };\n break;\n }\n\n const { LT = [0, 0], wordSize } = word;\n [x, y] = LT;\n const w32 = wordSize[0] >> 5;\n // 将数组归0\n const sprite = new Array(w32 * wordSize[1]).fill(0);\n\n // 先记录单词 bounds 的行列号,然后转换成与中心的delta\n let [dTop, dBottom, dLeft, dRight] = [Infinity, -Infinity, Infinity, -Infinity];\n\n for (j = 0; j < wordSize[1]; j++) {\n let seen: any;\n for (i = 0; i < wordSize[0]; i++) {\n // 取 alpha 通道的值,\n if (pixels[((y + j) * cw + (x + i)) * 4 + 3] > 0) {\n const k = w32 * j + (i >> 5);\n const m = 1 << (31 - (i % 32));\n sprite[k] |= m;\n\n if (i < dLeft) {\n dLeft = i;\n }\n if (i > dRight) {\n dRight = i;\n }\n seen |= m;\n }\n }\n if (seen) {\n if (j < dTop) {\n dTop = j;\n }\n if (j > dBottom) {\n dBottom = j;\n }\n }\n }\n\n // 记录单词准确的的 bounds\n word.bounds = {\n dTop: (wordSize[1] >> 1) - dTop,\n dBottom: dBottom - (wordSize[1] >> 1),\n dLeft: (wordSize[0] >> 1) - dLeft,\n dRight: dRight - (wordSize[0] >> 1)\n };\n word.sprite = sprite;\n // 后续操作中 LT 无意义\n delete word.LT;\n }\n\n // debug 代码\n // words.forEach((word) => {\n // const {\n // LT,\n // wordSize,\n // hasText,\n // sprite,\n // bounds: { dTop, dBottom, dLeft, dRight },\n // } = word\n // if (hasText) {\n // paint(sprite, wordSize)\n // // 绘制用于 debug 的\n // ctx.save()\n // ctx.strokeStyle = '#f00'\n // ctx.fillStyle = '#0f0'\n // // 绘制 word 包围盒\n // ctx.strokeRect(...LT, ...wordSize)\n // ctx.translate(LT[0] + wordSize[0] / 2, LT[1] + wordSize[1] / 2)\n // ctx.strokeStyle = '#00f'\n // // 绘制bounds\n // ctx.strokeRect(-dLeft, -dTop, dLeft + dRight, dTop + dBottom)\n // // 绘制中心点\n // ctx.fillRect(0, 0, 3, 3)\n // ctx.restore()\n // }\n // })\n\n // document.body.prepend(canvas)\n}\n\n/**\n * 根据 shape 相关的信息初始化 board\n */\nfunction initBoardWithShape(segmentationOutput: SegmentationOutputType) {\n const {\n segmentation: { labels },\n boardSize,\n size\n } = segmentationOutput;\n // board 每个 int 编码 32 个像素的占用信息,求得 w32 表示一行有几个 int\n const w32 = boardSize[0] >> 5;\n const board = new Array(w32 * size[1]).fill(0);\n\n for (let i = 0; i < size[1]; i++) {\n for (let j = 0; j < size[0]; j++) {\n const label = labels[i * size[0] + j];\n if (label === 0) {\n // 取得 board 中对应 int 的索引\n const k = w32 * i + (j >> 5);\n // 构造代表该像素被占用的 int\n const m = 1 << (31 - (j % 32));\n board[k] |= m;\n }\n }\n }\n\n // 对 boardSize 和 size 进行比较,如果 boardSize 大于 size,则将差距的部分设置为不可放置\n if (boardSize[0] > size[0]) {\n const width = boardSize[0] - size[0];\n const m = (1 << width) - 1;\n for (let y = 0; y < size[1]; y++) {\n const k = w32 * y + w32 - 1;\n board[k] |= m;\n }\n }\n\n return board;\n}\n","import { allocateWords } from \"./segmentation\";\n\nimport { layout, layoutGlobalShrink, layoutSelfEnlarge } from \"./wordle\";\n\nimport { filling } from \"./filling\";\n\nexport default function(words, layoutConfig, segmentationOutput) {\n allocateWords(words, segmentationOutput), \"ensureMapping\" === layoutConfig.layoutMode ? layoutGlobalShrink(words, layoutConfig, segmentationOutput) : \"ensureMappingEnlarge\" === layoutConfig.layoutMode ? layoutSelfEnlarge(words, layoutConfig, segmentationOutput) : layout(words, layoutConfig, segmentationOutput);\n const fillingWords = filling(words, layoutConfig, segmentationOutput), failedWords = [], successedWords = [];\n for (let i = 0; i < words.length; i++) words[i].hasPlaced ? successedWords.push(words[i]) : failedWords.push(words[i]);\n return failedWords.forEach((word => word.visible = !1)), {\n fillingWords: fillingWords,\n successedWords: successedWords,\n failedWords: failedWords\n };\n}","import type { CloudWordType, LayoutConfigType, SegmentationOutputType } from './interface';\nimport { measureSprite, isCollideWithBoard, placeWordOnBoard } from './wordle';\n\nexport function filling(\n words: CloudWordType[],\n layoutConfig: LayoutConfigType,\n segmentationOutput: SegmentationOutputType\n) {\n const {\n size,\n fillingTimes,\n fillingXStep,\n fillingYStep,\n getFillingFontStyle,\n getFillingFontWeight,\n getFillingFontFamily,\n fillingInitialFontSize,\n fillingDeltaFontSize,\n fillingInitialOpacity,\n fillingDeltaOpacity,\n fillingRotateList,\n getFillingPadding,\n random,\n board,\n minFillFoontSize\n } = layoutConfig;\n\n const { boardSize, shapeBounds, tempCtx: ctx, tempCanvas: canvas, randomGenerator } = segmentationOutput;\n\n // const padding = fillingPadding\n\n let fontSize = fillingInitialFontSize;\n let opacity = fillingInitialOpacity;\n const placedFillingWords: CloudWordType[] = [];\n\n for (let i = 0; i < fillingTimes; i++) {\n filling1Time(fontSize, opacity);\n\n // 完成一次填充,则更新一下填充词的属性,继续下一次填充\n fontSize = Math.max(\n fontSize > fillingDeltaFontSize ? fontSize - fillingDeltaFontSize : fillingDeltaFontSize,\n minFillFoontSize\n ); // 填充词最小字号4px\n opacity = opacity > fillingDeltaOpacity ? opacity - fillingDeltaOpacity : fillingDeltaOpacity;\n }\n\n return placedFillingWords;\n\n function filling1Time(fontSize: number, opacity: number) {\n const fillingWords: CloudWordType[] = words.map(word => {\n const { text, color, fillingColor, hasPlaced, datum } = word;\n return {\n x: 0,\n y: 0,\n weight: 0,\n text,\n fontFamily: getFillingFontFamily(datum),\n fontStyle: getFillingFontStyle(datum),\n fontWeight: getFillingFontWeight(datum),\n fontSize,\n rotate: fillingRotateList[~~(randomGenerator() * fillingRotateList.length)],\n padding: getFillingPadding(datum),\n opacity,\n visible: true,\n color,\n fillingColor,\n hasPlaced,\n datum\n };\n });\n randomArray(fillingWords);\n let wi = 0;\n const { x1, y1, x2, y2 } = shapeBounds;\n // 小范围随机一个起点\n const [startX, startY] = [\n x1 + ~~(randomGenerator() * fillingXStep * 2),\n y1 + ~~(randomGenerator() * fillingYStep * 2)\n ];\n\n for (let y = startY; y <= y2; y += fillingYStep) {\n for (let x = startX; x <= x2; x += fillingXStep) {\n // 测量填充词的 bounds\n measureSprite(canvas, ctx, fillingWords, wi);\n const word = fillingWords[wi];\n word.x = x;\n word.y = y;\n const { wordSize, bounds, hasPlaced } = word;\n\n /*\n * 这里有一个问题,如果一个词语一直布局不通过,就会在一次filling1Time中一直尝试布局\n * 导致fill次数达到上限后也无法填满空隙\n * 因此在此处跳过无法布局的核心词(一般为超场词),避免出现问题\n */\n if (!hasPlaced || !bounds) {\n // 跳过未成功布局的核心词\n if (++wi === fillingWords.length) {\n wi = 0;\n if (random) {\n randomArray(fillingWords);\n }\n }\n continue;\n }\n\n const { dTop, dBottom, dLeft, dRight } = bounds;\n // 检测根据单词的 bounds 检测是否超出范围\n if (word.x - dLeft < 0 || word.x + dRight > size[0] || word.y - dTop < 0 || word.y + dBottom > size[1]) {\n continue;\n }\n\n if (word.hasText && word.sprite && !isCollideWithBoard(word, board, boardSize)) {\n placeWordOnBoard(word, board, boardSize);\n placedFillingWords.push(Object.assign({}, word));\n // 所有单词放置完后,随机排序一下填充词\n if (++wi === fillingWords.length) {\n wi = 0;\n if (random) {\n randomArray(fillingWords);\n }\n }\n }\n }\n }\n }\n\n function randomArray(words: CloudWordType[]) {\n return words.sort(() => randomGenerator() - 0.5);\n }\n}\n","import { Logger, degreeToRadian, isFunction, isNil, isValid, maxInArray, toNumber } from '@visactor/vutils';\nimport { error } from '@visactor/vgrammar-util';\nimport type {\n TagItemAttribute,\n FieldOption,\n AsType,\n SegmentationInputType,\n SegmentationOutputType,\n LayoutConfigType,\n wordsConfigType,\n CloudWordType\n} from './interface';\nimport { vglobal } from '@visactor/vrender-core';\nimport { loadAndHandleImage, segmentation } from './segmentation';\nimport { LinearScale, OrdinalScale, SqrtScale } from '@visactor/vscale';\nimport cloud from './cloud-shape-layout';\nimport { calTextLength, colorListEqual, fakeRandom, functor, WORDCLOUD_SHAPE_HOOK_EVENT } from './util';\nimport type { IView } from '@visactor/vgrammar-core';\n\nconst OUTPUT = {\n x: 'x',\n y: 'y',\n fontFamily: 'fontFamily',\n fontSize: 'fontSize',\n fontStyle: 'fontStyle',\n fontWeight: 'fontWeight',\n angle: 'angle',\n opacity: 'opacity',\n visible: 'visible',\n isFillingWord: 'isFillingWord',\n color: 'color'\n};\n\nexport const transform = async (\n options: {\n // data index key\n dataIndexKey?: string;\n\n // font value 相关\n text: FieldOption | TagItemAttribute | string;\n\n // font style 相关\n size?: [number, number];\n fontFamily?: FieldOption | TagItemAttribute | string;\n fontStyle?: FieldOption | TagItemAttribute | string;\n fontOpacity?: FieldOption | TagItemAttribute | number;\n fontWeight?: FieldOption | TagItemAttribute | string;\n fontSize?: FieldOption | TagItemAttribute | number;\n fontSizeRange?: [number, number];\n padding?: FieldOption | TagItemAttribute | number;\n\n // font color 相关\n colorMode?: 'linear' | 'ordinal';\n colorField?: FieldOption;\n colorHexField?: FieldOption;\n colorList?: string[];\n\n // font rotate 相关\n rotate?: FieldOption | TagItemAttribute | number;\n rotateList?: number[];\n\n // layout 相关\n shape: string;\n random?: boolean;\n textLayoutTimes?: number;\n layoutMode?: 'default' | 'ensureMapping' | 'ensureMappingEnlarge';\n ratio?: number;\n removeWhiteBorder?: boolean;\n fontSizeShrinkFactor?: number;\n stepFactor?: number;\n importantWordCount?: number;\n globalShinkLimit?: number;\n fontSizeEnlargeFactor?: number;\n\n // fill 相关\n fillingRatio?: number;\n fillingTimes?: number;\n fillingXRatioStep?: number;\n fillingYRatioStep?: number;\n fillingXStep?: number;\n fillingYStep?: number;\n fillingInitialFontSize?: number;\n fillingDeltaFontSize?: number;\n fillingInitialOpacity?: number;\n fillingDeltaOpacity?: number;\n\n // fill font style 相关\n fillingFontFamily?: FieldOption | TagItemAttribute | string;\n fillingFontStyle?: FieldOption | TagItemAttribute | string;\n fillingFontWeight?: FieldOption | TagItemAttribute | string;\n fillingPadding?: FieldOption | TagItemAttribute | number;\n fillingDeltaFontSizeFactor?: number;\n\n // fill color 相关\n fillingColorList?: string[];\n fillingColorField?: FieldOption;\n\n // fill rotate 相关\n fillingRotateList?: number[];\n\n as?: AsType;\n\n // 核心词最小初始布局字号\n minInitFontSize?: number;\n // 核心词最小布局字号\n minFontSize?: number;\n // 填充词词最小布局字号\n minFillFoontSize?: number;\n },\n upstreamData: any[],\n parameters?: any,\n view?: IView\n) => {\n /** options 配置错误提示 */\n if (\n !options.size ||\n isNil(options.size[0]) ||\n isNil(options.size[1]) ||\n options.size[0] <= 0 ||\n options.size[1] <= 0\n ) {\n const logger = Logger.getInstance();\n logger.info('Wordcloud size dimensions must be greater than 0');\n // size非法不报错,不进行布局,ChartSpace层会有用户初始化size为0的情况\n return [];\n }\n /** size 处理, 如果是小数, segmentation 计算会有问题导致place陷入死循环 */\n options.size = [Math.ceil(options.size[0]), Math.ceil(options.size[1])];\n\n if (!options.shape) {\n error('WordcloudShape shape must be specified.');\n }\n if (!options.text) {\n error('WordcloudShape text must be specified.');\n }\n\n view?.emit && view.emit(WORDCLOUD_SHAPE_HOOK_EVENT.BEFORE_WORDCLOUD_SHAPE_LAYOUT);\n\n /** 输入输出数据相关 */\n const data = upstreamData;\n const as = options.as || OUTPUT;\n\n // 第一次数据流到这里data为空,如果不做判断,走到布局算法会报错\n if (!data || data.length === 0) {\n return [];\n }\n\n /** step1: 根据shapeUrl, 计算segmentation */\n const segmentationInput: SegmentationInputType = {\n shapeUrl: options.shape,\n size: options.size,\n ratio: options.ratio || 0.8,\n tempCanvas: undefined,\n tempCtx: undefined,\n removeWhiteBorder: options.removeWhiteBorder || false,\n boardSize: [0, 0],\n random: false,\n randomGenerator: undefined\n };\n\n // 全局共用的临时画板,此处需要对小程序的 canvas 进行兼容\n const tempCanvas = vglobal.createCanvas({ width: options.size[0], height: options.size[1] });\n const tempCtx = tempCanvas.getContext('2d');\n tempCtx.textAlign = 'center';\n tempCtx.textBaseline = 'middle';\n segmentationInput.tempCanvas = tempCanvas;\n segmentationInput.tempCtx = tempCtx;\n\n // board 的宽必须为 32 的倍数\n const boardW = ((options.size[0] + 31) >> 5) << 5;\n segmentationInput.boardSize = [boardW, options.size[1]];\n\n // 用于随机的随机数生成器\n if (segmentationInput.random) {\n segmentationInput.randomGenerator = Math.random;\n } else {\n segmentationInput.randomGenerator = fakeRandom();\n }\n\n const shapeImage = await loadAndHandleImage(segmentationInput);\n\n if (!shapeImage) {\n return [];\n }\n\n // 对用户输入的图形进行预处理\n const segmentationOutput: SegmentationOutputType = segmentation(shapeImage, segmentationInput);\n\n /** step2: 收集 wordsConfig, 并计算fontSizeScale */\n const colorMode = options.colorMode || 'ordinal';\n const wordsConfig: wordsConfigType = {\n getText: field(options.text),\n getFontSize: field(options.fontSize),\n fontSizeRange: options.fontSizeRange,\n\n // color 相关\n colorMode: colorMode,\n getColor: options.colorField ? field(options.colorField) : field(options.text),\n getFillingColor: field(options.fillingColorField),\n // 根据不同的 colorMode 赋值不同的默认值\n colorList:\n options.colorList ||\n (colorMode === 'ordinal' ? ['#2E62F1'] : ['#537EF5', '#2E62F1', '#2358D8', '#184FBF', '#0C45A6', '#013B8E']),\n getColorHex: field(options.colorHexField),\n\n // 字体相关\n getFontFamily: field(options.fontFamily || 'sans-serif'),\n rotateList: options.rotateList || [0],\n getPadding: field(options.padding || 1),\n getFontStyle: field(options.fontStyle || 'normal'),\n getFontWeight: field(options.fontWeight || 'normal'),\n // fontField: options.fontFamily,\n // fontWeightField: options.fontWeight,\n // fontStyleField: options.fontStyle,\n getFontOpacity: options.fontOpacity ? field(options.fontOpacity) : () => 1\n };\n\n initFontSizeScale(data, wordsConfig, segmentationOutput);\n\n /** step3: 收集 layoutConfig, 初始化colorScale */\n const layoutConfig: LayoutConfigType = {\n // font style 相关\n size: options.size,\n ratio: options.ratio || 0.8,\n\n // layout 相关\n shapeUrl: options.shape,\n random: typeof options.random === 'undefined' ? true : options.random,\n textLayoutTimes: options.textLayoutTimes || 3,\n removeWhiteBorder: options.removeWhiteBorder || false,\n layoutMode: options.layoutMode || 'default',\n fontSizeShrinkFactor: options.fontSizeShrinkFactor || 0.8,\n stepFactor: options.stepFactor || 1,\n importantWordCount: options.importantWordCount || 10,\n globalShinkLimit: options.globalShinkLimit || 0.2,\n // textLengthLimit: 10,\n fontSizeEnlargeFactor: options.fontSizeEnlargeFactor || 1.5,\n\n // fill 相关\n fillingRatio: options.fillingRatio || 0.7,\n fillingTimes: options.fillingTimes || 4,\n // fillingXRatioStep: options.fillingXRatioStep || 0,\n // fillingYRatioStep: options.fillingYRatioStep || 0,\n // fillingRatioStep: 步长占长宽的比例,优先级高于fillingStep\n fillingXStep: options.fillingXRatioStep\n ? Math.max(Math.floor(options.size[0] * options.fillingXRatioStep), 1)\n : options.fillingXStep || 4,\n fillingYStep: options.fillingYRatioStep\n ? Math.max(Math.floor(options.size[1] * options.fillingYRatioStep), 1)\n : options.fillingYStep || 4,\n fillingInitialFontSize: options.fillingInitialFontSize,\n fillingDeltaFontSize: options.fillingDeltaFontSize,\n fillingInitialOpacity: options.fillingInitialOpacity || 0.8,\n fillingDeltaOpacity: options.fillingDeltaOpacity || 0.05,\n\n // fill font style 相关\n getFillingFontFamily: field(options.fillingFontFamily || 'sans-serif'),\n getFillingFontStyle: field(options.fillingFontStyle || 'normal'),\n getFillingFontWeight: field(options.fillingFontWeight || 'normal'),\n getFillingPadding: field(options.fillingPadding || 0.4),\n fillingRotateList: options.fillingRotateList || [0, 90],\n fillingDeltaFontSizeFactor: options.fillingDeltaFontSizeFactor || 0.2,\n\n // fill color 相关\n fillingColorList: options.fillingColorList || ['#537EF5'],\n\n // 经过计算,补充的内容\n sameColorList: false,\n\n minInitFontSize: options.minInitFontSize || 10,\n minFontSize: options.minFontSize || 4,\n minFillFoontSize: options.minFillFoontSize || 2\n };\n // 核心词与填充词colorList和colorField不一致时,会给填充词设置独立scale\n const sameColorList = colorListEqual(wordsConfig.colorList, layoutConfig.fillingColorList);\n layoutConfig.sameColorList = sameColorList;\n initColorScale(data, wordsConfig, layoutConfig, options);\n\n /** step4: 初始化填充次fontSize */\n initFillingWordsFontSize(data, wordsConfig, layoutConfig, segmentationOutput);\n\n // 过滤掉上游 source 中的填充词,上游数据相关,待去除 @chensiji\n // data = data.filter((d) => !d.isFillingWord || d.isFillingWord !== true)\n\n /** step5: 初始化words信息,并执行layout算法 */\n // 初始化单词信息, 用个代码块避免变量污染外面的变量环境\n const {\n getText,\n getFontFamily,\n getFontStyle,\n getFontWeight,\n getPadding,\n getColor,\n getFillingColor,\n getColorHex,\n fontSizeScale,\n colorScale,\n fillingColorScale,\n getFontOpacity,\n rotateList\n } = wordsConfig;\n\n const words: CloudWordType[] = data.map(datum => {\n return {\n x: 0,\n y: 0,\n weight: 0,\n text: getText(datum),\n // text: addEllipsis(text(word), config.textLengthLimit),\n fontFamily: getFontFamily(datum),\n fontWeight: getFontWeight(datum),\n fontStyle: getFontStyle(datum),\n rotate: rotateList[~~(segmentationInput.randomGenerator() * rotateList.length)],\n fontSize: Math.max(layoutConfig.minInitFontSize, ~~fontSizeScale(datum)),\n opacity: getFontOpacity(datum),\n padding: getPadding(datum),\n color: (getColorHex && getColorHex(datum)) || (colorScale && colorScale(getColor(datum))) || 'black',\n fillingColor:\n getFillingColor && (options.colorField?.field !== options.fillingColorField?.field || !sameColorList)\n ? (getColorHex && getColorHex(datum)) ||\n (fillingColorScale && fillingColorScale(getFillingColor(datum))) ||\n 'black'\n : undefined,\n datum: datum,\n visible: true,\n hasPlaced: false\n // 上游数据相关,待去除 @chensiji\n // isInAdd: add.indexOf(word) !== -1,\n };\n });\n\n // 计算所有单词的权重 weight,用于后续的布局\n const wordsMaxFontSize = maxInArray(words.map(word => word.fontSize));\n words.forEach(word => (word.weight = word.fontSize / wordsMaxFontSize));\n words.sort((a, b) => b.weight - a.weight);\n\n // 进行布局\n const { fillingWords, successedWords, failedWords } = cloud(words, layoutConfig, segmentationOutput);\n\n /** step5: 将单词信息转换为输出 */\n let w;\n let t;\n const modKeywords = [];\n for (let i = 0; i < words.length; ++i) {\n w = words[i];\n t = w.datum;\n t[as.x] = w.x;\n t[as.y] = w.y;\n t[as.fontFamily] = w.fontFamily;\n t[as.fontSize] = w.fontSize;\n t[as.fontStyle] = w.fontStyle;\n t[as.fontWeight] = w.fontWeight;\n t[as.angle] = degreeToRadian(w.rotate);\n t[as.opacity] = w.opacity;\n t[as.visible] = w.visible;\n t[as.isFillingWord] = false;\n t[as.color] = w.color;\n modKeywords.push(t);\n }\n\n const textKey = (options.text as FieldOption)?.field ?? 'textKey'; // 记录用户是用什么 key 存储 text 信息\n const dataIndexKey = options.dataIndexKey ?? 'defaultDataIndexKey';\n const fillingWordsData: any[] = [];\n fillingWords.forEach((word, index) => {\n const t = {};\n t[as.x] = word.x;\n t[as.y] = word.y;\n t[as.fontFamily] = word.fontFamily;\n t[as.fontSize] = word.fontSize;\n t[as.fontStyle] = word.fontStyle;\n t[as.fontWeight] = word.fontWeight;\n t[as.angle] = degreeToRadian(word.rotate);\n t[as.opacity] = word.opacity;\n t[as.visible] = word.visible;\n t[as.isFillingWord] = true;\n t[as.color] = !getFillingColor\n ? layoutConfig.fillingColorList[~~(segmentationInput.randomGenerator() * layoutConfig.fillingColorList.length)]\n : options.colorField?.field !== options.fillingColorField?.field || !sameColorList\n ? word.fillingColor\n : word.color;\n t[textKey] = word.text;\n\n // 保证绘制时,mark的唯一性\n t[dataIndexKey] = `${word.text}_${index}_fillingWords`;\n\n // updateid(t)\n fillingWordsData.push(t);\n });\n\n // 抛出事件\n view?.emit && view.emit(WORDCLOUD_SHAPE_HOOK_EVENT.AFTER_WORDCLOUD_SHAPE_LAYOUT, { successedWords, failedWords });\n\n // 最后将核心词和填充词合并返回\n return modKeywords.concat(fillingWordsData);\n};\n\n/**\n * 根据用户输入的参数初始化 colorScale\n */\nconst initColorScale = (data: any[], wordsConfig: wordsConfigType, layoutConfig: LayoutConfigType, options: any) => {\n const { colorMode, getColor, getFillingColor } = wordsConfig;\n const { sameColorList } = layoutConfig;\n let colorScale;\n let colorList = wordsConfig.colorList;\n let fillingColorScale;\n let fillingColorList = layoutConfig.fillingColorList;\n if (colorMode === 'ordinal') {\n // 序数着色模式下\n const uniqueColorField = data.map(word => getColor(word));\n colorScale = (datum: any) => {\n return new OrdinalScale().domain(uniqueColorField).range(colorList).scale(datum);\n };\n\n if (getFillingColor && (options.colorField?.field !== options.fillingColorField?.field || !sameColorList)) {\n const uniquefillingColorField = data.map(datum => getFillingColor(datum));\n fillingColorScale = (datum: any) => {\n return new OrdinalScale().domain(uniquefillingColorField).range(fillingColorList).scale(datum);\n };\n }\n } else {\n // 如果用户只输入了一个 color,无法构成 colorRange,则进行兜底\n if (colorList.length === 1) {\n colorList = [colorList[0], colorList[0]];\n }\n // 线性着色模式下\n const valueScale = new LinearScale().domain(extent(getColor, data)).range(colorList);\n\n colorScale = (i: any) => {\n return valueScale.scale(i);\n };\n\n if (getFillingColor && (options.colorField?.field !== options.fillingColorField?.field || !sameColorList)) {\n // 线性着色模式下\n // 如果用户只输入了一个 color,无法构成 colorRange,则进行兜底\n if (fillingColorList.length === 1) {\n fillingColorList = [fillingColorList[0], fillingColorList[0]];\n }\n const fillingValueScale = new LinearScale().domain(extent(getFillingColor, data)).range(fillingColorList);\n\n fillingColorScale = (i: any) => {\n return fillingValueScale.scale(i);\n };\n }\n }\n Object.assign(wordsConfig, { colorScale, fillingColorScale });\n};\n\n/**\n * 根据用户输入参数初始化 fontSizeScale\n */\nconst initFontSizeScale = (data: any[], wordsConfig: wordsConfigType, segmentationOutput: SegmentationOutputType) => {\n let { fontSizeRange: range } = wordsConfig;\n const { getFontSize, getText } = wordsConfig;\n // const { shapeArea, ratio } = segmentationOutput\n\n /*\n * 为避免考虑超长词将字号范围计算的非常小,并且超长词同时无法正确布局的情况\n * 需要在计算字号范围时排除超长词,超长词确定标准:\n * textLength * 12 > sqrt(shapeArea)\n * (字号为12px时,该词长度大于预期长宽的两倍,经验参数)\n * 超长词不参与字号的自适应计算,但是任然会参与布局\n * 如果用户遇到边界情况需要布局超长词,需要手动指定fontSizeRange\n */\n // const shapeSizeLimitTextLength = Math.ceil(Math.sqrt(shapeArea) / 12);\n\n // 生成 fontSize 的 scale\n let fontSizeScale;\n if (!getFontSize) {\n // 如果用户没有提供 fontSize 映射的 field, 自动计算 一个固定的 fontSize\n /**\n * 单词 字长*(fontSize)**2 与真实的单词面积的大概比例为 b\n * 目的为 求 x,从而得到最适合的 fontSizeRange\n * 更详细的算法解析看文档\n */\n const words = data.map(word => ({\n text: getText(word)\n }));\n // const wordArea =\n // b *\n // words.reduce((acc, word) => {\n // const textLength = calTextLength(word.text)\n // return textLength < shapeSizeLimitTextLength ? acc + textLength : acc\n // }, 0)\n // const x0 = Math.sqrt(ratio * (shapeArea / wordArea))\n\n const x = getInitialFontSize(words, segmentationOutput, false);\n\n // fontSize = x\n // 有了 fontSize 后求解 fontSizeScale\n fontSizeScale = functor(x);\n // console.log('自动计算的 fontSize', fontSize)\n } else if (getFontSize && range) {\n // fontSize 和 range 都提供了\n const sizeScale = new SqrtScale().domain(extent(getFontSize, data)).range(range);\n fontSizeScale = (datum: any) => {\n return sizeScale.scale(getFontSize(datum));\n };\n } else if (getFontSize && isFunction(getFontSize) && !range) {\n // 提供了 fontSize 的取值的 key,没提供 range,自动计算 range\n /**\n * 定义 fontSizeRange 为 [ax, x]\n * 期望单词占图形面积的比例为 ratio\n * 单词 字长*(权重映射后的fontSize)**2 与真实的单词面积的大概比例为 b\n * 目的为 求 x,从而得到最适合的 fontSizeRange\n * 更详细的算法解析看文档\n */\n const a = 0.5;\n const [min, max] = extent(getFontSize, data);\n const words = data.map(datum => ({\n text: getText(datum),\n value: getFontSize(datum),\n // weight: (fontSize(word) - min) / (max - min),\n weight: max === min ? 1 : (getFontSize(datum) - min) / (max - min)\n }));\n // const wordArea =\n // b *\n // words.reduce((acc, word) => {\n // const textLength = calTextLength(word.text)\n // if (textLength > shapeSizeLimitTextLength) return acc;\n // return acc + textLength * (a + (1 - a) * word.weight) ** 2\n // }, 0)\n // const x0 = Math.sqrt(ratio * (shapeArea / wordArea))\n\n const x = getInitialFontSize(words, segmentationOutput, true);\n\n range = [~~(a * x), ~~x];\n // 有了 range 后求解 fontSizeScale\n const sizeScale = new SqrtScale().domain(extent(getFontSize, data)).range(range);\n fontSizeScale = (datum: any) => {\n return sizeScale.scale(getFontSize(datum)); // 最小核心词初始字号10px\n };\n // console.log('自动计算的 range', range)\n }\n\n // 将相关配置更新到 wordsConfig 上\n Object.assign(wordsConfig, { getFontSize, fontSizeRange: range, fontSizeScale });\n};\n\nconst getInitialFontSize = (words: any[], segmentationOutput: SegmentationOutputType, weight: boolean) => {\n /**\n * 定义 fontSizeRange 为 [ax, x]\n * 期望单词占图形面积的比例为 ratio\n * 单词 字长*(权重映射后的fontSize)**2 与真实的单词面积的大概比例为 b\n * 目的为 求 x,从而得到最适合的 fontSizeRange\n * 更详细的算法解析看文档\n */\n\n const a = 0.5;\n const b = 1.7;\n const shapeArea = segmentationOutput.shapeArea;\n const ratio = segmentationOutput.ratio;\n const regions = segmentationOutput.segmentation.regions;\n\n /*\n * 为避免考虑超长词将字号范围计算的非常小,并且超长词同时无法正确布局的情况\n * 需要在计算字号范围时排除超长词,超长词确定标准:\n * textLength * 12 > sqrt(shapeArea)\n * (字号为12px时,该词长度大于预期长宽的两倍,经验参数)\n * 超长词不参与字号的自适应计算,但是任然会参与布局\n * 如果用户遇到边界情况需要布局超长词,需要手动指定fontSizeRange\n */\n const shapeSizeLimitTextLength = Math.ceil(Math.sqrt(shapeArea) / 12);\n\n const wordArea =\n // b *\n words.reduce((acc, word) => {\n // 旧版 VGrammar 逻辑\n // const textLength = calTextLength(word.text, segmentationOutput.textLengthLimit)\n const textLength = calTextLength(word.text);\n return textLength < shapeSizeLimitTextLength\n ? acc + textLength * (weight ? (a + (1 - a) * word.weight) ** 2 : 1)\n : acc;\n }, 0);\n if (wordArea === 0) {\n // 只有一个超长词,以12px字号开始初始布局\n return 12;\n }\n\n let x = 20;\n if (regions.length === 1) {\n // 单一区域\n x = Math.sqrt(ratio * (shapeArea / (wordArea * b)));\n } else {\n const xArr = [];\n for (let i = 0; i < regions.length; i++) {\n const regionArea = regions[i].area;\n const regionAspect = regions[i].ratio;\n const regionRatio = regionArea / shapeArea;\n if (regionRatio < 0.1) {\n continue;\n }\n // 考虑区域长宽比对文字面积的影响(2.7 - regionAspect),经验参数\n const regionWordArea = regionRatio * (wordArea * (regionAspect < 1 ? 2.7 - regionAspect : b));\n const x = Math.sqrt(ratio * (regionArea / regionWordArea));\n\n xArr.push(x);\n }\n\n if (xArr.length) {\n x = Math.min(...xArr);\n } else {\n // 特殊情况当做单一区域处理\n x = Math.sqrt(ratio * (shapeArea / (wordArea * b)));\n }\n }\n return x;\n};\n\n/**\n * 自动计算 fillingWords 相关的 fontSize\n */\nfunction initFillingWordsFontSize(\n data: any[],\n wordsConfig: wordsConfigType,\n layoutConfig: LayoutConfigType,\n segmentationOutput: SegmentationOutputType\n) {\n const { getText } = wordsConfig;\n let { fillingInitialFontSize, fillingDeltaFontSize } = layoutConfig;\n const { fillingRatio } = layoutConfig;\n\n /*\n * 为避免考虑超长词将字号范围计算的非常小,并且超长词同时无法正确布局的情况\n * 需要在计算字号范围时排除超长词,超长词确定标准:\n * textLength * 4 > sqrt(shapeArea)\n * (字号为4px时,该词长度大于预期长宽的两倍,经验参数)\n * 超长词不参与字号的自适应计算,但是任然会参与布局\n * 如果用户遇到边界情况需要布局超长词,需要手动指定fontSizeRange\n */\n const shapeSizeLimitTextLength = Math.ceil(Math.sqrt(segmentationOutput.shapeArea) / 4);\n\n // 两个值中有一个每天写则自动计算\n if (!fillingInitialFontSize || !fillingDeltaFontSize) {\n /**\n * 自动计算的依据是 填充面积应该与 单词平均长度 * fontSize**2 成一个固定比例 a\n */\n\n const a = fillingRatio / 100;\n\n const averageLength =\n data.reduce((acc, word) => {\n const length = calTextLength(getText(word));\n if (length > shapeSizeLimitTextLength) {\n return acc;\n }\n return acc + length;\n }, 0) / data.length;\n let fontSize;\n if (averageLength === 0) {\n // 只有一个超长词,以8px字号开始初始布局\n fontSize = 8;\n } else {\n const area = segmentationOutput.shapeArea * 0.2;\n fontSize = Math.sqrt(a * (area / averageLength));\n }\n\n fillingInitialFontSize = ~~fontSize;\n fillingDeltaFontSize = fontSize * layoutConfig.fillingDeltaFontSizeFactor;\n\n Object.assign(layoutConfig, {\n fillingInitialFontSize,\n fillingDeltaFontSize\n });\n // console.log('自动计算的 filling', [\n // fillingInitialFontSize,\n // fillingDeltaFontSize,\n // ])\n }\n}\n\nconst extent = (field: any, data: any[]) => {\n let min = +Infinity;\n let max = -Infinity;\n const n = data.length;\n let v: any;\n\n for (let i = 0; i < n; ++i) {\n // 字符串类型转换\n v = toNumber(field(data[i]));\n if (v < min) {\n min = v;\n }\n if (v > max) {\n max = v;\n }\n }\n\n // 如果单条数据,匹配最大字号\n if (data.length === 1 && min === max) {\n min -= 10000;\n }\n\n return [min, max];\n};\n\n/**\n * 取数逻辑\n */\nconst field = (option: FieldOption | TagItemAttribute) => {\n if (!option) {\n return null;\n }\n if (typeof option === 'string' || typeof option === 'number') {\n return () => option;\n } else if (isFunction(option)) {\n return option as (datum: any) => T;\n }\n return (datum: any) => datum[(option as FieldOption).field];\n};\n","/* eslint-disable no-duplicate-imports */\nimport { SeriesTypeEnum } from '../interface/type';\nimport type { IWordCloudSeriesSpec } from './interface';\nimport { BaseWordCloudSeries } from './base';\nimport { Factory } from '../../core/factory';\nimport { registerWordCloudAnimation } from './animation';\nimport { registerWordCloudTransforms } from '@visactor/vgrammar-wordcloud';\nimport { registerWordCloudShapeTransforms } from '@visactor/vgrammar-wordcloud-shape';\nimport { registerTextMark } from '../../mark/text';\n\nexport class WordCloudSeries extends BaseWordCloudSeries {\n static readonly type: string = SeriesTypeEnum.wordCloud;\n type = SeriesTypeEnum.wordCloud;\n}\n\nexport const registerWordCloudSeries = () => {\n registerWordCloudTransforms();\n registerTextMark();\n registerWordCloudAnimation();\n Factory.registerSeries(WordCloudSeries.type, WordCloudSeries);\n};\n\nexport const registerWordCloudShapeSeries = () => {\n registerWordCloudShapeTransforms();\n registerWordCloudSeries();\n};\n","import { BaseWordCloudChartSpecTransformer } from './base';\nimport type { IWordCloudChartSpec } from './interface';\n\nexport class WordCloudChartSpecTransformer<\n T extends IWordCloudChartSpec = IWordCloudChartSpec\n> extends BaseWordCloudChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: IWordCloudChartSpec): any {\n const series: any = {\n ...super._getDefaultSeriesSpec(spec),\n nameField: spec.nameField,\n valueField: spec.valueField,\n seriesField: spec.seriesField,\n fontFamilyField: spec.fontFamilyField,\n fontWeightField: spec.fontWeightField,\n fontStyleField: spec.fontStyleField,\n colorHexField: spec.colorHexField,\n colorMode: spec.colorMode,\n colorList: spec.colorList,\n rotateAngles: spec.rotateAngles,\n fontWeightRange: spec.fontWeightRange,\n fontSizeRange: spec.fontSizeRange,\n maskShape: spec.maskShape,\n keepAspect: spec.keepAspect,\n random: spec.random,\n wordCloudConfig: spec.wordCloudConfig,\n wordCloudShapeConfig: spec.wordCloudShapeConfig,\n word: spec.word,\n fillingWord: spec.fillingWord\n };\n const seriesType = this.seriesType;\n if (seriesType) {\n series.type = seriesType;\n series[seriesType] = spec[seriesType];\n }\n\n return series;\n }\n}\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IWordCloudChartSpec } from './interface';\nimport { BaseWordCloudChart } from './base/base';\nimport { registerWordCloudSeries, registerWordCloudShapeSeries } from '../../series/word-cloud/word-cloud';\nimport { Factory } from '../../core/factory';\nimport { WordCloudChartSpecTransformer } from './word-cloud-transformer';\n\nexport class WordCloudChart extends BaseWordCloudChart {\n static readonly type: string = ChartTypeEnum.wordCloud;\n static readonly seriesType: string = SeriesTypeEnum.wordCloud;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = WordCloudChartSpecTransformer;\n readonly transformerConstructor = WordCloudChartSpecTransformer;\n readonly type: string = ChartTypeEnum.wordCloud;\n readonly seriesType: string = SeriesTypeEnum.wordCloud;\n}\n\nexport const registerWordCloudChart = () => {\n registerWordCloudSeries();\n Factory.registerChart(WordCloudChart.type, WordCloudChart);\n};\n\n// Splitting the register logic into two parts is to tree-shake the unused transforms as much as possible.\n// Especially in the cross-terminal environment, word-cloud shape is not compatible.\nexport const registerWordCloudShapeChart = () => {\n registerWordCloudShapeSeries();\n registerWordCloudChart();\n};\n","import { AttributeLevel } from '../../constant';\nimport { type ITextMark, registerTextMark } from '../../mark/text';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IWordCloud3dSeriesSpec } from './interface';\nimport type { Datum } from '../../typings';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { BaseWordCloudSeries } from './base';\nimport { Factory } from '../../core/factory';\nimport { registerWordCloud3dAnimation } from './animation';\nimport { registerWordCloudTransforms } from '@visactor/vgrammar-wordcloud';\nimport { registerWordCloudShapeTransforms } from '@visactor/vgrammar-wordcloud-shape';\n\nexport class WordCloud3dSeries<\n T extends IWordCloud3dSeriesSpec = IWordCloud3dSeriesSpec\n> extends BaseWordCloudSeries {\n static readonly type: string = SeriesTypeEnum.wordCloud3d;\n type = SeriesTypeEnum.wordCloud3d;\n\n protected _wordCloudTransformOption() {\n return {\n ...super._wordCloudTransformOption(),\n postProjection: this._spec.postProjection ?? 'StereographicProjection',\n depth_3d: this._spec.depth_3d\n };\n }\n\n protected _wordCloudShapeTransformOption() {\n return {\n ...super._wordCloudShapeTransformOption(),\n postProjection: this._spec.postProjection ?? 'StereographicProjection',\n depth_3d: this._spec.depth_3d\n };\n }\n\n initMark(): void {\n this._wordMark = this._createMark(BaseWordCloudSeries.mark.word, {\n groupKey: this._seriesField,\n support3d: true,\n isSeriesMark: true\n }) as ITextMark;\n if (this._isWordCloudShape) {\n this._fillingWordMark = this._createMark(BaseWordCloudSeries.mark.fillingWord, {\n groupKey: this._seriesField,\n support3d: true,\n isSeriesMark: true\n }) as ITextMark;\n }\n }\n\n initMarkStyle() {\n super.initMarkStyle();\n const wordMark = this._wordMark;\n const fillingWordMark = this._fillingWordMark;\n if (wordMark) {\n this.setMarkStyle(\n wordMark,\n {\n z: (datum: Datum) => datum.z ?? 0\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n if (fillingWordMark) {\n this.setMarkStyle(\n fillingWordMark,\n {\n z: (datum: Datum) => datum.z ?? 0\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initAnimation() {\n const padding = this._padding ?? {};\n if (this._wordMark) {\n this._wordMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('wordCloud3d')?.(() => {\n const srView = this.getCompiler().getVGrammarView();\n const width = srView.width() - padding.left || 0 - padding.right || 0;\n const height = srView.height() - padding.top || 0 - padding.bottom || 0;\n const r = Math.max(width, height) / 2;\n return {\n center: { x: r, y: r, z: this._spec.depth_3d ?? r },\n r\n };\n }),\n userAnimationConfig(SeriesMarkNameEnum.word, this._spec, this._markAttributeContext)\n )\n );\n }\n if (this._fillingWordMark) {\n this._fillingWordMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('wordCloud3d')?.(() => {\n const srView = this.getCompiler().getVGrammarView();\n const width = srView.width() - padding.left || 0 - padding.right || 0;\n const height = srView.height() - padding.top || 0 - padding.bottom || 0;\n const r = Math.max(width, height) / 2;\n return {\n center: { x: r, y: r, z: this._spec.depth_3d ?? r },\n r\n };\n }),\n userAnimationConfig(SeriesMarkNameEnum.fillingWord, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n}\n\nexport const registerWordCloud3dSeries = () => {\n registerWordCloudTransforms();\n registerTextMark();\n registerWordCloud3dAnimation();\n Factory.registerSeries(WordCloud3dSeries.type, WordCloud3dSeries);\n};\n\nexport const registerWordCloudShape3dSeries = () => {\n registerWordCloudShapeTransforms();\n registerWordCloud3dSeries();\n};\n","import type { AdaptiveSpec } from '../../../typings';\nimport { BaseWordCloudChartSpecTransformer } from '../base/word-cloud-base-transformer';\nimport type { IWordCloud3dChartSpec } from '../interface';\n\nexport class WordCloud3dChartSpecTransformer<\n T extends IWordCloud3dChartSpec = IWordCloud3dChartSpec\n> extends BaseWordCloudChartSpecTransformer> {\n protected _getDefaultSeriesSpec(spec: IWordCloud3dChartSpec): any {\n const series: any = {\n ...super._getDefaultSeriesSpec(spec),\n nameField: spec.nameField,\n valueField: spec.valueField,\n seriesField: spec.seriesField,\n fontFamilyField: spec.fontFamilyField,\n fontWeightField: spec.fontWeightField,\n fontStyleField: spec.fontStyleField,\n colorHexField: spec.colorHexField,\n colorMode: spec.colorMode,\n colorList: spec.colorList,\n rotateAngles: spec.rotateAngles,\n fontWeightRange: spec.fontWeightRange,\n fontSizeRange: spec.fontSizeRange,\n depth_3d: spec.depth_3d,\n maskShape: spec.maskShape,\n keepAspect: spec.keepAspect,\n random: spec.random,\n wordCloudConfig: spec.wordCloudConfig,\n wordCloudShapeConfig: spec.wordCloudShapeConfig,\n word: spec.word,\n fillingWord: spec.fillingWord\n };\n const seriesType = this.seriesType;\n if (seriesType) {\n series.type = seriesType;\n series[seriesType] = spec[seriesType];\n }\n\n return series;\n }\n}\n","import { SeriesTypeEnum } from '../../../series/interface/type';\nimport { ChartTypeEnum } from '../../interface/type';\nimport type { IWordCloud3dChartSpec } from '../interface';\nimport { BaseWordCloudChart } from '../base/base';\nimport { registerWordCloud3dSeries, registerWordCloudShape3dSeries } from '../../../series/word-cloud/word-cloud-3d';\nimport { Factory } from '../../../core/factory';\nimport type { AdaptiveSpec } from '../../../typings';\nimport { WordCloud3dChartSpecTransformer } from './word-cloud-3d-transformer';\n\nexport class WordCloud3dChart extends BaseWordCloudChart<\n AdaptiveSpec\n> {\n static readonly type: string = ChartTypeEnum.wordCloud3d;\n static readonly seriesType: string = SeriesTypeEnum.wordCloud3d;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = WordCloud3dChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = WordCloud3dChartSpecTransformer;\n readonly type: string = ChartTypeEnum.wordCloud3d;\n readonly seriesType: string = SeriesTypeEnum.wordCloud3d;\n}\n\nexport const registerWordCloud3dChart = () => {\n registerWordCloud3dSeries();\n Factory.registerChart(WordCloud3dChart.type, WordCloud3dChart);\n};\n\nexport const registerWordCloudShape3dChart = () => {\n registerWordCloudShape3dSeries();\n registerWordCloud3dChart();\n};\n","import type { DataView } from '@visactor/vdataset';\nimport { isValidNumber } from '@visactor/vutils';\n\nexport interface IFunnelOpt {\n valueField: string;\n /** 转化率(当前层到下一层的比例) **/\n asTransformRatio: string;\n /** 到达率 (上一层到当前层的比例)*/\n asReachRatio: string;\n /** 高度轴占总量的比例 **/\n asHeightRatio: string;\n /** 当前值大小占比 */\n asValueRatio: string;\n /** 上一层值大小占比 */\n asLastValueRatio: string;\n /** 下一层值大小占比 */\n asNextValueRatio: string;\n /** 当前层的值 */\n asCurrentValue: string;\n /** 上一层的值 **/\n asLastValue: string;\n /** 下一层的值 **/\n asNextValue: string;\n\n /** 最底层漏斗是否为锥形 */\n isCone?: boolean;\n /** 高度是否进行数据映射 **/\n heightVisual?: boolean;\n\n /** 数值范围 */\n range?: { min: number; max: number };\n}\n\nexport const funnel = (originData: Array, op: IFunnelOpt) => {\n const data = originData.map(datum => ({ ...datum }));\n if (!data || data.length === 0) {\n return data;\n }\n const {\n valueField,\n asTransformRatio,\n asReachRatio,\n asHeightRatio,\n asValueRatio,\n asNextValueRatio,\n asLastValueRatio,\n asLastValue,\n asCurrentValue,\n asNextValue,\n heightVisual = false,\n isCone = true,\n range\n } = op;\n\n const max = data.reduce((m, d) => Math.max(m, Number.parseFloat(d[valueField]) || -Infinity), -Infinity);\n const min = data.reduce((m, d) => Math.min(m, Number.parseFloat(d[valueField]) || Infinity), Infinity);\n const rangeArr = [range?.min ?? min, range?.max ?? max];\n\n data.forEach((d, i) => {\n const currentValue: number = Number.parseFloat(d[valueField]);\n const lastValue: number = Number.parseFloat(data[i - 1]?.[valueField]);\n const nextValue: number = Number.parseFloat(data[i + 1]?.[valueField]);\n\n const transformRatio =\n !isValidNumber(nextValue * currentValue) || currentValue === 0 ? 0 : nextValue / currentValue;\n const reachRatio = !isValidNumber(currentValue * lastValue) || lastValue === 0 ? 0 : currentValue / lastValue;\n\n asLastValue && (d[asLastValue] = lastValue);\n asNextValue && (d[asNextValue] = nextValue);\n asTransformRatio && (d[asTransformRatio] = transformRatio);\n asReachRatio && (d[asReachRatio] = i === 0 ? 1 : reachRatio);\n asHeightRatio && (d[asHeightRatio] = heightVisual === true ? transformRatio : 1 / data.length);\n asValueRatio && (d[asValueRatio] = currentValue / rangeArr[1]);\n asNextValueRatio &&\n (d[asNextValueRatio] = i === data.length - 1 ? (isCone ? 0 : d[asValueRatio]) : nextValue / rangeArr[1]);\n asLastValueRatio && (d[asLastValueRatio] = i === 0 ? 1 : lastValue / rangeArr[1]);\n asCurrentValue && (d[asCurrentValue] = currentValue);\n });\n\n return data;\n};\n\nexport interface IFunnelTransformOpt {\n asIsTransformLevel: string;\n}\n\nexport const funnelTransform = (originData: Array, op: IFunnelTransformOpt) => {\n const data = originData[0]?.latestData?.map((datum: any) => ({ ...datum }));\n if (!data || data.length === 0) {\n return data;\n }\n data.shift();\n data.forEach((d: any) => {\n d[op.asIsTransformLevel] = true;\n });\n return data;\n};\n","import { PREFIX } from './base';\n\nexport const FUNNEL_TRANSFORM_RATIO = `${PREFIX}_FUNNEL_TRANSFORM_RATIO`;\nexport const FUNNEL_REACH_RATIO = `${PREFIX}_FUNNEL_REACH_RATIO`;\nexport const FUNNEL_HEIGHT_RATIO = `${PREFIX}_FUNNEL_HEIGHT_RATIO`;\nexport const FUNNEL_VALUE_RATIO = `${PREFIX}_FUNNEL_VALUE_RATIO`;\nexport const FUNNEL_LAST_VALUE_RATIO = `${PREFIX}_FUNNEL_LAST_VALUE_RATIO`;\nexport const FUNNEL_NEXT_VALUE_RATIO = `${PREFIX}_FUNNEL_NEXT_VALUE_RATIO`;\nexport const FUNNEL_LAST_VALUE = `${PREFIX}_FUNNEL_LAST_VALUE`;\nexport const FUNNEL_CURRENT_VALUE = `${PREFIX}_FUNNEL_CURRENT_VALUE`;\nexport const FUNNEL_NEXT_VALUE = `${PREFIX}_FUNNEL_NEXT_VALUE`;\n\nexport const FUNNEL_TRANSFORM_LEVEL = `${PREFIX}_FUNNEL_TRANSFORM_LEVEL`;\n\nexport const FUNNEL_LABEL_LINE_LENGTH = 20;\nexport const FUNNEL_LABEL_SPACE_WIDTH = 5;\nexport const FUNNEL_MAX_SIZE = '80%';\nexport const FUNNEL_MIN_SIZE = 0;\n","import type { IFunnelSeries, ISeriesTooltipHelper } from '../interface';\nimport { SeriesMarkNameEnum } from '../interface/type';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport { FUNNEL_REACH_RATIO } from '../../constant/funnel';\nimport { isValid } from '@visactor/vutils';\nimport type { TooltipHandlerParams } from '../../component/tooltip/interface';\nimport type { Datum } from '@visactor/vgrammar-core';\n\nexport class FunnelSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n titleValueCallback = (datum: Datum, params?: TooltipHandlerParams) => {\n const series = this.series as IFunnelSeries;\n if (params?.mark?.name === SeriesMarkNameEnum.transform) {\n // TODO: i18n\n return `转化率`;\n }\n return this._getDimensionData(datum) ?? datum.properties?.[`${series.getCategoryField()}`];\n };\n\n contentValueCallback = (datum: Datum, params?: TooltipHandlerParams) => {\n if (params?.mark?.name === SeriesMarkNameEnum.transform) {\n const measureData = datum?.[FUNNEL_REACH_RATIO];\n return `${(measureData * 100).toFixed(1)}%`;\n }\n return this._getMeasureData(datum);\n };\n\n contentKeyCallback = (datum: Datum, params?: TooltipHandlerParams) => {\n if (params?.mark?.name === SeriesMarkNameEnum.transform) {\n // TODO: i18n\n return `转化率`;\n }\n const { dimensionFields, seriesFields } = this._seriesCacheInfo;\n const subDimensionField = dimensionFields[dimensionFields.length - 1];\n\n if (isValid(seriesFields[0])) {\n return datum?.[seriesFields[0]];\n }\n return datum?.[subDimensionField];\n };\n}\n","import type { ICommonSpec } from '../../typings/visual';\nimport { BaseMark } from '../base/base-mark';\nimport type { IMarkStyle } from '../interface';\n\nexport class BasePolygonMark extends BaseMark {\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n points: []\n };\n return defaultStyle;\n }\n}\n","import { Factory } from './../../core/factory';\n/* eslint-disable no-duplicate-imports */\nimport type { IPolygonMarkSpec } from '../../typings/visual';\nimport { BasePolygonMark } from './base-polygon';\nimport type { IMarkRaw, IMarkStyle } from '../interface';\nimport { MarkTypeEnum } from '../interface/type';\nimport { registerPolygonGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarPolygonAnimation } from '../../animation/config';\n\nexport type IPolygonMark = IMarkRaw;\n\nexport class PolygonMark extends BasePolygonMark implements IPolygonMark {\n static readonly type = MarkTypeEnum.polygon;\n readonly type = PolygonMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n lineWidth: 0\n };\n return defaultStyle;\n }\n}\n\nexport const registerPolygonMark = () => {\n Factory.registerMark(PolygonMark.type, PolygonMark);\n registerPolygonGraphic();\n registerVGrammarPolygonAnimation();\n};\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IFunnelSeriesSpec, IFunnelSeriesTheme } from './interface';\n\nexport class FunnelSeriesSpecTransformer<\n T extends IFunnelSeriesSpec = IFunnelSeriesSpec,\n K extends IFunnelSeriesTheme = IFunnelSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.funnel);\n if (spec.isTransform) {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.transform, 'transformLabel' as any);\n }\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport type { IFunnelSeries, SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum } from '../interface/type';\nimport type { IOrientType, IPoint, TextAlign, TextBaseLine, Datum, StringOrNumber } from '../../typings';\nimport { SeriesTypeEnum } from '../interface/type';\nimport type { IPolygonMark } from '../../mark/polygon/polygon';\nimport { BaseSeries } from '../base/base-series';\nimport { AttributeLevel, DEFAULT_DATA_KEY, PREFIX } from '../../constant';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { DataView } from '@visactor/vdataset';\nimport type { IMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type { IFunnelOpt } from '../../data/transforms/funnel';\nimport { funnel, funnelTransform } from '../../data/transforms/funnel';\nimport {\n FUNNEL_CURRENT_VALUE,\n FUNNEL_HEIGHT_RATIO,\n FUNNEL_LABEL_LINE_LENGTH,\n FUNNEL_LABEL_SPACE_WIDTH,\n FUNNEL_LAST_VALUE,\n FUNNEL_LAST_VALUE_RATIO,\n FUNNEL_MAX_SIZE,\n FUNNEL_MIN_SIZE,\n FUNNEL_NEXT_VALUE,\n FUNNEL_NEXT_VALUE_RATIO,\n FUNNEL_REACH_RATIO,\n FUNNEL_TRANSFORM_LEVEL,\n FUNNEL_TRANSFORM_RATIO,\n FUNNEL_VALUE_RATIO\n} from '../../constant/funnel';\nimport type { ITextMark } from '../../mark/text';\nimport { calcLayoutNumber } from '../../util/space';\nimport { field } from '../../util/object';\nimport type { FunnelAppearPreset, IFunnelSeriesSpec } from './interface';\nimport type { IRuleMark } from '../../mark/rule';\nimport { FunnelSeriesTooltipHelper } from './tooltip-helper';\nimport { isFunction, isValid, isNumber } from '@visactor/vutils';\nimport {\n FadeInOutAnimation,\n registerCartesianGroupClipAnimation,\n registerFadeInOutAnimation\n} from '../../animation/config';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport { SeriesData } from '../base/series-data';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerPolygonMark } from '../../mark/polygon/polygon';\nimport { registerTextMark } from '../../mark/text';\nimport { registerRuleMark } from '../../mark/rule';\nimport { funnelSeriesMark } from './constant';\nimport type { ILabelMark } from '../../mark/label';\nimport type { LabelItem } from '@visactor/vrender-components';\nimport { Factory } from '../../core/factory';\nimport { FunnelSeriesSpecTransformer } from './funnel-transformer';\n\nexport class FunnelSeries\n extends BaseSeries\n implements IFunnelSeries\n{\n static readonly type: string = SeriesTypeEnum.funnel;\n type = SeriesTypeEnum.funnel;\n protected _funnelMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.funnel;\n protected _funnelMarkType: MarkTypeEnum = MarkTypeEnum.polygon;\n protected _transformMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.transform;\n protected _transformMarkType: MarkTypeEnum = MarkTypeEnum.polygon;\n\n static readonly mark: SeriesMarkMap = funnelSeriesMark;\n static readonly transformerConstructor = FunnelSeriesSpecTransformer as any;\n readonly transformerConstructor = FunnelSeriesSpecTransformer;\n\n protected _categoryField!: string;\n getCategoryField() {\n return this._categoryField;\n }\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n protected _valueField!: string;\n getValueField() {\n return this._valueField;\n }\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n protected _viewDataTransform!: SeriesData;\n\n protected _funnelAlign: 'left' | 'center' | 'right' | 'top' | 'bottom';\n protected _funnelOrient: IOrientType;\n protected _shape: 'rect' | 'trapezoid';\n\n protected _funnelMark: IPolygonMark | null = null;\n protected _funnelTransformMark: IPolygonMark | null = null;\n protected _labelMark: ILabelMark | null = null;\n protected _transformLabelMark: ILabelMark | null = null;\n protected _funnelOuterLabelMark: { label?: ITextMark; line?: IRuleMark } = {};\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n\n this.setCategoryField(this._spec.categoryField);\n this.setValueField(this._spec.valueField);\n\n this._funnelOrient = this._spec.funnelOrient ?? 'top';\n this._shape = this._spec.shape ?? 'trapezoid';\n\n if (this._isHorizontal()) {\n this._funnelAlign = ['top', 'bottom'].includes(this._spec.funnelAlign) ? this._spec.funnelAlign : 'center';\n } else {\n this._funnelAlign = ['left', 'right'].includes(this._spec.funnelAlign) ? this._spec.funnelAlign : 'center';\n }\n\n if (this._spec.categoryField) {\n this.setSeriesField(this._spec.categoryField);\n }\n }\n\n initData() {\n super.initData();\n if (!this._data) {\n return;\n }\n\n registerDataSetInstanceTransform(this._dataSet, 'funnel', funnel);\n registerDataSetInstanceTransform(this._dataSet, 'funnelTransform', funnelTransform);\n\n const viewDataTransform = new DataView(this._dataSet, { name: `${PREFIX}_series_${this.id}_viewDataTransform` });\n viewDataTransform.parse([this.getViewData()], {\n type: 'dataview'\n });\n\n this._viewDataTransform = new SeriesData(this._option, viewDataTransform);\n }\n\n getStatisticFields() {\n const fields: { key: string; operations: Array<'max' | 'min' | 'values'> }[] = [];\n fields.push({ key: this._categoryField, operations: ['values'] });\n fields.push({ key: this._valueField, operations: ['max', 'min'] });\n return fields;\n }\n\n protected _statisticViewData(): void {\n super._statisticViewData();\n this._data.getDataView().transform({\n type: 'funnel',\n options: {\n valueField: this.getValueField(),\n isCone: this._spec.isCone,\n // heightVisual: true,\n asCurrentValue: FUNNEL_CURRENT_VALUE,\n asTransformRatio: FUNNEL_TRANSFORM_RATIO,\n asReachRatio: FUNNEL_REACH_RATIO,\n asHeightRatio: FUNNEL_HEIGHT_RATIO,\n asValueRatio: FUNNEL_VALUE_RATIO,\n asNextValueRatio: FUNNEL_NEXT_VALUE_RATIO,\n asLastValueRatio: FUNNEL_LAST_VALUE_RATIO,\n asLastValue: FUNNEL_LAST_VALUE,\n asNextValue: FUNNEL_NEXT_VALUE,\n range: {\n min: this._spec.range?.min ?? this.getViewDataStatistics().latestData?.[this.getValueField()]?.min,\n max: this._spec.range?.max ?? this.getViewDataStatistics().latestData?.[this.getValueField()]?.max\n }\n } as IFunnelOpt\n });\n\n this._viewDataTransform.getDataView()?.transform({\n type: 'funnelTransform',\n options: { asIsTransformLevel: FUNNEL_TRANSFORM_LEVEL }\n });\n }\n\n initMark() {\n this._funnelMark = this._createMark(\n {\n ...FunnelSeries.mark.funnel,\n name: this._funnelMarkName,\n type: this._funnelMarkType\n },\n {\n themeSpec: this._theme?.funnel,\n morph: shouldMarkDoMorph(this._spec, this._funnelMarkName),\n defaultMorphElementKey: this._seriesField,\n groupKey: this._seriesField,\n isSeriesMark: true,\n customShape: this._spec.funnel?.customShape\n }\n ) as IPolygonMark;\n\n if (this._spec.isTransform) {\n this._funnelTransformMark = this._createMark(\n {\n ...FunnelSeries.mark.transform,\n name: this._transformMarkName,\n type: this._transformMarkType\n },\n {\n themeSpec: this._theme?.transform,\n skipBeforeLayouted: false,\n dataView: this._viewDataTransform.getDataView(),\n dataProductId: this._viewDataTransform.getProductId(),\n customShape: this._spec.transform?.customShape\n }\n );\n }\n\n if (this._spec?.outerLabel?.visible) {\n const { line } = this._spec.outerLabel ?? {};\n const { line: lineTheme } = this._theme?.outerLabel ?? {};\n\n this._funnelOuterLabelMark.label = this._createMark(FunnelSeries.mark.outerLabel, {\n themeSpec: this._theme?.outerLabel,\n markSpec: this._spec.outerLabel,\n skipBeforeLayouted: true\n }) as ITextMark;\n\n this._funnelOuterLabelMark.line = this._createMark(FunnelSeries.mark.outerLabelLine, {\n themeSpec: lineTheme,\n markSpec: line,\n depend: [this._funnelOuterLabelMark.label]\n }) as IRuleMark;\n }\n }\n\n protected initTooltip() {\n this._tooltipHelper = new FunnelSeriesTooltipHelper(this);\n this._funnelMark && this._tooltipHelper.activeTriggerSet.mark.add(this._funnelMark);\n this._funnelTransformMark && this._tooltipHelper.activeTriggerSet.mark.add(this._funnelTransformMark);\n }\n\n getDimensionField(): string[] {\n return this._seriesField ? [this._seriesField] : [];\n }\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n getGroupFields(): string[] {\n return null;\n }\n\n initMarkStyle() {\n const funnelMark = this._funnelMark;\n if (funnelMark) {\n this.setMarkStyle(\n funnelMark,\n {\n points: (datum: Datum) => this.getPoints(datum),\n visible: (datum: Datum) => isValid(datum[this._valueField]),\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n this._trigger.registerMark(funnelMark);\n }\n\n const funnelTransformMark = this._funnelTransformMark;\n if (funnelTransformMark) {\n this.setMarkStyle(\n funnelTransformMark,\n { points: (datum: Datum) => this.getPoints(datum) },\n 'normal',\n AttributeLevel.Series\n );\n this._trigger.registerMark(funnelTransformMark);\n }\n\n const outerLabelMark = this._funnelOuterLabelMark.label;\n if (outerLabelMark) {\n this.setMarkStyle(\n outerLabelMark,\n {\n text: (datum: Datum) => {\n const text = `${datum[this.getCategoryField()]}`;\n if (isFunction(this._spec.outerLabel.formatMethod)) {\n return this._spec.outerLabel.formatMethod(text, datum);\n }\n return text;\n },\n x: (datum: Datum) => this._computeOuterLabelPosition(datum).x,\n y: (datum: Datum) => this._computeOuterLabelPosition(datum).y,\n textAlign: (datum: Datum) => this._computeOuterLabelPosition(datum).align,\n textBaseline: (datum: Datum) => this._computeOuterLabelPosition(datum).textBaseline,\n limit: (datum: Datum) => this._computeOuterLabelLimit(datum)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n const outerLabelLineMark = this._funnelOuterLabelMark.line;\n if (outerLabelLineMark && outerLabelMark) {\n this.setMarkStyle(\n outerLabelLineMark,\n {\n x: (datum: Datum) => this._computeOuterLabelLinePosition(datum).x1,\n y: (datum: Datum) => this._computeOuterLabelLinePosition(datum).y1,\n x1: (datum: Datum) => this._computeOuterLabelLinePosition(datum).x2,\n y1: (datum: Datum) => this._computeOuterLabelLinePosition(datum).y2\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initLabelMarkStyle(labelMark?: ILabelMark) {\n if (!labelMark) {\n return;\n }\n\n const target = labelMark.getTarget();\n const component = labelMark.getComponent();\n\n if (target === this._funnelMark) {\n this._labelMark = labelMark;\n this.setMarkStyle(\n labelMark,\n {\n text: (datum: Datum) => `${datum[this.getCategoryField()]} ${datum[this.getValueField()]}`,\n x: (datum: Datum) => this._computeLabelPosition(datum).x,\n y: (datum: Datum) => this._computeLabelPosition(datum).y,\n maxLineWidth: (datum: Datum) => this._computeLabelLimit(datum, this._spec.label),\n stroke: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n if (this._funnelOuterLabelMark?.label) {\n this._funnelOuterLabelMark.label.setDepend(component);\n }\n\n if (this._funnelOuterLabelMark?.line) {\n this._funnelOuterLabelMark.line.setDepend(...this._funnelOuterLabelMark.line.getDepend());\n }\n } else if (this._funnelTransformMark && target === this._funnelTransformMark) {\n this._transformLabelMark = labelMark;\n this.setMarkStyle(\n labelMark,\n {\n text: (datum: Datum) => {\n const ratio = field(FUNNEL_REACH_RATIO).bind(this)(datum) as number;\n return `${(ratio * 100).toFixed(1)}%`;\n },\n x: (datum: Datum) => this._computeLabelPosition(datum).x,\n y: (datum: Datum) => this._computeLabelPosition(datum).y,\n maxLineWidth: (datum: Datum) => this._computeLabelLimit(datum, this._spec.transformLabel)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset ?? 'clipIn';\n if (appearPreset === 'clipIn') {\n if (this._rootMark) {\n this._rootMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('cartesianGroupClip')?.(\n {\n direction: () => (this._isHorizontal() ? 'x' : 'y'),\n width: () => {\n const rootMark = this.getRootMark().getProduct();\n if (rootMark) {\n const { x1, x2 } = rootMark.getBounds();\n return Math.max(x1, x2); // rootMark.x === 0, so need to find largest bound x instead of bounds width\n }\n return this.getLayoutRect().width;\n },\n height: () => {\n const rootMark = this.getRootMark().getProduct();\n if (rootMark) {\n const { y1, y2 } = rootMark.getBounds();\n return Math.max(y1, y2);\n }\n return this.getLayoutRect().height;\n },\n orient: () => (this._isReverse() ? 'negative' : 'positive')\n },\n appearPreset\n ),\n userAnimationConfig(SeriesMarkNameEnum.group, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n [this._funnelOuterLabelMark?.label].forEach(m => {\n if (m) {\n m.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')(),\n userAnimationConfig(m.name, this._spec, this._markAttributeContext)\n )\n );\n }\n });\n\n [this._funnelMark, this._funnelTransformMark].forEach(m => {\n if (m) {\n m.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('funnel')({}, appearPreset),\n userAnimationConfig(m.name, this._spec, this._markAttributeContext)\n )\n );\n }\n });\n\n if (this._funnelOuterLabelMark?.line) {\n this._funnelOuterLabelMark.line.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.outerLabelLine, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n // hack group\n initGroups() {\n // do nothing\n }\n\n // handle stack\n getStackGroupFields(): string[] {\n return [];\n }\n\n getStackValueField(): string {\n // hack\n return null;\n }\n\n /** event */\n protected initEvent() {\n super.initEvent();\n // 同步更新转化层数据\n this._viewDataTransform.getDataView()?.target.addListener('change', (d: DataView) => {\n this._viewDataTransform.updateData();\n });\n }\n\n /**\n *\n * P0 ----------- P1 P2 ------ P3\n * \\ / / \\\n * P3 ------ P2 P1 ---------- P0\n *\n * P1 P0\n * |\\ P2 P3 /|\n * | | | |\n * |/ P3 P2 \\|\n * P0 P1\n */\n getPoints(datum: Datum) {\n // 对特殊数据层不进行绘制\n const isTransformLevel = this.isTransformLevel(datum);\n\n const heightHalf = this._getMainAxisLength(isTransformLevel) / 2;\n let upperLeft;\n let lowerLeft;\n if (isTransformLevel) {\n upperLeft =\n this._shape === 'rect'\n ? this._getSecondaryAxisLength(datum[FUNNEL_LAST_VALUE_RATIO]) / 2\n : this._getSecondaryAxisLength(datum[FUNNEL_VALUE_RATIO]) / 2;\n lowerLeft = this._getSecondaryAxisLength(datum[FUNNEL_VALUE_RATIO]) / 2;\n } else {\n upperLeft = this._getSecondaryAxisLength(datum[FUNNEL_VALUE_RATIO]) / 2;\n lowerLeft = this._shape === 'rect' ? upperLeft : this._getSecondaryAxisLength(datum[FUNNEL_NEXT_VALUE_RATIO]) / 2;\n }\n\n const { x, y } = this._getPositionByData(datum);\n\n const points = this._getPolygonPoints([x, y], upperLeft, lowerLeft, upperLeft, lowerLeft, heightHalf);\n\n if (this._funnelAlign !== 'center') {\n this._adjustPoints(points);\n }\n return points;\n }\n\n isTransformLevel(datum: Datum) {\n return !!datum?.[FUNNEL_TRANSFORM_LEVEL];\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n // position\n this._markAttributeContext.valueToPosition = this.valueToPosition.bind(this);\n }\n\n valueToPosition(category: StringOrNumber) {\n const innerDatum = this.getViewData()?.latestData?.find?.((d: Datum) => d[this._categoryField] === category);\n if (!isValid(innerDatum)) {\n return null;\n }\n return this._getPolygonCenter(this.getPoints(innerDatum));\n }\n\n dataToPosition(datum: any) {\n return this.valueToPosition(datum[this._categoryField]);\n }\n\n dataToPositionX(datum: any) {\n return this.dataToPosition(datum).x;\n }\n\n dataToPositionY(datum: any) {\n return this.dataToPosition(datum).y;\n }\n\n dataToPositionZ(datum: any) {\n return 0;\n }\n\n private _getMainAxisLength(isTransform = false) {\n const funnelCount = this.getViewData().latestData.length;\n const viewHeight = this._isHorizontal() ? this.getLayoutRect().width : this.getLayoutRect().height;\n\n const hasTransform = !!this._spec.isTransform;\n const gap = hasTransform ? 0 : this._spec.gap ?? 0;\n const transformCount = hasTransform ? Math.max(0, funnelCount - 1) : 0;\n const funnelHeight = (viewHeight - gap * Math.max(0, funnelCount - 1)) / (funnelCount + 0.5 * transformCount);\n if (isTransform) {\n return hasTransform ? funnelHeight * 0.5 : 0;\n }\n return funnelHeight;\n }\n\n private _getSecondaryAxisLength(ratio: number) {\n const validRatio = Number.isNaN(ratio) || !Number.isFinite(ratio) ? 0 : ratio;\n const maxSize = this._computeMaxSize();\n const minSize = this._computeMinSize();\n return minSize + (maxSize - minSize) * validRatio;\n }\n\n /**\n * 根据数据计算主轴中心点\n * @param datum\n * @returns\n */\n private _getPositionByData(datum: Datum) {\n const index = this.getViewData().latestData?.findIndex(\n (d: Datum) =>\n d[this._categoryField] === datum[this._categoryField] && d[DEFAULT_DATA_KEY] === datum[DEFAULT_DATA_KEY]\n );\n if (!isValid(index) || index < 0) {\n return {};\n }\n const isTransform = this.isTransformLevel(datum);\n const isHorizontal = this._isHorizontal();\n const viewWidth = isHorizontal ? this.getLayoutRect().height : this.getLayoutRect().width;\n const viewHeight = isHorizontal ? this.getLayoutRect().width : this.getLayoutRect().height;\n const centerX = viewWidth / 2;\n\n let centerY = 0;\n const funnelHeight = this._getMainAxisLength();\n const transformHeight = this._getMainAxisLength(true);\n const offset = funnelHeight + transformHeight;\n\n centerY += index * offset;\n centerY += isTransform ? -transformHeight / 2 : funnelHeight / 2;\n if (!this._spec.isTransform && this._spec.gap) {\n centerY += this._spec.gap * index;\n }\n\n this._isReverse() && (centerY = viewHeight - centerY);\n\n return this._isHorizontal() ? { x: centerY, y: centerX } : { x: centerX, y: centerY };\n }\n\n private _getPolygonPoints(\n center: [number, number],\n upperLeft: number,\n lowerLeft: number,\n upperRight: number,\n lowerRight: number,\n heightHalf: number\n ) {\n const x = center[0];\n const y = center[1];\n switch (this._funnelOrient) {\n case 'left':\n return [\n { x: x - heightHalf, y: y + upperLeft },\n { x: x - heightHalf, y: y - upperRight },\n { x: x + heightHalf, y: y - lowerRight },\n { x: x + heightHalf, y: y + lowerLeft }\n ];\n case 'right':\n return [\n { x: x + heightHalf, y: y - upperRight },\n { x: x + heightHalf, y: y + upperRight },\n { x: x - heightHalf, y: y + lowerLeft },\n { x: x - heightHalf, y: y - lowerLeft }\n ];\n case 'bottom':\n return [\n { x: x + upperLeft, y: y + heightHalf },\n { x: x - upperRight, y: y + heightHalf },\n { x: x - lowerRight, y: y - heightHalf },\n { x: x + lowerLeft, y: y - heightHalf }\n ];\n default:\n // top\n return [\n { x: x - upperLeft, y: y - heightHalf },\n { x: x + upperRight, y: y - heightHalf },\n { x: x + lowerRight, y: y + heightHalf },\n { x: x - lowerLeft, y: y + heightHalf }\n ];\n }\n }\n\n /** 计算梯形中位线的中点\n * @param points\n * @returns\n */\n private _getPolygonCenter(points: IPoint[]) {\n if (this._isHorizontal()) {\n const p0_x = (points[0].x + points[3].x) / 2;\n const p0_y = (points[0].y + points[3].y) / 2;\n const p1_x = (points[1].x + points[2].x) / 2;\n const p1_y = (points[1].y + points[2].y) / 2;\n return {\n x: (p0_x + p1_x) / 2,\n y: (p0_y + p1_y) / 2\n };\n }\n\n // 梯形中位线坐标\n const p0_x = (points[0].x + points[3].x) / 2;\n const p0_y = (points[0].y + points[3].y) / 2;\n const p1_x = (points[1].x + points[2].x) / 2;\n const p1_y = (points[1].y + points[2].y) / 2;\n return {\n x: (p0_x + p1_x) / 2,\n y: (p0_y + p1_y) / 2\n };\n }\n\n /**\n * 调整点的偏移量,满足align效果\n * @param points\n * @returns\n */\n private _adjustPoints(points: IPoint[]) {\n let upperOffset;\n let lowerOffset;\n let dirKey;\n if (this._isHorizontal()) {\n dirKey = 'y';\n if (this._funnelOrient === 'left') {\n upperOffset = this._funnelAlign === 'bottom' ? -points[1].y : points[1].y;\n lowerOffset = this._funnelAlign === 'bottom' ? -points[2].y : points[2].y;\n } else {\n upperOffset = this._funnelAlign === 'bottom' ? -points[0].y : points[0].y;\n lowerOffset = this._funnelAlign === 'bottom' ? -points[3].y : points[3].y;\n }\n } else {\n dirKey = 'x';\n if (this._funnelOrient === 'top') {\n upperOffset = this._funnelAlign === 'left' ? points[0].x : -points[0].x;\n lowerOffset = this._funnelAlign === 'left' ? points[3].x : -points[3].x;\n } else {\n upperOffset = this._funnelAlign === 'left' ? points[1].x : -points[1].x;\n lowerOffset = this._funnelAlign === 'left' ? points[2].x : -points[2].x;\n }\n }\n (points[0][dirKey] -= upperOffset), (points[1][dirKey] -= upperOffset);\n (points[2][dirKey] -= lowerOffset), (points[3][dirKey] -= lowerOffset);\n return points;\n }\n\n private _computeLabelPosition(datum: Datum) {\n const points = this.getPoints(datum);\n return this._getPolygonCenter(points);\n }\n\n // label 相关\n private _computeLabelLimit(datum: Datum, labelSpec: IFunnelSeriesSpec['label']) {\n const limit = labelSpec?.limit;\n\n if (isNumber(limit)) {\n return limit;\n }\n\n const points = this.getPoints(datum);\n\n if (limit === 'shapeSize') {\n if (this._isHorizontal()) {\n return Math.abs(points[3].x - points[0].x);\n }\n\n return (Math.abs(points[0].x - points[1].x) + Math.abs(points[2].x - points[3].x)) / 2;\n }\n\n if (this._isHorizontal()) {\n return Math.abs(points[3].x - points[0].x);\n }\n\n // return this._computeMaxSize();\n // FIXME: 待 vrender 修复 maxLineWidth 在 bound 计算的 bug 后可以恢复注释\n return undefined;\n }\n\n private _computeOuterLabelPosition(datum: Datum) {\n let x;\n let y;\n let position: IOrientType = this._spec.outerLabel?.position;\n let textAlign: TextAlign = 'center';\n let textBaseline: TextBaseLine = 'middle';\n if (this._isHorizontal()) {\n position = ['top', 'bottom'].includes(position) ? position : this._funnelAlign === 'bottom' ? 'top' : 'bottom';\n } else {\n position = ['left', 'right'].includes(position) ? position : this._funnelAlign === 'left' ? 'right' : 'left';\n }\n\n if (this._spec.outerLabel?.alignLabel !== false) {\n ({ x, y } = this._getPositionByData(datum));\n if (position === 'left') {\n (x = 0), (textAlign = 'left');\n } else if (position === 'right') {\n (x = this.getLayoutRect().width), (textAlign = 'right');\n } else if (position === 'top') {\n (y = 0), (textBaseline = 'top');\n } else if (position === 'bottom') {\n (y = this.getLayoutRect().height), (textBaseline = 'bottom');\n }\n } else {\n const { x2, y2 } = this._computeOuterLabelLinePosition(datum);\n (x = x2), (y = y2);\n if (position === 'left') {\n (x -= FUNNEL_LABEL_SPACE_WIDTH), (textAlign = 'right');\n } else if (position === 'right') {\n (x += FUNNEL_LABEL_SPACE_WIDTH), (textAlign = 'left');\n } else if (position === 'top') {\n (y -= FUNNEL_LABEL_SPACE_WIDTH), (textBaseline = 'bottom');\n } else if (position === 'bottom') {\n (y += FUNNEL_LABEL_SPACE_WIDTH), (textBaseline = 'top');\n }\n }\n return { x, y, align: textAlign, textBaseline };\n }\n\n private _computeOuterLabelLimit(datum: Datum) {\n if (this._isHorizontal()) {\n return this._getMainAxisLength(this.isTransformLevel(datum));\n }\n\n // 垂直方向上的limit计算逻辑\n const points = this.getPoints(datum);\n const shapeMiddleWidth = (Math.abs(points[0].x - points[1].x) + Math.abs(points[2].x - points[3].x)) / 2;\n const categoryField = this.getCategoryField();\n\n const funnelLabelBounds = this._labelMark\n ?.getComponent()\n ?.getProduct()\n .getGroupGraphicItem()\n .find(({ attribute, type }: { attribute: LabelItem; type: string }) => {\n return type === 'text' && attribute.data?.[categoryField] === datum[categoryField];\n }, true)?.AABBBounds;\n\n const funnelLabelWidth = funnelLabelBounds ? funnelLabelBounds.x2 - funnelLabelBounds.x1 : 0;\n return (\n this.getLayoutRect().width / 2 -\n Math.max(shapeMiddleWidth / 2, funnelLabelWidth / 2) -\n FUNNEL_LABEL_LINE_LENGTH -\n (this._spec.outerLabel?.spaceWidth ?? FUNNEL_LABEL_SPACE_WIDTH) * 2\n );\n }\n\n private _computeOuterLabelLinePosition(datum: Datum) {\n const categoryField = this.getCategoryField();\n const outerLabelMarkBounds = this._funnelOuterLabelMark?.label\n ?.getProduct()\n ?.elements?.find((el: any) => el.data[0]?.[categoryField] === datum[categoryField])\n ?.getBounds();\n\n const labelMarkBounds = this._labelMark\n ?.getComponent()\n ?.getProduct()\n .getGroupGraphicItem()\n .find(({ attribute, type }: { attribute: LabelItem; type: string }) => {\n return type === 'text' && attribute.data?.[categoryField] === datum[categoryField];\n }, true)?.AABBBounds;\n const outerLabelSpec = this._spec.outerLabel ?? {};\n let x1;\n let x2;\n let y1;\n let y2;\n if (this._isHorizontal()) {\n const spaceWidth = outerLabelSpec.spaceWidth ?? FUNNEL_LABEL_SPACE_WIDTH;\n const points = this.getPoints(datum);\n const shapeMiddleHeight = (Math.abs(points[0].y - points[1].y) + Math.abs(points[2].y - points[3].y)) / 2;\n if (this._spec.outerLabel.position === 'top' || this._funnelAlign === 'bottom') {\n y1 = this._getPolygonCenter(points).y - shapeMiddleHeight / 2 - spaceWidth;\n y2 = outerLabelSpec.alignLabel !== false ? outerLabelMarkBounds?.y2 + spaceWidth : y1 - spaceWidth;\n x1 = this._getPolygonCenter(points).x;\n y1 - y2 < FUNNEL_LABEL_LINE_LENGTH && (y2 = y1 - FUNNEL_LABEL_LINE_LENGTH);\n x2 = x1;\n } else {\n y1 = this._getPolygonCenter(points).y + shapeMiddleHeight / 2 + spaceWidth;\n y2 = outerLabelSpec.alignLabel !== false ? outerLabelMarkBounds?.y1 - spaceWidth : y1 + spaceWidth;\n x1 = this._getPolygonCenter(points).x;\n y2 - y1 < FUNNEL_LABEL_LINE_LENGTH && (y2 = y1 + FUNNEL_LABEL_LINE_LENGTH);\n x2 = x1;\n }\n return { x1, x2, y1, y2 };\n }\n const points = this.getPoints(datum);\n const shapeMiddleWidth = (Math.abs(points[0].x - points[1].x) + Math.abs(points[2].x - points[3].x)) / 2;\n const labelWidth = labelMarkBounds?.x2 - labelMarkBounds?.x1 || 0;\n\n const spaceWidth = outerLabelSpec.spaceWidth ?? FUNNEL_LABEL_SPACE_WIDTH;\n if (this._spec.outerLabel.position === 'right' || this._funnelAlign === 'left') {\n x1 = this._getPolygonCenter(points).x + Math.max(labelWidth / 2, shapeMiddleWidth / 2) + spaceWidth;\n x2 = outerLabelSpec.alignLabel !== false ? outerLabelMarkBounds?.x1 - spaceWidth : x1 + spaceWidth;\n y1 = this._getPolygonCenter(points).y;\n x2 - x1 < FUNNEL_LABEL_LINE_LENGTH && (x2 = x1 + FUNNEL_LABEL_LINE_LENGTH);\n y2 = y1;\n } else {\n x1 = this._getPolygonCenter(points).x - Math.max(labelWidth / 2, shapeMiddleWidth / 2) - spaceWidth;\n x2 = outerLabelSpec.alignLabel !== false ? outerLabelMarkBounds?.x2 + spaceWidth : x1 - spaceWidth;\n y1 = this._getPolygonCenter(points).y;\n x1 - x2 < FUNNEL_LABEL_LINE_LENGTH && (x2 = x1 - FUNNEL_LABEL_LINE_LENGTH);\n y2 = y1;\n }\n return { x1, x2, y1, y2 };\n }\n\n protected _computeMaxSize() {\n const size = this._isHorizontal() ? this.getLayoutRect().height : this.getLayoutRect().width;\n const maxSize = this._spec.maxSize ?? FUNNEL_MAX_SIZE;\n return calcLayoutNumber(maxSize, size);\n }\n\n protected _computeMinSize() {\n const size = this._isHorizontal() ? this.getLayoutRect().height : this.getLayoutRect().width;\n const minSize = this._spec.minSize ?? FUNNEL_MIN_SIZE;\n return calcLayoutNumber(minSize, size);\n }\n\n protected _isHorizontal() {\n return this._funnelOrient === 'left' || this._funnelOrient === 'right';\n }\n\n private _isReverse() {\n return this._funnelOrient === 'bottom' || this._funnelOrient === 'right';\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._funnelMark];\n }\n}\n\nexport const registerFunnelSeries = () => {\n registerPolygonMark();\n registerTextMark();\n registerRuleMark();\n Factory.registerSeries(FunnelSeries.type, FunnelSeries);\n Factory.registerAnimation('funnel', (params: any, preset: FunnelAppearPreset) => ({\n appear: preset === 'clipIn' ? undefined : { type: 'fadeIn' },\n ...FadeInOutAnimation\n }));\n registerCartesianGroupClipAnimation();\n registerFadeInOutAnimation();\n};\n","import type { IFunnelSeriesSpec } from '../../series';\nimport type { ISeriesSpec } from '../../typings';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { IFunnelChartSpec } from './interface';\n\nexport class FunnelChartSpecTransformer extends BaseChartSpecTransformer {\n protected needAxes(): boolean {\n return false;\n }\n\n protected _getDefaultSeriesSpec(spec: T): IFunnelSeriesSpec {\n const series: any = {\n ...super._getDefaultSeriesSpec(spec),\n\n categoryField: spec.categoryField,\n valueField: spec.valueField,\n seriesField: spec.seriesField,\n\n funnelAlign: spec.funnelAlign,\n funnelOrient: spec.funnelOrient,\n\n shape: spec.shape,\n funnel: spec.funnel,\n transform: spec.transform,\n outerLabel: spec.outerLabel,\n transformLabel: spec.transformLabel,\n\n isTransform: spec.isTransform,\n maxSize: spec.maxSize,\n minSize: spec.minSize,\n gap: spec.gap,\n isCone: spec.isCone,\n range: spec.range\n };\n const seriesType = this.seriesType;\n if (seriesType) {\n series.type = seriesType;\n series[seriesType] = spec[seriesType];\n }\n\n return series;\n }\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n\n const defaultSeriesSpec = this._getDefaultSeriesSpec(spec);\n if (!spec.series || spec.series.length === 0) {\n spec.series = [defaultSeriesSpec];\n } else {\n spec.series.forEach((s: ISeriesSpec) => {\n if (!this._isValidSeries(s.type)) {\n return;\n }\n Object.keys(defaultSeriesSpec).forEach(k => {\n if (!(k in s)) {\n s[k] = defaultSeriesSpec[k];\n }\n });\n });\n }\n }\n}\n","import { registerFunnelSeries } from './../../series/funnel/funnel';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport { Factory } from '../../core/factory';\nimport type { IFunnelChartSpec } from './interface';\nimport { FunnelChartSpecTransformer } from './funnel-transformer';\nimport { BaseChart } from '../base';\n\nexport class FunnelChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.funnel;\n static readonly seriesType: string = SeriesTypeEnum.funnel;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = FunnelChartSpecTransformer;\n readonly transformerConstructor = FunnelChartSpecTransformer;\n readonly type: string = ChartTypeEnum.funnel;\n readonly seriesType: string = SeriesTypeEnum.funnel;\n}\n\nexport const registerFunnelChart = () => {\n registerFunnelSeries();\n Factory.registerChart(FunnelChart.type, FunnelChart);\n};\n","import { Factory } from './../../core/factory';\n/* eslint-disable no-duplicate-imports */\nimport type { IPyramid3dMarkSpec } from '../../typings/visual';\nimport type { IMarkRaw } from '../interface';\nimport { MarkTypeEnum } from '../interface/type';\nimport { BasePolygonMark } from './base-polygon';\nimport { registerPyramid3dGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarPolygonAnimation } from '../../animation/config';\n\nexport type IPyramid3dMark = IMarkRaw;\n\nexport class Pyramid3dMark extends BasePolygonMark implements IPyramid3dMark {\n static readonly type = MarkTypeEnum.pyramid3d;\n readonly type = Pyramid3dMark.type;\n}\n\nexport const registerPyramid3dMark = () => {\n Factory.registerMark(Pyramid3dMark.type, Pyramid3dMark);\n registerPyramid3dGraphic();\n registerVGrammarPolygonAnimation();\n};\n","import type { AdaptiveSpec } from '../../../typings';\nimport { SeriesMarkNameEnum } from '../../interface';\nimport type { IFunnel3dSeriesSpec, IFunnel3dSeriesTheme } from '../interface';\nimport { FunnelSeriesSpecTransformer } from '../funnel-transformer';\n\nexport class Funnel3dSeriesSpecTransformer<\n T extends IFunnel3dSeriesSpec = IFunnel3dSeriesSpec,\n K extends IFunnel3dSeriesTheme = IFunnel3dSeriesTheme\n> extends FunnelSeriesSpecTransformer, K> {\n protected _transformLabelSpec(spec: AdaptiveSpec): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.funnel3d);\n if (spec.isTransform) {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.transform3d, 'transformLabel' as any);\n }\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport type { Maybe } from '@visactor/vutils';\nimport { AttributeLevel } from '../../../constant';\nimport { MarkTypeEnum } from '../../../mark/interface/type';\nimport type { IPyramid3dMark } from '../../../mark/polygon/pyramid-3d';\nimport type { IRuleMark } from '../../../mark/rule';\nimport type { ITextMark } from '../../../mark/text';\nimport type { SeriesMarkMap } from '../../interface';\nimport { SeriesTypeEnum, SeriesMarkNameEnum } from '../../interface/type';\nimport { FunnelSeries } from '../funnel';\nimport type { IFunnel3dSeriesSpec, IFunnel3dSeriesTheme } from '../interface';\nimport { Pyramid3dMark, registerPyramid3dMark } from '../../../mark/polygon/pyramid-3d';\nimport { TextMark, registerTextMark } from '../../../mark/text';\nimport { RuleMark, registerRuleMark } from '../../../mark/rule';\nimport type { AdaptiveSpec } from '../../../typings';\nimport { funnel3dSeriesMark } from '../constant';\nimport type { ILabelMark } from '../../../mark/label';\nimport { Factory } from '../../../core/factory';\nimport { Funnel3dSeriesSpecTransformer } from './funnel-3d-transformer';\n\nexport class Funnel3dSeries extends FunnelSeries<\n AdaptiveSpec\n> {\n static readonly type: string = SeriesTypeEnum.funnel3d;\n type = SeriesTypeEnum.funnel3d;\n protected _funnelMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.funnel3d;\n protected _funnelMarkType: MarkTypeEnum = MarkTypeEnum.pyramid3d;\n protected _transformMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.transform3d;\n protected _transformMarkType: MarkTypeEnum = MarkTypeEnum.pyramid3d;\n\n static readonly mark: SeriesMarkMap = funnel3dSeriesMark;\n static readonly transformerConstructor = Funnel3dSeriesSpecTransformer as any;\n readonly transformerConstructor = Funnel3dSeriesSpecTransformer as any;\n\n initMark() {\n this._funnelMark = this._createMark(\n {\n ...Funnel3dSeries.mark.funnel3d,\n name: this._funnelMarkName,\n type: this._funnelMarkType\n },\n {\n themeSpec: this._theme?.funnel3d,\n key: this._seriesField,\n isSeriesMark: true,\n support3d: true\n }\n ) as IPyramid3dMark;\n\n if (this._spec.isTransform) {\n this._funnelTransformMark = this._createMark(\n {\n ...Funnel3dSeries.mark.transform3d,\n name: this._transformMarkName,\n type: this._transformMarkType\n },\n {\n themeSpec: this._theme?.transform3d,\n key: this._seriesField,\n skipBeforeLayouted: false,\n dataView: this._viewDataTransform.getDataView(),\n dataProductId: this._viewDataTransform.getProductId()\n }\n );\n }\n\n if (this._spec?.outerLabel?.visible) {\n const { line } = this._spec.outerLabel ?? {};\n const { line: lineTheme } = this._theme?.outerLabel ?? {};\n\n this._funnelOuterLabelMark.label = this._createMark(Funnel3dSeries.mark.outerLabel, {\n themeSpec: this._theme?.outerLabel,\n key: this._seriesField,\n markSpec: this._spec.outerLabel\n }) as ITextMark;\n\n this._funnelOuterLabelMark.line = this._createMark(Funnel3dSeries.mark.outerLabelLine, {\n themeSpec: lineTheme,\n key: this._seriesField,\n markSpec: line,\n depend: [this._funnelOuterLabelMark.label]\n }) as IRuleMark;\n }\n }\n\n initMarkStyle() {\n super.initMarkStyle();\n const funnelMark = this._funnelMark;\n if (funnelMark) {\n this.setMarkStyle(\n funnelMark,\n {\n z: _ => {\n if (this._isHorizontal()) {\n return 0;\n }\n const points = this.getPoints(_);\n const width = Math.max(Math.abs(points[0].x - points[1].x), Math.abs(points[2].x - points[3].x));\n return (this._computeMaxSize() - width) / 2;\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initLabelMarkStyle(labelMark?: ILabelMark) {\n super.initLabelMarkStyle(labelMark);\n\n this.setMarkStyle(\n labelMark,\n {\n z: _ => {\n if (this._isHorizontal()) {\n return 0;\n }\n const points = this.getPoints(_);\n const width = Math.max(Math.abs(points[0].x - points[1].x), Math.abs(points[2].x - points[3].x));\n return (this._computeMaxSize() - width) / 2;\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n\n this._labelMark = labelMark;\n\n if (this._funnelOuterLabelMark?.label) {\n this._funnelOuterLabelMark.label.setDepend(labelMark.getComponent());\n }\n\n if (this._funnelOuterLabelMark?.line) {\n this._funnelOuterLabelMark.line.setDepend(...this._funnelOuterLabelMark.line.getDepend());\n }\n }\n}\n\nexport const registerFunnel3dSeries = () => {\n registerPyramid3dMark();\n registerTextMark();\n registerRuleMark();\n Factory.registerSeries(Funnel3dSeries.type, Funnel3dSeries);\n};\n","import { SeriesTypeEnum } from '../../../series/interface/type';\nimport { ChartTypeEnum } from '../../interface/type';\nimport { registerFunnel3dSeries } from '../../../series/funnel/3d/funnel-3d';\nimport { Factory } from '../../../core/factory';\nimport type { IFunnel3dChartSpec } from '../interface';\nimport type { AdaptiveSpec } from '../../../typings';\nimport { FunnelChartSpecTransformer } from '../funnel-transformer';\nimport { BaseChart } from '../../base';\n\nexport class Funnel3dChart extends BaseChart<\n AdaptiveSpec\n> {\n static readonly type: string = ChartTypeEnum.funnel3d;\n static readonly seriesType: string = SeriesTypeEnum.funnel3d;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = FunnelChartSpecTransformer;\n readonly transformerConstructor = FunnelChartSpecTransformer;\n readonly type: string = ChartTypeEnum.funnel3d;\n readonly seriesType: string = SeriesTypeEnum.funnel3d;\n}\n\nexport const registerFunnel3dChart = () => {\n registerFunnel3dSeries();\n Factory.registerChart(Funnel3dChart.type, Funnel3dChart);\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport type { DirectionType } from '../../../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../../typings/space';\nimport { Factory } from '../../../core/factory';\n\nexport interface ILinearProgressAnimationParams {\n direction: DirectionType;\n}\n\nexport type LinearProgressAppearPreset = 'grow' | 'fadeIn';\n\nfunction LinearProgressGrowOption(params: ILinearProgressAnimationParams) {\n return () => {\n if (params.direction === 'vertical') {\n return {\n orient: 'negative'\n };\n }\n return {\n orient: 'positive'\n };\n };\n}\n\nconst Appear_Grow = (params: ILinearProgressAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growWidthIn' : 'growHeightIn',\n options: LinearProgressGrowOption(params)\n };\n};\n\nexport const linearProgressDisappear = (params: ILinearProgressAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growWidthOut' : 'growHeightOut',\n options: LinearProgressGrowOption(params)\n };\n};\n\nexport const Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nexport function linearProgressPresetAnimation(\n params: ILinearProgressAnimationParams,\n preset: LinearProgressAppearPreset | boolean\n) {\n if (preset === false) {\n return {};\n }\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n default:\n return Appear_Grow(params);\n }\n}\n\nexport const registerLinearProgressAnimation = () => {\n Factory.registerAnimation(\n 'linearProgress',\n (params: ILinearProgressAnimationParams, preset: LinearProgressAppearPreset) => {\n return {\n appear: linearProgressPresetAnimation(params, preset),\n enter: { type: 'grow' },\n disappear: linearProgressDisappear(params)\n };\n }\n );\n};\n","import { BaseSeriesTooltipHelper } from '../../base/tooltip-helper';\nimport type { ISeriesTooltipHelper } from '../../interface';\nimport type { ITooltipPattern, TooltipActiveType } from '../../../typings';\nimport type { IDimensionInfo } from '../../../event/events/dimension/interface';\n\nexport class LinearProgressSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n /** 获取默认的tooltip pattern */\n getDefaultTooltipPattern(activeType: TooltipActiveType, dimensionInfo?: IDimensionInfo[]): ITooltipPattern | null {\n const result = super.getDefaultTooltipPattern(activeType, dimensionInfo);\n if (activeType === 'mark') {\n return result;\n }\n if (activeType === 'dimension') {\n result.visible = false;\n return result;\n }\n return null;\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport { CartesianSeries } from '../../cartesian/cartesian';\nimport type { SeriesMarkMap } from '../../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../../interface/type';\nimport type { IRectMark } from '../../../mark/rect';\nimport type { IGroupMark } from '../../../mark/group';\nimport { valueInScaleRange } from '../../../util/scale';\nimport { AttributeLevel } from '../../../constant';\nimport type { Datum, Maybe } from '../../../typings';\nimport { animationConfig, userAnimationConfig } from '../../../animation/utils';\nimport {\n registerLinearProgressAnimation,\n type ILinearProgressAnimationParams,\n type LinearProgressAppearPreset\n} from './animation';\nimport type { ILinearProgressSeriesSpec, ILinearProgressSeriesTheme } from './interface';\nimport { LinearProgressSeriesTooltipHelper } from './tooltip-helper';\nimport type { IStateAnimateSpec } from '../../../animation/spec';\nimport { RectMark, registerRectMark } from '../../../mark/rect';\nimport { createRect } from '@visactor/vrender-core';\nimport { linearProgressSeriesMark } from './constant';\nimport { Factory } from '../../../core/factory';\nimport { registerFadeInOutAnimation } from '../../../animation/config';\nimport type { IMark } from '../../../mark/interface';\n\nexport class LinearProgressSeries<\n T extends ILinearProgressSeriesSpec = ILinearProgressSeriesSpec\n> extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.linearProgress;\n type = SeriesTypeEnum.linearProgress;\n\n static readonly mark: SeriesMarkMap = linearProgressSeriesMark;\n\n private _progressMark: IRectMark | null = null;\n private _trackMark: IRectMark | null = null;\n private _progressGroupMark: IGroupMark | null = null;\n\n /**\n * 为了解决在圆角情况下,在数值较小时,rect绘图效果不好的问题\n * 1. trackMark的所有样式设置在groupMark上,定位也依靠这个groupMark\n * 2. progressMark长度固定为整个进度条长度,通过x的偏移体现当前进度\n *\n * 为了解决在配置tooltip时,trackMark设置为GroupMark无法绑定数据的问题,\n * 1. 原本的设置为groupMark的trackMark更名为GroupMark。用来保证在clip效果下progressMark小数据值的绘图效果。\n * 1. 增加一层设置为rectMark的trackMark,形状大小与GroupMark相同\n *\n * 为了解决成组\n * 给groupMark的path字段赋值为一个rect数组 也就是一个groupMark具有多个以背景条为轮廓的rect的path\n * trackMark与progressMark使用绝对定位\n */\n initMark(): void {\n this._initProgressGroupMark();\n this._initTrackMark();\n this._initProgressMark();\n }\n\n initMarkStyle(): void {\n this._initProgressGroupMarkStyle();\n this._initTrackMarkStyle();\n this._initProgressMarkStyle();\n }\n\n private _initProgressMark() {\n this._progressMark = this._createMark(LinearProgressSeries.mark.progress, {\n isSeriesMark: true,\n parent: this._progressGroupMark,\n customShape: this._spec.progress?.customShape\n }) as IRectMark;\n return this._progressMark;\n }\n\n private _initProgressMarkStyle() {\n const progressMark = this._progressMark;\n if (progressMark) {\n if (this._spec.direction === 'vertical') {\n const leftPadding = this._spec.progress?.leftPadding ?? 0;\n const rightPadding = this._spec.progress?.rightPadding ?? 0;\n\n this.setMarkStyle(\n progressMark,\n {\n x: (datum: Datum) => {\n return (\n valueInScaleRange(this.dataToPositionX(datum), this._xAxisHelper?.getScale?.(0)) -\n this._spec.bandWidth / 2 +\n leftPadding\n );\n },\n y: (datum: Datum) => valueInScaleRange(this.dataToPositionY(datum), this._yAxisHelper?.getScale?.(0)),\n height: () => this._yAxisHelper?.dataToPosition([0], { bandPosition: this._bandPosition }),\n width: this._spec.bandWidth - leftPadding - rightPadding,\n cornerRadius: this._spec.cornerRadius,\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n const topPadding = this._spec.progress?.topPadding ?? 0;\n const bottomPadding = this._spec.progress?.bottomPadding ?? 0;\n\n this.setMarkStyle(\n progressMark,\n {\n x: (datum: Datum) =>\n valueInScaleRange(this.dataToPositionX(datum), this._xAxisHelper?.getScale?.(0)) -\n this._xAxisHelper.dataToPosition([1], { bandPosition: this._bandPosition }),\n y: (datum: Datum) => {\n return (\n valueInScaleRange(this.dataToPositionY(datum), this._yAxisHelper?.getScale?.(0)) -\n this._spec.bandWidth / 2 +\n topPadding\n );\n },\n height: this._spec.bandWidth - topPadding - bottomPadding,\n width: () => this._xAxisHelper?.dataToPosition([1], { bandPosition: this._bandPosition }),\n cornerRadius: this._spec.cornerRadius,\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n this._trigger.registerMark(progressMark);\n }\n }\n\n private _initTrackMark() {\n this._trackMark = this._createMark(LinearProgressSeries.mark.track, {\n parent: this._progressGroupMark,\n customShape: this._spec.track?.customShape\n }) as IRectMark;\n return this._trackMark;\n }\n\n private _initTrackMarkStyle() {\n const trackMark = this._trackMark;\n if (trackMark) {\n if (this._spec.direction === 'vertical') {\n this.setMarkStyle(\n trackMark,\n {\n x: (datum: any) => {\n return (\n valueInScaleRange(this.dataToPositionX(datum), this._xAxisHelper?.getScale?.(0)) -\n this._spec.bandWidth / 2\n );\n },\n y: 0,\n width: this._spec.bandWidth,\n height: () => this._scaleY.range()[0],\n cornerRadius: this._spec.cornerRadius\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n trackMark,\n {\n x: 0,\n y: (datum: any) => {\n return (\n valueInScaleRange(this.dataToPositionY(datum), this._yAxisHelper?.getScale?.(0)) -\n this._spec.bandWidth / 2\n );\n },\n height: this._spec.bandWidth,\n width: () => this._scaleX.range()[1],\n cornerRadius: this._spec.cornerRadius\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n this._trigger.registerMark(trackMark);\n }\n }\n\n private _initProgressGroupMark() {\n // FIXME: disable group mark layout to prevent reevaluate after layout end\n this._progressGroupMark = this._createMark(LinearProgressSeries.mark.group, {\n skipBeforeLayouted: false\n }) as IGroupMark;\n return this._progressGroupMark;\n }\n\n private _initProgressGroupMarkStyle() {\n const groupMark = this._progressGroupMark;\n groupMark.setZIndex(this.layoutZIndex);\n groupMark.created();\n\n this.setMarkStyle(\n groupMark,\n {\n clip: true,\n x: 0,\n y: 0,\n path: () => {\n const rectPaths: any[] = [];\n this._rawData?.rawData.forEach((datum: any, index: number) => {\n if (this._spec.direction === 'vertical') {\n const x =\n valueInScaleRange(this.dataToPositionX(datum), this._xAxisHelper?.getScale?.(0)) -\n this._spec.bandWidth / 2;\n const height = this._scaleY.range()[0];\n\n rectPaths.push(\n createRect({\n x: x,\n y: 0,\n height: height,\n width: this._spec.bandWidth,\n cornerRadius: this._spec.cornerRadius,\n fill: true\n })\n );\n } else {\n const y =\n valueInScaleRange(this.dataToPositionY(datum), this._yAxisHelper?.getScale?.(0)) -\n this._spec.bandWidth / 2;\n const width = this._scaleX.range()[1];\n\n rectPaths.push(\n createRect({\n x: 0,\n y: y,\n height: this._spec.bandWidth,\n width: width,\n cornerRadius: this._spec.cornerRadius,\n fill: true\n })\n );\n }\n });\n return rectPaths;\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n this._progressGroupMark.setInteractive(false);\n }\n\n initAnimation() {\n const animationParams: ILinearProgressAnimationParams = {\n direction: this.direction\n };\n\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n\n this._progressMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('linearProgress')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.progress, this._spec, this._markAttributeContext)\n )\n );\n\n this._trackMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.track, this._spec, this._markAttributeContext)\n )\n );\n }\n\n protected initTooltip() {\n this._tooltipHelper = new LinearProgressSeriesTooltipHelper(this);\n this._progressMark && this._tooltipHelper.activeTriggerSet.mark.add(this._progressMark);\n this._trackMark && this._tooltipHelper.activeTriggerSet.mark.add(this._trackMark);\n }\n\n getActiveMarks(): IMark[] {\n return [this._progressMark];\n }\n}\n\nexport const registerLinearProgressSeries = () => {\n registerRectMark();\n registerLinearProgressAnimation();\n registerFadeInOutAnimation();\n Factory.registerSeries(LinearProgressSeries.type, LinearProgressSeries);\n};\n","import { isNil } from '@visactor/vutils';\nimport type { ICartesianAxisSpec, ICartesianBandAxisSpec, ICartesianLinearAxisSpec } from '../../../component';\nimport { CartesianChartSpecTransformer } from '../../cartesian';\nimport type { ILinearProgressChartSpec } from './interface';\nimport { getLinearAxisSpecDomain } from '../../../component/axis/util';\n\nexport class LinearProgressChartSpecTransformer<\n T extends ILinearProgressChartSpec = ILinearProgressChartSpec\n> extends CartesianChartSpecTransformer {\n protected needAxes(): boolean {\n return false;\n }\n\n protected _getDefaultSeriesSpec(spec: T): ILinearProgressChartSpec {\n const series = super._getDefaultSeriesSpec(spec);\n return {\n ...series,\n direction: spec.direction ?? 'horizontal',\n\n cornerRadius: spec.cornerRadius ?? 0,\n bandWidth: spec.bandWidth,\n\n progress: spec.progress,\n track: spec.track\n };\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n\n if (!spec.axes) {\n spec.axes = [];\n }\n\n if (spec.direction === 'vertical') {\n let leftAxis: ICartesianLinearAxisSpec = null;\n let bottomAxis: ICartesianBandAxisSpec = null;\n (spec.axes ?? []).forEach((axis: ICartesianAxisSpec) => {\n const { orient } = axis;\n if (orient === 'left') {\n leftAxis = axis;\n }\n if (orient === 'bottom') {\n bottomAxis = axis;\n }\n });\n if (!leftAxis) {\n leftAxis = {\n orient: 'left',\n visible: false\n };\n spec.axes.push(leftAxis);\n }\n if (!bottomAxis) {\n bottomAxis = {\n orient: 'bottom',\n visible: false\n };\n spec.axes.push(bottomAxis);\n }\n\n // 自动补全轴类型类型和range\n if (isNil(bottomAxis.type)) {\n bottomAxis.type = 'band';\n }\n if (isNil(leftAxis.type)) {\n leftAxis.type = 'linear';\n }\n const domain = getLinearAxisSpecDomain(leftAxis, { min: 0, max: 1 });\n if (isNil(leftAxis.min)) {\n leftAxis.min = domain.min;\n }\n if (isNil(leftAxis.max)) {\n leftAxis.max = domain.max;\n }\n } else {\n let leftAxis: ICartesianBandAxisSpec = null;\n let bottomAxis: ICartesianLinearAxisSpec = null;\n (spec.axes ?? []).forEach((axis: ICartesianAxisSpec) => {\n const { orient } = axis;\n if (orient === 'left') {\n leftAxis = axis;\n }\n if (orient === 'bottom') {\n bottomAxis = axis;\n }\n });\n if (!leftAxis) {\n leftAxis = {\n type: 'band',\n orient: 'left',\n visible: false\n };\n spec.axes.push(leftAxis);\n }\n if (!bottomAxis) {\n bottomAxis = {\n orient: 'bottom',\n visible: false\n };\n spec.axes.push(bottomAxis);\n }\n\n // 自动补全轴类型类型和range\n if (isNil(bottomAxis.type)) {\n bottomAxis.type = 'linear';\n }\n if (isNil(leftAxis.type)) {\n leftAxis.type = 'band';\n }\n const domain = getLinearAxisSpecDomain(bottomAxis, { min: 0, max: 1 });\n if (isNil(bottomAxis.min)) {\n bottomAxis.min = domain.min;\n }\n if (isNil(bottomAxis.max)) {\n bottomAxis.max = domain.max;\n }\n }\n }\n}\n","import { ChartTypeEnum } from '../../interface';\nimport { SeriesTypeEnum } from '../../../series/interface/type';\nimport type { ILinearProgressChartSpec } from './interface';\nimport { registerLinearProgressSeries } from '../../../series/progress/linear';\nimport { Factory } from '../../../core/factory';\nimport { LinearProgressChartSpecTransformer } from './linear-progress-transformer';\nimport { BaseChart } from '../../base';\n\nexport class LinearProgressChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.linearProgress;\n static readonly seriesType: string = SeriesTypeEnum.linearProgress;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = LinearProgressChartSpecTransformer;\n readonly transformerConstructor = LinearProgressChartSpecTransformer;\n readonly type: string = ChartTypeEnum.linearProgress;\n readonly seriesType: string = SeriesTypeEnum.linearProgress;\n protected _canStack: boolean = true;\n}\n\nexport const registerLinearProgressChart = () => {\n registerLinearProgressSeries();\n Factory.registerChart(LinearProgressChart.type, LinearProgressChart);\n};\n","import type { ITextMark } from '../../mark/text';\nimport type { DirectionType } from '../../typings/space';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../typings/space';\nimport { AttributeLevel } from '../../constant';\nimport type { ISeries } from '../interface';\n\n// 直角坐标系下 固定点位的标签\n// only used in rangeColumn\nexport function setRectLabelPos(\n component: ISeries,\n labelMark: ITextMark,\n position: string,\n offset: number,\n x: (datum: any) => number,\n x1: (datum: any) => number,\n y: (datum: any) => number,\n y1: (datum: any) => number,\n direction: () => DirectionType\n) {\n component.setMarkStyle(labelMark, {\n textAlign: (datum: any) => {\n const d = direction();\n if (d === Direction.vertical) {\n return 'center';\n }\n const _x = x(datum);\n const _x1 = x1(datum);\n // d = h\n if (position === 'middle') {\n return 'center';\n }\n // 柱子 从左到右\n if (_x >= _x1) {\n if (position === 'start') {\n return 'left';\n }\n if (position === 'end') {\n return 'right';\n }\n if (position === 'outside') {\n return 'left';\n }\n }\n // 柱子 从右到左\n else {\n if (position === 'start') {\n return 'right';\n }\n if (position === 'end') {\n return 'left';\n }\n if (position === 'outside') {\n return 'right';\n }\n }\n return 'center';\n },\n textBaseline: (datum: any) => {\n const d = direction();\n if (d === Direction.horizontal) {\n return 'middle';\n }\n // d = v\n const _y = y(datum);\n const _y1 = y1(datum);\n if (position === 'middle') {\n return 'middle';\n }\n // 柱子 从下到上\n if (_y1 >= _y) {\n if (position === 'start') {\n return 'bottom';\n }\n if (position === 'end') {\n return 'top';\n }\n if (position === 'outside') {\n return 'bottom';\n }\n }\n // 柱子 从上到下\n else {\n if (position === 'start') {\n return 'top';\n }\n if (position === 'end') {\n return 'bottom';\n }\n if (position === 'outside') {\n return 'top';\n }\n }\n return 'middle';\n }\n });\n component.setMarkStyle(\n labelMark,\n {\n x: (datum: any) => {\n const d = direction();\n const _x = x(datum);\n const _x1 = x1(datum);\n if (d === Direction.vertical) {\n return (_x + _x1) / 2;\n }\n // d = h\n if (position === 'middle') {\n return (_x + _x1) / 2;\n }\n // 柱子 从左到右\n if (_x >= _x1) {\n if (position === 'start') {\n return _x1 + offset;\n }\n if (position === 'end') {\n return _x - offset;\n }\n if (position === 'outside') {\n return _x + offset;\n }\n }\n // 柱子 从右到左\n else {\n if (position === 'start') {\n return _x1 - offset;\n }\n if (position === 'end') {\n return _x + offset;\n }\n if (position === 'outside') {\n return _x - offset;\n }\n }\n return (_x + _x1) / 2;\n },\n y: (datum: any) => {\n const d = direction();\n const _y = y(datum);\n const _y1 = y1(datum);\n if (d === Direction.horizontal) {\n return (_y + _y1) / 2;\n }\n // d = v\n if (position === 'middle') {\n return (_y + _y1) / 2;\n }\n // 柱子 从下到上\n if (_y >= _y1) {\n if (position === 'start') {\n return _y1 + offset;\n }\n if (position === 'end') {\n return _y - offset;\n }\n if (position === 'outside') {\n return _y + offset;\n }\n }\n // 柱子 从上到下\n else {\n if (position === 'start') {\n return _y1 - offset;\n }\n if (position === 'end') {\n return _y + offset;\n }\n if (position === 'outside') {\n return _y - offset;\n }\n }\n return (_y + _y1) / 2;\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n}\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { Datum, ITooltipPattern, TooltipActiveType } from '../../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../typings/space';\n\nexport class RangeColumnSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n /** 获取默认的tooltip pattern */\n getDefaultTooltipPattern(activeType: TooltipActiveType): ITooltipPattern | null {\n return {\n visible: true,\n activeType,\n title: {\n key: undefined,\n value: this.titleValueCallback,\n hasShape: false\n },\n content: [\n {\n key: this.contentKeyCallback,\n value: (datum: Datum) =>\n this.series.getSpec().direction === Direction.horizontal\n ? datum[this.series.getSpec().xField[0]] + '-' + datum[this.series.getSpec().xField[1]]\n : datum[this.series.getSpec().yField[0]] + '-' + datum[this.series.getSpec().yField[1]],\n hasShape: true,\n shapeType: this.contentShapeTypeCallback,\n shapeColor: this.contentShapeColorCallback,\n shapeStroke: this.contentShapeColorCallback,\n shapeHollow: false\n }\n ]\n };\n }\n}\n","import { Factory } from '../../core/factory';\nimport type { DirectionType } from '../../typings';\nimport type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\n\nexport interface IRangeColumnAnimationParams {\n direction: DirectionType;\n}\n\nexport type RangeColumnAppearPreset = 'fadeIn' | 'grow';\n\nexport const rangeColumnGrowIn = (params: IRangeColumnAnimationParams): IAnimationTypeConfig => {\n return {\n type: 'growCenterIn',\n options: {\n direction: params.direction === 'horizontal' ? 'x' : 'y'\n }\n };\n};\n\nconst Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nexport const rangeColumnGrowOut = (params: IRangeColumnAnimationParams): IAnimationTypeConfig => {\n return {\n type: 'growCenterOut',\n options: {\n direction: params.direction === 'horizontal' ? 'x' : 'y'\n }\n };\n};\n\nexport function rangeColumnPresetAnimation(\n params: IRangeColumnAnimationParams,\n preset: RangeColumnAppearPreset\n): IAnimationTypeConfig {\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n case 'grow':\n default:\n return rangeColumnGrowIn(params);\n }\n}\n\nexport const registerRangeColumnAnimation = () => {\n Factory.registerAnimation('rangeColumn', (params: IRangeColumnAnimationParams, preset: RangeColumnAppearPreset) => ({\n appear: rangeColumnPresetAnimation(params, preset),\n enter: rangeColumnGrowIn(params),\n exit: rangeColumnGrowOut(params),\n disappear: rangeColumnGrowOut(params)\n }));\n};\n","import { BarSeriesSpecTransformer } from '../bar/bar-transformer';\nimport { SeriesMarkNameEnum } from '../interface';\nimport { PositionEnum, type IRangeColumnSeriesSpec, type IRangeColumnSeriesTheme } from './interface';\n\nexport class RangeColumnSeriesSpecTransformer<\n T extends IRangeColumnSeriesSpec = IRangeColumnSeriesSpec,\n K extends IRangeColumnSeriesTheme = IRangeColumnSeriesTheme\n> extends BarSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n const labelPosition = spec.label?.position;\n if (labelPosition !== PositionEnum.bothEnd) {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.bar);\n }\n }\n}\n","import { BarSeries } from '../bar/bar';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type { SeriesMarkMap } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { Direction } from '../../typings/space';\nimport { type IRectMark, registerRectMark } from '../../mark/rect';\nimport { type ITextMark, registerTextMark } from '../../mark/text';\nimport { setRectLabelPos } from '../util/label-mark';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport { RangeColumnSeriesTooltipHelper } from './tooltip-helper';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport type { Datum } from '../../typings';\nimport type { IRangeColumnSeriesSpec } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { PositionEnum } from './interface';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerRangeColumnAnimation, type RangeColumnAppearPreset } from './animation';\nimport { rangeColumnSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { RangeColumnSeriesSpecTransformer } from './range-column-transformer';\n\nexport const DefaultBandWidth = 6; // 默认的bandWidth,避免连续轴没有bandWidth\n\nexport class RangeColumnSeries extends BarSeries {\n static readonly type: string = SeriesTypeEnum.rangeColumn;\n type = SeriesTypeEnum.rangeColumn;\n protected _barMarkType: MarkTypeEnum = MarkTypeEnum.rect;\n protected _barName: string = SeriesTypeEnum.bar;\n\n protected declare _spec: T;\n\n static readonly mark: SeriesMarkMap = rangeColumnSeriesMark;\n static readonly transformerConstructor = RangeColumnSeriesSpecTransformer as any;\n readonly transformerConstructor = RangeColumnSeriesSpecTransformer as any;\n\n protected _stack: boolean = false;\n private _minLabelMark?: ITextMark;\n private _maxLabelMark?: ITextMark;\n private _labelMark?: ITextMark;\n\n initMark(): void {\n this._initBarBackgroundMark();\n\n const labelPosition = this._spec.label?.position;\n this._barMark = this._createMark(RangeColumnSeries.mark.bar, {\n morph: shouldMarkDoMorph(this._spec, RangeColumnSeries.mark.bar.name),\n defaultMorphElementKey: this.getDimensionField()[0],\n groupKey: this._seriesField,\n isSeriesMark: true,\n customShape: this._spec.bar?.customShape\n }) as IRectMark;\n\n if (this._spec.label?.visible !== false && labelPosition === PositionEnum.bothEnd) {\n if (this._spec.label?.minLabel?.visible !== false) {\n this._minLabelMark = this._createMark(RangeColumnSeries.mark.minLabel, {\n markSpec: this._spec.label?.minLabel\n }) as ITextMark;\n }\n if (this._spec.label?.maxLabel?.visible !== false) {\n this._maxLabelMark = this._createMark(RangeColumnSeries.mark.maxLabel, {\n markSpec: this._spec.label?.maxLabel\n }) as ITextMark;\n }\n }\n }\n\n initMarkStyle(): void {\n super.initMarkStyle();\n\n const minLabelMark = this._minLabelMark;\n const minLabelSpec = this._spec.label?.minLabel;\n if (minLabelMark) {\n this.setMarkStyle(minLabelMark, {\n fill: minLabelSpec?.style?.fill ?? this.getColorAttribute(),\n text: (datum: Datum) => {\n const min =\n this._spec.direction === Direction.horizontal ? datum[this._spec.xField[0]] : datum[this._spec.yField[0]];\n if (minLabelSpec?.formatMethod) {\n return minLabelSpec.formatMethod(min, datum);\n }\n return min;\n }\n });\n const position = minLabelSpec?.position ?? 'end';\n const offset = minLabelSpec?.offset ?? (this._direction === 'vertical' ? -20 : -25);\n setRectLabelPos(\n this,\n minLabelMark,\n position,\n offset,\n (datum: Datum) => this._barMark.getAttribute('x', datum) as number,\n (datum: Datum) => {\n return this._direction === 'vertical'\n ? (this._barMark.getAttribute('x', datum) as number) +\n (this._barMark.getAttribute('width', datum) as number)\n : (this._barMark.getAttribute('x1', datum) as number);\n },\n (datum: Datum) => this._barMark.getAttribute('y', datum) as number,\n (datum: Datum) => {\n return this._direction === 'vertical'\n ? (this._barMark.getAttribute('y1', datum) as number)\n : (this._barMark.getAttribute('y', datum) as number) +\n (this._barMark.getAttribute('height', datum) as number);\n },\n () => this._direction\n );\n }\n\n const maxLabelMark = this._maxLabelMark;\n const maxLabelSpec = this._spec.label?.maxLabel;\n if (maxLabelMark) {\n this.setMarkStyle(maxLabelMark, {\n fill: maxLabelSpec?.style?.fill ?? this.getColorAttribute(),\n text: (datum: Datum) => {\n const max =\n this._spec.direction === Direction.horizontal ? datum[this._spec.xField[1]] : datum[this._spec.yField[1]];\n if (maxLabelSpec?.formatMethod) {\n return maxLabelSpec.formatMethod(max, datum);\n }\n return max;\n }\n });\n const position = maxLabelSpec?.position ?? 'start';\n const offset = maxLabelSpec?.offset ?? (this._direction === 'vertical' ? -20 : -25);\n setRectLabelPos(\n this,\n maxLabelMark,\n position,\n offset,\n (datum: Datum) => this._barMark.getAttribute('x', datum) as number,\n (datum: Datum) => {\n return this._direction === 'vertical'\n ? (this._barMark.getAttribute('x', datum) as number) +\n (this._barMark.getAttribute('width', datum) as number)\n : (this._barMark.getAttribute('x1', datum) as number);\n },\n (datum: Datum) => this._barMark.getAttribute('y', datum) as number,\n (datum: Datum) => {\n return this._direction === 'vertical'\n ? (this._barMark.getAttribute('y1', datum) as number)\n : (this._barMark.getAttribute('y', datum) as number) +\n (this._barMark.getAttribute('height', datum) as number);\n },\n () => this._direction\n );\n }\n }\n\n initLabelMarkStyle(labelMark: ITextMark): void {\n if (!labelMark) {\n return;\n }\n this.setMarkStyle(labelMark, {\n text: (datum: Datum) => {\n let min;\n let max;\n if (this._spec.direction === Direction.horizontal) {\n min = datum[this._spec.xField[0]];\n max = datum[this._spec.xField[1]];\n } else {\n min = datum[this._spec.yField[0]];\n max = datum[this._spec.yField[1]];\n }\n return min + '-' + max;\n },\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n });\n this._labelMark = labelMark;\n }\n\n protected _dataToPosX(datum: Datum) {\n return this._xAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this._spec.xField[0]), {\n bandPosition: this._bandPosition\n });\n }\n\n protected _dataToPosX1(datum: Datum) {\n return this._xAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this._spec.xField[1]), {\n bandPosition: this._bandPosition\n });\n }\n\n protected _dataToPosY(datum: Datum) {\n return this._yAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this._spec.yField[0]), {\n bandPosition: this._bandPosition\n });\n }\n\n protected _dataToPosY1(datum: Datum) {\n return this._yAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this._spec.yField[1]), {\n bandPosition: this._bandPosition\n });\n }\n\n initAnimation() {\n const animationParams = getGroupAnimationParams(this);\n\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n this._barMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('rangeColumn')?.({ direction: this.direction }, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.bar, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n\n if (this._minLabelMark) {\n this._minLabelMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.label, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n }\n\n if (this._maxLabelMark) {\n this._maxLabelMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.label, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n }\n }\n\n protected initTooltip() {\n this._tooltipHelper = new RangeColumnSeriesTooltipHelper(this);\n this._barMark && this._tooltipHelper.activeTriggerSet.mark.add(this._barMark);\n\n this._minLabelMark && this._tooltipHelper.ignoreTriggerSet.mark.add(this._minLabelMark);\n this._maxLabelMark && this._tooltipHelper.ignoreTriggerSet.mark.add(this._maxLabelMark);\n this._labelMark && this._tooltipHelper.ignoreTriggerSet.mark.add(this._labelMark);\n }\n}\n\nexport const registerRangeColumnSeries = () => {\n registerRectMark();\n registerTextMark();\n registerRangeColumnAnimation();\n registerFadeInOutAnimation();\n Factory.registerSeries(RangeColumnSeries.type, RangeColumnSeries);\n};\n","import { Direction } from '../../typings';\nimport { CartesianChartSpecTransformer } from '../cartesian';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { IRangeColumnChartSpec } from './interface';\n\nexport class RangeColumnChartSpecTransformer<\n T extends IRangeColumnChartSpec = IRangeColumnChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series: any = {\n ...super._getDefaultSeriesSpec(spec),\n barGapInGroup: (spec as IRangeColumnChartSpec).barGapInGroup,\n barBackground: (spec as IRangeColumnChartSpec).barBackground,\n barMinHeight: (spec as IRangeColumnChartSpec).barMinHeight\n };\n series.bar = spec.bar;\n if (spec.direction === Direction.horizontal) {\n series.xField = spec.xField ?? [spec.minField, spec.maxField];\n } else {\n series.yField = spec.yField ?? [spec.minField, spec.maxField];\n }\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n setDefaultCrosshairForCartesianChart(spec);\n }\n}\n","import { ChartTypeEnum } from '../interface/type';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport type { IRangeColumnChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { registerRangeColumnSeries } from '../../series/range-column/range-column';\nimport { RangeColumnChartSpecTransformer } from './range-column-transformer';\nimport { BaseChart } from '../base';\n\nexport class RangeColumnChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.rangeColumn;\n static readonly seriesType: string = SeriesTypeEnum.rangeColumn;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = RangeColumnChartSpecTransformer;\n readonly transformerConstructor = RangeColumnChartSpecTransformer;\n readonly type: string = ChartTypeEnum.rangeColumn;\n readonly seriesType: string = SeriesTypeEnum.rangeColumn;\n}\n\nexport const registerRangeColumnChart = () => {\n registerRangeColumnSeries();\n Factory.registerChart(RangeColumnChart.type, RangeColumnChart);\n};\n","import { MarkTypeEnum } from '../../../mark/interface/type';\nimport type { SeriesMarkMap } from '../../interface';\nimport { SeriesTypeEnum } from '../../interface/type';\nimport { RangeColumnSeries } from '../range-column';\nimport { registerRect3dMark } from '../../../mark/rect-3d';\nimport type { AdaptiveSpec } from '../../../typings';\nimport type { IRangeColumn3dSeriesSpec } from '../interface';\nimport { rangeColumn3dSeriesMark } from '../constant';\nimport { Factory } from '../../../core/factory';\n\nexport const DefaultBandWidth = 6; // 默认的bandWidth,避免连续轴没有bandWidth\n\nexport class RangeColumn3dSeries<\n T extends IRangeColumn3dSeriesSpec = IRangeColumn3dSeriesSpec\n> extends RangeColumnSeries> {\n static readonly type: string = SeriesTypeEnum.rangeColumn3d;\n type = SeriesTypeEnum.rangeColumn3d;\n protected _barMarkType: MarkTypeEnum = MarkTypeEnum.rect3d;\n protected _barName: string = SeriesTypeEnum.bar3d;\n static readonly mark: SeriesMarkMap = rangeColumn3dSeriesMark;\n}\n\nexport const registerRangeColumn3dSeries = () => {\n registerRect3dMark();\n Factory.registerSeries(RangeColumn3dSeries.type, RangeColumn3dSeries);\n};\n","import { Direction } from '../../../typings';\nimport { CartesianChartSpecTransformer } from '../../cartesian';\nimport type { IRangeColumn3dChartSpec } from '../interface';\n\nexport class RangeColumn3dChartSpecTransformer<\n T extends IRangeColumn3dChartSpec = IRangeColumn3dChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: any): any {\n const series: any = {\n ...super._getDefaultSeriesSpec(spec),\n barGapInGroup: (spec as IRangeColumn3dChartSpec).barGapInGroup\n };\n series.bar3d = spec.bar3d;\n if (spec.direction === Direction.horizontal) {\n series.xField = spec.xField ?? [spec.minField, spec.maxField];\n } else {\n series.yField = spec.yField ?? [spec.minField, spec.maxField];\n }\n return series;\n }\n}\n","import { ChartTypeEnum } from '../../interface/type';\nimport { SeriesTypeEnum } from '../../../series/interface/type';\nimport type { IRangeColumn3dChartSpec } from '../interface';\nimport { Factory } from '../../../core/factory';\nimport { registerRangeColumn3dSeries } from '../../../series/range-column/3d/range-column-3d';\nimport { RangeColumn3dChartSpecTransformer } from './range-column-3d-transformer';\nimport { BaseChart } from '../../base';\n\nexport class RangeColumn3dChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.rangeColumn3d;\n static readonly seriesType: string = SeriesTypeEnum.rangeColumn3d;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = RangeColumn3dChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = RangeColumn3dChartSpecTransformer;\n readonly type: string = ChartTypeEnum.rangeColumn3d;\n readonly seriesType: string = SeriesTypeEnum.rangeColumn3d;\n}\n\nexport const registerRangeColumn3dChart = () => {\n registerRangeColumn3dSeries();\n Factory.registerChart(RangeColumn3dChart.type, RangeColumn3dChart);\n};\n","import type { IElement } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { DiffState } from '@visactor/vgrammar-core';\nimport { minInArray } from '@visactor/vutils';\n\n/**\n * 计算角度对于起点的比例\n */\nexport const computeRatio = (angle: number, range: [number, number]) => {\n /**\n * 计算当前处理的角度, 与range的距离\n * 若ratio为负, 则代表需要向起点靠拢\n * 若ratio为正, 则代表需要向终点靠拢\n */\n const ratio = (angle - range[0]) / (range[1] - range[0] || 1);\n\n /**\n * ratio若为负值, 则取0, 代表起点.\n * ratio若为正值, 则取1, 代表终点.\n * Tips: 仅代表一个比例, 具体的值是多少, 需要在外部计算.\n */\n return Math.max(0, Math.min(1, ratio));\n};\n\n/**\n * 得到最内层的Elements\n */\nexport const getInnerMostElements = (element: IElement) => {\n // 所有待更新的marks\n const updateElements = element.mark.elements.filter(e => e.diffState === DiffState.update);\n // 得到最内层级\n const minDepth = minInArray(updateElements.map(e => e?.data?.[0].depth));\n // 内层的Marks\n return updateElements.filter(e => e?.data?.[0].depth === minDepth);\n};\n","import type { IAnimationTypeConfig, IElement } from '@visactor/vgrammar-core';\nimport type { ISunburstAnimationParams } from './interface';\nimport type { Datum } from '../../../typings';\nimport { computeRatio, getInnerMostElements } from './utils';\nimport { isEmpty, maxInArray, minInArray } from '@visactor/vutils';\n\nconst computeInnerAngleRange = (elements: IElement[], startAngle: number, endAngle: number): [number, number] => {\n // 处理enter时从无到有的case, 例如图例.\n if (isEmpty(elements)) {\n return [startAngle, endAngle];\n }\n\n const minStartAngle = minInArray(elements.map(m => m.getGraphicAttribute('startAngle', false) * 1));\n const maxEndAngle = maxInArray(elements.map(m => m.getGraphicAttribute('endAngle', false) * 1));\n return [minStartAngle, maxEndAngle];\n};\n\nexport const sunburstEnter = (params: ISunburstAnimationParams): IAnimationTypeConfig => {\n return {\n channel: {\n startAngle: {\n from: (d: Datum, element: IElement) => {\n const { startAngle, endAngle } = params.animationInfo();\n // 得到最内层的elements.\n const innerElements = getInnerMostElements(element);\n // 计算间距\n const angleRange = computeInnerAngleRange(innerElements, startAngle, endAngle);\n // 计算比例\n const ratio = computeRatio(d.startAngle, angleRange);\n return ratio * (endAngle - startAngle) + startAngle;\n },\n to: (d: Datum) => d.startAngle\n },\n endAngle: {\n from: (d: Datum, element: IElement) => {\n const { startAngle, endAngle } = params.animationInfo();\n // 得到最内层的elements.\n const innerElements = getInnerMostElements(element);\n // 计算间距\n const angleRange = computeInnerAngleRange(innerElements, startAngle, endAngle);\n // 计算比例\n const ratio = computeRatio(d.endAngle, angleRange);\n return ratio * (endAngle - startAngle) + startAngle;\n },\n to: (d: Datum) => d.endAngle\n },\n outerRadius: {\n from: (d: Datum) => d.innerRadius,\n to: (d: Datum) => d.outerRadius\n },\n innerRadius: {\n from: (d: Datum) => d.innerRadius,\n to: (d: Datum) => d.innerRadius\n }\n }\n };\n};\n","import type { IAnimationTypeConfig, IElement } from '@visactor/vgrammar-core';\nimport type { ISunburstAnimationParams } from './interface';\nimport type { Datum } from '../../../typings';\nimport { computeRatio, getInnerMostElements } from './utils';\nimport { maxInArray, minInArray } from '@visactor/vutils';\n\nconst computeInnerAngleRange = (elements: IElement[]): [number, number] => {\n const minStartAngle = minInArray(elements.map(m => m.getGraphicAttribute('startAngle', false) * 1));\n const maxEndAngle = maxInArray(elements.map(m => m.getGraphicAttribute('endAngle', false) * 1));\n return [minStartAngle, maxEndAngle];\n};\n\nexport const sunburstExit = (params: ISunburstAnimationParams): IAnimationTypeConfig => {\n return {\n channel: {\n startAngle: {\n from: (_d: Datum, element: IElement) => element.getGraphicAttribute('startAngle', false),\n to: (_d: Datum, element: IElement) => {\n const { startAngle, endAngle } = params.animationInfo();\n // 得到最内层的elements.\n const innerElements = getInnerMostElements(element);\n // 计算range\n const range = computeInnerAngleRange(innerElements);\n // 计算比例\n const ratio = computeRatio(element.getGraphicAttribute('startAngle', false), range);\n return ratio * (endAngle - startAngle) + startAngle;\n }\n },\n endAngle: {\n from: (_d: Datum, element: IElement) => element.getGraphicAttribute('endAngle', false),\n to: (_d: Datum, element: IElement) => {\n const { startAngle, endAngle } = params.animationInfo();\n // 得到最内层的elements.\n const innerElements = getInnerMostElements(element);\n // 计算range\n const range = computeInnerAngleRange(innerElements);\n // 计算比例\n const ratio = computeRatio(element.getGraphicAttribute('endAngle', false), range);\n return ratio * (endAngle - startAngle) + startAngle;\n }\n },\n outerRadius: {\n from: (_d: Datum, element: IElement) => element.getGraphicAttribute('outerRadius', false),\n to: () => params.animationInfo().innerRadius\n },\n innerRadius: {\n from: (_d: Datum, element: IElement) => element.getGraphicAttribute('innerRadius', false),\n to: () => params.animationInfo().innerRadius\n }\n }\n };\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport type { ISunburstAnimationParams, SunburstAppearPreset } from './interface';\n\n/**\n * 预设\n */\nexport const sunburstPresetAnimation = (\n _params: ISunburstAnimationParams, // 此处仅为保持结构统一\n preset: SunburstAppearPreset\n): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'growAngle': {\n return {\n type: 'growAngleIn'\n };\n }\n case 'growRadius': {\n return {\n type: 'growRadiusIn'\n };\n }\n default: {\n return {\n type: 'growRadiusIn'\n };\n }\n }\n};\n","export const flattenNodes = (nodes, output = [], options) => {\n const hasMaxDepth = (null == options ? void 0 : options.maxDepth) >= 0;\n return nodes.forEach((node => {\n (!hasMaxDepth || node.depth <= options.maxDepth) && (output.push((null == options ? void 0 : options.callback) ? options.callback(node) : node), \n node.children && (hasMaxDepth && node.depth === options.maxDepth ? (node.children = null, \n node.isLeaf = !0) : flattenNodes(node.children, output, options)));\n })), output;\n};\n\nexport const flattenTreeLinks = (nodes, output = [], options) => {\n const hasMaxDepth = (null == options ? void 0 : options.maxDepth) >= 0;\n return nodes.forEach((node => {\n (!hasMaxDepth || node.depth <= options.maxDepth - 1) && node.children && node.children.forEach((child => {\n var _a;\n const link = {\n source: node,\n target: child,\n x0: node.x,\n y0: node.y,\n x1: child.x,\n y1: child.y,\n key: `${node.key}~${child.key}`\n };\n output.push((null == options ? void 0 : options.callback) ? options.callback(link) : link), \n (null === (_a = child.children) || void 0 === _a ? void 0 : _a.length) && flattenTreeLinks([ child ], output, options);\n }));\n })), output;\n};","import { flattenNodes } from '@visactor/vgrammar-hierarchy';\nimport type { Datum } from '../../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport type { TreemapNodeElement, SunburstNodeElement } from '@visactor/vgrammar-hierarchy';\n\nexport type FlattenNodeElement = TreemapNodeElement | SunburstNodeElement;\n\nexport interface IFlattenOpt {\n output?: Datum[];\n maxDepth?: number;\n callback?: (node: FlattenNodeElement) => T;\n}\n\nexport const flatten = (data: Array, op: IFlattenOpt = {}) => {\n if (!data) {\n return [];\n }\n\n const result = [] as FlattenNodeElement[];\n flattenNodes(data as unknown as FlattenNodeElement[], result, op);\n return result;\n};\n","export default function(parent, x0, y0, x1, y1, keyMap = {\n x0: \"x0\",\n x1: \"x1\",\n y0: \"y0\",\n y1: \"y1\"\n}) {\n const nodes = parent.children;\n let node, i = -1;\n const n = nodes.length, k = parent.value && (x1 - x0) / parent.value;\n for (;++i < n; ) node = nodes[i], node[keyMap.y0] = y0, node[keyMap.y1] = y1, node[keyMap.x0] = x0, \n node[keyMap.x1] = x0 += node.value * k;\n}","import { isNil } from '@visactor/vutils';\nimport type { HierarchicalDatum, HierarchicalNodeElement } from './interface';\n\nexport const calculateNodeValue = >(\n subTree: Datum[],\n output: NodeElement[],\n depth: number = 0,\n flattenIndex: number = -1,\n parent?: NodeElement,\n getNodeKey?: (datum: Datum) => string\n): { sum: number; maxDepth: number; flattenIndex: number } => {\n let sum = 0;\n let prevFlattenIndex = flattenIndex ?? -1;\n let maxDepth = depth;\n\n subTree.forEach((datum, index) => {\n const node = {\n flattenIndex: ++prevFlattenIndex,\n key: getNodeKey ? getNodeKey(datum) : `${parent?.key ?? ''}-${index}`,\n maxDepth: -1,\n depth,\n index,\n value: datum.value,\n isLeaf: true,\n datum: parent ? parent.datum.concat(datum) : [datum],\n parentKey: parent?.key\n } as NodeElement;\n\n if (datum.children?.length) {\n node.children = [];\n node.isLeaf = false;\n const res = calculateNodeValue(\n datum.children as Datum[],\n node.children,\n depth + 1,\n prevFlattenIndex,\n node,\n getNodeKey\n );\n node.value = isNil(datum.value) ? res.sum : Math.max(res.sum, node.value);\n\n prevFlattenIndex = res.flattenIndex;\n maxDepth = Math.max(res.maxDepth, maxDepth);\n } else {\n node.isLeaf = true;\n node.value = isNil(datum.value) ? 0 : datum.value;\n }\n\n sum += Math.abs(node.value);\n output.push(node);\n });\n\n return { sum, maxDepth, flattenIndex: prevFlattenIndex };\n};\n\nexport const eachBefore = (\n subTree: NodeElement[],\n callback: (node: NodeElement, index?: number, parent?: NodeElement, ctx?: ContextType) => ContextType,\n parent?: NodeElement,\n ctx?: ContextType\n) => {\n let ctxRes = ctx;\n\n subTree.forEach((node, index) => {\n ctxRes = callback(node, index, parent, ctxRes);\n if (node.children?.length) {\n ctxRes = eachBefore(node.children as NodeElement[], callback, node, ctxRes);\n }\n });\n\n return ctx;\n};\n\nexport const eachAfter = (\n subTree: NodeElement[],\n callback: (node: NodeElement, index?: number, parent?: NodeElement, ctx?: ContextType) => ContextType,\n parent?: NodeElement,\n ctx?: ContextType\n) => {\n let ctxRes = ctx;\n\n subTree.forEach((node, index) => {\n if (node.children?.length) {\n ctxRes = eachAfter(node.children as NodeElement[], callback, node, ctxRes);\n }\n ctxRes = callback(node, index, parent, ctxRes);\n });\n\n return ctxRes;\n};\n","import type {\n SunburstOptions,\n HierarchicalDatum,\n SunburstNodeElement,\n HierarchicalData,\n SunburstLabelConfig\n} from '../interface';\nimport { isNil, isArray, isFunction, range, isBoolean, polarToCartesian } from '@visactor/vutils';\nimport dice from '../treemap/dice';\nimport { field, toPercent } from '@visactor/vgrammar-util';\nimport { calculateNodeValue } from '../utils';\nconst keyMap = {\n x0: 'startAngle',\n x1: 'endAngle',\n y0: 'innerRadius',\n y1: 'outerRadius'\n};\n\nexport class SunburstLayout {\n private options: SunburstOptions;\n\n private _getNodeKey?: (datum: HierarchicalDatum) => string;\n\n private _maxDepth: number;\n\n private _parsedCenter: [number, number];\n\n private _parsedInnerRadius: number | number[];\n\n private _parsedOutterRadius: number | number[];\n\n private _maxRadius: number;\n\n static defaultOpionts: Partial = {\n startAngle: Math.PI / 2,\n endAngle: (-3 * Math.PI) / 2,\n center: ['50%', '50%'],\n gapRadius: 0,\n innerRadius: 0,\n outerRadius: '70%'\n };\n\n constructor(options?: SunburstOptions) {\n this.options = options\n ? Object.assign({}, SunburstLayout.defaultOpionts, options)\n : Object.assign({}, SunburstLayout.defaultOpionts);\n\n const keyOption = this.options.nodeKey;\n const keyFunc = isFunction(keyOption) ? keyOption : keyOption ? field(keyOption as string) : null;\n\n this._getNodeKey = keyFunc;\n this._maxDepth = -1;\n }\n\n private _parseRadius(\n viewBox: { x0: number; x1: number; y0: number; y1: number; width: number; height: number },\n maxDepth: number\n ) {\n const cx = viewBox.x0 + toPercent(this.options.center[0], viewBox.width);\n const cy = viewBox.y0 + toPercent(this.options.center[1], viewBox.height);\n const maxRadius = Math.min(viewBox.width / 2, viewBox.height / 2);\n const innerRadius = this.options.innerRadius;\n const outerRadius = this.options.outerRadius;\n const isInnerArray = isArray(innerRadius);\n const parsedInnerRadius = isInnerArray\n ? innerRadius.map(entry => toPercent(entry, maxRadius))\n : toPercent(innerRadius, maxRadius);\n const isOuterArray = isArray(outerRadius);\n const gapRadius = this.options.gapRadius;\n const parsedOuterRadius = isOuterArray\n ? outerRadius.map(entry => toPercent(entry, maxRadius))\n : toPercent(outerRadius, maxRadius);\n const rangeArr = range(0, maxDepth + 1);\n\n if (isInnerArray) {\n this._parsedInnerRadius = rangeArr.map((entry, index) => {\n const ir = parsedInnerRadius[index];\n return isNil(ir) ? maxRadius : ir;\n });\n\n this._parsedOutterRadius = rangeArr.map((entry, index) => {\n return isOuterArray\n ? parsedOuterRadius[index]\n : index < maxDepth\n ? this._parsedInnerRadius[index + 1] - (isArray(gapRadius) ? gapRadius[index] ?? 0 : gapRadius)\n : (parsedOuterRadius as number);\n });\n } else if (isOuterArray) {\n this._parsedOutterRadius = rangeArr.map((entry, index) => {\n return isNil(parsedOuterRadius[index]) ? maxRadius : parsedOuterRadius[index];\n });\n\n this._parsedInnerRadius = rangeArr.map((entry, index) => {\n return index === 0\n ? (parsedInnerRadius as number)\n : this._parsedOutterRadius[index - 1] - (isArray(gapRadius) ? gapRadius[index] ?? 0 : gapRadius);\n });\n } else {\n const ir = toPercent(innerRadius, maxRadius);\n const or = parsedOuterRadius as number;\n const step = (or - ir) / (maxDepth + 1);\n\n this._parsedInnerRadius = rangeArr.map((entry, index) => {\n return ir + index * step;\n });\n this._parsedOutterRadius = rangeArr.map((entry, index) => {\n return this._parsedInnerRadius[index] + step - (isArray(gapRadius) ? gapRadius[index] ?? 0 : gapRadius);\n });\n }\n\n this._parsedCenter = [cx, cy];\n this._maxRadius = maxRadius;\n }\n\n layout(\n data: HierarchicalData,\n config: { x0: number; x1: number; y0: number; y1: number } | { width: number; height: number }\n ) {\n const viewBox =\n 'width' in config\n ? { x0: 0, x1: config.width, y0: 0, y1: config.height, width: config.width, height: config.height }\n : {\n x0: Math.min(config.x0, config.x1),\n x1: Math.max(config.x0, config.x1),\n y0: Math.min(config.y0, config.y1),\n y1: Math.max(config.y0, config.y1),\n width: Math.abs(config.x1 - config.x0),\n height: Math.abs(config.y1 - config.y0)\n };\n\n if (!data || !data.length) {\n return [];\n }\n\n const nodes: SunburstNodeElement[] = [];\n const res = calculateNodeValue(data, nodes, 0, -1, null, this._getNodeKey);\n\n this._parseRadius(viewBox, res.maxDepth);\n this._maxDepth = res.maxDepth;\n\n this._layout(nodes, {\n flattenIndex: -1,\n maxDepth: -1,\n key: '-1',\n depth: -1,\n index: -1,\n value: res.sum,\n datum: null,\n children: nodes,\n startAngle: this.options.startAngle,\n endAngle: this.options.endAngle\n });\n\n return nodes;\n }\n\n private _layout(nodes: SunburstNodeElement[], parent: SunburstNodeElement) {\n this._layoutNode(parent);\n\n nodes.forEach(node => {\n if (node?.children?.length) {\n this._layout(node.children, node);\n } else {\n this._layoutNode(node);\n }\n });\n }\n\n private _layoutLabel(child: SunburstNodeElement, labelOption: SunburstLabelConfig) {\n const angle = (child.startAngle + child.endAngle) / 2;\n const r =\n (labelOption.align === 'start'\n ? (child.innerRadius as number)\n : labelOption.align === 'end'\n ? child.outerRadius\n : (child.innerRadius + child.outerRadius) / 2) + (labelOption.offset ?? 0);\n const pos = polarToCartesian({ x: this._parsedCenter[0], y: this._parsedCenter[1] }, r, angle);\n\n child.label = {\n x: pos.x,\n y: pos.y,\n textBaseline: 'middle'\n };\n\n if (labelOption.rotate === 'tangential') {\n child.label.angle = angle - Math.PI / 2;\n child.label.textAlign = 'center';\n child.label.maxLineWidth = Math.abs(child.endAngle - child.startAngle) * r;\n } else {\n const uniformAngle = angle % (Math.PI * 2);\n const formatAngle = uniformAngle < 0 ? uniformAngle + Math.PI * 2 : uniformAngle;\n\n if (formatAngle > Math.PI / 2 && formatAngle < Math.PI * 1.5) {\n child.label.angle = formatAngle + Math.PI;\n child.label.textAlign =\n labelOption.align === 'start' ? 'end' : labelOption.align === 'end' ? 'start' : 'center';\n } else {\n child.label.angle = formatAngle;\n child.label.textAlign = labelOption.align;\n }\n\n child.label.maxLineWidth = child.isLeaf ? undefined : Math.abs(child.outerRadius - child.innerRadius);\n }\n }\n\n private _layoutNode = (parent: SunburstNodeElement) => {\n parent.maxDepth = this._maxDepth;\n\n if (parent.children) {\n const ir = this._parsedInnerRadius[parent.depth + 1];\n const or = this._parsedOutterRadius[parent.depth + 1];\n\n dice(parent, parent.startAngle, Math.min(ir, or), parent.endAngle, Math.max(ir, or), keyMap);\n\n const labelOption = isArray(this.options.label) ? this.options.label[parent.depth + 1] : this.options.label;\n\n parent.children.forEach(child => {\n child.x = this._parsedCenter[0];\n child.y = this._parsedCenter[1];\n\n if (labelOption) {\n return this._layoutLabel(child, isBoolean(labelOption) ? { align: 'center', rotate: 'radial' } : labelOption);\n }\n });\n }\n };\n}\n","import type { SunburstOptions } from '@visactor/vgrammar-hierarchy';\n// eslint-disable-next-line no-duplicate-imports\nimport { SunburstLayout } from '@visactor/vgrammar-hierarchy';\nimport type { Datum } from '../../typings';\n\nexport interface ISunburstOpt extends SunburstOptions {\n width: number;\n height: number;\n}\n\n/**\n * 旭日图布局算法,VGrammar 提供.\n */\nexport const sunburstLayout = (data: Array, op: () => ISunburstOpt) => {\n if (!data) {\n return data;\n }\n const options = op();\n const { width, height } = options;\n const layout = new SunburstLayout(options);\n return layout.layout(data, { width, height });\n};\n","import type { Datum } from '../../typings';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\n\nexport class SunburstTooltipHelper extends BaseSeriesTooltipHelper {\n contentKeyCallback = (datum: Datum) => {\n return datum?.[this.series.getDimensionField()[0]];\n };\n}\n","/**\n * 根据Key, 找到对应节点\n * @param hierarchyData\n * @param key\n * @param keyField\n * @param childrenField\n * @returns\n */\nexport const findHierarchyNode = (\n hierarchyData: T[],\n key: string,\n keyField = 'key',\n childrenField = 'children'\n): T | null => {\n for (let i = 0; i < hierarchyData.length; i++) {\n const node = hierarchyData[i];\n if (node[keyField] === key) {\n return node;\n }\n if (node[childrenField]) {\n const result = findHierarchyNode(node[childrenField], key, keyField, childrenField);\n if (result) {\n return result;\n }\n }\n }\n return null;\n};\n\n/**\n * 根据key, 找到对应节点的父节点\n * @param hierarchyData\n * @param key\n * @param keyField\n * @param childrenField\n * @returns\n */\nexport const findHierarchyNodeParent = (\n hierarchyData: T[],\n key: string,\n keyField = 'key',\n childrenField = 'children'\n): T | null => {\n for (let i = 0; i < hierarchyData.length; i++) {\n const node = hierarchyData[i];\n if (node[childrenField]) {\n for (let j = 0; j < node[childrenField].length; j++) {\n const childNode = node[childrenField][j];\n if (childNode[keyField] === key) {\n return node;\n }\n const result = findHierarchyNodeParent([childNode], key, keyField, childrenField);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\n};\n\n/**\n * 回溯遍历多叉树, 找到给定key的路径.\n * @param hierarchyData\n * @param key\n * @param keyField\n * @param childrenField\n * @returns\n */\nexport const findHierarchyPath = (\n hierarchyData: T[],\n key: string,\n keyField = 'key',\n childrenField = 'children'\n): string[] => {\n const result: string[] = [];\n const dfs = (data: T[], path: string[]): boolean => {\n for (const item of data) {\n if (item[keyField] === key) {\n result.push(...path, item[keyField].toString());\n return true;\n }\n\n if (item[childrenField]) {\n const res = dfs(item[childrenField], [...path, item[keyField]]);\n if (res === true) {\n return res;\n }\n }\n }\n return false;\n };\n dfs(hierarchyData, []);\n return result;\n};\n","import type { Datum } from '../../typings';\nimport { findHierarchyNode, findHierarchyNodeParent } from '../../util/hierarchy';\nimport { array, isNil } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\n\nexport enum DrillEnum {\n DrillDown = 'drillDown',\n DrillUp = 'drillUp'\n}\n\nexport type DrillInfo = {\n key: string;\n type: DrillEnum;\n path: string[];\n};\n\n/**\n * 通用的上卷下钻的数据过滤方法.\n */\nexport const drillFilter = (\n data: Array,\n op: {\n info: () => DrillInfo;\n keyField: () => string;\n }\n) => {\n // 根据key找到节点\n const info = op.info();\n const keyField = op.keyField();\n const dataKey = info?.key;\n\n if (isNil(dataKey)) {\n return data;\n }\n\n // 下钻, 找到当前选中节点\n if (info.type === DrillEnum.DrillDown) {\n const targetNode = findHierarchyNode(data, dataKey, keyField, 'children');\n return array(targetNode);\n }\n\n // 上卷, 找到当前选中节点的父节点\n if (info.type === DrillEnum.DrillUp) {\n const targetNode = findHierarchyNodeParent(data, dataKey, keyField, 'children');\n if (targetNode) {\n return array(targetNode);\n }\n }\n return data;\n};\n","/* eslint-disable no-duplicate-imports */\nimport { isArray, isEmpty, isNil } from '@visactor/vutils';\nimport type { DataSet, DataView } from '@visactor/vdataset';\n\nimport type { DrillInfo } from '../../data/transforms/drill';\nimport { drillFilter, DrillEnum } from '../../data/transforms/drill';\nimport type { EventType, IEvent } from '../../event/interface';\nimport type { RenderMode } from '../../typings/spec';\nimport { getDefaultTriggerEventByMode } from '../../component/common/trigger/config';\nimport { findHierarchyPath } from '../../util/hierarchy';\nimport { ChartEvent } from '../../constant';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport type { IModel } from '../../model/interface';\nimport type { BaseSeries } from '../../series/base/base-series';\nimport { ComponentTypeEnum } from '../../component/interface/type';\nimport type { Tooltip } from '../../component/tooltip';\n\ninterface DrillParams {\n event: IEvent;\n mode: RenderMode;\n drillField: () => string;\n getRawData: () => DataView;\n}\n\nexport interface IDrillable {\n /**\n * 初始化钻取设置\n */\n initDrillable: (params: DrillParams) => void;\n\n /**\n * 初始化钻取数据\n */\n initDrillableData: (dataSet: DataSet) => void;\n\n /**\n * 绑定钻取事件\n */\n bindDrillEvent: () => void;\n\n /**\n * 上卷\n */\n drillUp: () => void;\n\n /**\n * 下钻\n * @param drillPath 钻取路径\n */\n drillDown: (drillPath: string[]) => string[];\n}\n\nexport class Drillable implements IDrillable {\n private _drillParams: DrillParams;\n private _drillInfo: DrillInfo;\n\n private _getDrillTriggerEvent(type: string): EventType {\n const { mode } = this._drillParams;\n\n return getDefaultTriggerEventByMode(mode)?.[type];\n }\n\n private _hideTooltip() {\n const tooltip = (this as unknown as BaseSeries)\n .getChart()\n .getAllComponents()\n .find(c => c.type === ComponentTypeEnum.tooltip) as Tooltip;\n tooltip && tooltip.hideTooltip();\n }\n\n initDrillable(params: DrillParams) {\n this._drillParams = params;\n }\n\n initDrillableData(dataSet: DataSet) {\n const { getRawData } = this._drillParams;\n // 注册筛选方法\n registerDataSetInstanceTransform(dataSet, 'drillFilter', drillFilter);\n\n // 调用筛选数据, 用于上卷下钻\n getRawData().transform({\n type: 'drillFilter',\n options: {\n info: () => this._drillInfo,\n keyField: () => this._drillParams.drillField()\n }\n });\n }\n\n bindDrillEvent() {\n const { event, getRawData, drillField } = this._drillParams;\n const keyField = drillField();\n if (this._getDrillTriggerEvent('start')) {\n event.on(this._getDrillTriggerEvent('start'), e => {\n if (isNil(e.datum) || isNil(e.datum?.[keyField])) {\n this.drillUp();\n return;\n }\n\n // Drill交互后, 隐藏Tooltip\n this._hideTooltip();\n // 获取数据key\n const dataKey = e.datum[keyField];\n // 已钻取的路径\n const selectPath = this._drillInfo?.path ?? [];\n // 用户点击的路径\n const clickedPath = findHierarchyPath(getRawData().rawData, dataKey, keyField, 'children');\n // 已钻取过, 则一定上卷\n if (selectPath[selectPath.length - 1] === clickedPath[clickedPath.length - 1]) {\n this.drillUp();\n } else {\n this.drillDown(clickedPath);\n }\n });\n }\n }\n\n /**\n * 下钻接口\n * @param drillPath 下钻后的路径\n * @returns 当然路径\n * @description 根据传入的path, 向指定层级下钻.\n */\n drillDown(drillPath: string[] = []): string[] {\n const { getRawData, event } = this._drillParams;\n if (!isArray(drillPath) || isEmpty(drillPath)) {\n return drillPath;\n }\n\n // 根据钻取路径, 获得当前需要展示的层级\n const dataKey = drillPath[drillPath.length - 1];\n\n this._drillInfo = {\n key: dataKey,\n path: drillPath,\n type: DrillEnum.DrillDown\n };\n\n getRawData().reRunAllTransform();\n event.emit(ChartEvent.drill, {\n value: { path: drillPath, type: DrillEnum.DrillDown },\n model: this as unknown as IModel\n });\n return drillPath;\n }\n\n /**\n * 上卷接口\n * @returns 上卷后的路径\n * @description 根据path信息, 向父层级上卷.\n */\n drillUp() {\n const { getRawData, event } = this._drillParams;\n\n const path = this._drillInfo?.path ?? [];\n if (!isArray(path) || isEmpty(path)) {\n return path;\n }\n\n const dataKey = path.pop();\n\n this._drillInfo = {\n key: dataKey,\n path: path,\n type: DrillEnum.DrillUp\n };\n\n getRawData().reRunAllTransform();\n event.emit(ChartEvent.drill, {\n value: { path, type: DrillEnum.DrillUp },\n model: this as unknown as IModel\n });\n return path;\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport type { SunburstLabelConfig, SunburstNodeElement } from '@visactor/vgrammar-hierarchy';\nimport { array, isArray, isNil, isValid, isObject, degreeToRadian, mixin } from '@visactor/vutils';\n\nimport type { IMarkSpec } from '../../typings/spec';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { ITextMark } from '../../mark/text';\nimport type { IArcMark } from '../../mark/arc';\nimport type { Datum, IArcMarkSpec, ITextMarkSpec } from '../../typings';\n\nimport { registerSunburstAnimation, type ISunburstAnimationParams, type SunburstAppearPreset } from './animation';\nimport type { ISunburstSeriesSpec, LabelAutoVisibleType } from './interface';\nimport type { ISunburstOpt } from '../../data/transforms/sunburst';\n\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { flatten } from '../../data/transforms/flatten';\nimport { sunburstLayout } from '../../data/transforms/sunburst';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesTypeEnum } from '../interface/type';\n\nimport type { IMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport { AttributeLevel, DEFAULT_DATA_KEY } from '../../constant';\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { DEFAULT_HIERARCHY_DEPTH, DEFAULT_HIERARCHY_ROOT } from '../../constant/hierarchy';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport { addHierarchyDataKey, initHierarchyKeyMap } from '../../data/transforms/data-key';\nimport { addVChartProperty } from '../../data/transforms/add-property';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { PolarSeries } from '../polar/polar';\nimport { SUNBURST_AUTO_VISIBLE_DEFAULT_THRESHOLD } from '../../constant/sunburst';\nimport { SunburstTooltipHelper } from './tooltip-helper';\nimport type { animationInfo } from './animation/interface';\nimport type { IDrillable } from '../../interaction/drill/drillable';\nimport { Drillable } from '../../interaction/drill/drillable';\nimport { ArcMark, registerArcMark } from '../../mark/arc';\nimport { TextMark, registerTextMark } from '../../mark/text';\nimport { sunburstSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\n\nexport class SunburstSeries extends PolarSeries {\n protected declare _spec: ISunburstSeriesSpec;\n\n static readonly type: string = SeriesTypeEnum.sunburst;\n type = SeriesTypeEnum.sunburst;\n\n static readonly mark: SeriesMarkMap = sunburstSeriesMark;\n\n private _sunburstMark: IArcMark;\n private _labelMark: ITextMark;\n\n protected _categoryField!: string;\n protected _valueField!: string;\n\n private _centerX: number;\n private _centerY: number;\n private _offsetX: number;\n private _offsetY: number;\n private _startAngle: number;\n private _endAngle: number;\n\n private __innerRadius: number | number[];\n private __outerRadius: number | number[];\n private _gap: number | number[];\n private _labelLayout: SunburstLabelConfig | SunburstLabelConfig[];\n\n private _labelAutoVisible?: LabelAutoVisibleType;\n\n private _label: IMarkSpec;\n private _sunburst: IMarkSpec;\n\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n getCategoryField() {\n return this._categoryField;\n }\n\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n getValueField() {\n return this._valueField;\n }\n\n getDimensionField() {\n return [this._categoryField];\n }\n\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n this.setCategoryField(this._spec.categoryField);\n this.setValueField(this._spec.valueField);\n this.setSeriesField(this._spec.seriesField ?? DEFAULT_HIERARCHY_ROOT);\n\n if (this._spec.drill) {\n (this as unknown as IDrillable).initDrillable({\n event: this.event,\n mode: this._option.mode,\n drillField: () => this._spec.drillField ?? DEFAULT_DATA_KEY,\n getRawData: () => this.getRawData()\n });\n }\n\n /**\n * 角度区间\n */\n this._startAngle = degreeToRadian(this._spec.startAngle);\n this._endAngle = degreeToRadian(this._spec.endAngle);\n\n /**\n * 中心点\n */\n this._centerX = this._spec.centerX;\n this._centerY = this._spec.centerY;\n this._offsetX = this._spec.offsetX;\n this._offsetY = this._spec.offsetY;\n\n /**\n * 对所有层生效的布局配置\n */\n this.__innerRadius = this._spec.innerRadius;\n this.__outerRadius = this._spec.outerRadius;\n this._gap = this._spec.gap;\n this._labelLayout = this._spec.labelLayout;\n\n /**\n * 图元配置\n */\n this._sunburst = this._spec.sunburst;\n this._label = this._spec.label;\n\n /**\n * 功能配置\n */\n this._labelAutoVisible = this._spec.labelAutoVisible;\n }\n\n protected initData() {\n super.initData();\n const rawData = this.getRawData();\n if (!rawData) {\n return;\n }\n\n // 对原始数据进行上卷下钻筛选\n if (this._spec.drill) {\n (this as unknown as IDrillable).initDrillableData(this._dataSet);\n }\n // 注册布局算法\n registerDataSetInstanceTransform(this._dataSet, 'sunburstLayout', sunburstLayout);\n // 注册扁平化算法\n registerDataSetInstanceTransform(this._dataSet, 'flatten', flatten);\n\n // 对筛选后的数据, 调用sunburst布局算法\n rawData.transform({\n type: 'sunburstLayout',\n options: (): ISunburstOpt => {\n const { innerRadius, outerRadius, gap, label } = this._computeLevel();\n return {\n nodeKey: this._categoryField,\n width: this.getLayoutRect().width,\n height: this.getLayoutRect().height,\n center: [\n isValid(this._centerX) ? this._centerX : this.getLayoutRect().width / 2,\n isValid(this._centerY) ? this._centerY : this.getLayoutRect().height / 2\n ],\n startAngle: this._startAngle,\n endAngle: this._endAngle,\n\n innerRadius: innerRadius,\n outerRadius: outerRadius,\n gapRadius: gap,\n label: label\n };\n }\n });\n\n // 布局结果进行扁平化处理\n rawData.transform({\n type: 'flatten',\n options: {\n callback: (node: SunburstNodeElement) => {\n if (node.datum) {\n const nodeData = node.datum[node.depth];\n return { ...node, ...nodeData };\n }\n return node;\n }\n }\n });\n }\n\n getStatisticFields() {\n const fields = super.getStatisticFields();\n return fields.concat([\n {\n key: this._categoryField,\n operations: ['values']\n },\n {\n key: this._valueField,\n operations: ['max', 'min']\n },\n {\n key: DEFAULT_HIERARCHY_DEPTH,\n operations: ['max', 'min', 'values']\n },\n {\n key: DEFAULT_HIERARCHY_ROOT,\n operations: ['values']\n }\n ]);\n }\n\n protected _addDataIndexAndKey() {\n const rawData = this.getRawData();\n if (isNil(rawData?.dataSet)) {\n return;\n }\n // 为原始数据, 添加层级属性\n registerDataSetInstanceTransform(rawData.dataSet, 'addVChartProperty', addVChartProperty);\n rawData.transform({\n type: 'addVChartProperty',\n options: {\n beforeCall: initHierarchyKeyMap.bind(this),\n call: addHierarchyDataKey\n }\n });\n }\n\n initMark(): void {\n this._initArcMark();\n this._initLabelMark();\n }\n\n initMarkStyle(): void {\n this._initArcMarkStyle();\n this._initLabelMarkStyle();\n }\n\n private _initArcMark() {\n if (this._sunburst.visible === false) {\n return;\n }\n // SunburstMark\n const sunburstMark = this._createMark(SunburstSeries.mark.sunburst, {\n isSeriesMark: true,\n customShape: this._spec.sunburst?.customShape\n }) as IArcMark;\n this._sunburstMark = sunburstMark;\n this._trigger.registerMark(this._sunburstMark);\n }\n\n private _initArcMarkStyle() {\n if (isNil(this._sunburstMark)) {\n return;\n }\n this.setMarkStyle(\n this._sunburstMark,\n {\n x: d => d.x + (isValid(this._offsetX) ? this._offsetX : 0),\n y: d => d.y + (isValid(this._offsetY) ? this._offsetY : 0),\n outerRadius: d => d.outerRadius,\n innerRadius: d => d.innerRadius,\n startAngle: d => d.startAngle,\n endAngle: d => d.endAngle,\n fill: this.getColorAttribute()\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n private _initLabelMark() {\n if (this._label.visible !== true) {\n return;\n }\n // Label\n const labelMark = this._createMark(SunburstSeries.mark.label, {\n isSeriesMark: false\n }) as ITextMark;\n this._labelMark = labelMark;\n\n this._trigger.registerMark(labelMark);\n }\n\n private _initLabelMarkStyle() {\n if (isNil(this._labelMark)) {\n return;\n }\n this.setMarkStyle(\n this._labelMark,\n {\n visible: d => {\n // 自动隐藏密集标签逻辑.\n const labelAutoVisible = this._labelAutoVisible;\n\n if (isObject(labelAutoVisible) && labelAutoVisible.enable === true) {\n return (\n (d.endAngle - d.startAngle) * (d.outerRadius - d.innerRadius) >\n (labelAutoVisible?.circumference ?? SUNBURST_AUTO_VISIBLE_DEFAULT_THRESHOLD)\n );\n }\n return this._spec.label.visible;\n },\n x: d => d.label?.x + (isValid(this._offsetX) ? this._offsetX : 0),\n y: d => d.label?.y + (isValid(this._offsetY) ? this._offsetY : 0),\n textBaseline: d => d.label?.textBaseline,\n textAlign: d => d.label?.textAlign,\n angle: d => d.label?.angle ?? 0,\n fontSize: 10,\n text: d => d.name\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n protected initTooltip() {\n this._tooltipHelper = new SunburstTooltipHelper(this);\n this._sunburstMark && this._tooltipHelper.activeTriggerSet.mark.add(this._sunburstMark);\n this._labelMark && this._tooltipHelper.activeTriggerSet.mark.add(this._labelMark);\n }\n\n initAnimation() {\n const animationParams: ISunburstAnimationParams = {\n animationInfo: (): animationInfo => {\n // 返回用户的交互元素信息\n return {\n innerRadius: this._computeRadius(array(this.__innerRadius))[0],\n outerRadius: this._computeRadius(array(this.__outerRadius))[0],\n startAngle: array(this._startAngle)[0],\n endAngle: array(this._endAngle)[0]\n };\n }\n };\n\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n\n this.getMarksInType(MarkTypeEnum.arc).forEach(mark => {\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('sunburst')?.(animationParams, appearPreset),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n });\n\n this.getMarksInType(MarkTypeEnum.text).forEach(mark => {\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n });\n }\n\n initEvent() {\n super.initEvent();\n if (this._spec.drill) {\n (this as unknown as IDrillable).bindDrillEvent();\n }\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this._rawData.reRunAllTransform();\n }\n\n /**\n * 计算radius, 转换为布局属性\n * @radius radius是一个比例值, 取值范围为[0,1]\n */\n private _computeRadius(radius: number | number[]) {\n if (isArray(radius)) {\n return radius.map(r => {\n const { width, height } = this.getRegion().getLayoutRect();\n return Math.min(width / 2, height / 2) * r;\n });\n }\n const { width, height } = this.getRegion().getLayoutRect();\n return Math.min(width / 2, height / 2) * radius;\n }\n\n private _computeLevel(): {\n innerRadius: number | number[];\n outerRadius: number | number[];\n gap: number | number[];\n label: SunburstLabelConfig | SunburstLabelConfig[];\n } {\n return {\n innerRadius: this._computeRadius(this.__innerRadius),\n outerRadius: this._computeRadius(this.__outerRadius),\n gap: this._gap,\n label: this._labelLayout\n };\n }\n\n getGroupFields(): string[] {\n return [];\n }\n getStackGroupFields(): string[] {\n return [];\n }\n getStackValueField(): string {\n return '';\n }\n\n // make sure this function fast\n protected _noAnimationDataKey(datum: Datum, index: number): unknown | undefined {\n return undefined;\n }\n\n getActiveMarks(): IMark[] {\n return [this._sunburstMark];\n }\n}\n\nmixin(SunburstSeries, Drillable);\n\nexport const registerSunBurstSeries = () => {\n Factory.registerSeries(SunburstSeries.type, SunburstSeries);\n registerArcMark();\n registerTextMark();\n registerFadeInOutAnimation();\n registerSunburstAnimation();\n};\n","export const SUNBURST_AUTO_VISIBLE_DEFAULT_THRESHOLD = 10;\n","import { isValid, radianToDegree } from '@visactor/vutils';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { ISunburstChartSpec } from './interface';\nimport { POLAR_START_ANGLE } from '../../constant';\nimport type { ISunburstSeriesSpec } from '../../series';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesTypeEnum } from '../../series';\n\nexport class SunburstChartSpecTransformer<\n T extends ISunburstChartSpec = ISunburstChartSpec\n> extends BaseChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T) {\n // 开始角度默认使用用户配置\n const startAngle = isValid(spec.startAngle) ? spec.startAngle : POLAR_START_ANGLE;\n // 结束角度默认使用用户的配置, 若用户没配置, 默认补成整圆.\n const endAngle = isValid(spec.endAngle) ? spec.endAngle : startAngle + radianToDegree(Math.PI * 2);\n\n const series: ISunburstSeriesSpec = {\n ...super._getDefaultSeriesSpec(spec),\n categoryField: spec.categoryField,\n valueField: spec.valueField,\n seriesField: spec.seriesField,\n\n centerX: spec.centerX,\n centerY: spec.centerY,\n offsetX: spec.offsetX,\n offsetY: spec.offsetY,\n\n startAngle: startAngle,\n endAngle: endAngle,\n\n innerRadius: spec.innerRadius,\n outerRadius: spec.outerRadius,\n gap: spec.gap,\n labelLayout: spec.labelLayout,\n label: spec.label,\n labelAutoVisible: spec.labelAutoVisible,\n\n drill: spec.drill,\n drillField: spec.drillField\n };\n\n const seriesType = SeriesTypeEnum.sunburst;\n series.type = seriesType;\n series[seriesType] = spec[seriesType];\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n\n /* 处理 series 配置 */\n const defaultSeriesSpec = this._getDefaultSeriesSpec(spec);\n if (!spec.series || spec.series.length === 0) {\n spec.series = [defaultSeriesSpec];\n } else {\n spec.series.forEach(s => {\n if (!this._isValidSeries(s.type)) {\n return;\n }\n Object.keys(defaultSeriesSpec).forEach(k => {\n if (!(k in s)) {\n s[k] = defaultSeriesSpec[k];\n }\n });\n });\n }\n }\n}\n","import { registerSunBurstSeries } from './../../series/sunburst/sunburst';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { BaseChart } from '../base/base-chart';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { ISunburstChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { SunburstChartSpecTransformer } from './sunburst-transformer';\n\nexport class SunburstChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.sunburst;\n static readonly seriesType: string = SeriesTypeEnum.sunburst;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = SunburstChartSpecTransformer;\n readonly transformerConstructor = SunburstChartSpecTransformer;\n readonly type: string = ChartTypeEnum.sunburst;\n readonly seriesType: string = SeriesTypeEnum.sunburst;\n}\n\nexport const registerSunburstChart = () => {\n registerSunBurstSeries();\n Factory.registerChart(SunburstChart.type, SunburstChart);\n};\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-statistics/src/lcg.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\n// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport function randomLCG(initS: number = 1) {\n let s = initS;\n return () => (s = (a * s + c) % m) / m;\n}\n","import { shuffleArray, Logger } from '@visactor/vutils';\nimport type { ICircle } from '../interface';\nimport { randomLCG } from '../lcg';\n\nexport default function (circles: ICircle[]) {\n return packEncloseRandom(circles, randomLCG());\n}\n\nexport function packEncloseRandom(circles: ICircle[], random: () => number) {\n let i = 0;\n const sCircles = shuffleArray(Array.from(circles), random);\n const n = sCircles.length;\n let B: ICircle[] = [];\n let p: ICircle;\n let e: ICircle;\n\n while (i < n) {\n p = sCircles[i];\n if (e && enclosesWeak(e, p)) {\n ++i;\n } else {\n B = extendBasis(B, p);\n e = encloseBasis(B);\n i = 0;\n }\n }\n\n return e;\n}\n\nfunction extendBasis(B: ICircle[], p: ICircle) {\n let i;\n let j;\n\n if (enclosesWeakAll(p, B)) {\n return [p];\n }\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i]) && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (\n enclosesNot(encloseBasis2(B[i], B[j]), p) &&\n enclosesNot(encloseBasis2(B[i], p), B[j]) &&\n enclosesNot(encloseBasis2(B[j], p), B[i]) &&\n enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)\n ) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n Logger.getInstance().error('error when packEncloseRandom');\n}\n\nfunction enclosesNot(a: ICircle, b: ICircle) {\n const dr = a.radius - b.radius;\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a: ICircle, b: ICircle) {\n const dr = a.radius - b.radius + Math.max(a.radius, b.radius, 1) * 1e-9;\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a: ICircle, B: ICircle[]) {\n for (let i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B: ICircle[]) {\n switch (B.length) {\n case 1:\n return encloseBasis1(B[0]);\n case 2:\n return encloseBasis2(B[0], B[1]);\n case 3:\n return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a: ICircle) {\n return {\n x: a.x,\n y: a.y,\n radius: a.radius\n };\n}\n\nfunction encloseBasis2(a: ICircle, b: ICircle) {\n const x1 = a.x;\n const y1 = a.y;\n const r1 = a.radius;\n const x2 = b.x;\n const y2 = b.y;\n const r2 = b.radius;\n const x21 = x2 - x1;\n const y21 = y2 - y1;\n const r21 = r2 - r1;\n const l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + (x21 / l) * r21) / 2,\n y: (y1 + y2 + (y21 / l) * r21) / 2,\n radius: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a: ICircle, b: ICircle, c: ICircle) {\n const x1 = a.x;\n const y1 = a.y;\n const r1 = a.radius;\n const x2 = b.x;\n const y2 = b.y;\n const r2 = b.radius;\n const x3 = c.x;\n const y3 = c.y;\n const r3 = c.radius;\n const a2 = x1 - x2;\n const a3 = x1 - x3;\n const b2 = y1 - y2;\n const b3 = y1 - y3;\n const c2 = r2 - r1;\n const c3 = r3 - r1;\n const d1 = x1 * x1 + y1 * y1 - r1 * r1;\n const d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2;\n const d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3;\n const ab = a3 * b2 - a2 * b3;\n const xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1;\n const xb = (b3 * c2 - b2 * c3) / ab;\n const ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1;\n const yb = (a2 * c3 - a3 * c2) / ab;\n const A = xb * xb + yb * yb - 1;\n const B = 2 * (r1 + xa * xb + ya * yb);\n const C = xa * xa + ya * ya - r1 * r1;\n const r = -(Math.abs(A) > 1e-6 ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n radius: r\n };\n}\n","import { array } from '@visactor/vutils';\nimport { randomLCG } from '../lcg';\nimport { packEncloseRandom } from './enclose';\nimport type { ICircle } from '../interface';\n\ninterface CircleNode {\n _: ICircle;\n next?: CircleNode;\n prev?: CircleNode;\n}\n\nfunction place(b: ICircle, a: ICircle, c: ICircle) {\n const dx = b.x - a.x;\n let x;\n let a2;\n const dy = b.y - a.y;\n let y;\n let b2;\n const d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.radius + c.radius;\n a2 *= a2;\n b2 = b.radius + c.radius;\n b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.radius;\n c.y = a.y;\n }\n}\n\nfunction intersects(a: ICircle, b: ICircle) {\n const dr = a.radius + b.radius - 1e-6;\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node: CircleNode) {\n const a = node._;\n const b = node.next._;\n const ab = a.radius + b.radius;\n const dx = (a.x * b.radius + b.x * a.radius) / ab;\n const dy = (a.y * b.radius + b.y * a.radius) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction getCicleNode(circle: ICircle): CircleNode {\n return {\n _: circle,\n next: null as CircleNode,\n prev: null as CircleNode\n };\n}\n\nexport function packSiblingsRandom(circles: ICircle[], random: () => number) {\n circles = array(circles);\n\n const n = circles.length;\n if (!n) {\n return 0;\n }\n\n // Place the first circle.\n let a = circles[0];\n a.x = 0;\n a.y = 0;\n if (n === 1) {\n return a.radius;\n }\n\n // Place the second circle.\n const b = circles[1];\n a.x = -b.radius;\n b.x = a.radius;\n b.y = 0;\n if (n === 2) {\n return a.radius + b.radius;\n }\n\n let c = circles[2];\n // Place the third circle.\n place(b, a, c);\n\n // Initialize the front-chain using the first three circles a, b and c.\n let aNode = getCicleNode(a);\n let bNode = getCicleNode(b);\n let cNode = getCicleNode(c);\n aNode.next = bNode;\n cNode.prev = bNode;\n\n bNode.next = cNode;\n aNode.prev = cNode;\n\n cNode.next = aNode;\n bNode.prev = aNode;\n\n let j: CircleNode;\n let k: CircleNode;\n let sj: number;\n let sk: number;\n let aa: number;\n let ca: number;\n let isContinue: boolean;\n\n // Attempt to place each remaining circle…\n for (let i = 3; i < n; ++i) {\n isContinue = false;\n c = circles[i];\n place(aNode._, bNode._, c);\n cNode = getCicleNode(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = bNode.next;\n k = aNode.prev;\n sj = bNode._.radius;\n sk = aNode._.radius;\n\n do {\n if (sj <= sk) {\n if (intersects(j._, cNode._)) {\n bNode = j;\n aNode.next = bNode;\n bNode.prev = aNode;\n --i;\n isContinue = true;\n break;\n }\n sj += j._.radius;\n j = j.next;\n } else {\n if (intersects(k._, cNode._)) {\n aNode = k;\n aNode.next = bNode;\n bNode.prev = aNode;\n --i;\n\n isContinue = true;\n break;\n }\n sk += k._.radius;\n k = k.prev;\n }\n } while (j !== k.next);\n\n if (isContinue) {\n continue;\n }\n\n // Success! Insert the new circle c between a and b.\n cNode.prev = aNode;\n cNode.next = bNode;\n aNode.next = bNode.prev = bNode = cNode;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(aNode);\n cNode = cNode.next;\n while (cNode !== bNode) {\n ca = score(cNode);\n if (ca < aa) {\n aNode = cNode;\n aa = ca;\n }\n cNode = cNode.next;\n }\n bNode = aNode.next;\n }\n\n // Compute the enclosing circle of the front chain.\n const aCircles = [bNode._];\n cNode = bNode.next;\n while (cNode !== bNode) {\n aCircles.push(cNode._);\n cNode = cNode.next;\n }\n c = packEncloseRandom(aCircles, random);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (let i = 0; i < n; ++i) {\n a = circles[i];\n a.x -= c.x;\n a.y -= c.y;\n }\n\n return c.radius;\n}\n\nexport default function (circles: ICircle[]) {\n packSiblingsRandom(circles, randomLCG());\n return circles;\n}\n","import { eachBefore, eachAfter, calculateNodeValue } from '../utils';\nimport type { CirclePackingOptions, HierarchicalDatum, CirclePackingNodeElement, HierarchicalData } from '../interface';\nimport { isFunction, isNumber, isArray } from '@visactor/vutils';\nimport { field, zero } from '@visactor/vgrammar-util';\nimport { randomLCG } from '../lcg';\nimport { packSiblingsRandom } from './siblings';\n\nfunction radiusLeaf(radius: (node: CirclePackingNodeElement) => number) {\n return function (node: CirclePackingNodeElement) {\n if (!node.children) {\n node.radius = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildrenRandom(padding: (node: CirclePackingNodeElement) => number, k: number, random: () => number) {\n return function (node: CirclePackingNodeElement) {\n const children = node?.children;\n if (children) {\n let i;\n const n = children.length;\n const r = padding(node) * k || 0;\n\n if (r) {\n for (i = 0; i < n; ++i) {\n children[i].radius += r;\n }\n }\n const e = packSiblingsRandom(children, random);\n if (r) {\n for (i = 0; i < n; ++i) {\n children[i].radius -= r;\n }\n }\n node.radius = e + r;\n }\n };\n}\n\nfunction translateChild(k: number, maxDepth: number) {\n return function (node: CirclePackingNodeElement, index: number, parent: CirclePackingNodeElement) {\n node.radius *= k;\n node.maxDepth = maxDepth;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n\nexport class CirclePackingLayout {\n private options: CirclePackingOptions;\n\n private _getNodeKey?: (datum: HierarchicalDatum) => string;\n\n private _getPadding?: (node: CirclePackingNodeElement) => number;\n\n private _maxDepth: number;\n\n static defaultOpionts: Partial = {\n setRadius: (node: CirclePackingNodeElement) => {\n return Math.sqrt(node.value);\n },\n padding: 0,\n nodeSort: (a, b) => b.value - a.value\n };\n\n constructor(options?: CirclePackingOptions) {\n this.options = options;\n\n const keyOption = options?.nodeKey;\n const keyFunc = isFunction(keyOption) ? keyOption : keyOption ? field(keyOption as string) : null;\n\n this._getNodeKey = keyFunc;\n this._getPadding = isNumber(options?.padding)\n ? (node: CirclePackingNodeElement) => options.padding as number\n : isArray(options?.padding)\n ? (node: CirclePackingNodeElement) => options.padding[node.depth + 1] ?? 0\n : () => 0;\n this._maxDepth = -1;\n }\n\n layout(\n data: HierarchicalData,\n config: { x0: number; x1: number; y0: number; y1: number } | { width: number; height: number }\n ) {\n const viewBox =\n 'width' in config\n ? { x0: 0, x1: config.width, y0: 0, y1: config.height, width: config.width, height: config.height }\n : {\n x0: Math.min(config.x0, config.x1),\n x1: Math.max(config.x0, config.x1),\n y0: Math.min(config.y0, config.y1),\n y1: Math.max(config.y0, config.y1),\n width: Math.abs(config.x1 - config.x0),\n height: Math.abs(config.y1 - config.y0)\n };\n\n if (!data || !data.length) {\n return [];\n }\n\n const nodes: CirclePackingNodeElement[] = [];\n const res = calculateNodeValue(\n data,\n nodes,\n 0,\n -1,\n null,\n this._getNodeKey\n );\n this._maxDepth = res.maxDepth;\n\n const random = randomLCG();\n const root: CirclePackingNodeElement = {\n flattenIndex: -1,\n maxDepth: -1,\n key: 'root',\n depth: -1,\n index: -1,\n value: res.sum,\n datum: null,\n children: nodes,\n x: viewBox.x0 + viewBox.width / 2,\n y: viewBox.y0 + viewBox.height / 2\n };\n const { nodeSort, setRadius, padding, includeRoot } = this.options ?? {};\n if (nodeSort !== false) {\n const sort = (isFunction(nodeSort) ? this.options.nodeKey : CirclePackingLayout.defaultOpionts.nodeSort) as (\n a: CirclePackingNodeElement,\n b: CirclePackingNodeElement\n ) => number;\n // 默认排序,布局效果更好\n eachBefore([root], (node: CirclePackingNodeElement) => {\n if (node.children && node.children.length) {\n node.children.sort(sort);\n }\n });\n }\n if (setRadius) {\n eachBefore([root], radiusLeaf(setRadius));\n eachAfter([root], packChildrenRandom(this._getPadding, 0.5, random));\n eachBefore([root], translateChild(1, this._maxDepth));\n } else {\n const size = Math.min(viewBox.width, viewBox.height);\n\n eachBefore([root], radiusLeaf(CirclePackingLayout.defaultOpionts.setRadius));\n // layout by value\n eachAfter([root], packChildrenRandom(zero, 1, random));\n if (padding) {\n eachAfter([root], packChildrenRandom(this._getPadding, root.radius / size, random));\n }\n eachBefore([root], translateChild(size / (2 * root.radius), this._maxDepth));\n }\n\n return includeRoot ? [root] : nodes;\n }\n}\n","import type { Datum } from '../../typings';\nimport type { CirclePackingOptions } from '@visactor/vgrammar-hierarchy';\n\n// eslint-disable-next-line no-duplicate-imports\nimport { CirclePackingLayout } from '@visactor/vgrammar-hierarchy';\n\nexport interface ICirclePackingOpt extends CirclePackingOptions {\n width: number;\n height: number;\n}\n\n/**\n * CirclePacking布局算法,VGrammar 提供.\n */\nexport const circlePackingLayout = (data: Array, op: () => ICirclePackingOpt) => {\n if (!data) {\n return data;\n }\n const options = op();\n const { width, height } = options;\n if (width === 0 || height === 0) {\n return data;\n }\n const layout = new CirclePackingLayout(options);\n return layout.layout(data, { width, height });\n};\n","import type { Datum } from '../../typings';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\n\nexport class CirclePackingTooltipHelper extends BaseSeriesTooltipHelper {\n contentKeyCallback = (datum: Datum) => {\n return datum?.[this.series.getDimensionField()[0]];\n };\n}\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core/factory';\n\nexport type CirclePackingMark = 'leaf' | 'nonLeaf' | 'label' | 'nonLeafLabel';\n\nexport type CirclePackingAppearPreset = 'growIn' | 'fadeIn';\n\nexport const circlePackingPresetAnimation = (preset: CirclePackingAppearPreset): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n\n default: {\n return {\n type: 'growRadiusIn'\n };\n }\n }\n};\n\nexport const registerCirclePackingAnimation = () => {\n Factory.registerAnimation('circlePacking', (parmas: unknown, preset: CirclePackingAppearPreset) => ({\n appear: circlePackingPresetAnimation(preset),\n enter: { type: 'growRadiusIn' },\n exit: { type: 'growRadiusOut' },\n disappear: { type: 'growRadiusOut' }\n }));\n};\n","/* eslint-disable no-duplicate-imports */\nimport { isNil, mixin } from '@visactor/vutils';\n\nimport type { ICirclePackingOpt } from '../../data/transforms/circle-packing';\nimport type { ICirclePackingSeriesSpec } from './interface';\n\nimport type { IMarkSpec } from '../../typings/spec/common';\nimport { Factory } from '../../core/factory';\nimport type { Datum, IArcMarkSpec, ITextMarkSpec } from '../../typings';\n\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesTypeEnum } from '../interface/type';\n\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { circlePackingLayout } from '../../data/transforms/circle-packing';\nimport type { IMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type { IArcMark } from '../../mark/arc';\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { AttributeLevel, DEFAULT_DATA_KEY } from '../../constant';\nimport { DEFAULT_HIERARCHY_DEPTH, DEFAULT_HIERARCHY_ROOT } from '../../constant/hierarchy';\nimport type { CirclePackingNodeElement } from '@visactor/vgrammar-hierarchy';\nimport { flatten } from '../../data/transforms/flatten';\nimport { CirclePackingTooltipHelper } from './tooltip-helper';\nimport type { ITextMark } from '../../mark/text';\nimport { addHierarchyDataKey, initHierarchyKeyMap } from '../../data/transforms/data-key';\nimport { addVChartProperty } from '../../data/transforms/add-property';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { registerScaleInOutAnimation } from '../../animation/config';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerCirclePackingAnimation, type CirclePackingAppearPreset } from './animation';\nimport type { IDrillable } from '../../interaction/drill/drillable';\nimport { Drillable } from '../../interaction/drill/drillable';\nimport { ArcMark, registerArcMark } from '../../mark/arc';\nimport { TextMark, registerTextMark } from '../../mark/text';\nimport { circlePackingSeriesMark } from './constant';\n\nexport class CirclePackingSeries<\n T extends ICirclePackingSeriesSpec = ICirclePackingSeriesSpec\n> extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.circlePacking;\n type = SeriesTypeEnum.circlePacking;\n\n static readonly mark: SeriesMarkMap = circlePackingSeriesMark;\n\n // 映射字段\n protected _categoryField!: string;\n protected _valueField!: string;\n // 配置\n private _layoutPadding: number | number[];\n private _circlePacking: IMarkSpec;\n private _label: IMarkSpec;\n // Mark\n private _circlePackingMark: IArcMark;\n private _labelMark: ITextMark;\n\n // 钻取功能开启\n private _drill?: boolean;\n\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n getCategoryField() {\n return this._categoryField;\n }\n\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n getValueField() {\n return this._valueField;\n }\n\n getDimensionField() {\n return [this._categoryField];\n }\n\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n\n this.setCategoryField(this._spec.categoryField);\n this.setValueField(this._spec.valueField);\n this.setSeriesField(this._spec.seriesField ?? DEFAULT_HIERARCHY_ROOT);\n\n if (this._spec.drill) {\n (this as unknown as IDrillable).initDrillable({\n event: this.event,\n mode: this._option.mode,\n drillField: () => this._spec.drillField ?? DEFAULT_DATA_KEY,\n getRawData: () => this.getRawData()\n });\n }\n\n this._circlePacking = this._spec.circlePacking;\n this._label = this._spec.label;\n this._layoutPadding = this._spec.layoutPadding;\n }\n\n protected initData(): void {\n super.initData();\n\n const rawData = this.getRawData();\n\n if (isNil(rawData)) {\n return;\n }\n\n if (this._spec.drill) {\n // 对原始数据进行上卷下钻筛选\n (this as unknown as IDrillable).initDrillableData(this._dataSet);\n }\n\n // 注册布局算法\n registerDataSetInstanceTransform(this._dataSet, 'circlePackingLayout', circlePackingLayout);\n // 注册扁平化算法\n registerDataSetInstanceTransform(this._dataSet, 'flatten', flatten);\n\n // 布局算法\n rawData.transform({\n type: 'circlePackingLayout',\n options: (): ICirclePackingOpt => {\n return {\n nodeKey: this._categoryField,\n padding: this._layoutPadding,\n includeRoot: false,\n width: this.getLayoutRect().width || 1,\n height: this.getLayoutRect().height || 1\n };\n }\n });\n\n // 布局结果进行扁平化处理\n rawData.transform({\n type: 'flatten',\n options: {\n callback: (node: CirclePackingNodeElement) => {\n if (node.datum) {\n const nodeData = node.datum[node.depth];\n return { ...node, ...nodeData };\n }\n return node;\n }\n }\n });\n }\n\n protected _addDataIndexAndKey() {\n const rawData = this.getRawData();\n if (isNil(rawData?.dataSet)) {\n return;\n }\n // 为原始数据, 添加层级属性\n registerDataSetInstanceTransform(rawData.dataSet, 'addVChartProperty', addVChartProperty);\n rawData.transform({\n type: 'addVChartProperty',\n options: {\n beforeCall: initHierarchyKeyMap.bind(this),\n call: addHierarchyDataKey\n }\n });\n }\n\n initMark(): void {\n this._initCirclePackingMark();\n this._initLabelMark();\n }\n\n initMarkStyle(): void {\n this._initCirclePackingMarkStyle();\n this._initLabelMarkStyle();\n }\n\n private _initCirclePackingMark() {\n if (this._circlePacking?.visible === false) {\n return;\n }\n\n const circlePacking = this._createMark(CirclePackingSeries.mark.circlePacking, {\n isSeriesMark: true,\n customShape: this._spec.circlePacking?.customShape\n }) as IArcMark;\n\n this._circlePackingMark = circlePacking;\n this._trigger.registerMark(circlePacking);\n }\n\n private _initCirclePackingMarkStyle() {\n if (isNil(this._circlePackingMark)) {\n return;\n }\n\n this.setMarkStyle(\n this._circlePackingMark,\n {\n x: d => d.x,\n y: d => d.y,\n outerRadius: d => d.radius,\n innerRadius: 0,\n startAngle: 0,\n endAngle: Math.PI * 2,\n fill: this.getColorAttribute(),\n zIndex: d => d.depth\n // Todo 内置根节点和叶节点透明度\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n private _initLabelMark() {\n if (this._label?.visible === false) {\n return;\n }\n const labelMark = this._createMark(CirclePackingSeries.mark.label, {\n isSeriesMark: false\n }) as IArcMark;\n\n this._labelMark = labelMark;\n this._trigger.registerMark(labelMark);\n }\n\n private _initLabelMarkStyle() {\n if (isNil(this._labelMark)) {\n return;\n }\n\n this.setMarkStyle(\n this._labelMark,\n {\n x: d => d.x,\n y: d => d.y,\n text: d => {\n return d.key;\n },\n cursor: 'pointer'\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n getStatisticFields() {\n const fields = super.getStatisticFields();\n return fields.concat([\n {\n key: this._categoryField,\n operations: ['values']\n },\n {\n key: this._valueField,\n operations: ['max', 'min']\n },\n {\n key: DEFAULT_HIERARCHY_DEPTH,\n operations: ['max', 'min', 'values']\n },\n {\n key: DEFAULT_HIERARCHY_ROOT,\n operations: ['values']\n }\n ]);\n }\n\n protected initTooltip() {\n this._tooltipHelper = new CirclePackingTooltipHelper(this);\n this._tooltipHelper.updateTooltipSpec();\n this._circlePackingMark && this._tooltipHelper.activeTriggerSet.mark.add(this._circlePackingMark);\n this._labelMark && this._tooltipHelper.activeTriggerSet.mark.add(this._labelMark);\n }\n\n initAnimation(): void {\n const appearPreset = (this._spec.animationAppear as IStateAnimateSpec)?.preset;\n\n this.getMarksInType(MarkTypeEnum.arc).forEach(mark => {\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('circlePacking')?.(undefined, appearPreset),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n });\n\n this.getMarksInType(MarkTypeEnum.text).forEach(mark => {\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('scaleInOut')?.(),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n });\n }\n\n initEvent() {\n super.initEvent();\n if (this._spec.drill) {\n (this as unknown as IDrillable).bindDrillEvent();\n }\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this._rawData.reRunAllTransform();\n }\n\n // make sure this function fast\n protected _noAnimationDataKey(datum: Datum, index: number): unknown | undefined {\n return undefined;\n }\n\n getActiveMarks(): IMark[] {\n return [this._circlePackingMark];\n }\n}\n\nmixin(CirclePackingSeries, Drillable);\n\nexport const registerCirclePackingSeries = () => {\n Factory.registerSeries(CirclePackingSeries.type, CirclePackingSeries);\n registerArcMark();\n registerTextMark();\n registerScaleInOutAnimation();\n registerCirclePackingAnimation();\n};\n","import type { ICirclePackingSeriesSpec } from '../../series/circle-packing/interface';\nimport { SeriesTypeEnum } from '../../series/interface';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { ICirclePackingChartSpec } from './interface';\n\nexport class CirclePackingChartSpecTransformer<\n T extends ICirclePackingChartSpec = ICirclePackingChartSpec\n> extends BaseChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: ICirclePackingChartSpec) {\n const series: ICirclePackingSeriesSpec = {\n ...super._getDefaultSeriesSpec(spec),\n categoryField: spec.categoryField,\n valueField: spec.valueField,\n seriesField: spec.seriesField,\n\n layoutPadding: spec.layoutPadding,\n label: spec.label,\n circlePacking: spec.circlePacking,\n\n drill: spec.drill,\n drillField: spec.drillField\n };\n const seriesType = SeriesTypeEnum.circlePacking;\n series.type = seriesType;\n series[seriesType] = spec[seriesType];\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n\n /* 处理 series 配置 */\n const defaultSeriesSpec = this._getDefaultSeriesSpec(spec);\n if (!spec.series || spec.series.length === 0) {\n spec.series = [defaultSeriesSpec];\n } else {\n spec.series.forEach(s => {\n if (!this._isValidSeries(s.type)) {\n return;\n }\n Object.keys(defaultSeriesSpec).forEach(k => {\n if (!(k in s)) {\n s[k] = defaultSeriesSpec[k];\n }\n });\n });\n }\n }\n}\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { BaseChart } from '../base/base-chart';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { ICirclePackingChartSpec } from './interface';\nimport { registerCirclePackingSeries } from '../../series/circle-packing/circle-packing';\nimport { Factory } from '../../core/factory';\nimport { CirclePackingChartSpecTransformer } from './circle-packing-transformer';\n\nexport class CirclePackingChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.circlePacking;\n static readonly seriesType: string = SeriesTypeEnum.circlePacking;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = CirclePackingChartSpecTransformer;\n readonly transformerConstructor = CirclePackingChartSpecTransformer;\n readonly type: string = ChartTypeEnum.circlePacking;\n readonly seriesType: string = SeriesTypeEnum.circlePacking;\n}\n\nexport const registerCirclePackingChart = () => {\n registerCirclePackingSeries();\n Factory.registerChart(CirclePackingChart.type, CirclePackingChart);\n};\n","/* Adapted from d3-hierarchy by Mike Bostock\n * https://observablehq.com/collection/@d3/d3-hierarchy\n * Licensed under the ISC\n\n * url: https://github.com/d3/d3-hierarchy/blob/main/src/treemap/slice.js\n * License: https://github.com/d3/d3-hierarchy/blob/main/LICENSE\n * @license\n */\n\nimport type { TreemapNodeElement } from '../interface';\n\n/**\n * split rect in vertical direction\n */\nexport default function (parent: TreemapNodeElement, x0: number, y0: number, x1: number, y1: number) {\n const nodes = parent.children;\n let node;\n let i = -1;\n const n = nodes.length;\n const k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i];\n node.x0 = x0;\n node.x1 = x1;\n node.y0 = y0;\n y0 += node.value * k;\n node.y1 = y0;\n }\n}\n","/* Adapted from d3-hierarchy by Mike Bostock\n * https://observablehq.com/collection/@d3/d3-hierarchy\n * Licensed under the ISC\n\n * url: https://github.com/d3/d3-hierarchy/blob/main/src/treemap/squarify.js\n * License: https://github.com/d3/d3-hierarchy/blob/main/LICENSE\n * @license\n */\n\nimport type { TreemapNodeElement } from '../interface';\nimport treemapDice from './dice';\nimport treemapSlice from './slice';\n\nexport function squarifyRatio(\n ratio: number,\n parent: TreemapNodeElement,\n x0: number,\n y0: number,\n x1: number,\n y1: number\n) {\n const rows = [];\n const nodes = parent.children;\n let row;\n let nodeValue;\n let i0 = 0;\n let i1 = 0;\n const n = nodes.length;\n let dx;\n let dy;\n let value = parent.value;\n let sumValue;\n let minValue;\n let maxValue;\n let newRatio;\n let minRatio;\n let alpha;\n let beta;\n\n while (i0 < n) {\n dx = x1 - x0;\n dy = y1 - y0;\n\n // Find the next non-empty node.\n do {\n sumValue = nodes[i1++].value;\n } while (!sumValue && i1 < n);\n\n minValue = sumValue;\n maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n nodeValue = nodes[i1].value;\n sumValue += nodeValue;\n\n if (nodeValue < minValue) {\n minValue = nodeValue;\n }\n if (nodeValue > maxValue) {\n maxValue = nodeValue;\n }\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) {\n sumValue -= nodeValue;\n break;\n }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n row = Object.assign({}, parent, { value: sumValue, children: nodes.slice(i0, i1) });\n rows.push(row);\n if (dx < dy) {\n treemapDice(row, x0, y0, x1, value ? (y0 += (dy * sumValue) / value) : y1);\n } else {\n treemapSlice(row, x0, y0, value ? (x0 += (dx * sumValue) / value) : x1, y1);\n }\n value -= sumValue;\n i0 = i1;\n }\n\n return rows;\n}\n\nexport const generateSquarify = (ratio: number) => {\n return (parent: TreemapNodeElement, x0: number, y0: number, x1: number, y1: number) => {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n };\n};\n","import type { TreemapOptions, TreemapDatum, TreemapNodeElement, TreemapData } from '../interface';\n// eslint-disable-next-line\nimport { isArray, isFunction, isNumber } from '@visactor/vutils';\nimport binary from './binary';\nimport dice from './dice';\nimport slice from './slice';\nimport sliceDice from './sliceDice';\nimport { generateSquarify } from './squarify';\nimport { field } from '@visactor/vgrammar-util';\nimport { calculateNodeValue } from '../utils';\n\nconst algorithms = { binary, dice, slice, sliceDice };\n\nexport class TreemapLayout {\n private options: TreemapOptions;\n\n private _splitNode: (parent: TreemapNodeElement, x0: number, y0: number, x1: number, y1: number) => void;\n\n private _getNodeKey?: (datum: TreemapDatum) => string;\n\n private _maxDepth: number;\n\n static defaultOpionts: Partial = {\n aspectRatio: (1 + Math.sqrt(5)) / 2,\n gapWidth: 0,\n labelPadding: 0,\n labelPosition: 'top',\n splitType: 'binary',\n minVisibleArea: 10\n };\n constructor(options?: TreemapOptions) {\n this.options = Object.assign({}, TreemapLayout.defaultOpionts, options);\n\n const keyOption = this.options.nodeKey;\n const keyFunc = isFunction(keyOption) ? keyOption : keyOption ? field(keyOption as string) : null;\n\n this._getNodeKey = keyFunc;\n this._splitNode =\n this.options.splitType === 'squarify'\n ? generateSquarify(this.options.aspectRatio)\n : algorithms[this.options.splitType] ?? algorithms.binary;\n this._maxDepth = -1;\n }\n\n private _filterByArea = (node: TreemapNodeElement, ratio: number) => {\n const minArea = this._getMinAreaByDepth(node.depth);\n\n if (minArea > 0 && node.value * ratio < minArea) {\n return false;\n } else if (node.children?.length) {\n const newChildren = node.children.filter(child => {\n return this._filterByArea(child, ratio);\n });\n\n if (!newChildren.length) {\n node.isLeaf = true;\n node.children = null;\n } else if (newChildren.length !== node.children.length) {\n node.children = newChildren;\n }\n }\n\n return true;\n };\n\n layout(\n data: TreemapData,\n config: { x0: number; x1: number; y0: number; y1: number } | { width: number; height: number }\n ) {\n if (!data || !data.length) {\n return [];\n }\n const viewBox =\n 'width' in config\n ? { x0: 0, x1: config.width, y0: 0, y1: config.height, width: config.width, height: config.height }\n : {\n x0: Math.min(config.x0, config.x1),\n x1: Math.max(config.x0, config.x1),\n y0: Math.min(config.y0, config.y1),\n y1: Math.max(config.y0, config.y1),\n width: Math.abs(config.x1 - config.x0),\n height: Math.abs(config.y1 - config.y0)\n };\n\n const nodes: TreemapNodeElement[] = [];\n const res = calculateNodeValue(data, nodes, 0, -1, null, this._getNodeKey);\n this._maxDepth = res.maxDepth;\n\n if (res.sum <= 0) {\n return [];\n }\n\n const root: TreemapNodeElement = {\n flattenIndex: -1,\n maxDepth: -1,\n key: '-1',\n depth: -1,\n index: -1,\n value: res.sum,\n datum: null,\n x0: viewBox.x0,\n x1: viewBox.x1,\n y0: viewBox.y0,\n y1: viewBox.y1,\n children: nodes\n };\n const areaRatio = (viewBox.width * viewBox.height) / res.sum;\n this._filterByArea(root, areaRatio);\n\n this._layout(root);\n\n return root.children ?? [];\n }\n\n private _getMinAreaByDepth = (depth: number) => {\n if (depth < 0) {\n return 0;\n }\n\n return (\n (isArray(this.options.minVisibleArea) ? this.options.minVisibleArea[depth] : this.options.minVisibleArea) ?? 0\n );\n };\n\n private _getGapWidthByDepth = (depth: number) => {\n if (depth < 0) {\n return 0;\n }\n\n return (isArray(this.options.gapWidth) ? this.options.gapWidth[depth] : this.options.gapWidth) ?? 0;\n };\n\n private _getPaddingByDepth = (depth: number) => {\n if (depth < 0) {\n return 0;\n }\n\n return (isArray(this.options.padding) ? this.options.padding[depth] : this.options.padding) ?? 0;\n };\n\n private _getLabelPaddingByDepth = (depth: number) => {\n if (depth < 0) {\n return 0;\n }\n\n return (isArray(this.options.labelPadding) ? this.options.labelPadding[depth] : this.options.labelPadding) ?? 0;\n };\n\n private _filterChildren(node: TreemapNodeElement) {\n const maxDepth = this.options.maxDepth;\n if (isNumber(maxDepth) && maxDepth >= 0 && node.depth >= maxDepth) {\n return false;\n }\n\n const minChildrenVisibleArea = this.options.minChildrenVisibleArea;\n if (\n isNumber(minChildrenVisibleArea) &&\n Math.abs((node.x1 - node.x0) * (node.y1 - node.y0)) < minChildrenVisibleArea\n ) {\n return false;\n }\n\n const minChildrenVisibleSize = this.options.minChildrenVisibleSize;\n if (\n isNumber(minChildrenVisibleSize) &&\n (Math.abs(node.x1 - node.x0) < minChildrenVisibleSize || Math.abs(node.y1 - node.y0) < minChildrenVisibleSize)\n ) {\n return false;\n }\n\n return true;\n }\n\n private _layout(parent: TreemapNodeElement) {\n if (!this._filterChildren(parent)) {\n parent.children = null;\n parent.isLeaf = true;\n }\n\n this._layoutNode(parent);\n\n if (parent.children?.length) {\n parent.children.forEach(child => {\n if (child?.children?.length) {\n this._layout(child);\n } else {\n this._layoutNode(child);\n }\n });\n }\n }\n\n private _layoutNode = (parent: TreemapNodeElement) => {\n const gapWidth = this._getGapWidthByDepth(parent.depth);\n let x0 = parent.x0;\n let y0 = parent.y0;\n let x1 = parent.x1;\n let y1 = parent.y1;\n\n parent.maxDepth = this._maxDepth;\n\n if (gapWidth > 0) {\n x0 += gapWidth / 2;\n x1 -= gapWidth / 2;\n y0 += gapWidth / 2;\n y1 -= gapWidth / 2;\n\n if (x0 > x1) {\n x0 = (x0 + x1) / 2;\n x1 = x0;\n }\n\n if (y0 > y1) {\n y0 = (y0 + y1) / 2;\n y1 = y0;\n }\n\n parent.x0 = x0;\n parent.x1 = x1;\n parent.y0 = y0;\n parent.y1 = y1;\n }\n\n if (parent.children) {\n const labelPadding = this._getLabelPaddingByDepth(parent.depth);\n const padding = this._getPaddingByDepth(parent.depth);\n\n if (padding > 0) {\n if (padding < Math.min(x1 - x0, y1 - y0) / 2) {\n // has enough space for padding\n y0 += padding;\n y1 -= padding;\n x0 += padding;\n x1 -= padding;\n }\n }\n\n if (labelPadding > 0) {\n if (this.options.labelPosition === 'top' && y0 + labelPadding < y1) {\n parent.labelRect = { x0: x0, y0: y0, x1, y1: y0 + labelPadding };\n y0 += labelPadding;\n } else if (this.options.labelPosition === 'bottom' && y1 - labelPadding > y0) {\n parent.labelRect = { x0: x0, y0: y1 - labelPadding, x1, y1: y1 };\n y1 -= labelPadding;\n } else if (this.options.labelPosition === 'left' && x0 + labelPadding < x1) {\n parent.labelRect = { x0: x0, y0: y0, x1: x0 + labelPadding, y1 };\n x0 += labelPadding;\n } else if (this.options.labelPosition === 'right' && x1 - labelPadding > x0) {\n parent.labelRect = { x0: x1 - labelPadding, y0: y0, x1: x1, y1 };\n x1 -= labelPadding;\n }\n }\n\n const childGapWidth = this._getGapWidthByDepth(parent.depth + 1);\n\n if (childGapWidth > 0) {\n x0 -= childGapWidth / 2;\n x1 += childGapWidth / 2;\n y0 -= childGapWidth / 2;\n y1 += childGapWidth / 2;\n }\n\n this._splitNode(parent, x0, y0, x1, y1);\n }\n };\n}\n","/* Adapted from d3-hierarchy by Mike Bostock\n * https://observablehq.com/collection/@d3/d3-hierarchy\n * Licensed under the ISC\n\n * url: https://github.com/d3/d3-hierarchy/blob/main/src/treemap/binary.js\n * License: https://github.com/d3/d3-hierarchy/blob/main/LICENSE\n * @license\n */\n\nimport type { TreemapNodeElement } from '../interface';\n\nexport default function (parent: TreemapNodeElement, x0: number, y0: number, x1: number, y1: number) {\n const nodes = parent.children;\n const n = nodes.length;\n let sum = 0;\n const sums = new Array(n + 1);\n sums[0] = 0;\n\n for (let i = 0; i < n; ++i) {\n sum += nodes[i].value;\n sums[i + 1] = sum;\n }\n\n const partition = (i: number, j: number, value: number, x0: number, y0: number, x1: number, y1: number) => {\n if (i >= j - 1) {\n const node = nodes[i];\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n return;\n }\n\n const valueOffset = sums[i];\n const valueTarget = value / 2 + valueOffset;\n let k = i + 1;\n let hi = j - 1;\n\n while (k < hi) {\n const mid = (k + hi) >>> 1;\n if (sums[mid] < valueTarget) {\n k = mid + 1;\n } else {\n hi = mid;\n }\n }\n\n if (valueTarget - sums[k - 1] < sums[k] - valueTarget && i + 1 < k) {\n --k;\n }\n\n const valueLeft = sums[k] - valueOffset;\n const valueRight = value - valueLeft;\n\n if (x1 - x0 > y1 - y0) {\n const xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n const yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n };\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n}\n","/* Adapted from d3-hierarchy by Mike Bostock\n * https://observablehq.com/collection/@d3/d3-hierarchy\n * Licensed under the ISC\n\n * url: https://github.com/d3/d3-hierarchy/blob/main/src/treemap/sliceDice.js\n * License: https://github.com/d3/d3-hierarchy/blob/main/LICENSE\n * @license\n */\n\n/**\n * split rect in vertical, horizontal direction alternatively\n */\nimport dice from './dice';\nimport type { TreemapNodeElement } from '../interface';\nimport slice from './slice';\n\nexport default function (parent: TreemapNodeElement, x0: number, y0: number, x1: number, y1: number) {\n (parent.depth % 2 === 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","import type { TreemapOptions } from '@visactor/vgrammar-hierarchy';\nimport { TreemapLayout } from '@visactor/vgrammar-hierarchy';\nimport type { Datum } from '../../typings';\n\nexport interface ITreemapOpt extends TreemapOptions {\n range: () => { x0: number; x1: number; y0: number; y1: number };\n}\n\nexport const treemap = (data: Array, op: ITreemapOpt) => {\n if (!data || !op?.range) {\n return data;\n }\n\n const range = op.range();\n\n if (range.x1 - range.x0 === 0 || range.y1 - range.y0 === 0) {\n return data;\n }\n\n const layout = new TreemapLayout(op);\n return layout.layout(data, range);\n};\n","import { isFunction } from '@visactor/vutils';\nimport { dimensionStatistics } from './dimension-statistics';\nimport type { IStatisticsOption } from './dimension-statistics';\nimport type { DataView } from '@visactor/vdataset';\nimport { flatten } from './flatten';\nimport type { Datum } from '../../typings';\n\n/**\n * 层次聚合统计主要用于处理层次数据(诸如统计平均值,求和等),并返回计算后的数据结果\n * @param data\n * @param options\n * @returns\n */\nexport const hierarchyDimensionStatistics = (data: Array, op: IStatisticsOption) => {\n let result = {};\n let fields = op.fields;\n if (isFunction(fields)) {\n fields = fields();\n }\n if (!fields?.length || !data?.length) {\n return result;\n }\n\n if (!data[0].latestData) {\n return result;\n }\n\n const hierarchyData = data[0].latestData as Datum[];\n const flatData = flatten(hierarchyData);\n result = dimensionStatistics([{ latestData: flatData } as any], op);\n return result;\n};\n","import { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\n\nexport class TreemapTooltipHelper extends BaseSeriesTooltipHelper {\n get defaultShapeType(): string {\n return 'square';\n }\n\n contentKeyCallback = (datum: any) => {\n return datum?.[this.series.getDimensionField()[0]];\n };\n}\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core/factory';\n\nexport type TreemapMark = 'leaf' | 'nonLeaf';\n\nexport type TreemapAppearPreset = 'growIn' | 'fadeIn';\n\nexport const treemapPresetAnimation = (preset: TreemapAppearPreset): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'growIn': {\n return {\n type: 'growCenterIn'\n };\n }\n default: {\n return {\n type: 'growCenterIn'\n };\n }\n }\n};\nexport const registerTreemapAnimation = () => {\n Factory.registerAnimation('treemap', (params: unknown, preset: TreemapAppearPreset) => {\n return {\n appear: treemapPresetAnimation(preset),\n enter: { type: 'growCenterIn' },\n exit: { type: 'growCenterOut' },\n disappear: { type: 'growCenterOut' }\n };\n });\n};\n","import type { ISeriesSpec } from '../../typings';\nimport { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { ITreemapSeriesSpec, ITreemapSeriesTheme } from './interface';\n\nexport class TreemapSeriesSpecTransformer<\n T extends ISeriesSpec = Omit,\n K extends ITreemapSeriesTheme = ITreemapSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.nonLeaf, 'nonLeafLabel' as any, 'initNonLeafLabelMarkStyle' as any);\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.leaf);\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { AttributeLevel, DEFAULT_DATA_KEY, VGRAMMAR_HOOK_EVENT } from '../../constant';\nimport type { IMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type { IRectMark } from '../../mark/rect';\nimport type { Datum, IRectMarkSpec, ITextMarkSpec } from '../../typings';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesTypeEnum } from '../interface/type';\nimport type { ITreemapSeriesSpec } from './interface';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport type { ITreemapOpt } from '../../data/transforms/treemap';\nimport { treemap } from '../../data/transforms/treemap';\nimport { flatten } from '../../data/transforms/flatten';\nimport type { IBounds } from '@visactor/vutils';\nimport { isValidNumber, Bounds, Matrix, mixin } from '@visactor/vutils';\nimport type { PanEventParam, ZoomEventParam } from '../../event/interface';\nimport type { TreemapNodeElement } from '@visactor/vgrammar-hierarchy';\nimport { DataView } from '@visactor/vdataset';\nimport { hierarchyDimensionStatistics } from '../../data/transforms/hierarchy-dimension-statistics';\nimport { addVChartProperty } from '../../data/transforms/add-property';\nimport { addHierarchyDataKey, initHierarchyKeyMap } from '../../data/transforms/data-key';\nimport { DEFAULT_HIERARCHY_DEPTH, DEFAULT_HIERARCHY_ROOT } from '../../constant/hierarchy';\nimport { TreemapTooltipHelper } from './tooltip-helper';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport type { TransformSpec } from '@visactor/vgrammar-core';\nimport type { IZoomable } from '../../interaction/zoom/zoomable';\nimport { Zoomable } from '../../interaction/zoom/zoomable';\nimport type { IDrillable } from '../../interaction/drill/drillable';\nimport { Drillable } from '../../interaction/drill/drillable';\nimport { registerRectMark } from '../../mark/rect';\nimport { registerTextMark } from '../../mark/text';\nimport { treemapSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { registerTreemapAnimation } from './animation';\nimport { TransformLevel } from '../../data/initialize';\nimport type { ILabelMark } from '../../mark/label';\nimport { TreemapSeriesSpecTransformer } from './treemap-transform';\n\nexport class TreemapSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.treemap;\n type = SeriesTypeEnum.treemap;\n\n static readonly mark: SeriesMarkMap = treemapSeriesMark;\n\n static readonly transformerConstructor = TreemapSeriesSpecTransformer;\n readonly transformerConstructor = TreemapSeriesSpecTransformer;\n\n private _leafMark: IRectMark;\n private _nonLeafMark: IRectMark;\n private _labelMark: ILabelMark;\n private _nonLeafLabelMark: ILabelMark;\n\n protected declare _spec: ITreemapSeriesSpec;\n\n protected _categoryField!: string;\n getCategoryField() {\n return this._categoryField;\n }\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n protected _valueField!: string;\n getValueField() {\n return this._valueField;\n }\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n private _maxDepth: number;\n\n // global scale and translate matrix\n private _matrix: Matrix;\n\n // range for treemap layout, change while zoom and pan\n private _viewBox: IBounds = new Bounds();\n\n private _enableAnimationHook = this.enableMarkAnimation.bind(this);\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this.setCategoryField(this._spec.categoryField);\n this.setValueField(this._spec.valueField);\n this.setSeriesField(this._spec.seriesField ?? DEFAULT_HIERARCHY_ROOT);\n\n if (this._spec.roam) {\n (this as unknown as IZoomable).initZoomable(this.event, this._option.mode);\n this._matrix = new Matrix();\n }\n if (this._spec.drill) {\n (this as unknown as IDrillable).initDrillable({\n event: this.event,\n mode: this._option.mode,\n drillField: () => this._spec.drillField ?? this._categoryField ?? DEFAULT_DATA_KEY,\n getRawData: () => this.getRawData()\n });\n }\n\n if (isValidNumber(this._spec.maxDepth)) {\n this._maxDepth = this._spec.maxDepth - 1;\n }\n }\n\n initData() {\n super.initData();\n // 矩形树图中原始数据为层次结果,图元数据为平坦化后的结构,具体逻辑如下:\n // spec.data => rawData(hierarchy) => viewDataFilter => treemap transform => flatten transform => viewData\n if (this.getViewData()) {\n // 对原始数据进行上卷下钻筛选\n if (this._spec.drill) {\n (this as unknown as IDrillable).initDrillableData(this._dataSet);\n }\n\n registerDataSetInstanceTransform(this._dataSet, 'treemap', treemap);\n registerDataSetInstanceTransform(this._dataSet, 'flatten', flatten);\n\n this.addViewDataFilter({\n type: 'treemap',\n options: {\n range: () => {\n return {\n x0: this._viewBox.x1,\n x1: this._viewBox.x2,\n y0: this._viewBox.y1,\n y1: this._viewBox.y2\n };\n },\n maxDepth: this._maxDepth,\n gapWidth: this._spec.gapWidth,\n padding: this._spec.nodePadding,\n splitType: this._spec.splitType,\n aspectRatio: this._spec.aspectRatio,\n labelPadding: this._spec.nonLeafLabel?.visible ? this._spec.nonLeafLabel?.padding : 0,\n labelPosition: this._spec.nonLeafLabel?.position,\n minVisibleArea: this._spec.minVisibleArea ?? 10,\n minChildrenVisibleArea: this._spec.minChildrenVisibleArea,\n minChildrenVisibleSize: this._spec.minChildrenVisibleSize\n } as ITreemapOpt,\n level: TransformLevel.treemapFilter\n });\n\n this.addViewDataFilter({\n type: 'flatten',\n options: {\n callback: (node: TreemapNodeElement) => {\n if (node.datum) {\n const nodeData = node.datum[node.depth];\n return { ...node, ...nodeData };\n }\n return node;\n }\n },\n level: TransformLevel.treemapFlatten\n });\n }\n }\n\n protected _addDataIndexAndKey() {\n if (this._rawData?.dataSet) {\n registerDataSetInstanceTransform(this._rawData.dataSet, 'addVChartProperty', addVChartProperty);\n this._rawData.transform(\n {\n type: 'addVChartProperty',\n options: {\n beforeCall: initHierarchyKeyMap.bind(this),\n call: addHierarchyDataKey\n }\n }\n // rawDataStatistic 需要统计 addHierarchyDataKey 的一些字段,所以必须要运行一下\n // false\n );\n }\n }\n\n getRawDataStatisticsByField(field: string, isNumeric?: boolean) {\n if (!this._rawDataStatistics) {\n const rawDataName = `${this.type}_${this.id}_rawDataStatic`;\n this._rawDataStatistics = this._createHierarchyDataStatistics(rawDataName, [this._rawData]);\n this._rawData.target.removeListener('change', this._rawDataStatistics.reRunAllTransform);\n this._rawDataStatistics.reRunAllTransform();\n }\n\n return this._rawDataStatistics.latestData?.[field];\n }\n\n protected _createHierarchyDataStatistics(dataName: string, rawData: DataView[]) {\n registerDataSetInstanceTransform(this._dataSet, 'hierarchyDimensionStatistics', hierarchyDimensionStatistics);\n registerDataSetInstanceTransform(this._dataSet, 'flatten', flatten);\n const data = new DataView(this._dataSet, { name: dataName });\n data.parse(rawData, {\n type: 'dataview'\n });\n data.transform(\n {\n type: 'hierarchyDimensionStatistics',\n options: {\n fields: () => {\n const fields = this.getStatisticFields();\n if (this._seriesField && this._seriesField !== this._categoryField) {\n fields.push({\n key: this._seriesField,\n operations: ['values']\n });\n }\n return fields;\n }\n }\n },\n false\n );\n return data;\n }\n\n getStatisticFields() {\n const fields = super.getStatisticFields();\n return fields.concat([\n {\n key: this._categoryField,\n operations: ['values']\n },\n {\n key: this._valueField,\n operations: ['max', 'min']\n },\n {\n key: DEFAULT_HIERARCHY_DEPTH,\n operations: ['max', 'min', 'values']\n },\n {\n key: DEFAULT_HIERARCHY_ROOT,\n operations: ['values']\n }\n ]);\n }\n\n initMark() {\n const nonLeafMark = this._createMark(TreemapSeries.mark.nonLeaf, {\n isSeriesMark: true,\n customShape: this._spec.nonLeaf?.customShape\n });\n if (nonLeafMark) {\n nonLeafMark.setTransform([\n {\n type: 'filter',\n callback: (datum: TreemapNodeElement) => {\n return !this._shouldFilterElement(datum, 'nonLeaf');\n }\n } as TransformSpec\n ]);\n this._trigger.registerMark(nonLeafMark);\n this._nonLeafMark = nonLeafMark;\n }\n\n const leafMark = this._createMark(TreemapSeries.mark.leaf, {\n isSeriesMark: true,\n customShape: this._spec.leaf?.customShape\n });\n if (leafMark) {\n leafMark.setTransform([\n {\n type: 'filter',\n callback: (datum: TreemapNodeElement) => {\n return !this._shouldFilterElement(datum, 'leaf');\n }\n } as TransformSpec\n ]);\n this._leafMark = leafMark;\n this._trigger.registerMark(leafMark);\n }\n }\n\n initMarkStyle() {\n this._initLeafMarkStyle();\n this._initNonLeafMarkStyle();\n }\n\n protected _initLeafMarkStyle() {\n if (!this._leafMark) {\n return;\n }\n\n this.setMarkStyle(\n this._leafMark,\n {\n x: datum => datum.x0,\n y: datum => datum.y0,\n x1: datum => datum.x1,\n y1: datum => datum.y1,\n fill: this.getColorAttribute()\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n protected _initNonLeafMarkStyle() {\n if (!this._nonLeafMark) {\n return;\n }\n this.setMarkStyle(\n this._nonLeafMark,\n {\n x: datum => datum.x0,\n y: datum => datum.y0,\n x1: datum => datum.x1,\n y1: datum => datum.y1,\n fill: this.getColorAttribute()\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n initLabelMarkStyle(labelMark: ILabelMark) {\n if (!labelMark) {\n return;\n }\n this._labelMark = labelMark;\n labelMark.setRule('treemap');\n this.setMarkStyle(\n labelMark,\n {\n x: datum => (datum.x0 + datum.x1) / 2,\n y: datum => (datum.y0 + datum.y1) / 2,\n text: datum => {\n return datum.datum[datum.depth]?.[this.getDimensionField()[0]];\n },\n maxLineWidth: (datum: Datum) => {\n return datum.x1 === datum.x0 ? Number.MIN_VALUE : datum.x1 - datum.x0;\n }\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n protected initNonLeafLabelMarkStyle(labelMark: ILabelMark) {\n if (!labelMark) {\n return;\n }\n this._nonLeafLabelMark = labelMark;\n labelMark.setRule('treemap');\n this.setMarkStyle(\n labelMark,\n {\n x: datum => {\n if (datum.labelRect) {\n return (datum.labelRect.x0 + datum.labelRect.x1) / 2;\n }\n return (datum.x0 + datum.x1) / 2;\n },\n y: datum => {\n if (datum.labelRect) {\n return (datum.labelRect.y0 + datum.labelRect.y1) / 2;\n }\n return (datum.y0 + datum.y1) / 2;\n },\n text: datum => {\n return datum.datum[datum.depth]?.[this.getDimensionField()[0]];\n },\n maxLineWidth: (datum: any) => {\n return datum.x1 === datum.x0 ? Number.MIN_VALUE : datum.x1 - datum.x0;\n }\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n initAnimation(): void {\n this.getMarksInType(MarkTypeEnum.rect).forEach(mark => {\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('treemap')?.(),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n });\n\n this.getMarksInType(MarkTypeEnum.text).forEach(mark => {\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n });\n }\n\n protected initEvent(): void {\n super.initEvent();\n // Roam\n if (this._spec.roam) {\n // 拖拽事件\n (this as unknown as IZoomable).initDragEventOfSeries(this);\n this.event.on('panmove', e => {\n this.handlePan(e as PanEventParam);\n });\n // 缩放事件\n (this as unknown as IZoomable).initZoomEventOfSeries(this);\n this.event.on('zoom', e => {\n this.handleZoom(e as ZoomEventParam);\n });\n }\n // Drill\n if (this._spec.drill) {\n (this as unknown as IDrillable).bindDrillEvent();\n }\n }\n\n protected _getDataIdKey() {\n return 'key';\n }\n\n protected initTooltip() {\n this._tooltipHelper = new TreemapTooltipHelper(this);\n this._leafMark && this._tooltipHelper.activeTriggerSet.mark.add(this._leafMark);\n this._nonLeafMark && this._tooltipHelper.activeTriggerSet.mark.add(this._nonLeafMark);\n }\n\n private _shouldFilterElement(datum: TreemapNodeElement, nodeType: 'leaf' | 'nonLeaf') {\n const isLeaf = datum.isLeaf;\n // 过滤掉非需要的节点\n return nodeType === 'leaf' ? !isLeaf : isLeaf;\n }\n\n handlePan(event: PanEventParam) {\n const { delta } = event;\n if (delta[0] === 0 && delta[1] === 0) {\n return;\n }\n this._matrix.reset();\n this._matrix.translate(delta[0], delta[1]);\n const { a, b, c, d, e, f } = this._matrix;\n this._matrix.multiply(a, b, c, d, e, f);\n\n this._viewBox.transformWithMatrix(this._matrix);\n\n this.reFilterViewData();\n }\n\n handleZoom(event: ZoomEventParam) {\n const { scale, scaleCenter } = event;\n if (scale === 1) {\n return;\n }\n\n this._matrix.reset();\n const { x, y } = scaleCenter;\n this._matrix.translate(x, y);\n this._matrix.scale(scale, scale);\n this._matrix.translate(-x, -y);\n const { a, b, c, d, e, f } = this._matrix;\n this._matrix.multiply(a, b, c, d, e, f);\n // 缩放过程中会有新增/减少的element,对应执行enter/exit动画,会使得缩放交互效果体验很差\n // 这里在缩放过程中先关闭所有动画\n this.disableMarkAnimation();\n this.event.on(VGRAMMAR_HOOK_EVENT.AFTER_DO_RENDER, this._enableAnimationHook);\n this._viewBox.transformWithMatrix(this._matrix);\n this.reFilterViewData();\n }\n\n getDimensionField() {\n return [this._categoryField];\n }\n\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this._viewBox.set(0, 0, this.getLayoutRect().width, this.getLayoutRect().height);\n this._rawData.reRunAllTransform();\n }\n\n protected enableMarkAnimation() {\n this.getMarks().forEach(mark => {\n mark.getProduct().animate?.enable();\n });\n [this._labelMark, this._nonLeafLabelMark].forEach(m => {\n if (m && m.getComponent()) {\n m.getComponent().getProduct().getGroupGraphicItem().enableAnimation();\n }\n });\n // 在所有动画执行之后关闭动画\n this.event.off(VGRAMMAR_HOOK_EVENT.AFTER_DO_RENDER, this._enableAnimationHook);\n }\n\n protected disableMarkAnimation() {\n this.getMarks().forEach(mark => {\n mark.getProduct().animate?.disable();\n });\n [this._labelMark, this._nonLeafLabelMark].forEach(m => {\n if (m && m.getComponent()) {\n m.getComponent().getProduct().getGroupGraphicItem().disableAnimation();\n }\n });\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._nonLeafMark, this._leafMark];\n }\n}\n\nmixin(TreemapSeries, Drillable);\nmixin(TreemapSeries, Zoomable);\n\nexport const registerTreemapSeries = () => {\n registerRectMark();\n registerTextMark();\n registerTreemapAnimation();\n registerFadeInOutAnimation();\n Factory.registerSeries(TreemapSeries.type, TreemapSeries);\n};\n","import type { ISeries } from '../../series';\nimport type { AdaptiveSpec } from '../../typings';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { ITreemapChartSpec } from './interface';\n\nexport class TreemapChartSpecTransformer<\n T extends ITreemapChartSpec = ITreemapChartSpec\n> extends BaseChartSpecTransformer> {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series: any = {\n ...super._getDefaultSeriesSpec(spec),\n categoryField: spec.categoryField,\n valueField: spec.valueField,\n\n seriesField: spec.seriesField,\n\n aspectRatio: spec.aspectRatio,\n splitType: spec.splitType,\n maxDepth: spec.maxDepth,\n gapWidth: spec.gapWidth,\n nodePadding: spec.nodePadding,\n minVisibleArea: spec.minVisibleArea,\n minChildrenVisibleArea: spec.minChildrenVisibleArea,\n minChildrenVisibleSize: spec.minChildrenVisibleSize,\n\n roam: spec.roam,\n drill: spec.drill,\n drillField: spec.drillField,\n\n leaf: spec.leaf,\n nonLeaf: spec.nonLeaf,\n nonLeafLabel: spec.nonLeafLabel\n };\n const seriesType = this.seriesType;\n if (seriesType) {\n series.type = seriesType;\n series[seriesType] = spec[seriesType];\n }\n\n return series;\n }\n\n transformSpec(spec: any): void {\n super.transformSpec(spec);\n\n /* 处理 series 配置 */\n const defaultSeriesSpec = this._getDefaultSeriesSpec(spec);\n if (!spec.series || spec.series.length === 0) {\n spec.series = [defaultSeriesSpec];\n } else {\n spec.series.forEach((s: ISeries) => {\n if (!this._isValidSeries(s.type)) {\n return;\n }\n Object.keys(defaultSeriesSpec).forEach(k => {\n if (!(k in s)) {\n s[k] = defaultSeriesSpec[k];\n }\n });\n });\n }\n }\n}\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { BaseChart } from '../base/base-chart';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { ITreemapChartSpec } from './interface';\nimport { registerTreemapSeries } from '../../series/treemap/treemap';\nimport { Factory } from '../../core/factory';\nimport type { AdaptiveSpec } from '../../typings';\nimport { TreemapChartSpecTransformer } from './treemap-transformer';\n\nexport class TreemapChart extends BaseChart<\n AdaptiveSpec\n> {\n static readonly type: string = ChartTypeEnum.treemap;\n static readonly seriesType: string = SeriesTypeEnum.treemap;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = TreemapChartSpecTransformer;\n readonly transformerConstructor = TreemapChartSpecTransformer;\n readonly type: string = ChartTypeEnum.treemap;\n readonly seriesType: string = SeriesTypeEnum.treemap;\n}\n\nexport const registerTreemapChart = () => {\n registerTreemapSeries();\n Factory.registerChart(TreemapChart.type, TreemapChart);\n};\n","// import { isNil, precisionAdd } from '@visactor/vutils';\nimport { isNil, precisionAdd } from '@visactor/vutils';\n\nimport type { DataView } from '@visactor/vdataset';\nimport type { IWaterfallSeriesSpec } from '../../series/waterfall/interface';\nimport type { Datum } from '../../typings';\nimport { WaterfallDefaultSeriesField } from '../../constant/waterfall';\n\nexport interface IWaterfallOpt {\n indexField: string;\n valueField: string;\n seriesField?: string;\n startAs: string;\n endAs: string;\n total: IWaterfallSeriesSpec['total'];\n seriesFieldName: {\n total: string;\n increase: string;\n decrease: string;\n };\n groupData: () => DataView;\n}\n\nexport const waterfall = (lastData: Array, op: IWaterfallOpt) => {\n if (!lastData || lastData.length === 0) {\n return lastData;\n }\n const { indexField, valueField, startAs, endAs, total: totalSpec, seriesField, seriesFieldName, groupData } = op;\n const totalData: {\n start: number;\n end: number;\n lastIndex: string;\n lastEnd: number;\n index: string;\n isTotal: boolean;\n }[] = [];\n const { dimensionValues, dimensionData } = groupData().latestData as {\n dimensionValues: { [key in string]: Set };\n dimensionData: { [key in string]: Datum[] };\n };\n const indexValues = Array.from(dimensionValues[indexField]);\n let temp: { start: number; end: number; lastIndex: string } = { start: 0, end: 0, lastIndex: null };\n indexValues.forEach((key, index) => {\n const total = {\n start: temp.end,\n end: temp.end,\n lastIndex: temp.lastIndex,\n lastEnd: temp.end,\n index: key,\n isTotal: false\n };\n\n const indexData = dimensionData[key];\n indexData.forEach(d => {\n let isTotalTag = false;\n if (!totalSpec || totalSpec.type === 'end') {\n if (index === indexValues.length - 1) {\n total.start = 0;\n d[startAs] = total.start;\n d[endAs] = total.end;\n isTotalTag = true;\n }\n } else if (totalSpec.type === 'field' || totalSpec.type === 'custom') {\n const tag = d[totalSpec.tagField];\n if (tag) {\n isTotalTag = true;\n if (totalSpec.type === 'custom') {\n const { start, end } = totalSpec.product(d, temp);\n d[startAs] = start;\n d[endAs] = end;\n total.end = end;\n total.start = start;\n } else {\n let start = 0;\n let end = total.end;\n // 如果有设置count, valueField 和 startField 无效\n if (totalSpec.collectCountField && !isNil(d[totalSpec.collectCountField])) {\n const startIndex = totalData.length - +d[totalSpec.collectCountField];\n const endIndex = totalData.length - 1;\n if (startIndex < 0) {\n console.warn('total.collectCountField error');\n } else {\n start = totalData[startIndex].start;\n }\n if (endIndex < 0) {\n console.warn('total.collectCountField error');\n } else {\n end = totalData[endIndex].end;\n }\n } else {\n if (totalSpec.startField && !isNil(d[totalSpec.startField])) {\n start = +d[totalSpec.startField];\n }\n if (totalSpec.valueField && !isNil(d[totalSpec.valueField])) {\n end = precisionAdd(start, +d[totalSpec.valueField]);\n }\n }\n d[startAs] = start;\n d[endAs] = end;\n d[valueField] = end - start;\n total.start = start;\n total.end = end;\n }\n }\n }\n if (!isTotalTag) {\n d[startAs] = +total.end;\n d[endAs] = precisionAdd(d[startAs], +d[valueField]);\n total.end = d[endAs];\n }\n total.isTotal = isTotalTag;\n\n if (isNil(seriesField) || seriesField === WaterfallDefaultSeriesField) {\n if (isTotalTag) {\n d[WaterfallDefaultSeriesField] = seriesFieldName.total;\n } else {\n d[WaterfallDefaultSeriesField] = +d[valueField] >= 0 ? seriesFieldName.increase : seriesFieldName.decrease;\n }\n }\n });\n temp = { ...total, lastIndex: key };\n totalData.push(total);\n });\n return totalData;\n};\n\nexport interface IWaterfallFillEndOpt {\n indexField: string;\n valueField: string;\n seriesField?: string;\n total: IWaterfallSeriesSpec['total'];\n}\n\nexport const waterfallFillTotal = (data: Array, op: IWaterfallFillEndOpt) => {\n if (!data) {\n return data;\n }\n const { indexField, valueField, total, seriesField } = op;\n const totalData = {\n [indexField]: total?.text || 'total',\n [valueField]: data.reduce((pre, cur) => precisionAdd(pre, +cur[valueField]), 0)\n };\n if (seriesField) {\n totalData[seriesField] = 'total';\n }\n data.push(totalData);\n return data;\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport type { IBarAnimationParams, BarAppearPreset } from '../bar/animation';\nimport { barGrowIn, barGrowOut } from '../bar/animation';\nimport { Factory } from '../../core/factory';\n\nexport type WaterfallAppearPreset = BarAppearPreset;\n\nconst Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nconst Appear_ScaleIn: IAnimationTypeConfig = {\n type: 'growCenterIn'\n};\n\nexport function waterfallPresetAnimation(params: IBarAnimationParams, preset: BarAppearPreset): IAnimationTypeConfig {\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n case 'scaleIn':\n return Appear_ScaleIn;\n default:\n return barGrowIn(params, false);\n }\n}\n\nexport const registerWaterfallAnimation = () => {\n Factory.registerAnimation('waterfall', (params: IBarAnimationParams, preset: WaterfallAppearPreset) => {\n return {\n appear: waterfallPresetAnimation(params, preset),\n enter: barGrowIn(params, false),\n exit: barGrowOut(params, false),\n disappear: barGrowOut(params, false)\n };\n });\n};\n","import type { Datum } from '@visactor/vgrammar-core';\nimport type { DataView } from '@visactor/vdataset';\n\nexport interface IDimensionTreeOpt {\n fields: string[];\n}\n\nexport const dimensionTree = (data: Array, op: IDimensionTreeOpt) => {\n if (!op.fields) {\n return data;\n }\n const dataCollect = data\n .map(d => {\n return d.latestData;\n })\n .flat();\n const dimensionValues = {};\n return {\n dimensionValues,\n dimensionData: groups(dataCollect, op.fields, dimensionValues)\n };\n};\n\nfunction groups(data: Datum[], fields: string[], dimensionValues: object): any {\n if (fields.length === 0) {\n return data;\n }\n const first = fields[0];\n const _rest = fields.slice(1);\n dimensionValues[first] = new Set();\n\n const grouped = groupBy(data, first, dimensionValues[first]);\n if (_rest.length) {\n return mapValues(grouped, (value, key) => {\n return groups(value, _rest, dimensionValues);\n });\n }\n\n return grouped;\n}\n\nfunction groupBy(data: Datum[], field: string, set: Set) {\n const groups = {};\n\n data.forEach(d => {\n const key = d[field];\n if (!groups[key]) {\n groups[key] = [];\n set.add(key);\n }\n groups[key].push(d);\n });\n return groups;\n}\n\nexport function mapValues(target: object, fn: (value: any, key: string) => any) {\n return Object.keys(target).reduce((result, key) => {\n result[key] = fn(target[key], key);\n return result;\n }, {});\n}\n\nexport function findDataInFields(data: any, fields: string[]): any {\n if (fields.length === 0) {\n return data;\n }\n const first = fields[0];\n const _rest = fields.slice(1);\n if (data[first] === undefined) {\n return undefined;\n }\n return findDataInFields(data[first], _rest);\n}\n\n/**\n *\n const data = [\n { type: \"circle\", color: \"red\", x: 10, y:100 },\n { type: \"circle\", color: \"blue\", x: 10, y:100 },\n { type: \"rect\", color: \"red\", x: 10, y:100 },\n { type: \"rect\", color: \"blue\", x: 10, y:100 },\n ]\n\n groups(data, [\"circle\", \"color\"])\n\n =====>\n {\n circle: {\n red:[{ type: \"circle\", color: \"red\", x: 10, y:100 }],\n blue:[{ type: \"circle\", color: \"blue\", x: 10, y:100 }]\n },\n rect:{\n red:[{ type: \"rect\", color: \"red\", x: 10, y:100 }],\n blue:[{ type: \"rect\", color: \"blue\", x: 10, y:100 }]\n }\n }\n */\n","import { DataSet, DataView } from '@visactor/vdataset';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { dimensionTree } from '../../data/transforms/dimension-data';\nimport type { IGroup } from '../../typings';\n\nexport class Group implements IGroup {\n protected _fields: string[] = [];\n get fields() {\n return this._fields;\n }\n\n protected _groupData?: DataView;\n get groupData() {\n return this._groupData;\n }\n\n constructor(fields: string[]) {\n this._fields = fields;\n }\n\n initData(viewData: DataView, dataSet: DataSet) {\n const dataName = viewData.name;\n const groupData = new DataView(dataSet instanceof DataSet ? dataSet : viewData.dataSet);\n groupData.name = dataName;\n groupData.parse([viewData], {\n type: 'dataview'\n });\n registerDataSetInstanceTransform(dataSet, 'dimensionTree', dimensionTree);\n groupData.transform(\n {\n type: 'dimensionTree',\n options: {\n fields: this._fields\n }\n },\n false\n );\n groupData.target.addListener('change', this.groupDataUpdate.bind(this));\n this._groupData = groupData;\n }\n\n groupDataUpdate() {\n // do nothing\n }\n\n getGroupValueInField(field: string) {\n const values = this.groupData?.latestData?.dimensionValues?.[field];\n return values ? Array.from(values) : [];\n }\n}\n","import { BarSeriesSpecTransformer } from '../bar/bar-transformer';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IWaterfallSeriesSpec, IWaterfallSeriesTheme } from './interface';\n\nexport class WaterfallSeriesSpecTransformer<\n T extends IWaterfallSeriesSpec = IWaterfallSeriesSpec,\n K extends IWaterfallSeriesTheme = IWaterfallSeriesTheme\n> extends BarSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.bar);\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.bar, 'stackLabel');\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport type { IRuleMark } from '../../mark/rule';\nimport { isNil, precisionSub } from '@visactor/vutils';\nimport {\n AttributeLevel,\n PREFIX,\n STACK_FIELD_END,\n STACK_FIELD_START,\n WaterfallDefaultSeriesField\n} from '../../constant/index';\nimport { waterfall, waterfallFillTotal } from '../../data/transforms/waterfall';\nimport { BarSeries } from '../bar/bar';\nimport { valueInScaleRange } from '../../util/scale';\nimport { registerWaterfallAnimation, type WaterfallAppearPreset } from './animation';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport type { IWaterfallSeriesSpec, IWaterfallSeriesTheme } from './interface';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport type { ITransformOptions, DataView } from '@visactor/vdataset';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { SeriesData } from '../base/series-data';\nimport { dataViewFromDataView } from '../../data/initialize';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { ITextMark } from '../../mark/text';\nimport type { IModelEvaluateOption } from '../../model/interface';\nimport type { Datum, Maybe } from '../../typings';\nimport { Direction } from '../../typings/space';\nimport type { IBarAnimationParams } from '../bar/animation';\nimport { registerRuleMark } from '../../mark/rule';\nimport { waterfallSeriesMark } from './constant';\nimport { Group } from '../base/group';\nimport type { ILabelMark } from '../../mark/label';\nimport { Factory } from '../../core/factory';\nimport { registerRectMark } from '../../mark/rect';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { WaterfallSeriesSpecTransformer } from './waterfall-transformer';\n\nexport const DefaultBandWidth = 6; // 默认的bandWidth,避免连续轴没有bandWidth\n\nexport class WaterfallSeries extends BarSeries {\n static readonly type: string = SeriesTypeEnum.waterfall;\n type = SeriesTypeEnum.waterfall;\n\n static readonly mark: SeriesMarkMap = waterfallSeriesMark;\n static readonly transformerConstructor = WaterfallSeriesSpecTransformer as any;\n readonly transformerConstructor = WaterfallSeriesSpecTransformer as any;\n\n protected _stack: boolean = false;\n\n protected _totalData?: SeriesData;\n getTotalData() {\n return this._totalData?.getLatestData();\n }\n\n protected declare _spec: T;\n\n protected _leaderLineMark: IRuleMark = null;\n protected _stackLabelMark: ITextMark = null;\n protected _labelMark: ITextMark = null;\n\n protected initGroups() {\n const groupFields = this.getGroupFields();\n if (groupFields && groupFields.length) {\n this._groups = new Group(groupFields);\n this._data && this._groups.initData(this._data.getDataView(), this._dataSet);\n }\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n // waterfall data stack data\n this.setValueFieldToStack();\n // 不支持多维度;\n this._fieldX = [this._fieldX[0]];\n this._fieldY = [this._fieldY[0]];\n if (isNil(this._seriesField)) {\n this._seriesField = WaterfallDefaultSeriesField;\n }\n }\n\n getSeriesKeys(): string[] {\n if (this._seriesField === WaterfallDefaultSeriesField) {\n return [\n this._theme.seriesFieldName.increase,\n this._theme.seriesFieldName.decrease,\n this._theme.seriesFieldName.total\n ];\n }\n return super.getSeriesKeys();\n }\n\n protected initData(): void {\n super.initData();\n registerDataSetInstanceTransform(this._dataSet, 'waterfallFillTotal', waterfallFillTotal);\n registerDataSetInstanceTransform(this._dataSet, 'waterfall', waterfall);\n // 如果要在最后添加总计\n if (isNil(this._spec.total) || this._spec.total.type === 'end') {\n this._rawData?.transform(\n {\n type: 'waterfallFillTotal',\n options: {\n indexField: this.getGroupFields()[0],\n valueField: this.getStackValueField(),\n seriesField: this.getSeriesField(),\n seriesFieldName: this._theme.seriesFieldName,\n total: this._spec.total\n }\n },\n false\n );\n }\n // 总计数据\n const totalData = dataViewFromDataView(this.getViewData(), this._dataSet, {\n name: `${PREFIX}_series_${this.id}_totalData`\n });\n this.getViewData().target.removeListener('change', totalData.reRunAllTransform);\n this._totalData = new SeriesData(this._option, totalData);\n totalData.transform(\n {\n type: 'waterfall',\n options: {\n indexField: this.getGroupFields()[0],\n valueField: this.getStackValueField(),\n seriesField: this.getSeriesField(),\n seriesFieldName: this._theme.seriesFieldName,\n startAs: STACK_FIELD_START,\n endAs: STACK_FIELD_END,\n total: this._spec.total,\n groupData: () => this.getGroups().groupData\n }\n },\n false\n );\n }\n\n initAnimation() {\n // 这个数据在这个时候拿不到,因为组件还没创建结束,统计和筛选也还没添加。\n // 而且这个值理论上是动态的,建议 监听 viewDataStatisticsUpdate 消息动态更新\n const waterfallAnimationParams: IBarAnimationParams = {\n yField: this.direction === 'horizontal' ? this._fieldY[0] : this.getStackValueField(),\n xField: this.direction === 'horizontal' ? this.getStackValueField() : this._fieldX[0],\n direction: this.direction,\n growFrom: () =>\n this.direction === 'horizontal'\n ? this._xAxisHelper?.getScale(0).scale(0)\n : this._yAxisHelper?.getScale(0).scale(0)\n };\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n const animationParams = getGroupAnimationParams(this);\n\n this._barMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('waterfall')?.(waterfallAnimationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.bar, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n\n if (this._leaderLineMark) {\n this._leaderLineMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.leaderLine, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n\n viewDataUpdate(d: DataView): void {\n this._totalData.getDataView().reRunAllTransform();\n this._totalData.updateData();\n super.viewDataUpdate(d);\n }\n /**\n * data\n */\n // waterfall 不支持任何的 data filter\n addViewDataFilter(_option: ITransformOptions) {\n // do nothing\n }\n reFilterViewData() {\n // do nothing\n }\n\n onEvaluateEnd(ctx: IModelEvaluateOption): void {\n super.onEvaluateEnd(ctx);\n this._totalData.updateData();\n }\n\n initMark(): void {\n super.initMark();\n const leaderLine = this._createMark(WaterfallSeries.mark.leaderLine, {\n key: 'index',\n customShape: this._spec.leaderLine?.customShape\n }) as IRuleMark;\n if (leaderLine) {\n this._leaderLineMark = leaderLine;\n leaderLine.setDataView(this._totalData.getDataView(), this._totalData.getProductId());\n }\n }\n\n initLabelMarkStyle(labelMark: ILabelMark): void {\n if (!labelMark) {\n return;\n }\n\n if (!this._labelMark && this._spec.label?.visible) {\n super.initLabelMarkStyle(labelMark);\n this._labelMark = labelMark;\n return;\n }\n\n this._stackLabelMark = labelMark;\n // 瀑布图标签 encode 在自定义布局中计算\n labelMark.skipEncode = true;\n labelMark.setRule('stackLabel');\n labelMark.setDataView(this._totalData.getDataView(), this._totalData.getProductId());\n\n this.setMarkStyle(labelMark, {\n text: (datum: Datum) => {\n return this._spec.stackLabel?.valueType === 'absolute' ? datum.end : precisionSub(datum.end, datum.start);\n }\n });\n }\n\n totalPositionX(datum: Datum, field: string, pos: number = 0.5) {\n const { dataToPosition, getBandwidth } = this._xAxisHelper;\n if (this._direction === Direction.vertical) {\n return (\n dataToPosition([datum[field]], {\n bandPosition: this._bandPosition\n }) +\n getBandwidth(0) * 0.5 -\n (this._barMark.getAttribute('width', datum) as number) * (0.5 - pos)\n );\n }\n return valueInScaleRange(\n dataToPosition([datum[field]], {\n bandPosition: this._bandPosition\n })\n );\n }\n\n totalPositionY(datum: Datum, field: string, pos: number = 0.5) {\n const { dataToPosition, getBandwidth } = this._yAxisHelper;\n if (this._direction === Direction.vertical) {\n return valueInScaleRange(\n dataToPosition([datum[field]], {\n bandPosition: this._bandPosition\n })\n );\n }\n return (\n dataToPosition([datum[field]], {\n bandPosition: this._bandPosition\n }) +\n getBandwidth(0) * 0.5 -\n (this._barMark.getAttribute('height', datum) as number) * (0.5 - pos)\n );\n }\n\n initMarkStyle(): void {\n super.initMarkStyle();\n if (this._leaderLineMark) {\n if (this._direction === Direction.vertical) {\n this.setMarkStyle(\n this._leaderLineMark,\n {\n visible: (datum: Datum) => !isNil(datum.lastIndex),\n x: (datum: Datum) => {\n if (!datum.lastIndex) {\n return 0;\n }\n return this.totalPositionX(datum, 'lastIndex', 1);\n },\n x1: (datum: Datum) => this.totalPositionX(datum, 'index', 0),\n y: (datum: Datum) => this.totalPositionY(datum, 'lastEnd', 0),\n y1: (datum: Datum) => this.totalPositionY(datum, datum.isTotal ? 'end' : 'start', 0)\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._leaderLineMark,\n {\n visible: (datum: Datum) => !isNil(datum.lastIndex),\n x: (datum: Datum) => this.totalPositionX(datum, 'lastEnd', 0),\n x1: (datum: Datum) => this.totalPositionX(datum, datum.isTotal ? 'end' : 'start', 0),\n y: (datum: Datum) => {\n if (!datum.lastIndex) {\n return 0;\n }\n return this.totalPositionY(datum, 'lastIndex', 1);\n },\n y1: (datum: Datum) => this.totalPositionY(datum, 'index', 0)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n }\n}\n\nexport const registerWaterfallSeries = () => {\n registerRuleMark();\n registerRectMark();\n registerWaterfallAnimation();\n registerFadeInOutAnimation();\n Factory.registerSeries(WaterfallSeries.type, WaterfallSeries);\n};\n","import { array } from '@visactor/vutils';\nimport type { AdaptiveSpec } from '../../typings';\nimport { BarChartSpecTransformer } from '../bar';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { IWaterfallChartSpec } from './interface';\n\nexport class WaterfallChartSpecTransformer<\n T extends IWaterfallChartSpec = IWaterfallChartSpec\n> extends BarChartSpecTransformer> {\n transformSpec(spec: AdaptiveSpec): void {\n super.transformSpec(spec);\n if (spec.legends) {\n array(spec.legends).forEach((l: any) => {\n l.select = false;\n l.hover = false;\n l.filter = false;\n });\n }\n\n setDefaultCrosshairForCartesianChart(spec);\n }\n\n protected _getDefaultSeriesSpec(spec: AdaptiveSpec): any {\n return {\n ...super._getDefaultSeriesSpec(spec),\n bar: spec.bar,\n stackLabel: spec.stackLabel,\n leaderLine: spec.leaderLine,\n total: spec.total\n };\n }\n}\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { BarChart } from '../bar';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IWaterfallChartSpec } from './interface';\nimport { registerWaterfallSeries } from '../../series/waterfall/waterfall';\nimport { Factory } from '../../core/factory';\nimport type { AdaptiveSpec } from '../../typings';\nimport { WaterfallChartSpecTransformer } from './waterfall-transformer';\n\nexport class WaterfallChart extends BarChart<\n AdaptiveSpec\n> {\n static readonly type: string = ChartTypeEnum.waterfall;\n static readonly seriesType: string = SeriesTypeEnum.waterfall;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = WaterfallChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = WaterfallChartSpecTransformer;\n readonly type: string = ChartTypeEnum.waterfall;\n readonly seriesType: string = SeriesTypeEnum.waterfall;\n}\n\nexport const registerWaterfallChart = () => {\n registerWaterfallSeries();\n Factory.registerChart(WaterfallChart.type, WaterfallChart);\n};\n","import { PREFIX } from './base';\n\nexport const BOX_PLOT_OUTLIER_VALUE_FIELD = `${PREFIX}_BOX_PLOT_OUTLIER_VALUE`;\n\nexport enum BOX_PLOT_TOOLTIP_KEYS {\n OUTLIER = 'outlier',\n MAX = 'max',\n MIN = 'min',\n MEDIAN = 'median',\n Q1 = 'q1',\n Q3 = 'q3',\n SERIES_FIELD = 'seriesField'\n}\n","import { isArray } from '@visactor/vutils';\nimport { BOX_PLOT_OUTLIER_VALUE_FIELD } from '../../constant/box-plot';\nimport type { Datum } from '../../typings';\n\nexport interface IBoxPlotOutlierOpt {\n dimensionField: string[];\n outliersField: string;\n}\n/**\n * 将箱型图outlier数组展平\n * @param data\n * @param options\n * @returns\n */\nexport const foldOutlierData = (data: Array, op: IBoxPlotOutlierOpt) => {\n const result: any = [];\n const { outliersField, dimensionField } = op;\n const latestData = (data[0] as any).latestData || [];\n latestData.forEach((d: Datum) => {\n let outlierValues = d[outliersField];\n if (!isArray(outlierValues)) {\n outlierValues = [outlierValues];\n }\n result.push(\n ...outlierValues.map((v: any) => {\n const resData = {\n [BOX_PLOT_OUTLIER_VALUE_FIELD]: v\n };\n dimensionField.forEach(field => {\n resData[field] = d[field];\n });\n return resData;\n })\n );\n });\n return result;\n};\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { Datum, ITooltipPattern, TooltipActiveType } from '../../typings';\nimport { isValid } from '@visactor/vutils';\nimport { BOX_PLOT_OUTLIER_VALUE_FIELD, BOX_PLOT_TOOLTIP_KEYS } from '../../constant/box-plot';\nimport type { BoxPlotSeries } from './box-plot';\n\nexport class BoxPlotSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n /** 获取默认的tooltip pattern */\n getDefaultTooltipPattern(activeType: TooltipActiveType): ITooltipPattern | null {\n return {\n visible: true,\n activeType,\n title: {\n key: undefined,\n value: this.titleValueCallback,\n hasShape: false\n },\n content: [\n {\n key: this.getContentKey(BOX_PLOT_TOOLTIP_KEYS.OUTLIER),\n value: this.getContentValue(BOX_PLOT_TOOLTIP_KEYS.OUTLIER),\n hasShape: true,\n shapeType: this.contentShapeTypeCallback,\n shapeColor: this.getOutlierFillColor,\n shapeStroke: this.getOutlierFillColor,\n shapeHollow: false\n },\n {\n key: this.getContentKey(BOX_PLOT_TOOLTIP_KEYS.MAX),\n value: this.getContentValue(BOX_PLOT_TOOLTIP_KEYS.MAX),\n hasShape: true,\n shapeType: this.contentShapeTypeCallback,\n shapeColor: this.contentShapeColorCallback,\n shapeStroke: this.contentShapeColorCallback,\n shapeHollow: false\n },\n {\n key: this.getContentKey(BOX_PLOT_TOOLTIP_KEYS.Q3),\n value: this.getContentValue(BOX_PLOT_TOOLTIP_KEYS.Q3),\n hasShape: true,\n shapeType: this.contentShapeTypeCallback,\n shapeColor: this.contentShapeColorCallback,\n shapeStroke: this.contentShapeColorCallback,\n shapeHollow: false\n },\n {\n key: this.getContentKey(BOX_PLOT_TOOLTIP_KEYS.MEDIAN),\n value: this.getContentValue(BOX_PLOT_TOOLTIP_KEYS.MEDIAN),\n hasShape: true,\n shapeType: this.contentShapeTypeCallback,\n shapeColor: this.contentShapeColorCallback,\n shapeStroke: this.contentShapeColorCallback,\n shapeHollow: false\n },\n {\n key: this.getContentKey(BOX_PLOT_TOOLTIP_KEYS.Q1),\n value: this.getContentValue(BOX_PLOT_TOOLTIP_KEYS.Q1),\n hasShape: true,\n shapeType: this.contentShapeTypeCallback,\n shapeColor: this.contentShapeColorCallback,\n shapeStroke: this.contentShapeColorCallback,\n shapeHollow: false\n },\n {\n key: this.getContentKey(BOX_PLOT_TOOLTIP_KEYS.MIN),\n value: this.getContentValue(BOX_PLOT_TOOLTIP_KEYS.MIN),\n hasShape: true,\n shapeType: this.contentShapeTypeCallback,\n shapeColor: this.contentShapeColorCallback,\n shapeStroke: this.contentShapeColorCallback,\n shapeHollow: false\n },\n {\n key: this.getContentKey(BOX_PLOT_TOOLTIP_KEYS.SERIES_FIELD),\n value: this.getContentValue(BOX_PLOT_TOOLTIP_KEYS.SERIES_FIELD),\n hasShape: true,\n shapeType: this.contentShapeTypeCallback,\n shapeColor: this.contentShapeColorCallback,\n shapeStroke: this.contentShapeColorCallback,\n shapeHollow: false\n }\n ]\n };\n }\n getContentKey = (contentType: BOX_PLOT_TOOLTIP_KEYS) => (datum: any) => {\n if (this.isOutlierMark(datum)) {\n if (contentType === BOX_PLOT_TOOLTIP_KEYS.OUTLIER) {\n //异常值mark\n return (this.series as BoxPlotSeries).getOutliersField();\n } else if (contentType === BOX_PLOT_TOOLTIP_KEYS.SERIES_FIELD) {\n const seriesField = (this.series as BoxPlotSeries).getSeriesField();\n return seriesField;\n }\n return null;\n }\n\n switch (contentType) {\n case BOX_PLOT_TOOLTIP_KEYS.MIN: {\n const minField = (this.series as BoxPlotSeries).getMinField();\n return minField;\n }\n case BOX_PLOT_TOOLTIP_KEYS.MAX: {\n const maxField = (this.series as BoxPlotSeries).getMaxField();\n return maxField;\n }\n case BOX_PLOT_TOOLTIP_KEYS.MEDIAN: {\n const medianField = (this.series as BoxPlotSeries).getMedianField();\n return medianField;\n }\n case BOX_PLOT_TOOLTIP_KEYS.Q1: {\n const q1Field = (this.series as BoxPlotSeries).getQ1Field();\n return q1Field;\n }\n case BOX_PLOT_TOOLTIP_KEYS.Q3: {\n const q3Field = (this.series as BoxPlotSeries).getQ3Field();\n return q3Field;\n }\n case BOX_PLOT_TOOLTIP_KEYS.SERIES_FIELD: {\n const seriesField = (this.series as BoxPlotSeries).getSeriesField();\n return seriesField;\n }\n }\n\n return null;\n };\n\n getContentValue = (contentType: BOX_PLOT_TOOLTIP_KEYS) => (datum: any) => {\n if (this.isOutlierMark(datum)) {\n if (contentType === BOX_PLOT_TOOLTIP_KEYS.OUTLIER) {\n //异常值mark\n return datum[BOX_PLOT_OUTLIER_VALUE_FIELD];\n } else if (contentType === BOX_PLOT_TOOLTIP_KEYS.SERIES_FIELD) {\n const seriesField = (this.series as BoxPlotSeries).getSeriesField();\n return datum[seriesField];\n }\n return null;\n }\n\n switch (contentType) {\n case BOX_PLOT_TOOLTIP_KEYS.MIN: {\n const minField = (this.series as BoxPlotSeries).getMinField();\n return datum[minField];\n }\n case BOX_PLOT_TOOLTIP_KEYS.MAX: {\n const maxField = (this.series as BoxPlotSeries).getMaxField();\n return datum[maxField];\n }\n case BOX_PLOT_TOOLTIP_KEYS.MEDIAN: {\n const medianField = (this.series as BoxPlotSeries).getMedianField();\n return datum[medianField];\n }\n case BOX_PLOT_TOOLTIP_KEYS.Q1: {\n const q1Field = (this.series as BoxPlotSeries).getQ1Field();\n return datum[q1Field];\n }\n case BOX_PLOT_TOOLTIP_KEYS.Q3: {\n const q3Field = (this.series as BoxPlotSeries).getQ3Field();\n return datum[q3Field];\n }\n case BOX_PLOT_TOOLTIP_KEYS.SERIES_FIELD: {\n const seriesField = (this.series as BoxPlotSeries).getSeriesField();\n return datum[seriesField];\n }\n }\n\n return null;\n };\n contentShapeColorCallback = (datum: Datum) => {\n const shaftShape = (this.series as BoxPlotSeries).getShaftShape();\n return shaftShape === 'line'\n ? (this.series.getMarkInName('boxPlot').getAttribute('stroke' as any, datum) as any)\n : (this.series.getMarkInName('boxPlot').getAttribute('fill' as any, datum) as any);\n };\n\n getOutlierFillColor = (datum: Datum) => {\n const outliersStyle = (this.series as BoxPlotSeries).getOutliersStyle();\n return outliersStyle?.fill ?? (this.series.getMarkInName('outlier').getAttribute('fill' as any, datum) as any);\n };\n isOutlierMark = (datum: Datum) => {\n return isValid(datum[BOX_PLOT_OUTLIER_VALUE_FIELD]);\n };\n}\n","export function isHorizontal(direction: string) {\n return direction === 'horizontal';\n}\n\nexport function isVertical(direction: string) {\n return direction === 'vertical';\n}\n\nexport function isValidDirection(direction: string) {\n return direction === 'vertical' || direction === 'horizontal';\n}\n\nexport function isValidPosition(position: string) {\n return position === 'top' || position === 'bottom' || position === 'left' || position === 'right';\n}\n\nexport function isHorizontalPosition(position: string) {\n return position === 'top' || position === 'bottom';\n}\n","import { isValidNumber } from '@visactor/vutils';\nimport type {\n BarBoxPlotEncoderSpec,\n BoxPlotEncoderSpec,\n IAnimationParameters,\n IGlyphElement,\n TypeAnimation\n} from '../types';\nimport { Factory } from '../core/factory';\nimport { registerGlyphGraphic, registerRectGraphic, registerRuleGraphic } from '../graph/mark/graphic';\nimport { isHorizontal } from '@visactor/vgrammar-util';\n\nexport interface IBoxplotScaleAnimationOptions {\n center?: number;\n}\n\nconst scaleIn = (\n computeCenter: (\n element: IGlyphElement,\n direction: 'vertical' | 'horizontal',\n options: IBoxplotScaleAnimationOptions\n ) => number\n): TypeAnimation => {\n return (\n element: IGlyphElement,\n options: IBoxplotScaleAnimationOptions,\n animationParameters: IAnimationParameters\n ) => {\n const direction =\n element.getGraphicAttribute('direction', false) ?? element.mark.getGlyphConfig()?.direction ?? 'vertical';\n const center = computeCenter(element, direction, options);\n if (!isValidNumber(center)) {\n return {};\n }\n const x = element.getGraphicAttribute('x', false);\n const y = element.getGraphicAttribute('y', false);\n const min = element.getGraphicAttribute('min', false);\n const max = element.getGraphicAttribute('max', false);\n const q1 = element.getGraphicAttribute('q1', false);\n const q3 = element.getGraphicAttribute('q3', false);\n const median = element.getGraphicAttribute('median', false);\n const animateAttributes: any = { from: { x, y }, to: { x, y } };\n if (isValidNumber(min)) {\n animateAttributes.from.min = center;\n animateAttributes.to.min = min;\n }\n if (isValidNumber(max)) {\n animateAttributes.from.max = center;\n animateAttributes.to.max = max;\n }\n if (isValidNumber(q1)) {\n animateAttributes.from.q1 = center;\n animateAttributes.to.q1 = q1;\n }\n if (isValidNumber(q3)) {\n animateAttributes.from.q3 = center;\n animateAttributes.to.q3 = q3;\n }\n if (isValidNumber(median)) {\n animateAttributes.from.median = center;\n animateAttributes.to.median = median;\n }\n return animateAttributes;\n };\n};\n\nconst scaleOut = (\n computeCenter: (\n element: IGlyphElement,\n direction: 'vertical' | 'horizontal',\n options: IBoxplotScaleAnimationOptions\n ) => number\n): TypeAnimation => {\n return (\n element: IGlyphElement,\n options: IBoxplotScaleAnimationOptions,\n animationParameters: IAnimationParameters\n ) => {\n const direction =\n element.getGraphicAttribute('direction', false) ?? element.mark.getGlyphConfig()?.direction ?? 'vertical';\n const center = computeCenter(element, direction, options);\n if (!isValidNumber(center)) {\n return {};\n }\n const x = element.getGraphicAttribute('x', true);\n const y = element.getGraphicAttribute('y', true);\n const min = element.getGraphicAttribute('min', true);\n const max = element.getGraphicAttribute('max', true);\n const q1 = element.getGraphicAttribute('q1', true);\n const q3 = element.getGraphicAttribute('q3', true);\n const median = element.getGraphicAttribute('median', true);\n const animateAttributes: any = { from: { x, y }, to: { x, y } };\n if (isValidNumber(min)) {\n animateAttributes.to.min = center;\n animateAttributes.from.min = min;\n }\n if (isValidNumber(max)) {\n animateAttributes.to.max = center;\n animateAttributes.from.max = max;\n }\n if (isValidNumber(q1)) {\n animateAttributes.to.q1 = center;\n animateAttributes.from.q1 = q1;\n }\n if (isValidNumber(q3)) {\n animateAttributes.to.q3 = center;\n animateAttributes.from.q3 = q3;\n }\n if (isValidNumber(median)) {\n animateAttributes.to.median = center;\n animateAttributes.from.median = median;\n }\n return animateAttributes;\n };\n};\n\nconst computeBoxplotCenter = (\n glyphElement: IGlyphElement,\n direction: 'vertical' | 'horizontal',\n options: IBoxplotScaleAnimationOptions\n) => {\n if (options && isValidNumber(options.center)) {\n return options.center;\n }\n let median: number;\n let max: number;\n let min: number;\n let q1: number;\n let q3: number;\n if (isHorizontal(direction)) {\n median = glyphElement.getGraphicAttribute('points', false, 'median')?.[0]?.x;\n max = glyphElement.getGraphicAttribute('points', false, 'max')?.[0]?.x;\n min = glyphElement.getGraphicAttribute('points', false, 'min')?.[0]?.x;\n\n const boxWidth = glyphElement.getGraphicAttribute('width', false, 'box');\n const boxX = glyphElement.getGraphicAttribute('x', false, 'box');\n q1 = boxX;\n q3 = boxX + boxWidth;\n } else {\n median = glyphElement.getGraphicAttribute('points', false, 'median')?.[0]?.y;\n max = glyphElement.getGraphicAttribute('points', false, 'max')?.[0]?.y;\n min = glyphElement.getGraphicAttribute('points', false, 'min')?.[0]?.y;\n\n const boxHeight = glyphElement.getGraphicAttribute('height', false, 'box');\n const boxY = glyphElement.getGraphicAttribute('y', false, 'box');\n q1 = boxY;\n q3 = boxY + boxHeight;\n }\n\n if (isValidNumber(median)) {\n return median;\n }\n if (isValidNumber(q1) && isValidNumber(q3)) {\n return (q1 + q3) / 2;\n }\n if (isValidNumber(max) && isValidNumber(min)) {\n return (max + min) / 2;\n }\n if (isValidNumber(min)) {\n return min;\n }\n if (isValidNumber(max)) {\n return max;\n }\n return NaN;\n};\n\nconst encodeBoxplotSize = (encodeValues: any, datum: any, element: IGlyphElement, config: any) => {\n const attributes = {\n shaft: {},\n box: {},\n max: {},\n min: {},\n median: {}\n };\n\n const x = encodeValues.x ?? element.getGraphicAttribute('x', false);\n const y = encodeValues.y ?? element.getGraphicAttribute('y', false);\n const width = encodeValues.width ?? element.getGraphicAttribute('width', false);\n const height = encodeValues.height ?? element.getGraphicAttribute('height', false);\n const boxWidth = encodeValues.boxWidth ?? element.getGraphicAttribute('boxWidth', false);\n const boxHeight = encodeValues.boxHeight ?? element.getGraphicAttribute('boxHeight', false);\n const ruleWidth = encodeValues.ruleWidth ?? element.getGraphicAttribute('ruleWidth', false);\n const ruleHeight = encodeValues.ruleHeight ?? element.getGraphicAttribute('ruleHeight', false);\n\n if (config && isHorizontal(config.direction)) {\n if (isValidNumber(boxHeight)) {\n Object.assign(attributes.box, { y: y - boxHeight / 2, y1: y + boxHeight / 2 });\n Object.assign(attributes.median, { y: y - boxHeight / 2, y1: y + boxHeight / 2 });\n } else {\n // median rule always has the same length with box rect\n Object.assign(attributes.box, { y: y - height / 2, y1: y + height / 2 });\n Object.assign(attributes.median, { y: y - height / 2, y1: y + height / 2 });\n }\n if (isValidNumber(ruleHeight)) {\n Object.assign(attributes.max, { y: y - ruleHeight / 2, y1: y + ruleHeight / 2 });\n Object.assign(attributes.min, { y: y - ruleHeight / 2, y1: y + ruleHeight / 2 });\n } else {\n Object.assign(attributes.max, { y: y - height / 2, y1: y + height / 2 });\n Object.assign(attributes.min, { y: y - height / 2, y1: y + height / 2 });\n }\n } else {\n if (isValidNumber(boxWidth)) {\n Object.assign(attributes.box, { x: x - boxWidth / 2, x1: x + boxWidth / 2 });\n Object.assign(attributes.median, { x: x - boxWidth / 2, x1: x + boxWidth / 2 });\n } else {\n Object.assign(attributes.box, { x: x - width / 2, x1: x + width / 2 });\n Object.assign(attributes.median, { x: x - width / 2, x1: x + width / 2 });\n }\n if (isValidNumber(ruleWidth)) {\n Object.assign(attributes.max, { x: x - ruleWidth / 2, x1: x + ruleWidth / 2 });\n Object.assign(attributes.min, { x: x - ruleWidth / 2, x1: x + ruleWidth / 2 });\n } else {\n Object.assign(attributes.max, { x: x - width / 2, x1: x + width / 2 });\n Object.assign(attributes.min, { x: x - width / 2, x1: x + width / 2 });\n }\n }\n return attributes;\n};\n\nexport const boxplotScaleIn = scaleIn(computeBoxplotCenter);\nexport const boxplotScaleOut = scaleOut(computeBoxplotCenter);\n\nexport function registerBoxplotGlyph() {\n Factory.registerGlyph('boxplot', {\n shaft: 'rule',\n box: 'rect',\n max: 'rule',\n min: 'rule',\n median: 'rule'\n })\n .registerProgressiveChannels([\n 'x',\n 'y',\n 'q1',\n 'q3',\n 'min',\n 'max',\n 'median',\n 'angle',\n 'width',\n 'height',\n 'boxWidth',\n 'boxHeight',\n 'ruleWidth',\n 'ruleHeight'\n ])\n .registerFunctionEncoder(encodeBoxplotSize)\n .registerChannelEncoder('x', (channel, encodeValue, encodeValues, datum, element, config) => {\n if (config && isHorizontal(config.direction)) {\n return null;\n }\n return {\n shaft: { x: encodeValue, x1: encodeValue }\n };\n })\n .registerChannelEncoder('y', (channel, encodeValue, encodeValues, datum, element, config) => {\n if (!config || !isHorizontal(config.direction)) {\n return null;\n }\n return {\n shaft: { y: encodeValue, y1: encodeValue }\n };\n })\n .registerChannelEncoder('q1', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction) ? { box: { x: encodeValue } } : { box: { y: encodeValue } };\n })\n .registerChannelEncoder('q3', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction) ? { box: { x1: encodeValue } } : { box: { y1: encodeValue } };\n })\n .registerChannelEncoder('min', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? {\n shaft: { x: encodeValue },\n min: { x: encodeValue, x1: encodeValue, visible: true }\n }\n : {\n shaft: { y: encodeValue },\n min: { y: encodeValue, y1: encodeValue, visible: true }\n };\n })\n .registerChannelEncoder('max', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? {\n shaft: { x1: encodeValue },\n max: { x: encodeValue, x1: encodeValue, visible: true }\n }\n : {\n shaft: { y1: encodeValue },\n max: { y: encodeValue, y1: encodeValue, visible: true }\n };\n })\n .registerChannelEncoder('median', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? {\n median: { x: encodeValue, x1: encodeValue, visible: true }\n }\n : {\n median: { y: encodeValue, y1: encodeValue, visible: true }\n };\n })\n .registerChannelEncoder('angle', (channel, encodeValue, encodeValues, datum, element, config) => {\n const defaultAnchor =\n config && isHorizontal(config.direction)\n ? [(encodeValues.min + encodeValues.max) / 2, encodeValues.y]\n : [encodeValues.x, (encodeValues.min + encodeValues.max) / 2];\n const anchor = encodeValues.anchor ?? defaultAnchor;\n return {\n shaft: { angle: encodeValue, anchor },\n box: { angle: encodeValue, anchor },\n max: { angle: encodeValue, anchor },\n min: { angle: encodeValue, anchor },\n median: { angle: encodeValue, anchor }\n };\n })\n .registerDefaultEncoder(() => {\n return {\n max: { visible: false },\n min: { visible: false },\n median: { visible: false }\n };\n });\n\n Factory.registerAnimationType('boxplotScaleIn', boxplotScaleIn);\n Factory.registerAnimationType('boxplotScaleOut', boxplotScaleOut);\n registerGlyphGraphic();\n registerRectGraphic();\n registerRuleGraphic();\n}\n\nconst computeBarBoxplotCenter = (\n glyphElement: IGlyphElement,\n direction: 'vertical' | 'horizontal',\n options: IBoxplotScaleAnimationOptions\n) => {\n if (isValidNumber(options?.center)) {\n return options.center;\n }\n let median: number;\n let max: number;\n let min: number;\n let q1: number;\n let q3: number;\n if (isHorizontal(direction)) {\n median = glyphElement.getGraphicAttribute('points', false, 'median')?.[0]?.x;\n\n const minMaxBoxWidth = glyphElement.getGraphicAttribute('width', false, 'minMaxBox');\n const minMaxBoxBoxX = glyphElement.getGraphicAttribute('x', false, 'minMaxBox');\n min = minMaxBoxBoxX;\n max = minMaxBoxBoxX + minMaxBoxWidth;\n\n const q1q3BoxWidth = glyphElement.getGraphicAttribute('width', false, 'q1q3Box');\n const q1q3BoxX = glyphElement.getGraphicAttribute('x', false, 'q1q3Box');\n q1 = q1q3BoxX;\n q3 = q1q3BoxX + q1q3BoxWidth;\n } else {\n median = glyphElement.getGraphicAttribute('points', false, 'median')?.[0]?.y;\n\n const minMaxBoxHeight = glyphElement.getGraphicAttribute('height', false, 'minMaxBox');\n const minMaxBoxBoxY = glyphElement.getGraphicAttribute('y', false, 'minMaxBox');\n min = minMaxBoxBoxY;\n max = minMaxBoxBoxY + minMaxBoxHeight;\n\n const q1q3BoxHeight = glyphElement.getGraphicAttribute('height', false, 'q1q3Box');\n const q1q3BoxY = glyphElement.getGraphicAttribute('y', false, 'q1q3Box');\n q1 = q1q3BoxY;\n q3 = q1q3BoxY + q1q3BoxHeight;\n }\n\n if (isValidNumber(median)) {\n return median;\n }\n if (isValidNumber(q1) && isValidNumber(q3)) {\n return (q1 + q3) / 2;\n }\n if (isValidNumber(max) && isValidNumber(min)) {\n return (max + min) / 2;\n }\n if (isValidNumber(min)) {\n return min;\n }\n if (isValidNumber(max)) {\n return max;\n }\n return NaN;\n};\n\nconst encodeBarBoxplotSize = (encodeValues: any, datum: any, element: IGlyphElement, config: any) => {\n const attributes = {\n minMaxBox: {},\n q1q3Box: {},\n median: {}\n };\n\n const x = encodeValues.x ?? element.getGraphicAttribute('x', false);\n const y = encodeValues.y ?? element.getGraphicAttribute('y', false);\n const width = encodeValues.width ?? element.getGraphicAttribute('width', false);\n const minMaxWidth = encodeValues.minMaxWidth ?? element.getGraphicAttribute('minMaxWidth', false);\n const q1q3Width = encodeValues.q1q3Width ?? element.getGraphicAttribute('q1q3Width', false);\n const height = encodeValues.height ?? element.getGraphicAttribute('height', false);\n const minMaxHeight = encodeValues.minMaxHeight ?? element.getGraphicAttribute('minMaxHeight', false);\n const q1q3Height = encodeValues.q1q3Height ?? element.getGraphicAttribute('q1q3Height', false);\n\n if (config && isHorizontal(config.direction)) {\n if (isValidNumber(minMaxHeight)) {\n Object.assign(attributes.minMaxBox, { y: y - minMaxHeight / 2, y1: y + minMaxHeight / 2 });\n } else {\n Object.assign(attributes.minMaxBox, { y: y - height / 2, y1: y + height / 2 });\n }\n if (isValidNumber(q1q3Height)) {\n Object.assign(attributes.q1q3Box, { y: y - q1q3Height / 2, y1: y + q1q3Height / 2 });\n Object.assign(attributes.median, { y: y - q1q3Height / 2, y1: y + q1q3Height / 2 });\n } else {\n // median rule always has the same length with q1q3box rect\n Object.assign(attributes.q1q3Box, { y: y - height / 2, y1: y + height / 2 });\n Object.assign(attributes.median, { y: y - height / 2, y1: y + height / 2 });\n }\n } else {\n if (isValidNumber(minMaxWidth)) {\n Object.assign(attributes.minMaxBox, { x: x - minMaxWidth / 2, x1: x + minMaxWidth / 2 });\n } else {\n Object.assign(attributes.minMaxBox, { x: x - width / 2, x1: x + width / 2 });\n }\n if (isValidNumber(q1q3Width)) {\n Object.assign(attributes.q1q3Box, { x: x - q1q3Width / 2, x1: x + q1q3Width / 2 });\n Object.assign(attributes.median, { x: x - q1q3Width / 2, x1: x + q1q3Width / 2 });\n } else {\n // median rule always has the same length with q1q3box rect\n Object.assign(attributes.q1q3Box, { x: x - width / 2, x1: x + width / 2 });\n Object.assign(attributes.median, { x: x - width / 2, x1: x + width / 2 });\n }\n }\n return attributes;\n};\n\nexport const barBoxplotScaleIn = scaleIn(computeBarBoxplotCenter);\nexport const barBoxplotScaleOut = scaleOut(computeBarBoxplotCenter);\n\nexport function registerBarBoxplotGlyph() {\n Factory.registerGlyph('barBoxplot', {\n minMaxBox: 'rect',\n q1q3Box: 'rect',\n median: 'rule'\n })\n .registerProgressiveChannels([\n 'x',\n 'y',\n 'q1',\n 'q3',\n 'min',\n 'max',\n 'median',\n 'angle',\n 'width',\n 'height',\n 'minMaxWidth',\n 'q1q3Width',\n 'minMaxHeight',\n 'q1q3Height'\n ])\n .registerFunctionEncoder(encodeBarBoxplotSize)\n .registerChannelEncoder('q1', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? { q1q3Box: { x: encodeValue } }\n : { q1q3Box: { y: encodeValue } };\n })\n .registerChannelEncoder('q3', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? { q1q3Box: { x1: encodeValue } }\n : { q1q3Box: { y1: encodeValue } };\n })\n .registerChannelEncoder('min', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? { minMaxBox: { x: encodeValue } }\n : { minMaxBox: { y: encodeValue } };\n })\n .registerChannelEncoder('max', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? { minMaxBox: { x1: encodeValue } }\n : { minMaxBox: { y1: encodeValue } };\n })\n .registerChannelEncoder('median', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? { median: { x: encodeValue, x1: encodeValue, visible: true } }\n : { median: { y: encodeValue, y1: encodeValue, visible: true } };\n })\n .registerChannelEncoder('angle', (channel, encodeValue, encodeValues, datum, element, config) => {\n const anchor = encodeValues.anchor ?? [encodeValues.x, (encodeValues.min + encodeValues.max) / 2];\n return {\n minMaxBox: { angle: encodeValue, anchor },\n q1q3Box: { angle: encodeValue, anchor },\n median: { angle: encodeValue, anchor }\n };\n })\n .registerChannelEncoder('lineWidth', (channel, encodeValue, encodeValues, datum, element, config) => {\n return {\n minMaxBox: { lineWidth: 0 },\n q1q3Box: { lineWidth: 0 }\n };\n })\n .registerChannelEncoder('minMaxFillOpacity', (channel, encodeValue, encodeValues, datum, element, config) => {\n return {\n minMaxBox: { fillOpacity: encodeValue }\n };\n })\n .registerChannelEncoder('stroke', (channel, encodeValue, encodeValues, datum, element, config) => {\n return {\n minMaxBox: { stroke: false },\n q1q3Box: { stroke: false }\n };\n })\n .registerDefaultEncoder(() => {\n return {\n minMaxBox: { lineWidth: 0 },\n q1q3Box: { lineWidth: 0 },\n median: { visible: false }\n };\n });\n\n Factory.registerAnimationType('barBoxplotScaleIn', barBoxplotScaleIn);\n Factory.registerAnimationType('barBoxplotScaleOut', barBoxplotScaleOut);\n registerGlyphGraphic();\n registerRectGraphic();\n registerRuleGraphic();\n}\n","import { Factory } from './../core/factory';\nimport type { IBoxPlotMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IGroupMark } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerBarBoxplotGlyph, registerBoxplotGlyph } from '@visactor/vgrammar-core';\nimport type { IMarkRaw, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nexport type IBoxPlotMark = IMarkRaw;\n\nconst BOX_PLOT_GLYPH_TYPE = 'boxplot';\nconst BAR_BOX_PLOT_GLYPH_TYPE = 'barBoxplot';\n\nexport class BoxPlotMark extends BaseMark implements IBoxPlotMark {\n static readonly type = MarkTypeEnum.boxPlot;\n readonly type = BoxPlotMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n lineWidth: 2,\n boxWidth: 30,\n shaftWidth: 20,\n shaftShape: 'line'\n };\n return defaultStyle;\n }\n /** 创建语法元素对象 */\n protected _initProduct(group?: string | IGroupMark) {\n const shaftShape = this.getStyle('shaftShape');\n const view = this.getVGrammarView();\n\n // 声明语法元素\n const id = this.getProductId();\n const glyphType = shaftShape === 'bar' ? BAR_BOX_PLOT_GLYPH_TYPE : BOX_PLOT_GLYPH_TYPE;\n const direction = this.getStyle('direction');\n this._product = view\n .glyph(glyphType, group ?? view.rootMark)\n .id(id)\n .configureGlyph({ direction });\n this._compiledProductId = id;\n }\n}\n\nexport const registerBoxPlotMark = () => {\n Factory.registerMark(BoxPlotMark.type, BoxPlotMark);\n registerBoxplotGlyph();\n registerBarBoxplotGlyph();\n};\n","/* eslint-disable no-duplicate-imports */\nimport type { ISymbolMark } from '../../mark/symbol';\nimport { AttributeLevel, DEFAULT_DATA_INDEX, PREFIX } from '../../constant';\nimport type { IBoxPlotMark } from '../../mark/box-plot';\nimport type { IModelEvaluateOption, IModelInitOption } from '../../model/interface';\nimport type { BoxPlotShaftShape, IOutlierMarkSpec, Maybe, Datum } from '../../typings';\nimport { Direction } from '../../typings/space';\nimport { valueInScaleRange } from '../../util/scale';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IBoxPlotSeriesSpec, IBoxPlotSeriesTheme } from './interface';\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { DataView } from '@visactor/vdataset';\nimport { SeriesData } from '../base/series-data';\nimport { foldOutlierData } from '../../data/transforms/box-plot';\nimport { BOX_PLOT_OUTLIER_VALUE_FIELD } from '../../constant/box-plot';\nimport { BoxPlotSeriesTooltipHelper } from './tooltip-helper';\nimport { addVChartProperty } from '../../data/transforms/add-property';\nimport { addDataKey, initKeyMap } from '../../data/transforms/data-key';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { registerScaleInOutAnimation } from '../../animation/config';\nimport type { IMarkAnimateSpec } from '../../animation/spec';\nimport { BoxPlotMark, registerBoxPlotMark } from '../../mark/box-plot';\nimport { SymbolMark, registerSymbolMark } from '../../mark/symbol';\nimport { boxPlotSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport type { IMark } from '../../mark/interface';\nimport { merge, isNumber } from '@visactor/vutils';\nimport { getGroupAnimationParams } from '../util/utils';\n\nconst DEFAULT_STROKE_WIDTH = 2;\nconst DEFAULT_SHAFT_FILL_OPACITY = 0.5;\nconst DEFAULT_SHAFT_SHAPE = 'line';\nexport const DEFAULT_FILL_COLOR = '#FFF';\nexport const DEFAULT_STROKE_COLOR = '#000';\n\nconst DEFAULT_OUTLIER_SIZE = 10;\n\nexport class BoxPlotSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.boxPlot;\n type = SeriesTypeEnum.boxPlot;\n\n static readonly mark: SeriesMarkMap = boxPlotSeriesMark;\n\n protected _minField: string;\n getMinField() {\n return this._minField;\n }\n protected _maxField: string;\n getMaxField() {\n return this._maxField;\n }\n protected _q1Field: string;\n getQ1Field() {\n return this._q1Field;\n }\n protected _medianField: string;\n getMedianField() {\n return this._medianField;\n }\n protected _q3Field: string;\n getQ3Field() {\n return this._q3Field;\n }\n protected _outliersField: string;\n getOutliersField() {\n return this._outliersField;\n }\n protected _lineWidth: number;\n protected _boxWidth: number;\n protected _shaftShape: BoxPlotShaftShape;\n getShaftShape() {\n return this._shaftShape;\n }\n protected _shaftWidth: number;\n protected _boxFillColor: string;\n getBoxFillColor() {\n return this._boxFillColor;\n }\n protected _strokeColor: string;\n getStrokeColor() {\n return this._strokeColor;\n }\n protected _shaftFillOpacity: number;\n protected _outliersStyle: IOutlierMarkSpec;\n getOutliersStyle() {\n return this._outliersStyle;\n }\n protected _outlierDataView: SeriesData;\n\n private _autoBoxWidth: number;\n\n /**\n * @override\n */\n setAttrFromSpec() {\n super.setAttrFromSpec();\n const boxPlotStyle: any = this._spec.boxPlot?.style ?? {};\n this._minField = this._spec.minField;\n this._maxField = this._spec.maxField;\n this._q1Field = this._spec.q1Field;\n this._medianField = this._spec.medianField;\n this._q3Field = this._spec.q3Field;\n this._outliersField = this._spec.outliersField;\n this._lineWidth = boxPlotStyle.lineWidth ?? DEFAULT_STROKE_WIDTH;\n this._boxWidth = boxPlotStyle.boxWidth;\n this._shaftShape = boxPlotStyle.shaftShape ?? DEFAULT_SHAFT_SHAPE;\n this._shaftWidth = boxPlotStyle.shaftWidth;\n this._boxFillColor = boxPlotStyle.boxFill;\n this._strokeColor = boxPlotStyle.stroke;\n\n this._shaftFillOpacity =\n this._shaftShape === 'bar' ? boxPlotStyle.shaftFillOpacity ?? DEFAULT_SHAFT_FILL_OPACITY : undefined;\n\n this._outliersStyle = this._spec.outliersStyle;\n }\n\n private _boxPlotMark?: IBoxPlotMark;\n private _outlierMark?: ISymbolMark;\n\n initMark(): void {\n const progressive = {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n };\n\n this._boxPlotMark = this._createMark(BoxPlotSeries.mark.boxPlot, {\n isSeriesMark: true,\n progressive\n }) as IBoxPlotMark;\n this._outlierMark = this._createMark(BoxPlotSeries.mark.outlier, {\n progressive,\n key: DEFAULT_DATA_INDEX,\n dataView: this._outlierDataView.getDataView(),\n dataProductId: this._outlierDataView.getProductId()\n }) as ISymbolMark;\n }\n\n initMarkStyle(): void {\n const boxPlotMark = this._boxPlotMark;\n if (boxPlotMark) {\n const commonBoxplotStyles = {\n direction: this._direction,\n lineWidth: this._lineWidth,\n shaftShape: this._shaftShape,\n fill: this._boxFillColor ?? (this._shaftShape === 'line' ? DEFAULT_FILL_COLOR : this.getColorAttribute()),\n minMaxFillOpacity: this._shaftFillOpacity,\n stroke: this._strokeColor ?? (this._shaftShape === 'line' ? this.getColorAttribute() : DEFAULT_STROKE_COLOR)\n };\n\n const boxPlotMarkStyles =\n this._direction === Direction.vertical\n ? {\n x: this.dataToPositionX.bind(this),\n ...commonBoxplotStyles,\n boxWidth: () => this._boxWidth ?? this._getMarkWidth(),\n ruleWidth: () => this._shaftWidth ?? this._getMarkWidth(),\n q1q3Width: () => this._boxWidth ?? this._getMarkWidth(),\n minMaxWidth: () => this._shaftWidth ?? this._getMarkWidth()\n }\n : {\n y: this.dataToPositionY.bind(this),\n ...commonBoxplotStyles,\n boxHeight: () => this._boxWidth ?? this._getMarkWidth(),\n ruleHeight: () => this._shaftWidth ?? this._getMarkWidth(),\n q1q3Height: () => this._boxWidth ?? this._getMarkWidth(),\n minMaxHeight: () => this._shaftWidth ?? this._getMarkWidth()\n };\n\n this.setMarkStyle(boxPlotMark, boxPlotMarkStyles, STATE_VALUE_ENUM.STATE_NORMAL, AttributeLevel.Series);\n\n this._trigger.registerMark(boxPlotMark);\n }\n\n const outlierMark = this._outlierMark;\n if (outlierMark) {\n this.setMarkStyle(\n outlierMark,\n {\n fill: this._outliersStyle?.fill ?? this.getColorAttribute(),\n size: isNumber(this._outliersStyle?.size) ? this._outliersStyle.size : DEFAULT_OUTLIER_SIZE,\n symbolType: 'circle'\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n this._trigger.registerMark(outlierMark);\n }\n }\n\n initBoxPlotMarkStyle(): void {\n const boxPlotMark = this._boxPlotMark;\n const axisHelper = this._direction === Direction.vertical ? this._yAxisHelper : this._xAxisHelper;\n if (boxPlotMark && axisHelper) {\n const { dataToPosition } = axisHelper;\n const scale = axisHelper?.getScale?.(0);\n this.setMarkStyle(\n boxPlotMark,\n {\n min: (datum: Datum) =>\n valueInScaleRange(\n dataToPosition(this.getDatumPositionValues(datum, this._minField), {\n bandPosition: this._bandPosition\n }),\n scale\n ),\n q1: (datum: Datum) =>\n valueInScaleRange(\n dataToPosition(this.getDatumPositionValues(datum, this._q1Field), {\n bandPosition: this._bandPosition\n }),\n scale\n ),\n median: (datum: Datum) =>\n valueInScaleRange(\n dataToPosition(this.getDatumPositionValues(datum, this._medianField), {\n bandPosition: this._bandPosition\n }),\n scale\n ),\n q3: (datum: Datum) =>\n valueInScaleRange(\n dataToPosition(this.getDatumPositionValues(datum, this._q3Field), {\n bandPosition: this._bandPosition\n }),\n scale\n ),\n max: (datum: Datum) =>\n valueInScaleRange(\n dataToPosition(this.getDatumPositionValues(datum, this._maxField), {\n bandPosition: this._bandPosition\n }),\n scale\n )\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n const outlierMark = this._outlierMark;\n if (outlierMark && axisHelper) {\n const { dataToPosition } = axisHelper;\n const scale = axisHelper?.getScale?.(0);\n const outlierMarkPositionChannel =\n this._direction === Direction.vertical\n ? {\n x: this.dataToPositionX.bind(this),\n y: (datum: Datum) =>\n valueInScaleRange(\n dataToPosition(this.getDatumPositionValues(datum, BOX_PLOT_OUTLIER_VALUE_FIELD), {\n bandPosition: this._bandPosition\n }),\n scale\n )\n }\n : {\n y: this.dataToPositionY.bind(this),\n x: (datum: Datum) =>\n valueInScaleRange(\n dataToPosition(this.getDatumPositionValues(datum, BOX_PLOT_OUTLIER_VALUE_FIELD), {\n bandPosition: this._bandPosition\n }),\n scale\n )\n };\n this.setMarkStyle(outlierMark, outlierMarkPositionChannel, STATE_VALUE_ENUM.STATE_NORMAL, AttributeLevel.Series);\n }\n }\n\n initData(): void {\n super.initData();\n if (!this._data) {\n return;\n }\n\n registerDataSetInstanceTransform(this._dataSet, 'foldOutlierData', foldOutlierData);\n registerDataSetInstanceTransform(this._dataSet, 'addVChartProperty', addVChartProperty);\n\n const outlierDataView = new DataView(this._dataSet, { name: `${this.type}_outlier_${this.id}_data` });\n outlierDataView.parse([this.getViewData()], {\n type: 'dataview'\n });\n outlierDataView.name = `${PREFIX}_series_${this.id}_outlierData`;\n outlierDataView.transform({\n type: 'foldOutlierData',\n options: {\n dimensionField: this._direction === Direction.vertical ? this._fieldX : this._fieldY,\n outliersField: this._outliersField\n }\n });\n\n outlierDataView.transform(\n {\n type: 'addVChartProperty',\n options: {\n beforeCall: initKeyMap.bind(this),\n call: addDataKey\n }\n },\n false\n );\n\n this._outlierDataView = new SeriesData(this._option, outlierDataView);\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n //init在axis初始化之后才被执行,此时axisHelper不为空\n this.initBoxPlotMarkStyle();\n }\n\n private _getMarkWidth() {\n if (this._autoBoxWidth) {\n return this._autoBoxWidth;\n }\n //获取自适应的图元宽度\n const bandAxisHelper = this._direction === Direction.vertical ? this._xAxisHelper : this._yAxisHelper;\n const xField = this._direction === Direction.vertical ? this._fieldX : this._fieldY;\n\n const innerBandWidth = bandAxisHelper.getBandwidth(xField.length - 1);\n const autoBoxWidth = innerBandWidth / xField.length;\n this._autoBoxWidth = autoBoxWidth;\n\n return this._autoBoxWidth;\n }\n\n onLayoutEnd(ctx: any) {\n super.onLayoutEnd(ctx);\n //每次布局结束,清除自适应宽度缓存\n this._autoBoxWidth = null;\n }\n\n private _initAnimationSpec(config: any = {}) {\n //将spec中的animation的type替换为箱型图的type\n const newConfig = merge({}, config);\n ['appear', 'enter', 'update', 'exit', 'disappear'].forEach(state => {\n if (newConfig[state] && newConfig[state].type === 'scaleIn') {\n newConfig[state].type = this._shaftShape === 'line' ? 'boxplotScaleIn' : 'barBoxplotScaleIn';\n } else if (newConfig[state] && newConfig[state].type === 'scaleOut') {\n newConfig[state].type = this._shaftShape === 'line' ? 'boxplotScaleOut' : 'barBoxplotScaleOut';\n }\n });\n return newConfig;\n }\n\n initAnimation() {\n const animationParams = getGroupAnimationParams(this);\n\n if (this._boxPlotMark) {\n const newDefaultConfig = this._initAnimationSpec(Factory.getAnimationInKey('scaleInOut')?.());\n const newConfig = this._initAnimationSpec(\n userAnimationConfig(SeriesMarkNameEnum.boxPlot, this._spec, this._markAttributeContext)\n );\n this._boxPlotMark.setAnimationConfig(animationConfig(newDefaultConfig, newConfig, animationParams));\n }\n\n if (this._outlierMark) {\n const outlierMarkUserAnimation = {\n appear: (this._spec.animationAppear as IMarkAnimateSpec)?.symbol,\n disappear: (this._spec.animationDisappear as IMarkAnimateSpec)?.symbol,\n enter: (this._spec.animationEnter as IMarkAnimateSpec)?.symbol,\n exit: (this._spec.animationExit as IMarkAnimateSpec)?.symbol,\n update: (this._spec.animationUpdate as IMarkAnimateSpec)?.symbol\n };\n this._outlierMark.setAnimationConfig(\n animationConfig(Factory.getAnimationInKey('scaleInOut')?.(), outlierMarkUserAnimation, animationParams)\n );\n }\n }\n\n protected initTooltip() {\n this._tooltipHelper = new BoxPlotSeriesTooltipHelper(this);\n this._boxPlotMark && this._tooltipHelper.activeTriggerSet.mark.add(this._boxPlotMark);\n this._outlierMark && this._tooltipHelper.activeTriggerSet.mark.add(this._outlierMark);\n }\n\n getStatisticFields() {\n const fields = super.getStatisticFields();\n const outliersField = fields.find(f => f.key === this._outliersField);\n if (outliersField) {\n outliersField.operations = ['array-min', 'array-max'];\n }\n return fields;\n }\n\n onEvaluateEnd(ctx: IModelEvaluateOption): void {\n //初次编译时,会传入空数据;待所有计算完成后,需要重新执行updateData更新数据\n super.onEvaluateEnd(ctx);\n this._outlierDataView.updateData();\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._boxPlotMark];\n }\n}\n\nexport const registerBoxplotSeries = () => {\n registerBoxPlotMark();\n registerSymbolMark();\n registerScaleInOutAnimation();\n Factory.registerSeries(BoxPlotSeries.type, BoxPlotSeries);\n};\n","import { Direction } from '../../typings';\nimport { CartesianChartSpecTransformer } from '../cartesian';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { IBoxPlotChartSpec } from './interface';\n\nexport class BoxPlotChartSpecTransformer<\n T extends IBoxPlotChartSpec = IBoxPlotChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const dataFields = [spec.maxField, spec.medianField, spec.q1Field, spec.q3Field, spec.minField, spec.outliersField];\n const seriesSpec = {\n ...super._getDefaultSeriesSpec(spec),\n boxPlot: spec.boxPlot,\n direction: spec.direction ?? Direction.vertical,\n minField: spec.minField,\n maxField: spec.maxField,\n q1Field: spec.q1Field,\n medianField: spec.medianField,\n q3Field: spec.q3Field,\n outliersField: spec.outliersField,\n outliersStyle: spec.outliersStyle\n };\n seriesSpec[seriesSpec.direction === Direction.vertical ? 'yField' : 'xField'] = dataFields;\n\n return seriesSpec;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n if (!spec.axes) {\n spec.axes = [\n {\n orient: 'bottom'\n },\n {\n orient: 'left'\n }\n ];\n }\n setDefaultCrosshairForCartesianChart(spec);\n }\n}\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IBoxPlotChartSpec } from './interface';\nimport { registerBoxplotSeries } from '../../series/box-plot/box-plot';\nimport { Factory } from '../../core/factory';\nimport { BoxPlotChartSpecTransformer } from './box-plot-transformer';\nimport { BaseChart } from '../base';\n\nexport class BoxPlotChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.boxPlot;\n static readonly seriesType: string = SeriesTypeEnum.boxPlot;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = BoxPlotChartSpecTransformer;\n readonly transformerConstructor = BoxPlotChartSpecTransformer;\n readonly type: string = ChartTypeEnum.boxPlot;\n readonly seriesType: string = SeriesTypeEnum.boxPlot;\n}\n\nexport const registerBoxplotChart = () => {\n registerBoxplotSeries();\n Factory.registerChart(BoxPlotChart.type, BoxPlotChart);\n};\n","import { isNil } from '@visactor/vutils';\nimport type { HierarchyNodeDatum } from './interface';\n\nexport const calculateNodeValue = (subTree: HierarchyNodeDatum[]) => {\n let sum = 0;\n subTree.forEach((node, index) => {\n if (isNil(node.value)) {\n if (node.children?.length) {\n node.value = calculateNodeValue(node.children);\n } else {\n node.value = 0;\n }\n }\n\n sum += Math.abs(node.value);\n });\n\n return sum;\n};\n","import { calculateNodeValue } from './hierarchy';\nimport type { ILogger } from '@visactor/vutils';\nimport { isNil, clamp, minInArray, isFunction, isNumber, isString, Logger, isValid, isNumeric } from '@visactor/vutils';\nimport type {\n SankeyData,\n SankeyOptions,\n SankeyLinkDatum,\n SankeyNodeDatum,\n SankeyLinkElement,\n SankeyNodeElement,\n HierarchyNodeDatum\n} from './interface';\nimport { field, isVertical } from '@visactor/vgrammar-util';\n\nfunction left(node: SankeyNodeElement) {\n return node.depth;\n}\n\nfunction right(node: SankeyNodeElement, maxDepth: number) {\n return maxDepth - 1 - node.endDepth;\n}\n\nfunction justify(node: SankeyNodeElement, maxDepth: number) {\n return node.sourceLinks.length ? node.depth : maxDepth - 1;\n}\n\nfunction center(node: SankeyNodeElement, maxDepth: number, nodeMap: Record) {\n return node.targetLinks.length\n ? node.depth\n : node.sourceLinks.length\n ? minInArray(node.sourceLinks.map(link => nodeMap[link.target].depth)) - 1\n : 0;\n}\n\nconst ascendingNodeBreadth = (a: SankeyNodeElement, b: SankeyNodeElement) => {\n return a.y0 - b.y0;\n};\n\nconst calcDivideValue = (node: SankeyNodeElement, isTarget?: boolean) => {\n if (isNil(node.value)) {\n return null;\n }\n\n const res = (isTarget ? node.targetLinks : node.sourceLinks).reduce(\n (res, sLink) => {\n if (isNil(sLink.value)) {\n res.count += 1;\n } else {\n res.sum += sLink.value;\n }\n\n return res;\n },\n { sum: 0, count: 0 }\n );\n\n return res.count > 0 ? (node.value - res.sum) / res.count : null;\n};\n\nconst alignFunctions = {\n left,\n right,\n justify,\n center,\n start: left,\n end: right\n};\n\nexport class SankeyLayout {\n private options: SankeyOptions;\n\n private _getNodeKey?: (datum: SankeyNodeDatum) => string;\n private _alignFunc: (\n node: SankeyNodeElement,\n maxDepth: number,\n nodeMap: Record\n ) => number;\n\n /** runtime vars */\n private _maxDepth: number;\n private _gapY: number;\n private _viewBox: { x0: number; x1: number; y0: number; y1: number; width: number; height: number };\n private _nodeMap: Record;\n private _isHierarchic?: boolean;\n private _logger: ILogger;\n\n static defaultOptions: Partial = {\n iterations: 6,\n nodeAlign: 'justify',\n direction: 'horizontal',\n nodeWidth: 24,\n nodeGap: 8,\n crossNodeAlign: 'middle',\n dropIsolatedNode: true\n };\n constructor(options?: SankeyOptions) {\n this.options = Object.assign({}, SankeyLayout.defaultOptions, options);\n const keyOption = this.options.nodeKey;\n const keyFunc = isFunction(keyOption) ? keyOption : keyOption ? field(keyOption as string) : null;\n\n this._getNodeKey = keyFunc;\n this._logger = Logger.getInstance();\n this._alignFunc = isFunction(this.options.setNodeLayer)\n ? (node: SankeyNodeElement) => {\n return this.options.setNodeLayer(node.datum);\n }\n : alignFunctions[this.options.nodeAlign];\n }\n\n layout(\n data: SankeyData,\n config: { x0: number; x1: number; y0: number; y1: number } | { width: number; height: number }\n ) {\n if (!data) {\n return null;\n }\n\n const viewBox =\n 'width' in config\n ? { x0: 0, x1: config.width, y0: 0, y1: config.height, width: config.width, height: config.height }\n : {\n x0: Math.min(config.x0, config.x1),\n x1: Math.max(config.x0, config.x1),\n y0: Math.min(config.y0, config.y1),\n y1: Math.max(config.y0, config.y1),\n width: Math.abs(config.x1 - config.x0),\n height: Math.abs(config.y1 - config.y0)\n };\n\n if (isVertical(this.options.direction)) {\n this._viewBox = {\n x0: viewBox.y0,\n x1: viewBox.y1,\n y0: viewBox.x0,\n y1: viewBox.x1,\n width: viewBox.height,\n height: viewBox.width\n };\n } else {\n this._viewBox = viewBox;\n }\n const result = this.computeNodeLinks(data);\n const nodes = result.nodes;\n const links = result.links;\n this._nodeMap = result.nodeMap;\n\n this.computeNodeValues(nodes);\n this.computeNodeDepths(nodes);\n\n if (['right', 'end', 'justify'].includes(this.options.nodeAlign)) {\n this.computeNodeEndDepths(nodes);\n }\n\n if (this._maxDepth <= 1) {\n // empty data\n return null;\n }\n const columns = this.computeNodeBreadths(nodes);\n this.computeLinkBreadths(nodes);\n\n if (isVertical(this.options.direction)) {\n nodes.forEach(node => {\n const y0 = node.y0;\n const y1 = node.y1;\n\n node.y0 = node.x0;\n node.y1 = node.x1;\n node.x0 = y0;\n node.x1 = y1;\n });\n\n links.forEach(link => {\n link.vertical = true;\n const x0 = link.x0;\n const x1 = link.x1;\n link.x0 = link.y0;\n link.x1 = link.y1;\n link.y0 = x0;\n link.y1 = x1;\n });\n }\n\n links.forEach(link => {\n const sourceNode = this._nodeMap[link.source];\n const targetNode = this._nodeMap[link.target];\n\n link.sourceRect = { x0: sourceNode.x0, x1: sourceNode.x1, y0: sourceNode.y0, y1: sourceNode.y1 };\n link.targetRect = { x0: targetNode.x0, x1: targetNode.x1, y1: targetNode.y1, y0: targetNode.y0 };\n });\n return { nodes, links, columns };\n }\n\n computeHierarchicNodeLinks(originalNodes: HierarchyNodeDatum[]) {\n const nodes: SankeyNodeElement[] = [];\n const links: SankeyLinkElement[] = [];\n const nodeMap: Record = {};\n const linkMap: Record = {};\n const originalLinks: (SankeyLinkDatum & { parents?: SankeyNodeElement[] })[] = [];\n\n calculateNodeValue(originalNodes);\n\n const doSubTree = (subTree: HierarchyNodeDatum[], depth: number, parents?: SankeyNodeElement[]) => {\n subTree.forEach((node, index) => {\n const nodeKey = this._getNodeKey\n ? this._getNodeKey(node)\n : parents\n ? `${parents[parents.length - 1].key}-${index}`\n : `${depth}-${index}`;\n\n if (nodeMap[nodeKey]) {\n nodeMap[nodeKey].value = undefined;\n } else {\n const nodeElement: SankeyNodeElement = {\n depth,\n datum: node,\n index: index,\n key: nodeKey,\n value: node.value ?? 0,\n sourceLinks: [] as SankeyLinkElement[],\n targetLinks: [] as SankeyLinkElement[]\n };\n\n nodeMap[nodeKey] = nodeElement;\n nodes.push(nodeElement);\n }\n if (parents) {\n originalLinks.push({\n source: parents[parents.length - 1].key,\n target: nodeKey,\n value: node.value ?? 0,\n parents\n });\n }\n\n if (node.children && node.children.length) {\n doSubTree(node.children, depth + 1, parents ? parents.concat([nodeMap[nodeKey]]) : [nodeMap[nodeKey]]);\n }\n });\n };\n\n doSubTree(originalNodes, 0, null);\n originalLinks.forEach((link, index) => {\n const key = `${link.source}-${link.target}`;\n\n if (linkMap[key]) {\n linkMap[key].value += link.value;\n\n (linkMap[key].datum as SankeyLinkDatum[]).push(link);\n\n return;\n }\n\n const linkElement = {\n index,\n key: `${link.source}-${link.target}`,\n source: link.source,\n target: link.target,\n datum: [link],\n value: link.value,\n parents: link.parents.map(parent => parent.key)\n };\n\n links.push(linkElement);\n nodeMap[link.source].sourceLinks.push(linkElement);\n nodeMap[link.target].targetLinks.push(linkElement);\n linkMap[key] = linkElement;\n });\n\n return { nodes, links, nodeMap };\n }\n\n computeSourceTargetNodeLinks(data: { nodes?: SankeyNodeDatum[]; links: SankeyLinkDatum[] }) {\n const nodes: SankeyNodeElement[] = [];\n const links: SankeyLinkElement[] = [];\n const nodeMap: Record = {};\n\n if (data.nodes) {\n data.nodes.forEach((node, index) => {\n const nodeElement = {\n depth: -1,\n datum: node,\n index,\n key: this._getNodeKey ? this._getNodeKey(node) : index,\n value: node.value,\n sourceLinks: [] as SankeyLinkElement[],\n targetLinks: [] as SankeyLinkElement[]\n };\n\n nodeMap[nodeElement.key] = nodeElement;\n nodes.push(nodeElement);\n });\n }\n const invalidLinks: SankeyLinkDatum[] = [];\n\n data.links.forEach((link: SankeyLinkDatum, index) => {\n if (isNil(link.source) || isNil(link.target)) {\n return;\n }\n\n if (data.nodes && (!nodeMap[link.source] || !nodeMap[link.target])) {\n return;\n }\n\n if (!data.nodes && !nodeMap[link.source]) {\n nodeMap[link.source] = {\n value: undefined,\n depth: -1,\n index: nodes.length,\n key: link.source,\n datum: null,\n sourceLinks: [],\n targetLinks: []\n };\n nodes.push(nodeMap[link.source]);\n }\n\n if (!data.nodes && !nodeMap[link.target]) {\n nodeMap[link.target] = {\n value: undefined,\n depth: -1,\n index: nodes.length,\n key: link.target,\n datum: null,\n sourceLinks: [],\n targetLinks: []\n };\n nodes.push(nodeMap[link.target]);\n }\n const linkElement = {\n index,\n source: link.source,\n target: link.target,\n datum: link,\n value: link.value\n };\n\n if (this.options.divideNodeValueToLink && isNil(link.value)) {\n invalidLinks.push(linkElement);\n }\n\n links.push(linkElement);\n nodeMap[link.source].sourceLinks.push(linkElement);\n nodeMap[link.target].targetLinks.push(linkElement);\n });\n\n if (this.options.divideNodeValueToLink && invalidLinks.length) {\n invalidLinks.forEach(link => {\n const values = [calcDivideValue(nodeMap[link.source]), calcDivideValue(nodeMap[link.target], true)].filter(\n entry => !isNil(entry)\n );\n\n if (values.length) {\n link.value = minInArray(values);\n }\n });\n }\n\n return { nodeMap, nodes, links };\n }\n\n computeNodeLinks(data: SankeyData) {\n let res: {\n nodeMap: Record;\n nodes: SankeyNodeElement[];\n links: SankeyLinkElement[];\n };\n if (!('links' in data)) {\n this._isHierarchic = true;\n res = this.computeHierarchicNodeLinks(data.nodes);\n } else {\n res = this.computeSourceTargetNodeLinks(data);\n }\n\n let nodes = res.nodes;\n const links = res.links;\n\n if (this.options.linkSortBy) {\n for (let i = 0, len = nodes.length; i < len; i++) {\n nodes[i].sourceLinks.sort(this.options.linkSortBy);\n nodes[i].targetLinks.sort(this.options.linkSortBy);\n }\n }\n\n if (this.options.dropIsolatedNode) {\n nodes = nodes.filter(node => node.targetLinks.length || node.sourceLinks.length);\n }\n\n return { nodes, links, nodeMap: res.nodeMap };\n }\n\n computeNodeValues(nodes: SankeyNodeElement[]) {\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n\n node.value = Math.max(\n isNil(node.value) ? 0 : node.value,\n node.sourceLinks.reduce((sum, link: SankeyLinkElement) => {\n return sum + (link.value ?? 0);\n }, 0),\n node.targetLinks.reduce((sum, link: SankeyLinkElement) => {\n return sum + (link.value ?? 0);\n }, 0)\n );\n }\n }\n\n computeNodeDepths(nodes: SankeyNodeElement[]) {\n const n = nodes.length;\n let current: SankeyNodeElement[] = nodes;\n let next: SankeyNodeElement[];\n let nextMap: Record;\n let depth = 0;\n\n while (current.length && depth < n) {\n next = [];\n nextMap = {};\n\n for (let i = 0, curLen = current.length; i < curLen; i++) {\n const node = current[i];\n node.depth = depth;\n for (let j = 0, linkLen = node.sourceLinks.length; j < linkLen; j++) {\n const link = node.sourceLinks[j];\n if (!nextMap[link.target]) {\n next.push(this._nodeMap[link.target]);\n nextMap[link.target] = true;\n }\n }\n }\n current = next;\n depth += 1;\n }\n\n if (depth > n) {\n this._logger.warn('Error: there is a circular link');\n }\n\n this._maxDepth = depth;\n }\n\n computeNodeEndDepths(nodes: SankeyNodeElement[]) {\n const n = nodes.length;\n let current: SankeyNodeElement[] = nodes;\n let next: SankeyNodeElement[];\n let nextMap: Record;\n let depth = 0;\n\n while (current.length && depth < n) {\n next = [];\n nextMap = {};\n for (let i = 0, curLen = current.length; i < curLen; i++) {\n const node = current[i];\n node.endDepth = depth;\n\n for (let j = 0, linkLen = node.targetLinks.length; j < linkLen; j++) {\n const link = node.targetLinks[j];\n if (!nextMap[link.source]) {\n next.push(this._nodeMap[link.source]);\n nextMap[link.source] = true;\n }\n }\n }\n current = next;\n depth += 1;\n }\n\n if (depth > n) {\n this._logger.warn('Error: there is a circular link');\n }\n }\n\n computeNodeLayers(nodes: SankeyNodeElement[]) {\n const nodeWidthOption = this.options.nodeWidth;\n const linkWidthOption = this.options.linkWidth;\n const minStepWidth = this.options.minStepWidth;\n const width = this._viewBox.width;\n let nodeWidth: number = null;\n let linkWidth: number = null;\n let isEvenWidth = false;\n\n if (isString(nodeWidthOption)) {\n const ratio = clamp(parseFloat(nodeWidthOption.replace('%', '')) / 100, 0, 1);\n let stepWidth = width / (this._maxDepth - 1 + ratio);\n\n if (minStepWidth > 0) {\n stepWidth = Math.max(minStepWidth, stepWidth);\n }\n\n nodeWidth = stepWidth * ratio;\n linkWidth = stepWidth * (1 - ratio);\n isEvenWidth = true;\n } else if (isNumber(nodeWidthOption)) {\n nodeWidth = nodeWidthOption;\n\n if (isNumber(linkWidthOption)) {\n linkWidth = linkWidthOption;\n } else if (isNil(linkWidthOption)) {\n let stepWidth = (width - nodeWidthOption) / (this._maxDepth - 1);\n\n if (minStepWidth > 0) {\n stepWidth = Math.max(minStepWidth, stepWidth);\n }\n\n linkWidth = stepWidth - nodeWidthOption;\n }\n isEvenWidth = true;\n } else if (isFunction(nodeWidthOption) && isNumber(linkWidthOption)) {\n linkWidth = linkWidthOption;\n }\n const columns: SankeyNodeElement[][] = [];\n\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n node.layer = this._isHierarchic\n ? node.depth\n : clamp(Math.floor(this._alignFunc(node, this._maxDepth, this._nodeMap)), 0, this._maxDepth - 1);\n const layer = node.layer;\n\n if (layer === this._maxDepth - 1) {\n node.isLastLayer = true;\n }\n if (isEvenWidth) {\n node.x0 = this._viewBox.x0 + layer * (nodeWidth + linkWidth);\n node.x1 = node.x0 + nodeWidth;\n }\n if (columns[layer]) {\n columns[layer].push(node);\n } else {\n columns[layer] = [node];\n }\n }\n if (this.options.nodeSortBy) {\n for (let j = 0, colLen = columns.length; j < colLen; j++) {\n columns[j].sort(this.options.nodeSortBy);\n }\n }\n\n if (!isEvenWidth && isFunction(nodeWidthOption)) {\n let curLayerX = this._viewBox.x0;\n for (let i = 0; i < this._maxDepth; i++) {\n const column = columns[i];\n let maxNodeWidth = 0;\n let maxLinkWidth = 0;\n\n for (let j = 0, colLen = column.length; j < colLen; j++) {\n const node = column[j];\n const curNodeWidth = nodeWidthOption(node);\n node.x0 = curLayerX;\n node.x1 = curLayerX + curNodeWidth;\n\n maxNodeWidth = Math.max(nodeWidth, curNodeWidth);\n\n const sourceLinks = node.sourceLinks;\n\n for (let k = 0, linkLen = sourceLinks.length; k < linkLen; k++) {\n const link = sourceLinks[k];\n const curLinkWidth = isFunction(linkWidthOption) ? linkWidthOption(link) : linkWidth;\n\n maxLinkWidth = Math.max(maxLinkWidth, curLinkWidth);\n }\n }\n\n curLayerX += maxNodeWidth;\n }\n }\n\n return columns;\n }\n\n initializeNodeBreadths(columns: SankeyNodeElement[][]) {\n const minLinkHeight = this.options.minLinkHeight;\n let minNodeHeight = this.options.minNodeHeight;\n\n if (isNil(minNodeHeight) || minNodeHeight < minLinkHeight) {\n minNodeHeight = minLinkHeight;\n }\n let ky = 0;\n let getGapY: (node: SankeyNodeElement) => number = null;\n\n if (isFunction(this.options.nodeGap)) {\n getGapY = this.options.nodeGap;\n ky = columns.reduce((val: number, column: SankeyNodeElement[]) => {\n const sumValue = column.reduce((sum, node) => {\n return sum + node.value;\n }, 0);\n const sumGapY = column.reduce((sum, node) => {\n return sum + (this.options.nodeGap as (node: SankeyNodeElement) => number)(node);\n }, 0);\n\n return Math.min(val, (this._viewBox.height - sumGapY) / sumValue);\n }, Infinity);\n } else {\n const maxRowCount = columns.reduce((cnt: number, column: SankeyNodeElement[]) => {\n return Math.max(cnt, column.length);\n }, 0);\n const gapY = Math.min(\n minNodeHeight > 0 ? Math.max(this.options.nodeGap, minNodeHeight) : this.options.nodeGap,\n this._viewBox.height / maxRowCount\n );\n getGapY = () => gapY;\n this._gapY = gapY;\n\n ky = columns.reduce((val: number, column: SankeyNodeElement[]) => {\n const sumValue = column.reduce((sum, node) => {\n return sum + node.value;\n }, 0);\n\n return Math.min(val, (this._viewBox.height - (column.length - 1) * gapY) / sumValue);\n }, Infinity);\n }\n\n const isStartGap = this.options.gapPosition === 'start';\n const isMiddleGap = !isStartGap && this.options.gapPosition !== 'end';\n\n for (let i = 0, columnCount = columns.length; i < columnCount; i++) {\n const nodes = columns[i];\n\n let y = this._viewBox.y0;\n let gapY = 0;\n for (let j = 0, len = nodes.length; j < len; j++) {\n const node = nodes[j];\n gapY = getGapY(node);\n\n if (isStartGap) {\n y += gapY;\n }\n\n node.y0 = y;\n node.y1 =\n y + (minNodeHeight > 0 && node.value !== 0 ? Math.max(node.value * ky, minNodeHeight) : node.value * ky);\n\n y = isStartGap ? node.y1 : node.y1 + gapY;\n\n for (let k = 0, linkLen = node.sourceLinks.length; k < linkLen; k++) {\n const link = node.sourceLinks[k];\n link.thickness =\n minLinkHeight > 0 && link.value !== 0 ? Math.max(link.value * ky, minLinkHeight) : link.value * ky;\n }\n }\n\n let deltaY = this._viewBox.y1 - y + (isMiddleGap ? gapY : 0);\n\n if (deltaY > 0) {\n if (this.options.crossNodeAlign === 'start') {\n // do nothing\n } else if (this.options.crossNodeAlign === 'end') {\n for (let j = 0, len = nodes.length; j < len; ++j) {\n const node = nodes[j];\n node.y0 += deltaY;\n node.y1 += deltaY;\n }\n } else {\n deltaY = deltaY / (nodes.length + 1);\n for (let j = 0, len = nodes.length; j < len; ++j) {\n const node = nodes[j];\n node.y0 += deltaY * (j + 1);\n node.y1 += deltaY * (j + 1);\n }\n }\n } else if (deltaY < 0 && nodes.length > 1) {\n deltaY = deltaY / (nodes.length - 1);\n\n if (gapY + deltaY > 0) {\n gapY += deltaY;\n\n for (let j = 1, len = nodes.length; j < len; ++j) {\n const node = nodes[j];\n node.y0 += deltaY * j;\n node.y1 += deltaY * j;\n }\n }\n }\n this.reorderLinks(nodes);\n }\n }\n\n computeNodeBreadths(nodes: SankeyNodeElement[]) {\n const columns = this.computeNodeLayers(nodes);\n\n this.initializeNodeBreadths(columns);\n const iterations = this.options.iterations;\n\n /**\n * don't adjust the order of node when the data is hierarchy data or the layer of node is set customizedly\n */\n if (!this._isHierarchic && !isFunction(this.options.setNodeLayer) && !isFunction(this.options.nodeGap)) {\n for (let i = 0; i < iterations; ++i) {\n const alpha = Math.pow(0.99, i);\n const beta = Math.max(1 - alpha, (i + 1) / iterations);\n\n this.relaxRightToLeft(columns, alpha, beta);\n this.relaxLeftToRight(columns, alpha, beta);\n }\n }\n\n return columns;\n }\n\n // Reposition each node based on its incoming (target) links.\n relaxLeftToRight(columns: SankeyNodeElement[][], alpha: number, beta: number) {\n for (let i = 1, n = columns.length; i < n; ++i) {\n const column = columns[i];\n for (let j = 0, colLen = column.length; j < colLen; j++) {\n const target = column[j];\n let y = 0;\n let w = 0;\n\n for (let k = 0, linkLen = target.targetLinks.length; k < linkLen; k++) {\n const link = target.targetLinks[k];\n const v = link.value * (target.layer - this._nodeMap[link.source].layer);\n y += this.targetTop(this._nodeMap[link.source], target) * v;\n w += v;\n }\n if (!(w > 0)) {\n continue;\n }\n const dy = (y / w - target.y0) * alpha;\n target.y0 += dy;\n target.y1 += dy;\n this.reorderNodeLinks(target);\n }\n if (isNil(this.options.nodeSortBy)) {\n column.sort(ascendingNodeBreadth);\n }\n this.resolveCollisions(column, beta);\n }\n }\n\n // Reposition each node based on its outgoing (source) links.\n relaxRightToLeft(columns: SankeyNodeElement[][], alpha: number, beta: number) {\n for (let n = columns.length, i = n - 2; i >= 0; --i) {\n const column = columns[i];\n for (let j = 0, colLen = column.length; j < colLen; j++) {\n const source = column[j];\n let y = 0;\n let w = 0;\n\n for (let k = 0, linkLen = source.sourceLinks.length; k < linkLen; k++) {\n const link = source.sourceLinks[k];\n const v = link.value * (this._nodeMap[link.target].layer - source.layer);\n y += this.sourceTop(source, this._nodeMap[link.target]) * v;\n w += v;\n }\n if (!(w > 0)) {\n continue;\n }\n const dy = (y / w - source.y0) * alpha;\n source.y0 += dy;\n source.y1 += dy;\n this.reorderNodeLinks(source);\n }\n if (this.options.nodeSortBy === undefined) {\n column.sort(ascendingNodeBreadth);\n }\n this.resolveCollisions(column, beta);\n }\n }\n\n resolveCollisions(nodes: SankeyNodeElement[], alpha: number) {\n const i = nodes.length >> 1;\n const subject = nodes[i];\n this.resolveCollisionsBottomToTop(nodes, subject.y0 - this._gapY, i - 1, alpha);\n this.resolveCollisionsTopToBottom(nodes, subject.y1 + this._gapY, i + 1, alpha);\n this.resolveCollisionsBottomToTop(nodes, this._viewBox.y1, nodes.length - 1, alpha);\n this.resolveCollisionsTopToBottom(nodes, this._viewBox.y0, 0, alpha);\n }\n\n // Push any overlapping nodes down.\n resolveCollisionsTopToBottom(nodes: SankeyNodeElement[], y: number, i: number, alpha: number) {\n for (; i < nodes.length; ++i) {\n const node = nodes[i];\n const dy = (y - node.y0) * alpha;\n if (dy > 1e-6) {\n (node.y0 += dy), (node.y1 += dy);\n }\n y = node.y1 + this._gapY;\n }\n }\n\n // Push any overlapping nodes up.\n resolveCollisionsBottomToTop(nodes: SankeyNodeElement[], y: number, i: number, alpha: number) {\n for (; i >= 0; --i) {\n const node = nodes[i];\n const dy = (node.y1 - y) * alpha;\n if (dy > 1e-6) {\n node.y0 -= dy;\n node.y1 -= dy;\n }\n y = node.y0 - this._gapY;\n }\n }\n\n // Returns the target.y0 that would produce an ideal link from source to target.\n targetTop(source: SankeyNodeElement, target: SankeyNodeElement) {\n let y = source.y0 - ((source.sourceLinks.length - 1) * this._gapY) / 2;\n let i: number;\n let len: number;\n let link: SankeyLinkElement;\n\n for (i = 0, len = source.sourceLinks.length; i < len; i++) {\n link = source.sourceLinks[i];\n\n if (link.target === target.key) {\n break;\n }\n y += link.thickness + this._gapY;\n }\n for (i = 0, len = target.targetLinks.length; i < len; i++) {\n link = target.targetLinks[i];\n if (link.source === source.key) {\n break;\n }\n y -= link.thickness;\n }\n return y;\n }\n\n // Returns the source.y0 that would produce an ideal link from source to target.\n sourceTop(source: SankeyNodeElement, target: SankeyNodeElement) {\n let y = target.y0 - ((target.targetLinks.length - 1) * this._gapY) / 2;\n let i: number;\n let len: number;\n let link: SankeyLinkElement;\n\n for (i = 0, len = target.targetLinks.length; i < len; i++) {\n link = target.targetLinks[i];\n if (link.source === source.key) {\n break;\n }\n y += link.thickness + this._gapY;\n }\n for (i = 0, len = source.sourceLinks.length; i < len; i++) {\n link = source.sourceLinks[i];\n if (link.target === target.key) {\n break;\n }\n y -= link.thickness;\n }\n return y;\n }\n\n computeLinkBreadths(nodes: SankeyNodeElement[]) {\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n let y0 = node.y0;\n let y1 = y0;\n\n for (let j = 0, linkLen = node.sourceLinks.length; j < linkLen; j++) {\n const link = node.sourceLinks[j];\n link.y0 = y0 + link.thickness / 2;\n link.x0 = node.x1;\n y0 += link.thickness;\n }\n for (let j = 0, linkLen = node.targetLinks.length; j < linkLen; j++) {\n const link = node.targetLinks[j];\n link.y1 = y1 + link.thickness / 2;\n link.x1 = node.x0;\n y1 += link.thickness;\n }\n }\n }\n\n reorderNodeLinks(node: SankeyNodeElement) {\n if (isNil(this.options.linkSortBy)) {\n const targetLinks = node.targetLinks;\n const sourceLinks = node.sourceLinks;\n\n for (let j = 0, linkLen = targetLinks.length; j < linkLen; j++) {\n const link = targetLinks[j];\n this._nodeMap[link.source].sourceLinks.sort(this._ascendingTargetBreadth);\n }\n for (let j = 0, linkLen = sourceLinks.length; j < linkLen; j++) {\n const link = sourceLinks[j];\n this._nodeMap[link.target].targetLinks.sort(this._ascendingSourceBreadth);\n }\n }\n }\n\n reorderLinks(nodes: SankeyNodeElement[]) {\n if (isNil(this.options.linkSortBy)) {\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n node.sourceLinks.sort(this._ascendingTargetBreadth);\n node.targetLinks.sort(this._ascendingSourceBreadth);\n }\n }\n }\n\n private _ascendingSourceBreadth = (a: SankeyLinkElement, b: SankeyLinkElement) => {\n return ascendingNodeBreadth(this._nodeMap[a.source], this._nodeMap[b.source]) || a.index - b.index;\n };\n\n private _ascendingTargetBreadth = (a: SankeyLinkElement, b: SankeyLinkElement) => {\n return ascendingNodeBreadth(this._nodeMap[a.target], this._nodeMap[b.target]) || a.index - b.index;\n };\n}\n","import type { SankeyData, SankeyOptions } from './interface';\nimport { SankeyLayout } from './layout';\n\nexport const transform = (\n options: SankeyOptions & ({ width: number; height: number } | { x0: number; x1: number; y0: number; y1: number }),\n upstreamData: SankeyData | SankeyData[]\n) => {\n const layout = new SankeyLayout(options);\n\n const res = layout.layout(\n Array.isArray(upstreamData) ? upstreamData[0] : upstreamData,\n 'width' in options\n ? {\n width: options.width,\n height: options.height\n }\n : {\n x0: options.x0,\n x1: options.x1,\n y0: options.y0,\n y1: options.y1\n }\n );\n return res ? [res] : [];\n};\n","import type { SankeyOptions, SankeyData } from '@visactor/vgrammar-sankey';\nimport { SankeyLayout } from '@visactor/vgrammar-sankey';\nimport { isArray, isNil, isString } from '@visactor/vutils';\n\nexport interface ISankeyOpt extends SankeyOptions {\n targetField: string;\n sourceField: string;\n valueField: string;\n view: () => { x0: number; x1: number; y0: number; y1: number };\n}\n\nexport const collectHierarchyField = (set: Set, data: any[], field: string) => {\n data.forEach((obj: any) => {\n if (!isNil(obj[field])) {\n set.add(obj[field]);\n }\n\n if (obj.children && obj.children.length > 0) {\n collectHierarchyField(set, obj.children, field); // 递归处理子节点\n }\n });\n};\n\nconst convertValuesToNumbers = (data: any) => {\n data.forEach((obj: any) => {\n obj.value = isString(obj.value) ? +obj.value : obj.value; // 将字符串转换为数值类型\n if (obj.children && obj.children.length > 0) {\n convertValuesToNumbers(obj.children); // 递归处理子节点\n }\n });\n};\n\nexport const sankeyFormat = (data: any[]): SankeyData[] => {\n if (!data || !isArray(data)) {\n return [] as SankeyData[];\n }\n\n if (data.length > 1) {\n /**\n * data structure for Fengshen:\n * [{id:’nodes’, values:[xxx]},{id:’links’, values:[xxx]}]\n */\n const updateData: SankeyData = {\n links: [],\n nodes: []\n };\n data.forEach((datum: any) => {\n if (datum.id === 'links' || datum.id === 'nodes') {\n updateData[datum.id] = datum.values;\n }\n });\n return [updateData];\n }\n /**\n * data structure:\n * [{nodes: [xxx], links: [xxx]}]\n */\n if (data[0]?.latestData) {\n return data[0].latestData;\n }\n return data;\n};\n\nexport const sankeyLayout = (data: SankeyData[], op: ISankeyOpt) => {\n if (!data || !op?.view || !data.length) {\n return [];\n }\n\n const view = op.view();\n\n if (\n view.x1 - view.x0 === 0 ||\n view.y1 - view.y0 === 0 ||\n view.x1 - view.x0 === -Infinity ||\n view.x1 - view.x0 === Infinity ||\n view.y1 - view.y0 === -Infinity ||\n view.y1 - view.y0 === Infinity\n ) {\n return [];\n }\n\n const originalData = data[0];\n\n if (op.sourceField !== 'source' || op.targetField !== 'target' || op.valueField !== 'value') {\n if ((originalData as any).links) {\n const updatedData: {}[] = [];\n\n (originalData as any).links.forEach((datum: any) => {\n const updatedDatum: any = {};\n for (const key in datum) {\n if (key === op.sourceField) {\n updatedDatum.source = datum[op.sourceField];\n } else if (key === op.targetField) {\n updatedDatum.target = datum[op.targetField];\n } else if (key === op.valueField) {\n updatedDatum.value = datum[op.valueField];\n } else {\n updatedDatum[key] = datum[key];\n }\n }\n updatedData.push(updatedDatum);\n });\n (originalData as any).links = updatedData;\n }\n }\n\n if ((originalData as any).links) {\n //node-link型数据\n const updatedData: {}[] = [];\n (originalData as any).links.forEach((datum: any) => {\n const updatedDatum: any = {};\n for (const key in datum) {\n if (key === 'value') {\n updatedDatum.value = isString(datum.value) ? +datum.value : datum.value; // 将字符串转换为数值类型\n } else {\n updatedDatum[key] = datum[key];\n }\n }\n updatedData.push(updatedDatum);\n });\n (originalData as any).links = updatedData;\n } else if ((originalData as any).nodes?.[0]?.children) {\n //层级型数据\n //Convert value from string to number\n convertValuesToNumbers((originalData as any).nodes);\n }\n\n const layout = new SankeyLayout(op);\n\n const result = [];\n\n result.push(layout.layout(originalData, view));\n\n return result;\n};\n","import type { SankeyData } from '@visactor/vgrammar-sankey';\nimport { isArray } from '@visactor/vutils';\n\nexport const sankeyNodes = (data: SankeyData) => {\n if (!data || !isArray(data)) {\n return [];\n }\n\n if (data[0]?.latestData && data[0].latestData.length && data[0].latestData[0]) {\n return data[0].latestData[0].nodes ?? [];\n }\n\n return [];\n};\n","import type { SankeyData } from '@visactor/vgrammar-sankey';\nimport { isArray } from '@visactor/vutils';\n\nexport const sankeyLinks = (data: SankeyData) => {\n if (!data || !isArray(data)) {\n return [];\n }\n\n if (data[0]?.latestData && data[0].latestData.length && data[0].latestData[0]) {\n return data[0].latestData[0].links ?? [];\n }\n\n return [];\n};\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { Datum } from '@visactor/vgrammar-core';\nimport type { IToolTipLinePattern, ITooltipPattern, TooltipActiveType } from '../../typings';\nimport { isNumber } from '@visactor/vutils';\nimport type { IDimensionInfo } from '../../event/events/dimension/interface';\n\nexport class SankeySeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n /** 获取默认的tooltip pattern */\n getDefaultTooltipPattern(activeType: TooltipActiveType, dimensionInfo?: IDimensionInfo[]): ITooltipPattern | null {\n if (activeType === 'mark') {\n return {\n visible: true,\n activeType,\n title: {\n key: undefined,\n value: (datum: Datum) => {\n if (datum.source) {\n if (isNumber(datum.source)) {\n const seriesKeys = this.series.getSeriesKeys();\n return seriesKeys[datum.source] + ' => ' + seriesKeys[datum.target];\n }\n return datum.source + ' => ' + datum.target;\n }\n return datum.datum[this.series.getSpec().categoryField];\n },\n hasShape: false\n },\n content: [\n {\n key: this.contentKeyCallback,\n value: (datum: Datum) => {\n return datum.value;\n },\n hasShape: true,\n shapeType: this.contentShapeTypeCallback,\n shapeColor: this.contentShapeColorCallback,\n shapeStroke: this.contentShapeColorCallback,\n shapeHollow: false\n }\n ]\n };\n } else if (activeType === 'dimension' && dimensionInfo) {\n const title: IToolTipLinePattern = {\n key: undefined,\n value: this._getDimensionData,\n hasShape: false\n };\n const content: IToolTipLinePattern[] = [];\n dimensionInfo.forEach(({ data }) =>\n data.forEach(({ series }: any) => {\n content.push({\n seriesId: series.id,\n key: this.contentKeyCallback,\n value: this.contentValueCallback,\n hasShape: true,\n shapeType: this.contentShapeTypeCallback,\n shapeColor: this.contentShapeColorCallback,\n shapeStroke: this.contentShapeColorCallback,\n shapeHollow: false\n });\n })\n );\n return {\n visible: true,\n activeType,\n title,\n content\n };\n }\n\n return null;\n }\n}\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport type { DirectionType } from '../../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../typings/space';\nimport { Factory } from '../../core/factory';\nimport { FadeInOutAnimation } from '../../animation/config';\n\nexport type SankeyMark = 'node' | 'link' | 'label';\n\nexport type SankeyAppearPreset = 'growIn' | 'fadeIn';\n\nexport interface ISankeyAnimationParams {\n direction: DirectionType;\n growFrom: () => number;\n}\n\nexport const sankeyGrowIn = (params: ISankeyAnimationParams, isOverall: boolean = true): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growWidthIn' : 'growHeightIn',\n options: {\n overall: isOverall ? params.growFrom() : isOverall,\n orient: Direction.horizontal ? 'positive' : 'negative'\n }\n };\n};\n\nexport const sankeyGrowOut = (params: ISankeyAnimationParams, isOverall: boolean = true): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growWidthOut' : 'growHeightOut',\n options: {\n overall: isOverall ? params.growFrom() : isOverall,\n orient: Direction.horizontal ? 'positive' : 'negative'\n }\n };\n};\n\nexport const sankeyNodePresetAnimation = (\n params: ISankeyAnimationParams,\n preset: SankeyAppearPreset\n): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'growIn': {\n return sankeyGrowIn(params);\n }\n default: {\n return sankeyGrowIn(params);\n }\n }\n};\n\nexport const sankeyLinkPresetAnimation = (preset: SankeyAppearPreset): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'growIn': {\n return { type: 'linkPathGrowIn' };\n }\n default: {\n return { type: 'linkPathGrowIn' };\n }\n }\n};\n\nexport const registerSankeyAnimation = () => {\n Factory.registerAnimation('sankeyNode', (params: ISankeyAnimationParams, preset: SankeyAppearPreset) => ({\n appear: sankeyNodePresetAnimation(params, preset),\n ...FadeInOutAnimation\n }));\n Factory.registerAnimation('sankeyLinkPath', (params: unknown, preset: SankeyAppearPreset) => ({\n appear: sankeyLinkPresetAnimation(preset),\n enter: { type: 'linkPathGrowIn' },\n exit: { type: 'linkPathGrowOut' },\n disappear: { type: 'linkPathGrowOut' }\n }));\n};\n","import { Factory } from \"../core/factory\";\n\nimport { isNil } from \"@visactor/vutils\";\n\nimport { registerGlyphGraphic, registerPathGraphic } from \"../graph/mark/graphic\";\n\nexport const getHorizontalPath = (options, ratio) => {\n var _a;\n const curvature = null !== (_a = options.curvature) && void 0 !== _a ? _a : .5, thickness = \"number\" == typeof ratio ? options.thickness * ratio : options.thickness;\n let x0 = options.x0, x1 = options.x1, y00 = options.y0, y10 = options.y1, cpx0 = x0 + curvature * (x1 - x0), cpx1 = x1 + curvature * (x0 - x1), formatter = v => v;\n !1 !== options.round && (x0 = Math.round(x0), x1 = Math.round(x1), y00 = Math.round(y00), \n y10 = Math.round(y10), cpx0 = Math.round(cpx0), cpx1 = Math.round(cpx1), formatter = Math.round);\n \"line\" === options.pathType || options.pathType;\n \"center\" === options.align ? (y00 = formatter(options.y0 - thickness / 2), y10 = formatter(options.y1 - thickness / 2)) : \"end\" === options.align ? (y00 = formatter(options.y0 + options.thickness / 2 - thickness), \n y10 = formatter(options.y1 + options.thickness / 2 - thickness)) : (y00 = formatter(options.y0 - options.thickness / 2), \n y10 = formatter(options.y1 - options.thickness / 2));\n const y01 = formatter(y00 + thickness), y11 = formatter(y10 + thickness), hasLength = Math.abs(x1 - x0) > 1e-6, endArrowPath = options.endArrow && hasLength ? `L${x1},${formatter(y10 - thickness / 2)}L${formatter(x1 + thickness)},${formatter((y10 + y11) / 2)}L${x1},${formatter(y11 + thickness / 2)}` : \"\", startArrowPath = options.startArrow && hasLength ? `L${x0},${formatter(y01 + thickness / 2)}L${formatter(x0 - thickness)},${formatter((y00 + y01) / 2)}L${x0},${formatter(y00 - thickness / 2)}` : \"\";\n return \"line\" === options.pathType ? `M${x0},${y00}L${x1},${y10}${endArrowPath}L${x1},${y11}L${x0},${y01}${startArrowPath}Z` : \"polyline\" === options.pathType ? `M${x0},${y00}L${cpx0},${y00}L${cpx0},${y10}L${x1},${y10}\\n ${endArrowPath}L${x1},${y11}L${cpx0},${y11}L${cpx0},${y01}L${x0},${y01}${startArrowPath}Z` : `M${x0},${y00}C${cpx0},${y00},${cpx1},${y10},${x1},${y10}\\n ${endArrowPath}L${x1},${y11}C${cpx1},${y11},${cpx0},${y01},${x0},${y01}${startArrowPath}Z`;\n};\n\nexport const getVerticalPath = (options, ratio) => {\n var _a;\n const curvature = null !== (_a = options.curvature) && void 0 !== _a ? _a : .5, thickness = \"number\" == typeof ratio ? options.thickness * ratio : options.thickness;\n let y0 = options.y0, y1 = options.y1, x00 = options.x0, x10 = options.x1, cpy0 = y0 + curvature * (y1 - y0), cpy1 = y1 + curvature * (y0 - y1), formatter = v => v;\n !1 !== options.round && (formatter = Math.round, y0 = Math.round(y0), y1 = Math.round(y1), \n x00 = Math.round(x00), x10 = Math.round(x10), cpy0 = Math.round(cpy0), cpy1 = Math.round(cpy1));\n \"line\" === options.pathType || options.pathType;\n \"center\" === options.align ? (x00 = formatter(options.x0 - thickness / 2), x10 = formatter(options.x1 - thickness / 2)) : \"end\" === options.align ? (x00 = formatter(options.x0 + options.thickness / 2 - thickness), \n x10 = formatter(options.x1 + options.thickness / 2 - thickness)) : (x00 = formatter(options.x0 - options.thickness / 2), \n x10 = formatter(options.x1 - options.thickness / 2));\n const x01 = formatter(x00 + thickness), x11 = formatter(x10 + thickness), hasLength = Math.abs(y1 - y0) > 1e-6, endArrowPath = options.endArrow && hasLength ? `L${formatter(x10 - thickness / 2)},${y1}L${formatter((x10 + x11) / 2)},${formatter(y1 + thickness)}L${formatter(x11 + thickness / 2)},${y1}` : \"\", startArrowPath = options.startArrow && hasLength ? `L${formatter(x01 + thickness / 2)},${y0}L${formatter((x01 + x00) / 2)},${formatter(y0 - thickness)}L${formatter(x00 - thickness / 2)},${y0}` : \"\";\n return \"line\" === options.pathType ? `M${x00},${y0}L${x10},${y1}${endArrowPath}L${x11},${y1}L${x01},${y0}${startArrowPath}Z` : \"polyline\" === options.pathType ? `M${x00},${y0}L${x00},${cpy0}L${x10},${cpy0}L${x10},${y1}\\n ${endArrowPath}L${x11},${y1}L${x11},${cpy0}L${x01},${cpy0}L${x01},${y0}${startArrowPath}Z` : `M${x00},${y0}C${x00},${cpy0},${x10},${cpy1},${x10},${y1}\\n ${endArrowPath}L${x11},${y1}C${x11},${cpy1},${x01},${cpy0},${x01},${y0}${startArrowPath}Z`;\n};\n\nconst encoder = (encodeValues, datum, element, config) => {\n var _a;\n const direction = null !== (_a = encodeValues.direction) && void 0 !== _a ? _a : null == config ? void 0 : config.direction, parsePath = [ \"vertical\", \"TB\", \"BT\" ].includes(direction) ? getVerticalPath : getHorizontalPath, isRatioShow = \"number\" == typeof encodeValues.ratio && encodeValues.ratio >= 0 && encodeValues.ratio <= 1, encodeChannels = Object.keys(encodeValues);\n return [ \"x0\", \"y0\", \"x1\", \"y1\" ].every((channel => encodeChannels.includes(channel))) ? {\n back: {\n path: isRatioShow ? parsePath(encodeValues, 1) : \"\"\n },\n front: {\n path: parsePath(encodeValues, isRatioShow ? encodeValues.ratio : 1)\n }\n } : {};\n}, linkPathGrowIn = (element, options, animationParameters) => {\n const linkValues = {\n x0: element.getGraphicAttribute(\"x0\", !1),\n x1: element.getGraphicAttribute(\"x1\", !1),\n y0: element.getGraphicAttribute(\"y0\", !1),\n y1: element.getGraphicAttribute(\"y1\", !1),\n thickness: element.getGraphicAttribute(\"thickness\", !1),\n round: element.getGraphicAttribute(\"round\", !1),\n align: element.getGraphicAttribute(\"align\", !1),\n pathType: element.getGraphicAttribute(\"pathType\", !1),\n endArrow: element.getGraphicAttribute(\"endArrow\", !1),\n startArrow: element.getGraphicAttribute(\"startArrow\", !1)\n };\n return Object.keys(linkValues).forEach((key => {\n isNil(linkValues[key]) && delete linkValues[key];\n })), {\n from: Object.assign({}, linkValues, {\n x1: linkValues.x0,\n y1: linkValues.y0\n }),\n to: linkValues\n };\n}, linkPathGrowOut = (element, options, animationParameters) => {\n const linkValues = {\n x0: element.getGraphicAttribute(\"x0\", !0),\n x1: element.getGraphicAttribute(\"x1\", !0),\n y0: element.getGraphicAttribute(\"y0\", !0),\n y1: element.getGraphicAttribute(\"y1\", !0),\n thickness: element.getGraphicAttribute(\"thickness\", !0),\n round: element.getGraphicAttribute(\"round\", !0),\n align: element.getGraphicAttribute(\"align\", !0),\n pathType: element.getGraphicAttribute(\"pathType\", !0),\n endArrow: element.getGraphicAttribute(\"endArrow\", !0),\n startArrow: element.getGraphicAttribute(\"startArrow\", !0)\n };\n return Object.keys(linkValues).forEach((key => {\n isNil(linkValues[key]) && delete linkValues[key];\n })), {\n from: linkValues,\n to: Object.assign({}, linkValues, {\n x1: linkValues.x0,\n y1: linkValues.y0\n })\n };\n}, linkPathUpdate = (element, options, animationParameters) => {\n const bassLinkValues = {\n thickness: element.getGraphicAttribute(\"thickness\", !1),\n round: element.getGraphicAttribute(\"round\", !1),\n align: element.getGraphicAttribute(\"align\", !1),\n pathType: element.getGraphicAttribute(\"pathType\", !1),\n endArrow: element.getGraphicAttribute(\"endArrow\", !1),\n startArrow: element.getGraphicAttribute(\"startArrow\", !1)\n };\n Object.keys(bassLinkValues).forEach((key => {\n isNil(bassLinkValues[key]) && delete bassLinkValues[key];\n }));\n return {\n from: Object.assign(Object.assign({\n x0: element.getGraphicAttribute(\"x0\", !0),\n x1: element.getGraphicAttribute(\"x1\", !0),\n y0: element.getGraphicAttribute(\"y0\", !0),\n y1: element.getGraphicAttribute(\"y1\", !0)\n }, bassLinkValues), bassLinkValues),\n to: Object.assign({\n x0: element.getGraphicAttribute(\"x0\", !1),\n x1: element.getGraphicAttribute(\"x1\", !1),\n y0: element.getGraphicAttribute(\"y0\", !1),\n y1: element.getGraphicAttribute(\"y1\", !1)\n }, bassLinkValues)\n };\n};\n\nexport const registerLinkPathGlyph = () => {\n Factory.registerGlyph(\"linkPath\", {\n back: \"path\",\n front: \"path\"\n }).registerFunctionEncoder(encoder).registerChannelEncoder(\"backgroundStyle\", ((channel, encodeValue) => ({\n back: encodeValue\n }))).registerDefaultEncoder((() => ({\n back: {\n zIndex: 0\n },\n front: {\n zIndex: 1\n }\n }))), Factory.registerAnimationType(\"linkPathGrowIn\", linkPathGrowIn), Factory.registerAnimationType(\"linkPathGrowOut\", linkPathGrowOut), \n Factory.registerAnimationType(\"linkPathUpdate\", linkPathUpdate), registerGlyphGraphic(), \n registerPathGraphic();\n};","import { Factory } from './../core/factory';\nimport { BaseMark } from './base/base-mark';\nimport type { ILinkPathMarkSpec } from '../typings/visual';\nimport type { IMarkRaw, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerLinkPathGlyph } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IGroupMark } from '@visactor/vgrammar-core';\n\nexport type ILinkPathMark = IMarkRaw;\n\nexport class LinkPathMark extends BaseMark implements ILinkPathMark {\n static readonly type = MarkTypeEnum.linkPath;\n readonly type = LinkPathMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n x: 0,\n y: 0,\n x0: 0,\n y0: 0,\n x1: 100,\n y1: 100,\n thickness: 1,\n round: true\n };\n return defaultStyle;\n }\n\n protected _initProduct(group?: string | IGroupMark) {\n const view = this.getVGrammarView();\n\n // 声明语法元素\n const id = this.getProductId();\n const glyphType = 'linkPath';\n const direction = this.getStyle('direction');\n this._product = view\n .glyph(glyphType, group ?? view.rootMark)\n .id(id)\n .configureGlyph({ direction: direction });\n this._compiledProductId = id;\n }\n}\n\nexport const registerLinkPathMark = () => {\n registerLinkPathGlyph();\n Factory.registerMark(LinkPathMark.type, LinkPathMark as any);\n};\n","/* eslint-disable no-duplicate-imports */\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IRectMark } from '../../mark/rect';\nimport type { ILinkPathMark } from '../../mark/link-path';\nimport type { ITextMark } from '../../mark/text';\nimport { registerSankeyTransforms } from '@visactor/vgrammar-sankey';\nimport type { Datum, IRectMarkSpec, ILinkPathMarkSpec, ITextMarkSpec } from '../../typings';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport type { ISankeyOpt } from '../../data/transforms/sankey';\nimport { sankeyFormat, sankeyLayout, collectHierarchyField } from '../../data/transforms/sankey';\nimport { sankeyNodes } from '../../data/transforms/sankey-nodes';\nimport { sankeyLinks } from '../../data/transforms/sankey-links';\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { DataView } from '@visactor/vdataset';\nimport { LayoutZIndex, AttributeLevel, Event_Bubble_Level, DEFAULT_DATA_INDEX } from '../../constant';\nimport { SeriesData } from '../base/series-data';\nimport { SankeySeriesTooltipHelper } from './tooltip-helper';\nimport type { IBounds } from '@visactor/vutils';\nimport { Bounds, array, isNil } from '@visactor/vutils';\nimport { registerSankeyAnimation, type ISankeyAnimationParams } from './animation';\nimport type { ISankeySeriesSpec } from './interface';\nimport type { ExtendEventParam } from '../../event/interface';\nimport type { IElement, IGlyphElement } from '@visactor/vgrammar-core';\nimport type { IMarkAnimateSpec } from '../../animation/spec';\nimport { ColorOrdinalScale } from '../../scale/color-ordinal-scale';\nimport { RectMark, registerRectMark } from '../../mark/rect';\nimport { TextMark, registerTextMark } from '../../mark/text';\nimport { LinkPathMark, registerLinkPathMark } from '../../mark/link-path';\nimport { sankeySeriesMark } from './constant';\nimport { flatten } from '../../data/transforms/flatten';\nimport type { SankeyNodeElement } from '@visactor/vgrammar-sankey';\nimport { Factory } from '../../core/factory';\nimport type { IMark } from '../../mark/interface';\nimport { TransformLevel } from '../../data/initialize';\nimport type { IBaseScale } from '@visactor/vscale';\nimport { addDataKey, initKeyMap } from '../../data/transforms/data-key';\n\nexport class SankeySeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.sankey;\n type = SeriesTypeEnum.sankey;\n\n static readonly mark: SeriesMarkMap = sankeySeriesMark;\n\n private _nodeMark: IRectMark;\n private _linkMark: ILinkPathMark;\n private _labelMark?: ITextMark;\n\n private _nodeLayoutZIndex = LayoutZIndex.Node;\n private _labelLayoutZIndex = LayoutZIndex.Label;\n private _labelLimit: number;\n\n protected _nodesSeriesData?: SeriesData;\n protected _linksSeriesData?: SeriesData;\n\n private _viewBox: IBounds = new Bounds();\n\n protected _categoryField!: string;\n private _colorScale: IBaseScale;\n getCategoryField() {\n return this._categoryField;\n }\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n protected _valueField!: string;\n getValueField() {\n return this._valueField;\n }\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.setCategoryField(this._spec.categoryField);\n this.setValueField(this._spec.valueField);\n this.setSeriesField(this._spec.seriesField ?? this._spec.categoryField);\n this._labelLimit = this._spec.label?.limit ?? 100;\n }\n\n initData() {\n super.initData();\n const viewData = this.getViewData();\n const rawData = this.getRawData();\n\n if (rawData && viewData) {\n // 初始化桑基图数据\n registerDataSetInstanceTransform(this._dataSet, 'sankeyLayout', sankeyLayout);\n registerDataSetInstanceTransform(this._dataSet, 'sankeyFormat', sankeyFormat);\n\n rawData.transform(\n {\n type: 'sankeyFormat'\n },\n false\n );\n\n viewData.transform({\n type: 'sankeyLayout',\n options: {\n view: () => {\n return {\n x0: this._viewBox.x1,\n x1: this._viewBox.x2,\n y0: this._viewBox.y1,\n y1: this._viewBox.y2\n };\n },\n sourceField: this._spec.sourceField,\n targetField: this._spec.targetField,\n valueField: this._spec.valueField,\n direction: this._spec.direction,\n nodeAlign: this._spec.nodeAlign ?? 'justify',\n nodeGap: this._spec.nodeGap ?? 8,\n nodeWidth: this._spec.nodeWidth ?? 10,\n linkWidth: this._spec.linkWidth,\n minStepWidth: this._spec.minStepWidth,\n minNodeHeight: this._spec.minNodeHeight ?? 4,\n minLinkHeight: this._spec.minLinkHeight,\n iterations: this._spec.iterations,\n nodeKey: this._spec.nodeKey,\n linkSortBy: this._spec.linkSortBy,\n nodeSortBy: this._spec.nodeSortBy,\n setNodeLayer: this._spec.setNodeLayer\n } as ISankeyOpt,\n level: TransformLevel.sankeyLayout\n });\n\n // 注册扁平化算法\n const { dataSet } = this._option;\n registerDataSetInstanceTransform(dataSet, 'sankeyNodes', sankeyNodes);\n registerDataSetInstanceTransform(dataSet, 'flatten', flatten);\n const nodesDataView = new DataView(dataSet, { name: `sankey-node-${this.id}-data` });\n nodesDataView.parse([this.getViewData()], {\n type: 'dataview'\n });\n nodesDataView.transform({\n type: 'sankeyNodes'\n });\n // sankeyNode进行扁平化处理(针对层级数据)\n nodesDataView.transform(\n {\n type: 'flatten',\n options: {\n callback: (node: SankeyNodeElement) => {\n if (node.datum) {\n const nodeData = node.datum[node.depth];\n return { ...node, ...nodeData };\n }\n return node;\n }\n }\n },\n false\n );\n\n nodesDataView.transform(\n {\n type: 'addVChartProperty',\n options: {\n beforeCall: initKeyMap.bind(this),\n call: addDataKey\n }\n },\n false\n );\n\n this._nodesSeriesData = new SeriesData(this._option, nodesDataView);\n\n registerDataSetInstanceTransform(dataSet, 'sankeyLinks', sankeyLinks);\n const linksDataView = new DataView(dataSet, { name: `sankey-link-${this.id}-data` });\n linksDataView.parse([this.getViewData()], {\n type: 'dataview'\n });\n linksDataView.transform({\n type: 'sankeyLinks'\n });\n\n linksDataView.transform(\n {\n type: 'addVChartProperty',\n options: {\n beforeCall: initKeyMap.bind(this),\n call: addDataKey\n }\n },\n false\n );\n this._linksSeriesData = new SeriesData(this._option, linksDataView);\n }\n }\n\n initMark(): void {\n const nodeMark = this._createMark(SankeySeries.mark.node, {\n isSeriesMark: true,\n key: DEFAULT_DATA_INDEX,\n dataView: this._nodesSeriesData.getDataView(),\n dataProductId: this._nodesSeriesData.getProductId(),\n customShape: this._spec.node?.customShape\n }) as IRectMark;\n if (nodeMark) {\n nodeMark.setZIndex(this._nodeLayoutZIndex);\n this._nodeMark = nodeMark;\n }\n\n const linkMark = this._createMark(SankeySeries.mark.link, {\n key: DEFAULT_DATA_INDEX,\n dataView: this._linksSeriesData.getDataView(),\n dataProductId: this._linksSeriesData.getProductId(),\n customShape: this._spec.link?.customShape\n }) as ILinkPathMark;\n if (linkMark) {\n this._linkMark = linkMark;\n }\n\n if (this._spec.label?.visible) {\n const labelMark = this._createMark(SankeySeries.mark.label, {\n key: DEFAULT_DATA_INDEX,\n dataView: this._nodesSeriesData.getDataView(),\n dataProductId: this._nodesSeriesData.getProductId()\n }) as ITextMark;\n if (labelMark) {\n this._labelMark = labelMark;\n }\n }\n }\n\n initMarkStyle(): void {\n this._initNodeMarkStyle();\n this._initLinkMarkStyle();\n this._initLabelMarkStyle();\n }\n\n protected _initNodeMarkStyle() {\n const nodeMark = this._nodeMark;\n if (!nodeMark) {\n return;\n }\n\n this.setMarkStyle(\n nodeMark,\n {\n x: (datum: Datum) => {\n return datum.x0;\n },\n x1: (datum: Datum) => datum.x1,\n y: (datum: Datum) => datum.y0,\n y1: (datum: Datum) => datum.y1,\n fill: (datum: Datum) => {\n return this._spec.node?.style?.fill ?? this._colorScale?.scale(this._getNodeNameFromData(datum));\n }\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Mark\n );\n this._trigger.registerMark(nodeMark);\n }\n\n protected _initLinkMarkStyle() {\n const linkMark = this._linkMark;\n if (!linkMark) {\n return;\n }\n\n this.setMarkStyle(\n linkMark,\n {\n x0: (datum: Datum) => datum.x0,\n x1: (datum: Datum) => datum.x1,\n y0: (datum: Datum) => datum.y0,\n y1: (datum: Datum) => datum.y1,\n thickness: (datum: Datum) => datum.thickness,\n fill: (datum: Datum) => {\n const fill = this._spec.link?.style?.fill;\n\n if (fill) {\n return fill;\n }\n\n const sourceName =\n this._spec.nodeKey || this._rawData.latestData[0]?.nodes?.[0]?.children\n ? datum.source\n : this.getNodeList()[datum.source];\n return this._colorScale?.scale(sourceName);\n },\n direction: this._spec.direction ?? 'horizontal'\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n this._trigger.registerMark(linkMark);\n }\n\n protected _initLabelMarkStyle() {\n if (!this._labelMark) {\n return;\n }\n if (this._spec.direction === 'vertical') {\n if (this._spec.label.position === 'inside-start') {\n this.setMarkStyle(\n this._labelMark,\n {\n x: (datum: Datum) => datum.x0,\n y: (datum: Datum) => (datum.y0 + datum.y1) / 2,\n fill: '#ffffff',\n text: (datum: Datum) => this._createText(datum),\n limit: (datum: Datum) => this._spec.label.limit ?? datum.x1 - datum.x0,\n textAlign: 'left',\n textBaseline: 'middle'\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n } else if (this._spec.label.position === 'inside-middle') {\n this.setMarkStyle(\n this._labelMark,\n {\n x: (datum: Datum) => (datum.x0 + datum.x1) / 2,\n y: (datum: Datum) => (datum.y0 + datum.y1) / 2,\n fill: '#ffffff',\n text: (datum: Datum) => this._createText(datum),\n limit: (datum: Datum) => this._spec.label.limit ?? datum.x1 - datum.x0,\n textAlign: 'center',\n textBaseline: 'middle'\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n } else if (this._spec.label.position === 'inside-end') {\n this.setMarkStyle(\n this._labelMark,\n {\n x: (datum: Datum) => datum.x1,\n y: (datum: Datum) => (datum.y0 + datum.y1) / 2,\n fill: '#ffffff',\n text: (datum: Datum) => this._createText(datum),\n limit: (datum: Datum) => this._spec.label.limit ?? datum.x1 - datum.x0,\n textAlign: 'right',\n textBaseline: 'middle'\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._labelMark,\n {\n x: (datum: Datum) => (datum.x0 + datum.x1) / 2,\n y: (datum: Datum) => {\n if (datum.y1 >= this._viewBox.y2) {\n return datum.y0;\n }\n return datum.y1;\n },\n fill: (datum: Datum) => {\n return this._spec.node?.style?.fill ?? this._colorScale?.scale(this._getNodeNameFromData(datum));\n },\n text: (datum: Datum) => this._createText(datum),\n limit: this._labelLimit,\n textAlign: 'center',\n textBaseline: (datum: Datum) => {\n if (datum.y1 >= this._viewBox.y2) {\n return 'bottom';\n }\n return 'top';\n }\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n } else {\n if (this._spec.label.position === 'inside-start') {\n this.setMarkStyle(\n this._labelMark,\n {\n x: (datum: Datum) => datum.x0,\n y: (datum: Datum) => (datum.y0 + datum.y1) / 2,\n fill: '#ffffff',\n text: (datum: Datum) => this._createText(datum),\n limit: (datum: Datum) => this._spec.label.limit ?? datum.x1 - datum.x0,\n textAlign: 'left',\n textBaseline: 'middle'\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n } else if (this._spec.label.position === 'inside-middle') {\n this.setMarkStyle(\n this._labelMark,\n {\n x: (datum: Datum) => (datum.x0 + datum.x1) / 2,\n y: (datum: Datum) => (datum.y0 + datum.y1) / 2,\n fill: '#ffffff',\n text: (datum: Datum) => this._createText(datum),\n limit: (datum: Datum) => this._spec.label.limit ?? datum.x1 - datum.x0,\n textAlign: 'center',\n textBaseline: 'middle'\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n } else if (this._spec.label.position === 'inside-end') {\n this.setMarkStyle(\n this._labelMark,\n {\n x: (datum: Datum) => datum.x1,\n y: (datum: Datum) => (datum.y0 + datum.y1) / 2,\n fill: '#ffffff',\n text: (datum: Datum) => this._createText(datum),\n limit: (datum: Datum) => this._spec.label.limit ?? datum.x1 - datum.x0,\n textAlign: 'right',\n textBaseline: 'middle'\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n } else if (this._spec.label.position === 'left') {\n this.setMarkStyle(\n this._labelMark,\n {\n x: (datum: Datum) => datum.x0,\n y: (datum: Datum) => (datum.y0 + datum.y1) / 2,\n fill: (datum: Datum) => {\n return this._spec.node?.style?.fill ?? this._colorScale?.scale(this._getNodeNameFromData(datum));\n },\n text: (datum: Datum) => this._createText(datum),\n limit: this._labelLimit,\n textAlign: 'right',\n textBaseline: 'middle'\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n } else if (this._spec.label.position === 'right') {\n this.setMarkStyle(\n this._labelMark,\n {\n x: (datum: Datum) => datum.x1,\n y: (datum: Datum) => (datum.y0 + datum.y1) / 2,\n fill: (datum: Datum) => {\n return this._spec.node?.style?.fill ?? this._colorScale?.scale(this._getNodeNameFromData(datum));\n },\n text: (datum: Datum) => this._createText(datum),\n limit: this._labelLimit,\n textAlign: 'left',\n textBaseline: 'middle'\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._labelMark,\n {\n x: (datum: Datum) => {\n if (datum.x1 >= this._viewBox.x2) {\n return datum.x0;\n }\n return datum.x1;\n },\n y: (datum: Datum) => (datum.y0 + datum.y1) / 2,\n fill: (datum: Datum) => {\n return this._spec.node?.style?.fill ?? this._colorScale?.scale(this._getNodeNameFromData(datum));\n },\n text: (datum: Datum) => this._createText(datum),\n limit: this._labelLimit,\n textAlign: (datum: Datum) => {\n if (datum.x1 >= this._viewBox.x2) {\n return 'right';\n }\n return 'left';\n },\n textBaseline: 'middle'\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n }\n\n this._labelMark.setZIndex(this._labelLayoutZIndex);\n this._trigger.registerMark(this._labelMark);\n }\n\n private _createText(datum: Datum) {\n if (isNil(datum) || isNil(datum.datum)) {\n return '';\n }\n let text = datum.datum[this._spec.categoryField] || '';\n if (this._spec.label?.formatMethod) {\n text = this._spec.label.formatMethod(text, datum.datum);\n }\n return text;\n }\n\n initAnimation() {\n const animationParams: ISankeyAnimationParams = {\n direction: this.direction,\n growFrom: () =>\n this.direction === 'horizontal'\n ? this._xAxisHelper?.getScale(0).scale(0)\n : this._yAxisHelper?.getScale(0).scale(0)\n };\n const appearPreset = (this._spec?.animationAppear as IMarkAnimateSpec)?.preset;\n if (this._nodeMark) {\n this._nodeMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('sankeyNode')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.node, this._spec, this._markAttributeContext)\n )\n );\n }\n if (this._linkMark) {\n this._linkMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('sankeyLinkPath')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.link, this._spec, this._markAttributeContext)\n )\n );\n }\n if (this._labelMark) {\n this._labelMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.label, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n\n protected initEvent(): void {\n super.initEvent();\n\n this._nodesSeriesData.getDataView()?.target.addListener('change', this.nodesSeriesDataUpdate.bind(this));\n this._linksSeriesData.getDataView()?.target.addListener('change', this.linksSeriesDataUpdate.bind(this));\n const emphasisSpec = this._spec.emphasis ?? ({} as T['emphasis']);\n // 没有关闭交互时,才增加这些交互事件\n if (this._option.disableTriggerEvent !== true) {\n if (emphasisSpec.enable && emphasisSpec.effect === 'adjacency') {\n if (emphasisSpec.trigger === 'hover') {\n // 浮动事件\n this.event.on('pointerover', { level: Event_Bubble_Level.chart }, this._handleAdjacencyClick);\n } else {\n // emphasisSpec.trigger === 'click'\n // 点击事件\n this.event.on('pointerdown', { level: Event_Bubble_Level.chart }, this._handleAdjacencyClick);\n }\n }\n\n if (emphasisSpec.enable && emphasisSpec.effect === 'related') {\n if (emphasisSpec.trigger === 'hover') {\n // 浮动事件\n this.event.on('pointerover', { level: Event_Bubble_Level.chart }, this._handleRelatedClick);\n } else {\n // emphasisSpec.trigger === 'click'\n // 点击事件\n this.event.on('pointerdown', { level: Event_Bubble_Level.chart }, this._handleRelatedClick);\n }\n }\n }\n }\n\n private nodesSeriesDataUpdate() {\n this._nodesSeriesData.updateData();\n\n this._setNodeOrdinalColorScale();\n }\n\n private linksSeriesDataUpdate() {\n this._linksSeriesData.updateData();\n }\n\n protected _handleAdjacencyClick = (params: ExtendEventParam) => {\n const element = params.item;\n if (element && element.mark.id().includes('node')) {\n this._handleNodeAdjacencyClick(element);\n } else if (element && element.mark.id().includes('link')) {\n this._handleLinkAdjacencyClick(element);\n } else {\n this._handleClearEmpty();\n }\n };\n\n protected _handleRelatedClick = (params: ExtendEventParam) => {\n const element = params.item;\n if (element && element.mark.id().includes('node')) {\n this._handleNodeRelatedClick(element);\n } else if (element && element.mark.id().includes('link')) {\n this._handleLinkRelatedClick(element);\n } else {\n this._handleClearEmpty();\n }\n };\n\n protected _handleClearEmpty = () => {\n const nodeVGrammarMark = this._nodeMark.getProduct();\n\n if (!nodeVGrammarMark || !nodeVGrammarMark.elements || !nodeVGrammarMark.elements.length) {\n return;\n }\n const allNodeElements = nodeVGrammarMark.elements;\n\n const linkVGrammarMark = this._linkMark.getProduct();\n\n if (!linkVGrammarMark || !linkVGrammarMark.elements || !linkVGrammarMark.elements.length) {\n return;\n }\n const allLinkElements = linkVGrammarMark.elements;\n\n const labelVGrammarMark = this._labelMark.getProduct();\n\n if (!labelVGrammarMark || !labelVGrammarMark.elements || !labelVGrammarMark.elements.length) {\n return;\n }\n const allLabelElements = labelVGrammarMark.elements;\n\n allNodeElements.forEach(el => {\n el.clearStates();\n });\n allLinkElements.forEach(el => {\n el.clearStates();\n });\n allLabelElements.forEach(el => {\n el.clearStates();\n });\n };\n\n protected _handleNodeAdjacencyClick = (element: IElement) => {\n const nodeDatum = element.getDatum();\n const highlightNodes: string[] = [nodeDatum.key];\n\n if (this._linkMark) {\n const vGrammarMark = this._linkMark.getProduct();\n\n if (!vGrammarMark || !vGrammarMark.elements || !vGrammarMark.elements.length) {\n return;\n }\n const allLinkElements = vGrammarMark.elements;\n\n allLinkElements.forEach((linkEl: IElement, i: number) => {\n linkEl.clearStates();\n const linkDatum = linkEl.getDatum();\n const father = linkDatum?.parents ? 'parents' : 'source';\n if (array(linkDatum[father]).includes(nodeDatum.key)) {\n // 下游link\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n }\n\n if (!highlightNodes.includes(linkDatum.target)) {\n highlightNodes.push(linkDatum.target);\n }\n\n let ratio;\n if (father === 'parents') {\n const originalDatum = linkDatum.datum;\n const val = originalDatum\n ? originalDatum\n .filter((entry: any) => entry.parents.some((par: any) => par.key === nodeDatum.key))\n .reduce((sum: number, d: any) => {\n return (sum += d.value);\n }, 0)\n : 0;\n ratio = val / linkDatum.value;\n }\n\n linkEl.addState('selected', { ratio });\n } else if (linkDatum.target === nodeDatum.key) {\n // 上游link\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n }\n } else {\n linkEl.useStates(['blur']);\n }\n });\n }\n\n if (this._nodeMark) {\n const vGrammarMark = this._nodeMark.getProduct();\n\n if (!vGrammarMark || !vGrammarMark.elements || !vGrammarMark.elements.length) {\n return;\n }\n const allNodeElements = vGrammarMark.elements;\n\n allNodeElements.forEach(el => {\n el.clearStates();\n if (highlightNodes.includes(el.getDatum().key)) {\n //\n } else {\n el.useStates(['blur']);\n }\n });\n }\n\n if (this._labelMark) {\n const vGrammarMark = this._labelMark.getProduct();\n\n if (!vGrammarMark || !vGrammarMark.elements || !vGrammarMark.elements.length) {\n return;\n }\n const allLabelElements = vGrammarMark.elements;\n\n allLabelElements.forEach(el => {\n el.clearStates();\n if (highlightNodes.includes(el.getDatum().key)) {\n //\n } else {\n el.useStates(['blur']);\n }\n });\n }\n };\n\n protected _handleLinkAdjacencyClick = (element: IGlyphElement) => {\n const curLinkDatum = element.getDatum();\n const highlightNodes: string[] = [curLinkDatum.source, curLinkDatum.target];\n\n if (this._linkMark) {\n const vGrammarMark = this._linkMark.getProduct();\n\n if (!vGrammarMark || !vGrammarMark.elements || !vGrammarMark.elements.length) {\n return;\n }\n const allLinkElements = vGrammarMark.elements;\n\n allLinkElements.forEach(linkEl => {\n linkEl.clearStates();\n\n if (linkEl === element) {\n linkEl.addState('selected', { ratio: 1 });\n } else {\n linkEl.useStates(['blur']);\n }\n });\n }\n\n if (this._nodeMark) {\n const vGrammarMark = this._nodeMark.getProduct();\n\n if (!vGrammarMark || !vGrammarMark.elements || !vGrammarMark.elements.length) {\n return;\n }\n const allNodeElements = vGrammarMark.elements;\n\n allNodeElements.forEach(el => {\n el.clearStates();\n if (highlightNodes.includes(el.getDatum().key)) {\n //\n } else {\n el.useStates(['blur']);\n }\n });\n }\n\n if (this._labelMark) {\n const vGrammarMark = this._labelMark.getProduct();\n\n if (!vGrammarMark || !vGrammarMark.elements || !vGrammarMark.elements.length) {\n return;\n }\n const allLabelElements = vGrammarMark.elements;\n\n allLabelElements.forEach(el => {\n el.clearStates();\n if (highlightNodes.includes(el.getDatum().key)) {\n //\n } else {\n el.useStates(['blur']);\n }\n });\n }\n };\n\n protected _handleNodeRelatedClick = (element: IElement) => {\n const nodeDatum = element.getDatum();\n const nodeVGrammarMark = this._nodeMark.getProduct();\n\n if (!nodeVGrammarMark || !nodeVGrammarMark.elements || !nodeVGrammarMark.elements.length) {\n return;\n }\n const allNodeElements = nodeVGrammarMark.elements;\n\n const linkVGrammarMark = this._linkMark.getProduct();\n\n if (!linkVGrammarMark || !linkVGrammarMark.elements || !linkVGrammarMark.elements.length) {\n return;\n }\n const allLinkElements = linkVGrammarMark.elements;\n\n const father = allLinkElements[0].getDatum()?.parents ? 'parents' : 'source';\n\n if (father === 'source') {\n // node-link 型数据\n const highlightNodes: string[] = [nodeDatum.key];\n const highlightLinks: string[] = [];\n\n allLinkElements.forEach((linkEl: IElement, i: number) => {\n linkEl.clearStates();\n const linkDatum = linkEl.getDatum();\n const father = linkDatum?.parents ? 'parents' : 'source';\n\n if (array(linkDatum[father]).includes(nodeDatum.key)) {\n // 下游link\n if (!highlightLinks.includes(linkDatum.key ?? linkDatum.index)) {\n highlightLinks.push(linkDatum.key ?? linkDatum.index);\n }\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n }\n\n if (!highlightNodes.includes(linkDatum.target)) {\n highlightNodes.push(linkDatum.target);\n // 下游link的目标节点\n const targetNode = allNodeElements.find(nodeElement => {\n return nodeElement.data[0].key === linkDatum.target;\n });\n\n // 以下游link的目标节点为起点的links\n let targetNodeSourceLinks: any[] = targetNode.data[0].sourceLinks as any[];\n while (targetNodeSourceLinks?.length > 0) {\n const newTargetNodeSourceLinks: any[] = [];\n targetNodeSourceLinks.forEach((targetNodeSourceLinkDatum: any) => {\n if (!highlightLinks.includes(targetNodeSourceLinkDatum.key ?? targetNodeSourceLinkDatum.index)) {\n highlightLinks.push(targetNodeSourceLinkDatum.key ?? targetNodeSourceLinkDatum.index);\n // 该links的目标节点\n if (!highlightNodes.includes(targetNodeSourceLinkDatum.target)) {\n highlightNodes.push(targetNodeSourceLinkDatum.target);\n const sourceNodeTemp = allNodeElements.find(nodeElement => {\n return nodeElement.data[0].key === targetNodeSourceLinkDatum.target;\n });\n // 以该目标节点为起点的links\n newTargetNodeSourceLinks.push(sourceNodeTemp.data[0].targetLinks as any[]);\n } else {\n return;\n }\n } else {\n return;\n }\n });\n targetNodeSourceLinks = newTargetNodeSourceLinks;\n return;\n }\n }\n } else if (linkDatum.target === nodeDatum.key) {\n // 上游link\n if (!highlightLinks.includes(linkDatum.key ?? linkDatum.index)) {\n highlightLinks.push(linkDatum.key ?? linkDatum.index);\n }\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n const sourceNode = allNodeElements.find(nodeElement => {\n return nodeElement.data[0].key === linkDatum.source;\n });\n let sourceNodeTargetLinks: any[] = sourceNode.data[0].targetLinks as any;\n while (sourceNodeTargetLinks?.length > 0) {\n const newSourceNodeTargetLinks: any[] = [];\n sourceNodeTargetLinks.forEach((sourceNodeTargetLinkDatum: any) => {\n if (!highlightLinks.includes(sourceNodeTargetLinkDatum.key ?? sourceNodeTargetLinkDatum.index)) {\n highlightLinks.push(sourceNodeTargetLinkDatum.key ?? sourceNodeTargetLinkDatum.index);\n if (!highlightNodes.includes(sourceNodeTargetLinkDatum.source)) {\n highlightNodes.push(sourceNodeTargetLinkDatum.source);\n const sourceNodeTemp = allNodeElements.find(nodeElement => {\n return nodeElement.data[0].key === sourceNodeTargetLinkDatum.source;\n });\n newSourceNodeTargetLinks.push(sourceNodeTemp.data[0].targetLinks as any[]);\n } else {\n return;\n }\n } else {\n return;\n }\n });\n sourceNodeTargetLinks = newSourceNodeTargetLinks;\n return;\n }\n }\n }\n });\n\n if (this._linkMark) {\n const vGrammarMark = this._linkMark.getProduct();\n\n if (!vGrammarMark || !vGrammarMark.elements || !vGrammarMark.elements.length) {\n return;\n }\n const allLinkElements = vGrammarMark.elements;\n\n allLinkElements.forEach((linkEl: IElement, i: number) => {\n linkEl.clearStates();\n if (highlightLinks.includes(linkEl.getDatum().key ?? linkEl.getDatum().index)) {\n linkEl.useStates(['selected']);\n } else {\n linkEl.useStates(['blur']);\n }\n });\n }\n\n if (this._nodeMark) {\n const vGrammarMark = this._nodeMark.getProduct();\n\n if (!vGrammarMark || !vGrammarMark.elements || !vGrammarMark.elements.length) {\n return;\n }\n const allNodeElements = vGrammarMark.elements;\n\n allNodeElements.forEach(el => {\n el.clearStates();\n if (highlightNodes.includes(el.getDatum().key)) {\n //\n } else {\n el.useStates(['blur']);\n }\n });\n }\n\n if (this._labelMark) {\n const vGrammarMark = this._labelMark.getProduct();\n\n if (!vGrammarMark || !vGrammarMark.elements || !vGrammarMark.elements.length) {\n return;\n }\n const allLabelElements = vGrammarMark.elements;\n\n allLabelElements.forEach(el => {\n el.clearStates();\n if (highlightNodes.includes(el.getDatum().key)) {\n //\n } else {\n el.useStates(['blur']);\n }\n });\n }\n } else {\n // 层级型数据\n const highlightNodes: string[] = [nodeDatum.key];\n\n const upstreamLinks = nodeDatum.targetLinks.reduce((res: any[], link: any) => {\n const dividedLinks = array((link as any).datum);\n\n dividedLinks.forEach(dividedLink => {\n const parents = dividedLink.parents;\n const len = parents.length;\n\n for (let i = 0; i < len; i++) {\n const source = parents[i].key;\n const target = parents[i + 1] ? parents[i + 1].key : nodeDatum.key;\n const value = dividedLink.value;\n\n // 检查 res 数组中是否已存在相同的 source 和 target\n const existingItem = res.find(item => item.source === source && item.target === target);\n\n if (existingItem) {\n // 如果存在相同的项,则对其 value 进行累加\n existingItem.value += value;\n } else {\n // 如果不存在相同的项,则添加新的项到 res 数组中\n res.push({ source, target, value });\n }\n }\n });\n return res;\n }, []);\n\n allLinkElements.forEach((linkEl: IElement, i: number) => {\n linkEl.clearStates();\n const linkDatum = linkEl.getDatum();\n const father = linkDatum?.parents ? 'parents' : 'source';\n const originalDatum = linkDatum.datum;\n const selectedDatum = originalDatum\n ? originalDatum.filter((entry: any) => entry[father].some((par: any) => par.key === nodeDatum.key))\n : null;\n\n const upSelectedLink = upstreamLinks.find(\n (upLink: any) => upLink.source === linkDatum.source && upLink.target === linkDatum.target\n );\n\n if (selectedDatum && selectedDatum.length) {\n // 下游link\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n }\n\n if (!highlightNodes.includes(linkDatum.target)) {\n highlightNodes.push(linkDatum.target);\n }\n\n const val = selectedDatum.reduce((sum: number, d: any) => {\n return (sum += d.value);\n }, 0);\n const ratio = val / linkDatum.value;\n\n linkEl.useStates(['selected']);\n linkEl.addState('selected', { ratio });\n\n return;\n }\n\n if (upSelectedLink) {\n // 上游link\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n }\n\n if (!highlightNodes.includes(linkDatum.target)) {\n highlightNodes.push(linkDatum.target);\n }\n\n linkEl.useStates(['selected']);\n linkEl.addState('selected', { ratio: upSelectedLink.value / linkDatum.value });\n\n return;\n }\n\n linkEl.useStates(['blur']);\n\n return;\n });\n\n if (this._nodeMark) {\n const vGrammarMark = this._nodeMark.getProduct();\n\n if (!vGrammarMark || !vGrammarMark.elements || !vGrammarMark.elements.length) {\n return;\n }\n const allNodeElements = vGrammarMark.elements;\n\n allNodeElements.forEach(el => {\n el.clearStates();\n if (highlightNodes.includes(el.getDatum().key)) {\n //\n } else {\n el.useStates(['blur']);\n }\n });\n }\n\n if (this._labelMark) {\n const vGrammarMark = this._labelMark.getProduct();\n\n if (!vGrammarMark || !vGrammarMark.elements || !vGrammarMark.elements.length) {\n return;\n }\n const allLabelElements = vGrammarMark.elements;\n\n allLabelElements.forEach(el => {\n el.clearStates();\n if (highlightNodes.includes(el.getDatum().key)) {\n //\n } else {\n el.useStates(['blur']);\n }\n });\n }\n }\n };\n\n protected _handleLinkRelatedClick = (element: IGlyphElement) => {\n const nodeVGrammarMark = this._nodeMark.getProduct();\n\n if (!nodeVGrammarMark || !nodeVGrammarMark.elements || !nodeVGrammarMark.elements.length) {\n return;\n }\n const allNodeElements = nodeVGrammarMark.elements;\n\n const linkVGrammarMark = this._linkMark.getProduct();\n\n if (!linkVGrammarMark || !linkVGrammarMark.elements || !linkVGrammarMark.elements.length) {\n return;\n }\n const allLinkElements = linkVGrammarMark.elements;\n\n const father = element.getDatum()?.parents ? 'parents' : 'source';\n if (father === 'source') {\n if (this._linkMark) {\n const vGrammarMark = this._linkMark.getProduct();\n if (!vGrammarMark || !vGrammarMark.elements || !vGrammarMark.elements.length) {\n return;\n }\n const allLinkElements = vGrammarMark.elements;\n allLinkElements.forEach(linkEl => {\n linkEl.clearStates();\n });\n }\n\n if (this._nodeMark) {\n const vGrammarMark = this._nodeMark.getProduct();\n if (!vGrammarMark || !vGrammarMark.elements || !vGrammarMark.elements.length) {\n return;\n }\n const allNodeElements = vGrammarMark.elements;\n allNodeElements.forEach(el => {\n el.clearStates();\n });\n }\n\n if (this._labelMark) {\n const vGrammarMark = this._labelMark.getProduct();\n if (!vGrammarMark || !vGrammarMark.elements || !vGrammarMark.elements.length) {\n return;\n }\n const allLabelElements = vGrammarMark.elements;\n allLabelElements.forEach(el => {\n el.clearStates();\n });\n }\n } else {\n const curLinkDatum = element.getDatum();\n const highlightNodes: string[] = [curLinkDatum.source, curLinkDatum.target];\n const upstreamLinks: Array<{ source: string; target: string; value: number }> = [];\n\n const dividedLinks = array((curLinkDatum as any).datum);\n\n dividedLinks.forEach(dividedLink => {\n const parents = (dividedLink as any).parents;\n const len = parents.length;\n for (let i = 0; i < len - 1; i++) {\n const source = parents[i].key;\n const target = parents[i + 1].key;\n const value = dividedLink.value;\n\n // 检查 upstreamLinks 数组中是否已存在相同的 source 和 target\n const existingItem = upstreamLinks.find(item => item.source === source && item.target === target);\n upstreamLinks.push({\n source: parents[i].key,\n target: parents[i + 1].key,\n value: dividedLink.value\n });\n\n if (existingItem) {\n // 如果存在相同的项,则对其 value 进行累加\n existingItem.value += value;\n } else {\n // 如果不存在相同的项,则添加新的项到 upstreamLinks 数组中\n upstreamLinks.push({ source, target, value });\n }\n }\n });\n\n allLinkElements.forEach(linkEl => {\n linkEl.clearStates();\n const linkDatum = linkEl.getDatum();\n const originalDatum = linkDatum.datum;\n\n if (linkDatum.source === curLinkDatum.source && linkDatum.target === curLinkDatum.target) {\n // 自身\n linkEl.useStates(['selected']);\n linkEl.addState('selected', { ratio: 1 });\n return;\n }\n\n const selectedDatum = originalDatum\n ? originalDatum.filter((entry: any) => {\n const parentKeysList = entry.parents.map((item: any) => item.key);\n return parentKeysList.includes(curLinkDatum.source) && parentKeysList.includes(curLinkDatum.target);\n })\n : null;\n\n if (selectedDatum && selectedDatum.length) {\n // 下游link\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n }\n\n if (!highlightNodes.includes(linkDatum.target)) {\n highlightNodes.push(linkDatum.target);\n }\n\n const val = selectedDatum\n .filter((entry: any) => {\n return entry.parents.some((par: any, index: number) => {\n return par.key === curLinkDatum.source && entry.parents[index + 1]?.key === curLinkDatum.target;\n });\n })\n .reduce((sum: number, d: any) => {\n return (sum += d.value);\n }, 0);\n const ratio = val / linkDatum.value;\n\n linkEl.useStates(['selected']);\n linkEl.addState('selected', { ratio });\n\n return;\n }\n\n const upSelectedLink = upstreamLinks.find(\n (upLink: any) => upLink.source === linkDatum.source && upLink.target === linkDatum.target\n );\n\n if (upSelectedLink) {\n // 点击节点的上游一层的节点\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n }\n if (!highlightNodes.includes(linkDatum.target)) {\n highlightNodes.push(linkDatum.target);\n }\n linkEl.useStates(['selected']);\n linkEl.addState('selected', { ratio: upSelectedLink.value / linkDatum.value });\n\n return;\n }\n linkEl.useStates(['blur']);\n\n return;\n });\n\n allNodeElements.forEach(el => {\n el.clearStates();\n if (highlightNodes.includes(el.getDatum().key)) {\n //\n } else {\n el.useStates(['blur']);\n }\n });\n\n if (this._labelMark) {\n const vGrammarMark = this._labelMark.getProduct();\n\n if (!vGrammarMark || !vGrammarMark.elements || !vGrammarMark.elements.length) {\n return;\n }\n const allLabelElements = vGrammarMark.elements;\n\n allLabelElements.forEach(el => {\n el.clearStates();\n if (highlightNodes.includes(el.getDatum().key)) {\n //\n } else {\n el.useStates(['blur']);\n }\n });\n }\n }\n };\n\n protected initTooltip() {\n this._tooltipHelper = new SankeySeriesTooltipHelper(this);\n this._nodeMark && this._tooltipHelper.activeTriggerSet.mark.add(this._nodeMark);\n this._linkMark && this._tooltipHelper.activeTriggerSet.mark.add(this._linkMark);\n this._labelMark && this._tooltipHelper.activeTriggerSet.mark.add(this._labelMark);\n }\n\n _setNodeOrdinalColorScale() {\n const colorScale = this._option?.globalScale?.getScale('color');\n\n if ((colorScale as any)?._specified) {\n this._colorScale = colorScale;\n return;\n }\n\n let colorDomain: string[];\n let colorRange: string[];\n\n if (colorScale) {\n colorDomain = colorScale.domain();\n colorRange = colorScale.range();\n }\n\n if (!colorRange) {\n colorRange = this._getDataScheme() as unknown as string[];\n }\n\n if (!colorDomain || isNil(colorDomain[0])) {\n // no validate domain\n colorDomain = this.getNodeList();\n\n if (colorDomain.length > 10) {\n colorRange = (this._getDataScheme()[1] as any)?.scheme;\n }\n }\n\n const ordinalScale = new ColorOrdinalScale();\n\n ordinalScale.domain(colorDomain).range?.(colorRange);\n\n this._colorScale = ordinalScale;\n return;\n }\n\n getNodeList() {\n const nodeList = this._rawData.latestData[0]?.nodes\n ? this._rawData.latestData[0].nodes[0]?.children\n ? Array.from(this.extractNamesFromTree(this._rawData.latestData[0].nodes, this._spec.categoryField))\n : this._rawData.latestData[0].nodes.map((datum: Datum, index: number) => {\n return datum[this._spec.categoryField];\n })\n : this._rawData.latestData[0]?.values.map((datum: Datum, index: number) => {\n return datum[this._spec.categoryField];\n });\n\n return nodeList;\n }\n\n _getNodeNameFromData(datum: Datum) {\n return datum?.datum ? datum?.datum[this._spec.categoryField] : datum[this._spec.categoryField];\n }\n\n extractNamesFromTree(tree: any, categoryName: string) {\n // Set 用于存储唯一的 name 值\n const uniqueNames = new Set();\n\n // 遍历当前节点的子节点\n tree.forEach((node: any) => {\n // 将当前节点的 name 值添加到 Set 中\n uniqueNames.add(node[categoryName]);\n\n // 如果当前节点还有子节点,则递归调用该函数继续遍历子节点\n if (node.children) {\n const childNames = this.extractNamesFromTree(node.children, categoryName);\n childNames.forEach(name => uniqueNames.add(name));\n }\n });\n\n return uniqueNames;\n }\n\n getDimensionField() {\n return [this._spec.categoryField];\n }\n\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n getRawDataStatisticsByField(field: string, isNumeric?: boolean) {\n // overwrite the getRawDataStatisticsByField of base-series\n if (!this._rawStatisticsCache) {\n this._rawStatisticsCache = {};\n }\n\n if (!this._rawStatisticsCache[field]) {\n const canUseViewStatistics = this._viewDataStatistics && this.getViewData().transformsArr.length <= 1;\n\n if (canUseViewStatistics && this._viewDataStatistics.latestData?.[field]) {\n this._rawStatisticsCache[field] = this._viewDataStatistics.latestData[field];\n } else if (this._rawData) {\n this._rawStatisticsCache[field] = {\n values: this._collectByField(field)\n };\n }\n }\n\n return this._rawStatisticsCache[field];\n }\n\n private _collectByField(field: string): string[] {\n const keyArray: any[] = [];\n const rawData = this.getRawData()?.latestData?.[0];\n\n if (!rawData) {\n return [];\n }\n\n if ((rawData as any).links) {\n //node-link型数据\n if ((rawData as any).nodes?.length) {\n (rawData as any).nodes.forEach((node: any) => {\n if (node[this._seriesField]) {\n keyArray.push(node[this._seriesField]);\n }\n });\n }\n } else if ((rawData as any).nodes) {\n const set = new Set();\n // 层级型数据\n collectHierarchyField(set, (rawData as any).nodes, this._seriesField);\n\n return Array.from(set);\n }\n\n return keyArray;\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this._viewBox.set(0, 0, this._region.getLayoutRect().width, this._region.getLayoutRect().height);\n\n // calculate the sankeyLayout\n this.getViewData().reRunAllTransform();\n this._nodesSeriesData.updateData();\n this._linksSeriesData.updateData();\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n\n // make sure this function fast\n protected _noAnimationDataKey(datum: Datum, index: number): unknown | undefined {\n return undefined;\n }\n\n getActiveMarks(): IMark[] {\n return [this._nodeMark, this._linkMark];\n }\n}\n\nexport const registerSankeySeries = () => {\n registerSankeyTransforms();\n registerRectMark();\n registerLinkPathMark();\n registerTextMark();\n registerSankeyAnimation();\n registerFadeInOutAnimation();\n Factory.registerSeries(SankeySeries.type, SankeySeries);\n};\n","import { Factory } from '@visactor/vgrammar-core';\nimport { transform } from './transform';\nimport { SankeyHighlight } from './sankey-highlight';\n\nexport { SankeyLayout } from './layout';\n\nexport * from './interface';\nexport * from './format';\n\nexport const registerSankeyTransforms = () => {\n Factory.registerTransform(\n 'sankey',\n {\n transform,\n markPhase: 'beforeJoin'\n },\n true\n );\n};\n\nexport const registerSankeyHighlight = () => {\n Factory.registerInteraction(SankeyHighlight.type, SankeyHighlight);\n};\n","import type { ISeriesSpec } from '../../typings';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { ISankeyChartSpec } from './interface';\n\nexport class SankeyChartSpecTransformer<\n T extends ISankeyChartSpec = ISankeyChartSpec\n> extends BaseChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series: any = {\n ...super._getDefaultSeriesSpec(spec),\n categoryField: spec.categoryField,\n valueField: spec.valueField,\n sourceField: spec.sourceField,\n targetField: spec.targetField,\n\n direction: spec.direction,\n nodeAlign: spec.nodeAlign,\n nodeGap: spec.nodeGap,\n nodeWidth: spec.nodeWidth,\n linkWidth: spec.linkWidth,\n minStepWidth: spec.minStepWidth,\n minNodeHeight: spec.minNodeHeight,\n minLinkHeight: spec.minLinkHeight,\n iterations: spec.iterations,\n nodeKey: spec.nodeKey,\n linkSortBy: spec.linkSortBy,\n nodeSortBy: spec.nodeSortBy,\n setNodeLayer: spec.setNodeLayer,\n\n node: spec.node,\n link: spec.link,\n label: spec.label,\n\n emphasis: spec.emphasis\n };\n const seriesType = this.seriesType;\n if (seriesType) {\n series.type = seriesType;\n series[seriesType] = spec[seriesType];\n }\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n\n /* 处理 series 配置 */\n const defaultSeriesSpec = this._getDefaultSeriesSpec(spec);\n if (!spec.series || spec.series.length === 0) {\n spec.series = [defaultSeriesSpec];\n } else {\n spec.series.forEach((s: ISeriesSpec) => {\n if (!this._isValidSeries(s.type)) {\n return;\n }\n Object.keys(defaultSeriesSpec).forEach(k => {\n if (!(k in s)) {\n s[k] = defaultSeriesSpec[k];\n }\n });\n });\n }\n }\n}\n","import { BaseChart } from '../base/base-chart';\nimport { ChartTypeEnum } from '../interface/type';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport type { ISankeyChartSpec } from './interface';\nimport { registerSankeySeries } from '../../series/sankey/sankey';\nimport { Factory } from '../../core/factory';\nimport { SankeyChartSpecTransformer } from './sankey-transformer';\n\nexport class SankeyChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.sankey;\n static readonly seriesType: string = SeriesTypeEnum.sankey;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = SankeyChartSpecTransformer;\n readonly transformerConstructor = SankeyChartSpecTransformer;\n readonly type: string = ChartTypeEnum.sankey;\n readonly seriesType: string = SeriesTypeEnum.sankey;\n}\n\nexport const registerSankeyChart = () => {\n registerSankeySeries();\n Factory.registerChart(SankeyChart.type, SankeyChart);\n};\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { Datum, ITooltipPattern, TooltipActiveType, IToolTipLinePattern } from '../../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../typings/space';\nimport type { IDimensionInfo } from '../../event/events/dimension/interface';\n\nexport class RangeAreaSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n /** 获取默认的tooltip pattern */\n getDefaultTooltipPattern(activeType: TooltipActiveType, dimensionInfo?: IDimensionInfo[]): ITooltipPattern | null {\n if (activeType === 'mark') {\n return {\n visible: true,\n activeType,\n title: {\n key: undefined,\n value: this.titleValueCallback,\n hasShape: false\n },\n content: [\n {\n key: this.contentKeyCallback,\n value: this.contentValueCallback,\n hasShape: true,\n shapeType: this.contentShapeTypeCallback,\n shapeColor: this.contentShapeColorCallback,\n shapeStroke: this.contentShapeColorCallback,\n shapeHollow: false\n }\n ]\n };\n } else if (activeType === 'dimension' && dimensionInfo) {\n const title: IToolTipLinePattern = {\n key: undefined,\n value: this._getDimensionData,\n hasShape: false\n };\n const content: IToolTipLinePattern[] = [];\n dimensionInfo.forEach(({ data }) =>\n data.forEach(({ series }: any) => {\n if (series.type === 'rangeArea') {\n content.push({\n seriesId: series.id,\n key: this.contentKeyCallback,\n value: (datum: Datum) => {\n return this.series.getSpec().direction === Direction.horizontal\n ? datum[this.series.getSpec().xField[0]] + '-' + datum[this.series.getSpec().xField[1]]\n : datum[this.series.getSpec().yField[0]] + '-' + datum[this.series.getSpec().yField[1]];\n },\n hasShape: true,\n shapeType: this.contentShapeTypeCallback,\n shapeColor: this.contentShapeColorCallback,\n shapeStroke: this.contentShapeColorCallback,\n shapeHollow: false\n });\n }\n })\n );\n return {\n visible: true,\n activeType,\n title,\n content\n };\n }\n return null;\n }\n}\n","import type { DataView } from '@visactor/vdataset';\nimport { AreaSeries } from '../area/area';\nimport type { SeriesMarkMap } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesTypeEnum } from '../interface/type';\nimport { AreaMark, registerAreaMark, type IAreaMark } from '../../mark/area';\nimport { DEFAULT_SMOOTH_INTERPOLATE } from '../../typings/interpolate';\nimport { Direction } from '../../typings/space';\nimport type { Datum } from '../../typings';\nimport { AttributeLevel } from '../../constant';\nimport { RangeAreaSeriesTooltipHelper } from './tooltip-helper';\nimport type { IAreaSeriesSpec } from '../area/interface';\nimport { rangeAreaSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\n\nexport class RangeAreaSeries extends AreaSeries {\n static readonly type: string = SeriesTypeEnum.rangeArea;\n type = SeriesTypeEnum.rangeArea;\n\n static readonly mark: SeriesMarkMap = rangeAreaSeriesMark;\n\n initMark(): void {\n // area\n this._areaMark = this._createMark(RangeAreaSeries.mark.area, {\n defaultMorphElementKey: this.getDimensionField()[0],\n groupKey: this._seriesField,\n isSeriesMark: true,\n customShape: this._spec.area?.customShape\n }) as IAreaMark;\n }\n\n initMarkStyle(): void {\n const userCurveType = this.getSpec().area?.style?.curveType ?? this.getSpec().line?.style?.curveType;\n const curveType =\n userCurveType === DEFAULT_SMOOTH_INTERPOLATE\n ? this._direction === Direction.vertical\n ? 'monotoneX'\n : 'monotoneY'\n : userCurveType;\n\n // area\n const areaMark = this._areaMark;\n if (areaMark) {\n if (this._direction === Direction.vertical) {\n this.setMarkStyle(\n this._areaMark,\n {\n x: this.dataToPositionX.bind(this),\n y1: (datum: Datum) => {\n if (!this._yAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._yAxisHelper;\n\n return dataToPosition(this.getDatumPositionValues(datum, this._spec.yField[1]), {\n bandPosition: this._bandPosition\n });\n },\n y: this.dataToPositionY.bind(this)\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._areaMark,\n {\n x: this.dataToPositionX.bind(this),\n x1: (datum: Datum) => {\n if (!this._xAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._xAxisHelper;\n\n return dataToPosition(this.getDatumPositionValues(datum, this._spec.xField[1]), {\n bandPosition: this._bandPosition\n });\n },\n y: this.dataToPositionY.bind(this),\n orient: this._direction\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n this.setMarkStyle(\n areaMark,\n {\n fill: this.getColorAttribute(),\n stroke: false\n },\n 'normal',\n AttributeLevel.Series\n );\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(\n areaMark,\n {\n defined: this._getInvalidDefined,\n connectedType: this._getInvalidConnectType()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n this.setMarkStyle(\n areaMark,\n {\n curveType\n },\n 'normal',\n AttributeLevel.Built_In\n );\n this._trigger.registerMark(areaMark);\n }\n }\n\n protected initTooltip() {\n this._tooltipHelper = new RangeAreaSeriesTooltipHelper(this);\n this._areaMark && this._tooltipHelper.activeTriggerSet.dimension.add(this._areaMark);\n }\n\n viewDataStatisticsUpdate(d: DataView) {\n super.viewDataStatisticsUpdate(d);\n this.encodeDefined(this._areaMark, 'defined');\n }\n}\n\nexport const registerRangeAreaSeries = () => {\n registerAreaMark();\n Factory.registerSeries(RangeAreaSeries.type, RangeAreaSeries);\n};\n","import { Direction } from '../../typings';\nimport { CartesianChartSpecTransformer } from '../cartesian';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { IRangeAreaChartSpec } from './interface';\n\nexport class RangeAreaChartSpecTransformer<\n T extends IRangeAreaChartSpec = IRangeAreaChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series: any = {\n ...super._getDefaultSeriesSpec(spec)\n };\n series.area = spec.area;\n if (spec.direction === Direction.horizontal) {\n series.xField = spec.xField ?? [spec.minField, spec.maxField];\n } else {\n series.yField = spec.yField ?? [spec.minField, spec.maxField];\n }\n series.stack = false;\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n setDefaultCrosshairForCartesianChart(spec);\n }\n}\n","import { ChartTypeEnum } from '../interface/type';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { registerRangeAreaSeries } from '../../series/range-area/range-area';\nimport { Factory } from '../../core/factory';\nimport type { IRangeAreaChartSpec } from './interface';\nimport { RangeAreaChartSpecTransformer } from './range-area-transformer';\nimport { BaseChart } from '../base';\n\nexport class RangeAreaChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.rangeArea;\n static readonly seriesType: string = SeriesTypeEnum.rangeArea;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = RangeAreaChartSpecTransformer;\n readonly transformerConstructor = RangeAreaChartSpecTransformer;\n readonly type: string = ChartTypeEnum.rangeArea;\n readonly seriesType: string = SeriesTypeEnum.rangeArea;\n}\n\nexport const registerRangeAreaChart = () => {\n registerRangeAreaSeries();\n Factory.registerChart(RangeAreaChart.type, RangeAreaChart);\n};\n","import { ScaleEnum } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IBandLikeScale, IBaseScale } from '@visactor/vscale';\n\nexport function isBandLikeScale(scale: IBaseScale) {\n return scale && (scale.type === ScaleEnum.Band || scale.type === ScaleEnum.Point);\n}\n\nexport function getBandWidthOfScale(scale: IBaseScale) {\n if (!scale) {\n return undefined;\n }\n\n return scale.type === ScaleEnum.Band\n ? (scale as IBandLikeScale).bandwidth()\n : scale.type === ScaleEnum.Point\n ? (scale as IBandLikeScale).step()\n : undefined;\n}\n\nexport function getScaleRangeRatio(scale: IBaseScale, input: any) {\n const range = scale.range();\n return (scale.scale(input) - range[0]) / (range[range.length - 1] - range[0]);\n}\n","import type { IBaseScale } from '@visactor/vscale';\nimport { GrammarMarkType } from '../graph/enums';\nimport { invokeEncoder } from '../graph/mark/encode';\nimport { isScaleEncode } from '../parse/mark';\nimport { getGrammarOutput, isFunctionType } from '../parse/util';\nimport type {\n StateEncodeSpec,\n MarkSpec,\n IElement,\n MarkFunctionType,\n AttributeTransform,\n GetSingleEncodeSpecByType,\n BaseSingleEncodeSpec\n} from '../types';\nimport { Mark } from '../view/mark';\nimport { isArray, isNil, isNumber } from '@visactor/vutils';\nimport { transformsByType } from '../graph/attributes/transform';\nimport { getBandWidthOfScale } from '../util/scale';\nimport { Factory } from '../core/factory';\n\nexport class Cell extends Mark {\n static markType = GrammarMarkType.cell;\n declare markType: GrammarMarkType.cell;\n protected declare spec: MarkSpec;\n\n protected _encoders: StateEncodeSpec | null;\n\n encodeState(state: string, channel: string | BaseSingleEncodeSpec, value?: MarkFunctionType) {\n super.encodeState(state, channel, value);\n\n this._updateComponentEncoders(state);\n\n return this;\n }\n\n protected _updateComponentEncoders(state: string) {\n if (!this._encoders) {\n this._encoders = {};\n }\n\n const userEncoder = this.spec.encode[state] as GetSingleEncodeSpecByType<'cell'>;\n\n if (userEncoder && state === 'update') {\n const params = this.parameters();\n const scales: Record = isFunctionType(userEncoder)\n ? null\n : Object.keys(userEncoder).reduce((res, channel) => {\n if (isScaleEncode(userEncoder[channel])) {\n res[channel] = getGrammarOutput(userEncoder[channel].scale, params);\n }\n return res;\n }, {});\n\n this._encoders[state] = {\n callback: (datum: any, element: IElement, parameters: any) => {\n const userEncodeRes = invokeEncoder(userEncoder, datum, element, parameters);\n\n if (isNil(userEncodeRes.size)) {\n const sizeX = scales.x ? getBandWidthOfScale(scales.x) : undefined;\n const sizeY = scales.y ? getBandWidthOfScale(scales.y) : undefined;\n\n if (isNil(sizeX) && isNil(sizeY)) {\n userEncodeRes.size = 10;\n } else if (isNil(sizeX)) {\n userEncodeRes.size = sizeY;\n } else if (isNil(sizeY)) {\n userEncodeRes.size = sizeX;\n }\n\n userEncodeRes.size = [sizeX, sizeY];\n }\n\n if (isNil(userEncodeRes.shape)) {\n userEncodeRes.shape = 'rect';\n }\n\n return userEncodeRes;\n }\n } as GetSingleEncodeSpecByType<'cell'>;\n } else {\n this._encoders[state] = userEncoder;\n }\n }\n\n protected _getEncoders() {\n return this._encoders ?? {};\n }\n\n getAttributeTransforms() {\n return (\n [\n {\n channels: ['size', 'padding'],\n transform: (graphicAttributes: any, nextAttrs: any, storedAttrs: any) => {\n if (isNumber(storedAttrs.padding) && storedAttrs.padding > 0) {\n graphicAttributes.size = isArray(storedAttrs.size)\n ? storedAttrs.size.map((entry: number) => Math.max(entry - storedAttrs.padding, 1))\n : Math.max(storedAttrs.size - storedAttrs.padding, 1);\n } else if (isArray(storedAttrs.padding) && storedAttrs.padding.length === 2) {\n const arraySize = isArray(storedAttrs.size) ? storedAttrs.size : [storedAttrs.size, storedAttrs.size];\n\n graphicAttributes.size = [\n Math.max(arraySize[0] - storedAttrs.padding[0], 1),\n Math.max(arraySize[1] - storedAttrs.padding[1], 1)\n ];\n } else {\n graphicAttributes.size = storedAttrs.size;\n }\n },\n storedAttrs: 'paddingAttrs'\n }\n ] as AttributeTransform[]\n ).concat(transformsByType.symbol);\n }\n\n release(): void {\n super.release();\n this._encoders = null;\n }\n}\n\nexport const registerCellMark = () => {\n Factory.registerMark(GrammarMarkType.cell, Cell);\n};\n","import { Factory } from './../core/factory';\nimport type { ICellMarkSpec } from '../typings';\nimport type { IMarkRaw, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { BaseSymbolMark } from './symbol';\nimport { registerCellGraphic, registerCellMark as registerVgrammarCellMark } from '@visactor/vgrammar-core';\n\nexport type ICellMark = IMarkRaw;\n\nexport class CellMark extends BaseSymbolMark implements ICellMark {\n static readonly type = MarkTypeEnum.cell;\n readonly type = CellMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n padding: 0\n };\n return defaultStyle;\n }\n}\n\nexport const registerCellMark = () => {\n Factory.registerMark(CellMark.type, CellMark);\n registerCellGraphic();\n registerVgrammarCellMark();\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core/factory';\nimport { FadeInOutAnimation } from '../../animation/config';\n\nexport type HeatmapAppearPreset = 'fadeIn';\n\nexport function heatmapPresetAnimation(preset: HeatmapAppearPreset | boolean): IAnimationTypeConfig {\n if (preset === false) {\n return {};\n }\n return {\n type: 'fadeIn'\n };\n}\n\nexport const registerHeatmapAnimation = () => {\n Factory.registerAnimation('heatmap', (params: any, preset: HeatmapAppearPreset) => {\n return {\n ...FadeInOutAnimation,\n appear: heatmapPresetAnimation(preset)\n };\n });\n};\n","import isValidNumber from './common/isValidNumber';\nimport isArray from './common/isArray';\nimport isObject from './common/isObject';\n\nexport type IPadding = {\n top?: number;\n bottom?: number;\n left?: number;\n right?: number;\n};\n\n/**\n * 将 padding 转换为通用的格式([上,右,下,左])\n * @param padding\n * @return [ top, right, bottom, left ]\n */\nexport function normalizePadding(padding: number | number[] | IPadding) {\n if (isValidNumber(padding)) {\n return [padding, padding, padding, padding];\n }\n\n if (isArray(padding)) {\n const length = padding.length;\n\n if (length === 1) {\n const paddingValue = padding[0];\n return [paddingValue, paddingValue, paddingValue, paddingValue];\n }\n\n if (length === 2) {\n const [vertical, horizontal] = padding;\n return [vertical, horizontal, vertical, horizontal];\n }\n\n if (length === 3) {\n const [top, horizontal, bottom] = padding;\n return [top, horizontal, bottom, horizontal];\n }\n\n if (length === 4) {\n return padding;\n }\n }\n\n if (isObject(padding)) {\n const { top = 0, right = 0, bottom = 0, left = 0 } = padding as IPadding;\n return [top, right, bottom, left];\n }\n\n return [0, 0, 0, 0];\n}\n","import { isValid } from '@visactor/vutils';\nimport type { ITooltipPattern, TooltipActiveType } from '../../typings';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { IDimensionInfo } from '../../event/events/dimension/interface';\n\nexport class HeatmapSeriesTooltipHelper extends BaseSeriesTooltipHelper {\n /** 获取默认的tooltip pattern */\n getDefaultTooltipPattern(activeType: TooltipActiveType, dimensionInfo?: IDimensionInfo[]): ITooltipPattern | null {\n const pattern = super.getDefaultTooltipPattern(activeType, dimensionInfo);\n if (isValid(pattern) && activeType === 'dimension') {\n pattern.visible = false;\n }\n return pattern;\n }\n}\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IHeatmapSeriesSpec, IHeatmapSeriesTheme } from './interface';\n\nexport class HeatmapSeriesSpecTransformer<\n T extends IHeatmapSeriesSpec = IHeatmapSeriesSpec,\n K extends IHeatmapSeriesTheme = IHeatmapSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.cell);\n }\n}\n","import { registerCellMark } from './../../mark/cell';\n/* eslint-disable no-duplicate-imports */\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport { AttributeLevel } from '../../constant';\nimport type { Maybe, Datum } from '../../typings';\nimport { registerHeatmapAnimation, type HeatmapAppearPreset } from './animation';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport type { IHeatmapSeriesSpec, IHeatmapSeriesTheme } from './interface';\nimport type { IAxisHelper } from '../../component/axis/cartesian/interface';\nimport { registerTextMark, type ITextMark } from '../../mark/text';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { ICellMark } from '../../mark/cell';\nimport { normalizePadding, array } from '@visactor/vutils';\nimport { HeatmapSeriesTooltipHelper } from './tooltip-helper';\nimport { heatmapSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport type { IMark } from '../../mark/interface';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { HeatmapSeriesSpecTransformer } from './heatmap-transformer';\n\nexport const DefaultBandWidth = 6; // 默认的bandWidth,避免连续轴没有bandWidth\n\nexport class HeatmapSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.heatmap;\n type = SeriesTypeEnum.heatmap;\n\n static readonly mark: SeriesMarkMap = heatmapSeriesMark;\n static readonly transformerConstructor = HeatmapSeriesSpecTransformer as any;\n readonly transformerConstructor = HeatmapSeriesSpecTransformer;\n\n protected _cellMark: ICellMark;\n protected _backgroundMark: ICellMark;\n\n protected _fieldValue!: string[];\n getFieldValue() {\n return this._fieldValue;\n }\n setFieldValue(f: string | string[]) {\n this._fieldValue = array(f);\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.setFieldValue(this._spec.valueField);\n }\n\n initMark(): void {\n const progressive = {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n };\n\n this._cellMark = this._createMark(HeatmapSeries.mark.cell, {\n morph: shouldMarkDoMorph(this._spec, HeatmapSeries.mark.cell.name),\n defaultMorphElementKey: this.getDimensionField()[0],\n isSeriesMark: true,\n progressive,\n customShape: this._spec.cell?.customShape\n }) as ICellMark;\n\n this._backgroundMark = this._createMark(HeatmapSeries.mark.cellBackground, {\n progressive,\n customShape: this._spec.cellBackground?.customShape\n }) as ICellMark;\n }\n\n initMarkStyle(): void {\n this.initCellMarkStyle();\n this.initCellBackgroundMarkStyle();\n }\n\n initLabelMarkStyle(textMark: ITextMark) {\n if (!textMark) {\n return;\n }\n this.setMarkStyle(textMark, {\n fill: this.getColorAttribute(),\n text: (datum: Datum) => {\n return datum[this.getMeasureField()[0]];\n }\n });\n }\n\n initCellMarkStyle() {\n this.setMarkStyle(\n this._cellMark,\n {\n x: (datum: Datum) => {\n const pos = this.dataToPositionX(datum);\n return pos;\n },\n y: (datum: Datum) => {\n const pos = this.dataToPositionY(datum);\n return pos;\n },\n size: () => {\n return [this.getCellSize(this._xAxisHelper), this.getCellSize(this._yAxisHelper)];\n },\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n\n this._trigger.registerMark(this._cellMark);\n }\n\n initCellBackgroundMarkStyle() {\n const padding = normalizePadding(this._spec.cellBackground?.style?.padding ?? 0);\n this.setMarkStyle(\n this._backgroundMark,\n {\n x: (datum: Datum) => {\n const width = this.getCellSize(this._xAxisHelper);\n const pos = this.dataToPositionX(datum);\n return pos - width / 2 + padding[3];\n },\n y: (datum: Datum) => {\n const height = this.getCellSize(this._yAxisHelper);\n const pos = this.dataToPositionY(datum);\n return pos - height / 2 + padding[0];\n },\n width: () => {\n return this.getCellSize(this._xAxisHelper) - padding[1] - padding[3];\n },\n height: () => {\n return this.getCellSize(this._yAxisHelper) - padding[0] - padding[2];\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n // 通用的默认颜色映射 用户设置优先级比这个高,会在setStyle中处理\n getColorAttribute() {\n return {\n // TODO: 为热力图实现默认线性颜色 scale\n scale: this._option.globalScale.getScale('color') ?? this._getDefaultColorScale(),\n field: this.getFieldValue[0]\n };\n }\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n const animationParams = getGroupAnimationParams(this);\n\n this._cellMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('heatmap')?.(appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.cell, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n }\n\n protected getCellSize(axisHelper: IAxisHelper) {\n return axisHelper.getBandwidth?.(0) ?? DefaultBandWidth;\n }\n\n protected initTooltip() {\n this._tooltipHelper = new HeatmapSeriesTooltipHelper(this);\n this._cellMark && this._tooltipHelper.activeTriggerSet.mark.add(this._cellMark);\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n\n getDimensionField(): string[] {\n return [].concat(this.fieldX, this.fieldY);\n }\n\n getMeasureField(): string[] {\n return this.getFieldValue();\n }\n\n getActiveMarks(): IMark[] {\n return [this._cellMark];\n }\n}\n\nexport const registerHeatmapSeries = () => {\n registerTextMark();\n registerCellMark();\n registerHeatmapAnimation();\n Factory.registerSeries(HeatmapSeries.type, HeatmapSeries);\n};\n","import { CartesianChartSpecTransformer } from '../cartesian';\nimport type { IHeatmapChartSpec } from './interface';\n\nexport class HeatmapChartSpecTransformer<\n T extends IHeatmapChartSpec = IHeatmapChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series = super._getDefaultSeriesSpec(spec);\n return {\n ...series,\n valueField: spec.valueField,\n cell: spec.cell\n };\n }\n}\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport { registerHeatmapSeries } from '../../series/heatmap/heatmap';\nimport { Factory } from '../../core/factory';\nimport type { IHeatmapChartSpec } from './interface';\nimport { HeatmapChartSpecTransformer } from './heatmap-transformer';\nimport { BaseChart } from '../base';\n\nexport class HeatmapChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.heatmap;\n static readonly seriesType: string = SeriesTypeEnum.heatmap;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = HeatmapChartSpecTransformer;\n readonly transformerConstructor = HeatmapChartSpecTransformer;\n readonly type: string = ChartTypeEnum.heatmap;\n readonly seriesType: string = SeriesTypeEnum.heatmap;\n}\n\nexport const registerHeatmapChart = () => {\n registerHeatmapSeries();\n Factory.registerChart(HeatmapChart.type, HeatmapChart);\n};\n","import { PREFIX } from './base';\n\nexport const CORRELATION_X = `${PREFIX}_CORRELATION_X`;\nexport const CORRELATION_Y = `${PREFIX}_CORRELATION_Y`;\nexport const CORRELATION_SIZE = `${PREFIX}_CORRELATION_SIZE`;\n","import { isNil, isNumber, degreeToRadian, isArray } from '@visactor/vutils';\nimport { field as getFieldAccessor, extent, toPercent } from '@visactor/vgrammar-util';\nimport { CORRELATION_X, CORRELATION_Y, CORRELATION_SIZE } from '../../constant';\n\nexport interface ICorrelationOpt {\n field: string;\n radiusField?: string;\n radiusRange?: [number, number];\n center?: [string | number, string | number];\n startAngle?: number;\n endAngle?: number;\n innerRadius?: string | number;\n outerRadius?: string | number;\n}\n\nexport interface CircularRelationItem {\n x: number;\n y: number;\n size: number;\n datum: any;\n}\n\nexport const correlation = (data: any, options: any) => {\n if (!data || !options?.view || !isArray(data)) {\n return data;\n }\n\n const viewBox = options.view();\n\n if (\n viewBox.x1 - viewBox.x0 === 0 ||\n viewBox.y1 - viewBox.y0 === 0 ||\n viewBox.x1 - viewBox.x0 === -Infinity ||\n viewBox.x1 - viewBox.x0 === Infinity ||\n viewBox.y1 - viewBox.y0 === -Infinity ||\n viewBox.y1 - viewBox.y0 === Infinity\n ) {\n return data;\n }\n\n const startAngle = degreeToRadian(options.startAngle ?? -90);\n const endAngle = degreeToRadian(options.endAngle ?? 270);\n const maxRadius = Math.max((viewBox.x1 - viewBox.x0) / 2, (viewBox.y1 - viewBox.y0) / 2);\n const innerRadius = toPercent(options.innerRadius ?? 0, maxRadius);\n const outerRadius = toPercent(options.outerRadius, maxRadius);\n\n const center = [\n isNumber(options.center?.[0])\n ? options.center[0]\n : viewBox.x0 + toPercent(options.center?.[0] ?? '50%', viewBox.x1 - viewBox.x0),\n isNumber(options.center?.[1])\n ? options.center[1]\n : viewBox.y0 + toPercent(options.center?.[1] ?? '50%', viewBox.y1 - viewBox.y0)\n ] as [number, number];\n const fieldAccessor = getFieldAccessor(options.field);\n const values = data.map(fieldAccessor);\n const [min, max] = extent(values);\n const radiusScale =\n min === max\n ? (val: number) => (innerRadius + outerRadius) / 2\n : (val: number) => innerRadius + ((outerRadius - innerRadius) * (val - min)) / (max - min);\n\n const sizeAccessor = !isNil(options.radiusField) ? getFieldAccessor(options.radiusField) : fieldAccessor;\n const defaultSize = options?.radiusRange?.[1] ?? 5;\n let sizeScale = (datum: any) => defaultSize;\n\n if (sizeAccessor) {\n const [minSize, maxSize] = sizeAccessor !== fieldAccessor ? extent(data.map(sizeAccessor)) : [min, max];\n const minR = options.radiusRange?.[0] ?? 5;\n const maxR = options.radiusRange?.[1] ?? 5;\n\n if (minSize !== maxSize) {\n sizeScale = (datum: any) => minR + ((maxR - minR) * (sizeAccessor(datum) - minSize)) / (maxSize - minSize);\n }\n }\n\n const minAngle = Math.min(startAngle, endAngle);\n const maxAngle = Math.max(startAngle, endAngle);\n const angles = getPartialAngles(minAngle, maxAngle, data.length);\n\n const res: CircularRelationItem[] = [];\n const searchStep = 60;\n const searchAngle = (maxAngle - minAngle) / searchStep;\n\n data.forEach((datum, index) => {\n const radius = radiusScale(values[index] as number);\n const size = sizeScale(datum);\n let x: number;\n let y: number;\n let angle = angles[index];\n\n for (let i = 0; i < searchStep; i++) {\n x = center[0] + radius * Math.cos(angle);\n y = center[1] + radius * Math.sin(angle);\n\n if (\n hasOverlap({ x, y, size }, res) ||\n x - size < viewBox.x0 ||\n x + size > viewBox.x1 ||\n y - size < viewBox.y0 ||\n y + size > viewBox.y1\n ) {\n if (i < searchStep - 1) {\n angle += searchAngle;\n\n if (angle > maxAngle) {\n angle = minAngle;\n } else if (angle < minAngle) {\n angle = maxAngle;\n }\n }\n continue;\n } else {\n break;\n }\n }\n\n res.push({ [CORRELATION_X]: x, [CORRELATION_Y]: y, [CORRELATION_SIZE]: size, ...datum });\n });\n return res;\n};\n\nconst getPartialAngles = (minAngle: number, maxAngle: number, count: number) => {\n let offsetAngle = 0;\n let stepCount = Math.max(Math.ceil((2 * (maxAngle - minAngle)) / Math.PI), 2);\n let stepAngle = (maxAngle - minAngle) / stepCount;\n let stepIndex = 0;\n let stepSign = 1;\n let i = 0;\n let j = 0;\n const res: number[] = [];\n let startAngle = minAngle;\n\n while (i < count) {\n if (j < stepCount) {\n res.push(startAngle + (j % 2 ? Math.floor(j / 2) + Math.floor(stepCount / 2) : j / 2) * stepAngle * stepSign);\n j++;\n }\n\n i++;\n\n if (j === stepCount) {\n j = 0;\n stepIndex += 1;\n stepSign *= -1;\n\n if (offsetAngle === 0) {\n offsetAngle = stepAngle / 2;\n } else {\n offsetAngle /= 2;\n }\n startAngle = stepSign === -1 ? maxAngle - offsetAngle : minAngle + offsetAngle;\n\n if (stepIndex >= 2) {\n stepAngle /= 2;\n stepCount *= 2;\n }\n }\n }\n\n return res;\n};\n\nconst hasOverlap = (item: Omit, arr: CircularRelationItem[]) => {\n if (!arr || !arr.length) {\n return false;\n }\n\n return arr.some(entry => {\n return Math.pow(item.x - entry.x, 2) + Math.pow(item.y - entry.y, 2) < Math.pow(item.size + entry.size, 2);\n });\n};\n","import { isArray } from '@visactor/vutils';\nimport { DEFAULT_DATA_INDEX, DEFAULT_DATA_SERIES_FIELD } from '../../constant';\n\nexport const correlationCenter = (data: any, options: any) => {\n if (!data || !isArray(data)) {\n return [];\n }\n\n const { keyword, categoryField } = options;\n\n const nodeInfo = data[0].latestData[0];\n\n const centerInfo = {\n [categoryField]: keyword,\n [DEFAULT_DATA_INDEX]: nodeInfo?.[DEFAULT_DATA_INDEX],\n [DEFAULT_DATA_SERIES_FIELD]: nodeInfo?.[DEFAULT_DATA_SERIES_FIELD]\n };\n\n return centerInfo;\n};\n","import { Factory } from './../core/factory';\nimport { BaseMark } from './base/base-mark';\nimport type { IRippleMarkSpec } from '../typings/visual';\nimport type { IMarkRaw, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerRippleGlyph } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IGroupMark } from '@visactor/vgrammar-core';\n\nexport type IRippleMark = IMarkRaw;\n\nexport class RippleMark extends BaseMark implements IRippleMark {\n static readonly type = MarkTypeEnum.ripple;\n readonly type = RippleMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n x: 0,\n y: 0,\n ripple: 0\n };\n return defaultStyle;\n }\n\n protected _initProduct(group?: string | IGroupMark) {\n const view = this.getVGrammarView();\n\n // 声明语法元素\n const id = this.getProductId();\n const glyphType = 'ripplePoint';\n this._product = view.glyph(glyphType, group ?? view.rootMark).id(id);\n this._compiledProductId = id;\n }\n}\n\nexport const registerRippleMark = () => {\n Factory.registerMark(RippleMark.type, RippleMark);\n registerRippleGlyph();\n};\n","import type { IElement, RipplePointEncoderSpec } from '../types';\nimport { Factory } from '../core/factory';\nimport { registerGlyphGraphic, registerSymbolGraphic } from '../graph/mark/graphic';\n\nexport const registerRippleGlyph = () => {\n Factory.registerGlyph('ripplePoint', {\n symbol: 'symbol',\n ripple0: 'symbol',\n ripple1: 'symbol',\n ripple2: 'symbol'\n })\n .registerFunctionEncoder((encodeValues: RipplePointEncoderSpec, datum: any, element: IElement, config: any) => {\n // ripple value should be between 0 and 1\n const ripple = Math.max(0, Math.min(encodeValues.ripple, 1));\n const size = encodeValues.size ?? element.getGraphicAttribute('size');\n const rippleSize = size * 0.5;\n return {\n ripple0: { size: size + rippleSize * ripple, fillOpacity: 0.75 - ripple * 0.25 },\n ripple1: { size: size + rippleSize * (1 + ripple), fillOpacity: 0.5 - ripple * 0.25 },\n ripple2: { size: size + rippleSize * (2 + ripple), fillOpacity: 0.25 - ripple * 0.25 }\n };\n })\n .registerDefaultEncoder(() => {\n return {\n ripple0: { fillOpacity: 0.75 },\n ripple1: { fillOpacity: 0.5 },\n ripple2: { fillOpacity: 0.25 }\n };\n });\n registerGlyphGraphic();\n registerSymbolGraphic();\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core/factory';\nimport { ScaleInOutAnimation } from '../../animation/config';\n\nexport type CorrelationMarks = 'point' | 'label';\n\nexport type CorrelationAppearPreset = 'scaleIn' | 'fadeIn';\n\nexport interface ICorrelationAnimationParams {\n [key: string]: object;\n}\n\nexport const correlationPresetAnimation = (\n _params: ICorrelationAnimationParams, // 此处仅为保持结构统一\n preset: CorrelationAppearPreset\n): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'scaleIn': {\n return {\n type: 'scaleIn'\n };\n }\n default: {\n return {\n type: 'scaleIn'\n };\n }\n }\n};\n\nexport const registerCorrelationAnimation = () => {\n Factory.registerAnimation('correlation', (params: ICorrelationAnimationParams, preset: CorrelationAppearPreset) => ({\n appear: correlationPresetAnimation(params, preset),\n ...ScaleInOutAnimation\n }));\n};\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { ICorrelationSeriesSpec, ICorrelationSeriesTheme } from './interface';\n\nexport class CorrelationSeriesSpecTransformer<\n T extends ICorrelationSeriesSpec = ICorrelationSeriesSpec,\n K extends ICorrelationSeriesTheme = ICorrelationSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.nodePoint);\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.centerPoint, 'centerLabel' as any);\n }\n}\n","import { PolarSeries } from '../polar/polar';\nimport type { ICorrelationSeriesSpec } from './interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { SeriesMarkMap } from '../interface';\nimport { correlationSeriesMark } from './constant';\nimport type { ISymbolMark } from '../../mark/symbol';\nimport { registerDataSetInstanceTransform, registerDataSetInstanceParser } from '../../data/register';\nimport { correlation } from '../../data/transforms/correlation';\nimport { correlationCenter } from '../../data/transforms/correlation-center';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ICorrelationOpt } from '../../data/transforms/correlation';\nimport type { IBounds } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { Bounds, isValid } from '@visactor/vutils';\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { SeriesData } from '../base/series-data';\nimport type { Maybe, Datum, ISymbolMarkSpec, IRippleMarkSpec, AdaptiveSpec } from '../../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ICorrelationSeriesTheme } from './interface';\nimport { AttributeLevel, DEFAULT_DATA_INDEX, LayoutZIndex } from '../../constant';\nimport { DataView, DataSet, dataViewParser } from '@visactor/vdataset';\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport type { IRippleMark } from '../../mark/ripple';\nimport { registerRippleMark } from '../../mark/ripple';\n// eslint-disable-next-line no-duplicate-imports\nimport { RippleMark } from '../../mark/ripple';\nimport type { ILabelMark } from '../../mark/label';\n// eslint-disable-next-line no-duplicate-imports\nimport { CORRELATION_X, CORRELATION_Y, CORRELATION_SIZE } from '../../constant';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { Factory } from '../../core/factory';\nimport { registerCorrelationAnimation, type CorrelationAppearPreset } from './animation';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { IMark } from '../../mark/interface';\nimport { CorrelationSeriesSpecTransformer } from './correlation-transformer';\n\nexport class CorrelationSeries extends PolarSeries<\n AdaptiveSpec\n> {\n static readonly type: string = SeriesTypeEnum.correlation;\n type = SeriesTypeEnum.correlation;\n\n static readonly mark: SeriesMarkMap = correlationSeriesMark;\n static readonly transformerConstructor = CorrelationSeriesSpecTransformer as any;\n readonly transformerConstructor = CorrelationSeriesSpecTransformer;\n\n protected _centerSeriesData: SeriesData;\n\n private _nodePointMark: ISymbolMark;\n private _ripplePointMark: IRippleMark;\n private _centerPointMark: ISymbolMark;\n\n private _viewBox: IBounds = new Bounds();\n\n protected _categoryField!: string;\n getCategoryField() {\n return this._categoryField;\n }\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n protected _valueField!: string;\n getValueField() {\n return this._valueField;\n }\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n protected _seriesField?: string;\n getSeriesField() {\n return this._seriesField;\n }\n setSeriesField(field: string) {\n if (isValid(field)) {\n this._seriesField = field;\n }\n }\n\n protected _sizeField?: ICorrelationSeriesSpec['sizeField'];\n getSizeField() {\n return this._sizeField;\n }\n setSizeField(field: string) {\n if (isValid(field)) {\n this._sizeField = field;\n }\n }\n\n protected _sizeRange?: ICorrelationSeriesSpec['sizeRange'];\n getSizeRange() {\n return this._sizeRange;\n }\n setSizeRange(range: number[]) {\n if (isValid(range)) {\n this._sizeRange = range;\n }\n }\n\n protected _viewDataTransform!: SeriesData;\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n this.setCategoryField(this._spec.categoryField);\n this.setValueField(this._spec.valueField);\n\n this.setSeriesField(this._spec.seriesField);\n this.setSizeField(this._spec.sizeField);\n this.setSizeRange(this._spec.sizeRange);\n }\n\n protected initData() {\n super.initData();\n\n if (!this._data) {\n return;\n }\n\n registerDataSetInstanceTransform(this._dataSet, 'correlation', correlation);\n\n const centerDataSet = new DataSet();\n registerDataSetInstanceParser(centerDataSet, 'dataview', dataViewParser);\n registerDataSetInstanceTransform(centerDataSet, 'correlationCenter', correlationCenter);\n const centerDataView = new DataView(centerDataSet, { name: `${this.type}_${this.id}_center` });\n centerDataView.parse([this.getViewData()], {\n type: 'dataview'\n });\n centerDataView.transform({\n type: 'correlationCenter',\n options: {\n keyword: this._spec.centerLabel?.style?.text ?? '',\n categoryField: this._spec.categoryField\n }\n });\n\n this._centerSeriesData = new SeriesData(this._option, centerDataView);\n }\n\n protected _statisticViewData(): void {\n super._statisticViewData();\n this._data.getDataView().transform({\n type: 'correlation',\n options: {\n view: () => {\n return {\n x0: this._viewBox.x1,\n x1: this._viewBox.x2,\n y0: this._viewBox.y1,\n y1: this._viewBox.y2\n };\n },\n field: this._spec.valueField,\n radiusRange: this._spec.sizeRange as [number, number],\n radiusField: this._spec.sizeField,\n center: [this._spec.centerX, this._spec.centerY],\n innerRadius: this._spec.innerRadius,\n outerRadius: this._spec.outerRadius,\n startAngle: this._spec.startAngle,\n endAngle: this._spec.endAngle\n } as ICorrelationOpt\n });\n }\n\n initMark(): void {\n const nodePointMark = this._createMark(CorrelationSeries.mark.nodePoint, {\n groupKey: this._seriesField,\n isSeriesMark: true,\n key: DEFAULT_DATA_INDEX,\n customShape: this._spec.nodePoint?.customShape\n }) as ISymbolMark;\n if (nodePointMark) {\n nodePointMark.setZIndex(LayoutZIndex.Node);\n this._nodePointMark = nodePointMark;\n }\n\n const ripplePointMark = this._createMark(CorrelationSeries.mark.ripplePoint, {\n key: DEFAULT_DATA_INDEX,\n dataView: this._centerSeriesData.getDataView(),\n dataProductId: this._centerSeriesData.getProductId()\n }) as IRippleMark;\n if (ripplePointMark) {\n this._ripplePointMark = ripplePointMark;\n }\n\n const centerPointMark = this._createMark(CorrelationSeries.mark.centerPoint, {\n key: DEFAULT_DATA_INDEX,\n dataView: this._centerSeriesData.getDataView(),\n dataProductId: this._centerSeriesData.getProductId(),\n customShape: this._spec.centerPoint?.customShape\n }) as ISymbolMark;\n if (centerPointMark) {\n centerPointMark.setZIndex(LayoutZIndex.Node);\n this._centerPointMark = centerPointMark;\n }\n }\n\n initMarkStyle(): void {\n this._initNodePointMarkStyle();\n this._initRipplePointMarkStyle();\n this._initCenterPointMarkStyle();\n }\n\n protected _initNodePointMarkStyle() {\n const nodePointMark = this._nodePointMark;\n if (!nodePointMark) {\n return;\n }\n const nodePointStyle = this._spec.nodePoint?.style ?? {};\n this.setMarkStyle(\n nodePointMark,\n {\n x: (datum: Datum) => datum[CORRELATION_X],\n y: (datum: Datum) => datum[CORRELATION_Y],\n size: (datum: Datum) => datum[CORRELATION_SIZE],\n fill: nodePointStyle.fill ?? this.getColorAttribute(),\n fillOpacity: nodePointStyle.fillOpacity ?? 1,\n lineWidth: 0\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n\n this._trigger.registerMark(nodePointMark);\n }\n\n protected _initRipplePointMarkStyle() {\n const ripplePointMark = this._ripplePointMark;\n if (!ripplePointMark) {\n return;\n }\n const ripplePointStyle = this._spec.ripplePoint?.style ?? {};\n\n this.setMarkStyle(\n ripplePointMark,\n {\n x: () => {\n return this._spec.centerX ?? (this._viewBox.x1 + this._viewBox.x2) / 2;\n },\n y: () => {\n return this._spec.centerY ?? (this._viewBox.y1 + this._viewBox.y2) / 2;\n },\n size: () => {\n return Math.max(this._viewBox.x2 - this._viewBox.x1, this._viewBox.y2 - this._viewBox.y1) / 2;\n },\n fill: ripplePointStyle.fill ?? this.getColorAttribute(),\n opacity: ripplePointStyle.fillOpacity ?? 0.2,\n ripple: ripplePointStyle.ripple ?? 0\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n protected _initCenterPointMarkStyle() {\n const centerPointMark = this._centerPointMark;\n if (!centerPointMark) {\n return;\n }\n this.setMarkStyle(\n centerPointMark,\n {\n x: () => {\n return this._spec.centerX ?? (this._viewBox.x1 + this._viewBox.x2) / 2;\n },\n y: () => {\n return this._spec.centerY ?? (this._viewBox.y1 + this._viewBox.y2) / 2;\n },\n size: () => {\n return (0.2 * Math.max(this._viewBox.x2 - this._viewBox.x1, this._viewBox.y2 - this._viewBox.y1)) / 2;\n },\n fill: this._spec.centerPoint?.style?.fill ?? this.getColorAttribute(),\n fillOpacity: this._spec.centerPoint?.style?.fillOpacity ?? 1\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n\n this._trigger.registerMark(centerPointMark);\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._nodePointMark && this._tooltipHelper.activeTriggerSet.mark.add(this._nodePointMark);\n }\n\n initLabelMarkStyle(labelMark?: ILabelMark): void {\n if (!labelMark) {\n return;\n }\n this.setMarkStyle(\n labelMark,\n {\n fill: this.getColorAttribute(),\n text: (datum: Datum) => {\n return datum[this._categoryField];\n },\n z: this.dataToPositionZ.bind(this)\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n initAnimation() {\n const appearPreset = (this._spec.animationAppear as IStateAnimateSpec)?.preset;\n\n this._nodePointMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('correlation')?.({}, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.nodePoint, this._spec, this._markAttributeContext)\n )\n );\n }\n\n getGroupFields(): string[] {\n return [];\n }\n getStackGroupFields(): string[] {\n return [];\n }\n getStackValueField(): string {\n return '';\n }\n getActiveMarks(): IMark[] {\n return [this._nodePointMark, this._centerPointMark];\n }\n\n /** 获取维度field */\n getDimensionField(): string[] {\n return [this._categoryField];\n }\n /** 获取指标field */\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this._viewBox.set(0, 0, this._region.getLayoutRect().width, this._region.getLayoutRect().height);\n this._rawData.reRunAllTransform();\n this.getViewData().reRunAllTransform();\n }\n}\n\nexport const registerCorrelationSeries = () => {\n registerSymbolMark();\n registerRippleMark();\n Factory.registerSeries(CorrelationSeries.type, CorrelationSeries);\n registerCorrelationAnimation();\n};\n","import { SeriesTypeEnum, type ICorrelationSeriesSpec } from '../../series';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { ICorrelationChartSpec } from './interface';\n\nexport class CorrelationChartSpecTransformer<\n T extends ICorrelationChartSpec = ICorrelationChartSpec\n> extends BaseChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series: ICorrelationSeriesSpec = {\n ...super._getDefaultSeriesSpec(spec),\n categoryField: spec.categoryField,\n valueField: spec.valueField,\n seriesField: spec.seriesField,\n sizeField: spec.sizeField,\n sizeRange: spec.sizeRange,\n\n centerX: spec.centerX,\n centerY: spec.centerY,\n innerRadius: spec.innerRadius,\n outerRadius: spec.outerRadius,\n startAngle: spec.startAngle,\n endAngle: spec.endAngle,\n\n ripplePoint: spec.ripplePoint,\n centerPoint: spec.centerPoint,\n centerLabel: spec.centerLabel,\n nodePoint: spec.nodePoint,\n label: spec.label\n };\n const seriesType = SeriesTypeEnum.correlation;\n series.type = seriesType;\n series[seriesType] = spec[seriesType];\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n\n /* 处理 series 配置 */\n const defaultSeriesSpec = this._getDefaultSeriesSpec(spec);\n if (!spec.series || spec.series.length === 0) {\n spec.series = [defaultSeriesSpec];\n } else {\n spec.series.forEach(s => {\n if (!this._isValidSeries(s.type)) {\n return;\n }\n Object.keys(defaultSeriesSpec).forEach(k => {\n if (!(k in s)) {\n s[k] = defaultSeriesSpec[k];\n }\n });\n });\n }\n }\n}\n","import { registerCorrelationSeries } from '../../series/correlation/correlation';\nimport { BaseChart } from '../base/base-chart';\nimport { ChartTypeEnum } from '../interface/type';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport type { ICorrelationChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { CorrelationChartSpecTransformer } from './correlation-transformer';\n\nexport class CorrelationChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.correlation;\n static readonly seriesType: string = SeriesTypeEnum.correlation;\n static readonly view: string = 'singleDefault';\n static readonly transformerConstructor = CorrelationChartSpecTransformer;\n readonly transformerConstructor = CorrelationChartSpecTransformer;\n readonly type: string = ChartTypeEnum.correlation;\n readonly seriesType: string = SeriesTypeEnum.correlation;\n}\n\nexport const registerCorrelationChart = () => {\n registerCorrelationSeries();\n Factory.registerChart(CorrelationChart.type, CorrelationChart);\n};\n","import { isValidNumber } from '@visactor/vutils';\nimport { isContinuous } from '@visactor/vscale';\nimport type { CartesianAxis } from '../../../component';\nimport type { LinearAxisMixin } from '../../../component/axis/mixin/linear-axis-mixin';\n\ntype ScaleInfo = {\n total: number;\n negative: number;\n positive: number;\n includeZero: boolean;\n extendable_min: boolean;\n extendable_max: boolean;\n domain: number[];\n};\n\nexport function isValidAlignDomain(domain: number[]): boolean {\n return domain.length === 2 && isValidNumber(domain[0]) && isValidNumber(domain[1]) && domain[1] >= domain[0];\n}\n\nexport function getScaleInfo(axis: LinearAxisMixin, domain: number[]): ScaleInfo {\n // example: -10 -20 total = 10 negative = 10\n const total = domain[1] - domain[0];\n const includeZero = domain[1] * domain[0] < 0;\n let negative = domain[0] <= 0 ? 0 - domain[0] : 0;\n let positive = domain[1] > 0 ? domain[1] - 0 : 0;\n if (total === 0) {\n if (domain[0] < 0) {\n negative = 1;\n positive = 0;\n } else if (domain[0] > 0) {\n negative = 0;\n positive = 1;\n }\n } else {\n negative = negative / total;\n positive = positive / total;\n }\n const domainSpec = axis.getDomainSpec();\n return {\n total,\n negative,\n positive,\n includeZero,\n domain,\n extendable_min: !isValidNumber(domainSpec.min),\n extendable_max: !isValidNumber(domainSpec.max)\n };\n}\n\nfunction inDifferentCrossZero(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const {\n positive: positive1,\n negative: negative1,\n extendable_min: s1Extendable_min,\n extendable_max: s1Extendable_max,\n domain: domain1\n } = info1;\n const {\n positive: positive2,\n negative: negative2,\n extendable_min: s2Extendable_min,\n extendable_max: s2Extendable_max,\n domain: domain2\n } = info2;\n // make s2 percent same as s1\n if (positive2 > 0) {\n if (!s2Extendable_min) {\n return false;\n }\n let comp = negative1 / positive1;\n // if s1 could extend max, then expand s1\n // example:【0.5,0.5】 + 【0,1】 = 【0.5,1】\n if (s1Extendable_max) {\n // change s1 percent\n comp = negative1 / Math.max(positive1, positive2);\n domain1[1] = -domain1[0] / comp;\n }\n domain2[0] = -domain2[1] * comp;\n } else if (negative2 > 0) {\n if (!s2Extendable_max) {\n return false;\n }\n let comp = positive1 / negative1;\n // if s1 could extend max, then expand s1\n // example:【0.5,0.5】 + 【1,0】 = 【1,0.5】\n if (s1Extendable_min) {\n // change s1 percent\n comp = positive1 / Math.max(negative1, negative1);\n domain1[0] = -domain1[1] / comp;\n }\n domain2[1] = -domain2[0] * comp;\n }\n return true;\n}\n\nfunction inOnlyZeroDomain(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const { extendable_min: s1Extendable_min, extendable_max: s1Extendable_max, domain: domain1 } = info1;\n const { positive: positive2, negative: negative2, domain: domain2 } = info2;\n // both [0,0]\n if (positive2 === 0 && negative2 === 0) {\n return false;\n }\n // 如果副轴 有正值部分 主轴无法正值扩展,跳过\n if (positive2 > 0 && !s1Extendable_max) {\n return false;\n }\n // 如果副轴 有负值部分 主轴无法负值扩展,跳过\n if (negative2 > 0 && !s1Extendable_min) {\n return false;\n }\n // 其他场景,将主轴设置为与副轴相同\n domain1[0] = domain2[0];\n domain1[1] = domain2[1];\n return true;\n}\n\nfunction inAllCrossZero(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const { positive: positive1, negative: negative1, extendable_max: s1Extendable_max, domain: domain1 } = info1;\n const { positive: positive2, negative: negative2, extendable_min: s2Extendable_min, domain: domain2 } = info2;\n if (s1Extendable_max && s2Extendable_min) {\n // percent\n const comp = Math.max(negative1, negative2) / Math.max(positive1, positive2);\n domain1[1] = -domain1[0] / comp;\n domain2[0] = -domain2[1] * comp;\n }\n // only on side extendable\n else if (s2Extendable_min) {\n const comp = negative1 / positive1;\n domain2[0] = -domain2[1] * comp;\n } else if (s1Extendable_max) {\n const comp = negative2 / positive2;\n domain1[1] = -domain1[0] / comp;\n } else {\n // skip\n return false;\n }\n return true;\n}\n\nfunction inNoCrossDifferentSide(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const { extendable_min: s1Extendable_min, domain: domain1 } = info1;\n const { extendable_max: s2Extendable_max, domain: domain2 } = info2;\n // extendable\n if (!s1Extendable_min || !s2Extendable_max) {\n return false;\n }\n domain1[0] = -domain1[1];\n domain2[1] = -domain2[0];\n return true;\n}\n\nexport const zeroAlign = (targetAxis: CartesianAxis, currentAxis: CartesianAxis) => {\n const s1 = targetAxis.getScale();\n const s2 = currentAxis.getScale();\n if (!s1 || !s2) {\n return;\n }\n if (!isContinuous(s1.type) || !isContinuous(s2.type)) {\n return;\n }\n const domain1 = s1.domain().slice();\n const domain2 = s2.domain().slice();\n if (!isValidAlignDomain(domain1) || !isValidAlignDomain(domain2)) {\n return;\n }\n // 先分别获取正负比例\n const info1 = getScaleInfo((targetAxis), domain1);\n const info2 = getScaleInfo((currentAxis), domain2);\n const {\n positive: positive1,\n negative: negative1,\n extendable_min: s1Extendable_min,\n extendable_max: s1Extendable_max,\n includeZero: includeZero1\n } = info1;\n const {\n positive: positive2,\n negative: negative2,\n extendable_min: s2Extendable_min,\n extendable_max: s2Extendable_max,\n includeZero: includeZero2\n } = info2;\n\n // first check [0,0]\n // axis 1 in [0,0]\n if (positive1 === 0 && negative1 === 0) {\n if (!inOnlyZeroDomain(info1, info2)) {\n return;\n }\n }\n // axis 2 in [0,0]\n else if (positive2 === 0 && negative2 === 0) {\n if (!inOnlyZeroDomain(info2, info1)) {\n return;\n }\n }\n // check of both of axis are not cross zero\n else if (!includeZero1 && !includeZero2) {\n // if in different side s1 * s2 < 0\n // s1 > 0 s2 < 0\n if (negative1 === 0 && positive2 === 0) {\n if (!inNoCrossDifferentSide(info1, info2)) {\n return;\n }\n }\n // s1 < 0 s2 > 0\n else if (negative2 === 0 && positive1 === 0) {\n if (!inNoCrossDifferentSide(info2, info1)) {\n return;\n }\n }\n\n // if in same side s1 * s2 > 0\n // both positive\n if (negative1 === 0 && negative2 === 0) {\n // make sure has zero\n if (domain1[0] === 0 && domain2[0] > 0) {\n if (!s2Extendable_min) {\n return;\n }\n domain2[0] = 0;\n } else if (domain2[0] === 0 && domain1[0] > 0) {\n if (!s1Extendable_min) {\n return;\n }\n domain1[0] = 0;\n } else {\n return;\n }\n }\n // both negative1\n if (positive1 === 0 && positive2 === 0) {\n // s1 has 0 in domain & s2 has not\n if (domain1[1] === 0 && domain2[1] > 0) {\n if (!s2Extendable_max) {\n return;\n }\n domain2[1] = 0;\n }\n // s2 has 0 in domain & s1 has not\n else if (domain2[1] === 0 && domain1[1] > 0) {\n if (!s1Extendable_max) {\n return;\n }\n domain1[1] = 0;\n } else {\n return;\n }\n }\n }\n // check one axis cross zero axis1\n else if (includeZero1 && !includeZero2) {\n if (!inDifferentCrossZero(info1, info2)) {\n return;\n }\n }\n // check one axis cross zero axis2\n else if (includeZero2 && !includeZero1) {\n if (!inDifferentCrossZero(info2, info1)) {\n return;\n }\n }\n // check of both of axis are cross zero\n else {\n // same percent of negative\n if (negative1 === negative2) {\n return;\n }\n // negative percent s1 > s2\n else if (negative1 > negative2) {\n if (!inAllCrossZero(info1, info2)) {\n return;\n }\n }\n // negative percent s1 < s2\n else {\n if (!inAllCrossZero(info2, info1)) {\n return;\n }\n }\n }\n s1.domain(domain1);\n s2.domain(domain2);\n};\n","import type { IBaseScale } from '@visactor/vscale';\nimport type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { AABBBounds, degreeToRadian, polarToCartesian } from '@visactor/vutils';\nimport type { IGraphic, TextAlignType, TextBaselineType } from '@visactor/vrender-core';\nimport { initTextMeasure } from '../../utils/text';\nimport { angleLabelOrientAttribute } from '../../utils/polar';\nimport type { ICartesianTickDataOpt, IOrientType, IPolarTickDataOpt, ITickData } from './interface';\n\nexport const convertDomainToTickData = (domain: any[]): ITickData[] => {\n const ticks = domain.map((t: number, index: number) => {\n return {\n index,\n value: t\n };\n });\n return ticks;\n};\n\n/** 判断两个label是否有重叠情况 */\nexport const labelOverlap = (prevLabel: AABBBounds, nextLabel: AABBBounds, gap = 0): boolean => {\n const prevBounds = new AABBBounds(prevLabel).expand(gap / 2);\n const nextBounds = new AABBBounds(nextLabel).expand(gap / 2);\n return prevBounds.intersects(nextBounds);\n};\n\n/** 判断两个不相交的label相隔的距离 */\nexport const labelDistance = (prevLabel: AABBBounds, nextLabel: AABBBounds): [number, number] => {\n let horizontal = 0;\n if (prevLabel.x2 < nextLabel.x1) {\n horizontal = nextLabel.x1 - prevLabel.x2;\n } else if (nextLabel.x2 < prevLabel.x1) {\n horizontal = prevLabel.x1 - nextLabel.x2;\n }\n\n let vertical = 0;\n if (prevLabel.y2 < nextLabel.y1) {\n vertical = nextLabel.y1 - prevLabel.y2;\n } else if (nextLabel.y2 < prevLabel.y1) {\n vertical = prevLabel.y1 - nextLabel.y2;\n }\n\n return [horizontal, vertical];\n};\n\nexport function intersect(a: IBoundsLike, b: IBoundsLike, sep: number) {\n return sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);\n}\n\nexport interface ILabelItem extends Pick {\n value?: T;\n}\n\nexport function hasOverlap(items: ILabelItem[], pad: number): boolean {\n for (let i = 1, n = items.length, a = items[0], b; i < n; a = b, ++i) {\n b = items[i];\n if (intersect(a.AABBBounds, b.AABBBounds, pad)) {\n return true;\n }\n }\n return false;\n}\n\nexport const MIN_TICK_GAP = 12;\n\nexport const getCartesianLabelBounds = (scale: IBaseScale, domain: any[], op: ICartesianTickDataOpt): AABBBounds[] => {\n const { labelStyle, axisOrientType, labelFlush, labelFormatter, startAngle = 0 } = op;\n let labelAngle = labelStyle.angle ?? 0;\n if (labelStyle.direction === 'vertical') {\n labelAngle += degreeToRadian(90);\n }\n const isHorizontal = ['bottom', 'top'].includes(axisOrientType);\n const isVertical = ['left', 'right'].includes(axisOrientType);\n let scaleX = 1;\n let scaleY = 0;\n if (isHorizontal) {\n // nothing to update\n } else if (isVertical) {\n scaleX = 0;\n scaleY = 1;\n } else if (startAngle) {\n scaleX = Math.cos(startAngle);\n scaleY = -Math.sin(startAngle);\n }\n\n const textMeasure = initTextMeasure(labelStyle);\n const labelBoundsList = domain.map((v: any, i: number) => {\n const str = labelFormatter ? labelFormatter(v) : `${v}`;\n\n // 估算文本宽高\n const { width, height } = textMeasure.quickMeasure(str);\n const textWidth = Math.max(width, MIN_TICK_GAP);\n const textHeight = Math.max(height, MIN_TICK_GAP);\n\n // 估算文本位置\n const pos = scale.scale(v);\n const baseTextX = scaleX * pos;\n const baseTextY = scaleY * pos;\n let textX = baseTextX;\n let textY = baseTextY;\n\n let align: TextAlignType;\n if (labelFlush && isHorizontal && i === 0) {\n align = 'left';\n } else if (labelFlush && isHorizontal && i === domain.length - 1) {\n align = 'right';\n } else {\n align = labelStyle.textAlign ?? 'center';\n }\n if (align === 'right') {\n textX -= textWidth;\n } else if (align === 'center') {\n textX -= textWidth / 2;\n }\n\n let baseline: TextBaselineType;\n if (labelFlush && isVertical && i === 0) {\n baseline = 'top';\n } else if (labelFlush && isVertical && i === domain.length - 1) {\n baseline = 'bottom';\n } else {\n baseline = labelStyle.textBaseline ?? 'middle';\n }\n if (baseline === 'bottom') {\n textY -= textHeight;\n } else if (baseline === 'middle') {\n textY -= textHeight / 2;\n }\n\n // 计算 label 包围盒\n const bounds = new AABBBounds().set(textX, textY, textX + textWidth, textY + textHeight);\n\n if (labelAngle) {\n bounds.rotate(labelAngle, baseTextX, baseTextY);\n }\n\n return bounds;\n });\n\n return labelBoundsList;\n};\n\nexport const getPolarAngleLabelBounds = (scale: IBaseScale, domain: any[], op: IPolarTickDataOpt): AABBBounds[] => {\n const { labelStyle, getRadius, labelOffset, labelFormatter } = op;\n const radius = getRadius?.();\n const labelAngle = labelStyle.angle ?? 0;\n\n const textMeasure = initTextMeasure(labelStyle);\n const labelBoundsList = domain.map((v: any) => {\n const str = labelFormatter ? labelFormatter(v) : `${v}`;\n\n // 估算文本宽高\n const { width, height } = textMeasure.quickMeasure(str);\n const textWidth = Math.max(width, MIN_TICK_GAP);\n const textHeight = Math.max(height, MIN_TICK_GAP);\n\n // 估算文本位置\n const angle = scale.scale(v);\n let textX = 0;\n let textY = 0;\n const orient = angleLabelOrientAttribute(angle);\n const { x, y } = polarToCartesian({ x: 0, y: 0 }, radius + labelOffset, angle);\n textX = x + (orient.align === 'right' ? -textWidth : orient.align === 'center' ? -textWidth / 2 : 0);\n textY = y + (orient.baseline === 'bottom' ? -textHeight : orient.baseline === 'middle' ? -textHeight / 2 : 0);\n\n // 计算 label 包围盒\n const bounds = new AABBBounds()\n .set(textX, textY, textX + textWidth, textY + textHeight)\n .rotate(labelAngle, textX + textWidth / 2, textY + textHeight / 2);\n return bounds;\n });\n\n return labelBoundsList;\n};\n\nexport const isAxisHorizontal = (axisOrientType: IOrientType) => {\n return (['bottom', 'top', 'z'] as IOrientType[]).includes(axisOrientType);\n};\n","import type { Datum } from '../../../typings';\nimport type { CartesianAxis } from '../../../component';\nimport { convertDomainToTickData } from '@visactor/vutils-extension';\n\nexport interface ITickAlignOpt {\n targetAxis: () => CartesianAxis;\n currentAxis: () => CartesianAxis;\n}\n\nexport const tickAlign = (data: Array, op: ITickAlignOpt) => {\n if (!data) {\n return data;\n }\n // check align enable\n const targetAxis = op?.targetAxis?.();\n if (!targetAxis) {\n return data;\n }\n const currentAxis = op?.currentAxis?.();\n if (!currentAxis) {\n return data;\n }\n const currentData = currentAxis.getTickData()?.getDataView();\n if (!currentData) {\n return data;\n }\n const currentTickTransform = currentData.transformsArr.find(t => t.type === 'ticks');\n if (!currentTickTransform) {\n return data;\n }\n const currentScale = currentAxis.getScale();\n if (!currentScale) {\n return data;\n }\n const targetData = targetAxis.getTickData()?.getDataView()?.latestData;\n if (!targetData?.length) {\n return data;\n }\n const targetScale = targetAxis.getScale();\n if (!targetScale) {\n return data;\n }\n const targetDomain = targetScale.domain();\n const targetRange = targetDomain[1] - targetDomain[0];\n if (targetRange === 0) {\n return data;\n }\n const currentDomain = currentScale.domain();\n const currentRange = currentDomain[1] - currentDomain[0];\n if (targetRange === 0) {\n return data;\n }\n // make the tickData of the current axis consistent with the tickData of the target axis\n const newTicks: number[] = targetData.map((d: { value: number }) => {\n const percent = (d.value - targetDomain[0]) / targetRange;\n return currentRange * percent + currentDomain[0];\n });\n return convertDomainToTickData(newTicks);\n};\n","import type { IBasePlugin, IBasePluginService } from './interface';\nimport { createID } from '../../util/id';\n\nexport class BasePlugin implements IBasePlugin {\n readonly id: number;\n readonly name: string;\n readonly type: string;\n protected service?: T;\n\n constructor(type: string) {\n this.id = createID();\n this.name = `${type}_${this.id}`;\n }\n\n onAdd(service: T): void {\n this.service = service;\n }\n}\n","import { ChartEvent } from '../../../constant/event';\nimport { zeroAlign } from './zero-align-transform';\nimport type { IComponentPlugin, IComponentPluginService } from '../interface';\nimport type { CartesianAxis, ICartesianLinearAxisSpec, ILinearAxisSync } from '../../../component/axis/cartesian';\nimport { isContinuous } from '@visactor/vscale';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\nimport { tickAlign } from './tick-align-transform';\nimport { BasePlugin } from '../../base/base-plugin';\n\nexport class AxisSyncPlugin\n extends BasePlugin\n implements IComponentPlugin\n{\n static readonly pluginType: 'component' = 'component';\n static readonly type: string = 'AxisSyncPlugin';\n readonly type: string = 'AxisSyncPlugin';\n\n constructor() {\n super(AxisSyncPlugin.type);\n }\n\n protected _checkEnableSync(axis: CartesianAxis): ILinearAxisSync | false {\n if (!isContinuous(axis.getScale().type)) {\n return false;\n }\n const sync = (axis.getSpec() as ICartesianLinearAxisSpec).sync as ILinearAxisSync;\n if (!sync?.axisId) {\n return false;\n }\n return sync;\n }\n\n private _getTargetAxis(axis: CartesianAxis, sync: ILinearAxisSync) {\n const targetAxis = axis.getOption().getChart().getComponentByUserId(sync.axisId) as CartesianAxis;\n if (!targetAxis?.type.startsWith('cartesianAxis')) {\n return null;\n }\n return targetAxis;\n }\n\n onInit(service: IComponentPluginService, axis: CartesianAxis) {\n const sync = this._checkEnableSync(axis);\n if (!sync) {\n return;\n }\n if (!sync.zeroAlign) {\n return;\n }\n const targetAxis = this._getTargetAxis(axis, sync);\n if (!targetAxis) {\n return;\n }\n // because of if the to axes bind in same region, the region will update them both in the data update.\n axis.event.on(\n ChartEvent.scaleDomainUpdate,\n { filter: ({ model }) => model.id === axis.id || model.id === targetAxis.id },\n () => {\n zeroAlign(targetAxis, axis);\n }\n );\n }\n\n onDidCompile(service: IComponentPluginService, axis: CartesianAxis) {\n const sync = this._checkEnableSync(axis);\n if (!sync) {\n return;\n }\n const targetAxis = this._getTargetAxis(axis, sync);\n if (!targetAxis) {\n return;\n }\n if (sync.tickAlign) {\n registerDataSetInstanceTransform(axis.getOption().dataSet, 'tickAlign', tickAlign);\n const opt = {\n targetAxis: () => targetAxis,\n currentAxis: () => axis\n };\n // only make this one follow target\n axis.addTransformToTickData({ type: 'tickAlign', options: opt, level: Number.MAX_SAFE_INTEGER }, false);\n }\n }\n}\n","import { AxisSyncPlugin } from './axis-sync-plugin/';\n\nexport default {\n AxisSyncPlugin\n};\n","import type { LinearScale, ContinuousScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous } from '@visactor/vscale';\nimport { isFunction, isValid, last } from '@visactor/vutils';\nimport { DEFAULT_CONTINUOUS_TICK_COUNT } from './config';\nimport type { ICartesianTickDataOpt, ITickData, ITickDataOpt } from './interface';\nimport type { ILabelItem } from './util';\n// eslint-disable-next-line no-duplicate-imports\nimport { convertDomainToTickData, getCartesianLabelBounds, hasOverlap, intersect } from './util';\n\n/**\n * 对于连续轴:\n * - 如果spec配了tickCount、forceTickCount、tickStep,则直接输出LinearScale的ticks()、forceTicks()、stepTicks()结果;\n * - 默认输出tickCount为10的ticks()结果。\n *\n * @param scale\n * @param op\n * @returns\n */\nexport const continuousTicks = (scale: ContinuousScale, op: ITickDataOpt): ITickData[] => {\n if (!isContinuous(scale.type)) {\n return convertDomainToTickData(scale.domain());\n }\n // if range is so small\n const range = scale.range();\n const rangeSize = Math.abs(range[range.length - 1] - range[0]);\n if (rangeSize < 2) {\n return convertDomainToTickData([scale.domain()[0]]);\n }\n\n const { tickCount, forceTickCount, tickStep, noDecimals = false, labelStyle } = op;\n\n let scaleTicks: number[];\n if (isValid(tickStep)) {\n scaleTicks = (scale as LinearScale).stepTicks(tickStep);\n } else if (isValid(forceTickCount)) {\n scaleTicks = (scale as LinearScale).forceTicks(forceTickCount);\n } else if (op.tickMode === 'd3') {\n const count = isFunction(tickCount) ? tickCount({ axisLength: rangeSize, labelStyle }) : tickCount;\n scaleTicks = (scale as LinearScale).d3Ticks(count ?? DEFAULT_CONTINUOUS_TICK_COUNT, { noDecimals });\n } else {\n const count = isFunction(tickCount) ? tickCount({ axisLength: rangeSize, labelStyle }) : tickCount;\n scaleTicks = (scale as LinearScale).ticks(count ?? DEFAULT_CONTINUOUS_TICK_COUNT, { noDecimals });\n }\n\n if (op.sampling) {\n // 判断重叠\n if (op.coordinateType === 'cartesian' || (op.coordinateType === 'polar' && op.axisOrientType === 'radius')) {\n const { labelGap = 4, labelFlush } = op as ICartesianTickDataOpt;\n let items = getCartesianLabelBounds(scale, scaleTicks, op as ICartesianTickDataOpt).map(\n (bounds, i) =>\n ({\n AABBBounds: bounds,\n value: scaleTicks[i]\n } as ILabelItem)\n );\n while (items.length >= 3 && hasOverlap(items, labelGap)) {\n items = methods.parity(items);\n }\n const ticks = items.map(item => item.value);\n\n if (ticks.length < 3 && labelFlush) {\n if (ticks.length > 1) {\n ticks.pop();\n }\n if (last(ticks) !== last(scaleTicks)) {\n ticks.push(last(scaleTicks));\n }\n }\n\n scaleTicks = ticks;\n }\n }\n\n return convertDomainToTickData(scaleTicks);\n};\n\nconst methods = {\n parity: function (items: ILabelItem[]) {\n return items.filter((item, i) => i % 2 === 0);\n },\n greedy: function (items: ILabelItem[], sep: number) {\n let a: ILabelItem;\n return items.filter((b, i) => {\n if (!i || !intersect(a.AABBBounds, b.AABBBounds, sep)) {\n a = b;\n return true;\n }\n return false;\n });\n }\n};\n","import type { BandScale, IBaseScale } from '@visactor/vscale';\nimport { isFunction, isValid, maxInArray, minInArray } from '@visactor/vutils';\nimport type { ICartesianTickDataOpt, ITickData } from '../interface';\nimport { convertDomainToTickData, getCartesianLabelBounds, isAxisHorizontal } from '../util';\nimport { binaryFuzzySearchInNumberRange } from '../../../algorithm';\n\n/** x1, x2, length */\ntype OneDimensionalBounds = [number, number, number];\n\nconst getOneDimensionalLabelBounds = (\n scale: IBaseScale,\n domain: any[],\n op: ICartesianTickDataOpt,\n isHorizontal: boolean\n): OneDimensionalBounds[] => {\n const labelBoundsList = getCartesianLabelBounds(scale, domain, op);\n return labelBoundsList.map(bounds => {\n if (isHorizontal) {\n return [bounds.x1, bounds.x2, bounds.width()];\n } else {\n return [bounds.y1, bounds.y2, bounds.height()];\n }\n });\n};\n\n/** 判断两个 bounds 是否有重叠情况 */\nconst boundsOverlap = (prevBounds: OneDimensionalBounds, nextBounds: OneDimensionalBounds, gap = 0): boolean => {\n return Math.max(prevBounds[0], nextBounds[0]) - gap / 2 <= Math.min(prevBounds[1], nextBounds[1]) + gap / 2;\n};\n\n/** 判断两个不相交的 bounds 相隔的距离 */\nexport const boundsDistance = (prevBounds: OneDimensionalBounds, nextBounds: OneDimensionalBounds): number => {\n if (prevBounds[1] < nextBounds[0]) {\n return nextBounds[0] - prevBounds[1];\n } else if (nextBounds[1] < prevBounds[0]) {\n return prevBounds[0] - nextBounds[1];\n }\n return 0;\n};\n\n/**\n * 对于离散轴:\n * - 如果spec配了tickCount、forceTickCount、tickStep,则直接输出BandScale的ticks()、forceTicks()、stepTicks()结果;\n * - 估算所有轴label的宽度(或高度,在竖轴的情况下)并存为数组domainLengthList;\n * - 通过循环来寻找最小的step,使:如果在这个step下采样,轴标签互不遮挡(此处用到domainLengthList和scale.range());\n * - 如果用户配置了spec.label.lastVisible,则处理右边界:强制采样最后一个tick数据,并删掉这个tick的label所覆盖的那些tick数据。\n *\n * @param scale\n * @param op\n * @returns\n */\nexport const linearDiscreteTicks = (scale: BandScale, op: ICartesianTickDataOpt): ITickData[] => {\n const domain = scale.domain();\n if (!domain.length) {\n return [];\n }\n const { tickCount, forceTickCount, tickStep, labelGap = 4, axisOrientType, labelStyle } = op;\n const isHorizontal = isAxisHorizontal(axisOrientType);\n const range = scale.range();\n\n // if range is so small\n const rangeSize = scale.calculateWholeRangeSize();\n if (rangeSize < 2) {\n if (op.labelLastVisible) {\n return convertDomainToTickData([domain[domain.length - 1]]);\n }\n return convertDomainToTickData([domain[0]]);\n }\n\n let scaleTicks;\n if (isValid(tickStep)) {\n scaleTicks = scale.stepTicks(tickStep);\n } else if (isValid(forceTickCount)) {\n scaleTicks = scale.forceTicks(forceTickCount);\n } else if (isValid(tickCount)) {\n const count = isFunction(tickCount) ? tickCount({ axisLength: rangeSize, labelStyle }) : tickCount;\n scaleTicks = scale.ticks(count);\n } else if (op.sampling) {\n const fontSize = (op.labelStyle.fontSize ?? 12) + 2;\n const rangeStart = minInArray(range);\n const rangeEnd = maxInArray(range);\n\n if (domain.length <= rangeSize / fontSize) {\n const incrementUnit = (rangeEnd - rangeStart) / domain.length;\n const labelBoundsList = getOneDimensionalLabelBounds(scale, domain, op, isHorizontal);\n const minBoundsLength = Math.min(...labelBoundsList.map(bounds => bounds[2]));\n\n const stepResult = getStep(\n domain,\n labelBoundsList,\n labelGap,\n op.labelLastVisible,\n Math.floor(minBoundsLength / incrementUnit), // 给step赋上合适的初值,有效改善外层循环次数\n false\n );\n\n scaleTicks = (scale as BandScale).stepTicks(stepResult.step);\n if (op.labelLastVisible) {\n if (stepResult.delCount) {\n scaleTicks = scaleTicks.slice(0, scaleTicks.length - stepResult.delCount);\n }\n scaleTicks.push(domain[domain.length - 1]);\n }\n } else {\n // only check first middle last, use the max size to sampling\n const tempDomain = [domain[0], domain[Math.floor(domain.length / 2)], domain[domain.length - 1]];\n const tempList = getOneDimensionalLabelBounds(scale, tempDomain, op, isHorizontal);\n let maxBounds: OneDimensionalBounds = null;\n tempList.forEach(current => {\n if (!maxBounds) {\n maxBounds = current;\n return;\n }\n if (maxBounds[2] < current[2]) {\n maxBounds = current;\n }\n });\n\n const step =\n rangeEnd - rangeStart - labelGap > 0\n ? Math.ceil((domain.length * (labelGap + maxBounds[2])) / (rangeEnd - rangeStart - labelGap))\n : domain.length - 1;\n\n scaleTicks = (scale as BandScale).stepTicks(step);\n\n if (\n op.labelLastVisible &&\n (!scaleTicks.length || scaleTicks[scaleTicks.length - 1] !== domain[domain.length - 1])\n ) {\n if (\n scaleTicks.length &&\n Math.abs(scale.scale(scaleTicks[scaleTicks.length - 1]) - scale.scale(domain[domain.length - 1])) <\n maxBounds[2]\n ) {\n scaleTicks = scaleTicks.slice(0, -1);\n }\n scaleTicks.push(domain[domain.length - 1]);\n }\n }\n } else {\n scaleTicks = scale.domain();\n }\n\n return convertDomainToTickData(scaleTicks);\n};\n\n/** 计算合适的step */\nconst getStep = (\n domain: any[],\n labelBoundsList: OneDimensionalBounds[],\n labelGap: number,\n labelLastVisible: boolean,\n defaultStep: number,\n areAllBoundsSame: boolean\n) => {\n let resultDelCount = 0;\n let resultStep = 0;\n let resultTickCount = -1;\n let minDiff = Number.MAX_VALUE;\n\n /** 验证在当前 step 下是否会产生重叠 */\n const validateStep = (step: number) => {\n let success = true;\n let ptr = 0;\n do {\n if (ptr + step < domain.length && boundsOverlap(labelBoundsList[ptr], labelBoundsList[ptr + step], labelGap)) {\n success = false;\n }\n ptr += step;\n } while (success && ptr < domain.length);\n return success;\n };\n\n // 通过二分来寻找最小的step,使:如果在这个step下采样,轴标签互不遮挡\n const minValidStep = binaryFuzzySearchInNumberRange(defaultStep, domain.length, step =>\n validateStep(step) ? 1 : -1\n );\n\n // 对 step 进行微调\n let step = minValidStep;\n do {\n if (step > minValidStep && !areAllBoundsSame) {\n if (!validateStep(step)) {\n step++;\n continue;\n }\n }\n if (labelLastVisible) {\n const lastIndex = domain.length - 1;\n let delCount = 0;\n let ptr;\n if (domain.length % step > 0) {\n ptr = domain.length - (domain.length % step) + step;\n } else {\n ptr = domain.length;\n }\n do {\n ptr -= step; // 获取最后一个label位置\n if (ptr === lastIndex || boundsOverlap(labelBoundsList[ptr], labelBoundsList[lastIndex], labelGap)) {\n delCount++;\n } else {\n break;\n }\n } while (ptr > 0);\n if (ptr === lastIndex) {\n // 采到的最后的一个 label 刚好是最后一项,直接退出\n resultStep = step;\n resultDelCount = delCount;\n break;\n } else {\n // 尝试获取最均匀的结果,防止倒数第二项和最后一项有大的空档\n const tickCount = Math.floor(domain.length / step) - delCount + 1;\n if (tickCount < resultTickCount) {\n break;\n } else {\n resultTickCount = tickCount;\n const distance1 = boundsDistance(labelBoundsList[ptr], labelBoundsList[lastIndex]); // 倒数第2项和最后一项的距离\n const distance2 =\n ptr - step >= 0 ? boundsDistance(labelBoundsList[ptr - step], labelBoundsList[ptr]) : distance1; // 倒数第3项和倒数第2项的距离\n const diff = Math.abs(distance1 - distance2);\n if (diff < minDiff) {\n minDiff = diff;\n resultStep = step; // 记录最均匀的 step\n resultDelCount = delCount;\n }\n if (distance1 <= distance2) {\n break;\n }\n }\n }\n } else {\n resultStep = step;\n break;\n }\n step++;\n } while (step <= domain.length);\n\n return {\n step: resultStep,\n delCount: resultDelCount\n };\n};\n","import type { BandScale } from '@visactor/vscale';\nimport { isFunction, isValid, maxInArray, minInArray } from '@visactor/vutils';\nimport type { IPolarTickDataOpt, ITickData } from '../interface';\nimport { convertDomainToTickData, getPolarAngleLabelBounds, labelOverlap } from '../util';\nimport type { AABBBounds } from '@visactor/vutils';\n\n/**\n * 对于离散轴:\n * - 如果spec配了tickCount、forceTickCount、tickStep,则直接输出BandScale的ticks()、forceTicks()、stepTicks()结果;\n * - 估算所有轴label的宽高并存为数组labelBoundsList;\n * - 通过循环来寻找最小的step,使:如果在这个step下采样,轴标签互不遮挡(此处用到labelBoundsList和scale.range());\n *\n * @param scale\n * @param op\n * @returns\n */\nexport const polarAngleAxisDiscreteTicks = (scale: BandScale, op: IPolarTickDataOpt): ITickData[] => {\n const { tickCount, forceTickCount, tickStep, getRadius, labelOffset, labelGap = 0, labelStyle } = op;\n const radius = getRadius?.();\n if (!radius) {\n return convertDomainToTickData(scale.domain());\n }\n\n let scaleTicks;\n if (isValid(tickStep)) {\n scaleTicks = scale.stepTicks(tickStep);\n } else if (isValid(forceTickCount)) {\n scaleTicks = scale.forceTicks(forceTickCount);\n } else if (isValid(tickCount)) {\n const range = scale.range();\n const rangeSize = Math.abs(range[range.length - 1] - range[0]);\n const count = isFunction(tickCount) ? tickCount({ axisLength: rangeSize, labelStyle }) : tickCount;\n scaleTicks = scale.ticks(count);\n } else if (op.sampling) {\n const domain = scale.domain();\n const range = scale.range();\n\n const labelBoundsList = getPolarAngleLabelBounds(scale, domain, op);\n\n const rangeStart = minInArray(range);\n const rangeEnd = maxInArray(range);\n\n const axisLength = Math.abs(rangeEnd - rangeStart) * (radius + labelOffset);\n const incrementUnit = axisLength / domain.length;\n const { step, delCount } = getStep(\n domain,\n labelBoundsList,\n labelGap,\n Math.floor(\n labelBoundsList.reduce((min, curBounds) => {\n return Math.min(min, curBounds.width(), curBounds.height());\n }, Number.MAX_VALUE) / incrementUnit\n ) // 给step赋上合适的初值,有效改善外层循环次数\n );\n\n scaleTicks = (scale as BandScale).stepTicks(step);\n scaleTicks = scaleTicks.slice(0, scaleTicks.length - delCount);\n } else {\n scaleTicks = scale.domain();\n }\n\n return convertDomainToTickData(scaleTicks);\n};\n\n/** 计算合适的step */\nconst getStep = (domain: any[], labelBoundsList: AABBBounds[], labelGap: number, defaultStep: number) => {\n let step = defaultStep;\n // 通过循环来寻找最小的step,使:如果在这个step下采样,轴标签互不遮挡\n do {\n let success = true;\n step++;\n let ptr = 0;\n do {\n if (ptr + step < domain.length && labelOverlap(labelBoundsList[ptr], labelBoundsList[ptr + step], labelGap)) {\n success = false;\n }\n ptr += step;\n } while (success && ptr < domain.length);\n if (success) {\n break;\n }\n } while (step <= domain.length);\n\n let delCount = 0;\n if (domain.length > 2) {\n let ptr = domain.length - (domain.length % step);\n if (ptr >= domain.length) {\n ptr -= step;\n }\n // 判断首尾是否互相覆盖\n while (ptr > 0 && labelOverlap(labelBoundsList[0], labelBoundsList[ptr])) {\n delCount++;\n ptr -= step;\n }\n }\n\n return {\n step,\n delCount\n };\n};\n","import type { BandScale, ContinuousScale, IBaseScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous, isDiscrete } from '@visactor/vscale';\nimport { continuousTicks } from './continuous';\nimport { linearDiscreteTicks } from './discrete/linear';\nimport { polarAngleAxisDiscreteTicks } from './discrete/polar-angle';\nimport type { ICartesianTickDataOpt, IPolarTickDataOpt, ITickData, ITickDataOpt } from './interface';\nimport { convertDomainToTickData } from './util';\n\nexport * from './interface';\nexport { convertDomainToTickData };\n\n// 总入口\nexport const ticks = (scale: IBaseScale, op: ITickDataOpt): ITickData[] => {\n if (isContinuous(scale.type)) {\n return continuousTicks(scale as ContinuousScale, op);\n } else if (isDiscrete(scale.type)) {\n if (op.coordinateType === 'cartesian') {\n return linearDiscreteTicks(scale as BandScale, op as ICartesianTickDataOpt);\n } else if (op.coordinateType === 'polar') {\n if (op.axisOrientType === 'angle') {\n return polarAngleAxisDiscreteTicks(scale as BandScale, op as IPolarTickDataOpt);\n }\n }\n }\n return convertDomainToTickData(scale.domain());\n};\n","/** 连续轴默认 tick 数量 */\nexport const DEFAULT_CONTINUOUS_TICK_COUNT = 5;\n","/**\n * @description 组件基类\n */\nimport type { IGroupGraphicAttribute } from '@visactor/vrender-core';\nimport { Group, CustomEvent } from '@visactor/vrender-core';\nimport type { Dict } from '@visactor/vutils';\nimport { merge, isFunction, isPlainObject, isNil } from '@visactor/vutils';\nimport type { ComponentOptions } from '../interface';\n\nconst GROUP_ATTRIBUTES = [\n 'x',\n 'y',\n 'dx',\n 'dy',\n 'scaleX',\n 'scaleY',\n 'angle',\n 'anchor',\n 'postMatrix',\n 'visible',\n 'clip',\n 'pickable',\n 'childrenPickable',\n 'zIndex',\n 'cursor'\n];\n\nexport abstract class AbstractComponent extends Group {\n declare attribute: Partial;\n\n protected mode?: '2d' | '3d';\n\n protected skipDefault?: boolean;\n\n constructor(attributes: T, options?: ComponentOptions) {\n super(attributes);\n\n if (options?.mode) {\n this.mode = options.mode;\n\n this.setMode(options.mode);\n }\n\n if (options?.skipDefault) {\n this.skipDefault = true;\n }\n // 组件需要精准 bounds,所以将这个 strokeBoundsBuffer 设置为 0,否则会影响包围盒的获取\n this.setTheme({\n common: {\n strokeBoundsBuffer: 0\n }\n });\n this.attribute = attributes;\n // 这里调用渲染和事件绑定逻辑\n this.onSetStage(() => {\n this.render();\n this.bindEvents();\n });\n }\n\n /**\n * @override\n * 更新单个属性值\n * @param key\n * @param value\n * @param forceUpdateTag\n */\n // @ts-ignore\n setAttribute(key: keyof T, value: any, forceUpdateTag?: boolean | undefined): void {\n // overwrite when previous or next attribute is function\n if (\n isPlainObject(this.attribute[key]) &&\n isPlainObject(value) &&\n !isFunction(this.attribute[key]) &&\n !isFunction(value)\n ) {\n merge(this.attribute[key], value);\n } else {\n this.attribute[key] = value;\n }\n\n // HACK: 待优化\n if (!GROUP_ATTRIBUTES.includes(key as string)) {\n this.render();\n }\n\n this.valid = this.isValid();\n if (!this.updateShapeAndBoundsTagSetted() && (forceUpdateTag || this.needUpdateTag(key as string))) {\n this.addUpdateShapeAndBoundsTag();\n } else {\n this.addUpdateBoundTag();\n }\n this.addUpdatePositionTag();\n this.onAttributeUpdate();\n }\n\n // @ts-ignore\n setAttributes(params: Partial, forceUpdateTag?: boolean | undefined): void {\n const keys = Object.keys(params) as (keyof T)[];\n this._mergeAttributes(params, keys);\n\n // HACK: 待优化\n if (!keys.every(key => GROUP_ATTRIBUTES.includes(key as string))) {\n this.render();\n }\n\n this.valid = this.isValid();\n // 没有设置shape&bounds的tag\n if (!this.updateShapeAndBoundsTagSetted() && (forceUpdateTag || this.needUpdateTags(keys as string[]))) {\n this.addUpdateShapeAndBoundsTag();\n } else {\n this.addUpdateBoundTag();\n }\n this.addUpdatePositionTag();\n this.onAttributeUpdate();\n }\n\n protected _mergeAttributes(params: Partial, keys?: (keyof T)[]) {\n if (isNil(keys)) {\n keys = Object.keys(params) as (keyof T)[];\n }\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i] as keyof Partial;\n // overwrite when previous or next attribute is function\n if (isPlainObject(this.attribute[key]) && !isFunction(this.attribute[key]) && !isFunction(params[key])) {\n merge(this.attribute[key], params[key]);\n } else {\n this.attribute[key] = params[key];\n }\n }\n }\n\n protected bindEvents() {\n // please override\n }\n\n protected abstract render(): void;\n\n // 图形元素 id\n protected _getNodeId(id: string) {\n return `${this.id}-${this.name}-${id}`;\n }\n\n // 用于 emit 组件自己的事件\n protected _dispatchEvent(eventName: string, details?: Dict) {\n // 封装事件\n const changeEvent = new CustomEvent(eventName, details);\n // FIXME: 需要在 vrender 的事件系统支持\n // @ts-ignore\n changeEvent.manager = this.stage?.eventSystem.manager;\n\n this.dispatchEvent(changeEvent);\n }\n}\n","import { registerGroup, registerLine, registerPolygon, registerSymbol } from '@visactor/vrender-kits';\n\nexport function loadSegmentComponent() {\n registerGroup();\n registerLine();\n registerPolygon();\n registerSymbol();\n}\n","/**\n * @description 标签组件\n */\nimport { array, flattenArray, isArray, isEmpty, isValidNumber, merge } from '@visactor/vutils';\nimport type { ISymbol } from '@visactor/vrender-core';\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport type { SegmentAttributes, SymbolAttributes } from './type';\nimport type { Point } from '../core/type';\nimport type { ComponentOptions } from '../interface';\nimport { loadSegmentComponent } from './register';\n\nloadSegmentComponent();\nexport class Segment extends AbstractComponent> {\n name = 'segment';\n\n startSymbol?: ISymbol;\n endSymbol?: ISymbol;\n\n private _startAngle!: number;\n /**\n * 外部获取segment起点正方向\n */\n getStartAngle() {\n return this._startAngle;\n }\n\n private _endAngle!: number;\n /**\n * 外部获取segment终点正方向\n */\n getEndAngle() {\n return this._endAngle;\n }\n\n private _mainSegmentPoints: Point[]; // 组成主线段的点\n getMainSegmentPoints() {\n return this._mainSegmentPoints;\n }\n\n static defaultAttributes: Partial = {\n visible: true,\n lineStyle: {\n lineWidth: 1,\n stroke: '#000'\n },\n startSymbol: {\n visible: false,\n autoRotate: true,\n symbolType: 'triangle',\n size: 12,\n refX: 0,\n refY: 0,\n refAngle: 0,\n style: {\n fill: '#000',\n zIndex: 1 // 默认 symbol 绘制在 line 上面\n }\n },\n endSymbol: {\n visible: false,\n autoRotate: true,\n symbolType: 'triangle',\n size: 12,\n refX: 0,\n refY: 0,\n refAngle: 0,\n style: {\n fill: '#000',\n zIndex: 1 // 默认 symbol 绘制在 line 上面\n }\n }\n };\n\n constructor(attributes: SegmentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Segment.defaultAttributes, attributes));\n }\n\n protected render() {\n this.removeAllChild();\n this._reset();\n const {\n // points,\n startSymbol,\n endSymbol,\n lineStyle,\n state,\n visible = true,\n multiSegment,\n mainSegmentIndex\n } = this.attribute as SegmentAttributes;\n\n if (!visible) {\n return;\n }\n\n // 计算线的起点和终点角度\n // 计算角度的原因:\n // 1. segment symbol的自动旋转提供参数\n // 2. 使用segment时,需要根据line的角度对附加元素进行自动旋转(比如:markLine的标签, markPoint的装饰线)\n this._computeLineAngle();\n\n // 绘制start和end symbol\n const startSymbolShape = this._renderSymbol(startSymbol as SymbolAttributes, 'start');\n const endSymbolShape = this._renderSymbol(endSymbol as SymbolAttributes, 'end');\n\n this.startSymbol = startSymbolShape;\n this.endSymbol = endSymbolShape;\n\n if (multiSegment) {\n const points = [...this.attribute.points];\n if (isValidNumber(mainSegmentIndex)) {\n points[mainSegmentIndex] = this._clipPoints(points[mainSegmentIndex] as Point[]);\n } else {\n const clipPoints = this._clipPoints(flattenArray(points) as Point[]);\n points[0][0] = clipPoints[0];\n (points[points.length - 1] as Point[])[(points[points.length - 1] as Point[]).length - 1] =\n clipPoints[clipPoints.length - 1];\n }\n points.forEach((point: Point[], index) => {\n const line = graphicCreator.line({\n points: point,\n ...(isArray(lineStyle) ? lineStyle[index] ?? lineStyle[lineStyle.length - 1] : lineStyle),\n fill: false\n });\n\n line.name = `${this.name}-line`;\n line.id = this._getNodeId('line' + index);\n if (!isEmpty(state?.line)) {\n line.states = isArray(state.line) ? state.line[index] ?? state.line[state.line.length - 1] : state.line;\n }\n this.add(line);\n });\n } else {\n const line = graphicCreator.polygon({\n points: this._clipPoints(this.attribute.points as Point[]),\n ...array(lineStyle)[0],\n fill: false,\n closePath: false\n });\n\n line.name = `${this.name}-line`;\n line.id = this._getNodeId('line');\n if (!isEmpty(state?.line)) {\n line.states = [].concat(state.line)[0];\n }\n this.add(line);\n }\n }\n\n private _renderSymbol(attribute: SymbolAttributes, dim: string): ISymbol | undefined {\n const points = this._getMainSegmentPoints();\n if (!points.length) {\n return;\n }\n\n const { autoRotate = true } = attribute;\n let symbol;\n if (attribute && attribute.visible) {\n const startAngle = this._startAngle;\n const endAngle = this._endAngle;\n const { state } = this.attribute as SegmentAttributes;\n const start = points[0];\n const end = points[points.length - 1];\n const { refX = 0, refY = 0, refAngle = 0, style, symbolType, size = 12 } = attribute;\n let position;\n let rotate;\n if (dim === 'start') {\n position = {\n x:\n start.x +\n (isValidNumber(startAngle) ? refX * Math.cos(startAngle) + refY * Math.cos(startAngle - Math.PI / 2) : 0),\n y:\n start.y +\n (isValidNumber(startAngle) ? refX * Math.sin(startAngle) + refY * Math.sin(startAngle - Math.PI / 2) : 0)\n };\n rotate = startAngle + Math.PI / 2; // @chensiji - 加Math.PI / 2是因为:默认symbol的包围盒垂直于line,所以在做自动旋转时需要在line正方向基础上做90度偏移\n } else {\n position = {\n x:\n end.x + (isValidNumber(endAngle) ? refX * Math.cos(endAngle) + refY * Math.cos(endAngle - Math.PI / 2) : 0),\n y: end.y + (isValidNumber(endAngle) ? refX * Math.sin(endAngle) + refY * Math.sin(endAngle - Math.PI / 2) : 0)\n };\n rotate = endAngle + Math.PI / 2;\n }\n\n symbol = graphicCreator.symbol({\n ...position,\n symbolType: symbolType as string,\n size,\n angle: autoRotate ? rotate + refAngle : 0,\n strokeBoundsBuffer: 0,\n ...style\n });\n symbol.name = `${this.name}-${dim}-symbol`;\n symbol.id = this._getNodeId(`${dim}-symbol`);\n\n if (!isEmpty(state?.symbol)) {\n symbol.states = state.symbol;\n }\n\n this.add(symbol);\n }\n return symbol;\n }\n\n private _getMainSegmentPoints(): Point[] {\n if (this._mainSegmentPoints) {\n return this._mainSegmentPoints;\n }\n const { points: originPoints, multiSegment, mainSegmentIndex } = this.attribute as SegmentAttributes;\n\n let points: Point[];\n // 需要做下约束判断\n if (multiSegment) {\n if (isValidNumber(mainSegmentIndex)) {\n points = originPoints[mainSegmentIndex] as Point[];\n } else {\n points = flattenArray(originPoints);\n }\n } else {\n points = originPoints as Point[];\n }\n this._mainSegmentPoints = points;\n\n return points;\n }\n\n private _clipPoints(points: Point[]) {\n const { startSymbol = {} as SegmentAttributes['startSymbol'], endSymbol = {} as SegmentAttributes['endSymbol'] } =\n this.attribute as SegmentAttributes;\n // 通过改变line起点和终点的方式达到symbol在fill为false的情况下,也可以遮盖line的效果\n let pointsAfterClip = points;\n if (startSymbol.visible) {\n const startSize = startSymbol.clip ? startSymbol.size || 10 : 0;\n const pointsStart = {\n x: points[0].x - (startSize / 2) * (Math.cos(this._startAngle) || 0),\n y: points[0].y - (startSize / 2) * (Math.sin(this._startAngle) || 0)\n };\n pointsAfterClip = [pointsStart, ...pointsAfterClip.slice(1)];\n }\n if (endSymbol.visible) {\n const endSize = endSymbol.clip ? endSymbol.size || 10 : 0;\n const pointsEnd = {\n x: points[points.length - 1].x - (endSize / 2) * (Math.cos(this._endAngle) || 0),\n y: points[points.length - 1].y - (endSize / 2) * (Math.sin(this._endAngle) || 0)\n };\n pointsAfterClip = [...pointsAfterClip.slice(0, pointsAfterClip.length - 1), pointsEnd];\n }\n\n return pointsAfterClip;\n }\n\n private _computeLineAngle() {\n const points = this._getMainSegmentPoints();\n if (points.length <= 1) {\n return;\n }\n const start = points[0];\n const startInside = points[1];\n const endInside = points[points.length - 2];\n const end = points[points.length - 1];\n const startVector = [start.x - startInside.x, start.y - startInside.y]; // 起点正方向向量\n const startAngle = Math.atan2(startVector[1], startVector[0]); // 起点正方向角度\n const endVector = [end.x - endInside.x, end.y - endInside.y]; // 终点正方向向量\n const endAngle = Math.atan2(endVector[1], endVector[0]); // 终点正方向角度\n\n this._startAngle = startAngle;\n this._endAngle = endAngle;\n }\n\n private _reset() {\n this.startSymbol = null;\n this.endSymbol = null;\n this._startAngle = null;\n this._endAngle = null;\n this._mainSegmentPoints = null;\n }\n}\n","export type Vector2 = [number, number];\n\n/**\n * Scales a vec2 by a scalar number\n */\nexport function scale(vector: Vector2, scale: number): [number, number] {\n return [vector[0] * scale, vector[1] * scale];\n}\n\n/**\n * Calculates the length of a vec2\n */\nexport function length(vector: Vector2) {\n const [x, y] = vector;\n return Math.sqrt(x * x + y * y);\n}\n\n/**\n * Normalize a vec2\n */\nexport function normalize(vector: Vector2) {\n const [x, y] = vector;\n let len = x * x + y * y;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n }\n return [vector[0] * len, vector[1] * len];\n}\n\n/**\n * Get the angle between two 2D vectors\n */\nexport function angle(vector1: Vector2, vector2: Vector2) {\n const [x1, y1] = vector1;\n const [x2, y2] = vector2;\n const mag = Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2));\n const cosine = mag && (x1 * x2 + y1 * y2) / mag;\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n\n/**\n * 向量 v1 到 向量 v2 夹角的方向\n * @param {Array} v1 向量\n * @param {Array} v2 向量\n * @return {Boolean} >= 0 顺时针 < 0 逆时针\n */\nexport function direction(v1: number[], v2: number[]): number {\n return v1[0] * v2[1] - v2[0] * v1[1];\n}\n\n/**\n * 二维向量 v1 到 v2 的夹角\n * @param v1\n * @param v2\n * @param direct\n */\nexport function angleTo(v1: [number, number], v2: [number, number], direct: boolean): number {\n const ang = angle(v1, v2);\n const angleLargeThanPI = direction(v1, v2) >= 0;\n if (direct) {\n if (angleLargeThanPI) {\n return Math.PI * 2 - ang;\n }\n return ang;\n }\n\n if (angleLargeThanPI) {\n return ang;\n }\n return Math.PI * 2 - ang;\n}\n","/**\n * @description 存放工具函数\n */\nimport type { IGraphicAttribute, IGraphic, IGroup } from '@visactor/vrender-core';\nimport { isNil } from '@visactor/vutils';\n\nexport function traverseGroup(group: IGraphic, cb: (node: IGraphic) => boolean | void) {\n group.forEachChildren(node => {\n const stopped = cb(node as IGraphic);\n if ((node as IGroup).isContainer && !stopped) {\n traverseGroup(node as IGraphic, cb);\n }\n });\n}\n\nexport const isVisible = (obj?: Partial): boolean => {\n if (isNil(obj)) {\n return false;\n }\n return obj.visible !== false;\n};\n\nexport function getMarksByName(root: IGroup, name: string) {\n if (!name) {\n return [];\n }\n const group = root.find(node => node.name === name, true) as IGroup;\n if (!group) {\n return [];\n }\n return group.getChildren() as IGraphic[];\n}\n\nexport function getNoneGroupMarksByName(root: IGroup, name: string) {\n if (!name) {\n return [];\n }\n const group = root.find(node => node.name === name, true) as IGroup;\n if (!group) {\n return [];\n }\n return group.findAll(node => node.type !== 'group', true) as unknown as IGraphic[];\n}\n","export const POLAR_START_ANGLE = -.5 * Math.PI;\n\nexport const POLAR_END_ANGLE = 1.5 * Math.PI;\n\nexport const DEFAULT_TEXT_FONT_FAMILY = \"PingFang SC,Microsoft Yahei,system-ui,-apple-system,segoe ui,Roboto,Helvetica,Arial,sans-serif, apple color emoji,segoe ui emoji,segoe ui symbol\";\n\nexport const DEFAULT_TEXT_FONT_SIZE = 11;\n\nexport var StateValue;\n\n!function(StateValue) {\n StateValue.selected = \"selected\", StateValue.selectedReverse = \"selected_reverse\", \n StateValue.hover = \"hover\", StateValue.hoverReverse = \"hover_reverse\";\n}(StateValue || (StateValue = {}));\n\nexport const DEFAULT_STATES = {\n [StateValue.selectedReverse]: {},\n [StateValue.selected]: {},\n [StateValue.hover]: {},\n [StateValue.hoverReverse]: {}\n};\n\nexport const DEFAULT_HTML_TEXT_SPEC = {\n container: \"\",\n width: 30,\n height: 30,\n style: {}\n};","export enum AXIS_ELEMENT_NAME {\n innerView = 'inner-view',\n axisContainer = 'axis-container',\n labelContainer = 'axis-label-container',\n tickContainer = 'axis-tick-container',\n tick = 'axis-tick',\n subTick = 'axis-sub-tick',\n label = 'axis-label',\n title = 'axis-title',\n gridContainer = 'axis-grid-container',\n grid = 'axis-grid',\n gridRegion = 'axis-grid-region',\n line = 'axis-line',\n background = 'axis-background',\n axisLabelBackground = 'axis-label-background'\n}\n\nexport enum AxisStateValue {\n selected = 'selected',\n selectedReverse = 'selected_reverse',\n hover = 'hover',\n hoverReverse = 'hover_reverse'\n}\n\nexport const DEFAULT_STATES = {\n [AxisStateValue.selectedReverse]: {},\n [AxisStateValue.selected]: {},\n [AxisStateValue.hover]: {},\n [AxisStateValue.hoverReverse]: {}\n};\n","export const DEFAULT_AXIS_THEME = {\n title: {\n space: 4,\n padding: 0,\n textStyle: {\n fontSize: 12,\n fill: '#333333',\n fontWeight: 'normal',\n fillOpacity: 1\n }\n },\n label: {\n visible: true,\n inside: false,\n space: 4,\n padding: 0,\n style: {\n fontSize: 12,\n fill: '#333',\n fontWeight: 'normal',\n fillOpacity: 1\n }\n },\n tick: {\n visible: true,\n inside: false,\n alignWithLabel: true,\n length: 4,\n style: {\n lineWidth: 1,\n stroke: '#000',\n strokeOpacity: 1\n }\n },\n subTick: {\n visible: false,\n inside: false,\n count: 4,\n length: 2,\n style: {\n lineWidth: 1,\n stroke: '#999',\n strokeOpacity: 1\n }\n },\n line: {\n visible: true,\n style: {\n lineWidth: 1,\n stroke: '#000',\n strokeOpacity: 1\n }\n }\n};\n","import type { ITextGraphicAttribute } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { getTextBounds } from '@visactor/vrender-core';\nimport type { ITextMeasureOption } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { TextMeasure } from '@visactor/vutils';\nimport { DEFAULT_TEXT_FONT_FAMILY, DEFAULT_TEXT_FONT_SIZE } from '../constant';\n\nexport const initTextMeasure = (\n textSpec?: Partial,\n option?: Partial,\n useNaiveCanvas?: boolean\n): TextMeasure => {\n return new TextMeasure(\n {\n defaultFontParams: {\n fontFamily: DEFAULT_TEXT_FONT_FAMILY,\n fontSize: DEFAULT_TEXT_FONT_SIZE\n },\n getTextBounds: useNaiveCanvas ? undefined : getTextBounds,\n specialCharSet: '-/: .,@%\\'\"~' + TextMeasure.ALPHABET_CHAR_SET + TextMeasure.ALPHABET_CHAR_SET.toUpperCase(),\n ...(option ?? {})\n },\n textSpec\n );\n};\n\n// FIXME: 和上一个方法统一,使用 TextMeasure 类\nexport function measureTextSize(\n text: string | number | string[] | number[],\n textSpec: Partial,\n fontFamily: string = DEFAULT_TEXT_FONT_FAMILY\n) {\n if (!text) {\n return { width: 0, height: 0 };\n }\n const bounds = getTextBounds({\n text,\n fontFamily: textSpec.fontFamily ?? fontFamily,\n fontSize: textSpec.fontSize || 12,\n fontWeight: textSpec.fontWeight as any,\n textAlign: textSpec.textAlign ?? 'center',\n textBaseline: textSpec.textBaseline,\n ellipsis: !!textSpec.ellipsis,\n maxLineWidth: textSpec.maxLineWidth || Infinity,\n lineHeight: textSpec.fontSize || 12\n });\n\n return { width: bounds.width(), height: bounds.height() };\n}\n","import { registerGroup, registerRect, registerRichtext, registerSymbol, registerText } from '@visactor/vrender-kits';\n\nexport function loadTagComponent() {\n registerGroup();\n registerRect();\n registerSymbol();\n registerRichtext();\n registerText();\n}\n","/**\n * @description 标签组件\n */\nimport type {\n IGroup,\n IRect,\n ISymbol,\n IText,\n ITextAttribute,\n ITextGraphicAttribute,\n IRichTextGraphicAttribute,\n IRichText,\n IRichTextCharacter\n} from '@visactor/vrender-core';\nimport { isBoolean, isEmpty, isNil, isNumber, isValid, merge, normalizePadding } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport { measureTextSize } from '../util';\nimport type { BackgroundAttributes, ComponentOptions } from '../interface';\nimport type { TagAttributes, TagShapeAttributes } from './type';\nimport { DEFAULT_HTML_TEXT_SPEC } from '../constant';\nimport { loadTagComponent } from './register';\n\nloadTagComponent();\nexport class Tag extends AbstractComponent> {\n name = 'tag';\n\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {\n fontSize: 12,\n fill: '#000',\n textAlign: 'left',\n textBaseline: 'top'\n },\n space: 4,\n padding: 4,\n // @ts-ignore\n shape: {\n fill: '#000'\n }\n };\n\n constructor(attributes: TagAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Tag.defaultAttributes, attributes));\n }\n\n protected render() {\n const {\n text = '',\n textStyle = {} as ITextGraphicAttribute | IRichTextGraphicAttribute,\n shape = {} as TagShapeAttributes,\n panel = {} as BackgroundAttributes,\n space = 4,\n minWidth,\n maxWidth,\n padding = 4,\n visible,\n state,\n type,\n textAlwaysCenter\n } = this.attribute as TagAttributes;\n const parsedPadding = normalizePadding(padding);\n\n const group = this.createOrUpdateChild('tag-content', { x: 0, y: 0, zIndex: 1 }, 'group') as IGroup;\n\n let symbol;\n let tagWidth = parsedPadding[1] + parsedPadding[3];\n let tagHeight = parsedPadding[0] + parsedPadding[2];\n let textX = 0;\n let symbolPlaceWidth = 0;\n const { visible: shapeVisible, ...shapeStyle } = shape;\n if (isBoolean(shapeVisible)) {\n const size = shapeStyle?.size || 10;\n const maxSize = isNumber(size) ? size : Math.max(size[0], size[1]);\n\n symbol = group.createOrUpdateChild(\n 'tag-shape',\n {\n symbolType: 'circle',\n size,\n strokeBoundsBuffer: 0,\n ...shapeStyle,\n visible: shapeVisible,\n x: maxSize / 2,\n y: maxSize / 2\n },\n 'symbol'\n ) as ISymbol;\n if (!isEmpty(state?.shape)) {\n symbol.states = state.shape;\n }\n\n if (shapeVisible) {\n symbolPlaceWidth = maxSize + space;\n }\n }\n\n tagWidth += symbolPlaceWidth;\n textX += symbolPlaceWidth;\n\n let textShape;\n if (type === 'rich') {\n const richTextAttrs = {\n textConfig: text as IRichTextCharacter[],\n visible: isValid(text) && visible !== false,\n ...(textStyle as IRichTextGraphicAttribute),\n x: textX,\n y: 0,\n width: (textStyle as IRichTextGraphicAttribute).width ?? 0,\n height: (textStyle as IRichTextGraphicAttribute).height ?? 0\n };\n textShape = group.createOrUpdateChild('tag-text', richTextAttrs, 'richtext') as IRichText;\n\n // 绘制背景层\n const { visible: bgVisible, ...backgroundStyle } = panel;\n if (visible && isBoolean(bgVisible)) {\n const bgRect = this.createOrUpdateChild(\n 'tag-panel',\n {\n ...backgroundStyle,\n visible: bgVisible && !!text,\n x: textShape.AABBBounds.x1,\n y: textShape.AABBBounds.y1,\n width: textShape.AABBBounds.width(),\n height: textShape.AABBBounds.height()\n },\n 'rect'\n ) as IRect;\n if (!isEmpty(state?.panel)) {\n bgRect.states = state.panel;\n }\n }\n } else if (type === 'html') {\n const richTextAttrs = {\n textConfig: [] as IRichTextCharacter[],\n visible: isValid(text) && visible !== false,\n html: {\n dom: text as string,\n ...DEFAULT_HTML_TEXT_SPEC,\n ...textStyle\n },\n ...(textStyle as IRichTextGraphicAttribute),\n x: textX,\n y: 0\n };\n textShape = group.createOrUpdateChild('tag-text', richTextAttrs, 'richtext') as IRichText;\n\n // 绘制背景层\n const { visible: bgVisible, ...backgroundStyle } = panel;\n if (visible && isBoolean(bgVisible)) {\n const bgRect = this.createOrUpdateChild(\n 'tag-panel',\n {\n ...backgroundStyle,\n visible: bgVisible && !!text,\n x: textShape.AABBBounds.x1,\n y: textShape.AABBBounds.y1,\n width: textShape.AABBBounds.width(),\n height: textShape.AABBBounds.height()\n },\n 'rect'\n ) as IRect;\n if (!isEmpty(state?.panel)) {\n bgRect.states = state.panel;\n }\n }\n } else {\n const textAttrs = {\n text: text as string | number | string[] | number[],\n visible: isValid(text) && visible !== false,\n lineHeight: (textStyle as ITextGraphicAttribute)?.fontSize,\n ...(textStyle as ITextGraphicAttribute),\n x: textX,\n y: 0\n };\n if (isNil(textAttrs.lineHeight)) {\n textAttrs.lineHeight = (textStyle as ITextGraphicAttribute).fontSize;\n }\n textShape = group.createOrUpdateChild('tag-text', textAttrs, 'text') as IText;\n if (!isEmpty(state?.text)) {\n textShape.states = state.text;\n }\n\n // 因为文本可能发生旋转,所以需要使用 measureTextSize 方法\n const textBounds = measureTextSize(textAttrs.text as string, textStyle, this.stage?.getTheme().text.fontFamily);\n const textWidth = textBounds.width;\n const textHeight = textBounds.height;\n tagWidth += textWidth;\n const size = shape.size ?? 10;\n const maxSize = isNumber(size) ? size : Math.max(size[0], size[1]);\n tagHeight += Math.max(textHeight, shape.visible ? maxSize : 0);\n\n const { textAlign, textBaseline } = textStyle as ITextAttribute;\n\n if (isValid(minWidth) || isValid(maxWidth)) {\n if (isValid(minWidth) && tagWidth < minWidth) {\n tagWidth = minWidth;\n }\n if (isValid(maxWidth) && tagWidth > maxWidth) {\n tagWidth = maxWidth;\n textShape.setAttribute('maxLineWidth', maxWidth - parsedPadding[1] - parsedPadding[2]);\n }\n }\n\n let x = 0;\n let y = 0;\n if (textAlign === 'center') {\n x -= tagWidth / 2;\n if (symbol) {\n symbol.setAttribute('x', (symbol.attribute.x || 0) - textWidth / 2);\n }\n\n group.setAttribute('x', -symbolPlaceWidth / 2);\n } else if (textAlign === 'right' || textAlign === 'end') {\n x -= tagWidth;\n if (symbol) {\n symbol.setAttribute('x', (symbol.attribute.x || 0) - textWidth);\n }\n\n group.setAttribute('x', -parsedPadding[1] - symbolPlaceWidth);\n } else if (textAlign === 'left' || textAlign === 'start') {\n group.setAttribute('x', parsedPadding[3]);\n }\n\n if (textAlwaysCenter && (textAlign === 'left' || textAlign === 'start')) {\n // for flex layout\n textShape.setAttributes({\n x: textX + tagWidth / 2,\n textAlign: 'center'\n });\n }\n\n if (textBaseline === 'middle') {\n y -= tagHeight / 2;\n if (symbol) {\n symbol.setAttribute('y', 0);\n }\n } else if (textBaseline === 'bottom') {\n y -= tagHeight;\n if (symbol) {\n symbol.setAttribute('y', -textHeight / 2);\n }\n\n group.setAttribute('y', -parsedPadding[2]);\n } else if (textBaseline === 'top') {\n group.setAttribute('y', parsedPadding[0]);\n if (symbol) {\n symbol.setAttribute('y', textHeight / 2);\n }\n }\n\n // 绘制背景层\n const { visible: bgVisible, ...backgroundStyle } = panel;\n if (visible && isBoolean(bgVisible)) {\n const bgRect = this.createOrUpdateChild(\n 'tag-panel',\n {\n ...backgroundStyle,\n visible: bgVisible && !!text,\n x,\n y,\n width: tagWidth,\n height: tagHeight\n },\n 'rect'\n ) as IRect;\n if (!isEmpty(state?.panel)) {\n bgRect.states = state.panel;\n }\n }\n }\n }\n}\n","/**\n * TODO:\n * 1. trunk 坐标轴截断\n * @description 坐标轴组件基类\n */\nimport type {\n IGroup,\n INode,\n ITextGraphicAttribute,\n TextAlignType,\n TextBaselineType,\n FederatedPointerEvent,\n IGraphic,\n IText\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport type { Dict } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { abs, cloneDeep, get, isEmpty, isFunction, isNumberClose, merge, pi } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { Point } from '../core/type';\nimport type { TagAttributes } from '../tag';\nimport { traverseGroup } from '../util';\nimport { DEFAULT_STATES, StateValue } from '../constant';\nimport { AXIS_ELEMENT_NAME } from './constant';\nimport { DEFAULT_AXIS_THEME } from './config';\nimport type {\n LabelAttributes,\n AxisBaseAttributes,\n AxisItem,\n TickAttributes,\n TransformedAxisItem,\n SubTickAttributes,\n TickLineItem\n} from './type';\nimport { Tag } from '../tag/tag';\nimport { DEFAULT_HTML_TEXT_SPEC } from '../constant';\n\nexport abstract class AxisBase extends AbstractComponent> {\n name = 'axis';\n\n // TODO: 组件整体统一起来\n protected _innerView: IGroup;\n getInnerView() {\n return this._innerView;\n }\n\n protected _prevInnerView: IGroup; // 缓存旧场景树,用于自定义动画\n /**\n * 获取更新前的旧场景树\n * @returns 返回更新前的旧场景树\n */\n getPrevInnerView() {\n return this._prevInnerView;\n }\n\n // 经过处理后的坐标轴点数据\n protected data: TransformedAxisItem[] = [];\n protected tickLineItems: TickLineItem[] = [];\n protected subTickLineItems: TickLineItem[] = [];\n protected axisLabelLayerSize: Dict<{ width: number; height: number; textAlign: string; textBaseline: string }> = {};\n protected axisLabelsContainer: IGroup | null = null;\n protected axisContainer: IGroup;\n\n private _lastHover: IGraphic;\n private _lastSelect: IGraphic;\n\n protected abstract renderLine(container: IGroup): void;\n abstract isInValidValue(value: number): boolean;\n abstract getTickCoord(value: number): Point;\n abstract getVerticalVector(offset: number, inside: boolean, point: Point): [number, number];\n abstract getRelativeVector(point?: Point): [number, number];\n protected abstract getTitleAttribute(): TagAttributes;\n protected abstract getTextBaseline(vector: [number, number], inside?: boolean): TextBaselineType;\n protected abstract beforeLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void;\n protected abstract handleLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void;\n protected abstract afterLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void;\n protected abstract getLabelAlign(\n vector: [number, number],\n inside?: boolean,\n angle?: number\n ): { textAlign: TextAlignType; textBaseline: TextBaselineType };\n\n /**\n * 坐标轴的一个特殊的方法,用于不更新场景树来获取更新属性后的包围盒\n * TODO:后面看情况再抽象为通用的方法\n */\n getBoundsWithoutRender(attributes: Partial) {\n const currentAttribute = cloneDeep(this.attribute);\n merge(this.attribute, attributes);\n\n const offscreenGroup = graphicCreator.group({\n x: this.attribute.x,\n y: this.attribute.y\n });\n this.add(offscreenGroup);\n\n this._renderInner(offscreenGroup);\n\n this.removeChild(offscreenGroup);\n this.attribute = currentAttribute;\n return offscreenGroup.AABBBounds;\n }\n\n protected render(): void {\n this.removeAllChild();\n this._prevInnerView = this._innerView;\n this._innerView = graphicCreator.group({ x: 0, y: 0, pickable: false });\n this.add(this._innerView);\n\n this._renderInner(this._innerView);\n\n this._bindEvent();\n }\n\n private _bindEvent() {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n const { hover, select } = this.attribute;\n\n if (hover) {\n this._innerView.addEventListener('pointermove', this._onHover as EventListenerOrEventListenerObject);\n this._innerView.addEventListener('pointerout', this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n this._innerView.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (target !== this._lastHover && target.name && !isEmpty(target.states)) {\n target.addState(StateValue.hover, true);\n traverseGroup(this.axisContainer, (node: IGraphic) => {\n if (node !== target && node.name && !isEmpty(node.states)) {\n node.addState(StateValue.hoverReverse, true);\n }\n });\n this._lastHover = target;\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n if (this._lastHover) {\n traverseGroup(this.axisContainer, (node: IGraphic) => {\n if (node.name && !isEmpty(node.states)) {\n node.removeState(StateValue.hoverReverse);\n node.removeState(StateValue.hover);\n }\n });\n this._lastHover = null;\n }\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (this._lastSelect === target && target.hasState(StateValue.selected)) {\n // 取消选中\n this._lastSelect = null;\n traverseGroup(this.axisContainer, (node: IGraphic) => {\n if (node.name && !isEmpty(node.states)) {\n node.removeState(StateValue.selectedReverse);\n node.removeState(StateValue.selected);\n }\n });\n return;\n }\n\n if (target.name && !isEmpty(target.states)) {\n target.addState(StateValue.selected, true);\n traverseGroup(this.axisContainer, (node: IGraphic) => {\n if (node !== target && node.name && !isEmpty(node.states)) {\n node.addState(StateValue.selectedReverse, true);\n }\n });\n this._lastSelect = target;\n }\n };\n\n protected _renderInner(container: IGroup) {\n const { title, label, tick, line, items } = this.attribute;\n\n const axisContainer = graphicCreator.group({ x: 0, y: 0, zIndex: 1 });\n axisContainer.name = AXIS_ELEMENT_NAME.axisContainer;\n axisContainer.id = this._getNodeId('container');\n axisContainer.setMode(this.mode);\n this.axisContainer = axisContainer;\n container.add(axisContainer);\n\n // 渲染轴线\n if (line && line.visible) {\n this.renderLine(axisContainer);\n }\n\n if (items && items.length) {\n this.data = this._transformItems(items[0]);\n\n // 渲染刻度线,包含子刻度线\n if (tick && tick.visible) {\n this.renderTicks(axisContainer);\n }\n // 渲染标签\n if (label && label.visible) {\n const labelGroup = graphicCreator.group({ x: 0, y: 0, pickable: false });\n labelGroup.name = AXIS_ELEMENT_NAME.labelContainer;\n labelGroup.id = this._getNodeId('label-container');\n this.axisLabelsContainer = labelGroup;\n axisContainer.add(labelGroup);\n items.forEach((axisItems: AxisItem[], layer: number) => {\n const layerLabelGroup = this.renderLabels(labelGroup, axisItems, layer);\n\n const labels = layerLabelGroup.getChildren() as IText[];\n this.beforeLabelsOverlap(labels, axisItems, layerLabelGroup, layer, items.length);\n // handle overlap\n this.handleLabelsOverlap(labels, axisItems, layerLabelGroup, layer, items.length);\n this.afterLabelsOverlap(labels, axisItems, layerLabelGroup, layer, items.length);\n\n let maxTextWidth = 0;\n let maxTextHeight = 0;\n let textAlign = 'center';\n let textBaseline = 'middle';\n labels.forEach((label: IText) => {\n const labelStyle = label.attribute;\n const angle = labelStyle.angle ?? 0;\n const textBounds = label.AABBBounds;\n let textWidth = textBounds.width();\n let textHeight = textBounds.height();\n if (angle) {\n textWidth = Math.abs(textWidth * Math.cos(angle));\n textHeight = Math.abs(textHeight * Math.sin(angle));\n }\n maxTextWidth = Math.max(maxTextWidth, textWidth);\n maxTextHeight = Math.max(maxTextHeight, textHeight);\n\n textAlign = labelStyle.textAlign as string;\n textBaseline = labelStyle.textBaseline as string;\n });\n this.axisLabelLayerSize[layer] = {\n width: maxTextWidth,\n height: maxTextHeight,\n\n textAlign,\n textBaseline\n };\n });\n }\n }\n\n // 渲染标题\n if (title && title.visible) {\n this.renderTitle(axisContainer);\n }\n }\n protected renderTicks(container: IGroup) {\n const tickLineItems = this.getTickLineItems();\n\n const tickLineGroup = graphicCreator.group({ x: 0, y: 0, pickable: false });\n tickLineGroup.name = AXIS_ELEMENT_NAME.tickContainer;\n tickLineGroup.id = this._getNodeId('tick-container');\n container.add(tickLineGroup);\n\n tickLineItems.forEach((item: TickLineItem, index) => {\n const line = graphicCreator.line({\n ...this._getTickLineAttribute('tick', item, index, tickLineItems)\n });\n line.name = AXIS_ELEMENT_NAME.tick;\n line.id = this._getNodeId(item.id);\n\n if (isEmpty(this.attribute.tick?.state)) {\n line.states = DEFAULT_STATES;\n } else {\n const data = this.data[index];\n const tickLineState = merge({}, DEFAULT_STATES, this.attribute.tick.state);\n Object.keys(tickLineState).forEach(key => {\n if (isFunction(tickLineState[key])) {\n tickLineState[key] = tickLineState[key](data.rawValue, index, data, this.data);\n }\n });\n line.states = tickLineState;\n }\n\n tickLineGroup.add(line);\n });\n this.tickLineItems = tickLineItems;\n\n // subTick 处理\n const { subTick } = this.attribute;\n if (subTick && subTick.visible) {\n const subTickLineItems: TickLineItem[] = this.getSubTickLineItems();\n if (subTickLineItems.length) {\n subTickLineItems.forEach((item: TickLineItem, index) => {\n const line = graphicCreator.line({\n ...this._getTickLineAttribute('subTick', item, index, tickLineItems)\n });\n line.name = AXIS_ELEMENT_NAME.subTick;\n line.id = this._getNodeId(`${index}`);\n\n if (isEmpty(subTick.state)) {\n line.states = DEFAULT_STATES;\n } else {\n const subTickLineState = merge({}, DEFAULT_STATES, subTick.state);\n Object.keys(subTickLineState).forEach(key => {\n if (isFunction(subTickLineState[key])) {\n subTickLineState[key] = subTickLineState[key](item.value, index, item, tickLineItems);\n }\n });\n line.states = subTickLineState;\n }\n\n tickLineGroup.add(line);\n });\n }\n\n this.subTickLineItems = subTickLineItems;\n }\n }\n\n protected renderLabels(container: IGroup, items: AxisItem[], layer: number) {\n const { dataFilter } = this.attribute.label;\n if (dataFilter && isFunction(dataFilter)) {\n items = dataFilter(items, layer) as TransformedAxisItem[];\n }\n const data = this._transformItems(items);\n\n const labelGroup = graphicCreator.group({ x: 0, y: 0, pickable: false });\n labelGroup.name = `${AXIS_ELEMENT_NAME.labelContainer}-layer-${layer}`;\n labelGroup.id = this._getNodeId(`label-container-layer-${layer}`);\n container.add(labelGroup);\n\n data.forEach((item: TransformedAxisItem, index: number) => {\n const labelStyle: any = this._getLabelAttribute(item, index, data, layer);\n let text;\n if (labelStyle.type === 'rich') {\n labelStyle.textConfig = labelStyle.text;\n labelStyle.width = labelStyle.width ?? 0;\n labelStyle.height = labelStyle.height ?? 0;\n text = graphicCreator.richtext(labelStyle);\n } else if (labelStyle.type === 'html') {\n labelStyle.textConfig = [] as any;\n labelStyle.html = {\n dom: labelStyle.text as string,\n ...DEFAULT_HTML_TEXT_SPEC,\n ...labelStyle\n };\n text = graphicCreator.richtext(labelStyle as any);\n } else {\n text = graphicCreator.text(labelStyle as any);\n }\n text.name = AXIS_ELEMENT_NAME.label;\n text.id = this._getNodeId(`layer${layer}-label-${item.id}`);\n if (isEmpty(this.attribute.label?.state)) {\n text.states = DEFAULT_STATES;\n } else {\n const labelState = merge({}, DEFAULT_STATES, this.attribute.label.state);\n Object.keys(labelState).forEach(key => {\n if (isFunction(labelState[key])) {\n labelState[key] = labelState[key](item, index, data, layer);\n }\n });\n text.states = labelState;\n }\n\n labelGroup.add(text);\n });\n\n return labelGroup;\n }\n\n protected renderTitle(container: IGroup) {\n const titleAttributes = this.getTitleAttribute();\n const axisTitle = new Tag({\n ...titleAttributes\n });\n axisTitle.name = AXIS_ELEMENT_NAME.title;\n axisTitle.id = this._getNodeId('title');\n container.add(axisTitle as unknown as INode);\n }\n\n protected getVerticalCoord(point: Point, offset: number, inside: boolean): Point {\n const vector = this.getVerticalVector(offset, inside, point);\n return {\n x: point.x + vector[0],\n y: point.y + vector[1]\n };\n }\n\n protected getTextAlign(vector: number[]): TextAlignType {\n let align: TextAlignType = 'center';\n\n if (isNumberClose(vector[0], 0)) {\n if (isNumberClose(vector[1], 0)) {\n if (Object.is(vector[1], -0)) {\n align = 'start';\n } else if (Object.is(vector[0], -0)) {\n align = 'end';\n }\n } else {\n align = 'center';\n }\n } else if (vector[0] > 0) {\n align = 'start';\n } else if (vector[0] < 0) {\n align = 'end';\n }\n return align;\n }\n\n protected getTickLineItems() {\n const { tick } = this.attribute;\n const data = this.data;\n // tick 处理\n const tickLineItems: TickLineItem[] = [];\n const { alignWithLabel, inside = false, length, dataFilter } = tick as TickAttributes;\n let tickSegment = 1;\n const count = data.length;\n if (count >= 2) {\n tickSegment = data[1].value - data[0].value;\n }\n\n (dataFilter && isFunction(dataFilter) ? dataFilter(data) : data).forEach((item: TransformedAxisItem) => {\n let point = item.point;\n let tickValue = item.value;\n if (!alignWithLabel) {\n const value = item.value - tickSegment / 2;\n if (this.isInValidValue(value)) {\n return;\n }\n point = this.getTickCoord(value);\n tickValue = value;\n }\n const endPoint = this.getVerticalCoord(point, length as number, inside);\n\n if (this.mode === '3d') {\n const vec = this.getVerticalVector(length as number, inside, point);\n let alpha = 0;\n let beta = 0;\n if (abs(vec[0]) > abs(vec[1])) {\n alpha = (pi / 2) * (endPoint.x > point.x ? 1 : -1);\n } else {\n beta = (pi / 2) * (endPoint.y > point.y ? -1 : 1);\n }\n tickLineItems.push({\n start: point,\n end: endPoint,\n value: tickValue,\n id: `tick-${item.id}`,\n anchor: [point.x, point.y],\n alpha,\n beta\n });\n } else {\n tickLineItems.push({\n start: point,\n end: endPoint,\n value: tickValue,\n id: `tick-${item.id}`\n });\n }\n });\n\n return tickLineItems;\n }\n\n protected getSubTickLineItems() {\n const { subTick } = this.attribute as AxisBaseAttributes;\n const subTickLineItems: TickLineItem[] = [];\n const { count: subCount = 4, inside = false, length = 2 } = subTick as SubTickAttributes;\n const tickLineItems = this.tickLineItems;\n const tickLineCount = tickLineItems.length;\n\n if (tickLineCount >= 2) {\n for (let i = 0; i < tickLineCount - 1; i++) {\n const pre = tickLineItems[i];\n const next = tickLineItems[i + 1];\n for (let j = 0; j < subCount; j++) {\n const percent = (j + 1) / (subCount + 1);\n const value = (1 - percent) * pre.value + percent * next.value;\n const point = this.getTickCoord(value);\n const endPoint = this.getVerticalCoord(point, length, inside);\n subTickLineItems.push({\n start: point,\n end: endPoint,\n value,\n id: `sub-tick-${value}`\n });\n }\n }\n }\n\n return subTickLineItems;\n }\n\n private _getTickLineAttribute(type: string, tickItem: TickLineItem, index: number, tickItems: TickLineItem[]) {\n let style = get(this.attribute, `${type}.style`);\n const data = this.data[index];\n style = isFunction(style)\n ? merge(\n {},\n get(DEFAULT_AXIS_THEME, `${type}.style`),\n type === 'tick'\n ? style(data.rawValue, index, data, this.data)\n : style(tickItem.value, index, tickItem, tickItems)\n )\n : style;\n\n const { start, end, anchor, alpha, beta } = tickItem;\n return {\n points: [start, end],\n anchor,\n alpha,\n beta,\n ...style\n };\n }\n\n private _getLabelAttribute(\n tickDatum: TransformedAxisItem,\n index: number,\n tickData: TransformedAxisItem[],\n layer: number\n ) {\n const { space = 4, inside = false, formatMethod, type = 'text', text } = this.attribute.label as LabelAttributes;\n let offset = space;\n let tickLength = 0;\n if (this.attribute.tick?.visible && this.attribute.tick.inside === inside) {\n tickLength = this.attribute.tick.length || 4;\n }\n if (this.attribute.subTick?.visible && this.attribute.subTick.inside === inside) {\n tickLength = Math.max(tickLength, this.attribute.subTick.length || 2);\n }\n offset += tickLength;\n\n // 先测试 line\n const axisVector = this.getRelativeVector(tickDatum.point);\n if (layer > 0) {\n if (axisVector[1] === 0) {\n offset += (this.axisLabelLayerSize[layer - 1].height + get(this.attribute, 'label.space', 4)) * layer;\n } else {\n offset += (this.axisLabelLayerSize[layer - 1].width + get(this.attribute, 'label.space', 4)) * layer;\n }\n }\n\n const point = this.getVerticalCoord(tickDatum.point, offset, inside);\n const vector = this.getVerticalVector(offset || 1, inside, point);\n const textContent = formatMethod\n ? formatMethod(`${tickDatum.label}`, tickDatum, index, tickData, layer)\n : tickDatum.label;\n let { style: textStyle } = this.attribute.label as LabelAttributes;\n textStyle = isFunction(textStyle)\n ? merge({}, DEFAULT_AXIS_THEME.label.style, textStyle(tickDatum, index, tickData, layer))\n : textStyle;\n\n const labelAlign = this.getLabelAlign(vector, inside, (textStyle as ITextGraphicAttribute).angle);\n textStyle = merge(labelAlign, textStyle) as Partial;\n // 兼容原先 style.text 回调的方式\n if (isFunction(textStyle.text)) {\n // @ts-ignore\n textStyle.text = textStyle.text({\n label: tickDatum.label,\n value: tickDatum.rawValue,\n index: tickDatum.index,\n layer\n });\n }\n\n return {\n ...this.getLabelPosition(point, vector, textContent, textStyle),\n text: text ?? textContent,\n lineHeight: textStyle?.fontSize,\n type,\n ...textStyle\n };\n }\n\n protected getLabelPosition(\n point: Point,\n vector: [number, number],\n text: string | number,\n style: Partial\n ) {\n return point;\n }\n\n private _transformItems(items: AxisItem[]) {\n const data: TransformedAxisItem[] = [];\n items.forEach((item: AxisItem) => {\n data.push({\n ...item,\n point: this.getTickCoord(item.value),\n id: item.id ?? item.label\n });\n });\n return data;\n }\n}\n","import type { IText } from '@visactor/vrender-core';\nimport { isRectIntersect, isRotateAABBIntersect } from '@visactor/vutils';\n\nfunction rotate(x: number, y: number, deg: number, originX: number, originY: number) {\n return {\n x: (x - originX) * Math.cos(deg) + (y - originY) * Math.sin(deg) + originX,\n y: (x - originX) * Math.sin(deg) + (originY - y) * Math.cos(deg) + originY\n };\n}\n\n// 计算水平情况下的包围盒\nfunction genNormalBounds(item: IText) {\n const bounds = item.AABBBounds;\n\n return {\n x1: bounds.x1,\n x2: bounds.x2,\n y1: bounds.y1,\n y2: bounds.y2,\n centerX: item.attribute.x,\n centerY: item.attribute.y,\n angle: item.attribute.angle\n };\n}\n\nexport function genRotateBounds(items: IText[]) {\n items.forEach(item => {\n if (item.rotatedBounds || !item.attribute.angle) {\n return;\n }\n // 计算水平情况下的包围盒\n const bounds = genNormalBounds(item);\n // 旋转\n const rotatedCenter = rotate(bounds.centerX, bounds.centerY, bounds.angle, item.attribute.x, item.attribute.y);\n const deltaX = rotatedCenter.x - bounds.centerX;\n const deltaY = rotatedCenter.y - bounds.centerY;\n bounds.x1 += deltaX;\n bounds.x2 += deltaX;\n bounds.y1 += deltaY;\n bounds.y2 += deltaY;\n bounds.centerX += deltaX;\n bounds.centerY += deltaY;\n item.rotatedBounds = bounds;\n });\n}\n\nexport function itemIntersect(item1: IText, item2: IText) {\n return (\n isRectIntersect(item1.AABBBounds, item2.AABBBounds, false) &&\n (item1.rotatedBounds && item2.rotatedBounds\n ? isRotateAABBIntersect(item1.rotatedBounds, item2.rotatedBounds, true)\n : true)\n );\n}\n","/**\n * @description 自动隐藏\n */\n\nimport type { IText } from '@visactor/vrender-core';\nimport type { IBounds } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEmpty, isFunction, isRectIntersect, isRotateAABBIntersect, last } from '@visactor/vutils';\nimport type { CustomMethod } from '../type';\nimport { genRotateBounds } from './util';\n\nfunction itemIntersect(item1: IText, item2: IText) {\n return (\n isRectIntersect(item1.AABBBounds, item2.AABBBounds, false) &&\n (item1.rotatedBounds && item2.rotatedBounds\n ? isRotateAABBIntersect(item1.rotatedBounds, item2.rotatedBounds, true)\n : true)\n );\n}\n\nconst methods = {\n parity: function (items: IText[]) {\n return items.filter((item, i) => (i % 2 ? item.setAttribute('opacity', 0) : 1));\n },\n greedy: function (items: IText[], sep: number) {\n let a: IText;\n return items.filter((b, i) => {\n if (!i || !intersect(a, b, sep)) {\n a = b;\n return 1;\n }\n return b.setAttribute('opacity', 0);\n });\n }\n};\n\nfunction intersect(textA: IText, textB: IText, sep: number) {\n const a = textA.AABBBounds;\n const b = textB.AABBBounds;\n return (\n sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2) &&\n (textA.rotatedBounds && textB.rotatedBounds\n ? sep >\n Math.max(\n textB.rotatedBounds.x1 - textA.rotatedBounds.x2,\n textA.rotatedBounds.x1 - textB.rotatedBounds.x2,\n textB.rotatedBounds.y1 - textA.rotatedBounds.y2,\n textA.rotatedBounds.y1 - textB.rotatedBounds.y2\n )\n : true)\n );\n}\n\nfunction hasOverlap(items: IText[], pad: number) {\n for (let i = 1, n = items.length, a = items[0], b; i < n; a = b, ++i) {\n if (intersect(a, (b = items[i]), pad)) {\n return true;\n }\n }\n}\n\nfunction hasBounds(item: IText) {\n const b = item.AABBBounds;\n return b.width() > 1 && b.height() > 1;\n}\n\n// reset all items to be fully opaque\nfunction reset(items: IText[]) {\n items.forEach(item => item.setAttribute('opacity', 1));\n return items;\n}\n\ntype HideConfig = {\n /**\n * 轴的方向\n */\n orient: string;\n /**\n * 防重叠策略。\n * - 'parity': 奇偶校验,使用删除所有其他标签的策略(这对于标准线性轴非常有效)。\n * - 'greedy': 将执行标签的线性扫描,并删除与最后一个可见标签重叠的所有标签。\n * - 也可以传入函数用于自定义策略\n */\n method?: 'parity' | 'greedy' | CustomMethod;\n /**\n * 设置文本之间的间隔距离,单位 px\n */\n separation?: number;\n /**\n * 保证最后的label展示\n */\n lastVisible?: boolean;\n};\n\nexport function autoHide(labels: IText[], config: HideConfig) {\n if (isEmpty(labels)) {\n return;\n }\n\n const source = labels.filter(hasBounds);\n if (isEmpty(source)) {\n return;\n }\n\n let items;\n\n items = reset(source);\n\n // 计算旋转包围盒\n genRotateBounds(items);\n\n const { method = 'parity', separation: sep = 0 } = config;\n\n const reduce = isFunction(method) ? method : methods[method] || methods.parity;\n\n if (items.length >= 3 && hasOverlap(items, sep)) {\n do {\n items = reduce(items, sep);\n } while (items.length >= 3 && hasOverlap(items, sep));\n /**\n * 0.17.10 之前,当最后label个数小于3 的时候,才做最后的label强制显示的策略\n */\n const checkLast = items.length < 3 || config.lastVisible;\n\n if (checkLast) {\n const lastSourceItem = last(source);\n\n if (!lastSourceItem.attribute.opacity) {\n const remainLength = items.length;\n if (remainLength > 1) {\n lastSourceItem.setAttribute('opacity', 1);\n\n for (let i = remainLength - 1; i >= 0; i--) {\n if (intersect(items[i], lastSourceItem, sep)) {\n items[i].setAttribute('opacity', 0);\n } else {\n // 当遇到第一个不相交的label的时候,就可以停止了\n break;\n }\n }\n }\n }\n }\n }\n\n source.forEach(item => {\n item.setAttribute('visible', !!item.attribute.opacity);\n });\n}\n","/**\n * @description 坐标轴标签自动旋转\n */\nimport type { IText, TextAlignType, TextBaselineType } from '@visactor/vrender-core';\nimport { degreeToRadian, isEmpty } from '@visactor/vutils';\nimport { genRotateBounds, itemIntersect } from './util';\n\ntype RotateConfig = {\n /**\n * 坐标轴的显示位置\n */\n orient: string;\n /**\n * 自动旋转的可选角度\n */\n labelRotateAngle?: number[];\n};\n\nexport function autoRotate(items: IText[], rotateConfig: RotateConfig) {\n if (isEmpty(items)) {\n return;\n }\n\n const { orient, labelRotateAngle = [0, 45, 90] } = rotateConfig;\n if (labelRotateAngle.length === 0 || items.some(item => !!item.attribute.angle)) {\n return;\n }\n\n let i = 0;\n let n = 0;\n if (labelRotateAngle && labelRotateAngle.length > 0) {\n n = labelRotateAngle.length;\n }\n\n while (i < n) {\n const angle = labelRotateAngle[i++];\n items.forEach(item => {\n // item.angle = angle;\n item.attribute.angle = degreeToRadian(angle);\n });\n tryRotate(orient, items);\n if (!hasIntersect(items)) {\n break;\n }\n }\n}\n\nfunction hasIntersect(items: IText[]): boolean {\n for (let i = 1; i < items.length; i++) {\n if (itemIntersect(items[i - 1], items[i])) {\n return true;\n }\n }\n return false;\n}\n\nfunction tryRotate(orient: string, items: IText[]) {\n // 针对 top bottom轴的自动旋转逻辑\n if (orient === 'bottom' || orient === 'top') {\n rotateXAxis(orient, items);\n }\n if (orient === 'left' || orient === 'right') {\n rotateYAxis(orient, items);\n }\n // 先旋转,再计算这个limit,避免算limit后发现不需要旋转,导致莫名的水平limit\n genRotateBounds(items);\n}\n\nfunction clampAngle(angle = 0) {\n if (angle < 0) {\n while (angle < 0) {\n angle += Math.PI * 2;\n }\n }\n if (angle > 0) {\n while (angle >= Math.PI * 2) {\n angle -= Math.PI * 2;\n }\n }\n\n return angle;\n}\n\nexport function rotateYAxis(orient: string, items: IText[]) {\n // 由于左右轴会裁切,所以上下两个label需要额外处理,做tighten处理\n items.forEach((item, i) => {\n item.attribute.angle &&\n item.setAttributes({\n ...getYAxisLabelAlign(orient, item.attribute.angle),\n angle: clampAngle(item.attribute.angle)\n });\n });\n}\n\nexport function rotateXAxis(orient: string, items: IText[]) {\n items.forEach(item => {\n item.attribute.angle &&\n item.setAttributes({\n ...getXAxisLabelAlign(orient, item.attribute.angle),\n angle: clampAngle(item.attribute.angle)\n });\n });\n}\n\nexport function getXAxisLabelAlign(orient: string, angle: number = 0) {\n // 0, 0-90, 90, 90-180, 180, 180-270, 270, 270-360, 360\n let align = ['center', 'left', 'left', 'left', 'center', 'right', 'right', 'right', 'left'];\n let baseline = ['top', 'top', 'middle', 'bottom', 'bottom', 'bottom', 'middle', 'top', 'top'];\n if (orient === 'top') {\n // 0, 0-90, 90, 90-180, 180, 180-270, 270, 270-360, 360\n align = ['center', 'right', 'right', 'right', 'center', 'left', 'left', 'left', 'right'];\n baseline = ['bottom', 'bottom', 'middle', 'top', 'top', 'top', 'middle', 'bottom', 'bottom'];\n }\n\n angle = clampAngle(angle);\n const step = angle / (Math.PI * 0.5);\n let index;\n if (step === Math.floor(step)) {\n index = Math.floor(step) * 2;\n } else {\n index = Math.floor(step) * 2 + 1;\n }\n\n return {\n textAlign: align[index] as TextAlignType,\n textBaseline: baseline[index] as TextBaselineType\n };\n}\n\nexport function getYAxisLabelAlign(orient: string, angle: number = 0) {\n // 0, 0-90, 90, 90-180, 180, 180-270, 270, 270-360, 360\n let align = ['right', 'right', 'center', 'left', 'center', 'left', 'center', 'right', 'right'];\n let baseline = ['middle', 'middle', 'top', 'top', 'middle', 'middle', 'bottom', 'bottom', 'middle'];\n\n if (orient === 'right') {\n // 0, 0-90, 90, 90-180, 180, 180-270, 270, 270-360, 360\n align = ['left', 'right', 'right', 'right', 'left', 'left', 'left', 'left', 'right'];\n baseline = ['middle', 'bottom', 'middle', 'top', 'top', 'top', 'middle', 'bottom', 'bottom'];\n }\n\n angle = clampAngle(angle);\n const step = angle / (Math.PI * 0.5);\n let index;\n if (step === Math.floor(step)) {\n index = Math.floor(step) * 2;\n } else {\n index = Math.floor(step) * 2 + 1;\n }\n\n return {\n textAlign: align[index] as TextAlignType,\n textBaseline: baseline[index] as TextBaselineType\n };\n}\n","import type { Point } from '../../core/type';\nimport { normalize, scale } from '../../util';\n\nexport interface LineAxisMixin {\n attribute: { start: Point; end: Point; verticalFactor?: number };\n}\n\nexport class LineAxisMixin {\n isInValidValue(value: number) {\n return value < 0 || value > 1;\n }\n\n getTickCoord(tickValue: number): Point {\n const { start } = this.attribute;\n const axisVector = this.getRelativeVector();\n return {\n x: start.x + axisVector[0] * tickValue,\n y: start.y + axisVector[1] * tickValue\n };\n }\n\n getRelativeVector(point?: Point): [number, number] {\n const { start, end } = this.attribute;\n return [end.x - start.x, end.y - start.y];\n }\n\n getVerticalVector(offset: number, inside = false, point: Point): [number, number] {\n const { verticalFactor = 1 } = this.attribute;\n const axisVector = this.getRelativeVector();\n const normalizedAxisVector = normalize(axisVector);\n const verticalVector: [number, number] = [normalizedAxisVector[1], normalizedAxisVector[0] * -1];\n return scale(verticalVector, offset * (inside ? 1 : -1) * verticalFactor);\n }\n}\n","import type { AABBBounds, OBBBounds } from '@visactor/vutils';\nimport { transformBounds } from '@visactor/vutils';\nimport type { ICircle, ICircleGraphicAttribute } from '../interface/graphic/circle';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { parsePadding } from '../common/utils';\nimport { getTheme } from './theme';\nimport { application } from '../application';\nimport { CIRCLE_NUMBER_TYPE } from './constants';\n\nconst CIRCLE_UPDATE_TAG_KEY = ['radius', 'startAngle', 'endAngle', ...GRAPHIC_UPDATE_TAG_KEY];\n\n/**\n * 圆形图元\n * 默认顺时针绘制\n */\nexport class Circle extends Graphic implements ICircle {\n type: 'circle' = 'circle';\n\n static NOWORK_ANIMATE_ATTR = NOWORK_ANIMATE_ATTR;\n\n constructor(params: ICircleGraphicAttribute = { radius: 1 }) {\n super(params);\n this.numberType = CIRCLE_NUMBER_TYPE;\n }\n\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n private _isValid(): boolean {\n const { startAngle, endAngle, radius } = this.attribute;\n return this._validNumber(startAngle) && this._validNumber(endAngle) && this._validNumber(radius);\n }\n\n protected doUpdateAABBBounds(full?: boolean): AABBBounds {\n const circleTheme = getTheme(this).circle;\n this._AABBBounds.setValue(Infinity, Infinity, -Infinity, -Infinity);\n const attribute = this.attribute;\n const bounds = application.graphicService.updateCircleAABBBounds(\n attribute,\n getTheme(this).circle,\n this._AABBBounds,\n full,\n this\n );\n\n const { boundsPadding = circleTheme.boundsPadding } = attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n (bounds as AABBBounds).expand(paddingArray);\n }\n\n this.clearUpdateBoundTag();\n return bounds as AABBBounds;\n }\n\n protected tryUpdateOBBBounds(): OBBBounds {\n throw new Error('暂不支持');\n }\n\n getDefaultAttribute(name: string) {\n const circleTheme = getTheme(this).circle;\n return circleTheme[name];\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, CIRCLE_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, CIRCLE_UPDATE_TAG_KEY);\n }\n\n toCustomPath() {\n const x = 0;\n const y = 0;\n\n const attribute = this.attribute;\n const radius = attribute.radius ?? this.getDefaultAttribute('radius');\n const startAngle = attribute.startAngle ?? this.getDefaultAttribute('startAngle');\n const endAngle = attribute.endAngle ?? this.getDefaultAttribute('endAngle');\n\n const path = new CustomPath2D();\n\n path.arc(x, y, radius, startAngle, endAngle);\n\n return path;\n }\n\n clone() {\n return new Circle({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record {\n return Circle.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createCircle(attributes: ICircleGraphicAttribute): ICircle {\n return new Circle(attributes);\n}\n\n// addAttributeToPrototype(DefaultCircleStyle, Circle, PURE_STYLE_KEY);\n","import type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n ICircle,\n ICircleGraphicAttribute,\n IThemeAttribute,\n ICircleRenderContribution,\n IDrawContext\n} from '../../../../interface';\nimport { getScaledStroke } from '../../../../common/canvas-utils';\nimport { defaultBaseBackgroundRenderContribution } from './base-contribution-render';\nimport { BaseRenderContributionTime } from '../../../../common/enums';\nimport { defaultBaseTextureRenderContribution } from './base-texture-contribution-render';\n\nexport class DefaultCircleRenderContribution implements ICircleRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n circle: ICircle,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n circleAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const { outerBorder, innerBorder } = circle.attribute;\n const doOuterBorder = outerBorder && outerBorder.visible !== false;\n const doInnerBorder = innerBorder && innerBorder.visible !== false;\n if (!(doOuterBorder || doInnerBorder)) {\n return;\n }\n const {\n radius = circleAttribute.radius,\n startAngle = circleAttribute.startAngle,\n endAngle = circleAttribute.endAngle,\n opacity = circleAttribute.opacity,\n x: originX = circleAttribute.x,\n y: originY = circleAttribute.y,\n scaleX = circleAttribute.scaleX,\n scaleY = circleAttribute.scaleY\n } = circle.attribute;\n\n const doStrokeOuter = !!(outerBorder && outerBorder.stroke);\n const doStrokeInner = !!(innerBorder && innerBorder.stroke);\n\n if (doOuterBorder) {\n const { distance = circleAttribute.outerBorder.distance } = outerBorder;\n const d = getScaledStroke(context, distance as number, context.dpr);\n const dw = d;\n context.beginPath();\n context.arc(x, y, radius + dw, startAngle, endAngle);\n context.closePath();\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(circle, circle.attribute, circleAttribute);\n\n if (strokeCb) {\n strokeCb(context, outerBorder, circleAttribute.outerBorder);\n } else if (doStrokeOuter) {\n // 存在stroke\n const lastOpacity = (circleAttribute.outerBorder as any).opacity;\n (circleAttribute.outerBorder as any).opacity = opacity;\n context.setStrokeStyle(\n circle,\n outerBorder,\n (originX - x) / scaleX,\n (originY - y) / scaleY,\n circleAttribute.outerBorder as any\n );\n (circleAttribute.outerBorder as any).opacity = lastOpacity;\n context.stroke();\n }\n }\n\n if (doInnerBorder) {\n const { distance = circleAttribute.innerBorder.distance } = innerBorder;\n const d = getScaledStroke(context, distance as number, context.dpr);\n const dw = d;\n\n context.beginPath();\n context.arc(x, y, radius - dw, startAngle, endAngle);\n context.closePath();\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(circle, circle.attribute, circleAttribute);\n\n if (strokeCb) {\n strokeCb(context, innerBorder, circleAttribute.innerBorder);\n } else if (doStrokeInner) {\n // 存在stroke\n const lastOpacity = (circleAttribute.innerBorder as any).opacity;\n (circleAttribute.innerBorder as any).opacity = opacity;\n context.setStrokeStyle(\n circle,\n innerBorder,\n (originX - x) / scaleX,\n (originY - y) / scaleY,\n circleAttribute.innerBorder as any\n );\n (circleAttribute.innerBorder as any).opacity = lastOpacity;\n context.stroke();\n }\n }\n }\n}\n\nexport const defaultCircleRenderContribution = new DefaultCircleRenderContribution();\nexport const defaultCircleTextureRenderContribution = defaultBaseTextureRenderContribution;\nexport const defaultCircleBackgroundRenderContribution = defaultBaseBackgroundRenderContribution;\n","import { inject, injectable, named } from '../../../common/inversify-lite';\nimport type {\n IGraphicAttribute,\n ICircle,\n IContext2d,\n IMarkAttribute,\n IThemeAttribute,\n ICircleRenderContribution,\n IDrawContext,\n IRenderService,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IContributionProvider\n} from '../../../interface';\nimport { getTheme } from '../../../graphic/theme';\nimport { CIRCLE_NUMBER_TYPE } from '../../../graphic/constants';\nimport { CircleRenderContribution } from './contributions/constants';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport { BaseRender } from './base-render';\nimport {\n defaultCircleBackgroundRenderContribution,\n defaultCircleRenderContribution,\n defaultCircleTextureRenderContribution\n} from './contributions';\n\n@injectable()\nexport class DefaultCanvasCircleRender extends BaseRender implements IGraphicRender {\n type: 'circle';\n numberType: number = CIRCLE_NUMBER_TYPE;\n\n constructor(\n @inject(ContributionProvider)\n @named(CircleRenderContribution)\n protected readonly circleRenderContribitions: IContributionProvider\n ) {\n super();\n this.builtinContributions = [\n defaultCircleRenderContribution,\n defaultCircleBackgroundRenderContribution,\n defaultCircleTextureRenderContribution\n ];\n this.init(circleRenderContribitions);\n }\n\n drawShape(\n circle: ICircle,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // const circleAttribute = graphicService.themeService.getCurrentTheme().circleAttribute;\n const circleAttribute = getTheme(circle, params?.theme).circle;\n const {\n radius = circleAttribute.radius,\n startAngle = circleAttribute.startAngle,\n endAngle = circleAttribute.endAngle,\n x: originX = circleAttribute.x,\n y: originY = circleAttribute.y\n } = circle.attribute;\n\n const data = this.valid(circle, circleAttribute, fillCb, strokeCb);\n if (!data) {\n return;\n }\n const { fVisible, sVisible, doFill, doStroke } = data;\n\n context.beginPath();\n context.arc(x, y, radius, startAngle, endAngle);\n context.closePath();\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(circle, circle.attribute, circleAttribute);\n\n this.beforeRenderStep(\n circle,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n circleAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n\n if (doFill) {\n if (fillCb) {\n fillCb(context, circle.attribute, circleAttribute);\n } else if (fVisible) {\n context.setCommonStyle(circle, circle.attribute, originX - x, originY - y, circleAttribute);\n context.fill();\n }\n }\n\n if (doStroke) {\n if (strokeCb) {\n strokeCb(context, circle.attribute, circleAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(circle, circle.attribute, originX - x, originY - y, circleAttribute);\n context.stroke();\n }\n }\n\n this.afterRenderStep(\n circle,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n circleAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n\n draw(circle: ICircle, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const circleAttribute = getTheme(circle, params?.theme).circle;\n this._draw(circle, circleAttribute, false, drawContext, params);\n }\n}\n","import { bindContributionProvider } from '../../../common/contribution-provider';\nimport { ContainerModule } from '../../../common/inversify';\nimport { DefaultCanvasCircleRender } from './circle-render';\nimport { DefaultBaseInteractiveRenderContribution } from './contributions';\nimport { CircleRenderContribution } from './contributions/constants';\nimport { CircleRender, GraphicRender } from './symbol';\n\nlet loadCircleModule = false;\nexport const circleModule = new ContainerModule(bind => {\n if (loadCircleModule) {\n return;\n }\n loadCircleModule = true;\n // circle 渲染器\n bind(DefaultCanvasCircleRender).toSelf().inSingletonScope();\n bind(CircleRender).to(DefaultCanvasCircleRender).inSingletonScope();\n bind(GraphicRender).toService(CircleRender);\n bind(CircleRenderContribution).toService(DefaultBaseInteractiveRenderContribution);\n\n // circle 渲染器注入contributions\n bindContributionProvider(bind, CircleRenderContribution);\n});\n","import type { IPoint } from '@visactor/vutils';\nimport {\n inject,\n injectable,\n getTheme,\n CircleRender,\n getScaledStroke,\n CIRCLE_NUMBER_TYPE\n} from '@visactor/vrender-core';\nimport type {\n IGraphicAttribute,\n ICircle,\n IContext2d,\n IMarkAttribute,\n IThemeAttribute,\n IGraphicPicker,\n IGraphicRender,\n IPickParams\n} from '@visactor/vrender-core';\n\n@injectable()\nexport class DefaultCanvasCirclePicker implements IGraphicPicker {\n type: string = 'circle';\n numberType: number = CIRCLE_NUMBER_TYPE;\n\n constructor(@inject(CircleRender) public readonly canvasRenderer: IGraphicRender) {}\n\n contains(circle: ICircle, point: IPoint, params?: IPickParams): boolean {\n if (!circle.AABBBounds.containsPoint(point)) {\n return false;\n }\n if (circle.attribute.pickMode === 'imprecise') {\n return true;\n }\n\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n // const circleAttribute = graphicService.themeService.getCurrentTheme().circleAttribute;\n const circleAttribute = getTheme(circle).circle;\n let { x = circleAttribute.x, y = circleAttribute.y } = circle.attribute;\n\n pickContext.highPerformanceSave();\n if (!circle.transMatrix.onlyTranslate()) {\n // 性能较差\n x = 0;\n y = 0;\n pickContext.transformFromMatrix(circle.transMatrix, true);\n } else {\n const point = circle.getOffsetXY(circleAttribute);\n x += point.x;\n y += point.y;\n // 当前context有rotate/scale,重置matrix\n pickContext.setTransformForCurrent();\n }\n\n // 详细形状判断\n let picked = false;\n this.canvasRenderer.drawShape(\n circle,\n pickContext,\n x,\n y,\n {} as any,\n null,\n (\n context: IContext2d,\n circleAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n picked = context.isPointInPath(point.x, point.y);\n return picked;\n },\n (\n context: IContext2d,\n circleAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n const lineWidth = circleAttribute.lineWidth || themeAttribute.lineWidth;\n const pickStrokeBuffer = circleAttribute.pickStrokeBuffer || themeAttribute.pickStrokeBuffer;\n pickContext.lineWidth = getScaledStroke(pickContext, lineWidth + pickStrokeBuffer, pickContext.dpr);\n picked = context.isPointInStroke(point.x, point.y);\n return picked;\n }\n );\n\n pickContext.highPerformanceRestore();\n return picked;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { CanvasCirclePicker, CanvasLinePicker, CanvasPickerContribution, CanvasTextPicker } from '../constants';\nimport { DefaultCanvasLinePicker } from './line-picker';\nimport { DefaultCanvasTextPicker } from './text-picker';\nimport { DefaultCanvasCirclePicker } from './circle-picker';\n\nlet loadCirclePick = false;\nexport const circleCanvasPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadCirclePick) {\n return;\n }\n loadCirclePick = true;\n // circle picker\n bind(CanvasCirclePicker).to(DefaultCanvasCirclePicker).inSingletonScope();\n bind(CanvasPickerContribution).toService(CanvasCirclePicker);\n});\n","import type { IPoint } from '@visactor/vutils';\nimport { inject, injectable, CircleRender, getTheme, CIRCLE_NUMBER_TYPE } from '@visactor/vrender-core';\nimport type {\n IGraphicAttribute,\n ICircle,\n IContext2d,\n IMarkAttribute,\n IThemeAttribute,\n IGraphicPicker,\n IGraphicRender,\n IPickParams\n} from '@visactor/vrender-core';\n\n@injectable()\nexport class DefaultMathCirclePicker implements IGraphicPicker {\n type: string = 'circle';\n numberType: number = CIRCLE_NUMBER_TYPE;\n\n constructor(@inject(CircleRender) public readonly canvasRenderer: IGraphicRender) {}\n\n contains(circle: ICircle, point: IPoint, params?: IPickParams): boolean {\n if (!circle.AABBBounds.containsPoint(point)) {\n return false;\n }\n if (circle.attribute.pickMode === 'imprecise') {\n return true;\n }\n\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n // const circleAttribute = graphicService.themeService.getCurrentTheme().circleAttribute;\n const circleAttribute = getTheme(circle).circle;\n let { x = circleAttribute.x, y = circleAttribute.y } = circle.attribute;\n\n pickContext.highPerformanceSave();\n if (!circle.transMatrix.onlyTranslate()) {\n // 性能较差\n x = 0;\n y = 0;\n pickContext.transformFromMatrix(circle.transMatrix, true);\n } else {\n const point = circle.getOffsetXY(circleAttribute);\n x += point.x;\n y += point.y;\n // 当前context有rotate/scale,重置matrix\n pickContext.setTransformForCurrent();\n }\n\n // 详细形状判断\n let picked = false;\n this.canvasRenderer.drawShape(\n circle,\n pickContext,\n x,\n y,\n {} as any,\n null,\n (\n context: IContext2d,\n circleAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n picked = context.isPointInPath(point.x, point.y);\n return picked;\n },\n (\n context: IContext2d,\n circleAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n const lineWidth = circleAttribute.lineWidth || themeAttribute.lineWidth;\n const pickStrokeBuffer = circleAttribute.pickStrokeBuffer || themeAttribute.pickStrokeBuffer;\n pickContext.lineWidth = lineWidth + pickStrokeBuffer;\n picked = context.isPointInStroke(point.x, point.y);\n return picked;\n }\n );\n\n pickContext.highPerformanceRestore();\n return picked;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { MathCirclePicker, MathPickerContribution } from '../constants';\nimport { DefaultMathCirclePicker } from './circle-picker';\n\nlet loadCirclePick = false;\nexport const circleMathPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadCirclePick) {\n return;\n }\n loadCirclePick = true;\n // circle picker\n bind(MathCirclePicker).to(DefaultMathCirclePicker).inSingletonScope();\n bind(MathPickerContribution).toService(MathCirclePicker);\n});\n","import { circleModule, container, registerCircleGraphic } from '@visactor/vrender-core';\nimport { browser } from './env';\nimport { circleCanvasPickModule } from '../picker/contributions/canvas-picker/circle-module';\nimport { circleMathPickModule } from '../picker/contributions/math-picker/circle-module';\n\nfunction _registerCircle() {\n if (_registerCircle.__loaded) {\n return;\n }\n _registerCircle.__loaded = true;\n registerCircleGraphic();\n container.load(circleModule);\n container.load(browser ? circleCanvasPickModule : circleMathPickModule);\n}\n\n_registerCircle.__loaded = false;\n\nexport const registerCircle = _registerCircle;\n","import {\n registerCircle,\n registerGroup,\n registerLine,\n registerPath,\n registerRect,\n registerRichtext,\n registerText\n} from '@visactor/vrender-kits';\n\nfunction loadBasicAxis() {\n registerGroup();\n registerLine();\n registerRichtext();\n registerText();\n}\n\nexport function loadLineAxisComponent() {\n loadBasicAxis();\n registerRect();\n}\n\nexport function loadCircleAxisComponent() {\n loadBasicAxis();\n registerCircle();\n}\n\nexport function loadLineAxisGridComponent() {\n registerGroup();\n registerPath();\n}\n\nexport function loadCircleAxisGridComponent() {\n registerGroup();\n registerPath();\n}\n","/**\n * @description 直线型坐标轴\n */\n// eslint-disable-next-line no-duplicate-imports\nimport {\n get,\n isNil,\n merge,\n isNumberClose,\n isEmpty,\n isFunction,\n isValidNumber,\n isValid,\n normalizePadding,\n mixin,\n last as peek\n} from '@visactor/vutils';\nimport { graphicCreator } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { TextAlignType, IGroup, INode, IText, TextBaselineType } from '@visactor/vrender-core';\nimport type { SegmentAttributes } from '../segment';\n// eslint-disable-next-line no-duplicate-imports\nimport { Segment } from '../segment';\nimport { angleTo } from '../util/matrix';\nimport type { TagAttributes } from '../tag';\nimport type { LineAttributes, LineAxisAttributes, TitleAttributes, AxisItem } from './type';\nimport { AxisBase } from './base';\nimport { DEFAULT_AXIS_THEME } from './config';\nimport { AXIS_ELEMENT_NAME, DEFAULT_STATES } from './constant';\nimport { measureTextSize } from '../util';\nimport { autoHide as autoHideFunc } from './overlap/auto-hide';\nimport { autoRotate as autoRotateFunc, getXAxisLabelAlign, getYAxisLabelAlign } from './overlap/auto-rotate';\nimport { autoLimit as autoLimitFunc } from './overlap/auto-limit';\nimport { alignAxisLabels } from '../util/align';\nimport { LineAxisMixin } from './mixin/line';\nimport type { ComponentOptions } from '../interface';\nimport { loadLineAxisComponent } from './register';\n\nloadLineAxisComponent();\nexport interface LineAxis\n extends Pick,\n AxisBase {}\n\nexport class LineAxis extends AxisBase {\n static defaultAttributes = DEFAULT_AXIS_THEME;\n\n constructor(attributes: LineAxisAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, LineAxis.defaultAttributes, attributes), options);\n }\n\n protected _renderInner(container: IGroup) {\n super._renderInner(container);\n const { panel } = this.attribute;\n\n // TODO: 目前是通过包围盒绘制,在一些情况下会有那问题,比如圆弧轴、带了箭头的坐标轴等\n // 坐标轴主体 panel\n if (panel && panel.visible) {\n const axisContainer = this.axisContainer;\n const axisContainerBounds = axisContainer.AABBBounds;\n const bgRect = graphicCreator.rect({\n x: axisContainerBounds.x1,\n y: axisContainerBounds.y1,\n width: axisContainerBounds.width(),\n height: axisContainerBounds.height(),\n ...panel.style\n });\n bgRect.name = AXIS_ELEMENT_NAME.background;\n bgRect.id = this._getNodeId('background');\n\n bgRect.states = merge({}, DEFAULT_STATES, panel.state ?? {});\n axisContainer.insertBefore(bgRect, axisContainer.firstChild);\n }\n }\n\n // TODO: break\n protected renderLine(container: IGroup): void {\n const { start, end, line } = this.attribute as LineAxisAttributes;\n const { startSymbol, endSymbol, style, breakRange, breakShape, breakShapeStyle, state, ...restLineAttrs } =\n line as LineAttributes;\n const lineAttrs = {\n points: [start, end],\n startSymbol,\n endSymbol,\n lineStyle: style,\n ...restLineAttrs\n } as SegmentAttributes;\n\n if (!isEmpty(state)) {\n lineAttrs.state = {\n line: merge({}, DEFAULT_STATES, state),\n symbol: merge({}, DEFAULT_STATES, state)\n };\n }\n\n const axisLineGroup = new Segment(lineAttrs);\n axisLineGroup.name = AXIS_ELEMENT_NAME.line;\n axisLineGroup.id = this._getNodeId('line');\n container.add(axisLineGroup as unknown as INode);\n }\n\n // TODO: 太 hack 了,需要静心优化\n protected getTitleAttribute() {\n const {\n position = 'middle',\n space = 4,\n textStyle = {},\n autoRotate = true,\n shape,\n background,\n state = {},\n ...restAttrs\n } = this.attribute.title as TitleAttributes;\n let percent = 0.5;\n if (position === 'start') {\n percent = 0;\n } else if (position === 'end') {\n percent = 1;\n }\n const { verticalFactor = 1 } = this.attribute;\n const factor = -1 * verticalFactor;\n const point = this.getTickCoord(percent);\n const axisVector = this.getRelativeVector();\n // HACK;\n let labelLength = 0;\n if (this.attribute.label?.visible && this.attribute.label.inside === false) {\n const space = +get(this.attribute, 'label.space', 4);\n labelLength += space;\n const layerCount = Object.keys(this.axisLabelLayerSize).length;\n if (axisVector[1] === 0) {\n const labelBoundsHeight = this.axisLabelsContainer ? this.axisLabelsContainer.AABBBounds.height() : 0;\n if (isFinite(labelBoundsHeight)) {\n labelLength += labelBoundsHeight + (layerCount - 1) * space;\n } else {\n labelLength = 0;\n }\n } else {\n if (axisVector[0] === 0) {\n const boundsWidth = this.axisLabelsContainer ? this.axisLabelsContainer.AABBBounds.width() : 0;\n if (isFinite(boundsWidth)) {\n labelLength += boundsWidth + (layerCount - 1) * space;\n } else {\n labelLength = 0;\n }\n } else {\n // 发生了旋转\n Object.keys(this.axisLabelLayerSize).forEach((layer, index) => {\n labelLength += this.axisLabelLayerSize[layer].width + (index > 0 ? space : 0);\n });\n }\n\n const textAlign = this.axisLabelLayerSize[0].textAlign;\n const isTextAlignStart = textAlign === 'start' || textAlign === 'left';\n const isTextCenter = textAlign === 'center';\n const isReverse = axisVector[1] > 0;\n if (factor === 1) {\n labelLength = isReverse\n ? isTextAlignStart\n ? labelLength\n : isTextCenter\n ? labelLength / 2\n : space\n : isTextAlignStart\n ? space\n : isTextCenter\n ? labelLength / 2\n : labelLength;\n } else {\n labelLength = isReverse\n ? isTextAlignStart\n ? space\n : isTextCenter\n ? labelLength / 2\n : labelLength\n : isTextAlignStart\n ? labelLength\n : isTextCenter\n ? labelLength / 2\n : space;\n }\n }\n }\n\n // 标题都默认朝外\n let tickLength = 0;\n if (this.attribute.tick?.visible && this.attribute.tick.inside === false) {\n tickLength = this.attribute.tick.length || 4;\n }\n if (this.attribute.subTick?.visible && this.attribute.subTick.inside === false) {\n tickLength = Math.max(tickLength, this.attribute.subTick.length || 2);\n }\n\n const offset = tickLength + labelLength + space;\n const titlePoint = this.getVerticalCoord(point, offset, false); // 标题的点\n const vector = this.getVerticalVector(offset, false, { x: 0, y: 0 });\n\n let { angle } = restAttrs; // 用户设置的是角度\n let textAlign;\n if (position === 'start') {\n textAlign = 'start';\n } else if (position === 'end') {\n textAlign = 'end';\n } else {\n textAlign = 'center';\n }\n let textBaseline;\n if (isNil(angle) && autoRotate) {\n const v1: [number, number] = [1, 0]; // 水平方向的向量\n const radian = angleTo(axisVector, v1, true);\n angle = radian;\n const { verticalFactor = 1 } = this.attribute;\n const factor = -1 * verticalFactor;\n if (factor === 1) {\n textBaseline = 'bottom';\n } else {\n textBaseline = 'top';\n }\n } else {\n // if (isValid(angle)) {\n // angle = degreeToRadian(angle);\n // }\n textAlign = this.getTextAlign(vector as number[]);\n textBaseline = this.getTextBaseline(vector as number[], false);\n }\n\n const attrs: TagAttributes = {\n ...titlePoint,\n ...restAttrs,\n textStyle: {\n // @ts-ignore\n textAlign,\n // @ts-ignore\n textBaseline,\n ...textStyle\n },\n state: {\n text: merge({}, DEFAULT_STATES, state.text),\n shape: merge({}, DEFAULT_STATES, state.shape),\n panel: merge({}, DEFAULT_STATES, state.background)\n }\n };\n attrs.angle = angle;\n\n if (shape && shape.visible) {\n attrs.shape = {\n visible: true,\n ...shape.style\n };\n if (shape.space) {\n attrs.space = shape.space;\n }\n }\n\n if (background && background.visible) {\n attrs.panel = {\n visible: true,\n ...background.style\n };\n }\n\n return attrs;\n }\n\n protected getTextBaseline(vector: number[], inside?: boolean): TextBaselineType {\n let base: TextBaselineType = 'middle';\n const { verticalFactor = 1 } = this.attribute;\n const factor = (inside ? 1 : -1) * verticalFactor;\n if (isNumberClose(vector[1], 0)) {\n if (isNumberClose(vector[0], 0) && !Object.is(vector[0], -0) && !Object.is(vector[1], -0)) {\n base = factor === 1 ? 'bottom' : 'top';\n } else {\n base = 'middle';\n }\n } else if (vector[1] > 0) {\n base = 'top';\n } else if (vector[1] < 0) {\n base = 'bottom';\n }\n return base;\n }\n\n protected getLabelAlign(\n vector: [number, number],\n inside?: boolean,\n angle?: number\n ): { textAlign: TextAlignType; textBaseline: TextBaselineType } {\n const orient = this.attribute.orient;\n if (isValidNumber(angle) || (vector[0] === 0 && vector[1] === 0)) {\n if (orient === 'top' || orient === 'bottom') {\n return getXAxisLabelAlign(orient, angle);\n }\n if (orient === 'left' || orient === 'right') {\n return getYAxisLabelAlign(orient, angle);\n }\n }\n\n return {\n textAlign: this.getTextAlign(vector),\n textBaseline: this.getTextBaseline(vector, inside)\n };\n }\n\n protected beforeLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n const { flush = false } = this.attribute.label || {};\n if (flush && labelShapes.length) {\n // 首尾标签向内偏移\n const { orient, start: axisStart, end: axisEnd } = this.attribute;\n const isX = orient === 'bottom' || orient === 'top';\n const first = labelShapes[0];\n const last = peek(labelShapes);\n const isInverse = isX ? first.attribute.x > last.attribute.x : first.attribute.y < last.attribute.y;\n if (isX) {\n const leftMostLabel = isInverse ? last : first;\n const rightMostLabel = isInverse ? first : last;\n const left = axisStart.x;\n const right = axisEnd.x;\n const leftBound = leftMostLabel.AABBBounds.x1;\n const rightBound = rightMostLabel.AABBBounds.x2;\n\n if (leftBound < left) {\n const angle = leftMostLabel.attribute.angle;\n\n if (angle) {\n leftMostLabel.setAttributes({ dx: (leftMostLabel.attribute.dx ?? 0) + left - leftBound });\n } else {\n leftMostLabel.setAttributes({\n x: left,\n textAlign: 'left'\n });\n }\n }\n\n if (rightBound > right) {\n const angle = rightMostLabel.attribute.angle;\n\n if (angle) {\n rightMostLabel.setAttributes({ dx: (rightMostLabel.attribute.dx ?? 0) + right - rightBound });\n } else {\n rightMostLabel.setAttributes({\n x: right,\n textAlign: 'right'\n });\n }\n }\n } else {\n const bottomMostLabel = isInverse ? last : first;\n const topMostLabel = isInverse ? first : last;\n const bottomBound = bottomMostLabel.AABBBounds.y2;\n const topBound = topMostLabel.AABBBounds.y1;\n const top = axisStart.y;\n const bottom = axisEnd.y;\n\n if (topBound < top) {\n const angle = topMostLabel.attribute.angle;\n\n if (angle) {\n // has rotate\n topMostLabel.setAttributes({\n dy: (topMostLabel.attribute.dy ?? 0) + top - topBound\n });\n } else {\n topMostLabel.setAttributes({\n y: top,\n textBaseline: 'top'\n });\n }\n }\n\n if (bottomBound > bottom) {\n const angle = bottomMostLabel.attribute.angle;\n\n if (angle) {\n bottomMostLabel.setAttributes({\n dy: (bottomMostLabel.attribute.dy ?? 0) + bottom - bottomBound\n });\n } else {\n bottomMostLabel.setAttributes({\n y: bottom,\n textBaseline: 'bottom'\n });\n }\n }\n }\n }\n\n return;\n }\n protected handleLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n if (isEmpty(labelShapes)) {\n return;\n }\n\n const { verticalLimitSize, label, orient } = this.attribute;\n const limitLength = this._getAxisLabelLimitLength(verticalLimitSize, layerCount);\n\n const {\n layoutFunc,\n autoRotate,\n autoRotateAngle,\n autoLimit,\n limitEllipsis,\n autoHide,\n autoHideMethod,\n autoHideSeparation,\n lastVisible\n } = label;\n\n if (isFunction(layoutFunc)) {\n // 自定义布局\n layoutFunc(labelShapes, labelData, layer, this);\n } else {\n // order: autoRotate -> autoLimit -> autoHide\n if (autoRotate) {\n autoRotateFunc(labelShapes, {\n labelRotateAngle: autoRotateAngle,\n orient\n });\n }\n if (autoLimit && isValidNumber(limitLength) && limitLength > 0) {\n const verticalLimitLength =\n (orient === 'left' || orient === 'right') &&\n labelShapes.some(label => label.attribute.direction === 'vertical')\n ? Math.abs(this.attribute.start.y - this.attribute.end.y) / labelShapes.length\n : Infinity;\n autoLimitFunc(labelShapes, {\n limitLength,\n verticalLimitLength,\n ellipsis: limitEllipsis,\n orient\n });\n }\n if (autoHide) {\n autoHideFunc(labelShapes, {\n orient,\n method: autoHideMethod,\n separation: autoHideSeparation,\n lastVisible\n });\n }\n }\n }\n\n protected afterLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ) {\n const { verticalLimitSize, orient } = this.attribute;\n\n // 处理 verticalMinSize,根据 verticalMinSize 调整 labelContainer 的大小\n const isHorizontal = orient === 'bottom' || orient === 'top';\n const axisLabelContainerBounds = labelContainer.AABBBounds;\n let axisLabelContainerSize = isHorizontal ? axisLabelContainerBounds.height() : axisLabelContainerBounds.width();\n const { verticalMinSize } = this.attribute;\n\n if (isValidNumber(verticalMinSize) && (!isValidNumber(verticalLimitSize) || verticalMinSize <= verticalLimitSize)) {\n const minSize = this._getAxisLabelLimitLength(verticalMinSize, layerCount);\n axisLabelContainerSize = Math.max(axisLabelContainerSize, minSize);\n\n let x;\n let y;\n if (orient === 'left') {\n x = axisLabelContainerBounds.x2 - axisLabelContainerSize;\n y = axisLabelContainerBounds.y1;\n } else if (orient === 'right') {\n x = axisLabelContainerBounds.x1;\n y = axisLabelContainerBounds.y1;\n } else if (orient === 'top') {\n x = axisLabelContainerBounds.x1;\n y = axisLabelContainerBounds.y2 - axisLabelContainerSize;\n } else if (orient === 'bottom') {\n x = axisLabelContainerBounds.x1;\n y = axisLabelContainerBounds.y1;\n }\n\n const bgRect = graphicCreator.rect({\n x,\n y,\n width: isHorizontal ? axisLabelContainerBounds.width() : axisLabelContainerSize,\n height: isHorizontal ? axisLabelContainerSize : axisLabelContainerBounds.height(),\n pickable: false\n });\n bgRect.name = AXIS_ELEMENT_NAME.axisLabelBackground;\n bgRect.id = this._getNodeId('axis-label-background');\n labelContainer.insertBefore(bgRect, labelContainer.firstChild);\n }\n\n // 处理 align,进行整体的对齐操作\n if (isValid(this.attribute.label.containerAlign)) {\n let start;\n if (orient === 'left') {\n start = axisLabelContainerBounds.x2;\n } else if (orient === 'right') {\n start = axisLabelContainerBounds.x1;\n } else if (orient === 'top') {\n start = axisLabelContainerBounds.y2;\n } else if (orient === 'bottom') {\n start = axisLabelContainerBounds.y1;\n }\n\n alignAxisLabels(labelShapes, start, axisLabelContainerSize, orient, this.attribute.label.containerAlign);\n }\n }\n\n private _getAxisLabelLimitLength(limitSize: number, layerCount: number): number {\n const { label, title, line, tick } = this.attribute;\n const labelSpace = label.space ?? 4;\n let limitLength = limitSize;\n let titleHeight = 0;\n let titleSpacing = 0;\n const axisLineWidth = line && line.visible ? line.style.lineWidth ?? 1 : 0;\n const tickLength = tick && tick.visible ? tick.length ?? 4 : 0;\n if (title && title.visible && typeof title.text === 'string') {\n titleHeight = measureTextSize(title.text, title.textStyle, this.stage?.getTheme().text.fontFamily).height;\n const padding = normalizePadding(title.padding);\n titleSpacing = title.space + padding[0] + padding[2];\n }\n if (limitLength) {\n limitLength = (limitLength - labelSpace - titleSpacing - titleHeight - axisLineWidth - tickLength) / layerCount;\n }\n return limitLength;\n }\n}\n\nmixin(LineAxis, LineAxisMixin);\n","/**\n * 自动省略\n */\nimport type { IText } from '@visactor/vrender-core';\nimport { isEmpty, isNil, isValidNumber } from '@visactor/vutils';\n\ntype LimitConfig = {\n orient: string;\n limitLength: number;\n verticalLimitLength?: number;\n ellipsis?: string;\n};\n\nexport function autoLimit(labels: IText[], config: LimitConfig) {\n const { limitLength, verticalLimitLength, ellipsis = '...', orient } = config;\n\n if (isEmpty(labels) || !isValidNumber(limitLength)) {\n return;\n }\n\n labels.forEach(label => {\n if ((orient === 'top' || orient === 'bottom') && Math.floor(label.AABBBounds.height()) <= limitLength) {\n return;\n }\n const direction = label.attribute.direction;\n if (\n (orient === 'left' || orient === 'right') &&\n ((direction === 'vertical' && Math.floor(label.AABBBounds.height()) <= verticalLimitLength) ||\n (direction !== 'vertical' && Math.floor(label.AABBBounds.width()) <= limitLength))\n ) {\n return;\n }\n\n const angle = label.attribute.angle;\n\n // 如果水平并且文本未发生旋转,则不配置 maxLineWidth\n let limitLabelLength =\n angle === 0 || isNil(angle)\n ? orient === 'top' || orient === 'bottom'\n ? null\n : direction === 'vertical'\n ? verticalLimitLength\n : limitLength\n : Math.abs(limitLength / Math.sin(angle));\n\n if (isValidNumber(label.attribute.maxLineWidth)) {\n limitLabelLength = isValidNumber(limitLabelLength)\n ? Math.min(label.attribute.maxLineWidth, limitLabelLength)\n : label.attribute.maxLineWidth;\n }\n label.setAttributes({\n maxLineWidth: limitLabelLength,\n ellipsis: label.attribute.ellipsis || ellipsis\n });\n });\n}\n","import type { IText } from '@visactor/vrender-core';\n\nexport function alignAxisLabels(labels: IText[], start: number, containerSize: number, orient: string, align: string) {\n if (orient === 'right' || orient === 'left') {\n if (align === 'left') {\n const flag = orient === 'right' ? 0 : -1;\n labels.forEach(label => {\n label.setAttributes({\n x: start + containerSize * flag,\n textAlign: 'left'\n });\n });\n } else if (align === 'right') {\n const flag = orient === 'right' ? 1 : 0;\n labels.forEach(label => {\n label.setAttributes({\n x: start + containerSize * flag,\n textAlign: 'right'\n });\n });\n } else if (align === 'center') {\n const flag = orient === 'right' ? 1 : -1;\n labels.forEach(label => {\n label.setAttributes({\n x: start + containerSize * 0.5 * flag,\n textAlign: 'center'\n });\n });\n }\n } else if (orient === 'bottom' || orient === 'top') {\n if (align === 'top') {\n const flag = orient === 'bottom' ? 0 : -1;\n labels.forEach(label => {\n label.setAttributes({\n y: start + containerSize * flag,\n textBaseline: 'top'\n });\n });\n } else if (align === 'bottom') {\n const flag = orient === 'bottom' ? 1 : 0;\n labels.forEach(label => {\n label.setAttributes({\n y: start + containerSize * flag,\n textBaseline: 'bottom'\n });\n });\n } else if (align === 'middle') {\n const flag = orient === 'bottom' ? 1 : -1;\n labels.forEach(label => {\n label.setAttributes({\n y: start + containerSize * 0.5 * flag,\n textBaseline: 'middle'\n });\n });\n }\n }\n}\n","import { polarToCartesian } from '@visactor/vutils';\nimport { POLAR_START_ANGLE, POLAR_END_ANGLE } from '../../constant';\nimport { scale, length } from '../../util';\nimport type { Point } from '../../core/type';\n\nexport interface CircleAxisMixin {\n attribute: {\n /**\n * 当配置了 innerRadius 时,可以通过设置 inside: true,将坐标轴战士在内圆半径上。\n * @default false\n */\n inside?: boolean;\n /**\n * 圆心坐标\n */\n center: Point;\n /**\n * **弧度值**,起始弧度,默认 -0.5 * Math.PI\n *\n */\n startAngle?: number;\n /**\n * **弧度值**,结束弧度,默认 1.5 * Math.PI\n */\n endAngle?: number;\n /**\n * 半径\n */\n radius: number;\n /** 内半径 */\n innerRadius?: number;\n };\n}\n\nexport class CircleAxisMixin {\n isInValidValue(value: number) {\n const { startAngle = POLAR_START_ANGLE, endAngle = POLAR_END_ANGLE } = this.attribute;\n if (Math.abs(endAngle - startAngle) % (Math.PI * 2) === 0) {\n return value > 1;\n }\n\n return value < 0 || value > 1;\n }\n\n getTickCoord(tickValue: number): Point {\n const {\n startAngle = POLAR_START_ANGLE,\n endAngle = POLAR_END_ANGLE,\n center,\n radius,\n inside = false,\n innerRadius = 0\n } = this.attribute;\n const angle = startAngle + (endAngle - startAngle) * tickValue;\n return polarToCartesian(center, inside && innerRadius > 0 ? innerRadius : radius, angle);\n }\n\n getVerticalVector(offset: number, inside = false, point: Point): [number, number] {\n const { inside: axisInside = false } = this.attribute;\n const { center } = this.attribute;\n const vector: [number, number] = [point.x - center.x, point.y - center.y];\n return scale(vector, ((inside ? -1 : 1) * (axisInside ? -1 : 1) * offset) / length(vector));\n }\n\n getRelativeVector(point?: Point): [number, number] {\n const { center } = this.attribute;\n return [point.y - center.y, -1 * (point.x - center.x)];\n }\n}\n","import { getTextBounds } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ITextGraphicAttribute } from '@visactor/vrender-core';\nimport { isGreater, isLess, tau, type Point } from '@visactor/vutils';\n\n// 和 vutils 版本不同\nexport const clampRadian = (angle: number = 0) => {\n if (angle < 0) {\n while (angle < 0) {\n angle += tau;\n }\n } else if (angle > 0) {\n while (angle > tau) {\n angle -= tau;\n }\n }\n return angle;\n};\n\n// 判断数值是否在制定范围内,包含误差\nexport function isInRange(a: number, min: number, max: number) {\n return !isLess(a, min, 0, 1e-6) && !isGreater(a, max, 0, 1e-6);\n}\n\nexport function getLabelPosition(\n tickPosition: Point,\n tickVector: [number, number],\n text: string | number,\n style: Partial\n) {\n const labelBounds = getTextBounds({\n text,\n ...style\n });\n const width = labelBounds.width();\n const height = labelBounds.height();\n const angle = clampRadian(Math.atan2(tickVector[1], tickVector[0])) - Math.PI;\n\n const PI_3_4 = (Math.PI * 3) / 4;\n const PI_1_4 = Math.PI / 4;\n const PI_1_2 = Math.PI / 2;\n\n // x\n const baseX = tickPosition.x;\n let dx = 0;\n if (isInRange(angle, -PI_3_4, -PI_1_4)) {\n dx = ((angle + PI_3_4) / PI_1_2 - 0.5) * width;\n } else if (isInRange(angle, PI_1_4, PI_3_4)) {\n dx = (0.5 - (angle - PI_1_4) / PI_1_2) * width;\n } else if (Math.cos(angle) >= 0) {\n dx = width * 0.5;\n } else {\n dx = -width * 0.5;\n }\n const x = baseX - dx;\n\n const baseY = tickPosition.y;\n let dy = 0;\n if (isInRange(angle, -PI_3_4, -PI_1_4)) {\n dy = -height * 0.5;\n } else if (isInRange(angle, PI_1_4, PI_3_4)) {\n dy = height * 0.5;\n } else if (Math.cos(angle) >= 0) {\n dy = (0.5 - (PI_1_4 - angle) / PI_1_2) * height;\n } else {\n dy = (0.5 - clampRadian(angle - PI_3_4) / PI_1_2) * height;\n }\n const y = baseY - dy;\n\n return { x, y };\n}\n","/**\n * @description 圆弧型坐标轴\n */\nimport type { IGroup, IText, ITextGraphicAttribute, TextAlignType, TextBaselineType } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { Point } from '@visactor/vutils';\nimport { isNil, get, merge, isNumberClose, isEmpty, mixin } from '@visactor/vutils';\nimport { POLAR_END_ANGLE, POLAR_START_ANGLE } from '../constant';\nimport type { CircleAxisAttributes, TitleAttributes, SubTickAttributes, TickLineItem, AxisItem } from './type';\nimport { AxisBase } from './base';\nimport { DEFAULT_AXIS_THEME } from './config';\nimport { AXIS_ELEMENT_NAME, DEFAULT_STATES } from './constant';\nimport { CircleAxisMixin } from './mixin/circle';\nimport { getLabelPosition } from './util';\nimport type { ComponentOptions } from '../interface';\nimport { loadCircleAxisComponent } from './register';\n\nloadCircleAxisComponent();\nexport interface CircleAxis\n extends Pick,\n AxisBase {}\n\nexport class CircleAxis extends AxisBase {\n static defaultAttributes = DEFAULT_AXIS_THEME;\n\n constructor(attributes: CircleAxisAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, CircleAxis.defaultAttributes, attributes));\n }\n\n protected renderLine(container: IGroup): void {\n const {\n startAngle = POLAR_START_ANGLE,\n endAngle = POLAR_END_ANGLE,\n radius,\n center,\n innerRadius = 0,\n line = {},\n inside = false\n } = this.attribute as CircleAxisAttributes;\n\n let arcRadius = radius;\n let arcInnerRadius = innerRadius;\n if (inside && innerRadius > 0) {\n arcRadius = innerRadius;\n arcInnerRadius = 0;\n }\n\n const arcAttrs = {\n ...center,\n startAngle,\n endAngle,\n radius: arcRadius,\n innerRadius: arcInnerRadius,\n ...line.style\n };\n const axisLine = graphicCreator.circle(arcAttrs);\n axisLine.name = AXIS_ELEMENT_NAME.line;\n axisLine.id = this._getNodeId('line');\n\n if (!isEmpty(line.state)) {\n axisLine.states = merge({}, DEFAULT_STATES, line.state);\n }\n container.add(axisLine);\n }\n\n protected getTitleAttribute() {\n const { center, radius, innerRadius = 0 } = this.attribute as CircleAxisAttributes;\n const {\n space = 4,\n textStyle = {},\n shape,\n background,\n state = {},\n ...restAttrs\n } = this.attribute.title as TitleAttributes;\n let titlePoint = center;\n let labelHeight = 0;\n if (this.attribute.label?.visible && this.attribute.label.inside === false) {\n // 这里取 label 的最大长度\n labelHeight = get(this.attribute.label, 'style.fontSize', 12) + get(this.attribute.label, 'space', 4);\n }\n let tickLength = 0;\n if (this.attribute.tick?.visible && this.attribute.tick.inside === false) {\n tickLength = this.attribute.tick.length || 4;\n }\n if (this.attribute.subTick?.visible && this.attribute.subTick.inside === false) {\n tickLength = Math.max(tickLength, this.attribute.subTick.length || 2);\n }\n const offset = radius + tickLength + labelHeight + space;\n let textBaseline: TextBaselineType = 'middle';\n let { position } = this.attribute.title as TitleAttributes;\n if (isNil(position)) {\n position = innerRadius === 0 ? 'end' : 'middle';\n }\n if (position === 'start') {\n textBaseline = 'bottom';\n titlePoint = {\n x: center.x,\n y: center.y - offset\n };\n } else if (position === 'end') {\n textBaseline = 'top';\n titlePoint = {\n x: center.x,\n y: center.y + offset\n };\n }\n const attrs: any = {\n ...titlePoint,\n ...restAttrs,\n textStyle: {\n textBaseline,\n textAlign: 'center',\n ...textStyle\n },\n state: {\n text: merge({}, DEFAULT_STATES, state.text),\n shape: merge({}, DEFAULT_STATES, state.shape),\n panel: merge({}, DEFAULT_STATES, state.background)\n }\n };\n\n const { angle } = restAttrs; // 用户设置的是角度\n attrs.angle = angle;\n\n if (shape && shape.visible) {\n attrs.shape = {\n visible: true,\n ...shape.style\n };\n if (shape.space) {\n attrs.space = shape.space;\n }\n }\n\n if (background && background.visible) {\n attrs.panel = {\n visible: true,\n ...background.style\n };\n }\n\n return attrs;\n }\n\n protected getSubTickLineItems() {\n const { subTick } = this.attribute as CircleAxisAttributes;\n const subTickLineItems: TickLineItem[] = [];\n const { count: subCount = 4, inside = false, length = 2 } = subTick as SubTickAttributes;\n const tickLineItems = this.tickLineItems;\n const tickLineCount = tickLineItems.length;\n // 刻度线的数量大于 2 时,才绘制子刻度\n if (tickLineCount >= 2) {\n const tickSegment = this.data[1].value - this.data[0].value;\n const isAlignWithLable = this.attribute?.tick?.alignWithLabel;\n for (let i = 0; i < tickLineCount; i++) {\n const pre = tickLineItems[i];\n const next = tickLineItems[i + 1];\n for (let j = 0; j < subCount; j++) {\n const percent = (j + 1) / (subCount + 1);\n const value =\n (1 - percent) * pre.value + percent * (next ? next.value : isAlignWithLable ? 1 : pre.value + tickSegment);\n const point = this.getTickCoord(value);\n const endPoint = this.getVerticalCoord(point, length, inside);\n subTickLineItems.push({\n start: point,\n end: endPoint,\n value\n });\n }\n }\n }\n\n return subTickLineItems;\n }\n\n protected getTextBaseline(vector: number[]): TextBaselineType {\n let base: TextBaselineType = 'middle';\n if (isNumberClose(vector[1], 0)) {\n base = 'middle';\n } else if (vector[1] > 0 && vector[1] > Math.abs(vector[0])) {\n base = 'top';\n } else if (vector[1] < 0 && Math.abs(vector[1]) > Math.abs(vector[0])) {\n base = 'bottom';\n }\n return base;\n }\n\n protected beforeLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n return;\n }\n protected handleLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n // 暂不支持\n return;\n }\n protected afterLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n return;\n }\n\n protected getLabelAlign(\n vector: [number, number],\n inside?: boolean,\n angle?: number\n ): { textAlign: TextAlignType; textBaseline: TextBaselineType } {\n return {\n textAlign: 'center', //'left',\n textBaseline: 'middle' //'top'\n };\n }\n\n protected getLabelPosition(\n point: Point,\n vector: [number, number],\n text: string | number,\n style: Partial\n ) {\n return getLabelPosition(point, vector, text, style);\n }\n}\n\nmixin(CircleAxis, CircleAxisMixin);\n","import { isString } from '@visactor/vutils';\nimport type { IScale, Nil } from '../types';\nimport type { IScaleComponent, ScaleComponentSpec } from '../types/component';\nimport { Component } from '../view/component';\n\nexport abstract class ScaleComponent extends Component implements IScaleComponent {\n protected declare spec: ScaleComponentSpec;\n\n protected parseAddition(spec: ScaleComponentSpec) {\n super.parseAddition(spec);\n this.scale(spec.scale);\n return this;\n }\n\n scale(scale?: IScale | string | Nil) {\n if (this.spec.scale) {\n const lastScaleGrammar = isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n this.detach(lastScaleGrammar);\n this.spec.scale = undefined;\n }\n const scaleGrammar = isString(scale) ? this.view.getScaleById(scale) : scale;\n this.spec.scale = scaleGrammar;\n this.attach(scaleGrammar);\n\n this._updateComponentEncoders();\n\n this.commit();\n return this;\n }\n\n getScale() {\n return isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n }\n}\n","import { isNil, isString, merge } from '@visactor/vutils';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport type { CircleAxisAttributes, LineAxisAttributes, ComponentOptions } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { CircleAxis as CircleAxisComponent, LineAxis as LineAxisComponent } from '@visactor/vrender-components';\nimport type { IBaseScale } from '@visactor/vscale';\nimport type {\n BaseSingleEncodeSpec,\n IElement,\n IGroupMark,\n IScale,\n ITheme,\n IView,\n MarkFunctionType,\n MarkRelativeItemSpec,\n Nil,\n RecursivePartial,\n SimpleSignalType,\n StateEncodeSpec\n} from '../types';\nimport { AxisEnum, ComponentEnum } from '../graph/enums';\nimport type { AxisSpec, AxisType, IAxis } from '../types/component';\nimport { ScaleComponent } from './scale';\nimport { invokeEncoder } from '../graph/mark/encode';\nimport { invokeFunctionType } from '../parse/util';\nimport type { IPolarCoordinate, IBaseCoordinate } from '@visactor/vgrammar-coordinate';\nimport { Factory } from '../core/factory';\n\nexport const generateLineAxisAttributes = (\n scale: IBaseScale,\n theme?: ITheme,\n addition?: RecursivePartial,\n tickCount?: number\n): LineAxisAttributes => {\n const axisTheme = theme?.components?.axis ?? {};\n if (!scale) {\n return merge({}, axisTheme, addition ?? {});\n }\n const tickData = scale.tickData?.(tickCount) ?? [];\n\n const items = [\n tickData.map(tick => ({\n id: tick.index,\n label: tick.tick,\n value: tick.value,\n rawValue: tick.tick\n }))\n ];\n return merge({}, axisTheme, { items }, addition ?? {});\n};\n\nexport const generateCircleAxisAttributes = (\n scale: IBaseScale,\n theme?: ITheme,\n addition?: RecursivePartial,\n tickCount?: number\n): CircleAxisAttributes => {\n const axisTheme = theme?.components?.circleAxis ?? {};\n if (!scale) {\n return merge({}, axisTheme, addition ?? {});\n }\n const tickData = scale.tickData?.(tickCount) ?? [];\n const items = [\n tickData.map(tick => ({\n id: tick.index,\n label: tick.tick,\n value: tick.value,\n rawValue: tick.tick\n }))\n ];\n return merge({}, axisTheme, { items }, addition ?? {});\n};\n\nexport const generateCoordinateAxisAttribute = (\n scale: IScale,\n coordinate: IBaseCoordinate,\n inside: boolean,\n baseValue: number,\n layout: MarkRelativeItemSpec,\n isGrid?: boolean\n) => {\n const axisPosition = scale.getCoordinateAxisPosition();\n if (layout && layout.position === 'auto') {\n // FIXME: too hack\n layout.position = inside ? 'content' : axisPosition;\n }\n\n const axisPoints = scale.getCoordinateAxisPoints(baseValue);\n\n if (axisPoints) {\n const start = axisPoints[0];\n const end = axisPoints[1];\n const res: any = {\n start,\n end,\n verticalFactor:\n (axisPosition === 'top' || axisPosition === 'left' ? -1 : 1) *\n (inside ? -1 : 1) *\n (scale.getSpec().range?.reversed ? -1 : 1)\n };\n\n if (isGrid && coordinate.type === 'polar') {\n const angle = (coordinate as IPolarCoordinate).angle();\n\n res.center = (coordinate as IPolarCoordinate).origin();\n res.startAngle = angle[0];\n res.endAngle = angle[1];\n }\n\n return res;\n }\n\n const radius = (coordinate as IPolarCoordinate).radius();\n const angle = (coordinate as IPolarCoordinate).angle();\n return {\n center: (coordinate as IPolarCoordinate).origin(),\n radius: radius[1],\n innerRadius: radius[0],\n inside: inside,\n startAngle: angle[0],\n endAngle: angle[1]\n };\n};\n\nexport class Axis extends ScaleComponent implements IAxis {\n static readonly componentType: string = ComponentEnum.axis;\n\n protected declare spec: AxisSpec;\n\n private _axisComponentType: keyof typeof AxisEnum;\n\n constructor(view: IView, group?: IGroupMark, mode?: '2d' | '3d') {\n super(view, ComponentEnum.axis, group);\n this.spec.componentType = ComponentEnum.axis;\n this.mode = mode;\n }\n\n protected parseAddition(spec: AxisSpec) {\n super.parseAddition(spec);\n\n this.axisType(spec.axisType);\n this.tickCount(spec.tickCount);\n this.inside(spec.inside);\n this.baseValue(spec.baseValue);\n\n return this;\n }\n\n scale(scale?: IScale | string | Nil) {\n super.scale(scale);\n this._axisComponentType = null;\n return this;\n }\n\n axisType(axisType: AxisType | Nil) {\n this.spec.axisType = axisType;\n this._axisComponentType = null;\n this._prepareRejoin();\n this.commit();\n return this;\n }\n\n addGraphicItem(attrs: any, groupKey?: string) {\n const defaultAttributes = { x: 0, y: 0, start: { x: 0, y: 0 }, end: { x: 0, y: 0 } };\n const initialAttributes = merge(defaultAttributes, attrs);\n const graphicItem = Factory.createGraphicComponent(this._getAxisComponentType(), initialAttributes, {\n mode: this.mode,\n skipDefault: this.spec.skipTheme\n });\n return super.addGraphicItem(initialAttributes, groupKey, graphicItem);\n }\n\n tickCount(tickCount: SimpleSignalType | Nil) {\n const scaleGrammar = isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n\n if (scaleGrammar) {\n scaleGrammar.tickCount(tickCount);\n }\n\n return this.setFunctionSpec(tickCount, 'tickCount');\n }\n\n inside(inside: MarkFunctionType | Nil) {\n return this.setFunctionSpec(inside, 'inside');\n }\n\n baseValue(baseValue: MarkFunctionType | Nil) {\n return this.setFunctionSpec(baseValue, 'baseValue');\n }\n\n getAxisComponentType() {\n return this._axisComponentType;\n }\n\n protected _updateComponentEncoders() {\n const scaleGrammar = isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n const encoders = Object.assign({ update: {} }, this.spec.encode);\n const componentEncoders: StateEncodeSpec = Object.keys(encoders).reduce((res, state) => {\n const encoder = encoders[state];\n if (encoder) {\n res[state] = {\n callback: (datum: any, element: IElement, parameters: any) => {\n const theme = this.spec.skipTheme ? null : this.view.getCurrentTheme();\n let addition = invokeEncoder(encoder as BaseSingleEncodeSpec, datum, element, parameters);\n const inside = invokeFunctionType(this.spec.inside, parameters, datum, element);\n const baseValue = invokeFunctionType(this.spec.baseValue, parameters, datum, element);\n\n const coordinate = scaleGrammar?.getCoordinate?.();\n if (coordinate) {\n addition = Object.assign(\n generateCoordinateAxisAttribute(\n scaleGrammar,\n coordinate,\n inside,\n baseValue,\n this.spec.layout as MarkRelativeItemSpec\n ),\n addition\n );\n }\n\n const scale = scaleGrammar?.getScale?.();\n const tickCount = invokeFunctionType(this.spec.tickCount, parameters, datum, element);\n\n switch (this._getAxisComponentType()) {\n case AxisEnum.lineAxis:\n return generateLineAxisAttributes(scale, theme, addition, tickCount);\n case AxisEnum.circleAxis:\n return generateCircleAxisAttributes(scale, theme, addition, tickCount);\n }\n return addition;\n }\n };\n }\n return res;\n }, {});\n this._encoders = componentEncoders;\n }\n\n private _getAxisComponentType() {\n if (this._axisComponentType) {\n return this._axisComponentType;\n }\n\n let type = this.spec.axisType;\n\n if (isNil(type)) {\n const scaleGrammar = isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n\n type = scaleGrammar?.getCoordinate?.() ? (scaleGrammar.getCoordinateAxisPoints() ? 'line' : 'circle') : 'line';\n }\n\n this._axisComponentType = type === 'circle' ? AxisEnum.circleAxis : AxisEnum.lineAxis;\n\n return this._axisComponentType;\n }\n}\n\nexport const registerAxis = () => {\n Factory.registerGraphicComponent(\n AxisEnum.lineAxis,\n (attrs: LineAxisAttributes, options?: ComponentOptions) =>\n new LineAxisComponent(attrs, options) as unknown as IGraphic\n );\n Factory.registerGraphicComponent(\n AxisEnum.circleAxis,\n (attrs: CircleAxisAttributes) => new CircleAxisComponent(attrs) as unknown as IGraphic\n );\n\n Factory.registerComponent(ComponentEnum.axis, Axis);\n};\n","/**\n * @description 网格线\n */\nimport { isFunction, isArray, merge, PointService, abs, pi } from '@visactor/vutils';\nimport type { IGroup, Path } from '@visactor/vrender-core';\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../../core/base';\nimport type { Point } from '../../core/type';\nimport type { GridItem, CircleGridAttributes, GridBaseAttributes, GridAttributes, LineGridAttributes } from './type';\nimport type { AxisItem, TransformedAxisItem } from '../type';\nimport { AXIS_ELEMENT_NAME } from '../constant';\n\nfunction getLinePath(points: Point[], closed: boolean) {\n let path = '';\n if (points.length === 0) {\n return path;\n }\n points.forEach((point, index) => {\n if (index === 0) {\n path = `M${point.x},${point.y}`;\n } else {\n path += `L${point.x},${point.y}`;\n }\n });\n if (closed) {\n path += 'Z';\n }\n\n return path;\n}\n\nfunction getArcPath(center: Point, points: Point[], reverse: boolean, closed: boolean) {\n let path = '';\n if (!center || points.length === 0) {\n return path;\n }\n const firstPoint = points[0];\n const radius = PointService.distancePP(center, firstPoint);\n const sweepFlag = reverse ? 0 : 1; // 顺时针还是逆时针\n if (closed) {\n // 封闭时,绘制整个圆\n path += `M${center.x},${center.y - radius}A${radius},${radius},0,0,${sweepFlag},${center.x},${\n center.y + radius\n }A${radius},${radius},0,0,${sweepFlag},${center.x},${center.y - radius}Z`;\n } else {\n points.forEach((point, index) => {\n if (index === 0) {\n path = `M${point.x},${point.y}`;\n } else {\n path += `A${radius},${radius},0,0,${sweepFlag},${point.x},${point.y}`;\n }\n });\n }\n\n return path;\n}\n\nfunction getRegionPath(from: Point[], to: Point[], attribute: GridAttributes) {\n const { type, closed } = attribute;\n const reversePoints = to.slice(0).reverse();\n\n let regionPath = '';\n let nextPath = '';\n\n if (type === 'line' && (attribute as LineGridAttributes).smoothLink && (attribute as LineGridAttributes).center) {\n const fromStart = from[0];\n const toEnd = reversePoints[0];\n const center = (attribute as LineGridAttributes).center as Point;\n\n regionPath = getLinePath(from, !!closed);\n nextPath = getLinePath(reversePoints, !!closed);\n const toEndRadius = PointService.distancePP(toEnd, center);\n const fromStartRadius = PointService.distancePP(fromStart, center);\n regionPath += `A${toEndRadius},${toEndRadius},0,0,1,${toEnd.x},${toEnd.y}L${toEnd.x},${toEnd.y}`;\n nextPath += `A${fromStartRadius},${fromStartRadius},0,0,0,${fromStart.x},${fromStart.y}`;\n } else if (type === 'circle') {\n const { center } = attribute as CircleGridAttributes;\n regionPath = getArcPath(center, from, false, !!closed);\n nextPath = getArcPath(center, reversePoints, true, !!closed);\n } else if (type === 'line' || type === 'polygon') {\n regionPath = getLinePath(from, !!closed);\n nextPath = getLinePath(reversePoints, !!closed);\n }\n\n if (closed) {\n regionPath += nextPath;\n } else {\n nextPath = 'L' + nextPath.substring(1); // 更新第一个节点\n regionPath += nextPath;\n regionPath += 'Z';\n }\n return regionPath;\n}\n\nexport abstract class BaseGrid extends AbstractComponent> {\n name = 'axis-grid';\n\n static defaultAttributes: Partial = {\n style: {\n lineWidth: 1,\n stroke: '#999',\n strokeOpacity: 1,\n lineDash: [4, 4]\n },\n subGrid: {\n visible: false,\n style: {\n lineWidth: 1,\n stroke: '#999',\n strokeOpacity: 1,\n lineDash: [4, 4]\n }\n }\n };\n\n protected _innerView: IGroup;\n getInnerView() {\n return this._innerView;\n }\n\n protected _prevInnerView: IGroup; // 缓存旧场景树,用于自定义动画\n /**\n * 获取更新前的旧场景树\n * @returns 返回更新前的旧场景树\n */\n getPrevInnerView() {\n return this._prevInnerView;\n }\n\n // 经过处理后的坐标轴点数据\n protected data: TransformedAxisItem[] = [];\n abstract getTickCoord(value: number): Point;\n abstract isInValidValue(value: number): boolean;\n abstract getVerticalVector(offset: number, inside: boolean, point: Point): [number, number];\n protected abstract getGridAttribute(isSubGrid: boolean): T;\n\n protected render(): void {\n this.removeAllChild();\n this._prevInnerView = this._innerView;\n this._innerView = graphicCreator.group({ x: 0, y: 0, pickable: false });\n this.add(this._innerView);\n\n const { items, visible } = this.attribute;\n if (items && items.length && visible !== false) {\n this.data = this._transformItems(items);\n this._renderGrid(this._innerView);\n }\n }\n\n protected getVerticalCoord(point: Point, offset: number, inside: boolean): Point {\n const vector = this.getVerticalVector(offset, inside, point);\n return {\n x: point.x + vector[0],\n y: point.y + vector[1]\n };\n }\n\n private _transformItems(items: AxisItem[]) {\n const data: TransformedAxisItem[] = [];\n items.forEach((item: AxisItem) => {\n data.push({\n ...item,\n point: this.getTickCoord(item.value),\n id: item.id ?? item.label\n });\n });\n return data;\n }\n private _renderGrid(container: any) {\n // 渲染 subGrid\n const { visible } = this.attribute.subGrid || {};\n if (visible) {\n this._renderGridByType(true, container);\n }\n\n // 渲染 Grid,Grid 需要在 subGrid 上层渲染\n this._renderGridByType(false, container);\n }\n\n private _renderGridByType(isSubGrid: boolean, container: IGroup) {\n const gridAttrs = merge({}, this.attribute, this.getGridAttribute(isSubGrid));\n\n const { type, items, style, closed, alternateColor, depth = 0 } = gridAttrs;\n const name = isSubGrid ? `${AXIS_ELEMENT_NAME.grid}-sub` : `${AXIS_ELEMENT_NAME.grid}`;\n\n // 绘制网格线\n items.forEach((item: GridItem, index: number) => {\n const { id, points } = item;\n let path = '';\n if (type === 'line' || type === 'polygon') {\n path = getLinePath(points, !!closed);\n } else if (type === 'circle') {\n const { center } = this.attribute as unknown as CircleGridAttributes;\n path = getArcPath(center, points, false, !!closed);\n }\n const shape = graphicCreator.path({\n path,\n z: depth,\n ...(isFunction(style)\n ? merge({}, this.skipDefault ? null : BaseGrid.defaultAttributes.style, style(item, index))\n : style)\n }) as Path;\n shape.name = `${name}-line`;\n shape.id = this._getNodeId(`${name}-path-${id}`);\n container.add(shape);\n });\n\n // 添加额外的3d线段\n if (depth && type === 'line') {\n items.forEach((item: GridItem, index: number) => {\n const { id, points } = item;\n // 重新计算points,使其长度为depth\n const nextPoints = [];\n nextPoints.push(points[0]);\n const dir = { x: points[1].x - points[0].x, y: points[1].y - points[0].y };\n const dirLen = Math.sqrt(dir.x * dir.x + dir.y * dir.y);\n const ratio = depth / dirLen;\n nextPoints.push({ x: points[0].x + dir.x * ratio, y: points[0].y + dir.y * ratio });\n const path = getLinePath(nextPoints, !!closed);\n const deltaX = abs(nextPoints[0].x - nextPoints[1].x);\n const deltaY = abs(nextPoints[0].y - nextPoints[1].y);\n const shape = graphicCreator.path({\n path,\n z: 0,\n alpha: deltaX > deltaY ? ((points[1].x - points[0].x > 0 ? -1 : 1) * pi) / 2 : 0,\n beta: deltaX < deltaY ? -pi / 2 : 0,\n anchor3d: deltaX > deltaY ? [nextPoints[0].x, 0] : [0, nextPoints[0].y],\n ...(isFunction(style)\n ? merge({}, this.skipDefault ? null : BaseGrid.defaultAttributes.style, style(item, index))\n : style)\n }) as Path;\n shape.name = `${name}-line`;\n shape.id = this._getNodeId(`${name}-path-${id}`);\n container.add(shape);\n });\n }\n\n // 绘制填充区域\n if (items.length > 1 && alternateColor) {\n const colors: string[] = isArray(alternateColor)\n ? (alternateColor as string[])\n : [alternateColor as string, 'transparent'];\n const getColor = (index: number) => colors[index % colors.length];\n\n // const regions: any[] = [];\n for (let index = 0; index < items.length - 1; index++) {\n const [prev, curr] = [items[index].points, items[index + 1].points];\n const path = getRegionPath(prev, curr, gridAttrs);\n const shape = graphicCreator.path({\n path,\n fill: getColor(index)\n }) as Path;\n shape.name = `${name}-region`;\n shape.id = this._getNodeId(`${name}-region-${index}`);\n container.add(shape);\n }\n }\n }\n\n /**\n * @override 覆写\n * @param id\n * @returns\n */\n protected _getNodeId(id: string) {\n return `${this.id}-${id}`;\n }\n}\n","/**\n * @description 直线型坐标轴的网格线\n * - `type: 'line'` 用于直角坐标系下的坐标轴网格线绘制\n * - `type: 'circle'` 或者 `type: 'polygon'` 用于极坐标半径轴的网格线绘制\n */\nimport type { IPointLike } from '@visactor/vutils';\nimport { PointService, merge, polarToCartesian, mixin } from '@visactor/vutils';\nimport { BaseGrid } from './base';\nimport type {\n GridItem,\n LineAxisGridAttributes,\n LineGridOfLineAxisAttributes,\n PolarGridOfLineAxisAttributes\n} from './type';\nimport type { Point } from '../../core/type';\nimport { POLAR_START_ANGLE, POLAR_END_ANGLE } from '../../constant';\nimport type { TransformedAxisItem } from '../type';\nimport { LineAxisMixin } from '../mixin/line';\nimport type { ComponentOptions } from '../../interface';\nimport { loadLineAxisGridComponent } from '../register';\n\nfunction getCirclePoints(center: Point, count: number, radius: number, startAngle: number, endAngle: number) {\n const points: Point[] = [];\n const range = endAngle - startAngle;\n for (let i = 0; i < count; i++) {\n const angle = startAngle + (i * range) / count;\n points.push(polarToCartesian(center, radius, angle));\n }\n return points;\n}\n\nexport interface LineAxisGrid\n extends Pick,\n BaseGrid {}\n\nloadLineAxisGridComponent();\nexport class LineAxisGrid extends BaseGrid {\n constructor(attributes: LineAxisGridAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, BaseGrid.defaultAttributes, attributes), options);\n }\n\n private _getGridPoint(gridType: string, point: IPointLike): Point[] {\n let gridPoints;\n if (gridType === 'line') {\n const { length } = this.attribute as LineGridOfLineAxisAttributes;\n const endPoint = this.getVerticalCoord(point, length as number, true);\n\n gridPoints = [point, endPoint];\n } else if (gridType === 'circle' || gridType === 'polygon') {\n const {\n center,\n sides = 6,\n startAngle = POLAR_START_ANGLE,\n endAngle = POLAR_END_ANGLE\n } = this.attribute as PolarGridOfLineAxisAttributes;\n const distance = PointService.distancePP(center as Point, point);\n gridPoints = getCirclePoints(center as Point, sides as number, distance, startAngle, endAngle);\n }\n\n return gridPoints;\n }\n\n protected getGridAttribute(isSubGrid: boolean) {\n const { type: gridType, alignWithLabel = true } = this.attribute;\n\n let tickSegment = 1;\n const count = this.data.length;\n if (count >= 2) {\n tickSegment = this.data[1].value - this.data[0].value;\n }\n let gridAttribute;\n let items: GridItem[] = [];\n if (!isSubGrid) {\n gridAttribute = this.attribute;\n // 计算 grid Items\n const gridItems: GridItem[] = [];\n this.data.forEach(item => {\n let { point } = item;\n\n if (!alignWithLabel) {\n // tickLine 不同 tick 对齐时需要调整 point\n const value = item.value - tickSegment / 2;\n if (this.isInValidValue(value)) {\n return;\n }\n point = this.getTickCoord(value);\n }\n\n gridItems.push({\n id: item.label,\n datum: item,\n points: this._getGridPoint(gridType, point)\n });\n });\n items = gridItems;\n } else {\n // 渲染 subGrid\n gridAttribute = merge({}, this.attribute, this.attribute.subGrid);\n // 计算 grid Items\n const subGridItems: GridItem[] = [];\n const { count: subCount = 4 } = this.attribute.subGrid || {};\n const tickLineCount = this.data.length;\n // 刻度线的数量大于 2 时,才绘制子刻度\n if (tickLineCount >= 2) {\n const points: { value: number }[] = [];\n this.data.forEach((item: TransformedAxisItem) => {\n let tickValue = item.value;\n if (!alignWithLabel) {\n // tickLine 不同 tick 对齐时需要调整 point\n const value = item.value - tickSegment / 2;\n if (this.isInValidValue(value)) {\n return;\n }\n tickValue = value;\n }\n points.push({\n value: tickValue\n });\n });\n\n for (let i = 0; i < points.length - 1; i++) {\n const pre = points[i];\n const next = points[i + 1];\n subGridItems.push({\n id: `sub-${i}-0`,\n points: this._getGridPoint(gridType, this.getTickCoord(pre.value)),\n // TODO: 其实这里也需要,后续需要考虑怎么挂上 data\n datum: {}\n });\n for (let j = 0; j < subCount; j++) {\n const percent = (j + 1) / (subCount + 1);\n const value = (1 - percent) * pre.value + percent * next.value;\n const point = this.getTickCoord(value);\n subGridItems.push({\n id: `sub-${i}-${j + 1}`,\n points: this._getGridPoint(gridType, point),\n // TODO: 其实这里也需要,后续需要考虑怎么挂上 data\n datum: {}\n });\n }\n if (i === points.length - 2) {\n subGridItems.push({\n id: `sub-${i}-${subCount + 1}`,\n points: this._getGridPoint(gridType, this.getTickCoord(next.value)),\n // TODO: 其实这里也需要,后续需要考虑怎么挂上 data\n datum: {}\n });\n }\n }\n items = subGridItems;\n }\n }\n\n return {\n ...gridAttribute,\n items\n };\n }\n}\n\nmixin(LineAxisGrid, LineAxisMixin);\n","/**\n * @description 圆弧型坐标轴的网格线\n */\n\nimport { merge, mixin } from '@visactor/vutils';\nimport { BaseGrid } from './base';\nimport type { CircleAxisGridAttributes, GridItem } from './type';\nimport { POLAR_END_ANGLE, POLAR_START_ANGLE } from '../../constant';\nimport type { TransformedAxisItem } from '../type';\nimport { CircleAxisMixin } from '../mixin/circle';\nimport type { ComponentOptions } from '../../interface';\nimport { loadCircleAxisGridComponent } from '../register';\n\nexport interface CircleAxisGrid\n extends Pick,\n BaseGrid {}\n\nloadCircleAxisGridComponent();\nexport class CircleAxisGrid extends BaseGrid {\n constructor(attributes: CircleAxisGridAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, BaseGrid.defaultAttributes, attributes), options);\n }\n\n protected getGridAttribute(isSubGrid: boolean) {\n let gridAttribute;\n let items: GridItem[] = [];\n const {\n radius,\n innerRadius = 0,\n startAngle = POLAR_START_ANGLE,\n endAngle = POLAR_END_ANGLE,\n center,\n subGrid,\n ...grid\n } = this.attribute;\n const { alignWithLabel = true } = grid || {};\n\n const length = radius - innerRadius;\n let tickSegment = 1;\n const count = this.data.length;\n if (count >= 2) {\n tickSegment = this.data[1].value - this.data[0].value;\n }\n if (!isSubGrid) {\n gridAttribute = grid as CircleAxisGridAttributes;\n // 计算 grid Items\n const gridItems: GridItem[] = [];\n let data;\n if (Math.abs(endAngle - startAngle) % (Math.PI * 2) === 0) {\n data = [...this.data].concat(this.data[0]);\n } else {\n data = this.data;\n }\n\n data.forEach(item => {\n let { point } = item;\n if (!alignWithLabel) {\n // tickLine 不同 tick 对齐时需要调整 point\n const value = item.value - tickSegment / 2;\n if (this.isInValidValue(value)) {\n return;\n }\n point = this.getTickCoord(value);\n }\n const endPoint = this.getVerticalCoord(point, length as number, true);\n gridItems.push({\n id: item.id,\n points: [point, endPoint],\n datum: item\n });\n });\n items = gridItems;\n } else {\n // 渲染 subGrid\n gridAttribute = merge({}, grid, subGrid);\n // 计算 grid Items\n const subGridItems: GridItem[] = [];\n const { count: subCount = 4 } = subGrid || {};\n const tickLineCount = this.data.length;\n // 刻度线的数量大于 2 时,才绘制子刻度\n if (tickLineCount >= 2) {\n const points: { value: number }[] = [];\n this.data.forEach((item: TransformedAxisItem) => {\n let tickValue = item.value;\n if (!alignWithLabel) {\n // tickLine 不同 tick 对齐时需要调整 point\n const value = item.value - tickSegment / 2;\n if (this.isInValidValue(value)) {\n return;\n }\n tickValue = value;\n }\n points.push({\n value: tickValue\n });\n });\n\n for (let i = 0; i < tickLineCount; i++) {\n const pre = points[i];\n const next = points[i + 1];\n subGridItems.push({\n id: `sub-${i}-${0}`,\n points: [this.getTickCoord(pre.value), this.getVerticalCoord(this.getTickCoord(pre.value), length, true)],\n datum: {}\n });\n for (let j = 0; j < subCount; j++) {\n const percent = (j + 1) / (subCount + 1);\n const value =\n (1 - percent) * pre.value + percent * (next ? next.value : alignWithLabel ? 1 : pre.value + tickSegment);\n const point = this.getTickCoord(value);\n const endPoint = this.getVerticalCoord(point, length, true);\n subGridItems.push({\n id: `sub-${i}-${j + 1}`,\n points: [point, endPoint],\n // TODO: 这里也需要,后续考虑如何加上\n datum: {}\n });\n }\n }\n\n if (Math.abs(endAngle - startAngle) % (Math.PI * 2) === 0) {\n subGridItems.push(subGridItems[0]);\n }\n\n items = subGridItems;\n }\n }\n return {\n ...gridAttribute,\n items,\n center,\n type: 'line'\n };\n }\n}\n\nmixin(CircleAxisGrid, CircleAxisMixin);\n","import { isString, merge } from '@visactor/vutils';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport type { CircleAxisGridAttributes, ComponentOptions, LineAxisGridAttributes } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { CircleAxisGrid, LineAxisGrid } from '@visactor/vrender-components';\nimport type { IBaseScale } from '@visactor/vscale';\nimport type {\n BaseSingleEncodeSpec,\n IElement,\n IGroupMark,\n IScale,\n ITheme,\n IView,\n MarkFunctionType,\n MarkRelativeItemSpec,\n Nil,\n RecursivePartial,\n SimpleSignalType,\n StateEncodeSpec\n} from '../types';\nimport { AxisEnum, ComponentEnum, GridEnum } from '../graph/enums';\nimport type { GridShape, GridSpec, AxisType, IAxis, IGrid } from '../types/component';\nimport { ScaleComponent } from './scale';\nimport { invokeEncoder } from '../graph/mark/encode';\nimport { invokeFunctionType } from '../parse/util';\nimport { generateCoordinateAxisAttribute } from './axis';\nimport { Factory } from '../core/factory';\n\nexport const generateLineAxisGridAttributes = (\n scale: IBaseScale,\n theme?: ITheme,\n addition?: RecursivePartial,\n tickCount?: number\n): LineAxisGridAttributes => {\n const gridTheme = theme?.components?.grid ?? {};\n if (!scale) {\n return merge({}, gridTheme, addition ?? {});\n }\n const tickData = scale.tickData?.(tickCount) ?? [];\n const items = tickData.map(tick => ({\n id: tick.index,\n label: tick.tick,\n value: tick.value,\n rawValue: tick.tick\n }));\n return merge({}, gridTheme, { items }, addition ?? {});\n};\n\nexport const generateCircleAxisGridAttributes = (\n scale: IBaseScale,\n theme?: ITheme,\n addition?: RecursivePartial,\n tickCount?: number\n): CircleAxisGridAttributes => {\n const gridTheme = theme?.components?.circleGrid ?? {};\n if (!scale) {\n return merge({}, gridTheme, addition ?? {});\n }\n const tickData = scale.tickData?.(tickCount) ?? [];\n const items = tickData.map(tick => ({\n id: tick.index,\n label: tick.tick,\n value: tick.value,\n rawValue: tick.tick\n }));\n return merge({}, gridTheme, { items }, addition ?? {});\n};\n\nexport class Grid extends ScaleComponent implements IGrid {\n static readonly componentType: string = ComponentEnum.grid;\n protected declare spec: GridSpec;\n\n protected mode?: '2d' | '3d';\n\n private _gridComponentType: keyof typeof GridEnum;\n private _targetAxis: IAxis;\n\n constructor(view: IView, group?: IGroupMark, mode?: '2d' | '3d') {\n super(view, ComponentEnum.grid, group);\n this.spec.componentType = ComponentEnum.grid;\n this.mode = mode;\n }\n\n protected parseAddition(spec: GridSpec) {\n super.parseAddition(spec);\n this.target(spec.target);\n this.gridType(spec.gridType);\n this.gridShape(spec.gridShape);\n return this;\n }\n\n scale(scale?: IScale | string | Nil) {\n super.scale(scale);\n this._gridComponentType = null;\n return this;\n }\n\n gridType(gridType: AxisType | Nil) {\n this.spec.gridType = gridType;\n this._gridComponentType = null;\n this._prepareRejoin();\n this.commit();\n return this;\n }\n\n gridShape(gridShape: GridShape | Nil) {\n this.spec.gridShape = gridShape;\n // no need to rejoin when gridShape is updated\n // this._gridComponentType = null;\n // this._prepareRejoin();\n this.commit();\n return this;\n }\n\n target(axis: IAxis | string | Nil) {\n if (this.spec.target) {\n const prevAxis = isString(this.spec.target)\n ? (this.view.getMarkById(this.spec.target) as IAxis)\n : this.spec.target;\n this.detach(prevAxis);\n }\n this.spec.target = axis;\n const nextAxis = isString(axis) ? (this.view.getMarkById(axis) as IAxis) : axis;\n this.attach(nextAxis);\n this._targetAxis = nextAxis;\n\n // clear grid type when target is updated\n this._gridComponentType = null;\n this._updateComponentEncoders();\n\n this.commit();\n return this;\n }\n\n tickCount(tickCount: SimpleSignalType | Nil) {\n const scaleGrammar = isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n\n if (scaleGrammar) {\n scaleGrammar.tickCount(tickCount);\n }\n\n return this.setFunctionSpec(tickCount, 'tickCount');\n }\n\n inside(inside: MarkFunctionType | Nil) {\n return this.setFunctionSpec(inside, 'inside');\n }\n\n baseValue(baseValue: MarkFunctionType | Nil) {\n return this.setFunctionSpec(baseValue, 'baseValue');\n }\n\n addGraphicItem(attrs: any, groupKey?: string) {\n const defaultAttributes = { x: 0, y: 0, start: { x: 0, y: 0 }, end: { x: 0, y: 0 } };\n const initialAttributes = merge(defaultAttributes, attrs);\n const graphicItem = Factory.createGraphicComponent(this._getGridComponentType(), initialAttributes, {\n mode: this.mode,\n skipDefault: this.spec.skipTheme\n });\n return super.addGraphicItem(initialAttributes, groupKey, graphicItem);\n }\n\n protected _updateComponentEncoders() {\n const encoders = Object.assign({ update: {} }, this.spec.encode);\n const componentEncoders: StateEncodeSpec = Object.keys(encoders).reduce((res, state) => {\n const encoder = encoders[state];\n if (encoder) {\n res[state] = {\n callback: (datum: any, element: IElement, parameters: any) => {\n const theme = this.spec.skipTheme ? null : this.view.getCurrentTheme();\n let addition = invokeEncoder(encoder as BaseSingleEncodeSpec, datum, element, parameters);\n let scaleGrammar: IScale;\n const baseValue = invokeFunctionType(this.spec.baseValue, parameters, datum, element);\n\n // get attributes from target axis\n if (this._targetAxis) {\n const targetScale = this._targetAxis.getSpec()?.scale as IScale | string | Nil;\n scaleGrammar = isString(targetScale) ? this.view.getScaleById(targetScale) : targetScale;\n\n const targetElement = this._targetAxis.elements[0];\n if (targetElement) {\n switch (this._getGridComponentType()) {\n case GridEnum.lineAxisGrid:\n addition = Object.assign(\n {\n x: targetElement.getGraphicAttribute('x'),\n y: targetElement.getGraphicAttribute('y'),\n start: targetElement.getGraphicAttribute('start'),\n end: targetElement.getGraphicAttribute('end'),\n verticalFactor: targetElement.getGraphicAttribute('verticalFactor') ?? 1\n },\n addition\n );\n break;\n case GridEnum.circleAxisGrid:\n addition = Object.assign(\n {\n x: targetElement.getGraphicAttribute('x'),\n y: targetElement.getGraphicAttribute('y'),\n center: targetElement.getGraphicAttribute('center'),\n radius: targetElement.getGraphicAttribute('radius'),\n innerRadius: targetElement.getGraphicAttribute('innerRadius'),\n inside: targetElement.getGraphicAttribute('inside'),\n startAngle: targetElement.getGraphicAttribute('startAngle'),\n endAngle: targetElement.getGraphicAttribute('endAngle')\n },\n addition\n );\n break;\n }\n }\n }\n // compute attribute by spec\n else {\n scaleGrammar = isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n const inside = invokeFunctionType(this.spec.inside, parameters, datum, element);\n\n const coordinate = scaleGrammar?.getCoordinate?.();\n if (coordinate) {\n addition = Object.assign(\n generateCoordinateAxisAttribute(\n scaleGrammar,\n coordinate,\n inside,\n baseValue,\n this.spec.layout as MarkRelativeItemSpec,\n true\n ),\n addition\n );\n }\n }\n\n // compute addition shape attributes for line grid\n if (this._getGridComponentType() === GridEnum.lineAxisGrid) {\n if (this.spec.gridShape === 'line' || !this.spec.gridShape) {\n // set axis type\n addition = Object.assign({}, addition, { type: 'line' });\n } else {\n // set addition length & axis type\n addition = Object.assign(\n {\n center: addition.start,\n closed: true\n },\n addition,\n { type: this.spec.gridShape }\n );\n }\n }\n\n const scale = scaleGrammar?.getScale?.();\n const tickCount = invokeFunctionType(this.spec.tickCount, parameters, datum, element);\n switch (this._getGridComponentType()) {\n case GridEnum.lineAxisGrid:\n return generateLineAxisGridAttributes(scale, theme, addition, tickCount);\n case GridEnum.circleAxisGrid:\n return generateCircleAxisGridAttributes(scale, theme, addition, tickCount);\n }\n return addition;\n }\n };\n }\n return res;\n }, {});\n this._encoders = componentEncoders;\n }\n\n private _getGridComponentType() {\n if (this._gridComponentType) {\n return this._gridComponentType;\n }\n\n if (this.spec.gridType) {\n switch (this.spec.gridType) {\n case 'circle':\n this._gridComponentType = GridEnum.circleAxisGrid;\n break;\n case 'line':\n default:\n this._gridComponentType = GridEnum.lineAxisGrid;\n }\n } else if (this._targetAxis) {\n const axisComponentType = this._targetAxis.getAxisComponentType();\n switch (axisComponentType) {\n case AxisEnum.circleAxis:\n this._gridComponentType = GridEnum.circleAxisGrid;\n break;\n case AxisEnum.lineAxis:\n default:\n this._gridComponentType = GridEnum.lineAxisGrid;\n }\n } else if (this.spec.scale) {\n const scaleGrammar = isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n this._gridComponentType = scaleGrammar?.getCoordinate?.()\n ? scaleGrammar.getCoordinateAxisPoints()\n ? GridEnum.lineAxisGrid\n : GridEnum.circleAxisGrid\n : GridEnum.lineAxisGrid;\n } else {\n this._gridComponentType = GridEnum.lineAxisGrid;\n }\n\n return this._gridComponentType;\n }\n}\n\nexport const registerGrid = () => {\n Factory.registerGraphicComponent(\n GridEnum.lineAxisGrid,\n (attrs: LineAxisGridAttributes, options?: ComponentOptions) =>\n new LineAxisGrid(attrs, options) as unknown as IGraphic\n );\n\n Factory.registerGraphicComponent(\n GridEnum.circleAxisGrid,\n (attrs: CircleAxisGridAttributes, options?: ComponentOptions) =>\n new CircleAxisGrid(attrs, options) as unknown as IGraphic\n );\n\n Factory.registerComponent(ComponentEnum.grid, Grid);\n};\n","import { Factory } from './../core/factory';\nimport type { IGroupMark } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarMarkType } from '@visactor/vgrammar-core';\nimport type { ICommonSpec } from '../typings';\nimport { BaseMark } from './base/base-mark';\nimport type { IMarkOption, IMarkRaw } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\n\nexport type IComponentMark = IMarkRaw;\n\nexport class ComponentMark extends BaseMark implements IComponentMark {\n static readonly type = MarkTypeEnum.component;\n type: string = 'component';\n\n private _componentType: string;\n private _mode: '2d' | '3d';\n\n constructor(name: string, option: IMarkOption) {\n super(name, option);\n // 这里需要将 type 指定为具体的组件名称,即调用 vgrammar 的 registerComponent API 注册的组件名称\n this._componentType = option.componentType;\n this._mode = option.mode;\n }\n /** 创建语法元素对象 */\n protected _initProduct(group?: string | IGroupMark) {\n const view = this.getVGrammarView();\n\n // 声明语法元素\n const id = this.getProductId();\n this._product = view\n .mark(GrammarMarkType.component, group ?? view.rootMark, { componentType: this._componentType, mode: this._mode })\n .id(id);\n this._compiledProductId = id;\n }\n}\n\nexport const registerComponentMark = () => {\n Factory.registerMark(ComponentMark.type, ComponentMark);\n};\n","/**\n * TODO: 待 vrender 修复后可删除\n */\nimport type { EasingType, IGroup } from '@visactor/vrender-core';\nimport { ACustomAnimate } from '@visactor/vrender-core';\n\nexport class GroupFadeIn extends ACustomAnimate {\n declare target: IGroup;\n\n constructor(from: any, to: any, duration: number, easing: EasingType) {\n super(null, null, duration, easing);\n }\n\n getEndProps(): Record {\n return {};\n }\n\n onBind(): void {\n this.target.setTheme({\n common: {\n opacity: 0\n }\n });\n return;\n }\n\n onEnd(): void {\n this.target.setTheme({\n common: {\n opacity: 1\n }\n });\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n this.target.setTheme({\n common: {\n opacity: ratio\n }\n });\n }\n}\n\nexport class GroupFadeOut extends ACustomAnimate {\n declare target: IGroup;\n\n constructor(from: any, to: any, duration: number, easing: EasingType) {\n super(null, null, duration, easing);\n }\n\n getEndProps(): Record {\n return {};\n }\n\n onBind(): void {\n this.target.setTheme({\n common: {\n opacity: 1\n }\n });\n return;\n }\n\n onEnd(): void {\n this.target.setTheme({\n common: {\n opacity: 0\n }\n });\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n this.target.setTheme({\n common: {\n opacity: 1 - ratio\n }\n });\n }\n}\n","import type { EasingType, IGraphic, IGroup } from '@visactor/vrender-core';\nimport { ACustomAnimate, AnimateMode } from '@visactor/vrender-core';\nimport type { Dict } from '@visactor/vutils';\nimport { cloneDeep, interpolateString, isEqual, isValidNumber } from '@visactor/vutils';\nimport { traverseGroup } from '../../util';\n\nfunction getElMap(g: IGroup) {\n const elMap: Dict = {};\n traverseGroup(g, (el: IGraphic) => {\n if ((el as IGraphic).type !== 'group' && el.id) {\n elMap[el.id] = el;\n }\n });\n return elMap;\n}\n\nexport class GroupTransition extends ACustomAnimate {\n declare target: IGroup;\n\n private _oldElementMap: Dict;\n private _newElementAttrMap: Dict;\n mode = AnimateMode.NORMAL; // 组件的群组动画不需要设置走 AnimateMode.SET_ATTR_IMMEDIATELY\n\n onBind(): void {\n // @ts-ignore\n const currentInnerView = this.target.getInnerView();\n // @ts-ignore\n const prevInnerView = this.target.getPrevInnerView();\n if (!prevInnerView) {\n return;\n }\n\n this._oldElementMap = getElMap(prevInnerView);\n this._newElementAttrMap = {};\n\n // 遍历新的场景树,将新节点属性更新为旧节点\n // TODO: 目前只处理更新场景\n traverseGroup(currentInnerView, (el: IGraphic) => {\n if ((el as IGraphic).type !== 'group' && el.id) {\n const oldEl = this._oldElementMap[el.id];\n if (oldEl) {\n if (!isEqual((el as IGraphic).attribute, (oldEl as IGraphic).attribute)) {\n // 更新\n const newProps = cloneDeep((el as IGraphic).attribute);\n this._newElementAttrMap[el.id] = {\n state: 'update',\n node: el,\n attrs: {\n ...newProps,\n opacity: newProps.opacity ?? 1,\n fillOpacity: newProps.fillOpacity ?? 1,\n strokeOpacity: newProps.strokeOpacity ?? 1\n }\n };\n\n (el as IGraphic).setAttributes((oldEl as IGraphic).attribute);\n }\n } else {\n // 新入场元素,进行 fadeIn 动画\n const finalOpacityAttrs = {\n opacity: el.attribute.opacity ?? 1,\n fillOpacity: el.attribute.fillOpacity ?? 1,\n strokeOpacity: el.attribute.strokeOpacity ?? 1\n };\n this._newElementAttrMap[el.id] = {\n state: 'enter',\n node: el,\n attrs: finalOpacityAttrs\n };\n (el as IGraphic).setAttributes({\n opacity: 0,\n fillOpacity: 0,\n strokeOpacity: 0\n });\n }\n }\n });\n }\n\n onStart(): void {\n let duration = this.duration;\n let easing = this.easing;\n\n // 新的场景树\n Object.keys(this._newElementAttrMap).forEach(id => {\n const { node, attrs, state } = this._newElementAttrMap[id];\n if (state === 'enter') {\n const { enter = {} } = this.params ?? {};\n duration = isValidNumber(enter.duration) ? enter.duration : duration;\n easing = enter.easing ? enter.easing : easing;\n }\n if ((node as IGraphic).type === 'path') {\n (node as IGraphic)\n .animate({\n interpolate(key: string, ratio: number, from: any, to: any, nextAttributes: any) {\n if (key === 'path') {\n nextAttributes.path = interpolateString(from, to)(ratio);\n return true;\n }\n\n return false;\n }\n })\n // .wait(delay)\n .to(attrs, duration, easing as EasingType);\n } else {\n (node as IGraphic)\n .animate()\n // .wait(delay)\n .to(attrs, duration, easing as EasingType);\n }\n });\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n // do nothing\n }\n}\n","import type { Parser } from '@visactor/vdataset';\nimport type { IBaseScale } from '@visactor/vscale';\n\n/**\n * dataView数据 解析器\n * @param data\n * @param options\n * @param dataView\n * @returns\n */\nexport const scaleParser: Parser = (scale: IBaseScale) => {\n return scale;\n};\n","import { ticks } from '@visactor/vutils-extension';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ITickDataOpt } from '@visactor/vutils-extension';\nimport type { IBaseScale } from '@visactor/vscale';\nimport type { IGroup, IGraphic } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { AxisItem } from '@visactor/vrender-components';\nimport type {\n IOrientType,\n IPolarOrientType,\n Datum,\n StringOrNumber,\n IGroup as ISeriesGroup,\n CoordinateType\n} from '../../typings';\nimport { BaseComponent } from '../base/base-component';\nimport type { IPolarAxisCommonTheme } from './polar/interface';\nimport type { ICartesianAxisCommonTheme } from './cartesian/interface';\nimport type { CompilableData } from '../../compile/data';\nimport type { IAxis, ICommonAxisSpec, ITick } from './interface';\nimport type { IComponentOption } from '../interface';\nimport { array, get, isArray, isBoolean, isFunction, isNil, isValid, maxInArray } from '@visactor/vutils';\nimport { eachSeries, getSeries } from '../../util/model';\nimport { mergeSpec } from '../../util/spec/merge-spec';\nimport type { ISeries } from '../../series/interface';\nimport { ChartEvent, LayoutZIndex } from '../../constant';\nimport { animationConfig } from '../../animation/utils';\n// eslint-disable-next-line no-duplicate-imports\nimport { degreeToRadian, pickWithout, type LooseFunction, isEqual } from '@visactor/vutils';\nimport { DEFAULT_TITLE_STYLE, transformAxisLineStyle } from './util';\nimport { transformAxisLabelStateStyle, transformStateStyle, transformToGraphic } from '../../util/style';\nimport { DataView, type ITransformOptions } from '@visactor/vdataset';\nimport {\n GridEnum,\n registerAxis as registerVGrammarAxis,\n registerGrid as registerVGrammarGrid\n} from '@visactor/vgrammar-core';\nimport { ComponentMark, registerComponentMark, type IComponentMark } from '../../mark/component';\nimport { Factory } from '../../core/factory';\n// eslint-disable-next-line no-duplicate-imports\nimport { GroupFadeIn, GroupTransition } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { GroupFadeOut } from '@visactor/vrender-core';\nimport { scaleParser } from '../../data/parser/scale';\nimport { registerDataSetInstanceParser, registerDataSetInstanceTransform } from '../../data/register';\n\nexport abstract class AxisComponent = any> // FIXME: 补充公共类型,去掉 Record\n extends BaseComponent\n implements IAxis\n{\n static specKey = 'axes';\n specKey = 'axes';\n\n protected _orient: IPolarOrientType | IOrientType;\n getOrient() {\n return this._orient;\n }\n\n protected _scale!: IBaseScale;\n getScale() {\n return this._scale;\n }\n\n protected _scales: IBaseScale[] = [];\n getScales() {\n return this._scales;\n }\n\n protected _tickData!: CompilableData;\n getTickData() {\n return this._tickData;\n }\n\n // 与系列的关联关系\n // 优先级:id > index\n // 最终结果:series & region取交集\n protected _seriesUserId?: StringOrNumber[];\n protected _seriesIndex?: number[];\n protected _regionUserId?: StringOrNumber[];\n protected _regionIndex?: number[];\n\n /**\n * if axis will be shown\n */\n protected _visible: boolean = true;\n get visible() {\n return this._visible;\n }\n\n /** 轴是否产生反转的真实值,在横向图表的竖轴上可能和用户在 spec 上配的值相反 */\n protected _inverse: boolean;\n getInverse() {\n return this._inverse;\n }\n\n protected _tick: ITick | undefined = undefined;\n protected abstract computeDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[];\n abstract valueToPosition(value: any): number;\n protected abstract axisHelper(): any;\n protected abstract getSeriesStatisticsField(s: ISeries): string[];\n protected abstract updateSeriesScale(): void;\n protected abstract collectData(depth: number, rawData?: boolean): { min: number; max: number; values: any[] }[];\n protected abstract _initData(): void;\n abstract transformScaleDomain(): void;\n\n protected _dataFieldText: string;\n protected _axisMark: IComponentMark;\n protected _gridMark: IComponentMark;\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this._visible = spec.visible ?? true;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [];\n }\n\n getVRenderComponents() {\n return array(this._axisMark?.getProduct()?.getGroupGraphicItem());\n }\n\n created() {\n super.created();\n //series and regions\n this.setSeriesAndRegionsFromSpec();\n // event\n this.initEvent();\n // scales\n this.initScales();\n this.updateSeriesScale();\n // data,当且仅当轴展示的时候处理\n this.getVisible() && this._initData();\n\n if (this._visible) {\n // 创建语法元素\n const axisMark = this._createMark(\n { type: 'component', name: `axis-${this.getOrient()}` },\n {\n componentType: this.getOrient() === 'angle' ? 'circleAxis' : 'axis',\n mode: this._spec.mode,\n noSeparateStyle: true,\n skipTheme: true // skip theme of vgrammar to avoid merge\n }\n );\n this._axisMark = axisMark;\n axisMark.setZIndex(this.layoutZIndex);\n if (isValid(this._spec.id)) {\n axisMark.setUserId(this._spec.id);\n }\n this._marks.addMark(axisMark);\n\n if (this._spec.grid?.visible) {\n const gridMark = this._createMark(\n { type: 'component', name: `axis-${this.getOrient()}-grid` },\n {\n componentType: this.getOrient() === 'angle' ? GridEnum.circleAxisGrid : GridEnum.lineAxisGrid,\n mode: this._spec.mode,\n noSeparateStyle: true,\n skipTheme: true\n }\n );\n gridMark.setZIndex(this._spec.grid?.style?.zIndex ?? this._spec.grid?.zIndex ?? LayoutZIndex.Axis_Grid);\n this._marks.addMark(gridMark);\n this._gridMark = gridMark;\n }\n\n // interactive\n if (isBoolean(this._spec.interactive)) {\n this._marks.forEach(m => m.setInteractive(this._spec.interactive));\n }\n\n // Tip: 支持 spec.animationAppear.axis,并且坐标轴默认关闭动画\n if (\n this._option.animation !== false &&\n get(this._option.getChart().getSpec(), 'animation') !== false &&\n this._spec.animation === true\n ) {\n const axisAnimateConfig = animationConfig(Factory.getAnimationInKey('axis')?.(), {\n appear:\n this._spec.animationAppear ??\n get(this._option.getChart().getSpec(), 'animationAppear.axis') ??\n get(this._option.getChart().getSpec(), 'animationAppear'),\n disappear:\n this._spec.animationDisappear ??\n get(this._option.getChart().getSpec(), 'animationDisappear.axis') ??\n get(this._option.getChart().getSpec(), 'animationDisappear'),\n enter:\n this._spec.animationEnter ??\n get(this._option.getChart().getSpec(), 'animationEnter.axis') ??\n get(this._option.getChart().getSpec(), 'animationEnter'),\n exit:\n this._spec.animationExit ??\n get(this._option.getChart().getSpec(), 'animationExit.axis') ??\n get(this._option.getChart().getSpec(), 'animationExit'),\n update:\n this._spec.animationUpdate ??\n get(this._option.getChart().getSpec(), 'animationUpdate.axis') ??\n get(this._option.getChart().getSpec(), 'animationUpdate')\n });\n // 因为坐标轴的更新动画中处理了 enter,所以需要将 enter 的参数传入\n if (axisAnimateConfig.enter) {\n axisAnimateConfig.update[0].customParameters = {\n enter: axisAnimateConfig.enter[0]\n };\n }\n this._marks.forEach(m => m.setAnimationConfig(axisAnimateConfig));\n }\n }\n }\n\n protected isSeriesDataEnable() {\n let enable = true;\n eachSeries(\n this._regions,\n s => {\n if (isArray(s.getViewDataStatistics()?.latestData)) {\n enable = false;\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n return enable;\n }\n\n protected setSeriesAndRegionsFromSpec() {\n const { seriesId, seriesIndex, regionId, regionIndex } = this._spec;\n isValid(seriesId) && (this._seriesUserId = array(seriesId));\n isValid(regionId) && (this._regionUserId = array(regionId));\n isValid(seriesIndex) && (this._seriesIndex = array(seriesIndex));\n isValid(regionIndex) && (this._regionIndex = array(regionIndex));\n this._regions = this._option.getRegionsInUserIdOrIndex(this._regionUserId as string[], this._regionIndex);\n // _regions 被更新了,layoutBindRegionID 也要更新\n this.layout.layoutBindRegionID = this._regions.map(x => x.id);\n }\n\n getBindSeriesFilter() {\n return {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n };\n }\n\n protected initEvent() {\n this.event.on(\n ChartEvent.scaleUpdate,\n { filter: ({ model }) => model?.id === this.id },\n this.effect.scaleUpdate.bind(this)\n );\n const viewStatistics = getSeries(this._regions, {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n })\n .map(s => s.getViewDataStatistics())\n .filter(v => !!v);\n\n if (viewStatistics.length > 1) {\n this._option.dataSet.multipleDataViewAddListener(viewStatistics, 'change', () => {\n this.updateScaleDomain();\n });\n } else if (viewStatistics.length === 1) {\n viewStatistics[0].target.addListener('change', () => {\n this.updateScaleDomain();\n });\n }\n\n eachSeries(\n this._regions,\n s => {\n s.event.on(ChartEvent.rawDataUpdate, { filter: ({ model }) => model?.id === s.id }, () => {\n // 只清除,不更新,在需要时,更新一次。避免多系列下多次更新\n this._clearRawDomain();\n });\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n\n protected updateScaleDomain() {\n // 留给各个类型的 axis 来 override\n }\n\n protected _clearRawDomain() {\n // 留给各个类型的 axis 来 override\n }\n\n protected computeData(updateType?: 'domain' | 'range' | 'force'): void {\n if (this._tickData && (updateType === 'force' || !isEqual(this._scale.range(), [0, 1]))) {\n this._tickData.getDataView().reRunAllTransform();\n this._tickData.updateData();\n }\n }\n\n protected initScales() {\n this._scales = [this._scale];\n const groups: ISeriesGroup[] = [];\n eachSeries(\n this._regions,\n s => {\n const g = s.getGroups();\n g && groups.push(g);\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n if (groups.length !== 0) {\n const depth = maxInArray(groups.map(g => g.fields.length));\n for (let i = 1; i < depth; i++) {\n const scale = this._scale.clone();\n this._scales.push(scale);\n }\n }\n // this.updateScaleDomain();\n }\n\n /** Update API **/\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n result.reRender = true;\n if (prevSpec?.type !== spec?.type) {\n result.reMake = true;\n return result;\n }\n return result;\n }\n\n protected getLabelFormatMethod() {\n return this._spec.label.formatMethod\n ? (value: any, datum: any, index: number) => this._spec.label.formatMethod(datum.rawValue, datum)\n : null;\n }\n\n protected getLabelItems(length: number) {\n return isArray(this._tickData.getLatestData())\n ? [\n this._tickData\n .getLatestData()\n .map((obj: Datum) => {\n return {\n id: obj.value,\n label: obj.value,\n value: length === 0 ? 0 : this.dataToPosition([obj.value]) / length,\n rawValue: obj.value\n };\n })\n .filter((entry: AxisItem) => entry.value >= 0 && entry.value <= 1)\n ]\n : [];\n }\n\n protected _delegateAxisContainerEvent(component: IGroup) {\n component.addEventListener('*', ((event: any, type: string) =>\n this._delegateEvent(component as unknown as IGraphic, event, type)) as LooseFunction);\n }\n\n protected _getAxisAttributes() {\n const spec = this._spec;\n let titleAngle = spec.title.angle;\n let titleTextStyle;\n if (spec.orient === 'left' || spec.orient === 'right') {\n // 处理纵轴的标题样式\n if (spec.title?.autoRotate && isNil(spec.title.angle)) {\n titleAngle = spec.orient === 'left' ? -90 : 90;\n titleTextStyle = DEFAULT_TITLE_STYLE[spec.orient];\n }\n }\n\n const labelSpec = pickWithout(spec.label, ['style', 'formatMethod', 'state']);\n const backgroundSpec = spec.background ?? {};\n const titleBackgroundSpec = spec.title.background ?? {};\n return {\n orient: this.getOrient(),\n select: this._option.disableTriggerEvent === true ? false : spec.select,\n hover: this._option.disableTriggerEvent === true ? false : spec.hover,\n line: transformAxisLineStyle(spec.domainLine),\n label: {\n style: isFunction(spec.label.style)\n ? (datum: Datum, index: number, data: Datum[], layer?: number) => {\n const style = spec.label.style(datum.rawValue, index, datum, data, layer);\n return transformToGraphic(mergeSpec({}, this._theme.label?.style, style));\n }\n : transformToGraphic(spec.label.style),\n formatMethod: spec.label.formatMethod\n ? (value: any, datum: any, index: number) => {\n return spec.label.formatMethod(datum.rawValue, datum);\n }\n : null,\n state: transformAxisLabelStateStyle(spec.label.state),\n ...labelSpec\n },\n tick:\n spec.tick.visible === false\n ? { visible: false }\n : {\n visible: spec.tick.visible,\n length: spec.tick.tickSize,\n inside: spec.tick.inside,\n alignWithLabel: spec.tick.alignWithLabel,\n style: isFunction(spec.tick.style)\n ? (value: number, index: number, datum: Datum, data: Datum[]) => {\n const style = (spec.tick.style as any)(value, index, datum, data);\n return transformToGraphic(mergeSpec({}, this._theme.tick?.style, style));\n }\n : transformToGraphic(spec.tick.style),\n state: transformStateStyle(spec.tick.state),\n dataFilter: spec.tick.dataFilter\n },\n subTick:\n spec.subTick.visible === false\n ? { visible: false }\n : {\n visible: spec.subTick.visible,\n length: spec.subTick.tickSize,\n inside: spec.subTick.inside,\n count: spec.subTick.tickCount,\n style: isFunction(spec.subTick.style)\n ? (value: number, index: number, datum: Datum, data: Datum[]) => {\n const style = (spec.subTick.style as any)(value, index, datum, data);\n return transformToGraphic(mergeSpec({}, this._theme.subTick?.style, style));\n }\n : transformToGraphic(spec.subTick.style),\n state: transformStateStyle(spec.subTick.state)\n },\n title:\n spec.title.visible === false\n ? { visible: false }\n : {\n visible: spec.title.visible,\n position: spec.title.position,\n space: spec.title.space,\n autoRotate: false, // 默认不对外提供该配置\n angle: titleAngle ? degreeToRadian(titleAngle) : null,\n textStyle: mergeSpec({}, titleTextStyle, transformToGraphic(spec.title.style)),\n padding: spec.title.padding,\n shape:\n spec.title.shape?.visible === false\n ? { visible: false }\n : {\n visible: spec.title.shape?.visible,\n space: spec.title.shape?.space,\n style: transformToGraphic(spec.title.shape?.style)\n },\n background:\n titleBackgroundSpec.visible === false\n ? { visible: false }\n : {\n visible: titleBackgroundSpec.visible,\n style: transformToGraphic(titleBackgroundSpec.style)\n },\n state: {\n text: transformStateStyle(spec.title.state),\n shape: transformStateStyle(spec.title.shape?.state),\n background: transformStateStyle(spec.title.background?.state)\n },\n pickable: spec.title.style?.pickable !== false,\n childrenPickable: spec.title.style?.pickable !== false,\n ...spec.title\n },\n panel:\n backgroundSpec.visible === false\n ? { visible: false }\n : {\n visible: backgroundSpec.visible,\n style: transformToGraphic(backgroundSpec.style),\n state: transformStateStyle(backgroundSpec.state)\n }\n };\n }\n\n protected _getGridAttributes() {\n const spec = this._spec;\n return {\n alternateColor: spec.grid.alternateColor,\n alignWithLabel: spec.grid.alignWithLabel,\n style: isFunction(spec.grid.style)\n ? () => {\n return (datum: Datum, index: number) => {\n const style = spec.grid.style(datum.datum?.rawValue, index, datum.datum);\n return transformToGraphic(mergeSpec({}, this._theme.grid?.style, style));\n };\n }\n : transformToGraphic(spec.grid.style),\n subGrid:\n spec.subGrid.visible === false\n ? { visible: false }\n : {\n type: 'line',\n visible: spec.subGrid.visible,\n alternateColor: spec.subGrid.alternateColor,\n style: transformToGraphic(spec.subGrid.style)\n }\n };\n }\n\n protected _initTickDataSet(options: T) {\n registerDataSetInstanceParser(this._option.dataSet, 'scale', scaleParser);\n registerDataSetInstanceTransform(this._option.dataSet, 'ticks', ticks);\n const tickData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_ticks` })\n .parse(this._scale, {\n type: 'scale'\n })\n .transform(\n {\n type: 'ticks',\n options\n },\n false\n );\n return tickData;\n }\n\n protected _tickTransformOption(coordinateType: CoordinateType): ITickDataOpt {\n const tick = this._tick || {};\n const label = this._spec.label || {};\n const { tickCount, forceTickCount, tickStep, tickMode } = tick;\n const { style: labelStyle, formatMethod: labelFormatter, minGap: labelGap } = label;\n return {\n sampling: this._spec.sampling !== false,\n tickCount,\n forceTickCount,\n tickStep,\n tickMode,\n\n axisOrientType: this._orient,\n coordinateType: coordinateType,\n\n labelStyle,\n labelFormatter,\n labelGap\n };\n }\n\n addTransformToTickData(options: ITransformOptions, execute?: boolean) {\n this._tickData?.getDataView()?.transform(options, execute);\n }\n\n dataToPosition(values: any[]): number {\n return this._scale.scale(values);\n }\n}\n\nexport const registerAxis = () => {\n registerVGrammarAxis();\n registerVGrammarGrid();\n registerComponentMark();\n Factory.registerAnimation('axis', () => ({\n appear: {\n custom: GroupFadeIn\n },\n update: {\n custom: GroupTransition\n },\n exit: {\n custom: GroupFadeOut\n }\n }));\n};\n","import type { ICartesianHorizontal } from './interface/spec';\nimport type { IBounds, IBoundsLike, Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IEffect, IModelInitOption, IModelSpecInfo } from '../../../model/interface';\nimport type { ICartesianSeries } from '../../../series/interface';\nimport type { IRegion } from '../../../region/interface';\nimport type { ICartesianAxisCommonSpec, IAxisHelper, ICartesianVertical } from './interface';\nimport {\n isArray,\n isValid,\n isValidNumber,\n mergeSpec,\n eachSeries,\n isNil,\n isUndefined,\n calcLayoutNumber\n} from '../../../util';\nimport type { IOrientType, IRect } from '../../../typings/space';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../../typings/space';\nimport type { IBaseScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous } from '@visactor/vscale';\nimport { Factory } from '../../../core/factory';\nimport { isXAxis, getOrient, isZAxis, isYAxis, getCartesianAxisInfo, transformInverse } from './util/common';\nimport { ChartEvent, DEFAULT_LAYOUT_RECT_LEVEL, LayoutZIndex, USER_LAYOUT_RECT_LEVEL } from '../../../constant';\nimport { LayoutLevel } from '../../../constant/index';\nimport pluginMap from '../../../plugin/components';\nimport type { StringOrNumber } from '../../../typings/common';\nimport type { IPoint } from '../../../typings/coordinate';\nimport type { ILayoutRect, ILayoutType } from '../../../typings/layout';\nimport type { IComponentOption } from '../../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { HOOK_EVENT } from '@visactor/vgrammar-core';\nimport type { LineAxisAttributes } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { isValidCartesianAxis } from '../util';\nimport type { IAxis, ITick } from '../interface';\nimport type { ICartesianTickDataOpt, CoordinateType } from '@visactor/vutils-extension';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DataSet } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport { CompilableData } from '../../../compile/data/compilable-data';\nimport { AxisComponent } from '../base-axis';\nimport type { IGraphic, IText } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { createText } from '@visactor/vrender-core';\nimport type { ICartesianChartSpec } from '../../../chart';\n\nconst CartesianAxisPlugin = [pluginMap.AxisSyncPlugin];\n\nexport abstract class CartesianAxis\n extends AxisComponent\n implements IAxis\n{\n static type = ComponentTypeEnum.cartesianAxis;\n type = ComponentTypeEnum.cartesianAxis;\n name: string = ComponentTypeEnum.cartesianAxis;\n\n static specKey = 'axes';\n\n protected readonly _defaultBandPosition = 0.5;\n protected readonly _defaultBandInnerPadding = 0.1;\n protected readonly _defaultBandOuterPadding = 0.3;\n\n // 标记这个布局Item的方向(left->right, right->left, top->bottom, bottom->top)\n declare directionStr?: 'l2r' | 'r2l' | 't2b' | 'b2t';\n\n layoutType: ILayoutType = 'region-relative';\n layoutZIndex: number = LayoutZIndex.Axis;\n layoutLevel: number = LayoutLevel.Axis;\n\n protected _dataSet: DataSet;\n\n layout3dBox?: { width: number; height: number; length: number };\n\n protected _orient: IOrientType = 'left';\n getOrient() {\n return this._orient;\n }\n\n protected _autoIndentOnce: boolean = false;\n protected _hasAutoIndent: boolean = false;\n set autoIndentOnce(v: boolean) {\n this._autoIndentOnce = v;\n }\n\n protected _scales: IBaseScale[] = [];\n getScales() {\n return this._scales;\n }\n\n protected _tick: ITick | undefined = undefined;\n\n private _axisStyle: Partial;\n private _latestBounds: IBounds;\n private _verticalLimitSize: number;\n private _unitText: IText;\n\n protected _layoutCache: {\n width: number;\n height: number;\n _lastComputeOutBounds: IBoundsLike;\n } = { width: 0, height: 0, _lastComputeOutBounds: { x1: 0, x2: 0, y1: 0, y2: 0 } };\n\n // 内padding\n protected _innerOffset: { top: number; bottom: number; left: number; right: number } = {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n };\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this._orient = getOrient(spec, ['z']);\n if (isZAxis(this._orient)) {\n this.layoutType = 'absolute';\n }\n this._dataSet = options.dataSet;\n }\n\n static getSpecInfo(chartSpec: any): Maybe {\n // const regions = (chartSpec.region as IRegionSpec[]) ?? [];\n // if (regions.find(r => r.coordinate !== 'cartesian')) {\n // return null;\n // }\n const axesSpec = chartSpec[this.specKey];\n if (!axesSpec) {\n return null;\n }\n\n const isHorizontal = chartSpec.direction === Direction.horizontal;\n\n if (!isArray(axesSpec)) {\n // 如果非法,或者只有一个z轴就不创建\n if (!isValidCartesianAxis(axesSpec)) {\n return null;\n }\n const { axisType, componentName } = getCartesianAxisInfo(axesSpec, isHorizontal);\n axesSpec.type = axisType;\n return [\n {\n spec: axesSpec,\n specPath: [this.specKey],\n type: componentName\n }\n ];\n }\n // 处理spec\n const zAxis = axesSpec.filter(s => s.orient === 'z')[0];\n let valid = true;\n if (zAxis) {\n const xAxis = axesSpec.filter(s => s.orient === 'bottom')[0];\n const yAxis = axesSpec.filter(s => isYAxis(s.orient))[0];\n // 必须有x和y,且x必须是bottom\n valid = axesSpec.length === 3 && xAxis && yAxis;\n }\n\n let axesSpecList = axesSpec.map((spec, index) => ({ spec, index }));\n if (!valid) {\n axesSpecList = axesSpecList.filter(({ spec }) => spec.orient !== 'z');\n }\n const specInfos: IModelSpecInfo[] = [];\n axesSpecList.forEach(({ spec, index }) => {\n if (!isValidCartesianAxis(spec)) {\n return;\n }\n const { axisType, componentName } = getCartesianAxisInfo(spec, isHorizontal);\n spec.type = axisType;\n specInfos.push({\n spec,\n specIndex: index,\n specPath: [this.specKey, index],\n type: componentName\n });\n });\n return specInfos;\n }\n\n static createComponent(specInfo: IModelSpecInfo, options: IComponentOption) {\n const { spec, ...others } = specInfo;\n const C = Factory.getComponentInKey(others.type);\n if (C) {\n return new C(spec, {\n ...options,\n ...others\n }) as IAxis;\n }\n options.onError(`Component ${others.type} not found`);\n return null;\n }\n\n initLayout(): void {\n super.initLayout();\n this._layout.autoIndent = this._spec.autoIndent !== false;\n this._layout.layoutOrient = this._orient;\n }\n\n setLayout3dBox(box3d: { width: number; height: number; length: number }) {\n this.layout3dBox = box3d;\n }\n\n effect: IEffect = {\n scaleUpdate: params => {\n this.computeData(params?.value);\n eachSeries(\n this._regions,\n s => {\n const orient = this.getOrient();\n\n if (isXAxis(orient)) {\n (s as ICartesianSeries).setXAxisHelper(this.axisHelper());\n } else if (isYAxis(orient)) {\n (s as ICartesianSeries).setYAxisHelper(this.axisHelper());\n } else if (isZAxis(orient)) {\n (s as ICartesianSeries).setZAxisHelper(this.axisHelper());\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n };\n\n protected abstract computeDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[];\n abstract valueToPosition(value: any): number;\n\n protected updateScaleRange() {\n let isScaleChange = false;\n const { width, height } = this.getLayoutRect();\n const { left, right, top, bottom } = this._innerOffset;\n let newRange: number[] = [];\n if (isXAxis(this.getOrient())) {\n if (isValidNumber(width)) {\n newRange = this._inverse ? [width - right, left] : [left, width - right];\n }\n } else if (isZAxis(this.getOrient())) {\n if (isValidNumber(width)) {\n newRange = this._inverse ? [width - right, left] : [left, width - right];\n this._scale.range(newRange);\n }\n } else {\n if (isValidNumber(height)) {\n newRange = this._inverse ? [top, height - bottom] : [height - bottom, top];\n }\n }\n const [start, end] = this._scale.range();\n if (newRange[0] !== start || newRange[1] !== end) {\n isScaleChange = true;\n this._scale.range(newRange);\n }\n\n return isScaleChange;\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n this.pluginService?.load(CartesianAxisPlugin.map(P => new P()));\n this.callPlugin(plugin => {\n this.pluginService && plugin.onInit && plugin.onInit(this.pluginService, this);\n });\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n if (this.visible) {\n const isX = isXAxis(this.getOrient());\n if (isX) {\n if (isUndefined(this._spec.maxHeight)) {\n this._spec.maxHeight = '30%';\n }\n } else if (isUndefined(this._spec.maxWidth)) {\n this._spec.maxWidth = '30%';\n }\n\n const axisStyle: any = this._getAxisAttributes();\n axisStyle.label.formatMethod = this.getLabelFormatMethod();\n axisStyle.verticalFactor = this.getOrient() === 'top' || this.getOrient() === 'right' ? -1 : 1;\n this._axisStyle = axisStyle;\n }\n this._tick = this._spec.tick;\n const chartSpec = this._option.getChart()?.getSpec() as ICartesianChartSpec;\n this._inverse = transformInverse(this._spec, chartSpec?.direction === Direction.horizontal);\n }\n\n onLayoutStart(layoutRect: IRect, viewRect: ILayoutRect, ctx: any): void {\n super.onLayoutStart(layoutRect, viewRect, ctx);\n // 计算innerOffset\n if (!isZAxis(this.getOrient()) && (this._spec as ICartesianVertical | ICartesianHorizontal).innerOffset) {\n const spec = this._spec as ICartesianVertical | ICartesianHorizontal;\n if (isYAxis(this.getOrient())) {\n ['top', 'bottom'].forEach(orient => {\n this._innerOffset[orient] = calcLayoutNumber(\n (spec as ICartesianVertical).innerOffset[orient],\n viewRect.height,\n viewRect\n );\n });\n } else {\n ['left', 'right'].forEach(orient => {\n this._innerOffset[orient] = calcLayoutNumber(\n (spec as ICartesianHorizontal).innerOffset[orient],\n viewRect.width,\n viewRect\n );\n });\n }\n }\n }\n\n protected getSeriesStatisticsField(s: ICartesianSeries) {\n let f: string[];\n if (isXAxis(this.getOrient())) {\n f = s.fieldX;\n } else if (isZAxis(this.getOrient())) {\n f = s.fieldZ;\n } else {\n f = s.fieldY;\n }\n if (isContinuous(this._scale.type)) {\n return f;\n }\n return [f[0]];\n }\n\n protected _tickTransformOption(coordinateType: CoordinateType) {\n return {\n ...super._tickTransformOption(coordinateType),\n noDecimals: this._tick.noDecimals,\n labelLastVisible: this._spec.label?.lastVisible,\n labelFlush: this._spec.label?.flush\n } as ICartesianTickDataOpt;\n }\n\n protected _initData() {\n const tickData = this._initTickDataSet(this._tickTransformOption('cartesian'));\n tickData.target.addListener('change', this._forceLayout.bind(this));\n this._tickData = new CompilableData(this._option, tickData);\n }\n\n protected axisHelper(): IAxisHelper {\n const getScale = (depth: number = 0) => {\n return this._scales[depth];\n };\n return {\n isContinuous: isContinuous(this._scale.type),\n dataToPosition: this.dataToPosition.bind(this),\n getScale,\n getAxisType: () => this.type,\n getAxisId: () => this.id,\n isInverse: () => this._inverse === true\n };\n }\n\n /** LifeCycle API**/\n afterCompile() {\n const product = this._axisMark?.getProduct();\n if (product) {\n product.addEventListener(HOOK_EVENT.AFTER_ELEMENT_ENCODE, () => {\n if (this._isLayout === false) {\n // 布局结束之后再进行插件的调用\n // 插件在布局后\n if (isXAxis(this.getOrient())) {\n this.callPlugin(plugin => {\n this.pluginService &&\n plugin.onDidLayoutHorizontal &&\n plugin.onDidLayoutHorizontal(this.pluginService, this);\n });\n } else {\n this.callPlugin(plugin => {\n this.pluginService && plugin.onDidLayoutVertical && plugin.onDidLayoutVertical(this.pluginService, this);\n });\n }\n this._delegateAxisContainerEvent(product.getGroupGraphicItem());\n\n // 更新单位的显示位置\n if (this._unitText) {\n const bounds = product.graphicItem.AABBBounds;\n const pos = isXAxis(this._orient)\n ? {\n x: bounds.x2,\n y: this.getLayoutStartPoint().y\n }\n : {\n x: this.getLayoutStartPoint().x,\n y: bounds.y1\n };\n\n this._unitText.setAttributes(pos);\n }\n }\n });\n }\n this.callPlugin(plugin => {\n this.pluginService && plugin.onDidCompile && plugin.onDidCompile(this.pluginService, this);\n });\n }\n\n onLayoutEnd(ctx: any): void {\n const isRangeChange = this.updateScaleRange();\n if (isRangeChange) {\n this.event.emit(ChartEvent.scaleUpdate, { model: this, value: 'range' });\n // 这里会执行 computeData ,会执行系列scale更新\n } else {\n this.updateSeriesScale();\n }\n super.onLayoutEnd(ctx);\n }\n\n onRender(ctx: any): void {\n // do nothing\n }\n\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n update(ctx: IComponentOption) {\n // TODO\n }\n\n resize(ctx: IComponentOption) {\n // TODO\n }\n\n protected collectScale() {\n const scales: IBaseScale[] = [];\n eachSeries(\n this._regions,\n s => {\n scales.push(\n this.getOrient() === 'left' || this.getOrient() === 'right'\n ? (s as ICartesianSeries).scaleY\n : (s as ICartesianSeries).scaleX\n );\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n return scales;\n }\n\n protected collectData(depth?: number, rawData?: boolean) {\n const data: { min: number; max: number; values: any[] }[] = [];\n eachSeries(\n this._regions,\n s => {\n let field: string | string[];\n if (depth > 0) {\n field = s.getGroups()?.fields?.[depth];\n } else {\n if (isXAxis(this.getOrient())) {\n field = (s as ICartesianSeries).fieldX2\n ? [...(s as ICartesianSeries).fieldX, (s as ICartesianSeries).fieldX2]\n : (s as ICartesianSeries).fieldX;\n } else if (isZAxis(this.getOrient())) {\n field = (s as ICartesianSeries).fieldZ;\n } else {\n field = (s as ICartesianSeries).fieldY;\n }\n }\n field = (isArray(field) ? (isContinuous(this._scale.type) ? field : [field[0]]) : [field]) as string[];\n if (!depth) {\n this._dataFieldText = s.getFieldAlias(field[0]);\n }\n if (field) {\n const viewData = s.getViewData();\n if (rawData) {\n field.forEach(f => {\n data.push(s.getRawDataStatisticsByField(f, false) as { min: number; max: number; values: any[] });\n });\n } else if (viewData && viewData.latestData && viewData.latestData.length) {\n const seriesData = s.getViewDataStatistics?.();\n\n field.forEach(f => {\n if (seriesData?.latestData?.[f]) {\n data.push(seriesData.latestData[f]);\n }\n });\n }\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n return data;\n }\n\n protected updateSeriesScale() {\n const orient = this.getOrient();\n eachSeries(\n this._regions,\n s => {\n if (isXAxis(orient)) {\n (s as ICartesianSeries).setScaleX(this._scale);\n (s as ICartesianSeries).setXAxisHelper(this.axisHelper());\n } else if (isYAxis(orient)) {\n (s as ICartesianSeries).setScaleY(this._scale);\n (s as ICartesianSeries).setYAxisHelper(this.axisHelper());\n } else if (isZAxis(orient)) {\n (s as ICartesianSeries).setScaleZ(this._scale);\n (s as ICartesianSeries).setZAxisHelper(this.axisHelper());\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n\n // protected _seriesUpdateAfterScaleChange(updateInfo: { domain?: boolean; range?: boolean; type?: boolean }) {\n // const orient = this.getOrient();\n // eachSeries(\n // this._regions,\n // s => {\n // if (isXAxis(orient)) {\n // (s as ICartesianSeries).xAxisUpdated(updateInfo);\n // } else if (isYAxis(orient)) {\n // (s as ICartesianSeries).yAxisUpdated(updateInfo);\n // } else if (isZAxis(orient)) {\n // (s as ICartesianSeries).zAxisUpdated(updateInfo);\n // }\n // },\n // {\n // userId: this._seriesUserId,\n // specIndex: this._seriesIndex\n // }\n // );\n // }\n\n _transformLayoutPosition = (pos: Partial) => {\n let { x, y } = pos;\n if (isValidNumber(x)) {\n x += Number(this._orient === 'left') * this.getLayoutRect().width;\n }\n if (isValidNumber(y)) {\n y += Number(this._orient === 'top') * this.getLayoutRect().height;\n }\n return { x, y };\n };\n\n _transformLayoutRect = (result: ILayoutRect) => {\n if (!this._visible) {\n return result;\n }\n const bounds = this._latestBounds.clone().translate(-this.getLayoutStartPoint().x, -this.getLayoutStartPoint().y);\n switch (this._layout.layoutOrient) {\n case 'left':\n if (this._layout.layoutRectLevelMap.width === DEFAULT_LAYOUT_RECT_LEVEL) {\n result.width = bounds.x1 < 0 ? -bounds.x1 : 0;\n }\n break;\n case 'right':\n if (this._layout.layoutRectLevelMap.width === DEFAULT_LAYOUT_RECT_LEVEL) {\n result.width = bounds.x2 > 0 ? bounds.x2 : 0;\n }\n break;\n case 'top':\n if (this._layout.layoutRectLevelMap.height === DEFAULT_LAYOUT_RECT_LEVEL) {\n result.height = bounds.y1 < 0 ? -bounds.y1 : 0;\n }\n break;\n case 'bottom':\n if (this._layout.layoutRectLevelMap.height === DEFAULT_LAYOUT_RECT_LEVEL) {\n result.height = bounds.y2 > 0 ? bounds.y2 : 0;\n }\n break;\n default:\n break;\n }\n result.width = Math.ceil(result.width);\n result.height = Math.ceil(result.height);\n return this._layout.setRectInSpec(this._layoutCacheProcessing(result));\n };\n /**\n * bounds 预计算\n * @param rect\n * @returns\n */\n getBoundsInRect(rect: ILayoutRect): IBoundsLike {\n let result: IBoundsLike = { x1: 0, y1: 0, x2: 0, y2: 0 };\n if (!this._visible) {\n return result;\n }\n this._verticalLimitSize = isXAxis(this.getOrient()) ? rect.height : rect.width;\n\n this.setLayoutRect(rect);\n const isChanged = this.updateScaleRange();\n // 防止一直没有计算latestData\n if (isChanged || !isArray(this._tickData.getLatestData())) {\n this.computeData('range');\n }\n const context = { skipLayout: false };\n const isX = isXAxis(this.getOrient());\n if (this.pluginService) {\n isX\n ? this.callPlugin(plugin => {\n plugin.onWillLayoutHorizontal && plugin.onWillLayoutHorizontal(this.pluginService, context, this);\n })\n : this.callPlugin(plugin => {\n plugin.onWillLayoutVertical && plugin.onWillLayoutVertical(this.pluginService, context, this);\n });\n }\n const product = this._axisMark.getProduct();\n let hasBounds = false;\n\n if (!context.skipLayout) {\n const attrs = this._getUpdateAttribute(true);\n const axisComponent = product.getGroupGraphicItem();\n\n const spec = mergeSpec({ ...this.getLayoutStartPoint() }, this._axisStyle, attrs, { line: { visible: false } });\n const updateBounds = axisComponent.getBoundsWithoutRender(spec);\n\n hasBounds = true;\n this._latestBounds = updateBounds;\n if (isFinite(updateBounds.width())) {\n // 因为轴单位在某些区域显示的时候,是不参与轴某个方向的包围盒计算的,\n // 所以不太合适放在轴组件内支持,所以就在 VChart 层的轴组件上通过添加 text 图元支持\n result = this._appendAxisUnit(updateBounds, isX);\n }\n }\n\n if (!hasBounds) {\n this._latestBounds = product.getBounds();\n }\n return result;\n }\n\n updateLayoutAttribute(): void {\n if (!this.visible) {\n return;\n }\n const startPoint = this.getLayoutStartPoint();\n // 正式的更新布局属性\n const { grid: updateGridAttrs, ...updateAxisAttrs } = this._getUpdateAttribute(false);\n const axisProduct = this._axisMark.getProduct(); // 获取语法元素\n const axisAttrs = mergeSpec({ x: startPoint.x, y: startPoint.y }, this._axisStyle, updateAxisAttrs);\n axisProduct.encode(axisAttrs);\n\n if (this._gridMark) {\n const gridProduct = this._gridMark.getProduct(); // 获取语法元素\n gridProduct.encode(mergeSpec({ x: startPoint.x, y: startPoint.y }, this._getGridAttributes(), updateGridAttrs));\n }\n\n super.updateLayoutAttribute();\n }\n\n private _getTitleLimit(isX: boolean) {\n if (this._spec.title.visible && isNil(this._spec.title.style?.maxLineWidth)) {\n const angle = this._axisStyle.title?.angle ?? this._spec.title.style?.angle ?? 0;\n if (isX) {\n const width = this.getLayoutRect().width;\n const cosValue = Math.abs(Math.cos(angle));\n // VRender 接收到的limit是考虑角度计算后的宽度\n // TODO:还需要考虑angle后,高度是否太高,综合计算一个limit,比如高度不能超过图表整体高度的1/4\n return cosValue < 1e-6 ? Infinity : width / cosValue;\n }\n const height = this.getLayoutRect().height;\n const sinValue = Math.abs(Math.sin(angle));\n\n // TODO:还需要考虑angle后,宽度是否太宽,综合计算一个limit,比如宽度度不能超过图表整体宽度的1/4\n return sinValue < 1e-6 ? Infinity : height / sinValue;\n }\n\n return null;\n }\n\n private _getUpdateAttribute(ignoreGrid: boolean) {\n // 获取更新的坐标轴属性\n let regionHeight = 0;\n let regionWidth = 0;\n\n if (!ignoreGrid) {\n const regions = this.getRegions();\n let { x: minX, y: minY } = regions[0].getLayoutStartPoint();\n let maxX = minX + regions[0].getLayoutRect().width;\n let maxY = minY + regions[0].getLayoutRect().height;\n\n for (let index = 1; index < regions.length; index++) {\n const region = regions[index];\n const { x, y } = region.getLayoutStartPoint();\n const { width, height } = region.getLayoutRect();\n\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, width + x);\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, height + y);\n }\n regionHeight = Math.abs(maxY - minY);\n regionWidth = Math.abs(maxX - minX);\n }\n\n const { width, height } = this.getLayoutRect();\n const isX = isXAxis(this._orient);\n const isY = isYAxis(this._orient);\n const isZ = isZAxis(this._orient);\n let end = { x: 0, y: 0 };\n let gridLength = 0;\n let axisLength = 0;\n const depth = this.layout3dBox ? this.layout3dBox.length : 0;\n if (isX) {\n end = { x: width, y: 0 };\n gridLength = regionHeight;\n axisLength = width;\n } else if (isY) {\n end = { x: 0, y: height };\n gridLength = regionWidth;\n axisLength = height;\n }\n if (isZ) {\n const directionStr = this.directionStr ?? 'r2l';\n const depthZ = this.layout3dBox ? this.layout3dBox.width : 0;\n let anchor3d = [0, 0];\n let alpha = -Math.PI / 2;\n let z = 0;\n if (directionStr === 'l2r') {\n z = this.layout3dBox.length;\n anchor3d = [0, 0, 0];\n alpha = Math.PI / 2;\n }\n const items = this.getLabelItems(width);\n const axisAttrs: any = {\n start: { x: 0, y: 0 },\n end: { x: depth, y: 0 },\n z: z,\n alpha,\n anchor3d,\n title: {\n text: this._spec.title.text || this._dataFieldText,\n maxWidth: this._getTitleLimit(isX)\n },\n items\n };\n if (!ignoreGrid) {\n axisAttrs.grid = {\n type: 'line',\n start: { x: 0, y: 0 },\n end: { x: depth, y: 0 },\n items: items[0],\n verticalFactor: this._axisStyle.verticalFactor,\n depth: depthZ,\n length: regionHeight,\n z: z,\n alpha,\n anchor3d\n };\n }\n return axisAttrs;\n }\n let verticalMinSize = isX ? this.layout.minHeight : this.layout.minWidth;\n if (\n (isX && this._layout.layoutRectLevelMap.height === USER_LAYOUT_RECT_LEVEL) ||\n (isY && this._layout.layoutRectLevelMap.width === USER_LAYOUT_RECT_LEVEL)\n ) {\n verticalMinSize = this._verticalLimitSize;\n }\n const items = this.getLabelItems(axisLength);\n const attrs: any = {\n start: { x: 0, y: 0 },\n end,\n title: {\n text: this._spec.title.text || this._dataFieldText,\n maxWidth: this._getTitleLimit(isX)\n },\n items,\n verticalLimitSize: this._verticalLimitSize,\n verticalMinSize\n };\n if (!ignoreGrid) {\n attrs.grid = {\n type: 'line',\n start: { x: 0, y: 0 },\n end,\n items: items[0],\n verticalFactor: this._axisStyle.verticalFactor,\n depth,\n length: gridLength\n };\n }\n\n return attrs;\n }\n\n protected initEvent() {\n super.initEvent();\n\n if (this.visible) {\n // 布局结束之后处理 0 基线问题\n this.event.on(ChartEvent.layoutEnd, this._fixAxisOnZero);\n // 图表resize后,需要正常布局,清除布局缓存\n this.event.on(ChartEvent.layoutRectUpdate, () => {\n this._clearLayoutCache();\n });\n }\n }\n\n private _fixAxisOnZero = () => {\n // 在布局结束之后调整坐标轴零基线\n const { onZero, visible } = this._spec.domainLine;\n if (this.visible && onZero && visible !== false) {\n const { onZeroAxisId, onZeroAxisIndex } = this._spec.domainLine;\n const axesComponents = this._option.getComponentsByKey('axes') as IAxis[];\n const isX = isXAxis(this.getOrient());\n\n // 判断坐标轴是否可用\n const isValidAxis = (item: any) => {\n return (isX ? !isXAxis(item.getOrient()) : isXAxis(item.getOrient())) &&\n isContinuous(item.getScale().type) &&\n item.getTickData()\n ? item\n .getTickData()\n .getLatestData()\n ?.find((d: any) => d.value === 0)\n : item.getScale().ticks().includes(0);\n };\n const relativeAxes = axesComponents.filter(item => isValidAxis(item));\n if (relativeAxes.length) {\n let bindAxis;\n if (isValid(onZeroAxisId)) {\n bindAxis = relativeAxes.find(axis => axis.id === onZeroAxisId);\n } else if (isValid(onZeroAxisIndex)) {\n const indexAxis = axesComponents[onZeroAxisIndex];\n if (isValidAxis(indexAxis)) {\n bindAxis = indexAxis;\n }\n } else {\n // 默认绑定第一条的相对坐标轴\n bindAxis = relativeAxes[0];\n }\n if (bindAxis) {\n const axisMark = this._axisMark.getProduct();\n // 找到了绑定的 axis,获取基线的位置\n const position = bindAxis.valueToPosition(0);\n // 获取偏移量\n if (isX) {\n axisMark.encode({\n line: {\n ...this._axisStyle.line,\n dy: this._orient === 'bottom' ? -(bindAxis.getScale().range()[0] - position) : position\n }\n });\n } else {\n axisMark.encode({\n line: {\n ...this._axisStyle.line,\n dx: this._orient === 'left' ? position : -(bindAxis.getScale().range()[1] - position)\n }\n });\n }\n }\n }\n }\n };\n\n protected _layoutCacheProcessing(rect: ILayoutRect) {\n ['width', 'height'].forEach(key => {\n if (rect[key] < this._layoutCache[key]) {\n rect[key] = this._layoutCache[key];\n } else {\n this._layoutCache[key] = rect[key];\n }\n });\n\n // outBounds\n if (this._autoIndentOnce && this._hasAutoIndent) {\n // use cache\n ['x1', 'x2', 'y1', 'y2'].forEach(key => {\n this.layout.getLastComputeOutBounds()[key] = this._layoutCache._lastComputeOutBounds[key];\n });\n } else {\n this._hasAutoIndent = true;\n ['x1', 'x2', 'y1', 'y2'].forEach(key => {\n if (this.layout.getLastComputeOutBounds()[key] < this._layoutCache._lastComputeOutBounds[key]) {\n this.layout.getLastComputeOutBounds()[key] = this._layoutCache._lastComputeOutBounds[key];\n } else {\n this._layoutCache._lastComputeOutBounds[key] = this.layout.getLastComputeOutBounds()[key];\n }\n });\n }\n\n return rect;\n }\n\n _clearLayoutCache() {\n this._hasAutoIndent = false;\n this._layoutCache.width = 0;\n this._layoutCache.height = 0;\n this._layoutCache._lastComputeOutBounds = { x1: 0, x2: 0, y1: 0, y2: 0 };\n }\n\n onDataUpdate(): void {\n // clear layout cache\n this._clearLayoutCache();\n }\n\n private _appendAxisUnit(bounds: IBounds, isX: boolean) {\n if (this._spec.unit && this._spec.unit.visible) {\n const { text, style } = this._spec.unit;\n let pos;\n let unitTextStyle: any;\n if (isX) {\n pos = {\n x: bounds.x2,\n y: this.getLayoutStartPoint().y\n };\n unitTextStyle = {\n textAlign: 'left',\n textBaseline: 'middle'\n };\n } else {\n pos = {\n x: this.getLayoutStartPoint().x,\n y: bounds.y1\n };\n unitTextStyle = {\n textAlign: this._orient === 'left' ? 'left' : 'right',\n textBaseline: 'bottom'\n };\n }\n\n unitTextStyle = {\n ...unitTextStyle,\n ...style,\n x: pos.x,\n y: pos.y,\n text\n };\n if (this._unitText) {\n this._unitText.setAttributes(unitTextStyle);\n } else {\n this._unitText = createText(unitTextStyle);\n this._unitText.name = 'axis-unit';\n this.getContainer()?.add(this._unitText);\n }\n\n // 左轴\n const textBounds = this._unitText.AABBBounds;\n if (!isX) {\n bounds.x1 += textBounds.x1 < bounds.x1 ? textBounds.x1 - bounds.x1 : 0;\n bounds.y1 += textBounds.y1 < bounds.y1 ? textBounds.y1 - bounds.y1 : 0;\n } else {\n bounds.x2 += textBounds.x2 > bounds.x2 ? textBounds.x2 - bounds.x2 : 0;\n bounds.y2 += textBounds.y2 > bounds.y2 ? textBounds.y2 - bounds.y2 : 0;\n }\n }\n\n return bounds;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return this._unitText ? [this._unitText] : [];\n }\n}\n","import { isValidNumber, isNil, isValid, isFunction } from '@visactor/vutils';\nimport type { LinearScale } from '@visactor/vscale';\nimport { maxInArr, minInArr } from '../../../util/array';\nimport { getLinearAxisSpecDomain } from '../util';\nimport type { IAxisLocationCfg, ITick } from '../interface';\nimport { ChartEvent } from '../../../constant';\nimport type { IEvent } from '../../../event/interface';\nimport { isXAxis } from '../cartesian/util/common';\nimport type { IOrientType } from '../../../typings/space';\nimport type { IComponentOption } from '../../interface/common';\n\nexport const e10 = Math.sqrt(50);\nexport const e5 = Math.sqrt(10);\nexport const e2 = Math.sqrt(2);\nconst DEFAULT_TICK_COUNT = 5;\n\nexport interface LinearAxisMixin {\n _scale: LinearScale;\n _scales: LinearScale[];\n _spec: any;\n _nice: boolean;\n _zero: boolean;\n _domain: { min?: number; max?: number };\n _expand?: { max?: number; min?: number };\n _tick: ITick | undefined;\n isSeriesDataEnable: any;\n computeDomain: any;\n collectData: (depth?: number) => { min: number; max: number; values: any[] }[];\n event: IEvent;\n _orient: IOrientType;\n _option: IComponentOption;\n}\n\nexport class LinearAxisMixin {\n protected _extend: { [key: string]: number } = {};\n\n setExtraAttrFromSpec() {\n isValid(this._spec.nice) && (this._nice = this._spec.nice);\n isValid(this._spec.zero) && (this._zero = this._spec.zero);\n this._expand = this._spec.expand;\n this._domain = getLinearAxisSpecDomain(this._spec);\n }\n transformScaleDomain() {\n this.setScaleNice();\n }\n\n setLinearScaleNice() {\n let tickCount: number = DEFAULT_TICK_COUNT;\n const tick = this._spec.tick || {};\n\n if (isValidNumber(tick.forceTickCount)) {\n tickCount = tick.forceTickCount;\n } else if (isFunction(tick.tickCount)) {\n const range = this._scale.range();\n let rangeSize = Math.abs(range[range.length - 1] - range[0]);\n\n if (rangeSize === 1 && this._option) {\n // TODO: need to be optimized, when the range is not updated, use the size of view\n const isX = isXAxis(this._orient);\n rangeSize = isX ? this._option.getChartViewRect().width : this._option.getChartViewRect().height;\n }\n\n // tickCount需要一致,不然会导致效果不一致, fix #2050\n tickCount = tick.tickCount({\n rangeSize,\n labelStyle: this._spec.label && this._spec.label.style\n });\n } else if (isValidNumber(tick.tickCount)) {\n tickCount = tick.tickCount;\n } else {\n tickCount = DEFAULT_TICK_COUNT;\n }\n // 如果配置了精度优先,那么最低是 5\n // 否则就直接使用tickCount即可\n if (this._spec.niceType === 'accurateFirst') {\n tickCount = Math.max(DEFAULT_TICK_COUNT, tickCount);\n }\n const { min, max } = this._domain ?? {};\n if (isNil(min) && isNil(max)) {\n this._nice && this._scale.nice(tickCount);\n } else if (isValid(min) && isNil(max)) {\n this._nice && this._scale.niceMax(tickCount);\n } else if (isNil(min) && isValid(max)) {\n this._nice && this._scale.niceMin(tickCount);\n }\n }\n\n setLogScaleNice() {\n const { min, max } = this._domain ?? {};\n if (isNil(min) && isNil(max)) {\n this._nice && this._scale.nice();\n } else if (isValid(min) && isNil(max)) {\n this._nice && this._scale.niceMax();\n } else if (isNil(min) && isValid(max)) {\n this._nice && this._scale.niceMin();\n }\n }\n\n setScaleNice() {\n if (this._spec.type === 'log') {\n this.setLogScaleNice();\n } else {\n this.setLinearScaleNice();\n }\n }\n\n dataToPosition(values: any[], cfg?: IAxisLocationCfg): number {\n return this.valueToPosition(values[0]);\n }\n\n valueToPosition(value: any): number {\n if (this._spec.type === 'log' && !isNil(value) && (value === 0 || value[0] === 0)) {\n return this._scale.range()[0];\n }\n return this._scale.scale(value);\n }\n\n computeLinearDomain(data: { min: number; max: number; values: any[] }[]): number[] {\n const domain: number[] = [];\n\n if (data.length) {\n data.forEach(d => {\n const { min, max } = d;\n domain[0] = domain[0] === undefined ? min : Math.min(domain[0] as number, min as number);\n domain[1] = domain[1] === undefined ? max : Math.max(domain[1] as number, max as number);\n });\n } else {\n // default value for linear axis\n domain[0] = 0;\n domain[1] = 0;\n }\n this.expandDomain(domain);\n this.includeZero(domain);\n this.setDomainMinMax(domain);\n return domain;\n }\n\n protected expandDomain(domain: number[]): void {\n if (!this._expand) {\n return;\n }\n\n let domainMin = domain[0];\n let domainMax = domain[domain.length - 1];\n\n if (domainMin === domainMax) {\n if (domainMax === 0) {\n domainMax = 1;\n } else if (domainMax > 0) {\n domainMin = 0;\n } else if (domainMax < 0) {\n domainMax = 0;\n }\n }\n\n if (isValid(this._expand.min)) {\n domain[0] = domainMin - (domainMax - domainMin) * this._expand.min;\n }\n if (isValid(this._expand.max)) {\n domain[domain.length - 1] = domainMax + (domainMax - domainMin) * this._expand.max;\n }\n }\n\n protected niceDomain(domain: number[]) {\n const { min: userMin, max: userMax } = getLinearAxisSpecDomain(this._spec);\n if (isValid(userMin) || isValid(userMax) || this._spec.type !== 'linear') {\n // 如果用户设置了 min 或者 max 则按照用户设置的为准\n // 如果是非 linear 类型也不处理\n return domain;\n }\n if (Math.abs(minInArr(domain) - maxInArr(domain)) <= 1e-12) {\n let num = domain[0];\n const flag = num >= 0 ? 1 : -1;\n num = Math.abs(num);\n if (num < 1) {\n domain[0] = 0;\n domain[1] = 1; // 在[0, 1) 区间变成[0, 1]\n } else {\n let step = num / DEFAULT_TICK_COUNT; // 默认5个ticks\n const power = Math.floor(Math.log(step) / Math.LN10);\n const err = step / Math.pow(10, power);\n step = (err >= e10 ? 10 : err >= e5 ? 5 : err >= e2 ? 2 : 1) * Math.pow(10, power);\n\n domain[0] = 0;\n domain[1] = step * 10;\n }\n if (flag < 0) {\n domain.reverse();\n domain[0] *= -1;\n domain[1] *= -1;\n }\n }\n return domain;\n }\n\n protected includeZero(domain: number[]): void {\n if (this._zero) {\n domain[0] = Math.min(domain[0], 0);\n domain[domain.length - 1] = Math.max(domain[domain.length - 1], 0);\n }\n }\n\n // 用户其他模块扩充轴scale的区间\n setExtendDomain(key: string, value: number | undefined) {\n if (value === undefined) {\n delete this._extend[key];\n return;\n }\n this._extend[key] = value;\n const domain = this._scale.domain();\n this.extendDomain(domain);\n this.includeZero(domain);\n this.setDomainMinMax(domain);\n this.niceDomain(domain);\n this._scale.domain(domain, this._nice);\n this.setScaleNice();\n\n this.event.emit(ChartEvent.scaleUpdate, { model: this as any, value: 'domain' });\n }\n\n protected extendDomain(domain: number[]) {\n let temp;\n const domainLast = domain.length - 1;\n const reverse = domain[0] - domain[domainLast] > 0;\n const min = reverse ? domainLast : 0;\n const max = reverse ? 0 : domainLast;\n for (const key in this._extend) {\n temp = this._extend[key];\n temp > domain[max] && (domain[max] = temp);\n temp < domain[min] && (domain[min] = temp);\n }\n }\n\n getDomainSpec() {\n return this._domain;\n }\n\n protected setDomainMinMax(domain: number[]): void {\n if (!this._domain) {\n return;\n }\n const { min, max } = this._domain;\n isValid(min) && (domain[0] = min);\n isValid(max) && (domain[1] = max);\n }\n\n setZero(zero: boolean) {\n if (this._zero !== zero) {\n this._zero = zero;\n this.updateScaleDomain();\n }\n }\n /**\n * @override\n * TODO event.emit是否可以考虑用decorator\n */\n protected updateScaleDomain() {\n if (!this.isSeriesDataEnable()) {\n return;\n }\n const data = this.collectData();\n const domain: number[] = this.computeDomain(data) as number[];\n this.updateScaleDomainByModel(domain);\n }\n\n /**\n * TODO event.emit是否可以考虑用decorator\n * 数据逻辑外,模块的设置更新对scale-domain的修改操作\n */\n protected updateScaleDomainByModel(domain?: number[]) {\n domain = domain ?? this._scale.domain();\n // 其他模块的设置 domain\n this.extendDomain(domain);\n this.includeZero(domain);\n // 用户 spec 的 min-max\n this.setDomainMinMax(domain);\n // nice 优先级最高\n this.niceDomain(domain);\n this._scale.domain(domain, this._nice);\n // 设置scale的nice-min-max\n this.setScaleNice();\n this.event.emit(ChartEvent.scaleDomainUpdate, { model: this as any });\n this.event.emit(ChartEvent.scaleUpdate, { model: this as any, value: 'domain' });\n }\n}\n","import type { LogScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { LinearScale } from '@visactor/vscale';\nimport { CartesianAxis } from './axis';\nimport { isValid, mixin } from '@visactor/vutils';\nimport type { IAxisHelper, ICartesianLinearAxisSpec } from './interface';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { LinearAxisMixin } from '../mixin/linear-axis-mixin';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\n\nexport interface CartesianLinearAxis\n extends Pick<\n LinearAxisMixin,\n | 'setExtraAttrFromSpec'\n | 'computeLinearDomain'\n | 'valueToPosition'\n | 'setScaleNice'\n | '_domain'\n | 'transformScaleDomain'\n | 'setExtendDomain'\n >,\n CartesianAxis {}\n\nexport class CartesianLinearAxis<\n T extends ICartesianLinearAxisSpec = ICartesianLinearAxisSpec\n> extends CartesianAxis {\n static type = ComponentTypeEnum.cartesianLinearAxis;\n type = ComponentTypeEnum.cartesianLinearAxis;\n\n static specKey = 'axes';\n\n protected _zero: boolean = true;\n protected _nice: boolean = true;\n protected _extend: { [key: string]: number } = {};\n\n protected _scale: LinearScale | LogScale = new LinearScale();\n protected declare _scales: LinearScale[] | LogScale[];\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this.setExtraAttrFromSpec();\n }\n\n /**\n * @override\n */\n protected initScales() {\n super.initScales();\n const range = [0, 1];\n if (isValid(this._domain?.min)) {\n range[0] = this._domain.min;\n }\n if (isValid(this._domain?.max)) {\n range[1] = this._domain.max;\n }\n this._scale.domain(range);\n // this.setScaleNice();\n }\n\n protected computeDomain(data: { min: number; max: number; values: any[] }[]): number[] {\n return this.computeLinearDomain(data);\n }\n\n protected axisHelper() {\n const helper: IAxisHelper = super.axisHelper();\n helper.setExtendDomain = this.setExtendDomain.bind(this);\n helper.valueToPosition = this.valueToPosition.bind(this);\n return helper;\n }\n}\n\nmixin(CartesianLinearAxis, LinearAxisMixin);\n\nexport const registerCartesianLinearAxis = () => {\n registerAxis();\n Factory.registerComponent(CartesianLinearAxis.type, CartesianLinearAxis);\n};\n","import type { BandScale } from '@visactor/vscale';\nimport { isArray } from '@visactor/vutils';\nimport type { StringOrNumber } from '../../../typings';\nimport type { IEvent } from '../../../event/interface';\nimport { ChartEvent } from '../../../constant/event';\nimport type { IModel } from '../../../model/interface';\nimport type { IAxisLocationCfg } from '../interface';\n\nexport interface BandAxisMixin {\n _scale: BandScale;\n _scales: BandScale[];\n _spec: any;\n _defaultBandPosition: number;\n _defaultBandInnerPadding: number;\n _defaultBandOuterPadding: number;\n event: IEvent;\n isSeriesDataEnable: () => boolean;\n collectData: (depth: number, rawData?: boolean) => { min: number; max: number; values: any[] }[];\n computeDomain: (data: { min: number; max: number; values: any[] }[]) => StringOrNumber[];\n transformScaleDomain: () => void;\n}\n\nexport class BandAxisMixin {\n protected _rawDomainIndex: { [key: string | number | symbol]: number }[] = [];\n\n dataToPosition(values: any[], cfg: IAxisLocationCfg = {}): number {\n if (values.length === 0 || this._scales.length === 0) {\n return 0;\n }\n const { position, bandScale } = this.getPosition(values);\n return (\n position + bandScale.bandwidth() * (cfg.bandPosition ?? this._spec.bandPosition ?? this._defaultBandPosition)\n );\n }\n\n valueToPosition(value: any): number {\n const bandStart = this._scale.scale(value);\n return bandStart;\n }\n\n updateGroupScaleRange() {\n let parentScale = this._scale;\n this._scales.forEach((scale, i) => {\n if (i > 0) {\n scale.range([0, parentScale.bandwidth()]);\n parentScale = scale;\n }\n });\n }\n\n getPosition(values: any[]) {\n let position = 0;\n let bandScale = this._scale;\n // 要不要性能优化?\n // 优化有没有用?\n if (this._scales.length === 1 || values.length === 1) {\n position = this.valueToPosition(values[0]);\n } else {\n const max = Math.min(values.length, this._scales.length);\n for (let i = 0; i < max; i++) {\n position += this._scales[i].scale(values[i]);\n }\n bandScale = this._scales[max - 1];\n }\n return { position, bandScale };\n }\n\n calcScales(DEFAULT_BAND_INNER_PADDING: number, DEFAULT_BAND_OUTER_PADDING: number) {\n const { bandPadding, paddingInner, paddingOuter } = this._spec;\n const isBandPaddingArray = isArray(bandPadding);\n const isPaddingInnerArray = isArray(paddingInner);\n const isPaddingOuterArray = isArray(paddingOuter);\n\n for (let i = 0; i < this._scales.length; i++) {\n const _padding = isBandPaddingArray ? bandPadding[i] : bandPadding;\n const _paddingInner = isPaddingInnerArray ? paddingInner[i] : paddingInner;\n const _paddingOuter = isPaddingOuterArray ? paddingOuter[i] : paddingOuter;\n\n this._scales[i]\n .paddingInner(_paddingInner ?? _padding ?? DEFAULT_BAND_INNER_PADDING, true)\n .paddingOuter(_paddingOuter ?? _padding ?? DEFAULT_BAND_OUTER_PADDING, true);\n }\n }\n computeBandDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[] {\n if (!data.length) {\n return [];\n }\n\n // 性能优化 9.13\n if (data.length === 1) {\n return data[0].values;\n }\n const tempSet = new Set();\n for (let i = 0; i < data.length; i++) {\n for (let j = 0; j < data[i].values.length; j++) {\n tempSet.add(data[i].values[j]);\n }\n }\n return Array.from(tempSet) as StringOrNumber[];\n }\n\n protected updateScaleDomain() {\n if (!this.isSeriesDataEnable()) {\n return;\n }\n if (!this._rawDomainIndex?.length && this._scales.length) {\n this._updateRawDomain();\n }\n const userDomain = this._spec.domain;\n for (let i = 0; i < this._scales.length; i++) {\n if (userDomain && userDomain.length && i === 0) {\n // 当数字映射字段存在分组时,只作用于第一个分组的domain,如 xField: ['x', 'type']\n this._scales[i].domain(userDomain);\n } else {\n const data = this.collectData(i);\n const domain = this.computeDomain(data);\n this._scales[i].domain(domain.sort((a, b) => this._rawDomainIndex[i][a] - this._rawDomainIndex[i][b]));\n }\n }\n this.transformScaleDomain();\n this.event.emit(ChartEvent.scaleDomainUpdate, { model: this as unknown as IModel });\n this.event.emit(ChartEvent.scaleUpdate, { model: this as unknown as IModel, value: 'domain' });\n }\n\n protected _updateRawDomain() {\n // 默认值设置了无效?\n this._rawDomainIndex = [];\n\n const userDomain = this._spec.domain;\n for (let i = 0; i < this._scales.length; i++) {\n if (userDomain && userDomain.length && i === 0) {\n // 当数字映射字段存在分组时,只作用于第一个分组的domain,如 xField: ['x', 'type']\n this._scales[i].domain(userDomain);\n } else {\n const data = this.collectData(i, true);\n const domain = this.computeDomain(data);\n this._rawDomainIndex[i] = {};\n domain.forEach((d, _i) => (this._rawDomainIndex[i][d] = _i));\n }\n }\n }\n\n protected _clearRawDomain() {\n this._rawDomainIndex = [];\n }\n}\n","import { BandScale, scaleWholeRangeSize } from '@visactor/vscale';\nimport { CartesianAxis } from './axis';\nimport type { ICartesianBandAxisSpec } from './interface';\nimport { ComponentTypeEnum } from '../../interface';\nimport { mixin } from '@visactor/vutils';\nimport { BandAxisMixin } from '../mixin/band-axis-mixin';\nimport type { StringOrNumber } from '../../../typings';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\n\nexport interface CartesianBandAxis\n extends Pick<\n BandAxisMixin,\n 'valueToPosition' | 'updateGroupScaleRange' | 'getPosition' | 'calcScales' | 'computeBandDomain'\n >,\n CartesianAxis {}\n\nexport class CartesianBandAxis extends CartesianAxis {\n static type = ComponentTypeEnum.cartesianBandAxis;\n type = ComponentTypeEnum.cartesianBandAxis;\n\n static specKey = 'axes';\n\n protected _scale: BandScale = new BandScale();\n\n protected declare _scales: BandScale[];\n\n protected computeDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[] {\n return this.computeBandDomain(data);\n }\n\n protected updateScaleRange() {\n const isChanged = super.updateScaleRange();\n this.updateGroupScaleRange();\n\n return isChanged;\n }\n\n protected initScales() {\n super.initScales();\n this.calcScales(this._defaultBandInnerPadding, this._defaultBandOuterPadding);\n }\n\n protected axisHelper() {\n const getScale = (depth: number) => {\n return this._scales[depth];\n };\n const getBandwidth = (depth: number) => {\n return getScale(depth).bandwidth();\n };\n\n return {\n isContinuous: false,\n dataToPosition: this.dataToPosition.bind(this),\n getScale,\n getBandwidth,\n getAxisType: () => this.type,\n getAxisId: () => this.id,\n isInverse: () => this._inverse\n };\n }\n\n transformScaleDomain() {\n this.updateFixedWholeLength();\n }\n\n updateFixedWholeLength() {\n if (this._scale) {\n if (this._spec.bandSize) {\n this._scale.bandwidth(this._spec.bandSize);\n }\n if (this._spec.maxBandSize) {\n this._scale.maxBandwidth(this._spec.maxBandSize);\n }\n if (this._spec.minBandSize) {\n this._scale.minBandwidth(this._spec.minBandSize);\n }\n // 更改 region 最大大小\n if (\n this._scale.isBandwidthFixed() &&\n this._spec.autoRegionSize &&\n (this._spec.bandSize || this._spec.maxBandSize)\n ) {\n const rangeSize = scaleWholeRangeSize(\n this._scale.domain().length,\n this._spec.bandSize ?? this._spec.maxBandSize,\n this._scale.paddingInner(),\n this._scale.paddingOuter()\n );\n if (['bottom', 'top'].includes(this._orient)) {\n this._regions.forEach(region => region.setMaxWidth(rangeSize));\n } else if (['left', 'right'].includes(this._orient)) {\n this._regions.forEach(region => region.setMaxHeight(rangeSize));\n }\n }\n }\n }\n}\n\nmixin(CartesianBandAxis, BandAxisMixin);\n\nexport const registerCartesianBandAxis = () => {\n registerAxis();\n Factory.registerComponent(CartesianBandAxis.type, CartesianBandAxis);\n};\n","import type { IEffect } from '../../../model/interface';\nimport { DataView } from '@visactor/vdataset';\nimport { isXAxis } from './util/common';\nimport { TimeUtil } from './util/time';\nimport { isArray } from '@visactor/vutils';\nimport { eachSeries } from '../../../util/model';\nimport { mergeSpec } from '../../../util/spec/merge-spec';\nimport type { ICartesianSeries } from '../../../series/interface';\nimport { CartesianLinearAxis } from './linear-axis';\nimport type { ICartesianTickDataOpt } from '@visactor/vutils-extension';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport type { Datum } from '../../../typings';\nimport { CompilableData } from '../../../compile/data/compilable-data';\nimport type { LinearAxisMixin } from '../mixin/linear-axis-mixin';\nimport type { ICartesianTimeAxisSpec } from './interface';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\n\nexport interface CartesianTimeAxis\n extends Pick,\n CartesianLinearAxis {}\n\nexport class CartesianTimeAxis<\n T extends ICartesianTimeAxisSpec = ICartesianTimeAxisSpec\n> extends CartesianLinearAxis {\n static type = ComponentTypeEnum.cartesianTimeAxis;\n type = ComponentTypeEnum.cartesianTimeAxis;\n\n static specKey = 'axes';\n\n protected _layerTickData!: CompilableData;\n\n protected _zero: boolean = false;\n\n effect: IEffect = {\n scaleUpdate: params => {\n this.computeData(params?.value);\n eachSeries(\n this._regions,\n s => {\n if (isXAxis(this.getOrient())) {\n (s as ICartesianSeries).setXAxisHelper(this.axisHelper());\n } else {\n (s as ICartesianSeries).setYAxisHelper(this.axisHelper());\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n };\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this._tick = mergeSpec({}, this._spec.tick, this._spec.layers?.[0]);\n }\n\n protected _initData() {\n super._initData();\n\n // 如果layer数组的第二项未配置,则不显示第二层\n if (this._spec.layers?.[1]) {\n const layerTickData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_layer_1_ticks` })\n .parse(this._scale, {\n type: 'scale'\n })\n .transform(\n {\n type: 'ticks',\n options: {\n ...this._tickTransformOption('cartesian'),\n tickCount: this._spec.layers[1].tickCount,\n forceTickCount: this._spec.layers[1].forceTickCount,\n tickStep: this._spec.layers[1].tickStep\n } as ICartesianTickDataOpt\n },\n false\n );\n this._layerTickData = new CompilableData(this._option, layerTickData);\n }\n }\n\n /**\n * @override\n */\n protected computeData(updateType?: 'range' | 'domain' | 'force'): void {\n super.computeData(updateType);\n if (this._layerTickData) {\n this._layerTickData.getDataView().reRunAllTransform();\n this._layerTickData.updateData();\n }\n }\n\n protected getLabelFormatMethod(): any {\n const timeUtil = TimeUtil.getInstance();\n const timeFormat1 = this._spec.layers?.[1]?.timeFormat || '%Y%m%d';\n const timeFormatMode1 = this._spec.layers?.[1]?.timeFormatMode || 'local';\n const timeFormatter1 = timeFormatMode1 === 'local' ? timeUtil.timeFormat : timeUtil.timeUTCFormat;\n\n const timeFormat0 = this._spec.layers?.[0]?.timeFormat || '%Y%m%d';\n const timeFormatMode0 = this._spec.layers?.[0]?.timeFormatMode || 'local';\n const timeFormatter0 = timeFormatMode0 === 'local' ? timeUtil.timeFormat : timeUtil.timeUTCFormat;\n\n return (value: any, datum: any, index: number, data: any[], layer: number) => {\n let timeValue: string;\n if (layer === 0) {\n timeValue = timeFormatter0(timeFormat0, value);\n } else {\n timeValue = timeFormatter1(timeFormat1, value);\n }\n\n return this._spec.label?.formatMethod ? this._spec.label.formatMethod(timeValue, datum) : timeValue;\n };\n }\n\n protected getLabelItems(length: number) {\n const items = [];\n if (isArray(this._tickData.getLatestData())) {\n items.push(\n this._tickData.getLatestData().map((obj: Datum) => {\n return {\n id: obj.value,\n label: obj.value,\n value: length === 0 ? 0 : this.dataToPosition([obj.value]) / length,\n rawValue: obj.value\n };\n })\n );\n }\n\n if (this._layerTickData && isArray(this._layerTickData.getLatestData())) {\n items.push(\n this._layerTickData.getLatestData().map((obj: Datum) => {\n const value = this.dataToPosition([obj.value]);\n return {\n id: obj.value,\n label: obj.value,\n value: value / length,\n rawValue: obj.value\n };\n })\n );\n }\n\n return items;\n }\n transformScaleDomain() {\n // do nothing\n }\n}\n\nexport const registerCartesianTimeAxis = () => {\n registerAxis();\n Factory.registerComponent(CartesianTimeAxis.type, CartesianTimeAxis);\n};\n","import { ticksBaseTransform, forceTicksBaseTransform, parseNiceOptions, d3TicksForLog } from './utils/tick-sample';\nimport { ContinuousScale } from './continuous-scale';\nimport { ScaleEnum } from './type';\nimport { logp, nice, powp, logNegative, expNegative, identity } from './utils/utils';\nimport type { ContinuousScaleType, NiceOptions, NiceType, PolymapType } from './interface';\n\n/**\n * 逆反函数\n * @param f\n * @returns\n */\nfunction reflect(f: (x: number) => number) {\n return (x: number) => -f(-x);\n}\n\nfunction limitPositiveZero(min: number = Number.EPSILON) {\n return (x: number) => {\n return Math.max(x, min);\n };\n}\n\nfunction limitNegativeZero(min: number = Number.EPSILON) {\n return (x: number) => {\n return Math.min(x, -min);\n };\n}\n\nexport class LogScale extends ContinuousScale {\n readonly type: ContinuousScaleType = ScaleEnum.Log;\n\n _base: number;\n _logs: (x: number) => number;\n _pows: (x: number) => number;\n _limit: (x: number) => number;\n\n constructor() {\n super(logp(10), powp(10));\n\n this._limit = limitPositiveZero();\n this._logs = this.transformer;\n this._pows = this.untransformer;\n this._domain = [1, 10];\n this._base = 10;\n }\n\n clone(): LogScale {\n return new LogScale()\n .domain(this._domain, true)\n .range(this._range, true)\n .unknown(this._unknown)\n .clamp(this.clamp(), null, true)\n .interpolate(this._interpolate, true)\n .base(this._base) as LogScale;\n }\n\n rescale(slience?: boolean) {\n if (slience) {\n return this;\n }\n super.rescale();\n\n const logs = logp(this._base);\n const pows = powp(this._base);\n\n const domain = this._niceDomain ?? this._domain;\n\n if (domain[0] < 0) {\n this._logs = reflect(logs);\n this._pows = reflect(pows);\n this._limit = limitNegativeZero();\n\n this.transformer = logNegative;\n this.untransformer = expNegative;\n } else {\n this._logs = logs;\n this._pows = pows;\n this._limit = limitPositiveZero();\n\n this.transformer = this._logs;\n this.untransformer = pows;\n }\n\n return this;\n }\n\n scale(x: any): any {\n x = Number(x);\n if (Number.isNaN(x) || (this._domainValidator && !this._domainValidator(x))) {\n return this._unknown;\n }\n if (!this._output) {\n this._output = (this._piecewise as PolymapType)(\n (this._niceDomain ?? this._domain).map(this._limit).map(this.transformer),\n this._calculateWholeRange(this._range),\n this._interpolate\n );\n }\n const output = this._output(this.transformer(this._limit(this._clamp(x))));\n\n return this._fishEyeTransform ? this._fishEyeTransform(output) : output;\n }\n\n base(): number;\n base(_: number, slience?: boolean): this;\n base(_?: number, slience?: boolean): this | number {\n if (!arguments.length) {\n return this._base;\n }\n\n this._base = _;\n return this.rescale(slience);\n }\n\n tickFormat() {\n // TODO\n return identity;\n }\n\n d3Ticks(count: number = 10, options?: { noDecimals?: boolean }) {\n const d = this.domain();\n const u = this._limit(d[0]);\n const v = this._limit(d[d.length - 1]);\n return d3TicksForLog(u, v, count, this._base, this.transformer, this.untransformer, options);\n }\n\n ticks(count: number = 10) {\n // return this.d3Ticks(count);\n const d = this.calculateVisibleDomain(this._range);\n return ticksBaseTransform(\n this._limit(d[0]),\n this._limit(d[d.length - 1]),\n count,\n this._base,\n this.transformer,\n this.untransformer\n );\n }\n\n /**\n * 生成tick数组,这个tick数组的长度就是count的长度\n * @param count\n */\n forceTicks(count: number = 10): any[] {\n const d = this.calculateVisibleDomain(this._range);\n return forceTicksBaseTransform(d[0], d[d.length - 1], count, this.transformer, this.untransformer);\n }\n\n /**\n * 基于给定step的ticks数组生成\n * @param step\n */\n stepTicks(step: number): any[] {\n const d = this.calculateVisibleDomain(this._range);\n return forceTicksBaseTransform(\n this._limit(d[0]),\n this._limit(d[d.length - 1]),\n step,\n this.transformer,\n this.untransformer\n );\n }\n\n nice(count: number = 10, option?: NiceOptions): this {\n const originalDomain = this._domain;\n let niceMinMax: number[] = [];\n let niceType: NiceType = null;\n\n if (option) {\n const res = parseNiceOptions(originalDomain, option);\n niceMinMax = res.niceMinMax;\n this._domainValidator = res.domainValidator;\n\n niceType = res.niceType;\n\n if (res.niceDomain) {\n this._niceDomain = res.niceDomain;\n this.rescale();\n return this;\n }\n } else {\n niceType = 'all';\n }\n\n if (niceType) {\n const niceDomain = nice(originalDomain.slice(), {\n floor: (x: number) => this._pows(Math.floor(this._logs(this._limit(x)))),\n ceil: (x: number) => (Math.abs(x) >= 1 ? Math.ceil(x) : this._pows(Math.ceil(this._logs(this._limit(x)))))\n });\n\n if (niceType === 'min') {\n niceDomain[niceDomain.length - 1] = niceMinMax[1] ?? niceDomain[niceDomain.length - 1];\n } else if (niceType === 'max') {\n niceDomain[0] = niceMinMax[0] ?? niceDomain[0];\n }\n\n this._niceDomain = niceDomain as number[];\n this.rescale();\n return this;\n }\n\n return this;\n }\n\n /**\n * 只对min区间进行nice\n * 如果保持某一边界的值,就很难有好的nice效果,所以这里实现就是nice之后还原固定的边界值\n */\n niceMin(): this {\n const maxD = this._domain[this._domain.length - 1];\n this.nice();\n const niceDomain = this._domain.slice();\n\n if (this._domain) {\n niceDomain[niceDomain.length - 1] = maxD;\n this._niceDomain = niceDomain;\n this.rescale();\n }\n\n return this;\n }\n\n /**\n * 只对max区间进行nice\n * 如果保持某一边界的值,就很难有好的nice效果,所以这里实现就是nice之后还原固定的边界值\n */\n niceMax(): this {\n const minD = this._domain[0];\n this.nice();\n const niceDomain = this._domain.slice();\n\n if (this._domain) {\n niceDomain[0] = minD;\n this._niceDomain = niceDomain;\n this.rescale();\n }\n\n return this;\n }\n}\n","import { CartesianLinearAxis } from './linear-axis';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { LinearAxisMixin } from '../mixin/linear-axis-mixin';\nimport { LogScale } from '@visactor/vscale';\nimport { mixin } from '@visactor/vutils';\nimport type { ICartesianLogAxisSpec } from './interface';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\n\nexport interface CartesianLogAxis\n extends Pick,\n CartesianLinearAxis {}\n\nexport class CartesianLogAxis extends CartesianLinearAxis {\n static type = ComponentTypeEnum.cartesianLogAxis;\n type = ComponentTypeEnum.cartesianLogAxis;\n\n static specKey = 'axes';\n\n protected _zero: boolean = false;\n\n protected _scale: LogScale = new LogScale();\n protected declare _scales: LogScale[];\n\n /**\n * @override\n */\n protected initScales() {\n super.initScales();\n this._scale.base(this._spec.base ?? 10);\n }\n\n transformScaleDomain() {\n // do nothing\n }\n}\n\nmixin(CartesianLogAxis, LinearAxisMixin);\n\nexport const registerCartesianLogAxis = () => {\n registerAxis();\n Factory.registerComponent(CartesianLogAxis.type, CartesianLogAxis);\n};\n","import type { ContinuousScaleType, NiceOptions, NiceType } from './interface';\nimport { LinearScale } from './linear-scale';\nimport { ScaleEnum } from './type';\nimport {\n d3TicksForLog,\n forceTicksBaseTransform,\n parseNiceOptions,\n tickIncrement,\n ticksBaseTransform\n} from './utils/tick-sample';\nimport { symlog, symexp, nice } from './utils/utils';\n\nexport class SymlogScale extends LinearScale {\n readonly type: ContinuousScaleType = ScaleEnum.Symlog;\n\n _const: number;\n\n constructor() {\n super(symlog(1), symexp(1));\n this._const = 1;\n }\n\n clone(): SymlogScale {\n return new SymlogScale()\n .domain(this._domain, true)\n .range(this._range, true)\n .unknown(this._unknown)\n .clamp(this.clamp(), null, true)\n .interpolate(this._interpolate, true)\n .constant(this._const) as SymlogScale;\n }\n\n constant(): number;\n constant(_: number, slience?: boolean): this;\n constant(_?: number, slience?: boolean): this | number {\n if (!arguments.length) {\n return this._const;\n }\n\n this._const = _;\n this.transformer = symlog(_);\n this.untransformer = symexp(_);\n\n return this.rescale(slience);\n }\n\n d3Ticks(count: number = 10, options?: { noDecimals?: boolean }) {\n const d = this.domain();\n const u = d[0];\n const v = d[d.length - 1];\n return d3TicksForLog(u, v, count, this._const, this.transformer, this.untransformer, options);\n }\n\n ticks(count: number = 10) {\n // return this.d3Ticks(count);\n const d = this.calculateVisibleDomain(this._range);\n return ticksBaseTransform(d[0], d[d.length - 1], count, this._const, this.transformer, this.untransformer);\n }\n\n /**\n * 生成tick数组,这个tick数组的长度就是count的长度\n * @param count\n */\n forceTicks(count: number = 10): any[] {\n const d = this.calculateVisibleDomain(this._range);\n return forceTicksBaseTransform(d[0], d[d.length - 1], count, this.transformer, this.untransformer);\n }\n\n /**\n * 基于给定step的ticks数组生成\n * @param step\n */\n stepTicks(step: number): any[] {\n const d = this.calculateVisibleDomain(this._range);\n return forceTicksBaseTransform(d[0], d[d.length - 1], step, this.transformer, this.untransformer);\n }\n\n nice(count: number = 10, option?: NiceOptions): this {\n const originalDomain = this._domain;\n let niceMinMax: number[] = [];\n let niceType: NiceType = null;\n\n if (option) {\n const res = parseNiceOptions(originalDomain, option);\n niceMinMax = res.niceMinMax;\n this._domainValidator = res.domainValidator;\n\n niceType = res.niceType;\n\n if (res.niceDomain) {\n this._niceDomain = res.niceDomain;\n this.rescale();\n return this;\n }\n } else {\n niceType = 'all';\n }\n\n if (niceType) {\n const niceDomain = nice(originalDomain.slice(), {\n floor: (x: number) => Math.floor(x),\n ceil: (x: number) => Math.ceil(x)\n });\n\n if (niceType === 'min') {\n niceDomain[niceDomain.length - 1] = niceMinMax[1] ?? niceDomain[niceDomain.length - 1];\n } else if (niceType === 'max') {\n niceDomain[0] = niceMinMax[0] ?? niceDomain[0];\n }\n\n this._niceDomain = niceDomain as number[];\n this.rescale();\n return this;\n }\n\n return this;\n }\n\n /**\n * 只对min区间进行nice\n * 如果保持某一边界的值,就很难有好的nice效果,所以这里实现就是nice之后还原固定的边界值\n */\n niceMin(): this {\n const maxD = this._domain[this._domain.length - 1];\n this.nice();\n const niceDomain = this._domain.slice();\n\n if (this._domain) {\n niceDomain[niceDomain.length - 1] = maxD;\n this._niceDomain = niceDomain;\n this.rescale();\n }\n\n return this;\n }\n\n /**\n * 只对max区间进行nice\n * 如果保持某一边界的值,就很难有好的nice效果,所以这里实现就是nice之后还原固定的边界值\n */\n niceMax(): this {\n const minD = this._domain[0];\n this.nice();\n const niceDomain = this._domain.slice();\n\n if (this._domain) {\n niceDomain[0] = minD;\n this._niceDomain = niceDomain;\n this.rescale();\n }\n\n return this;\n }\n}\n","import { CartesianLinearAxis } from './linear-axis';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { LinearAxisMixin } from '../mixin/linear-axis-mixin';\nimport { SymlogScale } from '@visactor/vscale';\nimport { mixin } from '@visactor/vutils';\nimport type { ICartesianSymlogAxisSpec } from './interface';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\n\nexport interface CartesianSymlogAxis\n extends Pick,\n CartesianLinearAxis {}\n\nexport class CartesianSymlogAxis<\n T extends ICartesianSymlogAxisSpec = ICartesianSymlogAxisSpec\n> extends CartesianLinearAxis {\n static type = ComponentTypeEnum.cartesianSymlogAxis;\n type = ComponentTypeEnum.cartesianSymlogAxis;\n\n static specKey = 'axes';\n\n protected _zero: boolean = false;\n\n protected _scale: SymlogScale = new SymlogScale();\n protected declare _scales: SymlogScale[];\n\n /**\n * @override\n */\n protected initScales() {\n super.initScales();\n this._scale.constant(this._spec.constant ?? 10);\n }\n\n transformScaleDomain() {\n // do nothing\n }\n}\n\nmixin(CartesianSymlogAxis, LinearAxisMixin);\n\nexport const registerCartesianSymlogAxis = () => {\n registerAxis();\n Factory.registerComponent(CartesianSymlogAxis.type, CartesianSymlogAxis);\n};\n","import { ComponentTypeEnum } from '../../../interface';\nimport type { IPolarAxisCommonSpec } from '../interface';\n\nexport const getPolarAxisInfo = (spec: IPolarAxisCommonSpec) => {\n // TODO: 基于数据处理 axis 类型\n const axisType = spec.type ?? (spec.orient === 'angle' ? 'band' : 'linear');\n const componentName = `${ComponentTypeEnum.polarAxis}-${axisType}`;\n return { axisType, componentName };\n};\n","import { POLAR_DEFAULT_RADIUS, POLAR_END_ANGLE, POLAR_END_RADIAN } from '../../../constant/polar';\nimport type { IBaseScale, BandScale, LinearScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous } from '@visactor/vscale';\nimport { ChartEvent, LayoutZIndex, POLAR_START_ANGLE, POLAR_START_RADIAN } from '../../../constant';\nimport type { IPolarAxis, IPolarAxisCommonSpec, IPolarAxisCommonTheme } from './interface';\nimport type { IComponentOption } from '../../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { Factory } from '../../../core/factory';\nimport { mergeSpec } from '../../../util/spec/merge-spec';\nimport { eachSeries } from '../../../util/model';\nimport { polarToCartesian } from '../../../util/math';\nimport type { IPolarTickDataOpt, CoordinateType } from '@visactor/vutils-extension';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IPolarSeries } from '../../../series/interface';\nimport type { IPoint, IPolarOrientType, IPolarPoint, Datum, StringOrNumber, ILayoutType } from '../../../typings';\nimport { isPolarAxisSeries } from '../../../series/util/utils';\nimport { getAxisLabelOffset, isValidPolarAxis } from '../util';\n\nimport type { Dict, Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { PointService, degreeToRadian, isValid, isArray, isValidNumber } from '@visactor/vutils';\nimport type { IEffect, IModelSpecInfo } from '../../../model/interface';\nimport { CompilableData } from '../../../compile/data/compilable-data';\nimport { AxisComponent } from '../base-axis';\nimport type { IBandAxisSpec, ITick } from '../interface';\nimport { HOOK_EVENT } from '@visactor/vgrammar-core';\nimport { getPolarAxisInfo } from './util';\n\nexport abstract class PolarAxis\n extends AxisComponent\n implements IPolarAxis\n{\n static type = ComponentTypeEnum.polarAxis;\n type = ComponentTypeEnum.polarAxis;\n name: string = ComponentTypeEnum.polarAxis;\n\n static specKey = 'axes';\n\n protected readonly _defaultBandPosition = 0;\n protected readonly _defaultBandInnerPadding = 0;\n protected readonly _defaultBandOuterPadding = 0;\n\n layoutType: ILayoutType = 'absolute';\n layoutZIndex: number = LayoutZIndex.Axis;\n protected _tick: ITick | undefined = undefined;\n\n protected _center: IPoint | null = null;\n get center() {\n return this._center;\n }\n\n protected _startAngle: number = POLAR_START_RADIAN;\n get startAngle() {\n return this._startAngle;\n }\n\n protected _endAngle: number = POLAR_END_RADIAN;\n get endAngle() {\n return this._endAngle;\n }\n\n protected _orient: IPolarOrientType = 'radius';\n getOrient() {\n return this._orient;\n }\n\n protected _groupScales: IBaseScale[] = [];\n getGroupScales() {\n return this._groupScales;\n }\n\n private _axisStyle: any;\n private _gridStyle: any;\n\n static getSpecInfo(chartSpec: any): Maybe {\n const axesSpec = chartSpec[this.specKey];\n if (!axesSpec) {\n return null;\n }\n\n if (!isArray(axesSpec)) {\n if (!isValidPolarAxis(axesSpec)) {\n return null;\n }\n const { axisType, componentName } = getPolarAxisInfo(axesSpec);\n axesSpec.center = chartSpec.center;\n axesSpec.startAngle = chartSpec.startAngle ?? POLAR_START_ANGLE;\n axesSpec.endAngle =\n chartSpec.endAngle ?? (isValid(chartSpec.startAngle) ? chartSpec.startAngle + 360 : POLAR_END_ANGLE);\n axesSpec.type = axisType;\n return [\n {\n spec: axesSpec,\n specPath: [this.specKey],\n type: componentName\n }\n ];\n }\n const specInfos: IModelSpecInfo[] = [];\n let angleAxisIndex: number;\n const radiusAxisSpecInfos: IModelSpecInfo[] = [];\n axesSpec.forEach((s: any, i: number) => {\n if (!isValidPolarAxis(s)) {\n return;\n }\n const { axisType, componentName } = getPolarAxisInfo(s);\n s.center = chartSpec.center;\n s.startAngle = chartSpec.startAngle ?? POLAR_START_ANGLE;\n s.endAngle = chartSpec.endAngle ?? (isValid(chartSpec.startAngle) ? chartSpec.startAngle + 360 : POLAR_END_ANGLE);\n // 优先使用outerRadius, 但要兼容s.radius, spec.radius\n s.outerRadius = s.radius ?? chartSpec.outerRadius ?? chartSpec.radius ?? POLAR_DEFAULT_RADIUS;\n s.type = axisType;\n const info = {\n spec: s,\n specIndex: i,\n specPath: [this.specKey, i],\n type: componentName\n };\n specInfos.push(info);\n if (s.orient === 'radius') {\n radiusAxisSpecInfos.push(info);\n } else {\n angleAxisIndex = i;\n }\n });\n radiusAxisSpecInfos.forEach(info => {\n (info as any).angleAxisIndex = angleAxisIndex;\n });\n return specInfos;\n }\n\n static createComponent(specInfo: IModelSpecInfo, options: IComponentOption) {\n const { spec, ...others } = specInfo;\n const C = Factory.getComponentInKey(others.type);\n if (C) {\n return new C(spec, {\n ...options,\n ...others\n }) as IPolarAxis;\n }\n options.onError(`Component ${others.type} not found`);\n return null;\n }\n\n effect: IEffect = {\n scaleUpdate: param => {\n this.computeData(param?.value);\n eachSeries(\n this._regions,\n s => {\n if (this.getOrient() === 'radius') {\n (s as IPolarSeries).radiusAxisHelper = this.axisHelper();\n } else {\n (s as IPolarSeries).angleAxisHelper = this.axisHelper();\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n };\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n if (this.visible) {\n this._axisStyle = this._getAxisAttributes();\n this._gridStyle = this._getGridAttributes();\n }\n\n this._tick = this._spec.tick;\n this._orient = this._spec.orient === 'angle' ? 'angle' : 'radius';\n this._center = this._spec.center;\n const chartSpec = this.getChart().getSpec() as any;\n const startAngle = this._spec.startAngle ?? chartSpec.startAngle;\n const endAngle = this._spec.endAngle ?? chartSpec.endAngle;\n this._startAngle = degreeToRadian(startAngle ?? POLAR_START_ANGLE);\n this._endAngle = degreeToRadian(endAngle ?? (isValid(startAngle) ? startAngle + 360 : POLAR_END_ANGLE));\n this._inverse = this._spec.inverse;\n }\n\n _transformLayoutPosition = (pos: Partial) => {\n const region = this.getRegions()?.[0];\n return region ? region.getLayoutStartPoint() : pos;\n };\n\n onLayoutEnd(ctx: any): void {\n const isChanged = this.updateScaleRange();\n\n if (isChanged) {\n this.updateSeriesScale();\n this.event.emit(ChartEvent.scaleUpdate, { model: this, value: 'range' });\n }\n\n super.onLayoutEnd(ctx);\n }\n\n onRender(ctx: any): void {\n // do nothing\n }\n\n changeRegions(/** regions: IRegion[] */): void {\n // do nothing\n }\n\n // data\n protected _initData() {\n const tickData = this._initTickDataSet(this._tickTransformOption('polar'));\n tickData.target.addListener('change', this._forceLayout.bind(this));\n this._tickData = new CompilableData(this._option, tickData);\n }\n\n protected _tickTransformOption(coordinateType: CoordinateType) {\n return {\n ...super._tickTransformOption(coordinateType),\n noDecimal: this._tick.noDecimals,\n startAngle: this.startAngle,\n labelOffset: getAxisLabelOffset(this._spec),\n getRadius: () => this.getOuterRadius()\n } as IPolarTickDataOpt;\n }\n\n afterCompile() {\n const product = this._axisMark?.getProduct();\n if (product) {\n product.addEventListener(HOOK_EVENT.AFTER_ELEMENT_ENCODE, () => {\n if (this._isLayout === false) {\n // 布局结束之后再进行插件的调用\n this._delegateAxisContainerEvent(product.getGroupGraphicItem());\n }\n });\n }\n }\n\n protected updateScaleRange() {\n const prevRange = this._scale.range();\n let newRange: [number, number];\n\n if (this.getOrient() === 'radius') {\n newRange = this._inverse\n ? [this.computeLayoutOuterRadius(), this.computeLayoutInnerRadius()]\n : [this.computeLayoutInnerRadius(), this.computeLayoutOuterRadius()];\n } else {\n newRange = this._inverse ? [this._endAngle, this._startAngle] : [this._startAngle, this._endAngle];\n }\n\n if (prevRange && newRange && prevRange[0] === newRange[0] && prevRange[1] === newRange[1]) {\n return false;\n }\n\n this._scale.range(newRange);\n\n return true;\n }\n\n protected collectData(depth: number, rawData?: boolean) {\n const data: { min: number; max: number; values: any[] }[] = [];\n eachSeries(\n this._regions,\n s => {\n let field: string | string[];\n if (depth > 0) {\n field = s.getGroups()?.fields?.[depth];\n } else {\n field =\n this.getOrient() === 'radius' ? (s as IPolarSeries).getRadiusField() : (s as IPolarSeries).getAngleField();\n }\n field = (isArray(field) ? (isContinuous(this._scale.type) ? field : [field[0]]) : [field]) as string[];\n if (!depth) {\n this._dataFieldText = s.getFieldAlias(field[0]);\n }\n\n if (field) {\n const viewData = s.getViewData();\n if (rawData) {\n field.forEach(f => {\n data.push(s.getRawDataStatisticsByField(f, false) as { min: number; max: number; values: any[] });\n });\n } else if (viewData && viewData.latestData && viewData.latestData.length) {\n const seriesData = s.getViewDataStatistics?.();\n\n field.forEach(f => {\n if (seriesData?.latestData?.[f]) {\n data.push(seriesData.latestData[f]);\n }\n });\n }\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n return data;\n }\n\n protected abstract computeDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[];\n\n protected updateSeriesScale(): void {\n eachSeries(\n this._regions,\n s => {\n if (this.getOrient() === 'radius') {\n (s as IPolarSeries).setRadiusScale(this._scale);\n (s as IPolarSeries).radiusAxisHelper = this.axisHelper();\n } else {\n (s as IPolarSeries).setAngleScale(this._scale);\n (s as IPolarSeries).angleAxisHelper = this.axisHelper();\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n\n protected getSeriesStatisticsField(s: IPolarSeries) {\n const f = this.getOrient() === 'radius' ? s.getRadiusField() : s.getAngleField();\n if (isContinuous(this._scale.type)) {\n return f;\n }\n return [f[0]];\n }\n\n protected initGroupScales() {\n // do nothing\n }\n\n // axisHelper\n protected axisHelper() {\n const getScale = (depth: number) => {\n return this._scales[depth];\n };\n\n const helper = {\n isContinuous: isContinuous(this._scale.type),\n dataToPosition: this.dataToPosition.bind(this),\n coordToPoint: this.coordToPoint.bind(this),\n pointToCoord: this.pointToCoord.bind(this),\n center: this.getCenter.bind(this),\n getScale,\n getAxisId: () => this.id\n };\n return helper;\n }\n\n positionToData(position: IPoint) {\n const coord = this.pointToCoord(position);\n if (this.getOrient() === 'radius') {\n return this.invert(coord.radius);\n }\n return this.invert(coord.angle);\n }\n\n /**\n * 将半径和角度转换为笛卡尔坐标点\n * @param point 角度 & 弧度信息\n * @returns 笛卡尔坐标点 { x, y }\n */\n coordToPoint(point: IPolarPoint): IPoint {\n // center & startAngle 都是坐标系转换的配置,在 scale 中不生效,仅在最终转换时生效\n const angle = point.angle;\n const { x: centerX, y: centerY } = this.getCenter();\n const p = polarToCartesian({ angle, radius: point.radius });\n return {\n x: p.x + centerX,\n y: p.y + centerY\n };\n }\n\n /**\n * 将笛卡尔坐标转换为对应的半径和弧度\n * @param point 笛卡尔坐标点 { x, y }\n * @returns 角度 & 弧度信息 { radius, angle }\n */\n pointToCoord(point: IPoint): IPolarPoint {\n const { x: centerX, y: centerY } = this.getCenter();\n let dx = point.x - centerX;\n let dy = point.y - centerY;\n const startAngle = this._startAngle;\n const endAngle = this._endAngle;\n const radius = Math.sqrt(dx * dx + dy * dy);\n dx /= radius;\n dy /= radius;\n\n let radian = Math.atan2(dy, dx);\n if (radian < startAngle) {\n while (radian <= startAngle) {\n radian += Math.PI * 2;\n }\n }\n if (radian > endAngle) {\n while (radian >= endAngle) {\n radian -= Math.PI * 2;\n }\n }\n return {\n radius,\n angle: radian\n };\n }\n\n /**\n * 获取坐标轴圆心位置\n * @returns 圆心位置\n */\n getCenter(): IPoint {\n return {\n x: this._center?.x || this.getRefLayoutRect().width / 2,\n y: this._center?.y || this.getRefLayoutRect().height / 2\n };\n }\n\n /**\n * 获取极坐标半径值\n * @returns 半径数值\n */\n getOuterRadius(): number {\n return this.computeLayoutOuterRadius();\n }\n\n /**\n * 获取极坐标内半径值\n * @returns 内半径数值\n */\n getInnerRadius(): number {\n return this.computeLayoutInnerRadius();\n }\n\n tickValues(): number[] {\n if (this._tickData) {\n const latestData = this._tickData.getLatestData();\n\n if (latestData && !isArray(latestData)) {\n // the ticks data of scale has not be calculated\n this.computeData('force');\n } else {\n return latestData || [];\n }\n }\n\n return (this._scale as BandScale | LinearScale).ticks();\n }\n\n updateLayoutAttribute(): void {\n if (this._visible) {\n if (this.getOrient() === 'radius') {\n this._layoutRadiusAxis();\n } else {\n this._layoutAngleAxis();\n }\n }\n\n super.updateLayoutAttribute();\n }\n\n private _layoutAngleAxis(): void {\n const center = this.getCenter();\n const radius = this.computeLayoutOuterRadius();\n const innerRadius = this.computeLayoutInnerRadius();\n const angleRange = this._endAngle - this._startAngle;\n const items = isArray(this._tickData.getLatestData())\n ? this._tickData.getLatestData().map((obj: Datum) => {\n const angle = this.dataToPosition([obj.value]);\n return {\n id: obj.value,\n label: obj.value,\n value: (angle - this._startAngle) / angleRange,\n rawValue: obj.value\n };\n })\n : [];\n const commonAttrs = {\n ...this.getLayoutStartPoint(),\n inside: this._spec.inside,\n center,\n radius,\n innerRadius,\n startAngle: this._startAngle,\n endAngle: this._endAngle\n };\n const attrs: any = {\n ...commonAttrs,\n title: {\n text: this._spec.title.text || this._dataFieldText\n },\n items: items.length ? [items] : [],\n orient: 'angle'\n };\n if (this._spec.grid.visible) {\n attrs.grid = {\n type: 'line',\n smoothLink: true,\n items,\n ...commonAttrs\n };\n }\n this._update(attrs);\n }\n\n private _layoutRadiusAxis(): void {\n const center = this.getCenter();\n const radius = this.computeLayoutOuterRadius();\n const innerRadius = this.computeLayoutInnerRadius();\n const endPoint = this.coordToPoint({ angle: this._startAngle, radius });\n const startPoint = this.coordToPoint({ angle: this._startAngle, radius: innerRadius });\n const distance = PointService.distancePP(startPoint, endPoint);\n const items = isArray(this._tickData.getLatestData())\n ? this._tickData.getLatestData().map((obj: Datum) => {\n const value = this.dataToPosition([obj.value]);\n return {\n id: obj.value,\n label: obj.value,\n value: (value - innerRadius) / distance,\n rawValue: obj.value\n };\n })\n : [];\n const commonAttrs = {\n ...this.getLayoutStartPoint(),\n start: startPoint,\n end: endPoint,\n verticalFactor: -1\n };\n const attrs: any = {\n ...commonAttrs,\n title: {\n text: this._spec.title.text || this._dataFieldText\n },\n items: items.length ? [items] : [],\n orient: 'radius'\n };\n if (this._spec.grid?.visible) {\n attrs.grid = {\n items,\n type: this._spec.grid?.smooth ? 'circle' : 'polygon',\n center,\n closed: true,\n sides: this._getRelatedAngleAxis()?.tickValues().length,\n startAngle: this._startAngle,\n endAngle: this._endAngle,\n ...commonAttrs\n };\n }\n this._update(attrs);\n }\n\n protected _getRelatedAngleAxis(): IPolarAxis | undefined {\n const index = (this._option as any).angleAxisIndex;\n if (isValid(index)) {\n return this._option.getComponentByIndex(this.specKey, index) as IPolarAxis;\n }\n return undefined;\n }\n\n private computeLayoutOuterRadius() {\n /**\n * 兼容radius旧配置\n * @deprecated use outerRadius instead\n */\n const radius = this._spec.outerRadius ?? this._spec.radius;\n const outerRadius = radius ?? this.getRefSeriesRadius().outerRadius;\n const { width, height } = this.getRefLayoutRect();\n return (Math.min(width, height) / 2) * outerRadius;\n }\n\n private computeLayoutInnerRadius() {\n const innerRadius = this._spec.innerRadius ?? this.getRefSeriesRadius().innerRadius;\n const { width, height } = this.getRefLayoutRect();\n return (Math.min(width, height) / 2) * innerRadius;\n }\n\n private getRefLayoutRect() {\n return this.getRegions()[0].getLayoutRect();\n }\n\n private getRefSeriesRadius() {\n let outerRadius: number = POLAR_DEFAULT_RADIUS;\n let innerRadius: number = 0;\n const chartSpec = this.getChart().getSpec() as any;\n // FIXME: 为了保证 common 图表能够应用系列的 radius 配置,当前从相应的 region 中取到 radius 信息\n eachSeries(\n this.getRegions(),\n s => {\n const series = s as IPolarSeries;\n if (isPolarAxisSeries(series.type)) {\n const {\n outerRadius: seriesRadius = chartSpec.outerRadius,\n innerRadius: seriesInnerRadius = chartSpec.innerRadius\n } = series;\n if (isValidNumber(seriesRadius)) {\n outerRadius = seriesRadius;\n }\n if (isValidNumber(seriesInnerRadius)) {\n innerRadius = seriesInnerRadius;\n }\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n return { outerRadius, innerRadius };\n }\n\n private _update(attrs: Dict) {\n const { grid: gridAttrs, ...axisAttrs } = attrs;\n const axisProduct = this._axisMark.getProduct(); // 获取语法元素并更新\n axisProduct.encode(mergeSpec({}, this._axisStyle, axisAttrs));\n\n if (this._gridMark) {\n const gridProduct = this._gridMark.getProduct(); // 获取语法元素并更新\n gridProduct.encode(mergeSpec({}, this._gridStyle, gridAttrs));\n }\n }\n\n invert(value: number): number {\n if (this.getOrient() === 'angle' && this._scale.type === 'band') {\n //极坐标轴需要手动取模,超出range时默认会截断\n const range = this._scale.range();\n const rangeValue = range[range.length - 1] - range[0];\n const bandPosition = (this.getSpec() as IBandAxisSpec).bandPosition ?? this._defaultBandPosition;\n const offset = bandPosition === 0.5 ? 0 : (this._scale as BandScale).bandwidth() / 2;\n if (range[0] < 0) {\n const angle = value + offset;\n const transformedAngle = ((angle + Math.abs(range[0])) % rangeValue) - Math.abs(range[0]);\n return this._scale.invert(transformedAngle);\n }\n return this._scale.invert((value + offset) % rangeValue);\n }\n\n return this._scale.invert(value);\n }\n}\n","import { BandScale } from '@visactor/vscale';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { PolarAxis } from './axis';\nimport { mixin } from '@visactor/vutils';\nimport { BandAxisMixin } from '../mixin/band-axis-mixin';\nimport type { StringOrNumber } from '../../../typings';\nimport type { IPolarBandAxisSpec } from './interface';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\n\nexport interface PolarBandAxis\n extends Pick<\n BandAxisMixin,\n 'valueToPosition' | 'updateGroupScaleRange' | 'getPosition' | 'calcScales' | 'computeBandDomain'\n >,\n PolarAxis {}\n\nexport class PolarBandAxis extends PolarAxis {\n static type = ComponentTypeEnum.polarBandAxis;\n type = ComponentTypeEnum.polarBandAxis;\n\n static specKey = 'axes';\n\n protected _scale: BandScale = new BandScale();\n\n protected declare _scales: BandScale[];\n\n protected computeDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[] {\n return this.computeBandDomain(data);\n }\n\n protected updateScaleRange() {\n const isChanged = super.updateScaleRange();\n this.updateGroupScaleRange();\n\n return isChanged;\n }\n\n // axisHelper\n protected axisHelper() {\n const helper = super.axisHelper();\n const getBandwidth = (depth: number) => {\n return (helper.getScale(depth) as BandScale).bandwidth();\n };\n\n return { ...helper, getBandwidth };\n }\n\n protected initScales() {\n super.initScales();\n this.calcScales(this._defaultBandInnerPadding, this._defaultBandOuterPadding);\n }\n\n transformScaleDomain() {\n // do nothing\n }\n}\nmixin(PolarBandAxis, BandAxisMixin);\n\nexport const registerPolarBandAxis = () => {\n registerAxis();\n Factory.registerComponent(PolarBandAxis.type, PolarBandAxis);\n};\n","import { LinearScale } from '@visactor/vscale';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { PolarAxis } from './axis';\nimport type { IPolarLinearAxisSpec } from './interface/spec';\nimport { LinearAxisMixin } from '../mixin/linear-axis-mixin';\nimport { mixin } from '@visactor/vutils';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\n\nexport interface PolarLinearAxis\n extends Pick<\n LinearAxisMixin,\n 'setExtraAttrFromSpec' | 'transformScaleDomain' | 'valueToPosition' | 'computeLinearDomain' | 'setScaleNice'\n >,\n PolarAxis {}\n\nexport class PolarLinearAxis extends PolarAxis {\n static type = ComponentTypeEnum.polarLinearAxis;\n type = ComponentTypeEnum.polarLinearAxis;\n\n static specKey = 'axes';\n\n protected _zero: boolean = true;\n protected _nice: boolean = true;\n\n protected _scale = new LinearScale();\n protected declare _groupScales: LinearScale[];\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this.setExtraAttrFromSpec();\n }\n\n protected initScales() {\n super.initScales();\n this.setScaleNice();\n }\n\n protected computeDomain(data: { min: number; max: number; values: any[] }[]): number[] {\n return this.computeLinearDomain(data);\n }\n}\n\nmixin(PolarLinearAxis, LinearAxisMixin);\n\nexport const registerPolarLinearAxis = () => {\n registerAxis();\n Factory.registerComponent(PolarLinearAxis.type, PolarLinearAxis);\n};\n","export const DEFAULT_SHAPE_SIZE = 10;\nexport const DEFAULT_SHAPE_SPACE = 8;\nexport const DEFAULT_LABEL_SPACE = 8;\nexport const DEFAULT_VALUE_SPACE = 8;\nexport const DEFAULT_ITEM_SPACE_COL = 16;\nexport const DEFAULT_ITEM_SPACE_ROW = 8;\nexport const DEFAULT_TITLE_SPACE = 12;\nexport const DEFAULT_PAGER_SPACE = 12;\n\nexport enum LegendStateValue {\n selected = 'selected',\n unSelected = 'unSelected',\n selectedHover = 'selectedHover',\n unSelectedHover = 'unSelectedHover',\n focus = 'focus'\n}\n\nexport enum LegendEvent {\n legendItemHover = 'legendItemHover',\n legendItemUnHover = 'legendItemUnHover',\n legendItemClick = 'legendItemClick',\n legendItemAttributeUpdate = 'legendItemAttributeUpdate'\n}\n\nexport enum LEGEND_ELEMENT_NAME {\n innerView = 'innerView',\n title = 'legendTitle',\n item = 'legendItem',\n itemShape = 'legendItemShape',\n itemLabel = 'legendItemLabel',\n itemValue = 'legendItemValue',\n focus = 'legendItemFocus'\n}\n","/**\n * TODO:\n * align 为 'top' 时,操作区域同标题的间距有问题\n */\nimport { isValid, normalizePadding } from '@visactor/vutils';\nimport type { IGroup, INode } from '@visactor/vrender-core';\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport type { TagAttributes } from '../tag';\nimport { Tag } from '../tag';\nimport type { LegendBaseAttributes, LegendTitle } from './type';\nimport { LEGEND_ELEMENT_NAME } from './constant';\n\nexport abstract class LegendBase extends AbstractComponent> {\n name = 'legend';\n protected _innerView!: IGroup;\n protected _title: Tag | null = null;\n\n render() {\n this.removeAllChild();\n\n const { interactive = true, title, padding = 0 } = this.attribute;\n const parsedPadding = normalizePadding(padding);\n\n // 创建一个内部的 container 用于存储所有的元素\n const innerView = graphicCreator.group({\n x: parsedPadding[3],\n y: parsedPadding[0],\n pickable: interactive,\n childrenPickable: interactive\n });\n innerView.name = LEGEND_ELEMENT_NAME.innerView;\n this.add(innerView);\n this._innerView = innerView;\n\n if (title?.visible) {\n // 渲染标题\n this._renderTitle(title);\n }\n\n this._renderContent();\n\n this._adjustLayout();\n\n if (interactive) {\n this._bindEvents();\n }\n\n const viewBounds = this._innerView.AABBBounds;\n this.attribute.width = viewBounds.width() + parsedPadding[1] + parsedPadding[3];\n this.attribute.height = viewBounds.height() + parsedPadding[0] + parsedPadding[2];\n }\n /**\n * 图例主体内容渲染\n */\n protected abstract _renderContent(): void;\n /**\n * 事件绑定逻辑\n */\n protected abstract _bindEvents(): void;\n\n private _renderTitle(title: LegendTitle) {\n const { text = '', textStyle, padding = 0, background, minWidth, maxWidth, shape } = title;\n\n const tagAttrs: TagAttributes = {\n x: 0,\n y: 0,\n text,\n textStyle,\n padding: normalizePadding(padding),\n minWidth,\n maxWidth\n };\n\n if (shape && shape.visible) {\n tagAttrs.shape = {\n visible: true,\n ...shape.style\n };\n if (isValid(shape.space)) {\n tagAttrs.space = shape.space;\n }\n }\n\n if (background && background.visible) {\n tagAttrs.panel = {\n visible: true,\n ...background.style\n };\n }\n\n const titleTag = new Tag(tagAttrs);\n titleTag.name = LEGEND_ELEMENT_NAME.title;\n this._title = titleTag;\n\n this._innerView.add(titleTag as unknown as INode);\n }\n\n private _adjustLayout() {\n // 调整 title\n if (this._title) {\n const innerViewWidth = this._innerView.AABBBounds.width();\n const titleWidth = this._title.AABBBounds.width();\n\n const align = this.attribute.title?.align;\n if (align === 'center') {\n this._title.setAttribute('x', (innerViewWidth - titleWidth) / 2);\n } else if (align === 'end') {\n this._title.setAttribute('x', innerViewWidth - titleWidth);\n }\n }\n }\n}\n","import { registerGroup, registerSymbol, registerText } from '@visactor/vrender-kits';\n\nexport function loadPagerComponent() {\n registerGroup();\n registerSymbol();\n registerText();\n}\n","/**\n * @description 翻页器\n */\nimport type { ISymbol, IText, FederatedPointerEvent } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { merge, normalizePadding, isNumber } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport { measureTextSize } from '../util';\nimport type { PagerAttributes } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadPagerComponent } from './register';\n\nconst DEFAULT_HANDLER_STYLE: PagerAttributes['handler'] = {\n space: 8,\n style: {\n fill: 'rgb(47, 69, 84)',\n cursor: 'pointer',\n size: 15\n },\n state: {\n disable: {\n fill: 'rgb(170, 170, 170)',\n cursor: 'not-allowed'\n },\n hover: {}\n }\n};\n\nloadPagerComponent();\n\nexport class Pager extends AbstractComponent> {\n name = 'pager';\n\n private _current = 1;\n getCurrent() {\n return this._current;\n }\n\n private _total!: number;\n preHandler!: ISymbol | null;\n nextHandler!: ISymbol | null;\n text!: IText | null;\n\n static defaultAttributes: Partial = {\n handler: DEFAULT_HANDLER_STYLE,\n textStyle: {\n fill: 'rgb(51, 51, 51)',\n fontSize: 12\n }\n };\n\n constructor(attributes: PagerAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Pager.defaultAttributes, attributes));\n }\n\n protected render() {\n this._reset();\n const {\n layout = 'horizontal',\n handler = DEFAULT_HANDLER_STYLE,\n total,\n defaultCurrent = 1,\n textStyle,\n padding = 0\n } = this.attribute;\n\n this._current = defaultCurrent;\n const parsedPadding = normalizePadding(padding);\n const isHorizontal = layout === 'horizontal';\n\n const container = graphicCreator.group({\n x: 0,\n y: 0\n });\n\n const handlerStyle = handler.style || {};\n const handlerSize = handlerStyle.size || 15;\n const handlerSpace = handler.space ?? 8;\n const handlerState = handler.state || {};\n\n let { preShape, nextShape } = handler;\n if (!preShape) {\n preShape = isHorizontal ? 'triangleLeft' : 'triangleUp';\n }\n if (!nextShape) {\n nextShape = isHorizontal ? 'triangleRight' : 'triangleDown';\n }\n\n const preHandler = graphicCreator.symbol({\n strokeBoundsBuffer: 0,\n pickMode: 'imprecise',\n ...handlerStyle,\n x: 0,\n y: 0,\n symbolType: preShape,\n size: handlerSize\n });\n preHandler.states = handlerState;\n preHandler.name = 'preHandler';\n this.preHandler = preHandler;\n container.add(preHandler);\n\n // 获取文本的最大长度,如果不固定的话随着文本的变化整体会发生抖动\n const { width: maxTextWidth, height: maxTextHeight } = measureTextSize(\n `${total}/${total}`,\n {\n textAlign: 'center',\n textBaseline: 'middle',\n ...textStyle\n },\n this.stage?.getTheme().text.fontFamily\n );\n\n const handlerSizeX = isNumber(handlerSize) ? handlerSize : handlerSize[0];\n const handlerSizeY = isNumber(handlerSize) ? handlerSize : handlerSize[1];\n\n const text = graphicCreator.text({\n x: isHorizontal ? handlerSizeX / 2 + handlerSpace + maxTextWidth / 2 : 0,\n y: isHorizontal ? 0 : handlerSizeY / 2 + handlerSpace + maxTextHeight / 2,\n text: `${defaultCurrent}/${total}`,\n textAlign: 'center',\n textBaseline: 'middle',\n lineHeight: textStyle?.fontSize,\n ...textStyle\n });\n this.text = text;\n container.add(text);\n\n const nextHandler = graphicCreator.symbol({\n strokeBoundsBuffer: 0,\n pickMode: 'imprecise',\n ...handlerStyle,\n x: isHorizontal ? handlerSizeX + handlerSpace * 2 + maxTextWidth : 0,\n y: isHorizontal ? 0 : handlerSizeY + handlerSpace * 2 + maxTextHeight,\n symbolType: nextShape,\n size: handlerSize\n });\n nextHandler.name = 'nextHandler';\n nextHandler.states = handlerState;\n this.nextHandler = nextHandler;\n\n container.add(nextHandler);\n\n if (this._total === 1) {\n preHandler.addState('disable');\n nextHandler.addState('disable');\n } else if (this._current === 1) {\n preHandler.addState('disable');\n } else if (this._current === total) {\n nextHandler.addState('disable');\n }\n\n const containerBounds = container.AABBBounds;\n const width = containerBounds.width();\n const height = containerBounds.height();\n\n container.translateTo(0 - containerBounds.x1 + parsedPadding[3], 0 - containerBounds.y1 + parsedPadding[0]);\n this.add(container);\n\n this.attribute.width = width + parsedPadding[1] + parsedPadding[3];\n this.attribute.height = height + parsedPadding[0] + parsedPadding[2];\n\n this._bindEvents();\n }\n\n private _bindEvents(): void {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n if (this.preHandler) {\n this.preHandler.addEventListener('pointerenter', this._onHover as EventListenerOrEventListenerObject);\n this.preHandler.addEventListener('pointerleave', this._onUnHover as EventListenerOrEventListenerObject);\n this.preHandler.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n\n if (this.nextHandler) {\n this.nextHandler.addEventListener('pointerenter', this._onHover as EventListenerOrEventListenerObject);\n this.nextHandler.addEventListener('pointerleave', this._onUnHover as EventListenerOrEventListenerObject);\n this.nextHandler.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as ISymbol;\n if (!target.hasState('disable')) {\n target.addState('hover');\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as ISymbol;\n target.removeState('hover');\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as ISymbol;\n if (target.name === 'preHandler') {\n if (this._current === 1) {\n return;\n }\n this._current -= 1;\n if (this._current === 1) {\n target.addState('disable');\n } else {\n target.removeState('disable');\n }\n\n this._dispatchEvent('toPrev', {\n current: this._current,\n total: this._total,\n direction: 'pre',\n event: e\n });\n }\n\n if (target.name === 'nextHandler') {\n if (this._current === this._total) {\n return;\n }\n this._current += 1;\n\n if (this._current === this._total) {\n target.addState('disable');\n } else {\n target.removeState('disable');\n }\n\n this._dispatchEvent('toNext', {\n current: this._current,\n total: this._total,\n direction: 'next',\n event: e\n });\n }\n\n if (this._current > 1) {\n (this.preHandler as ISymbol).removeState('disable');\n }\n if (this._current < this._total) {\n (this.nextHandler as ISymbol).removeState('disable');\n }\n\n (this.text as IText).setAttribute('text', `${this._current}/${this._total}`);\n };\n\n private _reset() {\n this.removeAllChild();\n this._current = 1;\n this._total = this.attribute.total as number;\n this.preHandler = this.nextHandler = this.text = null;\n }\n}\n","import { registerGroup, registerRect, registerSymbol, registerText } from '@visactor/vrender-kits';\n\nexport function loadSliderComponent() {\n registerGroup();\n registerText();\n registerRect();\n registerSymbol();\n}\n","import { registerGroup, registerPath } from '@visactor/vrender-kits';\nimport { loadTagComponent } from '../tag/register';\nimport { loadPagerComponent } from '../pager/register';\nimport { loadSliderComponent } from '../slider/register';\n\nfunction loadBaseLegend() {\n registerGroup();\n loadTagComponent();\n}\n\nexport function loadDiscreteLegendComponent() {\n loadBaseLegend();\n loadPagerComponent();\n}\n\nexport function loadColorContinuousLegendComponent() {\n loadBaseLegend();\n loadSliderComponent();\n}\n\nexport function loadSizeContinuousLegendComponent() {\n loadBaseLegend();\n loadSliderComponent();\n registerPath();\n}\n","/**\n * @description 离散图例\n * @author 章伟星\n */\nimport { merge, isEmpty, normalizePadding, get, isValid, isNil, isFunction, isArray } from '@visactor/vutils';\nimport type {\n FederatedPointerEvent,\n IGroup,\n IGraphic,\n INode,\n IGroupGraphicAttribute,\n ISymbolGraphicAttribute,\n ITextGraphicAttribute,\n CustomEvent\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { LegendBase } from '../base';\nimport { Pager } from '../../pager';\nimport {\n DEFAULT_TITLE_SPACE,\n DEFAULT_ITEM_SPACE_COL,\n DEFAULT_ITEM_SPACE_ROW,\n DEFAULT_SHAPE_SPACE,\n DEFAULT_SHAPE_SIZE,\n DEFAULT_LABEL_SPACE,\n DEFAULT_PAGER_SPACE,\n LegendStateValue,\n DEFAULT_VALUE_SPACE,\n LegendEvent,\n LEGEND_ELEMENT_NAME\n} from '../constant';\nimport type { DiscreteLegendAttrs, LegendItem, LegendItemDatum } from './type';\nimport type { ComponentOptions } from '../../interface';\nimport { loadDiscreteLegendComponent } from '../register';\n\nconst DEFAULT_STATES = {\n [LegendStateValue.focus]: {},\n [LegendStateValue.selected]: {},\n [LegendStateValue.selectedHover]: {},\n [LegendStateValue.unSelected]: {},\n [LegendStateValue.unSelectedHover]: {}\n};\n\nloadDiscreteLegendComponent();\nexport class DiscreteLegend extends LegendBase {\n name = 'discreteLegend';\n\n private _itemsContainer: IGroup | null = null;\n private _itemWidthByUser: number | undefined;\n private _itemHeightByUser: number | undefined = undefined;\n private _itemHeight = 0; // 存储每一个图例项的高度\n private _itemMaxWidth = 0; // 存储图例项的最大的宽度\n private _pager!: Pager;\n private _lastActiveItem: IGroup;\n\n static defaultAttributes: Partial = {\n layout: 'horizontal',\n title: {\n align: 'start',\n space: DEFAULT_TITLE_SPACE,\n textStyle: {\n fontSize: 12,\n fontWeight: 'bold',\n fill: '#2C3542'\n }\n },\n item: {\n spaceCol: DEFAULT_ITEM_SPACE_COL,\n spaceRow: DEFAULT_ITEM_SPACE_ROW,\n shape: {\n space: DEFAULT_SHAPE_SPACE,\n style: {\n size: DEFAULT_SHAPE_SIZE,\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n opacity: 0.5\n }\n }\n },\n label: {\n space: DEFAULT_LABEL_SPACE,\n style: {\n fontSize: 12,\n fill: '#2C3542',\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8'\n }\n }\n },\n value: {\n alignRight: false,\n style: {\n fontSize: 12,\n fill: '#ccc',\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8'\n }\n }\n },\n background: {\n style: {\n cursor: 'pointer'\n }\n },\n focus: false,\n focusIconStyle: {\n size: DEFAULT_SHAPE_SIZE,\n symbolType:\n 'M8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1ZM8.75044 2.55077L8.75 3.75H7.25L7.25006 2.5507C4.81247 2.88304 2.88304 4.81247 2.5507 7.25006L3.75 7.25V8.75L2.55077 8.75044C2.8833 11.1878 4.81264 13.117 7.25006 13.4493L7.25 12.25H8.75L8.75044 13.4492C11.1876 13.1167 13.1167 11.1876 13.4492 8.75044L12.25 8.75V7.25L13.4493 7.25006C13.117 4.81264 11.1878 2.8833 8.75044 2.55077ZM8 5.5C9.38071 5.5 10.5 6.61929 10.5 8C10.5 9.38071 9.38071 10.5 8 10.5C6.61929 10.5 5.5 9.38071 5.5 8C5.5 6.61929 6.61929 5.5 8 5.5ZM8 7C7.44772 7 7 7.44772 7 8C7 8.55228 7.44772 9 8 9C8.55228 9 9 8.55228 9 8C9 7.44772 8.55228 7 8 7Z',\n fill: '#333',\n cursor: 'pointer'\n }\n },\n autoPage: true,\n pager: {\n space: DEFAULT_PAGER_SPACE,\n handler: {\n style: { size: 10 },\n space: 4\n }\n },\n hover: true,\n select: true,\n selectMode: 'multiple',\n allowAllCanceled: true\n };\n\n constructor(attributes: DiscreteLegendAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, DiscreteLegend.defaultAttributes, attributes));\n }\n\n /**\n * 更新选中数据\n * @param value 选中数据范围\n * @returns\n */\n setSelected(selectedData: (string | number)[]) {\n (this._itemsContainer?.getChildren() as IGroup[]).forEach(item => {\n // @ts-ignore\n const itemData = item.data as LegendItemDatum;\n if (selectedData.includes(itemData.label)) {\n this._setLegendItemState(item, LegendStateValue.selected);\n this._removeLegendItemState(item, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover]);\n } else {\n // 如果当前为选中状态,则取消选中\n this._removeLegendItemState(item, [LegendStateValue.selected, LegendStateValue.selectedHover]);\n this._setLegendItemState(item, LegendStateValue.unSelected);\n }\n });\n }\n\n protected _renderContent() {\n const { item = {}, items, reversed, maxCol = 1, maxRow = 2 } = this.attribute as DiscreteLegendAttrs;\n if (item.visible === false || isEmpty(items)) {\n return;\n }\n\n let legendItems = items;\n if (reversed) {\n legendItems = items?.reverse();\n }\n\n const itemsContainer = graphicCreator.group({\n x: 0,\n y: 0\n });\n this._itemsContainer = itemsContainer;\n\n const { layout, maxWidth, maxHeight, defaultSelected = [], autoPage } = this.attribute;\n const isHorizontal = layout === 'horizontal';\n\n const {\n spaceCol = DEFAULT_ITEM_SPACE_COL,\n spaceRow = DEFAULT_ITEM_SPACE_ROW,\n maxWidth: maxItemWidth,\n width: itemWidth,\n height: itemHeight\n } = item;\n\n // 根据用户声明的 maxItemWidth 和 itemWidth 获取图例项宽度\n if (isValid(maxItemWidth)) {\n if (isValid(itemWidth)) {\n this._itemWidthByUser = Math.min(maxItemWidth, itemWidth);\n } else {\n this._itemWidthByUser = maxItemWidth;\n }\n } else if (isValid(itemWidth)) {\n this._itemWidthByUser = itemWidth;\n }\n\n // 存储用户指定图例项高度\n if (isValid(itemHeight)) {\n this._itemHeightByUser = itemHeight;\n }\n let doWrap = false; // 水平布局换行标识\n let maxWidthInCol = 0; // 存储每一列最大的宽度,用于垂直布局的换列\n let startX = 0;\n let startY = 0;\n let maxPages = 1;\n let pages = 1;\n legendItems.forEach((item, index) => {\n if (!item.id) {\n item.id = item.label; // 如果没有设置 id,默认使用 label\n }\n item.index = index; // 用于维护图例的顺序\n\n const itemGroup = this._renderEachItem(\n item,\n isEmpty(defaultSelected) ? true : defaultSelected?.includes(item.label),\n index,\n legendItems\n );\n const itemWidth = itemGroup.attribute.width;\n const itemHeight = itemGroup.attribute.height;\n this._itemHeight = Math.max(this._itemHeight, itemHeight);\n maxWidthInCol = Math.max(itemWidth, maxWidthInCol);\n\n this._itemMaxWidth = Math.max(itemWidth, this._itemMaxWidth);\n\n if (isHorizontal) {\n maxPages = maxRow;\n // 水平布局\n if (isValid(maxWidth)) {\n if (itemWidth >= maxWidth) {\n // 如果图例项本身就大于 maxWidth\n doWrap = true;\n if (index > 0) {\n startX = 0;\n startY += itemHeight + spaceRow;\n pages += 1;\n }\n } else if (maxWidth < startX + itemWidth) {\n // 检测是否需要换行:如果用户声明了 maxWidth 并且超出了,则进行换行\n doWrap = true;\n startX = 0;\n startY += itemHeight + spaceRow;\n pages += 1;\n }\n }\n if (index > 0) {\n itemGroup.setAttributes({\n x: startX,\n y: startY\n });\n }\n startX += spaceCol + itemWidth;\n } else {\n maxPages = maxCol;\n // 垂直布局\n if (isValid(maxHeight) && maxHeight < startY + itemHeight) {\n // 检测是否换列:如果用户声明了 maxHeight 并且超出了,则进行换列\n doWrap = true;\n startY = 0;\n startX += maxWidthInCol + spaceCol;\n maxWidthInCol = 0;\n pages += 1;\n }\n if (index > 0) {\n itemGroup.setAttributes({\n x: startX,\n y: startY\n });\n }\n startY += spaceRow + itemHeight;\n }\n\n itemsContainer.add(itemGroup);\n });\n\n // TODO: 添加测试用例\n let pagerRendered = false;\n if (doWrap && autoPage && pages > maxPages) {\n // 进行分页处理\n pagerRendered = this._renderPager(isHorizontal);\n }\n\n if (!pagerRendered) {\n itemsContainer.setAttribute(\n 'y',\n this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', 8) : 0\n );\n this._innerView.add(itemsContainer);\n }\n }\n\n protected _bindEvents() {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n if (!this._itemsContainer) {\n return;\n }\n\n const { hover = true, select = true } = this.attribute;\n if (hover) {\n this._itemsContainer.addEventListener('pointermove', this._onHover as EventListenerOrEventListenerObject);\n this._itemsContainer.addEventListener('pointerleave', this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n this._itemsContainer.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _renderEachItem(item: LegendItemDatum, isSelected: boolean, index: number, items: LegendItemDatum[]) {\n const { id, label, value, shape } = item;\n const { padding = 0, focus, focusIconStyle } = this.attribute.item as LegendItem;\n\n const { shape: shapeAttr, label: labelAttr, value: valueAttr, background } = this.attribute.item as LegendItem;\n\n const shapeStyle = this._handleStyle(shapeAttr, item, isSelected, index, items);\n const labelStyle = this._handleStyle(labelAttr, item, isSelected, index, items);\n const valueStyle = this._handleStyle(valueAttr, item, isSelected, index, items);\n const backgroundStyle = this._handleStyle(background, item, isSelected, index, items);\n\n const parsedPadding = normalizePadding(padding);\n\n let itemGroup;\n if (background.visible === false) {\n itemGroup = graphicCreator.group({\n x: 0,\n y: 0,\n cursor: (backgroundStyle.style as IGroupGraphicAttribute)?.cursor\n });\n this._appendDataToShape(itemGroup, LEGEND_ELEMENT_NAME.item, item, itemGroup);\n } else {\n itemGroup = graphicCreator.group({\n x: 0,\n y: 0,\n ...backgroundStyle.style\n });\n this._appendDataToShape(itemGroup, LEGEND_ELEMENT_NAME.item, item, itemGroup, backgroundStyle.state);\n }\n itemGroup.id = `${id ?? label}-${index}`;\n\n itemGroup.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n\n const innerGroup = graphicCreator.group({\n x: 0,\n y: 0,\n pickable: false\n });\n itemGroup.add(innerGroup);\n\n let focusStartX = 0;\n let shapeSize = 0;\n let shapeSpace = 0;\n if (shapeAttr && shapeAttr.visible !== false) {\n const s = get(shapeStyle, 'style.size', DEFAULT_SHAPE_SIZE);\n if (isArray(s)) {\n shapeSize = s[0] || 0;\n } else {\n shapeSize = s;\n }\n shapeSpace = get(shapeAttr, 'space', DEFAULT_SHAPE_SPACE);\n const itemShape = graphicCreator.symbol({\n x: 0,\n y: 0,\n symbolType: 'circle',\n strokeBoundsBuffer: 0,\n ...shape,\n ...shapeStyle.style\n });\n // 处理下 shape 的 fill stroke\n Object.keys(shapeStyle.state || {}).forEach(key => {\n const color =\n (shapeStyle.state[key] as ISymbolGraphicAttribute).fill ||\n (shapeStyle.state[key] as ISymbolGraphicAttribute).stroke;\n if (shape.fill && isNil((shapeStyle.state[key] as ISymbolGraphicAttribute).fill) && color) {\n (shapeStyle.state[key] as ISymbolGraphicAttribute).fill = color as string;\n }\n\n if (shape.stroke && isNil((shapeStyle.state[key] as ISymbolGraphicAttribute).stroke) && color) {\n (shapeStyle.state[key] as ISymbolGraphicAttribute).stroke = color as string;\n }\n });\n this._appendDataToShape(itemShape, LEGEND_ELEMENT_NAME.itemShape, item, itemGroup, shapeStyle.state);\n\n itemShape.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n innerGroup.add(itemShape);\n }\n\n let focusShape;\n let focusSpace = 0;\n\n if (focus) {\n const focusSize = get(focusIconStyle, 'size', DEFAULT_SHAPE_SIZE);\n // 绘制聚焦按钮\n focusShape = graphicCreator.symbol({\n x: 0,\n y: -focusSize / 2 - 1,\n strokeBoundsBuffer: 0,\n ...focusIconStyle,\n visible: true,\n pickMode: 'imprecise',\n boundsPadding: parsedPadding\n });\n this._appendDataToShape(focusShape, LEGEND_ELEMENT_NAME.focus, item, itemGroup);\n\n focusSpace = focusSize;\n }\n\n const labelShape = graphicCreator.text({\n x: shapeSize / 2 + shapeSpace,\n y: 0,\n textAlign: 'start',\n textBaseline: 'middle',\n lineHeight: (labelStyle.style as ITextGraphicAttribute)?.fontSize,\n ...labelStyle.style,\n text: labelAttr.formatMethod ? labelAttr.formatMethod(label, item, index) : label\n });\n this._appendDataToShape(labelShape, LEGEND_ELEMENT_NAME.itemLabel, item, itemGroup, labelStyle.state);\n labelShape.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n innerGroup.add(labelShape);\n const labelSpace = get(labelAttr, 'space', DEFAULT_LABEL_SPACE);\n if (isValid(value)) {\n const valueSpace = get(valueAttr, 'space', focus ? DEFAULT_VALUE_SPACE : 0);\n const valueShape = graphicCreator.text({\n x: 0,\n y: 0,\n textAlign: 'start',\n textBaseline: 'middle',\n lineHeight: (valueStyle.style as ITextGraphicAttribute).fontSize,\n ...valueStyle.style,\n text: valueAttr.formatMethod ? valueAttr.formatMethod(value, item, index) : value\n });\n this._appendDataToShape(valueShape, LEGEND_ELEMENT_NAME.itemValue, item, itemGroup, valueStyle.state);\n valueShape.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n\n if (this._itemWidthByUser) {\n // 计算用来防止文本的宽度\n const layoutWidth =\n this._itemWidthByUser -\n parsedPadding[1] -\n parsedPadding[3] -\n shapeSize -\n shapeSpace -\n labelSpace -\n focusSpace -\n valueSpace;\n const valueBounds = valueShape.AABBBounds;\n const labelBounds = labelShape.AABBBounds;\n const valueWidth = valueBounds.width();\n const labelWidth = labelBounds.width();\n if (labelWidth > layoutWidth) {\n if ((layoutWidth - valueWidth) / labelWidth > 0.4) {\n // 设置一个值,如果剩余的宽度和 label 自身的比例不低于 0.4 的话,优先展示全 label\n labelShape.setAttribute('maxLineWidth', layoutWidth - valueWidth);\n } else {\n valueShape.setAttribute('maxLineWidth', layoutWidth * 0.5);\n labelShape.setAttribute('maxLineWidth', layoutWidth * 0.5);\n }\n } else {\n valueShape.setAttribute('maxLineWidth', layoutWidth - labelWidth);\n }\n\n if (valueAttr.alignRight) {\n valueShape.setAttributes({\n // @ts-ignore\n textAlign: 'right',\n x: this._itemWidthByUser - shapeSize / 2 - parsedPadding[1] - parsedPadding[3] - focusSpace - valueSpace\n });\n } else {\n valueShape.setAttribute('x', labelShape.AABBBounds.x2 + valueSpace);\n }\n } else {\n valueShape.setAttribute('x', labelShape.AABBBounds.x2 + valueSpace);\n }\n focusStartX = valueShape.AABBBounds.x2 + valueSpace;\n\n innerGroup.add(valueShape);\n } else if (this._itemWidthByUser) {\n labelShape.setAttribute(\n 'maxLineWidth',\n this._itemWidthByUser - parsedPadding[1] - parsedPadding[3] - shapeSize - shapeSpace - focusSpace\n );\n\n focusStartX = labelShape.AABBBounds.x2 + labelSpace;\n } else {\n focusStartX = labelShape.AABBBounds.x2 + labelSpace;\n }\n\n if (focusShape) {\n focusShape.setAttribute('x', focusStartX);\n innerGroup.add(focusShape);\n }\n\n const innerGroupBounds = innerGroup.AABBBounds;\n const innerGroupWidth = innerGroupBounds.width();\n const innerGroupHeight = innerGroupBounds.height();\n const itemGroupWidth = isValid(this.attribute.item.width)\n ? this.attribute.item.width\n : innerGroupWidth + parsedPadding[1] + parsedPadding[3];\n const itemGroupHeight = this._itemHeightByUser || innerGroupHeight + parsedPadding[0] + parsedPadding[2];\n itemGroup.attribute.width = itemGroupWidth;\n itemGroup.attribute.height = itemGroupHeight;\n\n focusShape && focusShape.setAttribute('visible', false);\n innerGroup.translateTo(-innerGroupBounds.x1 + parsedPadding[3], -innerGroupBounds.y1 + parsedPadding[0]);\n return itemGroup;\n }\n\n private _renderPager(isHorizontal: boolean) {\n const renderStartY = this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', 8) : 0;\n const { maxWidth, maxHeight, maxCol = 1, maxRow = 2, item = {}, pager = {}, disableTriggerEvent } = this.attribute;\n const { spaceCol = DEFAULT_ITEM_SPACE_COL, spaceRow = DEFAULT_ITEM_SPACE_ROW } = item;\n const itemsContainer = this._itemsContainer as IGroup;\n const {\n animation = true,\n animationDuration = 450,\n animationEasing = 'quadIn',\n space: pagerSpace = DEFAULT_PAGER_SPACE,\n position = 'middle',\n ...pageStyle\n } = pager;\n\n let pagerComp: Pager;\n let pageHeight = 0; // 每页的高度\n let pageWidth = 0; // 每页的宽度\n let startX = 0; // 临时变量,用来存储布局的起始点\n let startY = 0; // 临时变量,用来存储布局的起始点\n let pages = 1; // 页数\n\n if (isHorizontal) {\n // 水平布局,支持上下翻页\n pagerComp = new Pager({\n layout: maxRow === 1 ? 'horizontal' : 'vertical',\n total: 99,\n ...merge(\n {\n handler: {\n preShape: 'triangleUp',\n nextShape: 'triangleDown'\n }\n },\n pageStyle\n ),\n disableTriggerEvent\n });\n this._pager = pagerComp;\n this._innerView.add(pagerComp as unknown as INode);\n pageHeight = (maxRow - 1) * spaceRow + this._itemHeight * maxRow;\n pageWidth = (maxWidth as number) - pagerComp.AABBBounds.width() - pagerSpace;\n\n if (pageWidth <= 0) {\n // 布局空间不够则不进行分页器渲染\n this._innerView.removeChild(pagerComp as unknown as INode);\n return false;\n }\n\n // 重新进行布局\n (itemsContainer.getChildren() as unknown as IGroup[]).forEach((item, index) => {\n const { width, height } = item.attribute;\n\n if (pageWidth < startX + (width as number)) {\n // 超出了,则换行\n startX = 0;\n startY += (height as number) + spaceRow;\n pages += 1;\n }\n if (index > 0) {\n item.setAttributes({\n x: startX,\n y: startY\n });\n }\n startX += spaceCol + (width as number);\n });\n\n pagerComp.setAttribute('total', Math.ceil(pages / maxRow));\n let y;\n if (position === 'start') {\n y = renderStartY;\n } else if (position === 'end') {\n y = renderStartY + pageHeight - pagerComp.AABBBounds.height() / 2;\n } else {\n y = renderStartY + pageHeight / 2 - pagerComp.AABBBounds.height() / 2;\n }\n pagerComp.setAttributes({\n x: pageWidth,\n y\n });\n } else {\n // 垂直布局,支持左右翻页\n pagerComp = new Pager({\n layout: 'horizontal',\n total: 99, // 用于估算,\n disableTriggerEvent,\n ...pageStyle\n });\n this._pager = pagerComp;\n this._innerView.add(pagerComp as unknown as INode);\n\n pageWidth = this._itemMaxWidth * maxCol + (maxCol - 1) * spaceCol;\n pageHeight = (maxHeight as number) - pagerComp.AABBBounds.height() - pagerSpace - renderStartY;\n\n if (pageHeight <= 0) {\n // 布局空间不够则不进行分页器渲染\n this._innerView.removeChild(pagerComp as unknown as INode);\n return false;\n }\n\n // 重新进行布局\n (itemsContainer.getChildren() as unknown as IGroup[]).forEach((item, index) => {\n const { height } = item.attribute;\n if (pageHeight < startY + (height as number)) {\n startY = 0;\n startX += this._itemMaxWidth + spaceCol;\n pages += 1;\n }\n if (index > 0) {\n item.setAttributes({\n x: startX,\n y: startY\n });\n }\n startY += spaceRow + (height as number);\n });\n\n pagerComp.setAttribute('total', Math.ceil(pages / maxCol));\n\n let x;\n if (position === 'start') {\n x = 0;\n } else if (position === 'end') {\n x = pageWidth - pagerComp.AABBBounds.width();\n } else {\n x = (pageWidth - pagerComp.AABBBounds.width()) / 2;\n }\n pagerComp.setAttributes({\n x,\n y: (maxHeight as number) - pagerComp.AABBBounds.height()\n });\n }\n\n // 初始化 defaultCurrent\n if (pager.defaultCurrent > 1) {\n if (isHorizontal) {\n itemsContainer.setAttribute('y', -(pager.defaultCurrent - 1) * (pageHeight + spaceRow));\n } else {\n itemsContainer.setAttribute('x', -(pager.defaultCurrent - 1) * (pageWidth + spaceCol));\n }\n }\n\n const clipGroup = graphicCreator.group({\n x: 0,\n y: renderStartY,\n width: pageWidth,\n height: pageHeight,\n clip: true,\n pickable: false\n });\n clipGroup.add(itemsContainer);\n this._innerView.add(clipGroup);\n\n const onPaging = (e: CustomEvent) => {\n const { current } = e.detail;\n\n if (animation) {\n itemsContainer\n .animate()\n .to(\n isHorizontal\n ? { y: -(current - 1) * (pageHeight + spaceRow) }\n : { x: -(current - 1) * (pageWidth + spaceCol) },\n animationDuration,\n animationEasing\n );\n } else {\n if (isHorizontal) {\n itemsContainer.setAttribute('y', -(current - 1) * (pageHeight + spaceRow));\n } else {\n itemsContainer.setAttribute('x', -(current - 1) * (pageWidth + spaceCol));\n }\n }\n };\n\n this._pager.addEventListener('toPrev', onPaging);\n this._pager.addEventListener('toNext', onPaging);\n\n return true;\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGroup;\n if (target && target.name && target.name.startsWith(LEGEND_ELEMENT_NAME.item)) {\n // @ts-ignore\n const legendItem = target.delegate;\n\n // 如果上个激活元素存在,则判断当前元素是否和上个激活元素相同,相同则不做处理,不相同则触发 unhover\n if (this._lastActiveItem) {\n if (this._lastActiveItem.id === legendItem.id) {\n return;\n }\n this._unHover(this._lastActiveItem, e);\n }\n this._hover(legendItem, e);\n } else if (this._lastActiveItem) {\n this._unHover(this._lastActiveItem, e);\n this._lastActiveItem = null;\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n if (this._lastActiveItem) {\n this._unHover(this._lastActiveItem, e);\n this._lastActiveItem = null;\n }\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGroup;\n if (target && target.name && target.name.startsWith(LEGEND_ELEMENT_NAME.item)) {\n // @ts-ignore\n const legendItem = target.delegate;\n\n // 图例聚焦功能\n if (target.name === LEGEND_ELEMENT_NAME.focus) {\n const isFocusSelected = legendItem.hasState(LegendStateValue.focus);\n legendItem.toggleState(LegendStateValue.focus);\n\n if (isFocusSelected) {\n // 当前为选中态,则再次点击变成全选\n this._itemsContainer?.getChildren().forEach(item => {\n this._removeLegendItemState(\n item as unknown as IGroup,\n [LegendStateValue.unSelected, LegendStateValue.unSelectedHover, LegendStateValue.focus],\n e\n );\n this._setLegendItemState(item as unknown as IGroup, LegendStateValue.selected, e);\n });\n } else {\n this._setLegendItemState(legendItem, LegendStateValue.selected, e);\n this._removeLegendItemState(legendItem, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover], e);\n // 单选逻辑,当前被点击的图例项设置为选中态,其他全部设置为非选中态\n this._itemsContainer?.getChildren().forEach(item => {\n if (legendItem !== item) {\n this._removeLegendItemState(\n item as unknown as IGroup,\n [LegendStateValue.selected, LegendStateValue.selectedHover, LegendStateValue.focus],\n e\n );\n this._setLegendItemState(item as unknown as IGroup, LegendStateValue.unSelected, e);\n }\n });\n }\n } else {\n // 清除 focus 状态\n this._itemsContainer?.getChildren().forEach(item => {\n (item as unknown as IGroup).removeState(LegendStateValue.focus);\n });\n const { selectMode = 'multiple', allowAllCanceled = true } = this.attribute;\n const isSelected = legendItem.hasState(LegendStateValue.selected);\n const currentSelectedItems = this._getSelectedLegends();\n if (selectMode === 'multiple') {\n if (allowAllCanceled === false && isSelected && currentSelectedItems.length === 1) {\n this._dispatchLegendEvent(LegendEvent.legendItemClick, legendItem, e);\n return;\n }\n // 多选逻辑\n if (isSelected) {\n // 如果当前为选中状态,则取消选中\n this._removeLegendItemState(legendItem, [LegendStateValue.selected, LegendStateValue.selectedHover], e);\n this._setLegendItemState(legendItem, LegendStateValue.unSelected, e);\n } else {\n // 如果当前为非选中态,则设置为选中状态\n this._setLegendItemState(legendItem, LegendStateValue.selected, e);\n this._removeLegendItemState(legendItem, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover], e);\n }\n } else {\n this._setLegendItemState(legendItem, LegendStateValue.selected, e);\n this._removeLegendItemState(legendItem, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover], e);\n\n // 单选逻辑,当前被点击的图例项设置为选中态,其他全部设置为非选中态\n this._itemsContainer?.getChildren().forEach(item => {\n if (legendItem !== item) {\n this._removeLegendItemState(\n item as unknown as IGroup,\n [LegendStateValue.selected, LegendStateValue.selectedHover],\n e\n );\n this._setLegendItemState(item as unknown as IGroup, LegendStateValue.unSelected, e);\n }\n });\n }\n }\n\n this._dispatchLegendEvent(LegendEvent.legendItemClick, legendItem, e);\n }\n };\n\n private _hover(legendItem: IGroup, e: FederatedPointerEvent) {\n this._lastActiveItem = legendItem;\n const selected = legendItem.hasState(LegendStateValue.selected);\n\n if (selected) {\n // use selectedHover state\n this._setLegendItemState(legendItem, LegendStateValue.selectedHover, e);\n } else {\n // use unSelectedHover state\n this._setLegendItemState(legendItem, LegendStateValue.unSelectedHover, e);\n }\n\n const focusButton = (legendItem.getChildren()[0] as unknown as IGroup).find(\n node => node.name === LEGEND_ELEMENT_NAME.focus,\n false\n ) as IGraphic;\n if (focusButton) {\n focusButton.setAttribute('visible', true);\n }\n\n this._dispatchLegendEvent(LegendEvent.legendItemHover, legendItem, e);\n }\n\n private _unHover(legendItem: IGroup, e: FederatedPointerEvent) {\n let attributeUpdate = false;\n if (legendItem.hasState(LegendStateValue.unSelectedHover) || legendItem.hasState(LegendStateValue.selectedHover)) {\n attributeUpdate = true;\n }\n legendItem.removeState(LegendStateValue.unSelectedHover);\n legendItem.removeState(LegendStateValue.selectedHover);\n legendItem\n .getChildren()[0]\n .getChildren()\n .forEach((child: any) => {\n if (\n !attributeUpdate &&\n (child.hasState(LegendStateValue.unSelectedHover) || child.hasState(LegendStateValue.selectedHover))\n ) {\n attributeUpdate = true;\n }\n (child as unknown as IGraphic).removeState(LegendStateValue.unSelectedHover);\n (child as unknown as IGraphic).removeState(LegendStateValue.selectedHover);\n });\n\n const focusButton = (legendItem.getChildren()[0] as unknown as IGroup).find(\n node => node.name === LEGEND_ELEMENT_NAME.focus,\n false\n ) as IGraphic;\n if (focusButton) {\n focusButton.setAttribute('visible', false);\n }\n\n if (attributeUpdate) {\n this._dispatchLegendEvent(LegendEvent.legendItemAttributeUpdate, legendItem, e);\n }\n this._dispatchLegendEvent(LegendEvent.legendItemUnHover, legendItem, e);\n }\n\n private _setLegendItemState(legendItem: IGroup, stateName: string, e?: FederatedPointerEvent) {\n const keepCurrentStates = true;\n let attributeUpdate = false;\n if (!legendItem.hasState(stateName)) {\n attributeUpdate = true;\n }\n legendItem.addState(stateName, keepCurrentStates);\n // TODO: 这个比较 hack\n legendItem\n .getChildren()[0]\n .getChildren()\n .forEach((child: IGraphic) => {\n if (child.name !== LEGEND_ELEMENT_NAME.focus) {\n if (!attributeUpdate && !child.hasState(stateName)) {\n attributeUpdate = true;\n }\n (child as unknown as IGraphic).addState(stateName, keepCurrentStates);\n }\n });\n if (attributeUpdate) {\n this._dispatchLegendEvent(LegendEvent.legendItemAttributeUpdate, legendItem, e);\n }\n }\n\n private _removeLegendItemState(legendItem: IGroup, stateNames: string[], e?: FederatedPointerEvent) {\n let attributeUpdate = false;\n stateNames.forEach(name => {\n if (!attributeUpdate && legendItem.hasState(name)) {\n attributeUpdate = true;\n }\n legendItem.removeState(name);\n });\n // TODO: 这个比较 hack\n legendItem\n .getChildren()[0]\n .getChildren()\n .forEach(child => {\n if (child.name !== LEGEND_ELEMENT_NAME.focus) {\n stateNames.forEach(name => {\n if (!attributeUpdate && (child as unknown as IGraphic).hasState(name)) {\n attributeUpdate = true;\n }\n (child as unknown as IGraphic).removeState(name);\n });\n }\n });\n if (attributeUpdate) {\n this._dispatchLegendEvent(LegendEvent.legendItemAttributeUpdate, legendItem, e);\n }\n }\n\n // 获取当前选中的图例项\n private _getSelectedLegends() {\n const selectedData: LegendItemDatum[] = [];\n this._itemsContainer?.getChildren().forEach(item => {\n if ((item as unknown as IGroup).hasState(LegendStateValue.selected)) {\n // @ts-ignore\n selectedData.push(item.data);\n }\n });\n\n return selectedData;\n }\n\n private _appendDataToShape(shape: any, name: string, data: any, delegateShape: any, states: any = {}) {\n shape.name = name;\n shape.data = data;\n shape.delegate = delegateShape;\n shape.states = merge({}, DEFAULT_STATES, states);\n }\n\n private _dispatchLegendEvent(eventName: string, legendItem: any, event: FederatedPointerEvent) {\n const currentSelectedItems = this._getSelectedLegends();\n // 需要保持显示顺序\n currentSelectedItems.sort((pre: LegendItemDatum, next: LegendItemDatum) => pre.index - next.index);\n\n const currentSelected = currentSelectedItems.map((obj: LegendItemDatum) => obj.label);\n\n this._dispatchEvent(eventName, {\n item: legendItem, // 当前被选中的图例项整体\n data: legendItem.data, // 当前图例项的数据\n selected: legendItem.hasState(LegendStateValue.selected), // 当前图例项是否被选中\n currentSelectedItems,\n currentSelected,\n event\n });\n }\n\n // 处理回调函数\n private _handleStyle(\n config: any,\n item: LegendItemDatum,\n isSelected: boolean,\n index: number,\n items: LegendItemDatum[]\n ) {\n const newConfig: any = {};\n // 处理下样式\n if (config.style) {\n if (isFunction(config.style)) {\n newConfig.style = config.style(item, isSelected, index, items);\n } else {\n newConfig.style = config.style;\n }\n }\n\n if (config.state) {\n newConfig.state = {};\n\n Object.keys(config.state).forEach(key => {\n if (config.state[key]) {\n if (isFunction(config.state[key])) {\n newConfig.state[key] = config.state[key](item, isSelected, index, items);\n } else {\n newConfig.state[key] = config.state[key];\n }\n }\n });\n }\n\n return newConfig;\n }\n}\n","import { isValid, isArray } from '@visactor/vutils';\nimport type { ISeries } from '../../../../series/interface';\nimport type { IDiscreteLegendData, IDiscreteLegendDataMakeOption, IDiscreteLegendFilterOption } from './interface';\nimport { DEFAULT_DATA_SERIES_FIELD } from '../../../../constant';\n\nexport const discreteLegendDataMake = (data: Array, op: IDiscreteLegendDataMakeOption) => {\n const result: IDiscreteLegendData[] = [];\n const tempKey: { [key in string]: boolean } = {};\n const { series, seriesField } = op;\n series().forEach(s => {\n const field = seriesField(s);\n let infoList;\n if (field === s.getSeriesField()) {\n infoList = s.getSeriesInfoList();\n } else {\n infoList = s.getSeriesInfoInField(field);\n }\n infoList.forEach(info => {\n if (tempKey[info.key]) {\n return;\n }\n tempKey[info.key] = true;\n result.push(info);\n });\n });\n return result;\n};\n\nexport const discreteLegendFilter = (data: Array, op: IDiscreteLegendFilterOption) => {\n const { selected, field, data: legendData } = op;\n const selectedData = selected();\n const legendKeys = legendData(); // 全量的图例项\n if (selectedData.length === 0 && legendKeys.length) {\n return [];\n }\n\n if (selectedData.length === legendKeys.length) {\n return data;\n }\n\n const selectedFilter = {};\n selectedData.forEach(s => {\n selectedFilter[s] = true;\n });\n\n const datumField = field() ?? DEFAULT_DATA_SERIES_FIELD;\n\n if (isArray(data) && data[0]?.nodes) {\n // data silter for sankey chart\n data[0].nodes = data[0].nodes.filter((d: any) => selectedFilter[d.key] === true);\n if (data[0]?.links) {\n data[0].links = data[0].links.filter(\n (d: any) => selectedFilter[d.source] === true && selectedFilter[d.target] === true\n );\n }\n } else {\n if (isValid(datumField)) {\n data = data.filter(d => selectedFilter[d[datumField]] === true);\n }\n }\n return data;\n};\n","import { isNil, isEqual, isValid, array, isValidNumber } from '@visactor/vutils';\nimport type { DataView } from '@visactor/vdataset';\nimport type { IRegion } from '../../region/interface';\nimport { BaseComponent } from '../base/base-component';\nimport type { IEffect } from '../../model/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ILayoutRect, ILayoutType, IOrientType, IPoint, StringOrNumber } from '../../typings';\nimport { ChartEvent, LayoutLevel, LayoutZIndex } from '../../constant';\nimport { eachSeries } from '../../util/model';\nimport { isValidOrient } from '../../util/space';\nimport { mergeSpec } from '../../util/spec/merge-spec';\nimport { CompilableData } from '../../compile/data/compilable-data';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ILegend, ILegendCommonSpec } from './interface';\nimport type { IGraphic, IGroup } from '@visactor/vrender-core';\n\nexport abstract class BaseLegend extends BaseComponent implements ILegend {\n layoutType: ILayoutType = 'normal';\n layoutZIndex: number = LayoutZIndex.Legend;\n layoutLevel: number = LayoutLevel.Legend;\n\n static specKey = 'legends';\n specKey = 'legends';\n\n protected _orient: IOrientType = 'left';\n get orient() {\n return this._orient;\n }\n\n protected _visible: boolean = true;\n get visible() {\n return this._visible;\n }\n\n protected _position: 'start' | 'middle' | 'end' = 'middle';\n get position() {\n return this._position;\n }\n\n protected _legendData!: CompilableData;\n /**\n * 获取图例数据\n * @returns 图例的数据\n */\n getLegendData() {\n return this._legendData.getLatestData();\n }\n\n private _preSelectedData: StringOrNumber[] = [];\n protected _selectedData: StringOrNumber[] = [];\n /**\n * getSelectedData\n */\n getSelectedData() {\n return this._selectedData;\n }\n\n protected _legendComponent: IGroup;\n private _cacheAttrs: any;\n\n effect: IEffect = {\n onSelectedDataChange: () => {\n eachSeries(\n this._regions,\n s => {\n s.getViewData()?.markRunning();\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n eachSeries(\n this._regions,\n s => {\n s.reFilterViewData();\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n };\n // 与系列的关联关系\n // 优先级:id > index\n // 最终结果:series & region取交集\n protected _seriesUserId?: StringOrNumber[];\n protected _seriesIndex?: number[];\n protected _regionUserId?: StringOrNumber[];\n protected _regionUserIndex?: number[];\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n this._orient = isValidOrient(this._spec.orient) ? this._spec.orient : 'left';\n this._position = this._spec.position ?? 'middle';\n this._visible = this._spec.visible !== false;\n\n const { regionId, regionIndex, seriesId, seriesIndex } = this._spec;\n\n isValid(seriesId) && (this._seriesUserId = array(seriesId));\n isValid(regionId) && (this._regionUserId = array(regionId));\n isValid(seriesIndex) && (this._seriesIndex = array(seriesIndex));\n isValid(regionIndex) && (this._regionUserIndex = array(regionIndex));\n this._regions = this._option.getRegionsInUserIdOrIndex(this._regionUserId, this._regionUserIndex);\n }\n\n created() {\n super.created();\n // data\n this.initData();\n }\n\n /** LifeCycle API**/\n onRender(ctx: any): void {\n // do nothing\n }\n\n /** Update API **/\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n result.reRender = true;\n if (spec?.orient !== prevSpec?.orient) {\n result.reMake = true;\n return result;\n }\n if (!isEqual(prevSpec, spec)) {\n result.reCompile = true;\n }\n return result;\n }\n\n // reInit() {\n // super.reInit();\n // }\n\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n protected abstract _initLegendData(): DataView;\n protected abstract _initSelectedData(): void;\n protected abstract _getLegendAttributes(rect: ILayoutRect): any;\n protected abstract _getLegendConstructor(): any;\n protected abstract _initEvent(): void;\n\n private _bindLegendDataChange() {\n this._preSelectedData = this._selectedData.slice();\n this._initSelectedData();\n }\n\n protected initData() {\n const legendData = this._initLegendData();\n legendData.target.addListener('change', this._bindLegendDataChange.bind(this));\n this._legendData = new CompilableData(this._option, legendData);\n\n this._initSelectedData();\n eachSeries(\n this._regions,\n s => {\n s.event.on(ChartEvent.rawDataUpdate, { filter: ({ model }) => model?.id === s.id }, () => {\n this._legendData.getDataView().reRunAllTransform();\n });\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n\n setSelectedData(selectedData: StringOrNumber[]) {\n const lastData = this._selectedData;\n if (isNil(selectedData) || JSON.stringify(lastData) === JSON.stringify(selectedData)) {\n return;\n }\n this._selectedData = [...selectedData];\n // 更新数据\n this.effect.onSelectedDataChange?.();\n this.event.emit(ChartEvent.legendSelectedDataChange, { model: this });\n\n // 更新图例样式\n (this._legendComponent as unknown as any)?.setSelected(this._selectedData);\n }\n\n afterSetLayoutStartPoint(pos: IPoint): void {\n super.afterSetLayoutStartPoint(pos);\n\n if (this._legendComponent) {\n const { x, y } = pos;\n if (isValidNumber(x * y)) {\n this._legendComponent.setAttributes({ x, y });\n }\n }\n }\n\n getBoundsInRect(rect: ILayoutRect, fullSpace: ILayoutRect) {\n if (!this._visible) {\n return { x1: 0, y1: 0, x2: 0, y2: 0 };\n }\n const result = { x1: this.getLayoutStartPoint().x, y1: this.getLayoutStartPoint().y, x2: 0, y2: 0 };\n const attrs = this._getLegendAttributes(rect);\n attrs.disableTriggerEvent = this._option.disableTriggerEvent;\n if (this._legendComponent) {\n if (!isEqual(attrs, this._cacheAttrs)) {\n this._legendComponent.setAttributes(\n mergeSpec({}, attrs, {\n defaultSelected: this._selectedData // 图表 resize 之后应该保留上次筛选的结果\n })\n );\n }\n } else {\n const legendConstructor = this._getLegendConstructor();\n const legend = new legendConstructor(\n mergeSpec({}, attrs, {\n defaultSelected: this._selectedData\n })\n );\n legend.name = 'legend';\n this._legendComponent = legend;\n const container = this.getContainer();\n container.add(legend);\n\n // 绑定事件\n if (!this._option.disableTriggerEvent) {\n this._initEvent();\n }\n\n // 代理 legend 上的事件\n legend.on('*', (event: any, type: string) => this._delegateEvent(this._legendComponent, event, type));\n }\n this._cacheAttrs = attrs;\n\n const width = isFinite(this._legendComponent.AABBBounds.width()) ? this._legendComponent.AABBBounds.width() : 0;\n const height = isFinite(this._legendComponent.AABBBounds.height()) ? this._legendComponent.AABBBounds.height() : 0;\n\n if (this.layoutType !== 'normal-inline') {\n // 调整位置\n const layout = this.layoutOrient === 'bottom' || this.layoutOrient === 'top' ? 'horizontal' : 'vertical';\n const position = this._position;\n const { width: rectWidth, height: rectHeight } = fullSpace;\n let offsetX = 0;\n let offsetY = 0;\n if (layout === 'horizontal') {\n if (position === 'middle') {\n offsetX = (rectWidth - width) / 2;\n } else if (position === 'end') {\n offsetX = rectWidth - width;\n }\n } else {\n if (position === 'middle') {\n offsetY = (rectHeight - height) / 2;\n } else if (position === 'end') {\n offsetY = rectHeight - height;\n }\n }\n\n this._legendComponent.setAttributes({\n dx: offsetX,\n dy: offsetY\n });\n }\n\n result.x2 = result.x1 + width;\n result.y2 = result.y1 + height;\n return result;\n }\n\n onDataUpdate(): void {\n if (JSON.stringify(this._preSelectedData) === JSON.stringify(this._selectedData)) {\n return;\n }\n\n if (this._legendComponent) {\n // 更新组件\n const attrs = this._getLegendAttributes(this.getLayoutRect());\n if (!isEqual(attrs, this._cacheAttrs)) {\n this._legendComponent.setAttributes(\n mergeSpec({}, attrs, {\n defaultSelected: this._selectedData // 图表 resize 之后应该保留上次筛选的结果\n })\n );\n }\n }\n // 更新数据流\n this.effect.onSelectedDataChange?.();\n this.event.emit(ChartEvent.legendSelectedDataChange, { model: this });\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._legendComponent] as unknown as IGroup[];\n }\n\n clear(): void {\n super.clear();\n this._cacheAttrs = null;\n this._preSelectedData = null;\n }\n}\n","import type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isFunction, isNil, isValidNumber, isArray, get } from '@visactor/vutils';\nimport { DataView } from '@visactor/vdataset';\nimport type { IDiscreteLegendSpec } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ISeries } from '../../../series/interface';\nimport type { IModelInitOption, IModelSpecInfo } from '../../../model/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport { getLegendAttributes } from './util';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\nimport { eachSeries } from '../../../util/model';\nimport { getFieldAlias } from '../../../util/data';\nimport { isDataDomainSpec } from '../../../util/type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { LegendItemDatum } from '@visactor/vrender-components';\nimport { LegendEvent } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { DiscreteLegend as LegendComponent } from '@visactor/vrender-components';\nimport { discreteLegendDataMake, discreteLegendFilter } from '../../../data/transforms/legend-data/discrete/discrete';\nimport { BaseLegend } from '../base-legend';\nimport { ChartEvent } from '../../../constant';\nimport { Factory } from '../../../core/factory';\nimport { TransformLevel } from '../../../data/initialize';\nimport type { ILayoutRect } from '../../../typings/layout';\nimport type { Datum } from '../../../typings';\n\nexport class DiscreteLegend extends BaseLegend {\n static specKey = 'legends';\n\n static type = ComponentTypeEnum.discreteLegend;\n type = ComponentTypeEnum.discreteLegend;\n name: string = ComponentTypeEnum.discreteLegend;\n\n static getSpecInfo(chartSpec: any): Maybe {\n const legendSpec = chartSpec[this.specKey];\n if (!legendSpec) {\n return undefined;\n }\n if (!isArray(legendSpec)) {\n if (!legendSpec.type || legendSpec.type === 'discrete') {\n return [\n {\n spec: legendSpec,\n specIndex: 0,\n specPath: [this.specKey],\n type: ComponentTypeEnum.discreteLegend\n }\n ];\n }\n return undefined;\n }\n const specInfos: IModelSpecInfo[] = [];\n legendSpec.forEach((s: IDiscreteLegendSpec, i: number) => {\n if (!s.type || s.type === 'discrete') {\n specInfos.push({\n spec: s,\n specIndex: i,\n specPath: [this.specKey, i],\n type: ComponentTypeEnum.discreteLegend\n });\n }\n });\n return specInfos;\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n eachSeries(\n this._regions,\n s => {\n s.addViewDataFilter({\n type: 'discreteLegendFilter',\n options: {\n selected: () => this._selectedData,\n field: () => this._getSeriesLegendField(s),\n data: () => this._getLegendDefaultData()\n },\n level: TransformLevel.legendFilter\n });\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n\n protected _initLegendData(): DataView {\n registerDataSetInstanceTransform(this._option.dataSet, 'discreteLegendFilter', discreteLegendFilter);\n registerDataSetInstanceTransform(this._option.dataSet, 'discreteLegendDataMake', discreteLegendDataMake);\n const legendData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` });\n legendData.transform({\n type: 'discreteLegendDataMake',\n options: {\n series: () => {\n const result: ISeries[] = [];\n eachSeries(\n this._regions,\n s => {\n result.push(s);\n },\n {\n specIndex: this._spec.seriesIndex,\n userId: this._spec.seriesId\n }\n );\n return result;\n },\n seriesField: (s: ISeries) => this._getSeriesLegendField(s)\n }\n });\n\n return legendData;\n }\n\n protected _getSeriesLegendField(s: ISeries) {\n const defaultField = s.getSeriesField();\n if (!this._spec.scaleName) {\n return defaultField;\n }\n if (!s.getRawData()) {\n return defaultField;\n }\n const scaleSpec = this._option.globalScale.getScaleSpec(this._spec.scaleName);\n if (!scaleSpec) {\n return defaultField;\n }\n\n // field是只在图例指定了scale的情况下生效\n if (this._spec.field) {\n return this._spec.field;\n }\n\n if (!isDataDomainSpec(scaleSpec.domain)) {\n return defaultField;\n }\n const seriesData = scaleSpec.domain.find(d => d.dataId === s.getRawData().name);\n if (!seriesData) {\n return defaultField;\n }\n return seriesData.fields?.[0] ?? defaultField;\n }\n\n protected _initSelectedData(): void {\n if (this._spec.defaultSelected) {\n this._selectedData = [...this._spec.defaultSelected];\n } else {\n this._selectedData = this._getLegendDefaultData();\n }\n }\n\n private _getLegendDefaultData() {\n if (isFunction(this._spec.data)) {\n return this._getLegendItems().map((obj: LegendItemDatum) => obj.label);\n }\n\n return this._legendData.getLatestData().map((obj: Datum) => obj.key);\n }\n\n private _addDefaultTitleText(attrs: any) {\n if (attrs.title?.visible && isNil(attrs.title.text) && isNil(attrs.title.style?.text)) {\n // 默认使用第0个系列的 seriesField 别名\n const series = this._regions?.[0]?.getSeries()[0];\n if (!series) {\n return;\n }\n // 如果没有别名继续保持 空字符串\n attrs.title.text = getFieldAlias(series.getRawData(), series.getSeriesField());\n }\n }\n\n protected _getLegendAttributes(rect: ILayoutRect) {\n const layout = this.layoutOrient === 'bottom' || this.layoutOrient === 'top' ? 'horizontal' : 'vertical';\n const attrs = {\n layout,\n items: this._getLegendItems(),\n zIndex: this.layoutZIndex,\n ...getLegendAttributes(this._spec, rect),\n // maxWidth 和 maxHeight 已经在布局模块处理了,所以 rect 的优先级最高\n maxWidth: rect.width,\n maxHeight: rect.height\n };\n this._addDefaultTitleText(attrs);\n return attrs;\n }\n\n protected _getLegendConstructor() {\n return LegendComponent;\n }\n\n protected _initEvent() {\n if (this._legendComponent) {\n const doFilter = this._spec.filter !== false;\n this._legendComponent.addEventListener(LegendEvent.legendItemClick, (e: any) => {\n const selectedData = get(e, 'detail.currentSelected');\n doFilter && this.setSelectedData(selectedData);\n this.event.emit(ChartEvent.legendItemClick, { model: this, value: selectedData, event: e });\n });\n\n this._legendComponent.addEventListener(LegendEvent.legendItemHover, (e: any) => {\n const detail = get(e, 'detail');\n this.event.emit(ChartEvent.legendItemHover, { model: this, value: detail, event: e });\n });\n\n this._legendComponent.addEventListener(LegendEvent.legendItemUnHover, (e: any) => {\n const detail = get(e, 'detail');\n this.event.emit(ChartEvent.legendItemUnHover, { model: this, value: detail, event: e });\n });\n }\n }\n\n private _getLegendItems() {\n const originData = (this._legendData.getLatestData() || []).map((datum: any) => {\n const fillOpacity = datum.style('fillOpacity');\n const strokeOpacity = datum.style('strokeOpacity');\n const opacity = datum.style('opacity');\n const texture = datum.style('texture');\n\n return {\n label: datum.key,\n shape: {\n symbolType: datum.style('symbolType') ?? datum.shapeType ?? 'circle',\n fillOpacity: isValidNumber(fillOpacity) ? fillOpacity : 1,\n strokeOpacity: isValidNumber(strokeOpacity) ? strokeOpacity : 1,\n opacity: isValidNumber(opacity) ? opacity : 1,\n texturePadding: texture ? 1 : null,\n textureSize: texture ? 4 : null,\n texture,\n fill: datum.style('fill'),\n stroke: datum.style('stroke'),\n textureColor: datum.style('textureColor'),\n innerBorder: datum.style('innerBorder'),\n outerBorder: datum.style('outerBorder'),\n lineDash: datum.style('lineDash'),\n lineDashOffset: datum.style('lineDashOffset'),\n lineWidth: datum.style('lineWidth')\n }\n };\n });\n const legendItems = isFunction(this._spec.data)\n ? this._spec.data(originData, this._option.globalScale.getScale('color'), this._option.globalScale)\n : originData;\n return legendItems;\n }\n}\n\nexport const registerDiscreteLegend = () => {\n Factory.registerComponent(DiscreteLegend.type, DiscreteLegend);\n};\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { isEmpty, isValid } from '@visactor/vutils';\nimport { isPercent } from '../../../util/space';\nimport { mergeSpec } from '../../../util/spec/merge-spec';\nimport { transformComponentStyle, transformToGraphic } from '../../../util/style';\nimport { transformLegendTitleAttributes } from '../util';\nimport type { IDiscreteLegendSpec } from './interface';\nimport type { ILayoutRect } from '../../../typings/layout';\n\nexport function getLegendAttributes(spec: IDiscreteLegendSpec, rect: ILayoutRect) {\n const {\n // 需要进行样式转换的属性\n title = {},\n item = {},\n pager = {},\n background = {},\n\n // 以下不属于 legend 需要的属性,单独拿出来以免污染传递给组件的属性\n type,\n id,\n visible,\n orient,\n position,\n data,\n filter,\n regionId,\n regionIndex,\n seriesIndex,\n seriesId,\n padding, // vchart 布局模块已经处理了\n\n ...restSpec\n } = spec;\n\n const attrs: any = restSpec;\n\n // transform title\n if (title.visible) {\n attrs.title = transformLegendTitleAttributes(title);\n }\n\n // transform item\n if (!isEmpty(item.focusIconStyle)) {\n transformToGraphic(item.focusIconStyle);\n }\n item.shape = transformComponentStyle(item.shape);\n item.label = transformComponentStyle(item.label);\n item.value = transformComponentStyle(item.value);\n item.background = transformComponentStyle(item.background);\n\n if (isPercent(item.maxWidth)) {\n item.maxWidth = (Number(item.maxWidth.substring(0, item.maxWidth.length - 1)) * rect.width) / 100;\n }\n if (isPercent(item.width)) {\n item.width = (Number(item.width.substring(0, item.width.length - 1)) * rect.width) / 100;\n }\n if (isPercent(item.height)) {\n item.height = (Number(item.height.substring(0, item.height.length - 1)) * rect.width) / 100;\n }\n attrs.item = item;\n\n // transform pager\n if (!isEmpty(pager.textStyle)) {\n transformToGraphic(pager.textStyle);\n }\n transformComponentStyle(pager.handler);\n attrs.pager = pager;\n\n if (background.visible && !isEmpty(background.style)) {\n mergeSpec(attrs, background.style);\n if (isValid(background.padding)) {\n attrs.padding = background.padding;\n }\n }\n\n return attrs;\n}\n","import { isEmpty, isValidNumber } from '@visactor/vutils';\nimport type { ISeries } from '../../../../series/interface';\nimport type { IContinuousLegendDataMakeOption, IContinuousLegendFilterOption } from './interface';\n\n// 获取数值范围\nexport const continuousLegendDataMake = (data: Array, op: IContinuousLegendDataMakeOption) => {\n const { series, field, scale } = op;\n const datumField = field();\n if (field && datumField) {\n let min: number = Number.MAX_VALUE;\n let max: number = Number.MIN_VALUE;\n series().forEach(s => {\n const statisticData = s.getRawDataStatisticsByField(datumField, true);\n const seriesMin = statisticData?.min;\n const seriesMax = statisticData?.max;\n if (isValidNumber(seriesMin)) {\n min = seriesMin;\n }\n if (isValidNumber(seriesMax)) {\n max = seriesMax;\n }\n });\n return [min, max];\n }\n if (scale) {\n const _scale = scale();\n if (!_scale) {\n return [];\n }\n return _scale.domain();\n }\n return [];\n};\n\n// 连续数据过滤\nexport const continuousLegendFilter = (data: Array, op: IContinuousLegendFilterOption) => {\n const { selected, field, data: legendData } = op;\n const selectedRange = selected();\n const datumField = field();\n const dataRange = legendData();\n\n // 如果数值范围相等,就不进行返回 data,不需要进行过滤\n if (selectedRange === dataRange) {\n return data;\n }\n\n if (datumField && !isEmpty(selectedRange)) {\n const [min, max] = selectedRange;\n\n return data.filter(datum => {\n return datum[datumField] >= min && datum[datumField] <= max;\n });\n }\n\n return data;\n};\n","const clampRange = (range: [number, number], min: number, max: number): [number, number] => {\n let [lowValue, highValue] = range;\n\n if (highValue < lowValue) {\n lowValue = range[1];\n highValue = range[0];\n }\n const span = highValue - lowValue;\n\n if (span >= max - min) {\n return [min, max];\n }\n\n lowValue = Math.min(Math.max(lowValue, min), max - span);\n\n return [lowValue, lowValue + span];\n};\n\nexport default clampRange;\n","export enum SLIDER_ELEMENT_NAME {\n innerView = 'innerView',\n railContainer = 'sliderRailContainer',\n rail = 'sliderRail',\n startText = 'sliderStartText',\n endText = 'sliderEndText',\n\n startHandler = 'sliderStartHandler',\n startHandlerText = 'startHandlerText',\n endHandler = 'sliderEndHandler',\n endHandlerText = 'sliderEndHandlerText',\n\n track = 'sliderTrack',\n\n trackContainer = 'sliderTrackContainer'\n}\n","/**\n * @description slider 滑块组件\n * TODO:\n * 3. step 功能开发\n * 4. tooltip 功能开发\n */\nimport type {\n IGroup,\n ISymbol,\n IGraphic,\n ISymbolGraphicAttribute,\n IText,\n ITextGraphicAttribute,\n FederatedPointerEvent,\n Cursor\n} from '@visactor/vrender-core';\nimport { isNil, merge, clamp, isValid, array, isObject, isArray, clampRange } from '@visactor/vutils';\nimport { graphicCreator, vglobal, CustomEvent } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport { SLIDER_ELEMENT_NAME } from './constant';\n\nimport type { SliderAttributes } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadSliderComponent } from './register';\n\nfunction convertValueToRange(value: number | [number, number]) {\n if (isArray(value)) {\n return value;\n }\n return [value, value];\n}\n\nfunction getDefaultCursor(isHorizontal: boolean) {\n return isHorizontal ? 'ew-resize' : 'ns-resize';\n}\n\nloadSliderComponent();\n\nexport class Slider extends AbstractComponent> {\n name = 'slider';\n\n static defaultAttributes = {\n slidable: true,\n layout: 'horizontal',\n align: 'bottom',\n height: 8,\n showHandler: true,\n handlerSize: 14,\n handlerStyle: {\n symbolType: 'circle',\n fill: '#fff',\n stroke: '#91caff',\n lineWidth: 2\n },\n railStyle: {\n fill: 'rgba(0,0,0,.04)'\n },\n trackStyle: {\n fill: '#91caff'\n },\n showValue: true,\n valueStyle: {\n fill: '#2C3542',\n fontSize: 12\n },\n startText: {\n style: {\n fill: '#2C3542',\n fontSize: 12\n }\n },\n endText: {\n style: {\n fill: '#2C3542',\n fontSize: 12\n }\n },\n handlerText: {\n visible: true,\n space: 4,\n precision: 0,\n style: {\n fill: '#2C3542',\n fontSize: 12\n }\n }\n };\n\n protected _isHorizontal = true;\n protected _innerView!: IGroup;\n protected _startHandler: ISymbol | null = null;\n protected _endHandler: ISymbol | null = null;\n protected _startHandlerText: IText | null = null;\n protected _endHandlerText: IText | null = null;\n protected _railContainer!: IGroup;\n protected _rail!: IGraphic;\n protected _track!: IGraphic;\n // 保留滑块上一次的位置\n private _prePos!: number;\n // 存储当前正在操作的滑块\n private _currentHandler: IGraphic | null = null;\n private _currentValue: { startValue?: number; endValue?: number; startPos?: number; endPos?: number } = {};\n\n get track() {\n return this._track;\n }\n\n get currentValue() {\n return this._currentValue;\n }\n\n get startHandler() {\n return this._startHandler;\n }\n\n get endHandler() {\n return this._endHandler;\n }\n\n constructor(attributes: SliderAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Slider.defaultAttributes, attributes));\n }\n\n /**\n * 更新值域\n */\n setValue(value: number | number[]) {\n const { layout, railWidth, railHeight, min, max } = this.attribute as SliderAttributes;\n if (max === min) {\n return;\n }\n\n const [startValue, endValue] = array(value);\n\n const { startHandler, endHandler } = this._getHandlers();\n const railLen = layout === 'vertical' ? railHeight : railWidth;\n const startPos = ((startValue - min) / (max - min)) * railLen;\n if (startHandler) {\n this._updateHandler(startHandler, startPos, startValue);\n }\n\n if (endHandler) {\n const endPos = ((endValue - min) / (max - min)) * railLen;\n this._updateHandler(endHandler, endPos, endValue);\n }\n\n this._updateTrack();\n }\n\n render() {\n this.removeAllChild();\n const {\n layout = 'horizontal',\n railWidth,\n railHeight,\n startText,\n endText,\n min,\n max,\n showHandler = true\n } = this.attribute as SliderAttributes;\n let { value } = this.attribute as SliderAttributes;\n if (isNil(value)) {\n value = [min, max];\n }\n\n this._currentValue = {\n startValue: convertValueToRange(value)[0],\n endValue: convertValueToRange(value)[1]\n };\n const isHorizontal = layout === 'horizontal';\n this._isHorizontal = isHorizontal;\n\n const innerView = graphicCreator.group({\n x: 0,\n y: 0\n });\n innerView.name = SLIDER_ELEMENT_NAME.innerView;\n this.add(innerView);\n this._innerView = innerView;\n\n let startLen = 0;\n let startTextShape;\n if (startText && startText.visible) {\n // 渲染首部文本\n startTextShape = graphicCreator.text({\n x: isHorizontal ? 0 : railWidth / 2,\n y: isHorizontal ? (railHeight as number) / 2 : 0,\n textAlign: isHorizontal ? 'start' : 'center',\n textBaseline: isHorizontal ? 'middle' : 'top',\n text: startText.text,\n lineHeight: startText.style?.fontSize,\n ...startText.style\n });\n startTextShape.name = SLIDER_ELEMENT_NAME.startText;\n innerView.add(startTextShape);\n const space = isValid(startText.space) ? startText.space : 0;\n startLen += (isHorizontal ? startTextShape.AABBBounds.width() : startTextShape.AABBBounds.height()) + space;\n }\n const mainContainer = graphicCreator.group({\n x: isHorizontal ? startLen : 0,\n y: isHorizontal ? 0 : startLen\n });\n innerView.add(mainContainer);\n\n const railContainer = graphicCreator.group({\n x: 0,\n y: 0\n });\n railContainer.name = SLIDER_ELEMENT_NAME.railContainer;\n this._railContainer = railContainer;\n mainContainer.add(railContainer);\n\n this._renderRail(railContainer);\n\n startLen += isHorizontal ? (railWidth as number) : (railHeight as number);\n\n let endTextShape;\n if (endText && endText.visible) {\n const space = isValid(endText.space) ? endText.space : 0;\n\n // 渲染首部文本\n endTextShape = graphicCreator.text({\n x: isHorizontal ? startLen + space : railWidth / 2,\n y: isHorizontal ? (railHeight as number) / 2 : startLen + space,\n textAlign: isHorizontal ? 'start' : 'center',\n textBaseline: isHorizontal ? 'middle' : 'top',\n text: endText.text,\n lineHeight: endText.style?.fontSize,\n ...endText.style\n });\n endTextShape.name = SLIDER_ELEMENT_NAME.endText;\n innerView.add(endTextShape);\n }\n\n this._renderTrack(railContainer);\n\n if (showHandler) {\n this._renderHandlers(mainContainer);\n this._bindEvents();\n }\n }\n\n // 渲染滑块轨道\n protected _renderRail(container: IGroup) {\n const { railWidth, railHeight, railStyle, slidable } = this.attribute;\n\n let cursor: Cursor = 'default';\n if (slidable !== false) {\n cursor = 'pointer';\n }\n\n const railShape = graphicCreator.rect({\n x: 0,\n y: 0,\n width: railWidth,\n height: railHeight,\n cursor,\n ...railStyle\n });\n railShape.name = SLIDER_ELEMENT_NAME.rail;\n container.add(railShape);\n this._rail = railShape;\n\n return railShape;\n }\n\n // 渲染 handler\n protected _renderHandlers(container: IGroup) {\n const {\n range,\n min,\n max,\n handlerSize = 14,\n handlerStyle,\n handlerText,\n railHeight,\n railWidth,\n slidable\n } = this.attribute as SliderAttributes;\n let { value } = this.attribute as SliderAttributes;\n if (isNil(value)) {\n value = [min, max];\n }\n\n const handlerTextVisible = handlerText && handlerText.visible;\n const isHorizontal = this._isHorizontal;\n const railLen = isHorizontal ? railWidth : railHeight;\n\n const [startValue, endValue] = convertValueToRange(value);\n // 单滑块\n const handlerStart = max === min ? (range ? 0 : railLen) : (((startValue as number) - min) / (max - min)) * railLen;\n const startHandler = this._renderHandler({\n x: isHorizontal ? handlerStart : railWidth / 2,\n y: isHorizontal ? railHeight / 2 : handlerStart,\n size: handlerSize,\n strokeBoundsBuffer: 0,\n cursor: slidable === false ? 'default' : getDefaultCursor(isHorizontal),\n ...handlerStyle\n });\n startHandler.name = SLIDER_ELEMENT_NAME.startHandler;\n this._startHandler = startHandler;\n container.add(startHandler);\n this._currentValue.startPos = handlerStart;\n\n if (handlerTextVisible) {\n const startHandlerText = this._renderHandlerText(startValue, range ? 'start' : 'end');\n startHandlerText.name = SLIDER_ELEMENT_NAME.startHandlerText;\n container.add(startHandlerText);\n\n this._startHandlerText = startHandlerText;\n }\n\n if (range) {\n // 绘制第二个滑块\n // 单滑块\n const handlerEnd = max === min ? railLen : (((endValue as number) - min) / (max - min)) * railLen;\n const endHandler = this._renderHandler({\n x: isHorizontal ? handlerEnd : railWidth / 2,\n y: isHorizontal ? railHeight / 2 : handlerEnd,\n size: handlerSize,\n strokeBoundsBuffer: 0,\n cursor: slidable === false ? 'default' : getDefaultCursor(isHorizontal),\n ...handlerStyle\n });\n endHandler.name = SLIDER_ELEMENT_NAME.endHandler;\n this._endHandler = endHandler;\n container.add(endHandler);\n this._currentValue.endPos = handlerEnd;\n\n if (handlerTextVisible) {\n const endHandlerText = this._renderHandlerText(endValue, 'end');\n endHandlerText.name = SLIDER_ELEMENT_NAME.endHandlerText;\n container.add(endHandlerText);\n\n this._endHandlerText = endHandlerText;\n }\n }\n }\n\n // 渲染选中区域\n protected _renderTrack(container: IGroup) {\n const { range, min, max, railHeight, railWidth, trackStyle, railStyle, slidable, value } = this\n .attribute as SliderAttributes;\n\n let startValue;\n let endValue;\n\n if (isNil(value)) {\n if (range) {\n startValue = min;\n endValue = max;\n } else {\n startValue = endValue = min;\n }\n } else {\n if (range) {\n const clampValue = clampRange(value as [number, number], min, max);\n startValue = clampValue[0];\n endValue = clampValue[1];\n } else {\n startValue = min;\n endValue = clamp(value as number, min, max);\n }\n }\n\n const isHorizontal = this._isHorizontal;\n const railLen = isHorizontal ? railWidth : railHeight;\n // eslint-disable-next-line prefer-const\n // let [startValue, endValue] = convertValueToRange(value);\n\n if (!range) {\n startValue = min;\n }\n\n const trackContainer = graphicCreator.group({\n x: 0,\n y: 0,\n width: railWidth,\n height: railHeight,\n cornerRadius: railStyle?.cornerRadius,\n clip: true,\n pickable: false\n });\n trackContainer.name = SLIDER_ELEMENT_NAME.trackContainer;\n\n const draggableTrack = isObject(range) && range.draggableTrack === true;\n let cursor: Cursor;\n if (slidable === false) {\n cursor = 'default';\n } else if (range === false) {\n cursor = 'pointer';\n } else if (draggableTrack === false) {\n cursor = 'pointer';\n } else {\n cursor = getDefaultCursor(isHorizontal);\n }\n\n const trackWidth = max === min ? railLen : ((endValue - startValue) / (max - min)) * railLen;\n const startPos = max === min ? 0 : ((startValue - min) / (max - min)) * railLen;\n const track = graphicCreator.rect({\n x: isHorizontal ? startPos : 0,\n y: isHorizontal ? 0 : startPos,\n width: isHorizontal ? trackWidth : railWidth,\n height: isHorizontal ? railHeight : trackWidth,\n cursor,\n ...trackStyle\n });\n track.name = SLIDER_ELEMENT_NAME.track;\n this._track = track;\n trackContainer.add(track);\n container.add(trackContainer);\n }\n\n protected _renderHandler(style: Partial) {\n // 渲染单个滑块\n const handler = graphicCreator.symbol(style);\n\n return handler;\n }\n\n private _renderHandlerText(value: number, position: string) {\n const {\n align,\n min,\n max,\n handlerSize = 14,\n handlerText = {},\n railHeight,\n railWidth,\n slidable\n } = this.attribute as SliderAttributes;\n\n const isHorizontal = this._isHorizontal;\n const railLen = isHorizontal ? railWidth : railHeight;\n const handlerStart =\n max === min ? (position === 'start' ? 0 : railLen) : (((value as number) - min) / (max - min)) * railLen;\n const textSpace = handlerText.space ?? 4;\n const textStyle: ITextGraphicAttribute = {\n text: handlerText.formatter ? handlerText.formatter(value) : value.toFixed(handlerText.precision ?? 0),\n lineHeight: handlerText.style?.lineHeight,\n cursor: slidable === false ? 'default' : getDefaultCursor(isHorizontal)\n };\n if (isHorizontal) {\n if (align === 'top') {\n // 展示 slider 上部\n textStyle.textBaseline = 'bottom';\n textStyle.textAlign = 'center';\n textStyle.x = handlerStart;\n textStyle.y = (railHeight - handlerSize) / 2 - textSpace;\n } else {\n // 展示 slider 下部\n textStyle.textBaseline = 'top';\n textStyle.textAlign = 'center';\n textStyle.x = handlerStart;\n textStyle.y = (railHeight + handlerSize) / 2 + textSpace;\n }\n } else {\n if (align === 'left') {\n // 展示 slider 左侧\n textStyle.textBaseline = 'middle';\n textStyle.textAlign = 'end';\n textStyle.x = (railWidth - handlerSize) / 2 - textSpace;\n textStyle.y = handlerStart;\n } else {\n // 展示 slider 右侧\n textStyle.textBaseline = 'middle';\n textStyle.textAlign = 'start';\n textStyle.x = (railWidth + handlerSize) / 2 + textSpace;\n textStyle.y = handlerStart;\n }\n }\n\n // 展示 handler 当前所在的数值\n const textShape = graphicCreator.text({\n ...textStyle,\n ...handlerText.style\n });\n return textShape;\n }\n\n private _bindEvents() {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n const { slidable, range } = this.attribute as SliderAttributes;\n if (slidable) {\n if (this._startHandler) {\n this._startHandler.addEventListener(\n 'pointerdown',\n this._onHandlerPointerdown as EventListenerOrEventListenerObject\n );\n }\n if (this._startHandlerText) {\n this._startHandlerText.addEventListener(\n 'pointerdown',\n this._onHandlerPointerdown as EventListenerOrEventListenerObject\n );\n }\n if (this._endHandler) {\n this._endHandler.addEventListener(\n 'pointerdown',\n this._onHandlerPointerdown as EventListenerOrEventListenerObject\n );\n }\n if (this._endHandlerText) {\n this._endHandlerText.addEventListener(\n 'pointerdown',\n this._onHandlerPointerdown as EventListenerOrEventListenerObject\n );\n }\n\n if (isObject(range) && range.draggableTrack) {\n this._track.addEventListener('pointerdown', this._onTrackPointerdown as EventListenerOrEventListenerObject);\n }\n\n this._railContainer.addEventListener(\n 'pointerdown',\n this._onRailPointerDown as EventListenerOrEventListenerObject\n );\n }\n }\n\n private _onHandlerPointerdown = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this._currentHandler = e.target as unknown as IGraphic;\n this._prePos = this._isHorizontal ? e.clientX : e.clientY;\n if (vglobal.env === 'browser') {\n vglobal.addEventListener('pointermove', this._onHandlerPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n vglobal.addEventListener('pointerup', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n } else {\n this.stage.addEventListener('pointermove', this._onHandlerPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n this.stage.addEventListener('pointerup', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n this.stage.addEventListener('pointerupoutside', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n }\n };\n\n private _onHandlerPointerMove = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n const { railWidth, railHeight, min, max } = this.attribute as SliderAttributes;\n if (max === min) {\n return;\n }\n\n let currentPos;\n let delta = 0;\n let originPos;\n let railLen;\n if (!this._isHorizontal) {\n currentPos = e.clientY;\n delta = currentPos - this._prePos; // 实际位移的变化\n originPos = this._currentHandler?.attribute.y as number;\n railLen = railHeight;\n } else {\n currentPos = e.clientX;\n delta = currentPos - this._prePos; // 实际位移的变化\n originPos = this._currentHandler?.attribute.x as number;\n railLen = railWidth;\n }\n\n const newPos = clamp(originPos + delta, 0, railLen);\n const currentValue = (newPos / railLen) * (max - min) + min;\n\n if (this._currentHandler.type === 'text') {\n this._updateHandlerText(this._currentHandler as IText, newPos, currentValue);\n } else {\n this._updateHandler(this._currentHandler as ISymbol, newPos, currentValue);\n }\n\n this._updateTrack();\n this._prePos = currentPos;\n\n this._dispatchChangeEvent();\n };\n\n private _onHandlerPointerUp = (e: FederatedPointerEvent) => {\n e.preventDefault();\n this._currentHandler = null;\n if (vglobal.env === 'browser') {\n vglobal.removeEventListener('pointermove', this._onHandlerPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n vglobal.removeEventListener('pointerup', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n } else {\n this.stage.removeEventListener('pointermove', this._onHandlerPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n this.stage.removeEventListener('pointerup', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n this.stage.removeEventListener(\n 'pointerupoutside',\n this._onHandlerPointerUp as EventListenerOrEventListenerObject\n );\n }\n };\n\n private _onTrackPointerdown = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this._prePos = this._isHorizontal ? e.clientX : e.clientY;\n if (vglobal.env === 'browser') {\n vglobal.addEventListener('pointermove', this._onTrackPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n vglobal.addEventListener('pointerup', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n } else {\n this.stage.addEventListener('pointermove', this._onTrackPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n this.stage.addEventListener('pointerup', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n this.stage.addEventListener('pointerupoutside', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n }\n };\n\n private _onTrackPointerMove = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n const { railWidth, railHeight, min, max } = this.attribute as SliderAttributes;\n\n if (max === min) {\n return;\n }\n const { startHandler, endHandler } = this._getHandlers();\n\n let currentPos;\n let trackLen;\n let railLen;\n if (this._isHorizontal) {\n currentPos = e.clientX;\n // @ts-ignore\n trackLen = this._track.attribute.width;\n railLen = railWidth;\n } else {\n currentPos = e.clientY;\n // @ts-ignore\n trackLen = this._track.attribute.height;\n railLen = railHeight;\n }\n const delta = currentPos - this._prePos; // 实际位移的变化\n if (startHandler) {\n const originPos = (this._isHorizontal ? startHandler.attribute.x : startHandler.attribute.y) as number;\n const newPos = clamp(originPos + delta, 0, railLen - trackLen);\n const currentValue = (newPos / railLen) * (max - min) + min;\n this._updateHandler(startHandler, newPos, currentValue);\n }\n\n if (endHandler) {\n const originPos = (this._isHorizontal ? endHandler.attribute.x : endHandler.attribute.y) as number;\n const newPos = clamp(originPos + delta, trackLen, railLen);\n const currentValue = (newPos / railLen) * (max - min) + min;\n const startHandlerAttribute = startHandler?.attribute;\n this._updateHandler(endHandler, newPos, currentValue);\n this._track.setAttributes(\n this._isHorizontal\n ? {\n x: Math.min(startHandlerAttribute.x as number, endHandler.attribute.x as number),\n // @ts-ignore\n width: Math.abs((startHandlerAttribute.x as number) - (endHandler.attribute.x as number))\n }\n : {\n y: Math.min(startHandlerAttribute.y as number, endHandler.attribute.y as number),\n // @ts-ignore\n height: Math.abs((startHandlerAttribute.y as number) - (endHandler.attribute.y as number))\n }\n );\n }\n\n this._prePos = currentPos;\n this._dispatchChangeEvent();\n };\n\n private _onTrackPointerUp = (e: FederatedPointerEvent) => {\n e.preventDefault();\n if (vglobal.env === 'browser') {\n vglobal.removeEventListener('pointermove', this._onTrackPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n vglobal.removeEventListener('pointerup', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n } else {\n this.stage.removeEventListener('pointermove', this._onTrackPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n this.stage.removeEventListener('pointerup', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n this.stage.removeEventListener('pointerupoutside', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n }\n };\n\n private _onRailPointerDown = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n const { railWidth, railHeight, min, max } = this.attribute as SliderAttributes;\n\n if (max === min) {\n return;\n }\n\n const startHandler = this._startHandler as ISymbol;\n const endHandler = this._endHandler;\n\n let currentPos;\n let startHandlerPos;\n let endHandlerPos;\n let railLen;\n // 更新 handler, text 以及 track\n if (this._isHorizontal) {\n currentPos = e.viewX - this._rail.globalAABBBounds.x1;\n startHandlerPos = startHandler?.attribute.x as number;\n endHandlerPos = endHandler?.attribute.x;\n railLen = railWidth;\n } else {\n currentPos = e.viewY - this._rail.globalAABBBounds.y1;\n startHandlerPos = startHandler?.attribute.y as number;\n endHandlerPos = endHandler?.attribute.y;\n railLen = railHeight;\n }\n\n const currentValue = (currentPos / railLen) * (max - min) + min;\n\n if (isValid(endHandlerPos)) {\n const updateHandler = (\n Math.abs(currentPos - startHandlerPos) > Math.abs(currentPos - endHandlerPos) ? endHandler : startHandler\n ) as ISymbol;\n this._updateHandler(updateHandler, currentPos, currentValue);\n } else {\n this._updateHandler(startHandler, currentPos, currentValue);\n }\n this._updateTrack();\n\n this._dispatchChangeEvent();\n };\n\n // 更新 track 样式\n private _updateTrack() {\n // 更新 track\n const startHandler = this._startHandler;\n const endHandler = this._endHandler;\n\n if (this._isHorizontal) {\n const startHandlerPos = startHandler?.attribute.x as number;\n if (endHandler) {\n const endHandlerPos = endHandler?.attribute.x as number;\n // 区间\n this._track.setAttributes({\n x: Math.min(startHandlerPos, endHandlerPos),\n // @ts-ignore\n width: Math.abs(startHandlerPos - endHandlerPos)\n });\n } else {\n this._track.setAttributes({\n // @ts-ignore\n width: startHandlerPos\n });\n }\n } else {\n const startHandlerPos = startHandler?.attribute.y as number;\n if (endHandler) {\n const endHandlerPos = endHandler?.attribute.y as number;\n // 区间\n this._track.setAttributes({\n y: Math.min(startHandlerPos, endHandlerPos),\n // @ts-ignore\n height: Math.abs(startHandlerPos - endHandlerPos)\n });\n } else {\n this._track.setAttributes({\n // @ts-ignore\n height: startHandlerPos\n });\n }\n }\n }\n\n // 更新 handler 以及对应 text\n private _updateHandler(handler: ISymbol, position: number, value: number) {\n const isHorizontal = this._isHorizontal;\n handler.setAttribute(isHorizontal ? 'x' : 'y', position);\n const updateHandlerText =\n handler.name === SLIDER_ELEMENT_NAME.startHandler ? this._startHandlerText : this._endHandlerText;\n if (updateHandlerText) {\n const { handlerText = {} } = this.attribute as SliderAttributes;\n updateHandlerText.setAttributes({\n text: handlerText.formatter ? handlerText.formatter(value) : value.toFixed(handlerText.precision ?? 0),\n [isHorizontal ? 'x' : 'y']: position\n });\n }\n\n if (handler.name === SLIDER_ELEMENT_NAME.startHandler) {\n this._currentValue.startValue = value;\n this._currentValue.startPos = position;\n } else {\n this._currentValue.endValue = value;\n this._currentValue.endPos = position;\n }\n }\n\n // 更新 handler 以及对应 text\n private _updateHandlerText(handlerText: IText, position: number, value: number) {\n const isHorizontal = this._isHorizontal;\n const { handlerText: handlerTextAttr = {} } = this.attribute as SliderAttributes;\n handlerText.setAttributes({\n [isHorizontal ? 'x' : 'y']: position,\n text: handlerTextAttr.formatter ? handlerTextAttr.formatter(value) : value.toFixed(handlerTextAttr.precision ?? 0)\n });\n const updateHandler =\n handlerText.name === SLIDER_ELEMENT_NAME.startHandlerText ? this._startHandler : this._endHandler;\n if (updateHandler) {\n updateHandler.setAttributes({\n [isHorizontal ? 'x' : 'y']: position\n });\n }\n\n if (handlerText.name === SLIDER_ELEMENT_NAME.startHandlerText) {\n this._currentValue.startValue = value;\n this._currentValue.startPos = position;\n } else {\n this._currentValue.endValue = value;\n this._currentValue.endPos = position;\n }\n }\n\n private _dispatchChangeEvent() {\n const isRange = !!this.attribute.range;\n const currentValue = this._currentValue;\n\n this._dispatchEvent('change', {\n value: isRange\n ? [\n Math.min(currentValue.endValue as number, currentValue.startValue as number),\n Math.max(currentValue.endValue as number, currentValue.startValue as number)\n ]\n : currentValue.startValue,\n position: isRange\n ? [\n Math.min(currentValue.endPos as number, currentValue.startPos as number),\n Math.max(currentValue.endPos as number, currentValue.startPos as number)\n ]\n : currentValue.startPos\n });\n }\n\n private _getHandlers() {\n let startHandler = this._startHandler;\n let endHandler = this._endHandler;\n let temp;\n\n if (this._isHorizontal) {\n if (endHandler && (endHandler.attribute.x as number) < (startHandler?.attribute.x as number)) {\n temp = startHandler;\n startHandler = endHandler;\n endHandler = temp;\n }\n } else {\n if (endHandler && (endHandler.attribute.y as number) < (startHandler?.attribute.y as number)) {\n temp = startHandler;\n startHandler = endHandler;\n endHandler = temp;\n }\n }\n\n return {\n startHandler,\n endHandler\n };\n }\n}\n","/**\n * @description 连续颜色图例\n * TODO:\n * showHandlers 测试\n */\nimport { merge, isEmpty, get } from '@visactor/vutils';\nimport type { FederatedPointerEvent, IColor, ILinearGradient, INode } from '@visactor/vrender-core';\nimport type { ILinearScale } from '@visactor/vscale';\nimport { LinearScale } from '@visactor/vscale';\nimport { LegendBase } from '../base';\nimport { Slider } from '../../slider';\nimport { DEFAULT_TITLE_SPACE } from '../constant';\nimport type { ColorLegendAttributes } from './type';\nimport type { ComponentOptions } from '../../interface';\nimport { loadColorContinuousLegendComponent } from '../register';\n\nloadColorContinuousLegendComponent();\nexport class ColorContinuousLegend extends LegendBase {\n name = 'colorLegend';\n\n static defaultAttributes = {\n layout: 'horizontal',\n title: {\n // orient: 'top',\n align: 'start',\n space: DEFAULT_TITLE_SPACE,\n textStyle: {\n fontSize: 12,\n fontWeight: 'bold',\n fill: 'rgba(46, 47, 50, 1)'\n }\n },\n handlerSize: 10,\n handlerStyle: {\n lineWidth: 4,\n stroke: '#fff',\n outerBorder: {\n distance: 2,\n lineWidth: 1,\n stroke: '#ccc'\n }\n }\n };\n\n private _slider!: Slider;\n private _colorScale!: ILinearScale;\n private _color: IColor | undefined;\n\n constructor(attributes: ColorLegendAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, ColorContinuousLegend.defaultAttributes, attributes));\n }\n\n /**\n * 更新数据选中范围\n * @param value 选中数据范围\n * @returns\n */\n setSelected(value: number[]) {\n if (!this._slider) {\n return;\n }\n this._slider.setValue(value);\n this._updateColor();\n }\n\n protected _renderContent(): void {\n const {\n colors,\n slidable,\n layout,\n align,\n min,\n max,\n value,\n railWidth,\n railHeight,\n showHandler = true,\n handlerSize,\n handlerStyle,\n railStyle,\n trackStyle,\n startText,\n endText,\n handlerText,\n showTooltip,\n tooltip,\n disableTriggerEvent\n } = this.attribute as ColorLegendAttributes;\n\n // 创建 colorScale\n const domain = [];\n const step = (max - min) / (colors.length - 1);\n for (let i = 0; i < colors.length; i++) {\n domain.push(min + step * i);\n }\n this._colorScale = new LinearScale().domain(domain, true).range(colors);\n this._color = this._getTrackColor();\n\n const slider = new Slider({\n x: 0,\n y: 0,\n range: {\n draggableTrack: true\n },\n slidable,\n layout,\n align,\n min,\n max,\n value,\n railWidth,\n railHeight,\n showHandler,\n handlerSize,\n handlerStyle,\n railStyle,\n trackStyle: {\n fill: this._color,\n ...trackStyle\n },\n startText,\n endText,\n handlerText,\n showTooltip,\n tooltip,\n disableTriggerEvent\n });\n this._innerView.add(slider as unknown as INode);\n this._slider = slider;\n // 做下位置调整,对齐\n slider.translateTo(\n 0 - slider.AABBBounds.x1,\n (this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', DEFAULT_TITLE_SPACE) : 0) -\n slider.AABBBounds.y1\n );\n this._updateColor();\n }\n\n protected _bindEvents(): void {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n if (this._slider) {\n this._slider.addEventListener('change', this._onSliderChange as EventListenerOrEventListenerObject);\n }\n }\n\n private _getTrackColor(): IColor | undefined {\n const { colors, layout } = this.attribute as ColorLegendAttributes;\n\n if (isEmpty(colors)) {\n return undefined;\n }\n const count = colors.length;\n if (count === 1) {\n return colors[0];\n }\n const stops = [];\n\n for (let i = 0; i < count; i++) {\n const percent = i / (count - 1);\n stops.push({\n offset: percent,\n color: colors[i]\n });\n }\n const isHorizontal = layout === 'horizontal';\n return {\n gradient: 'linear',\n stops,\n x0: 0,\n y0: 0,\n x1: isHorizontal ? 1 : 0,\n y1: isHorizontal ? 0 : 1\n };\n }\n\n private _onSliderChange = (e: FederatedPointerEvent) => {\n // 更新 handler 以及 track 的渐变色\n this._updateColor();\n this.dispatchEvent(e);\n };\n\n private _updateColor() {\n const { layout = 'horizontal', colors, railWidth, railHeight } = this.attribute as ColorLegendAttributes;\n const { startHandler, endHandler, track } = this._slider;\n const { startValue, endValue, startPos, endPos } = this._slider.currentValue;\n\n // 计算颜色\n const startHandlerColor = this._colorScale.scale(startValue);\n const endHandlerColor = this._colorScale.scale(endValue);\n startHandler?.setAttribute('fill', startHandlerColor);\n endHandler?.setAttribute('fill', endHandlerColor);\n\n const isHorizontal = layout === 'horizontal';\n const railLen = isHorizontal ? railWidth : railHeight;\n const trackLength = Math.abs((startPos as number) - (endPos as number));\n\n // 计算渐变色\n if (trackLength !== railLen && colors && colors.length > 1) {\n const stops = (this._color as ILinearGradient).stops;\n const start = Math.min(startPos as number, endPos as number);\n const end = Math.max(startPos as number, endPos as number);\n const startRatio = start / railLen;\n const endRatio = end / railLen;\n const range = endRatio - startRatio;\n const betweenStops = stops.filter(stop => stop.offset > startRatio && stop.offset < endRatio);\n\n const minValue = Math.min(startValue, endValue);\n const maxValue = Math.max(startValue, endValue);\n const startColor = this._colorScale.scale(minValue);\n const endColor = this._colorScale.scale(maxValue);\n const newStops = [{ offset: 0, color: startColor }];\n betweenStops.forEach(stop => {\n newStops.push({\n offset: (stop.offset - startRatio) / range,\n color: stop.color\n });\n });\n newStops.push({\n offset: 1,\n color: endColor\n });\n track.setAttribute('fill', {\n ...(this._color as ILinearGradient),\n stops: newStops\n });\n }\n }\n}\n","import type { OrientType } from '../interface';\n\nexport function getSizeHandlerPath(align: OrientType = 'bottom') {\n let centerX = 0;\n const centerY = 0;\n const upperHalf = 3.5;\n const leftHalf = 2.5;\n const arrowY = 6;\n\n if (align === 'top') {\n return `\n M${centerX},${centerY - arrowY}L${centerX - upperHalf},${centerY - leftHalf}\n v${2 * leftHalf}\n h${2 * upperHalf}\n v${-2 * leftHalf}\n Z\n`;\n }\n\n if (align === 'left') {\n centerX = 1;\n return `\n M${centerX - arrowY},${centerY}L${centerX - arrowY + leftHalf},${centerY - upperHalf}\n h${2 * leftHalf}\n v${2 * upperHalf}\n h${-2 * leftHalf}\n Z\n`;\n }\n\n if (align === 'right') {\n centerX = -1;\n\n return `\n M${centerX + arrowY},${centerY}L${centerX + arrowY - leftHalf},${centerY - upperHalf}\n h${-2 * leftHalf}\n v${2 * upperHalf}\n h${2 * leftHalf}\n Z\n `;\n }\n\n return `\n M${centerX},${centerY + arrowY}L${centerX - upperHalf},${centerY + leftHalf}\n v${-2 * leftHalf}\n h${2 * upperHalf}\n v${2 * leftHalf}\n Z\n`;\n}\n","/**\n * @description 连续尺寸图例\n */\nimport type { FederatedPointerEvent, INode } from '@visactor/vrender-core';\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { merge, get } from '@visactor/vutils';\nimport { LegendBase } from '../base';\nimport { Slider } from '../../slider';\nimport { DEFAULT_TITLE_SPACE } from '../constant';\nimport type { ComponentOptions } from '../../interface';\nimport type { SizeLegendAttributes } from './type';\nimport { getSizeHandlerPath } from '../util';\nimport { loadSizeContinuousLegendComponent } from '../register';\n\nloadSizeContinuousLegendComponent();\nexport class SizeContinuousLegend extends LegendBase {\n name = 'sizeLegend';\n\n static defaultAttributes = {\n layout: 'horizontal',\n title: {\n align: 'start',\n space: DEFAULT_TITLE_SPACE,\n textStyle: {\n fontSize: 12,\n fontWeight: 'bold',\n fill: 'rgba(46, 47, 50, 1)'\n }\n },\n handlerSize: 10,\n handlerStyle: {\n lineWidth: 1,\n stroke: '#ccc',\n fill: '#fff'\n },\n sizeBackground: {\n fill: 'rgba(20,20,20,0.1)'\n }\n };\n\n private _slider!: Slider;\n\n constructor(attributes: SizeLegendAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, SizeContinuousLegend.defaultAttributes, attributes));\n }\n\n setSelected(value: number[]) {\n if (!this._slider) {\n return;\n }\n this._slider.setValue(value);\n }\n\n protected _renderContent(): void {\n const {\n slidable,\n layout,\n align,\n min,\n max,\n value,\n railWidth,\n railHeight,\n showHandler = true,\n handlerSize,\n handlerStyle,\n railStyle,\n trackStyle,\n startText,\n endText,\n handlerText,\n showTooltip,\n tooltip,\n sizeBackground,\n disableTriggerEvent\n } = this.attribute as SizeLegendAttributes;\n const isHorizontal = layout === 'horizontal';\n\n const mainContainer = graphicCreator.group({\n x: 0,\n y: 0\n });\n this._innerView.add(mainContainer);\n\n const slider = new Slider({\n x: 0,\n y: 0,\n zIndex: 1,\n range: {\n draggableTrack: true\n },\n slidable,\n layout,\n align,\n min,\n max,\n value,\n railWidth,\n railHeight,\n showHandler,\n handlerSize,\n handlerStyle: {\n symbolType: getSizeHandlerPath(align),\n ...handlerStyle\n },\n railStyle,\n trackStyle,\n startText,\n endText,\n handlerText,\n showTooltip,\n tooltip,\n disableTriggerEvent\n });\n mainContainer.add(slider as unknown as INode);\n\n // 绘制 size 背景\n let start = 0;\n let path;\n const backgroundHeight = 12; // 目前暂不开放配置\n if (layout === 'horizontal') {\n if (align === 'top') {\n path = `M0,0L${railWidth},0L${railWidth},${backgroundHeight}Z`;\n start = railHeight;\n } else {\n path = `M0,${backgroundHeight}L${railWidth},${backgroundHeight}L${railWidth},0Z`;\n slider.setAttribute('y', backgroundHeight);\n }\n } else {\n if (align === 'left') {\n path = `M${railWidth},0L${railWidth},0L${\n railWidth + backgroundHeight\n },${railHeight}L${railWidth},${railHeight}Z`;\n } else {\n path = `M0,${railHeight}L${backgroundHeight},${railHeight}L${backgroundHeight},0Z`;\n slider.setAttribute('x', backgroundHeight);\n }\n }\n const background = graphicCreator.path({\n x: 0,\n y: start,\n path,\n ...sizeBackground,\n zIndex: 0\n });\n mainContainer.add(background);\n\n // 做下位置调整\n const titleSpace = this._title\n ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', DEFAULT_TITLE_SPACE)\n : 0;\n\n mainContainer.translate(0 - mainContainer.AABBBounds.x1, titleSpace - mainContainer.AABBBounds.y1);\n\n this._slider = slider;\n }\n\n protected _bindEvents(): void {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n if (this._slider) {\n this._slider.addEventListener('change', this._onSliderChange as EventListenerOrEventListenerObject);\n }\n }\n\n private _onSliderChange = (e: FederatedPointerEvent) => {\n this.dispatchEvent(e);\n };\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport type { IColorLegendSpec, ISizeLegendSpec } from './interface';\nimport { ColorContinuousLegend, SizeContinuousLegend } from '@visactor/vrender-components';\nimport { isEmpty, isValid } from '@visactor/vutils';\nimport { mergeSpec } from '../../../util/spec/merge-spec';\nimport { transformComponentStyle, transformToGraphic } from '../../../util/style';\nimport { transformLegendTitleAttributes } from '../util';\n\n// 获取连续图例组件属性\nexport function getContinuousLegendAttributes(spec: IColorLegendSpec | ISizeLegendSpec) {\n const {\n // 需要进行样式转换的属性\n title = {},\n handler = {},\n rail = {},\n track = {},\n startText,\n endText,\n handlerText,\n sizeBackground,\n background = {},\n\n // 以下不属于 legend 需要的属性,单独拿出来以免污染传递给组件的属性\n type,\n id,\n visible,\n orient,\n position,\n data,\n defaultSelected,\n field,\n filter,\n regionId,\n regionIndex,\n seriesIndex,\n seriesId,\n padding, // vchart 布局模块已经处理了\n\n ...restSpec\n } = mergeSpec({}, spec);\n\n const attrs = restSpec;\n\n // transform title\n if (title.visible) {\n attrs.title = transformLegendTitleAttributes(title);\n }\n\n // handlerStyle\n attrs.showHandler = handler.visible !== false;\n if (!isEmpty(handler.style)) {\n attrs.handlerStyle = transformToGraphic(handler.style);\n }\n if (isValid(rail.width)) {\n attrs.railWidth = rail.width;\n }\n if (isValid(rail.height)) {\n attrs.railHeight = rail.height;\n }\n if (!isEmpty(rail.style)) {\n attrs.railStyle = transformToGraphic(rail.style);\n }\n if (!isEmpty(track.style)) {\n attrs.trackStyle = transformToGraphic(track.style);\n }\n\n attrs.startText = transformComponentStyle(startText);\n attrs.endText = transformComponentStyle(endText);\n attrs.handlerText = transformComponentStyle(handlerText);\n\n if (!isEmpty(sizeBackground)) {\n attrs.sizeBackground = transformToGraphic(sizeBackground);\n }\n\n if (background.visible && !isEmpty(background.style)) {\n mergeSpec(attrs, background.style);\n if (isValid(background.padding)) {\n attrs.padding = background.padding;\n }\n }\n\n return attrs;\n}\n\nexport function isContinuousLegend(type: string) {\n return type === 'color' || type === 'size';\n}\n\nexport const ContinuousLegendMap = {\n color: ColorContinuousLegend,\n size: SizeContinuousLegend\n};\n","/**\n * @description color legend component\n */\nimport type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { debounce, isEmpty, isNil, isArray, get } from '@visactor/vutils';\nimport { DataView } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ISeries } from '../../../series/interface';\nimport type { IModelInitOption, IModelSpecInfo } from '../../../model/interface';\nimport type { IComponentOption } from '../../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerDataSetInstanceTransform } from '../../../data/register';\nimport { eachSeries } from '../../../util/model';\nimport { getFieldAlias } from '../../../util/data';\nimport { isDataDomainSpec } from '../../../util/type';\nimport type { IColorLegendSpec, IColorLegendTheme, ISizeLegendSpec } from './interface';\nimport {\n continuousLegendDataMake,\n continuousLegendFilter\n} from '../../../data/transforms/legend-data/continuous/continuous';\nimport { ContinuousLegendMap, getContinuousLegendAttributes, isContinuousLegend } from './util';\nimport { BaseLegend } from '../base-legend';\nimport { ChartEvent } from '../../../constant';\nimport { Factory } from '../../../core/factory';\nimport { TransformLevel } from '../../../data/initialize';\nimport type { ILayoutRect } from '../../../typings/layout';\n\nconst SINGLE_SEQUENCE = ['#C4E7FF', '#98CAFF', '#75ACFF', '#518FF9', '#2775DC', '#005CBE', '#00429F', '#00287E'];\nconst SIZE = [2, 10];\n\nexport class ContinuousLegend<\n T extends IColorLegendSpec | ISizeLegendSpec = IColorLegendSpec | ISizeLegendSpec\n> extends BaseLegend {\n static specKey = 'legends';\n\n static type = ComponentTypeEnum.continuousLegend;\n type = ComponentTypeEnum.colorLegend;\n name: string = ComponentTypeEnum.colorLegend;\n\n private _field: string | undefined;\n private _legendType: string;\n\n static getSpecInfo(chartSpec: any): Maybe {\n const legendSpec = chartSpec[this.specKey];\n if (!legendSpec) {\n return undefined;\n }\n if (!isArray(legendSpec)) {\n if (isContinuousLegend(legendSpec.type)) {\n return [\n {\n spec: legendSpec,\n specIndex: 0,\n specPath: [this.specKey],\n type: legendSpec.type === 'color' ? ComponentTypeEnum.colorLegend : ComponentTypeEnum.sizeLegend\n }\n ];\n }\n return undefined;\n }\n const specInfos: IModelSpecInfo[] = [];\n legendSpec.forEach((s: IColorLegendSpec | ISizeLegendSpec, i: number) => {\n if (isContinuousLegend(s.type)) {\n specInfos.push({\n spec: s,\n specIndex: i,\n specPath: [this.specKey, i],\n type: s.type === 'color' ? ComponentTypeEnum.colorLegend : ComponentTypeEnum.sizeLegend\n });\n }\n });\n return specInfos;\n }\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n\n // 这里需要区分下是 colorLegend 还是 sizeLegend\n const legendName = this._spec.type === 'color' ? ComponentTypeEnum.colorLegend : ComponentTypeEnum.sizeLegend;\n this.type = legendName;\n this.name = legendName;\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this._field = this._spec.field;\n this._legendType = this._spec.type;\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n eachSeries(\n this._regions,\n s => {\n s.addViewDataFilter({\n type: 'continuousLegendFilter',\n options: {\n selected: () => this._selectedData,\n field: () => this._field,\n data: () => this._legendData.getLatestData()\n },\n level: TransformLevel.legendFilter\n });\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n\n private _getScaleInGlobal() {\n const globalScale = this._option.globalScale;\n let scaleKey = this._spec.scale;\n if (!scaleKey) {\n scaleKey = this._legendType;\n }\n return globalScale.getScale(scaleKey);\n }\n\n protected _initLegendData(): DataView {\n registerDataSetInstanceTransform(this._option.dataSet, 'continuousLegendFilter', continuousLegendFilter);\n registerDataSetInstanceTransform(this._option.dataSet, 'continuousLegendDataMake', continuousLegendDataMake);\n const legendData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` });\n legendData.transform({\n type: 'continuousLegendDataMake',\n options: {\n series: () => {\n return this._regions.reduce((pre, r) => {\n pre.push(...r.getSeries());\n return pre;\n }, [] as ISeries[]);\n },\n field: () => this._field,\n scale: this._getScaleInGlobal.bind(this)\n }\n });\n return legendData;\n }\n\n protected _initSelectedData(): void {\n if (this._spec.defaultSelected) {\n this._selectedData = this._spec.defaultSelected.slice();\n } else {\n this._selectedData = this._legendData.getLatestData();\n }\n }\n\n private _addDefaultTitleText(attrs: any) {\n if (attrs.title?.visible && isNil(attrs.title.text) && isNil(attrs.title.style?.text)) {\n const field = this._field;\n if (field) {\n // 默认使用第0个系列的对应别名\n const series = this._regions?.[0]?.getSeries()[0];\n if (!series) {\n return;\n }\n // 如果没有别名继续保持 空字符串\n attrs.title.text = getFieldAlias(series.getRawData(), field);\n return;\n }\n let scaleKey = this._spec.scale;\n if (!scaleKey) {\n scaleKey = this._legendType;\n }\n const scaleSpec = this._option.globalScale.getScaleSpec(scaleKey);\n if (!isDataDomainSpec(scaleSpec?.domain)) {\n return;\n }\n const dataInfo = scaleSpec.domain[0];\n if (dataInfo.fields.length === 0) {\n return;\n }\n // 如果没有别名继续保持 空字符串\n attrs.title.text = getFieldAlias(this._option.dataSet.getDataView(dataInfo.dataId), dataInfo.fields[0]);\n return;\n }\n }\n\n protected _getLegendAttributes(rect: ILayoutRect) {\n const layout = this.layoutOrient === 'bottom' || this.layoutOrient === 'top' ? 'horizontal' : 'vertical';\n const align = layout === 'horizontal' ? 'bottom' : this.layoutOrient;\n\n // 获取关联的 scale 以获取 colors / size\n let visualMappingRange = [];\n const scale = this._getScaleInGlobal();\n if (scale && scale.type === 'linear') {\n visualMappingRange = scale.range();\n }\n if (isEmpty(visualMappingRange)) {\n visualMappingRange = this._legendType === 'color' ? SINGLE_SEQUENCE : SIZE;\n }\n let min = this._legendData.getLatestData()[0] ?? 0;\n let max = this._legendData.getLatestData()[1] ?? 1;\n\n const isSame = this._legendData.getLatestData()[0] === this._legendData.getLatestData()[1];\n if (isSame) {\n min = Math.min(0, this._legendData.getLatestData()[0]);\n max = this._legendData.getLatestData()[0] === 0 ? 1 : Math.max(0, this._legendData.getLatestData()[0]);\n }\n\n const attrs: any = {\n layout,\n align,\n zIndex: this.layoutZIndex,\n min,\n max,\n value: this._spec.defaultSelected,\n [this._legendType === 'color' ? 'colors' : 'sizeRange']: visualMappingRange,\n ...getContinuousLegendAttributes(this._spec)\n };\n this._addDefaultTitleText(attrs);\n return attrs;\n }\n\n protected _getLegendConstructor() {\n return ContinuousLegendMap[this._legendType];\n }\n\n protected _initEvent() {\n if (this._legendComponent) {\n const doFilter = this._spec.filter !== false;\n this._legendComponent.addEventListener(\n 'change',\n debounce((e: any) => {\n const selectedData = get(e, 'detail.value');\n if (doFilter) {\n this.setSelectedData(selectedData);\n }\n this.event.emit(ChartEvent.legendFilter, { model: this, value: selectedData, event: e });\n }, 30)\n );\n }\n }\n}\n\nexport const registerContinuousLegend = () => {\n Factory.registerComponent(ContinuousLegend.type, ContinuousLegend);\n};\n","import type { Datum } from '@visactor/vgrammar-core';\nimport type { MaybeArray, TooltipContentProperty, TooltipData, TooltipPatternProperty } from '../../../../typings';\nimport { isFunction, isObject, isString, isNil, isArray, isValid } from '@visactor/vutils';\nimport type { TooltipHandlerParams } from '../../interface';\nimport type { IDimensionData, IDimensionInfo } from '../../../../event/events/dimension';\nimport type { IRichTextParagraphCharacter } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { getRichTextBounds } from '@visactor/vrender-core';\nimport type { ITooltipTextStyle } from '../interface/style';\nimport type { TooltipRichTextAttrs } from '@visactor/vrender-components';\nimport type { IRichTextCharacter } from '@visactor/vrender-core';\n\ninterface IGradientColor {\n [key: string]: any;\n stops: {\n offset: number;\n color: string;\n }[];\n}\n\n/**\n * Escape special HTML characters.\n *\n * @param value A value to convert to string and HTML-escape.\n */\nexport function escapeHTML(value: any): string {\n return String(value)\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\\(/g, '(')\n .replace(/ /g, '  '); // 转义符和真空格夹杂,在转义和正常换行之间取得平衡\n}\n\nexport const getTooltipContentValue = (\n field?: TooltipContentProperty,\n datum?: any,\n params?: TooltipHandlerParams\n): T | undefined => {\n if (isNil(field)) {\n return field;\n }\n if (isFunction(field)) {\n return field(datum, params);\n }\n return field;\n};\n\nexport const getTooltipPatternValue = (\n field?: MaybeArray>,\n data?: TooltipData,\n params?: TooltipHandlerParams\n): (typeof field extends Array> ? MaybeArray : T) | undefined => {\n if (isNil(field)) {\n return field;\n }\n if (isArray(field)) {\n const result: T[] = [];\n field.forEach(item => {\n if (isFunction(item)) {\n const value = item(data, params);\n if (isValid(value)) {\n result.push(value);\n }\n } else {\n result.push(item);\n }\n });\n return result as any;\n }\n if (isFunction(field)) {\n return field(data, params);\n }\n return field;\n};\n\nexport function getFirstDatumFromTooltipData(data: TooltipData): Datum {\n // 找到第一个可用的datum\n const dimInfoList: IDimensionInfo[] = (data as IDimensionData[])[0]?.series\n ? [{ data: data as IDimensionData[], value: '' }]\n : (data as IDimensionInfo[]);\n for (const { data: dataList } of dimInfoList) {\n for (const { datum: datumList } of dataList) {\n for (const datumItem of datumList ?? []) {\n if (datumItem) {\n return datumItem;\n }\n }\n }\n }\n}\n\nexport function pickFirstValidValue(isValid: (element?: T) => any, ...elements: T[]): T | undefined {\n for (const ele of elements) {\n if (isValid(ele)) {\n return ele;\n }\n }\n return undefined;\n}\n\n// 针对渐变色,受底层渲染引擎影响,不一定都能绘制正确,所以这里取 colorStop 的第一个颜色作为 color\nexport function convertToColorString(color: any, defaultColor: string = '#000') {\n if (!color) {\n return defaultColor;\n }\n if (isString(color)) {\n return color;\n }\n\n if (isObject(color) && (color as IGradientColor).stops && (color as IGradientColor).stops[0]) {\n return (color as IGradientColor).stops[0].color || defaultColor;\n }\n\n return defaultColor;\n}\n\n/** 获取元素的绝对缩放因数(支持外部传入 boundingClientRect 提升性能) */\nexport const getScale = (element: HTMLElement, boundingClientRect?: DOMRect) => {\n if (!element) {\n return 1;\n }\n if (!boundingClientRect) {\n boundingClientRect = element.getBoundingClientRect();\n }\n if (element.offsetWidth > 0) {\n return boundingClientRect.width / element.offsetWidth;\n }\n return boundingClientRect.height / element.offsetHeight;\n};\n\ninterface ITooltipTextInfo {\n width: number;\n height: number;\n text: MaybeArray | MaybeArray | TooltipRichTextAttrs;\n}\n\n/** 测量 tooltip 标签文本 */\nexport const measureTooltipText = (text: string | TooltipRichTextAttrs, style: ITooltipTextStyle): ITooltipTextInfo => {\n let textLines: string[] | TooltipRichTextAttrs;\n let textConfig: IRichTextCharacter[];\n if (!((text as TooltipRichTextAttrs)?.type === 'rich' || (text as TooltipRichTextAttrs)?.type === 'html')) {\n text = (text ?? '').toString();\n if (style.multiLine) {\n textLines = text.split('\\n');\n textLines = textLines.map((line, i) => (i < (textLines as string[]).length - 1 ? line + '\\n' : line));\n } else {\n textLines = [text];\n }\n textConfig = textLines.map(\n line =>\n ({\n ...style,\n text: line\n } as unknown as IRichTextParagraphCharacter)\n );\n } else {\n textConfig = (text as TooltipRichTextAttrs).text as IRichTextCharacter[];\n textLines = text as TooltipRichTextAttrs;\n }\n\n const bound = getRichTextBounds({\n wordBreak: style.wordBreak ?? 'break-word',\n maxWidth: style.maxWidth ? style.maxWidth : undefined,\n width: 0,\n height: 0,\n textConfig: textConfig\n });\n return {\n width: bound.width(),\n height: bound.height(),\n text: textLines\n };\n};\n","import { PREFIX } from '../../../constant';\nimport type { IToolTipLineActual } from '../../../typings';\nimport { escapeHTML } from './utils/common';\n\nexport const TOOLTIP_EL_CLASS_NAME = 'vchart-tooltip-element';\nexport const TOOLTIP_CONTAINER_EL_CLASS_NAME = 'vchart-tooltip-container';\nexport const TOOLTIP_MAX_LINE_COUNT = 20;\nexport const TOOLTIP_EMPTY_STRING = '';\n\nexport const TOOLTIP_OTHERS_LINE = {\n // TODO: i18n\n key: '其他',\n value: '...'\n} as IToolTipLineActual;\n\nexport const DEFAULT_OPTIONS = {\n /**\n * X offset.\n */\n offsetX: 10,\n\n /**\n * Y offset.\n */\n offsetY: 10,\n\n /**\n * HTML sanitizer function that removes dangerous HTML to prevent XSS.\n *\n * This should be a function from string to string. You may replace it with a formatter such as a markdown formatter.\n */\n sanitize: escapeHTML\n};\n\n// FIXME: 命名规范\nexport type Options = typeof DEFAULT_OPTIONS;\n\n/** 内置 handler 类型 */\nexport class TooltipHandlerType {\n static dom = `${PREFIX}_TOOLTIP_HANDLER_DOM`; // 模拟 enum\n static canvas = `${PREFIX}_TOOLTIP_HANDLER_CANVAS`;\n}\n","import { TooltipFixedPosition } from '../../../../typings/tooltip/position';\nimport { isFunction, isNumber, isValid } from '@visactor/vutils';\n\nexport const getActualTooltipPositionValue = (\n position: number | ((event: MouseEvent) => number) | null | undefined,\n event: MouseEvent\n) => {\n let result;\n if (isValid(position)) {\n if (isNumber(position)) {\n result = position;\n } else if (isFunction(position)) {\n // 这里额外判断下是否合法\n const tooltipPosition = position(event);\n\n if (isNumber(tooltipPosition)) {\n result = tooltipPosition;\n }\n }\n }\n return result;\n};\n\nexport type TooltipHorizontalPositionType = 'left' | 'right' | 'middle';\nexport type TooltipVerticalPositionType = 'top' | 'bottom' | 'middle';\n\nexport const positionType: Record =\n {\n [TooltipFixedPosition.left]: ['left', 'middle'],\n [TooltipFixedPosition.right]: ['right', 'middle'],\n [TooltipFixedPosition.inside]: ['middle', 'middle'],\n [TooltipFixedPosition.top]: ['middle', 'top'],\n [TooltipFixedPosition.lt]: ['left', 'top'],\n [TooltipFixedPosition.tl]: ['left', 'top'],\n [TooltipFixedPosition.rt]: ['right', 'top'],\n [TooltipFixedPosition.tr]: ['right', 'top'],\n [TooltipFixedPosition.bottom]: ['middle', 'bottom'],\n [TooltipFixedPosition.bl]: ['left', 'bottom'],\n [TooltipFixedPosition.lb]: ['left', 'bottom'],\n [TooltipFixedPosition.br]: ['right', 'bottom'],\n [TooltipFixedPosition.rb]: ['right', 'bottom']\n };\n\nexport const getHorizontalPositionType = (\n position: TooltipFixedPosition,\n defaultCase?: TooltipHorizontalPositionType\n): TooltipHorizontalPositionType => positionType[position]?.[0] ?? defaultCase;\n\nexport const getVerticalPositionType = (\n position: TooltipFixedPosition,\n defaultCase?: TooltipVerticalPositionType\n): TooltipVerticalPositionType => positionType[position]?.[1] ?? defaultCase;\n","import { isValid, isNil, array } from '@visactor/vutils';\nimport type { TooltipActualTitleContent } from '../../tooltip';\nimport type {\n IToolTipLinePattern,\n ITooltipPattern,\n TooltipData,\n IToolTipLineActual\n} from '../../../../typings/tooltip';\nimport { getFirstDatumFromTooltipData, getTooltipContentValue, getTooltipPatternValue } from './common';\nimport { getTooltipActualActiveType } from '../../utils/common';\nimport type { IDimensionData, IDimensionInfo } from '../../../../event/events/dimension/interface';\nimport type { TooltipHandlerParams } from '../../interface';\nimport { TOOLTIP_MAX_LINE_COUNT, TOOLTIP_OTHERS_LINE } from '../constants';\n\n/**\n * 获得tooltip的实际显示内容\n * @param pattern\n * @param data\n * @param event\n * @returns\n */\nexport const getShowContent = (\n pattern: ITooltipPattern,\n data: TooltipData,\n params: TooltipHandlerParams\n): TooltipActualTitleContent | null => {\n if (\n !data ||\n // data.key === undefined ||\n params?.event?.type === 'mouseout'\n ) {\n return null;\n }\n\n const patternTitle = getTooltipPatternValue(pattern.title, data, params);\n const patternContent = array(getTooltipPatternValue(pattern.content, data, params));\n\n const tooltipContent: Required = {\n title: {\n value: patternTitle?.value?.toString(),\n hasShape: false,\n shapeType: undefined,\n shapeHollow: undefined\n },\n content: []\n };\n\n const { maxLineCount = TOOLTIP_MAX_LINE_COUNT } = pattern;\n\n /** title */\n const patternTitleVisible = getTooltipContentValue(patternTitle?.visible, data, params) !== false;\n if (!patternTitle || !patternTitleVisible) {\n tooltipContent.title = {\n hasShape: false,\n visible: false\n };\n } else {\n // 找到第一个可用的datum\n const datum = getFirstDatumFromTooltipData(data);\n tooltipContent.title = {\n value: getTooltipContentValue(patternTitle?.value, datum, params),\n valueStyle: getTooltipContentValue(patternTitle?.valueStyle, datum, params),\n hasShape: patternTitle.hasShape\n };\n }\n\n /** content */\n if (pattern.activeType === 'mark') {\n for (const content of patternContent ?? []) {\n const oneLineData = getOneLineData((data as IDimensionData[])[0]?.datum[0], content, params);\n if (oneLineData.visible !== false) {\n if (tooltipContent.content.length === maxLineCount - 1) {\n tooltipContent.content.push({\n ...oneLineData,\n ...TOOLTIP_OTHERS_LINE\n });\n break;\n } else if (tooltipContent.content.length < maxLineCount) {\n tooltipContent.content.push(oneLineData);\n } else {\n break;\n }\n }\n }\n } else if (pattern.activeType === 'dimension') {\n for (const { data: d } of data as IDimensionInfo[]) {\n for (const { datum, series } of d) {\n if (!getTooltipActualActiveType(series.tooltipHelper?.spec).includes('dimension')) {\n continue;\n }\n const contentPatterns =\n patternContent?.filter(\n c => isNil(c.seriesId) || c.seriesId === series.id // 匹配对应series\n ) ?? [];\n for (const datumItem of datum) {\n for (const linePattern of contentPatterns) {\n const oneLineData = getOneLineData(datumItem, linePattern, params);\n if (oneLineData.visible === false) {\n continue;\n }\n if (tooltipContent.content.length === maxLineCount - 1) {\n tooltipContent.content.push({\n ...oneLineData,\n ...TOOLTIP_OTHERS_LINE\n });\n break;\n } else if (tooltipContent.content.length < maxLineCount) {\n tooltipContent.content.push(oneLineData);\n } else {\n break;\n }\n }\n if (tooltipContent.content.length >= maxLineCount) {\n break;\n }\n }\n if (tooltipContent.content.length >= maxLineCount) {\n break;\n }\n }\n if (tooltipContent.content.length >= maxLineCount) {\n break;\n }\n }\n }\n\n if (tooltipContent.title) {\n // TODO:对 title shape 的支持目前还不完整,尚没有相关需求\n if (tooltipContent.content.length > 0 && tooltipContent.content[0].shapeType) {\n if (isNil(tooltipContent.title.shapeType)) {\n tooltipContent.title.shapeType = tooltipContent.content[0].shapeType;\n }\n if (isNil(tooltipContent.title.shapeColor)) {\n tooltipContent.title.shapeColor = tooltipContent.content[0].shapeColor;\n }\n } else {\n tooltipContent.title.hasShape = false;\n }\n }\n\n return tooltipContent;\n};\n\n/**\n * 获得tooltip的单行实际显示内容\n * @param datum\n * @param config\n * @returns\n */\nexport const getOneLineData = (\n datum: any,\n config: IToolTipLinePattern,\n params: TooltipHandlerParams\n): IToolTipLineActual => {\n const key = getTooltipContentValue(config.key, datum, params);\n const value = getTooltipContentValue(config.value, datum, params);\n const visible: boolean =\n getTooltipContentValue(config.visible, datum, params) !== false && (isValid(key) || isValid(value));\n const isKeyAdaptive = getTooltipContentValue(config.isKeyAdaptive, datum, params);\n const spaceRow = getTooltipContentValue(config.spaceRow, datum, params);\n\n const shapeType = getTooltipContentValue(config.shapeType, datum, params);\n const shapeColor = getTooltipContentValue(config.shapeColor, datum, params);\n const shapeFill = getTooltipContentValue(config.shapeFill, datum, params);\n const shapeStroke = getTooltipContentValue(config.shapeStroke, datum, params);\n const shapeLineWidth = getTooltipContentValue(config.shapeLineWidth, datum, params);\n const keyStyle = getTooltipContentValue(config.keyStyle, datum, params);\n const valueStyle = getTooltipContentValue(config.valueStyle, datum, params);\n\n return {\n key,\n value,\n visible,\n isKeyAdaptive,\n hasShape: config.hasShape,\n shapeType: shapeType as any,\n shapeFill,\n shapeStroke,\n shapeLineWidth,\n shapeHollow: config.shapeHollow,\n shapeColor,\n keyStyle,\n valueStyle,\n spaceRow,\n datum\n };\n};\n","import type { IDimensionInfo } from '../../../../event/events/dimension/interface';\nimport type { ISeries } from '../../../../series/interface';\nimport type { ITooltipPattern, TooltipActiveType } from '../../../../typings';\n\n/**\n * 根据图表上下文生成默认的tooltip pattern\n * @param activeType\n * @param series\n * @param dimensionInfo\n * @returns\n */\nexport const makeDefaultPattern = (\n series: ISeries,\n activeType: TooltipActiveType,\n dimensionInfo?: IDimensionInfo[]\n): ITooltipPattern | null => {\n return series.tooltipHelper?.getDefaultTooltipPattern(activeType, dimensionInfo) ?? null;\n};\n","import type { ITooltipSpec, TooltipHandlerParams } from '../../interface';\nimport type {\n IToolTipLinePattern,\n ITooltipPattern,\n ITooltipShapePattern,\n MaybeArray,\n TooltipActiveType,\n TooltipData,\n TooltipPatternProperty\n} from '../../../../typings';\nimport type { ISeries } from '../../../../series/interface';\nimport { mergeSpec } from '../../../../util/spec/merge-spec';\nimport { makeDefaultPattern } from './pattern';\nimport type { IDimensionInfo } from '../../../../event/events/dimension/interface';\nimport { getTooltipActualActiveType } from '../../utils/common';\nimport { memoize, isValid, array, isFunction, isNil, cloneDeep } from '@visactor/vutils';\n\nexport const getTooltipSpecForShow = (\n activeType: TooltipActiveType,\n globalSpec: ITooltipSpec,\n series?: ISeries,\n dimensionInfo?: IDimensionInfo[]\n): ITooltipSpec => {\n // 组装tooltip spec\n const finalSpec = {\n ...globalSpec,\n activeType\n } as ITooltipSpec;\n if (activeType === 'mark' && series) {\n // tooltip spec覆盖优先级: series spec > global spec > default pattern\n const seriesSpec = (series.tooltipHelper?.spec ?? {}) as ITooltipSpec;\n\n // visible\n if (isValid(seriesSpec.visible) || isValid(seriesSpec.activeType)) {\n finalSpec.visible = getTooltipActualActiveType(seriesSpec).includes('mark');\n } else if (isValid(globalSpec.visible) || isValid(globalSpec.activeType)) {\n finalSpec.visible = getTooltipActualActiveType(globalSpec).includes('mark');\n } else {\n finalSpec.visible = true;\n }\n\n // 优先使用自定义handler\n finalSpec.handler = seriesSpec.handler ?? globalSpec.handler ?? undefined;\n if (finalSpec.handler?.showTooltip) {\n return finalSpec;\n }\n } else if (activeType === 'dimension' && dimensionInfo?.length) {\n // tooltip spec覆盖优先级: series spec > global spec > default pattern\n const seriesList = getSeriesListFromDimensionInfo(dimensionInfo);\n\n // visible\n if (seriesList.every(series => !getTooltipActualActiveType(series.tooltipHelper?.spec).includes('dimension'))) {\n finalSpec.visible = false;\n } else if (isValid(globalSpec.visible) || isValid(globalSpec.activeType)) {\n finalSpec.visible = getTooltipActualActiveType(globalSpec).includes('dimension');\n } else {\n finalSpec.visible = true;\n }\n\n // 优先使用自定义handler\n finalSpec.handler = globalSpec.handler ?? undefined;\n if (finalSpec.handler?.showTooltip) {\n return finalSpec;\n }\n }\n\n // 默认的 pattern\n const defaultPattern = getDefaultTooltipPattern(activeType, series, dimensionInfo);\n // 来自系列的 pattern\n const seriesPattern = getSeriesTooltipPattern(activeType, series, dimensionInfo);\n // 来自用户配置的 pattern\n const userPattern: ITooltipPattern = mergeSpec({}, cloneDeep(globalSpec[activeType]), seriesPattern);\n\n // 对pattern进行组装\n // 组装 title\n const defaultPatternTitle = defaultPattern.title as IToolTipLinePattern | undefined;\n const titleShape: ITooltipShapePattern = getShapePattern(undefined, userPattern, undefined, defaultPatternTitle);\n if (isValid(userPattern.title)) {\n // 排除是回调的情况\n if (!isFunction(userPattern.title)) {\n userPattern.title = {\n ...defaultPattern.title,\n ...titleShape, // shape默认回调实现较复杂,如果用户没有配置则填补默认逻辑\n ...userPattern.title\n };\n } else {\n const userPatternTitle = userPattern.title;\n userPattern.title = (data?: TooltipData, params?: TooltipHandlerParams) => {\n const userResult = userPatternTitle(data, params) ?? {};\n return {\n ...titleShape, // shape默认回调实现较复杂,如果用户没有配置则填补默认逻辑\n ...userResult\n };\n };\n }\n } else {\n userPattern.title = {\n ...defaultPattern.title,\n ...titleShape\n };\n }\n\n // 组装 content\n const defaultPatternContent = array(defaultPattern.content) as IToolTipLinePattern[];\n if (isValid(userPattern.content)) {\n const shapePatternMap = getShapePatternMapOfEachSeries(defaultPatternContent);\n // 排除是回调的情况\n if (!isFunction(userPattern.content)) {\n const newPatternContent: IToolTipLinePattern[] = [];\n array(userPattern.content).forEach(userLine => {\n newPatternContent.push({\n ...getShapePattern(userLine as IToolTipLinePattern, userPattern, shapePatternMap), // shape默认回调实现较复杂,如果用户没有配置则填补默认逻辑\n ...userLine\n });\n });\n userPattern.content = newPatternContent;\n } else {\n const userPatternContent = userPattern.content;\n userPattern.content = (data?: TooltipData, params?: TooltipHandlerParams) => {\n const newPatternContent: IToolTipLinePattern[] = [];\n array(userPatternContent(data, params) ?? []).forEach(userLine => {\n newPatternContent.push({\n ...getShapePattern(userLine as IToolTipLinePattern, userPattern, shapePatternMap), // shape默认回调实现较复杂,如果用户没有配置则填补默认逻辑\n ...userLine\n });\n });\n return newPatternContent;\n };\n }\n } else {\n userPattern.content = defaultPatternContent.map(line => ({\n ...line,\n ...getShapePattern(undefined, userPattern, undefined, line)\n }));\n }\n\n finalSpec[activeType] = {\n ...defaultPattern,\n ...userPattern,\n activeType\n };\n\n return finalSpec;\n};\n\n/** 获取默认 tooltip pattern */\nconst getDefaultTooltipPattern = (\n activeType: TooltipActiveType,\n series?: ISeries,\n dimensionInfo?: IDimensionInfo[]\n): ITooltipPattern => {\n // 默认的pattern\n let defaultPattern = {} as ITooltipPattern;\n if (activeType === 'mark' && series) {\n // mark tooltip\n defaultPattern = makeDefaultPattern(series, 'mark') ?? {};\n } else if (activeType === 'dimension' && dimensionInfo?.length) {\n // dimension tooltip\n const patternList: ITooltipPattern[] = [];\n dimensionInfo[0].data.forEach(data => {\n const { series } = data;\n const mockDimensionInfo = [\n {\n ...dimensionInfo[0],\n data: [data]\n }\n ] as IDimensionInfo[];\n const pattern = makeDefaultPattern(series, 'dimension', mockDimensionInfo);\n if (pattern) {\n patternList.push(pattern);\n }\n });\n // 拼接默认 tooltip content\n const defaultPatternContent: Array>> = [];\n patternList.forEach(({ content }) => {\n if (isFunction(content)) {\n defaultPatternContent.push(content);\n } else {\n defaultPatternContent.push(...array(content));\n }\n });\n defaultPattern = {\n ...patternList[0],\n content: defaultPatternContent\n };\n }\n return defaultPattern;\n};\n\n/** 获取来自系列 spec 的 tooltip pattern */\nconst getSeriesTooltipPattern = (\n activeType: TooltipActiveType,\n series?: ISeries,\n dimensionInfo?: IDimensionInfo[]\n): ITooltipPattern => {\n // 默认的pattern\n let seriesPattern = {} as ITooltipPattern;\n if (activeType === 'mark' && series) {\n // mark tooltip\n const seriesSpec = (series.tooltipHelper?.spec ?? {}) as ITooltipSpec;\n seriesPattern = seriesSpec.mark ? cloneDeep(seriesSpec.mark) : {};\n } else if (activeType === 'dimension' && dimensionInfo?.length) {\n // dimension tooltip\n const seriesList = getSeriesListFromDimensionInfo(dimensionInfo);\n const seriesPatternList = seriesList\n .filter(series => {\n const spec = series.tooltipHelper?.spec;\n return isValid(spec?.dimension) && getTooltipActualActiveType(spec).includes('dimension');\n })\n .map(series => series.tooltipHelper.spec.dimension);\n if (seriesPatternList.length) {\n // 拼接系列 tooltip content\n let seriesPatternContent: Array>> | undefined = [];\n if (seriesPatternList.every(({ content }) => isNil(content))) {\n seriesPatternContent = undefined;\n } else {\n seriesPatternList.forEach(({ content }) => {\n if (isNil(content)) {\n return;\n }\n if (isFunction(content)) {\n seriesPatternContent?.push(content);\n } else {\n seriesPatternContent?.push(...array(content));\n }\n });\n }\n seriesPattern = {\n ...seriesPatternList[0],\n content: seriesPatternContent\n };\n }\n }\n return seriesPattern;\n};\n\nconst getSeriesListFromDimensionInfo = memoize((dimensionInfo: IDimensionInfo[]): ISeries[] => {\n return dimensionInfo.reduce(\n (list, cur) => list.concat(cur.data.map(data => data.series).filter(isValid)),\n [] as ISeries[]\n );\n});\n\n/** 获取每个系列对应的 shape pattern */\nconst getShapePatternMapOfEachSeries = (content: IToolTipLinePattern[]): Record => {\n const shapePatternMap: Record = {};\n content.forEach(line => {\n const key = line.seriesId ?? 0;\n if (!shapePatternMap[key]) {\n shapePatternMap[key] = line;\n }\n });\n return shapePatternMap;\n};\n\n/** 根据优先级获取形状配置 */\nconst getShapePattern = (\n userLinePattern?: IToolTipLinePattern,\n userPattern?: ITooltipPattern,\n shapePatternMap?: Record,\n defaultShapePattern?: ITooltipShapePattern\n): ITooltipShapePattern => {\n const shapePatternFromMap = shapePatternMap?.[userLinePattern?.seriesId ?? 0] ?? shapePatternMap?.[0];\n const shapeKeys: Set = new Set(\n []\n .concat(\n Object.keys(userLinePattern ?? {}),\n Object.keys(userPattern ?? {}),\n Object.keys(shapePatternFromMap ?? {}),\n Object.keys(defaultShapePattern ?? {})\n )\n .filter(key => key.toLowerCase().includes('shape')) as any[]\n );\n\n const shapePattern: ITooltipShapePattern = {};\n shapeKeys.forEach(key => {\n const value =\n userLinePattern?.[key] ?? userPattern?.[key] ?? shapePatternFromMap?.[key] ?? defaultShapePattern?.[key];\n if (value !== undefined) {\n shapePattern[key as any] = value;\n }\n });\n return shapePattern;\n};\n","import type { DimensionEventParams } from '../../../event/events/dimension/interface';\nimport type { BaseEventParams } from '../../../event/interface';\nimport type { DimensionTooltipInfo, MarkTooltipInfo } from '../processor/interface';\nimport type { Datum, IShowTooltipOption } from '../../../typings';\nimport type { IComponent } from '../../interface';\n\nexport type TooltipHandlerParams = (BaseEventParams | DimensionEventParams) & {\n changePositionOnly?: boolean;\n};\n\nexport interface ITooltipActiveTypeAsKeys {\n mark: T;\n dimension: K;\n}\n\nexport type TotalMouseEventData = {\n tooltipInfo: Partial>;\n ignore: Partial>;\n};\n\nexport enum TooltipResult {\n /** tooltip 显示成功 */\n success = 0,\n /** tooltip 未成功显示 */\n failed = 1\n}\n\nexport interface ITooltip extends IComponent {\n getVisible: () => boolean;\n showTooltip: (datum: Datum, options: IShowTooltipOption) => void;\n}\n","import type { IPointLike } from '../data-structure';\nimport { isIntersect } from './algorithm';\n\nconst EPSILON = 1e-8;\n\n// Adapted from https://github.com/apache/echarts/blob/master/src/util/graphic.ts by striezel\n// License: https://github.com/apache/echarts/blob/master/LICENSE\n/**\n * Return `true` if the given line (line `a`) and the given polygon\n * are intersect.\n * Note that we do not count colinear as intersect here because no\n * requirement for that. We could do that if required in future.\n */\nexport function lineIntersectPolygon(\n a1x: number,\n a1y: number,\n a2x: number,\n a2y: number,\n points: IPointLike[]\n): boolean {\n for (let i = 0, p2 = points[points.length - 1]; i < points.length; i++) {\n const p = points[i];\n if (isIntersect([a1x, a1y], [a2x, a2y], [p.x, p.y], [p2.x, p2.y])) {\n return true;\n }\n p2 = p;\n }\n return false;\n}\n\n// Adapted from https://github.com/ecomfe/zrender/blob/master/src/contain/polygon.ts by pissang\n// License: https://github.com/ecomfe/zrender/blob/master/LICENSE\nexport function polygonContainPoint(points: IPointLike[], x: number, y: number) {\n let w = 0;\n let p = points[0];\n\n if (!p) {\n return false;\n }\n\n for (let i = 1; i < points.length; i++) {\n const p2 = points[i];\n w += isPointInLine(p.x, p.y, p2.x, p2.y, x, y);\n p = p2;\n }\n\n // Close polygon\n const p0 = points[0];\n if (!isAroundEqual(p.x, p0.x) || !isAroundEqual(p.y, p0.y)) {\n w += isPointInLine(p.x, p.y, p0.x, p0.y, x, y);\n }\n\n return w !== 0;\n}\n\n// Adapted from https://github.com/ecomfe/zrender/blob/master/src/contain/windingLine.ts by pissang\n// License: https://github.com/ecomfe/zrender/blob/master/LICENSE\nexport function isPointInLine(x0: number, y0: number, x1: number, y1: number, x: number, y: number): number {\n if ((y > y0 && y > y1) || (y < y0 && y < y1)) {\n return 0;\n }\n // Ignore horizontal line\n if (y1 === y0) {\n return 0;\n }\n const t = (y - y0) / (y1 - y0);\n\n let dir = y1 < y0 ? 1 : -1;\n // Avoid winding error when intersection point is the connect point of two line of polygon\n if (t === 1 || t === 0) {\n dir = y1 < y0 ? 0.5 : -0.5;\n }\n\n const x_ = t * (x1 - x0) + x0;\n\n // If (x, y) on the line, considered as \"contain\".\n return x_ === x ? Infinity : x_ > x ? dir : 0;\n}\n\n// Adapted from https://github.com/ecomfe/zrender/blob/master/src/contain/polygon.ts by pissang\n// License: https://github.com/ecomfe/zrender/blob/master/LICENSE\nfunction isAroundEqual(a: number, b: number): boolean {\n return Math.abs(a - b) < EPSILON;\n}\n\n/**\n * polygon图元之间是否相交\n * @param pointsA 图元A的points\n * @param pointsB 图元B的points\n * @returns 是否相交\n */\nexport function polygonIntersectPolygon(pointsA: IPointLike[], pointsB: IPointLike[]) {\n for (let i = 0; i < pointsB.length; i++) {\n if (polygonContainPoint(pointsA, pointsB[i].x, pointsB[i].y)) {\n return true;\n }\n if (i > 0 && lineIntersectPolygon(pointsB[i - 1].x, pointsB[i - 1].y, pointsB[i].x, pointsB[i].y, pointsA)) {\n return true;\n }\n }\n return false;\n}\n","import type {\n TooltipAttributes,\n TooltipPanelAttrs,\n TooltipRowAttrs,\n TooltipRowStyleAttrs,\n TooltipSymbolAttrs,\n TooltipTextAttrs\n} from '@visactor/vrender-components';\nimport type { IPadding, IToolTipActual } from '../../../../typings';\nimport type { ITooltipTextStyle } from '../interface';\nimport { isValid, maxInArray, normalizePadding } from '@visactor/vutils';\nimport { mergeSpec } from '../../../../util/spec/merge-spec';\nimport { normalizeLayoutPaddingSpec } from '../../../../util/space';\nimport type { ITooltipSpec } from '../../interface/spec';\nimport type { ITooltipTextTheme, ITooltipTheme } from '../../interface/theme';\nimport { THEME_CONSTANTS } from '../../../../theme/builtin/common/constants';\nimport { measureTooltipText } from './common';\nimport type { ITheme } from '../../../../theme';\n\nconst DEFAULT_TEXT_ATTRIBUTES: Partial = {\n fontFamily: THEME_CONSTANTS.defaultFontFamily,\n spacing: 10,\n wordBreak: 'break-word'\n};\n\nexport function getTextAttributes(\n style: ITooltipTextTheme = {},\n globalTheme?: ITheme,\n defaultAttributes?: Partial\n): ITooltipTextStyle {\n const attrs: ITooltipTextStyle = {\n ...(defaultAttributes ?? DEFAULT_TEXT_ATTRIBUTES),\n fill: (style.fill ?? style.fontColor) as string,\n textAlign: style.textAlign,\n textBaseline: style.textBaseline,\n fontFamily: style.fontFamily ?? globalTheme?.fontFamily,\n fontSize: style.fontSize,\n fontWeight: style.fontWeight,\n lineHeight: style.lineHeight,\n spacing: style.spacing,\n multiLine: style.multiLine,\n maxWidth: style.maxWidth,\n wordBreak: style.wordBreak,\n autoWidth: style.autoWidth\n };\n return attrs;\n}\n\nexport const getPanelAttributes = (style: ITooltipTheme['panel']): TooltipPanelAttrs => {\n const { backgroundColor, border, shadow } = style;\n const panelAttrs: TooltipPanelAttrs = {\n lineWidth: border?.width ?? 0,\n shadow: !!shadow\n };\n if (border?.color) {\n panelAttrs.stroke = border.color as string;\n }\n if (backgroundColor) {\n panelAttrs.fill = backgroundColor as string;\n }\n if (shadow) {\n panelAttrs.shadowColor = shadow.color as string;\n panelAttrs.shadowBlur = shadow.blur;\n panelAttrs.shadowOffsetX = shadow.x;\n panelAttrs.shadowOffsetY = shadow.y;\n panelAttrs.shadowSpread = shadow.spread;\n }\n const { radius } = border ?? {};\n if (isValid(radius)) {\n panelAttrs.cornerRadius = [radius, radius, radius, radius];\n }\n return panelAttrs;\n};\n\nexport const getTooltipAttributes = (\n actualTooltip: IToolTipActual,\n spec: ITooltipSpec,\n globalTheme: ITheme\n): TooltipAttributes => {\n const { style = {}, enterable, transitionDuration } = spec;\n const { panel = {}, titleLabel, shape, keyLabel, valueLabel, spaceRow: commonSpaceRow } = style;\n const padding = normalizePadding(panel.padding);\n const paddingSpec = normalizeLayoutPaddingSpec(panel.padding) as IPadding;\n\n const titleStyle = getTextAttributes(titleLabel, globalTheme);\n const keyStyle = getTextAttributes(keyLabel, globalTheme);\n const valueStyle = getTextAttributes(valueLabel, globalTheme);\n const shapeStyle: TooltipRowStyleAttrs['shape'] = {\n fill: true,\n size: shape?.size ?? 8,\n spacing: shape?.spacing ?? 6\n };\n\n const attributes: TooltipAttributes = {\n panel: getPanelAttributes(panel),\n padding,\n\n title: {},\n content: [],\n\n titleStyle: {\n value: titleStyle,\n spaceRow: commonSpaceRow\n },\n contentStyle: {\n shape: shapeStyle,\n key: keyStyle,\n value: valueStyle,\n spaceRow: commonSpaceRow\n },\n hasContentShape: false,\n keyWidth: 0,\n valueWidth: 0,\n\n enterable,\n transitionDuration\n };\n\n const { title = {}, content = [] } = actualTooltip;\n\n let containerWidth = paddingSpec.left + paddingSpec.right;\n let containerHeight = paddingSpec.top + paddingSpec.bottom;\n\n // calculate content\n let contentMaxWidth = 0;\n // filter content\n const filteredContent = content.filter(item => {\n return (item.key || item.value) && item.visible !== false;\n });\n const hasContent = !!filteredContent.length;\n let maxKeyWidth = 0;\n let maxAdaptiveKeyWidth = 0;\n let maxValueWidth = 0;\n let maxShapeWidth = 0;\n\n if (hasContent) {\n const keyWidths: number[] = [];\n const adaptiveKeyWidths: number[] = [];\n const valueWidths: number[] = [];\n const shapeWidths: number[] = [];\n\n attributes.content = filteredContent.map((item, i) => {\n let itemHeight = 0;\n const {\n hasShape: actualHasShape,\n key: actualKey,\n shapeType: actualShapeType = '',\n shapeFill: actualShapeFill,\n shapeStroke: actualShapeStroke,\n shapeLineWidth: actualShapeLineWidth,\n shapeSize: actualShapeSize,\n value: actualValue,\n isKeyAdaptive: actualIsKeyAdaptive,\n spaceRow: actualSpaceRow,\n keyStyle: actualKeyStyle,\n valueStyle: actualValueStyle,\n // 弃用的属性,做下兼容\n shapeColor: actualShapeColor,\n shapeHollow: actualShapeHollow\n } = item;\n const itemAttrs: TooltipRowAttrs = { height: 0, spaceRow: actualSpaceRow ?? commonSpaceRow };\n if (isValid(actualKey)) {\n const itemKeyStyle: ITooltipTextStyle = mergeSpec(\n {},\n keyStyle,\n getTextAttributes(actualKeyStyle, undefined, {})\n );\n const { width, height, text } = measureTooltipText(actualKey, itemKeyStyle);\n itemAttrs.key = {\n width,\n height,\n ...itemKeyStyle,\n text\n };\n if (!actualIsKeyAdaptive) {\n keyWidths.push(width);\n } else {\n adaptiveKeyWidths.push(width);\n }\n itemHeight = Math.max(itemHeight, height);\n }\n if (isValid(actualValue)) {\n const itemValueStyle: ITooltipTextStyle = mergeSpec(\n {},\n valueStyle,\n getTextAttributes(actualValueStyle, undefined, {})\n );\n const { width, height, text } = measureTooltipText(actualValue, itemValueStyle);\n itemAttrs.value = {\n width,\n height,\n ...itemValueStyle,\n text\n };\n valueWidths.push(width);\n itemHeight = Math.max(itemHeight, height);\n }\n if (actualHasShape) {\n const shape: TooltipSymbolAttrs = {\n visible: true,\n symbolType: actualShapeType\n };\n const adaptiveShapeFill = actualShapeFill ?? actualShapeColor;\n if (actualShapeHollow) {\n shape.stroke = adaptiveShapeFill;\n } else {\n shape.fill = adaptiveShapeFill;\n }\n shape.stroke = actualShapeStroke ?? adaptiveShapeFill;\n shape.lineWidth = actualShapeLineWidth;\n itemAttrs.shape = shape;\n\n const shapeWidth = actualShapeSize ?? shapeStyle.size;\n itemHeight = Math.max(shapeWidth, itemHeight);\n shapeWidths.push(shapeWidth);\n } else {\n itemAttrs.shape = { visible: false };\n }\n\n itemAttrs.height = itemHeight;\n containerHeight += itemHeight;\n if (i < filteredContent.length - 1) {\n containerHeight += itemAttrs.spaceRow;\n }\n\n return itemAttrs;\n });\n\n maxKeyWidth = keyWidths.length ? maxInArray(keyWidths) : 0; // name 需要对齐\n maxAdaptiveKeyWidth = adaptiveKeyWidths.length ? maxInArray(adaptiveKeyWidths) : 0;\n maxValueWidth = valueWidths.length ? maxInArray(valueWidths) : 0; // value 需要对齐\n maxShapeWidth = shapeWidths.length ? maxInArray(shapeWidths) + shapeStyle.spacing : 0; // shape 列宽度\n contentMaxWidth = Math.max(\n maxShapeWidth + maxKeyWidth + keyStyle.spacing + maxValueWidth + valueStyle.spacing,\n maxShapeWidth + maxAdaptiveKeyWidth,\n contentMaxWidth\n );\n attributes.hasContentShape = !!shapeWidths.length;\n attributes.keyWidth = maxKeyWidth;\n attributes.valueWidth = maxValueWidth;\n }\n\n // calculate title\n let titleMaxWidth = 0;\n let titleMaxHeight = 0;\n const {\n visible: actualTitleVisible = true,\n value: actualTitleValue = '',\n valueStyle: actualTitleValueStyle,\n spaceRow: actualTitleSpaceRow\n } = title;\n attributes.title.visible = actualTitleVisible;\n attributes.title.spaceRow = actualTitleSpaceRow ?? commonSpaceRow;\n\n let titleValueStyle: ITooltipTextStyle = {};\n // 当前是否处于自适应宽度模式\n const isAutoWidthMode = () => titleValueStyle.autoWidth && titleValueStyle.multiLine !== false;\n if (actualTitleVisible) {\n titleValueStyle = mergeSpec({}, titleStyle, getTextAttributes(actualTitleValueStyle, undefined, {}));\n // 标题默认优化策略:如果 autoWidth 为 true,则宽度默认跟随 content 宽度并开启自动换行\n if (isAutoWidthMode()) {\n titleValueStyle.multiLine = titleValueStyle.multiLine ?? true;\n titleValueStyle.maxWidth = titleValueStyle.maxWidth ?? (hasContent ? Math.ceil(contentMaxWidth) : undefined);\n }\n\n const { text, width, height } = measureTooltipText(actualTitleValue, titleValueStyle);\n attributes.title.value = {\n width: isAutoWidthMode() ? Math.min(width, titleValueStyle.maxWidth ?? Number.MAX_VALUE) : width,\n height,\n ...titleValueStyle,\n text\n };\n titleMaxWidth = attributes.title.value.width;\n titleMaxHeight = attributes.title.value.height;\n\n containerHeight += titleMaxHeight + (hasContent ? attributes.title.spaceRow : 0);\n }\n attributes.title.width = titleMaxWidth;\n attributes.title.height = titleMaxHeight;\n\n if (isAutoWidthMode()) {\n containerWidth += contentMaxWidth ? contentMaxWidth : titleMaxWidth;\n } else {\n containerWidth += Math.max(titleMaxWidth, contentMaxWidth);\n }\n\n // 处理 content 的自动宽度模式\n if (hasContent) {\n attributes.content.forEach(item => {\n const value = item.value as ITooltipTextStyle & TooltipTextAttrs;\n // 最后一列默认自适应宽度\n if (value && (value.autoWidth ?? true)) {\n value.width =\n containerWidth -\n paddingSpec.left -\n paddingSpec.right -\n maxShapeWidth -\n maxKeyWidth -\n keyStyle.spacing -\n valueStyle.spacing;\n //value.multiLine = true; multiLine 需要用户手动开启,不会自动开启\n if (!value.maxWidth) {\n value.maxWidth = Math.ceil(value.width);\n }\n attributes.valueWidth = Math.max(attributes.valueWidth, value.width);\n }\n });\n }\n\n attributes.panel.width = containerWidth;\n attributes.panel.height = containerHeight;\n\n return attributes;\n};\n","import { DEFAULT_CHART_WIDTH, DEFAULT_CHART_HEIGHT } from '../../../constant/base';\nimport type { Options } from './constants';\n// eslint-disable-next-line no-duplicate-imports\nimport { DEFAULT_OPTIONS } from './constants';\nimport type { Maybe, IPoint, ILayoutPoint } from '../../../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport { TooltipPositionMode } from '../../../typings/tooltip/position';\n// eslint-disable-next-line no-duplicate-imports\nimport { isTrueBrowser } from '../../../util/env';\nimport type {\n TooltipData,\n IToolTipActual,\n TooltipActiveType,\n ITooltipHandler,\n ITooltipPattern,\n ITooltipPositionActual,\n ITooltipPositionPattern\n} from '../../../typings/tooltip';\n// eslint-disable-next-line no-duplicate-imports\nimport type { TooltipFixedPosition } from '../../../typings/tooltip';\nimport type { BaseEventParams } from '../../../event/interface';\nimport { getTooltipPatternValue, getScale } from './utils/common';\nimport { getActualTooltipPositionValue, getHorizontalPositionType, getVerticalPositionType } from './utils/position';\nimport { getShowContent } from './utils/compose';\nimport { getTooltipSpecForShow } from './utils/get-spec';\nimport type { Tooltip, TooltipActualTitleContent } from '../tooltip';\nimport type { ISeries } from '../../../series/interface';\nimport type { ITooltipSpec, TooltipHandlerParams } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { TooltipResult } from '../interface/common';\nimport type { IGroup } from '@visactor/vrender-core';\nimport type { AABBBounds } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n isNumber,\n isObject,\n isValidNumber,\n isValid,\n throttle,\n isNil,\n polygonContainPoint,\n pointInRect\n} from '@visactor/vutils';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { ILayoutModel, IModel } from '../../../model/interface';\nimport type { Compiler } from '../../../compile/compiler';\nimport type { IContainerSize, TooltipAttributes } from '@visactor/vrender-components';\nimport { getTooltipAttributes } from './utils/attribute';\nimport type { DimensionEventParams } from '../../../event/events/dimension/interface';\nimport type { IChartOption } from '../../../chart/interface';\n\ntype ChangeTooltipFunc = (\n visible: boolean,\n params: TooltipHandlerParams,\n changePositionOnly?: boolean,\n activeType?: TooltipActiveType,\n data?: TooltipData\n) => TooltipResult;\n\ntype ChangeTooltipPositionFunc = (\n changePositionOnly: boolean,\n data: TooltipData,\n params: TooltipHandlerParams\n) => TooltipResult;\n\n/**\n * The tooltip handler class.\n */\nexport abstract class BaseTooltipHandler implements ITooltipHandler {\n readonly type: string;\n\n /** 是否可见 */\n protected _visible = true;\n\n // protected _style: ITooltipStyle = {};\n\n protected _option: Options;\n\n protected _chartOption: IChartOption;\n\n protected _id = '';\n public get id() {\n return this._id;\n }\n\n protected _env;\n public get env() {\n return this._env;\n }\n\n protected _component: Tooltip;\n protected _attributes?: TooltipAttributes | null = null;\n\n protected _chartContainer: Maybe;\n protected _compiler: Compiler;\n\n protected _cacheViewSpec: ITooltipSpec | undefined;\n protected _cacheActualTooltip: IToolTipActual | undefined;\n\n protected _isTooltipPaused: boolean;\n protected _isPointerEscaped: boolean;\n protected _cachePointerTimer: number;\n protected _cachePointerPosition: ILayoutPoint;\n protected _cacheTooltipPosition: ILayoutPoint;\n protected _cacheTooltipSize: IContainerSize;\n\n // tooltip 容器\n protected _container!: Maybe;\n\n protected _isReleased: boolean = false;\n\n /**\n * Create the tooltip handler.\n */\n constructor(tooltipId: string, component: Tooltip) {\n this._component = component;\n this._chartOption = component.getOption() as any;\n this._env = this._chartOption.mode;\n this._chartContainer = this._chartOption.globalInstance.getContainer();\n this._compiler = component.getCompiler();\n this._id = tooltipId; // 可能有多个 tooltip\n this._initFromSpec();\n }\n\n showTooltip = (activeType: TooltipActiveType, data: TooltipData, params: TooltipHandlerParams) => {\n let changePositionOnly = !!params.changePositionOnly;\n if (!params.changePositionOnly || this._cacheActualTooltip?.activeType !== activeType) {\n changePositionOnly = false;\n this._clearCacheOfContent();\n }\n\n if (changePositionOnly && this._cacheViewSpec && this._cacheActualTooltip) {\n return this.changeTooltipPosition(changePositionOnly, data, params);\n }\n return this.changeTooltip(true, params, changePositionOnly, activeType, data);\n };\n\n /** 改变 tooltip 内容和位置(带 throttle 版本),返回是否遇到异常 */\n protected changeTooltip: ChangeTooltipFunc;\n\n /** 改变 tooltip 内容和位置(不带 throttle 版本),返回是否遇到异常 */\n protected _changeTooltip: ChangeTooltipFunc = (\n visible: boolean,\n params: TooltipHandlerParams,\n changePositionOnly?: boolean,\n activeType?: TooltipActiveType,\n data?: TooltipData\n ) => {\n const tooltipSpec = this._component.getSpec() as ITooltipSpec;\n if (this._isReleased || !tooltipSpec) {\n return TooltipResult.failed;\n }\n\n /** 关闭 tooltip */\n if (!visible) {\n this._clearAllCache();\n\n /** 用户自定义逻辑 */\n if (tooltipSpec.handler) {\n return tooltipSpec.handler.hideTooltip?.(params) ?? TooltipResult.success;\n }\n /** 默认逻辑 */\n this._updateTooltip(false, params);\n return TooltipResult.success;\n }\n\n if (isNil(activeType) || isNil(data)) {\n return TooltipResult.failed;\n }\n\n /** spec 预处理 */\n let spec: ITooltipSpec | undefined;\n if (changePositionOnly && this._cacheViewSpec) {\n spec = this._cacheViewSpec;\n } else {\n spec = getTooltipSpecForShow(\n activeType!,\n tooltipSpec,\n (params as BaseEventParams).model as ISeries,\n (params as DimensionEventParams).dimensionInfo\n );\n this._cacheViewSpec = spec;\n }\n\n if (spec.visible === false) {\n return TooltipResult.failed;\n }\n\n /** 用户自定义逻辑 */\n if (spec.handler) {\n return spec.handler.showTooltip?.(activeType!, data!, params) ?? TooltipResult.success;\n }\n\n /** 默认逻辑 */\n const pattern = spec[activeType!] as ITooltipPattern;\n if (!pattern) {\n return TooltipResult.failed;\n }\n\n // 合成 tooltip 内容\n let actualTooltip: IToolTipActual | undefined;\n if (changePositionOnly && this._cacheActualTooltip) {\n actualTooltip = this._cacheActualTooltip;\n } else {\n actualTooltip = this._getActualTooltipContent(pattern, data!, params);\n actualTooltip.title = pattern.updateTitle?.(actualTooltip.title, data, params) ?? actualTooltip.title;\n actualTooltip.content = pattern.updateContent?.(actualTooltip.content, data, params) ?? actualTooltip.content;\n }\n\n // 判断 tooltip 是否为空\n if (isNil(actualTooltip.title?.key) && isNil(actualTooltip.title?.value) && !actualTooltip.content?.length) {\n return TooltipResult.failed;\n }\n\n this._cacheActualTooltip = actualTooltip;\n return this._changeTooltipPosition(!!changePositionOnly, data!, params);\n };\n\n /** 改变 tooltip 位置(带 throttle 版本),返回是否遇到异常 */\n protected changeTooltipPosition: ChangeTooltipPositionFunc;\n\n /** 改变 tooltip 位置(不带 throttle 版本),返回是否遇到异常 */\n protected _changeTooltipPosition: ChangeTooltipPositionFunc = (\n changePositionOnly: boolean,\n data: TooltipData,\n params: TooltipHandlerParams\n ) => {\n if (this._isReleased) {\n return TooltipResult.failed;\n }\n\n const event = params.event as MouseEvent;\n const spec = this._cacheViewSpec;\n const actualTooltip = this._cacheActualTooltip;\n if (!spec || !actualTooltip) {\n return TooltipResult.failed;\n }\n\n if (spec.enterable) {\n if (!this._isPointerEscaped && this._isPointerMovingToTooltip(params)) {\n if (!this._isTooltipPaused) {\n this._isTooltipPaused = true;\n this._cachePointerTimer = setTimeout(() => {\n this._isPointerEscaped = true;\n }, 300) as unknown as number;\n }\n return TooltipResult.success;\n }\n this._isTooltipPaused = false;\n this._isPointerEscaped = false;\n clearTimeout(this._cachePointerTimer);\n this._cachePointerPosition = this._getPointerPositionRelativeToTooltipParent(params);\n }\n\n const activeType = actualTooltip.activeType;\n\n /** 用户自定义逻辑 */\n if (spec.handler) {\n return spec.handler.showTooltip?.(activeType, data, params) ?? TooltipResult.success;\n }\n\n /** 默认逻辑 */\n const pattern = spec[activeType];\n if (!pattern) {\n return TooltipResult.failed;\n }\n\n // 计算 tooltip 位置\n const position = this._getActualTooltipPosition(\n actualTooltip,\n params,\n this._getTooltipBoxSize(actualTooltip, changePositionOnly)\n );\n actualTooltip.position = position;\n if (pattern.updatePosition) {\n actualTooltip.position = pattern.updatePosition(actualTooltip.position, data, params);\n }\n\n // 判断 tooltip 可见性\n let tooltipVisible = pattern?.visible !== false;\n if (\n !data ||\n event.type === 'pointerout' ||\n !actualTooltip.visible ||\n (!actualTooltip.title && !actualTooltip.content)\n ) {\n tooltipVisible = false;\n }\n\n this._updateTooltip(\n tooltipVisible,\n {\n ...params,\n changePositionOnly\n },\n actualTooltip\n );\n return TooltipResult.success;\n };\n\n hideTooltip(params: TooltipHandlerParams): TooltipResult {\n return this.changeTooltip(false, params);\n }\n\n release(): void {\n this._clearAllCache();\n const spec = this._component.getSpec() ?? {};\n /** 用户自定义逻辑 */\n if (spec.handler) {\n spec.handler.release?.();\n return;\n }\n /** 默认逻辑 */\n this._removeTooltip();\n\n this._isReleased = true;\n }\n\n protected _clearAllCache() {\n this._clearCacheOfContent();\n this._clearCacheOfPosition();\n }\n\n protected _clearCacheOfContent() {\n this._cacheViewSpec = undefined;\n this._cacheActualTooltip = undefined;\n }\n\n protected _clearCacheOfPosition() {\n this._isTooltipPaused = false;\n this._isPointerEscaped = false;\n clearTimeout(this._cachePointerTimer);\n this._cachePointerTimer = -1;\n this._cachePointerPosition = undefined;\n this._cacheTooltipPosition = undefined;\n this._cacheTooltipSize = undefined;\n }\n\n /* -----需要子类继承的方法开始----- */\n\n protected abstract _updateTooltip(visible: boolean, params: TooltipHandlerParams, domData?: IToolTipActual): void;\n protected abstract _removeTooltip(): void;\n\n /* -----需要子类继承的方法结束----- */\n\n protected _throttle(callback: any) {\n const tooltipSpec = this._component.getSpec();\n let wait: number;\n if (isNumber(tooltipSpec.throttleInterval)) {\n wait = tooltipSpec.throttleInterval;\n } else {\n if (tooltipSpec.renderMode !== 'html' || !tooltipSpec.transitionDuration) {\n wait = 10;\n } else {\n wait = 50;\n }\n }\n return throttle(callback, wait);\n }\n\n protected _getDefaultOption(): Options {\n const { offset } = this._component.getSpec();\n return {\n ...DEFAULT_OPTIONS,\n offsetX: offset?.x ?? DEFAULT_OPTIONS.offsetX,\n offsetY: offset?.y ?? DEFAULT_OPTIONS.offsetY\n };\n }\n\n /**\n * 计算实际的 tooltip 内容\n * @param pattern\n * @param data\n * @param event\n */\n protected _getActualTooltipContent = (\n pattern: ITooltipPattern,\n data: TooltipData,\n params: TooltipHandlerParams\n ): IToolTipActual => {\n // 可见性\n const patternVisible = getTooltipPatternValue(pattern.visible, data, params);\n\n // 数据\n let tooltipContent: TooltipActualTitleContent | null = null;\n tooltipContent = getShowContent(pattern, data, params);\n\n const actualTooltip: IToolTipActual = {\n ...tooltipContent,\n visible: isValid(tooltipContent) ? patternVisible !== false : false, // 最终展示数据为 null 则不展示\n activeType: pattern.activeType,\n data\n };\n\n return actualTooltip;\n };\n\n /**\n * 计算实际的 tooltip 位置\n */\n protected _getActualTooltipPosition = (\n actualTooltip: IToolTipActual,\n params: TooltipHandlerParams,\n tooltipBoxSize: IContainerSize | undefined\n ): ITooltipPositionActual => {\n const event = params.event as MouseEvent;\n\n const invalidPosition = {\n x: Infinity,\n y: Infinity\n };\n\n const { offsetX, offsetY } = this._option;\n const tooltipSpec = this._cacheViewSpec;\n if (!tooltipSpec) {\n this._cacheTooltipPosition = undefined;\n return invalidPosition;\n }\n\n const { activeType, data } = actualTooltip;\n const pattern = tooltipSpec[activeType];\n const position = getTooltipPatternValue(pattern.position, data, params);\n const positionMode = getTooltipPatternValue(pattern.positionMode, data, params);\n const tooltipParentElement = this._getParentElement(tooltipSpec);\n const { width: tooltipBoxWidth = 0, height: tooltipBoxHeight = 0 } = tooltipBoxSize ?? {};\n\n const isCanvas = tooltipSpec.renderMode === 'canvas';\n const canvasRect = params?.chart?.getCanvasRect();\n const canvasWidth = canvasRect?.width ?? DEFAULT_CHART_WIDTH;\n const canvasHeight = canvasRect?.height ?? DEFAULT_CHART_HEIGHT;\n let isFixedPosition = false;\n\n const containerSize = {\n width: 0,\n height: 0\n };\n let relativePosOffset = { x: 0, y: 0 };\n let tooltipParentElementRect: IPoint | DOMRect = { x: 0, y: 0 };\n let chartElementScale = 1;\n let tooltipParentElementScale = 1;\n\n if (isTrueBrowser(this._env) && !tooltipSpec.confine) {\n // 只有在 browser 模式下才可以获取到 window 对象\n containerSize.width = window.innerWidth;\n containerSize.height = window.innerHeight;\n\n if (!isCanvas) {\n tooltipParentElementRect = tooltipParentElement?.getBoundingClientRect() ?? invalidPosition;\n const chartElement = (this._compiler.getCanvas() ?? this._chartContainer) as HTMLElement;\n const chartElementRect = chartElement?.getBoundingClientRect();\n relativePosOffset = {\n x: chartElementRect.x - tooltipParentElementRect.x,\n y: chartElementRect.y - tooltipParentElementRect.y\n };\n chartElementScale = getScale(chartElement, chartElementRect);\n tooltipParentElementScale = getScale(tooltipParentElement, tooltipParentElementRect as DOMRect);\n }\n } else {\n containerSize.width = canvasWidth;\n containerSize.height = canvasHeight;\n }\n const tooltipSizeScale = tooltipParentElementScale / chartElementScale;\n\n /* 一、计算 left、top、right、bottom */\n let left: number | undefined;\n let top: number | undefined;\n let right: number | undefined;\n let bottom: number | undefined;\n if (isObject(position)) {\n const { left: posLeft, right: posRight, top: posTop, bottom: posBottom } = position as ITooltipPositionPattern;\n left = getActualTooltipPositionValue(posLeft, event);\n top = getActualTooltipPositionValue(posTop, event);\n right = getActualTooltipPositionValue(posRight, event);\n bottom = getActualTooltipPositionValue(posBottom, event);\n } else if (\n isValid(position) &&\n positionMode !== TooltipPositionMode.pointer &&\n actualTooltip.activeType === 'mark'\n ) {\n isFixedPosition = true;\n const element = params.item as IElement;\n const model = params.model as IModel;\n const bounds = element?.getBounds() as AABBBounds;\n const startPoint = ((model))?.getLayoutStartPoint();\n if (bounds && startPoint) {\n let { x1, y1, x2, y2 } = bounds;\n x1 += startPoint.x;\n x2 += startPoint.x;\n y1 += startPoint.y;\n y2 += startPoint.y;\n switch (getHorizontalPositionType(position)) {\n case 'left':\n left = x1 - tooltipBoxWidth * tooltipSizeScale - offsetX;\n break;\n case 'right':\n left = x2 + offsetX;\n break;\n case 'middle':\n left = (x1 + x2) / 2 - (tooltipBoxWidth * tooltipSizeScale) / 2;\n break;\n }\n switch (getVerticalPositionType(position)) {\n case 'top':\n top = y1 - tooltipBoxHeight * tooltipSizeScale - offsetY;\n break;\n case 'bottom':\n top = y2 + offsetY;\n break;\n case 'middle':\n top = (y1 + y2) / 2 - (tooltipBoxHeight * tooltipSizeScale) / 2;\n break;\n }\n }\n }\n\n /* 二、换算成 x 和 y */\n let x: number;\n let y: number;\n\n const { canvasX, canvasY } = event as any;\n if (isValidNumber(left)) {\n x = left;\n } else if (isValidNumber(right)) {\n x = canvasWidth - tooltipBoxWidth * tooltipSizeScale - right;\n } else {\n const x0 = canvasX;\n switch (getHorizontalPositionType(position as TooltipFixedPosition, 'right')) {\n case 'middle':\n x = x0 - (tooltipBoxWidth * tooltipSizeScale) / 2;\n break;\n case 'left':\n x = x0 - tooltipBoxWidth * tooltipSizeScale - offsetX;\n break;\n case 'right':\n x = x0 + offsetX;\n break;\n }\n }\n if (isValidNumber(top)) {\n y = top;\n } else if (isValidNumber(bottom)) {\n y = canvasHeight - tooltipBoxHeight * tooltipSizeScale - bottom;\n } else {\n const y0 = canvasY;\n switch (getVerticalPositionType(position as TooltipFixedPosition, 'bottom')) {\n case 'middle':\n y = y0 - (tooltipBoxHeight * tooltipSizeScale) / 2;\n break;\n case 'top':\n y = y0 - tooltipBoxHeight * tooltipSizeScale - offsetY;\n break;\n case 'bottom':\n y = y0 + offsetY;\n break;\n }\n }\n\n x *= chartElementScale;\n y *= chartElementScale;\n if (isTrueBrowser(this._env)) {\n x += relativePosOffset.x;\n y += relativePosOffset.y;\n }\n x /= tooltipParentElementScale;\n y /= tooltipParentElementScale;\n\n /* 三、确保tooltip在视区内 */\n const { width: containerWidth, height: containerHeight } = containerSize;\n\n const isLeftOut = () => x * tooltipParentElementScale + tooltipParentElementRect.x < 0;\n const isRightOut = () =>\n (x + tooltipBoxWidth) * tooltipParentElementScale + tooltipParentElementRect.x > containerWidth;\n const isTopOut = () => y * tooltipParentElementScale + tooltipParentElementRect.y < 0;\n const isBottomOut = () =>\n (y + tooltipBoxHeight) * tooltipParentElementScale + tooltipParentElementRect.y > containerHeight;\n\n const detectLeftFirst = () => {\n if (isLeftOut()) {\n // 位置不超出视区左界\n if (isFixedPosition) {\n x = -tooltipParentElementRect.x / tooltipParentElementScale;\n } else {\n if (getHorizontalPositionType(position as TooltipFixedPosition, 'right') === 'middle') {\n x += offsetX + tooltipBoxWidth / 2;\n } else {\n x += offsetX * 2 + tooltipBoxWidth;\n }\n }\n }\n };\n const detectLeftLast = () => {\n if (isLeftOut()) {\n // 位置不超出视区左界\n x = -tooltipParentElementRect.x / tooltipParentElementScale;\n }\n };\n const detectRightFirst = () => {\n if (isRightOut()) {\n // 位置不超出视区右界\n if (isFixedPosition) {\n x = (containerWidth - tooltipParentElementRect.x) / tooltipParentElementScale - tooltipBoxWidth;\n } else {\n if (getHorizontalPositionType(position as TooltipFixedPosition, 'right') === 'middle') {\n x -= offsetX + tooltipBoxWidth / 2;\n } else {\n x -= offsetX * 2 + tooltipBoxWidth;\n }\n }\n }\n };\n const detectRightLast = () => {\n if (isRightOut()) {\n // 位置不超出视区右界\n x = (containerWidth - tooltipParentElementRect.x) / tooltipParentElementScale - tooltipBoxWidth;\n }\n };\n const detectTopFirst = () => {\n if (isTopOut()) {\n // 位置不超出视区上界\n if (isFixedPosition) {\n y = -tooltipParentElementRect.y / tooltipParentElementScale;\n } else {\n if (getVerticalPositionType(position as TooltipFixedPosition, 'bottom') === 'middle') {\n y += offsetY + tooltipBoxHeight / 2;\n } else {\n y += offsetY * 2 + tooltipBoxHeight;\n }\n }\n }\n };\n const detectTopLast = () => {\n if (isTopOut()) {\n // 位置不超出视区上界\n y = 0 - tooltipParentElementRect.y / tooltipParentElementScale;\n }\n };\n const detectBottomFirst = () => {\n if (isBottomOut()) {\n // 位置不超出视区下界\n if (isFixedPosition) {\n y = (containerHeight - tooltipParentElementRect.y) / tooltipParentElementScale - tooltipBoxHeight;\n } else {\n if (getVerticalPositionType(position as TooltipFixedPosition, 'bottom') === 'middle') {\n y -= offsetY + tooltipBoxHeight / 2;\n } else {\n y -= offsetY * 2 + tooltipBoxHeight;\n }\n }\n }\n };\n const detectBottomLast = () => {\n if (isBottomOut()) {\n // 位置不超出视区下界\n y = (containerHeight - tooltipParentElementRect.y) / tooltipParentElementScale - tooltipBoxHeight;\n }\n };\n\n // 处理左右\n switch (getHorizontalPositionType(position as TooltipFixedPosition, 'right')) {\n case 'middle':\n if (isLeftOut()) {\n detectLeftFirst();\n detectRightLast();\n } else {\n detectRightFirst();\n detectLeftLast();\n }\n break;\n case 'left':\n detectLeftFirst();\n detectRightLast();\n break;\n case 'right':\n detectRightFirst();\n detectLeftLast();\n break;\n }\n // 处理上下\n switch (getVerticalPositionType(position as TooltipFixedPosition, 'bottom')) {\n case 'middle':\n if (isTopOut()) {\n detectTopFirst();\n detectBottomLast();\n } else {\n detectBottomFirst();\n detectTopLast();\n }\n break;\n case 'top':\n detectTopFirst();\n detectBottomLast();\n break;\n case 'bottom':\n detectBottomFirst();\n detectTopLast();\n break;\n }\n\n const result = { x, y };\n this._cacheTooltipPosition = result;\n this._cacheTooltipSize = { width: tooltipBoxWidth, height: tooltipBoxHeight };\n return result;\n };\n\n // 计算 tooltip 内容区域的宽高,并缓存结果\n protected _getTooltipBoxSize(actualTooltip: IToolTipActual, changePositionOnly: boolean): IContainerSize | undefined {\n if (!changePositionOnly || isNil(this._attributes)) {\n const chartTheme = this._chartOption?.getTheme() ?? {};\n this._attributes = getTooltipAttributes(actualTooltip, this._component.getSpec(), chartTheme);\n }\n return {\n width: this._attributes?.panel?.width,\n height: this._attributes?.panel?.height\n };\n }\n\n protected _getPointerPositionRelativeToTooltipParent(params: TooltipHandlerParams) {\n let { canvasX: x, canvasY: y } = params.event;\n\n const invalidPosition = {\n x: Infinity,\n y: Infinity\n };\n\n const tooltipSpec = this._cacheViewSpec;\n const isCanvas = tooltipSpec.renderMode === 'canvas';\n const tooltipParentElement = this._getParentElement(tooltipSpec);\n\n let relativePosOffset = { x: 0, y: 0 };\n let tooltipParentElementRect: IPoint | DOMRect = { x: 0, y: 0 };\n let chartElementScale = 1;\n let tooltipParentElementScale = 1;\n\n if (isTrueBrowser(this._env) && !tooltipSpec.confine) {\n if (!isCanvas) {\n tooltipParentElementRect = tooltipParentElement?.getBoundingClientRect() ?? invalidPosition;\n const chartElement = (this._compiler.getCanvas() ?? this._chartContainer) as HTMLElement;\n const chartElementRect = chartElement?.getBoundingClientRect();\n relativePosOffset = {\n x: chartElementRect.x - tooltipParentElementRect.x,\n y: chartElementRect.y - tooltipParentElementRect.y\n };\n chartElementScale = getScale(chartElement, chartElementRect);\n tooltipParentElementScale = getScale(tooltipParentElement, tooltipParentElementRect as DOMRect);\n }\n }\n\n x *= chartElementScale;\n y *= chartElementScale;\n if (isTrueBrowser(this._env)) {\n x += relativePosOffset.x;\n y += relativePosOffset.y;\n }\n x /= tooltipParentElementScale;\n y /= tooltipParentElementScale;\n return { x, y };\n }\n\n protected _isPointerMovingToTooltip(params: TooltipHandlerParams) {\n if (!this._cacheTooltipPosition || !this._cacheTooltipSize || !this._cachePointerPosition) {\n return false;\n }\n const { width: tooltipWidth, height: tooltipHeight } = this._cacheTooltipSize;\n const { x: tooltipX = 0, y: tooltipY } = this._cacheTooltipPosition;\n\n const pos = this._getPointerPositionRelativeToTooltipParent(params);\n\n if (\n pointInRect(\n pos,\n {\n x1: tooltipX,\n y1: tooltipY,\n x2: tooltipX + tooltipWidth,\n y2: tooltipY + tooltipHeight\n },\n false\n )\n ) {\n return true;\n }\n\n // 确定 tooltip 四端点坐标\n const a = { x: tooltipX, y: tooltipY };\n const b = { x: a.x + tooltipWidth, y: a.y };\n const c = { x: a.x, y: a.y + tooltipHeight };\n const d = { x: b.x, y: c.y };\n const oldPos = this._cachePointerPosition;\n\n return (\n polygonContainPoint([oldPos, a, b], pos.x, pos.y) ||\n polygonContainPoint([oldPos, c, d], pos.x, pos.y) ||\n polygonContainPoint([oldPos, a, d], pos.x, pos.y) ||\n polygonContainPoint([oldPos, b, c], pos.x, pos.y)\n );\n }\n\n protected _getParentElement(spec: ITooltipSpec): HTMLElement {\n return spec.parentElement as any;\n }\n\n getTooltipContainer() {\n return this._container;\n }\n\n protected _initFromSpec() {\n this._option = this._getDefaultOption();\n // 为方法加防抖\n this.changeTooltip = this._throttle(this._changeTooltip) as any;\n this.changeTooltipPosition = this._throttle(this._changeTooltipPosition) as any;\n }\n\n reInit() {\n this._initFromSpec();\n }\n}\n","import type { Maybe } from '@visactor/vutils';\nimport type { FontWeight, TextAlign } from '../../../../typings';\nimport { mergeSpec } from '../../../../util/spec/merge-spec';\nimport { normalizeLayoutPaddingSpec } from '../../../../util/space';\nimport { isValid, isArray } from '@visactor/vutils';\nimport type { ITooltipTheme } from '../../interface';\nimport type { ITooltipTextStyle } from '../interface';\nimport type { ILabelStyle, IShapeStyle, IDomTooltipStyle } from './interface';\nimport type { TooltipAttributes } from '@visactor/vrender-components';\nimport { calculateLineHeight } from '@visactor/vrender-core';\n\nconst DEFAULT_SHAPE_SPACING = 8;\nconst DEFAULT_KEY_SPACING = 26;\nconst DEFAULT_VALUE_SPACING = 0;\n\nexport const getPixelPropertyStr = (num?: number | number[], defaultStr?: string) => {\n if (isValid(num)) {\n if (isArray(num)) {\n return num.map(n => `${n}px`).join(' ');\n }\n return `${num}px`;\n }\n return defaultStr ?? 'initial';\n};\n\nexport const pixelPropertyStrToNumber = (str: string): number | number[] => {\n const strArr = str.split(' ');\n const numArr = strArr.map(n => {\n if (!Number.isNaN(n)) {\n return Number.parseFloat(n);\n }\n return Number.parseFloat(n.substring(0, n.length - 2));\n });\n if (numArr.length === 1) {\n return numArr[0];\n }\n return numArr;\n};\n\nexport function getDomStyles(attributes?: Maybe): IDomTooltipStyle {\n const {\n panel = {},\n title: titleAttribute,\n content: contentAttribute,\n titleStyle = {},\n contentStyle = {},\n padding,\n keyWidth,\n valueWidth,\n enterable,\n transitionDuration\n } = attributes ?? {};\n\n const {\n fill: backgroundColor,\n shadow,\n shadowBlur,\n shadowColor,\n shadowOffsetX,\n shadowOffsetY,\n shadowSpread,\n cornerRadius,\n stroke: strokeColor,\n lineWidth = 0,\n width = 0,\n height = 0\n } = panel;\n\n const { value: title = {} } = titleStyle;\n const { shape = {}, key = {}, value = {} } = contentStyle;\n\n const shapeStyle = getShapeStyle(shape);\n const keyStyle = getLabelStyle(key);\n const valueStyle = getLabelStyle(value);\n const { bottom, left, right, top } = normalizeLayoutPaddingSpec(padding);\n\n const styles: IDomTooltipStyle = {\n panel: {\n width: getPixelPropertyStr(width + lineWidth * 2),\n minHeight: getPixelPropertyStr(height + lineWidth * 2),\n paddingBottom: getPixelPropertyStr(bottom as number),\n paddingLeft: getPixelPropertyStr(left as number),\n paddingRight: getPixelPropertyStr(right as number),\n paddingTop: getPixelPropertyStr(top as number),\n borderColor: strokeColor as string,\n borderWidth: getPixelPropertyStr(lineWidth),\n borderRadius: getPixelPropertyStr(cornerRadius),\n backgroundColor: backgroundColor ? `${backgroundColor}` : 'transparent',\n boxShadow: shadow\n ? `${shadowOffsetX}px ${shadowOffsetY}px ${shadowBlur}px ${shadowSpread}px ${shadowColor}`\n : 'initial',\n pointerEvents: enterable ? 'auto' : 'none',\n transitionDuration: transitionDuration ? `${transitionDuration}ms` : 'initial',\n transitionProperty: transitionDuration ? 'transform' : 'initial',\n transitionTimingFunction: transitionDuration ? 'ease-out' : 'initial'\n },\n title: {\n marginTop: '0px',\n marginBottom: contentAttribute?.length ? getPixelPropertyStr(titleAttribute?.spaceRow) : '0px',\n ...getLabelStyle(mergeSpec({}, title, titleAttribute?.value))\n },\n content: {},\n shapeColumn: {\n common: shapeStyle,\n items: [],\n width: getPixelPropertyStr(shape.size),\n marginRight: getPixelPropertyStr(shape.spacing ?? DEFAULT_SHAPE_SPACING),\n marginBottom: getPixelPropertyStr(-(contentAttribute?.[contentAttribute?.length - 1]?.spaceRow ?? 0))\n },\n keyColumn: {\n common: keyStyle,\n items: contentAttribute?.map(\n ({ key, spaceRow }, i) =>\n ({\n marginTop: '0px',\n marginBottom: i < contentAttribute.length - 1 ? getPixelPropertyStr(spaceRow) : '0px',\n ...keyStyle,\n ...getLabelStyle(key as ITooltipTextStyle),\n ...(key?.multiLine ? { width: getPixelPropertyStr(Math.ceil(key.width)) } : undefined) // 对多行文本使用定宽\n } as ILabelStyle)\n ),\n width: getPixelPropertyStr(keyWidth),\n marginRight: getPixelPropertyStr(key.spacing ?? DEFAULT_KEY_SPACING)\n },\n valueColumn: {\n common: valueStyle,\n items: contentAttribute?.map(\n ({ value, spaceRow }, i) =>\n ({\n marginTop: '0px',\n marginBottom: i < contentAttribute.length - 1 ? getPixelPropertyStr(spaceRow) : '0px',\n ...valueStyle,\n ...getLabelStyle(value as ITooltipTextStyle),\n ...(value?.multiLine ? { width: getPixelPropertyStr(Math.ceil(value.width)) } : undefined) // 对多行文本使用定宽\n } as ILabelStyle)\n ),\n width: getPixelPropertyStr(valueWidth),\n marginRight: getPixelPropertyStr(value.spacing ?? DEFAULT_VALUE_SPACING)\n }\n };\n return styles;\n}\n\nfunction getLabelStyle(\n labelStyle?: ITooltipTextStyle,\n defaultStyle?: Partial\n): ILabelStyle | undefined {\n if (!labelStyle) {\n return undefined;\n }\n const {\n fontFamily: labelFont,\n fontSize: labelFontSize,\n fill: labelColor,\n textAlign,\n lineHeight,\n fontWeight,\n multiLine,\n wordBreak,\n maxWidth\n } = mergeSpec({}, defaultStyle, labelStyle) as ITooltipTextStyle;\n const styleObj: ILabelStyle = {};\n\n styleObj.fontFamily = labelFont;\n styleObj.fontSize = getPixelPropertyStr(labelFontSize);\n styleObj.color = labelColor as string;\n styleObj.textAlign = textAlign as TextAlign;\n styleObj.lineHeight = getPixelPropertyStr(calculateLineHeight(lineHeight, labelFontSize));\n styleObj.fontWeight = fontWeight as FontWeight;\n styleObj.whiteSpace = multiLine ? 'initial' : 'nowrap';\n styleObj.wordBreak = multiLine ? wordBreak ?? 'break-word' : 'normal';\n styleObj.maxWidth = getPixelPropertyStr(maxWidth);\n return styleObj;\n}\n\nfunction getShapeStyle(\n shapeStyle?: ITooltipTheme['shape'],\n defaultStyle?: Partial\n): IShapeStyle | undefined {\n if (!shapeStyle) {\n return undefined;\n }\n const { size } = mergeSpec({}, defaultStyle, shapeStyle);\n const styleObj: IShapeStyle = {};\n\n styleObj.width = getPixelPropertyStr(size);\n return styleObj;\n}\n","import type { Maybe } from '@visactor/vutils';\nimport type { IToolTipLineActual } from '../../../../../typings';\nimport type { ITooltipModelOption } from './interface';\nimport { domDocument } from '../../../../../util/env';\n\nexport class BaseTooltipModel {\n static type = 'tooltipModel';\n static isInstance(obj: any): obj is BaseTooltipModel {\n if (!obj) {\n return false;\n }\n return obj.type === BaseTooltipModel.type;\n }\n readonly type = BaseTooltipModel.type;\n\n readonly parent: BaseTooltipModel | HTMLElement;\n readonly childIndex: number;\n\n protected _option: ITooltipModelOption;\n setOption(option: ITooltipModelOption) {\n this._option = option;\n Object.values(this.children).forEach(c => c.setOption(option));\n }\n\n protected _renderContentCache: IToolTipLineActual[] | null = null;\n\n children: Record = {};\n\n product: Maybe;\n\n getParentEl() {\n if (BaseTooltipModel.isInstance(this.parent)) {\n return this.parent.product;\n }\n return this.parent;\n }\n\n constructor(parent: BaseTooltipModel | HTMLElement, option: ITooltipModelOption, childIndex?: number) {\n this.parent = parent;\n this._option = option;\n this.childIndex = childIndex ?? 0;\n }\n\n init(classList?: string[], id?: string) {\n // do nothing\n }\n\n initAll() {\n this.init();\n Object.values(this.children).forEach(c => c.initAll());\n }\n\n setStyle(style?: Partial) {\n if (!this.product || !style) {\n return;\n }\n Object.keys(style).forEach(key => {\n if (this.product!.style[key] !== style[key]) {\n this.product!.style[key] = style[key];\n }\n });\n }\n\n setContent(content?: any) {\n // do nothing\n }\n\n setVisibility(visibility: boolean) {\n if (!this.product) {\n return;\n }\n const { style } = this.product;\n if (visibility) {\n style.visibility = 'visible';\n } else {\n style.visibility = 'hidden';\n }\n Object.values(this.children).forEach(c => c.setVisibility(visibility));\n }\n\n getVisibility() {\n if (!this.product?.style?.visibility) {\n return false;\n }\n return this.product.style.visibility !== 'hidden';\n }\n\n release() {\n Object.values(this.children).forEach(c => c.release());\n this.children = {};\n if (this.product) {\n try {\n this.getParentEl()?.removeChild(this.product);\n } catch {}\n this.product = null;\n }\n }\n\n protected createElement(\n tag: keyof HTMLElementTagNameMap,\n classList?: string[],\n style?: Partial,\n id?: string\n ) {\n const element = domDocument?.createElement(tag);\n const parentEl = this.getParentEl();\n if (!element || !parentEl) {\n return undefined;\n }\n\n if (classList) {\n element.classList.add(...classList);\n }\n if (style) {\n Object.keys(style).forEach(key => {\n element.style[key] = style[key];\n });\n }\n if (id) {\n element.id = id;\n }\n\n let ptr = this.childIndex;\n if (BaseTooltipModel.isInstance(this.parent)) {\n // 按照自身 childIndex 插入对应位置\n let nextChildIndex = Number.MAX_VALUE;\n for (let i = 0; i < parentEl.children.length; i++) {\n const childModel = Object.values(this.parent.children).find(c => c.product === parentEl.children[i])!;\n if (childModel.childIndex > this.childIndex && childModel.childIndex < nextChildIndex) {\n nextChildIndex = childModel.childIndex;\n ptr = i;\n }\n }\n }\n if (ptr >= parentEl.children.length) {\n parentEl.appendChild(element);\n } else {\n parentEl.insertBefore(element, parentEl.children[ptr]);\n }\n return element;\n }\n}\n","export const defaultH2Style: Partial = {\n fontSize: '13px',\n marginBottom: '0px',\n fontWeight: 'normal'\n};\n\nexport const defaultContainerStyle: Partial = {\n boxSizing: 'border-box'\n};\n\nexport const defaultContentContainerStyle: Partial = {\n display: 'flex',\n whiteSpace: 'nowrap'\n};\n\nexport const defaultContentColumnStyle: Partial = {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-around',\n fontSize: '0'\n};\n\nexport const defaultKeyStyle: Partial = {\n paddingTop: '0px',\n paddingBottom: '0px',\n // overflow: 'hidden',\n // textOverflow: 'ellipsis',\n textAlign: 'left',\n fontWeight: 'normal'\n};\n\nexport const defaultAdaptiveKeyStyle: Partial = {\n paddingTop: '0px',\n paddingBottom: '0px',\n textAlign: 'left',\n fontWeight: 'normal'\n};\n\nexport const defaultValueStyle: Partial = {\n paddingTop: '0px',\n paddingBottom: '0px',\n // overflow: 'hidden',\n textAlign: 'right',\n fontWeight: 'normal'\n};\n\nexport const defaultShapeStyle: Partial = {\n lineHeight: 'normal'\n};\n","import type { IGradientColor, ILinearGradient } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { Symbol } from '@visactor/vrender-core';\n\nimport { isObject, isString } from '@visactor/vutils';\nimport type { ShapeType } from '../../../../../typings';\nimport { BaseTooltipModel } from './base-tooltip-model';\nimport { pixelPropertyStrToNumber } from '../util';\n\nexport interface IShapeSvgOption {\n hasShape?: boolean;\n symbolType?: ShapeType | string;\n size?: string;\n fill?: string | IGradientColor;\n stroke?: string;\n lineWidth?: number;\n hollow?: boolean;\n marginTop?: string;\n index?: number;\n}\n\nexport class ShapeModel extends BaseTooltipModel {\n svg: SVGElement;\n\n private _svgHtmlCache: string;\n\n init(classList?: string[], id?: string, tag?: keyof HTMLElementTagNameMap): void {\n if (!this.product) {\n const container = this.createElement(tag ?? 'div', [...(classList ?? []), 'shape'], undefined, id);\n this.product = container;\n }\n }\n\n setStyle(style?: Partial, option?: IShapeSvgOption): void {\n super.setStyle(style);\n this.setSvg(option);\n }\n\n setContent(option: IShapeSvgOption) {\n this.setSvg(option);\n }\n\n setSvg(option?: IShapeSvgOption) {\n const html = getSvgHtml(option, this._option.valueToHtml);\n if (this.product && html !== this._svgHtmlCache) {\n this._svgHtmlCache = html;\n this.product.innerHTML = html;\n }\n }\n\n release(): void {\n super.release();\n this._svgHtmlCache = '';\n }\n}\n\nconst builtInShape = {\n // FIXME: vrender 的五角星是用 canvas api 画出来的,没有内置的 path。这里先覆盖一下,等 vrender 修复\n // eslint-disable-next-line max-len\n star: 'M0 -1L0.22451398828979266 -0.3090169943749474L0.9510565162951535 -0.30901699437494745L0.3632712640026804 0.1180339887498948L0.5877852522924732 0.8090169943749473L8.326672684688674e-17 0.3819660112501051L-0.587785252292473 0.8090169943749476L-0.3632712640026804 0.11803398874989487L-0.9510565162951536 -0.30901699437494723L-0.22451398828979274 -0.30901699437494734Z'\n};\n\nfunction getSvgHtml(option: IShapeSvgOption | undefined, valueToHtml: (value: any) => string) {\n if (!option?.hasShape || !option.symbolType) {\n return '';\n }\n\n const { symbolType, fill, stroke, hollow = false } = option;\n const size = option.size ? valueToHtml(option.size) : '8px';\n const marginTop = option.marginTop ? valueToHtml(option.marginTop) : '0px';\n const lineWidth = option.lineWidth ? valueToHtml(option.lineWidth) + 'px' : '0px';\n let fillString: string = 'currentColor';\n const getStroke = () => (stroke ? valueToHtml(stroke) : fillString);\n\n const sizeNumber = pixelPropertyStrToNumber(size) as number;\n const createSymbol = (symbolType: string) => new Symbol({ symbolType, size: sizeNumber, fill: true });\n\n let symbol = createSymbol(builtInShape[symbolType] ?? symbolType);\n const parsedPath = symbol.getParsedPath();\n if (!parsedPath.path) {\n symbol = createSymbol(parsedPath.pathStr);\n }\n const pathModel = symbol.getParsedPath().path;\n const path = pathModel.toString();\n const bounds = pathModel.bounds;\n let viewBox = `${bounds.x1} ${bounds.y1} ${bounds.width()} ${bounds.height()}`;\n\n // svg 不支持内描边,需要手动将描边空间预留在 viewBox 上\n if (lineWidth !== '0px') {\n const [x, y, w, h] = viewBox.split(' ').map(n => Number(n));\n const lw = Number(lineWidth.slice(0, -2));\n viewBox = `${x - lw / 2} ${y - lw / 2} ${w + lw} ${h + lw}`;\n }\n\n if (!fill || isString(fill) || hollow) {\n fillString = hollow ? 'none' : fill ? valueToHtml(fill) : 'currentColor';\n return `\n \n \n \n `;\n }\n if (isObject(fill)) {\n fillString = 'gradientColor' + option.index ?? '';\n let gradient = '';\n const stops = (fill.stops ?? [])\n .map(s => ``)\n .join('');\n if ((fill as IGradientColor).gradient === 'radial') {\n gradient = `\n ${stops}\n `;\n } else if ((fill as IGradientColor).gradient === 'linear') {\n gradient = `\n ${stops}\n `;\n }\n return `\n \n ${gradient}\n \n \n `;\n }\n\n return '';\n}\n","import { BaseTooltipModel } from './base-tooltip-model';\n\nexport class TextModel extends BaseTooltipModel {\n init(classList?: string[], id?: string, tag?: keyof HTMLElementTagNameMap): void {\n if (!this.product) {\n this.product = this.createElement(tag ?? 'span', classList, undefined, id);\n }\n }\n\n setContent(content?: any, multiLine?: boolean): void {\n if (!this.product) {\n return;\n }\n let html = this._option.valueToHtml(content);\n if (multiLine) {\n html = html.replaceAll('\\n', '
    ');\n }\n if (html !== this.product.innerHTML) {\n this.product.innerHTML = html;\n }\n }\n}\n","import { isNumber, isString, toNumber } from '@visactor/vutils';\nimport {\n defaultKeyStyle,\n defaultContentColumnStyle,\n defaultValueStyle,\n defaultAdaptiveKeyStyle,\n defaultShapeStyle\n} from './style-constants';\nimport { BaseTooltipModel } from './base-tooltip-model';\nimport type { ITooltipModelOption } from './interface';\nimport type { IShapeSvgOption } from './shape-model';\n// eslint-disable-next-line no-duplicate-imports\nimport { ShapeModel } from './shape-model';\nimport { TextModel } from './text-model';\nimport { TOOLTIP_EMPTY_STRING } from '../../constants';\nimport { getPixelPropertyStr } from '../util';\nimport type { IToolTipLineActual } from '../../../../../typings';\nimport { mergeSpec } from '../../../../../util/spec/merge-spec';\n\nexport type ContentColumnType = 'shape-box' | 'key-box' | 'value-box';\n\n/** 默认的标签样式,覆盖外界对这些属性的预先配置 */\nconst defaultLabelStyle: Partial = {\n overflowWrap: 'normal',\n wordWrap: 'normal'\n};\n\nexport class ContentColumnModel extends BaseTooltipModel {\n readonly className: ContentColumnType;\n\n constructor(\n parent: BaseTooltipModel | HTMLElement,\n option: ITooltipModelOption,\n className: ContentColumnType,\n childIndex?: number\n ) {\n super(parent, option, childIndex);\n this.className = className;\n }\n\n init(): void {\n if (!this.product) {\n this.product = this.createElement('div', [this.className]);\n }\n const renderContent = this._option.getTooltipActual()?.content ?? [];\n\n if (this.className === 'shape-box' && !renderContent.some(c => c.hasShape && c.shapeType)) {\n // 当有一行配有形状的时候,其他行要对齐。如果没有一行配有形状,则删除所有的行\n Object.keys(this.children).forEach(key => {\n const i = toNumber(key);\n this.children[i].release();\n delete this.children[i];\n });\n } else {\n // 删除多余的行\n Object.keys(this.children).forEach(key => {\n const i = toNumber(key);\n if (i >= renderContent.length) {\n this.children[i].release();\n delete this.children[i];\n }\n });\n // 新增没有的行\n for (let i = 0; i < renderContent.length; i++) {\n if (!this.children[i]) {\n if (this.className === 'key-box' || this.className === 'value-box') {\n const text = new TextModel(this.product!, this._option, i);\n text.init([this.className.substring(0, this.className.indexOf('-'))], undefined, 'div');\n this.children[i] = text;\n } else if (this.className === 'shape-box') {\n const shape = new ShapeModel(this.product!, this._option, i);\n shape.init(['shape'], undefined, 'div');\n this.children[i] = shape;\n }\n }\n }\n }\n }\n\n setStyle() {\n const tooltipStyle = this._option.getTooltipStyle();\n\n super.setStyle(mergeSpec({}, defaultContentColumnStyle, tooltipStyle.content, this._getContentColumnStyle()));\n\n const renderContent = this._option.getTooltipActual()?.content ?? [];\n const contentAttributes = this._option.getTooltipAttributes()?.content ?? [];\n renderContent.forEach((line, i) => {\n let childStyle: any = {};\n if (this.className === 'key-box') {\n const { key, isKeyAdaptive } = line;\n childStyle = mergeSpec({}, isKeyAdaptive ? defaultAdaptiveKeyStyle : defaultKeyStyle, {\n height: getPixelPropertyStr(contentAttributes[i].height),\n ...defaultLabelStyle,\n ...tooltipStyle.keyColumn.common,\n ...tooltipStyle.keyColumn.items?.[i]\n } as Partial);\n const hasContent = (isString(key) && key?.trim?.() !== '') || isNumber(key);\n if (!hasContent && !childStyle.visibility) {\n childStyle.visibility = 'hidden';\n } else {\n childStyle.visibility = 'visible';\n }\n (this.children[i] as TextModel).setStyle(childStyle);\n } else if (this.className === 'value-box') {\n childStyle = mergeSpec({}, defaultValueStyle, {\n height: getPixelPropertyStr(contentAttributes[i].height),\n ...defaultLabelStyle,\n ...tooltipStyle.valueColumn.common,\n ...tooltipStyle.valueColumn.items?.[i]\n } as Partial);\n (this.children[i] as TextModel).setStyle(childStyle);\n } else if (this.className === 'shape-box') {\n childStyle = mergeSpec({}, defaultShapeStyle, {\n height: getPixelPropertyStr(contentAttributes[i].height + contentAttributes[i].spaceRow),\n ...tooltipStyle.shapeColumn.common,\n ...tooltipStyle.shapeColumn.items?.[i]\n });\n (this.children[i] as ShapeModel)?.setStyle(childStyle, this._getShapeSvgOption(line, i));\n }\n });\n }\n\n setContent(): void {\n const renderContent = this._option.getTooltipActual()?.content ?? [];\n const contentAttributes = this._option.getTooltipAttributes()?.content ?? [];\n renderContent.forEach((line, i) => {\n let childContent: any;\n if (this.className === 'key-box') {\n const keyContent = line.key;\n if ((isString(keyContent) && keyContent?.trim?.() !== '') || isNumber(keyContent)) {\n childContent = keyContent;\n } else {\n childContent = TOOLTIP_EMPTY_STRING;\n }\n (this.children[i] as TextModel)?.setContent(childContent, contentAttributes[i].key?.multiLine);\n } else if (this.className === 'value-box') {\n const valueContent = line.value;\n if ((isString(valueContent) && valueContent?.trim?.() !== '') || isNumber(valueContent)) {\n childContent = valueContent;\n } else {\n childContent = TOOLTIP_EMPTY_STRING;\n }\n (this.children[i] as TextModel)?.setContent(childContent, contentAttributes[i].value?.multiLine);\n } else if (this.className === 'shape-box') {\n childContent = this._getShapeSvgOption(line, i);\n this.children[i]?.setContent(childContent);\n }\n });\n }\n\n protected _getContentColumnStyle() {\n const tooltipStyle = this._option.getTooltipStyle();\n\n switch (this.className) {\n case 'shape-box':\n const renderContent = this._option.getTooltipActual()?.content ?? [];\n return {\n ...tooltipStyle.shapeColumn,\n ...(this.className === 'shape-box' && !renderContent.some(c => c.hasShape && c.shapeType)\n ? { display: 'none' }\n : {})\n };\n case 'key-box':\n return tooltipStyle.keyColumn;\n case 'value-box':\n return tooltipStyle.valueColumn;\n }\n }\n\n protected _getShapeSvgOption(line: IToolTipLineActual, index: number): IShapeSvgOption {\n const tooltipStyle = this._option.getTooltipStyle();\n const shapeColumn = {\n ...tooltipStyle.shapeColumn,\n ...tooltipStyle.shapeColumn.items?.[index]\n };\n const keyColumn = {\n ...tooltipStyle.keyColumn,\n ...tooltipStyle.keyColumn.items?.[index]\n };\n return {\n hasShape: line.hasShape,\n symbolType: line.shapeType,\n size: shapeColumn.width,\n fill: line.shapeFill ?? line.shapeColor,\n stroke: line.shapeStroke,\n lineWidth: line.shapeLineWidth,\n hollow: line.shapeHollow,\n marginTop: `calc((${keyColumn.lineHeight ?? keyColumn.fontSize ?? '18px'} - ${shapeColumn.width ?? '8px'}) / 2)`,\n index\n } as IShapeSvgOption;\n }\n}\n","import { defaultContentContainerStyle } from './style-constants';\nimport { BaseTooltipModel } from './base-tooltip-model';\nimport { ContentColumnModel } from './content-column-model';\nimport type { Maybe } from '@visactor/vutils';\nimport { mergeSpec } from '../../../../../util/spec/merge-spec';\n\nexport class ContentModel extends BaseTooltipModel {\n shapeBox: Maybe;\n keyBox: Maybe;\n valueBox: Maybe;\n\n init(): void {\n if (!this.product) {\n this.product = this.createElement('div', ['container-box']);\n }\n if (!this.shapeBox) {\n this._initShapeBox();\n }\n if (!this.keyBox) {\n this._initKeyBox();\n }\n if (!this.valueBox) {\n this._initValueBox();\n }\n }\n\n private _initShapeBox() {\n const shapeBox = new ContentColumnModel(this.product!, this._option, 'shape-box', 0);\n shapeBox.init();\n this.shapeBox = shapeBox;\n this.children[shapeBox.childIndex] = shapeBox;\n }\n\n private _initKeyBox() {\n const keyBox = new ContentColumnModel(this.product!, this._option, 'key-box', 1);\n keyBox.init();\n this.keyBox = keyBox;\n this.children[keyBox.childIndex] = keyBox;\n }\n\n private _initValueBox() {\n const valueBox = new ContentColumnModel(this.product!, this._option, 'value-box', 2);\n valueBox.init();\n this.valueBox = valueBox;\n this.children[valueBox.childIndex] = valueBox;\n }\n\n setStyle(style?: Partial): void {\n super.setStyle(mergeSpec({}, defaultContentContainerStyle, style));\n Object.values(this.children).forEach(c => {\n c.setStyle();\n });\n }\n\n setContent(): void {\n Object.values(this.children).forEach(c => {\n c.setContent();\n });\n }\n\n release(): void {\n super.release();\n this.shapeBox = null;\n this.keyBox = null;\n this.valueBox = null;\n }\n}\n","import type { Maybe } from '@visactor/vutils';\nimport { defaultH2Style } from './style-constants';\nimport { BaseTooltipModel } from './base-tooltip-model';\nimport { ShapeModel } from './shape-model';\nimport { TextModel } from './text-model';\nimport { mergeSpec } from '../../../../../util/spec/merge-spec';\n\nexport class TitleModel extends BaseTooltipModel {\n shape: Maybe;\n textSpan: Maybe;\n\n init(): void {\n const tooltipActual = this._option.getTooltipActual();\n\n if (!this.product) {\n this.product = this.createElement('h2');\n }\n\n const { title } = tooltipActual;\n if (title?.hasShape && title?.shapeType) {\n if (!this.shape) {\n this._initShape();\n }\n } else if (this.shape) {\n this._releaseShape();\n }\n\n if (!this.textSpan) {\n this._initTextSpan();\n }\n }\n\n private _initShape() {\n const shape = new ShapeModel(this.product!, this._option, 0);\n shape.init();\n this.shape = shape;\n this.children[shape.childIndex] = shape;\n }\n\n private _releaseShape() {\n if (!this.shape) {\n return;\n }\n this.shape.release();\n delete this.children[this.shape.childIndex];\n this.shape = null;\n }\n\n private _initTextSpan() {\n const textSpan = new TextModel(this.product!, this._option, 1);\n textSpan.init();\n this.textSpan = textSpan;\n this.children[textSpan.childIndex] = textSpan;\n }\n\n setStyle(style?: Partial): void {\n const tooltipStyle = this._option.getTooltipStyle();\n const tooltipActual = this._option.getTooltipActual();\n\n const { title } = tooltipActual;\n super.setStyle(mergeSpec({}, defaultH2Style, tooltipStyle.title, style));\n\n this.shape?.setStyle(\n {\n paddingRight: tooltipStyle.shapeColumn.common?.marginRight\n },\n {\n hasShape: title?.hasShape,\n symbolType: title?.shapeType,\n size: tooltipStyle.shapeColumn.common?.width,\n fill: title?.shapeColor,\n hollow: title?.shapeHollow\n }\n );\n this.textSpan?.setStyle({\n color: 'inherit'\n });\n }\n\n setContent(): void {\n const tooltipStyle = this._option.getTooltipStyle();\n const tooltipActual = this._option.getTooltipActual();\n const tooltipAttributes = this._option.getTooltipAttributes();\n\n const { title } = tooltipActual;\n this.init();\n this.shape?.setStyle(undefined, {\n hasShape: title?.hasShape,\n symbolType: title?.shapeType,\n size: tooltipStyle.shapeColumn.common?.width,\n fill: title?.shapeColor,\n hollow: title?.shapeHollow\n });\n this.textSpan?.setStyle({\n color: 'inherit'\n });\n this.textSpan?.setContent(title?.value, tooltipAttributes.title?.value?.multiLine);\n }\n\n release(): void {\n super.release();\n this.shape = null;\n this.textSpan = null;\n }\n}\n","import { isValid } from '@visactor/vutils';\nimport { BaseTooltipModel } from './base-tooltip-model';\nimport { ContentModel } from './content-model';\nimport type { ITooltipModelOption } from './interface';\nimport { TitleModel } from './title-model';\nimport { defaultContainerStyle } from './style-constants';\nimport { mergeSpec } from '../../../../../util/spec/merge-spec';\n\nexport class TooltipModel extends BaseTooltipModel {\n title: TitleModel | null = null;\n content: ContentModel | null = null;\n\n private _classList: string[];\n private _id: string;\n\n constructor(parent: BaseTooltipModel | HTMLElement, option: ITooltipModelOption, classList: string[], id: string) {\n super(parent, option, 0);\n this._classList = classList;\n this._id = id;\n }\n\n setVisibility(visibility: boolean) {\n super.setVisibility(visibility);\n if (!this.product) {\n return;\n }\n const { classList } = this.product;\n if (visibility) {\n classList.add('visible');\n } else {\n classList.remove('visible');\n }\n }\n\n init(): void {\n const tooltipActual = this._option.getTooltipActual();\n\n if (!this.product) {\n this._initPanel(this._classList, this._id);\n }\n\n const { title } = tooltipActual;\n if (title?.visible !== false && isValid(title?.value)) {\n if (!this.title) {\n this._initTitle();\n }\n } else if (this.title) {\n this._releaseTitle();\n }\n\n const renderContent = tooltipActual.content ?? [];\n if (renderContent.length > 0) {\n if (!this.content) {\n this._initContent();\n }\n } else if (this.content) {\n this._releaseContent();\n }\n }\n\n private _initPanel(classList?: string[], id?: string) {\n const panel = this.createElement(\n 'div',\n classList,\n {\n left: '0',\n top: '0',\n pointerEvents: 'none',\n padding: '12px',\n position: 'absolute',\n zIndex: '99999999999999',\n fontFamily: 'sans-serif',\n fontSize: '11px',\n borderRadius: '3px',\n borderStyle: 'solid',\n lineHeight: 'initial',\n background: '#fff',\n boxShadow: '2px 2px 4px rgba(0, 0, 0, 0.1)',\n maxWidth: '100wh',\n maxHeight: '100vh'\n },\n id\n );\n this.product = panel;\n }\n\n private _initTitle() {\n const title = new TitleModel(this.product!, this._option, 0);\n title.init();\n this.title = title;\n this.children[title.childIndex] = title;\n }\n\n private _releaseTitle() {\n if (!this.title) {\n return;\n }\n this.title.release();\n delete this.children[this.title.childIndex];\n this.title = null;\n }\n\n private _initContent() {\n const content = new ContentModel(this.product!, this._option, 1);\n content.init();\n this.content = content;\n this.children[content.childIndex] = content;\n }\n\n private _releaseContent() {\n if (!this.content) {\n return;\n }\n this.content.release();\n delete this.children[this.content.childIndex];\n this.content = null;\n }\n\n setStyle(): void {\n const tooltipStyle = this._option.getTooltipStyle();\n super.setStyle(mergeSpec({}, defaultContainerStyle, tooltipStyle.panel));\n Object.values(this.children).forEach(c => c.setStyle());\n }\n\n setContent() {\n Object.values(this.children).forEach(c => {\n c.setContent();\n });\n }\n\n release(): void {\n super.release();\n this.title = null;\n this.content = null;\n }\n}\n","import type { IToolTipActual } from '../../../../typings/tooltip';\nimport type { ITooltipSpec, TooltipHandlerParams } from '../../interface';\nimport { BaseTooltipHandler } from '../base';\nimport { getDomStyles } from './util';\nimport type { IDomTooltipStyle } from './interface';\nimport { TooltipModel } from './model/tooltip-model';\nimport { TOOLTIP_CONTAINER_EL_CLASS_NAME, TooltipHandlerType } from '../constants';\nimport type { Tooltip } from '../../tooltip';\nimport type { Maybe } from '@visactor/vutils';\nimport { domDocument } from '../../../../util/env';\n\n/**\n * The tooltip handler class.\n */\nexport class DomTooltipHandler extends BaseTooltipHandler {\n type = TooltipHandlerType.dom;\n\n protected _tooltipContainer = domDocument?.body;\n protected _domStyle: IDomTooltipStyle;\n protected _tooltipActual?: IToolTipActual;\n protected declare _container: Maybe;\n\n protected model: TooltipModel;\n\n getVisibility() {\n return !!this.model?.getVisibility();\n }\n\n setVisibility(_value: boolean) {\n // 这里做个节流\n if (_value !== this.getVisibility()) {\n this.model?.setVisibility(_value);\n }\n }\n\n constructor(tooltipId: string, component: Tooltip) {\n super(tooltipId, component);\n this._initStyle();\n this.initEl();\n }\n\n initEl() {\n const tooltipSpec = this._component.getSpec();\n const parentElement = tooltipSpec.parentElement as HTMLElement | HTMLCanvasElement;\n if (domDocument && parentElement) {\n for (let i = 0; i < parentElement.children.length; i++) {\n if (parentElement.children[i].classList.contains(TOOLTIP_CONTAINER_EL_CLASS_NAME)) {\n this._container = parentElement.children[i] as HTMLDivElement;\n break;\n }\n }\n if (!this._container) {\n this._container = domDocument.createElement('div');\n this._container.style.position = 'relative';\n this._container.classList.add(TOOLTIP_CONTAINER_EL_CLASS_NAME);\n parentElement.appendChild(this._container);\n }\n this.model = new TooltipModel(\n this._container,\n {\n valueToHtml: this._option.sanitize,\n getTooltipStyle: () => this._domStyle,\n getTooltipActual: () => this._tooltipActual,\n getTooltipAttributes: () => this._attributes\n },\n [tooltipSpec.className],\n this.id\n );\n }\n }\n\n protected _removeTooltip() {\n this.model?.release();\n this._container = null;\n }\n\n protected _updateTooltip(visible: boolean, params: TooltipHandlerParams, actualTooltip: IToolTipActual) {\n if (!visible || !this.model) {\n this.setVisibility(visible);\n } else {\n if (!params.changePositionOnly) {\n this._tooltipActual = actualTooltip;\n this._initStyle();\n\n this.model.initAll();\n this.model.setStyle();\n this.model.setContent();\n }\n this.setVisibility(visible);\n\n // 位置\n let { x = 0, y = 0 } = actualTooltip.position ?? {};\n const el = this.model.product;\n\n if (el) {\n if (this._cacheViewSpec?.updateElement) {\n this._cacheViewSpec.updateElement(el, actualTooltip, params);\n\n // 重新计算 tooltip 位置\n const position = this._getActualTooltipPosition(actualTooltip, params, {\n width: el.offsetWidth,\n height: el.offsetHeight\n });\n x = position.x;\n y = position.y;\n }\n\n // https://stackoverflow.com/questions/22111256/translate3d-vs-translate-performance\n el.style.transform = `translate3d(${x}px, ${y}px, 0)`;\n }\n }\n }\n\n protected _initStyle() {\n this._domStyle = getDomStyles(this._attributes);\n }\n\n protected _getParentElement(spec: ITooltipSpec): HTMLElement {\n return this._container ?? super._getParentElement(spec);\n }\n\n isTooltipShown() {\n return this.getVisibility();\n }\n\n reInit() {\n super.reInit();\n this._initStyle();\n }\n}\n","import { array, isNil, merge } from '@visactor/vutils';\nimport type { IRichTextGraphicAttribute } from '@visactor/vrender-core';\nimport type { TooltipRowAttrs, TooltipRowStyleAttrs, TooltipTextAttrs, TooltipRichTextAttrs } from './type';\nimport type { IRichTextCharacter } from '@visactor/vrender-core';\n\nexport const mergeRowAttrs = (\n target: TooltipRowAttrs | TooltipRowStyleAttrs,\n ...sources: (TooltipRowAttrs | TooltipRowStyleAttrs)[]\n): TooltipRowAttrs | TooltipRowStyleAttrs => {\n const shapeList = [target.shape, ...sources.map(s => s?.shape)];\n const keyList = [target.key, ...sources.map(s => s?.key)];\n const valueList = [target.value, ...sources.map(s => s?.value)];\n\n return merge(target, ...sources, {\n shape: shapeList.every(isNil) ? undefined : merge({}, ...shapeList),\n key: keyList.every(isNil) ? undefined : merge({}, ...keyList),\n value: valueList.every(isNil) ? undefined : merge({}, ...valueList)\n }) as TooltipRowAttrs | TooltipRowStyleAttrs;\n};\n\nexport const getRichTextAttribute = (attr: TooltipTextAttrs): IRichTextGraphicAttribute => {\n const { width, height, wordBreak = 'break-word', textAlign, textBaseline, text } = attr;\n if (Array.isArray(text)) {\n return {\n width,\n height,\n wordBreak: wordBreak as any,\n textAlign: textAlign as any,\n textBaseline: textBaseline as any,\n singleLine: false,\n textConfig: array(text as string[]).map(\n text =>\n ({\n ...attr,\n text\n } as any)\n )\n };\n }\n return {\n width,\n height,\n wordBreak: wordBreak as any,\n textAlign: textAlign as any,\n textBaseline: textBaseline as any,\n singleLine: false,\n textConfig: (text as TooltipRichTextAttrs).text as IRichTextCharacter[]\n };\n};\n","import { AABBBounds } from '@visactor/vutils';\nimport { DEFAULT_TEXT_FONT_FAMILY } from '../constant';\nimport { TooltipAttributes } from './type';\n\nexport const defaultAttributes: Partial = {\n panel: {\n visible: true,\n cornerRadius: [3, 3, 3, 3],\n fill: 'white',\n shadow: true,\n shadowBlur: 12,\n shadowColor: 'rgba(0, 0, 0, 0.1)',\n shadowOffsetX: 0,\n shadowOffsetY: 4,\n shadowSpread: 0,\n stroke: 'white'\n },\n titleStyle: {\n value: {\n fill: '#4E5969',\n fontFamily: DEFAULT_TEXT_FONT_FAMILY,\n fontSize: 14,\n lineHeight: 18,\n textAlign: 'left',\n textBaseline: 'middle'\n },\n spaceRow: 6\n },\n contentStyle: {\n shape: {\n fill: 'black',\n size: 8,\n symbolType: 'circle',\n spacing: 6\n },\n key: {\n fill: '#4E5969',\n fontFamily: DEFAULT_TEXT_FONT_FAMILY,\n fontSize: 12,\n lineHeight: 18,\n textAlign: 'left',\n textBaseline: 'middle',\n spacing: 26\n },\n value: {\n fill: '#4E5969',\n fontFamily: DEFAULT_TEXT_FONT_FAMILY,\n fontSize: 12,\n lineHeight: 18,\n textAlign: 'right',\n textBaseline: 'middle',\n spacing: 0\n },\n spaceRow: 6\n },\n padding: 10,\n positionX: 'right',\n positionY: 'bottom',\n offsetX: 10,\n offsetY: 10,\n parentBounds: new AABBBounds().setValue(\n Number.NEGATIVE_INFINITY,\n Number.NEGATIVE_INFINITY,\n Number.POSITIVE_INFINITY,\n Number.POSITIVE_INFINITY\n ),\n autoCalculatePosition: true,\n autoMeasure: true,\n\n pickable: false,\n childrenPickable: false,\n zIndex: 500\n};\n\nexport const TOOLTIP_POSITION_ATTRIBUTES = [\n 'pointerX',\n 'pointerY',\n 'offsetX',\n 'offsetY',\n 'positionX',\n 'positionY',\n 'parentBounds'\n];\n","import { registerGroup, registerRect, registerRichtext, registerSymbol, registerText } from '@visactor/vrender-kits';\n\nexport function loadTooltipComponent() {\n registerGroup();\n registerRect();\n registerSymbol();\n registerText();\n registerRichtext();\n}\n","/**\n * @description 标题组件\n */\nimport type { IGroup, IText, IRichText, IRect, ISymbol, ITextGraphicAttribute } from '@visactor/vrender-core';\nimport { builtinSymbolsMap, calculateLineHeight } from '@visactor/vrender-core';\nimport { merge, isValid, normalizePadding, isNil } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport { initTextMeasure } from '../util/text';\nimport { isVisible } from '../util';\nimport type { TooltipAttributes, TooltipRowAttrs, TooltipRowStyleAttrs, TooltipRichTextAttrs } from './type';\nimport { getRichTextAttribute, mergeRowAttrs } from './util';\nimport { defaultAttributes, TOOLTIP_POSITION_ATTRIBUTES } from './config';\nimport type { ComponentOptions } from '../interface';\nimport type { TextMeasureInput } from '@visactor/vutils';\nimport { DEFAULT_HTML_TEXT_SPEC } from '../constant';\nimport { loadTooltipComponent } from './register';\n\nconst TOOLTIP_BACKGROUND_NAME = 'tooltip-background';\nconst TOOLTIP_TITLE_NAME = 'tooltip-title';\nconst TOOLTIP_CONTENT_NAME = 'tooltip-content';\n\nconst TOOLTIP_SHAPE_NAME_SUFFIX = 'shape';\nconst TOOLTIP_KEY_NAME_SUFFIX = 'key';\nconst TOOLTIP_VALUE_NAME_SUFFIX = 'value';\n\nloadTooltipComponent();\nexport class Tooltip extends AbstractComponent> {\n name = 'tooltip';\n\n // tooltip 背景\n private _tooltipPanel!: IRect;\n // tooltip title 容器\n private _tooltipTitleContainer!: IGroup;\n // tooltip title shape\n private _tooltipTitleSymbol!: ISymbol;\n // tooltip title 文本\n private _tooltipTitle!: IText | IRichText;\n // tooltip 内容项容器\n private _tooltipContent!: IGroup;\n\n static defaultAttributes: Partial = defaultAttributes;\n\n constructor(attributes: TooltipAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Tooltip.defaultAttributes, attributes), options);\n }\n\n protected render() {\n const { visible, content, panel, keyWidth, valueWidth, hasContentShape, autoCalculatePosition, autoMeasure } =\n this.attribute;\n\n if (!visible) {\n this.hideAll();\n return;\n }\n\n if (autoMeasure) {\n Tooltip.measureTooltip(this.attribute);\n }\n if (autoCalculatePosition) {\n Tooltip.calculateTooltipPosition(this.attribute);\n }\n\n const padding = normalizePadding(this.attribute.padding);\n\n // 创建背景层\n this._tooltipPanel = this.createOrUpdateChild(\n TOOLTIP_BACKGROUND_NAME,\n {\n visible: true,\n ...panel\n },\n 'rect'\n ) as IRect;\n\n // 创建标题层\n this._tooltipTitleContainer = this.createOrUpdateChild(\n TOOLTIP_TITLE_NAME,\n { visible: true, x: padding[3], y: padding[0] },\n 'group'\n ) as IGroup;\n\n // 合并样式\n const titleAttr = Tooltip.getTitleAttr(this.attribute);\n\n // 创建标题 shape\n // 创建 symbol\n this._tooltipTitleSymbol = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_SHAPE_NAME_SUFFIX}`,\n merge({ symbolType: 'circle' }, titleAttr.shape, {\n visible: isVisible(titleAttr) && isVisible(titleAttr.shape)\n }),\n 'symbol'\n ) as ISymbol;\n\n // 文本\n if (\n typeof titleAttr.value.text === 'object' &&\n titleAttr.value.text !== null &&\n ((titleAttr.value.text as TooltipRichTextAttrs).type === 'rich' ||\n (titleAttr.value.text as TooltipRichTextAttrs).type === 'html')\n ) {\n if ((titleAttr.value.text as TooltipRichTextAttrs).type === 'rich') {\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: isVisible(titleAttr) && isVisible(titleAttr.value),\n ...getRichTextAttribute(titleAttr.value)\n },\n 'richtext'\n ) as IRichText;\n } else if ((titleAttr.value.text as TooltipRichTextAttrs).type === 'html') {\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n html: {\n dom: (titleAttr.value.text as TooltipRichTextAttrs).text as string,\n ...DEFAULT_HTML_TEXT_SPEC,\n ...titleAttr.value\n },\n visible: isVisible(titleAttr) && isVisible(titleAttr.value),\n width: titleAttr.value.width,\n height: titleAttr.value.height,\n wordBreak: titleAttr.value.wordBreak as any,\n textAlign: titleAttr.value.textAlign as any,\n textBaseline: titleAttr.value.textBaseline as any,\n singleLine: false,\n textConfig: [],\n ...titleAttr.value\n },\n 'richtext'\n ) as IRichText;\n }\n } else if (titleAttr.value.multiLine) {\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: isVisible(titleAttr) && isVisible(titleAttr.value),\n ...getRichTextAttribute(titleAttr.value)\n },\n 'richtext'\n ) as IRichText;\n } else {\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n text: (titleAttr.value.text ?? '') as any,\n visible: isVisible(titleAttr) && isVisible(titleAttr.value),\n ...titleAttr.value\n },\n 'text'\n ) as IText;\n }\n\n // 调整标题的位置\n const titlePaddingLeft = isVisible(titleAttr.shape) ? titleAttr.shape.size + titleAttr.shape.spacing : 0;\n const { textAlign, textBaseline } = titleAttr.value;\n const contentWidth = panel.width - padding[3] - padding[0] - titlePaddingLeft;\n if (textAlign === 'center') {\n this._tooltipTitle.setAttribute('x', titlePaddingLeft + contentWidth / 2);\n } else if (textAlign === 'right' || textAlign === 'end') {\n // 右对齐\n this._tooltipTitle.setAttribute('x', titlePaddingLeft + contentWidth);\n } else {\n // 默认左对齐\n this._tooltipTitle.setAttribute('x', titlePaddingLeft);\n }\n if (textBaseline === 'bottom') {\n this._tooltipTitle.setAttribute('y', titleAttr.height);\n } else if (textBaseline === 'middle') {\n this._tooltipTitle.setAttribute('y', titleAttr.height / 2);\n } else {\n this._tooltipTitle.setAttribute('y', 0);\n }\n const titleHeight = isVisible(titleAttr) ? titleAttr.height + titleAttr.spaceRow : 0;\n\n // 创建内容层\n this._tooltipContent = this.createOrUpdateChild(TOOLTIP_CONTENT_NAME, { visible: true }, 'group') as IGroup;\n this._tooltipContent.removeAllChild(); // 清空内容区\n\n if (content && content.length) {\n this._tooltipContent.setAttribute('x', padding[3]);\n this._tooltipContent.setAttribute('y', padding[0] + titleHeight);\n\n let lastYPos = 0;\n content.forEach((item, i) => {\n // 合并样式\n const itemAttr = Tooltip.getContentAttr(this.attribute, i);\n\n if (!isVisible(itemAttr)) {\n return;\n }\n\n const itemGroupName = `${TOOLTIP_CONTENT_NAME}-${i}`;\n const itemGroup = this._tooltipContent.createOrUpdateChild(\n itemGroupName,\n { visible: true, x: 0, y: lastYPos },\n 'group'\n ) as IGroup;\n\n let x = 0;\n if (isVisible(itemAttr.shape)) {\n // 存在 symbol\n itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_SHAPE_NAME_SUFFIX}`,\n {\n visible: true,\n x: itemAttr.shape.size / 2,\n y:\n itemAttr.shape.size / 2 +\n ((calculateLineHeight(itemAttr.key.lineHeight, itemAttr.key.fontSize) ?? itemAttr.key.fontSize) -\n itemAttr.shape.size) /\n 2,\n ...itemAttr.shape\n },\n 'symbol'\n ) as ISymbol;\n }\n if (hasContentShape) {\n x += itemAttr.shape.size + itemAttr.shape.spacing;\n }\n\n if (isVisible(itemAttr.key)) {\n let element: IRichText | IText;\n if (itemAttr.key.multiLine) {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_KEY_NAME_SUFFIX}`,\n {\n visible: true,\n ...getRichTextAttribute(itemAttr.key),\n textBaseline: 'top'\n },\n 'richtext'\n ) as IRichText;\n } else if (\n typeof itemAttr.key.text === 'object' &&\n itemAttr.key.text !== null &&\n ((itemAttr.key.text as TooltipRichTextAttrs).type === 'rich' ||\n (itemAttr.key.text as TooltipRichTextAttrs).type === 'html')\n ) {\n if ((itemAttr.key.text as TooltipRichTextAttrs).type === 'rich') {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: true,\n ...getRichTextAttribute(itemAttr.key),\n textBaseline: 'top'\n },\n 'richtext'\n ) as IRichText;\n } else {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n html: {\n dom: (itemAttr.key.text as TooltipRichTextAttrs).text as string,\n ...DEFAULT_HTML_TEXT_SPEC,\n ...itemAttr.key\n }\n },\n 'richtext'\n ) as IRichText;\n }\n } else {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_KEY_NAME_SUFFIX}`,\n {\n visible: true,\n text: (itemAttr.key.text ?? '') as any,\n ...itemAttr.key,\n textBaseline: 'top'\n },\n 'text'\n ) as IText;\n }\n\n const { textAlign } = itemAttr.key;\n if (textAlign === 'center') {\n element.setAttribute('x', x + keyWidth / 2);\n } else if (textAlign === 'right' || textAlign === 'end') {\n // 右对齐\n element.setAttribute('x', x + keyWidth);\n } else {\n // 默认左对齐\n element.setAttribute('x', x);\n }\n\n element.setAttribute('y', 0);\n x += keyWidth + itemAttr.key.spacing;\n }\n\n if (isVisible(itemAttr.value)) {\n let element: IRichText | IText;\n if (itemAttr.value.multiLine) {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: true,\n ...getRichTextAttribute(itemAttr.value),\n textBaseline: 'top'\n },\n 'richtext'\n ) as IRichText;\n } else if (\n typeof itemAttr.value.text === 'object' &&\n itemAttr.value.text !== null &&\n ((itemAttr.value.text as TooltipRichTextAttrs).type === 'rich' ||\n (itemAttr.value.text as TooltipRichTextAttrs).type === 'html')\n ) {\n if ((itemAttr.value.text as TooltipRichTextAttrs).type === 'rich') {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: true,\n ...getRichTextAttribute(itemAttr.value),\n textBaseline: 'top'\n },\n 'richtext'\n ) as IRichText;\n } else {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n html: {\n dom: (itemAttr.value.text as TooltipRichTextAttrs).text as string,\n container: '',\n width: 30,\n height: 30,\n style: {},\n ...itemAttr.value\n }\n },\n 'richtext'\n ) as IRichText;\n }\n } else {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: true,\n text: (itemAttr.value.text ?? '') as any,\n ...itemAttr.value,\n textBaseline: 'top'\n },\n 'text'\n ) as IText;\n }\n\n let textAlign = 'right';\n if (isValid(itemAttr.value.textAlign)) {\n textAlign = itemAttr.value.textAlign;\n } else if (!isVisible(itemAttr.key)) {\n textAlign = 'left';\n }\n element.setAttribute('textAlign', textAlign);\n\n if (textAlign === 'center') {\n element.setAttribute('x', x + valueWidth / 2);\n } else if (textAlign === 'right' || textAlign === 'end') {\n // 右对齐\n element.setAttribute('x', x + valueWidth);\n } else {\n // 默认左对齐\n element.setAttribute('x', x);\n }\n x += valueWidth;\n\n element.setAttribute('y', 0);\n\n itemGroup.add(element);\n }\n\n lastYPos += itemAttr.height + itemAttr.spaceRow;\n });\n }\n }\n\n setAttributes(params: Partial>, forceUpdateTag?: boolean | undefined): void {\n const keys = Object.keys(params) as (keyof TooltipAttributes)[];\n // 优化:只更改 tooltip 位置\n if (this.attribute.autoCalculatePosition && keys.every(key => TOOLTIP_POSITION_ATTRIBUTES.includes(key))) {\n this._mergeAttributes(params, keys);\n // 计算 x y\n if (isNil(this.attribute.panel.width) && this.attribute.autoMeasure) {\n Tooltip.measureTooltip(this.attribute);\n }\n Tooltip.calculateTooltipPosition(this.attribute);\n // 应用 x y\n super.setAttributes(\n {\n x: this.attribute.x,\n y: this.attribute.y\n },\n forceUpdateTag\n );\n } else {\n super.setAttributes(params, forceUpdateTag);\n }\n }\n\n static calculateTooltipPosition(attribute: Partial): Partial {\n const { width: tooltipBoxWidth = 0, height: tooltipBoxHeight = 0 } = attribute.panel;\n\n const { offsetX, offsetY, pointerX, pointerY, positionX, positionY, parentBounds } = attribute;\n\n let x = pointerX;\n let y = pointerY;\n if (positionX === 'left') {\n x -= tooltipBoxWidth + offsetX;\n } else if (positionX === 'center') {\n x -= tooltipBoxWidth / 2;\n } else {\n x += offsetX;\n }\n if (positionY === 'top') {\n y -= tooltipBoxHeight + offsetY;\n } else if (positionY === 'middle') {\n y -= tooltipBoxHeight / 2;\n } else {\n y += offsetY;\n }\n\n /* 确保tooltip在视区内 */\n if (x + tooltipBoxWidth > parentBounds.x2) {\n // 位置不超出视区右界\n x -= tooltipBoxWidth + offsetX;\n }\n if (y + tooltipBoxHeight > parentBounds.y2) {\n // 位置不超出视区下界\n y -= tooltipBoxHeight + offsetY;\n }\n if (x < parentBounds.x1) {\n // 位置不超出视区左界\n x = parentBounds.x1;\n }\n if (y < parentBounds.y1) {\n // 位置不超出视区上界\n y = parentBounds.y1;\n }\n\n attribute.x = x;\n attribute.y = y;\n\n return attribute;\n }\n\n static measureTooltip(attribute: Partial): Partial {\n const { content, contentStyle } = attribute;\n const padding = normalizePadding(attribute.padding);\n // 合并样式\n const titleAttr = Tooltip.getTitleAttr(attribute);\n\n let maxWidth = 0;\n let containerHeight = padding[0] + padding[2];\n\n // calculate title\n let titleMaxHeight = 0;\n const { value: titleValue, shape: titleShape } = titleAttr;\n const { visible: titleHasShape = false, symbolType: titleShapeType = '' } = titleShape ?? {};\n\n if (isValid(titleValue) && typeof titleAttr.value.text !== 'object') {\n const { width, height } = initTextMeasure(titleValue as Partial).quickMeasure(\n titleValue.text as TextMeasureInput\n );\n maxWidth = width;\n titleMaxHeight = height;\n }\n if (titleHasShape && builtinSymbolsMap[titleShapeType]) {\n maxWidth += titleShape.size + titleShape.spacing;\n titleMaxHeight = Math.max(titleShape.size, titleMaxHeight);\n }\n\n if (attribute.title) {\n attribute.title.width = maxWidth;\n attribute.title.height = titleMaxHeight;\n }\n\n if (isVisible(titleAttr)) {\n containerHeight += titleMaxHeight + titleAttr.spaceRow;\n }\n\n // calculate content\n if (content && content.length) {\n // filter content\n const filteredContent: [TooltipRowAttrs, TooltipRowAttrs][] = [];\n content.forEach((item, i) => {\n // 合并样式\n const itemAttr = Tooltip.getContentAttr(attribute, i);\n if ((item.key || item.value) && isVisible(itemAttr)) {\n filteredContent.push([item, itemAttr]);\n }\n });\n\n if (filteredContent.length) {\n let hasContentShape = false;\n const shapeWidths: number[] = [];\n const keyWidths: number[] = [];\n const valueWidths: number[] = [];\n\n filteredContent.forEach(([item, itemAttr], i) => {\n const { key, value, shape, spaceRow } = itemAttr;\n const itemHasShape = isVisible(shape);\n const itemShapeType = shape?.symbolType ?? '';\n\n const keyTextMeasure = initTextMeasure(key as Partial);\n const valueTextMeasure = initTextMeasure(value as Partial);\n\n let itemHeight = 0;\n if (isVisible(key)) {\n const { width, height } = keyTextMeasure.quickMeasure(key.text as TextMeasureInput);\n keyWidths.push(width);\n itemHeight = Math.max(itemHeight, height);\n }\n if (isVisible(value)) {\n const { width, height } = valueTextMeasure.quickMeasure(value.text as TextMeasureInput);\n valueWidths.push(width);\n itemHeight = Math.max(itemHeight, height);\n }\n if (itemHasShape && builtinSymbolsMap[itemShapeType]) {\n hasContentShape = true;\n shapeWidths.push(shape.size);\n itemHeight = Math.max(shape.size, itemHeight);\n }\n\n item.height = itemHeight;\n containerHeight += itemHeight;\n if (i < filteredContent.length - 1) {\n containerHeight += spaceRow ?? contentStyle.spaceRow;\n }\n });\n\n const maxShapeWidth = shapeWidths.length ? Math.max(...shapeWidths) : 0; // shape 需要对齐\n const maxKeyWidth = keyWidths.length ? Math.max(...keyWidths) : 0; // name 需要对齐\n const maxValueWidth = valueWidths.length ? Math.max(...valueWidths) : 0; // value 需要对齐\n maxWidth = Math.max(\n maxKeyWidth +\n maxValueWidth +\n contentStyle.key.spacing +\n contentStyle.value.spacing +\n (hasContentShape ? maxShapeWidth + contentStyle.shape.spacing : 0),\n maxWidth\n );\n content.forEach(item => {\n item.width = maxWidth;\n });\n attribute.hasContentShape = hasContentShape;\n attribute.keyWidth = maxKeyWidth;\n attribute.valueWidth = maxValueWidth;\n }\n }\n\n attribute.panel.width = maxWidth + padding[1] + padding[3];\n attribute.panel.height = containerHeight;\n\n return attribute;\n }\n\n static getTitleAttr(attribute: Partial): TooltipRowAttrs & TooltipRowStyleAttrs {\n return mergeRowAttrs(\n {},\n Tooltip.defaultAttributes.titleStyle,\n Tooltip.defaultAttributes.title,\n attribute.titleStyle,\n attribute.title\n );\n }\n\n static getContentAttr(attribute: Partial, index: number): TooltipRowAttrs & TooltipRowStyleAttrs {\n return mergeRowAttrs({}, Tooltip.defaultAttributes.contentStyle, attribute.contentStyle, attribute.content[index]);\n }\n}\n","import type { ILayer, INode, Stage } from '@visactor/vrender-core';\nimport type { IToolTipActual } from '../../../../typings/tooltip';\nimport type { TooltipHandlerParams } from '../../interface';\nimport { BaseTooltipHandler } from '../base';\nimport { Tooltip as TooltipComponent } from '@visactor/vrender-components';\nimport { isValid } from '@visactor/vutils';\nimport { TooltipHandlerType } from '../constants';\nimport type { Tooltip } from '../../tooltip';\n\n/**\n * The tooltip handler class.\n */\nexport class CanvasTooltipHandler extends BaseTooltipHandler {\n type = TooltipHandlerType.canvas;\n\n private _layer: ILayer;\n protected _el?: HTMLCanvasElement;\n protected _tooltipCanvasId?: string;\n protected _tooltipComponent: TooltipComponent;\n\n constructor(tooltipId: string, component: Tooltip) {\n super(tooltipId, component);\n this._tooltipCanvasId = (this._chartOption.modeParams as any)?.tooltipCanvasId;\n }\n\n private _initTooltipComponent(stage: Stage) {\n const layer = this._getLayer(stage);\n this._tooltipComponent = new TooltipComponent({\n autoCalculatePosition: false,\n autoMeasure: false\n });\n layer.add(this._tooltipComponent as unknown as INode);\n }\n\n private _getLayer(stage: Stage) {\n if (this._layer) {\n return this._layer;\n }\n\n this._layer = stage.createLayer(this._tooltipCanvasId);\n\n // 需要关闭 layer 对应的 canvas 的事件\n const layerCanvas = this._layer.layerHandler.canvas.nativeCanvas as HTMLCanvasElement;\n // TODO:待 vrender 支持\n if (layerCanvas && layerCanvas.style) {\n layerCanvas.style.touchAction = 'none';\n layerCanvas.style.pointerEvents = 'none';\n }\n\n return this._layer;\n }\n\n protected _removeTooltip() {\n if (this._layer) {\n this._layer.removeAllChild();\n // this._layer.render();\n }\n this._attributes = null;\n }\n\n protected _updateTooltip(visible: boolean, params: TooltipHandlerParams, actualTooltip: IToolTipActual) {\n this._visible = visible;\n\n const stage = this._compiler.getStage();\n if (!stage) {\n return;\n }\n\n if (!visible) {\n if (this._tooltipComponent && this._tooltipComponent.attribute.visible) {\n this._tooltipComponent.hideAll();\n this._tooltipComponent.setAttributes({\n visibleAll: false\n });\n }\n return;\n }\n\n if (!this._tooltipComponent) {\n this._initTooltipComponent(stage);\n }\n\n const pos = actualTooltip?.position;\n if (!params.changePositionOnly) {\n this._tooltipComponent.setAttributes({\n ...this._attributes,\n ...pos\n });\n } else if (isValid(pos)) {\n this._tooltipComponent.setAttributes(pos);\n }\n\n if (!this._tooltipComponent.attribute.visible) {\n this._tooltipComponent.showAll();\n this._tooltipComponent.setAttributes({\n visibleAll: true\n });\n }\n }\n\n isTooltipShown() {\n return this._tooltipComponent?.attribute.visibleAll;\n }\n\n release() {\n super.release();\n this._layer?.release();\n }\n}\n","import type { Datum, IPoint, IShowTooltipOption, ITooltipHandler, TooltipActiveType } from '../../../typings';\nimport type { IComponentOption } from '../../interface';\nimport type { ISeries } from '../../../series/interface';\nimport { SeriesTypeEnum } from '../../../series/interface/type';\nimport type { CartesianSeries } from '../../../series/cartesian/cartesian';\nimport type { PolarSeries } from '../../../series/polar/polar';\nimport type { GeoSeries } from '../../../series/geo/geo';\nimport type { PieSeries } from '../../../series/pie/pie';\nimport type { TooltipHandlerParams } from '../interface';\nimport { Event_Source_Type } from '../../../constant';\nimport { getElementAbsolutePosition, isArray, isValid, isNil } from '@visactor/vutils';\nimport type { IDimensionInfo } from '../../../event/events/dimension/interface';\nimport { VChart } from '../../../core/vchart';\n\nconst getDataArrayFromFieldArray = (fields: string[], datum?: Datum) =>\n isValid(datum) ? fields.map(f => datum[f]) : undefined;\n\nconst datumContainsArray = (fields: string[], data?: Datum[]) => (datum: Datum) =>\n fields.every((key, i) => datum[key] === data?.[i]);\n\nconst hasData = (data?: any[] | Datum) => {\n if (isNil(data)) {\n return false;\n }\n if (isArray(data)) {\n return data.length > 0 && data.every(isValid);\n }\n return Object.keys(data).length > 0;\n};\n\ntype MarkInfo = {\n pos: IPoint;\n data: {\n dimensionFields: string[];\n measureFields: string[];\n dimensionData?: any[];\n measureData?: any[];\n hasMeasureData?: boolean;\n groupField?: string;\n groupData?: any;\n };\n series: ISeries;\n};\n\nexport function showTooltip(\n datum: Datum,\n options: IShowTooltipOption,\n tooltipHandler: ITooltipHandler,\n componentOptions: IComponentOption\n): TooltipActiveType | 'none' {\n const opt: IShowTooltipOption = {\n regionIndex: 0,\n ...options\n };\n // 确认region\n const region = componentOptions.getRegionsInUserIdOrIndex(\n isValid(opt.regionId) ? [opt.regionId] : undefined,\n isValid(opt.regionIndex) ? [opt.regionIndex] : undefined\n )[0];\n if (!region) {\n return 'none';\n }\n // 查询图元信息\n const seriesList = region.getSeries();\n const markInfoList: MarkInfo[] = [];\n seriesList.forEach(series => {\n /** 维度field */\n const dimensionFields = series.getDimensionField();\n /** 指标原始field(用于显示tooltip) */\n const measureFields = series.getMeasureField();\n\n const groupField = series.getSeriesField();\n const groupData = isValid(groupField) ? datum[groupField] : undefined;\n const groupDomain = isValid(groupField)\n ? series.getViewDataStatistics?.()?.latestData[groupField]?.values ?? []\n : [];\n\n const dimensionData = getDataArrayFromFieldArray(dimensionFields, datum);\n let measureData = getDataArrayFromFieldArray(measureFields, datum);\n const hasMeasureData = hasData(measureData);\n\n const isMultiGroups = !hasMeasureData && isValid(groupField) && isNil(groupData) && groupDomain.length > 0; // 是否需要考虑多个数据组\n\n if (series.coordinate === 'cartesian') {\n const cartesianSeries = series as CartesianSeries;\n\n // 补全维度轴数据\n const invalidDimensionFields = dimensionFields\n .map((field, i) => [field, i] as [string, number])\n .filter(([, i]) => isNil(dimensionData?.[i]));\n let dimensionDataList: any[][] = [dimensionData ?? []];\n if (invalidDimensionFields.length > 0) {\n invalidDimensionFields.forEach(([field, i]) => {\n const domain = series.getViewDataStatistics?.()?.latestData[field]?.values ?? [];\n const nextList: any[][] = [];\n dimensionDataList.forEach(dimensionData => {\n domain.forEach((value: any) => {\n const newData = dimensionData?.slice() ?? [];\n newData[i] = value;\n nextList.push(newData);\n });\n });\n dimensionDataList = nextList;\n });\n }\n dimensionDataList.forEach(dimensionData => {\n if (isMultiGroups) {\n const measureDataList = cartesianSeries\n .getViewData()\n ?.latestData.filter(datumContainsArray(dimensionFields, dimensionData));\n groupDomain.forEach((groupData: any) => {\n const originDatum = measureDataList.find((d: Datum) => d[groupField] === groupData);\n // 补全指标轴数据\n measureData = getDataArrayFromFieldArray(measureFields, originDatum);\n if (!hasData(measureData)) {\n return;\n }\n\n const pos = cartesianSeries.dataToPosition(originDatum);\n if (isNil(pos) || isNaN(pos.x) || isNaN(pos.y)) {\n return;\n }\n\n markInfoList.push({\n pos,\n data: {\n dimensionFields,\n dimensionData,\n measureFields,\n measureData,\n hasMeasureData,\n groupField,\n groupData\n },\n series\n });\n });\n } else {\n const originDatum = cartesianSeries\n .getViewData()\n ?.latestData.find(datumContainsArray(dimensionFields, dimensionData));\n if (!hasMeasureData) {\n // 如果只有单个数据组且用户没有给y轴数据,则补全y轴数据\n measureData = getDataArrayFromFieldArray(measureFields, originDatum);\n if (!hasData(measureData)) {\n return;\n }\n }\n\n const pos = cartesianSeries.dataToPosition(originDatum);\n if (isNil(pos) || isNaN(pos.x) || isNaN(pos.y)) {\n return;\n }\n\n markInfoList.push({\n pos,\n data: {\n dimensionFields,\n dimensionData,\n measureFields,\n measureData,\n hasMeasureData,\n groupField,\n groupData\n },\n series\n });\n }\n });\n } else if (series.coordinate === 'polar') {\n if (series.type === SeriesTypeEnum.pie) {\n // 处理饼图\n const pieSeries = series as PieSeries;\n\n const originDatum = pieSeries\n .getViewData()\n ?.latestData.find(datumContainsArray(dimensionFields, dimensionData));\n if (!hasMeasureData) {\n // 如果只有单个数据组且用户没有给y轴数据,则补全y轴数据\n measureData = getDataArrayFromFieldArray(measureFields, originDatum);\n if (!hasData(measureData)) {\n return;\n }\n }\n\n const pos = pieSeries.dataToCentralPosition(originDatum);\n if (isNil(pos) || isNaN(pos.x) || isNaN(pos.y)) {\n return;\n }\n\n markInfoList.push({\n pos,\n data: {\n dimensionFields,\n dimensionData,\n measureFields,\n measureData,\n hasMeasureData,\n groupField,\n groupData\n },\n series\n });\n } else {\n // 处理玫瑰图、雷达图\n const polarSeries = series as PolarSeries;\n\n if (isMultiGroups) {\n const measureDataList = polarSeries\n .getViewData()\n ?.latestData.filter(datumContainsArray(dimensionFields, dimensionData));\n const originDatum = measureDataList.find((d: Datum) => d[groupField] === groupData);\n groupDomain.forEach((groupData: any) => {\n // 补全指标轴数据\n measureData = getDataArrayFromFieldArray(measureFields, originDatum);\n if (!hasData(measureData)) {\n return;\n }\n\n const pos = polarSeries.dataToPosition(originDatum);\n if (isNil(pos) || isNaN(pos.x) || isNaN(pos.y)) {\n return;\n }\n\n markInfoList.push({\n pos,\n data: {\n dimensionFields,\n dimensionData,\n measureFields,\n measureData,\n hasMeasureData,\n groupField,\n groupData\n },\n series\n });\n });\n } else {\n const originDatum = polarSeries\n .getViewData()\n ?.latestData.find(datumContainsArray(dimensionFields, dimensionData));\n if (!hasMeasureData) {\n // 如果只有单个数据组且用户没有给y轴数据,则补全y轴数据\n measureData = getDataArrayFromFieldArray(measureFields, originDatum);\n if (!hasData(measureData)) {\n return;\n }\n }\n\n const pos = polarSeries.dataToPosition(originDatum);\n if (isNil(pos) || isNaN(pos.x) || isNaN(pos.y)) {\n return;\n }\n\n markInfoList.push({\n pos,\n data: {\n dimensionFields,\n dimensionData,\n measureFields,\n measureData,\n hasMeasureData,\n groupField,\n groupData\n },\n series\n });\n }\n }\n } else if (series.coordinate === 'geo') {\n const gs = series as GeoSeries;\n\n const originDatum = gs.getViewData()?.latestData.find(datumContainsArray(dimensionFields, dimensionData));\n if (!hasMeasureData) {\n // 如果只有单个数据组且用户没有给y轴数据,则补全y轴数据\n measureData = getDataArrayFromFieldArray(measureFields, originDatum);\n if (!hasData(measureData)) {\n return;\n }\n }\n\n const pos = gs.dataToPosition(originDatum);\n if (isNil(pos) || isNaN(pos.x) || isNaN(pos.y)) {\n return;\n }\n\n markInfoList.push({\n pos,\n data: {\n dimensionFields,\n dimensionData,\n measureFields,\n measureData,\n hasMeasureData,\n groupField,\n groupData\n },\n series\n });\n }\n });\n\n // 组织数据\n const activeType = opt.activeType ?? (markInfoList.length > 1 ? 'dimension' : 'mark');\n const regionPos = region.getLayoutStartPoint();\n const regionRect = region.getLayoutRect();\n const container = componentOptions.globalInstance.getContainer();\n const containerPos = {\n x: 0,\n y: 0,\n ...(container ? getElementAbsolutePosition(container) : {})\n };\n const bound = (pos: IPoint): IPoint => ({\n x: Math.min(Math.max(pos.x, 0), regionRect.width),\n y: Math.min(Math.max(pos.y, 0), regionRect.height)\n });\n const getOriginDatum = (info: MarkInfo) => {\n const { dimensionFields, dimensionData, measureFields, measureData, groupField, groupData } = info.data;\n const originDatum = info.series.getViewData()?.latestData.find((datum: any) => {\n return (\n datumContainsArray(dimensionFields, dimensionData)(datum) &&\n datumContainsArray(measureFields, measureData)(datum) &&\n (isNil(groupField) || datumContainsArray([groupField], [groupData])(datum))\n );\n });\n return originDatum;\n };\n const getMockEvent = (originPos: IPoint): any => {\n const pos = bound(originPos);\n const canvasX = opt.x ?? regionPos.x + pos.x;\n const canvasY = opt.y ?? regionPos.y + pos.y;\n return {\n canvasX,\n canvasY,\n clientX: containerPos.x + canvasX,\n clientY: containerPos.y + canvasY\n };\n };\n\n // 显示tooltip\n if (activeType === 'dimension') {\n const firstInfo = markInfoList[0];\n if (!firstInfo) {\n return 'none';\n }\n\n // 将markInfoList按系列分组\n const markInfoSeriesMap = new Map();\n markInfoList.forEach(info => {\n if (!markInfoSeriesMap.has(info.series)) {\n markInfoSeriesMap.set(info.series, []);\n }\n markInfoSeriesMap.get(info.series)?.push(info);\n });\n const mockDimensionInfo: IDimensionInfo[] = [\n {\n value: datum[firstInfo.data.dimensionFields[0]],\n data: [...markInfoSeriesMap.keys()].map(series => {\n return {\n series,\n datum: markInfoSeriesMap.get(series)?.map(info => getOriginDatum(info)) ?? []\n };\n })\n }\n ];\n const mockParams: TooltipHandlerParams = {\n changePositionOnly: false,\n dimensionInfo: mockDimensionInfo,\n chart: componentOptions.globalInstance.getChart() ?? undefined,\n datum: undefined,\n model: undefined,\n source: Event_Source_Type.chart,\n event: getMockEvent({\n x: markInfoList.reduce((sum, info) => sum + info.pos.x, 0) / markInfoList.length,\n y: markInfoList.reduce((sum, info) => sum + info.pos.y, 0) / markInfoList.length // 位置求平均\n }),\n item: undefined,\n itemMap: new Map()\n };\n tooltipHandler?.showTooltip?.(activeType, mockDimensionInfo, mockParams);\n // 全局唯一 tooltip\n const vchart = componentOptions.globalInstance;\n if (VChart.globalConfig.uniqueTooltip) {\n VChart.hideTooltip(vchart.id);\n }\n return activeType;\n } else if (activeType === 'mark') {\n const info = markInfoList[0];\n if (!info) {\n return 'none';\n }\n const mockDatum = {\n ...getOriginDatum(info),\n ...datum\n };\n const mockParams: TooltipHandlerParams = {\n changePositionOnly: false,\n chart: componentOptions.globalInstance.getChart() ?? undefined,\n datum: mockDatum,\n model: info.series,\n source: Event_Source_Type.chart,\n event: getMockEvent(info.pos),\n item: undefined,\n itemMap: new Map()\n };\n tooltipHandler?.showTooltip?.(\n activeType,\n [\n {\n datum: [mockDatum],\n series: info.series\n }\n ],\n mockParams\n );\n // 全局唯一 tooltip\n const vchart = componentOptions.globalInstance;\n if (VChart.globalConfig.uniqueTooltip) {\n VChart.hideTooltip(vchart.id);\n }\n return activeType;\n }\n return 'none';\n}\n","import { isValid } from '@visactor/vutils';\nimport type { BaseEventParams } from '../../../event/interface';\nimport type { TooltipActiveType, TooltipData } from '../../../typings';\nimport type { TooltipHandlerParams } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { TooltipResult } from '../interface/common';\nimport type { Tooltip } from '../tooltip';\nimport type { MouseEventData, TooltipInfo } from './interface';\nimport { ChartEvent } from '../../../constant';\nimport type { TooltipEventParams } from '../interface/event';\nimport type { IDimensionInfo } from '../../../event/events/dimension';\nimport { getPolarDimensionInfo } from '../../../event/events/dimension/util/polar';\nimport { getCartesianDimensionInfo } from '../../../event/events/dimension/util/cartesian';\nimport { isDiscrete } from '@visactor/vscale';\nimport type { ICartesianSeries } from '../../../series/interface';\n\nexport abstract class BaseTooltipProcessor {\n readonly component: Tooltip;\n activeType: TooltipActiveType;\n\n constructor(component: Tooltip) {\n this.component = component;\n }\n\n /** 触发对应类型的 tooltip */\n abstract showTooltip(info: TooltipInfo, params: BaseEventParams, changePositionOnly: boolean): TooltipResult;\n\n /** 判断是否应该触发 tooltip */\n abstract shouldHandleTooltip(params: BaseEventParams, mouseEventData: Partial): boolean;\n\n /** 获取触发 tooltip 需要的信息 */\n abstract getMouseEventData(params: BaseEventParams): MouseEventData;\n\n protected _showTooltipByHandler = (data: TooltipData | undefined, params: TooltipHandlerParams): TooltipResult => {\n this.component.event.emit(ChartEvent.tooltipShow, {\n ...params,\n tooltipData: data,\n activeType: this.activeType,\n tooltip: this.component\n } as TooltipEventParams);\n if (this.component.tooltipHandler?.showTooltip && isValid(data)) {\n return this.component.tooltipHandler.showTooltip(this.activeType, data, params) ?? TooltipResult.success;\n }\n return TooltipResult.failed;\n };\n\n protected _preprocessDimensionInfo(dimensionInfo?: IDimensionInfo[]): IDimensionInfo[] | undefined {\n const newDimensionInfo: IDimensionInfo[] = [];\n dimensionInfo?.forEach(info => {\n const di: IDimensionInfo = {\n ...info,\n data: info.data.filter(\n ({ series }: any) => series.getSpec()?.tooltip?.visible !== false // 过滤掉不需要显示的维度数据\n )\n };\n if (di.data.length > 0) {\n newDimensionInfo.push(di);\n }\n });\n if (newDimensionInfo.length > 0) {\n return newDimensionInfo;\n }\n return undefined;\n }\n\n protected _getDimensionInfo(params: BaseEventParams): IDimensionInfo[] {\n let targetDimensionInfo: IDimensionInfo[] | undefined;\n // 处理dimension info\n const chart = this.component.getChart();\n\n // compute layer offset\n const layer = chart.getCompiler().getStage().getLayer(undefined);\n const point = { x: params.event.viewX, y: params.event.viewY };\n layer.globalTransMatrix.transformPoint({ x: params.event.viewX, y: params.event.viewY }, point);\n\n targetDimensionInfo = [\n ...(getCartesianDimensionInfo(chart, point) ?? []),\n ...(getPolarDimensionInfo(chart, point) ?? [])\n ];\n if (targetDimensionInfo.length === 0) {\n targetDimensionInfo = undefined;\n } else if (targetDimensionInfo.length > 1) {\n // 只保留一个轴的dimension info\n const dimensionAxisInfo = targetDimensionInfo.filter(info => {\n const axis = info.axis;\n // 优先显示离散轴 tooltip\n if (!isDiscrete(axis.getScale().type)) {\n return false;\n }\n // 下面的逻辑用来判断当前的离散轴是不是维度轴\n let firstSeries: ICartesianSeries | undefined;\n for (const region of axis?.getRegions() ?? []) {\n for (const series of region.getSeries()) {\n if (series.coordinate === 'cartesian') {\n firstSeries = series as ICartesianSeries;\n break;\n }\n }\n if (isValid(firstSeries)) {\n break;\n }\n }\n if (isValid(firstSeries) && firstSeries.getDimensionField()[0] === firstSeries.fieldY[0]) {\n // 维度轴为Y轴时,选择只显示Y轴tooltip\n return axis.getOrient() === 'left' || axis.getOrient() === 'right';\n }\n // 维度轴为X轴时,选择只显示X轴tooltip\n return axis.getOrient() === 'bottom' || axis.getOrient() === 'top';\n });\n targetDimensionInfo = dimensionAxisInfo.length ? dimensionAxisInfo : targetDimensionInfo.slice(0, 1);\n }\n\n return targetDimensionInfo;\n }\n}\n","import type { BaseEventParams } from '../../../event/interface';\nimport type { TooltipActiveType } from '../../../typings';\nimport type { TooltipHandlerParams } from '../interface';\nimport type { DimensionTooltipInfo, MouseEventData } from './interface';\nimport { BaseTooltipProcessor } from './base';\nimport { isNil } from '@visactor/vutils';\nimport type { ISeries } from '../../../series/interface';\n\nexport class DimensionTooltipProcessor extends BaseTooltipProcessor {\n activeType: TooltipActiveType = 'dimension';\n\n /** 触发对应类型的 tooltip */\n showTooltip(info: DimensionTooltipInfo, params: BaseEventParams, changePositionOnly: boolean) {\n const newParams: TooltipHandlerParams = {\n ...params,\n dimensionInfo: this._preprocessDimensionInfo(info),\n changePositionOnly\n };\n return this._showTooltipByHandler(info, newParams);\n }\n\n /** 判断是否应该触发 tooltip */\n shouldHandleTooltip(params: BaseEventParams, mouseEventData: Partial): boolean {\n const { tooltipInfo: info } = mouseEventData;\n if (isNil(info)) {\n return false;\n }\n\n const helper = (params.model as ISeries)?.tooltipHelper;\n const activeType = helper?.activeType ?? this.component.getSpec().activeType;\n if (!activeType.includes('dimension')) {\n return false;\n }\n return true;\n }\n\n /** 获取触发 tooltip 需要的信息 */\n getMouseEventData(params: BaseEventParams): MouseEventData {\n return {\n tooltipInfo: this._getDimensionInfo(params),\n // 排除被声明要忽略的项\n ignore: [...((this.component.getOption() as any).getAllSeries() ?? [])].some(model => {\n const ignoreTriggers = model.tooltipHelper?.ignoreTriggerSet.dimension;\n return (params.model && ignoreTriggers?.has(params.model)) || (params.mark && ignoreTriggers?.has(params.mark));\n })\n };\n }\n}\n","import type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isArray, isValid } from '@visactor/vutils';\nimport type { DimensionTooltipInfo, MarkTooltipInfo, TooltipInfo } from './interface';\n\nexport const isMarkInfo = (info: Maybe): info is MarkTooltipInfo => isValid(info) && !isArray(info);\n\nexport const isDimensionInfo = (info: Maybe): info is DimensionTooltipInfo =>\n isValid(info) && isArray(info);\n","import type { BaseEventParams } from '../../../event/interface';\nimport type { TooltipActiveType } from '../../../typings';\nimport type { TooltipHandlerParams } from '../interface';\nimport type { MarkTooltipInfo, MouseEventData } from './interface';\nimport { BaseTooltipProcessor } from './base';\nimport { isNil } from '@visactor/vutils';\nimport type { ISeries } from '../../../series/interface';\n\nexport class MarkTooltipProcessor extends BaseTooltipProcessor {\n activeType: TooltipActiveType = 'mark';\n\n /** 触发对应类型的 tooltip */\n showTooltip(info: MarkTooltipInfo, params: BaseEventParams, changePositionOnly: boolean) {\n const { datum, series, dimensionInfo } = info;\n const tooltipData = [{ datum: [datum], series }];\n const newParams: TooltipHandlerParams = {\n ...params,\n dimensionInfo: this._preprocessDimensionInfo(dimensionInfo),\n changePositionOnly\n };\n return this._showTooltipByHandler(tooltipData, newParams);\n }\n\n /** 判断是否应该触发 tooltip */\n shouldHandleTooltip(params: BaseEventParams, mouseEventData: Partial): boolean {\n const { tooltipInfo: info } = mouseEventData;\n if (isNil(info)) {\n return false;\n }\n\n const helper = (params.model as ISeries)?.tooltipHelper;\n if (!helper?.activeType.includes('mark')) {\n return false;\n }\n return true;\n }\n\n /** 获取触发 tooltip 需要的信息 */\n getMouseEventData(params: BaseEventParams): MouseEventData {\n let info: MarkTooltipInfo | undefined;\n let ignore: boolean | undefined;\n\n // 处理mark info\n if (params.model?.modelType === 'series') {\n const series = params.model as ISeries;\n const helper = series.tooltipHelper;\n const activeTriggers = helper?.activeTriggerSet.mark;\n const ignoreTriggers = helper?.ignoreTriggerSet.mark;\n if (activeTriggers?.has(params.model) || activeTriggers?.has(params.mark)) {\n info = {\n mark: params.mark,\n datum: params.datum,\n series,\n dimensionInfo: this._getDimensionInfo(params)\n };\n } else if (ignoreTriggers?.has(params.model) || ignoreTriggers?.has(params.mark)) {\n ignore = true;\n }\n }\n\n return {\n tooltipInfo: info,\n ignore\n };\n }\n}\n","import { mergeSpec } from '../../util';\nimport { BaseComponentSpecTransformer } from '../base';\n\nexport class TooltipSpecTransformer extends BaseComponentSpecTransformer {\n protected _shouldMergeThemeToSpec() {\n return false;\n }\n\n protected _initTheme(spec: any, chartSpec: any): { spec: any; theme: any } {\n const { spec: newSpec, theme } = super._initTheme(spec, chartSpec);\n newSpec.style = mergeSpec({}, this._theme, newSpec.style);\n return { spec: newSpec, theme };\n }\n}\n","import type { IComponentOption } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport type { IModelLayoutOption, IModelRenderOption, IModelSpecInfo } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport { BaseComponent } from '../base/base-component';\nimport type { BaseEventParams, EventCallback, EventQuery, EventType } from '../../event/interface';\nimport type { ITooltipHandler, IToolTipLineActual, TooltipActiveType } from '../../typings/tooltip';\nimport { DomTooltipHandler } from './handler/dom';\nimport { CanvasTooltipHandler } from './handler/canvas';\nimport type { Datum, IPoint, IShowTooltipOption } from '../../typings';\nimport { isMobileLikeMode, isTrueBrowser, isMiniAppLikeMode, domDocument } from '../../util/env';\nimport type {\n ITooltip,\n ITooltipActiveTypeAsKeys,\n ITooltipSpec,\n ITooltipTheme,\n TooltipHandlerParams,\n TotalMouseEventData\n} from './interface';\nimport { TooltipResult } from './interface/common';\nimport { TOOLTIP_EL_CLASS_NAME } from './handler/constants';\nimport { showTooltip } from './utils/show-tooltip';\nimport { getTooltipActualActiveType, isEmptyPos } from './utils/common';\nimport { isSameDimensionInfo } from '../../event/events/dimension/util/common';\nimport { ChartEvent, Event_Bubble_Level, Event_Source_Type } from '../../constant';\nimport type { DimensionTooltipInfo, MarkTooltipInfo, TooltipInfo } from './processor';\n// eslint-disable-next-line no-duplicate-imports\nimport { DimensionTooltipProcessor } from './processor/dimension-tooltip';\nimport { isDimensionInfo, isMarkInfo } from './processor/util';\nimport { MarkTooltipProcessor } from './processor/mark-tooltip';\nimport type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { hasParentElement, isString, cloneDeep, isArray, isValid, isNil } from '@visactor/vutils';\nimport { VChart } from '../../core/vchart';\nimport type { TooltipEventParams } from './interface/event';\nimport { Factory } from '../../core/factory';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport { TooltipSpecTransformer } from './tooltip-transformer';\n\nexport type TooltipActualTitleContent = {\n title?: IToolTipLineActual;\n content?: IToolTipLineActual[];\n};\n\ntype EventHandlerList = {\n eventType: EventType;\n handler: any;\n}[];\n\nexport class Tooltip extends BaseComponent implements ITooltip {\n protected layoutZIndex: number = 1;\n static type = ComponentTypeEnum.tooltip;\n static readonly transformerConstructor = TooltipSpecTransformer;\n type = ComponentTypeEnum.tooltip;\n name: string = ComponentTypeEnum.tooltip;\n readonly transformerConstructor = TooltipSpecTransformer;\n\n static specKey = 'tooltip';\n specKey = 'tooltip';\n\n layoutType: 'none' = 'none';\n\n protected declare _spec: ITooltipSpec;\n\n static getSpecInfo(chartSpec: any): Maybe {\n const tooltipSpec = chartSpec[this.specKey];\n if (!tooltipSpec) {\n return null;\n }\n if (!isArray(tooltipSpec)) {\n return [\n {\n spec: tooltipSpec,\n specPath: [this.specKey],\n type: ComponentTypeEnum.tooltip\n }\n ];\n }\n const specInfos: IModelSpecInfo[] = [];\n tooltipSpec.forEach((s: any, i: number) => {\n specInfos.push({\n spec: s,\n specIndex: i,\n specPath: [this.specKey, i],\n type: ComponentTypeEnum.tooltip\n });\n });\n return specInfos;\n }\n\n tooltipHandler?: ITooltipHandler;\n\n private _alwaysShow: boolean = false;\n\n private _cacheInfo: TooltipInfo | undefined;\n\n private _eventList: EventHandlerList = [];\n\n protected _processor: ITooltipActiveTypeAsKeys;\n\n protected _isTooltipShown: boolean = false;\n /** 当前是否正在显示 tooltip */\n isTooltipShown() {\n return this._isTooltipShown;\n }\n\n changeRegions(regions: IRegion[]) {\n /* do nothing */\n }\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [];\n }\n protected _registerEvent() {\n /* do nothing */\n }\n protected _releaseEvent() {\n /* do nothing */\n }\n onLayout(ctx: IModelLayoutOption) {\n /* do nothing */\n }\n onLayoutEnd(ctx: IModelLayoutOption) {\n /* do nothing */\n }\n onRender(ctx: IModelRenderOption) {\n /* do nothing */\n }\n\n created() {\n super.created();\n this._regions = this._option.getAllRegions();\n // event\n this._initEvent();\n }\n\n release() {\n super.release();\n\n this._eventList.forEach(({ eventType, handler }) => {\n this.event.off(eventType, handler);\n });\n this._eventList = [];\n this.tooltipHandler?.release?.();\n this._isTooltipShown = false;\n }\n\n beforeRelease() {\n // 触发事件\n this.event.emit(ChartEvent.tooltipHide, {\n tooltip: this\n } as unknown as TooltipEventParams);\n this.event.emit(ChartEvent.tooltipRelease, {\n tooltip: this\n } as unknown as TooltipEventParams);\n }\n\n protected _initHandler() {\n const renderMode = this._spec.renderMode ?? 'html';\n\n const userTooltipHandler = this._option.globalInstance.getTooltipHandlerByUser();\n if (userTooltipHandler) {\n this.tooltipHandler = userTooltipHandler;\n } else {\n // 构造内部默认 handler\n const Handler = renderMode === 'canvas' ? CanvasTooltipHandler : DomTooltipHandler;\n const id = `${this._spec.className}-${this._option.globalInstance.id ?? 0}-${this._option.specIndex ?? 0}`;\n this.tooltipHandler = new Handler(id, this);\n }\n }\n\n protected _initProcessor() {\n // 初始化 tooltip 类型\n this._processor = {\n mark: new MarkTooltipProcessor(this),\n dimension: new DimensionTooltipProcessor(this)\n };\n }\n\n protected _initEvent() {\n if (this._option.disableTriggerEvent) {\n return;\n }\n const trigger = this._spec.trigger ?? 'hover';\n // TODO: triggerOff完整支持\n // const triggerOff = this._spec.triggerOff ?? trigger;\n const mode = this._option.mode;\n\n if (trigger === 'hover') {\n this._mountEvent('pointermove', { level: Event_Bubble_Level.chart }, this._handleMouseMove);\n // 移动端的点按 + 滑动触发\n if (isMobileLikeMode(mode) || isMiniAppLikeMode(mode)) {\n this._mountEvent('pointerdown', { level: Event_Bubble_Level.chart }, this._handleMouseMove);\n this._mountEvent('pointerup', { source: 'window' }, this._getMouseOutHandler(true));\n }\n this._mountEvent('pointerout', { source: 'canvas' }, this._getMouseOutHandler(false));\n } else if (trigger === 'click') {\n this._mountEvent('pointertap', { level: Event_Bubble_Level.chart }, this._handleMouseMove);\n this._mountEvent('pointerup', { source: 'window' }, this._getMouseOutHandler(true));\n }\n }\n\n protected _mountEvent = (eType: EventType, query: EventQuery, callback: EventCallback) => {\n this.event.on(eType, query, callback);\n this._eventList.push({\n eventType: eType,\n handler: callback\n });\n };\n\n protected _getMouseOutHandler = (needPointerDetection?: boolean) => (params: BaseEventParams) => {\n if (this._alwaysShow) {\n return;\n }\n\n if (!this._isTooltipShown && !this.tooltipHandler?.isTooltipShown?.()) {\n return;\n }\n\n const browserEnv = isTrueBrowser(this._option.mode);\n const { clientX, clientY } = params.event as MouseEvent;\n\n // 当 enterable 为 true,同时鼠标移入 tooltip 时 pointerleave 事件也会触发,所以这里做一个判断\n if (browserEnv && this._isPointerOnTooltip(params)) {\n return;\n }\n\n // 判断鼠标是否在图表范围内\n if (browserEnv && needPointerDetection && this._isPointerInChart({ x: clientX, y: clientY })) {\n return;\n }\n\n this._handleChartMouseOut(params);\n };\n\n protected _handleChartMouseOut = (params: BaseEventParams) => {\n if (this._alwaysShow) {\n return;\n }\n\n if (this._spec.triggerOff !== 'none') {\n this._hideTooltipByHandler({\n ...params\n });\n this._cacheInfo = undefined;\n }\n };\n\n protected _handleMouseMove = (params: BaseEventParams) => {\n if (!this.tooltipHandler) {\n this._initHandler();\n }\n\n if (!this._processor) {\n this._initProcessor();\n }\n\n if (this._alwaysShow) {\n return;\n }\n if (this._isPointerOnTooltip(params)) {\n return;\n }\n\n /* 获取 tooltip 原始数据 */\n const mouseEventData = this._getMouseEventData(params);\n const {\n tooltipInfo: { dimension: dimensionInfo },\n ignore: { mark: ignoreMark, dimension: ignoreDimension }\n } = mouseEventData;\n\n let markTooltipSuccess: boolean = false;\n let dimensionTooltipSuccess: boolean = false;\n\n /* 显示常规tooltip */\n markTooltipSuccess = this._showTooltipByMouseEvent('mark', mouseEventData, params);\n if (!markTooltipSuccess) {\n dimensionTooltipSuccess = this._showTooltipByMouseEvent('dimension', mouseEventData, params);\n }\n\n /* 如果不是常规情况,进行一些特殊情况tooltip处理 */\n if (!markTooltipSuccess && !dimensionTooltipSuccess && !isEmptyPos(params)) {\n // 用户手动配置ignore,则继续显示缓存tooltip\n if (ignoreMark && isMarkInfo(this._cacheInfo)) {\n markTooltipSuccess = this._showTooltipByMouseEvent('mark', mouseEventData, params, true);\n } else if (ignoreDimension && isDimensionInfo(this._cacheInfo)) {\n dimensionTooltipSuccess = this._showTooltipByMouseEvent('dimension', mouseEventData, params, true);\n } else if (isValid(dimensionInfo)) {\n // 用户没有手动配置ignore的话,默认显示dimension tooltip\n dimensionTooltipSuccess = this._showTooltipByMouseEvent('dimension', mouseEventData, params);\n }\n }\n\n /* 如果还是不应该显示tooltip,则隐藏上一次tooltip */\n if (!markTooltipSuccess && (!dimensionTooltipSuccess || isNil(dimensionInfo))) {\n this._handleChartMouseOut(params);\n }\n };\n\n /**\n * 通过鼠标事件触发 tooltip,返回是否成功\n * @param activeType tooltip 类型\n * @param mouseEventData tooltip 相关数据\n * @param params 事件参数\n * @param useCache 是否直接显示缓存 tooltip\n * @returns 是否成功执行\n */\n protected _showTooltipByMouseEvent = (\n activeType: TooltipActiveType,\n mouseEventData: TotalMouseEventData,\n params: BaseEventParams,\n useCache?: boolean\n ): boolean => {\n const processor = this._processor[activeType];\n // 判断是否应该触发 tooltip\n if (\n !processor.shouldHandleTooltip(params, {\n tooltipInfo: mouseEventData.tooltipInfo[activeType],\n ignore: mouseEventData.ignore[activeType]\n })\n ) {\n return false;\n }\n\n let success: boolean;\n if (useCache) {\n // 直接显示缓存 tooltip\n success = !processor.showTooltip(this._cacheInfo as any, params, true);\n } else {\n const tooltipInfo = mouseEventData.tooltipInfo[activeType];\n const isSameAsCache = this._isSameAsCacheInfo(tooltipInfo);\n success = !processor.showTooltip(tooltipInfo as any, params, isSameAsCache);\n if (success) {\n // 成功显示 tooltip,则更新缓存\n this._cacheInfo = tooltipInfo;\n }\n }\n if (success) {\n this._isTooltipShown = true;\n }\n // 全局唯一 tooltip\n const vchart = this._option.globalInstance;\n if (success && VChart.globalConfig.uniqueTooltip) {\n VChart.hideTooltip(vchart.id);\n }\n return success;\n };\n\n protected _getMouseEventData = (params: BaseEventParams): TotalMouseEventData => {\n const result: TotalMouseEventData = {\n tooltipInfo: {},\n ignore: {}\n };\n Object.keys(this._processor).forEach(activeType => {\n const { tooltipInfo, ignore } = this._processor[activeType].getMouseEventData(params);\n result.tooltipInfo[activeType] = tooltipInfo;\n result.ignore[activeType] = ignore;\n });\n return result;\n };\n\n protected _hideTooltipByHandler = (params: TooltipHandlerParams): TooltipResult => {\n if (!this._isTooltipShown && !this.tooltipHandler?.isTooltipShown?.()) {\n // 如果当前 tooltip 未显示,则提前退出\n return TooltipResult.success;\n }\n this.event.emit(ChartEvent.tooltipHide, {\n ...params,\n source: Event_Source_Type.chart, // 统一 event 的来源\n tooltip: this\n });\n if (this.tooltipHandler?.hideTooltip) {\n const result = this.tooltipHandler.hideTooltip(params);\n if (!result) {\n this._isTooltipShown = false;\n }\n return result;\n }\n return TooltipResult.failed;\n };\n\n reInit(spec?: any) {\n super.reInit(spec);\n\n if (this.tooltipHandler) {\n this.tooltipHandler.reInit?.();\n } else {\n this._initHandler();\n }\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n const userSpec = this._spec as ITooltipSpec;\n this._spec = {\n ...userSpec,\n visible: isValid(userSpec.visible) ? userSpec.visible : true,\n activeType: getTooltipActualActiveType(userSpec),\n renderMode: 'html',\n trigger: isValid(userSpec.trigger) ? userSpec.trigger : 'hover',\n className: isValid(userSpec.className) ? userSpec.className : TOOLTIP_EL_CLASS_NAME,\n enterable: isValid(userSpec.enterable) ? userSpec.enterable : false,\n transitionDuration: isValid(userSpec.transitionDuration) ? userSpec.transitionDuration : 150\n } as ITooltipSpec;\n this._spec.triggerOff = isValid(userSpec.triggerOff) ? userSpec.triggerOff : this._spec.trigger;\n\n if (isValid(userSpec.renderMode)) {\n this._spec.renderMode = userSpec.renderMode;\n } else if (isMiniAppLikeMode(this._option.mode)) {\n // 小程序环境下,默认使用canvas渲染\n this._spec.renderMode = 'canvas';\n }\n\n if (isValid(userSpec.mark)) {\n this._spec.mark = {\n ...cloneDeep(userSpec.mark),\n activeType: 'mark'\n };\n }\n if (isValid(userSpec.dimension)) {\n this._spec.dimension = {\n ...cloneDeep(userSpec.dimension),\n activeType: 'dimension'\n };\n }\n\n if (isValid(userSpec.parentElement)) {\n if (isString(userSpec.parentElement)) {\n this._spec.parentElement = globalThis?.document?.getElementById(userSpec.parentElement);\n } else {\n this._spec.parentElement = userSpec.parentElement;\n }\n } else if (isTrueBrowser(this._option.mode)) {\n this._spec.parentElement = domDocument?.body;\n }\n\n if (isValid(userSpec.confine)) {\n this._spec.confine = userSpec.confine;\n } else {\n this._spec.confine = this._spec.renderMode === 'canvas';\n }\n }\n\n showTooltip(datum: Datum, options: IShowTooltipOption) {\n if (!this.tooltipHandler) {\n this._initHandler();\n }\n\n if (!this._processor) {\n this._initProcessor();\n }\n\n if (!this.tooltipHandler?.showTooltip) {\n return false;\n }\n const result = showTooltip(datum, options, this.tooltipHandler, this._option);\n if (result !== 'none') {\n this._alwaysShow = !!options?.alwaysShow;\n }\n return result;\n }\n\n /** 手动隐藏 tooltip,返回是否成功 */\n hideTooltip(): boolean {\n const params: TooltipHandlerParams = {\n changePositionOnly: false,\n item: undefined,\n datum: undefined,\n source: Event_Source_Type.chart\n } as any;\n\n this._alwaysShow = false;\n return !this._hideTooltipByHandler(params);\n }\n\n private _isSameAsCacheInfo(nextInfo?: TooltipInfo): boolean {\n if (nextInfo === this._cacheInfo) {\n return true;\n }\n if (isNil(this._cacheInfo) || isNil(nextInfo)) {\n return false;\n }\n\n if (isDimensionInfo(nextInfo)) {\n if (isMarkInfo(this._cacheInfo)) {\n return false;\n }\n\n const prevInfo = this._cacheInfo as DimensionTooltipInfo;\n return prevInfo.length === nextInfo.length && nextInfo.every((info, i) => isSameDimensionInfo(info, prevInfo[i]));\n }\n if (isDimensionInfo(this._cacheInfo)) {\n return false;\n }\n\n const prevInfo = this._cacheInfo as MarkTooltipInfo;\n return (\n nextInfo?.datum === prevInfo.datum && nextInfo?.mark === prevInfo.mark && nextInfo?.series === prevInfo.series\n );\n }\n\n private _isPointerInChart(point: IPoint): boolean {\n const globalInstance = this._option.globalInstance;\n const chart = globalInstance.getChart();\n if (!chart) {\n return false;\n }\n const { x, y } = point;\n const canvas = globalInstance.getCanvas();\n const { x: chartX, y: chartY, width: chartWidth, height: chartHeight } = canvas.getBoundingClientRect();\n // 鼠标仍在图表范围内,则不处理\n if (x >= chartX && x <= chartX + chartWidth && y >= chartY && y <= chartY + chartHeight) {\n return true;\n }\n\n return false;\n }\n\n private _isPointerOnTooltip(params: BaseEventParams): boolean {\n // TODO:后续支持 renderMode === 'canvas' 场景\n if (this._spec.enterable && this._spec.renderMode === 'html') {\n const { event } = params;\n let newTarget: any;\n if (isValid(event.nativeEvent)) {\n // get native event object\n const nativeEvent = event.nativeEvent as any;\n newTarget = nativeEvent.relatedTarget;\n // if in shadow DOM use composedPath to access target\n // FIXME: shadow DOM 的 relatedTarget 的属性是?\n if (nativeEvent.composedPath && nativeEvent.composedPath().length > 0) {\n newTarget = nativeEvent.composedPath()[0];\n }\n } else {\n newTarget = event.relatedTarget;\n }\n const container = this.tooltipHandler?.getTooltipContainer?.();\n if (isValid(container) && isValid(newTarget) && hasParentElement(newTarget, container)) {\n return true;\n }\n }\n return false;\n }\n\n getVisible() {\n return this._spec.visible !== false;\n }\n}\n\nexport const registerTooltip = () => {\n Factory.registerComponent(Tooltip.type, Tooltip);\n};\n","/**\n * @description Crosshair 基类\n */\nimport type { IGroup } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport type { LocationCfg } from '../core/type';\nimport type { BaseCrosshairAttrs } from './type';\n\nexport abstract class CrosshairBase extends AbstractComponent> {\n name = 'crosshair';\n\n protected abstract renderCrosshair(container: IGroup): any;\n /**\n * 更新位置\n * @param location 位置信息\n */\n abstract setLocation(location: LocationCfg): void;\n\n protected render() {\n this.renderCrosshair(this as unknown as IGroup);\n }\n}\n","// import { registerArc, registerGroup, registerLine, registerPath, registerRect } from '@visactor/vrender-kits';\nimport { registerArc, registerGroup, registerLine, registerPath, registerRect } from '@visactor/vrender-kits';\n\nexport function loadLineCrosshairComponent() {\n registerGroup();\n registerLine();\n}\n\nexport function loadCircleCrosshairComponent() {\n registerGroup();\n registerArc();\n}\n\nexport function loadPolygonCrosshairComponent() {\n registerGroup();\n registerPath();\n}\n\nexport function loadRectCrosshairComponent() {\n registerGroup();\n registerRect();\n}\n\nexport function loadSectorCrosshairComponent() {\n registerGroup();\n registerArc();\n}\n","/**\n * @description 直线类型 crosshair\n */\nimport type { IGroup } from '@visactor/vrender-core';\nimport { merge } from '@visactor/vutils';\nimport type { RegionLocationCfg } from '../core/type';\nimport { CrosshairBase } from './base';\nimport type { LineCrosshairAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadLineCrosshairComponent } from './register';\n\nloadLineCrosshairComponent();\nexport class LineCrosshair extends CrosshairBase {\n static defaultAttributes = {\n lineStyle: {\n stroke: '#b2bacf',\n lineWidth: 1,\n lineDash: [2]\n }\n };\n\n constructor(attributes: LineCrosshairAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, LineCrosshair.defaultAttributes, attributes));\n }\n\n protected renderCrosshair(container: IGroup) {\n const { start, end, lineStyle } = this.attribute as LineCrosshairAttrs;\n\n const line = container.createOrUpdateChild(\n 'crosshair-line',\n {\n points: [start, end],\n ...lineStyle\n },\n 'line'\n );\n return line;\n }\n\n setLocation(region: RegionLocationCfg) {\n const { start, end } = region;\n this.setAttributes({\n start,\n end\n });\n }\n}\n","/**\n * @description 矩形类型 crosshair\n */\nimport type { IGroup } from '@visactor/vrender-core';\nimport { merge } from '@visactor/vutils';\nimport type { RegionLocationCfg } from '../core/type';\nimport type { Tag } from '../tag';\nimport { CrosshairBase } from './base';\nimport type { RectCrosshairAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadRectCrosshairComponent } from './register';\n\nloadRectCrosshairComponent();\nexport class RectCrosshair extends CrosshairBase {\n static defaultAttributes = {\n rectStyle: {\n fill: '#b2bacf',\n opacity: 0.2\n }\n };\n\n protected topLabelShape?: Tag;\n protected bottomLabelShape?: Tag;\n protected leftLabelShape?: Tag;\n protected rightLabelShape?: Tag;\n\n constructor(attributes: RectCrosshairAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, RectCrosshair.defaultAttributes, attributes));\n }\n\n protected renderCrosshair(container: IGroup) {\n const { start, end, rectStyle } = this.attribute as RectCrosshairAttrs;\n\n const rect = container.createOrUpdateChild(\n 'crosshair-rect',\n {\n x: start.x,\n y: start.y,\n width: end.x - start.x,\n height: end.y - start.y,\n ...rectStyle\n },\n 'rect'\n );\n return rect;\n }\n\n setLocation(region: RegionLocationCfg) {\n const { start, end } = region;\n this.setAttributes({\n start,\n end\n });\n }\n}\n","import type { RenderMode } from '../../typings/spec';\nimport { RenderModeEnum } from '../../typings/spec';\nimport { isMiniAppLikeMode, isMobileLikeMode } from '../../util';\n\nexport function getDefaultCrosshairTriggerEventByMode(mode: RenderMode) {\n if (mode === RenderModeEnum['desktop-browser'] || mode === RenderModeEnum['desktop-miniApp']) {\n return {\n click: 'pointertap',\n hover: 'pointermove',\n hoverOut: 'pointerleave',\n clickOut: 'pointerleave'\n };\n }\n\n if (isMobileLikeMode(mode) || isMiniAppLikeMode(mode)) {\n return {\n click: 'tap',\n hover: ['pointerdown', 'pointermove'],\n hoverOut: 'pointerleave',\n clickOut: 'pointerleave'\n };\n }\n\n return null;\n}\n\nexport const enum LayoutType {\n ALL = 0b0011,\n HORIZONTAL = 0b0010,\n VERTICAL = 0b0001,\n NONE = 0b0000\n}\n","import type { Dict, IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { throttle, PointService, isEqual, array, isArray, isNumber, get, isBoolean } from '@visactor/vutils';\nimport { RenderModeEnum } from '../../typings/spec/common';\nimport type { BaseEventParams, EventType } from '../../event/interface';\nimport type { IModelLayoutOption, IModelRenderOption } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport { BaseComponent } from '../base/base-component';\nimport type { IPadding, Maybe, StringOrNumber } from '../../typings';\nimport { outOfBounds } from '../../util/math';\nimport type { IComponentOption } from '../interface';\nimport type {\n ICrossHair,\n CrossHairTrigger,\n ICartesianCrosshairSpec,\n IPolarCrosshairSpec,\n ICrosshairCategoryFieldSpec\n} from './interface';\nimport { Event_Bubble_Level, Event_Source_Type, LayoutZIndex } from '../../constant';\nimport { getDefaultCrosshairTriggerEventByMode } from './config';\nimport type { IPolarAxis } from '../axis/polar/interface';\nimport type { IAxis } from '../axis/interface';\n\nexport type IBound = { x1: number; y1: number; x2: number; y2: number };\nexport type IAxisInfo = Map;\n\nexport interface IHair {\n /** 是否展示 crosshair 辅助图形 */\n visible: boolean;\n /** 类型 */\n type: 'rect' | 'line';\n /** 样式 */\n style?: Dict;\n label?: {\n /** 文本是否可见 */\n visible: boolean;\n /** 格式化函数 */\n formatMethod?: (text: StringOrNumber | string[], position: string) => string | string[];\n /** 文本样式 */\n textStyle?: Dict;\n minWidth?: number;\n maxWidth?: number;\n padding?: IPadding | number | number[];\n panel?: Dict;\n zIndex?: number;\n };\n}\n\nconst ORIENT_MAP = {\n x: ['top', 'bottom'],\n y: ['left', 'right'],\n category: ['angle'],\n value: ['radius']\n};\n\nexport abstract class BaseCrossHair\n extends BaseComponent\n implements ICrossHair\n{\n static specKey = 'crosshair';\n specKey = 'crosshair';\n\n layoutType: 'none' = 'none';\n gridZIndex: number = LayoutZIndex.CrossHair_Grid;\n labelZIndex: number = LayoutZIndex.CrossHair;\n trigger: CrossHairTrigger = 'hover';\n enable: boolean;\n showDefault: boolean;\n triggerOff: CrossHairTrigger | 'none' = 'hover'; // 为none则不消失\n\n get enableRemain(): boolean {\n return this.triggerOff === 'none';\n }\n\n private _limitBounds: Maybe;\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this.enable = true;\n this.showDefault = true;\n }\n\n protected abstract _showDefaultCrosshairBySpec(): void;\n protected abstract _layoutCrosshair(x: number, y: number): void;\n protected abstract _parseFieldInfo(): void;\n abstract hide(): void;\n\n protected _getLimitBounds() {\n if (!this._limitBounds) {\n const { width, height } = this._option.globalInstance.getChart()?.getCanvasRect() ?? {\n width: 0,\n height: 0\n };\n this._limitBounds = {\n x1: 0,\n y1: 0,\n x2: width,\n y2: height\n };\n }\n return this._limitBounds;\n }\n\n protected _showDefaultCrosshair() {\n if (!this.showDefault) {\n return;\n }\n\n this._showDefaultCrosshairBySpec();\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this._parseCrosshairSpec();\n }\n\n created() {\n super.created();\n // event\n this._initEvent();\n }\n\n /**\n * updateSpec\n */\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n if (!result.reMake && !isEqual(prevSpec, spec)) {\n result.reRender = true;\n result.reMake = true;\n }\n return result;\n }\n\n protected _initEvent() {\n if (this._option.disableTriggerEvent) {\n return;\n }\n const triggerConfig = this._getTriggerEvent();\n if (triggerConfig) {\n const { in: triggerEvent, out: outTriggerEvent } = triggerConfig;\n array(triggerEvent).forEach((eventName, index) =>\n this._registerEvent(eventName, isArray(outTriggerEvent) ? outTriggerEvent[index] : outTriggerEvent)\n );\n }\n }\n\n private _registerEvent(inEventName: EventType, outEventName: EventType) {\n this.event.on(inEventName, { source: Event_Source_Type.chart }, this._handleEvent);\n this.event.on(outEventName, { level: Event_Bubble_Level.chart }, (...arg: any) => {\n if (this.enableRemain) {\n return;\n }\n this.hide();\n });\n }\n\n private _eventOff(eventName: EventType) {\n this.event.off(eventName, this._handleEvent);\n }\n\n updateLayoutAttribute() {\n this._limitBounds = null;\n this._showDefaultCrosshair();\n }\n\n private _handleEvent = throttle((params: any) => {\n if (!this._option) {\n return;\n }\n\n const { event } = params as BaseEventParams;\n // compute layer offset\n const layer = this._option.getCompiler().getStage().getLayer(undefined);\n const point = { x: event.viewX, y: event.viewY };\n layer.globalTransMatrix.transformPoint({ x: event.viewX, y: event.viewY }, point);\n const x = point.x - this.getLayoutStartPoint().x;\n const y = point.y - this.getLayoutStartPoint().y;\n this.showDefault = false;\n this._layoutCrosshair(x, y);\n }, 10);\n\n private _getTriggerEvent() {\n const { mode = RenderModeEnum['desktop-browser'] } = this._option;\n const triggerConfig = getDefaultCrosshairTriggerEventByMode(mode);\n if (triggerConfig) {\n const trigger = this.trigger || 'hover';\n const outTrigger = (trigger: CrossHairTrigger) => (trigger === 'click' ? 'clickOut' : 'hoverOut');\n if (isArray(trigger)) {\n // 同时配置了多个触发事件\n let inResult: string[] = [];\n let outResult: string[] = [];\n trigger.forEach(item => {\n inResult = inResult.concat(triggerConfig[item]);\n outResult = outResult.concat(triggerConfig[outTrigger(item)]);\n });\n return {\n in: inResult,\n out: outResult\n };\n }\n return {\n in: triggerConfig[trigger],\n out: triggerConfig[outTrigger(trigger)]\n };\n }\n return null;\n }\n\n protected _getAxisInfoByField(field: 'x' | 'y' | 'category' | 'value') {\n // 加判空防止某些特殊时刻(如 updateSpec 时)鼠标滑过图表导致报错\n const axesComponents = this._option?.getComponentsByKey?.('axes') as IAxis[];\n if (!axesComponents?.length) {\n return null;\n }\n let bindingAxesIndex: number[] = get(this._spec, `${field}Field.bindingAxesIndex`);\n if (!bindingAxesIndex) {\n bindingAxesIndex = [];\n axesComponents.forEach((item, index) => {\n if (ORIENT_MAP[field].includes(item.getOrient())) {\n bindingAxesIndex.push(index);\n }\n });\n }\n if (!bindingAxesIndex.length) {\n return null;\n }\n\n const map: IAxisInfo = new Map();\n let x1 = Infinity;\n let y1 = Infinity;\n let x2 = -Infinity;\n let y2 = -Infinity;\n const { x: sx, y: sy } = this.getLayoutStartPoint();\n bindingAxesIndex.forEach(idx => {\n (x1 = Infinity), (y1 = Infinity), (x2 = -Infinity), (y2 = -Infinity);\n const axis = axesComponents.find(axis => axis.getSpecIndex() === idx);\n if (!axis) {\n return;\n }\n const regions = axis.getRegions();\n regions.forEach(r => {\n const { x: regionStartX, y: regionStartY } = r.getLayoutStartPoint();\n x1 = Math.min(x1, regionStartX - sx);\n y1 = Math.min(y1, regionStartY - sy);\n x2 = Math.max(x2, regionStartX + r.getLayoutRect().width - sx);\n y2 = Math.max(y2, regionStartY + r.getLayoutRect().height - sy);\n });\n map.set(idx, { x1, y1, x2, y2, axis: axis as unknown as T });\n });\n\n return map;\n }\n\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n onLayoutEnd(ctx: IModelLayoutOption): void {\n const region = this._regions[0];\n this.setLayoutRect(region.getLayoutRect());\n this.setLayoutStartPosition(region.getLayoutStartPoint());\n\n super.onLayoutEnd(ctx);\n }\n\n onRender(ctx: IModelRenderOption): void {\n // do nothing\n }\n\n protected _releaseEvent(): void {\n const triggerConfig = this._getTriggerEvent();\n if (triggerConfig) {\n const { in: triggerEvent, out: outTriggerEvent } = triggerConfig;\n if (isArray(triggerEvent)) {\n triggerEvent.forEach(eachTriggerEvent => this._eventOff(eachTriggerEvent));\n } else {\n this._eventOff(triggerEvent);\n }\n if (isArray(outTriggerEvent)) {\n outTriggerEvent.forEach(eachTriggerEvent => this._eventOff(eachTriggerEvent));\n } else {\n this._eventOff(outTriggerEvent);\n }\n }\n }\n\n protected _firstSeries(): T | null {\n for (let i = 0; i < this._regions.length; i++) {\n const r = this._regions[i];\n const series = r.getSeries();\n for (let j = 0; j < series.length; j++) {\n const s = series[j];\n if (s) {\n return s as unknown as T;\n }\n }\n }\n return null;\n }\n\n protected _parseCrosshairSpec() {\n this._parseFieldInfo();\n\n const { trigger, triggerOff, labelZIndex, gridZIndex } = this._spec;\n if (trigger) {\n this.trigger = trigger;\n }\n if (triggerOff) {\n this.triggerOff = triggerOff;\n } else {\n this.triggerOff = this.trigger;\n }\n if (labelZIndex !== undefined) {\n this.labelZIndex = labelZIndex;\n }\n if (gridZIndex !== undefined) {\n this.gridZIndex = gridZIndex;\n }\n }\n\n protected _parseField(field: ICrosshairCategoryFieldSpec, fieldName: string) {\n const hair = {} as any;\n const { line = {}, label = {}, visible } = field;\n hair.visible = visible;\n hair.type = line.type || 'line';\n const style = line.style || {};\n const { strokeOpacity, fillOpacity, opacity, stroke, fill, lineWidth, ...restStyle } = style as any;\n const isLineType = hair.type === 'line';\n let finalOpacity = isLineType ? strokeOpacity : fillOpacity;\n if (isNumber(opacity)) {\n finalOpacity = (finalOpacity ?? 1) * opacity;\n }\n hair.style =\n line?.visible === false\n ? { visible: false }\n : {\n opacity: finalOpacity,\n pickable: false,\n visible: true,\n ...restStyle\n };\n if (isLineType) {\n hair.style.stroke = stroke || fill;\n hair.style.lineWidth = get(line, 'width', lineWidth || 2);\n } else {\n hair.style.fill = fill || stroke;\n if (this._spec[fieldName]?.line?.style?.stroke) {\n hair.style.stroke = this._spec[fieldName].line.style.stroke;\n }\n const rectSize = get(line, 'width');\n if (typeof rectSize === 'string') {\n const percent = parseInt(rectSize.substring(0, rectSize.length - 1), 10) / 100;\n hair.style.sizePercent = percent;\n } else if (typeof rectSize === 'number' || typeof rectSize === 'function') {\n hair.style.size = rectSize;\n }\n }\n const labelBackground = label.labelBackground || {};\n const labelStyle = label.style || {};\n const {\n fill: rectFill = 'rgba(47, 59, 82, 0.9)',\n stroke: rectStroke,\n outerBorder,\n ...rectStyle\n } = labelBackground.style || {};\n hair.label = !!label?.visible\n ? {\n visible: true,\n formatMethod: label.formatMethod,\n minWidth: labelBackground.minWidth,\n maxWidth: labelBackground.maxWidth,\n padding: labelBackground.padding,\n textStyle: {\n fontSize: 14,\n pickable: false,\n ...labelStyle,\n fill: labelStyle.fill ?? '#fff',\n stroke: get(labelStyle, 'stroke')\n },\n panel: (isBoolean(labelBackground?.visible) ? labelBackground?.visible : !!labelBackground)\n ? {\n visible: true,\n pickable: false,\n fill: rectFill,\n stroke: rectStroke,\n // Note: 通过这个配置可以保证 label 和 轴 label 对齐\n outerBorder: {\n stroke: rectFill,\n distance: 0,\n lineWidth: 3,\n ...outerBorder\n },\n ...rectStyle\n }\n : { visible: false },\n zIndex: this.labelZIndex,\n childrenPickable: false,\n pickable: false\n }\n : { visible: false };\n\n return hair;\n }\n\n protected _filterAxisByPoint(axisMap: IAxisInfo, relativeX: number, relativeY: number) {\n axisMap &&\n axisMap.forEach(item => {\n const axis = item.axis as unknown as IAxis | IPolarAxis;\n if (outOfBounds(item, relativeX, relativeY)) {\n axisMap.delete(axis.getSpecIndex());\n }\n if ((axis as IPolarAxis).type.startsWith('polarAxis')) {\n // 极坐标下需要判断是否在半径内\n const center = (axis as IPolarAxis).getCenter();\n const innerRadius = (axis as IPolarAxis).getInnerRadius();\n const outerRadius = (axis as IPolarAxis).getOuterRadius();\n const distance = PointService.distancePP({ x: relativeX, y: relativeY }, center);\n if (distance > outerRadius || distance < innerRadius) {\n axisMap.delete((axis as IPolarAxis).getSpecIndex());\n }\n }\n });\n return axisMap;\n }\n}\n","import type { Maybe } from '@visactor/vutils';\nimport { isArray, isValid, isValidNumber, isNil } from '@visactor/vutils';\nimport type { IComponentOption } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport type { ICartesianCrosshairSpec } from './interface';\nimport type { ICartesianSeries } from '../../series/interface';\nimport type { BandScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isDiscrete, isContinuous } from '@visactor/vscale';\nimport { LineCrosshair, RectCrosshair, Tag } from '@visactor/vrender-components';\nimport type { IAxisInfo, IBound, IHair } from './base';\n// eslint-disable-next-line no-duplicate-imports\nimport { BaseCrossHair } from './base';\nimport type { IGraphic, IGroup, INode } from '@visactor/vrender-core';\nimport { getDatumByValue, limitTagInBounds } from './util';\nimport { getAxisLabelOffset } from '../axis/util';\nimport type { IAxis } from '../axis/interface';\nimport type { IOrientType, StringOrNumber } from '../../typings';\nimport { isXAxis } from '../axis/cartesian/util/common';\nimport { Factory } from '../../core/factory';\nimport { LayoutType } from './config';\nimport type { IModelSpecInfo } from '../../model/interface';\n\ninterface ICrosshairInfoX {\n height: number;\n leftPos: number;\n rightPos: number;\n topPos: number;\n x: number;\n bottom: { visible: boolean; text: StringOrNumber; dx: number; dy: number };\n top: { visible: boolean; text: StringOrNumber; dx: number; dy: number };\n visible: boolean;\n _isCache?: boolean;\n axis: IAxis;\n}\ninterface ICrosshairInfoY {\n width: number;\n leftPos: number;\n topPos: number;\n bottomPos: number;\n y: number;\n left: { visible: boolean; text: StringOrNumber; dx: number; dy: number };\n right: { visible: boolean; text: StringOrNumber; dx: number; dy: number };\n visible: boolean;\n _isCache?: boolean;\n axis: IAxis;\n}\n\n// 1. crosshair保存上次记录的x和y轴dimension\n// 2. 每次交互触发时,首先转化成dimension保存,然后依据dimension计算x和y绘制\n// 3. 如果同方向同时有多个轴,那么同时保存这些轴的数据\n// 4. 如果同方向的轴有多个离散轴,那么直接不显示\n\nexport class CartesianCrossHair extends BaseCrossHair {\n static specKey = 'crosshair';\n\n static type = ComponentTypeEnum.cartesianCrosshair;\n type = ComponentTypeEnum.cartesianCrosshair;\n name: string = ComponentTypeEnum.cartesianCrosshair;\n\n private _xHair: IHair | undefined;\n private _yHair: IHair | undefined;\n\n private _cacheXCrossHairInfo: ICrosshairInfoX | undefined;\n private _cacheYCrossHairInfo: ICrosshairInfoY | undefined;\n\n private _xCrosshair: IGroup;\n private _xTopLabel: Tag;\n private _xBottomLabel: Tag;\n\n private _yCrosshair: IGroup;\n private _yLeftLabel: Tag;\n private _yRightLabel: Tag;\n\n private _currValueX: Map;\n private _currValueY: Map;\n\n static getSpecInfo(chartSpec: any): Maybe {\n const crosshairSpec = chartSpec[this.specKey];\n if (isNil(crosshairSpec)) {\n return undefined;\n }\n if (!isArray(crosshairSpec)) {\n if (crosshairSpec.xField || crosshairSpec.yField) {\n return [\n {\n spec: crosshairSpec,\n specPath: [this.specKey],\n type: ComponentTypeEnum.cartesianCrosshair\n }\n ];\n }\n return undefined;\n }\n const specInfos: IModelSpecInfo[] = [];\n crosshairSpec.forEach((s: ICartesianCrosshairSpec, i: number) => {\n if (s.xField || s.yField) {\n specInfos.push({\n spec: s,\n specIndex: i,\n specPath: [this.specKey, i],\n type: ComponentTypeEnum.cartesianCrosshair\n });\n }\n });\n return specInfos;\n }\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this._currValueX = new Map();\n this._currValueY = new Map();\n }\n\n protected _showDefaultCrosshairBySpec() {\n const { xField, yField } = this._spec as ICartesianCrosshairSpec;\n if (xField?.visible && xField.defaultSelect) {\n const { axisIndex, datum } = xField.defaultSelect;\n this._defaultCrosshair(axisIndex, datum, LayoutType.VERTICAL);\n }\n if (yField?.visible && yField.defaultSelect) {\n const { axisIndex, datum } = yField.defaultSelect;\n this._defaultCrosshair(axisIndex, datum, LayoutType.HORIZONTAL);\n }\n }\n\n private _defaultCrosshair(axisIndex: number, datum: StringOrNumber, tag: number) {\n const axis = this._option.getComponentsByKey('axes').find(c => c.getSpecIndex() === axisIndex) as IAxis;\n if (!axis) {\n return;\n }\n // 横轴\n if (tag === LayoutType.VERTICAL) {\n this._currValueX.clear();\n this._currValueX.set(axisIndex, { axis, v: datum });\n } else {\n this._currValueY.clear();\n this._currValueY.set(axisIndex, { axis, v: datum });\n }\n this.layoutByValue(tag);\n }\n\n /**\n * 查找所有落在x和y区域的轴\n * @param relativeX\n * @param relativeY\n */\n private _findAllAxisContains(relativeX: number, relativeY: number) {\n const xAxisMap = this._getAxisInfoByField('x');\n const yAxisMap = this._getAxisInfoByField('y');\n return {\n xAxisMap: this._filterAxisByPoint(xAxisMap, relativeX, relativeY),\n yAxisMap: this._filterAxisByPoint(yAxisMap, relativeX, relativeY)\n };\n }\n\n private _getValueAt(axis: IAxis, p: number): number | string {\n let value = axis.getScale().invert(p);\n if (isContinuous(axis.getScale().type) && isValidNumber(+value)) {\n value = (+value as number).toFixed(2);\n }\n return value;\n }\n\n /**\n * clear axis value of crosshair\n */\n clearAxisValue() {\n this._currValueX.clear();\n this._currValueY.clear();\n }\n\n /**\n * set axis value of crosshair\n */\n setAxisValue(v: StringOrNumber, axis: IAxis) {\n if (isXAxis(axis.getOrient() as unknown as IOrientType)) {\n this._currValueX.set(axis.getSpecIndex(), {\n v,\n axis\n });\n } else {\n this._currValueY.set(axis.getSpecIndex(), {\n v,\n axis\n });\n }\n }\n /**\n * 根据位置获取所有轴上的value\n * @param axisMap\n * @param p\n * @returns\n */\n private _getAllAxisValues(\n axisMap: IAxisInfo,\n p: number,\n currValue: Map,\n vertical: boolean\n ): boolean {\n // 首先不能存在两个离散轴\n let discrete = false;\n axisMap.forEach(item => {\n if (isDiscrete(item.axis.getScale().type)) {\n if (!discrete) {\n discrete = true;\n } else {\n this.enable = false;\n }\n }\n });\n if (!this.enable) {\n return false;\n }\n // 获取所有的value\n axisMap.forEach((item, id) => {\n const axis = item.axis;\n currValue.set(id, {\n v: this._getValueAt(\n axis,\n p -\n (vertical\n ? axis.getLayoutStartPoint().x - this.getLayoutStartPoint().x\n : axis.getLayoutStartPoint().y - this.getLayoutStartPoint().y)\n ),\n axis\n });\n });\n return true;\n }\n\n protected _layoutCrosshair(relativeX: number, relativeY: number) {\n // 找到所有的包含这个点的轴\n const { xAxisMap, yAxisMap } = this._findAllAxisContains(relativeX, relativeY);\n if ((xAxisMap && xAxisMap.size === 0) || (yAxisMap && yAxisMap.size === 0)) {\n if (this.enableRemain) {\n return;\n }\n // 隐藏\n this.hide();\n return;\n }\n // 删除之前的currValue\n this._currValueX.clear();\n this._currValueY.clear();\n // 将数据保存到这个对象中,如果不存在,就直接不执行后续逻辑\n xAxisMap && xAxisMap.size && this._getAllAxisValues(xAxisMap, relativeX, this._currValueX, true);\n yAxisMap && yAxisMap.size && this._getAllAxisValues(yAxisMap, relativeY, this._currValueY, false);\n\n this.layoutByValue(LayoutType.ALL);\n }\n\n hide() {\n // 隐藏\n this._xCrosshair && this._xCrosshair.hideAll();\n this._xTopLabel && this._xTopLabel.hideAll();\n this._xBottomLabel && this._xBottomLabel.hideAll();\n\n this._yCrosshair && this._yCrosshair.hideAll();\n this._yLeftLabel && this._yLeftLabel.hideAll();\n this._yRightLabel && this._yRightLabel.hideAll();\n }\n\n layoutByValue(tag: number = LayoutType.ALL) {\n if (!this.enable) {\n return;\n }\n // 获取axisHelper\n const series = this._firstSeries();\n if (!series) {\n return;\n }\n let xCrossHairInfo: ICrosshairInfoX = {\n height: 0,\n leftPos: 0,\n rightPos: 0,\n topPos: 0,\n x: 0,\n bottom: { visible: false, text: '', dx: 0, dy: 0 },\n top: { visible: false, text: '', dx: 0, dy: 0 },\n visible: false,\n axis: null\n };\n let yCrossHairInfo: ICrosshairInfoY = {\n width: 0,\n leftPos: 0,\n topPos: 0,\n bottomPos: 0,\n y: 0,\n left: { visible: false, text: '', dx: 0, dy: 0 },\n right: { visible: false, text: '', dx: 0, dy: 0 },\n visible: false,\n axis: null\n };\n // 计算x轴和y轴对应的region区域\n const getRegionArea = (outRegion: IBound, currentValue: Map) => {\n currentValue.forEach(({ axis }) => {\n const regions = axis.getRegions();\n regions.forEach(r => {\n outRegion.x1 = Math.min(outRegion.x1, r.getLayoutStartPoint().x);\n outRegion.y1 = Math.min(outRegion.y1, r.getLayoutStartPoint().y);\n outRegion.x2 = Math.max(outRegion.x2, r.getLayoutStartPoint().x + r.getLayoutRect().width);\n outRegion.y2 = Math.max(outRegion.y2, r.getLayoutStartPoint().y + r.getLayoutRect().height);\n });\n });\n };\n // 计算x和y的坐标\n let x = 0;\n let y = 0;\n if (this._currValueX.size) {\n const item = Array.from(this._currValueX.values())[0];\n x = item.axis.getScale().scale(item.v) + item.axis.getLayoutStartPoint().x - this.getLayoutStartPoint().x;\n xCrossHairInfo.axis = item.axis;\n }\n if (this._currValueY.size) {\n const item = Array.from(this._currValueY.values())[0];\n y = item.axis.getScale().scale(item.v) + item.axis.getLayoutStartPoint().y - this.getLayoutStartPoint().y;\n yCrossHairInfo.axis = item.axis;\n }\n\n xCrossHairInfo.visible = !!this._currValueX.size && Number.isFinite(x);\n yCrossHairInfo.visible = !!this._currValueY.size && Number.isFinite(y);\n\n const xRegion = { x1: Infinity, y1: Infinity, x2: -Infinity, y2: -Infinity };\n const yRegion = { x1: Infinity, y1: Infinity, x2: -Infinity, y2: -Infinity };\n getRegionArea(xRegion, this._currValueX);\n getRegionArea(yRegion, this._currValueY);\n\n let indexWidth;\n let offsetWidth: number = 0;\n let valueHeight;\n let offsetHeight: number = 0;\n // 计算x轴和y轴的数据,只允许最多一对x和一对y\n if (this._xHair) {\n this._currValueX.forEach(({ axis, v }) => {\n v = v ?? '';\n const xScale = axis.getScale();\n if (isDiscrete(xScale.type)) {\n indexWidth = (xScale as BandScale).bandwidth();\n\n if (indexWidth === 0 && (xScale as BandScale).step) {\n offsetWidth = (xScale as BandScale).step();\n }\n } else if (isContinuous(xScale.type)) {\n const fieldX = series.fieldX[0];\n const fieldX2 = series.fieldX2;\n const datum = getDatumByValue(series.getViewData().latestData, +v, fieldX, fieldX2);\n if (datum) {\n const startX = series.dataToPositionX(datum);\n if (fieldX2) {\n indexWidth = Math.abs(startX - series.dataToPositionX1(datum));\n v = `${datum[fieldX]} ~ ${datum[fieldX2]}`;\n } else {\n indexWidth = 1;\n }\n x = startX;\n }\n }\n if (this._xHair.label?.visible) {\n const labelOffset = getAxisLabelOffset(axis.getSpec());\n if (axis.getOrient() === 'bottom') {\n xCrossHairInfo.bottom.visible = true;\n xCrossHairInfo.bottom.text = v;\n xCrossHairInfo.bottom.dx = 0;\n xCrossHairInfo.bottom.dy = labelOffset;\n } else if (axis.getOrient() === 'top') {\n xCrossHairInfo.top.visible = true;\n xCrossHairInfo.top.text = v;\n xCrossHairInfo.top.dx = 0;\n xCrossHairInfo.top.dy = -labelOffset;\n }\n }\n });\n }\n\n if (this._yHair) {\n this._currValueY.forEach(({ axis, v }) => {\n v = v ?? '';\n const yScale = axis.getScale();\n if (isDiscrete(yScale.type)) {\n valueHeight = (yScale as BandScale).bandwidth();\n\n if (valueHeight === 0 && (yScale as BandScale).step) {\n offsetHeight = (yScale as BandScale).step();\n }\n } else if (isContinuous(yScale.type)) {\n const fieldY = series.fieldY[0];\n const fieldY2 = series.fieldY2;\n const datum = getDatumByValue(series.getViewData().latestData, +v, fieldY, fieldY2);\n if (datum) {\n const startY = series.dataToPositionY(datum);\n if (fieldY2) {\n valueHeight = Math.abs(startY - series.dataToPositionY1(datum));\n v = `${datum[fieldY]} ~ ${datum[fieldY2]}`;\n } else {\n valueHeight = 1;\n }\n y = startY;\n }\n }\n if (this._yHair.label?.visible) {\n const labelOffset = getAxisLabelOffset(axis.getSpec());\n if (axis.getOrient() === 'left') {\n yCrossHairInfo.left.visible = true;\n yCrossHairInfo.left.text = v;\n yCrossHairInfo.left.dx = -labelOffset;\n yCrossHairInfo.left.dy = 0;\n } else if (axis.getOrient() === 'right') {\n yCrossHairInfo.right.visible = true;\n yCrossHairInfo.right.text = v;\n yCrossHairInfo.right.dx = labelOffset;\n yCrossHairInfo.right.dy = 0;\n }\n }\n });\n }\n\n if (this.enableRemain && !xCrossHairInfo.visible && isValid(this._cacheXCrossHairInfo)) {\n xCrossHairInfo = this._cacheXCrossHairInfo;\n } else {\n xCrossHairInfo.leftPos = xRegion.x1;\n xCrossHairInfo.rightPos = xRegion.x2;\n xCrossHairInfo.topPos = xRegion.y1;\n xCrossHairInfo.height = xRegion.y2 - xRegion.y1;\n xCrossHairInfo.x = x + this.getLayoutStartPoint().x;\n if (this._xHair?.label?.formatMethod) {\n const { top, bottom } = xCrossHairInfo;\n bottom.visible && (bottom.text = this._xHair.label.formatMethod(bottom.text, 'bottom') as string);\n top.visible && (top.text = this._xHair.label.formatMethod(top.text, 'top') as string);\n }\n }\n\n if (this.enableRemain && !yCrossHairInfo.visible && isValid(this._cacheYCrossHairInfo)) {\n yCrossHairInfo = this._cacheYCrossHairInfo;\n } else {\n yCrossHairInfo.leftPos = yRegion.x1;\n yCrossHairInfo.topPos = yRegion.y1;\n yCrossHairInfo.bottomPos = yRegion.y2;\n yCrossHairInfo.width = yRegion.x2 - yRegion.x1;\n yCrossHairInfo.y = y + this.getLayoutStartPoint().y;\n if (this._yHair?.label?.formatMethod) {\n const { left, right } = yCrossHairInfo;\n left.visible && (left.text = this._yHair.label.formatMethod(left.text, 'left') as string);\n right.visible && (right.text = this._yHair.label.formatMethod(right.text, 'right') as string);\n }\n }\n\n if (tag) {\n LayoutType.HORIZONTAL && this._layoutHorizontal(yCrossHairInfo, valueHeight ?? 0, offsetHeight);\n LayoutType.VERTICAL && this._layoutVertical(xCrossHairInfo, indexWidth ?? 0, offsetWidth);\n }\n\n if (this.enableRemain) {\n this._cacheXCrossHairInfo = { ...xCrossHairInfo, _isCache: true };\n this._cacheYCrossHairInfo = { ...yCrossHairInfo, _isCache: true };\n }\n }\n\n private _layoutVertical(crosshairInfo: ICrosshairInfoX, bandWidth: number, offsetWidth: number) {\n if ((crosshairInfo._isCache && this.enableRemain) || !this._xHair) {\n return;\n }\n\n const { x, topPos, height, top, bottom, visible } = crosshairInfo;\n\n if (visible) {\n // 外部设置的size\n const type = this._xHair.type;\n let positionAttribute;\n if (type === 'line') {\n positionAttribute = {\n start: { x: x + bandWidth / 2, y: topPos },\n end: { x: x + bandWidth / 2, y: topPos + height }\n };\n } else if (type === 'rect') {\n const extend = this._getRectSize(this._xHair, bandWidth, crosshairInfo.axis);\n const { leftPos, rightPos } = crosshairInfo;\n\n positionAttribute = {\n start: { x: Math.max(x - extend / 2 - offsetWidth / 2, leftPos), y: topPos },\n end: { x: Math.min(x + bandWidth + extend / 2 + offsetWidth / 2, rightPos), y: topPos + height }\n };\n }\n this._updateCrosshair('x', type, positionAttribute);\n // 文本\n if (top.visible) {\n const updateAttrs = {\n x: x + bandWidth / 2,\n y: topPos,\n ...top,\n ...this._xHair.label,\n textStyle: {\n ...this._xHair.label?.textStyle,\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n zIndex: this.labelZIndex\n };\n this._updateCrosshairLabel(this._xTopLabel, updateAttrs, label => {\n label.name = 'crosshair-x-top-label';\n this._xTopLabel = label;\n });\n } else {\n this._xTopLabel && this._xTopLabel.hideAll();\n }\n\n if (bottom.visible) {\n const updateAttrs = {\n x: x + bandWidth / 2,\n y: topPos + height,\n ...bottom,\n ...this._xHair.label,\n textStyle: {\n ...this._xHair.label?.textStyle,\n textAlign: 'center',\n textBaseline: 'top'\n },\n zIndex: this.labelZIndex\n };\n this._updateCrosshairLabel(this._xBottomLabel, updateAttrs, label => {\n label.name = 'crosshair-x-bottom-label';\n this._xBottomLabel = label;\n });\n } else {\n this._xBottomLabel && this._xBottomLabel.hideAll();\n }\n }\n }\n\n private _layoutHorizontal(crosshairInfo: ICrosshairInfoY, bandHeight: number, offsetHeight: number) {\n if ((crosshairInfo._isCache && this.enableRemain) || !this._yHair) {\n return;\n }\n const { leftPos, width, y, left, right, visible } = crosshairInfo;\n if (visible) {\n const type = this._yHair.type;\n let positionAttribute;\n if (type === 'line') {\n positionAttribute = {\n start: { x: leftPos, y: y + bandHeight / 2 },\n end: { x: leftPos + width, y: y + bandHeight / 2 }\n };\n } else if (type === 'rect') {\n const extend = this._getRectSize(this._yHair, bandHeight, crosshairInfo.axis);\n const { topPos, bottomPos } = crosshairInfo;\n\n positionAttribute = {\n start: { x: leftPos, y: Math.max(y - extend / 2 - offsetHeight / 2, topPos) },\n end: { x: leftPos + width, y: Math.min(y + bandHeight + extend / 2 + offsetHeight / 2, bottomPos) }\n };\n }\n this._updateCrosshair('y', type, positionAttribute);\n\n // 文本\n if (left.visible) {\n const updateAttrs = {\n x: leftPos,\n y: y + bandHeight / 2,\n ...left,\n ...this._yHair.label,\n textStyle: {\n ...this._yHair.label?.textStyle,\n textAlign: 'right',\n textBaseline: 'middle'\n },\n zIndex: this.labelZIndex\n };\n\n this._updateCrosshairLabel(this._yLeftLabel, updateAttrs, label => {\n label.name = 'crosshair-y-left-label';\n this._yLeftLabel = label;\n });\n } else {\n this._yLeftLabel && this._yLeftLabel.hideAll();\n }\n\n if (right.visible) {\n const updateAttrs = {\n x: leftPos + width,\n y: y + bandHeight,\n ...right,\n ...this._yHair.label,\n textStyle: {\n ...this._yHair.label?.textStyle,\n textAlign: 'left',\n textBaseline: 'middle'\n },\n zIndex: this.labelZIndex\n };\n this._updateCrosshairLabel(this._yRightLabel, updateAttrs, label => {\n label.name = 'crosshair-y-right-label';\n this._yRightLabel = label;\n });\n } else {\n this._yRightLabel && this._yRightLabel.hideAll();\n }\n }\n }\n\n private _getRectSize(hair: IHair, bandSize: number, axis: IAxis) {\n // 外部设置的size\n let extend = 0;\n if (hair.style?.sizePercent) {\n extend = (hair.style.sizePercent - 1) * bandSize;\n } else if (typeof hair.style?.size === 'number') {\n extend = hair.style.size - bandSize;\n } else if (typeof hair.style?.size === 'function') {\n const axisRect = axis.getLayoutRect();\n extend = hair.style.size(axisRect, axis) - bandSize;\n }\n\n return extend;\n }\n\n protected _parseFieldInfo() {\n const { xField, yField } = this._spec as ICartesianCrosshairSpec;\n if (xField && xField.visible) {\n this._xHair = this._parseField(xField, 'xField');\n }\n if (yField && yField.visible) {\n this._yHair = this._parseField(yField, 'yField');\n }\n }\n\n private _updateCrosshair(dim: string, type: string, attributes: any) {\n const container = this.getContainer();\n let crosshair;\n let style;\n if (dim === 'x') {\n crosshair = this._xCrosshair;\n style = this._xHair.style;\n } else {\n crosshair = this._yCrosshair;\n style = this._yHair.style;\n }\n if (crosshair) {\n crosshair.setAttributes(attributes);\n } else {\n // 创建\n if (type === 'line') {\n crosshair = new LineCrosshair({\n ...attributes,\n lineStyle: style,\n zIndex: this.gridZIndex + 1, // 样式优化:线盖在面上\n disableTriggerEvent: this._option.disableTriggerEvent\n });\n } else if (type === 'rect') {\n crosshair = new RectCrosshair({\n ...attributes,\n rectStyle: style,\n zIndex: this.gridZIndex,\n disableTriggerEvent: this._option.disableTriggerEvent\n });\n }\n // 添加至场景树\n container?.add(crosshair as unknown as INode);\n if (dim === 'x') {\n this._xCrosshair = crosshair as unknown as IGroup;\n } else {\n this._yCrosshair = crosshair as unknown as IGroup;\n }\n }\n }\n\n private _updateCrosshairLabel(label: Tag, attributes: any, callback: (label: Tag) => void) {\n const container = this.getContainer();\n if (label) {\n label.setAttributes(attributes);\n } else {\n label = new Tag(attributes);\n callback(label);\n container?.add(label as unknown as INode);\n }\n limitTagInBounds(label, this._getLimitBounds());\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [\n this._xCrosshair,\n this._xTopLabel,\n this._xBottomLabel,\n this._yCrosshair,\n this._yLeftLabel,\n this._yRightLabel\n ] as unknown as IGraphic[];\n }\n}\n\nexport const registerCartesianCrossHair = () => {\n Factory.registerComponent(CartesianCrossHair.type, CartesianCrossHair);\n};\n","/**\n * @description sector 类型 crosshair,用于极坐标系下\n */\nimport type { IGroup } from '@visactor/vrender-core';\nimport { merge, getAngleByPoint, radianToDegree } from '@visactor/vutils';\nimport type { PointLocationCfg } from '../core/type';\nimport { POLAR_END_ANGLE, POLAR_START_ANGLE } from '../constant';\nimport { CrosshairBase } from './base';\nimport type { SectorCrosshairAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadSectorCrosshairComponent } from './register';\n\nloadSectorCrosshairComponent();\nexport class SectorCrosshair extends CrosshairBase {\n static defaultAttributes = {\n sectorStyle: {\n fill: '#b2bacf',\n opacity: 0.2\n }\n };\n\n constructor(attributes: SectorCrosshairAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, SectorCrosshair.defaultAttributes, attributes));\n }\n\n protected renderCrosshair(container: IGroup) {\n const { center, radius, innerRadius = 0, sectorStyle } = this.attribute as SectorCrosshairAttrs;\n const { startAngle, endAngle } = this.attribute;\n const circle = container.createOrUpdateChild(\n 'crosshair-sector',\n {\n ...center,\n outerRadius: radius,\n innerRadius,\n startAngle,\n endAngle,\n ...sectorStyle\n },\n 'arc'\n );\n return circle;\n }\n\n setLocation(point: PointLocationCfg) {\n const {\n center,\n startAngle = POLAR_START_ANGLE,\n endAngle = POLAR_END_ANGLE\n } = this.attribute as SectorCrosshairAttrs;\n const sectorAngle = endAngle - startAngle;\n const pointAngle = radianToDegree(getAngleByPoint(center, point));\n this.setAttributes({\n startAngle: pointAngle - sectorAngle / 2,\n endAngle: pointAngle + sectorAngle / 2\n });\n }\n}\n","/**\n * @description polygon 类型 crosshair,用于极坐标系下\n */\nimport type { IGroup } from '@visactor/vrender-core';\nimport { merge, polarToCartesian, PointService } from '@visactor/vutils';\nimport type { PointLocationCfg } from '../core/type';\nimport { CrosshairBase } from './base';\nimport type { PolygonCrosshairAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadPolygonCrosshairComponent } from './register';\n\nloadPolygonCrosshairComponent();\nexport class PolygonCrosshair extends CrosshairBase {\n static defaultAttributes = {\n lineStyle: {\n stroke: '#b2bacf',\n lineWidth: 1,\n lineDash: [2]\n }\n };\n\n constructor(attributes: PolygonCrosshairAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, PolygonCrosshair.defaultAttributes, attributes));\n }\n\n protected renderCrosshair(container: IGroup) {\n const { center, radius, sides = 6, lineStyle } = this.attribute as PolygonCrosshairAttrs;\n const { startAngle, endAngle } = this.attribute;\n\n const isClose = (endAngle - startAngle) % (Math.PI * 2) === 0;\n const eachAngle = (endAngle - startAngle) / sides;\n let path;\n for (let index = 0; index <= sides; index++) {\n const angle = startAngle + eachAngle * index;\n const point = polarToCartesian(center, radius, angle);\n if (index === 0) {\n path = `M${point.x},${point.y}`;\n } else {\n path += `L${point.x},${point.y}`;\n }\n if (index === sides && isClose) {\n path += 'Z';\n }\n }\n\n const polygon = container.createOrUpdateChild(\n 'crosshair-polygon',\n {\n path,\n ...lineStyle\n },\n 'path'\n );\n return polygon;\n }\n\n setLocation(point: PointLocationCfg) {\n const { center } = this.attribute as PolygonCrosshairAttrs;\n const radius = PointService.distancePP(point, center);\n\n this.setAttribute('radius', radius);\n }\n}\n","/**\n * @description circle 类型 crosshair,用于极坐标系下\n */\nimport type { IGroup } from '@visactor/vrender-core';\nimport { merge, PointService } from '@visactor/vutils';\nimport type { PointLocationCfg } from '../core/type';\nimport { CrosshairBase } from './base';\nimport type { CircleCrosshairAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadCircleCrosshairComponent } from './register';\n\nloadCircleCrosshairComponent();\nexport class CircleCrosshair extends CrosshairBase {\n static defaultAttributes = {\n lineStyle: {\n stroke: ['#b2bacf', false, false, false],\n lineWidth: 1,\n lineDash: [2]\n }\n };\n\n constructor(attributes: CircleCrosshairAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, CircleCrosshair.defaultAttributes, attributes));\n }\n\n protected renderCrosshair(container: IGroup) {\n const { center, radius, lineStyle } = this.attribute as CircleCrosshairAttrs;\n\n const circle = container.createOrUpdateChild(\n 'crosshair-circle',\n {\n ...center,\n outerRadius: radius,\n // TODO: group的cornerRadius支持数组,arc的不支持数组,此处会有类型转换问题\n ...(this.attribute as any),\n ...lineStyle\n },\n 'arc'\n );\n return circle;\n }\n\n setLocation(point: PointLocationCfg) {\n const { center } = this.attribute as CircleCrosshairAttrs;\n const radius = PointService.distancePP(point, center);\n\n this.setAttribute('radius', radius);\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport type { IPolarSeries } from '../../series/interface/series';\nimport { mergeSpec } from '../../util/spec/merge-spec';\nimport type { IComponentOption } from '../interface';\nimport { ComponentTypeEnum } from '../interface/type';\nimport type { IPolarCrosshairSpec } from './interface';\nimport type { BandScale } from '@visactor/vscale';\nimport { isDiscrete, isContinuous } from '@visactor/vscale';\nimport { Tag } from '@visactor/vrender-components';\nimport { LineCrosshair, SectorCrosshair, CircleCrosshair, PolygonCrosshair } from '@visactor/vrender-components';\nimport type { IPolarAxis } from '../axis/polar/interface';\nimport type { IPoint, StringOrNumber } from '../../typings';\nimport type { IAxisInfo, IHair } from './base';\nimport { BaseCrossHair } from './base';\nimport type { Maybe } from '@visactor/vutils';\nimport {\n polarToCartesian,\n getIntersectPoint,\n PointService,\n getAngleByPoint,\n isArray,\n isValid,\n isValidNumber,\n isNil,\n clamp\n} from '@visactor/vutils';\nimport type { IGraphic, IGroup, INode } from '@visactor/vrender-core';\nimport { angleLabelOrientAttribute, radiusLabelOrientAttribute } from '../../util/math';\nimport { limitTagInBounds } from './util';\nimport { getAxisLabelOffset } from '../axis/util';\nimport { Factory } from '../../core/factory';\nimport { LayoutType } from './config';\nimport type { IModelSpecInfo } from '../../model/interface';\n\ninterface ICrosshairInfo {\n x: number;\n y: number;\n center: IPoint;\n radius: number;\n distance: number;\n startAngle: number;\n endAngle: number;\n innerRadius: number;\n visible: boolean;\n sides: number;\n angle: number;\n point: IPoint;\n _isCache?: boolean;\n label?: { visible: boolean; text: StringOrNumber; offset: number };\n axis?: IPolarAxis;\n}\n\nexport class PolarCrossHair extends BaseCrossHair {\n static specKey = 'crosshair';\n\n static type = ComponentTypeEnum.polarCrosshair;\n type = ComponentTypeEnum.polarCrosshair;\n name: string = ComponentTypeEnum.polarCrosshair;\n private _currValueAngle: Map;\n private _currValueRadius: Map;\n\n private _angleHair: IHair | undefined;\n private _radiusHair: (IHair & { smooth: boolean }) | undefined;\n\n private _cacheAngleCrossHairInfo: ICrosshairInfo | undefined;\n private _cacheRadiusCrossHairInfo: ICrosshairInfo | undefined;\n\n private _radiusCrosshair: IGroup;\n private _radiusLabelCrosshair: Tag;\n private _angleCrosshair: IGroup;\n private _angleLabelCrosshair: Tag;\n\n static getSpecInfo(chartSpec: any): Maybe {\n const crosshairSpec = chartSpec[this.specKey];\n if (isNil(crosshairSpec)) {\n return undefined;\n }\n if (!isArray(crosshairSpec)) {\n if (crosshairSpec.categoryField || crosshairSpec.valueField) {\n return [\n {\n spec: crosshairSpec,\n specPath: [this.specKey],\n type: ComponentTypeEnum.polarCrosshair\n }\n ];\n }\n return undefined;\n }\n const specInfos: IModelSpecInfo[] = [];\n crosshairSpec.forEach((s: IPolarCrosshairSpec, i: number) => {\n if (s.categoryField || s.valueField) {\n specInfos.push({\n spec: s,\n specIndex: i,\n specPath: [this.specKey, i],\n type: ComponentTypeEnum.polarCrosshair\n });\n }\n });\n return specInfos;\n }\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this._currValueAngle = new Map();\n this._currValueRadius = new Map();\n }\n\n protected _showDefaultCrosshairBySpec() {\n const { categoryField, valueField } = this._spec as IPolarCrosshairSpec;\n if (categoryField?.visible && categoryField.defaultSelect) {\n const { axisIndex, datum } = categoryField.defaultSelect;\n this._defaultCrosshair(axisIndex, datum, LayoutType.VERTICAL);\n }\n if (valueField?.visible && valueField.defaultSelect) {\n const { axisIndex, datum } = valueField.defaultSelect;\n this._defaultCrosshair(axisIndex, datum, LayoutType.HORIZONTAL);\n }\n }\n\n private _defaultCrosshair(axisIndex: number, datum: StringOrNumber, tag: number) {\n const axis = this._option.getComponentsByKey('axes').find(c => c.getSpecIndex() === axisIndex) as IPolarAxis;\n if (!axis) {\n return;\n }\n // 横轴\n if (tag === LayoutType.VERTICAL) {\n this._currValueAngle.clear();\n // 根据数值拿到对应的坐标点\n const polarCoord = {\n angle: axis.valueToPosition(datum),\n radius: axis.getOuterRadius()\n };\n const canvasPosition = axis.coordToPoint(polarCoord);\n this._currValueAngle.set(axisIndex, this._getValueByAxis(axis, canvasPosition));\n } else {\n this._currValueRadius.clear();\n // 根据数值拿到对应的坐标点\n const polarCoord = {\n angle: axis.startAngle,\n radius: axis.valueToPosition(datum)\n };\n const canvasPosition = axis.coordToPoint(polarCoord);\n this._currValueRadius.set(axisIndex, this._getValueByAxis(axis, canvasPosition));\n }\n this.layoutByValue(LayoutType.ALL);\n }\n\n hide() {\n this._radiusCrosshair && this._radiusCrosshair.hideAll();\n this._radiusLabelCrosshair && this._radiusLabelCrosshair.hideAll();\n this._angleCrosshair && this._angleCrosshair.hideAll();\n this._angleLabelCrosshair && this._angleLabelCrosshair.hideAll();\n }\n\n /**\n * 查找所有落在x和y区域的轴\n * @param relativeX\n * @param relativeY\n */\n private _findAllAxisContains(relativeX: number, relativeY: number) {\n const angleAxisMap = this._getAxisInfoByField('category');\n const radiusAxisMap = this._getAxisInfoByField('value');\n return {\n angleAxisMap: this._filterAxisByPoint(angleAxisMap, relativeX, relativeY),\n radiusAxisMap: this._filterAxisByPoint(radiusAxisMap, relativeX, relativeY)\n };\n }\n\n /**\n * 根据位置获取所有轴上的value\n * @param axisMap\n * @param p\n * @returns\n */\n private _getAllAxisValues(\n axisMap: IAxisInfo,\n point: IPoint,\n currValue: Map\n ): boolean {\n // 首先不能存在两个离散轴\n let discrete = false;\n axisMap.forEach(item => {\n if (isDiscrete(item.axis.getScale().type)) {\n if (!discrete) {\n discrete = true;\n } else {\n this.enable = false;\n }\n }\n });\n if (!this.enable) {\n return false;\n }\n // 获取所有的value\n axisMap.forEach((item, id) => {\n const axis = item.axis;\n currValue.set(id, this._getValueByAxis(axis, point));\n });\n return true;\n }\n\n private _getValueByAxis(axis: IPolarAxis, point: IPoint) {\n const { x: axisStartX, y: axisStartY } = axis.getLayoutStartPoint();\n const { x, y } = this.getLayoutStartPoint();\n let value = axis.positionToData({\n x: point.x - (axisStartX - x),\n y: point.y - (axisStartY - y)\n });\n if (isContinuous(axis.getScale().type) && isValidNumber(+value)) {\n value = (+value as number).toFixed(2);\n }\n const center = {\n x: axis.getCenter().x + this.getLayoutStartPoint().x,\n y: axis.getCenter().y + this.getLayoutStartPoint().y\n };\n\n return {\n v: value,\n axis,\n center,\n innerRadius: axis.getInnerRadius(),\n radius: axis.getOuterRadius(),\n startAngle: axis.startAngle,\n endAngle: axis.endAngle,\n distance: PointService.distancePP(point, axis.getCenter()),\n coord: axis.pointToCoord(point),\n point\n };\n }\n\n protected _layoutCrosshair(relativeX: number, relativeY: number) {\n // 找到所有的包含这个点的轴\n const { angleAxisMap, radiusAxisMap } = this._findAllAxisContains(relativeX, relativeY);\n if (angleAxisMap.size === 0 && radiusAxisMap.size === 0) {\n if (this.enableRemain) {\n return;\n }\n // 隐藏\n this.hide();\n return;\n }\n // 删除之前的currValue\n this._currValueAngle.clear();\n this._currValueRadius.clear();\n // 将数据保存到这个对象中,如果不存在,就直接不执行后续逻辑\n angleAxisMap && this._getAllAxisValues(angleAxisMap, { x: relativeX, y: relativeY }, this._currValueAngle);\n radiusAxisMap && this._getAllAxisValues(radiusAxisMap, { x: relativeX, y: relativeY }, this._currValueRadius);\n\n this.layoutByValue(LayoutType.ALL);\n }\n\n layoutByValue(tag: number = LayoutType.ALL) {\n if (!this.enable) {\n return;\n }\n // 获取axisHelper\n const series = this._firstSeries();\n if (!series) {\n return;\n }\n let angleCrossHairInfo = {\n x: 0,\n y: 0,\n center: { x: 0, y: 0 },\n radius: 0,\n distance: 0,\n startAngle: 0,\n endAngle: 0,\n innerRadius: 0,\n visible: false,\n label: { visible: false, text: '', offset: 0 }\n } as ICrosshairInfo;\n let radiusCrossHairInfo = {\n x: 0,\n y: 0,\n center: { x: 0, y: 0 },\n radius: 0,\n distance: 0,\n startAngle: 0,\n endAngle: 0,\n innerRadius: 0,\n visible: false,\n sides: (series.angleAxisHelper.getScale(0) as BandScale).ticks().length,\n label: { visible: false, text: '', offset: 0 }\n } as ICrosshairInfo;\n\n // 计算x轴和y轴的数据,只允许最多一对x和一对y\n if (this._angleHair) {\n angleCrossHairInfo.visible = !!this._currValueAngle.size;\n const bandWidth = series.angleAxisHelper.getBandwidth(0);\n this._currValueAngle.forEach(({ axis, v, coord, ...rest }) => {\n v = v ?? '';\n mergeSpec(angleCrossHairInfo, rest);\n const angle = series.angleAxisHelper.dataToPosition([v]);\n angleCrossHairInfo.angle = angle;\n if (this._angleHair.label?.visible) {\n angleCrossHairInfo.label.visible = true;\n angleCrossHairInfo.label.text = v;\n angleCrossHairInfo.label.offset = getAxisLabelOffset(axis.getSpec());\n }\n\n angleCrossHairInfo.startAngle = angle - bandWidth / 2;\n angleCrossHairInfo.endAngle = angle + bandWidth / 2;\n });\n }\n\n if (this._radiusHair) {\n radiusCrossHairInfo.visible = !!this._currValueRadius.size;\n this._currValueRadius.forEach(({ axis, v, coord, ...rest }) => {\n v = v ?? '';\n if (this._radiusHair.label?.visible) {\n radiusCrossHairInfo.label.visible = true;\n radiusCrossHairInfo.label.text = v;\n radiusCrossHairInfo.label.offset = getAxisLabelOffset(axis.getSpec());\n }\n radiusCrossHairInfo.angle = coord.angle;\n radiusCrossHairInfo.axis = axis;\n mergeSpec(radiusCrossHairInfo, rest);\n });\n }\n\n if (this.enableRemain && !angleCrossHairInfo.visible && isValid(this._cacheAngleCrossHairInfo)) {\n angleCrossHairInfo = this._cacheAngleCrossHairInfo;\n } else {\n if (this._angleHair?.label?.formatMethod && angleCrossHairInfo.label.visible) {\n const { label } = angleCrossHairInfo;\n label.text = this._angleHair.label.formatMethod(label.text, 'angle') as string;\n }\n }\n\n if (this.enableRemain && !radiusCrossHairInfo.visible && isValid(this._cacheRadiusCrossHairInfo)) {\n radiusCrossHairInfo = this._cacheRadiusCrossHairInfo;\n } else {\n if (this._radiusHair?.label?.formatMethod && radiusCrossHairInfo.label.visible) {\n const { label } = radiusCrossHairInfo;\n label.text = this._radiusHair.label.formatMethod(label.text, 'radius') as string;\n }\n }\n\n if (tag) {\n LayoutType.HORIZONTAL && this._layoutHorizontal(radiusCrossHairInfo);\n LayoutType.VERTICAL && this._layoutVertical(angleCrossHairInfo);\n }\n\n if (this.enableRemain) {\n this._cacheAngleCrossHairInfo = { ...angleCrossHairInfo, _isCache: true };\n this._cacheRadiusCrossHairInfo = { ...radiusCrossHairInfo, _isCache: true };\n }\n }\n\n private _layoutVertical(crosshairInfo: ICrosshairInfo) {\n if (crosshairInfo._isCache && this.enableRemain) {\n return;\n }\n\n const container = this.getContainer();\n const { angle, innerRadius, radius, label, startAngle, endAngle, center, visible } = crosshairInfo;\n if (visible) {\n const crosshairType = this._angleHair.type === 'rect' ? 'sector' : 'line';\n let positionAttrs;\n if (crosshairType === 'sector') {\n positionAttrs = {\n center,\n innerRadius,\n radius,\n startAngle: startAngle,\n endAngle: endAngle\n };\n } else {\n positionAttrs = {\n start: polarToCartesian(center, innerRadius, angle),\n end: polarToCartesian(center, radius, angle)\n };\n }\n\n if (this._angleCrosshair) {\n this._angleCrosshair.setAttributes(positionAttrs as unknown as any);\n } else {\n let crosshair;\n // 创建\n if (crosshairType === 'line') {\n crosshair = new LineCrosshair({\n ...(positionAttrs as { start: IPoint; end: IPoint }),\n lineStyle: this._angleHair.style,\n zIndex: this.gridZIndex\n });\n } else if (crosshairType === 'sector') {\n crosshair = new SectorCrosshair({\n ...(positionAttrs as {\n center: IPoint;\n innerRadius: number;\n radius: number;\n startAngle: number;\n endAngle: number;\n }),\n sectorStyle: this._angleHair.style,\n zIndex: this.gridZIndex\n });\n }\n this._angleCrosshair = crosshair as unknown as IGroup;\n // 添加至场景树\n container.add(crosshair as unknown as INode);\n }\n\n // 文本\n if (label.visible) {\n const orient = angleLabelOrientAttribute(angle);\n const labelAttrs = {\n ...polarToCartesian(center, radius + label.offset, angle),\n ...this._angleHair.label,\n ...label,\n textStyle: {\n ...this._angleHair.label?.textStyle,\n textAlign: orient.align,\n textBaseline: orient.baseline\n },\n zIndex: this.labelZIndex\n };\n this._updateCrosshairLabel(this._angleLabelCrosshair, labelAttrs, label => {\n label.name = 'crosshair-angle-label';\n this._angleLabelCrosshair = label;\n });\n } else {\n this._angleLabelCrosshair && this._angleLabelCrosshair.hideAll();\n }\n }\n }\n\n private _layoutHorizontal(crosshairInfo: ICrosshairInfo) {\n if (crosshairInfo._isCache && this.enableRemain) {\n return;\n }\n\n const { center, startAngle, endAngle, distance, sides, axis, label, point, radius, innerRadius, visible } =\n crosshairInfo;\n const container = this.getContainer();\n if (visible) {\n const crosshairType = this._radiusHair.smooth ? 'circle' : 'polygon';\n\n let polygonRadius = distance;\n if (crosshairType === 'polygon') {\n const axisCenter = axis.getCenter();\n // 需要计算半径\n // 获取当前点的角度\n const curAngle = getAngleByPoint(axisCenter, point);\n const stepAngle = (endAngle - startAngle) / sides;\n const index = Math.floor((curAngle - startAngle) / stepAngle);\n const preAngle = index * stepAngle + startAngle;\n const nextAngle = Math.min((index + 1) * stepAngle + startAngle, endAngle);\n\n const prePoint = polarToCartesian(axisCenter, distance, preAngle);\n const nextPoint = polarToCartesian(axisCenter, distance, nextAngle);\n // 求交点\n const insertPoint = getIntersectPoint(\n [nextPoint.x, nextPoint.y],\n [prePoint.x, prePoint.y],\n [axisCenter.x, axisCenter.y],\n [point.x, point.y]\n );\n if (insertPoint) {\n polygonRadius = clamp(\n PointService.distancePN(point, insertPoint[0], insertPoint[1]) + distance,\n innerRadius,\n radius\n );\n }\n }\n const positionAttrs = {\n center,\n startAngle: startAngle,\n endAngle: endAngle,\n radius: polygonRadius,\n sides\n };\n\n if (this._radiusCrosshair) {\n this._radiusCrosshair.setAttributes(positionAttrs as unknown as any);\n } else {\n let crosshair;\n if (crosshairType === 'polygon') {\n crosshair = new PolygonCrosshair({\n ...positionAttrs,\n lineStyle: this._radiusHair.style,\n zIndex: this.gridZIndex + 1 // 样式优化:线盖在面上\n });\n } else {\n crosshair = new CircleCrosshair({\n ...positionAttrs,\n lineStyle: this._radiusHair.style,\n zIndex: this.gridZIndex\n });\n }\n this._radiusCrosshair = crosshair as unknown as IGroup;\n // 添加至场景树\n container.add(crosshair as unknown as INode);\n }\n\n // 文本\n if (label.visible) {\n const orient = radiusLabelOrientAttribute(startAngle);\n const labelAttrs = {\n ...polarToCartesian(center, polygonRadius, startAngle),\n ...this._radiusHair.label,\n ...label,\n textStyle: {\n ...this._radiusHair.label?.textStyle,\n textAlign: orient.align,\n textBaseline: orient.baseline\n },\n zIndex: this.labelZIndex\n };\n this._updateCrosshairLabel(this._radiusLabelCrosshair, labelAttrs, label => {\n label.name = 'crosshair-radius-label';\n this._radiusLabelCrosshair = label;\n });\n } else {\n this._radiusLabelCrosshair && this._radiusLabelCrosshair.hideAll();\n }\n }\n }\n\n protected _parseFieldInfo() {\n const { categoryField, valueField } = this._spec as IPolarCrosshairSpec;\n if (categoryField && categoryField.visible) {\n this._angleHair = this._parseField(categoryField, 'categoryField');\n }\n if (valueField && valueField.visible) {\n this._radiusHair = this._parseField(valueField, 'valueField');\n this._radiusHair.smooth = valueField?.line?.smooth;\n }\n }\n\n private _updateCrosshairLabel(label: Tag, labelAttrs: any, callback: (label: Tag) => void) {\n // 文本\n const container = this.getContainer();\n if (label) {\n label.setAttributes(labelAttrs);\n } else {\n label = new Tag(labelAttrs);\n container?.add(label as unknown as INode);\n callback(label);\n }\n limitTagInBounds(label, this._getLimitBounds());\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [\n this._radiusCrosshair,\n this._radiusLabelCrosshair,\n this._angleCrosshair,\n this._angleLabelCrosshair\n ] as unknown as IGroup[];\n }\n}\n\nexport const registerPolarCrossHair = () => {\n Factory.registerComponent(PolarCrossHair.type, PolarCrossHair);\n};\n","import type { ICartesianSeries, IPolarSeries, ISeries } from '../../series/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { eachSeries } from '../../util/model';\n// eslint-disable-next-line no-duplicate-imports\nimport { BaseComponent } from '../base/base-component';\nimport type { IEffect, IModelInitOption } from '../../model/interface';\nimport type { IComponent, IComponentOption } from '../interface';\nimport type { IGroupMark } from '../../mark/group';\nimport { dataFilterComputeDomain, dataFilterWithNewDomain } from './util';\nimport type { AdaptiveSpec, ILayoutRect, ILayoutType, IOrientType, IRect, StringOrNumber } from '../../typings';\nimport { registerDataSetInstanceParser, registerDataSetInstanceTransform } from '../../data/register';\nimport { BandScale, isContinuous, isDiscrete } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IBandLikeScale, IBaseScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../typings/space';\nimport type { CartesianAxis, ICartesianBandAxisSpec } from '../axis/cartesian';\nimport { getDirectionByOrient, getOrient } from '../axis/cartesian/util/common';\nimport type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { mixin, clamp, isNil, merge, isEqual, isValid, array, minInArray, maxInArray, abs } from '@visactor/vutils';\nimport { IFilterMode } from './constant';\nimport type {\n IDataFilterComponent,\n IDataFilterComponentSpec,\n IRoamDragSpec,\n IRoamScrollSpec,\n IRoamZoomSpec\n} from './interface';\nimport { dataViewParser, DataView } from '@visactor/vdataset';\nimport { CompilableData } from '../../compile/data/compilable-data';\nimport type { BaseEventParams } from '../../event/interface';\nimport type { IZoomable } from '../../interaction/zoom/zoomable';\n// eslint-disable-next-line no-duplicate-imports\nimport { Zoomable } from '../../interaction/zoom/zoomable';\nimport type { AbstractComponent, DataZoom } from '@visactor/vrender-components';\nimport type { IDelayType } from '../../typings/event';\nimport { TransformLevel } from '../../data/initialize';\nimport type { IDataZoomSpec } from './data-zoom/interface';\nimport type { IGraphic, IGroup } from '@visactor/vrender-core';\nimport { AttributeLevel } from '../../constant';\n\nexport abstract class DataFilterBaseComponent\n extends BaseComponent>\n implements IDataFilterComponent\n{\n layoutType: ILayoutType | 'none' = 'none';\n\n protected _component: AbstractComponent;\n\n protected _orient: IOrientType = 'left';\n protected _isHorizontal: boolean;\n\n // 是否为自动模式\n protected _auto?: boolean;\n protected _fixedBandSize?: number;\n protected _cacheRect?: ILayoutRect;\n protected _cacheVisibility?: boolean = undefined;\n\n get orient() {\n return this._orient;\n }\n\n // 数据\n protected _stateScale: IBaseScale;\n protected _relatedAxisComponent!: IComponent;\n protected _originalStateFields: Record;\n\n // 与系列的关联关系\n // 优先级:id > index\n // 最终结果:series & region取交集\n protected _seriesUserId?: StringOrNumber[];\n protected _seriesIndex?: number[];\n protected _regionUserId!: string[];\n protected _regionIndex!: number[];\n protected _newDomain: any[];\n\n // 起点数据\n protected _startValue!: number | string;\n // 终点数据\n protected _endValue!: number | string;\n // 开始值,百分比值,0 - 1\n protected _start!: number;\n // 结束值,百分比值,0 - 1\n protected _end!: number;\n // 最小窗口范围\n protected _minSpan!: number;\n // 最大窗口范围\n protected _maxSpan!: number;\n\n protected _field!: string | undefined;\n protected _stateField: string = 'x';\n protected _valueField?: string;\n\n protected _width!: number;\n protected _height!: number;\n\n protected _filterMode!: IFilterMode;\n\n protected _activeRoam: boolean = true;\n protected _zoomAttr: IRoamZoomSpec = {\n enable: true,\n rate: 1,\n focus: true\n };\n protected _dragAttr: IRoamDragSpec = {\n enable: true,\n rate: 1,\n reverse: true\n };\n protected _scrollAttr: IRoamScrollSpec = {\n enable: true,\n rate: 1,\n reverse: true\n };\n\n /**\n * 外部可以通过此方法强制改变datazoom的start和end,达到聚焦定位的效果\n * @param start datazoom起点所在的相对位置\n * @param end datazoom终点所在的相对位置\n * @returns\n */\n setStartAndEnd(\n start: number | string,\n end: number | string,\n rangeMode: ['percent' | 'value', 'percent' | 'value'] = ['percent', 'percent']\n ) {\n const [startMode = 'percent', endMode = 'percent'] = rangeMode;\n\n const startPercent = (startMode === 'percent' ? start : this._dataToStatePoint(start)) as number;\n const endPercent = (endMode === 'percent' ? end : this._dataToStatePoint(end)) as number;\n\n this._handleChange(startPercent, endPercent, true);\n }\n\n enableInteraction() {\n this._activeRoam = true;\n }\n disableInteraction() {\n this._activeRoam = false;\n }\n zoomIn(location?: { x: number; y: number }) {\n this._handleChartZoom({\n zoomDelta: 1.2, // 经验值\n zoomX: location?.x,\n zoomY: location?.y\n });\n }\n\n zoomOut(location?: { x: number; y: number }) {\n this._handleChartZoom({\n zoomDelta: 0.8, // 经验值\n zoomX: location?.x,\n zoomY: location?.y\n });\n }\n\n protected abstract _getComponentAttrs(): any;\n protected abstract _createOrUpdateComponent(): void;\n protected abstract _computeWidth(): number;\n protected abstract _computeHeight(): number;\n protected abstract _handleDataCollectionChange(): void;\n\n protected _handleChange(start: number, end: number, updateComponent?: boolean) {\n const zoomLock = this._spec?.zoomLock ?? false;\n if (zoomLock || end - start < this._minSpan || end - start > this._maxSpan) {\n return;\n }\n }\n\n protected _isReverse() {\n const axis = this._relatedAxisComponent as CartesianAxis;\n if (!axis) {\n return false;\n }\n const axisScale = axis.getScale() as IBandLikeScale;\n return axisScale.range()[0] > axisScale.range()[1] && (!axis.getInverse() || this._isHorizontal);\n }\n\n protected _updateRangeFactor(tag?: string, label?: string) {\n // 轴的range有时是相反的\n // 比如相同的region范围, 有的场景range为[0, 500], 有的场景range为[500, 0]\n // 而datazoom/scrollbar的range是根据布局强制转化为[0, 500]\n // 所以这里在转换时进行判断并做转置, 有待优化\n // 轴在inverse时,也要做转置处理\n const axis = this._relatedAxisComponent as CartesianAxis;\n const axisScale = axis.getScale() as IBandLikeScale;\n const reverse = this._isReverse();\n const newRangeFactor: [number, number] = reverse ? [1 - this._end, 1 - this._start] : [this._start, this._end];\n\n if (reverse) {\n switch (tag) {\n case 'startHandler':\n axisScale.rangeFactorEnd(newRangeFactor[1]);\n break;\n case 'endHandler':\n axisScale.rangeFactorStart(newRangeFactor[0]);\n break;\n default:\n axisScale.rangeFactorStart(newRangeFactor[0], true);\n axisScale.rangeFactorEnd(newRangeFactor[1]); // end 保证为准确值\n }\n } else {\n switch (tag) {\n case 'startHandler':\n axisScale.rangeFactorStart(newRangeFactor[0]);\n break;\n case 'endHandler':\n axisScale.rangeFactorEnd(newRangeFactor[1]);\n break;\n default:\n axisScale.rangeFactorEnd(newRangeFactor[1], true);\n axisScale.rangeFactorStart(newRangeFactor[0]); // start 保证为准确值\n }\n }\n\n const newFactor = axisScale.rangeFactor();\n if (newFactor) {\n this._start = reverse ? 1 - newFactor[1] : newFactor[0];\n this._end = reverse ? 1 - newFactor[0] : newFactor[1];\n } else {\n this._start = 0;\n this._end = 1;\n }\n }\n\n effect: IEffect = {\n onZoomChange: (tag?: string) => {\n const axis = this._relatedAxisComponent as CartesianAxis;\n if (axis && this._filterMode === IFilterMode.axis) {\n const axisScale = axis.getScale() as IBandLikeScale;\n const axisSpec = axis.getSpec() as ICartesianBandAxisSpec;\n // 判断是否允许自由更改轴 bandSize\n if (this._auto && this._getAxisBandSize(axisSpec) && (this._spec as IDataZoomSpec).ignoreBandSize) {\n axisScale.bandwidth('auto');\n axisScale.maxBandwidth('auto');\n axisScale.minBandwidth('auto');\n }\n\n this._updateRangeFactor(tag, 'zoomChange');\n\n (this._component as DataZoom)?.setStartAndEnd?.(this._start, this._end);\n axis.effect.scaleUpdate();\n } else {\n eachSeries(\n this._regions,\n s => {\n s.getViewData()?.markRunning();\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n eachSeries(\n this._regions,\n s => {\n s.reFilterViewData();\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n }\n };\n\n protected _visible: boolean = true;\n get visible() {\n return this._visible;\n }\n\n constructor(spec: T, options: IComponentOption) {\n super(spec as any, options);\n this._orient = getOrient(spec as any);\n this._isHorizontal = getDirectionByOrient(this._orient) === Direction.horizontal;\n }\n\n /**\n * the hook after this component is created\n */\n created() {\n super.created();\n // related axis\n this._setAxisFromSpec();\n // related regions\n this._setRegionsFromSpec();\n this._initEvent();\n // data for background\n this._initData();\n // init the state scale\n this._initStateScale();\n // set state: _start, _end, _startValue, _endValue, _newDomain from spec\n this._setStateFromSpec();\n }\n\n initLayout(): void {\n super.initLayout();\n this._layout && (this._layout.layoutOrient = this._orient);\n }\n\n protected _setAxisFromSpec() {\n if (isValid(this._spec.axisId)) {\n this._relatedAxisComponent = this._option.getComponentByUserId(this._spec.axisId);\n } else if (isValid(this._spec.axisIndex)) {\n this._relatedAxisComponent = this._option.getComponentByIndex('axes', this._spec.axisIndex);\n }\n\n // 如果用户没有配置关联轴 或 用户配置的关联轴和datazoom方向不一致\n // 则 使用与datazoom的orient相同的第一个axis作为关联轴\n if (isNil(this._spec.field) && !this._relatedAxisComponent) {\n const axes = this._option.getComponentsByKey('axes');\n const sameOrientAxis = axes.find((cm: any) => (cm as any)._orient === this._orient);\n\n if (sameOrientAxis) {\n this._relatedAxisComponent = sameOrientAxis;\n } else {\n const bandAxis = axes.find((cm: any) => !isContinuous((cm as any).getScale().type));\n\n this._relatedAxisComponent = bandAxis;\n }\n }\n if (this._relatedAxisComponent && this._filterMode === IFilterMode.axis) {\n (this._relatedAxisComponent as CartesianAxis).autoIndentOnce = true;\n }\n }\n\n protected _setRegionsFromSpec() {\n // 从axis中获取关联的regions\n this._regions = this._relatedAxisComponent ? this._relatedAxisComponent.getRegions() : this._option.getAllRegions();\n // 默认使用关联轴的系列绑定关系\n const bindSeriesFilter = this._relatedAxisComponent ? this._relatedAxisComponent.getBindSeriesFilter?.() : null;\n if (isValid(bindSeriesFilter)) {\n isValid(bindSeriesFilter.userId) && (this._seriesUserId = array(bindSeriesFilter.userId));\n isValid(bindSeriesFilter.specIndex) && (this._seriesIndex = array(bindSeriesFilter.specIndex));\n }\n // spec中的系列绑定关系 取交集\n if (isValid(this._spec.seriesId)) {\n const specSeriesId = array(this._spec.seriesId);\n if (this._seriesUserId) {\n this._seriesUserId = this._seriesUserId.filter(s => specSeriesId.includes(s));\n } else {\n this._seriesUserId = specSeriesId;\n }\n }\n if (isValid(this._spec.seriesIndex)) {\n const specSeriesIndex = array(this._spec.seriesIndex);\n if (this._seriesIndex) {\n this._seriesIndex = this._seriesIndex.filter(s => specSeriesIndex.includes(s));\n } else {\n this._seriesIndex = specSeriesIndex;\n }\n }\n if (isValid(this._spec.regionIndex)) {\n const regionsFromSpec = this._option.getRegionsInIndex(array(this._spec.regionIndex));\n // 如果用户配置了region就取 axis关联 和 用户配置 的交集\n this._regions = this._regions.filter(r => regionsFromSpec.includes(r));\n return;\n }\n if (isValid(this._spec.regionId)) {\n const ids = array(this._spec.regionId);\n // 如果用户配置了region就取 axis关联 和 用户配置 的交集\n this._regions = ids.length ? this._regions.filter(r => ids.includes(r.id)) : [];\n return;\n }\n return;\n }\n\n onDataUpdate(): void {\n const domain = this._computeDomainOfStateScale(isContinuous(this._stateScale.type));\n\n this._stateScale.domain(domain, true);\n this._handleChange(this._start, this._end, true);\n }\n\n protected _computeDomainOfStateScale(isContinuous?: boolean) {\n const domain = this._data.getLatestData().map((d: any) => d[this._stateField]);\n\n if (isContinuous) {\n const domainNum = domain.map((n: any) => n * 1);\n return domain.length ? [minInArray(domainNum), maxInArray(domainNum)] : [-Infinity, Infinity];\n }\n\n return domain;\n }\n\n protected _initEvent() {\n this._initCommonEvent();\n }\n\n protected _initData() {\n const dataCollection: any[] = [];\n const stateFields: string[] = [];\n const valueFields: string[] = [];\n let hasValidateValueField = false;\n\n if (this._relatedAxisComponent) {\n const originalStateFields = {};\n eachSeries(\n this._regions,\n s => {\n // 如果副轴的类型是time或band,则无法进行数据统计\n const xAxisHelper =\n s.coordinate === 'cartesian'\n ? (s as ICartesianSeries).getXAxisHelper()\n : s.coordinate === 'polar'\n ? (s as IPolarSeries).angleAxisHelper\n : null;\n const yAxisHelper =\n s.coordinate === 'cartesian'\n ? (s as ICartesianSeries).getYAxisHelper()\n : s.coordinate === 'polar'\n ? (s as IPolarSeries).radiusAxisHelper\n : null;\n if (!xAxisHelper || !yAxisHelper) {\n return;\n }\n const stateAxisHelper =\n xAxisHelper.getAxisId() === this._relatedAxisComponent.id\n ? xAxisHelper\n : yAxisHelper.getAxisId() === this._relatedAxisComponent.id\n ? yAxisHelper\n : this._isHorizontal\n ? xAxisHelper\n : yAxisHelper;\n const valueAxisHelper = stateAxisHelper === xAxisHelper ? yAxisHelper : xAxisHelper;\n const isValidateValueAxis = isContinuous(valueAxisHelper.getScale(0).type);\n\n if (isValidateValueAxis) {\n hasValidateValueField = true;\n }\n\n dataCollection.push(s.getRawData());\n // 这里获取原始的spec中的xField和yField,而非经过stack处理后的fieldX和fieldY,原因如下:\n // 1. dataFilterComputeDomain处理时拿到的viewData中没有__VCHART_STACK_START等属性,也就是还没处理\n // 2. datazoom计算的是原始的value值,如果要根据stack后的数据来算,则需要__VCHART_STACK_END - __VCHART_STACK_START\n const seriesSpec = s.getSpec();\n\n const xFields = array(seriesSpec.xField);\n const yFields = array(seriesSpec.yField);\n const xField = s.coordinate === 'cartesian' ? xFields[0] : seriesSpec.angleField ?? seriesSpec.categoryField;\n const yField = s.coordinate === 'cartesian' ? yFields[0] : seriesSpec.radiusField ?? seriesSpec.valueField;\n\n originalStateFields[s.id] =\n s.type === 'link' ? 'from_xField' : stateAxisHelper === xAxisHelper ? xField : yField;\n\n stateFields.push(originalStateFields[s.id]);\n if (this._valueField) {\n const valueField = s.type === 'link' ? 'from_yField' : valueAxisHelper === xAxisHelper ? xField : yField;\n valueFields.push(isValidateValueAxis ? valueField : null);\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n\n this._originalStateFields = originalStateFields;\n } else {\n hasValidateValueField = isNil(this._spec.valueField);\n eachSeries(\n this._regions,\n s => {\n dataCollection.push(s.getRawData());\n\n stateFields.push(this._field);\n if (this._valueField) {\n valueFields.push(this._spec.valueField);\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n const { dataSet } = this._option;\n registerDataSetInstanceParser(dataSet, 'dataview', dataViewParser);\n registerDataSetInstanceTransform(dataSet, 'dataFilterComputeDomain', dataFilterComputeDomain);\n const data = new DataView(dataSet, { name: `${this.type}_${this.id}_data` });\n data.transform(\n {\n type: 'dataFilterComputeDomain',\n options: {\n input: {\n dataCollection: dataCollection,\n stateFields,\n valueFields\n },\n output: {\n stateField: this._stateField,\n valueField: this._valueField\n }\n }\n },\n false\n );\n\n this._data = new CompilableData(this._option, data);\n data.reRunAllTransform();\n dataSet.multipleDataViewAddListener(dataCollection, 'change', this._handleDataCollectionChange.bind(this));\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n // interaction相关\n if (this._spec.roamZoom === true || this._spec.roamZoom) {\n this._zoomAttr = merge({}, this._zoomAttr, this._spec.roamZoom);\n } else {\n this._zoomAttr.enable = false;\n }\n\n if (this._spec.roamDrag === true || this._spec.roamDrag) {\n this._dragAttr = merge({}, this._dragAttr, this._spec.roamDrag);\n } else {\n this._dragAttr.enable = false;\n }\n\n if (this._spec.roamScroll === true || this._spec.roamScroll) {\n this._scrollAttr = merge({}, this._scrollAttr, this._spec.roamScroll);\n } else {\n this._scrollAttr.enable = false;\n }\n\n // style相关\n this._field = this._spec.field;\n this._width = this._computeWidth();\n this._height = this._computeHeight();\n this._visible = this._spec.visible ?? true;\n }\n\n protected _statePointToData(state: number) {\n const scale = this._stateScale;\n let range = scale.range();\n\n if (this._isReverse()) {\n range = range.slice().reverse();\n }\n const posInRange: number = range[0] + (range[1] - range[0]) * state;\n\n return scale.invert(posInRange);\n }\n\n protected _dataToStatePoint(data: number | string) {\n const scale = this._stateScale;\n const pos = scale.scale(data);\n let range = scale.range();\n\n if (!this._isHorizontal && isContinuous(scale.type)) {\n range = range.slice().reverse();\n }\n\n return (pos - range[0]) / (range[1] - range[0]);\n }\n\n protected _modeCheck(statePoint: 'start' | 'end', mode: string): any {\n if (statePoint === 'start') {\n return (mode === 'percent' && this._spec.start) || (mode === 'value' && this._spec.startValue);\n }\n return (mode === 'percent' && this._spec.end) || (mode === 'value' && this._spec.endValue);\n }\n\n protected _setStateFromSpec() {\n this._auto = !!this._spec.auto;\n let start;\n let end;\n if (this._spec.rangeMode) {\n const [startMode, endMode] = this._spec.rangeMode;\n // 只有mode与配置相符时,才会生效\n // 比如rangeMode为['value', 'percent'],那么start为dataValue, end为[0, 1]\n if (this._modeCheck('start', startMode) && this._modeCheck('end', endMode)) {\n start = startMode === 'percent' ? this._spec.start : this._dataToStatePoint(this._spec.startValue);\n end = endMode === 'percent' ? this._spec.end : this._dataToStatePoint(this._spec.endValue);\n }\n } else {\n start = this._spec.start\n ? this._spec.start\n : this._spec.startValue\n ? this._dataToStatePoint(this._spec.startValue)\n : 0;\n end = this._spec.end ? this._spec.end : this._spec.endValue ? this._dataToStatePoint(this._spec.endValue) : 1;\n }\n this._startValue = this._statePointToData(start);\n this._endValue = this._statePointToData(end);\n this._start = start;\n this._end = end;\n this._minSpan = this._spec.minSpan ?? 0;\n this._maxSpan = this._spec.maxSpan ?? 1;\n if (isContinuous(this._stateScale.type) && this._stateScale.domain[0] !== this._stateScale.domain[1]) {\n if (this._spec.minValueSpan) {\n this._minSpan = this._spec.minValueSpan / (this._stateScale.domain()[1] - this._stateScale.domain()[0]);\n }\n if (this._spec.maxValueSpan) {\n this._maxSpan = this._spec.maxValueSpan / (this._stateScale.domain()[1] - this._stateScale.domain()[0]);\n }\n }\n this._minSpan = Math.max(0, this._minSpan);\n this._maxSpan = Math.min(this._maxSpan, 1);\n\n // eslint-disable-next-line max-len\n if (\n (!this._relatedAxisComponent || this._filterMode !== IFilterMode.axis) &&\n (this._start !== 0 || this._end !== 1)\n ) {\n this._newDomain = this._parseDomainFromState(this._startValue, this._endValue);\n }\n }\n\n private _parseFieldOfSeries(s: ISeries) {\n return this._originalStateFields?.[s.id];\n }\n\n protected _initStateScale() {\n const defaultRange = [0, 1];\n\n if (this._relatedAxisComponent) {\n const scale = (this._relatedAxisComponent as CartesianAxis).getScale();\n const isContinuousScale = isContinuous(scale.type);\n const domain = this._computeDomainOfStateScale(isContinuousScale);\n\n this._stateScale = scale.clone();\n if (isContinuousScale) {\n const domainNum = domain.map((n: any) => n * 1);\n this._stateScale\n .domain(domain.length ? [minInArray(domainNum), maxInArray(domainNum)] : [0, 1], true)\n .range(defaultRange);\n } else {\n this._stateScale.domain(domain, true).range(defaultRange);\n }\n } else {\n this._stateScale = new BandScale();\n this._stateScale.domain(this._computeDomainOfStateScale(), true).range(defaultRange);\n }\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n // 添加 transform\n this._addTransformToSeries();\n // 增加datazoom 数据统计\n // 只有在轴没有被设置数据时才有用\n // this.addZoomStatistics();\n\n if (this._start !== 0 || this._end !== 1) {\n this.effect.onZoomChange();\n }\n }\n\n protected _addTransformToSeries() {\n if (!this._relatedAxisComponent || this._filterMode !== IFilterMode.axis) {\n registerDataSetInstanceTransform(this._option.dataSet, 'dataFilterWithNewDomain', dataFilterWithNewDomain);\n\n eachSeries(\n this._regions,\n s => {\n s.addViewDataFilter({\n type: 'dataFilterWithNewDomain',\n options: {\n getNewDomain: () => this._newDomain,\n field: () => {\n return this._field ?? this._parseFieldOfSeries(s);\n },\n isContinuous: () => isContinuous(this._stateScale.type)\n },\n level: TransformLevel.dataZoomFilter\n });\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n }\n\n /** LifeCycle API**/\n onRender(ctx: any): void {\n // do nothing\n }\n\n /**\n * updateSpec\n */\n _compareSpec(spec: AdaptiveSpec, prevSpec: AdaptiveSpec) {\n const result = super._compareSpec(spec, prevSpec);\n if (!result.reMake && !isEqual(prevSpec, spec)) {\n result.reRender = true;\n result.reMake = true;\n }\n\n return result;\n }\n\n reInit(spec?: AdaptiveSpec) {\n super.reInit(spec);\n\n this._marks.forEach(g => {\n (g).getMarks().forEach(m => {\n this.initMarkStyleWithSpec(m, this._spec[m.name]);\n });\n });\n }\n\n changeRegions() {\n // do nothing\n }\n protected update(ctx: IComponentOption) {\n // do nothing\n }\n protected resize(ctx: IComponentOption) {\n // do nothing\n }\n\n protected _parseDomainFromState(startValue: number | string, endValue: number | string) {\n if (isContinuous(this._stateScale.type)) {\n return [Math.min(endValue as number, startValue as number), Math.max(endValue as number, startValue as number)];\n }\n const allDomain = this._stateScale.domain();\n const startIndex = allDomain.indexOf(startValue);\n const endIndex = allDomain.indexOf(endValue);\n return allDomain.slice(Math.min(startIndex, endIndex), Math.max(startIndex, endIndex) + 1);\n }\n\n protected _handleStateChange = (startValue: number, endValue: number, tag?: string) => {\n this._startValue = startValue;\n this._endValue = endValue;\n\n this._newDomain = this._parseDomainFromState(this._startValue, this._endValue);\n\n this.effect.onZoomChange?.(tag);\n return true;\n };\n\n protected _handleChartZoom = (params: { zoomDelta: number; zoomX?: number; zoomY?: number }) => {\n if (!this._activeRoam) {\n return;\n }\n\n const { zoomDelta, zoomX, zoomY } = params;\n const { x, y } = this._regions[0].getLayoutStartPoint();\n const { width, height } = this._regions[0].getLayoutRect();\n\n const delta = Math.abs(this._start - this._end);\n const zoomRate = (this._spec.roamZoom as IRoamZoomSpec)?.rate ?? 1;\n // zoomDelta > 1表示放大, zoomDelta < 1表示缩小\n if (delta >= 1 && zoomDelta < 1) {\n return;\n }\n if (delta <= 0.01 && zoomDelta > 1) {\n return;\n }\n const focusLoc = this._isHorizontal ? zoomX : zoomY;\n const totalValue = delta * (zoomDelta - 1) * zoomRate;\n let startValue = totalValue / 2;\n let endValue = totalValue / 2;\n if (focusLoc) {\n const startLoc = this._isHorizontal ? x : y;\n const endLoc = this._isHorizontal ? width : height;\n startValue = (Math.abs(startLoc - focusLoc) / Math.abs(endLoc - startLoc)) * totalValue;\n endValue = (Math.abs(endLoc - focusLoc) / Math.abs(endLoc - startLoc)) * totalValue;\n }\n const start = clamp(this._start + startValue, 0, 1);\n const end = clamp(this._end - endValue, 0, 1);\n\n this._handleChange(Math.min(start, end), Math.max(start, end), true);\n };\n\n protected _handleChartScroll = (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => {\n if (!this._activeRoam) {\n return false;\n }\n const { scrollX, scrollY } = params;\n let value = this._isHorizontal ? scrollX : scrollY;\n // 判断这次是否应该要滚动,最少\n const active = this._isHorizontal ? abs(scrollX / scrollY) >= 0.5 : abs(scrollY / scrollX) >= 0.5;\n if (!this._scrollAttr.reverse) {\n value = -value;\n }\n\n if (active) {\n this._handleChartMove(value, this._scrollAttr.rate ?? 1);\n }\n return active;\n };\n\n protected _handleChartDrag = (delta: [number, number], e: BaseEventParams['event']) => {\n if (!this._activeRoam) {\n return;\n }\n const [dx, dy] = delta;\n let value = this._isHorizontal ? dx : dy;\n if (this._dragAttr.reverse) {\n value = -value;\n }\n\n this._handleChartMove(value, this._dragAttr.rate ?? 1);\n };\n\n protected _handleChartMove = (value: number, rate: number) => {\n const totalValue = this._isHorizontal ? this.getLayoutRect().width : this.getLayoutRect().height;\n if (Math.abs(value) >= 1e-6) {\n if (value > 0 && this._end < 1) {\n const moveDelta = Math.min(1 - this._end, value / totalValue) * rate;\n this._handleChange(this._start + moveDelta, this._end + moveDelta, true);\n } else if (value < 0 && this._start > 0) {\n const moveDelta = Math.max(-this._start, value / totalValue) * rate;\n this._handleChange(this._start + moveDelta, this._end + moveDelta, true);\n }\n }\n };\n\n protected _initCommonEvent() {\n const delayType: IDelayType = this._spec?.delayType ?? 'throttle';\n const delayTime = isValid(this._spec?.delayType) ? this._spec?.delayTime ?? 30 : 0;\n const realTime = this._spec?.realTime ?? true;\n const option = { delayType, delayTime, realTime };\n if (this._zoomAttr.enable) {\n (this as unknown as IZoomable).initZoomEventOfRegions(this._regions, null, this._handleChartZoom, option);\n }\n if (this._scrollAttr.enable) {\n (this as unknown as IZoomable).initScrollEventOfRegions(this._regions, null, this._handleChartScroll, option);\n }\n if (this._dragAttr.enable) {\n (this as unknown as IZoomable).initDragEventOfRegions(this._regions, null, this._handleChartDrag, option);\n }\n }\n\n updateLayoutAttribute(): void {\n // create or update component\n if (this._visible) {\n this._createOrUpdateComponent();\n }\n super.updateLayoutAttribute();\n }\n\n onLayoutStart(layoutRect: IRect, viewRect: ILayoutRect, ctx: any): void {\n super.onLayoutStart(layoutRect, viewRect, ctx);\n const isShown = this._autoUpdate(layoutRect);\n const sizeKey = this._isHorizontal ? 'height' : 'width';\n this.layout.setLayoutRect(\n {\n [sizeKey]: isShown ? this[`_${sizeKey}`] : 0\n },\n {\n [sizeKey]: AttributeLevel.Built_In\n }\n );\n }\n\n /**\n * bounds预计算\n * @param rect\n * @returns\n */\n getBoundsInRect(rect: ILayoutRect): IBoundsLike {\n const result: IBoundsLike = { x1: this.getLayoutStartPoint().x, y1: this.getLayoutStartPoint().y, x2: 0, y2: 0 };\n\n if (this._isHorizontal) {\n result.y2 = result.y1 + this._height;\n result.x2 = result.x1 + rect.width;\n } else {\n result.x2 = result.x1 + this._width;\n result.y2 = result.y1 + rect.height;\n }\n return result;\n }\n\n hide() {\n this._component?.hideAll();\n }\n\n show() {\n this._component?.showAll();\n }\n\n protected _getAxisBandSize(axisSpec?: ICartesianBandAxisSpec) {\n const bandSize = axisSpec?.bandSize;\n const maxBandSize = axisSpec?.maxBandSize;\n const minBandSize = axisSpec?.minBandSize;\n if (bandSize || minBandSize || maxBandSize) {\n return { bandSize, maxBandSize, minBandSize };\n }\n return undefined;\n }\n\n protected _autoUpdate(rect?: ILayoutRect): boolean {\n if (!this._auto) {\n this._cacheVisibility = undefined;\n return true;\n }\n\n const axis = this._relatedAxisComponent as CartesianAxis;\n const axisSpec = axis?.getSpec() as ICartesianBandAxisSpec | undefined;\n const axisScale = axis?.getScale() as IBandLikeScale;\n const bandSizeResult = this._getAxisBandSize(axisSpec);\n\n if (\n isDiscrete(axisScale.type) &&\n rect?.height === this._cacheRect?.height &&\n rect?.width === this._cacheRect?.width &&\n this._fixedBandSize === bandSizeResult?.bandSize\n ) {\n return this._cacheVisibility;\n }\n\n let isShown = true;\n if (this._isHorizontal && rect?.width !== this._cacheRect?.width) {\n axisScale.range(axis.getInverse() ? [rect.width, 0] : [0, rect.width]);\n } else if (rect?.height !== this._cacheRect?.height) {\n axisScale.range(axis.getInverse() ? [0, rect.height] : [rect.height, 0]);\n }\n\n this._cacheRect = {\n width: rect?.width,\n height: rect?.height\n };\n this._fixedBandSize = bandSizeResult?.bandSize;\n\n if (isDiscrete(axisScale.type)) {\n if (bandSizeResult && (this._start || this._end)) {\n this._updateRangeFactor(null, 'auto');\n }\n const [start, end] = axisScale.rangeFactor() ?? [];\n if (isNil(start) && isNil(end)) {\n isShown = false;\n } else {\n isShown = !(start === 0 && end === 1);\n }\n } else {\n const [start, end] = axisScale.rangeFactor() ?? [this._start, this._end];\n isShown = !(start === 0 && end === 1);\n }\n this.setStartAndEnd(this._start, this._end);\n if (isShown) {\n this.show();\n } else {\n this.hide();\n }\n this._cacheVisibility = isShown;\n return isShown;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._component] as unknown as IGroup[];\n }\n}\n\nmixin(DataFilterBaseComponent, Zoomable);\n","export const DEFAULT_HANDLER_PATH = \"M -0.0544 0.25 C -0.0742 0.25 -0.0901 0.234 -0.0901 0.2143 L -0.0901 -0.1786 C -0.0901 -0.1983 -0.0742 -0.2143 -0.0544 -0.2143 L -0.0187 -0.2143 L -0.0187 -0.5 L 0.017 -0.5 L 0.017 -0.2143 L 0.0527 -0.2143 C 0.0724 -0.2143 0.0884 -0.1983 0.0884 -0.1786 L 0.0884 0.2143 C 0.0884 0.234 0.0724 0.25 0.0527 0.25 L 0.017 0.25 L 0.017 0.5 L -0.0187 0.5 L -0.0187 0.25 L -0.0544 0.25 Z M -0.0187 -0.1429 L -0.0544 -0.1429 L -0.0544 0.1786 L -0.0187 0.1786 L -0.0187 -0.1429 Z M 0.0527 -0.1429 L 0.017 -0.1429 L 0.017 0.1786 L 0.0527 0.1786 L 0.0527 -0.1429 Z\";\n\nexport const DEFAULT_DATA_ZOOM_ATTRIBUTES = {\n orient: \"bottom\",\n showDetail: \"auto\",\n brushSelect: !0,\n zoomLock: !1,\n minSpan: 0,\n maxSpan: 1,\n delayType: \"throttle\",\n delayTime: 0,\n realTime: !0,\n backgroundStyle: {\n fill: \"white\",\n stroke: \"#D1DBEE\",\n lineWidth: 1,\n cornerRadius: 2\n },\n dragMaskStyle: {\n fill: \"#B0C8F9\",\n fillOpacity: .2\n },\n backgroundChartStyle: {\n area: {\n visible: !0,\n stroke: \"#D1DBEE\",\n lineWidth: 1,\n fill: \"#F6F8FC\"\n },\n line: {\n visible: !0,\n stroke: \"#D1DBEE\",\n lineWidth: 1\n }\n },\n selectedBackgroundStyle: {\n fill: \"#B0C8F9\",\n fillOpacity: .5\n },\n selectedBackgroundChartStyle: {\n area: {\n visible: !0,\n stroke: \"#B0C8F9\",\n lineWidth: 1,\n fill: \"#fbb934\"\n },\n line: {\n visible: !0,\n stroke: \"#fbb934\",\n lineWidth: 1\n }\n },\n middleHandlerStyle: {\n visible: !0,\n background: {\n size: 8,\n style: {\n fill: \"white\",\n stroke: \"#B0C8F9\",\n cornerRadius: 2\n }\n },\n icon: {\n size: 6,\n fill: \"white\",\n stroke: \"#B0C8F9\",\n symbolType: \"M 0.3 -0.5 C 0.41 -0.5 0.5 -0.41 0.5 -0.3 C 0.5 -0.3 0.5 0.3 0.5 0.3 C 0.5 0.41 0.41 0.5 0.3 0.5 C 0.3 0.5 -0.3 0.5 -0.3 0.5 C -0.41 0.5 -0.5 0.41 -0.5 0.3 C -0.5 0.3 -0.5 -0.3 -0.5 -0.3 C -0.5 -0.41 -0.41 -0.5 -0.3 -0.5 C -0.3 -0.5 0.3 -0.5 0.3 -0.5 Z\",\n lineWidth: .5\n }\n },\n startHandlerStyle: {\n visible: !0,\n triggerMinSize: 0,\n symbolType: DEFAULT_HANDLER_PATH,\n fill: \"white\",\n stroke: \"#B0C8F9\",\n lineWidth: .5\n },\n endHandlerStyle: {\n visible: !0,\n triggerMinSize: 0,\n symbolType: DEFAULT_HANDLER_PATH,\n fill: \"white\",\n stroke: \"#B0C8F9\",\n lineWidth: .5\n },\n startTextStyle: {\n padding: 4,\n textStyle: {\n fontSize: 10,\n fill: \"#6F6F6F\"\n }\n },\n endTextStyle: {\n padding: 4,\n textStyle: {\n fontSize: 10,\n fill: \"#6F6F6F\"\n }\n }\n};\n\nexport const DEFAULT_HANDLER_ATTR_MAP = {\n horizontal: {\n angle: 0,\n strokeBoundsBuffer: 0,\n boundsPadding: 2,\n pickMode: \"imprecise\",\n cursor: \"ew-resize\"\n },\n vertical: {\n angle: Math.PI / 180 * 90,\n cursor: \"ns-resize\",\n boundsPadding: 2,\n pickMode: \"imprecise\",\n strokeBoundsBuffer: 0\n }\n};","import type {\n IAreaGraphicAttribute,\n ICurveType,\n IGroupGraphicAttribute,\n ILineGraphicAttribute,\n IRectGraphicAttribute,\n ISymbolGraphicAttribute\n} from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\nimport type { IDelayType, OrientType } from '../interface';\nimport type { TagAttributes } from '../tag';\n\nexport enum DataZoomActiveTag {\n startHandler = 'startHandler',\n endHandler = 'endHandler',\n middleHandler = 'middleHandler',\n background = 'background'\n}\n\nexport interface DataZoomAttributes extends IGroupGraphicAttribute {\n /**\n * DataZoom位置\n */\n position: IPointLike;\n /**\n * DataZoom 尺寸\n */\n size: {\n width: number;\n height: number;\n };\n /**\n * DataZoom方向\n * @default 'bottom'\n */\n orient?: OrientType;\n\n /**\n * 起点配置(比例):范围[0, 1]\n * @default 0\n */\n start?: number;\n\n /**\n * 终点配置(比例):范围[0, 1]\n * @default 1\n */\n end?: number;\n\n /**\n * 背景样式\n */\n backgroundStyle?: IRectGraphicAttribute;\n\n /**\n * 起点手柄样式\n */\n startHandlerStyle?: {\n /**\n * 热区最小size\n * 取handler size 和 min size 的最大值\n */\n triggerMinSize?: number;\n } & ISymbolGraphicAttribute;\n\n /**\n * 中间手柄样式\n */\n middleHandlerStyle?: {\n /**\n * 是否显示\n * @default false\n */\n visible?: boolean;\n /**\n * 中间手柄的中间symbol样式\n */\n icon?: ISymbolGraphicAttribute;\n /**\n * 中间手柄的背景rect样式\n */\n background?: {\n style?: IRectGraphicAttribute;\n size?: number;\n };\n };\n\n /**\n * 终点手柄样式\n */\n endHandlerStyle?: {\n /**\n * 热区最小size\n * 取handler size 和 min size 的最大值\n */\n triggerMinSize?: number;\n } & ISymbolGraphicAttribute;\n\n /**\n * 起点文字样式\n */\n startTextStyle?: {\n formatMethod?: (text: string | number) => (string | number) | (string | number)[];\n } & Partial;\n\n /**\n * 终点文字样式\n */\n endTextStyle?: {\n formatMethod?: (text: string | number) => (string | number) | (string | number)[];\n } & Partial;\n\n /**\n * 选中背景样式\n */\n selectedBackgroundStyle?: IRectGraphicAttribute;\n\n /**\n * 拖拽进行中的选中背景样式\n */\n dragMaskStyle?: IRectGraphicAttribute;\n\n /**\n * 背景图表样式\n */\n backgroundChartStyle?: {\n line?: {\n visible?: boolean;\n } & ILineGraphicAttribute;\n area?: {\n /**\n * @default true\n */\n visible?: boolean;\n curveType?: ICurveType;\n } & Omit;\n };\n\n /**\n * 选中的背景图表样式\n */\n selectedBackgroundChartStyle?: {\n line?: {\n /**\n * @default true\n */\n visible?: boolean;\n } & ILineGraphicAttribute;\n area?: {\n /**\n * @default true\n */\n visible?: boolean;\n curveType?: ICurveType;\n } & Omit;\n };\n\n /**\n * 是否显示startText和endText\n * @default 'auto' 鼠标hover在选中区域时才显示startText和endText\n */\n showDetail?: 'auto' | boolean;\n\n /**\n * 是否开启框选, 如果不开启则支持selectedBackground拖拽(框选和拖拽两者互斥)\n * @default true\n */\n brushSelect?: boolean;\n\n /**\n * 是否锁定选择区域(或叫做数据窗口)的大小\n */\n zoomLock?: boolean;\n\n /**\n * 用于限制窗口大小的最小值, [0, 1]\n * @default 0\n */\n minSpan?: number;\n\n /**\n * 用于限制窗口大小的最大值, [0, 1]\n * @default 1\n */\n maxSpan?: number;\n\n /**\n * 事件触发延迟类型\n * @default 'throttle'\n */\n delayType?: IDelayType;\n\n /**\n * 事件触发延迟时长\n * @default 0\n */\n delayTime?: number;\n /**\n * 是否在操作时动态更新视图\n * @default true\n */\n realTime?: boolean;\n\n /**\n * 绘制背景图表的数据 & 映射函数\n */\n previewData?: any[];\n previewPointsX?: (datum: any) => number;\n previewPointsY?: (datum: any) => number;\n previewPointsX1?: (datum: any) => number;\n previewPointsY1?: (datum: any) => number;\n updateStateCallback?: (start: number, end: number) => any;\n /**\n * 关闭交互效果\n * @default false\n */\n disableTriggerEvent?: boolean;\n}\n","import type { FederatedPointerEvent, IArea, IGroup, ILine, IRect, ISymbol, INode } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { vglobal } from '@visactor/vrender-core';\nimport type { IBoundsLike, IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { Bounds, array, clamp, debounce, isFunction, isValid, merge, throttle } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { TagAttributes } from '../tag';\n// eslint-disable-next-line no-duplicate-imports\nimport { Tag } from '../tag';\nimport { DEFAULT_DATA_ZOOM_ATTRIBUTES, DEFAULT_HANDLER_ATTR_MAP } from './config';\nimport { DataZoomActiveTag } from './type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DataZoomAttributes } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadDataZoomComponent } from './register';\n\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\nloadDataZoomComponent();\nexport class DataZoom extends AbstractComponent> {\n name = 'dataZoom';\n static defaultAttributes = DEFAULT_DATA_ZOOM_ATTRIBUTES;\n\n private _isHorizontal: boolean;\n\n private _background!: IRect;\n\n private _container!: IGroup;\n\n /** 手柄 */\n private _startHandlerMask!: IRect;\n private _startHandler!: ISymbol;\n private _middleHandlerSymbol!: ISymbol;\n private _middleHandlerRect!: IRect;\n private _endHandlerMask!: IRect;\n private _endHandler!: ISymbol;\n private _selectedBackground!: IRect;\n private _dragMask!: IRect;\n private _startText!: Tag;\n private _endText!: Tag;\n private _startValue!: string | number;\n private _endValue!: string | number;\n private _showText!: boolean;\n\n /** 背景图表 */\n private _previewData: any[] = [];\n private _previewGroup!: IGroup;\n private _previewLine!: ILine;\n private _previewArea!: IArea;\n private _selectedPreviewGroupClip!: IGroup;\n private _selectedPreviewGroup!: IGroup;\n private _selectedPreviewLine!: ILine;\n private _selectedPreviewArea!: IArea;\n\n /** 交互状态 */\n protected _activeTag!: DataZoomActiveTag;\n protected _activeItem!: any;\n protected _activeState = false;\n protected _activeCache: {\n startPos: IPointLike;\n lastPos: IPointLike;\n } = {\n startPos: { x: 0, y: 0 },\n lastPos: { x: 0, y: 0 }\n };\n protected _layoutCache: {\n attPos: 'x' | 'y';\n attSize: 'width' | 'height';\n max: number;\n } = {\n attPos: 'x',\n attSize: 'width',\n max: 0\n };\n /** 起始状态 */\n readonly state = {\n start: 0,\n end: 1\n };\n protected _spanCache: number;\n\n /** 回调函数 */\n private _previewPointsX!: (datum: any) => number;\n private _previewPointsY!: (datum: any) => number;\n private _previewPointsX1!: (datum: any) => number;\n private _previewPointsY1!: (datum: any) => number;\n private _statePointToData: (state: number) => any = state => state;\n private _layoutAttrFromConfig: any; // 用于缓存\n\n setPropsFromAttrs() {\n const { start, end, orient, previewData, previewPointsX, previewPointsY, previewPointsX1, previewPointsY1 } = this\n .attribute as DataZoomAttributes;\n start && (this.state.start = start);\n end && (this.state.end = end);\n const { width, height } = this.getLayoutAttrFromConfig();\n this._spanCache = this.state.end - this.state.start;\n this._isHorizontal = orient === 'top' || orient === 'bottom';\n this._layoutCache.max = this._isHorizontal ? width : height;\n this._layoutCache.attPos = this._isHorizontal ? 'x' : 'y';\n this._layoutCache.attSize = this._isHorizontal ? 'width' : 'height';\n previewData && (this._previewData = previewData);\n isFunction(previewPointsX) && (this._previewPointsX = previewPointsX);\n isFunction(previewPointsY) && (this._previewPointsY = previewPointsY);\n isFunction(previewPointsX1) && (this._previewPointsX1 = previewPointsX1);\n isFunction(previewPointsY1) && (this._previewPointsY1 = previewPointsY1);\n }\n\n constructor(attributes: DataZoomAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, DataZoom.defaultAttributes, attributes));\n const { position, showDetail } = attributes;\n // 这些属性在事件交互过程中会改变,所以不能在setAttrs里面动态更改\n this._activeCache.startPos = position;\n this._activeCache.lastPos = position;\n if (showDetail === 'auto') {\n this._showText = false as boolean;\n } else {\n this._showText = showDetail as boolean;\n }\n this.setPropsFromAttrs();\n }\n\n setAttributes(params: Partial>, forceUpdateTag?: boolean): void {\n super.setAttributes(params, forceUpdateTag);\n this.setPropsFromAttrs();\n }\n\n protected bindEvents(): void {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n const { showDetail, brushSelect } = this.attribute as DataZoomAttributes;\n // 拖拽开始\n if (this._startHandlerMask) {\n this._startHandlerMask.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'start') as unknown as EventListener\n );\n }\n if (this._endHandlerMask) {\n this._endHandlerMask.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'end') as unknown as EventListener\n );\n }\n if (this._middleHandlerSymbol) {\n this._middleHandlerSymbol.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'middleSymbol') as unknown as EventListener\n );\n }\n if (this._middleHandlerRect) {\n this._middleHandlerRect.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'middleRect') as unknown as EventListener\n );\n }\n\n const selectedTag = brushSelect ? 'background' : 'middleRect';\n if (this._selectedBackground) {\n this._selectedBackground.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, selectedTag) as unknown as EventListener\n );\n }\n if (brushSelect && this._background) {\n this._background.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'background') as unknown as EventListener\n );\n }\n if (brushSelect && this._previewGroup) {\n this._previewGroup.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'background') as unknown as EventListener\n );\n }\n if (this._selectedPreviewGroup) {\n this._selectedPreviewGroup.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, selectedTag) as unknown as EventListener\n );\n }\n // 拖拽结束\n (this as unknown as IGroup).addEventListener('pointerup', this._onHandlerPointerUp as EventListener);\n (this as unknown as IGroup).addEventListener('pointerupoutside', this._onHandlerPointerUp as EventListener);\n // hover\n if (showDetail === 'auto') {\n (this as unknown as IGroup).addEventListener('pointerenter', this._onHandlerPointerEnter as EventListener);\n (this as unknown as IGroup).addEventListener('pointerleave', this._onHandlerPointerLeave as EventListener);\n }\n }\n\n /** dragMask size边界处理 */\n protected dragMaskSize() {\n const { position } = this.attribute as DataZoomAttributes;\n const { attPos, max } = this._layoutCache;\n if (this._activeCache.lastPos[attPos] - position[attPos] > max) {\n return max + position[attPos] - this._activeCache.startPos[attPos];\n } else if (this._activeCache.lastPos[attPos] - position[attPos] < 0) {\n return position[attPos] - this._activeCache.startPos[attPos];\n }\n return this._activeCache.lastPos[attPos] - this._activeCache.startPos[attPos];\n }\n\n /** state 边界处理 */\n protected setStateAttr(start: number, end: number, shouldRender: boolean) {\n const { zoomLock = false, minSpan = 0, maxSpan = 1 } = this.attribute as DataZoomAttributes;\n const span = end - start;\n if (span !== this._spanCache && (zoomLock || span < minSpan || span > maxSpan)) {\n return;\n }\n this._spanCache = span;\n this.state.start = start;\n this.state.end = end;\n shouldRender && this.setAttributes({ start, end });\n }\n\n /** 事件系统坐标转换为stage坐标 */\n protected eventPosToStagePos(e: FederatedPointerEvent) {\n const { x, y } = vglobal.mapToCanvasPoint(e);\n return {\n x: x - (this.stage?.x || 0),\n y: y - (this.stage?.y || 0)\n };\n }\n\n /**\n * 拖拽开始事件\n * @description 开启activeState + 通过tag判断事件在哪个元素上触发 并 更新交互坐标\n */\n private _onHandlerPointerDown = (e: FederatedPointerEvent, tag: string) => {\n e.stopPropagation();\n if (tag === 'start') {\n this._activeTag = DataZoomActiveTag.startHandler;\n this._activeItem = this._startHandlerMask;\n } else if (tag === 'end') {\n this._activeTag = DataZoomActiveTag.endHandler;\n this._activeItem = this._endHandlerMask;\n } else if (tag === 'middleRect') {\n this._activeTag = DataZoomActiveTag.middleHandler;\n this._activeItem = this._middleHandlerRect;\n } else if (tag === 'middleSymbol') {\n this._activeTag = DataZoomActiveTag.middleHandler;\n this._activeItem = this._middleHandlerSymbol;\n } else if (tag === 'background') {\n this._activeTag = DataZoomActiveTag.background;\n this._activeItem = this._background;\n }\n this._activeState = true;\n this._activeCache.startPos = this.eventPosToStagePos(e);\n this._activeCache.lastPos = this.eventPosToStagePos(e);\n\n // 拖拽开始时监听事件\n if (vglobal.env === 'browser') {\n // 拖拽时\n vglobal.addEventListener('pointermove', this._onHandlerPointerMove, { capture: true });\n // 拖拽结束\n vglobal.addEventListener('pointerup', this._onHandlerPointerUp.bind(this) as EventListener);\n }\n // 拖拽时\n (this as unknown as IGroup).addEventListener('pointermove', this._onHandlerPointerMove, { capture: true });\n };\n\n /**\n * 拖拽进行事件\n * @description 分为以下四种情况:\n * 1. 在背景 or 背景图表上拖拽 (activeTag === 'background'): 改变lastPos => dragMask的宽 or 高被改变\n * 2. 在middleHandler上拖拽 (activeTag === 'middleHandler'): 改变lastPos、start & end + 边界处理: 防止拖拽结果超出背景 => 所有handler的位置被改变\n * 3. 在startHandler上拖拽 (activeTag === 'startHandler'): 改变lastPos、start & end + 边界处理: startHandler和endHandler交换 => 所有handler的位置被改变\n * 4. 在endHandler上拖拽,同上\n */\n private _onHandlerPointerMove = delayMap[this.attribute.delayType]((e: FederatedPointerEvent) => {\n e.stopPropagation();\n const { start: startAttr, end: endAttr, brushSelect, realTime = true } = this.attribute as DataZoomAttributes;\n const pos = this.eventPosToStagePos(e);\n const { attPos, max } = this._layoutCache;\n const dis = (pos[attPos] - this._activeCache.lastPos[attPos]) / max;\n\n let { start, end } = this.state;\n // this._activeState= false;\n if (this._activeState) {\n // if (this._activeTag === DataZoomActiveTag.background) {\n // } else\n if (this._activeTag === DataZoomActiveTag.middleHandler) {\n this.moveZoomWithMiddle((this.state.start + this.state.end) / 2 + dis);\n } else if (this._activeTag === DataZoomActiveTag.startHandler) {\n if (start + dis > end) {\n start = end;\n end = start + dis;\n this._activeTag = DataZoomActiveTag.endHandler;\n } else {\n start = start + dis;\n }\n } else if (this._activeTag === DataZoomActiveTag.endHandler) {\n if (end + dis < start) {\n end = start;\n start = end + dis;\n this._activeTag = DataZoomActiveTag.startHandler;\n } else {\n end = end + dis;\n }\n }\n this._activeCache.lastPos = pos;\n brushSelect && this.renderDragMask();\n }\n start = Math.min(Math.max(start, 0), 1);\n end = Math.min(Math.max(end, 0), 1);\n\n // 避免attributes相同时, 重复渲染\n if (startAttr !== start || endAttr !== end) {\n this.setStateAttr(start, end, true);\n this._dispatchEvent('change', {\n start,\n end,\n tag: this._activeTag\n });\n }\n }, this.attribute.delayTime);\n\n /**\n * 拖拽结束事件\n * @description 关闭activeState + 边界情况处理: 防止拖拽后start和end过近\n */\n private _onHandlerPointerUp(e: FederatedPointerEvent) {\n e.preventDefault();\n const { start, end, brushSelect, realTime = true } = this.attribute as DataZoomAttributes;\n if (this._activeState) {\n if (this._activeTag === DataZoomActiveTag.background) {\n const pos = this.eventPosToStagePos(e);\n this.backgroundDragZoom(this._activeCache.startPos, pos);\n }\n }\n this._activeState = false;\n\n // dragMask不依赖于state更新\n brushSelect && this.renderDragMask();\n\n // 避免attributes相同时, 重复渲染\n if (!realTime || start !== this.state.start || end !== this.state.end) {\n this.setStateAttr(this.state.start, this.state.end, true);\n this._dispatchEvent('change', {\n start: this.state.start,\n end: this.state.end,\n tag: this._activeTag\n });\n }\n\n // 拖拽结束后卸载事件\n if (vglobal.env === 'browser') {\n // 拖拽时\n vglobal.removeEventListener('pointermove', this._onHandlerPointerMove, { capture: true });\n // 拖拽结束\n vglobal.removeEventListener('pointerup', this._onHandlerPointerUp.bind(this) as EventListener);\n }\n // 拖拽时\n (this as unknown as IGroup).removeEventListener('pointermove', this._onHandlerPointerMove, { capture: true });\n }\n\n /**\n * 鼠标进入事件\n * @description 鼠标进入选中部分出现start和end文字\n */\n private _onHandlerPointerEnter(e: FederatedPointerEvent) {\n e.stopPropagation();\n this._showText = true;\n this.renderText();\n }\n\n /**\n * 鼠标移出事件\n * @description 鼠标移出选中部分不出现start和end文字\n */\n private _onHandlerPointerLeave(e: FederatedPointerEvent) {\n e.stopPropagation();\n this._showText = false;\n this.renderText();\n }\n\n protected backgroundDragZoom(startPos: IPointLike, endPos: IPointLike) {\n const { attPos, max } = this._layoutCache;\n const { position } = this.attribute as DataZoomAttributes;\n const startPosInComponent = startPos[attPos] - position[attPos];\n const endPosInComponent = endPos[attPos] - position[attPos];\n const start = Math.min(Math.max(Math.min(startPosInComponent, endPosInComponent) / max, 0), 1);\n const end = Math.min(Math.max(Math.max(startPosInComponent, endPosInComponent) / max, 0), 1);\n if (Math.abs(start - end) < 0.01) {\n this.moveZoomWithMiddle(start);\n } else {\n this.setStateAttr(start, end, false);\n }\n }\n\n protected moveZoomWithMiddle(middle: number) {\n const currentMiddle = (this.state.start + this.state.end) / 2;\n let offset = middle - currentMiddle;\n // 拖拽middleHandler时,限制在background范围内\n if (offset === 0) {\n return;\n } else if (offset > 0) {\n if (this.state.end + offset > 1) {\n offset = 1 - this.state.end;\n }\n } else if (offset < 0) {\n if (this.state.start + offset < 0) {\n offset = -this.state.start;\n }\n }\n this.setStateAttr(this.state.start + offset, this.state.end + offset, false);\n }\n\n protected renderDragMask() {\n const { dragMaskStyle } = this.attribute as DataZoomAttributes;\n const { position, width, height } = this.getLayoutAttrFromConfig();\n // drag部分\n if (this._isHorizontal) {\n this._dragMask = this._container.createOrUpdateChild(\n 'dragMask',\n {\n x: clamp(\n this.dragMaskSize() < 0 ? this._activeCache.lastPos.x : this._activeCache.startPos.x,\n position.x,\n position.x + width\n ),\n y: position.y,\n width:\n (this._activeState && this._activeTag === DataZoomActiveTag.background && Math.abs(this.dragMaskSize())) ||\n 0,\n height,\n ...dragMaskStyle\n },\n 'rect'\n ) as IRect;\n } else {\n this._dragMask = this._container.createOrUpdateChild(\n 'dragMask',\n {\n x: position.x,\n y: clamp(\n this.dragMaskSize() < 0 ? this._activeCache.lastPos.y : this._activeCache.startPos.y,\n position.y,\n position.y + height\n ),\n width,\n height:\n (this._activeState && this._activeTag === DataZoomActiveTag.background && Math.abs(this.dragMaskSize())) ||\n 0,\n ...dragMaskStyle\n },\n 'rect'\n ) as IRect;\n }\n }\n\n /**\n * 判断文字是否超出datazoom范围\n */\n protected isTextOverflow(componentBoundsLike: IBoundsLike, textBounds: IBoundsLike | null, layout: 'start' | 'end') {\n if (!textBounds) {\n return false;\n }\n if (this._isHorizontal) {\n if (layout === 'start') {\n if (textBounds.x1 < componentBoundsLike.x1) {\n return true;\n }\n } else {\n if (textBounds.x2 > componentBoundsLike.x2) {\n return true;\n }\n }\n } else {\n if (layout === 'start') {\n if (textBounds.y1 < componentBoundsLike.y1) {\n return true;\n }\n } else {\n if (textBounds.y2 > componentBoundsLike.y2) {\n return true;\n }\n }\n }\n return false;\n }\n\n protected setTextAttr(startTextBounds: IBoundsLike, endTextBounds: IBoundsLike) {\n const { startTextStyle, endTextStyle } = this.attribute as DataZoomAttributes;\n const { formatMethod: startTextFormat, ...restStartTextStyle } = startTextStyle;\n const { formatMethod: endTextFormat, ...restEndTextStyle } = endTextStyle;\n const { start, end } = this.state;\n this._startValue = this._statePointToData(start);\n this._endValue = this._statePointToData(end);\n const { position, width, height } = this.getLayoutAttrFromConfig();\n\n const startTextValue = startTextFormat ? startTextFormat(this._startValue) : this._startValue;\n const endTextValue = endTextFormat ? endTextFormat(this._endValue) : this._endValue;\n const componentBoundsLike = {\n x1: position.x,\n y1: position.y,\n x2: position.x + width,\n y2: position.y + height\n };\n let startTextPosition: IPointLike;\n let endTextPosition: IPointLike;\n let startTextAlignStyle: any;\n let endTextAlignStyle: any;\n if (this._isHorizontal) {\n startTextPosition = {\n x: position.x + start * width,\n y: position.y + height / 2\n };\n endTextPosition = {\n x: position.x + end * width,\n y: position.y + height / 2\n };\n startTextAlignStyle = {\n textAlign: this.isTextOverflow(componentBoundsLike, startTextBounds, 'start') ? 'left' : 'right',\n textBaseline: 'middle'\n };\n endTextAlignStyle = {\n textAlign: this.isTextOverflow(componentBoundsLike, endTextBounds, 'end') ? 'right' : 'left',\n textBaseline: 'middle'\n };\n } else {\n startTextPosition = {\n x: position.x + width / 2,\n y: position.y + start * height\n };\n endTextPosition = {\n x: position.x + width / 2,\n y: position.y + end * height\n };\n startTextAlignStyle = {\n textAlign: 'center',\n textBaseline: this.isTextOverflow(componentBoundsLike, startTextBounds, 'start') ? 'top' : 'bottom'\n };\n endTextAlignStyle = {\n textAlign: 'center',\n textBaseline: this.isTextOverflow(componentBoundsLike, endTextBounds, 'end') ? 'bottom' : 'top'\n };\n }\n\n this._startText = this.maybeAddLabel(\n this._container,\n merge({}, restStartTextStyle, {\n text: startTextValue,\n x: startTextPosition.x,\n y: startTextPosition.y,\n visible: this._showText,\n pickable: false,\n childrenPickable: false,\n textStyle: startTextAlignStyle\n }),\n `data-zoom-start-text-${position}`\n );\n this._endText = this.maybeAddLabel(\n this._container,\n merge({}, restEndTextStyle, {\n text: endTextValue,\n x: endTextPosition.x,\n y: endTextPosition.y,\n visible: this._showText,\n pickable: false,\n childrenPickable: false,\n textStyle: endTextAlignStyle\n }),\n `data-zoom-end-text-${position}`\n );\n }\n\n protected renderText() {\n let startTextBounds: IBoundsLike | null = null;\n let endTextBounds: IBoundsLike | null = null;\n\n // 第一次绘制\n this.setTextAttr(startTextBounds, endTextBounds);\n // 得到bounds\n startTextBounds = this._startText.AABBBounds;\n endTextBounds = this._endText.AABBBounds;\n\n // 第二次绘制: 将text限制在组件bounds内\n this.setTextAttr(startTextBounds, endTextBounds);\n // 得到bounds\n startTextBounds = this._startText.AABBBounds;\n endTextBounds = this._endText.AABBBounds;\n const { x1, x2, y1, y2 } = startTextBounds;\n const { dx: startTextDx = 0, dy: startTextDy = 0 } = this.attribute.startTextStyle;\n\n // 第三次绘制: 避免startText和endText重叠, 如果重叠了, 对startText做位置调整(考虑到调整的最小化,只单独调整startText而不调整endText)\n if (new Bounds().set(x1, y1, x2, y2).intersects(endTextBounds)) {\n const direction = this.attribute.orient === 'bottom' || this.attribute.orient === 'right' ? -1 : 1;\n if (this._isHorizontal) {\n this._startText.setAttribute('dy', startTextDy + direction * Math.abs(endTextBounds.y1 - endTextBounds.y2));\n } else {\n this._startText.setAttribute('dx', startTextDx + direction * Math.abs(endTextBounds.x1 - endTextBounds.x2));\n }\n } else {\n if (this._isHorizontal) {\n this._startText.setAttribute('dy', startTextDy);\n } else {\n this._startText.setAttribute('dx', startTextDx);\n }\n }\n }\n\n /**\n * 获取背景框中的位置和宽高\n * @description 实际绘制的背景框中的高度或宽度 减去 中间手柄的高度或宽度\n */\n protected getLayoutAttrFromConfig() {\n if (this._layoutAttrFromConfig) {\n return this._layoutAttrFromConfig;\n }\n const {\n position: positionConfig,\n size,\n orient,\n middleHandlerStyle = {},\n startHandlerStyle = {},\n endHandlerStyle = {}\n } = this.attribute as DataZoomAttributes;\n const { width: widthConfig, height: heightConfig } = size;\n const middleHandlerSize = middleHandlerStyle.background?.size ?? 10;\n\n // 如果middleHandler显示的话,要将其宽高计入datazoom宽高\n let width;\n let height;\n let position;\n if (middleHandlerStyle.visible) {\n if (this._isHorizontal) {\n width = widthConfig;\n height = heightConfig - middleHandlerSize;\n position = {\n x: positionConfig.x,\n y: positionConfig.y + middleHandlerSize\n };\n } else {\n width = widthConfig - middleHandlerSize;\n height = heightConfig;\n position = {\n x: positionConfig.x + (orient === 'left' ? middleHandlerSize : 0),\n y: positionConfig.y\n };\n }\n } else {\n width = widthConfig;\n height = heightConfig;\n position = positionConfig;\n }\n\n const startHandlerSize = (startHandlerStyle.size as number) ?? (this._isHorizontal ? height : width);\n const endHandlerSize = (endHandlerStyle.size as number) ?? (this._isHorizontal ? height : width);\n // 如果startHandler显示的话,要将其宽高计入dataZoom宽高\n if (startHandlerStyle.visible) {\n if (this._isHorizontal) {\n width -= (startHandlerSize + endHandlerSize) / 2;\n position = {\n x: position.x + startHandlerSize / 2,\n y: position.y\n };\n } else {\n height -= (startHandlerSize + endHandlerSize) / 2;\n position = {\n x: position.x,\n y: position.y + startHandlerSize\n };\n }\n }\n\n this._layoutAttrFromConfig = {\n position,\n width,\n height\n };\n return this._layoutAttrFromConfig;\n }\n\n protected render() {\n this._layoutAttrFromConfig = null;\n const {\n // start,\n // end,\n orient,\n backgroundStyle,\n backgroundChartStyle = {},\n selectedBackgroundStyle = {},\n selectedBackgroundChartStyle = {},\n middleHandlerStyle = {},\n startHandlerStyle = {},\n endHandlerStyle = {},\n brushSelect,\n zoomLock\n } = this.attribute as DataZoomAttributes;\n const { start, end } = this.state;\n const { position, width, height } = this.getLayoutAttrFromConfig();\n const startHandlerMinSize = startHandlerStyle.triggerMinSize ?? 40;\n const endHandlerMinSize = endHandlerStyle.triggerMinSize ?? 40;\n const group = (this as unknown as IGroup).createOrUpdateChild('dataZoom-container', {}, 'group') as IGroup;\n this._container = group;\n this._background = group.createOrUpdateChild(\n 'background',\n {\n x: position.x,\n y: position.y,\n width,\n height,\n cursor: brushSelect ? 'crosshair' : 'auto',\n ...backgroundStyle,\n pickable: !zoomLock\n },\n 'rect'\n ) as IRect;\n\n /** 背景图表 */\n backgroundChartStyle.line?.visible && this.setPreviewAttributes('line', group);\n backgroundChartStyle.area?.visible && this.setPreviewAttributes('area', group);\n\n /** drag mask */\n brushSelect && this.renderDragMask();\n\n /** 选中背景 */\n if (this._isHorizontal) {\n // 选中部分\n this._selectedBackground = group.createOrUpdateChild(\n 'selectedBackground',\n {\n x: position.x + start * width,\n y: position.y,\n width: (end - start) * width,\n height: height,\n cursor: brushSelect ? 'crosshair' : 'move',\n ...selectedBackgroundStyle,\n pickable: !zoomLock\n },\n 'rect'\n ) as IRect;\n } else {\n // 选中部分\n this._selectedBackground = group.createOrUpdateChild(\n 'selectedBackground',\n {\n x: position.x,\n y: position.y + start * height,\n width,\n height: (end - start) * height,\n cursor: brushSelect ? 'crosshair' : 'move',\n ...selectedBackgroundStyle,\n pickable: !zoomLock\n },\n 'rect'\n ) as IRect;\n }\n\n /** 选中的背景图表 */\n selectedBackgroundChartStyle.line?.visible && this.setSelectedPreviewAttributes('line', group);\n selectedBackgroundChartStyle.area?.visible && this.setSelectedPreviewAttributes('area', group);\n\n /** 左右 和 中间手柄 */\n if (this._isHorizontal) {\n if (middleHandlerStyle.visible) {\n const middleHandlerBackgroundSize = middleHandlerStyle.background?.size || 10;\n this._middleHandlerRect = group.createOrUpdateChild(\n 'middleHandlerRect',\n {\n x: position.x + start * width,\n y: position.y - middleHandlerBackgroundSize,\n width: (end - start) * width,\n height: middleHandlerBackgroundSize,\n ...middleHandlerStyle.background?.style,\n pickable: !zoomLock\n },\n 'rect'\n ) as IRect;\n this._middleHandlerSymbol = group.createOrUpdateChild(\n 'middleHandlerSymbol',\n {\n x: position.x + ((start + end) / 2) * width,\n y: position.y - middleHandlerBackgroundSize / 2,\n strokeBoundsBuffer: 0,\n angle: 0,\n symbolType: middleHandlerStyle.icon?.symbolType ?? 'square',\n ...middleHandlerStyle.icon,\n pickable: !zoomLock\n },\n 'symbol'\n ) as ISymbol;\n }\n this._startHandler = group.createOrUpdateChild(\n 'startHandler',\n {\n x: position.x + start * width,\n y: position.y + height / 2,\n size: height,\n symbolType: startHandlerStyle.symbolType ?? 'square',\n ...(DEFAULT_HANDLER_ATTR_MAP.horizontal as any),\n ...startHandlerStyle,\n pickable: !zoomLock\n },\n 'symbol'\n ) as ISymbol;\n this._endHandler = group.createOrUpdateChild(\n 'endHandler',\n {\n x: position.x + end * width,\n y: position.y + height / 2,\n size: height,\n symbolType: endHandlerStyle.symbolType ?? 'square',\n ...(DEFAULT_HANDLER_ATTR_MAP.horizontal as any),\n ...endHandlerStyle,\n pickable: !zoomLock\n },\n 'symbol'\n ) as ISymbol;\n\n // 透明mask构造热区, 热区大小配置来自handler bounds\n const startHandlerWidth = Math.max(this._startHandler.AABBBounds.width(), startHandlerMinSize);\n const startHandlerHeight = Math.max(this._startHandler.AABBBounds.height(), startHandlerMinSize);\n const endHandlerWidth = Math.max(this._endHandler.AABBBounds.width(), endHandlerMinSize);\n const endHandlerHeight = Math.max(this._endHandler.AABBBounds.height(), endHandlerMinSize);\n\n this._startHandlerMask = group.createOrUpdateChild(\n 'startHandlerMask',\n {\n x: position.x + start * width - startHandlerWidth / 2,\n y: position.y + height / 2 - startHandlerHeight / 2,\n width: startHandlerWidth,\n height: startHandlerHeight,\n fill: 'white',\n fillOpacity: 0,\n zIndex: 999,\n ...(DEFAULT_HANDLER_ATTR_MAP.horizontal as any),\n pickable: !zoomLock\n },\n 'rect'\n ) as IRect;\n this._endHandlerMask = group.createOrUpdateChild(\n 'endHandlerMask',\n {\n x: position.x + end * width - endHandlerWidth / 2,\n y: position.y + height / 2 - endHandlerHeight / 2,\n width: endHandlerWidth,\n height: endHandlerHeight,\n fill: 'white',\n fillOpacity: 0,\n zIndex: 999,\n ...(DEFAULT_HANDLER_ATTR_MAP.horizontal as any),\n pickable: !zoomLock\n },\n 'rect'\n ) as IRect;\n } else {\n if (middleHandlerStyle.visible) {\n const middleHandlerBackgroundSize = middleHandlerStyle.background?.size || 10;\n\n this._middleHandlerRect = group.createOrUpdateChild(\n 'middleHandlerRect',\n {\n x: orient === 'left' ? position.x - middleHandlerBackgroundSize : position.x + width,\n y: position.y + start * height,\n width: middleHandlerBackgroundSize,\n height: (end - start) * height,\n ...middleHandlerStyle.background?.style,\n pickable: !zoomLock\n },\n 'rect'\n ) as IRect;\n this._middleHandlerSymbol = group.createOrUpdateChild(\n 'middleHandlerSymbol',\n {\n x:\n orient === 'left'\n ? position.x - middleHandlerBackgroundSize / 2\n : position.x + width + middleHandlerBackgroundSize / 2,\n y: position.y + ((start + end) / 2) * height,\n // size: height,\n angle: 90 * (Math.PI / 180),\n symbolType: middleHandlerStyle.icon?.symbolType ?? 'square',\n strokeBoundsBuffer: 0,\n ...middleHandlerStyle.icon,\n pickable: !zoomLock\n },\n 'symbol'\n ) as ISymbol;\n }\n this._startHandler = group.createOrUpdateChild(\n 'startHandler',\n {\n x: position.x + width / 2,\n y: position.y + start * height,\n size: width,\n symbolType: startHandlerStyle.symbolType ?? 'square',\n ...(DEFAULT_HANDLER_ATTR_MAP.vertical as any),\n ...startHandlerStyle,\n pickable: !zoomLock\n },\n 'symbol'\n ) as ISymbol;\n\n this._endHandler = group.createOrUpdateChild(\n 'endHandler',\n {\n x: position.x + width / 2,\n y: position.y + end * height,\n size: width,\n symbolType: endHandlerStyle.symbolType ?? 'square',\n ...(DEFAULT_HANDLER_ATTR_MAP.vertical as any),\n ...endHandlerStyle,\n pickable: !zoomLock\n },\n 'symbol'\n ) as ISymbol;\n\n // 透明mask构造热区, 热区大小配置来自handler bounds\n const startHandlerWidth = Math.max(this._startHandler.AABBBounds.width(), startHandlerMinSize);\n const startHandlerHeight = Math.max(this._startHandler.AABBBounds.height(), startHandlerMinSize);\n const endHandlerWidth = Math.max(this._endHandler.AABBBounds.width(), endHandlerMinSize);\n const endHandlerHeight = Math.max(this._endHandler.AABBBounds.height(), endHandlerMinSize);\n\n this._startHandlerMask = group.createOrUpdateChild(\n 'startHandlerMask',\n {\n x: position.x + width / 2 + startHandlerWidth / 2,\n y: position.y + start * height - startHandlerHeight / 2,\n width: endHandlerHeight,\n height: endHandlerWidth,\n fill: 'white',\n fillOpacity: 0,\n zIndex: 999,\n ...(DEFAULT_HANDLER_ATTR_MAP.vertical as any),\n pickable: !zoomLock\n },\n 'rect'\n ) as IRect;\n this._endHandlerMask = group.createOrUpdateChild(\n 'endHandlerMask',\n {\n x: position.x + width / 2 + endHandlerWidth / 2,\n y: position.y + end * height - endHandlerHeight / 2,\n width: endHandlerHeight,\n height: endHandlerWidth,\n fill: 'white',\n fillOpacity: 0,\n zIndex: 999,\n ...(DEFAULT_HANDLER_ATTR_MAP.vertical as any),\n pickable: !zoomLock\n },\n 'rect'\n ) as IRect;\n }\n\n /** 左右文字 */\n if (this._showText) {\n this.renderText();\n }\n }\n\n computeBasePoints() {\n const { orient } = this.attribute as DataZoomAttributes;\n const { position, width, height } = this.getLayoutAttrFromConfig();\n let basePointStart: any;\n let basePointEnd: any;\n if (this._isHorizontal) {\n basePointStart = [\n {\n x: position.x,\n y: position.y + height\n }\n ];\n basePointEnd = [\n {\n x: position.x + width,\n y: position.y + height\n }\n ];\n } else if (orient === 'left') {\n basePointStart = [\n {\n x: position.x + width,\n y: position.y\n }\n ];\n basePointEnd = [\n {\n x: position.x + width,\n y: position.y + height\n }\n ];\n } else {\n basePointStart = [\n {\n x: position.x,\n y: position.y + height\n }\n ];\n basePointEnd = [\n {\n x: position.x,\n y: position.y\n }\n ];\n }\n return {\n basePointStart,\n basePointEnd\n };\n }\n\n protected getPreviewLinePoints() {\n const previewPoints = this._previewData.map(d => {\n return {\n x: this._previewPointsX && this._previewPointsX(d),\n y: this._previewPointsY && this._previewPointsY(d)\n };\n });\n // 仅在有数据的时候增加base point, 以弥补背景图表两端的不连续缺口。不然的话没有数据时,会因为base point而仍然绘制图形\n if (previewPoints.length === 0) {\n return previewPoints;\n }\n const { basePointStart, basePointEnd } = this.computeBasePoints();\n return basePointStart.concat(previewPoints).concat(basePointEnd);\n }\n\n protected getPreviewAreaPoints() {\n const previewPoints = this._previewData.map(d => {\n return {\n x: this._previewPointsX && this._previewPointsX(d),\n y: this._previewPointsY && this._previewPointsY(d),\n x1: this._previewPointsX1 && this._previewPointsX1(d),\n y1: this._previewPointsY1 && this._previewPointsY1(d)\n };\n });\n // 仅在有数据的时候增加base point, 以弥补背景图表两端的不连续缺口。不然的话没有数据时,会因为base point而仍然绘制图形\n if (previewPoints.length === 0) {\n return previewPoints;\n }\n const { basePointStart, basePointEnd } = this.computeBasePoints();\n return basePointStart.concat(previewPoints).concat(basePointEnd);\n }\n\n /** 使用callback绘制背景图表 (数据和数据映射从外部传进来) */\n protected setPreviewAttributes(type: 'line' | 'area', group: IGroup) {\n if (!this._previewGroup) {\n this._previewGroup = group.createOrUpdateChild('previewGroup', { pickable: false }, 'group') as IGroup;\n }\n if (type === 'line') {\n this._previewLine = this._previewGroup.createOrUpdateChild('previewLine', {}, 'line') as ILine;\n } else {\n this._previewArea = this._previewGroup.createOrUpdateChild(\n 'previewArea',\n { curveType: 'basis' },\n 'area'\n ) as IArea;\n }\n\n const { backgroundChartStyle = {} } = this.attribute as DataZoomAttributes;\n\n type === 'line' &&\n this._previewLine.setAttributes({\n points: this.getPreviewLinePoints(),\n curveType: 'basis',\n pickable: false,\n ...backgroundChartStyle.line\n });\n type === 'area' &&\n this._previewArea.setAttributes({\n points: this.getPreviewAreaPoints(),\n curveType: 'basis',\n pickable: false,\n ...backgroundChartStyle.area\n });\n }\n\n /** 使用callback绘制选中的背景图表 (数据和数据映射从外部传进来) */\n protected setSelectedPreviewAttributes(type: 'area' | 'line', group: IGroup) {\n if (!this._selectedPreviewGroupClip) {\n this._selectedPreviewGroupClip = group.createOrUpdateChild(\n 'selectedPreviewGroupClip',\n { pickable: false },\n 'group'\n ) as IGroup;\n this._selectedPreviewGroup = this._selectedPreviewGroupClip.createOrUpdateChild(\n 'selectedPreviewGroup',\n {},\n 'group'\n ) as IGroup;\n }\n\n if (type === 'line') {\n this._selectedPreviewLine = this._selectedPreviewGroup.createOrUpdateChild(\n 'selectedPreviewLine',\n {},\n 'line'\n ) as ILine;\n } else {\n this._selectedPreviewArea = this._selectedPreviewGroup.createOrUpdateChild(\n 'selectedPreviewArea',\n { curveType: 'basis' },\n 'area'\n ) as IArea;\n }\n\n const { selectedBackgroundChartStyle = {} } = this.attribute as DataZoomAttributes;\n\n const { start, end } = this.state;\n const { position, width, height } = this.getLayoutAttrFromConfig();\n this._selectedPreviewGroupClip.setAttributes({\n x: this._isHorizontal ? position.x + start * width : position.x,\n y: this._isHorizontal ? position.y : position.y + start * height,\n width: this._isHorizontal ? (end - start) * width : width,\n height: this._isHorizontal ? height : (end - start) * height,\n clip: true,\n pickable: false\n } as any);\n this._selectedPreviewGroup.setAttributes({\n x: -(this._isHorizontal ? position.x + start * width : position.x),\n y: -(this._isHorizontal ? position.y : position.y + start * height),\n width: this._isHorizontal ? (end - start) * width : width,\n height: this._isHorizontal ? height : (end - start) * height,\n pickable: false\n } as any);\n type === 'line' &&\n this._selectedPreviewLine.setAttributes({\n points: this.getPreviewLinePoints(),\n curveType: 'basis',\n pickable: false,\n ...selectedBackgroundChartStyle.line\n });\n type === 'area' &&\n this._selectedPreviewArea.setAttributes({\n points: this.getPreviewAreaPoints(),\n curveType: 'basis',\n pickable: false,\n ...selectedBackgroundChartStyle.area\n });\n }\n\n protected maybeAddLabel(container: IGroup, attributes: TagAttributes, name: string): Tag {\n let labelShape = (this as unknown as IGroup).find(node => node.name === name, true) as unknown as Tag;\n if (labelShape) {\n labelShape.setAttributes(attributes);\n } else {\n labelShape = new Tag(attributes);\n labelShape.name = name;\n }\n\n container.add(labelShape as unknown as INode);\n return labelShape;\n }\n\n /** 外部重置组件的起始状态 */\n setStartAndEnd(start?: number, end?: number) {\n const { start: startAttr, end: endAttr } = this.attribute as DataZoomAttributes;\n if (isValid(start) && isValid(end) && (start !== this.state.start || end !== this.state.end)) {\n this.state.start = start;\n this.state.end = end;\n if (startAttr !== this.state.start || endAttr !== this.state.end) {\n this.setStateAttr(start, end, true);\n this._dispatchEvent('change', {\n start,\n end,\n tag: this._activeTag\n });\n }\n }\n }\n\n /** 外部更新背景图表的数据 */\n setPreviewData(data: any[]) {\n this._previewData = data;\n }\n\n /** 外部更新手柄文字 */\n setText(text: string, tag: 'start' | 'end') {\n if (tag === 'start') {\n this._startText.setAttribute('text', text);\n } else {\n this._endText.setAttribute('text', text);\n }\n }\n\n /** 外部获取起始点数据值 */\n getStartValue() {\n return this._startValue;\n }\n\n getEndTextValue() {\n return this._endValue;\n }\n\n getMiddleHandlerSize() {\n const { middleHandlerStyle = {} } = this.attribute as DataZoomAttributes;\n const middleHandlerRectSize = middleHandlerStyle.background?.size ?? 10;\n const middleHandlerSymbolSize = middleHandlerStyle.icon?.size ?? 10;\n return Math.max(middleHandlerRectSize, ...array(middleHandlerSymbolSize));\n }\n\n /** 外部传入数据映射 */\n setPreviewPointsX(callback: (d: any) => number) {\n isFunction(callback) && (this._previewPointsX = callback);\n }\n setPreviewPointsY(callback: (d: any) => number) {\n isFunction(callback) && (this._previewPointsY = callback);\n }\n setPreviewPointsX1(callback: (d: any) => number) {\n isFunction(callback) && (this._previewPointsX1 = callback);\n }\n setPreviewPointsY1(callback: (d: any) => number) {\n isFunction(callback) && (this._previewPointsY1 = callback);\n }\n setStatePointToData(callback: (state: number) => any) {\n isFunction(callback) && (this._statePointToData = callback);\n }\n}\n","import { registerArea, registerLine, registerRect, registerSymbol } from '@visactor/vrender-kits';\nimport { loadTagComponent } from '../tag/register';\nexport function loadDataZoomComponent() {\n loadTagComponent();\n registerRect();\n registerSymbol();\n registerArea();\n registerLine();\n}\n","import type { AdaptiveSpec } from '../../../typings';\nimport { isArray, mergeSpec } from '../../../util';\nimport { BaseComponentSpecTransformer } from '../../base';\nimport type { IDataZoomSpec, IDataZoomTheme } from './interface';\n\nexport class DataZoomSpecTransformer<\n T extends IDataZoomSpec = IDataZoomSpec,\n K extends IDataZoomTheme = IDataZoomTheme\n> extends BaseComponentSpecTransformer, K> {\n /** 将 theme merge 到 spec 中 */\n protected _mergeThemeToSpec(\n spec: AdaptiveSpec,\n chartSpec: any\n ): { spec: AdaptiveSpec; theme: K } {\n const theme = this._theme;\n let newSpec = spec;\n if (this._shouldMergeThemeToSpec()) {\n // this._originalSpec + this._theme = this._spec\n const merge = (originalSpec: any) => {\n const result = mergeSpec(\n {\n selectedBackgroundChart: {\n line: {},\n area: {}\n }\n },\n this._theme,\n originalSpec\n );\n\n // 兼容:为了减少主题更改造成的影响,如果用户在 spec 配置了主题默认关闭的 mark,则自动加上 visible: true\n const { selectedBackgroundChart = {} } = originalSpec;\n const { line, area } = selectedBackgroundChart;\n\n if (line && line.visible !== false) {\n result.selectedBackgroundChart.line.style = {\n ...result.selectedBackgroundChart.line.style,\n visible: true // FIXME: visible 应该提到更上面,等 datazoom 支持\n };\n }\n if (area && area.visible !== false) {\n result.selectedBackgroundChart.area.style = {\n ...result.selectedBackgroundChart.area.style,\n visible: true // FIXME: visible 应该提到更上面,等 datazoom 支持\n };\n }\n\n return result;\n };\n\n const baseSpec = spec;\n if (isArray(baseSpec)) {\n newSpec = baseSpec.map(spec => merge(spec)) as unknown as any;\n } else {\n newSpec = merge(baseSpec);\n }\n }\n\n this._adjustPadding(newSpec);\n return { spec: newSpec, theme };\n }\n}\n","import type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isArray, isBoolean, isNil, isNumber, isValid, maxInArray, minInArray, uniqArray } from '@visactor/vutils';\nimport { mergeSpec } from '../../../util/spec/merge-spec';\nimport type { IComponentOption } from '../../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { DataFilterBaseComponent } from '../data-filter-base-component';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DataZoomAttributes } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { DataZoom as DataZoomComponent } from '@visactor/vrender-components';\nimport { transformToGraphic } from '../../../util/style';\nimport type { IRectGraphicAttribute, INode, ISymbolGraphicAttribute, IGroup, IGraphic } from '@visactor/vrender-core';\nimport type { Datum, ILayoutType } from '../../../typings';\nimport type { ILinearScale, IBaseScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { LinearScale, isContinuous, isDiscrete } from '@visactor/vscale';\nimport { ChartEvent, LayoutLevel, LayoutZIndex } from '../../../constant';\nimport type { IDataZoomSpec } from './interface';\nimport { IFilterMode } from '../constant';\nimport { Factory } from '../../../core/factory';\nimport type { IZoomable } from '../../../interaction/zoom';\nimport type { CartesianAxis } from '../../axis/cartesian';\nimport type { IModelSpecInfo } from '../../../model/interface';\nimport { DataZoomSpecTransformer } from './data-zoom-transformer';\n\nexport class DataZoom extends DataFilterBaseComponent {\n static type = ComponentTypeEnum.dataZoom;\n static readonly transformerConstructor = DataZoomSpecTransformer as any;\n type = ComponentTypeEnum.dataZoom;\n name: string = ComponentTypeEnum.dataZoom;\n readonly transformerConstructor = DataZoomSpecTransformer;\n\n static specKey = 'dataZoom';\n specKey = 'dataZoom';\n\n layoutZIndex: number = LayoutZIndex.DataZoom;\n layoutLevel: number = LayoutLevel.DataZoom;\n layoutType: ILayoutType = 'region-relative';\n\n // datazoom组件\n protected _component!: DataZoomComponent;\n\n protected _valueScale!: ILinearScale;\n\n protected _backgroundSize!: number;\n protected _middleHandlerSize!: number;\n protected _startHandlerSize!: number;\n protected _endHandlerSize!: number;\n\n static getSpecInfo(chartSpec: any): Maybe {\n const compSpec = chartSpec[this.specKey];\n if (isNil(compSpec)) {\n return undefined;\n }\n if (!isArray(compSpec)) {\n return [\n {\n spec: compSpec,\n specPath: [this.specKey],\n type: ComponentTypeEnum.dataZoom\n }\n ];\n }\n const specInfos: IModelSpecInfo[] = [];\n compSpec.forEach((s, i: number) => {\n specInfos.push({\n spec: s,\n specIndex: i,\n specPath: [this.specKey, i],\n type: ComponentTypeEnum.dataZoom\n });\n });\n return specInfos;\n }\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n\n this._valueField = 'y';\n this._filterMode = spec.filterMode ?? IFilterMode.filter;\n }\n\n created() {\n super.created();\n this._initValueScale();\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n if (isBoolean((this._spec as any).roam)) {\n this._zoomAttr.enable = (this._spec as any).roam;\n this._dragAttr.enable = (this._spec as any).roam;\n this._scrollAttr.enable = (this._spec as any).roam;\n }\n\n if (this._zoomAttr.enable || this._dragAttr.enable || this._scrollAttr.enable) {\n (this as unknown as IZoomable).initZoomable(this.event, this._option.mode);\n }\n\n // size相关\n this._backgroundSize = this._spec.background?.size ?? 30;\n this._middleHandlerSize = this._computeMiddleHandlerSize();\n this._width = this._computeWidth();\n this._height = this._computeHeight();\n // startHandler和endHandler size如果没有配置,则默认跟随background宽 or 高\n if (isNil(this._spec?.startHandler?.style?.size)) {\n this._spec.startHandler.style.size = this._isHorizontal\n ? this._height - this._middleHandlerSize\n : this._width - this._middleHandlerSize;\n }\n if (isNil(this._spec?.endHandler?.style?.size)) {\n this._spec.endHandler.style.size = this._isHorizontal\n ? this._height - this._middleHandlerSize\n : this._width - this._middleHandlerSize;\n }\n const startHandlerVisble = this._spec.startHandler.style.visible ?? true;\n const endHandlerVisble = this._spec.endHandler.style.visible ?? true;\n this._startHandlerSize = startHandlerVisble ? this._spec.startHandler.style.size : 0;\n this._endHandlerSize = endHandlerVisble ? this._spec.endHandler.style.size : 0;\n }\n\n /** LifeCycle API**/\n onLayoutEnd(ctx: any): void {\n this._updateScaleRange();\n if (this._cacheVisibility !== false) {\n super.onLayoutEnd(ctx);\n }\n }\n\n protected _initValueScale() {\n const domain = this._computeDomainOfValueScale();\n\n if (domain) {\n const valueScale = new LinearScale();\n valueScale.domain(domain);\n this._valueScale = valueScale;\n }\n }\n\n protected _updateScaleRange() {\n const handlerSize = (this._startHandlerSize + this._endHandlerSize) / 2;\n if (!this._stateScale || !this._valueScale) {\n return;\n }\n\n // visible为false时, 计算stateScale的兜底range\n let stateScaleRange;\n const defaultSize = this._isHorizontal\n ? this.getLayoutRect().width - handlerSize\n : this.getLayoutRect().height - handlerSize;\n const defaultRange = (this._relatedAxisComponent as CartesianAxis)?.getScale().range() ?? [0, defaultSize];\n\n if (this._isHorizontal) {\n stateScaleRange = this._visible ? [0, this._computeWidth() - handlerSize] : defaultRange;\n this._stateScale.range(stateScaleRange);\n this._valueScale.range([this._computeHeight() - this._middleHandlerSize, 0]);\n } else if (this.layoutOrient === 'left') {\n stateScaleRange = this._visible ? [0, this._computeHeight() - handlerSize] : defaultRange;\n this._stateScale.range(stateScaleRange);\n this._valueScale.range([this._computeWidth() - this._middleHandlerSize, 0]);\n } else {\n stateScaleRange = this._visible ? [0, this._computeHeight() - handlerSize] : defaultRange;\n this._stateScale.range(stateScaleRange);\n this._valueScale.range([0, this._computeWidth() - this._middleHandlerSize]);\n }\n\n if (this._component && this._cacheVisibility !== false) {\n this._component.setAttributes({\n size: {\n width: this._computeWidth(),\n height: this._computeHeight()\n },\n position: {\n x: this.getLayoutStartPoint().x,\n y: this.getLayoutStartPoint().y\n }\n });\n }\n }\n\n protected _computeDomainOfValueScale() {\n const domain = this._data.getLatestData().map((d: any) => d[this._valueField]);\n\n const domainNum = domain.map((n: any) => n * 1);\n return domain.length ? [minInArray(domainNum), maxInArray(domainNum)] : null;\n }\n\n protected _computeMiddleHandlerSize(): number {\n let size = 0;\n if (this._spec?.middleHandler?.visible) {\n const middleHandlerIconSize = this._spec.middleHandler.icon.style.size ?? 8;\n const middleHandlerBackSize = this._spec.middleHandler.background.size ?? 40;\n size += Math.max(middleHandlerIconSize as number, middleHandlerBackSize);\n }\n return size;\n }\n\n protected _computeWidth(): number {\n if (this._visible === false) {\n return 0;\n }\n\n if (isNumber(this._spec.width)) {\n return this._spec.width;\n }\n\n if (this._isHorizontal) {\n return this.getLayoutRect().width;\n }\n\n return this._backgroundSize + this._middleHandlerSize;\n }\n\n protected _computeHeight(): number {\n if (this._visible === false) {\n return 0;\n }\n\n if (isNumber(this._spec.height)) {\n return this._spec.height;\n }\n\n if (this._isHorizontal) {\n return this._backgroundSize + this._middleHandlerSize;\n }\n return this.getLayoutRect().height - (this._startHandlerSize + this._endHandlerSize) / 2;\n }\n\n protected _isScaleValid(scale: IBaseScale | ILinearScale) {\n if (!scale || !scale.domain()) {\n return false;\n }\n const domain = scale.domain();\n if (isContinuous(scale.type) && domain[0] === domain[1]) {\n return false;\n }\n if (isDiscrete(scale.type) && uniqArray(domain).length === 1) {\n return false;\n }\n return true;\n }\n\n protected _dataToPositionX = (datum: Datum): number => {\n const offsetLeft = this._orient === 'left' ? this._middleHandlerSize : 0;\n const offsetHandler = this._isHorizontal ? this._startHandlerSize / 2 : 0;\n const xScale = this._isHorizontal ? this._stateScale : this._valueScale;\n const xField = this._isHorizontal ? this._stateField : this._valueField;\n return xScale.scale(datum[xField]) + this.getLayoutStartPoint().x + offsetLeft + offsetHandler;\n };\n\n protected _dataToPositionX2 = (datum: Datum): number => {\n const offsetLeft = this._orient === 'left' ? this._middleHandlerSize : 0;\n const offsetHandler = this._isHorizontal ? this._startHandlerSize / 2 : 0;\n const xScale = this._isHorizontal ? this._stateScale : this._valueScale;\n const min = xScale.domain()[0];\n return xScale.scale(min) + this.getLayoutStartPoint().x + offsetLeft + offsetHandler;\n };\n\n protected _dataToPositionY = (datum: Datum): number => {\n const offsetTop = this._isHorizontal ? this._middleHandlerSize : 0;\n const offsetHandler = this._isHorizontal ? 0 : this._startHandlerSize / 2;\n const yScale = this._isHorizontal ? this._valueScale : this._stateScale;\n const yField = this._isHorizontal ? this._valueField : this._stateField;\n return yScale.scale(datum[yField]) + this.getLayoutStartPoint().y + offsetTop + offsetHandler;\n };\n\n protected _dataToPositionY2 = (datum: Datum): number => {\n const offsetTop = this._isHorizontal ? this._middleHandlerSize : 0;\n const offsetHandler = this._isHorizontal ? 0 : this._startHandlerSize / 2;\n const yScale = this._isHorizontal ? this._valueScale : this._stateScale;\n const min = yScale.domain()[0];\n return yScale.scale(min) + this.getLayoutStartPoint().y + offsetTop + offsetHandler;\n };\n\n private _getAttrs(isNeedPreview: boolean) {\n const spec = this._spec ?? ({} as T);\n return {\n zIndex: this.layoutZIndex,\n start: this._start,\n end: this._end,\n position: {\n x: this.getLayoutStartPoint().x,\n y: this.getLayoutStartPoint().y\n },\n orient: this._orient,\n size: {\n width: this.getLayoutRect().width,\n height: this.getLayoutRect().height\n },\n showDetail: spec.showDetail,\n brushSelect: spec.brushSelect ?? false,\n zoomLock: spec.zoomLock ?? false,\n minSpan: this._minSpan,\n maxSpan: this._maxSpan,\n delayType: spec.delayType,\n delayTime: isValid(spec.delayType) ? spec.delayTime ?? 30 : 0,\n realTime: spec.realTime ?? true,\n previewData: isNeedPreview && this._data.getLatestData(),\n previewPointsX: isNeedPreview && this._dataToPositionX,\n previewPointsY: isNeedPreview && this._dataToPositionY,\n ...(this._getComponentAttrs() as any)\n } as DataZoomAttributes;\n }\n\n protected _createOrUpdateComponent() {\n if (this._visible) {\n const xScale = this._isHorizontal ? this._stateScale : this._valueScale;\n const yScale = this._isHorizontal ? this._valueScale : this._stateScale;\n const isNeedPreview = this._isScaleValid(xScale) && this._isScaleValid(yScale);\n const attrs = this._getAttrs(isNeedPreview);\n if (this._component) {\n this._component.setAttributes(attrs);\n } else {\n const container = this.getContainer();\n this._component = new DataZoomComponent(attrs);\n\n if (this._isHorizontal) {\n isNeedPreview && this._component.setPreviewPointsY1(this._dataToPositionY2);\n } else {\n isNeedPreview && this._component.setPreviewPointsX1(this._dataToPositionX2);\n }\n this._component.setStatePointToData((state: number) => this._statePointToData(state));\n\n this._component.addEventListener('change', (e: any) => {\n const { start, end, tag } = e.detail;\n this._handleChange(start, end, undefined, tag);\n });\n container.add(this._component as unknown as INode);\n\n this._updateScaleRange();\n }\n }\n }\n\n protected _handleChange(start: number, end: number, updateComponent?: boolean, tag?: string) {\n super._handleChange(start, end, updateComponent);\n if (updateComponent && this._component) {\n this._component.setStartAndEnd(start, end);\n }\n\n this._start = start;\n this._end = end;\n const hasChange = this._handleStateChange(this._statePointToData(start), this._statePointToData(end), tag);\n if (hasChange) {\n this.event.emit(ChartEvent.dataZoomChange, {\n model: this,\n value: {\n filterData: this._filterMode !== IFilterMode.axis,\n start,\n end,\n startValue: this._startValue,\n endValue: this._endValue,\n newDomain: this._newDomain\n }\n });\n }\n }\n\n protected _handleDataCollectionChange() {\n const data = this._data.getDataView();\n data.reRunAllTransform();\n this._component?.setPreviewData(data.latestData);\n\n if (this._valueScale) {\n const domain = this._computeDomainOfValueScale();\n\n if (domain) {\n this._valueScale.domain(domain);\n }\n }\n }\n\n protected _getComponentAttrs() {\n const {\n middleHandler = {},\n startText = {},\n endText = {},\n backgroundChart = {},\n selectedBackgroundChart = {}\n } = this._spec as T;\n return {\n backgroundStyle: transformToGraphic(this._spec.background?.style) as unknown as IRectGraphicAttribute,\n startHandlerStyle: transformToGraphic(this._spec.startHandler?.style) as unknown as ISymbolGraphicAttribute,\n middleHandlerStyle: middleHandler.visible\n ? {\n visible: true,\n icon: transformToGraphic(middleHandler.icon?.style) as unknown as ISymbolGraphicAttribute,\n background: {\n size: middleHandler.background?.size,\n style: transformToGraphic(middleHandler.background?.style)\n } as any\n }\n : { visible: false },\n endHandlerStyle: transformToGraphic(this._spec.endHandler?.style) as unknown as ISymbolGraphicAttribute,\n startTextStyle: {\n padding: startText.padding,\n formatMethod: startText.formatMethod,\n textStyle: transformToGraphic(startText.style)\n } as unknown,\n endTextStyle: {\n padding: endText.padding,\n formatMethod: endText.formatMethod,\n textStyle: transformToGraphic(endText.style)\n } as unknown,\n selectedBackgroundStyle: transformToGraphic(\n this._spec.selectedBackground.style\n ) as unknown as IRectGraphicAttribute,\n dragMaskStyle: transformToGraphic(this._spec.dragMask?.style) as unknown as IRectGraphicAttribute,\n backgroundChartStyle: {\n line: mergeSpec(transformToGraphic(backgroundChart.line?.style), { fill: false }),\n area: {\n curveType: 'basis',\n visible: true,\n ...transformToGraphic(backgroundChart.area?.style)\n }\n },\n selectedBackgroundChartStyle: {\n line: mergeSpec(transformToGraphic(selectedBackgroundChart.line?.style), { fill: false }),\n area: {\n curveType: 'basis',\n visible: true,\n ...transformToGraphic(selectedBackgroundChart.area?.style)\n }\n },\n disableTriggerEvent: this._option.disableTriggerEvent\n };\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._component] as unknown as IGroup[];\n }\n}\n\nexport const registerDataZoom = () => {\n Factory.registerComponent(DataZoom.type, DataZoom);\n};\n","/**\n * @description 滚动条组件\n */\nimport type { IRectGraphicAttribute, FederatedPointerEvent, IGroup, IRect } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { vglobal } from '@visactor/vrender-core';\nimport { merge, normalizePadding, clamp, clampRange, debounce, throttle } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\n\nimport type { ScrollBarAttributes } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadScrollbarComponent } from './register';\n\ntype ComponentBounds = {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n width: number;\n height: number;\n};\n\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\n\nloadScrollbarComponent();\n\nexport class ScrollBar extends AbstractComponent> {\n name = 'scrollbar';\n\n static defaultAttributes = {\n direction: 'horizontal',\n round: true,\n sliderSize: 20,\n sliderStyle: {\n fill: 'rgba(0, 0, 0, .5)'\n },\n railStyle: {\n fill: 'rgba(0, 0, 0, .0)'\n },\n padding: 2,\n scrollRange: [0, 1],\n delayType: 'throttle',\n delayTime: 0,\n realTime: true\n };\n\n private _container!: IGroup;\n // 滚动条滑块\n private _slider!: IRect;\n // 滚动条滑轨\n private _rail!: IRect;\n // 滑块可渲染的区域包围盒\n private _sliderRenderBounds!: ComponentBounds | null;\n // 滑块滑动的范围\n private _sliderLimitRange!: [number, number] | null;\n // 保留滑块上一次的位置\n private _prePos!: number;\n // TODO: 临时方案\n private _viewPosition!: { x: number; y: number };\n private _sliderSize!: number;\n\n constructor(attributes: ScrollBarAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, ScrollBar.defaultAttributes, attributes));\n }\n\n setScrollRange(range: [number, number], render = true) {\n const {\n direction = 'horizontal',\n limitRange = [0, 1],\n range: preRange,\n realTime = true\n } = this.attribute as ScrollBarAttributes;\n\n const currScrollRange = clampRange(range, limitRange[0], limitRange[1]);\n if (render) {\n // 更新图形\n const sliderPos = this._getSliderPos(currScrollRange);\n if (this._slider) {\n if (direction === 'horizontal') {\n this._slider.setAttribute('x', sliderPos[0], true);\n } else {\n this._slider.setAttribute('y', sliderPos[0], true);\n }\n\n if (this.stage && !this.stage.autoRender) {\n this.stage.renderNextFrame();\n }\n }\n }\n (this.attribute as ScrollBarAttributes).range = currScrollRange;\n // 发射 change 事件\n if (realTime) {\n // FIXME: for vchart, 下个中版本删除\n this._dispatchEvent('scroll', {\n pre: preRange,\n value: currScrollRange\n });\n // FIXME: for vtable, 下个中版本保留\n this._dispatchEvent('scrollDrag', {\n pre: preRange,\n value: currScrollRange\n });\n }\n }\n\n getScrollRange(): [number, number] {\n return (this.attribute as ScrollBarAttributes).range;\n }\n\n // public setLocation(point: PointLocationCfg) {\n // this.translateTo(point.x, point.y);\n // }\n\n // 绑定事件\n protected bindEvents(): void {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n const { delayType = 'throttle', delayTime = 0 } = this.attribute as ScrollBarAttributes;\n // TODO: wheel 事件支持\n if (this._rail) {\n this._rail.addEventListener(\n 'pointerdown',\n delayMap[delayType](this._onRailPointerDown, delayTime) as EventListener\n );\n }\n if (this._slider) {\n this._slider.addEventListener('pointerdown', this._onSliderPointerDown as EventListener);\n }\n }\n\n protected render() {\n this._reset();\n const {\n direction = 'horizontal',\n width,\n height,\n range,\n limitRange = [0, 1],\n // sliderSize = 20,\n // scrollValue = 0,\n // scrollRange = [0, 1],\n railStyle,\n sliderStyle,\n padding = 2\n } = this.attribute as ScrollBarAttributes;\n\n const group = this.createOrUpdateChild('scrollbar-container', {}, 'group') as IGroup;\n // 绘制轨道\n\n const rail = group.createOrUpdateChild(\n 'scrollbar-rail',\n {\n x: 0,\n y: 0,\n width,\n height,\n ...railStyle\n },\n 'rect'\n ) as IRect;\n this._rail = rail;\n\n // 滑块\n const sliderRenderBounds = this._getSliderRenderBounds();\n const sliderPos = this._getSliderPos(clampRange(range, limitRange[0], limitRange[1]));\n const sliderSize = sliderPos[1] - sliderPos[0];\n this._sliderSize = sliderSize;\n // const sliderRangePos = this._getScrollRange();\n\n let sliderAttribute: IRectGraphicAttribute;\n if (direction === 'horizontal') {\n sliderAttribute = {\n x: sliderPos[0],\n y: sliderRenderBounds.y1,\n width: sliderSize,\n height: sliderRenderBounds.height\n };\n } else {\n sliderAttribute = {\n x: sliderRenderBounds.x1,\n y: sliderPos[0],\n width: sliderRenderBounds.width,\n height: sliderSize\n };\n }\n\n const slider = group.createOrUpdateChild(\n 'slider',\n {\n ...sliderAttribute,\n cornerRadius: this._getDefaultSliderCornerRadius(),\n ...sliderStyle,\n boundsPadding: normalizePadding(padding),\n pickMode: 'imprecise'\n },\n 'rect'\n ) as IRect;\n this._slider = slider;\n this._container = group;\n\n const containerAABBBounds = this._container.AABBBounds;\n this._viewPosition = {\n x: containerAABBBounds.x1,\n y: containerAABBBounds.y1\n };\n }\n\n // 获取滑块渲染的包围盒区域\n private _getSliderRenderBounds() {\n if (this._sliderRenderBounds) {\n return this._sliderRenderBounds;\n }\n const { width, height, padding = 2 } = this.attribute as ScrollBarAttributes;\n const [top, right, bottom, left] = normalizePadding(padding);\n const renderBounds = {\n x1: left,\n y1: top,\n x2: width - right,\n y2: height - bottom,\n width: Math.max(0, width - (left + right)),\n height: Math.max(0, height - (top + bottom))\n };\n this._sliderRenderBounds = renderBounds;\n return renderBounds;\n }\n\n // 获取默认的滑块圆角\n private _getDefaultSliderCornerRadius() {\n const { direction, round } = this.attribute as ScrollBarAttributes;\n\n if (round) {\n const { width, height } = this._getSliderRenderBounds();\n return direction === 'horizontal' ? height : width;\n }\n\n return 0;\n }\n\n // 计算滑块在轨道的位置\n private _getSliderPos(range: [number, number]) {\n const { direction } = this.attribute as ScrollBarAttributes;\n const { width, height, x1, y1 } = this._getSliderRenderBounds();\n\n if (direction === 'horizontal') {\n return [width * range[0] + x1, width * range[1] + x1];\n }\n return [height * range[0] + y1, height * range[1] + y1];\n }\n\n private _getScrollRange() {\n if (this._sliderLimitRange) {\n return this._sliderLimitRange;\n }\n const { limitRange = [0, 1], direction } = this.attribute as ScrollBarAttributes;\n const [min, max] = clampRange(limitRange, 0, 1);\n const { width, height, x1, y1 } = this._getSliderRenderBounds();\n const sliderSize = this._sliderSize;\n\n return direction === 'horizontal'\n ? clampRange([x1 + min * width, x1 + max * width], x1, width - sliderSize)\n : clampRange([y1 + min * height, y1 + max * height], y1, height - sliderSize);\n }\n\n private _onRailPointerDown = (e: FederatedPointerEvent) => {\n // 将事件坐标转换为实际的滑块位置\n // TODO: 这里有问题,应该拿 viewX viewY,同时 graphic 要提供接口获取它的 相对 view 的坐标\n const { viewX, viewY } = e;\n const { direction, width, height, range } = this.attribute as ScrollBarAttributes;\n const sliderSize = this._sliderSize;\n const [min, max] = this._getScrollRange();\n let currentScrollValue;\n if (direction === 'vertical') {\n const relativeY = viewY - this._viewPosition.y;\n const currentYPos = clamp(relativeY - sliderSize / 2, min, max);\n currentScrollValue = relativeY / height;\n this._slider.setAttribute('y', currentYPos, true);\n } else {\n const relativeX = viewX - this._viewPosition.x;\n const currentXPos = clamp(relativeX - sliderSize / 2, min, max);\n currentScrollValue = relativeX / width;\n this._slider.setAttribute('x', currentXPos, true);\n }\n\n this.setScrollRange(\n [currentScrollValue - (range[1] - range[0]) / 2, currentScrollValue + (range[1] - range[0]) / 2],\n false\n );\n\n if (this.stage && !this.stage.autoRender) {\n this.stage.renderNextFrame();\n }\n };\n\n private _onSliderPointerDown = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n const { direction } = this.attribute as ScrollBarAttributes;\n this._prePos = direction === 'horizontal' ? e.clientX : e.clientY;\n this._dispatchEvent('scrollDown', {\n pos: this._prePos,\n event: e\n });\n if (vglobal.env === 'browser') {\n vglobal.addEventListener('pointermove', this._onSliderPointerMove, { capture: true });\n vglobal.addEventListener('pointerup', this._onSliderPointerUp);\n } else {\n this.stage.addEventListener('pointermove', this._onSliderPointerMove, { capture: true });\n this.stage.addEventListener('pointerup', this._onSliderPointerUp);\n this.stage.addEventListener('pointerupoutside', this._onSliderPointerUp);\n }\n };\n\n private _computeScrollValue = (e: any) => {\n const { direction } = this.attribute as ScrollBarAttributes;\n let currentScrollValue;\n let currentPos;\n let delta = 0;\n\n const { width, height } = this._getSliderRenderBounds();\n if (direction === 'vertical') {\n currentPos = e.clientY;\n delta = currentPos - this._prePos;\n currentScrollValue = delta / height;\n } else {\n currentPos = e.clientX;\n delta = currentPos - this._prePos;\n currentScrollValue = delta / width;\n }\n return [currentPos, currentScrollValue];\n };\n\n private _onSliderPointerMove = delayMap[this.attribute.delayType]((e: any) => {\n e.stopPropagation();\n const preScrollRange = this.getScrollRange();\n const [currentPos, currentScrollValue] = this._computeScrollValue(e);\n this.setScrollRange([preScrollRange[0] + currentScrollValue, preScrollRange[1] + currentScrollValue], true);\n this._prePos = currentPos;\n }, this.attribute.delayTime);\n\n private _onSliderPointerUp = (e: any) => {\n e.preventDefault();\n const { realTime = true, range: preRange, limitRange = [0, 1] } = this.attribute as ScrollBarAttributes;\n // 发射 change 事件\n const preScrollRange = this.getScrollRange();\n const [currentPos, currentScrollValue] = this._computeScrollValue(e);\n const range: [number, number] = [preScrollRange[0] + currentScrollValue, preScrollRange[1] + currentScrollValue];\n\n // FIXME: for vchart, 下个中版本删除\n if (!realTime) {\n this._dispatchEvent('scroll', {\n pre: preRange,\n value: clampRange(range, limitRange[0], limitRange[1])\n });\n }\n // FIXME: for vtable, 下个中版本保留\n this._dispatchEvent('scrollUp', {\n pre: preRange,\n value: clampRange(range, limitRange[0], limitRange[1])\n });\n if (vglobal.env === 'browser') {\n vglobal.removeEventListener('pointermove', this._onSliderPointerMove, { capture: true });\n vglobal.removeEventListener('pointerup', this._onSliderPointerUp);\n } else {\n this.stage.removeEventListener('pointermove', this._onSliderPointerMove, { capture: true });\n this.stage.removeEventListener('pointerup', this._onSliderPointerUp);\n this.stage.removeEventListener('pointerupoutside', this._onSliderPointerUp);\n }\n };\n\n private _reset() {\n this._sliderRenderBounds = null;\n this._sliderLimitRange = null;\n }\n}\n","import { registerGroup, registerRect } from '@visactor/vrender-kits';\n\nexport function loadScrollbarComponent() {\n registerGroup();\n registerRect();\n}\n","import type { Maybe } from '@visactor/vutils';\nimport { isArray, isBoolean, isEmpty, isNil, isNumber, isValid } from '@visactor/vutils';\nimport type { IComponentOption } from '../../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { DataFilterBaseComponent } from '../data-filter-base-component';\nimport type { ScrollBarAttributes } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { ScrollBar as ScrollBarComponent } from '@visactor/vrender-components';\nimport { transformToGraphic } from '../../../util/style';\nimport type { IRectGraphicAttribute, INode, IGroup, IGraphic } from '@visactor/vrender-core';\nimport { ChartEvent, LayoutLevel, LayoutZIndex } from '../../../constant';\nimport { SCROLL_BAR_DEFAULT_SIZE } from '../../../constant/scroll-bar';\nimport type { IScrollBarSpec } from './interface';\nimport { IFilterMode } from '../constant';\nimport { Factory } from '../../../core/factory';\nimport type { IZoomable } from '../../../interaction/zoom';\nimport type { ILayoutType } from '../../../typings/layout';\nimport type { IModelSpecInfo } from '../../../model/interface';\n\nexport class ScrollBar extends DataFilterBaseComponent {\n static type = ComponentTypeEnum.scrollBar;\n type = ComponentTypeEnum.scrollBar;\n name: string = ComponentTypeEnum.scrollBar;\n\n static specKey = 'scrollBar';\n specKey = 'scrollBar';\n\n layoutZIndex: number = LayoutZIndex.DataZoom;\n layoutLevel: number = LayoutLevel.DataZoom;\n layoutType: ILayoutType = 'region-relative';\n\n // datazoom组件\n protected _component!: ScrollBarComponent;\n\n static getSpecInfo(chartSpec: any): Maybe {\n const compSpec = chartSpec[this.specKey];\n if (isNil(compSpec)) {\n return undefined;\n }\n if (!isArray(compSpec)) {\n return [\n {\n spec: compSpec,\n specPath: [this.specKey],\n type: ComponentTypeEnum.scrollBar\n }\n ];\n }\n const specInfos: IModelSpecInfo[] = [];\n compSpec.forEach((s, i: number) => {\n specInfos.push({\n spec: s,\n specIndex: i,\n specPath: [this.specKey, i],\n type: ComponentTypeEnum.scrollBar\n });\n });\n return specInfos;\n }\n\n constructor(spec: T, options: IComponentOption) {\n super(spec as any, options);\n this._filterMode = spec.filterMode ?? IFilterMode.axis;\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n // roam兼容逻辑\n if (isBoolean((this._spec as any).roam)) {\n this._zoomAttr.enable = false; // 对于之前的逻辑而言,只要配置了roam,zoom始终不打开\n this._dragAttr.enable = (this._spec as any).roam;\n this._scrollAttr.enable = (this._spec as any).roam;\n }\n if (this._zoomAttr.enable || this._dragAttr.enable || this._scrollAttr.enable) {\n (this as unknown as IZoomable).initZoomable(this.event, this._option.mode);\n }\n }\n\n /** LifeCycle API**/\n onLayoutEnd(ctx: any): void {\n this._updateScaleRange();\n this.effect.onZoomChange?.();\n super.onLayoutEnd(ctx);\n }\n\n protected _updateScaleRange() {\n if (this._component) {\n this._component.setAttributes({\n x: this.getLayoutStartPoint().x,\n y: this.getLayoutStartPoint().y,\n width: this.getLayoutRect().width,\n height: this.getLayoutRect().height\n });\n }\n }\n\n protected _computeWidth(): number {\n if (isNumber(this._spec.width)) {\n return this._spec.width;\n }\n\n if (this._isHorizontal) {\n return this.getLayoutRect().width;\n }\n // default value\n return SCROLL_BAR_DEFAULT_SIZE;\n }\n\n protected _computeHeight(): number {\n if (isNumber(this._spec.height)) {\n return this._spec.height;\n }\n\n // default value\n if (!this._isHorizontal) {\n return this.getLayoutRect().height;\n }\n\n return SCROLL_BAR_DEFAULT_SIZE;\n }\n\n private _getAttrs() {\n return {\n zIndex: this.layoutZIndex,\n x: this.getLayoutStartPoint().x,\n y: this.getLayoutStartPoint().y,\n width: this.getLayoutRect().width,\n height: this.getLayoutRect().height,\n range: [this._start, this._end],\n direction: this._isHorizontal ? 'horizontal' : 'vertical',\n delayType: this._spec?.delayType,\n delayTime: isValid(this._spec?.delayType) ? this._spec?.delayTime ?? 30 : 0,\n realTime: this._spec?.realTime ?? true,\n ...this._getComponentAttrs()\n } as ScrollBarAttributes;\n }\n\n protected _createOrUpdateComponent() {\n const attrs = this._getAttrs();\n if (this._component) {\n this._component.setAttributes(attrs);\n } else {\n const container = this.getContainer();\n this._component = new ScrollBarComponent(attrs);\n // 绑定事件,防抖,防止频繁触发\n this._component.addEventListener('scroll', (e: any) => {\n const value = e.detail.value;\n this._handleChange(value[0], value[1]);\n });\n container.add(this._component as unknown as INode);\n }\n }\n\n protected _handleChange(start: number, end: number, updateComponent?: boolean) {\n super._handleChange(start, end, updateComponent);\n if (updateComponent && this._component) {\n this._component.setAttribute('range', [start, end]);\n }\n\n this._start = start;\n this._end = end;\n const hasChange = this._handleStateChange(this._statePointToData(start), this._statePointToData(end));\n if (hasChange) {\n this.event.emit(ChartEvent.scrollBarChange, {\n model: this,\n value: {\n filterData: this._filterMode !== IFilterMode.axis,\n start: this._start,\n end: this._end,\n startValue: this._startValue,\n endValue: this._endValue,\n newDomain: this._newDomain\n }\n });\n }\n }\n\n protected _handleDataCollectionChange() {\n // do nothing\n }\n\n protected _initCommonEvent() {\n super._initCommonEvent();\n if (this._component) {\n this._component.on('scroll', (e: any) => {\n const value = e.detail.value;\n this._handleChange(value[0], value[1]);\n });\n }\n }\n\n protected _getComponentAttrs() {\n const { rail, slider, innerPadding } = this._spec;\n const attrs: Partial = {};\n\n if (!isNil(innerPadding)) {\n attrs.padding = innerPadding;\n }\n\n if (!isEmpty(rail?.style)) {\n attrs.railStyle = transformToGraphic(rail.style) as unknown as IRectGraphicAttribute;\n }\n if (!isEmpty(slider?.style)) {\n attrs.sliderStyle = transformToGraphic(slider.style) as unknown as IRectGraphicAttribute;\n }\n attrs.disableTriggerEvent = this._option.disableTriggerEvent;\n return attrs;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._component] as unknown as IGroup[];\n }\n}\n\nexport const registerScrollBar = () => {\n Factory.registerComponent(ScrollBar.type, ScrollBar);\n};\n","import { array } from '@visactor/vutils';\nimport type { IIndicatorItemSpec } from './interface';\n\nexport interface IIndicatorDatum {\n type: 'title' | 'content';\n index: number;\n datum: any;\n spec: IIndicatorItemSpec;\n}\n\nexport interface IIndicatorMapper {\n title: IIndicatorItemSpec;\n content: IIndicatorItemSpec[];\n datum: () => any;\n}\n\nexport const indicatorMapper = (data: Array, op: IIndicatorMapper) => {\n const { datum, title, content } = op;\n const mappedData: Array = [];\n const datumResult = datum.call(null);\n if (title.visible) {\n mappedData.push({\n type: 'title',\n index: 0,\n datum: datumResult,\n spec: title\n } as IIndicatorDatum);\n }\n array(content).forEach((c, i) => {\n if (c.visible) {\n mappedData.push({\n type: 'content',\n index: i,\n datum: datumResult,\n spec: c\n } as IIndicatorDatum);\n }\n });\n return mappedData;\n};\n","import { IndicatorAttributes } from './type';\nexport const DEFAULT_INDICATOR_THEME: Partial = {\n title: {\n style: {\n text: '',\n fontSize: 20,\n fill: 'black',\n fontWeight: 'normal',\n fillOpacity: 1,\n textBaseline: 'top',\n textAlign: 'center'\n }\n },\n content: {\n style: {\n text: '',\n fontSize: 16,\n fill: 'black',\n fontWeight: 'normal',\n fillOpacity: 1,\n textBaseline: 'top',\n textAlign: 'center'\n }\n }\n};\n","import { registerGroup, registerRichtext, registerText } from '@visactor/vrender-kits';\n\nexport function loadIndicatorComponent() {\n registerGroup();\n registerText();\n registerRichtext();\n}\n","/**\n * @description 指标卡组件\n */\nimport type { IGroup, INode, IText, ITextGraphicAttribute } from '@visactor/vrender-core';\nimport { merge, isValid, array, isValidNumber, get } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport { measureTextSize } from '../util';\nimport type { IndicatorAttributes, IndicatorItemSpec } from './type';\nimport { DEFAULT_INDICATOR_THEME } from './config';\nimport { DEFAULT_HTML_TEXT_SPEC } from '../constant';\nimport { loadIndicatorComponent } from './register';\n\nloadIndicatorComponent();\nexport class Indicator extends AbstractComponent> {\n name = 'indicator';\n\n private _title?: IText;\n private _content?: IText | IText[];\n\n protected render() {\n const { visible, title = {}, content, size, limitRatio = Infinity } = this.attribute as IndicatorAttributes;\n\n const limit = Math.min(size.width, size.height) * limitRatio;\n\n const group = this.createOrUpdateChild('indicator-container', { x: 0, y: 0, zIndex: 1 }, 'group') as IGroup;\n\n // 指标卡全部隐藏\n if (visible !== true) {\n group && group.hideAll();\n return;\n }\n\n if (isValid(title)) {\n if (title.visible !== false) {\n const titleStyle = merge({}, get(DEFAULT_INDICATOR_THEME, 'title.style'), title.style);\n if (titleStyle.type === 'rich') {\n this._title = group.createOrUpdateChild(\n 'indicator-title',\n {\n textConfig: titleStyle.text,\n ...titleStyle,\n visible: title.visible,\n x: 0,\n y: 0,\n width: titleStyle.width ?? 0,\n height: titleStyle.height ?? 0\n },\n 'richtext'\n ) as IText;\n } else if (titleStyle.type === 'html') {\n this._title = group.createOrUpdateChild(\n 'indicator-title',\n {\n textConfig: [],\n html: {\n dom: titleStyle.text as string,\n ...DEFAULT_HTML_TEXT_SPEC,\n ...titleStyle\n },\n ...titleStyle,\n visible: title.visible,\n x: 0,\n y: 0\n },\n 'richtext'\n ) as IText;\n } else {\n this._title = group.createOrUpdateChild(\n 'indicator-title',\n {\n ...titleStyle,\n /**\n * 加入以下逻辑:如果没有声明lineHeight,默认 lineHeight 等于 fontSize\n * 因为如果不声明 vrender 底层会默认给文本加上 2px 的高度,会影响布局计算\n * 注意:在autoFit改变fontsize时,lineHeight也要同步修改\n */\n lineHeight: isValid(titleStyle.lineHeight) ? titleStyle.lineHeight : titleStyle.fontSize,\n visible: title.visible,\n x: 0,\n y: 0\n },\n 'text'\n ) as IText;\n }\n\n // auto-fit\n if (title.autoFit && isValidNumber(limit)) {\n this._setLocalAutoFit(limit, this._title, title);\n }\n\n //auto-limit\n if (title.autoLimit && isValidNumber(limitRatio)) {\n this._title.setAttribute('maxLineWidth', limit);\n }\n } else {\n /**\n * indicator部分隐藏\n * 例如title隐藏了,content还保留。直接设置visible:false 计算group.AABBounts是错的,影响上下居中。\n * 这里把隐藏的nodes删除后,group.AABBounts计算才正确。\n */\n const titleNode = group.find(node => node.name === 'indicator-title', false);\n titleNode && group.removeChild(titleNode as INode);\n this._title = undefined;\n }\n }\n\n if (isValid(content)) {\n const contents: IndicatorItemSpec[] = array(content);\n const contentComponents: IText[] = [];\n contents.forEach((contentItem, i) => {\n if (contentItem.visible !== false) {\n const contentStyle = merge({}, get(DEFAULT_INDICATOR_THEME, 'content.style'), contentItem.style);\n let contentComponent;\n if (contentStyle.type === 'rich') {\n contentComponent = group.createOrUpdateChild(\n 'indicator-content-' + i,\n {\n textConfig: contentStyle.text,\n ...contentStyle,\n visible: title.visible,\n x: 0,\n y: 0,\n width: contentStyle.width ?? 0,\n height: contentStyle.height ?? 0\n },\n 'richtext'\n ) as IText;\n } else if (contentStyle.type === 'html') {\n contentComponent = group.createOrUpdateChild(\n 'indicator-content-' + i,\n {\n textConfig: [],\n html: {\n dom: contentStyle.text as string,\n ...DEFAULT_HTML_TEXT_SPEC,\n ...contentStyle\n },\n ...contentStyle,\n visible: title.visible,\n x: 0,\n y: 0\n },\n 'richtext'\n ) as IText;\n } else {\n contentComponent = group.createOrUpdateChild(\n 'indicator-content-' + i,\n {\n ...contentStyle,\n lineHeight: isValid(contentStyle.lineHeight) ? contentStyle.lineHeight : contentStyle.fontSize,\n visible: contentItem.visible,\n x: 0,\n y: 0\n },\n 'text'\n ) as IText;\n }\n\n // auto-fit\n if (contentItem.autoFit && isValidNumber(limit)) {\n this._setLocalAutoFit(limit, contentComponent, contentItem);\n }\n\n //auto-limit\n if (contentItem.autoLimit && isValidNumber(limitRatio)) {\n contentComponent.setAttribute('maxLineWidth', limit);\n }\n\n contentComponents.push(contentComponent);\n } else {\n /**\n * indicator部分隐藏\n */\n const contentItemNode = group.find(node => node.name === 'indicator-content-' + i, false);\n contentItemNode && group.removeChild(contentItemNode as INode);\n }\n });\n this._content = contentComponents;\n }\n\n this._setGlobalAutoFit(limit);\n this._setYPosition();\n\n const totalHeight = group?.AABBBounds.height() ?? 0;\n group.setAttribute('y', size.height / 2 - totalHeight / 2);\n group.setAttribute('x', size.width / 2);\n }\n\n private _setLocalAutoFit(limit: number, indicatorItem: IText, indicatorItemSpec: IndicatorItemSpec) {\n // only apply local auto fit for default auto fit text\n if ((indicatorItemSpec.fitStrategy ?? 'default') !== 'default') {\n return;\n }\n const originWidth = measureTextSize(\n (indicatorItemSpec.style?.text ?? '') as string | number | number[] | string[],\n (indicatorItemSpec.style ?? {}) as Partial,\n this.stage?.getTheme().text.fontFamily\n ).width;\n if (originWidth > 0) {\n const ratio = (limit * (indicatorItemSpec.fitPercent ?? 0.5)) / originWidth;\n const fontSize = Math.floor((indicatorItemSpec.style?.fontSize ?? 20) * ratio);\n indicatorItem.setAttribute('fontSize', fontSize);\n indicatorItem.setAttribute(\n 'lineHeight',\n isValid(indicatorItemSpec.style.lineHeight) ? indicatorItemSpec.style.lineHeight : fontSize\n );\n }\n }\n\n private _setGlobalAutoFit(limit: number) {\n // compute the inscribed rect width & height for all texts\n // the font size will be determined by the longest text\n // 1. hx^2 + hy^2 = r^2\n // 2. hy = ra * hx + h\n // -> (ra^2 + 1) * x^2 + (2 * h * ra) * x + (h^2 - r^2) = 0\n\n const r = limit / 2;\n\n // unify the initial font size for auto fit texts\n const singleHeight = 12;\n const autoFitTexts: { text: IText; spec: IndicatorItemSpec }[] = [];\n // other text height\n let otherHeight = 0;\n // non auto fit title height\n const titleSpec = this.attribute.title ?? {};\n if (titleSpec.autoFit && titleSpec.fitStrategy === 'inscribed') {\n this._title.setAttribute('fontSize', singleHeight);\n autoFitTexts.push({ text: this._title, spec: this.attribute.title ?? {} });\n } else {\n otherHeight += this._title?.AABBBounds?.height?.() ?? 0;\n }\n const titleSpace = titleSpec.space ?? 0;\n otherHeight += titleSpace;\n // non auto fit content height\n array(this.attribute.content)\n .filter(contentSpec => contentSpec.visible !== false)\n .forEach((contentSpec, index) => {\n const contentText = this._content[index];\n if (contentSpec.autoFit && contentSpec.fitStrategy === 'inscribed') {\n contentText.setAttribute('fontSize', singleHeight);\n autoFitTexts.push({ text: contentText, spec: contentSpec });\n } else {\n otherHeight += contentText?.AABBBounds?.height?.() ?? 0;\n }\n const contentSpace = contentSpec.space ?? 0;\n otherHeight += contentSpace;\n });\n if (autoFitTexts.length <= 0) {\n return;\n }\n\n // max width for all auto fit texts\n const maxWidth = autoFitTexts.reduce((width, textItem) => {\n return Math.max(width, textItem.text.AABBBounds.width());\n }, 0);\n\n // y = x * (singleHeight / maxWidth * textCount) + otherHeight\n // hy = hx * (singleHeight / maxWidth * textCount) + otherHeight / 2\n const ra = (singleHeight / maxWidth) * autoFitTexts.length;\n const h = otherHeight / 2;\n const a = ra ** 2 + 1;\n const b = 2 * h * ra;\n const c = h ** 2 - r ** 2;\n const hx = (-b + Math.sqrt(b ** 2 - 4 * a * c)) / (2 * a);\n const hy = ra * hx + h;\n const y = 2 * hy;\n const lineHeight = (y - otherHeight) / autoFitTexts.length;\n if (isValidNumber(y)) {\n autoFitTexts.forEach(textItem => {\n const specLineHeight = textItem.spec.style?.lineHeight;\n textItem.text.setAttribute('fontSize', lineHeight);\n textItem.text.setAttribute('lineHeight', isValid(specLineHeight) ? specLineHeight : lineHeight);\n });\n }\n }\n\n private _setYPosition() {\n let lastContentHeight = 0;\n\n const titleHeight = this._title?.AABBBounds?.height?.() ?? 0;\n const titleSpace = this.attribute.title?.space ?? 0;\n array(this.attribute.content)\n .filter(contentSpec => contentSpec.visible !== false)\n .forEach((contentSpec, index) => {\n const contentText = this._content[index];\n contentText.setAttribute('y', titleHeight + titleSpace + lastContentHeight);\n const contentSpace = contentSpec.space ?? 0;\n lastContentHeight += contentText.AABBBounds.height() + contentSpace;\n });\n }\n}\n","import { DataView } from '@visactor/vdataset';\nimport type { IComponentOption } from '../interface';\nimport { LayoutLevel, LayoutZIndex } from '../../constant';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport { BaseComponent } from '../base/base-component';\nimport type { IRegion } from '../../region/interface';\nimport type { IIndicator, IIndicatorItemSpec, IIndicatorSpec, IIndicatorTheme } from './interface';\nimport type { Maybe } from '../../typings';\nimport { mergeSpec } from '../../util/spec/merge-spec';\nimport { eachSeries } from '../../util/model';\nimport { transformToGraphic } from '../../util/style';\nimport { getActualNumValue } from '../../util/space';\nimport { isEqual, isValid, isFunction, array, isArray } from '@visactor/vutils';\nimport { indicatorMapper } from './util';\nimport type { IModel, IModelSpecInfo } from '../../model/interface';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { CompilableData } from '../../compile/data/compilable-data';\nimport { Indicator as IndicatorComponents } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IndicatorAttributes } from '@visactor/vrender-components';\nimport type { IGraphic, INode, IGroup } from '@visactor/vrender-core';\nimport type { FunctionType } from '../../typings/visual';\nimport { Factory } from '../../core/factory';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IRichTextCharacter } from '@visactor/vrender-core';\n\nexport class Indicator extends BaseComponent implements IIndicator {\n static type = ComponentTypeEnum.indicator;\n type = ComponentTypeEnum.indicator;\n name: string = ComponentTypeEnum.indicator;\n\n static specKey = 'indicator';\n specKey = 'indicator';\n\n layoutType: 'none' = 'none';\n layoutZIndex: number = LayoutZIndex.Indicator;\n layoutLevel: number = LayoutLevel.Indicator;\n\n private _gap: number = 0;\n\n private _activeDatum: any = null;\n private _displayData!: CompilableData;\n\n private _title: IIndicatorItemSpec;\n private _content: IIndicatorItemSpec[];\n\n private _indicatorComponent: IndicatorComponents;\n private _cacheAttrs: IndicatorAttributes;\n\n static getSpecInfo(chartSpec: any): Maybe {\n if (this.type !== Indicator.type) {\n return null;\n }\n const indicatorSpec = chartSpec[this.specKey];\n if (!isArray(indicatorSpec)) {\n if (indicatorSpec.visible === false) {\n return [];\n }\n return [\n {\n spec: indicatorSpec,\n specPath: [this.specKey],\n type: ComponentTypeEnum.indicator\n }\n ];\n }\n\n const specInfos: IModelSpecInfo[] = [];\n indicatorSpec.forEach((s, i) => {\n if (s && s.visible !== false) {\n specInfos.push({\n spec: s,\n specIndex: i,\n specPath: [this.specKey, i],\n type: ComponentTypeEnum.indicator\n });\n }\n });\n return specInfos;\n }\n\n created() {\n super.created();\n // data\n this.initData();\n // event\n this.initEvent();\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this._gap = this._spec.gap || 0;\n this._title = this._spec.title;\n this._content = array(this._spec.content);\n this._regions = this._option.getRegionsInUserIdOrIndex(array(this._spec.regionId), array(this._spec.regionIndex));\n }\n\n onRender(ctx: any): void {\n // do nothing\n }\n\n // region\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n // event\n protected initEvent() {\n if (this._option.disableTriggerEvent) {\n return;\n }\n const trigger = this._spec.trigger;\n if (trigger === 'none') {\n return;\n }\n\n if (this._spec.trigger === 'hover') {\n this.event.on('hovered', params => {\n if (!params.model || this.isRelativeModel(params.model)) {\n this.updateDatum(params.value[0]);\n }\n });\n this.event.on('unhovered', params => {\n if (!params.model || this.isRelativeModel(params.model)) {\n this.updateDatum(null);\n }\n });\n } else {\n this.event.on('selected', params => {\n if (!params.model || this.isRelativeModel(params.model)) {\n this.updateDatum(params.value[0]);\n }\n });\n this.event.on('unselected', params => {\n if (!params.model || this.isRelativeModel(params.model)) {\n this.updateDatum(null);\n }\n });\n }\n }\n\n private updateDatum(datum: any) {\n this._activeDatum = datum;\n this._displayData.updateData();\n const attrs = this._getIndicatorAttrs();\n this._createOrUpdateIndicatorComponent(attrs);\n }\n\n // data\n private initData() {\n registerDataSetInstanceTransform(this._option.dataSet, 'indicatorFilter', indicatorMapper);\n const displayData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` });\n displayData.transform({\n type: 'indicatorFilter',\n options: {\n title: this._title,\n content: this._content,\n datum: () => this._activeDatum\n }\n });\n\n displayData.target.addListener('change', this.updateDatum.bind(this));\n\n this._displayData = new CompilableData(this._option, displayData);\n }\n\n updateLayoutAttribute(): void {\n const attrs = this._getIndicatorAttrs();\n this._createOrUpdateIndicatorComponent(attrs);\n\n super.updateLayoutAttribute();\n }\n\n private _getIndicatorAttrs() {\n const region = this._regions[0];\n const { width, height } = region.getLayoutRect();\n const { x, y } = region.getLayoutStartPoint();\n\n const contentComponentSpec: IIndicatorItemSpec[] = [];\n array(this._spec.content).forEach((eachItem: IIndicatorItemSpec) => {\n const contentSpec = mergeSpec({}, this._theme.content, eachItem);\n contentComponentSpec.push({\n visible: contentSpec.visible !== false && (contentSpec.field ? this._activeDatum !== null : true),\n space: contentSpec.space || this._gap,\n autoLimit: contentSpec.autoLimit,\n autoFit: contentSpec.autoFit,\n fitPercent: contentSpec.fitPercent,\n style: {\n ...transformToGraphic(contentSpec.style),\n text: this._createText(contentSpec.field, contentSpec.style.text)\n }\n });\n });\n\n return {\n visible: this._spec.visible !== false && (this._spec.fixed !== false || this._activeDatum !== null),\n size: {\n width: width,\n height: height\n },\n zIndex: this.layoutZIndex,\n x: x,\n y: y,\n dx: this._spec.offsetX ? getActualNumValue(this._spec.offsetX, this._computeLayoutRadius()) : 0,\n dy: this._spec.offsetY ? getActualNumValue(this._spec.offsetY, this._computeLayoutRadius()) : 0,\n limitRatio: this._spec.limitRatio || Infinity,\n title: {\n visible: this._spec.title.visible !== false && (!isValid(this._spec.title.field) || this._activeDatum !== null),\n space: this._spec.title.space || this._gap,\n autoLimit: this._spec.title.autoLimit,\n autoFit: this._spec.title.autoFit,\n fitPercent: this._spec.title.fitPercent,\n style: {\n ...transformToGraphic(this._spec.title.style),\n text: this._createText(this._spec.title.field, this._spec.title.style.text)\n }\n },\n content: contentComponentSpec\n } as IndicatorAttributes;\n }\n\n private _createOrUpdateIndicatorComponent(attrs: IndicatorAttributes): IndicatorComponents {\n if (this._indicatorComponent) {\n if (!isEqual(attrs, this._cacheAttrs)) {\n this._indicatorComponent.setAttributes(attrs);\n }\n } else {\n const container = this.getContainer();\n //FIXME:类型“IndicatorAttributes”的参数不能赋给类型“Required”的参数\n const indicator = new IndicatorComponents(attrs as any);\n indicator.name = 'indicator';\n container.add(indicator as unknown as INode);\n this._indicatorComponent = indicator;\n this._indicatorComponent.on('*', (event: any, type: string) =>\n this._delegateEvent(this._indicatorComponent as unknown as IGraphic, event, type)\n );\n }\n this._cacheAttrs = attrs;\n return this._indicatorComponent;\n }\n\n private _createText(\n field: string | undefined,\n text:\n | string\n | number\n | string[]\n | number[]\n | IRichTextCharacter[]\n | FunctionType\n ) {\n if (field) {\n return this._activeDatum ? this._activeDatum[field] : '';\n }\n if (isFunction(text)) {\n return text(this._activeDatum, undefined) ?? '';\n }\n return text ?? '';\n }\n\n private _computeLayoutRadius() {\n const region = this._regions[0];\n const { width, height } = region.getLayoutRect();\n return Math.min(width / 2, height / 2);\n }\n\n private isRelativeModel(model: IModel) {\n return eachSeries(this._regions, s => model === s) || this._regions.includes(model as IRegion);\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._indicatorComponent] as unknown as IGroup[];\n }\n\n clear(): void {\n this._cacheAttrs = null;\n super.clear();\n }\n}\n\nexport const registerIndicator = () => {\n Factory.registerComponent(Indicator.type, Indicator);\n};\n","import type { DataView } from '@visactor/vdataset';\nimport type { IAggrType } from '../../component/marker/interface';\nimport type { ICartesianSeries } from '../../series/interface';\nimport type { Datum, StringOrNumber } from '../../typings';\n\nimport { isArray, isFunction, isPlainObject, isValid } from '@visactor/vutils';\nimport { variance, average, min, max, sum, standardDeviation, median } from '../../util/math';\n\nexport type IOption = {\n field: string;\n};\n\nexport type IOptionAggrField = {\n field: string;\n aggrType: IAggrType;\n};\n\nexport type IOptionPos = IOptionAggrField | string | number | StringOrNumber[];\n\nexport type IOptionSeries = {\n getRelativeSeries: () => ICartesianSeries;\n getStartRelativeSeries: () => ICartesianSeries;\n getEndRelativeSeries: () => ICartesianSeries;\n};\n\nexport type IOptionCallback = (\n relativeSeriesData: any,\n startRelativeSeriesData: any,\n endRelativeSeriesData: any,\n relativeSeries: ICartesianSeries,\n startRelative: ICartesianSeries,\n endRelative: ICartesianSeries\n) => IOptionPos;\n\nexport type IOptionAggr = {\n x?: IOptionPos | IOptionCallback;\n y?: IOptionPos | IOptionCallback;\n getRefRelativeSeries?: () => ICartesianSeries;\n} & IOptionSeries;\n\nexport const markerMin = (_data: Array, opt: IOption) => {\n const data = _data[0].latestData as Datum[];\n\n return min(data, opt.field);\n};\nexport const markerMax = (_data: Array, opt: IOption) => {\n const data = _data[0].latestData as Datum[];\n\n return max(data, opt.field);\n};\n\nexport function markerSum(_data: Array, opt: IOption) {\n const data = _data[0].latestData;\n\n return sum(data, opt.field);\n}\nexport function markerAverage(_data: Array, opt: IOption) {\n const data = _data[0].latestData;\n\n return average(data, opt.field);\n}\n\nexport function markerVariance(_data: Array, opt: IOption) {\n const data = _data[0].latestData;\n\n return variance(data, opt.field);\n}\n\nexport function markerStandardDeviation(_data: Array, opt: IOption) {\n const data = _data[0].latestData;\n\n return standardDeviation(data, opt.field);\n}\n\nexport function markerMedian(_data: Array, opt: IOption) {\n const data = _data[0].latestData;\n\n return median(data, opt.field);\n}\n\nexport function markerAggregation(_data: Array, options: IOptionAggr[]) {\n const results: {\n x: StringOrNumber[] | StringOrNumber | IOptionCallback | null;\n y: StringOrNumber[] | StringOrNumber | IOptionCallback | null;\n }[] = [];\n options.forEach(option => {\n const result: {\n x: StringOrNumber[] | StringOrNumber | null;\n y: StringOrNumber[] | StringOrNumber | null;\n getRefRelativeSeries?: () => ICartesianSeries;\n } = { x: null, y: null };\n\n if (isValid(option.x)) {\n const x = option.x;\n\n if (isArray(x)) {\n result.x = x.map(item => getFinalValue(item, _data, option)) as StringOrNumber[];\n } else {\n result.x = getFinalValue(x, _data, option) as StringOrNumber;\n }\n }\n if (isValid(option.y)) {\n const y = option.y;\n if (isArray(y)) {\n result.y = y.map(item => getFinalValue(item, _data, option)) as StringOrNumber[];\n } else {\n result.y = getFinalValue(y, _data, option) as StringOrNumber;\n }\n }\n if (option.getRefRelativeSeries) {\n result.getRefRelativeSeries = option.getRefRelativeSeries;\n }\n results.push(result);\n });\n\n return results;\n}\n\nconst aggrMap = {\n min: markerMin,\n max: markerMax,\n sum: markerSum,\n average: markerAverage,\n variance: markerVariance,\n standardDeviation: markerStandardDeviation,\n median: markerMedian\n};\n\nfunction getFinalValue(source: IOptionPos | IOptionCallback, _data: Array, option: IOptionAggr) {\n const relativeSeries = option.getRelativeSeries();\n const startSeries = option.getStartRelativeSeries();\n const endSeries = option.getEndRelativeSeries();\n const relativeSeriesData = relativeSeries.getData().getLatestData();\n const startRelativeSeriesData = startSeries.getData().getLatestData();\n const endRelativeSeriesData = endSeries.getData().getLatestData();\n\n if (isFunction(source)) {\n return source(\n relativeSeriesData,\n startRelativeSeriesData,\n endRelativeSeriesData,\n relativeSeries,\n startSeries,\n endSeries\n ) as StringOrNumber[] | StringOrNumber;\n }\n if (isPlainObject(source)) {\n const { aggrType, field } = source as IOptionAggrField;\n return aggrMap[aggrType](_data, { field: field });\n }\n\n return source;\n}\n","import type { IAggrType } from '../component/marker/interface';\nimport type { IRegressType } from '../component/marker/mark-area/interface';\n\nexport const AGGR_TYPE: IAggrType[] = ['sum', 'average', 'min', 'max', 'variance', 'standardDeviation', 'median'];\n\nexport const REGRESS_TYPE: IRegressType[] = ['regression'];\n","import type {\n IGroup,\n IGroupGraphicAttribute,\n IImageGraphicAttribute,\n IPolygonAttribute,\n IRichTextGraphicAttribute,\n ISymbolGraphicAttribute\n} from '@visactor/vrender-core';\nimport type { SegmentAttributes, SymbolAttributes } from '../segment';\nimport type { TagAttributes } from '../tag';\nimport type { Point } from '../core/type';\n\nexport enum IMarkLineLabelPosition {\n start = 'start',\n middle = 'middle',\n end = 'end',\n insideStartTop = 'insideStartTop',\n insideStartBottom = 'insideStartBottom',\n insideMiddleTop = 'insideMiddleTop',\n insideMiddleBottom = 'insideMiddleBottom',\n insideEndTop = 'insideEndTop',\n insideEndBottom = 'insideEndBottom'\n}\n\nexport enum IMarkAreaLabelPosition {\n left = 'left',\n right = 'right',\n top = 'top',\n bottom = 'bottom',\n middle = 'middle',\n insideLeft = 'insideLeft',\n insideRight = 'insideRight',\n insideTop = 'insideTop',\n insideBottom = 'insideBottom'\n}\n\nexport enum IMarkPointItemPosition {\n top = 'top',\n bottom = 'bottom',\n middle = 'middle',\n insideTop = 'insideTop',\n insideBottom = 'insideBottom',\n insideMiddle = 'insideMiddle'\n}\n\nexport type IMarkBackgroundAttributes = {\n /**\n * 是否绘制背景层\n */\n visible: boolean;\n /**\n * TODO: 根据文字宽度进行背景 panel size自适应\n */\n autoHeight?: boolean;\n /**\n * TODO: 根据文高度度进行背景 panel size自适应\n */\n autoWidth?: boolean;\n} & Partial;\n\nexport type IMarkLabel = Omit & {\n /**\n * 标签的背景面板配置\n */\n panel?: IMarkBackgroundAttributes;\n};\n\nexport type IMarkRef = {\n /**\n * 自动旋转,沿着线的方向,默认 true\n */\n autoRotate?: boolean;\n /**\n * label 相对line平行方向上的偏移\n */\n refX?: number;\n /**\n * label 相对line正交方向上的偏移\n */\n refY?: number;\n /**\n * label 相对默认角度的偏移 (label跟随line的角度做自动旋转时,默认按照line的平行向量作为初始角度)\n */\n refAngle?: number;\n};\n\nexport type MarkerAttrs = IGroupGraphicAttribute & {\n type?: 'line' | 'area' | 'point';\n /**\n * 是否支持交互\n * @default false\n */\n interactive?: boolean;\n /**\n * 是否显示marker组件\n * @default true\n */\n visible?: boolean;\n /**\n * 是否将组件在绘制区域内进行剪切\n * @default true\n */\n clipInRange?: boolean;\n /**\n * 组件绘制范围配置\n */\n limitRect?: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n};\n\nexport type MarkLineAttrs = MarkerAttrs &\n SegmentAttributes & {\n type?: 'line';\n /**\n * 构成line的点: 如果是两个点,则为直线;多个点则为曲线\n */\n points: Point[] | Point[][];\n\n /**\n * 标签\n */\n label?: {\n /**\n * label 相对line的位置\n */\n position?: keyof typeof IMarkLineLabelPosition;\n /**\n * 当 mark 配置了 limitRect 之后,label 是否自动调整位置\n * @default false\n */\n confine?: boolean;\n } & IMarkRef &\n IMarkLabel;\n };\n\nexport type MarkAreaAttrs = MarkerAttrs & {\n type?: 'area';\n /**\n * 构成area的点\n */\n points: Point[];\n /**\n * 标签\n */\n label?: {\n position?: keyof typeof IMarkAreaLabelPosition;\n /**\n * 当 mark 配置了 limitRect 之后,label 是否自动调整位置\n * @default false\n */\n confine?: boolean;\n } & IMarkLabel;\n /**\n * area的样式\n */\n areaStyle?: IPolygonAttribute;\n};\n\nexport type IItemContent = IMarkRef & {\n /**\n * 标注类型\n * Tips: 保留'richText'与之前的定义做兼容\n */\n type?: 'symbol' | 'text' | 'image' | 'richText' | 'custom';\n position?: keyof typeof IMarkPointItemPosition;\n /**\n * x 方向偏移量\n */\n offsetX?: number;\n /**\n * y 方向偏移量\n */\n offsetY?: number;\n /**\n * type为symbol时, symbol的样式\n */\n symbolStyle?: ISymbolGraphicAttribute;\n /**\n * type为image时, image的样式\n */\n imageStyle?: IImageGraphicAttribute;\n /**\n * type为text时, text的配置\n * 'text'类型的ItemContent新增三种子类型:'text','rich','html'。配置在textStyle.type上,继承自TagAttributes。\n */\n textStyle?: IMarkLabel;\n /**\n * type为rich text时, rich text的样式\n */\n richTextStyle?: IRichTextGraphicAttribute;\n /**\n * type为custom时,允许以callback的方式传入需要render的item\n */\n renderCustomCallback?: () => IGroup;\n /**\n * 当 mark 配置了 limitRect 之后,label 是否自动调整位置\n * @default false\n */\n confine?: boolean;\n};\n\nexport type IItemLine = {\n /** TODO:'type-opo' */\n type?: 'type-s' | 'type-do' | 'type-po' | 'type-op';\n visible?: boolean;\n /**\n * 垂直于引导线的装饰线,参考案例: https://observablehq.com/@mikelotis/edmonton-population-history-line-chart\n */\n decorativeLine?: {\n visible?: boolean;\n length?: number;\n };\n} & Omit;\n\nexport type MarkPointAttrs = Omit & {\n /**\n * markPoint的位置(也是path的起点)\n */\n position: Point;\n /**\n * 标注引导线\n */\n itemLine?: IItemLine;\n\n /**\n * 标注内容\n */\n itemContent?: IItemContent;\n};\n","import type { ICartesianSeries, ISeries } from '../../series/interface';\nimport type { DataView } from '@visactor/vdataset';\nimport { isValid, isNumber, array, minInArray, maxInArray, isArray, normalizePadding } from '@visactor/vutils';\nimport type { Datum, IPoint, StringOrNumber } from '../../typings';\nimport { isPercent, transformToGraphic } from '../../util';\nimport type { IDataPos, IMarkerLabelSpec, MarkerPositionPoint } from './interface';\nimport { AGGR_TYPE } from '../../constant/marker';\nimport type { IRegion } from '../../region/interface';\nimport type { OffsetPoint } from './interface';\n\nfunction isNeedExtendDomain(domain: number[], datum: number, autoRange: boolean) {\n if (!autoRange) {\n return false;\n }\n const domainNum = domain.map((n: any) => n * 1);\n const min = minInArray(domainNum);\n const max = maxInArray(domainNum);\n if (datum < min || datum > max) {\n return true;\n }\n return false;\n}\n\nfunction getXValue(\n datum: Datum,\n xDomain: number[],\n autoRange: boolean,\n refSeries: { [key: string]: ICartesianSeries },\n regionWidth: number,\n regionStartLayoutStartPoint: IPoint\n) {\n const { relativeSeries } = refSeries;\n isNumber(datum.x) &&\n isNeedExtendDomain(xDomain, datum.x, autoRange) &&\n relativeSeries?.getXAxisHelper().setExtendDomain?.('marker_xAxis_extend', datum.x);\n let x: number;\n if (isPercent(datum.x)) {\n x = convertPercentToValue(datum.x, regionWidth) + regionStartLayoutStartPoint.x;\n } else {\n x = relativeSeries.getXAxisHelper().dataToPosition([datum.x]) + regionStartLayoutStartPoint.x;\n }\n\n return x;\n}\n\nfunction getYValue(\n datum: Datum,\n yDomain: number[],\n autoRange: boolean,\n refSeries: { [key: string]: ICartesianSeries },\n regionHeight: number,\n regionStartLayoutStartPoint: IPoint\n) {\n const { relativeSeries } = refSeries;\n isNumber(datum.y) &&\n isNeedExtendDomain(yDomain, datum.y, autoRange) &&\n relativeSeries.getYAxisHelper()?.setExtendDomain?.('marker_yAxis_extend', datum.y);\n\n let y: number;\n if (isPercent(datum.y)) {\n y = convertPercentToValue(datum.y, regionHeight) + regionStartLayoutStartPoint.y;\n } else {\n y = relativeSeries.getYAxisHelper().dataToPosition([datum.y]) + regionStartLayoutStartPoint.y;\n }\n\n return y;\n}\n\nfunction convertPercentToValue(percent: string, relativeLength: number) {\n return (Number(percent.substring(0, percent.length - 1)) * relativeLength) / 100;\n}\n\nexport function isAggrSpec(spec: IDataPos) {\n return AGGR_TYPE.includes(spec as any);\n}\n\nexport function xyLayout(\n data: DataView,\n startRelativeSeries: ICartesianSeries,\n endRelativeSeries: ICartesianSeries,\n relativeSeries: ICartesianSeries,\n autoRange: boolean\n) {\n const regionStart = startRelativeSeries.getRegion();\n const regionStartLayoutStartPoint = regionStart.getLayoutStartPoint();\n const regionEnd = endRelativeSeries.getRegion();\n const regionEndLayoutStartPoint = regionEnd.getLayoutStartPoint();\n\n const regionWidth = Math.abs(\n Math.min(regionStartLayoutStartPoint.x, regionEndLayoutStartPoint.x) -\n Math.max(\n regionStartLayoutStartPoint.x + regionStart.getLayoutRect().width,\n regionEndLayoutStartPoint.x + regionEnd.getLayoutRect().width\n )\n );\n const regionHeight = Math.abs(\n Math.min(regionStartLayoutStartPoint.y, regionEndLayoutStartPoint.y) -\n Math.max(\n regionStartLayoutStartPoint.y + regionStart.getLayoutRect().height,\n regionEndLayoutStartPoint.y + regionEnd.getLayoutRect().height\n )\n );\n\n const refSeries = {\n relativeSeries,\n startRelativeSeries,\n endRelativeSeries\n };\n\n const lines: IPoint[][] = [];\n const dataPoints =\n data.latestData[0] && data.latestData[0].latestData ? data.latestData[0].latestData : data.latestData;\n const xDomain = relativeSeries.getXAxisHelper().getScale(0).domain();\n const yDomain = relativeSeries.getYAxisHelper().getScale(0).domain();\n dataPoints.forEach((datum: IPoint) => {\n const isValidX = isValid(datum.x);\n const isValidY = isValid(datum.y);\n if (isValidX && isValidY) {\n const x = getXValue(datum, xDomain, autoRange, refSeries, regionWidth, regionStartLayoutStartPoint);\n const y = getYValue(datum, yDomain, autoRange, refSeries, regionHeight, regionStartLayoutStartPoint);\n lines.push([{ x, y }]);\n } else if (isValid(datum.x)) {\n const x = getXValue(datum, xDomain, autoRange, refSeries, regionWidth, regionStartLayoutStartPoint);\n const y = Math.max(\n regionStartLayoutStartPoint.y + regionStart.getLayoutRect().height,\n regionEndLayoutStartPoint.y + regionEnd.getLayoutRect().height\n );\n const y1 = Math.min(regionStartLayoutStartPoint.y, regionEndLayoutStartPoint.y);\n lines.push([\n {\n x: x,\n y: y\n },\n {\n x: x,\n y: y1\n }\n ]);\n } else if (isValid(datum.y)) {\n const x = Math.min(regionStartLayoutStartPoint.x, regionEndLayoutStartPoint.x);\n const y = getYValue(datum, yDomain, autoRange, refSeries, regionHeight, regionStartLayoutStartPoint);\n const x1 = Math.max(\n regionStartLayoutStartPoint.x + regionStart.getLayoutRect().width,\n regionEndLayoutStartPoint.x + regionEnd.getLayoutRect().width\n );\n lines.push([\n {\n x: x,\n y: y\n },\n {\n x: x1,\n y: y\n }\n ]);\n }\n });\n\n return lines;\n}\n\nexport function coordinateLayout(\n data: DataView,\n relativeSeries: ICartesianSeries,\n autoRange: boolean,\n coordinatesOffset: OffsetPoint[] | OffsetPoint\n) {\n const points: IPoint[] = [];\n const dataPoints =\n data.latestData[0] && data.latestData[0].latestData ? data.latestData[0].latestData : data.latestData;\n const isArrayCoordinatesOffset = isArray(coordinatesOffset);\n dataPoints.forEach(\n (\n datum: {\n x: StringOrNumber[] | StringOrNumber | null;\n y: StringOrNumber[] | StringOrNumber | null;\n getRefRelativeSeries?: () => ICartesianSeries;\n },\n index: number\n ) => {\n const refRelativeSeries = datum?.getRefRelativeSeries ? datum.getRefRelativeSeries() : relativeSeries;\n const regionStart = refRelativeSeries.getRegion();\n const regionStartLayoutStartPoint = regionStart.getLayoutStartPoint();\n\n const { width: regionWidth, height: regionHeight } = regionStart.getLayoutRect();\n\n let offsetX = 0;\n let offsetY = 0;\n if (coordinatesOffset) {\n const currentCoordinatesOffset = isArrayCoordinatesOffset ? coordinatesOffset[index] : coordinatesOffset;\n const x = currentCoordinatesOffset.x;\n const y = currentCoordinatesOffset.y;\n if (x) {\n offsetX = isPercent(x) ? (Number(x.substring(0, x.length - 1)) * regionWidth) / 100 : (x as number);\n }\n if (y) {\n offsetY = isPercent(y) ? (Number(y.substring(0, y.length - 1)) * regionHeight) / 100 : (y as number);\n }\n }\n\n const xDomain = refRelativeSeries.getXAxisHelper().getScale(0).domain();\n const yDomain = refRelativeSeries.getYAxisHelper().getScale(0).domain();\n const xValue = array(datum.x);\n const yValue = array(datum.y);\n\n xValue.length === 1 &&\n isNumber(xValue[0]) &&\n isNeedExtendDomain(xDomain, xValue[0], autoRange) &&\n refRelativeSeries.getXAxisHelper()?.setExtendDomain?.('marker_xAxis_extend', xValue[0] as number);\n\n yValue.length === 1 &&\n isNumber(yValue[0]) &&\n isNeedExtendDomain(yDomain, yValue[0], autoRange) &&\n refRelativeSeries.getYAxisHelper()?.setExtendDomain?.('marker_yAxis_extend', yValue[0] as number);\n points.push({\n x: refRelativeSeries.getXAxisHelper().dataToPosition(xValue) + regionStartLayoutStartPoint.x + offsetX,\n y: refRelativeSeries.getYAxisHelper().dataToPosition(yValue) + regionStartLayoutStartPoint.y + offsetY\n });\n }\n );\n return points;\n}\n\nexport function positionLayout(positions: MarkerPositionPoint[], series: ISeries, regionRelative: boolean): IPoint[] {\n if (regionRelative) {\n const region = series.getRegion();\n const { x: regionStartX, y: regionStartY } = region.getLayoutStartPoint();\n const { width: regionWidth, height: regionHeight } = region.getLayoutRect();\n return positions.map(position => {\n let { x, y } = position;\n if (isPercent(x)) {\n x = convertPercentToValue(x, regionWidth);\n }\n x = (x as number) + regionStartX;\n if (isPercent(y)) {\n y = convertPercentToValue(y, regionHeight);\n }\n y = (y as number) + regionStartY;\n\n return {\n x,\n y\n };\n });\n }\n\n const { width: canvasWidth, height: canvasHeight } = series.getOption().getChart().getCanvasRect();\n return positions.map(position => {\n let { x, y } = position;\n if (isPercent(x)) {\n x = convertPercentToValue(x, canvasWidth);\n }\n if (isPercent(y)) {\n y = convertPercentToValue(y, canvasHeight);\n }\n return {\n x: x as number,\n y: y as number\n };\n });\n}\n\nexport function computeClipRange(regions: IRegion[]) {\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n regions.forEach((region: IRegion) => {\n const regionPos = region.getLayoutStartPoint();\n const regionRect = region.getLayoutRect();\n if (regionPos.x < minX) {\n minX = regionPos.x;\n }\n if (regionPos.x + regionRect.width > maxX) {\n maxX = regionPos.x + regionRect.width;\n }\n if (regionPos.y < minY) {\n minY = regionPos.y;\n }\n if (regionPos.y + regionRect.height > maxY) {\n maxY = regionPos.y + regionRect.height;\n }\n });\n return { minX, maxX, minY, maxY };\n}\n\nexport function transformLabelAttributes(label: IMarkerLabelSpec) {\n const { labelBackground = {}, style, shape, ...restLabel } = label;\n\n if (label.visible !== false) {\n const labelAttrs = restLabel as any;\n\n if (shape?.visible) {\n labelAttrs.shape = {\n visible: true,\n ...transformToGraphic(shape.style)\n };\n } else {\n labelAttrs.shape = {\n visible: false\n };\n }\n\n if (labelBackground.visible !== false) {\n labelAttrs.panel = {\n visible: true,\n ...transformToGraphic(labelBackground.style)\n };\n if (isValid(labelBackground.padding)) {\n labelAttrs.padding = normalizePadding(labelBackground.padding);\n }\n } else {\n labelAttrs.panel = {\n visible: false\n };\n labelAttrs.padding = 0;\n }\n\n if (style) {\n labelAttrs.textStyle = transformToGraphic(style);\n }\n return labelAttrs;\n }\n return {\n visible: false\n };\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport type { Tag } from '../tag';\nimport type { MarkerAttrs } from './type';\n\nexport abstract class Marker extends AbstractComponent> {\n name = 'marker';\n private _containerClip!: IGroup;\n private _container!: IGroup;\n\n protected _label!: Tag;\n\n protected abstract setLabelPos(): any;\n protected abstract initMarker(container: IGroup): any;\n protected abstract updateMarker(): any;\n protected abstract isValidPoints(): any;\n\n setAttribute(key: keyof T, value: any, forceUpdateTag?: boolean | undefined): void {\n super.setAttribute(key, value, forceUpdateTag);\n if (key === 'visible') {\n this.render();\n }\n }\n\n private _initContainer() {\n const { limitRect = {} as T['limitRect'], clipInRange } = this.attribute;\n let group;\n if (clipInRange) {\n // 如果用户配置了剪切\n const groupClip = graphicCreator.group({\n ...limitRect,\n clip: true,\n pickable: false\n });\n group = graphicCreator.group({\n x: -(limitRect.x ?? 0),\n y: -(limitRect.y ?? 0),\n pickable: false\n });\n groupClip.add(group);\n this._containerClip = groupClip;\n this.add(groupClip);\n } else {\n group = graphicCreator.group({\n x: 0,\n y: 0,\n pickable: false\n });\n this.add(group);\n }\n group.name = 'marker-container';\n this._container = group;\n }\n\n private _updateContainer() {\n const { limitRect = {} as T['limitRect'], clipInRange } = this.attribute;\n if (this._containerClip) {\n this._containerClip.setAttributes({\n ...limitRect\n });\n }\n\n this._container.setAttributes({\n x: clipInRange ? -(limitRect.x ?? 0) : 0,\n y: clipInRange ? -(limitRect.y ?? 0) : 0\n });\n }\n\n protected render() {\n // 因为标注本身不规则,所以默认将组件的 group 设置为不可拾取\n this.setAttribute('pickable', false);\n\n const markerVisible = this.attribute.visible ?? true;\n if (this.attribute.interactive === false) {\n this.setAttribute('childrenPickable', false);\n }\n\n if (markerVisible && this.isValidPoints()) {\n if (!this._container) {\n this._initContainer();\n this.initMarker(this._container);\n } else {\n this._updateContainer();\n this.updateMarker();\n }\n } else {\n this._container = null;\n this.removeAllChild();\n }\n }\n}\n","import type { TextAlignType, TextBaselineType } from '@visactor/vrender-core';\nimport { IMarkAreaLabelPosition, IMarkLineLabelPosition } from './type';\n\nexport const DEFAULT_MARK_LINE_THEME = {\n startSymbol: {\n visible: false,\n symbolType: 'triangle',\n size: 12,\n fill: 'rgba(46, 47, 50)',\n lineWidth: 0\n },\n endSymbol: {\n visible: true,\n symbolType: 'triangle',\n size: 12,\n fill: 'rgba(46, 47, 50)',\n lineWidth: 0\n },\n label: {\n position: IMarkLineLabelPosition.end,\n refX: 0,\n refY: 0,\n refAngle: 0,\n textStyle: {\n fill: '#fff',\n stroke: '#fff',\n lineWidth: 0,\n fontSize: 10,\n fontWeight: 'normal',\n fontStyle: 'normal'\n },\n padding: [2, 2, 4, 4],\n panel: {\n visible: true,\n cornerRadius: 0,\n fill: 'rgb(48, 115, 242)',\n fillOpacity: 0.8\n }\n },\n lineStyle: {\n stroke: '#b2bacf',\n lineWidth: 1,\n lineDash: [2]\n }\n};\n\nexport const DEFAULT_MARK_LINE_TEXT_STYLE_MAP: {\n [K: string]: {\n textAlign: TextAlignType;\n textBaseline: TextBaselineType;\n };\n} = {\n start: {\n textAlign: 'right',\n textBaseline: 'middle'\n },\n insideStartTop: {\n textAlign: 'left',\n textBaseline: 'bottom'\n },\n insideStartBottom: {\n textAlign: 'left',\n textBaseline: 'top'\n },\n\n middle: {\n textAlign: 'center',\n textBaseline: 'middle'\n },\n insideMiddleTop: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n insideMiddleBottom: {\n textAlign: 'center',\n textBaseline: 'top'\n },\n\n end: {\n textAlign: 'left',\n textBaseline: 'middle'\n },\n insideEndTop: {\n textAlign: 'right',\n textBaseline: 'bottom'\n },\n insideEndBottom: {\n textAlign: 'right',\n textBaseline: 'top'\n }\n};\n\nexport const DEFAULT_MARK_AREA_THEME = {\n label: {\n position: IMarkAreaLabelPosition.right,\n textStyle: {\n fill: '#fff',\n stroke: '#fff',\n lineWidth: 0,\n fontSize: 10,\n fontWeight: 'normal',\n fontStyle: 'normal'\n },\n padding: [2, 2, 4, 4],\n panel: {\n visible: true,\n cornerRadius: 0,\n fill: 'rgb(48, 115, 242)',\n fillOpacity: 0.8\n }\n },\n areaStyle: {\n fill: '#b2bacf',\n visible: true\n }\n};\n\nexport const DEFAULT_MARK_AREA_TEXT_STYLE_MAP: {\n [K: string]: {\n textAlign: TextAlignType;\n textBaseline: TextBaselineType;\n };\n} = {\n left: {\n textAlign: 'right',\n textBaseline: 'middle'\n },\n insideLeft: {\n textAlign: 'left',\n textBaseline: 'middle'\n },\n\n right: {\n textAlign: 'left',\n textBaseline: 'middle'\n },\n insideRight: {\n textAlign: 'right',\n textBaseline: 'middle'\n },\n\n top: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n insideTop: {\n textAlign: 'center',\n textBaseline: 'top'\n },\n\n bottom: {\n textAlign: 'center',\n textBaseline: 'top'\n },\n insideBottom: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n\n middle: {\n textAlign: 'center',\n textBaseline: 'middle'\n }\n};\n\nexport const DEFAULT_MARK_POINT_THEME = {\n itemLine: {\n visible: true,\n decorativeLine: {\n visible: false,\n length: 30\n },\n startSymbol: {\n visible: true,\n clip: true,\n symbolType: 'circle',\n size: 20,\n style: {\n fill: false,\n stroke: 'rgba(46, 47, 50)'\n }\n },\n endSymbol: {\n visible: false,\n clip: true,\n symbolType: 'triangle',\n size: 12,\n style: {\n fill: false,\n stroke: 'rgba(46, 47, 50)'\n }\n },\n lineStyle: {\n stroke: '#000',\n lineWidth: 1\n }\n },\n itemContent: {\n type: 'text',\n position: 'middle',\n refX: 10,\n symbolStyle: {\n symbolType: 'star',\n fill: 'rgb(48, 115, 242)',\n fillOpacity: 0.8,\n size: 20\n },\n textStyle: {\n dx: 0,\n dy: 0\n },\n imageStyle: {\n width: 80,\n height: 80\n },\n richTextStyle: {\n width: 100,\n height: 100\n }\n }\n};\n\nexport const DEFAULT_MARK_POINT_TEXT_STYLE_MAP: {\n [K: string]: {\n textAlign: TextAlignType;\n textBaseline: TextBaselineType;\n };\n} = {\n top: {\n textAlign: 'left',\n textBaseline: 'bottom'\n },\n bottom: {\n textAlign: 'left',\n textBaseline: 'top'\n },\n middle: {\n textAlign: 'left',\n textBaseline: 'middle'\n },\n insideTop: {\n textAlign: 'right',\n textBaseline: 'bottom'\n },\n insideBottom: {\n textAlign: 'right',\n textBaseline: 'top'\n },\n insideMiddle: {\n textAlign: 'right',\n textBaseline: 'middle'\n }\n};\n","import type { IGraphic } from '@visactor/vrender-core';\nimport type { IBoundsLike } from '@visactor/vutils';\n\nexport function computeOffsetForlimit(shape: IGraphic, bounds: IBoundsLike) {\n const { x1: regionMinX, y1: regionMinY, x2: regionMaxX, y2: regionMaxY } = bounds;\n const { x1, y1, x2, y2 } = shape.AABBBounds;\n\n let dx = 0;\n let dy = 0;\n if (x1 < regionMinX) {\n // 超出左侧\n dx = regionMinX - x1;\n }\n if (y1 < regionMinY) {\n // 超出顶部\n dy = regionMinY - y1;\n }\n\n if (x2 > regionMaxX) {\n // 超出右侧\n dx = regionMaxX - x2;\n }\n\n if (y2 > regionMaxY) {\n // 整体超出顶部\n dy = regionMaxY - y2;\n }\n return {\n dx,\n dy\n };\n}\nexport function limitShapeInBounds(shape: IGraphic, bounds: IBoundsLike) {\n const { dx, dy } = computeOffsetForlimit(shape, bounds);\n const { dx: originDx = 0, dy: originDy = 0 } = shape.attribute;\n if (dx) {\n shape.setAttribute('dx', dx + originDx);\n }\n if (dy) {\n shape.setAttribute('dy', dy + originDy);\n }\n}\n","import { registerGroup, registerImage, registerLine, registerPolygon, registerSymbol } from '@visactor/vrender-kits';\nimport { loadTagComponent } from '../tag/register';\nimport { loadSegmentComponent } from '../segment/register';\nfunction loadBaseMarker() {\n registerGroup();\n loadTagComponent();\n}\n\nexport function loadMarkLineComponent() {\n loadBaseMarker();\n loadSegmentComponent();\n}\n\nexport function loadMarkAreaComponent() {\n loadBaseMarker();\n registerPolygon();\n}\n\nexport function loadMarkPointComponent() {\n loadBaseMarker();\n loadSegmentComponent();\n registerSymbol();\n registerImage();\n registerLine();\n}\n","import type { IGroup, INode } from '@visactor/vrender-core';\nimport { isValidNumber, merge } from '@visactor/vutils';\nimport { Segment } from '../segment';\nimport type { TagAttributes } from '../tag';\n// eslint-disable-next-line no-duplicate-imports\nimport { Tag } from '../tag';\nimport { Marker } from './base';\nimport { DEFAULT_MARK_LINE_THEME, DEFAULT_MARK_LINE_TEXT_STYLE_MAP } from './config';\nimport type { MarkLineAttrs } from './type';\nimport { limitShapeInBounds } from '../util/limit-shape';\nimport type { ComponentOptions } from '../interface';\nimport { loadMarkLineComponent } from './register';\nimport type { Point } from '../core/type';\n\nloadMarkLineComponent();\nexport class MarkLine extends Marker {\n name = 'markLine';\n static defaultAttributes: Partial = DEFAULT_MARK_LINE_THEME;\n\n private _line!: Segment;\n getLine() {\n return this._line;\n }\n getLabel() {\n return this._label;\n }\n\n constructor(attributes: MarkLineAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, MarkLine.defaultAttributes, attributes));\n }\n\n protected setLabelPos() {\n const { label = {}, limitRect } = this.attribute as MarkLineAttrs;\n const { position = 'end', refX = 0, refY = 0, confine } = label;\n const points = this._line.getMainSegmentPoints();\n const labelAngle = this._line.getEndAngle() ?? 0;\n const labelOffsetX = refX * Math.cos(labelAngle) + refY * Math.cos(labelAngle - Math.PI / 2);\n const labelOffsetY = refX * Math.sin(labelAngle) + refY * Math.sin(labelAngle - Math.PI / 2);\n let labelPoint;\n if (position.includes('start') || position.includes('Start')) {\n labelPoint = {\n x: points[0].x + labelOffsetX,\n y: points[0].y + labelOffsetY\n };\n } else if (position.includes('middle') || position.includes('Middle')) {\n labelPoint = {\n x: (points[0].x + points[points.length - 1].x) / 2 + labelOffsetX,\n y: (points[0].y + points[points.length - 1].y) / 2 + labelOffsetY\n };\n } else {\n labelPoint = {\n x: points[points.length - 1].x + labelOffsetX,\n y: points[points.length - 1].y + labelOffsetY\n };\n }\n this._label.setAttributes({\n ...labelPoint,\n angle: label.autoRotate ? labelAngle + (label.refAngle ?? 0) : 0,\n textStyle: {\n ...DEFAULT_MARK_LINE_TEXT_STYLE_MAP[position],\n ...label.textStyle\n }\n });\n if (limitRect && confine) {\n const { x, y, width, height } = limitRect;\n limitShapeInBounds(this._label, {\n x1: x,\n y1: y,\n x2: x + width,\n y2: y + height\n });\n }\n }\n\n protected initMarker(container: IGroup) {\n const { points, startSymbol, endSymbol, label, lineStyle, mainSegmentIndex, multiSegment } = this\n .attribute as MarkLineAttrs;\n const line = new Segment({\n points,\n startSymbol,\n endSymbol,\n lineStyle,\n mainSegmentIndex,\n multiSegment,\n pickable: false // 组件容器本身不参与拾取\n });\n line.name = 'mark-line-line';\n this._line = line;\n container.add(line as unknown as INode);\n\n const markLabel = new Tag({\n ...(label as TagAttributes)\n });\n markLabel.name = 'mark-line-label';\n this._label = markLabel;\n container.add(markLabel as unknown as INode);\n this.setLabelPos();\n }\n\n protected updateMarker() {\n const { points, startSymbol, endSymbol, label, lineStyle, mainSegmentIndex, multiSegment } = this\n .attribute as MarkLineAttrs;\n if (this._line) {\n this._line.setAttributes({\n points,\n startSymbol,\n endSymbol,\n lineStyle,\n mainSegmentIndex,\n multiSegment\n });\n }\n\n if (this._label) {\n this._label.setAttributes({\n dx: 0,\n dy: 0, // 需要进行复位\n ...(label as TagAttributes)\n });\n }\n\n this.setLabelPos();\n }\n\n protected isValidPoints() {\n const { points } = this.attribute as MarkLineAttrs;\n if (!points || points.length < 2) {\n return false;\n }\n let validFlag = true;\n points.forEach((point: Point | Point[]) => {\n if ((point as any).length) {\n (point as Point[]).forEach((p: Point) => {\n if (!isValidNumber((p as Point).x) || !isValidNumber((p as Point).y)) {\n validFlag = false;\n return;\n }\n });\n } else if (!isValidNumber((point as Point).x) || !isValidNumber((point as Point).y)) {\n validFlag = false;\n return;\n }\n });\n return validFlag;\n }\n}\n","import type { DataView } from '@visactor/vdataset';\nimport { array, isValid, isNil, isString } from '@visactor/vutils';\nimport type { IModelRenderOption } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { ICartesianSeries } from '../../series/interface';\nimport type { ILayoutRect, ILayoutType, IRect, StringOrNumber } from '../../typings';\nimport { BaseComponent } from '../base/base-component';\nimport type {\n IAggrType,\n ICoordinateOption,\n IDataPointSpec,\n IDataPos,\n IDataPosCallback,\n IMarkerSpec\n} from './interface';\nimport type { IGraphic, IGroup } from '@visactor/vrender-core';\nimport { calcLayoutNumber } from '../../util/space';\nimport { isAggrSpec } from './utils';\nimport { getFirstSeries } from '../../util';\n\nexport abstract class BaseMarker extends BaseComponent {\n layoutType: ILayoutType | 'none' = 'none';\n\n protected _startRelativeSeries!: ICartesianSeries;\n protected _endRelativeSeries!: ICartesianSeries;\n protected _relativeSeries!: ICartesianSeries;\n getRelativeSeries() {\n return this._relativeSeries;\n }\n\n // marker 组件数据\n protected _markerData!: DataView;\n // marker 组件\n protected _markerComponent!: any;\n\n protected _layoutOffsetX: number = 0;\n protected _layoutOffsetY: number = 0;\n\n private _firstSeries: ICartesianSeries;\n\n created() {\n super.created();\n // event\n this.initEvent();\n this._bindSeries();\n this._initDataView();\n }\n\n protected _getAllRelativeSeries() {\n return {\n getRelativeSeries: () => this._relativeSeries,\n getStartRelativeSeries: () => this._startRelativeSeries,\n getEndRelativeSeries: () => this._endRelativeSeries\n };\n }\n\n private _getFieldInfoFromSpec(dim: 'x' | 'y', spec: IDataPos | IDataPosCallback, relativeSeries: ICartesianSeries) {\n const field = dim === 'x' ? relativeSeries.getSpec().xField : relativeSeries.getSpec().yField;\n if (isString(spec) && isAggrSpec(spec)) {\n return {\n field,\n aggrType: spec as unknown as IAggrType\n };\n }\n return spec;\n }\n\n protected _processSpecX(specX: IDataPos | IDataPosCallback) {\n const relativeSeries = this._relativeSeries;\n return {\n x: this._getFieldInfoFromSpec('x', specX, relativeSeries),\n ...this._getAllRelativeSeries()\n };\n }\n\n protected _processSpecY(specY: IDataPos | IDataPosCallback) {\n const relativeSeries = this._relativeSeries;\n return {\n y: this._getFieldInfoFromSpec('y', specY, relativeSeries),\n ...this._getAllRelativeSeries()\n };\n }\n\n protected _processSpecXY(specX: IDataPos | IDataPosCallback, specY: IDataPos | IDataPosCallback) {\n const relativeSeries = this._relativeSeries;\n\n return {\n x: this._getFieldInfoFromSpec('x', specX, relativeSeries),\n y: this._getFieldInfoFromSpec('y', specY, relativeSeries),\n ...this._getAllRelativeSeries()\n };\n }\n\n protected _processSpecCoo(spec: any) {\n const coordinates = spec.coordinates ?? array(spec.coordinate);\n return coordinates.map((coordinate: IDataPointSpec) => {\n const refRelativeSeries = this._getSeriesByIdOrIndex(\n coordinate.refRelativeSeriesId,\n coordinate.refRelativeSeriesIndex\n );\n\n const { xField, yField } = refRelativeSeries.getSpec();\n const { xFieldDim, xFieldIndex, yFieldDim, yFieldIndex } = coordinate;\n let bindXField = xField;\n if (isValid(xFieldIndex)) {\n bindXField = array(xField)[xFieldIndex];\n }\n if (xFieldDim && array(xField).includes(xFieldDim)) {\n bindXField = xFieldDim;\n }\n\n let bindYField = yField;\n if (isValid(yFieldIndex)) {\n bindYField = array(yField)[yFieldIndex];\n }\n if (yFieldDim && array(yField).includes(yFieldDim)) {\n bindYField = yFieldDim;\n }\n\n const option: ICoordinateOption = {\n x: undefined,\n y: undefined,\n ...this._getAllRelativeSeries()\n };\n\n if (isString(coordinate[bindXField]) && isAggrSpec(coordinate[bindXField] as IDataPos)) {\n option.x = { field: bindXField, aggrType: coordinate[bindXField] as IAggrType };\n } else {\n option.x = array(bindXField).map(field => coordinate[field]);\n }\n\n if (isString(coordinate[bindYField]) && isAggrSpec(coordinate[bindYField] as IDataPos)) {\n option.y = { field: bindYField, aggrType: coordinate[bindYField] as IAggrType };\n } else {\n option.y = array(bindYField).map(field => coordinate[field]);\n }\n option.getRefRelativeSeries = () => refRelativeSeries;\n return option;\n });\n }\n\n updateLayoutAttribute(): void {\n const markerVisible = this._spec.visible ?? true;\n if (markerVisible) {\n // 创建marker组件\n if (!this._markerComponent) {\n const markerComponent = this._createMarkerComponent();\n markerComponent.name = this._spec.name ?? this.type;\n markerComponent.id = this._spec.id ?? `${this.type}-${this.id}`;\n this._markerComponent = markerComponent;\n\n this.getContainer().add(this._markerComponent);\n // 代理 marker 组件上的事件\n this._markerComponent.on('*', (event: any, type: string) =>\n this._delegateEvent(this._markerComponent as unknown as IGraphic, event, type)\n );\n }\n this._markerLayout();\n }\n\n super.updateLayoutAttribute();\n }\n\n private _getSeriesByIdOrIndex(seriesUserId: StringOrNumber, seriesIndex: number) {\n let series: ICartesianSeries;\n series = this._option.getSeriesInUserIdOrIndex(isValid(seriesUserId) ? [seriesUserId] : [], [\n seriesIndex\n ])?.[0] as ICartesianSeries;\n if (!series) {\n series = this._relativeSeries ?? this._getFirstSeries();\n }\n return series;\n }\n\n protected _bindSeries() {\n const spec = this._spec;\n this._relativeSeries = this._getSeriesByIdOrIndex(spec.relativeSeriesId, spec.relativeSeriesIndex);\n this._startRelativeSeries = this._getSeriesByIdOrIndex(\n (spec as any).startRelativeSeriesId,\n (spec as any).startRelativeSeriesIndex\n );\n this._endRelativeSeries = this._getSeriesByIdOrIndex(\n (spec as any).endRelativeSeriesId,\n (spec as any).endRelativeSeriesIndex\n );\n }\n\n protected abstract _initDataView(): void;\n protected abstract _createMarkerComponent(): IGroup;\n protected abstract _markerLayout(): void;\n\n protected initEvent() {\n // do nothing\n }\n onRender(ctx: IModelRenderOption): void {\n // do nothing\n }\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n clear(): void {\n super.clear();\n this._firstSeries = null;\n }\n\n private _getFirstSeries(): ICartesianSeries {\n if (this._firstSeries) {\n return this._firstSeries;\n }\n const firstSeries = getFirstSeries(this._regions) as ICartesianSeries;\n if (firstSeries) {\n this._firstSeries = firstSeries;\n return firstSeries;\n }\n this._option?.onError('need at least one series');\n return null;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._markerComponent] as unknown as IGroup[];\n }\n\n onLayoutStart(layoutRect: IRect, chartViewRect: ILayoutRect, ctx: any): void {\n // offset\n if (!isNil(this._spec.offsetX)) {\n this._layoutOffsetX = calcLayoutNumber(this._spec.offsetX, chartViewRect.width, chartViewRect);\n }\n if (!isNil(this._spec.offsetY)) {\n this._layoutOffsetY = calcLayoutNumber(this._spec.offsetY, chartViewRect.height, chartViewRect);\n }\n super.onLayoutStart(layoutRect, chartViewRect, ctx);\n }\n}\n","import type { DataView } from '@visactor/vdataset';\nimport { regression } from '../../util/math';\n\nexport type IOptionRegr = {\n fieldX: string;\n fieldY: string;\n};\n\nexport function markerRegression(_data: Array, opt: IOptionRegr) {\n const data = _data[0].latestData;\n\n return regression(data, opt.fieldX, opt.fieldY);\n}\n","import type { ICartesianSeries } from '../../series/interface/series';\n\nexport interface IMarkerFilterOptions {\n getRelativeSeries: () => ICartesianSeries;\n}\n\nexport function markerFilter(data: Array, options: IMarkerFilterOptions) {\n if (options && options.getRelativeSeries) {\n const series = options.getRelativeSeries();\n\n if (series) {\n const viewData = series.getViewData();\n return viewData && viewData.latestData && viewData.latestData.length ? data : [];\n }\n }\n\n return data;\n}\n","import { DataView } from '@visactor/vdataset';\nimport type {\n IMarkLine,\n IMarkLineSpec,\n IMarkLineXYSpec,\n IMarkLineXYY1Spec,\n IMarkLineYXX1Spec,\n IStepMarkLineSpec\n} from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IOptionAggr } from '../../../data/transforms/aggregation';\n// eslint-disable-next-line no-duplicate-imports\nimport { markerAggregation } from '../../../data/transforms/aggregation';\nimport { computeClipRange, coordinateLayout, positionLayout, transformLabelAttributes, xyLayout } from '../utils';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\nimport type { MarkLineAttrs } from '@visactor/vrender-components';\nimport { MarkLine as MarkLineComponent } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEmpty, isValid, isArray } from '@visactor/vutils';\nimport { transformToGraphic } from '../../../util/style';\nimport { BaseMarker } from '../base-marker';\nimport type { IGroup } from '@visactor/vrender-core';\nimport type { IDataPos, IMarkerSymbol } from '../interface';\nimport type { IOptionRegr } from '../../../data/transforms/regression';\n// eslint-disable-next-line no-duplicate-imports\nimport { markerRegression } from '../../../data/transforms/regression';\nimport { LayoutZIndex } from '../../../constant';\nimport { getInsertPoints, getTextOffset } from './util';\nimport { Factory } from '../../../core/factory';\nimport { isPercent } from '../../../util';\nimport type { IPoint } from '../../../typings';\nimport type { IModelSpecInfo } from '../../../model/interface';\nimport { markerFilter } from '../../../data/transforms/marker-filter';\n\nexport class MarkLine extends BaseMarker implements IMarkLine {\n static type = ComponentTypeEnum.markLine;\n type = ComponentTypeEnum.markLine;\n name: string = ComponentTypeEnum.markLine;\n\n static specKey = 'markLine';\n specKey = 'markLine';\n\n layoutZIndex: number = LayoutZIndex.MarkLine;\n\n protected declare _markerComponent: MarkLineComponent;\n\n private _isXYLayout: boolean;\n\n static getSpecInfo(chartSpec: any): Maybe {\n const markLineSpec = chartSpec[this.specKey];\n if (isEmpty(markLineSpec)) {\n return undefined;\n }\n if (!isArray(markLineSpec) && markLineSpec.visible !== false) {\n return [\n {\n spec: markLineSpec,\n specPath: [this.specKey],\n type: ComponentTypeEnum.markLine\n }\n ];\n }\n const specInfos: IModelSpecInfo[] = [];\n markLineSpec.forEach((m: any, i: number) => {\n if (m.visible !== false) {\n specInfos.push({\n spec: m,\n specIndex: i,\n specPath: [this.specKey, i],\n type: ComponentTypeEnum.markLine\n });\n }\n });\n return specInfos;\n }\n\n protected _createMarkerComponent() {\n const {\n label = {},\n startSymbol = {} as IMarkerSymbol,\n endSymbol = {} as IMarkerSymbol\n } = this._spec as IMarkLineSpec;\n\n const markLineAttrs: MarkLineAttrs = {\n zIndex: this.layoutZIndex,\n interactive: this._spec.interactive ?? false,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: 0 }\n ],\n lineStyle: this._spec.line?.style as unknown as any,\n clipInRange: this._spec.clip ?? false,\n label: transformLabelAttributes(label)\n };\n\n if (startSymbol.visible) {\n markLineAttrs.startSymbol = {\n ...startSymbol,\n visible: true,\n style: transformToGraphic(startSymbol.style)\n };\n } else {\n markLineAttrs.startSymbol = {\n visible: false\n };\n }\n\n if (endSymbol.visible) {\n markLineAttrs.endSymbol = {\n ...endSymbol,\n visible: true,\n style: transformToGraphic(endSymbol.style)\n };\n } else {\n markLineAttrs.endSymbol = {\n visible: false\n };\n }\n\n const markLine = new MarkLineComponent(markLineAttrs);\n return markLine as unknown as IGroup;\n }\n\n protected _markerLayout() {\n const spec = this._spec as any;\n const data = this._markerData;\n const startRelativeSeries = this._startRelativeSeries;\n const endRelativeSeries = this._endRelativeSeries;\n const relativeSeries = this._relativeSeries;\n\n const isValidCoordinates = isValid(spec.coordinates);\n const isValidProcess = isValid(spec.process);\n const isValidProcessX = isValidProcess && isValid(spec.process.x);\n const isValidProcessY = isValidProcess && isValid(spec.process.y);\n const isCoordinateLayout = isValidCoordinates && (!isValidProcess || ('process' in spec && 'xy' in spec.process));\n const isPositionLayout = isValid(spec.positions);\n const autoRange = spec.autoRange ?? false;\n\n let points: IPoint[] = [];\n if (this._isXYLayout || (isValidCoordinates && isValidProcessX) || (isValidCoordinates && isValidProcessY)) {\n const xyPoints = xyLayout(data, startRelativeSeries, endRelativeSeries, relativeSeries, autoRange);\n // 这里不同的场景返回的值不同,如果同时声明了 x x1 y y1,会返回两个数值的数组(如 [[{}], [{}]]),所以需要分别处理下\n points = (xyPoints.length === 1 ? xyPoints[0] : xyPoints.map(point => point[0])) as IPoint[];\n } else if (isCoordinateLayout) {\n points = coordinateLayout(data, relativeSeries, autoRange, spec.coordinatesOffset);\n } else if (isPositionLayout) {\n points = positionLayout(spec.positions, relativeSeries, spec.regionRelative);\n }\n\n const seriesData = this._relativeSeries.getViewData().latestData;\n const dataPoints =\n data.latestData[0] && data.latestData[0].latestData ? data.latestData[0].latestData : data.latestData;\n\n let limitRect;\n if (spec.clip || spec.label?.confine) {\n const { minX, maxX, minY, maxY } = computeClipRange([\n startRelativeSeries.getRegion(),\n endRelativeSeries.getRegion(),\n relativeSeries.getRegion()\n ]);\n limitRect = {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n }\n const markerComponentAttr = this._markerComponent?.attribute ?? {};\n const labelAttrs = {\n ...markerComponentAttr.label,\n text: this._spec.label.formatMethod\n ? this._spec.label.formatMethod(dataPoints, seriesData)\n : markerComponentAttr.label?.text\n };\n\n if ((this._spec as IStepMarkLineSpec).type === 'type-step') {\n const { multiSegment, mainSegmentIndex } = (this._spec as IStepMarkLineSpec).line || {};\n const { connectDirection, expandDistance = 0 } = this._spec as IStepMarkLineSpec;\n\n let expandDistanceValue: number;\n if (isPercent(expandDistance)) {\n const regionStart = startRelativeSeries.getRegion();\n const regionStartLayoutStartPoint = regionStart.getLayoutStartPoint();\n const regionEnd = endRelativeSeries.getRegion();\n const regionEndLayoutStartPoint = regionEnd.getLayoutStartPoint();\n\n if (connectDirection === 'bottom' || connectDirection === 'top') {\n const regionHeight = Math.abs(\n Math.min(regionStartLayoutStartPoint.y, regionEndLayoutStartPoint.y) -\n Math.max(\n regionStartLayoutStartPoint.y + regionStart.getLayoutRect().height,\n regionEndLayoutStartPoint.y + regionEnd.getLayoutRect().height\n )\n );\n expandDistanceValue = (Number(expandDistance.substring(0, expandDistance.length - 1)) * regionHeight) / 100;\n } else {\n const regionWidth = Math.abs(\n Math.min(regionStartLayoutStartPoint.x, regionEndLayoutStartPoint.x) -\n Math.max(\n regionStartLayoutStartPoint.x + regionStart.getLayoutRect().width,\n regionEndLayoutStartPoint.x + regionEnd.getLayoutRect().width\n )\n );\n expandDistanceValue = (Number(expandDistance.substring(0, expandDistance.length - 1)) * regionWidth) / 100;\n }\n } else {\n expandDistanceValue = expandDistance as number;\n }\n\n const joinPoints = getInsertPoints(points[0], points[1], connectDirection, expandDistanceValue);\n\n let labelPositionAttrs: any;\n if (multiSegment && isValid(mainSegmentIndex)) {\n // 如果用户配置了主线段,则不进行 label 的偏移处理,直接显示在主线段中间\n labelPositionAttrs = {\n position: 'middle',\n autoRotate: false,\n refX: 0,\n refY: 0\n };\n } else {\n labelPositionAttrs = {\n position: 'start',\n autoRotate: false,\n ...getTextOffset(points[0], points[1], connectDirection, expandDistanceValue),\n refX: 0,\n refY: 0\n };\n }\n\n this._markerComponent?.setAttributes({\n points: multiSegment\n ? [\n [joinPoints[0], joinPoints[1]],\n [joinPoints[1], joinPoints[2]],\n [joinPoints[2], joinPoints[3]]\n ]\n : joinPoints,\n label: {\n ...labelAttrs,\n ...labelPositionAttrs,\n textStyle: {\n ...markerComponentAttr.label.textStyle,\n textAlign: 'center',\n textBaseline: 'middle'\n }\n },\n limitRect,\n multiSegment,\n mainSegmentIndex,\n dx: this._layoutOffsetX,\n dy: this._layoutOffsetY\n });\n } else {\n this._markerComponent?.setAttributes({\n points: points,\n label: labelAttrs,\n limitRect,\n dx: this._layoutOffsetX,\n dy: this._layoutOffsetY\n });\n }\n }\n\n protected _initDataView(): void {\n const spec = this._spec;\n const relativeSeries = this._relativeSeries;\n const isXProcess = 'x' in spec;\n const isYProcess = 'y' in spec;\n const isX1Process = 'x1' in spec;\n const isY1Process = 'y1' in spec;\n const isCoordinateProcess = 'coordinates' in spec;\n\n const doXProcess = isXProcess && !isYProcess && !isY1Process;\n const doXYY1Process = isXProcess && isYProcess && isY1Process;\n const doYProcess = isYProcess && !isXProcess && !isX1Process;\n const doYXX1Process = isYProcess && isXProcess && isX1Process;\n const doXYProcess = isXProcess && isYProcess && isX1Process && isY1Process;\n\n this._markerData = relativeSeries.getViewData();\n\n if (!doXProcess && !doYProcess && !doXYY1Process && !doYXX1Process && !doXYProcess && !isCoordinateProcess) {\n return;\n }\n\n registerDataSetInstanceTransform(this._option.dataSet, 'markerAggregation', markerAggregation);\n registerDataSetInstanceTransform(this._option.dataSet, 'markerRegression', markerRegression);\n registerDataSetInstanceTransform(this._option.dataSet, 'markerFilter', markerFilter);\n\n this._isXYLayout = doXProcess || doXYY1Process || doYProcess || doYXX1Process || doXYProcess;\n\n let options: IOptionAggr[] | IOptionRegr;\n let processData: DataView = relativeSeries.getViewData();\n let needAggr: boolean = true;\n let needRegr: boolean = false;\n\n if (doXYProcess) {\n const { x, x1, y, y1 } = spec as IMarkLineXYSpec;\n options = [this._processSpecXY(x, y), this._processSpecXY(x1, y1)];\n } else if (doXProcess) {\n options = [this._processSpecX(spec.x)];\n } else if (doYProcess) {\n options = [this._processSpecY(spec.y)];\n } else if (doXYY1Process) {\n const { x, y, y1 } = spec as IMarkLineXYY1Spec;\n options = [this._processSpecXY(x, y), this._processSpecXY(x, y1)];\n } else if (doYXX1Process) {\n const { x, x1, y } = spec as IMarkLineYXX1Spec;\n options = [this._processSpecXY(x, y), this._processSpecXY(x1, y)];\n } else if (isCoordinateProcess) {\n options = this._processSpecCoo(spec);\n needAggr = false;\n processData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` })\n .parse([relativeSeries.getViewData()], {\n type: 'dataview'\n })\n .transform({\n type: 'markerAggregation',\n options\n });\n if (spec.process && 'x' in spec.process) {\n options = [this._processSpecX(spec.process.x as unknown as IDataPos)] as unknown as any;\n needAggr = true;\n }\n if (spec.process && 'y' in spec.process) {\n options = [this._processSpecY(spec.process.y as unknown as IDataPos)] as unknown as any;\n needAggr = true;\n }\n if (spec.process && 'xy' in spec.process) {\n const { xField, yField } = relativeSeries.getSpec();\n options = {\n fieldX: xField,\n fieldY: yField\n };\n needRegr = true;\n }\n } else {\n needAggr = false;\n }\n\n const data = new DataView(this._option.dataSet);\n data.parse([processData], {\n type: 'dataview'\n });\n if (needAggr) {\n data.transform({\n type: 'markerAggregation',\n options\n });\n }\n if (needRegr) {\n data.transform({\n type: 'markerRegression',\n options\n });\n }\n\n if (needAggr || needRegr) {\n data.transform({\n type: 'markerFilter',\n options: this._getAllRelativeSeries()\n });\n }\n\n data.target.on('change', () => {\n this._markerLayout();\n });\n this._markerData = data;\n }\n}\n\nexport const registerMarkLine = () => {\n Factory.registerComponent(MarkLine.type, MarkLine);\n};\n","import type { IPoint } from '../../../typings';\n\nexport function getInsertPoints(\n start: IPoint,\n end: IPoint,\n direction: 'top' | 'bottom' | 'left' | 'right',\n offset: number = 0\n) {\n const points: IPoint[] = [];\n const dy = start.y - end.y;\n const dx = start.x - end.x;\n\n switch (direction) {\n case 'top':\n points.push(start);\n points.push({\n x: start.x,\n y: dy > 0 ? start.y - offset - Math.abs(dy) : start.y - offset\n });\n points.push({\n x: end.x,\n y: dy > 0 ? end.y - offset : end.y - offset - Math.abs(dy)\n });\n points.push(end);\n break;\n case 'bottom':\n points.push(start);\n points.push({ x: start.x, y: dy < 0 ? start.y + offset + Math.abs(dy) : start.y + offset });\n points.push({ x: end.x, y: dy < 0 ? end.y + offset : end.y + offset + Math.abs(dy) });\n points.push(end);\n break;\n case 'left':\n points.push(start);\n points.push({\n x: dx > 0 ? start.x - offset - Math.abs(dx) : start.x - offset,\n y: start.y\n });\n points.push({\n x: dx > 0 ? end.x - offset : end.x - offset - Math.abs(dx),\n y: end.y\n });\n points.push(end);\n break;\n case 'right':\n points.push(start);\n points.push({\n x: dx > 0 ? start.x + offset : start.x + offset + Math.abs(dx),\n y: start.y\n });\n points.push({\n x: dx > 0 ? end.x + offset + Math.abs(dx) : end.x + offset,\n y: end.y\n });\n points.push(end);\n break;\n default:\n break;\n }\n return points;\n}\n\nexport function getTextOffset(\n start: IPoint,\n end: IPoint,\n direction: 'top' | 'bottom' | 'left' | 'right',\n offset: number = 0\n) {\n const dy = start.y - end.y;\n const dx = start.x - end.x;\n\n if (direction === 'bottom') {\n return {\n dx: dx > 0 ? -dx / 2 : Math.abs(dx / 2),\n dy: dy > 0 ? offset : Math.abs(dy) + offset\n };\n }\n\n if (direction === 'top') {\n return {\n dx: dx > 0 ? -Math.abs(dx / 2) : +Math.abs(dx / 2),\n dy: dy > 0 ? -(Math.abs(dy) + offset) : -offset\n };\n }\n\n if (direction === 'left') {\n return {\n dx: dx > 0 ? -dx - offset : -offset,\n dy: dy > 0 ? -(dy / 2) : Math.abs(dy / 2)\n };\n }\n\n if (direction === 'right') {\n return {\n dx: dx > 0 ? offset : Math.abs(dx) + offset,\n dy: dy > 0 ? -(dy / 2) : Math.abs(dy / 2)\n };\n }\n\n return {};\n}\n","import { registerGroup, registerWrapText, registerRichtext } from '@visactor/vrender-kits';\n\nexport function loadTitleComponent() {\n registerGroup();\n registerWrapText();\n registerRichtext();\n}\n","/**\n * @description 标题组件\n */\nimport type { IGroup, IText, IRichText, IRichTextCharacter } from '@visactor/vrender-core';\nimport { merge, isValid, normalizePadding, isArray } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { TitleAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { DEFAULT_HTML_TEXT_SPEC } from '../constant';\nimport { loadTitleComponent } from './register';\n\nloadTitleComponent();\nexport class Title extends AbstractComponent> {\n name = 'title';\n\n private _mainTitle?: IText | IRichText;\n private _subTitle?: IText | IRichText;\n\n static defaultAttributes: Partial = {\n textStyle: {\n ellipsis: '...',\n fill: '#333',\n fontSize: 20,\n fontWeight: 'bold',\n textAlign: 'left',\n textBaseline: 'top'\n },\n subtextStyle: {\n ellipsis: '...',\n fill: '#6F6F6F',\n fontSize: 16,\n fontWeight: 'normal',\n textAlign: 'left',\n textBaseline: 'top'\n }\n };\n\n constructor(attributes: TitleAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Title.defaultAttributes, attributes));\n }\n\n protected render() {\n const {\n textType,\n text,\n subtextType,\n textStyle = {},\n subtext,\n subtextStyle = {},\n width,\n height,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n align,\n verticalAlign,\n padding = 0\n } = this.attribute as TitleAttrs;\n\n const parsedPadding = normalizePadding(padding);\n\n const group = this.createOrUpdateChild(\n 'title-container',\n { x: parsedPadding[3], y: parsedPadding[0], zIndex: 1 },\n 'group'\n ) as IGroup;\n\n if (this.attribute.visible !== false && textStyle.visible !== false) {\n if (textType === 'rich' || isValid(textStyle.character)) {\n const attr = {\n x: textStyle.x ?? 0,\n y: textStyle.y ?? 0,\n width: textStyle.width ?? width ?? 0,\n height: textStyle.height ?? height ?? 0,\n ellipsis: textStyle.ellipsis ?? true,\n wordBreak: textStyle.wordBreak ?? 'break-word',\n maxHeight: textStyle.maxHeight,\n maxWidth: textStyle.maxWidth,\n // 兼容旧版富文本配置,如果未设置textType === 'rich',text内容为string 易报错\n textConfig: textStyle.character ?? (text as IRichTextCharacter[]),\n ...textStyle\n };\n this._mainTitle = group.createOrUpdateChild('mainTitle', attr, 'richtext') as IRichText;\n } else if (textType === 'html') {\n const attr = {\n html: {\n dom: text as string,\n ...DEFAULT_HTML_TEXT_SPEC,\n ...textStyle\n },\n x: textStyle.x ?? 0,\n y: textStyle.y ?? 0,\n width: textStyle.width ?? width ?? 0,\n height: textStyle.height ?? height ?? 0,\n ellipsis: textStyle.ellipsis ?? true,\n wordBreak: textStyle.wordBreak ?? 'break-word',\n maxHeight: textStyle.maxHeight,\n maxWidth: textStyle.maxWidth,\n textConfig: [] as any[],\n ...textStyle\n };\n this._mainTitle = group.createOrUpdateChild('mainTitle', attr, 'richtext') as IRichText;\n } else if (isValid(text)) {\n this._mainTitle = group.createOrUpdateChild(\n 'mainTitle',\n {\n text: isArray(text) ? (text as any) : [text as string],\n ...textStyle,\n maxLineWidth: textStyle.maxLineWidth ?? width,\n heightLimit: textStyle.heightLimit,\n lineClamp: textStyle.lineClamp,\n ellipsis: textStyle.ellipsis ?? true,\n x: 0,\n y: 0\n },\n 'wrapText'\n ) as IText;\n }\n }\n\n const maintextHeight = this._mainTitle ? this._mainTitle.AABBBounds.height() : 0;\n const maintextWidth = this._mainTitle ? this._mainTitle.AABBBounds.width() : 0;\n\n if (this.attribute.visible !== false && subtextStyle.visible !== false) {\n if (subtextType === 'rich' || isValid(subtextStyle.character)) {\n const attr: any = {\n x: subtextStyle.x ?? 0,\n y: subtextStyle.y ?? 0,\n width: subtextStyle.width ?? width ?? 0,\n height: subtextStyle.height ?? height ?? 0,\n ellipsis: subtextStyle.ellipsis ?? true,\n wordBreak: subtextStyle.wordBreak ?? 'break-word',\n maxHeight: subtextStyle.maxHeight,\n maxWidth: subtextStyle.maxWidth,\n // 兼容旧版富文本配置,如果未设置textType === 'rich',text内容为string 易报错\n textConfig: subtextStyle.character ?? (subtext as IRichTextCharacter[]),\n ...subtextStyle\n };\n this._subTitle = group.createOrUpdateChild('subTitle', attr, 'richtext') as IRichText;\n } else if (subtextType === 'html') {\n const attr: any = {\n html: {\n dom: subtext as string,\n ...DEFAULT_HTML_TEXT_SPEC,\n ...subtextStyle\n },\n x: subtextStyle.x ?? 0,\n y: subtextStyle.y ?? 0,\n width: subtextStyle.width ?? width ?? 0,\n height: subtextStyle.height ?? height ?? 0,\n ellipsis: subtextStyle.ellipsis ?? true,\n wordBreak: subtextStyle.wordBreak ?? 'break-word',\n maxHeight: subtextStyle.maxHeight,\n maxWidth: subtextStyle.maxWidth,\n textConfig: [] as any[],\n ...subtextStyle\n };\n this._subTitle = group.createOrUpdateChild('subTitle', attr, 'richtext') as IRichText;\n } else if (isValid(subtext)) {\n this._subTitle = group.createOrUpdateChild(\n 'subTitle',\n {\n text: isArray(subtext) ? (subtext as any) : [subtext as string],\n ...subtextStyle,\n maxLineWidth: subtextStyle.maxLineWidth ?? width,\n heightLimit: subtextStyle.heightLimit,\n lineClamp: subtextStyle.lineClamp,\n ellipsis: subtextStyle.ellipsis ?? true,\n x: 0,\n y: maintextHeight\n },\n 'wrapText'\n ) as IText;\n }\n }\n\n const subtextHeight = this._subTitle ? this._subTitle.AABBBounds.height() : 0;\n const subtextWidth = this._subTitle ? this._subTitle.AABBBounds.width() : 0;\n\n // 设置宽高\n let titleWidth = Math.max(maintextWidth, subtextWidth);\n let titleHeight = maintextHeight + (subtextStyle.height ?? subtextHeight);\n\n if (isValid(width)) {\n titleWidth = width;\n this._mainTitle && this._mainTitle.setAttribute('maxLineWidth', width);\n this._subTitle && this._subTitle.setAttribute('maxLineWidth', width);\n }\n\n if (isValid(height)) {\n titleHeight = height;\n }\n\n if (isValid(minWidth) && titleWidth < minWidth) {\n titleWidth = minWidth;\n }\n if (isValid(maxWidth)) {\n this._mainTitle && this._mainTitle.setAttribute('maxLineWidth', maxWidth);\n this._subTitle && this._subTitle.setAttribute('maxLineWidth', maxWidth);\n this._mainTitle && this._mainTitle.setAttribute('maxWidth', maxWidth);\n this._subTitle && this._subTitle.setAttribute('maxWidth', maxWidth);\n if (titleWidth > maxWidth) {\n titleWidth = maxWidth;\n }\n }\n\n if (isValid(minHeight) && titleHeight < minHeight) {\n titleHeight = minHeight;\n }\n if (isValid(maxHeight)) {\n this._mainTitle && this._mainTitle.setAttribute('maxHeight', maxHeight);\n this._subTitle && this._subTitle.setAttribute('maxHeight', maxHeight - maintextHeight);\n if (titleHeight > maxHeight) {\n titleHeight = maxHeight;\n }\n }\n\n group.attribute.width = titleWidth;\n group.attribute.height = titleHeight;\n group.attribute.boundsPadding = parsedPadding;\n\n // 设置对齐\n if (this._mainTitle) {\n if (isValid(align) || isValid(textStyle.align)) {\n const mainTitleAlign = textStyle.align ? textStyle.align : align;\n const mainTitleWidth = textStyle.width ?? maintextWidth;\n if (mainTitleAlign === 'left') {\n this._mainTitle.setAttribute('x', 0);\n this._mainTitle.setAttribute('textAlign', 'left');\n } else if (mainTitleAlign === 'center') {\n this._mainTitle.setAttribute('x', mainTitleWidth / 2);\n this._mainTitle.setAttribute('textAlign', 'center');\n } else if (mainTitleAlign === 'right') {\n this._mainTitle.setAttribute('x', mainTitleWidth);\n this._mainTitle.setAttribute('textAlign', 'right');\n }\n }\n\n if (isValid(verticalAlign) || isValid(textStyle.verticalAlign)) {\n const mainTitleVerticalAlign = textStyle.verticalAlign ? textStyle.verticalAlign : verticalAlign;\n const mainTitleHeight = textStyle.height ? textStyle.height : titleHeight;\n if (mainTitleVerticalAlign === 'top') {\n this._mainTitle.setAttribute('y', 0);\n this._mainTitle.setAttribute('textBaseline', 'top');\n } else if (mainTitleVerticalAlign === 'middle') {\n this._mainTitle.setAttribute('y', mainTitleHeight / 2);\n this._mainTitle.setAttribute('textBaseline', 'middle');\n } else if (mainTitleVerticalAlign === 'bottom') {\n this._mainTitle.setAttribute('y', mainTitleHeight);\n this._mainTitle.setAttribute('textBaseline', 'bottom');\n }\n }\n }\n\n if (this._subTitle) {\n if (isValid(align) || isValid(subtextStyle.align)) {\n const subTitleAlign = subtextStyle.align ? subtextStyle.align : align;\n const subTitleWidth = subtextStyle.width ?? subtextWidth;\n if (subTitleAlign === 'left') {\n this._subTitle.setAttribute('x', 0);\n this._subTitle.setAttribute('textAlign', 'left');\n } else if (subTitleAlign === 'center') {\n this._subTitle.setAttribute('x', subTitleWidth / 2);\n this._subTitle.setAttribute('textAlign', 'center');\n } else if (subTitleAlign === 'right') {\n this._subTitle.setAttribute('x', subTitleWidth);\n this._subTitle.setAttribute('textAlign', 'right');\n }\n }\n\n if (isValid(verticalAlign) || isValid(textStyle.verticalAlign)) {\n const subTitleVerticalAlign = subtextStyle.verticalAlign ? subtextStyle.verticalAlign : verticalAlign;\n const subTitleYStart = maintextHeight;\n const subTitleHeight = subtextStyle.height ?? 0;\n if (subTitleVerticalAlign === 'top') {\n this._subTitle.setAttribute('y', subTitleYStart);\n this._subTitle.setAttribute('textBaseline', 'top');\n } else if (subTitleVerticalAlign === 'middle') {\n this._subTitle.setAttribute('y', subTitleYStart + subTitleHeight / 2);\n this._subTitle.setAttribute('textBaseline', 'middle');\n } else if (subTitleVerticalAlign === 'bottom') {\n this._subTitle.setAttribute('y', subTitleYStart + subTitleHeight);\n this._subTitle.setAttribute('textBaseline', 'bottom');\n }\n }\n }\n }\n}\n","import { LayoutLevel, LayoutZIndex } from '../../constant';\nimport { Factory } from '../../core/factory';\nimport type { IModelSpecInfo } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { IPoint, IOrientType, ILayoutType, ILayoutRect } from '../../typings';\nimport { isValidOrient } from '../../util/space';\nimport { BaseComponent } from '../base/base-component';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IComponentOption } from '../interface';\nimport { ComponentTypeEnum } from '../interface/type';\nimport type { ITitle, ITitleSpec, ITitleTheme } from './interface';\nimport { Title as TitleComponents } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport type { TitleAttrs } from '@visactor/vrender-components';\nimport type { IGraphic, IGroup, INode } from '@visactor/vrender-core';\nimport type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEqual, isArray, isValidNumber, pickWithout } from '@visactor/vutils';\n\nexport class Title extends BaseComponent implements ITitle {\n static type = ComponentTypeEnum.title;\n type = ComponentTypeEnum.title;\n static specKey = ComponentTypeEnum.title;\n specKey: string = ComponentTypeEnum.title;\n\n layoutType: ILayoutType = 'normal';\n layoutZIndex: number = LayoutZIndex.Title;\n layoutLevel: number = LayoutLevel.Title;\n\n protected _orient: IOrientType = 'top';\n\n private _titleComponent: TitleComponents;\n private _cacheAttrs: TitleAttrs;\n\n get orient() {\n return this._orient;\n }\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this._orient = isValidOrient(spec.orient) ? spec.orient : 'top';\n }\n\n initLayout(): void {\n super.initLayout();\n this._layout && (this._layout.layoutOrient = this._orient);\n }\n\n static getSpecInfo(chartSpec: any): Maybe {\n const titleSpec = chartSpec[this.specKey];\n if (!titleSpec || titleSpec.visible === false) {\n return null;\n }\n if (!isArray(titleSpec)) {\n return [\n {\n spec: titleSpec,\n specPath: [this.specKey],\n type: ComponentTypeEnum.title\n }\n ];\n }\n const specInfos: IModelSpecInfo[] = [];\n titleSpec.forEach((s: any, i: number) => {\n if (s.visible !== false) {\n specInfos.push({\n spec: s,\n specIndex: i,\n specPath: [this.specKey, i],\n type: ComponentTypeEnum.title\n });\n }\n });\n return specInfos;\n }\n\n onRender(ctx: any): void {\n // do nothing\n }\n\n /**\n * updateSpec\n */\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n if (prevSpec?.orient !== spec?.orient) {\n result.reMake = true;\n }\n\n result.change = true;\n result.reRender = true;\n return result;\n }\n\n // region\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n update(ctx: IComponentOption) {\n // TODO\n }\n\n resize(ctx: IComponentOption) {\n // TODO\n }\n\n afterSetLayoutStartPoint(pos: IPoint): void {\n if (isValidNumber(pos.x)) {\n this._titleComponent && this._titleComponent.setAttribute('x', pos.x);\n }\n if (isValidNumber(pos.y)) {\n this._titleComponent && this._titleComponent.setAttribute('y', pos.y);\n }\n super.afterSetLayoutStartPoint(pos);\n }\n\n getBoundsInRect(rect: ILayoutRect) {\n let result: Partial = {};\n this.setLayoutRect(rect);\n\n const attrs = this._getTitleAttrs();\n this._createOrUpdateTitleComponent(attrs);\n\n result = this._getTitleLayoutRect();\n const { x, y } = this.getLayoutStartPoint();\n return {\n x1: x,\n y1: y,\n x2: x + result.width,\n y2: y + result.height\n };\n }\n\n private _getTitleLayoutRect() {\n const titleBounds = this._titleComponent.AABBBounds;\n const width = this._spec.width ? this._spec.width : isValidNumber(titleBounds.width()) ? titleBounds.width() : 0;\n const height = this._spec.height\n ? this._spec.height\n : isValidNumber(titleBounds.height())\n ? titleBounds.height()\n : 0;\n return {\n width,\n height\n };\n }\n\n private _getTitleAttrs() {\n // 当 width 小于 0 时,设置为 0,负数场景容易引起不可预知的问题\n const realWidth = Math.max(0, this._spec.width ?? this.getLayoutRect().width);\n return {\n ...pickWithout(this._spec, ['padding']),\n textType: this._spec.textType ?? 'text',\n text: this._spec.text ?? '',\n subtextType: this._spec.subtextType ?? 'text',\n subtext: this._spec.subtext ?? '',\n x: this._spec.x ?? 0,\n y: this._spec.y ?? 0,\n width: realWidth,\n height: this._spec.height,\n minWidth: this._spec.minWidth,\n maxWidth: this._spec.maxWidth,\n minHeight: this._spec.minHeight,\n maxHeight: this._spec.maxHeight,\n padding: this._spec.innerPadding,\n align: this._spec.align ?? 'left',\n verticalAlign: this._spec.verticalAlign ?? 'top',\n textStyle: {\n width: realWidth,\n ...this._spec.textStyle\n },\n subtextStyle: {\n width: realWidth,\n ...this._spec.subtextStyle\n }\n } as TitleAttrs;\n }\n\n private _createOrUpdateTitleComponent(attrs: TitleAttrs): TitleComponents {\n if (this._titleComponent) {\n if (!isEqual(attrs, this._cacheAttrs)) {\n this._titleComponent.setAttributes(attrs);\n }\n } else {\n const container = this.getContainer();\n const title = new TitleComponents(attrs);\n title.name = 'title';\n container.add(title as unknown as INode);\n this._titleComponent = title;\n // 代理 title 组件上的事件\n title.on('*', (event: any, type: string) => this._delegateEvent(title as unknown as IGraphic, event, type));\n }\n this._cacheAttrs = attrs;\n return this._titleComponent;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._titleComponent] as unknown as IGroup[];\n }\n\n clear(): void {\n super.clear();\n this._cacheAttrs = null;\n }\n}\n\nexport const registerTitle = () => {\n Factory.registerComponent(Title.type, Title);\n};\n","import type { IGroup, INode, IPolygon } from '@visactor/vrender-core';\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { isValidNumber, merge } from '@visactor/vutils';\nimport type { TagAttributes } from '../tag';\nimport { Tag } from '../tag';\nimport { Marker } from './base';\nimport { DEFAULT_MARK_AREA_TEXT_STYLE_MAP, DEFAULT_MARK_AREA_THEME } from './config';\nimport type { MarkAreaAttrs } from './type';\nimport { limitShapeInBounds } from '../util/limit-shape';\nimport type { ComponentOptions } from '../interface';\nimport { loadMarkAreaComponent } from './register';\nimport type { Point } from '../core/type';\n\nloadMarkAreaComponent();\nexport class MarkArea extends Marker {\n name = 'markArea';\n static defaultAttributes = DEFAULT_MARK_AREA_THEME;\n private _area!: IPolygon;\n getArea() {\n return this._area;\n }\n\n getLabel() {\n return this._label;\n }\n\n constructor(attributes: MarkAreaAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, MarkArea.defaultAttributes, attributes));\n }\n\n private _getPositionByDirection(area: IPolygon, direction: string) {\n const { x1, x2, y1, y2 } = this._area.AABBBounds;\n\n if (direction.includes('left') || direction.includes('Left')) {\n return {\n x: x1,\n y: (y1 + y2) / 2\n };\n }\n if (direction.includes('right') || direction.includes('Right')) {\n return {\n x: x2,\n y: (y1 + y2) / 2\n };\n }\n if (direction.includes('top') || direction.includes('Top')) {\n return {\n x: (x1 + x2) / 2,\n y: y1\n };\n }\n if (direction.includes('bottom') || direction.includes('Bottom')) {\n return {\n x: (x1 + x2) / 2,\n y: y2\n };\n }\n\n return {\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2\n };\n }\n\n protected setLabelPos() {\n if (this._label && this._area) {\n const { label = {} } = this.attribute as MarkAreaAttrs;\n const labelPosition = label.position ?? 'middle';\n const labelPoint = this._getPositionByDirection(this._area, labelPosition);\n this._label.setAttributes({\n ...labelPoint,\n textStyle: {\n ...DEFAULT_MARK_AREA_TEXT_STYLE_MAP[labelPosition],\n ...label.textStyle\n }\n });\n\n if (this.attribute.limitRect && label.confine) {\n const { x, y, width, height } = this.attribute.limitRect;\n limitShapeInBounds(this._label, {\n x1: x,\n y1: y,\n x2: x + width,\n y2: y + height\n });\n }\n }\n }\n\n protected initMarker(container: IGroup) {\n const { points, label, areaStyle } = this.attribute as MarkAreaAttrs;\n const area = graphicCreator.polygon({\n points: points,\n ...areaStyle\n });\n area.name = 'mark-area-area';\n this._area = area;\n container.add(area);\n\n const markLabel = new Tag({\n ...(label as TagAttributes)\n });\n markLabel.name = 'mark-area-label';\n this._label = markLabel;\n container.add(markLabel as unknown as INode);\n this.setLabelPos();\n }\n\n protected updateMarker() {\n const { points, label, areaStyle } = this.attribute as MarkAreaAttrs;\n if (this._area) {\n this._area.setAttributes({\n points: points,\n ...areaStyle\n });\n }\n if (this._area) {\n this._label.setAttributes({\n dx: 0,\n dy: 0, // 需要进行复位\n ...(label as TagAttributes)\n });\n }\n this.setLabelPos();\n }\n\n protected isValidPoints() {\n const { points } = this.attribute as MarkAreaAttrs;\n if (!points || points.length < 3) {\n return false;\n }\n let validFlag = true;\n points.forEach((point: Point) => {\n if (!isValidNumber((point as Point).x) || !isValidNumber((point as Point).y)) {\n validFlag = false;\n return;\n }\n });\n return validFlag;\n }\n}\n","import { DataView } from '@visactor/vdataset';\nimport type { IMarkArea, IMarkAreaSpec } from './interface';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport type { IOptionAggr } from '../../../data/transforms/aggregation';\n// eslint-disable-next-line no-duplicate-imports\nimport { markerAggregation } from '../../../data/transforms/aggregation';\nimport { computeClipRange, coordinateLayout, positionLayout, xyLayout, transformLabelAttributes } from '../utils';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\nimport type { MarkAreaAttrs } from '@visactor/vrender-components';\nimport { MarkArea as MarkAreaComponent } from '@visactor/vrender-components';\nimport type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEmpty, isValid, isArray } from '@visactor/vutils';\nimport { transformToGraphic } from '../../../util/style';\nimport { BaseMarker } from '../base-marker';\nimport { LayoutZIndex } from '../../../constant';\nimport type { IGroup } from '@visactor/vrender-core';\nimport { Factory } from '../../../core/factory';\nimport type { IPoint } from '../../../typings';\nimport type { IModelSpecInfo } from '../../../model/interface';\nimport { markerFilter } from '../../../data/transforms/marker-filter';\n\nexport class MarkArea extends BaseMarker implements IMarkArea {\n static type = ComponentTypeEnum.markArea;\n type = ComponentTypeEnum.markArea;\n name: string = ComponentTypeEnum.markArea;\n\n static specKey = 'markArea';\n specKey = 'markArea';\n\n layoutZIndex: number = LayoutZIndex.MarkArea;\n\n // markArea组件\n protected declare _markerComponent: MarkAreaComponent;\n\n static getSpecInfo(chartSpec: any): Maybe {\n const markAreaSpec = chartSpec[this.specKey];\n if (isEmpty(markAreaSpec)) {\n return undefined;\n }\n if (!isArray(markAreaSpec) && markAreaSpec.visible !== false) {\n return [\n {\n spec: markAreaSpec,\n specPath: [this.specKey],\n type: ComponentTypeEnum.markArea\n }\n ];\n }\n const specInfos: IModelSpecInfo[] = [];\n markAreaSpec.forEach((m: any, i: number) => {\n if (m.visible !== false) {\n specInfos.push({\n spec: m,\n specIndex: i,\n specPath: [this.specKey, i],\n type: ComponentTypeEnum.markArea\n });\n }\n });\n return specInfos;\n }\n\n protected _createMarkerComponent() {\n const label = this._spec.label ?? {};\n const markAreaAttrs: MarkAreaAttrs = {\n zIndex: this.layoutZIndex,\n interactive: this._spec.interactive ?? false,\n points: [\n {\n x: 0,\n y: 0\n }\n ],\n areaStyle: transformToGraphic(this._spec.area?.style),\n clipInRange: this._spec.clip ?? false,\n label: transformLabelAttributes(label)\n };\n\n const markArea = new MarkAreaComponent(markAreaAttrs);\n return markArea as unknown as IGroup;\n }\n\n protected _markerLayout() {\n const spec = this._spec as any;\n const data = this._markerData;\n const startRelativeSeries = this._startRelativeSeries;\n const endRelativeSeries = this._endRelativeSeries;\n const relativeSeries = this._relativeSeries;\n\n const isXLayout = isValid(spec.x) && isValid(spec.x1);\n const isYLayout = isValid(spec.y) && isValid(spec.y1);\n const isXYLayout = isXLayout && isYLayout;\n const isCoordinateLayout = isValid(spec.coordinates);\n const isPositionLayout = isValid(spec.positions);\n const autoRange = spec.autoRange ?? false;\n\n let points: IPoint[] = [];\n let lines: IPoint[][] = [];\n if (isXYLayout) {\n lines = xyLayout(data, startRelativeSeries, endRelativeSeries, relativeSeries, autoRange);\n // 格式为 [[{x, y}], [{x, y}]]\n // 顺序为左小角开始逆时针绘制\n points = [\n {\n x: lines[0][0].x,\n y: lines[1][0].y\n },\n lines[0][0],\n {\n x: lines[1][0].x,\n y: lines[0][0].y\n },\n lines[1][0]\n ];\n } else if (isXLayout || isYLayout) {\n lines = xyLayout(data, startRelativeSeries, endRelativeSeries, relativeSeries, autoRange);\n points = [...lines[0], lines[1][1], lines[1][0]];\n } else if (isCoordinateLayout) {\n points = coordinateLayout(data, relativeSeries, autoRange, spec.coordinatesOffset);\n } else if (isPositionLayout) {\n points = positionLayout(spec.positions, relativeSeries, spec.regionRelative);\n }\n\n const seriesData = this._relativeSeries.getViewData().latestData;\n const dataPoints = data\n ? data.latestData[0] && data.latestData[0].latestData\n ? data.latestData[0].latestData\n : data.latestData\n : seriesData;\n\n let limitRect;\n if (spec.clip || spec.label?.confine) {\n const { minX, maxX, minY, maxY } = computeClipRange([\n startRelativeSeries.getRegion(),\n endRelativeSeries.getRegion(),\n relativeSeries.getRegion()\n ]);\n limitRect = {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n }\n\n if (this._markerComponent) {\n this._markerComponent.setAttributes({\n points: points,\n label: {\n ...this._markerComponent.attribute?.label,\n text: this._spec.label.formatMethod\n ? this._spec.label.formatMethod(dataPoints, seriesData)\n : this._markerComponent.attribute?.label?.text\n },\n limitRect,\n dx: this._layoutOffsetX,\n dy: this._layoutOffsetY\n });\n }\n }\n\n protected _initDataView(): void {\n const spec = this._spec as any;\n const relativeSeries = this._relativeSeries;\n const isXProcess = isValid(spec.x) && isValid(spec.x1);\n const isYProcess = isValid(spec.y) && isValid(spec.y1);\n const isXYProcess = isXProcess && isYProcess;\n const isCoordinateProcess = isValid(spec.coordinates);\n if (!isXProcess && !isYProcess && !isCoordinateProcess) {\n return null;\n }\n let options: IOptionAggr[];\n if (isXYProcess) {\n options = [this._processSpecXY(spec.x, spec.y), this._processSpecXY(spec.x1, spec.y1)];\n } else if (isXProcess) {\n options = [this._processSpecX(spec.x), this._processSpecX(spec.x1)];\n } else if (isYProcess) {\n options = [this._processSpecY(spec.y), this._processSpecY(spec.y1)];\n } else if (isCoordinateProcess) {\n options = this._processSpecCoo(spec);\n }\n\n const seriesData = relativeSeries.getViewData();\n registerDataSetInstanceTransform(this._option.dataSet, 'markerAggregation', markerAggregation);\n registerDataSetInstanceTransform(this._option.dataSet, 'markerFilter', markerFilter);\n const data = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` });\n data.parse([seriesData], {\n type: 'dataview'\n });\n data.transform({\n type: 'markerAggregation',\n options\n });\n\n if (options) {\n data.transform({\n type: 'markerFilter',\n options: this._getAllRelativeSeries()\n });\n }\n\n data.target.on('change', () => {\n this._markerLayout();\n });\n this._markerData = data;\n }\n}\n\nexport const registerMarkArea = () => {\n Factory.registerComponent(MarkArea.type, MarkArea);\n};\n","import type { ISymbolGraphicAttribute } from '@visactor/vrender-core';\nimport { Symbol } from '@visactor/vrender-core';\n\nexport class PlayerIcon extends Symbol {\n constructor(params: ISymbolGraphicAttribute) {\n super(params);\n }\n}\n","export enum ControllerEventEnum {\n OnPlay = 'onPlay',\n OnPause = 'onPause',\n OnForward = 'onForward',\n OnBackward = 'onBackward'\n}\n\nexport enum ControllerTypeEnum {\n Start = 'start',\n Pause = 'pause',\n Forward = 'forward',\n Backward = 'backward'\n}\n","import { isNil, merge } from '@visactor/vutils';\nimport type { FederatedPointerEvent, ISymbolGraphicAttribute } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../../core/base';\nimport type { BaseGraphicAttributes } from '../../core/type';\nimport type { ControllerAttributes, LayoutType } from './type';\nimport { iconRight, iconPause, iconPlay, iconLeft, iconUp, iconDown } from './assets';\nimport { PlayerIcon } from './icon';\nimport { ControllerTypeEnum } from './constant';\nimport type { ComponentOptions } from '../../interface';\n\nexport class Controller extends AbstractComponent> {\n static defaultControllerAttr: ISymbolGraphicAttribute = {\n visible: true,\n x: 0,\n y: 0,\n size: 20,\n fill: '#91caff',\n pickMode: 'imprecise',\n cursor: 'pointer'\n };\n static defaultAttributes: ControllerAttributes = {\n [ControllerTypeEnum.Start]: {},\n [ControllerTypeEnum.Pause]: {},\n [ControllerTypeEnum.Backward]: {},\n [ControllerTypeEnum.Forward]: {}\n };\n\n private _isPaused = true;\n private _playController: PlayerIcon;\n private _forwardController: PlayerIcon;\n private _backwardController: PlayerIcon;\n\n private _layout: LayoutType;\n private _startAttr: BaseGraphicAttributes;\n private _pauseAttr: BaseGraphicAttributes;\n private _forwardAttr: BaseGraphicAttributes;\n private _backwardAttr: BaseGraphicAttributes;\n\n constructor(attributes: ControllerAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Controller.defaultAttributes, attributes));\n this.updateAttributes();\n this._initPlay();\n this._initBackward();\n this._initForward();\n this._initEvents();\n }\n\n updateAttributes = () => {\n this._startAttr = {\n style: {\n symbolType: iconPlay,\n ...Controller.defaultControllerAttr,\n visible: this.attribute.start.visible,\n ...this.attribute.start.style\n }\n };\n this._pauseAttr = {\n style: {\n symbolType: iconPause,\n ...Controller.defaultControllerAttr,\n visible: this.attribute.pause.visible,\n ...this.attribute.pause.style\n }\n };\n this._forwardAttr = {\n style: {\n ...Controller.defaultControllerAttr,\n visible: this.attribute.forward.visible,\n ...this.attribute.forward.style\n }\n };\n this._backwardAttr = {\n style: {\n ...Controller.defaultControllerAttr,\n visible: this.attribute.backward.visible,\n ...this.attribute.backward.style\n }\n };\n this.updateLayout();\n };\n\n private updateLayout = () => {\n this._layout = this.attribute.layout;\n // 若水平布局\n if (this._layout === 'horizontal') {\n this._backwardAttr.style.symbolType = this._backwardAttr.style.symbolType ?? iconLeft;\n this._forwardAttr.style.symbolType = this._forwardAttr.style.symbolType ?? iconRight;\n }\n // 若垂直布局\n else if (this._layout === 'vertical') {\n this._backwardAttr.style.symbolType = this._backwardAttr.style.symbolType ?? iconUp;\n this._forwardAttr.style.symbolType = this._forwardAttr.style.symbolType ?? iconDown;\n }\n };\n\n private _initPlay = () => {\n if (isNil(this._playController)) {\n this._playController = new PlayerIcon({\n ...this._startAttr.style\n });\n\n this.add(this._playController);\n }\n };\n\n private _initBackward = () => {\n if (isNil(this._backwardController)) {\n this._backwardController = new PlayerIcon({\n ...this._backwardAttr.style\n });\n\n this.add(this._backwardController);\n }\n };\n\n private _initForward = () => {\n if (isNil(this._forwardController)) {\n this._forwardController = new PlayerIcon({\n ...this._forwardAttr.style\n });\n\n this.add(this._forwardController);\n }\n };\n\n /**\n * 初始化事件\n * 1. 注册\n */\n private _initEvents = () => {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n this._playController.addEventListener('pointerdown', (e: FederatedPointerEvent) => {\n e.stopPropagation();\n\n if (this._isPaused === true) {\n this.play();\n } else {\n this.pause();\n }\n });\n\n this._backwardController.addEventListener('pointerdown', (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.backward();\n });\n\n this._forwardController.addEventListener('pointerdown', (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.forward();\n });\n };\n\n render(): void {\n this.updateAttributes();\n this.renderPlay();\n this.renderBackward();\n this.renderForward();\n }\n\n renderPlay = () => {\n if (this._isPaused) {\n this._playController.setAttributes({\n symbolType: this._playController.getComputedAttribute('symbolType'),\n ...this._startAttr.style\n });\n } else {\n this._playController.setAttributes({\n symbolType: this._playController.getComputedAttribute('symbolType'),\n ...this._pauseAttr.style\n });\n }\n };\n\n renderBackward = () => {\n this._backwardController.setAttributes(this._backwardAttr.style);\n };\n\n renderForward = () => {\n this._forwardController.setAttributes(this._forwardAttr.style);\n };\n\n play = () => {\n this._dispatchEvent('ControllerEventEnum.OnPlay');\n };\n\n pause = () => {\n this._dispatchEvent('ControllerEventEnum.OnPause');\n };\n\n forward = () => {\n this._dispatchEvent('ControllerEventEnum.OnForward');\n };\n\n backward = () => {\n this._dispatchEvent('ControllerEventEnum.OnBackward');\n };\n\n togglePlay = () => {\n this._playController.setAttributes(this._startAttr.style);\n this._isPaused = true;\n };\n\n togglePause = () => {\n this._playController.setAttributes(this._pauseAttr.style);\n this._isPaused = false;\n };\n}\n","// export const iconPlay = `\n// M 837.808 551.64 L 219.376 968.6 a 8 8 0 0 1 -12.48 -6.64 V 128.04 a 8 8 0 0 1 12.48 -6.624 l 618.432 416.96 a 8 8 0 0 1 0 13.264 z m -534.896 -246.8 v 480.288 L 687.52 545 L 302.912 304.84 z\n// `;\n\nexport const iconPlay = `M 414.5 0.0238 c 228.9128 0 414.4762 185.5634 414.4762 414.4762 s -185.5634 414.4762 -414.4762 414.4762 S 0.0238 643.4128 0.0238 414.5 S 185.5872 0.0238 414.5 0.0238 z m 0 73.1429 C 225.9865 73.1667 73.1667 225.9865 73.1667 414.5 s 152.8198 341.3333 341.3333 341.3333 s 341.3333 -152.8198 341.3333 -341.3333 S 603.0135 73.1667 414.5 73.1667 z m -73.1429 161.4994 a 48.7619 48.7619 0 0 1 25.9901 7.5093 l 201.7524 127.1223 a 48.7619 48.7619 0 0 1 0.3657 82.2613 l -201.7524 129.6335 A 48.7619 48.7619 0 0 1 292.5952 540.1838 v -256.7314 a 48.7619 48.7619 0 0 1 48.7619 -48.7619 z m 24.381 92.9402 v 167.9116 l 131.9497 -84.7726 L 365.7381 327.6063 z`;\nexport const iconPause = `M 414.5 0.0238 c 228.9128 0 414.4762 185.5634 414.4762 414.4762 s -185.5634 414.4762 -414.4762 414.4762 S 0.0238 643.4128 0.0238 414.5 S 185.5872 0.0238 414.5 0.0238 z m 0 73.1429 C 225.9865 73.1667 73.1667 225.9865 73.1667 414.5 s 152.8198 341.3333 341.3333 341.3333 s 341.3333 -152.8198 341.3333 -341.3333 S 603.0135 73.1667 414.5 73.1667 z m -48.7619 195.0476 v 316.9524 h -73.1429 V 268.2143 h 73.1429 z m 158.4762 0 v 316.9524 h -73.1429 V 268.2143 h 73.1429 z`;\nexport const iconLeft = `M 521.29 734.276 L 230.929 448.019 L 521.29 161.762 c 37.685 -37.153 38.003 -97.625 0.707 -134.384 c -37.297 -36.758 -98.646 -36.435 -136.331 0.718 l -357.43 352.378 c -0.155 0.153 -0.297 0.314 -0.451 0.468 c -0.084 0.082 -0.172 0.157 -0.256 0.239 c -18.357 18.092 -27.581 41.929 -27.743 65.902 c -0.004 0.311 -0.017 0.623 -0.018 0.934 c 0.001 0.316 0.014 0.632 0.018 0.948 c 0.165 23.97 9.389 47.803 27.743 65.892 c 0.083 0.082 0.171 0.157 0.255 0.239 c 0.154 0.154 0.296 0.315 0.452 0.468 l 357.43 352.378 c 37.685 37.153 99.034 37.476 136.331 0.718 c 37.297 -36.758 36.979 -97.231 -0.707 -134.384 z`;\n\nexport const iconDown = `M 734.276 28.71 L 448.019 319.071 L 161.762 28.71 c -37.153 -37.685 -97.625 -38.003 -134.384 -0.707 c -36.758 37.297 -36.435 98.646 0.718 136.331 l 352.378 357.43 c 0.153 0.155 0.314 0.297 0.468 0.451 c 0.082 0.084 0.157 0.172 0.239 0.256 c 18.092 18.357 41.929 27.581 65.902 27.743 c 0.311 0.004 0.623 0.017 0.934 0.018 c 0.316 -0.001 0.632 -0.014 0.948 -0.018 c 23.97 -0.165 47.803 -9.389 65.892 -27.743 c 0.082 -0.083 0.157 -0.171 0.239 -0.255 c 0.154 -0.154 0.315 -0.296 0.468 -0.452 l 352.378 -357.43 c 37.153 -37.685 37.476 -99.034 0.718 -136.331 c -36.758 -37.297 -97.231 -36.979 -134.384 0.707 z`;\n\nexport const iconUp = `m 161.724 521.29 l 286.257 -290.361 l 286.257 290.361 c 37.153 37.685 97.625 38.003 134.384 0.707 c 36.758 -37.297 36.435 -98.646 -0.718 -136.331 l -352.378 -357.43 c -0.153 -0.155 -0.314 -0.297 -0.468 -0.451 c -0.082 -0.084 -0.157 -0.172 -0.239 -0.256 c -18.092 -18.357 -41.929 -27.581 -65.902 -27.743 c -0.311 -0.004 -0.623 -0.017 -0.934 -0.018 c -0.316 0.001 -0.632 0.014 -0.948 0.018 c -23.97 0.165 -47.803 9.389 -65.892 27.743 c -0.082 0.083 -0.157 0.171 -0.239 0.255 c -0.154 0.154 -0.315 0.296 -0.468 0.452 l -352.378 357.43 c -37.153 37.685 -37.476 99.034 -0.718 136.331 c 36.758 37.297 97.231 36.979 134.384 -0.707 z`;\n\nexport const iconRight = `M 30 163 L 320.361 449.257 L 30 735.514 c -37.685 37.153 -38.003 97.625 -0.707 134.384 c 37.297 36.758 98.646 36.435 136.331 -0.718 l 357.43 -352.378 c 0.155 -0.153 0.297 -0.314 0.451 -0.468 c 0.084 -0.082 0.172 -0.157 0.256 -0.239 c 18.357 -18.092 27.581 -41.929 27.743 -65.902 c 0.004 -0.311 0.017 -0.623 0.018 -0.934 c -0.001 -0.316 -0.014 -0.632 -0.018 -0.948 c -0.165 -23.97 -9.389 -47.803 -27.743 -65.892 c -0.083 -0.082 -0.171 -0.157 -0.255 -0.239 c -0.154 -0.154 -0.296 -0.315 -0.452 -0.468 l -357.43 -352.378 c -37.685 -37.153 -99.034 -37.476 -136.331 -0.718 c -37.297 36.758 -36.979 97.231 0.707 134.384 z`;\n","export const defaultControllerAttributes = {\n visible: true,\n style: {\n x: 0,\n y: 0,\n dx: 0,\n dy: 0,\n size: 20\n },\n order: 0,\n space: 10\n};\n\n/**\n * 滑轨默认[长度,宽度]\n */\nexport const RailDefaultSize = [200, 10];\n","export enum DirectionEnum {\n Default = 'default',\n Reverse = 'reverse'\n}\n\nexport type DirectionType = 'default' | 'reverse';\n","import { OrientType } from '../interface';\nimport { DirectionEnum, DirectionType } from './type';\n\n/**\n * 检测下标是否正确\n */\ninterface ICheckIndex {\n direction: DirectionType;\n maxIndex: number;\n minIndex: number;\n dataIndex: number;\n}\nexport const checkIndex = ({ direction, maxIndex, minIndex, dataIndex }: ICheckIndex): boolean => {\n // 若默认方向, 检测下标是否合法\n if (direction === DirectionEnum.Default) {\n return dataIndex < maxIndex;\n }\n // 若逆向, 检测下标是否合法\n else if (direction === DirectionEnum.Reverse) {\n return dataIndex > minIndex;\n }\n};\n\n/**\n * 判断能否进入循环\n */\n\nexport const canPlay = ({ direction, maxIndex, minIndex, dataIndex }: ICheckIndex): boolean => {\n return checkIndex({ direction, maxIndex, minIndex, dataIndex });\n};\n\n/**\n * 判断是否到达了末尾\n */\nexport const isReachEndByDefault = ({ direction, maxIndex, dataIndex }: Omit) => {\n if (direction === DirectionEnum.Default) {\n return dataIndex === maxIndex;\n }\n return false;\n};\n\nexport const isReachEndByReverse = ({ direction, minIndex, dataIndex }: Omit) => {\n if (direction === DirectionEnum.Reverse) {\n return dataIndex === minIndex;\n }\n return false;\n};\n\nexport const isReachEnd = ({ direction, maxIndex, minIndex, dataIndex }: ICheckIndex) => {\n return (\n isReachEndByDefault({ direction, maxIndex, dataIndex }) || isReachEndByReverse({ direction, minIndex, dataIndex })\n );\n};\n\n/**\n * 判断是否处于起点\n */\nexport const isReachStartByDefault = ({ direction, minIndex, dataIndex }: Omit) => {\n if (direction === DirectionEnum.Default) {\n return dataIndex === minIndex;\n }\n return false;\n};\n\nexport const isReachStartByReverse = ({ direction, maxIndex, dataIndex }: Omit) => {\n if (direction === DirectionEnum.Reverse) {\n return dataIndex === maxIndex;\n }\n return false;\n};\n\nexport const isReachStart = ({ direction, maxIndex, minIndex, dataIndex }: ICheckIndex) => {\n return (\n isReachStartByDefault({ direction, minIndex, dataIndex }) ||\n isReachStartByReverse({ direction, maxIndex, dataIndex })\n );\n};\n\n/**\n * 得到初始化下标\n */\n\nexport const isVertical = (orient: OrientType) => orient === 'left' || orient === 'right';\n\nexport const isHorizontal = (orient: OrientType) => orient === 'top' || orient === 'bottom';\n\nexport const forwardStep = (direction: DirectionType, currentIndex: number, min: number, max: number) => {\n if (direction === 'default') {\n return Math.min(currentIndex + 1, max);\n }\n return Math.max(currentIndex - 1, min);\n};\n","import type { INode } from '@visactor/vrender-core';\nimport { isNumber, isValidNumber, max, merge } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { ComponentOptions, OrientType } from '../interface';\nimport type { SliderAttributes } from '../slider';\nimport { Slider } from '../slider';\nimport type { ControllerAttributes } from './controller';\nimport { Controller } from './controller';\nimport type {\n Datum,\n PlayerEventEnum,\n PlayerAttributes,\n RailStyleType,\n ControllerType,\n TrackStyleType,\n HandlerStyleType\n} from './type';\nimport { RailDefaultSize, defaultControllerAttributes } from './constant';\nimport { isHorizontal } from './utils';\n\n/**\n * 基本播放器组件\n * 提供最基本的布局能力,\n */\nexport class BasePlayer extends AbstractComponent> {\n static defaultAttributes = {\n visible: true,\n data: [] as Datum[],\n interval: 1000,\n orient: 'bottom',\n align: 'center',\n size: {\n height: 20,\n width: 300\n },\n slider: {\n visible: true,\n space: 10,\n dx: 0,\n dy: 0,\n railStyle: {\n cornerRadius: 5\n },\n trackStyle: {},\n handlerStyle: {}\n },\n controller: {\n visible: true,\n start: { ...defaultControllerAttributes, key: 'start', position: 'start', space: 0 },\n pause: { ...defaultControllerAttributes, key: 'pause', position: 'start' },\n forward: { ...defaultControllerAttributes, key: 'forward', position: 'end' },\n backward: { ...defaultControllerAttributes, key: 'backward', position: 'start' }\n }\n };\n\n // 组件属性\n protected _slider: Slider;\n protected _controller: Controller;\n\n // 数据属性\n protected _data = [] as Datum[];\n protected _minIndex: number;\n protected _maxIndex: number;\n\n // 滑轨属性\n private _sliderVisible: boolean;\n private _railStyle: RailStyleType;\n private _trackStyle: TrackStyleType;\n private _handlerStyle: HandlerStyleType;\n\n // 控件属性\n private _controllerVisible: boolean;\n private _start: ControllerType;\n private _pause: ControllerType;\n private _forward: ControllerType;\n private _backward: ControllerType;\n\n // 布局属性\n private _size: { width: number; height: number };\n private _orient: OrientType;\n\n private _layoutInfo: {\n // 滚动条位置\n slider?: { x: number; y: number; size: number };\n\n // 控件位置\n start?: { x: number; y: number; size: number };\n pause?: { x: number; y: number; size: number };\n backward?: { x: number; y: number; size: number };\n forward?: { x: number; y: number; size: number };\n } = {};\n\n constructor(attributes: T, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, BasePlayer.defaultAttributes, attributes));\n // 先初始化属性, 再初始化Slider、Controller, 最后初始化事件.\n this._initAttributes();\n this._initLayoutInfo();\n this._initController();\n this._initSlider();\n }\n\n /**\n * 初始化属性\n */\n _initAttributes() {\n // 基本布局属性\n this._size = this.attribute.size;\n this._orient = this.attribute.orient;\n\n // Slider范围, 起点一定要从0开始\n this._data = this.attribute.data;\n this._minIndex = 0;\n this._maxIndex = this._data.length - 1;\n\n const { slider = {}, controller = {} as PlayerAttributes['controller'] } = this.attribute;\n // 轨道样式\n this._sliderVisible = slider.visible;\n this._railStyle = { ...slider.railStyle };\n this._trackStyle = { ...slider.trackStyle };\n this._handlerStyle = { ...slider.handlerStyle };\n\n // 控制器样式\n this._controllerVisible = controller.visible;\n this._start = { ...controller.start };\n this._pause = { ...controller.pause };\n this._forward = { ...controller.forward };\n this._backward = { ...controller.backward };\n }\n\n private _initLayoutInfo() {\n // 控制器\n const controllers = [this._start, this._backward, this._forward].sort((a, b) => a.order - b.order);\n // 在开始位置的控制器\n const startControllers = controllers.filter(d => d.position !== 'end');\n // 在结束位置的控制器\n const endControllers = controllers.filter(d => d.position === 'end');\n // 滑轨横切面长度\n const railSectionLength =\n (isHorizontal(this._orient) ? this._railStyle.height : this._railStyle.width) ?? RailDefaultSize[1];\n\n // 1. 计算所有组件自身占据的宽度 or 高度\n const controllerPx = controllers.reduce((len, controller) => {\n const size = controller.style.size;\n const maxSize = isNumber(size) ? size : max(size[0], size[1]);\n return len + controller.space + maxSize;\n }, 0);\n\n // 2. 计算slider的总占据像素\n const sliderPx = this._sliderVisible\n ? (isHorizontal(this._orient) ? this._size?.width : this._size?.height) - controllerPx\n : 0;\n\n // 3. 计算slider滑轨的总占据像素\n const railPx = sliderPx - this.attribute.slider.space;\n\n // 4. 计算起点控件坐标\n const startPx = startControllers.reduce((px, controller) => {\n const {\n key,\n space,\n style: { size }\n } = controller;\n const maxSize = isNumber(size) ? size : max(size[0], size[1]);\n this._layoutInfo[key] = {\n ...this._layoutInfo[key],\n size: maxSize,\n x: isHorizontal(this._orient) ? px + space : (this._size.width - maxSize) / 2,\n y: isHorizontal(this._orient) ? (this._size.height - maxSize) / 2 : px + space\n };\n return px + space + maxSize;\n }, 0);\n\n // 5. 计算slider的起点坐标\n this._layoutInfo.slider = {\n ...this._layoutInfo.slider,\n size: railPx,\n x: isHorizontal(this._orient)\n ? startPx + this.attribute.slider.space\n : (this._size.width - railSectionLength) / 2,\n y: isHorizontal(this._orient)\n ? (this._size.height - railSectionLength) / 2\n : startPx + this.attribute.slider.space\n };\n\n // 6. 计算终点控件坐标\n endControllers.reduce((px, controller) => {\n const {\n key,\n space,\n style: { size }\n } = controller;\n const maxSize = isNumber(size) ? size : max(size[0], size[1]);\n this._layoutInfo[key] = {\n ...this._layoutInfo[key],\n size: maxSize,\n x: isHorizontal(this._orient) ? px + space : (this._size.width - maxSize) / 2,\n y: isHorizontal(this._orient) ? (this._size.height - maxSize) / 2 : px + space\n };\n return px + space + maxSize;\n }, startPx + sliderPx);\n }\n\n /**\n * 初始化滑动条\n */\n private _updateSliderAttrs = () => {\n let handlerSize;\n if (isValidNumber(this._handlerStyle.size)) {\n handlerSize = this._handlerStyle.size;\n } else if (this._handlerStyle.size && this._handlerStyle.size.length) {\n handlerSize = max(this._handlerStyle.size[0], this._handlerStyle.size[1]);\n }\n\n const attrs: SliderAttributes = {\n visible: this._sliderVisible,\n // 重要参数\n min: this._minIndex,\n max: this._maxIndex,\n value: this.attribute.dataIndex ?? 0,\n railWidth: this._railStyle.width,\n railHeight: this._railStyle.height,\n railStyle: this._railStyle,\n trackStyle: this._trackStyle,\n handlerSize: isValidNumber(handlerSize) ? handlerSize : undefined,\n handlerStyle: this._handlerStyle,\n // 不重要, 但需要预设的参数\n dy: this.attribute.slider.dy,\n dx: this.attribute.slider.dx,\n slidable: true,\n range: false,\n handlerText: { visible: false },\n startText: { visible: false },\n endText: { visible: false },\n disableTriggerEvent: this.attribute.disableTriggerEvent\n };\n\n // 横向布局\n if (isHorizontal(this._orient)) {\n // 滑动条水平居中\n const railWidth = Math.max(0, this._layoutInfo.slider.size);\n const railHeight = this._railStyle.height ?? RailDefaultSize[1];\n\n // 属性修改\n attrs.layout = 'horizontal';\n attrs.railHeight = railHeight;\n attrs.railWidth = railWidth;\n attrs.x = this._layoutInfo.slider.x;\n attrs.y = this._layoutInfo.slider.y;\n }\n // 纵向布局\n else {\n // 滑动条垂直居中\n const railHeight = Math.max(0, this._layoutInfo.slider.size);\n const railWidth = this._railStyle.width ?? RailDefaultSize[1];\n\n // 属性修改\n attrs.layout = 'vertical';\n attrs.railWidth = railWidth;\n attrs.railHeight = railHeight;\n attrs.x = this._layoutInfo.slider.x;\n attrs.y = this._layoutInfo.slider.y;\n }\n return attrs;\n };\n\n private _initSlider = () => {\n const attrs = this._updateSliderAttrs();\n this._slider = new Slider(attrs);\n if (this._sliderVisible) {\n this.add(this._slider as unknown as INode);\n }\n };\n\n /**\n * 初始化控制器\n */\n private _updateControllerAttrs = () => {\n const attrs: ControllerAttributes = {\n start: this._start,\n pause: this._pause,\n forward: this._forward,\n backward: this._backward,\n disableTriggerEvent: this.attribute.disableTriggerEvent\n };\n // 横向布局\n if (isHorizontal(this._orient)) {\n attrs.layout = 'horizontal';\n attrs.start = {\n ...attrs.start,\n style: {\n ...attrs.start.style,\n x: this._layoutInfo.start.x,\n y: this._layoutInfo.start.y\n }\n };\n attrs.pause = {\n ...attrs.pause,\n // 暂停按钮, 复用开始按钮的布局\n style: {\n ...attrs.pause.style,\n x: this._layoutInfo.start.x,\n y: this._layoutInfo.start.y\n }\n };\n attrs.backward = {\n ...attrs.backward,\n style: {\n ...attrs.backward.style,\n x: this._layoutInfo.backward.x,\n y: this._layoutInfo.backward.y\n }\n };\n attrs.forward = {\n ...attrs.forward,\n style: {\n ...attrs.forward.style,\n x: this._layoutInfo.forward.x,\n y: this._layoutInfo.forward.y\n }\n };\n }\n // 纵向布局\n else {\n attrs.layout = 'vertical';\n attrs.start = {\n ...attrs.start,\n style: {\n ...attrs.start.style,\n x: this._layoutInfo.start.x,\n y: this._layoutInfo.start.y\n }\n };\n attrs.pause = {\n ...attrs.pause,\n style: {\n ...attrs.pause.style,\n // 暂停按钮, 复用开始按钮的布局\n x: this._layoutInfo.start.x,\n y: this._layoutInfo.start.y\n }\n };\n attrs.backward = {\n ...attrs.backward,\n style: {\n ...attrs.backward.style,\n x: this._layoutInfo.backward.x,\n y: this._layoutInfo.backward.y\n }\n };\n attrs.forward = {\n ...attrs.forward,\n style: {\n ...attrs.forward.style,\n x: this._layoutInfo.forward.x,\n y: this._layoutInfo.forward.y\n }\n };\n }\n return attrs;\n };\n\n private _initController = () => {\n const attrs = this._updateControllerAttrs();\n this._controller = new Controller(attrs);\n if (this._controllerVisible) {\n this.add(this._controller as unknown as INode);\n }\n };\n\n /**\n * 渲染\n */\n render() {\n this._initLayoutInfo();\n this.renderSlider();\n this.renderController();\n }\n\n /**\n * 更新滑动条\n */\n renderSlider() {\n const attrs = this._updateSliderAttrs();\n this._slider.setAttributes(attrs);\n }\n\n /**\n * 更新控制器\n */\n renderController() {\n const attrs = this._updateControllerAttrs();\n this._controller.setAttributes(attrs);\n }\n\n /**\n * 触发事件\n * @param eventType 事件类型\n * @param dataIndex 数据下标\n */\n dispatchCustomEvent(eventType: PlayerEventEnum, dataIndex: number) {\n this._dispatchEvent(eventType, {\n eventType,\n index: dataIndex,\n value: this._data[dataIndex]\n });\n }\n}\n","export enum PlayerEventEnum {\n change = 'change',\n play = 'play',\n pause = 'pause',\n backward = 'backward',\n forward = 'forward',\n end = 'end',\n\n /**\n * @deprecated please use `change` instead.\n */\n OnChange = 'change',\n /**\n * @deprecated please use `play` instead.\n */\n OnPlay = 'play',\n /**\n * @deprecated please use `pause` instead.\n */\n OnPause = 'pause',\n /**\n * @deprecated please use `backward` instead.\n */\n OnBackward = 'backward',\n /**\n * @deprecated please use `forward` instead.\n */\n OnForward = 'forward',\n /**\n * @deprecated please use `end` instead.\n */\n OnEnd = 'end'\n}\n","import { registerGroup, registerSymbol } from '@visactor/vrender-kits';\nimport { loadSliderComponent } from '../slider/register';\n\nfunction loadBasePlayer() {\n loadSliderComponent();\n registerGroup();\n registerSymbol();\n}\n\nexport function loadDiscretePlayerComponent() {\n loadBasePlayer();\n}\n\nexport function loadContinuousPlayerComponent() {\n loadBasePlayer();\n}\n","import { isNil, merge } from '@visactor/vutils';\nimport type { FederatedPointerEvent } from '@visactor/vrender-core';\nimport { vglobal } from '@visactor/vrender-core';\nimport { BasePlayer } from './base-player';\nimport type { DirectionType, DiscretePlayerAttributes, PlayerAttributes } from './type';\nimport { DirectionEnum, PlayerEventEnum } from './type';\nimport { forwardStep, isReachEnd, isReachStart } from './utils';\nimport { ControllerEventEnum } from './controller/constant';\nimport type { ComponentOptions } from '../interface';\nimport { loadDiscretePlayerComponent } from './register';\n\nexport interface IDiscretePlayer {\n play: () => void;\n pause: () => void;\n backward: () => void;\n forward: () => void;\n}\n\nloadDiscretePlayerComponent();\nexport class DiscretePlayer extends BasePlayer implements IDiscretePlayer {\n declare attribute: DiscretePlayerAttributes;\n\n private _dataIndex: number;\n private _activeIndex = -1;\n\n protected _alternate: boolean;\n protected _interval: number;\n\n private _isPlaying: boolean;\n private _direction: DirectionType;\n private _tickTime: number;\n private _rafId: number;\n private _isReachEnd = false;\n\n constructor(attributes: DiscretePlayerAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, attributes));\n\n this._initAttributes();\n this._initEvents();\n }\n\n setAttributes(params: Partial>, forceUpdateTag?: boolean): void {\n super.setAttributes(params, forceUpdateTag);\n\n this._initAttributes();\n }\n\n /**\n * 初始化属性\n */\n _initAttributes = () => {\n super._initAttributes();\n this._alternate = this.attribute.alternate ?? false;\n this._interval = this.attribute.interval ?? 1000;\n this._direction = this.attribute.direction ?? DirectionEnum.Default;\n\n this._dataIndex = isNil(this.attribute.dataIndex)\n ? this._direction === 'default'\n ? this._minIndex\n : this._maxIndex\n : this.attribute.dataIndex ?? 0;\n\n this._slider.setAttribute('value', this._dataIndex);\n };\n\n /**\n * 初始化事件\n */\n private _initEvents = () => {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n this._controller.addEventListener(ControllerEventEnum.OnPlay, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.play();\n });\n this._controller.addEventListener(ControllerEventEnum.OnPause, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.pause();\n });\n this._controller.addEventListener(ControllerEventEnum.OnForward, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.forward();\n });\n this._controller.addEventListener(ControllerEventEnum.OnBackward, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.backward();\n });\n\n this._slider.addEventListener('change', (e: FederatedPointerEvent & { detail: { value: number } }) => {\n const middle = Math.floor(e.detail.value) + 0.5;\n this._dataIndex = e.detail.value >= middle ? Math.ceil(e.detail.value) : Math.floor(e.detail.value);\n this._slider.setValue(this._dataIndex);\n this.dispatchCustomEvent(PlayerEventEnum.change);\n });\n };\n\n /**\n * 派遣事件\n */\n dispatchCustomEvent(event: PlayerEventEnum) {\n super.dispatchCustomEvent(event, this._dataIndex);\n }\n\n /**\n * 播放接口\n */\n play = () => {\n if (this._isPlaying) {\n return;\n }\n // 一条数据无需播放\n if (this._data.length === 1) {\n return;\n }\n // 图标切换\n this._controller.togglePause();\n // 播放状态更新\n this._isPlaying = true;\n // 若到达末尾, 则计算下一次播放的状态下标\n if (\n isReachEnd({\n dataIndex: this._dataIndex,\n maxIndex: this._maxIndex,\n minIndex: this._minIndex,\n direction: this._direction\n }) ||\n isReachStart({\n dataIndex: this._dataIndex,\n maxIndex: this._maxIndex,\n minIndex: this._minIndex,\n direction: this._direction\n })\n ) {\n // 根据方向恢复dataIndex\n if (this._direction === DirectionEnum.Default) {\n this._updateDataIndex(this._minIndex);\n } else {\n this._updateDataIndex(this._maxIndex);\n }\n }\n\n // 事件触发\n this.dispatchCustomEvent(PlayerEventEnum.play);\n // 重置结束状态\n this._isReachEnd = false;\n // 重置tick时间, 暂停后重新播放也会重新计时\n this._tickTime = Date.now();\n // 开启动画\n this._rafId = vglobal.getRequestAnimationFrame()(this._play.bind(this, true));\n };\n\n /**\n * 播放过程\n */\n private _play = (isFirstPlay: boolean) => {\n const now = Date.now();\n\n // 抵达终点, 延迟一个interval触发end\n if (this._isReachEnd && now - this._tickTime >= this._interval) {\n this._isReachEnd = false;\n this._playEnd();\n return;\n }\n // 未达终点\n\n // 第一个播放帧, 立即执行\n if (isFirstPlay && this._activeIndex !== this._dataIndex) {\n this.dispatchCustomEvent(PlayerEventEnum.change);\n this._activeIndex = this._dataIndex;\n }\n // 中间播放帧, 每一个interval执行一次\n else if (now - this._tickTime >= this._interval) {\n this._tickTime = now;\n this._updateDataIndex(forwardStep(this._direction, this._dataIndex, this._minIndex, this._maxIndex));\n this._activeIndex = this._dataIndex;\n this.dispatchCustomEvent(PlayerEventEnum.change);\n }\n\n // 终止条件\n if (\n (this._direction === 'default' && this._dataIndex >= this._maxIndex) ||\n (this._direction === 'reverse' && this._dataIndex <= this._minIndex)\n ) {\n this._isReachEnd = true;\n }\n\n this._rafId = vglobal.getRequestAnimationFrame()(this._play.bind(this, false));\n };\n\n /**\n * 更新数据\n */\n private _updateDataIndex = (dataIndex: number) => {\n this._dataIndex = dataIndex;\n this._slider.setValue(this._dataIndex);\n };\n\n /**\n * 播放结束\n */\n private _playEnd = () => {\n // 播放状态更新\n this._isPlaying = false;\n // 图标切换\n this._controller.togglePlay();\n // 取消播放动画\n vglobal.getCancelAnimationFrame()(this._rafId);\n // 重置ActiveIndex\n this._activeIndex = -1;\n // 播放结束时并且到达终点\n this.dispatchCustomEvent(PlayerEventEnum.end);\n };\n\n /**\n * 暂停接口\n */\n pause = () => {\n if (!this._isPlaying) {\n return;\n }\n this._isPlaying = false;\n vglobal.getCancelAnimationFrame()(this._rafId);\n this._controller.togglePlay();\n\n this.dispatchCustomEvent(PlayerEventEnum.pause);\n };\n\n /**\n * 后退接口\n */\n backward = () => {\n const index = Math.max(this._dataIndex - 1, this._minIndex);\n this._updateDataIndex(index);\n\n this.dispatchCustomEvent(PlayerEventEnum.change);\n this.dispatchCustomEvent(PlayerEventEnum.backward);\n };\n\n /**\n * 前进接口\n */\n forward = () => {\n const index = Math.min(this._dataIndex + 1, this._maxIndex);\n this._updateDataIndex(index);\n\n this.dispatchCustomEvent(PlayerEventEnum.change);\n this.dispatchCustomEvent(PlayerEventEnum.forward);\n };\n}\n","import type { FederatedPointerEvent } from '@visactor/vrender-core';\nimport { vglobal } from '@visactor/vrender-core';\nimport { BasePlayer } from './base-player';\nimport type { ContinuousPlayerAttributes } from './type';\nimport { PlayerEventEnum } from './type';\nimport { ControllerEventEnum } from './controller/constant';\nimport { loadContinuousPlayerComponent } from './register';\n\nexport interface IContinuousPlayer {\n play: () => Promise;\n pause: () => void;\n forward: () => void;\n backward: () => void;\n}\n\nloadContinuousPlayerComponent();\nexport class ContinuousPlayer extends BasePlayer implements IContinuousPlayer {\n declare attribute: ContinuousPlayerAttributes;\n\n private _dataIndex: number;\n private _activeIndex: number;\n\n protected _alternate: boolean;\n protected _interval: number;\n protected _totalDuration: number;\n\n private _isPlaying = false;\n private _startTime: number = Date.now();\n private _elapsed: number;\n private _rafId: number;\n\n constructor(attributes: ContinuousPlayerAttributes) {\n super(attributes);\n\n this._initAttributes();\n this._initEvents();\n }\n\n /**\n * 初始化属性\n */\n _initAttributes = () => {\n super._initAttributes();\n // 新增一个占位数据\n this._maxIndex = this._data.length;\n this._slider.setAttribute('max', this._maxIndex);\n\n this._isPlaying = false;\n this._elapsed = 0;\n this._interval = this.attribute.interval ?? 1000;\n this._dataIndex = this.attribute.dataIndex ?? this._minIndex;\n\n // 播放帧数(10条数据, 需要10个播放帧)\n const frames = this._data.length;\n\n // 若用户配置了总时长\n if (this.attribute.totalDuration && this._data.length) {\n this._totalDuration = this.attribute.totalDuration;\n // 避免除0\n this._interval = this._totalDuration / (frames ?? 1);\n }\n // 若未配置总时长, 则根据interval算出一个总时长, interval有默认值\n else {\n this._totalDuration = this._interval * frames;\n this._interval = this.attribute.interval;\n }\n };\n\n /**\n * 初始化事件\n */\n private _initEvents = () => {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n this._controller.addEventListener(ControllerEventEnum.OnPlay, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.play();\n });\n this._controller.addEventListener(ControllerEventEnum.OnPause, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.pause();\n });\n this._controller.addEventListener(ControllerEventEnum.OnForward, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.forward();\n });\n this._controller.addEventListener(ControllerEventEnum.OnBackward, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.backward();\n });\n\n this._slider.addEventListener('change', (e: FederatedPointerEvent) => {\n e.stopPropagation();\n /**\n * 根据value, 反推开始时间\n * 1. 计算进度\n * 2. 计算流逝时间\n * 3. 用现在的时间, 模拟一个开始时间\n */\n const value = (e.detail as unknown as { value: number; position: number })?.value;\n const progress = value / this._maxIndex;\n this._elapsed = progress * this._totalDuration;\n this._startTime = Date.now() - this._elapsed;\n\n this._dispatchChange(value);\n });\n };\n\n /**\n * 根据已流逝时间和总时长, 计算slider的值\n */\n private _getSliderValue = () => {\n const progress = this._elapsed / this._totalDuration;\n return Math.min(progress * this._maxIndex, this._maxIndex);\n };\n\n /**\n * 根据流逝时间, 更新Slider的值\n */\n private _updateSlider = () => {\n const value = this._getSliderValue();\n this._dataIndex = Math.floor(value);\n this._slider.setValue(Math.min(value, this._maxIndex));\n this._dispatchChange(Math.floor(value));\n };\n\n /**\n * 根据Slider的值, 判断是否要触发Change事件.\n */\n private _dispatchChange = (value: number) => {\n const index = Math.floor(value);\n if (index !== this._activeIndex) {\n this._dataIndex = index;\n this._activeIndex = index;\n\n if (index !== this._maxIndex) {\n this.dispatchCustomEvent(PlayerEventEnum.change);\n }\n }\n };\n\n /**\n * 派遣事件\n * @param eventType 事件类型\n */\n dispatchCustomEvent(eventType: PlayerEventEnum) {\n super.dispatchCustomEvent(eventType, this._dataIndex);\n }\n\n /**\n * 播放接口\n */\n play = async () => {\n if (this._isPlaying) {\n return;\n }\n // 切换按钮\n this._controller.togglePause();\n // 播放状态更新\n this._isPlaying = true;\n // 播放结束后再点击play, 此条件下生效.\n if (this._elapsed >= this._totalDuration) {\n this._elapsed = 0;\n }\n // 此时此刻减去已流逝的时间, 则为起点对应的时间戳.\n this._startTime = Date.now() - this._elapsed;\n // 事件\n this.dispatchCustomEvent(PlayerEventEnum.play);\n // 开始播放动画\n this._rafId = vglobal.getRequestAnimationFrame()(this._play.bind(this));\n };\n\n /**\n * 播放动画主要逻辑\n */\n private _play = () => {\n // 计算已流逝的时间, 但不需要保存\n this._elapsed = Date.now() - this._startTime;\n // 计算Slider的值.\n const value = this._getSliderValue();\n // 更新Slider的值.\n this._updateSlider();\n\n // 播放终止条件\n if (value >= this._maxIndex) {\n this._playEnd();\n return;\n }\n\n // 持续播放\n this._rafId = vglobal.getRequestAnimationFrame()(this._play.bind(this));\n };\n\n /**\n * 播放结束时触发\n */\n private _playEnd = () => {\n // 播放状态更新\n this._isPlaying = false;\n // 取消播放动画\n vglobal.getCancelAnimationFrame()(this._rafId);\n // 切换按钮\n this._controller.togglePlay();\n // 事件\n this.dispatchCustomEvent(PlayerEventEnum.end);\n };\n\n /**\n * 暂停接口\n */\n pause = () => {\n if (!this._isPlaying) {\n return;\n }\n this._isPlaying = false;\n // 计算已流逝的时间, 需要记录下来\n this._elapsed = Date.now() - this._startTime;\n vglobal.getCancelAnimationFrame()(this._rafId);\n this._controller.togglePlay();\n\n this.dispatchCustomEvent(PlayerEventEnum.pause);\n };\n\n /**\n * 前进接口\n */\n backward = () => {\n // 按下按钮的时间\n const now = Date.now();\n // 步长\n const interval = this._interval * 1;\n // 流逝时间 减去 interval\n const elapsed = this._elapsed - interval;\n\n // 若到达起点\n if (elapsed <= 0) {\n this._elapsed = 0;\n this._startTime = now;\n }\n // 若未到达起点\n else {\n this._elapsed = elapsed;\n this._startTime = this._startTime + this._interval;\n }\n // 更新slider\n this._updateSlider();\n\n this.dispatchCustomEvent(PlayerEventEnum.backward);\n };\n\n /**\n * 后退接口\n */\n forward = () => {\n // 按下按钮的时间\n const now = Date.now();\n // 步长\n const interval = this._interval * 1;\n // 流逝时间 加上 1个interval\n const elapsed = this._elapsed + interval;\n // 若超过终点\n if (elapsed >= this._totalDuration) {\n this._startTime = now - this._totalDuration;\n this._elapsed = this._totalDuration;\n }\n // 未超过终点\n else {\n this._startTime = this._startTime - interval;\n this._elapsed = elapsed;\n }\n // 更新slider\n this._updateSlider();\n\n this.dispatchCustomEvent(PlayerEventEnum.forward);\n };\n\n render() {\n super.render();\n }\n}\n","import type { ContinuousPlayerAttributes, DiscretePlayerAttributes, Datum } from '@visactor/vrender-components';\nimport type { IPlayer } from '../interface';\nimport type { IRectGraphicAttribute, ISymbolGraphicAttribute } from '@visactor/vrender-core';\nimport type { IRectMarkSpec, ISymbolMarkSpec } from '../../../typings';\nimport { transformToGraphic } from '../../../util/style';\nimport type { BaseGraphicAttributes } from '@visactor/vrender-components/es/core/type';\n\n/**\n * IRectMarkSpec => IRectGraphicAttribute\n */\nconst rectToAttribute = (markSpec: IRectMarkSpec): IRectGraphicAttribute => {\n const result: IRectGraphicAttribute = {\n ...(markSpec as unknown as IRectGraphicAttribute)\n };\n\n return transformToGraphic(result) as IRectGraphicAttribute;\n};\n\n/**\n * ISymbolMarkSpec => ISymbolGraphicAttribute\n */\nconst symbolToAttribute = (markSpec: ISymbolMarkSpec): ISymbolGraphicAttribute => {\n const result: ISymbolGraphicAttribute = {\n ...(markSpec as unknown as ISymbolGraphicAttribute)\n };\n\n return transformToGraphic(result) as ISymbolGraphicAttribute;\n};\n\nconst baseToAttribute = (spec: BaseGraphicAttributes) => {\n const result: BaseGraphicAttributes = {\n ...spec,\n style: {\n ...transformToGraphic(spec.style)\n }\n };\n return result;\n};\n\nconst transformToAttrs = (spec: IPlayer) => {\n // slider\n const trackStyle = rectToAttribute(spec?.slider?.trackStyle ?? {});\n const railStyle = rectToAttribute(spec?.slider?.railStyle ?? {});\n const handlerStyle = symbolToAttribute(spec?.slider?.handlerStyle ?? {});\n\n // controllers\n const start = baseToAttribute(spec?.controller?.start ?? {});\n const pause = baseToAttribute(spec?.controller?.pause ?? {});\n const backward = baseToAttribute(spec?.controller?.backward ?? {});\n const forward = baseToAttribute(spec?.controller?.forward ?? {});\n\n return {\n ...spec,\n direction: spec.direction,\n interval: spec.interval,\n visible: spec.visible,\n orient: spec.orient,\n slider: {\n ...spec.slider,\n trackStyle: trackStyle,\n railStyle: railStyle,\n handlerStyle: handlerStyle\n },\n controller: {\n ...spec.controller,\n start: start,\n pause: pause,\n backward: backward,\n forward: forward\n }\n };\n};\n\n/**\n * 连续型播放器spec转换为Attrs\n */\nexport const transformContinuousSpecToAttrs = (spec: IPlayer, data: Datum[]): ContinuousPlayerAttributes => ({\n ...(transformToAttrs(spec) as any),\n data,\n type: 'continuous'\n});\n\nexport const transformDiscreteSpecToAttrs = (spec: IPlayer, data: Datum[]): DiscretePlayerAttributes => ({\n ...(transformToAttrs(spec) as any),\n data,\n type: 'discrete'\n});\n","import type { IOrientType } from '../../../typings';\n\nexport const isVertical = (orient: IOrientType) => orient === 'left' || orient === 'right';\n\nexport const isHorizontal = (orient: IOrientType) => orient === 'top' || orient === 'bottom';\n","import { Factory } from './../../core/factory';\nimport type { INode, IGroup, IGraphic } from '@visactor/vrender-core';\nimport type { ContinuousPlayerAttributes, DiscretePlayerAttributes } from '@visactor/vrender-components';\n\n// eslint-disable-next-line no-duplicate-imports\nimport { DiscretePlayer, ContinuousPlayer, PlayerEventEnum } from '@visactor/vrender-components';\nimport type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isNumber, array, isEqual, isNil, isValidNumber } from '@visactor/vutils';\n\nimport type { IModelRenderOption, IModelSpecInfo } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { IComponentOption } from '../interface';\n\nimport type { DirectionType, IPlayer } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IComponent } from '../interface';\nimport type { IPoint, IOrientType, ILayoutRect, IChartSpec, IDataValues } from '../../typings';\n\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport { BaseComponent } from '../base/base-component';\nimport { transformContinuousSpecToAttrs, transformDiscreteSpecToAttrs } from './utils/transform';\nimport { isHorizontal, isVertical } from './utils/orient';\nimport { ChartEvent, LayoutLevel, LayoutZIndex } from '../../constant';\n\nexport class Player extends BaseComponent implements IComponent {\n layoutZIndex: number = LayoutZIndex.Player;\n layoutLevel: number = LayoutLevel.Player;\n\n static specKey = 'player';\n specKey: string = 'player';\n\n static type = ComponentTypeEnum.player;\n type = ComponentTypeEnum.player;\n protected _orient: IOrientType = 'bottom';\n private _specs: Partial[];\n\n private _playerComponent: DiscretePlayer | ContinuousPlayer;\n private _cacheAttrs: ContinuousPlayerAttributes | DiscretePlayerAttributes;\n\n private _direction: DirectionType;\n private _alternate: boolean;\n private _dx: number;\n private _dy: number;\n private _width: number;\n private _height: number;\n private _position: 'start' | 'middle' | 'end';\n\n get orient() {\n return this._orient;\n }\n\n set layoutOrient(v: IOrientType) {\n this._orient = v;\n }\n\n static getSpecInfo(chartSpec: any): Maybe {\n const playerSpec = chartSpec[this.specKey];\n if (isNil(playerSpec) || playerSpec.visible === false) {\n return null;\n }\n return [\n {\n spec: playerSpec,\n specPath: [this.specKey],\n type: ComponentTypeEnum.player\n }\n ];\n }\n\n /**\n * 设置Attr\n */\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this._orient = this._spec.orient ?? 'bottom';\n this._specs = this._spec.specs ?? [];\n this._direction = this._spec.direction ?? 'default';\n this._alternate = this._spec.alternate ?? false;\n this._dx = this._spec.dx ?? 0;\n this._dy = this._spec.dy ?? 0;\n this._position = this._spec.position ?? 'middle';\n }\n\n /**\n * 计算组件位置(布局的左上角起点)\n * @param pos\n */\n afterSetLayoutStartPoint(pos: IPoint) {\n super.afterSetLayoutStartPoint(pos);\n if (isValidNumber(pos.x)) {\n const offsetX = isVertical(this._orient) ? pos.x + this._sliderExceededSize() / 2 : pos.x;\n this._playerComponent && this._playerComponent.setAttribute('x', offsetX);\n }\n if (isValidNumber(pos.y)) {\n const offsetY = isHorizontal(this._orient) ? pos.y + this._sliderExceededSize() / 2 : pos.y;\n this._playerComponent && this._playerComponent.setAttribute('y', offsetY);\n }\n }\n\n /**\n * 计算组件占用的bound box\n * @param rect\n * @returns\n */\n getBoundsInRect(rect: ILayoutRect, fullSpace: ILayoutRect) {\n this._width = this._computeWidth(rect);\n this._height = this._computeHeight(rect);\n this._dx = this._computeDx(fullSpace);\n this._dy = this._computeDy(fullSpace);\n\n const bounds = this._computeLayoutRect(rect, this._width, this._height);\n\n this._createOrUpdatePlayerComponent();\n\n return bounds;\n }\n\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n onRender(ctx: IModelRenderOption): void {\n // do nothing\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._playerComponent] as unknown as IGroup[];\n }\n\n /**\n * 播放器属性\n */\n private _getPlayerAttrs = () => {\n const type = this._spec.type;\n const layoutAttrs = {\n size: {\n width: this._width,\n height: this._height\n },\n dx: this._spec.dx ?? 0 + this._dx,\n dy: this._spec.dy ?? 0 + this._dy\n };\n // 离散类型Attrs\n if (type === 'discrete') {\n return {\n ...transformDiscreteSpecToAttrs(this._spec, this._specs),\n ...layoutAttrs,\n disableTriggerEvent: this._option.disableTriggerEvent\n };\n }\n // 连续类型Attrs\n return {\n ...transformContinuousSpecToAttrs(this._spec, this._specs),\n ...layoutAttrs,\n disableTriggerEvent: this._option.disableTriggerEvent\n };\n };\n\n /**\n * 创建或更新播放器组件\n */\n private _createOrUpdatePlayerComponent = () => {\n const attrs = { ...this._getPlayerAttrs() };\n const container = this.getContainer();\n if (this._playerComponent) {\n if (!isEqual(attrs, this._cacheAttrs)) {\n this._cacheAttrs = attrs;\n this._playerComponent.setAttributes(attrs);\n // FIXME: player 组件没有重写 setAttributes 方法,因此不能正常更新样式。以下两句模拟执行了 setAttributes 方法,但是应在 vrender-component 的后续版本中实现 setAttributes 方法\n this._playerComponent._initAttributes();\n this._playerComponent.render();\n }\n } else {\n if (attrs.type === 'discrete') {\n this._playerComponent = new DiscretePlayer(attrs);\n } else {\n this._playerComponent = new ContinuousPlayer(attrs);\n }\n\n this._cacheAttrs = attrs;\n this._playerComponent.name = `player`;\n\n container.add(this._playerComponent as unknown as INode);\n\n this._initEvent();\n }\n };\n\n /**\n * 计算起点\n */\n private _computeLayoutRect(rect: ILayoutRect, width: number, height: number) {\n switch (this._orient) {\n case 'top': {\n return { x1: 0, y1: 0, x2: width, y2: height };\n }\n case 'right': {\n return { x1: rect.width - width, y1: 0, x2: rect.width, y2: rect.height };\n }\n case 'left': {\n return { x1: 0, y1: 0, x2: width, y2: height };\n }\n case 'bottom':\n default: {\n return { x1: 0, y1: rect.height - height, x2: rect.width, y2: rect.height };\n }\n }\n }\n\n /**\n * 计算组件宽度\n */\n private _computeWidth(rect: ILayoutRect) {\n // 若设置的是数值则直接返回\n if (isNumber(this._spec.width)) {\n return Math.min(rect.width, Number(this._spec.width));\n }\n\n if (isVertical(this._orient)) {\n return this._maxSize();\n }\n return rect.width;\n }\n\n /**\n * 计算组件高度\n */\n private _computeHeight(rect: ILayoutRect) {\n // 若设置的是数值则直接返回\n if (isNumber(this._spec.height)) {\n this._height = this._spec.height;\n return Math.min(rect.height, Number(this._spec.height));\n }\n\n if (isHorizontal(this._orient)) {\n return this._maxSize();\n }\n return rect.height;\n }\n\n /**\n * 计算x方向的偏移, 用于实现对齐\n */\n private _computeDx(rect: ILayoutRect) {\n // 垂直时, x不偏移\n if (isVertical(this._orient)) {\n return 0;\n }\n\n // start\n if (this._position === 'start') {\n return 0;\n }\n // middle\n else if (this._position === 'middle') {\n return (rect.width - this._width) / 2;\n }\n // end\n return rect.width - this._width;\n }\n\n /**\n * 计算y方向的偏移, 用于实现对齐\n */\n private _computeDy(rect: ILayoutRect) {\n // 水平时, y不偏移\n if (isHorizontal(this._orient)) {\n return 0;\n }\n\n // start\n if (this._position === 'start') {\n return 0;\n }\n // middle\n else if (this._position === 'middle') {\n return (rect.height - this._height) / 2;\n }\n\n // end\n return rect.height - this._height;\n }\n\n /**\n * 播放器宽度取计算子组件中最高的一个\n */\n private _maxSize = () => {\n return Math.max(\n ...array(this._spec.controller.start?.style?.size),\n ...array(this._spec.controller.pause?.style?.size),\n ...array(this._spec.controller.backward?.style?.size),\n ...array(this._spec.controller.forward?.style?.size),\n (isVertical(this._orient) ? this._spec.slider.railStyle.width : this._spec.slider.railStyle.height) ?? 10\n );\n };\n\n /**\n * 滑动条超过按钮的高度\n */\n private _sliderExceededSize = () => {\n const sliderHeight =\n (isVertical(this._orient) ? this._spec.slider.railStyle.width : this._spec.slider.railStyle.height) ?? 10;\n const controllersHeight = Math.max(\n ...array(this._spec.controller.start?.style?.size),\n ...array(this._spec.controller.pause?.style?.size),\n ...array(this._spec.controller.backward?.style?.size),\n ...array(this._spec.controller.forward?.style?.size)\n );\n if (sliderHeight >= controllersHeight) {\n return sliderHeight - controllersHeight;\n }\n return 0;\n };\n\n /**\n * 事件\n */\n private _initEvent = () => {\n if (this._option.disableTriggerEvent) {\n return;\n }\n // 自动播放\n this._option.globalInstance.on(ChartEvent.rendered, () => {\n if (this._spec?.auto) {\n this._playerComponent.play();\n }\n });\n\n // 循环播放 与 交替方向\n this._playerComponent.addEventListener(PlayerEventEnum.OnEnd, () => {\n this.event.emit(ChartEvent.playerEnd, { model: this });\n\n // 交替方向, 仅离散轴支持\n if (this._alternate && this._spec.type === 'discrete') {\n this._direction = this._direction === 'default' ? 'reverse' : 'default';\n this._playerComponent.setAttributes({\n direction: this._direction,\n dataIndex: this._direction === 'reverse' ? this._specs.length - 2 : 1\n });\n }\n\n // 循环播放\n if (this._spec?.loop) {\n this._playerComponent.play();\n }\n });\n\n // 数据更新\n this._playerComponent.addEventListener(PlayerEventEnum.OnChange, (e: { detail: { index: number } }) => {\n // 更新data\n const { index } = e.detail;\n const spec = this._specs[index];\n (array(spec.data) as IDataValues[]).forEach(data => {\n this._option?.globalInstance?.updateData(data.id, data.values);\n });\n\n this.event.emit(ChartEvent.playerChange, {\n model: this,\n value: {\n spec: spec,\n index: index,\n specs: this._specs\n }\n });\n });\n\n // 后退\n this._playerComponent.addEventListener(PlayerEventEnum.OnBackward, (e: { detail: { index: number } }) => {\n const { index } = e.detail;\n const spec = this._specs[index];\n this.event.emit(ChartEvent.playerBackward, {\n model: this,\n value: {\n spec: spec,\n index: index,\n specs: this._specs\n }\n });\n });\n\n // 前进\n this._playerComponent.addEventListener(PlayerEventEnum.OnForward, (e: { detail: { index: number } }) => {\n const { index } = e.detail;\n const spec = this._specs[index];\n this.event.emit(ChartEvent.playerForward, {\n model: this,\n value: {\n spec: spec,\n index: index,\n specs: this._specs\n }\n });\n });\n\n // 播放\n this._playerComponent.addEventListener(PlayerEventEnum.OnPlay, (e: { detail: { index: number } }) => {\n const { index } = e.detail;\n const spec = this._specs[index];\n this.event.emit(ChartEvent.playerPlay, {\n model: this,\n value: {\n spec: spec,\n index: index,\n specs: this._specs\n }\n });\n });\n\n // 暂停\n this._playerComponent.addEventListener(PlayerEventEnum.OnPause, (e: { detail: { index: number } }) => {\n const { index } = e.detail;\n const spec = this._specs[index];\n this.event.emit(ChartEvent.playerPause, {\n model: this,\n value: {\n spec: spec,\n index: index,\n specs: this._specs\n }\n });\n });\n };\n}\n\nexport const registerPlayer = () => {\n Factory.registerComponent(Player.type, Player);\n};\n","import type { IBoundsLike } from '@visactor/vutils';\n\n/**\n * 防重叠逻辑参考 https://github.com/vega/vega/\n * Copyright (c) 2015-2023, University of Washington Interactive Data Lab\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n 3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nconst DIV = 5; // bit shift from x, y index to bit vector array index\nconst MOD = 31; // bit mask for index lookup within a bit vector\nconst SIZE = 32; // individual bit vector size\nconst RIGHT0 = new Uint32Array(SIZE + 1); // left-anchored bit vectors, full -> 0\nconst RIGHT1 = new Uint32Array(SIZE + 1); // right-anchored bit vectors, 0 -> full\n\nRIGHT1[0] = 0;\nRIGHT0[0] = ~RIGHT1[0];\nfor (let i = 1; i <= SIZE; ++i) {\n RIGHT1[i] = (RIGHT1[i - 1] << 1) | 1;\n RIGHT0[i] = ~RIGHT1[i];\n}\n\nexport function bitmap(w: number, h: number) {\n const array = new Uint32Array(~~((w * h + SIZE) / SIZE));\n\n function _set(index: number, mask: number) {\n array[index] |= mask;\n }\n\n function _clear(index: number, mask: number) {\n array[index] &= mask;\n }\n\n return {\n array: array,\n\n get: (x: number, y: number) => {\n const index = y * w + x;\n return array[index >>> DIV] & (1 << (index & MOD));\n },\n\n set: (x: number, y: number) => {\n const index = y * w + x;\n _set(index >>> DIV, 1 << (index & MOD));\n },\n\n clear: (x: number, y: number) => {\n const index = y * w + x;\n _clear(index >>> DIV, ~(1 << (index & MOD)));\n },\n /**\n * 给定范围内是否发生碰撞\n * @param 范围\n * @returns boolean\n */\n getRange: ({ x1, y1, x2, y2 }: IBoundsLike) => {\n if (x2 < 0 || y2 < 0 || x1 > w || y1 > h) {\n return true;\n }\n let r = y2;\n let start;\n let end;\n let indexStart;\n let indexEnd;\n for (; r >= y1; --r) {\n start = r * w + x1;\n end = r * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n if (array[indexStart] & RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]) {\n return true;\n }\n } else {\n if (array[indexStart] & RIGHT0[start & MOD]) {\n return true;\n }\n if (array[indexEnd] & RIGHT1[(end & MOD) + 1]) {\n return true;\n }\n for (let i = indexStart + 1; i < indexEnd; ++i) {\n if (array[i]) {\n return true;\n }\n }\n }\n }\n return false;\n },\n\n setRange: ({ x1, y1, x2, y2 }: IBoundsLike) => {\n if (x2 < 0 || y2 < 0 || x1 > w || y1 > h) {\n return;\n }\n let start;\n let end;\n let indexStart;\n let indexEnd;\n let i;\n for (; y1 <= y2; ++y1) {\n start = y1 * w + x1;\n end = y1 * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n _set(indexStart, RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]);\n } else {\n _set(indexStart, RIGHT0[start & MOD]);\n _set(indexEnd, RIGHT1[(end & MOD) + 1]);\n for (i = indexStart + 1; i < indexEnd; ++i) {\n _set(i, 0xffffffff);\n }\n }\n }\n },\n\n clearRange: ({ x1, y1, x2, y2 }: IBoundsLike) => {\n let start;\n let end;\n let indexStart;\n let indexEnd;\n let i;\n for (; y1 <= y2; ++y1) {\n start = y1 * w + x1;\n end = y1 * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n _clear(indexStart, RIGHT1[start & MOD] | RIGHT0[(end & MOD) + 1]);\n } else {\n _clear(indexStart, RIGHT1[start & MOD]);\n _clear(indexEnd, RIGHT0[(end & MOD) + 1]);\n for (i = indexStart + 1; i < indexEnd; ++i) {\n _clear(i, 0);\n }\n }\n }\n },\n\n outOfBounds: ({ x1, y1, x2, y2 }: IBoundsLike) => x1 < 0 || y1 < 0 || y2 >= h || x2 >= w,\n toImageData: (ctx: CanvasRenderingContext2D) => {\n const imageData = ctx.createImageData(w, h);\n const data = imageData.data;\n for (let y = 0; y < h; ++y) {\n for (let x = 0; x < w; ++x) {\n const index = y * w + x;\n const offset = 4 * index;\n const occupied = array[index >>> DIV] & (1 << (index & MOD));\n data[offset + 0] = occupied * 0xff;\n data[offset + 1] = occupied * 0xff;\n data[offset + 2] = occupied * 0xff;\n data[offset + 3] = 0x1f; // alpha\n }\n }\n return imageData;\n }\n };\n}\n\nexport type Bitmap = ReturnType;\n","import { IBoundsLike, clamp as clampRange } from '@visactor/vutils';\nimport { bitmap } from './bitmap';\n\n/**\n * 防重叠逻辑参考 https://github.com/vega/vega/\n * Copyright (c) 2015-2023, University of Washington Interactive Data Lab\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n 3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nexport function bitmapTool(width: number, height: number, padding = 0) {\n const ratio = Math.max(1, Math.sqrt((width * height) / 1e6));\n const w = ~~((width + 2 * padding + ratio) / ratio);\n const h = ~~((height + 2 * padding + ratio) / ratio);\n const scale = (_: number) => ~~((_ + padding) / ratio);\n\n scale.invert = (_: number) => _ * ratio - padding;\n scale.bitmap = () => bitmap(w, h);\n scale.ratio = ratio;\n scale.padding = padding;\n scale.width = width;\n scale.height = height;\n\n return scale;\n}\n\nexport function boundToRange($: BitmapTool, bound: IBoundsLike, clamp: boolean = false) {\n if (clamp) {\n const { x1, x2, y1, y2 } = bound;\n const _x1 = clampRange(x1, 0, $.width);\n const _x2 = clampRange(x2, 0, $.width);\n const _y1 = clampRange(y1, 0, $.height);\n const _y2 = clampRange(y2, 0, $.height);\n return {\n x1: $(_x1),\n x2: $(_x2),\n y1: $(_y1),\n y2: $(_y2)\n };\n }\n\n return {\n x1: $(bound.x1),\n x2: $(bound.x2),\n y1: $(bound.y1),\n y2: $(bound.y2)\n };\n}\n\nexport type BitmapTool = ReturnType;\n","import type { IColor } from '@visactor/vrender-core';\nimport { Color, hexToRgb } from '@visactor/vutils';\n\nconst defaultAlternativeColors: string[] = ['#ffffff', '#000000'];\n\n/**\n * 标签智能反色\n * @param foregroundColorOrigin\n * @param backgroundColorOrogin\n * @returns\n */\nexport function labelSmartInvert(\n foregroundColorOrigin: IColor | undefined,\n backgroundColorOrogin: IColor | undefined,\n textType?: string | undefined,\n contrastRatiosThreshold?: number,\n alternativeColors?: string | string[],\n mode?: string\n): IColor | undefined {\n if (typeof foregroundColorOrigin !== 'string' || typeof backgroundColorOrogin !== 'string') {\n return foregroundColorOrigin;\n }\n const foregroundColor = new Color(foregroundColorOrigin as string).toHex();\n const backgroundColor = new Color(backgroundColorOrogin as string).toHex();\n if (!contrastAccessibilityChecker(foregroundColor, backgroundColor, textType, contrastRatiosThreshold, mode)) {\n return improveContrastReverse(\n foregroundColor,\n backgroundColor,\n textType,\n contrastRatiosThreshold,\n alternativeColors,\n mode\n );\n }\n return foregroundColor;\n}\n\n/**\n * 提升对比度\n * 对于对比度不足阈值的情况,推荐备选颜色色板中的颜色提升对比\n * @param foregroundColor\n * @param backgroundColor\n * @returns\n */\nfunction improveContrastReverse(\n foregroundColor: IColor | undefined,\n backgroundColor: IColor | undefined,\n textType?: IColor | undefined,\n contrastRatiosThreshold?: number,\n alternativeColors?: string | string[],\n mode?: string\n) {\n const alternativeColorPalletes: string[] = [];\n if (alternativeColors) {\n if (alternativeColors instanceof Array) {\n alternativeColorPalletes.push(...alternativeColors);\n } else {\n alternativeColorPalletes.push(alternativeColors);\n }\n }\n alternativeColorPalletes.push(...defaultAlternativeColors);\n for (const alternativeColor of alternativeColorPalletes) {\n if (foregroundColor === alternativeColor) {\n continue;\n }\n if (contrastAccessibilityChecker(alternativeColor, backgroundColor, textType, contrastRatiosThreshold, mode)) {\n return alternativeColor;\n }\n }\n return undefined;\n}\n\n/**\n * 颜色对比度可行性检查 https://webaim.org/articles/contrast/\n * - WCAG 2.0 AA 级要求普通文本的对比度至少为 4.5:1,大文本的对比度至少为 3:1。(目前按照此标准)\n * - WCAG 2.1 要求图形和用户界面组件(例如表单输入边框)的对比度至少为 3:1。\n * - WCAG AAA 级要求普通文本的对比度至少为 7:1,大文本的对比度至少为 4.5:1。\n * @param foregroundColor\n * @param backgroundColor\n * @returns\n */\nexport function contrastAccessibilityChecker(\n foregroundColor: IColor | undefined,\n backgroundColor: IColor | undefined,\n textType?: IColor | undefined,\n contrastRatiosThreshold?: number,\n mode?: string\n): boolean {\n if (mode === 'lightness') {\n const backgroundColorLightness = Color.getColorBrightness(new Color(backgroundColor as string));\n const foregroundColorLightness = Color.getColorBrightness(new Color(foregroundColor as string));\n if (foregroundColorLightness < 0.5) {\n // 文字颜色为'#ffffff'\n if (backgroundColorLightness >= 0.5) {\n return true;\n }\n return false;\n }\n // 文字颜色为‘#000000'\n if (backgroundColorLightness < 0.5) {\n return true;\n }\n return false;\n }\n //Contrast ratios can range from 1 to 21\n if (contrastRatiosThreshold) {\n if (contrastRatios(foregroundColor, backgroundColor) > contrastRatiosThreshold) {\n return true;\n }\n return false;\n } else if (textType === 'largeText') {\n if (contrastRatios(foregroundColor, backgroundColor) > 3) {\n return true;\n }\n return false;\n }\n if (contrastRatios(foregroundColor, backgroundColor) > 4.5) {\n return true;\n }\n return false;\n}\n\n/**\n * 计算颜色对比度 https://webaim.org/articles/contrast/\n * Contrast ratios can range from 1 to 21 (commonly written 1:1 to 21:1).\n * (L1 + 0.05) / (L2 + 0.05), whereby:\n * L1 is the relative luminance of the lighter of the colors, and\n * L2 is the relative luminance of the darker of the colors.\n * @param foregroundColor\n * @param backgroundColor\n * @returns\n */\nfunction contrastRatios(foregroundColor: IColor | undefined, backgroundColor: IColor | undefined): number {\n const foregroundColorLuminance = getColorLuminance(foregroundColor as string);\n const backgroundColorLuminance = getColorLuminance(backgroundColor as string);\n const L1 = foregroundColorLuminance > backgroundColorLuminance ? foregroundColorLuminance : backgroundColorLuminance;\n const L2 = foregroundColorLuminance > backgroundColorLuminance ? backgroundColorLuminance : foregroundColorLuminance;\n const contrastRatios = (L1 + 0.05) / (L2 + 0.05);\n return contrastRatios;\n}\n\n/**\n * 计算相对亮度 https://webaim.org/articles/contrast/\n * the relative brightness of any point in a colorspace, normalized to 0 for darkest black and 1 for lightest white\n * Note 1: For the sRGB colorspace, the relative luminance of a color is defined as\n * L = 0.2126 * R + 0.7152 * G + 0.0722 * B where R, G and B are defined as:\n * if RsRGB <= 0.03928 then R = RsRGB/12.92 else R = ((RsRGB+0.055)/1.055) ^ 2.4\n * if GsRGB <= 0.03928 then G = GsRGB/12.92 else G = ((GsRGB+0.055)/1.055) ^ 2.4\n * if BsRGB <= 0.03928 then B = BsRGB/12.92 else B = ((BsRGB+0.055)/1.055) ^ 2.4\n * and RsRGB, GsRGB, and BsRGB are defined as:\n * RsRGB = R8bit/255\n * GsRGB = G8bit/255\n * BsRGB = B8bit/255\n * @param color\n * @returns\n */\nfunction getColorLuminance(color: string): number {\n const rgb8bit = hexToRgb(color);\n const RsRGB = rgb8bit[0] / 255;\n const GsRGB = rgb8bit[1] / 255;\n const BsRGB = rgb8bit[2] / 255;\n let R;\n let G;\n let B;\n if (RsRGB <= 0.03928) {\n R = RsRGB / 12.92;\n } else {\n R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n }\n if (GsRGB <= 0.03928) {\n G = GsRGB / 12.92;\n } else {\n G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n }\n if (BsRGB <= 0.03928) {\n B = BsRGB / 12.92;\n } else {\n B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n }\n const L = 0.2126 * R + 0.7152 * G + 0.0722 * B;\n return L;\n}\n\nexport function smartInvertStrategy(\n fillStrategy: string,\n baseColor: IColor,\n invertColor: IColor,\n similarColor: IColor\n) {\n let result;\n switch (fillStrategy) {\n case 'base':\n result = baseColor;\n break;\n case 'invertBase':\n result = invertColor;\n break;\n case 'similarBase':\n result = similarColor;\n default:\n break;\n }\n return result;\n}\n","/**\n * 将 hex 格式颜色转换为 rgb 格式\n * @param str hex 格式的颜色值\n * @returns rgb 格式\n */\nexport default function hexToRgb(str: string): [number, number, number] {\n let r = '';\n let g = '';\n let b = '';\n const strtIndex = str[0] === '#' ? 1 : 0;\n for (let i = strtIndex; i < str.length; i++) {\n if (str[i] === '#') {\n continue;\n }\n if (i < strtIndex + 2) {\n r += str[i];\n } else if (i < strtIndex + 4) {\n g += str[i];\n } else if (i < strtIndex + 6) {\n b += str[i];\n }\n }\n const ri = parseInt(r, 16);\n const gi = parseInt(g, 16);\n const bi = parseInt(b, 16);\n return [ri, gi, bi];\n}\n","import type { IText, Text } from '@visactor/vrender-core';\nimport type { IAABBBounds, IBoundsLike } from '@visactor/vutils';\nimport { isFunction, isValid } from '@visactor/vutils';\nimport type { PointLocationCfg } from '../../core/type';\nimport type { LabelBase } from '../base';\nimport type { BaseLabelAttrs, OverlapAttrs, Strategy } from '../type';\nimport type { Bitmap } from './bitmap';\nimport type { BitmapTool } from './scaler';\nimport { boundToRange } from './scaler';\n\n/**\n * 防重叠逻辑参考 https://github.com/vega/vega/\n * Copyright (c) 2015-2023, University of Washington Interactive Data Lab\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n 3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nexport function canPlace($: BitmapTool, bitmap: Bitmap, bound: IBoundsLike, checkBound = true, pad = 0) {\n let range = bound;\n if (pad > 0) {\n range = {\n x1: bound.x1 - pad,\n x2: bound.x2 + pad,\n y1: bound.y1 - pad,\n y2: bound.y2 + pad\n };\n }\n range = boundToRange($, range);\n\n const outOfBounds = checkBound && bitmap.outOfBounds(range);\n\n if (outOfBounds) {\n return false;\n }\n\n return !bitmap.getRange(range);\n}\n\n/**\n * 是否在图形内部\n * @param textBound\n * @param shapeBound\n * @returns\n */\nexport function canPlaceInside(textBound: IBoundsLike, shapeBound: IAABBBounds) {\n if (!textBound || !shapeBound) {\n return false;\n }\n return shapeBound.encloses(textBound);\n}\n\nexport function placeToCandidates(\n $: BitmapTool,\n bitmap: Bitmap,\n text: Text,\n candidates: PointLocationCfg[] = [],\n clampForce = true,\n pad = 0\n): PointLocationCfg | false {\n const validCandidates = candidates.filter(candidate => isValid(candidate));\n for (let i = 0; i < validCandidates.length; i++) {\n const tempText = text.clone();\n tempText.setAttributes(validCandidates[i]);\n tempText.update();\n\n if (canPlace($, bitmap, boundToRange($, tempText.AABBBounds), clampForce, pad)) {\n bitmap.setRange(boundToRange($, tempText.AABBBounds, true));\n return validCandidates[i];\n }\n }\n return false;\n}\n\nexport function place(\n $: BitmapTool,\n bitmap: Bitmap,\n s: Strategy,\n attrs: T,\n text: Text,\n bounds: IBoundsLike,\n labeling?: LabelBase['labeling']\n): PointLocationCfg | false {\n const clampForce = (attrs.overlap as OverlapAttrs)?.clampForce;\n const overlapPadding = (attrs.overlap as OverlapAttrs)?.overlapPadding;\n if (s.type === 'bound' || s.type === 'position') {\n if (isFunction(labeling)) {\n // TODO:这里可以 filter 掉初始位置,提升一部分性能\n const userPosition = isFunction(s.position) ? s.position(text.attribute) : s.position;\n const positions = (userPosition || defaultLabelPosition(attrs.type)) as string[];\n const candidates = positions.map(p => labeling(text.AABBBounds, bounds, p, attrs.offset) as PointLocationCfg);\n return placeToCandidates($, bitmap, text, candidates, clampForce, overlapPadding);\n }\n return false;\n }\n\n if (s.type === 'moveY') {\n const offset = s.offset ? (isFunction(s.offset) ? s.offset(text.attribute) : s.offset) : [];\n const candidates = offset.map(dy => {\n return { x: text.attribute.x as number, y: (text.attribute.y as number) + dy };\n });\n return placeToCandidates($, bitmap, text, candidates, clampForce, overlapPadding);\n }\n\n if (s.type === 'moveX') {\n const offset = s.offset ? (isFunction(s.offset) ? s.offset(text.attribute) : s.offset) : [];\n const candidates = offset.map(dx => {\n return { x: (text.attribute.x as number) + dx, y: text.attribute.y as number };\n });\n return placeToCandidates($, bitmap, text, candidates, clampForce, overlapPadding);\n }\n return false;\n}\n\nexport const DefaultPositions = [\n 'top',\n 'bottom',\n 'right',\n 'left',\n 'top-right',\n 'bottom-right',\n 'top-left',\n 'bottom-left'\n];\nexport const DefaultRectPositions = ['top', 'inside-top', 'inside'];\n\nexport function defaultLabelPosition(type?: string) {\n switch (type) {\n case 'rect':\n return DefaultRectPositions;\n default:\n return DefaultPositions;\n }\n}\n\nexport function clampText(text: IText, width: number, height: number) {\n const { x1, x2, y1, y2 } = text.AABBBounds;\n const minX = Math.min(x1, x2);\n const maxX = Math.max(x1, x2);\n\n const minY = Math.min(y1, y2);\n const maxY = Math.max(y1, y2);\n\n let dx = 0;\n let dy = 0;\n\n // x 方向\n if (minX < 0 && maxX - minX <= width) {\n dx = -minX;\n } else if (maxX > width && minX - (maxX - width) >= 0) {\n dx = width - maxX;\n }\n\n // y 方向\n if (minY < 0 && maxY - minY <= height) {\n dy = -minY;\n } else if (maxY > height && minY - (maxY - height) >= 0) {\n dy = height - maxY;\n }\n\n return { dx, dy };\n}\n","import type { IText, ITextGraphicAttribute, EasingType } from '@visactor/vrender-core';\nimport { IncreaseCount } from '@visactor/vrender-core';\nimport type { BaseLabelAttrs, ILabelAnimation, ILabelUpdateChannelAnimation } from '../type';\nimport { array, isArray, isEmpty, isValidNumber } from '@visactor/vutils';\n\nconst fadeIn = (textAttribute: ITextGraphicAttribute = {}) => {\n return {\n from: {\n opacity: 0,\n fillOpacity: 0,\n strokeOpacity: 0\n },\n to: {\n opacity: textAttribute.opacity ?? 1,\n fillOpacity: textAttribute.fillOpacity ?? 1,\n strokeOpacity: textAttribute.strokeOpacity ?? 1\n }\n };\n};\n\nconst fadeOut = (textAttribute: ITextGraphicAttribute = {}) => {\n return {\n from: {\n opacity: textAttribute.opacity ?? 1,\n fillOpacity: textAttribute.fillOpacity ?? 1,\n strokeOpacity: textAttribute.strokeOpacity ?? 1\n },\n to: {\n opacity: 0,\n fillOpacity: 0,\n strokeOpacity: 0\n }\n };\n};\n\nconst animationEffects = { fadeIn, fadeOut };\n\nexport function getAnimationAttributes(\n textAttribute: ITextGraphicAttribute,\n type: 'fadeIn' | 'fadeOut'\n): {\n from: any;\n to: any;\n} {\n return animationEffects[type]?.(textAttribute) ?? { from: {}, to: {} };\n}\n\nexport function updateAnimation(prev: IText, next: IText, animationConfig: BaseLabelAttrs['animationUpdate']) {\n if (!isArray(animationConfig)) {\n const { duration, easing, increaseEffect = true } = animationConfig;\n prev.animate().to(next.attribute, duration, easing);\n increaseEffect && playIncreaseCount(prev, next, duration, easing);\n return;\n }\n\n animationConfig.forEach((cfg, i) => {\n const { duration, easing, increaseEffect = true, channel } = cfg;\n const { from, to } = update(prev, next, channel, cfg.options);\n if (!isEmpty(to)) {\n prev.animate().to(to, duration, easing);\n }\n\n if ('text' in from && 'text' in to && increaseEffect) {\n playIncreaseCount(prev, next, duration, easing);\n }\n });\n}\n\nexport const update = (\n prev: IText,\n next: IText,\n channel?: string[],\n options?: ILabelUpdateChannelAnimation['options']\n) => {\n const from = Object.assign({}, prev.attribute);\n const to = Object.assign({}, next.attribute);\n array(options?.excludeChannels).forEach(key => {\n delete to[key];\n });\n Object.keys(to).forEach(key => {\n if (channel && !channel.includes(key)) {\n delete to[key];\n }\n });\n return { from, to };\n};\n\nexport function playIncreaseCount(prev: IText, next: IText, duration: number, easing: EasingType) {\n if (\n prev.attribute.text !== next.attribute.text &&\n isValidNumber(Number(prev.attribute.text) * Number(next.attribute.text))\n ) {\n prev\n .animate()\n .play(\n new IncreaseCount(\n { text: prev.attribute.text as string },\n { text: next.attribute.text as string },\n duration,\n easing\n )\n );\n }\n}\n\nexport const DefaultLabelAnimation: ILabelAnimation = {\n mode: 'same-time',\n duration: 300,\n easing: 'linear' as EasingType\n};\n","import type { IArea, ILine } from '@visactor/vrender-core';\nimport type { IPolarPoint, IPoint, Quadrant } from './type';\nimport type { IBoundsLike, IPointLike } from '@visactor/vutils';\nimport { radianToDegree, isValidNumber, isRectIntersect } from '@visactor/vutils';\n\n/**\n * 极坐标系 -> 直角坐标系\n * @param point\n * @returns\n */\nexport function polarToCartesian(point: IPolarPoint): IPoint {\n if (!point.radius) {\n return { x: 0, y: 0 };\n }\n return {\n x: Math.cos(point.angle) * point.radius,\n y: Math.sin(point.angle) * point.radius\n };\n}\n\n/**\n * 计算圆弧上的点坐标\n * @param x0 圆心 x 坐标\n * @param y0 圆心 y 坐标\n * @param radius 圆弧半径\n * @param radian 点所在弧度\n */\nexport function circlePoint(x0: number, y0: number, radius: number, radian: number): IPoint {\n const offset = polarToCartesian({\n radius,\n angle: radian\n });\n return {\n x: x0 + offset.x,\n y: y0 + offset.y\n };\n}\n\n/**\n * 根据角度计算象限\n * 计算角度所在象限\n * @param angle\n * @returns\n */\nexport function computeQuadrant(angle: number): Quadrant {\n angle = normalizeAngle(angle);\n if (angle > 0 && angle <= Math.PI / 2) {\n return 2;\n } else if (angle > Math.PI / 2 && angle <= Math.PI) {\n return 3;\n } else if (angle > Math.PI && angle <= (3 * Math.PI) / 2) {\n return 4;\n }\n return 1;\n}\n\n/**\n * 角度标准化处理\n * @param angle 弧度角\n */\nexport function normalizeAngle(angle: number): number {\n while (angle < 0) {\n angle += Math.PI * 2;\n }\n while (angle >= Math.PI * 2) {\n angle -= Math.PI * 2;\n }\n return angle;\n}\n\nexport function isQuadrantLeft(quadrant: Quadrant): boolean {\n return quadrant === 3 || quadrant === 4;\n}\n\nexport function isQuadrantRight(quadrant: Quadrant): boolean {\n return quadrant === 1 || quadrant === 2;\n}\n\n/**\n * 计算直线与圆交点\n * 直线方程:ax + by + c = 0\n * 圆方程:(x - x0)^2 + (y - y0)^2 = r^2\n */\nexport function lineCirclePoints(a: number, b: number, c: number, x0: number, y0: number, r: number): IPoint[] {\n if ((a === 0 && b === 0) || r <= 0) {\n return [];\n }\n if (a === 0) {\n const y1 = -c / b;\n const fy = (y1 - y0) ** 2;\n const fd = r ** 2 - fy;\n if (fd < 0) {\n return [];\n } else if (fd === 0) {\n return [{ x: x0, y: y1 }];\n }\n const x1 = Math.sqrt(fd) + x0;\n const x2 = -Math.sqrt(fd) + x0;\n return [\n { x: x1, y: y1 },\n { x: x2, y: y1 }\n ];\n } else if (b === 0) {\n const x1 = -c / a;\n const fx = (x1 - x0) ** 2;\n const fd = r ** 2 - fx;\n if (fd < 0) {\n return [];\n } else if (fd === 0) {\n return [{ x: x1, y: y0 }];\n }\n const y1 = Math.sqrt(fd) + y0;\n const y2 = -Math.sqrt(fd) + y0;\n return [\n { x: x1, y: y1 },\n { x: x1, y: y2 }\n ];\n }\n const fa = (b / a) ** 2 + 1;\n const fb = 2 * ((c / a + x0) * (b / a) - y0);\n const fc = (c / a + x0) ** 2 + y0 ** 2 - r ** 2;\n const fd = fb ** 2 - 4 * fa * fc;\n if (fd < 0) {\n return [];\n }\n const y1 = (-fb + Math.sqrt(fd)) / (2 * fa);\n const y2 = (-fb - Math.sqrt(fd)) / (2 * fa);\n const x1 = -(b * y1 + c) / a;\n const x2 = -(b * y2 + c) / a;\n if (fd === 0) {\n return [{ x: x1, y: y1 }];\n }\n return [\n { x: x1, y: y1 },\n { x: x2, y: y2 }\n ];\n}\n\n/**\n * 根据圆弧两点连接线长度计算弧度\n * @param radius 圆弧半径\n * @param length 连接线长度\n */\nexport function connectLineRadian(radius: number, length: number) {\n if (length > radius * 2) {\n return NaN;\n }\n return Math.asin(length / 2 / radius) * 2;\n}\n\nexport function checkBoundsOverlap(boundsA: IBoundsLike, boundsB: IBoundsLike): boolean {\n const { x1: ax1, y1: ay1, x2: ax2, y2: ay2 } = boundsA;\n const { x1: bx1, y1: by1, x2: bx2, y2: by2 } = boundsB;\n return !(\n (ax1 <= bx1 && ax2 <= bx1) ||\n (ax1 >= bx2 && ax2 >= bx2) ||\n (ay1 <= by1 && ay2 <= by1) ||\n (ay1 >= by2 && ay2 >= by2)\n );\n}\n\nexport const degrees = (angle?: number) => {\n if (!isValidNumber(angle)) {\n return null;\n }\n return radianToDegree(angle);\n};\n\nexport const labelingPoint = (textBounds: IBoundsLike, graphicBounds: IBoundsLike, position = 'top', offset = 0) => {\n if (!textBounds) {\n return;\n }\n\n const { x1, y1, x2, y2 } = textBounds;\n const width = Math.abs(x2 - x1);\n const height = Math.abs(y2 - y1);\n\n const anchorX = (graphicBounds.x1 + graphicBounds.x2) / 2;\n const anchorY = (graphicBounds.y1 + graphicBounds.y2) / 2;\n\n let sx = 0;\n let sy = 0;\n let offsetX = 0;\n let offsetY = 0;\n if (graphicBounds) {\n offsetX = Math.abs(graphicBounds.x1 - graphicBounds.x2) / 2;\n offsetY = Math.abs(graphicBounds.y1 - graphicBounds.y2) / 2;\n }\n\n const angle = {\n 'top-right': -235,\n 'top-left': 235,\n 'bottom-right': 45,\n 'bottom-left': -45\n };\n\n switch (position) {\n case 'top':\n sy = -1;\n break;\n case 'bottom':\n sy = 1;\n break;\n case 'left':\n sx = -1;\n break;\n case 'right':\n sx = 1;\n break;\n case 'bottom-left':\n case 'bottom-right':\n case 'top-left':\n case 'top-right':\n sx = Math.sin(angle[position] * (Math.PI / 180));\n sy = Math.cos(angle[position] * (Math.PI / 180));\n break;\n case 'center':\n sx = 0;\n sy = 0;\n break;\n }\n\n const x = anchorX + sx * (offset + offsetX) + Math.sign(sx) * (width / 2);\n const y = anchorY + sy * (offset + offsetY) + Math.sign(sy) * (height / 2);\n\n return { x, y };\n};\n\nexport const getPointsOfLineArea = (graphic: ILine | IArea): IPointLike[] => {\n if (!graphic || !graphic.attribute) {\n return [];\n }\n\n const { points, segments } = graphic.attribute;\n\n if (segments && segments.length) {\n const res: IPointLike[] = [];\n\n segments.forEach(seg => {\n const segPoints = seg.points;\n\n segPoints.forEach(point => {\n res.push(point);\n });\n });\n\n return res;\n }\n\n return points;\n};\n\nexport function labelingLineOrArea(\n textBounds: IBoundsLike,\n graphicBounds: IBoundsLike,\n position: string = 'end',\n offset = 0\n) {\n if (!textBounds || !graphicBounds) {\n return { x: Infinity, y: Infinity };\n }\n\n const { x1, x2 } = textBounds;\n const width = Math.abs(x2 - x1);\n\n const anchorX = graphicBounds.x1;\n const anchorY = graphicBounds.y1;\n\n let x = anchorX;\n const y = anchorY;\n\n if (position === 'end') {\n x = anchorX + width / 2 + offset;\n } else if (position === 'start') {\n x = anchorX - width / 2 - offset;\n }\n\n return { x, y };\n}\n\nexport function connectLineBetweenBounds(boundA: IBoundsLike, boundB: IBoundsLike) {\n if (!boundA || !boundB) {\n return;\n }\n\n if (isRectIntersect(boundA, boundB, true)) {\n return;\n }\n // Top left coordinates\n const x1 = Math.min(boundA.x1, boundA.x2);\n const y1 = Math.min(boundA.y1, boundA.y2);\n const x2 = Math.min(boundB.x1, boundB.x2);\n const y2 = Math.min(boundB.y1, boundB.y2);\n\n // Half widths and half heights\n const w1 = Math.abs(boundA.x2 - x1) / 2;\n const h1 = Math.abs(boundA.y2 - y1) / 2;\n const w2 = Math.abs(boundB.x2 - x2) / 2;\n const h2 = Math.abs(boundB.y2 - y2) / 2;\n\n // Center coordinates\n const cx1 = x1 + w1;\n const cy1 = y1 + h1;\n const cx2 = x2 + w2;\n const cy2 = y2 + h2;\n\n // Distance between centers\n const dx = cx2 - cx1;\n const dy = cy2 - cy1;\n\n const p1 = getIntersection(dx, dy, cx1, cy1, w1, h1);\n const p2 = getIntersection(-dx, -dy, cx2, cy2, w2, h2);\n\n return [p1, p2];\n}\n\nfunction getIntersection(dx: number, dy: number, cx: number, cy: number, w: number, h: number) {\n if (Math.abs(dy / dx) < h / w) {\n // Hit vertical edge of box1\n return { x: cx + (dx > 0 ? w : -w), y: cy + (dy * w) / Math.abs(dx) };\n }\n // Hit horizontal edge of box1\n return { x: cx + (dx * h) / Math.abs(dy), y: cy + (dy > 0 ? h : -h) };\n}\n","import { registerGroup, registerLine, registerRichtext, registerText } from '@visactor/vrender-kits';\n\nexport function loadLabelComponent() {\n registerGroup();\n registerText();\n registerRichtext();\n registerLine();\n}\n","/**\n * @description Label 基类\n */\nimport type {\n IGroup,\n Text,\n IGraphic,\n IText,\n FederatedPointerEvent,\n IColor,\n ILine,\n IArea,\n IRichTextGraphicAttribute,\n IRichText,\n IRichTextCharacter\n} from '@visactor/vrender-core';\nimport { graphicCreator, AttributeUpdateType, IContainPointMode } from '@visactor/vrender-core';\nimport type { IAABBBounds, IBoundsLike, IPointLike } from '@visactor/vutils';\nimport {\n isFunction,\n isEmpty,\n isValid,\n isString,\n merge,\n isRectIntersect,\n isNil,\n isArray,\n isObject\n} from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { PointLocationCfg } from '../core/type';\nimport { labelSmartInvert, contrastAccessibilityChecker, smartInvertStrategy } from '../util/label-smartInvert';\nimport { getMarksByName, getNoneGroupMarksByName, traverseGroup } from '../util';\nimport { StateValue } from '../constant';\nimport type { Bitmap } from './overlap';\nimport { bitmapTool, boundToRange, canPlace, clampText, place } from './overlap';\nimport type {\n BaseLabelAttrs,\n OverlapAttrs,\n ILabelAnimation,\n LabelItem,\n SmartInvertAttrs,\n ILabelEnterAnimation,\n ILabelExitAnimation,\n ILabelUpdateAnimation,\n LabelContent\n} from './type';\nimport { DefaultLabelAnimation, getAnimationAttributes, updateAnimation } from './animate/animate';\nimport { connectLineBetweenBounds, getPointsOfLineArea } from './util';\nimport type { ComponentOptions } from '../interface';\nimport { DEFAULT_HTML_TEXT_SPEC } from '../constant';\nimport { loadLabelComponent } from './register';\n\nloadLabelComponent();\nexport class LabelBase extends AbstractComponent {\n name = 'label';\n\n protected _baseMarks?: IGraphic[];\n\n protected _isCollectionBase: boolean;\n\n protected _bitmap?: Bitmap;\n\n protected _animationConfig?: {\n enter: ILabelEnterAnimation;\n exit: ILabelExitAnimation;\n update: ILabelUpdateAnimation;\n };\n\n static defaultAttributes: Partial = {\n textStyle: {\n fontSize: 12,\n // FIXME: we need a default color. Yet in current logic, textStyle will override fill from baseMark.\n // This need a new config option like `colorFull`\n // fill: '#000',\n textAlign: 'center',\n textBaseline: 'middle',\n boundsPadding: [-1, 0, -1, 0] // to ignore the textBound buf\n },\n offset: 0,\n pickable: false\n };\n\n setBitmap(bitmap: Bitmap) {\n this._bitmap = bitmap;\n }\n\n protected _bmpTool?: ReturnType;\n setBitmapTool(bmpTool: ReturnType) {\n this._bmpTool = bmpTool;\n }\n\n protected _graphicToText: Map;\n\n protected _idToGraphic: Map;\n\n protected _idToPoint: Map;\n\n onAfterLabelOverlap?: (bitmap: Bitmap) => void;\n\n private _lastHover: IGraphic;\n private _lastSelect: IGraphic;\n\n private _enableAnimation: boolean;\n\n constructor(attributes: BaseLabelAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, LabelBase.defaultAttributes, attributes));\n }\n\n /**\n * 计算 text 的最终位置属性x, y\n * @param textBounds\n * @param graphicBounds\n * @param position\n * @param offset\n * @returns\n */\n protected labeling(\n textBounds: IBoundsLike,\n graphicBounds: IBoundsLike,\n position?: BaseLabelAttrs['position'],\n offset?: number\n ): { x: number; y: number } | undefined {\n // 基类没有指定的图元类型,需要在 data 中指定位置,故无需进行 labeling\n return;\n }\n\n protected _createLabelLine(text: IText | IRichText, baseMark?: IGraphic): ILine | undefined {\n const points = connectLineBetweenBounds(text.AABBBounds, baseMark?.AABBBounds);\n if (points) {\n const line = graphicCreator.line({\n points\n });\n\n if (baseMark && baseMark.attribute.fill) {\n line.setAttribute('stroke', baseMark.attribute.fill);\n }\n\n if (this.attribute.line && !isEmpty(this.attribute.line.style)) {\n line.setAttributes(this.attribute.line.style);\n }\n this._setStatesOfLabelLine(line);\n return line;\n }\n }\n\n protected render() {\n this._prepare();\n if (isNil(this._idToGraphic) || (this._isCollectionBase && isNil(this._idToPoint))) {\n return;\n }\n\n const { overlap, smartInvert, dataFilter, customLayoutFunc, customOverlapFunc } = this.attribute;\n let data = this.attribute.data;\n\n if (isFunction(dataFilter)) {\n data = dataFilter(data);\n }\n\n let labels: (IText | IRichText)[];\n\n if (isFunction(customLayoutFunc)) {\n labels = customLayoutFunc(\n data,\n this.getRelatedGraphic.bind(this),\n this._isCollectionBase ? (d: LabelItem) => this._idToPoint.get(d.id) : null\n );\n } else {\n // 根据关联图元和配置的position计算标签坐标\n labels = this._layout(data);\n }\n\n if (isFunction(customOverlapFunc)) {\n labels = customOverlapFunc(\n labels as Text[],\n this.getRelatedGraphic.bind(this),\n this._isCollectionBase ? (d: LabelItem) => this._idToPoint.get(d.id) : null\n );\n } else {\n // 防重叠逻辑\n if (overlap !== false) {\n labels = this._overlapping(labels);\n }\n }\n\n if (labels && labels.length) {\n labels.forEach(label => {\n this._bindEvent(label);\n this._setStatesOfText(label);\n });\n }\n\n if (smartInvert !== false) {\n this._smartInvert(labels);\n }\n\n this._renderLabels(labels);\n }\n\n private _bindEvent(target: IGraphic) {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n if (!target) {\n return;\n }\n\n const { hover, select } = this.attribute;\n\n if (hover) {\n target.addEventListener('pointermove', this._onHover as EventListenerOrEventListenerObject);\n target.addEventListener('pointerout', this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n target.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _setStatesOfText(target: IGraphic) {\n if (!target) {\n return;\n }\n const state = this.attribute.state;\n\n if (!state || isEmpty(state)) {\n return;\n }\n\n target.states = state;\n }\n\n protected _setStatesOfLabelLine(target: IGraphic) {\n if (!target) {\n return;\n }\n const state = this.attribute.labelLineState;\n\n if (!state || isEmpty(state)) {\n return;\n }\n\n target.states = state;\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (target !== this._lastHover && !isEmpty(target.states)) {\n target.addState(StateValue.hover, true);\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (node !== target && !isEmpty(node.states)) {\n node.addState(StateValue.hoverReverse, true);\n }\n });\n this._lastHover = target;\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n if (this._lastHover) {\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (!isEmpty(node.states)) {\n node.removeState(StateValue.hoverReverse);\n node.removeState(StateValue.hover);\n }\n });\n this._lastHover = null;\n }\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (this._lastSelect === target && target.hasState('selected')) {\n // 取消选中\n this._lastSelect = null;\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (!isEmpty(node.states)) {\n node.removeState(StateValue.selectedReverse);\n node.removeState(StateValue.selected);\n }\n });\n return;\n }\n\n if (!isEmpty(target.states)) {\n target.addState(StateValue.selected, true);\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (node !== target && !isEmpty(node.states)) {\n node.addState(StateValue.selectedReverse, true);\n }\n });\n this._lastSelect = target;\n }\n };\n\n protected _createLabelText(attributes: LabelItem) {\n if (attributes.textType === 'rich') {\n attributes.textConfig = attributes.text as IRichTextCharacter[];\n attributes.width = attributes.width ?? 0;\n attributes.height = attributes.height ?? 0;\n const text = graphicCreator.richtext(attributes as any);\n return text;\n } else if (attributes.textType === 'html') {\n attributes.textConfig = [] as IRichTextCharacter[];\n attributes.html = {\n dom: attributes.text as string,\n ...DEFAULT_HTML_TEXT_SPEC,\n ...attributes\n };\n const text = graphicCreator.richtext(attributes as IRichTextGraphicAttribute);\n return text;\n }\n const text = graphicCreator.text(attributes);\n return text;\n }\n\n private _prepare() {\n const currentBaseMarks: IGraphic[] = [];\n let baseMarks;\n if (isFunction(this.attribute.getBaseMarks)) {\n baseMarks = this.attribute.getBaseMarks();\n } else {\n baseMarks = getMarksByName(this.getRootNode() as IGroup, this.attribute.baseMarkGroupName);\n }\n\n baseMarks.forEach(mark => {\n if ((mark as any).releaseStatus !== 'willRelease') {\n currentBaseMarks.push(mark);\n }\n });\n\n this._idToGraphic?.clear();\n this._idToPoint?.clear();\n this._baseMarks = currentBaseMarks;\n this._isCollectionBase = this.attribute.type === 'line-data';\n\n if (!currentBaseMarks || currentBaseMarks.length === 0) {\n return;\n }\n\n const { data } = this.attribute;\n\n if (!data || data.length === 0) {\n return;\n }\n if (!this._idToGraphic) {\n this._idToGraphic = new Map();\n }\n\n // generate id mapping before data filter\n if (this._isCollectionBase) {\n if (!this._idToPoint) {\n this._idToPoint = new Map();\n }\n let cur = 0;\n for (let i = 0; i < currentBaseMarks.length; i++) {\n const baseMark = currentBaseMarks[i];\n const points = getPointsOfLineArea(baseMark as ILine | IArea);\n\n if (points && points.length) {\n for (let j = 0; j < points.length; j++) {\n const textData = data[cur];\n if (textData && points[j]) {\n if (!isValid(textData.id)) {\n textData.id = `vrender-component-${this.name}-${cur}`;\n }\n this._idToPoint.set(textData.id, points[j]);\n this._idToGraphic.set(textData.id, baseMark);\n }\n\n cur++;\n }\n }\n }\n } else {\n for (let i = 0; i < currentBaseMarks.length; i++) {\n const textData = data[i];\n const baseMark = currentBaseMarks[i] as IGraphic;\n if (textData && baseMark) {\n if (!isValid(textData.id)) {\n textData.id = `vrender-component-${this.name}-${i}`;\n }\n this._idToGraphic.set(textData.id, baseMark);\n }\n }\n }\n\n if (this.attribute.animation !== false) {\n const animation = isObject(this.attribute.animation) ? this.attribute.animation : {};\n this._animationConfig = {\n enter: merge({}, DefaultLabelAnimation, animation, this.attribute.animationEnter ?? {}),\n exit: merge({}, DefaultLabelAnimation, animation, this.attribute.animationExit ?? {}),\n update: isArray(this.attribute.animationUpdate)\n ? this.attribute.animationUpdate\n : merge({}, DefaultLabelAnimation, animation, this.attribute.animationUpdate ?? {})\n };\n }\n }\n\n protected getRelatedGraphic(item: LabelItem) {\n return this._idToGraphic.get(item.id);\n }\n\n protected _layout(data: LabelItem[] = []): (IText | IRichText)[] {\n const { textStyle = {}, position, offset } = this.attribute;\n const labels = [];\n for (let i = 0; i < data.length; i++) {\n const textData = data[i];\n const baseMark = this.getRelatedGraphic(textData);\n if (!baseMark) {\n continue;\n }\n\n const labelAttribute = {\n fill: this._isCollectionBase\n ? isArray(baseMark.attribute.stroke)\n ? baseMark.attribute.stroke.find(entry => !!entry && entry !== true)\n : baseMark.attribute.stroke\n : baseMark.attribute.fill,\n ...textStyle,\n ...textData\n };\n const text = this._createLabelText(labelAttribute);\n const textBounds = this.getGraphicBounds(text);\n const actualPosition = isFunction(position) ? position(textData) : (position as string);\n\n const graphicBounds = this._isCollectionBase\n ? this.getGraphicBounds(null, this._idToPoint.get(textData.id), actualPosition)\n : this.getGraphicBounds(baseMark, { x: textData.x as number, y: textData.y as number }, actualPosition);\n\n const textLocation = this.labeling(textBounds, graphicBounds, actualPosition, offset);\n\n if (textLocation) {\n labelAttribute.x = textLocation.x;\n labelAttribute.y = textLocation.y;\n text.setAttributes(textLocation);\n }\n\n labels.push(text);\n }\n\n return labels;\n }\n\n protected _overlapping(labels: (IText | IRichText)[]) {\n if (labels.length === 0) {\n return [];\n }\n const option = (isObject(this.attribute.overlap) ? this.attribute.overlap : {}) as OverlapAttrs;\n const result: (IText | IRichText)[] = [];\n const baseMarkGroup = this.getBaseMarkGroup();\n\n const size = option.size ?? {\n width: baseMarkGroup?.AABBBounds.width() ?? 0,\n height: baseMarkGroup?.AABBBounds.height() ?? 0\n };\n\n if (size.width === 0 || size.height === 0) {\n return labels;\n }\n\n const {\n avoidBaseMark,\n strategy = [],\n hideOnHit = true,\n clampForce = true,\n avoidMarks = [],\n overlapPadding\n } = option;\n const bmpTool = this._bmpTool || bitmapTool(size.width, size.height);\n const bitmap = this._bitmap || bmpTool.bitmap();\n const checkBounds = strategy.some(s => s.type === 'bound');\n\n // 躲避关联的基础图元\n if (avoidBaseMark) {\n this._baseMarks?.forEach(mark => {\n mark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, mark.AABBBounds, true));\n });\n }\n\n // 躲避指定图元\n if (avoidMarks.length > 0) {\n avoidMarks.forEach(avoid => {\n if (isString(avoid)) {\n getNoneGroupMarksByName(this.getRootNode() as IGroup, avoid).forEach(avoidMark => {\n avoidMark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, avoidMark.AABBBounds, true));\n });\n } else if (avoid.AABBBounds) {\n bitmap.setRange(boundToRange(bmpTool, avoid.AABBBounds, true));\n }\n });\n }\n\n for (let i = 0; i < labels.length; i++) {\n if (labels[i].visible === false) {\n continue;\n }\n\n const text = labels[i] as IText | IRichText;\n const baseMark = this.getRelatedGraphic(text.attribute);\n text.update();\n if (!isRectIntersect(baseMark.AABBBounds, { x1: 0, x2: bmpTool.width, y1: 0, y2: bmpTool.height }, true)) {\n continue;\n }\n\n // 默认位置可以放置\n if (canPlace(bmpTool, bitmap, text.AABBBounds, clampForce, overlapPadding)) {\n // 如果配置了限制在图形内部,需要提前判断;\n if (!checkBounds) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n\n if (\n checkBounds &&\n baseMark &&\n baseMark.AABBBounds &&\n this._canPlaceInside(text.AABBBounds, baseMark.AABBBounds)\n ) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n }\n\n let hasPlace: ReturnType = false;\n // 发生碰撞,根据策略寻找可放置的位置\n for (let j = 0; j < strategy.length; j++) {\n hasPlace = place(\n bmpTool,\n bitmap,\n strategy[j],\n this.attribute,\n text as Text,\n this._isCollectionBase\n ? this.getGraphicBounds(null, this._idToPoint.get((labels[i].attribute as any).id))\n : this.getGraphicBounds(baseMark, labels[i].attribute),\n this.labeling\n );\n if (hasPlace !== false) {\n text.setAttributes({ x: hasPlace.x, y: hasPlace.y });\n result.push(text);\n break;\n }\n }\n\n // 尝试向内挤压\n if (!hasPlace && clampForce) {\n // 向内挤压不考虑 overlapPadding\n const { dx = 0, dy = 0 } = clampText(text as IText, bmpTool.width, bmpTool.height);\n if (dx === 0 && dy === 0) {\n if (canPlace(bmpTool, bitmap, text.AABBBounds)) {\n // xy方向偏移都为0,意味着不考虑 overlapPadding 时,实际上可以放得下\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n } else if (\n canPlace(\n bmpTool,\n bitmap,\n {\n x1: text.AABBBounds.x1 + dx,\n x2: text.AABBBounds.x2 + dx,\n y1: text.AABBBounds.y1 + dy,\n y2: text.AABBBounds.y2 + dy\n }\n // 向内 clamp 只处理超出的位移量,不叠加 overlapPadding\n )\n ) {\n text.setAttributes({ x: text.attribute.x + dx, y: text.attribute.y + dy });\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n }\n\n !hasPlace && !hideOnHit && result.push(text);\n }\n\n if (isFunction(this.onAfterLabelOverlap)) {\n this.onAfterLabelOverlap(bitmap);\n }\n\n return result;\n }\n\n protected getBaseMarkGroup() {\n const { baseMarkGroupName } = this.attribute as BaseLabelAttrs;\n if (!baseMarkGroupName) {\n return;\n }\n return (this.getRootNode() as IGroup).find(node => node.name === baseMarkGroupName, true) as IGroup;\n }\n\n protected getGraphicBounds(graphic?: IGraphic, point?: Partial, position?: string): IBoundsLike;\n protected getGraphicBounds(graphic?: IGraphic, point: Partial = {}): IBoundsLike {\n if (graphic) {\n if (graphic.attribute.visible !== false) {\n return graphic.AABBBounds;\n }\n const { x, y } = graphic.attribute;\n return { x1: x, x2: x, y1: y, y2: y } as IBoundsLike;\n }\n const { x, y } = point;\n return { x1: x, x2: x, y1: y, y2: y } as IBoundsLike;\n }\n\n protected _renderLabels(labels: (IText | IRichText)[]) {\n const disableAnimation = this._enableAnimation === false || this.attribute.animation === false;\n\n if (disableAnimation) {\n this._renderWithOutAnimation(labels);\n } else {\n this._renderWithAnimation(labels);\n }\n }\n\n protected _renderWithAnimation(labels: (IText | IRichText)[]) {\n const currentTextMap: Map = new Map();\n const prevTextMap: Map = this._graphicToText || new Map();\n const texts = [] as (IText | IRichText)[];\n const labelLines = [] as ILine[];\n const { visible: showLabelLine } = this.attribute.line ?? {};\n\n labels.forEach((text, index) => {\n const relatedGraphic = this.getRelatedGraphic(text.attribute);\n const textId = (text.attribute as LabelItem).id;\n const textKey = this._isCollectionBase ? textId : relatedGraphic;\n const state = prevTextMap?.get(textKey) ? 'update' : 'enter';\n let labelLine: ILine;\n if (showLabelLine) {\n labelLine = this._createLabelLine(text as IText, relatedGraphic);\n }\n // TODO: add animate\n if (state === 'enter') {\n texts.push(text);\n currentTextMap.set(textKey, labelLine ? { text, labelLine } : { text });\n if (relatedGraphic) {\n const { from, to } = getAnimationAttributes(text.attribute, 'fadeIn');\n this.add(text);\n\n if (labelLine) {\n labelLines.push(labelLine);\n this.add(labelLine);\n }\n\n this._syncStateWithRelatedGraphic(relatedGraphic);\n // enter的时长如果不是大于0,那么直接跳过动画\n this._animationConfig.enter.duration > 0 &&\n relatedGraphic.once('animate-bind', a => {\n // text和labelLine共用一个from\n text.setAttributes(from);\n labelLine && labelLine.setAttributes(from);\n const listener = this._afterRelatedGraphicAttributeUpdate(\n text,\n texts,\n labelLine,\n labelLines,\n index,\n relatedGraphic,\n to,\n this._animationConfig.enter\n );\n relatedGraphic.on('afterAttributeUpdate', listener);\n });\n }\n } else if (state === 'update') {\n const prevLabel = prevTextMap.get(textKey);\n prevTextMap.delete(textKey);\n currentTextMap.set(textKey, prevLabel);\n const prevText = prevLabel.text;\n const { duration, easing } = this._animationConfig.update;\n updateAnimation(prevText as Text, text as Text, this._animationConfig.update);\n if (prevLabel.labelLine && labelLine) {\n prevLabel.labelLine.animate().to(labelLine.attribute, duration, easing);\n }\n }\n });\n prevTextMap.forEach(label => {\n label.text\n ?.animate()\n .to(\n getAnimationAttributes(label.text.attribute, 'fadeOut').to,\n this._animationConfig.exit.duration,\n this._animationConfig.exit.easing\n )\n .onEnd(() => {\n this.removeChild(label.text);\n if (label.labelLine) {\n this.removeChild(label.labelLine);\n }\n });\n });\n\n this._graphicToText = currentTextMap;\n }\n\n protected _renderWithOutAnimation(labels: (IText | IRichText)[]) {\n const currentTextMap: Map = new Map();\n const prevTextMap: Map = this._graphicToText || new Map();\n const texts = [] as (IText | IRichText)[];\n const { visible: showLabelLine } = this.attribute.line ?? {};\n\n labels.forEach(text => {\n const relatedGraphic = this.getRelatedGraphic(text.attribute);\n const state = prevTextMap?.get(relatedGraphic) ? 'update' : 'enter';\n const textKey = this._isCollectionBase ? (text.attribute as LabelItem).id : relatedGraphic;\n let labelLine;\n if (showLabelLine) {\n labelLine = this._createLabelLine(text as IText, relatedGraphic);\n }\n\n if (state === 'enter') {\n texts.push(text);\n currentTextMap.set(textKey, labelLine ? { text, labelLine } : { text });\n this.add(text);\n if (labelLine) {\n this.add(labelLine);\n }\n this._syncStateWithRelatedGraphic(relatedGraphic);\n } else if (state === 'update') {\n const prevLabel = prevTextMap.get(textKey);\n prevTextMap.delete(textKey);\n currentTextMap.set(textKey, prevLabel);\n prevLabel.text.setAttributes(text.attribute as any);\n if (prevLabel.labelLine && labelLine) {\n prevLabel.labelLine.setAttributes(labelLine.attribute);\n }\n }\n });\n\n prevTextMap.forEach(label => {\n this.removeChild(label.text);\n if (label.labelLine) {\n this.removeChild(label.labelLine);\n }\n });\n\n this._graphicToText = currentTextMap;\n }\n\n protected _handleRelatedGraphicSetState = (e: any) => {\n if (\n e.detail?.type === AttributeUpdateType.STATE ||\n (e.detail?.type === AttributeUpdateType.ANIMATE_UPDATE && e.detail.animationState?.isFirstFrameOfStep)\n ) {\n const currentStates = e.target?.currentStates ?? [];\n const labels = this._isCollectionBase ? [...this._graphicToText.values()] : [this._graphicToText.get(e.target)];\n\n labels.forEach(label => {\n if (label) {\n if (label.text) {\n label.text.useStates(currentStates);\n }\n\n if (label.labelLine) {\n label.labelLine.useStates(currentStates);\n }\n }\n });\n }\n };\n\n protected _syncStateWithRelatedGraphic(relatedGraphic: IGraphic) {\n if (this.attribute.syncState) {\n relatedGraphic.on('afterAttributeUpdate', this._handleRelatedGraphicSetState);\n }\n }\n\n // 默认labelLine和text共用相同动画属性\n protected _afterRelatedGraphicAttributeUpdate(\n text: IText | IRichText,\n texts: (IText | IRichText)[],\n labelLine: ILine,\n labelLines: ILine[],\n index: number,\n relatedGraphic: IGraphic,\n to: any,\n { mode, duration, easing, delay }: ILabelAnimation\n ) {\n // TODO: 跟随动画\n const listener = (event: any) => {\n const { detail } = event;\n if (!detail) {\n return {};\n }\n const step = detail.animationState?.step;\n const isValidAnimateState =\n detail.type === AttributeUpdateType.ANIMATE_UPDATE &&\n step &&\n // 不是第一个wait\n !(step.type === 'wait' && step.prev?.type == null);\n\n if (!isValidAnimateState) {\n return {};\n }\n // const prevStep = step.prev;\n // if (prevStep && prevStep.type === 'wait' && prevStep.prev?.type == null) {\n // delay = delay ?? step.position;\n // }\n if (detail.type === AttributeUpdateType.ANIMATE_END) {\n text.setAttributes(to);\n labelLine && labelLine.setAttributes(to);\n return;\n }\n\n const onStart = () => {\n if (relatedGraphic) {\n relatedGraphic.onAnimateBind = undefined;\n relatedGraphic.removeEventListener('afterAttributeUpdate', listener);\n }\n };\n\n switch (mode) {\n case 'after':\n // 3. 当前关联图元的动画播放结束后\n if (detail.animationState.end) {\n text.animate({ onStart }).wait(delay).to(to, duration, easing);\n labelLine && labelLine.animate().wait(delay).to(to, duration, easing);\n }\n break;\n case 'after-all':\n // 2. 所有完成后才开始;\n if (index === texts.length - 1) {\n if (detail.animationState.end) {\n texts.forEach(t => {\n t.animate({ onStart }).wait(delay).to(to, duration, easing);\n });\n labelLines.forEach(t => {\n t.animate().wait(delay).to(to, duration, easing);\n });\n }\n }\n break;\n case 'same-time':\n default:\n if (this._isCollectionBase) {\n const point = this._idToPoint.get((text.attribute as LabelItem).id);\n if (\n point &&\n (!text.animates || !text.animates.has('label-animate')) &&\n relatedGraphic.containsPoint(point.x, point.y, IContainPointMode.LOCAL, this.stage?.pickerService)\n ) {\n text.animate({ onStart }).wait(delay).to(to, duration, easing);\n labelLine && labelLine.animate().wait(delay).to(to, duration, easing);\n }\n } else if (detail.animationState.isFirstFrameOfStep) {\n text.animate({ onStart }).wait(delay).to(to, duration, easing);\n labelLine && labelLine.animate().wait(delay).to(to, duration, easing);\n }\n\n break;\n }\n };\n return listener;\n }\n\n protected _smartInvert(labels: (IText | IRichText)[]) {\n const option = (isObject(this.attribute.smartInvert) ? this.attribute.smartInvert : {}) as SmartInvertAttrs;\n const { textType, contrastRatiosThreshold, alternativeColors, mode } = option;\n const fillStrategy = option.fillStrategy ?? 'invertBase';\n const strokeStrategy = option.strokeStrategy ?? 'base';\n const brightColor = option.brightColor ?? '#ffffff';\n const darkColor = option.darkColor ?? '#000000';\n const outsideEnable = option.outsideEnable ?? false;\n\n if (fillStrategy === 'null' && strokeStrategy === 'null') {\n return;\n }\n\n for (let i = 0; i < labels.length; i++) {\n const label = labels[i];\n if (!label) {\n continue;\n }\n\n const baseMark = this.getRelatedGraphic(label.attribute as LabelItem);\n\n /**\n * 增加smartInvert时fillStrategy和 strokeStrategy的四种策略:\n * base(baseMark色),\n * inverBase(执行智能反色),\n * similarBase(智能反色的补色),\n * null(不执行智能反色,保持fill设置的颜色)\n * */\n const backgroundColor = baseMark.attribute.fill as IColor;\n const foregroundColor = label.attribute.fill as IColor;\n const baseColor = backgroundColor;\n const invertColor = labelSmartInvert(\n foregroundColor,\n backgroundColor,\n textType,\n contrastRatiosThreshold,\n alternativeColors,\n mode\n );\n const similarColor = contrastAccessibilityChecker(invertColor, brightColor) ? brightColor : darkColor;\n\n if (outsideEnable) {\n const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n if (label.attribute.lineWidth === 0) {\n continue;\n }\n\n const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n } else {\n const isInside = this._canPlaceInside(label.AABBBounds, baseMark.AABBBounds);\n if (isInside) {\n const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n if (label.attribute.lineWidth === 0) {\n continue;\n }\n\n const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n } else {\n /** 当label无法设置stroke时,不进行反色计算(容易反色为白色与白色背景混合不可见) */\n if (label.attribute.lineWidth === 0) {\n continue;\n }\n\n /** 当label设置stroke时,保留stroke设置的颜色,根据stroke对fill做反色 */\n if (label.attribute.stroke) {\n label.setAttributes({\n fill: labelSmartInvert(\n label.attribute.fill as IColor,\n label.attribute.stroke as IColor,\n textType,\n contrastRatiosThreshold,\n alternativeColors,\n mode\n )\n });\n continue;\n }\n\n /** 当label未设置stroke,且可设置stroke时,正常计算 */\n const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n }\n }\n }\n }\n\n /**\n * 是否在图形内部\n * @param textBound\n * @param shapeBound\n * @returns\n */\n protected _canPlaceInside(textBound: IBoundsLike, shapeBound: IAABBBounds) {\n if (!textBound || !shapeBound) {\n return false;\n }\n return shapeBound.encloses(textBound);\n }\n\n setLocation(point: PointLocationCfg) {\n this.translateTo(point.x, point.y);\n }\n\n disableAnimation() {\n this._enableAnimation = false;\n }\n\n enableAnimation() {\n this._enableAnimation = true;\n }\n}\n","import type { IBoundsLike } from '@visactor/vutils';\nimport { merge } from '@visactor/vutils';\nimport type { RectLabelAttrs } from './type';\nimport { LabelBase } from './base';\nimport type { ComponentOptions } from '../interface';\n\nexport class RectLabel extends LabelBase {\n static tag = 'rect-label';\n\n static defaultAttributes: Partial = {\n textStyle: {\n fontSize: 12,\n fill: '#000',\n textAlign: 'center',\n textBaseline: 'middle',\n boundsPadding: [-1, 0, -1, 0] // to ignore the textBound buf\n },\n position: 'top',\n offset: 5,\n pickable: false\n };\n\n constructor(attributes: RectLabelAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, RectLabel.defaultAttributes, attributes));\n }\n\n protected labeling(textBounds: IBoundsLike, graphicBounds: IBoundsLike, position = 'top', offset = 0) {\n if (!textBounds || !graphicBounds) {\n return;\n }\n\n const { x1, y1, x2, y2 } = textBounds;\n const width = Math.abs(x2 - x1);\n const height = Math.abs(y2 - y1);\n\n const rectWidth = Math.abs(graphicBounds.x2 - graphicBounds.x1);\n const rectHeight = Math.abs(graphicBounds.y2 - graphicBounds.y1);\n let anchorX = (graphicBounds.x1 + graphicBounds.x2) / 2;\n let anchorY = (graphicBounds.y1 + graphicBounds.y2) / 2;\n\n let sx = 0;\n let sy = 0;\n\n switch (position) {\n case 'top':\n case 'inside-top':\n sy = -0.5;\n break;\n case 'bottom':\n case 'inside-bottom':\n sy = 0.5;\n break;\n case 'left':\n case 'inside-left':\n sx = -0.5;\n break;\n case 'right':\n case 'inside-right':\n sx = 0.5;\n break;\n case 'top-right':\n sx = 0.5;\n sy = -0.5;\n break;\n case 'top-left':\n sx = -0.5;\n sy = -0.5;\n break;\n case 'bottom-right':\n sx = 0.5;\n sy = 0.5;\n break;\n case 'bottom-left':\n sx = -0.5;\n sy = 0.5;\n }\n\n anchorX += sx * rectWidth;\n anchorY += sy * rectHeight;\n\n let vx = 0;\n let vy = 0;\n\n const isInside = position.includes('inside');\n\n if (position.includes('top')) {\n vy = isInside ? 1 : -1;\n } else if (position.includes('bottom')) {\n vy = isInside ? -1 : 1;\n } else if (position.includes('left')) {\n vx = isInside ? 1 : -1;\n } else if (position.includes('right')) {\n vx = isInside ? -1 : 1;\n }\n\n switch (position) {\n case 'top-right':\n case 'bottom-right':\n vx = -1;\n break;\n case 'top-left':\n case 'bottom-left':\n vx = 1;\n break;\n default:\n break;\n }\n\n const x = anchorX + vx * offset + (vx * width) / 2;\n const y = anchorY + vy * offset + (vy * height) / 2;\n\n return { x, y };\n }\n}\n","import type { IBoundsLike } from '@visactor/vutils';\nimport { merge } from '@visactor/vutils';\nimport type { SymbolLabelAttrs } from './type';\nimport { LabelBase } from './base';\nimport { labelingPoint } from './util';\nimport type { ComponentOptions } from '../interface';\n\nexport class SymbolLabel extends LabelBase {\n name = 'symbol-label';\n\n static defaultAttributes: Partial = {\n textStyle: {\n fontSize: 12,\n fill: '#000',\n textAlign: 'center',\n textBaseline: 'middle',\n boundsPadding: [-1, 0, -1, 0] // to ignore the textBound buf\n },\n position: 'top',\n offset: 5,\n pickable: false\n };\n\n constructor(attributes: SymbolLabelAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, SymbolLabel.defaultAttributes, attributes));\n }\n\n protected labeling(textBounds: IBoundsLike, graphicBounds: IBoundsLike, position = 'top', offset = 0) {\n return labelingPoint(textBounds, graphicBounds, position, offset);\n }\n}\n","import type { IAABBBounds, IBoundsLike } from '@visactor/vutils';\nimport { merge, isValidNumber, isNil, isLess, isGreater, isNumberClose as isClose } from '@visactor/vutils';\nimport { LabelBase } from './base';\nimport type { ArcLabelAttrs, IPoint, Quadrant, BaseLabelAttrs, LabelItem, IArcLabelLineSpec } from './type';\nimport {\n type IRichText,\n type IText,\n type IArcGraphicAttribute,\n type IGraphic,\n type ILine,\n graphicCreator\n} from '@visactor/vrender-core';\nimport {\n circlePoint,\n isQuadrantRight,\n isQuadrantLeft,\n lineCirclePoints,\n connectLineRadian,\n checkBoundsOverlap,\n computeQuadrant\n} from './util';\nimport type { ComponentOptions } from '../interface';\n\nexport class ArcInfo {\n key!: string;\n refDatum!: any;\n /**\n * 绘图区圆弧中点\n */\n center!: IPoint;\n /**\n * label起始区圆弧中点\n */\n outerCenter!: IPoint;\n labelSize!: { width: number; height: number };\n labelPosition!: IPoint;\n labelLimit: number;\n labelVisible: boolean;\n lastLabelY!: number;\n labelYRange!: [number, number];\n labelText!: string | string[];\n pointA: IPoint;\n pointB: IPoint;\n pointC: IPoint;\n labelLine: IArcLabelLineSpec;\n /**\n * 象限\n */\n quadrant: Quadrant;\n radian: number;\n middleAngle: number;\n innerRadius: number;\n outerRadius: number;\n /** 扇形圆心点坐标 */\n circleCenter: IPoint;\n k: number;\n angle: number;\n\n constructor(\n refDatum: any,\n center: IPoint,\n outerCenter: IPoint,\n quadrant: Quadrant,\n radian: number,\n middleAngle: number,\n innerRadius: number,\n outerRadius: number,\n circleCenter: IPoint\n ) {\n this.refDatum = refDatum;\n this.center = center;\n this.outerCenter = outerCenter;\n this.quadrant = quadrant;\n this.radian = radian;\n this.middleAngle = middleAngle;\n this.innerRadius = innerRadius;\n this.outerRadius = outerRadius;\n this.circleCenter = circleCenter;\n this.labelVisible = true;\n this.labelLimit = 0;\n }\n\n getLabelBounds(): IBoundsLike {\n if (!this.labelPosition || !this.labelSize) {\n return { x1: 0, x2: 0, y1: 0, y2: 0 };\n }\n return {\n x1: this.labelPosition.x - this.labelSize.width / 2,\n y1: this.labelPosition.y - this.labelSize.height / 2,\n x2: this.labelPosition.x + this.labelSize.width / 2,\n y2: this.labelPosition.y + this.labelSize.height / 2\n };\n }\n}\n\ntype PriorityArc = {\n arc: ArcInfo;\n /**\n * 在初始 arc 数组中的索引\n */\n originIndex: number;\n priorityIndex: number;\n};\n\nexport class ArcLabel extends LabelBase {\n name = 'arc-label';\n\n static defaultAttributes: Partial = {\n coverEnable: false,\n spaceWidth: 5,\n layoutArcGap: 6,\n textStyle: {\n visible: true,\n fontSize: 14,\n fontWeight: 'normal',\n fillOpacity: 1,\n textAlign: 'center',\n textBaseline: 'middle'\n },\n position: 'outside',\n offset: 0,\n line: {\n visible: true,\n line1MinLength: 20,\n line2MinLength: 10\n },\n layout: {\n align: 'arc',\n strategy: 'priority',\n tangentConstraint: true\n },\n pickable: false\n };\n\n private _ellipsisWidth: number = 0;\n\n private _arcLeft: Map = new Map();\n private _arcRight: Map = new Map();\n\n constructor(attributes: ArcLabelAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, ArcLabel.defaultAttributes, attributes));\n }\n\n protected _overlapping(labels: (IText | IRichText)[]) {\n return labels;\n }\n\n protected labeling(\n textBounds: IBoundsLike,\n graphicBounds: IBoundsLike,\n position = 'outside',\n offset = 0\n ): { x: number; y: number } | undefined {\n if (!textBounds || !graphicBounds) {\n return;\n }\n return { x: 0, y: 0 };\n }\n\n protected _layout(data: LabelItem[] = []) {\n const labels = super._layout(data);\n const textBoundsArray = labels.map(label => this.getGraphicBounds(label as any));\n const ellipsisLabelAttribute = {\n ...this.attribute.textStyle,\n text: '…'\n };\n const ellipsisText = this._createLabelText(ellipsisLabelAttribute);\n const ellipsisTextBounds = this.getGraphicBounds(ellipsisText);\n const ellipsisWidth = ellipsisTextBounds.x2 - ellipsisTextBounds.x1;\n\n const arcs: ArcInfo[] = this.layoutArcLabels(\n this.attribute.position,\n this.attribute,\n Array.from(this._idToGraphic.values()),\n data,\n textBoundsArray,\n ellipsisWidth\n );\n for (let i = 0; i < data.length; i++) {\n const textData = data[i];\n const basedArc = arcs.find(arc => arc.refDatum?.id === textData.id);\n if (basedArc) {\n const labelAttribute = {\n visible: basedArc.labelVisible,\n x: basedArc.labelPosition.x,\n y: basedArc.labelPosition.y,\n angle: basedArc.angle,\n maxLineWidth: basedArc.labelLimit,\n points:\n basedArc.pointA && basedArc.pointB && basedArc.pointC\n ? [basedArc.pointA, basedArc.pointB, basedArc.pointC]\n : undefined,\n line: basedArc.labelLine\n };\n labels[i].setAttributes(labelAttribute);\n }\n }\n return labels;\n }\n\n protected layoutArcLabels(\n position: BaseLabelAttrs['position'],\n attribute: any,\n currentMarks?: IGraphic[],\n data?: LabelItem[],\n textBoundsArray?: any,\n ellipsisWidth?: number\n ) {\n // setArcs : 根据 arc 设置 datum 中对应的标签数据\n this._arcLeft.clear();\n this._arcRight.clear();\n this._ellipsisWidth = ellipsisWidth;\n\n let maxRadius = 0;\n currentMarks.forEach(currentMarks => {\n if ((currentMarks.attribute as IArcGraphicAttribute).outerRadius > maxRadius) {\n maxRadius = (currentMarks.attribute as IArcGraphicAttribute).outerRadius;\n }\n });\n\n data.forEach((d, index) => {\n const currentMark = this._idToGraphic.get(d.id);\n const graphicAttribute = currentMark.attribute as IArcGraphicAttribute;\n const center = { x: graphicAttribute?.x ?? 0, y: graphicAttribute?.y ?? 0 };\n if (!isNil(data[index]) && !isNil(textBoundsArray[index])) {\n const item = data[index] ? data[index] : null;\n const textBounds = textBoundsArray[index] ? textBoundsArray[index] : { x1: 0, x2: 0, y1: 0, y2: 0 };\n\n const arcMiddleAngle = (graphicAttribute.startAngle + graphicAttribute.endAngle) / 2;\n const intervalAngle = graphicAttribute.endAngle - graphicAttribute.startAngle;\n const arcQuadrant = computeQuadrant(graphicAttribute.endAngle - intervalAngle / 2);\n\n const arcMiddle = circlePoint(center.x, center.y, graphicAttribute.outerRadius, arcMiddleAngle);\n const outerArcMiddle = circlePoint(\n center.x,\n center.y,\n maxRadius + attribute.line.line1MinLength,\n arcMiddleAngle\n );\n const arc = new ArcInfo(\n item,\n arcMiddle,\n outerArcMiddle,\n arcQuadrant,\n intervalAngle,\n arcMiddleAngle,\n graphicAttribute.innerRadius,\n graphicAttribute.outerRadius,\n center\n );\n\n arc.pointA = circlePoint(\n (center as IPoint).x,\n (center as IPoint).y,\n this.computeDatumRadius(center.x * 2, center.y * 2, graphicAttribute.outerRadius),\n arc.middleAngle\n );\n\n arc.labelSize = {\n width: textBounds.x2 - textBounds.x1,\n height: textBounds.y2 - textBounds.y1\n };\n\n if (isQuadrantRight(arc.quadrant)) {\n this._arcRight.set(arc.refDatum, arc);\n } else if (isQuadrantLeft(arc.quadrant)) {\n this._arcLeft.set(arc.refDatum, arc);\n }\n }\n });\n\n // layoutLabels : 执行内部/外部标签的布局计算\n const leftArcs = Array.from(this._arcLeft.values());\n const rightArcs = Array.from(this._arcRight.values());\n const arcs: ArcInfo[] = [];\n switch (position) {\n case 'inside':\n case 'inside-inner':\n case 'inside-outer':\n arcs.push(...this._layoutInsideLabels(rightArcs, attribute, currentMarks));\n arcs.push(...this._layoutInsideLabels(leftArcs, attribute, currentMarks));\n break;\n case 'outside':\n default:\n arcs.push(...this._layoutOutsideLabels(rightArcs, attribute, currentMarks));\n arcs.push(...this._layoutOutsideLabels(leftArcs, attribute, currentMarks));\n break;\n }\n return arcs;\n }\n\n /**\n * 布局内部标签\n */\n private _layoutInsideLabels(arcs: ArcInfo[], attribute: ArcLabelAttrs, currentMarks: any[]) {\n const labelConfig = attribute;\n const spaceWidth = labelConfig.spaceWidth as number;\n const position = labelConfig.position ?? 'inside';\n const offsetRadius = labelConfig.offsetRadius ?? -spaceWidth;\n\n arcs.forEach((arc: ArcInfo) => {\n const { labelSize, radian } = arc;\n const innerRadius = arc.innerRadius;\n const outerRadius = arc.outerRadius;\n const minRadian = connectLineRadian(outerRadius, labelSize.height);\n let limit;\n if (radian < minRadian) {\n limit = 0;\n } else {\n let minRadius;\n if (radian >= Math.PI) {\n minRadius = innerRadius;\n } else {\n minRadius = Math.max(innerRadius, labelSize.height / 2 / Math.tan(radian / 2));\n }\n limit = outerRadius - minRadius - spaceWidth;\n }\n // TODO: 对于不旋转的内部标签设置 limit 为 outerRadius\n if (labelConfig.rotate !== true) {\n limit = outerRadius - spaceWidth;\n }\n const text = this._getFormatLabelText(arc.refDatum, limit);\n arc.labelText = text;\n const labelWidth = Math.min(limit, arc.labelSize.width);\n const align = this._computeAlign(arc, attribute);\n let alignOffset = 0;\n if (position === 'inside') {\n alignOffset = align === 'left' ? labelWidth : align === 'right' ? 0 : labelWidth / 2;\n }\n let labelRadius;\n if (position === 'inside-inner') {\n labelRadius = innerRadius - offsetRadius + alignOffset;\n } else {\n labelRadius = outerRadius + offsetRadius - alignOffset;\n }\n arc.labelPosition = circlePoint(arc.circleCenter.x, arc.circleCenter.y, labelRadius, arc.middleAngle);\n arc.labelLimit = labelWidth;\n if (!isGreater(labelWidth, 0)) {\n arc.labelVisible = false;\n }\n\n arc.angle = attribute.textStyle?.angle ?? arc.middleAngle;\n let offsetAngle = labelConfig.offsetAngle ?? 0;\n if (['inside-inner', 'inside-outer'].includes(position as string)) {\n offsetAngle += Math.PI / 2;\n }\n arc.angle += offsetAngle;\n });\n return arcs;\n }\n\n /**\n * 布局外部标签\n */\n private _layoutOutsideLabels(arcs: ArcInfo[], attribute: ArcLabelAttrs, currentMarks: any[]) {\n const center = { x: currentMarks[0].attribute.x ?? 0, y: currentMarks[0].attribute.y ?? 0 };\n const height = center.y * 2;\n const line2MinLength = attribute.line.line2MinLength as number;\n const labelLayout = attribute.layout;\n const spaceWidth = attribute.spaceWidth as number;\n\n arcs.forEach(arc => {\n const direction = isQuadrantLeft(arc.quadrant) ? -1 : 1;\n arc.labelPosition = {\n x: arc.outerCenter.x + direction * (arc.labelSize.width / 2 + line2MinLength + spaceWidth),\n y: arc.outerCenter.y\n };\n });\n arcs.sort((a, b) => {\n return a.labelPosition.y - b.labelPosition.y;\n });\n\n if (attribute.coverEnable !== false || labelLayout.strategy === 'none') {\n for (const arc of arcs) {\n const { labelPosition, labelSize } = arc;\n arc.labelLimit = labelSize.width;\n arc.pointB = isQuadrantLeft(arc.quadrant)\n ? {\n x: labelPosition.x + labelSize.width / 2 + line2MinLength + spaceWidth,\n y: labelPosition.y\n }\n : {\n x: labelPosition.x - labelSize.width / 2 - line2MinLength - spaceWidth,\n y: labelPosition.y\n };\n this._computeX(arc, attribute, currentMarks);\n }\n if (attribute.coverEnable === false && labelLayout.strategy === 'none') {\n this._coverLabels(arcs);\n }\n } else {\n // 由于可能存在多行标签,这里仅仅估计一个最大标签数量用于避免冗余计算\n const maxLabels = height / ((attribute.textStyle?.fontSize as number) || 16);\n // 布局圆弧半径\n this._adjustY(arcs, maxLabels, attribute, currentMarks);\n\n const { minY, maxY } = arcs.reduce(\n (yInfo, arc) => {\n const { y1, y2 } = arc.getLabelBounds();\n yInfo.minY = Math.max(0, Math.min(y1, yInfo.minY));\n yInfo.maxY = Math.min(height, Math.max(y2, yInfo.maxY));\n return yInfo;\n },\n { minY: Infinity, maxY: -Infinity }\n );\n const halfY = Math.max(Math.abs(height / 2 - minY), Math.abs(maxY - height / 2));\n // pointB 与 label 的 y 值相同,但是 label 的 x 值依赖于 pointB 的 x 值\n const r = this._computeLayoutRadius(halfY, attribute, currentMarks);\n for (const arc of arcs) {\n this._computePointB(arc, r, attribute, currentMarks);\n this._computeX(arc, attribute, currentMarks);\n }\n }\n const width = center.x * 2;\n arcs.forEach(arc => {\n if (\n arc.labelVisible &&\n (isLess(arc.pointB.x, line2MinLength + spaceWidth) ||\n isGreater(arc.pointB.x, width - line2MinLength - spaceWidth))\n ) {\n arc.labelVisible = false;\n }\n arc.angle = attribute.textStyle?.angle ?? 0;\n if (attribute.offsetAngle) {\n arc.angle += attribute.offsetAngle;\n }\n\n arc.labelLine = {\n ...attribute.line\n };\n });\n\n return arcs;\n }\n\n /**\n * 计算 pointC 以及 label limit 与 position\n */\n private _computeX(arc: ArcInfo, attribute: any, currentMarks: any[]) {\n const center = arc.circleCenter;\n const plotLayout = { width: center.x * 2, height: center.y * 2 };\n\n let maxRadius = 0;\n currentMarks.forEach((currentMark: IGraphic) => {\n if ((currentMark.attribute as IArcGraphicAttribute).outerRadius > maxRadius) {\n maxRadius = (currentMark.attribute as IArcGraphicAttribute).outerRadius;\n }\n });\n\n const radiusRatio = this.computeLayoutOuterRadius(maxRadius, attribute.width, attribute.height);\n\n const line1MinLength = attribute.line.line1MinLength as number;\n const line2MinLength = attribute.line.line2MinLength as number;\n const labelLayoutAlign = attribute.layout?.align;\n const spaceWidth = attribute.spaceWidth as number;\n\n const { labelPosition, quadrant, pointB } = arc;\n if (!isValidNumber(pointB.x * pointB.y)) {\n arc.pointC = { x: NaN, y: NaN };\n labelPosition.x = NaN;\n arc.labelLimit = 0;\n }\n const radius = this.computeRadius(radiusRatio, attribute.width, attribute.height);\n const flag = isQuadrantLeft(quadrant) ? -1 : 1;\n let cx: number = 0;\n const restWidth = flag > 0 ? plotLayout.width - pointB.x : pointB.x;\n let limit = restWidth - line2MinLength - spaceWidth;\n if (labelLayoutAlign === 'labelLine') {\n cx = (radius + line1MinLength + line2MinLength) * flag + (center as IPoint).x;\n limit = (flag > 0 ? plotLayout.width - cx : cx) - spaceWidth;\n }\n const text = this._getFormatLabelText(arc.refDatum, limit);\n arc.labelText = text;\n let labelWidth = Math.min(limit, arc.labelSize.width);\n switch (labelLayoutAlign) {\n case 'labelLine':\n break;\n case 'edge':\n cx = flag > 0 ? plotLayout.width - labelWidth - spaceWidth : labelWidth + spaceWidth;\n break;\n case 'arc':\n default:\n cx = pointB.x + flag * line2MinLength;\n break;\n }\n labelWidth = Math.max(this._ellipsisWidth, labelWidth);\n arc.labelLimit = labelWidth;\n arc.pointC = { x: cx, y: labelPosition.y };\n\n const targetCenterOffset = 0.5 * (arc.labelLimit < arc.labelSize.width ? arc.labelLimit : arc.labelSize.width);\n if (labelLayoutAlign === 'edge') {\n // edge 模式下的多行文本对齐方向与其他模式相反\n const alignOffset = 0;\n // 贴近画布边缘的布局结果可能会由于 cx 的小数 pixel 导致被部分裁剪,因此额外做计算\n labelPosition.x = (flag > 0 ? plotLayout.width + alignOffset : alignOffset) - flag * targetCenterOffset;\n } else {\n const alignOffset = 0;\n labelPosition.x = cx + alignOffset + flag * (spaceWidth + targetCenterOffset);\n }\n }\n\n private _computeAlign(arc: ArcInfo, attribute: any) {\n const labelConfig = attribute;\n // 暂时兼容两种配置方式\n const textAlign = labelConfig.textStyle?.textAlign ?? labelConfig.textStyle?.align;\n const layoutAlign = labelConfig.layout?.textAlign ?? labelConfig.layout?.align;\n if (labelConfig.position !== 'inside') {\n if (isNil(textAlign) || textAlign === 'auto') {\n // edge 模式下沿着画布对齐,与 labelLine & edge 模式相反\n if (layoutAlign === 'edge') {\n return isQuadrantLeft(arc.quadrant) ? 'left' : 'right';\n }\n return isQuadrantLeft(arc.quadrant) ? 'right' : 'left';\n }\n return textAlign;\n }\n return isNil(textAlign) || textAlign === 'auto' ? 'center' : textAlign;\n }\n\n private _getFormatLabelText(value: any, limit?: number) {\n return value?.text ?? '';\n }\n\n /**\n * 调整标签位置的 Y 值\n */\n private _adjustY(arcs: ArcInfo[], maxLabels: number, attribute: any, currentMarks: any[]) {\n const center = { x: currentMarks[0].attribute.x ?? 0, y: currentMarks[0].attribute.y ?? 0 };\n const plotRect = { width: center.x * 2, height: center.y * 2 };\n const labelLayout = attribute.layout;\n if (labelLayout.strategy === 'vertical') {\n // vertical 策略类似 echarts 方案,没有切线限制策略,没有优先级,执行整体调整没有标签数量限制\n let lastY = 0;\n let delta;\n const len = arcs.length;\n if (len <= 0) {\n return;\n }\n // 偏移 y 值以避免遮挡\n for (let i = 0; i < len; i++) {\n const { y1 } = arcs[i].getLabelBounds();\n delta = y1 - lastY;\n if (isLess(delta, 0)) {\n const index = this._shiftY(arcs, i, len - 1, -delta);\n this._shiftY(arcs, index, 0, delta / 2);\n }\n const { y2 } = arcs[i].getLabelBounds();\n lastY = y2;\n }\n // 将超出上界的标签下移\n const { y1: firstY1 } = arcs[0].getLabelBounds();\n delta = firstY1 - 0;\n if (isLess(delta, 0)) {\n this._shiftY(arcs, 0, len - 1, -delta);\n }\n for (let i = arcs.length - 1; i >= 0; i--) {\n if (arcs[i].getLabelBounds().y2 > plotRect.height) {\n arcs[i].labelVisible = false;\n } else {\n break;\n }\n }\n } else if (labelLayout.strategy !== 'none') {\n const priorityArcs: PriorityArc[] = arcs.map((arc, i) => {\n return {\n arc,\n originIndex: i,\n priorityIndex: 0\n };\n });\n priorityArcs.sort((a, b) => {\n return b.arc.radian - a.arc.radian;\n });\n priorityArcs.forEach((priorityArc, i) => {\n priorityArc.priorityIndex = i;\n // 首先隐藏所有标签\n priorityArc.arc.labelVisible = false;\n });\n\n let topLabelIndex = Infinity;\n let bottomLabelIndex = -Infinity;\n // 按照优先级依次布局标签\n for (let i = 0; i < maxLabels && i < arcs.length; i++) {\n this._storeY(arcs);\n const arc = priorityArcs[i].arc;\n this._computeYRange(arc, attribute, currentMarks);\n arc.labelVisible = true;\n const curY = arc.labelPosition.y;\n // 寻找标签在布局前垂直方向上的上下邻居,也就是饼图上的邻居关系\n const { lastIndex, nextIndex } = this._findNeighborIndex(arcs, priorityArcs[i]);\n const lastArc = arcs[lastIndex];\n const nextArc = arcs[nextIndex];\n if (lastIndex === -1 && nextIndex !== -1) {\n const nextY = nextArc.labelPosition.y;\n if (curY > nextY) {\n arc.labelPosition.y = nextY - nextArc.labelSize.height / 2 - arc.labelSize.height / 2;\n } else {\n this._twoWayShift(arcs, arc, nextArc, nextIndex);\n }\n } else if (lastIndex !== -1 && nextIndex === -1) {\n const lastY = lastArc.labelPosition.y;\n if (curY < lastY) {\n arc.labelPosition.y = lastY + lastArc.labelSize.height / 2 + arc.labelSize.height / 2;\n } else {\n this._twoWayShift(arcs, lastArc, arc, priorityArcs[i].originIndex);\n }\n } else if (lastIndex !== -1 && nextIndex !== -1) {\n const lastY = lastArc.labelPosition.y;\n const nextY = nextArc.labelPosition.y;\n if (curY > nextY) {\n arc.labelPosition.y = nextY - nextArc.labelSize.height / 2 - arc.labelSize.height / 2;\n this._twoWayShift(arcs, lastArc, arc, priorityArcs[i].originIndex);\n } else if (curY < lastY) {\n arc.labelPosition.y = lastY + lastArc.labelSize.height / 2 + arc.labelSize.height / 2;\n this._twoWayShift(arcs, arc, nextArc, nextIndex);\n } else {\n this._twoWayShift(arcs, lastArc, arc, priorityArcs[i].originIndex);\n this._twoWayShift(arcs, arc, nextArc, nextIndex);\n }\n }\n\n const nextTopIndex = Math.min(topLabelIndex, priorityArcs[i].originIndex);\n const nextBottomIndex = Math.max(bottomLabelIndex, priorityArcs[i].originIndex);\n let delta;\n // 将超出下界的标签上移\n delta = arcs[nextBottomIndex].getLabelBounds().y2 - plotRect.height;\n if (isGreater(delta, 0)) {\n this._shiftY(arcs, nextBottomIndex, 0, -delta);\n }\n // 将超出上界的标签下移\n delta = arcs[nextTopIndex].getLabelBounds().y1 - 0;\n if (isLess(delta, 0)) {\n this._shiftY(arcs, nextTopIndex, arcs.length - 1, -delta);\n }\n delta = arcs[nextBottomIndex].getLabelBounds().y2 - plotRect.height;\n // 当整体上下移一次之后仍然无法容纳所有标签,则当前标签应当舍去\n if (isGreater(delta, 0)) {\n arc.labelVisible = false;\n this._restoreY(arcs);\n break;\n } else if (labelLayout.tangentConstraint && !this._checkYRange(arcs)) {\n // 当标签由于 Y 方向调节范围过大而舍弃时不应当终止布局过程\n arc.labelVisible = false;\n this._restoreY(arcs);\n } else {\n topLabelIndex = nextTopIndex;\n bottomLabelIndex = nextBottomIndex;\n }\n }\n }\n }\n\n /**\n * 向某一方向调整局部标签的 Y 值\n */\n private _shiftY(arcs: ArcInfo[], start: number, end: number, delta: number) {\n const direction = start < end ? 1 : -1;\n let index = start;\n while (index !== -1) {\n arcs[index].labelPosition.y += delta;\n const nextIndex = this._findNextVisibleIndex(arcs, index, end, direction);\n if (nextIndex >= 0 && nextIndex < arcs.length) {\n const { y1: curY1, y2: curY2 } = arcs[index].getLabelBounds();\n const { y1: nextY1, y2: nextY2 } = arcs[nextIndex].getLabelBounds();\n if ((direction > 0 && curY2 < nextY1) || (direction < 0 && curY1 > nextY2)) {\n return index;\n }\n }\n index = nextIndex;\n }\n return end;\n }\n\n /**\n * 寻找下一个显示标签索引\n */\n private _findNextVisibleIndex(arcs: ArcInfo[], start: number, end: number, direction: number) {\n const diff = (end - start) * direction;\n for (let i = 1; i <= diff; i++) {\n const index = start + i * direction;\n if (arcs[index].labelVisible) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * 计算 pointB,其 y 值在 adjustY 中确定,也即是 label 的 y 值\n */\n private _computePointB(arc: ArcInfo, r: number, attribute: any, currentMarks: any[]) {\n const labelConfig = attribute;\n\n let maxRadius = 0;\n currentMarks.forEach((currentMark: IGraphic) => {\n if ((currentMark.attribute as IArcGraphicAttribute).outerRadius > maxRadius) {\n maxRadius = (currentMark.attribute as IArcGraphicAttribute).outerRadius;\n }\n });\n\n const radiusRatio = this.computeLayoutOuterRadius(maxRadius, attribute.width, attribute.height);\n const line1MinLength = labelConfig.line.line1MinLength as number;\n const labelLayout = labelConfig.layout;\n\n if (labelLayout.strategy === 'none') {\n // 不执行躲避策略或者不显示引导线时紧挨着圆弧布局\n arc.pointB = {\n x: arc.outerCenter.x,\n y: arc.outerCenter.y\n };\n } else {\n const center = arc.circleCenter;\n const radius = this.computeRadius(radiusRatio, attribute.width, attribute.height);\n const { labelPosition, quadrant } = arc;\n const outerR = Math.max(radius + line1MinLength, arc.outerRadius);\n const rd = r - outerR;\n // x 为 pointB.x 与圆心的差值\n const x = Math.sqrt(r ** 2 - Math.abs((center as IPoint).y - labelPosition.y) ** 2) - rd;\n if (isValidNumber(x)) {\n arc.pointB = {\n x: (center as IPoint).x + x * (isQuadrantLeft(quadrant) ? -1 : 1),\n y: labelPosition.y\n };\n } else {\n arc.pointB = { x: NaN, y: NaN };\n }\n }\n }\n\n /**\n * 存储当前所有显示标签的 Y 值\n */\n private _storeY(arcs: ArcInfo[]) {\n for (const arc of arcs) {\n if (arc.labelVisible) {\n arc.lastLabelY = arc.labelPosition.y;\n }\n }\n }\n\n /**\n * 计算圆弧切线所限制的标签 Y 值范围\n */\n private _computeYRange(arc: ArcInfo, attribute: any, currentMarks: any[]) {\n const center = arc.circleCenter;\n const plotRect = { width: center.x * 2, height: center.y * 2 };\n\n let maxRadius = 0;\n currentMarks.forEach((currentMark: IGraphic) => {\n if ((currentMark.attribute as IArcGraphicAttribute).outerRadius > maxRadius) {\n maxRadius = (currentMark.attribute as IArcGraphicAttribute).outerRadius;\n }\n });\n\n const radiusRatio = this.computeLayoutOuterRadius(maxRadius, attribute.width, attribute.height);\n const line1MinLength = attribute.line.line1MinLength as number;\n\n const { width, height } = plotRect;\n\n const radius = this.computeRadius(radiusRatio, attribute.width, attribute.height);\n // 出现 y 方向挤压过度必然是由于画布上下某一端被占满,此时半径是确定的\n const r = this._computeLayoutRadius(height / 2, attribute, currentMarks);\n // 所有坐标转化到以圆心为原点的坐标系计算\n // 在饼图上左右计算对称,可以全都转化到右侧计算\n const cx = Math.abs(arc.center.x - width / 2);\n const cy = arc.center.y - height / 2;\n let a;\n let b;\n let c;\n if (isClose(width / 2, cx)) {\n a = 0;\n b = 1;\n c = -cy;\n } else if (isClose(height / 2, cy)) {\n a = 1;\n b = 0;\n c = -cx;\n } else {\n // 斜截式转为一般式\n const k = -1 / (cy / cx);\n a = k;\n b = -1;\n c = cy - k * cx;\n }\n const points = lineCirclePoints(a, b, c, line1MinLength + radius - r, 0, r);\n // 由于饼图上切点在布局圆内部,交点必然有两个\n if (points.length < 2) {\n return;\n }\n let min;\n let max;\n if (points[0].x > points[1].x) {\n points.reverse();\n }\n if (points[0].x < 0) {\n if (isClose(points[0].y, points[1].y)) {\n if (\n (isGreater(arc.middleAngle, -Math.PI) && isLess(arc.middleAngle, 0)) ||\n (isGreater(arc.middleAngle, Math.PI) && isLess(arc.middleAngle, Math.PI * 2))\n ) {\n min = 0;\n max = points[1].y + height / 2;\n } else {\n min = points[1].y + height / 2;\n max = height;\n }\n } else if (points[0].y < points[1].y) {\n min = 0;\n max = points[1].y + height / 2;\n } else {\n min = points[1].y + height / 2;\n max = plotRect.height;\n }\n } else {\n min = Math.min(points[0].y, points[1].y) + height / 2;\n max = Math.max(points[0].y, points[1].y) + height / 2;\n }\n arc.labelYRange = [min, max];\n }\n\n /**\n * 计算标签布局圆弧半径,即 pointB 所落在的圆弧\n */\n private _computeLayoutRadius(halfYLength: number, attribute: any, currentMarks: any[]) {\n const labelConfig = attribute;\n const layoutArcGap = labelConfig.layoutArcGap as number;\n const line1MinLength = labelConfig.line.line1MinLength as number;\n\n let maxRadius = 0;\n currentMarks.forEach((currentMark: IGraphic) => {\n if ((currentMark.attribute as IArcGraphicAttribute).outerRadius > maxRadius) {\n maxRadius = (currentMark.attribute as IArcGraphicAttribute).outerRadius;\n }\n });\n\n const radiusRatio = this.computeLayoutOuterRadius(maxRadius, attribute.width, attribute.height);\n const radius = this.computeRadius(radiusRatio, attribute.width, attribute.height);\n const outerR = radius + line1MinLength;\n\n const a = outerR - layoutArcGap;\n\n return Math.max((a ** 2 + halfYLength ** 2) / (2 * a), outerR);\n }\n\n /**\n * 依据初始的标签排序,寻找某一标签上下最近的显示标签索引\n */\n private _findNeighborIndex(arcs: ArcInfo[], priorityArc: PriorityArc) {\n const index = priorityArc.originIndex;\n let lastIndex = -1;\n let nextIndex = -1;\n for (let i = index - 1; i >= 0; i--) {\n if (arcs[i].labelVisible) {\n lastIndex = i;\n break;\n }\n }\n for (let i = index + 1; i < arcs.length; i++) {\n if (arcs[i].labelVisible) {\n nextIndex = i;\n break;\n }\n }\n return {\n lastIndex,\n nextIndex\n };\n }\n\n /**\n * 执行给定标签 Y 值的 shiftDown 以及 shiftUp\n */\n private _twoWayShift(arcs: ArcInfo[], lastArc: ArcInfo, nextArc: ArcInfo, nextIndex: number) {\n const delta = nextArc.getLabelBounds().y1 - lastArc.getLabelBounds().y2;\n if (isLess(delta, 0)) {\n const i = this._shiftY(arcs, nextIndex, arcs.length - 1, -delta);\n this._shiftY(arcs, i, 0, delta / 2);\n }\n }\n\n /**\n * 恢复所有显示标签在之前存储的 Y 值\n */\n private _restoreY(arcs: ArcInfo[]) {\n for (const arc of arcs) {\n if (arc.labelVisible) {\n arc.labelPosition.y = arc.lastLabelY;\n }\n }\n }\n\n /**\n * 检查每个显示的标签的 Y 值是否在切线限制范围内\n */\n private _checkYRange(arcs: ArcInfo[]) {\n for (const arc of arcs) {\n const { labelYRange, labelPosition } = arc;\n if (\n arc.labelVisible &&\n labelYRange &&\n (isLess(labelPosition.y, labelYRange[0]) || isGreater(labelPosition.y, labelYRange[1]))\n ) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * 自上至下计算被遮盖的标签\n */\n private _coverLabels(arcs: ArcInfo[]) {\n if (arcs.length <= 1) {\n return;\n }\n let lastBounds = arcs[0].getLabelBounds();\n for (let i = 1; i < arcs.length; i++) {\n const bounds = arcs[i].getLabelBounds();\n if (!checkBoundsOverlap(lastBounds, bounds)) {\n lastBounds = bounds;\n } else {\n arcs[i].labelVisible = false;\n }\n }\n }\n\n protected _createLabelLine(text: IText, baseMark?: IGraphic) {\n const { points, line = {}, visible, fill } = text.attribute as ArcLabelAttrs;\n const labelLine: ILine = (text.attribute as ArcLabelAttrs).points\n ? graphicCreator.line({\n visible: (line.visible && visible) ?? text.attribute?.visible ?? true,\n stroke: line.style?.stroke ?? fill,\n lineWidth: line.style?.lineWidth ?? 1,\n points: points,\n curveType: line.smooth ? 'basis' : null\n })\n : undefined;\n if (labelLine) {\n this._setStatesOfLabelLine(labelLine);\n }\n return labelLine;\n }\n\n protected computeRadius(r: number, width?: number, height?: number, k?: number): number {\n return this.computeLayoutRadius(width ? width : 0, height ? height : 0) * r * (isNil(k) ? 1 : k);\n }\n\n protected computeLayoutRadius(width: number, height: number) {\n return Math.min(width / 2, height / 2);\n }\n\n protected _canPlaceInside(textBound: IBoundsLike, shapeBound: IAABBBounds) {\n return this.attribute.position === 'inside';\n }\n\n private computeLayoutOuterRadius(r: number, width: number, height: number) {\n return r / (Math.min(width, height) / 2);\n }\n\n private computeDatumRadius(width?: number, height?: number, outerRadius?: any): number {\n const outerRadiusRatio = this.computeLayoutOuterRadius(outerRadius, width, height); //this.getRadius(state)\n return this.computeLayoutRadius(width ? width : 0, height ? height : 0) * outerRadiusRatio;\n }\n}\n","import type { IBoundsLike } from '@visactor/vutils';\nimport { merge } from '@visactor/vutils';\nimport type { LineDataLabelAttrs } from './type';\nimport { LabelBase } from './base';\nimport { labelingPoint } from './util';\nimport type { ComponentOptions } from '../interface';\n\nexport class LineDataLabel extends LabelBase {\n name = 'line-data-label';\n\n static defaultAttributes: Partial = {\n textStyle: {\n fontSize: 12,\n fill: '#000',\n textAlign: 'center',\n textBaseline: 'middle',\n boundsPadding: [-1, 0, -1, 0] // to ignore the textBound buf\n },\n position: 'top',\n offset: 5,\n pickable: false\n };\n\n constructor(attributes: LineDataLabelAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, LineDataLabel.defaultAttributes, attributes));\n }\n\n protected labeling(textBounds: IBoundsLike, graphicBounds: IBoundsLike, position = 'top', offset = 0) {\n return labelingPoint(textBounds, graphicBounds, position, offset);\n }\n}\n","import type { IBoundsLike } from '@visactor/vutils';\nimport { merge } from '@visactor/vutils';\nimport type { ILine } from '@visactor/vrender-core';\nimport type { PointLocationCfg } from '../core/type';\nimport type { LineLabelAttrs } from './type';\nimport { LabelBase } from './base';\nimport { labelingLineOrArea } from './util';\nimport type { ComponentOptions } from '../interface';\n\nexport class LineLabel extends LabelBase {\n name = 'line-label';\n\n static defaultAttributes: Partial = {\n textStyle: {\n fontSize: 12,\n fill: '#000',\n textAlign: 'center',\n textBaseline: 'middle',\n boundsPadding: [-1, 0, -1, 0] // to ignore the textBound buf\n },\n position: 'end',\n offset: 6,\n pickable: false\n };\n\n constructor(attributes: LineLabelAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, LineLabel.defaultAttributes, attributes));\n }\n\n protected getGraphicBounds(graphic: ILine, point: Partial = {}, position = 'end') {\n if (!graphic || graphic.type !== 'line') {\n return super.getGraphicBounds(graphic, point);\n }\n const points = graphic.attribute.points || [point];\n const index = position === 'start' ? 0 : points.length - 1;\n if (!points[index]) {\n return;\n }\n return {\n x1: points[index].x as number,\n x2: points[index].x as number,\n y1: points[index].y as number,\n y2: points[index].y as number\n };\n }\n\n protected labeling(textBounds: IBoundsLike, graphicBounds: IBoundsLike, position: string = 'end', offset = 0) {\n return labelingLineOrArea(textBounds, graphicBounds, position, offset);\n }\n}\n","import type { IBoundsLike } from '@visactor/vutils';\nimport { merge } from '@visactor/vutils';\nimport type { IArea } from '@visactor/vrender-core';\nimport type { PointLocationCfg } from '../core/type';\nimport type { AreaLabelAttrs } from './type';\nimport { LabelBase } from './base';\nimport { labelingLineOrArea } from './util';\n\nexport class AreaLabel extends LabelBase {\n name = 'line-label';\n\n static defaultAttributes: Partial = {\n textStyle: {\n fontSize: 12,\n fill: '#000',\n textAlign: 'center',\n textBaseline: 'middle',\n boundsPadding: [-1, 0, -1, 0] // to ignore the textBound buf\n },\n position: 'end',\n offset: 6,\n pickable: false\n };\n\n constructor(attributes: AreaLabelAttrs) {\n super(merge({}, AreaLabel.defaultAttributes, attributes));\n }\n\n protected getGraphicBounds(graphic: IArea, point: Partial = {}, position = 'end') {\n if (graphic.type !== 'area') {\n return super.getGraphicBounds(graphic, point);\n }\n\n const points = graphic?.attribute?.points || [point];\n const index = position === 'start' ? 0 : points.length - 1;\n return {\n x1: points[index].x as number,\n x2: points[index].x as number,\n y1: points[index].y as number,\n y2: points[index].y as number\n };\n }\n\n protected labeling(textBounds: IBoundsLike, graphicBounds: IBoundsLike, position: string = 'end', offset = 0) {\n return labelingLineOrArea(textBounds, graphicBounds, position, offset);\n }\n}\n","import { isValidNumber, merge } from '@visactor/vutils';\nimport type { IGraphic, INode } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport type { PointLocationCfg } from '../core/type';\nimport { bitmapTool } from './overlap';\nimport { RectLabel } from './rect';\nimport { SymbolLabel } from './symbol';\nimport { ArcLabel } from './arc';\nimport type { DataLabelAttrs } from './type';\nimport type { LabelBase } from './base';\nimport { LabelBase as PointLabel } from './base';\nimport { LineDataLabel } from './line-data';\nimport { LineLabel } from './line';\nimport { AreaLabel } from './area';\nimport type { ComponentOptions } from '../interface';\n\nconst labelComponentMap = {\n rect: RectLabel,\n symbol: SymbolLabel,\n arc: ArcLabel,\n line: LineLabel,\n area: AreaLabel,\n 'line-data': LineDataLabel\n};\n\nexport class DataLabel extends AbstractComponent {\n name = 'data-label';\n\n private _componentMap: Map>;\n\n private static defaultAttributes: Partial = {\n pickable: false\n };\n\n constructor(attributes: DataLabelAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, DataLabel.defaultAttributes, attributes));\n }\n\n protected render(): void {\n const { dataLabels, size } = this.attribute;\n if (!dataLabels || dataLabels.length === 0) {\n return;\n }\n const { width = 0, height = 0 } = size || {};\n\n if (!width || !height || !isValidNumber(height * width)) {\n return;\n }\n\n if (!this._componentMap) {\n this._componentMap = new Map();\n }\n const tool = bitmapTool(width, height);\n const bitmap = tool.bitmap();\n\n const currentComponentMap = new Map();\n const prevComponentMap = this._componentMap;\n\n for (let i = 0; i < dataLabels.length; i++) {\n const dataLabel = dataLabels[i];\n const labelComponent = labelComponentMap[dataLabel.type] || PointLabel;\n if (labelComponent) {\n const { baseMarkGroupName, type } = dataLabel;\n const id = dataLabel.id ?? `${baseMarkGroupName}-${type}-${i}`;\n\n let component = this._componentMap.get(id);\n if (component) {\n component.setBitmapTool(tool);\n component.setBitmap(bitmap);\n component.setAttributes(dataLabel);\n currentComponentMap.set(id, component);\n } else {\n component = new labelComponent(dataLabel as any);\n component.setBitmap(bitmap);\n component.setBitmapTool(tool);\n this.add(component as unknown as INode);\n currentComponentMap.set(id, component);\n }\n }\n }\n\n prevComponentMap.forEach((cp, key) => {\n if (!currentComponentMap.get(key)) {\n this.removeChild(cp as unknown as IGraphic);\n }\n });\n\n this._componentMap = currentComponentMap;\n }\n\n setLocation(point: PointLocationCfg) {\n this.translateTo(point.x, point.y);\n }\n\n disableAnimation() {\n this._componentMap.forEach(component => {\n component.disableAnimation();\n });\n }\n\n enableAnimation() {\n this._componentMap.forEach(component => {\n component.enableAnimation();\n });\n }\n}\n","import { load } from './../util/data';\nimport { array, isNil, isString, merge, last } from '@visactor/vutils';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport type { BaseLabelAttrs, DataLabelAttrs } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { DataLabel } from '@visactor/vrender-components';\nimport type {\n BaseSingleEncodeSpec,\n IElement,\n IGroupMark,\n IMark,\n ITheme,\n IView,\n MarkFunctionType,\n Nil,\n StateEncodeSpec\n} from '../types';\nimport { ComponentEnum, GrammarMarkType } from '../graph/enums';\nimport type { ILabel, LabelSpec } from '../types/component';\nimport { Component } from '../view/component';\nimport { invokeEncoder } from '../graph/mark/encode';\nimport { invokeFunctionType } from '../parse/util';\nimport { Factory } from '../core/factory';\n\nexport const generateLabelAttributes = (\n marks: IMark[],\n groupSize: { width: number; height: number },\n encoder: BaseSingleEncodeSpec,\n labelStyle: MarkFunctionType>,\n parameters: any,\n theme: ITheme = {}\n): DataLabelAttrs => {\n const labelTheme = theme.components?.dataLabel;\n const dataLabels = marks\n .map((mark, index) => {\n const labelParameters = { ...parameters, labelIndex: index };\n const addition = invokeFunctionType(labelStyle, labelParameters, mark) ?? {};\n const { components = {} } = theme;\n let currentTheme: any = {};\n\n switch (mark.markType) {\n case GrammarMarkType.line:\n case GrammarMarkType.area:\n if (addition.type === 'line') {\n currentTheme = components.lineLabel;\n } else if (addition.type === 'area') {\n currentTheme = components.areaLabel;\n } else {\n currentTheme = components.lineDataLabel;\n }\n break;\n case GrammarMarkType.rect:\n case GrammarMarkType.rect3d:\n case GrammarMarkType.interval:\n currentTheme = components.rectLabel;\n break;\n case GrammarMarkType.symbol:\n case GrammarMarkType.circle:\n case GrammarMarkType.cell:\n currentTheme = components.symbolLabel;\n break;\n case GrammarMarkType.arc:\n case GrammarMarkType.arc3d:\n currentTheme = components.arcLabel;\n break;\n case GrammarMarkType.polygon:\n case GrammarMarkType.path:\n default:\n currentTheme = components.pointLabel;\n break;\n }\n\n const data: any[] = addition.data ?? [];\n const themeDatum = currentTheme?.data?.[0] ?? {};\n\n if (data && data.length > 0) {\n data.forEach((d, index) => {\n if (mark.elements[index]) {\n const attributes = invokeEncoder(encoder, d, mark.elements[index], labelParameters);\n merge(d, themeDatum, attributes);\n }\n });\n } else {\n // process by order of elements\n mark.elements.forEach(element => {\n const graphicItem = element.getGraphicItem();\n if ((graphicItem as any).releaseStatus !== 'willRelease') {\n if (mark.isCollectionMark()) {\n const datum = element.getDatum();\n\n datum.forEach((entry: any) => {\n const attributes = invokeEncoder(encoder, entry, element, labelParameters);\n data.push(merge({}, themeDatum, attributes));\n });\n } else {\n const attributes = invokeEncoder(encoder, element.getDatum(), element, labelParameters);\n const datum = merge({}, themeDatum, attributes);\n data.push(datum);\n }\n }\n });\n }\n\n const graphicItemName = mark.graphicItem?.name;\n return merge(\n {},\n currentTheme,\n {\n data,\n baseMarkGroupName: graphicItemName,\n // FIXME: hack\n // 标签是对数据顺序有强要求的场景,因为顺序会影响标签躲避结果;而目前没有机制保证 vrender 图元顺序与数据顺序一致。\n // 这里目前只能通过自定义方法来 hack\n getBaseMarks: () => mark.elements.map(element => element.getGraphicItem())\n },\n addition ?? {}\n );\n })\n .filter(label => !isNil(label));\n\n return merge({}, labelTheme, { size: groupSize, dataLabels });\n};\n\nexport class Label extends Component implements ILabel {\n static readonly componentType: string = ComponentEnum.label;\n protected declare spec: LabelSpec;\n\n constructor(view: IView, group?: IGroupMark) {\n super(view, ComponentEnum.label, group);\n this.spec.componentType = ComponentEnum.label;\n }\n\n protected parseAddition(spec: LabelSpec) {\n super.parseAddition(spec);\n this.labelStyle(spec.labelStyle);\n this.size(spec.size);\n this.target(spec.target);\n return this;\n }\n\n labelStyle(style: MarkFunctionType>) {\n return this.setFunctionSpec(style, 'labelStyle');\n }\n\n size(size: LabelSpec['size']) {\n return this.setFunctionSpec(size, 'size');\n }\n\n target(mark: IMark | IMark[] | string | string[] | Nil): this {\n if (this.spec.target) {\n const prevMarks = array(this.spec.target).map(m => (isString(m) ? this.view.getMarkById(m) : m));\n this.detach(prevMarks);\n }\n this.spec.target = mark;\n if (mark) {\n const nextMarks = array(mark).map(m => (isString(m) ? this.view.getMarkById(m) : m));\n this.attach(nextMarks);\n }\n this.commit();\n return this;\n }\n\n protected _updateComponentEncoders() {\n const encoders = Object.assign({ update: {} }, this.spec.encode);\n const componentEncoders: StateEncodeSpec = Object.keys(encoders).reduce((res, state) => {\n const encoder = encoders[state];\n if (encoder) {\n res[state] = {\n callback: (datum: any, element: IElement, parameters: any) => {\n const marks = array(this.spec.target).map(m => (isString(m) ? this.view.getMarkById(m) : m));\n const groupGraphicItem = this.group?.getGroupGraphicItem?.();\n let size = invokeFunctionType(this.spec.size, parameters);\n if (!size) {\n size = groupGraphicItem\n ? {\n width: groupGraphicItem.attribute.width ?? groupGraphicItem.AABBBounds.width(),\n height: groupGraphicItem.attribute.height ?? groupGraphicItem.AABBBounds.height()\n }\n : { width: Infinity, height: Infinity };\n }\n\n const theme = this.spec.skipTheme ? null : this.view.getCurrentTheme();\n\n return generateLabelAttributes(\n marks,\n size,\n encoder as BaseSingleEncodeSpec,\n this.spec.labelStyle,\n parameters,\n theme\n );\n }\n };\n }\n return res;\n }, {});\n this._encoders = componentEncoders;\n }\n}\n\nexport const registerLabel = () => {\n Factory.registerGraphicComponent(\n ComponentEnum.label,\n (attrs: DataLabelAttrs) => new DataLabel(attrs) as unknown as IGraphic\n );\n\n Factory.registerComponent(ComponentEnum.label, Label);\n};\n","import type { WaterfallSeries } from './../../series/waterfall/waterfall';\nimport type { Datum } from '../../typings/common';\nimport { Direction } from '../../typings/space';\nimport type { ILabelInfo } from './label';\nimport type { BaseLabelAttrs, LabelItem, OverlapAttrs, Strategy } from '@visactor/vrender-components';\nimport type { ICartesianSeries } from '../../series/interface';\nimport { isBoolean, isFunction, isObject, isString, substitute } from '@visactor/vutils';\nimport { createText } from '@visactor/vrender-core';\nimport type { IWaterfallSeriesSpec } from '../../series/waterfall/interface';\nimport type { ILabelSpec } from './interface';\nimport { ARC_RATIO } from '../../constant';\nimport { STACK_FIELD_END_PERCENT } from '../../constant';\n\nexport const labelRuleMap = {\n rect: barLabel,\n symbol: symbolLabel,\n arc: pieLabel,\n point: pointLabel,\n 'line-data': lineDataLabel,\n stackLabel: stackLabel,\n line: LineLabel,\n area: LineLabel,\n rect3d: barLabel,\n arc3d: pieLabel,\n treemap: treemapLabel\n};\n\nexport function defaultLabelConfig(rule: string, labelInfo: ILabelInfo) {\n const { labelSpec } = labelInfo;\n if (labelSpec.overlap && !isObject(labelSpec.overlap)) {\n labelSpec.overlap = {};\n }\n const processor = labelRuleMap[rule] ?? labelRuleMap.point;\n return processor(labelInfo);\n}\n\nexport function textAttribute(\n labelInfo: ILabelInfo,\n datum: Datum,\n formatMethod?: ILabelSpec['formatMethod'],\n formatter?: ILabelSpec['formatter']\n) {\n const { labelMark, series } = labelInfo;\n const field = series.getMeasureField()[0];\n const textAttribute = { text: datum[field], data: datum, textType: labelInfo.labelSpec.textType ?? 'text' } as any;\n\n const attributes = Object.keys(labelMark.stateStyle.normal);\n\n for (const key of attributes) {\n const attr = labelMark.getAttribute(key as any, datum);\n textAttribute[key] = attr;\n }\n\n if (formatMethod) {\n textAttribute.text = formatMethod(textAttribute.text, datum, { series });\n }\n\n if (formatter) {\n if (series.type === 'pie') {\n datum._percent_ = (datum[ARC_RATIO] * 100).toFixed(2) + '%';\n } else if (datum[STACK_FIELD_END_PERCENT]) {\n datum._percent_ = (datum[STACK_FIELD_END_PERCENT] * 100).toFixed(2) + '%';\n }\n textAttribute.text = substitute(formatter, datum);\n }\n return textAttribute;\n}\n\nfunction uniformLabelPosition(position?: ILabelSpec['position']) {\n if (isFunction(position)) {\n return (datum: Datum) => {\n return position(datum.data);\n };\n }\n return position;\n}\n\n/**\n * symbol 图元标签规则。\n */\nexport function symbolLabel(labelInfo: ILabelInfo) {\n const { series, labelSpec } = labelInfo;\n\n // encode position config\n const defaultPosition = (series as ICartesianSeries).direction === 'horizontal' ? 'right' : 'top';\n const position = uniformLabelPosition(labelSpec.position) ?? defaultPosition;\n\n // encode overlap config\n let overlap;\n if (labelSpec.overlap === false) {\n overlap = false;\n } else {\n overlap = {\n strategy: (labelSpec.overlap as OverlapAttrs)?.strategy ?? symbolLabelOverlapStrategy(),\n avoidBaseMark: position !== 'center'\n };\n }\n\n return { position, overlap };\n}\n\nexport function lineDataLabel(labelInfo: ILabelInfo) {\n const result = symbolLabel(labelInfo);\n if (!isBoolean(result.overlap)) {\n result.overlap.avoidBaseMark = false;\n }\n return result;\n}\n\nfunction symbolLabelOverlapStrategy() {\n const strategy: Strategy[] = [\n {\n type: 'position',\n position: ['top', 'bottom', 'right', 'left', 'top-right', 'top-left', 'bottom-left', 'bottom-right']\n }\n ];\n\n return strategy;\n}\n\n/**\n *\n */\nexport function barLabel(labelInfo: ILabelInfo) {\n const { series, labelSpec = {} as ILabelSpec } = labelInfo;\n\n // encode position config\n const originPosition = uniformLabelPosition(labelSpec.position) ?? 'outside';\n const direction = (series as ICartesianSeries).direction ?? 'vertical';\n const isInverse =\n (series as ICartesianSeries).direction === 'horizontal'\n ? (series as ICartesianSeries).getXAxisHelper()?.isInverse()\n : (series as ICartesianSeries).getYAxisHelper()?.isInverse();\n\n let position = originPosition as BaseLabelAttrs['position'];\n\n if (isString(originPosition) && position !== 'inside') {\n position = (data: Datum) => {\n const { data: datum } = data;\n const dataField = series.getMeasureField()[0];\n if (originPosition === 'outside') {\n const positionMap = { vertical: ['top', 'bottom'], horizontal: ['right', 'left'] };\n const index = (datum?.[dataField] >= 0 && isInverse) || (datum?.[dataField] < 0 && !isInverse) ? 1 : 0;\n return positionMap[direction][index];\n }\n if (originPosition === 'inside-bottom') {\n return (series as ICartesianSeries).direction === 'horizontal' ? 'inside-left' : 'inside-bottom';\n }\n if (originPosition === 'inside-top') {\n return (series as ICartesianSeries).direction === 'horizontal' ? 'inside-right' : 'inside-top';\n }\n return originPosition;\n };\n }\n // encode overlap config\n let overlap;\n if (labelSpec.overlap === false) {\n overlap = false;\n } else {\n overlap = {\n strategy: (labelSpec.overlap as OverlapAttrs)?.strategy ?? barLabelOverlapStrategy(series as ICartesianSeries)\n };\n }\n\n // encode smartInvert\n let smartInvert = false;\n if (isString(originPosition) && originPosition.includes('inside')) {\n smartInvert = true;\n }\n\n return { position, overlap, smartInvert };\n}\n\nfunction barLabelOverlapStrategy(series: ICartesianSeries) {\n const strategy: Strategy[] = [\n {\n type: 'position',\n position: (data: any) => {\n const { data: datum } = data;\n const dataField = series.getMeasureField()[0];\n const isInverse =\n (series as ICartesianSeries).direction === 'horizontal'\n ? (series as ICartesianSeries).getXAxisHelper()?.isInverse()\n : (series as ICartesianSeries).getYAxisHelper()?.isInverse();\n if (isInverse) {\n if (datum?.[dataField] >= 0) {\n return series.direction === 'horizontal' ? ['left', 'inside-left'] : ['bottom', 'inside-bottom'];\n }\n return series.direction === 'horizontal' ? ['right', 'inside-right'] : ['top', 'inside-top'];\n }\n if (datum?.[dataField] >= 0) {\n return series.direction === 'horizontal' ? ['right', 'inside-right'] : ['top', 'inside-top'];\n }\n return series.direction === 'horizontal' ? ['left', 'inside-left'] : ['bottom', 'inside-bottom'];\n }\n }\n ];\n\n return strategy;\n}\n\n/**\n * 无关图元,指定x/y坐标的标签配置规则\n */\nexport function pointLabel(labelInfo: ILabelInfo) {\n const { labelSpec } = labelInfo;\n\n // encode overlap config\n let overlap;\n if (labelSpec.overlap === false) {\n overlap = false;\n } else {\n overlap = {\n avoidBaseMark: false\n };\n }\n\n return { position: 'center', overlap };\n}\n\n/**\n * pie 图元标签配置规则\n */\n\nexport function pieLabel(labelInfo: ILabelInfo) {\n const { labelSpec } = labelInfo;\n // encode position config\n const labelPosition = uniformLabelPosition(labelSpec.position) ?? 'outside';\n const position = labelPosition as BaseLabelAttrs['position'];\n\n // encode smartInvert\n let smartInvert;\n if (labelSpec.smartInvert) {\n smartInvert = labelSpec.smartInvert;\n } else {\n smartInvert = isString(labelPosition) && labelPosition.includes('inside');\n }\n\n return { position, smartInvert };\n}\n\n/**\n * 瀑布图堆积标签配置规则\n */\n\nexport function stackLabel(labelInfo: ILabelInfo) {\n const series = labelInfo.series as WaterfallSeries;\n const labelSpec = labelInfo.labelSpec || ({} as IWaterfallSeriesSpec['stackLabel']);\n const totalData = series.getTotalData();\n return {\n customLayoutFunc: (labels: LabelItem[]) => {\n return labels.map(label => {\n const pos = labelSpec.position || 'withChange';\n const offset = labelSpec.offset || 0;\n\n const datum = label.data;\n const attribute = textAttribute(labelInfo, datum, labelSpec.formatMethod);\n const x = (datum: any) => {\n if (series.direction === Direction.vertical) {\n return series.totalPositionX(datum, 'index', 0.5);\n }\n if (pos === 'middle') {\n return (series.totalPositionX(datum, 'end') + series.totalPositionY(datum, 'start')) * 0.5;\n } else if (pos === 'max') {\n return series.totalPositionX(datum, datum.end >= datum.start ? 'end' : 'start') + offset;\n } else if (pos === 'min') {\n return series.totalPositionX(datum, datum.end >= datum.start ? 'start' : 'end') - offset;\n }\n return series.totalPositionX(datum, 'end') + (datum.end >= datum.start ? offset : -offset);\n };\n const y = (datum: any) => {\n if (series.direction === Direction.vertical) {\n if (pos === 'middle') {\n return (series.totalPositionY(datum, 'end') + series.totalPositionY(datum, 'start')) * 0.5;\n } else if (pos === 'max') {\n return series.totalPositionY(datum, datum.end >= datum.start ? 'end' : 'start') - offset;\n } else if (pos === 'min') {\n return series.totalPositionY(datum, datum.end >= datum.start ? 'start' : 'end') + offset;\n }\n return series.totalPositionY(datum, 'end') + (datum.end >= datum.start ? -offset : offset);\n }\n return series.totalPositionY(datum, 'index', 0.5);\n };\n attribute.x = x(datum);\n attribute.y = y(datum);\n if (series.direction === Direction.vertical) {\n attribute.textBaseline =\n pos === 'middle'\n ? pos\n : (pos === 'withChange' && datum.end - datum.start >= 0) || pos === 'max'\n ? 'bottom'\n : 'top';\n } else {\n attribute.textAlign =\n pos === 'middle'\n ? 'center'\n : (pos === 'withChange' && datum.end - datum.start >= 0) || pos === 'max'\n ? 'left'\n : 'right';\n }\n return createText({ ...attribute, id: label.id });\n });\n },\n dataFilter: (labels: LabelItem[]) => {\n const result: LabelItem[] = [];\n totalData.forEach((total: any) => {\n const label = labels.find(labelItem => {\n return total.index === labelItem.data?.[series.getDimensionField()[0]];\n });\n if (label) {\n label.data = total;\n result.push(label);\n }\n });\n return result;\n },\n overlap: {\n strategy: [] as any\n }\n };\n}\n\n/**\n * treemap 非叶子节点标签配置规则\n */\nexport function treemapLabel(labelInfo: ILabelInfo) {\n const labelSpec = labelInfo.labelSpec;\n return {\n customLayoutFunc: (labels: LabelItem[]) => {\n return labels.map(label => {\n const datum = label.data;\n const attribute = textAttribute(labelInfo, datum, labelSpec.formatMethod);\n return createText({ ...attribute, id: label.id, pickable: false });\n });\n },\n overlap: false\n };\n}\n\n/**\n * line 图元标签\n */\n\nexport function LineLabel(labelInfo: ILabelInfo) {\n const { labelSpec, series } = labelInfo;\n\n const seriesData = series.getViewDataStatistics?.().latestData?.[series.getSeriesField()]?.values;\n const data = seriesData ? seriesData.map((d: Datum, index: number) => ({ [series.getSeriesField()]: d, index })) : [];\n return { position: labelSpec.position ?? 'end', data };\n}\n","import type { Dict } from '../type';\n\nexport default function substitute(str: string, o: Dict) {\n if (!str || !o) {\n return str;\n }\n return str.replace(/\\\\?\\{([^{}]+)\\}/g, (match, name): any => {\n if (match.charAt(0) === '\\\\') {\n return match.slice(1);\n }\n return o[name] === undefined ? '' : o[name];\n });\n}\n","import { BaseComponent } from '../base/base-component';\nimport type { IComponentOption } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport type { IRegion } from '../../region/interface';\nimport type { IModelRenderOption } from '../../model/interface';\nimport { LayoutZIndex } from '../../constant';\nimport type { ILabelSpec } from './interface';\nimport type { IHoverSpec, ISelectSpec } from '../../interaction/interface';\nimport { isEqual } from '@visactor/vutils';\nimport type { IGraphic } from '@visactor/vrender-core';\n\nexport abstract class BaseLabelComponent extends BaseComponent {\n static type = ComponentTypeEnum.label;\n type = ComponentTypeEnum.label;\n name: string = ComponentTypeEnum.label;\n\n layoutType: 'none' = 'none';\n layoutZIndex: number = LayoutZIndex.Label;\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this._regions = options.getRegionsInIndex([options.specIndex]);\n }\n\n protected _interactiveConfig(labelSpec: ILabelSpec) {\n const { interactive } = labelSpec;\n if (interactive !== true) {\n return { hover: false, select: false };\n }\n const result = { hover: false, select: false, state: labelSpec.state };\n\n const { hover, select } = this._option.getChart().getSpec();\n if (hover !== false || (hover as unknown as IHoverSpec).enable !== false) {\n result.hover = true;\n }\n if (select !== false || (select as unknown as ISelectSpec).enable !== false) {\n result.select = true;\n }\n return result;\n }\n\n /** Update API **/\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n result.reRender = true;\n if (!isEqual(prevSpec, spec)) {\n result.reMake = true;\n }\n\n return result;\n }\n\n onRender(ctx: IModelRenderOption): void {\n // do nothing\n }\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [];\n }\n}\n","import { registerTextGraphic } from '@visactor/vgrammar-core';\nimport { Factory } from './../core/factory';\nimport type { IComponentMark } from './component';\nimport type { IMark } from './interface/common';\nimport { MarkTypeEnum } from './interface/type';\nimport { TextMark } from './text';\n\nexport class LabelMark extends TextMark implements ILabelMark {\n static readonly type = MarkTypeEnum.text;\n static readonly constructorType = MarkTypeEnum.label;\n\n skipEncode = false;\n\n private _rule: string;\n getRule() {\n return this._rule;\n }\n setRule(rule: string) {\n this._rule = rule;\n }\n\n private _target: IMark;\n getTarget() {\n return this._target;\n }\n setTarget(target: IMark) {\n this._target = target;\n if (!this._rule) {\n this.setRule(target.type);\n }\n }\n\n private _component: IMark;\n getComponent() {\n return this._component;\n }\n setComponent(component: IMark) {\n this._component = component;\n }\n}\n\nexport interface ILabelMark extends IMark {\n skipEncode: boolean;\n\n getRule: () => string;\n setRule: (rule: string) => void;\n\n getTarget: () => IMark;\n setTarget: (target: IMark) => void;\n\n getComponent: () => IComponentMark;\n setComponent: (component: IComponentMark) => void;\n}\n\nexport const registerLabelMark = () => {\n Factory.registerMark(LabelMark.constructorType, LabelMark);\n registerTextGraphic();\n};\n","import type { IChartSpec } from '../../typings';\nimport { BaseComponentSpecTransformer } from '../base';\n\nexport class LabelSpecTransformer extends BaseComponentSpecTransformer {\n protected _initTheme(spec: T, chartSpec: any): { spec: T; theme: K } {\n return { spec, theme: this._theme };\n }\n}\n","import type { IComponentOption } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport type { IRegion } from '../../region/interface';\nimport type { IModelInitOption, IModelSpecInfo } from '../../model/interface';\nimport { AttributeLevel, ChartEvent, LayoutZIndex, VGRAMMAR_HOOK_EVENT } from '../../constant';\nimport { MarkTypeEnum } from '../../mark/interface';\nimport { mergeSpec } from '../../util/spec/merge-spec';\nimport { eachSeries } from '../../util/model';\nimport type { ISeries } from '../../series/interface';\nimport type { IGroupMark, ILabel, IMark as IVGrammarMark } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerLabel as registerVGrammarLabel } from '@visactor/vgrammar-core';\nimport { defaultLabelConfig, textAttribute } from './util';\nimport { registerComponentMark, type IComponentMark } from '../../mark/component';\nimport { BaseLabelComponent } from './base-label';\nimport type { LooseFunction, Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isArray, isFunction, pickWithout } from '@visactor/vutils';\nimport type { IGroup, IText } from '@visactor/vrender-core';\nimport type { ILabelSpec, TransformedLabelSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { type ILabelMark, registerLabelMark } from '../../mark/label';\nimport type { ICompilableMark } from '../../compile/mark';\nimport type { IChartSpecInfo } from '../../chart/interface';\nimport type { IChartSpec } from '../../typings';\nimport { LabelSpecTransformer } from './label-transformer';\nimport type { LabelItem } from '@visactor/vrender-components';\n\nexport interface ILabelInfo {\n baseMark: ICompilableMark;\n labelMark: ILabelMark;\n series: ISeries;\n labelSpec: TransformedLabelSpec;\n}\n\nexport interface ILabelComponentContext {\n region: IRegion;\n labelInfo: ILabelInfo[];\n}\n\nexport class Label extends BaseLabelComponent {\n static type = ComponentTypeEnum.label;\n type = ComponentTypeEnum.label;\n name: string = ComponentTypeEnum.label;\n\n static specKey = 'label';\n specKey = 'label';\n\n static readonly transformerConstructor = LabelSpecTransformer as any;\n readonly transformerConstructor = LabelSpecTransformer;\n\n layoutZIndex: number = LayoutZIndex.Label;\n\n protected _labelInfoMap: Map;\n\n protected _labelComponentMap: Map ILabelInfo | ILabelInfo[]>;\n\n protected _layoutRule: 'series' | 'region';\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this._layoutRule = (spec as any).labelLayout || 'series';\n }\n\n static getSpecInfo(chartSpec: any, chartSpecInfo: IChartSpecInfo): Maybe {\n const specInfo: IModelSpecInfo[] = [];\n const regionSpecInfo = chartSpecInfo?.region || [];\n const isLabelVisible = (labelSpecList: ILabelSpec[]) => {\n return labelSpecList.some(labelSpec => labelSpec.visible);\n };\n\n regionSpecInfo.forEach((regionInfo, i) => {\n const seriesIndexes = regionInfo.seriesIndexes || [];\n const hasVisibleLabel = seriesIndexes.some(seriesIndex => {\n const seriesInfo = chartSpecInfo.series[seriesIndex];\n const { markLabelSpec = {} } = seriesInfo;\n return Object.values(markLabelSpec).some(\n labelSpecList => Array.isArray(labelSpecList) && isLabelVisible(labelSpecList)\n );\n });\n\n if (chartSpec.labelLayout !== 'region' || hasVisibleLabel) {\n specInfo.push({\n spec: chartSpec,\n type: ComponentTypeEnum.label,\n specInfoPath: ['region', i, 'markLabel'],\n specIndex: i // 这里的 specIndex 是 region 的 index,用于 region 定位\n });\n }\n });\n return specInfo;\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n this.initEvent();\n this._initTextMark();\n this._initLabelComponent();\n this._initTextMarkStyle();\n }\n\n reInit(spec?: T) {\n super.reInit(spec);\n this._labelInfoMap && this._labelInfoMap.clear();\n this._initTextMark();\n this._initTextMarkStyle();\n }\n\n initEvent() {\n this.event.on(ChartEvent.dataZoomChange, () => {\n this._labelComponentMap.forEach((info, component) => {\n const graphicItem = component.getProduct().getGroupGraphicItem();\n if (graphicItem) {\n graphicItem.disableAnimation();\n }\n });\n this.event.on(VGRAMMAR_HOOK_EVENT.AFTER_MARK_RENDER_END, enableAnimation);\n });\n const enableAnimation = () => {\n this._labelComponentMap.forEach((info, component) => {\n const graphicItem = component.getProduct().getGroupGraphicItem();\n if (graphicItem) {\n graphicItem.enableAnimation();\n }\n });\n this.event.off(VGRAMMAR_HOOK_EVENT.AFTER_MARK_RENDER_END, enableAnimation);\n };\n\n this.event.on('afterElementEncode', eventParams => {\n const mark = eventParams.item;\n\n if (this._option.getChart().getLayoutTag() === false && mark.getContext()?.model === this) {\n this._delegateLabelEvent(mark.getGroupGraphicItem());\n }\n });\n }\n\n protected _delegateLabelEvent(component: IGroup) {\n const textNodes = component\n ?.findAll(node => node.type === 'text', true)\n // label 组件的底层实现是有 text 图元复用的,这里为了避免重复的事件监听\n .filter(text => !(text as any).__vchart_event) as IText[];\n if (textNodes && textNodes.length > 0) {\n textNodes.forEach(text => {\n text.__vchart_event = true;\n text.addEventListener('*', ((event: any, type: string) =>\n this._delegateEvent(component, event, type, text, (text.attribute as LabelItem).data)) as LooseFunction);\n });\n }\n }\n\n protected _initTextMark() {\n if (!this._labelInfoMap) {\n this._labelInfoMap = new Map();\n }\n\n if (!this._labelComponentMap) {\n this._labelComponentMap = new Map();\n }\n eachSeries(this._regions, (series: ISeries) => {\n const { markLabelSpec = {} } = series.getSpecInfo();\n const markNames = Object.keys(markLabelSpec);\n const region = series.getRegion();\n\n if (!this._labelInfoMap.get(region)) {\n this._labelInfoMap.set(region, []);\n }\n for (let i = 0; i < markNames.length; i++) {\n const markName = markNames[i];\n const mark = series.getMarkInName(markName);\n if (!mark) {\n continue;\n }\n markLabelSpec[markName].forEach((spec: TransformedLabelSpec, index: number) => {\n if (spec.visible) {\n const info = this._labelInfoMap.get(region);\n const labelMark = this._createMark(\n {\n type: MarkTypeEnum.label,\n name: `${markName}-label-${index}`\n },\n { noSeparateStyle: true, attributeContext: series.getMarkAttributeContext() }\n ) as ILabelMark;\n labelMark.setTarget(mark);\n info.push({\n labelMark,\n baseMark: mark,\n series,\n labelSpec: spec\n });\n }\n });\n }\n });\n }\n\n protected _initLabelComponent() {\n this._labelInfoMap.forEach((regionLabelInfo, region) => {\n if (this._layoutRule === 'region') {\n const component = this._createMark(\n { type: MarkTypeEnum.component, name: `${region.getGroupMark().name}-label-component` },\n {\n componentType: 'label',\n noSeparateStyle: true,\n support3d: (this._spec as any).support3d\n }\n );\n if (component) {\n component.setSkipBeforeLayouted(true);\n this._marks.addMark(component);\n this._labelComponentMap.set(component, () => {\n return this._labelInfoMap.get(region);\n });\n }\n } else {\n regionLabelInfo.forEach((labelInfo, i) => {\n const component = this._createMark(\n { type: MarkTypeEnum.component, name: `${labelInfo.labelMark.name}-component` },\n {\n componentType: 'label',\n noSeparateStyle: true,\n support3d: labelInfo.baseMark.getSupport3d()\n }\n );\n if (component) {\n component.setSkipBeforeLayouted(true);\n this._marks.addMark(component);\n this._labelComponentMap.set(component, () => {\n return this._labelInfoMap.get(region)[i];\n });\n labelInfo.labelMark.setComponent(component);\n }\n });\n }\n });\n }\n\n protected _initTextMarkStyle() {\n this._labelInfoMap.forEach(labelInfos => {\n labelInfos.forEach(info => {\n const { labelMark, labelSpec, series } = info;\n this.initMarkStyleWithSpec(labelMark, labelSpec, undefined);\n if (isFunction(labelSpec?.getStyleHandler)) {\n const styleHandler = labelSpec.getStyleHandler(series);\n styleHandler?.call(series, labelMark);\n }\n if (labelMark.stateStyle?.normal?.lineWidth) {\n labelMark.setAttribute('stroke', series.getColorAttribute(), 'normal', AttributeLevel.Base_Series);\n }\n });\n });\n }\n\n updateLayoutAttribute(): void {\n super.updateLayoutAttribute();\n this._labelComponentMap.forEach((labelInfoCb, labelComponent) => {\n const labelInfo = labelInfoCb();\n if (isArray(labelInfo)) {\n this._updateMultiLabelAttribute(labelInfo, labelComponent);\n } else {\n this._updateSingleLabelAttribute(labelInfo, labelComponent);\n }\n });\n }\n\n protected _updateMultiLabelAttribute(labelInfo: ILabelInfo[], labelComponent: IComponentMark) {\n this._updateLabelComponentAttribute(\n labelComponent.getProduct() as ILabel,\n labelInfo.map(({ baseMark }) => baseMark.getProduct()),\n labelInfo\n );\n }\n\n protected _updateSingleLabelAttribute(labelInfo: ILabelInfo, labelComponent: IComponentMark) {\n const { baseMark } = labelInfo;\n this._updateLabelComponentAttribute(labelComponent.getProduct() as ILabel, baseMark.getProduct(), [labelInfo]);\n }\n\n protected _updateLabelComponentAttribute(\n component: ILabel,\n target: IVGrammarMark | IVGrammarMark[],\n labelInfos: ILabelInfo[]\n ) {\n const dependCmp = this._option.getAllComponents().filter(cmp => cmp.type === 'totalLabel');\n component\n .target(target)\n .configure({ interactive: false })\n .depend(dependCmp.map(cmp => cmp.getMarks()[0].getProduct()))\n .labelStyle((mark: IVGrammarMark, params: Record) => {\n const labelInfo = labelInfos[params.labelIndex];\n if (labelInfo) {\n const { labelSpec, labelMark } = labelInfo;\n const rule = labelMark.getRule();\n const interactive = this._interactiveConfig(labelSpec);\n /** arc label When setting the centerOffset of the spec, the label also needs to be offset accordingly, and the centerOffset is not in the labelSpec */\n const centerOffset = (this._spec as any)?.centerOffset ?? 0;\n const spec = mergeSpec(\n {\n textStyle: { pickable: labelSpec.interactive === true, ...labelSpec.style },\n overlap: {\n avoidMarks: this._option\n .getAllComponents()\n .filter(cmp => cmp.type === 'totalLabel')\n .map(cmp => cmp.getMarks()[0].getProductId())\n },\n x: 0,\n y: 0\n },\n defaultLabelConfig(rule, labelInfo),\n {\n ...pickWithout(labelSpec, ['position', 'style', 'state', 'type']),\n ...interactive,\n centerOffset\n }\n );\n // TODO 可以优化。vgrammar 的 label 图元类型分发是完全依赖 baseMark 的类型。默认情况下,line/area 图元的标签会使用'line-data'标签,此时需要 vchart 将类型传给 vgrammar\n if (rule === 'line' || rule === 'area') {\n spec.type = rule;\n }\n return spec;\n }\n })\n .encode((datum, element, params: Record) => {\n const labelInfo = labelInfos[params.labelIndex];\n if (labelInfo) {\n const { labelSpec, labelMark } = labelInfos[params.labelIndex];\n return labelMark.skipEncode\n ? { data: datum }\n : textAttribute(labelInfos[params.labelIndex], datum, labelSpec.formatMethod, labelSpec.formatter);\n }\n })\n .size(() => labelInfos[0].series.getRegion().getLayoutRect());\n }\n\n compileMarks() {\n this.getMarks().forEach(m => {\n const labelInfo = this._labelComponentMap.get(m)();\n let group;\n if (isArray(labelInfo)) {\n group = labelInfo[0].series.getRegion().getGroupMark().getProduct() as IGroupMark;\n } else {\n group = labelInfo.series.getRegion().getGroupMark().getProduct() as IGroupMark;\n }\n m.compile({ group });\n m.getProduct()?.configure({\n context: {\n model: this,\n labelInfo\n }\n });\n });\n }\n\n getVRenderComponents() {\n const labels: any[] = [];\n this._labelComponentMap.forEach((info, component) => {\n const graphicItem = component.getProduct().getGroupGraphicItem();\n if (graphicItem) {\n labels.push(graphicItem);\n }\n });\n return labels;\n }\n}\n\nexport const registerLabel = () => {\n registerVGrammarLabel();\n registerLabelMark();\n registerComponentMark();\n Factory.registerComponent(Label.type, Label, true);\n};\n","import { type ILabelMark, registerLabelMark } from '../../mark/label';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport { AttributeLevel, LayoutZIndex, STACK_FIELD_TOTAL, STACK_FIELD_TOTAL_TOP } from '../../constant';\nimport type { MarkType } from '../../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum, type IMark } from '../../mark/interface';\nimport { mergeSpec } from '../../util/spec/merge-spec';\nimport type { ICartesianSeries, ISeries } from '../../series/interface';\nimport type { IGroupMark, IView } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerLabel as registerVGrammarLabel } from '@visactor/vgrammar-core';\nimport { textAttribute } from './util';\nimport { BaseLabelComponent } from './base-label';\nimport type { IModelInitOption, IModelSpecInfo } from '../../model/interface';\nimport type { Datum, Maybe } from '../../typings';\nimport { Factory } from '../../core/factory';\nimport { registerComponentMark } from '../../mark/component';\nimport type { IChartSpecInfo } from '../../chart/interface';\n\nexport class TotalLabel extends BaseLabelComponent {\n static type = ComponentTypeEnum.totalLabel;\n type = ComponentTypeEnum.totalLabel;\n name: string = ComponentTypeEnum.totalLabel;\n\n static specKey = 'totalLabel';\n specKey = 'totalLabel';\n\n layoutZIndex: number = LayoutZIndex.Label;\n\n private _textMark?: ILabelMark;\n private _baseMark?: IMark;\n\n static getSpecInfo(chartSpec: any, chartSpecInfo?: IChartSpecInfo): Maybe {\n const specInfo: IModelSpecInfo[] = [];\n chartSpecInfo?.region?.forEach((regionInfo, i) => {\n regionInfo.seriesIndexes?.forEach(seriesIndex => {\n const { spec } = chartSpecInfo.series[seriesIndex];\n const labelSpec = spec[this.specKey];\n if (labelSpec?.visible) {\n specInfo.push({\n spec: labelSpec,\n type: ComponentTypeEnum.totalLabel,\n specPath: ['series', seriesIndex, this.specKey],\n // 这里的 specIndex 是 region 的 index,用于 region 定位\n specIndex: i\n });\n }\n });\n });\n return specInfo;\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n this._initTextMark();\n this._initLabelComponent();\n }\n\n protected _initTextMark() {\n const series = this._getSeries();\n if (series.getSpec().totalLabel?.visible) {\n const mark = series.getMarksInType([MarkTypeEnum.rect, MarkTypeEnum.symbol])[0];\n const textMark = this._createMark({ type: MarkTypeEnum.label, name: `${mark.name}-total-label` }) as ILabelMark;\n this._baseMark = mark;\n this._textMark = textMark;\n this._initTextMarkStyle();\n }\n }\n\n _initTextMarkStyle() {\n super.initMarkStyleWithSpec(this._textMark, this._spec);\n this.setMarkStyle(\n this._textMark,\n {\n text: (datum: Datum) => {\n return datum[STACK_FIELD_TOTAL];\n }\n },\n 'normal',\n AttributeLevel.Default\n );\n }\n\n protected _initLabelComponent() {\n const series = this._getSeries();\n const component = this._createMark(\n { type: MarkTypeEnum.component, name: `${series.name}-total-label-component` },\n {\n componentType: 'label',\n noSeparateStyle: true,\n support3d: this._spec.support3d\n }\n );\n if (component) {\n this._marks.addMark(component);\n }\n }\n\n updateLayoutAttribute(): void {\n super.updateLayoutAttribute();\n const series = this._getSeries();\n this._marks.forEach((componentMark, index) => {\n const component = componentMark.getProduct() as ReturnType;\n component\n .target(this._baseMark.getProduct())\n .configure({ interactive: false })\n .labelStyle(() => {\n if (this._baseMark) {\n const { offset, animation, overlap } = this._spec;\n const interactive = this._interactiveConfig(this._spec);\n return mergeSpec(\n {\n textStyle: { pickable: this._spec.interactive === true },\n position: totalLabelPosition(series, this._baseMark.type),\n x: 0,\n y: 0\n },\n {\n offset,\n animation,\n overlap,\n dataFilter: (data: any) => {\n return data.filter((d: any) => d.data[STACK_FIELD_TOTAL_TOP]);\n },\n ...interactive\n }\n );\n }\n })\n .encode(datum => {\n return textAttribute(\n {\n baseMark: this._baseMark,\n labelMark: this._textMark,\n series,\n labelSpec: series.getSpec().totalLabel\n },\n datum,\n this._spec.formatMethod\n );\n })\n .size(() => this._regions[0].getLayoutRect());\n });\n }\n\n compileMarks() {\n this.getMarks().forEach(m => {\n const group = this._regions[0].getGroupMark().getProduct() as IGroupMark;\n m.compile({ group });\n m.getProduct()?.configure({\n context: {\n model: this\n }\n });\n });\n }\n\n getVRenderComponents() {\n const labels: any[] = [];\n this.getMarks().forEach(m => {\n const graphicItem = m.getProduct().getGroupGraphicItem();\n if (graphicItem) {\n labels.push(graphicItem);\n }\n });\n return labels;\n }\n\n protected _getSeries() {\n return this._option.getSeriesInIndex([this.getSpecPath()[1] as number])[0];\n }\n}\n\nexport function totalLabelPosition(series: ISeries, type: MarkType) {\n let position;\n switch (type) {\n case 'rect':\n position = (series as ICartesianSeries).direction === 'horizontal' ? 'right' : 'top';\n break;\n case 'symbol':\n default:\n position = 'top';\n }\n return position;\n}\n\nexport const registerTotalLabel = () => {\n registerVGrammarLabel();\n registerLabelMark();\n registerComponentMark();\n Factory.registerComponent(TotalLabel.type, TotalLabel, true);\n};\n","import type {\n IGroup,\n IImage,\n INode,\n ISymbol,\n IImageGraphicAttribute,\n IRichText,\n IRichTextGraphicAttribute,\n ILine,\n ILineGraphicAttribute\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isValidNumber, merge } from '@visactor/vutils';\nimport { Segment } from '../segment';\nimport type { TagAttributes } from '../tag';\n// eslint-disable-next-line no-duplicate-imports\nimport { Tag } from '../tag';\nimport { Marker } from './base';\nimport { DEFAULT_MARK_POINT_TEXT_STYLE_MAP, DEFAULT_MARK_POINT_THEME } from './config';\nimport type { IItemContent, IItemLine, MarkPointAttrs } from './type';\n// eslint-disable-next-line no-duplicate-imports\nimport { IMarkPointItemPosition } from './type';\nimport type { Point } from '../core/type';\nimport type { ComponentOptions } from '../interface';\nimport { loadMarkPointComponent } from './register';\nimport { computeOffsetForlimit } from '../util/limit-shape';\n\nloadMarkPointComponent();\nexport class MarkPoint extends Marker {\n name = 'markPoint';\n static defaultAttributes = DEFAULT_MARK_POINT_THEME;\n\n private _item!: ISymbol | Tag | IImage | IRichText;\n\n private _line?: Segment;\n\n private _decorativeLine!: ILine;\n\n constructor(attributes: MarkPointAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, MarkPoint.defaultAttributes, attributes));\n }\n\n protected setLabelPos() {\n //do nothing\n }\n\n protected setItemAttributes(\n item: ISymbol | Tag | IImage | IRichText,\n itemContent: IItemContent,\n itemPosition: Point,\n itemType: 'symbol' | 'text' | 'image' | 'richText' | 'custom'\n ) {\n if (!item) {\n return;\n }\n const {\n autoRotate = true,\n refX = 0,\n refY = 0,\n refAngle = 0,\n textStyle = {},\n richTextStyle = {},\n imageStyle = {},\n position = IMarkPointItemPosition.middle\n } = itemContent;\n const itemAngle = this._line?.getEndAngle() || 0;\n const itemOffsetX = refX * Math.cos(itemAngle) + refY * Math.cos(itemAngle - Math.PI / 2);\n const itemOffsetY = refX * Math.sin(itemAngle) + refY * Math.sin(itemAngle - Math.PI / 2);\n if (itemType === 'text') {\n item.setAttributes({\n ...(textStyle as TagAttributes),\n textStyle: {\n ...DEFAULT_MARK_POINT_TEXT_STYLE_MAP[itemContent?.position || 'end'],\n ...textStyle.textStyle\n }\n });\n } else if (itemType === 'richText') {\n item.setAttributes({\n dx: this.getItemDx(item, position, richTextStyle) + (richTextStyle.dx || 0),\n dy: this.getItemDy(item, position, richTextStyle) + (richTextStyle.dy || 0)\n });\n } else if (itemType === 'image') {\n item.setAttributes({\n dx: this.getItemDx(item, position, imageStyle) + (imageStyle.dx || 0),\n dy: this.getItemDy(item, position, imageStyle) + (imageStyle.dy || 0)\n });\n }\n item.setAttributes({\n x: itemPosition.x + (itemOffsetX || 0),\n y: itemPosition.y + (itemOffsetY || 0),\n angle: autoRotate && itemAngle + refAngle\n });\n }\n\n protected getItemDx(\n item: ISymbol | Tag | IImage | IRichText,\n position: keyof typeof IMarkPointItemPosition,\n style?: IImageGraphicAttribute | IRichTextGraphicAttribute\n ) {\n const width = (item as IGroup)?.AABBBounds?.width() ?? (style?.width || 0);\n if (position.includes('inside')) {\n return -width;\n }\n if (position === 'insideTop') {\n return 0;\n }\n return 0;\n }\n\n protected getItemDy(\n item: ISymbol | Tag | IImage | IRichText,\n position: keyof typeof IMarkPointItemPosition,\n style?: IImageGraphicAttribute | IRichTextGraphicAttribute\n ) {\n const height = (item as IGroup)?.AABBBounds?.height() ?? (style?.height || 0);\n if (position.includes('top') || position.includes('Top')) {\n return -height;\n }\n if (position.includes('middle') || position.includes('Middle')) {\n return -height / 2;\n }\n return 0;\n }\n\n protected initItem(itemContent: IItemContent, itemPosition: Point) {\n const { type = 'text', symbolStyle, richTextStyle, imageStyle, renderCustomCallback } = itemContent;\n let item: ISymbol | Tag | IImage | IRichText | IGroup;\n if (type === 'symbol') {\n item = graphicCreator.symbol({\n ...itemPosition,\n ...symbolStyle\n });\n } else if (type === 'text') {\n item = new Tag({\n ...itemPosition\n });\n } else if (type === 'richText') {\n item = graphicCreator.richtext({\n ...itemPosition,\n ...richTextStyle\n });\n } else if (type === 'image') {\n item = graphicCreator.image({\n ...itemPosition,\n ...imageStyle\n });\n } else if (type === 'custom' && renderCustomCallback) {\n item = renderCustomCallback();\n }\n this.setItemAttributes(item, itemContent, itemPosition, type);\n return item;\n }\n\n protected getItemLineAttr(itemLine: IItemLine, position: Point, itemPosition: Point) {\n let points: Point[] = [];\n const { type = 'type-s' } = itemLine;\n if (type === 'type-do') {\n points = [\n position,\n {\n x: (position.x + itemPosition.x) / 2,\n y: itemPosition.y\n },\n itemPosition\n ];\n } else if (type === 'type-po') {\n points = [\n position,\n {\n x: itemPosition.x,\n y: position.y\n },\n itemPosition\n ];\n } else if (type === 'type-op') {\n points = [\n position,\n {\n x: position.x,\n y: itemPosition.y\n },\n itemPosition\n ];\n } else {\n points = [position, itemPosition];\n }\n return points;\n }\n\n protected setItemLineAttr(itemLine: IItemLine, position: Point, itemPosition: Point, visible: boolean) {\n if (this._line) {\n const { startSymbol, endSymbol, lineStyle } = itemLine;\n const points = this.getItemLineAttr(itemLine, position, itemPosition);\n this._line.setAttributes({\n points,\n startSymbol,\n endSymbol,\n lineStyle,\n visible\n });\n }\n }\n\n protected getDecorativeLineAttr(itemLine: IItemLine, itemPosition: Point) {\n const decorativeLength = itemLine?.decorativeLine?.length || 10;\n const itemAngle = this._line.getEndAngle() || 0;\n const startPointOffsetX = (decorativeLength / 2) * Math.cos(itemAngle - Math.PI / 2);\n const startPointOffsetY = (decorativeLength / 2) * Math.sin(itemAngle - Math.PI / 2);\n const endPointOffsetX = (-decorativeLength / 2) * Math.cos(itemAngle - Math.PI / 2);\n const endPointOffsetY = (-decorativeLength / 2) * Math.sin(itemAngle - Math.PI / 2);\n return {\n startPointOffsetX,\n startPointOffsetY,\n endPointOffsetX,\n endPointOffsetY\n };\n }\n\n protected setDecorativeLineAttr(itemLine: IItemLine, itemPosition: Point, visible: boolean) {\n if (this._decorativeLine) {\n const { lineStyle } = itemLine;\n const { startPointOffsetX, startPointOffsetY, endPointOffsetX, endPointOffsetY } = this.getDecorativeLineAttr(\n itemLine,\n itemPosition\n );\n this._decorativeLine.setAttributes({\n points: [\n {\n x: itemPosition.x + startPointOffsetX,\n y: itemPosition.y + startPointOffsetY\n },\n {\n x: itemPosition.x + endPointOffsetX,\n y: itemPosition.y + endPointOffsetY\n }\n ] as IPointLike[],\n ...(lineStyle as Partial),\n visible\n });\n }\n }\n\n protected setAllOfItemsAttr(itemPosition: Point) {\n const { position, itemLine = {}, itemContent = {}, limitRect } = this.attribute as MarkPointAttrs;\n const { type = 'text', confine } = itemContent;\n if (limitRect && confine) {\n const { x, y, width, height } = limitRect;\n const { dx, dy } = computeOffsetForlimit(this._item, {\n x1: x,\n y1: y,\n x2: x + width,\n y2: y + height\n });\n itemPosition.x = itemPosition.x + dx;\n itemPosition.y = itemPosition.y + dy;\n }\n this.setItemAttributes(this._item, itemContent, itemPosition, type);\n this.setItemLineAttr(itemLine, position, itemPosition, itemLine.visible);\n this.setDecorativeLineAttr(itemLine, itemPosition, itemLine.decorativeLine?.visible);\n }\n\n protected initMarker(container: IGroup) {\n const { position, itemContent = {} } = this.attribute as MarkPointAttrs;\n const itemPosition = {\n x: position.x + (itemContent.offsetX || 0),\n y: position.y + (itemContent.offsetY || 0)\n };\n\n const line = new Segment({\n points: [],\n pickable: false // 组件容器本身不参与拾取\n });\n line.name = 'mark-point-line';\n this._line = line;\n container.add(line as unknown as INode);\n\n const decorativeLine = graphicCreator.line({\n points: []\n });\n decorativeLine.name = 'mark-point-decorativeLine';\n this._decorativeLine = decorativeLine;\n container.add(decorativeLine as unknown as INode);\n\n // 为了强制将itemContent限制在limitRect内, 所以需要先绘制item, 然后根据item bounds 动态调整位置\n const item = this.initItem(itemContent as any, itemPosition);\n this._item = item;\n\n // 由于itemLine的指向也要变化, 所以需要对所有的内容进行渲染\n this.setAllOfItemsAttr(itemPosition);\n container.add(item as unknown as INode);\n }\n\n protected updateMarker() {\n const { position, itemContent = {} } = this.attribute as MarkPointAttrs;\n const { type = 'text' } = itemContent;\n\n const itemPosition = {\n x: position.x + (itemContent.offsetX || 0),\n y: position.y + (itemContent.offsetY || 0)\n };\n\n // 为了强制将itemContent限制在limitRect内, 所以需要先绘制item, 然后根据item bounds 动态调整位置\n this.setItemAttributes(this._item, itemContent, itemPosition, type);\n // 由于itemLine的指向也要变化, 所以需要对所有的内容进行渲染\n this.setAllOfItemsAttr(itemPosition);\n }\n\n protected isValidPoints() {\n const { position } = this.attribute as MarkPointAttrs;\n if (isValidNumber(position.x) && isValidNumber(position.y)) {\n return true;\n }\n return false;\n }\n}\n","import { DataView } from '@visactor/vdataset';\nimport type { IMarkPoint, IMarkPointCoordinateSpec, IMarkPointSpec } from './interface';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { markerAggregation } from '../../../data/transforms/aggregation';\nimport { computeClipRange, coordinateLayout, positionLayout, transformLabelAttributes, xyLayout } from '../utils';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\nimport type { MarkPointAttrs } from '@visactor/vrender-components';\nimport { MarkPoint as MarkPointComponent } from '@visactor/vrender-components';\nimport type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEmpty, isValid, isArray } from '@visactor/vutils';\nimport { transformToGraphic } from '../../../util/style';\nimport { BaseMarker } from '../base-marker';\nimport { LayoutZIndex } from '../../../constant';\nimport { Factory } from '../../../core/factory';\nimport type { IGroup } from '@visactor/vrender-core';\nimport type { IPoint } from '../../../typings';\nimport type { IModelSpecInfo } from '../../../model/interface';\nimport { markerFilter } from '../../../data/transforms/marker-filter';\n\nexport class MarkPoint extends BaseMarker implements IMarkPoint {\n static type = ComponentTypeEnum.markPoint;\n type = ComponentTypeEnum.markPoint;\n name: string = ComponentTypeEnum.markPoint;\n\n static specKey = 'markPoint';\n specKey = 'markPoint';\n\n layoutZIndex: number = LayoutZIndex.MarkPoint;\n\n // markPoint组件\n protected declare _markerComponent: MarkPointComponent;\n\n static getSpecInfo(chartSpec: any): Maybe {\n const markPointSpec = chartSpec[this.specKey];\n if (isEmpty(markPointSpec)) {\n return undefined;\n }\n if (!isArray(markPointSpec) && markPointSpec.visible !== false) {\n return [\n {\n spec: markPointSpec,\n specPath: [this.specKey],\n type: ComponentTypeEnum.markPoint\n }\n ];\n }\n const specInfos: IModelSpecInfo[] = [];\n markPointSpec.forEach((m: any, i: number) => {\n if (m.visible !== false) {\n specInfos.push({\n spec: m,\n specIndex: i,\n specPath: [this.specKey, i],\n type: ComponentTypeEnum.markPoint\n });\n }\n });\n return specInfos;\n }\n\n protected _createMarkerComponent() {\n const { itemContent = {}, itemLine = {} } = this._spec;\n const { text: label = {}, symbol, image, richText, ...restItemContent } = itemContent;\n\n const markPointAttrs: MarkPointAttrs = {\n zIndex: this.layoutZIndex,\n interactive: this._spec.interactive ?? false,\n position: { x: 0, y: 0 },\n clipInRange: this._spec.clip ?? false,\n itemContent: {\n symbolStyle: transformToGraphic(symbol?.style),\n imageStyle: image?.style,\n textStyle: transformLabelAttributes(label),\n richTextStyle: richText?.style,\n ...restItemContent // Tips: 因为网站 demo 上已经透出了 imageStyle richTextStyle 的写法,为了兼容所以这个需要在后面覆盖\n }\n };\n\n const { visible, line = {}, ...restItemLine } = itemLine;\n if (visible !== false) {\n markPointAttrs.itemLine = {\n ...restItemLine,\n visible: true,\n lineStyle: transformToGraphic(line.style)\n };\n } else {\n markPointAttrs.itemLine = {\n visible: false\n };\n }\n\n const markPoint = new MarkPointComponent(markPointAttrs);\n return markPoint as unknown as IGroup;\n }\n\n protected _markerLayout() {\n const spec = this._spec;\n const data = this._markerData;\n const relativeSeries = this._relativeSeries;\n const isXYLayout = 'x' in spec && 'y' in spec;\n const isCoordinateLayout = 'coordinate' in spec;\n const isPositionLayout = 'position' in spec;\n const autoRange = spec?.autoRange ?? false;\n\n let point: IPoint;\n if (isXYLayout) {\n point = xyLayout(data, relativeSeries, relativeSeries, relativeSeries, autoRange)[0][0];\n } else if (isCoordinateLayout) {\n point = coordinateLayout(\n data,\n relativeSeries,\n autoRange,\n (spec as IMarkPointCoordinateSpec).coordinatesOffset\n )[0];\n } else if (isPositionLayout) {\n point = positionLayout([spec.position], relativeSeries, spec.regionRelative)[0];\n }\n\n const seriesData = this._relativeSeries.getViewData().latestData;\n const dataPoints = data\n ? data.latestData[0] && data.latestData[0].latestData\n ? data.latestData[0].latestData\n : data.latestData\n : seriesData;\n\n let limitRect;\n if (spec.clip || spec.itemContent?.confine) {\n const { minX, maxX, minY, maxY } = computeClipRange([relativeSeries.getRegion()]);\n limitRect = {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n }\n if (this._markerComponent) {\n const attribute = this._markerComponent.attribute ?? {};\n const textStyle = attribute.itemContent?.textStyle ?? {};\n this._markerComponent.setAttributes({\n position: point,\n itemContent: {\n ...attribute.itemContent,\n textStyle: {\n ...textStyle,\n text: this._spec.itemContent.text?.formatMethod\n ? this._spec.itemContent.text.formatMethod(dataPoints, seriesData)\n : textStyle.text\n }\n },\n limitRect,\n dx: this._layoutOffsetX,\n dy: this._layoutOffsetY\n });\n }\n }\n\n protected _initDataView(): void {\n const spec = this._spec as any;\n const relativeSeries = this._relativeSeries;\n const isXYProcess = isValid(spec.x) && isValid(spec.y);\n const isCoordinateProcess = isValid(spec.coordinate);\n if (!isCoordinateProcess && !isXYProcess) {\n return;\n }\n\n registerDataSetInstanceTransform(this._option.dataSet, 'markerAggregation', markerAggregation);\n registerDataSetInstanceTransform(this._option.dataSet, 'markerFilter', markerFilter);\n\n let options;\n if (isXYProcess) {\n options = [this._processSpecXY(spec.x, spec.y)];\n } else if (isCoordinateProcess) {\n options = this._processSpecCoo(spec);\n }\n\n const data = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` });\n data.parse([relativeSeries.getViewData()], {\n type: 'dataview'\n });\n data.transform({\n type: 'markerAggregation',\n options\n });\n\n if (options) {\n data.transform({\n type: 'markerFilter',\n options: this._getAllRelativeSeries()\n });\n }\n data.target.on('change', () => {\n this._markerLayout();\n });\n this._markerData = data;\n }\n}\n\nexport const registerMarkPoint = () => {\n Factory.registerComponent(MarkPoint.type, MarkPoint);\n};\n","export var IOperateType;\n\n!function(IOperateType) {\n IOperateType.drawStart = \"drawStart\", IOperateType.drawEnd = \"drawEnd\", IOperateType.drawing = \"drawing\", \n IOperateType.moving = \"moving\", IOperateType.moveStart = \"moveStart\", IOperateType.moveEnd = \"moveEnd\", \n IOperateType.brushClear = \"brushClear\";\n}(IOperateType || (IOperateType = {}));","export const DEFAULT_BRUSH_ATTRIBUTES = {\n trigger: 'pointerdown',\n updateTrigger: 'pointermove',\n endTrigger: 'pointerup',\n resetTrigger: 'pointerupoutside',\n hasMask: true,\n brushMode: 'single',\n brushType: 'rect',\n brushStyle: {\n fill: '#B0C8F9',\n fillOpacity: 0.2,\n stroke: '#B0C8F9',\n strokeWidth: 2\n },\n brushMoved: true,\n removeOnClick: true,\n delayType: 'throttle',\n delayTime: 10,\n interactiveRange: {\n y1: -Infinity,\n y2: Infinity,\n x1: -Infinity,\n x2: Infinity\n }\n};\n\nexport const DEFAULT_SIZE_THRESHOLD = 5;\n","/**\n * @description 框选组件\n */\nimport type { FederatedPointerEvent, IGroup, IPolygon } from '@visactor/vrender-core';\nimport { graphicCreator, vglobal } from '@visactor/vrender-core';\nimport type { IBounds, IPointLike } from '@visactor/vutils';\nimport { cloneDeep, debounce, merge, polygonContainPoint, throttle } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { BrushAttributes } from './type';\nimport { IOperateType } from './type';\nimport { DEFAULT_BRUSH_ATTRIBUTES, DEFAULT_SIZE_THRESHOLD } from './config';\nimport type { ComponentOptions } from '../interface';\nimport { loadBrushComponent } from './register';\n\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\n\nloadBrushComponent();\nexport class Brush extends AbstractComponent> {\n name = 'brush';\n static defaultAttributes = DEFAULT_BRUSH_ATTRIBUTES;\n\n private _container!: IGroup;\n\n // 绘制mask时的相关属性\n private _activeDrawState = false; // 用于标记绘制状态\n private _cacheDrawPoints: IPointLike[] = []; // 用于维护鼠标走过的路径,主要用于绘制mask的点\n private _isDrawedBeforeEnd = false;\n // 移动mask时的相关属性\n private _activeMoveState = false; // 用于标记移动状态\n private _operatingMaskMoveDx = 0; // 用于标记移动的位移量\n private _operatingMaskMoveDy = 0;\n private _operatingMaskMoveRangeX: [number, number] = [-Infinity, Infinity];\n private _operatingMaskMoveRangeY: [number, number] = [-Infinity, Infinity];\n private _cacheMovePoint!: IPointLike; // 用于维护鼠标所在位置,主要用于计算位移量\n\n private _operatingMask!: IPolygon; // 用于标记正在绘制的mask 或 正在移动的mask\n\n // 透出给上层的属性(主要是所有mask的AABBBounds,这里用的是dict存储方便添加和修改)\n private _brushMaskAABBBoundsDict: { [name: string]: IBounds } = {};\n\n constructor(attributes: BrushAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Brush.defaultAttributes, attributes));\n }\n\n private _bindBrushEvents(): void {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n const {\n delayType = 'throttle',\n delayTime = 0,\n trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger,\n updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger,\n endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger,\n resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger\n } = this.attribute as BrushAttributes;\n // 拖拽绘制开始\n this.stage.addEventListener(trigger, this._onBrushStart as EventListener);\n // 拖拽绘制时\n this.stage.addEventListener(updateTrigger, delayMap[delayType](this._onBrushing, delayTime) as EventListener);\n // 拖拽绘制结束\n this.stage.addEventListener(endTrigger, this._onBrushEnd as EventListener);\n this.stage.addEventListener(resetTrigger, this._onBrushEnd as EventListener);\n }\n\n private _isPosInBrushMask(e: FederatedPointerEvent) {\n const pos = this.eventPosToStagePos(e);\n const brushMasks = this._container.getChildren();\n for (let i = 0; i < brushMasks.length; i++) {\n const { points = [], dx = 0, dy = 0 } = (brushMasks[i] as IPolygon).attribute;\n const pointsConsiderOffset: IPointLike[] = points.map((point: IPointLike) => {\n return {\n x: point.x + dx,\n y: point.y + dy\n };\n });\n if (polygonContainPoint(pointsConsiderOffset, pos.x, pos.y)) {\n this._operatingMask = brushMasks[i] as IPolygon;\n return true;\n }\n }\n return false;\n }\n\n /**\n * 开始绘制 或 移动\n * @description\n * 1. 判断状态: 如果在brushMask中,则属于移动状态; 否则属于绘制状态\n *(移动状态和绘制状态互斥, 且移动状态考虑brushMoved配置, 如果在brush点内但brushMoved为false, 则走绘制状态, 而非两个状态都不响应, 此效果与echarts保持一致)\n * 2. 判断坐标是否在有效交互范围内\n * 2. 如果是移动状态: 标记移动状态 & 标记正在移动的mask & 初始化mask的dx和dy\n * 3. 如果是绘制状态: 标记绘制状态 & 标记正在绘制的mask & 清除之前的mask & 添加新的mask\n */\n private _onBrushStart = (e: FederatedPointerEvent) => {\n if (this._outOfInteractiveRange(e)) {\n return;\n }\n e.stopPropagation();\n\n const brushMoved = this.attribute.brushMoved ?? true;\n this._activeMoveState = brushMoved && this._isPosInBrushMask(e); // 如果是移动状态,在这里会标记operatingMask为正在移动的mask\n this._activeDrawState = !this._activeMoveState;\n\n this._activeDrawState && this._initDraw(e); // 如果是绘制状态,在这里会标记operatingMask为正在绘制的mask\n this._activeMoveState && this._initMove(e);\n };\n\n /**\n * 绘制 或 移动 中\n * @description\n * 1. 如果是绘制状态: 更新_cacheDrawPoints 和 mask的points属性\n * 2. 如果是移动状态: 标记移动状态 & 计算位移量 & 给被移动的mask偏移属性\n */\n private _onBrushing = (e: FederatedPointerEvent) => {\n if (this._outOfInteractiveRange(e)) {\n return;\n }\n\n if (this._activeDrawState || this._activeMoveState) {\n e.stopPropagation();\n }\n\n this._activeDrawState && this._drawing(e); // 如果是绘制状态,在这里会标记operatingMask为正在绘制的mask\n this._activeMoveState && this._moving(e);\n };\n\n /**\n * 结束绘制 和 移动\n * @description 取消绘制 和 移动 状态\n */\n private _onBrushEnd = (e: FederatedPointerEvent) => {\n e.preventDefault();\n const { removeOnClick = true } = this.attribute as BrushAttributes;\n if (this._activeDrawState && !this._isDrawedBeforeEnd && removeOnClick) {\n this._container.incrementalClearChild();\n this._brushMaskAABBBoundsDict = {};\n this._dispatchEvent(IOperateType.brushClear, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n } else {\n if (this._activeDrawState) {\n this._dispatchEvent(IOperateType.drawEnd, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n\n if (this._activeMoveState) {\n this._dispatchEvent(IOperateType.moveEnd, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n }\n\n this._activeDrawState = false;\n this._activeMoveState = false;\n this._isDrawedBeforeEnd = false;\n if (this._operatingMask) {\n this._operatingMask.setAttribute('pickable', false);\n }\n };\n\n /**\n * 初始化绘制状态\n * @description 清除之前的mask & 添加新的mask\n */\n private _initDraw(e: FederatedPointerEvent) {\n const { brushMode } = this.attribute as BrushAttributes;\n const pos = this.eventPosToStagePos(e);\n this._cacheDrawPoints = [pos];\n this._isDrawedBeforeEnd = false;\n if (brushMode === 'single') {\n this._brushMaskAABBBoundsDict = {};\n this._container.incrementalClearChild();\n }\n this._addBrushMask();\n this._dispatchEvent(IOperateType.drawStart, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n\n /**\n * 初始化移动状态\n * @description 初始化mask的dx和dy\n */\n private _initMove(e: FederatedPointerEvent) {\n this._cacheMovePoint = this.eventPosToStagePos(e);\n\n this._operatingMaskMoveDx = this._operatingMask.attribute.dx ?? 0;\n this._operatingMaskMoveDy = this._operatingMask.attribute.dy ?? 0;\n\n // 计算最大移动范围, 为了将brushMask限制在交互范围内\n const { interactiveRange } = this.attribute as BrushAttributes;\n const { minY = -Infinity, maxY = Infinity, minX = -Infinity, maxX = Infinity } = interactiveRange;\n\n const { x1, x2, y1, y2 } = this._operatingMask.globalAABBBounds;\n const minMoveStepX = minX - x1;\n const maxMoveStepX = maxX - x2;\n const minMoveStepY = minY - y1;\n const maxMoveStepY = maxY - y2;\n\n this._operatingMaskMoveRangeX = [minMoveStepX, maxMoveStepX];\n this._operatingMaskMoveRangeY = [minMoveStepY, maxMoveStepY];\n\n this._operatingMask.setAttribute('pickable', true);\n this._dispatchEvent(IOperateType.moveStart, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n\n /**\n * 绘制中\n * @description 更新_cacheDrawPoints 和 mask的points属性\n */\n private _drawing(e: FederatedPointerEvent) {\n const pos = this.eventPosToStagePos(e);\n const { x1 = 0, x2 = 0, y1 = 0, y2 = 0 } = this._operatingMask?._AABBBounds;\n const { sizeThreshold = DEFAULT_SIZE_THRESHOLD, brushType } = this.attribute as BrushAttributes;\n\n const cacheLength = this._cacheDrawPoints.length;\n this._isDrawedBeforeEnd = !!(Math.abs(x2 - x1) > sizeThreshold || Math.abs(y1 - y2) > sizeThreshold);\n\n // 如果当前点的位置和上一次点的位置一致,则无需更新\n if (cacheLength > 0) {\n const lastPos = this._cacheDrawPoints[this._cacheDrawPoints.length - 1] ?? ({} as IPointLike);\n if (pos.x === lastPos.x && pos.y === lastPos.y) {\n return;\n }\n }\n // 更新交互位置\n if (brushType === 'polygon' || cacheLength <= 1) {\n this._cacheDrawPoints.push(pos);\n } else {\n this._cacheDrawPoints[cacheLength - 1] = pos;\n }\n // 更新mask形状\n const maskPoints = this._computeMaskPoints();\n this._operatingMask.setAttribute('points', maskPoints);\n this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds;\n this._dispatchEvent(IOperateType.drawing, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n\n /**\n * 移动中\n * @description 标记移动状态 & 计算位移量 & 给被移动的mask偏移属性\n */\n private _moving(e: FederatedPointerEvent) {\n const startPos = this._cacheMovePoint;\n const pos = this.eventPosToStagePos(e);\n // 如果当前点的位置和上一次点的位置一致,则无需更新\n if (pos.x === startPos?.x && pos.y === startPos?.y) {\n return;\n }\n\n const moveStepX = pos.x - startPos.x;\n const moveStepY = pos.y - startPos.y;\n const moveX =\n Math.min(this._operatingMaskMoveRangeX[1], Math.max(this._operatingMaskMoveRangeX[0], moveStepX)) +\n this._operatingMaskMoveDx;\n const moveY =\n Math.min(this._operatingMaskMoveRangeY[1], Math.max(this._operatingMaskMoveRangeY[0], moveStepY)) +\n this._operatingMaskMoveDy;\n\n this._operatingMask.setAttributes({\n dx: moveX,\n dy: moveY\n });\n this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds;\n this._dispatchEvent(IOperateType.moving, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n\n /**\n * 构造brushMask的points属性\n * @description 根据不同的brushType从_cacheDrawPoints中取points\n * 1. 'rect': 只取鼠标轨迹_cacheDrawPoints的第一个点和最后一个点\n * 2. 'x': 只取鼠标轨迹_cacheDrawPoints的第一个点和最后一个点的x坐标\n * 3. 'y': 只取鼠标轨迹_cacheDrawPoints的第一个点和最后一个点的y坐标\n * 4. 'polygon': 取鼠标轨迹_cacheDrawPoints的所有点\n */\n private _computeMaskPoints() {\n const { brushType, xRange = [0, 0], yRange = [0, 0] } = this.attribute as BrushAttributes;\n let maskPoints: IPointLike[] = [];\n const startPoint = this._cacheDrawPoints[0];\n const endPoint = this._cacheDrawPoints[this._cacheDrawPoints.length - 1];\n\n if (brushType === 'rect') {\n maskPoints = [\n startPoint,\n {\n x: endPoint.x,\n y: startPoint.y\n },\n endPoint,\n {\n x: startPoint.x,\n y: endPoint.y\n }\n ];\n } else if (brushType === 'x') {\n maskPoints = [\n {\n x: startPoint.x,\n y: yRange[0]\n },\n {\n x: endPoint.x,\n y: yRange[0]\n },\n {\n x: endPoint.x,\n y: yRange[1]\n },\n {\n x: startPoint.x,\n y: yRange[1]\n }\n ];\n } else if (brushType === 'y') {\n maskPoints = [\n {\n x: xRange[0],\n y: startPoint.y\n },\n {\n x: xRange[0],\n y: endPoint.y\n },\n {\n x: xRange[1],\n y: endPoint.y\n },\n {\n x: xRange[1],\n y: startPoint.y\n }\n ];\n } else {\n maskPoints = cloneDeep(this._cacheDrawPoints); // _cacheDrawPoints在不断更新,所以这里需要cloneDeep\n }\n return maskPoints;\n }\n\n private _addBrushMask() {\n const { brushStyle, hasMask } = this.attribute as BrushAttributes;\n const brushMask = graphicCreator.polygon({\n points: cloneDeep(this._cacheDrawPoints), // _cacheDrawPoints在不断更新,所以这里需要cloneDeep\n cursor: 'move',\n pickable: false,\n ...brushStyle,\n opacity: hasMask ? brushStyle.opacity ?? 1 : 0\n });\n brushMask.name = `brush-${Date.now()}`; // 用Date给mask唯一标记\n this._operatingMask = brushMask;\n this._container.add(brushMask);\n this._brushMaskAABBBoundsDict[brushMask.name] = brushMask.AABBBounds;\n }\n\n private _outOfInteractiveRange(e: FederatedPointerEvent) {\n // 在返回坐标时,将其限制在交互范围内\n const { interactiveRange } = this.attribute as BrushAttributes;\n const { minY = -Infinity, maxY = Infinity, minX = -Infinity, maxX = Infinity } = interactiveRange;\n const pos = this.eventPosToStagePos(e);\n if (pos.x > maxX || pos.x < minX || pos.y > maxY || pos.y < minY) {\n return true;\n }\n return false;\n }\n\n /** 事件系统坐标转换为stage坐标 */\n protected eventPosToStagePos(e: FederatedPointerEvent) {\n const { x, y } = vglobal.mapToCanvasPoint(e);\n return {\n x: x - (this.stage?.x || 0),\n y: y - (this.stage?.y || 0)\n };\n }\n\n protected render() {\n this._bindBrushEvents();\n const group = this.createOrUpdateChild('brush-container', {}, 'group') as unknown as IGroup;\n this._container = group;\n }\n\n releaseBrushEvents(): void {\n const {\n delayType = 'throttle',\n delayTime = 0,\n trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger,\n updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger,\n endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger,\n resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger\n } = this.attribute as BrushAttributes;\n this.stage.removeEventListener(trigger, this._onBrushStart as EventListener);\n this.stage.removeEventListener(updateTrigger, delayMap[delayType](this._onBrushing, delayTime) as EventListener);\n this.stage.removeEventListener(endTrigger, this._onBrushEnd as EventListener);\n this.stage.removeEventListener(resetTrigger, this._onBrushEnd as EventListener);\n }\n}\n","import { registerGroup, registerPolygon } from '@visactor/vrender-kits';\n\nexport function loadBrushComponent() {\n registerGroup();\n registerPolygon();\n}\n","import { AttributeLevel, ChartEvent, LayoutZIndex } from '../../constant';\nimport { BaseComponent } from '../base/base-component';\nimport type { IComponentOption } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport { Brush as BrushComponent, IOperateType as BrushEvent } from '@visactor/vrender-components';\nimport type { IBounds, IPointLike, Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { array, isNil, polygonIntersectPolygon, isValid } from '@visactor/vutils';\nimport type { IModelRenderOption, IModelSpecInfo } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport type {\n IGraphic,\n IGroup,\n INode,\n IPolygon,\n IRectGraphicAttribute,\n ISymbolGraphicAttribute\n} from '@visactor/vrender-core';\nimport { transformToGraphic } from '../../util/style';\nimport type { ISeries } from '../../series/interface';\nimport type { IMark } from '../../mark/interface';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { BrushInteractiveRangeAttr, IBrush, IBrushSpec, selectedItemStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEqual } from '@visactor/vutils';\nimport { Factory } from '../../core/factory';\n\nconst IN_BRUSH_STATE = 'inBrush';\nconst OUT_BRUSH_STATE = 'outOfBrush';\n\nexport class Brush extends BaseComponent implements IBrush {\n layoutType: 'none' = 'none';\n static type = ComponentTypeEnum.brush;\n type = ComponentTypeEnum.brush;\n name: string = ComponentTypeEnum.brush;\n\n static specKey = 'brush';\n specKey = 'brush';\n\n layoutZIndex: number = LayoutZIndex.Brush;\n\n // brush组件\n protected _brushComponents!: BrushComponent[];\n protected _relativeRegions!: IRegion[];\n protected _linkedSeries: ISeries[] = [];\n\n private _itemMap: { [regionId: string | number]: IMark[] } = {};\n private _linkedItemMap: { [seriesId: string | number]: IMark[] } = {};\n\n // 用brushName做分组管理的原因是: 如果有多个brush, 某个图元A brush内, 但在B brush外, 该图元state会被B误变成out of brush。 但其实该图元只有在A brush外才能被判断out of brush\n // 用dict做存储因为方便查找和删减对应图元\n protected _inBrushElementsMap: { [brushName: string]: { [elementKey: string]: IElement } } = {};\n protected _outOfBrushElementsMap: { [elementKey: string]: IElement } = {};\n protected _linkedInBrushElementsMap: { [brushName: string]: { [elementKey: string]: IElement } } = {};\n protected _linkedOutOfBrushElementsMap: { [elementKey: string]: IElement } = {};\n\n private _needInitOutState: boolean = true;\n private _cacheInteractiveRangeAttrs: BrushInteractiveRangeAttr[] = [];\n\n private _needDisablePickable: boolean = false;\n\n init() {\n const inBrushMarkAttr = this._transformBrushedMarkAttr(this._spec.inBrush);\n const outOfBrushMarkAttr = this._transformBrushedMarkAttr(this._spec.outOfBrush);\n // 写入mark state, 便于后续state管理\n this._option.getAllSeries().forEach((s: ISeries) => {\n s.getActiveMarks().forEach((m: IMark) => {\n if (m) {\n s.setMarkStyle(\n m,\n {\n ...inBrushMarkAttr\n },\n IN_BRUSH_STATE,\n AttributeLevel.Series\n );\n s.setMarkStyle(\n m,\n {\n ...outOfBrushMarkAttr\n },\n OUT_BRUSH_STATE,\n AttributeLevel.Series\n );\n }\n });\n });\n }\n\n static getSpecInfo(chartSpec: any): Maybe {\n const brushSpec = chartSpec[this.specKey];\n // brush不支持数组的形式配置\n if (isNil(brushSpec) || brushSpec.visible === false) {\n return undefined;\n }\n return [\n {\n spec: brushSpec,\n specPath: [this.specKey],\n type: ComponentTypeEnum.brush\n }\n ];\n }\n\n created() {\n super.created();\n\n // event\n this.initEvent();\n this._bindRegions();\n this._bindLinkedSeries();\n this._initNeedOperatedItem();\n }\n\n protected _extendDataInBrush(elementsMap: { [brushName: string]: { [elementKey: string]: IElement } }) {\n const data = [];\n for (const brushName in elementsMap) {\n for (const elementKey in elementsMap[brushName]) {\n data.push(elementsMap[brushName][elementKey].data[0]);\n }\n }\n return data;\n }\n\n protected _extendDatumOutOfBrush(elementsMap: { [elementKey: string]: IElement }) {\n const data = [];\n for (const elementKey in elementsMap) {\n data.push(elementsMap[elementKey].data[0]);\n }\n return data;\n }\n\n protected _getBrushInteractiveAttr(region: IRegion) {\n const regionLayoutPosition = region.getLayoutStartPoint();\n const regionLayoutRect = region.getLayoutRect();\n const seriesRegionStartX = regionLayoutPosition.x;\n const seriesRegionEndX = seriesRegionStartX + regionLayoutRect.width;\n const seriesRegionStartY = regionLayoutPosition.y;\n const seriesRegionEndY = seriesRegionStartY + regionLayoutRect.height;\n return {\n interactiveRange: {\n minY: seriesRegionStartY,\n maxY: seriesRegionEndY,\n minX: seriesRegionStartX,\n maxX: seriesRegionEndX\n },\n xRange: [seriesRegionStartX, seriesRegionEndX],\n yRange: [seriesRegionStartY, seriesRegionEndY]\n } as BrushInteractiveRangeAttr;\n }\n\n protected _updateBrushComponent(region: IRegion, componentIndex: number) {\n const interactiveAttr = this._getBrushInteractiveAttr(region);\n // 布局变化后, 更新可交互范围\n const brushComponent = this._brushComponents[componentIndex];\n brushComponent.setAttributes(interactiveAttr as any);\n\n // 布局变化后, 更新brush 和 图元状态\n // 方案一:\n // TODO: 更新mask位置(保持选框在画布中的相对位置)\n // TODO: 是否更新mask大小有待商榷(保持选框位置和图元高亮区域一致)\n\n // 方案二: 清空brushMask 和 图元高亮状态\n this._initMarkBrushState(componentIndex, '');\n brushComponent.children[0].removeAllChild();\n this._needInitOutState = true;\n }\n\n protected _createBrushComponent(region: IRegion, componentIndex: number) {\n const interactiveAttr = this._getBrushInteractiveAttr(region);\n const brush = new BrushComponent({\n zIndex: this.layoutZIndex,\n brushStyle: transformToGraphic(this._spec?.style),\n ...interactiveAttr,\n ...this._spec,\n disableTriggerEvent: this._option.disableTriggerEvent\n });\n brush.id = this._spec.id ?? `brush-${this.id}`;\n this.getContainer().add(brush as unknown as INode);\n const { brushMode = 'single' } = this._spec;\n this._brushComponents.push(brush);\n this._cacheInteractiveRangeAttrs.push(interactiveAttr);\n\n brush.addEventListener(BrushEvent.drawStart, (e: any) => {\n this._emitEvent(ChartEvent.brushStart, region);\n });\n\n brush.addEventListener(BrushEvent.moveStart, (e: any) => {\n this._emitEvent(ChartEvent.brushStart, region);\n });\n\n brush.addEventListener(BrushEvent.drawing, (e: any) => {\n // 需要重置out状态的情况:\n // _needInitOutState:框选模式为'single' 且 开始后的第一次drawing时(这里不选择drawStart而选择第一次触发drawing的时机是因为点击空白处也会触发drawStart), 需要重置图元状态\n if (this._needInitOutState && brushMode === 'single') {\n this._initMarkBrushState(componentIndex, OUT_BRUSH_STATE);\n }\n this._needInitOutState = false;\n this._needDisablePickable = true;\n\n this._handleBrushChange(ChartEvent.brushChange, region, e);\n });\n\n brush.addEventListener(BrushEvent.moving, (e: any) => {\n this._handleBrushChange(ChartEvent.brushChange, region, e);\n });\n\n brush.addEventListener(BrushEvent.brushClear, (e: any) => {\n this._initMarkBrushState(componentIndex, '');\n this._needInitOutState = true;\n this._needDisablePickable = false;\n this._handleBrushChange(ChartEvent.brushChange, region, e);\n this._handleBrushChange(ChartEvent.brushClear, region, e);\n });\n\n brush.addEventListener(BrushEvent.drawEnd, (e: any) => {\n this._needInitOutState = true;\n this._needDisablePickable = false;\n this._handleBrushChange(ChartEvent.brushEnd, region, e);\n });\n\n brush.addEventListener(BrushEvent.moveEnd, (e: any) => {\n this._handleBrushChange(ChartEvent.brushEnd, region, e);\n });\n }\n\n private _handleBrushChange(eventType: string, region: IRegion, e: any) {\n const { operateMask } = e.detail as any;\n this._reconfigItem(operateMask, region);\n this._reconfigLinkedItem(operateMask, region);\n\n this._emitEvent(eventType, region);\n }\n\n private _emitEvent(eventType: string, region: IRegion) {\n this.event.emit(eventType, {\n model: this,\n value: {\n // 操作类型\n operateType: eventType,\n // 正在操作的region\n operateRegion: region,\n // 在选框内的 element data\n inBrushData: this._extendDataInBrush(this._inBrushElementsMap),\n // 在选框外的 element data\n outOfBrushData: this._extendDatumOutOfBrush(this._outOfBrushElementsMap),\n // 被链接的系列中:在选框内的 element data\n linkInBrushData: this._extendDataInBrush(this._linkedInBrushElementsMap),\n // 被链接的系列中:在选框外的 element data\n linkOutOfBrushData: this._extendDatumOutOfBrush(this._linkedOutOfBrushElementsMap),\n // 在选框内的 vgrammar elements\n inBrushElementsMap: this._inBrushElementsMap,\n // 在选框外的 vgrammar elements\n outOfBrushElementsMap: this._outOfBrushElementsMap,\n // 被链接的系列中:在选框内的 vgrammar elements\n linkedInBrushElementsMap: this._linkedInBrushElementsMap,\n // 被链接的系列中:在选框外的 vgrammar elements\n linkedOutOfBrushElementsMap: this._linkedOutOfBrushElementsMap\n }\n });\n }\n\n private _transformBrushedMarkAttr(brushedStyle: selectedItemStyle) {\n const styleResult: any = {};\n if (brushedStyle?.symbol) {\n styleResult.symbolType = brushedStyle.symbol;\n }\n if (brushedStyle?.symbolSize) {\n styleResult.size = brushedStyle.symbolSize;\n }\n if (brushedStyle?.color) {\n styleResult.fill = brushedStyle.color;\n }\n if (brushedStyle?.colorAlpha) {\n styleResult.fillOpacity = brushedStyle.colorAlpha;\n }\n return {\n ...transformToGraphic(brushedStyle),\n ...styleResult\n };\n }\n\n private _reconfigItem(operateMask: IPolygon, region: IRegion) {\n // 遍历图元, 更新状态\n this._itemMap[region.id].forEach((mark: IMark) => {\n const grammarMark = mark.getProduct();\n if (!grammarMark || !grammarMark.elements || !grammarMark.elements.length) {\n return;\n }\n const elements = grammarMark.elements;\n elements.forEach((el: IElement) => {\n const graphicItem = el.getGraphicItem();\n const elementKey = mark.id + '_' + el.key;\n // 判断逻辑:\n // 应该被置为inBrush状态的图元:\n // before: 在out brush elment map, 即不在任何brush中\n // now: 在当前brush图元中\n\n // 应该被置为outOfBrush状态的图元:\n // before: 在当前brush 的 in brush element map中, 即在当前brush中\n // now: 不在当前brush中\n if (this._outOfBrushElementsMap?.[elementKey] && this._isBrushContainItem(operateMask, graphicItem)) {\n el.addState(IN_BRUSH_STATE);\n if (!this._inBrushElementsMap[operateMask?.name]) {\n this._inBrushElementsMap[operateMask?.name] = {};\n }\n this._inBrushElementsMap[operateMask?.name][elementKey] = el;\n delete this._outOfBrushElementsMap[elementKey];\n } else if (\n this._inBrushElementsMap?.[operateMask?.name]?.[elementKey] &&\n !this._isBrushContainItem(operateMask, graphicItem)\n ) {\n el.removeState(IN_BRUSH_STATE);\n el.addState(OUT_BRUSH_STATE);\n this._outOfBrushElementsMap[elementKey] = el;\n delete this._inBrushElementsMap[operateMask.name][elementKey];\n }\n graphicItem.setAttribute('pickable', !this._needDisablePickable);\n });\n });\n }\n\n private _reconfigLinkedItem(operateMask: IPolygon, region: IRegion) {\n const regionLayoutPos = region.getLayoutStartPoint();\n const seriesId = region.getSeries().map(s => s.id);\n this._linkedSeries.forEach((s: ISeries) => {\n if (!seriesId.includes(s.id)) {\n const sRegionLayoutPos = s.getRegion().getLayoutStartPoint();\n\n const regionOffsetX = sRegionLayoutPos.x - regionLayoutPos.x;\n const regionOffsetY = sRegionLayoutPos.y - regionLayoutPos.y;\n\n this._linkedItemMap[s.id].forEach((mark: IMark) => {\n const grammarMark = mark.getProduct();\n if (!grammarMark || !grammarMark.elements || !grammarMark.elements.length) {\n return;\n }\n const elements = grammarMark.elements;\n elements.forEach((el: IElement) => {\n const graphicItem = el.getGraphicItem();\n const elementKey = mark.id + '_' + el.key;\n // 判断逻辑:\n // 应该被置为inBrush状态的图元:\n // before: 在out brush elment map, 即不在任何brush中\n // now: 在当前brush图元中\n\n // 应该被置为outOfBrush状态的图元:\n // before: 在当前brush 的 in brush element map中, 即在当前brush中\n // now: 不在当前brush中\n if (\n this._linkedOutOfBrushElementsMap?.[elementKey] &&\n this._isBrushContainItem(operateMask, graphicItem, { dx: regionOffsetX, dy: regionOffsetY })\n ) {\n el.addState(IN_BRUSH_STATE);\n if (!this._linkedInBrushElementsMap[operateMask?.name]) {\n this._linkedInBrushElementsMap[operateMask?.name] = {};\n }\n this._linkedInBrushElementsMap[operateMask?.name][elementKey] = el;\n delete this._linkedOutOfBrushElementsMap[elementKey];\n } else if (\n this._linkedInBrushElementsMap?.[operateMask?.name]?.[elementKey] &&\n !this._isBrushContainItem(operateMask, graphicItem, { dx: regionOffsetX, dy: regionOffsetY })\n ) {\n el.removeState(IN_BRUSH_STATE);\n el.addState(OUT_BRUSH_STATE);\n this._linkedOutOfBrushElementsMap[elementKey] = el;\n }\n graphicItem.setAttribute('pickable', !this._needDisablePickable);\n });\n });\n }\n });\n }\n\n private _isBrushContainItem(brushMask: IPolygon, item: IGraphic, linkedOffset?: { dx: number; dy: number }) {\n if (!brushMask?.globalTransMatrix || !brushMask?.attribute?.points) {\n return false;\n }\n\n // 根据变换矩阵得到brushMask的实际坐标\n const points = brushMask?.attribute?.points ?? [];\n const { a, b, c, d, e, f } = brushMask.globalTransMatrix;\n\n const dx = linkedOffset?.dx || 0;\n const dy = linkedOffset?.dy || 0;\n\n const pointsCoord = points.map((p: IPointLike) => {\n return {\n x: a * p.x + c * p.y + e + dx,\n y: b * p.x + d * p.y + f + dy\n };\n });\n\n brushMask.globalAABBBounds\n .clone()\n .set(\n brushMask.globalAABBBounds.x1 + dx,\n brushMask.globalAABBBounds.y1 + dy,\n brushMask.globalAABBBounds.x2 + dx,\n brushMask.globalAABBBounds.y2 + dy\n );\n\n // 根据变换矩阵得到item的实际坐标\n const x = item.globalTransMatrix.e;\n const y = item.globalTransMatrix.f;\n\n // brush与图表图元进行相交 或 包含判断\n let itemBounds: { x: number; y: number }[] = [];\n if (item.type === 'symbol') {\n const { size: itemSize = 0 } = item?.attribute as ISymbolGraphicAttribute;\n const size = array(itemSize)[0] / 2;\n itemBounds = [\n {\n x: x - size,\n y: y - size\n },\n {\n x: x + size,\n y: y - size\n },\n {\n x: x + size,\n y: y + size\n },\n {\n x: x - size,\n y: y + size\n }\n ];\n return polygonIntersectPolygon(pointsCoord, itemBounds);\n } else if (item.type === 'rect') {\n const { x1, x2, y1, y2 } = item?.AABBBounds;\n const width = Math.abs(x1 - x2);\n const height = Math.abs(y1 - y2);\n itemBounds = [\n {\n x: x,\n y: y\n },\n {\n x: x + width,\n y: y\n },\n {\n x: x + width,\n y: y + height\n },\n {\n x: x,\n y: y + height\n }\n ];\n return polygonIntersectPolygon(pointsCoord, itemBounds);\n }\n return brushMask.globalAABBBounds.intersects(item.globalAABBBounds);\n }\n\n protected _bindRegions() {\n if (isValid(this._spec.regionId) && isValid(this._spec.regionIndex)) {\n this._relativeRegions = this._option.getAllRegions();\n }\n this._relativeRegions = this._option.getRegionsInUserIdOrIndex(\n array(this._spec.regionId),\n array(this._spec.regionIndex)\n );\n }\n\n protected _bindLinkedSeries() {\n if (isValid(this._spec.brushLinkSeriesId) && isValid(this._spec.brushLinkSeriesIndex)) {\n return;\n }\n this._linkedSeries = this._option.getSeriesInUserIdOrIndex(\n array(this._spec.brushLinkSeriesId),\n array(this._spec.brushLinkSeriesIndex)\n );\n }\n\n private _initNeedOperatedItem() {\n const seriesUserId = this._spec.seriesId;\n const seriesIndex = this._spec.seriesIndex;\n this._relativeRegions.forEach(r => {\n const allMarks: IMark[] = [];\n r.getSeries().forEach((s: ISeries) => {\n if (\n (seriesUserId && array(seriesUserId).includes(s.userId.toString())) ||\n (seriesIndex && array(seriesIndex).includes(s.getSpecIndex())) ||\n (!seriesIndex && !seriesUserId)\n ) {\n allMarks.push(...s.getMarksWithoutRoot());\n }\n this._itemMap[r.id] = allMarks;\n });\n });\n\n this._linkedSeries.forEach(s => {\n this._linkedItemMap[s.id] = s.getMarksWithoutRoot();\n });\n }\n\n protected _initMarkBrushState(componentIndex: number, stateName: string) {\n this._brushComponents.forEach((brush, index) => {\n if (index !== componentIndex) {\n brush.children[0].removeAllChild();\n }\n });\n\n this._inBrushElementsMap = {};\n this._outOfBrushElementsMap = {};\n this._linkedInBrushElementsMap = {};\n this._linkedOutOfBrushElementsMap = {};\n\n this._option.getAllSeries().forEach((s: ISeries) => {\n s.getMarksWithoutRoot().forEach((mark: IMark) => {\n const grammarMark = mark.getProduct();\n if (!grammarMark || !grammarMark.elements || !grammarMark.elements.length) {\n return;\n }\n const elements = grammarMark.elements;\n elements.forEach((el: IElement) => {\n const elementKey = mark.id + '_' + el.key;\n el.removeState(IN_BRUSH_STATE);\n el.removeState(OUT_BRUSH_STATE);\n el.addState(stateName);\n this._outOfBrushElementsMap[elementKey] = el;\n this._linkedOutOfBrushElementsMap[elementKey] = el;\n });\n });\n });\n }\n\n protected initEvent() {\n // do nothing\n }\n onRender(ctx: IModelRenderOption): void {\n // do nothing\n }\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return this._brushComponents as unknown as IGroup[];\n }\n\n /**\n * updateSpec\n */\n _compareSpec(spec: T, prevSpec: T) {\n if (this._brushComponents) {\n // FIXME: 这个逻辑放在这个方法里不太妥当?\n this._relativeRegions.forEach((region: IRegion, index: number) => {\n this._updateBrushComponent(region, index);\n });\n }\n const result = super._compareSpec(spec, prevSpec);\n if (!isEqual(prevSpec, spec)) {\n result.reRender = true;\n result.reMake = true;\n }\n return result;\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n if (this._option.disableTriggerEvent) {\n return;\n }\n const brushVisible = this._spec.visible ?? true;\n if (brushVisible) {\n // 创建或更新marker组件\n if (!this._brushComponents) {\n this._brushComponents = [];\n this._relativeRegions.forEach((region: IRegion, index: number) => {\n this._createBrushComponent(region, index);\n });\n } else {\n this._relativeRegions.forEach((region: IRegion, index: number) => {\n this._updateBrushComponent(region, index);\n });\n }\n }\n }\n\n clearGraphic(): void {\n if (this._brushComponents) {\n this._brushComponents.forEach(brush => {\n (brush as any)._container.incrementalClearChild();\n });\n }\n }\n\n clear(): void {\n if (this._brushComponents) {\n this.getContainer()?.removeChild(this._brushComponents as unknown as INode);\n this._brushComponents.forEach(brush => {\n brush.removeAllChild();\n brush.releaseBrushEvents();\n });\n this._brushComponents = null;\n }\n super.clear();\n }\n}\n\nexport const registerBrush = () => {\n Factory.registerComponent(Brush.type, Brush);\n};\n","import { Factory } from './../core/factory';\nimport type { IImageMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IMarkRaw, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerImageGraphic } from '@visactor/vgrammar-core';\n\nexport type IImageMark = IMarkRaw;\n\nexport class ImageMark extends BaseMark implements IImageMark {\n static readonly type = MarkTypeEnum.image;\n readonly type = ImageMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n width: undefined,\n height: undefined,\n lineWidth: 0\n };\n return defaultStyle;\n }\n}\n\nexport const registerImageMark = () => {\n Factory.registerMark(ImageMark.type, ImageMark);\n registerImageGraphic();\n};\n","import { BaseComponent } from '../base/base-component';\nimport { ComponentTypeEnum } from '../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IComponentOption } from '../interface';\nimport type { IRegion } from '../../region/interface';\nimport type { IModelRenderOption, IModelSpecInfo } from '../../model/interface';\nimport { LayoutLevel, LayoutZIndex, PREFIX } from '../../constant';\nimport type { EnableMarkType, ICustomMarkGroupSpec, ICustomMarkSpec } from '../../typings';\nimport type { IGroupMark } from '../../mark/group';\nimport type { MarkTypeEnum } from '../../mark/interface';\nimport type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEqual, isNil, isValid, isValidNumber } from '@visactor/vutils';\nimport { Factory } from '../../core/factory';\nimport { ImageMark, registerImageMark } from '../../mark/image';\nimport type { IGraphic } from '@visactor/vrender-core';\n\n// TODO: 规范范型\nexport class CustomMark extends BaseComponent {\n static type = ComponentTypeEnum.customMark;\n type = ComponentTypeEnum.customMark;\n\n static specKey = 'customMark';\n specKey = 'customMark';\n\n layoutType: 'none' = 'none';\n layoutZIndex: number = LayoutZIndex.CustomMark;\n layoutLevel: number = LayoutLevel.CustomMark;\n\n protected declare _spec: (ICustomMarkSpec> | ICustomMarkGroupSpec)[];\n\n static getSpecInfo(chartSpec: any): Maybe {\n const spec = chartSpec[this.specKey];\n if (!spec) {\n return null;\n }\n return [\n {\n spec,\n specIndex: 0,\n specPath: [this.specKey],\n type: ComponentTypeEnum.customMark\n }\n ];\n }\n\n created() {\n super.created();\n this.initMarks();\n this.initEvent();\n }\n\n protected initMarks() {\n if (!this._spec) {\n return;\n }\n this._spec.forEach((m, i) => {\n this._createExtensionMark(m, null, `${PREFIX}_series_${this.id}_extensionMark`, i);\n });\n }\n\n private _createExtensionMark(\n spec: ICustomMarkSpec> | ICustomMarkGroupSpec,\n parentMark: null | IGroupMark,\n namePrefix: string,\n index: number\n ) {\n const mark = this._createMark(\n {\n type: spec.type,\n name: `${PREFIX}_${index}`\n },\n {\n // 避免二次dataflow\n skipBeforeLayouted: true,\n attributeContext: this._getMarkAttributeContext()\n }\n ) as IGroupMark;\n if (!mark) {\n return;\n }\n if (isNil(parentMark)) {\n this._marks.addMark(mark);\n } else if (parentMark) {\n parentMark.addMark(mark);\n }\n // set style\n this.initMarkStyleWithSpec(mark, spec);\n if (spec.type === 'group') {\n namePrefix = `${namePrefix}_${index}`;\n spec.children?.forEach((s, i) => {\n this._createExtensionMark(s as any, mark, namePrefix, i);\n });\n }\n\n if (isValid(spec.dataId) || isValidNumber(spec.dataIndex)) {\n const dataview = this.getChart().getSeriesData(spec.dataId, spec.dataIndex);\n if (dataview) {\n dataview.target.addListener('change', () => {\n mark.getData().updateData();\n });\n mark.setDataView(dataview);\n }\n }\n }\n\n initEvent() {\n // do nothing\n }\n\n /**\n * updateSpec\n */\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n if (!isEqual(prevSpec, spec)) {\n result.reMake = true;\n }\n\n result.change = true;\n result.reRender = true;\n return result;\n }\n\n changeRegions(regions: IRegion[]): void {\n // do nothing;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [];\n }\n\n onRender(ctx: IModelRenderOption): void {\n // do nothing;\n }\n private _getMarkAttributeContext() {\n return {\n vchart: this._option.globalInstance,\n globalScale: (key: string, value: string | number) => {\n return this._option.globalScale.getScale(key)?.scale(value);\n }\n };\n }\n}\n\nexport const registerCustomMark = () => {\n registerImageMark();\n Factory.registerComponent(CustomMark.type, CustomMark);\n};\n","import type { IBoundsLike } from '../../data-structure';\nimport type { Point } from './interface';\nimport { pointInRect } from './intersect';\n\nlet x1: number;\nlet y1: number;\nlet x2: number;\nlet y2: number;\nexport function getAABBFromPoints(points: Point[]): IBoundsLike {\n (x1 = Infinity), (y1 = Infinity), (x2 = -Infinity), (y2 = -Infinity);\n // todo 有优化空间\n points.forEach(point => {\n if (x1 > point.x) {\n x1 = point.x;\n }\n if (x2 < point.x) {\n x2 = point.x;\n }\n if (y1 > point.y) {\n y1 = point.y;\n }\n if (y2 < point.y) {\n y2 = point.y;\n }\n });\n\n return { x1, y1, x2, y2 };\n}\n\nexport function pointInAABB(point: Point, aabb: IBoundsLike): boolean {\n return pointInRect(point, aabb, false);\n}\n\nexport function unionAABB(\n bounds1: IBoundsLike,\n bounds2: IBoundsLike,\n buffer = 3,\n format = false\n): [IBoundsLike, IBoundsLike?] {\n let x11 = bounds1.x1;\n let x12 = bounds1.x2;\n let y11 = bounds1.y1;\n let y12 = bounds1.y2;\n let x21 = bounds2.x1;\n let x22 = bounds2.x2;\n let y21 = bounds2.y1;\n let y22 = bounds2.y2;\n if (format) {\n let temp;\n if (x11 > x12) {\n temp = x11;\n x11 = x12;\n x12 = temp;\n }\n if (y11 > y12) {\n temp = y11;\n y11 = y12;\n y12 = temp;\n }\n if (x21 > x22) {\n temp = x21;\n x21 = x22;\n x22 = temp;\n }\n if (y21 > y22) {\n temp = y21;\n y21 = y22;\n y22 = temp;\n }\n }\n // 不相交直接跳过\n if (x11 >= x22 || x12 <= x21 || y11 >= y22 || y12 <= y21) {\n return [bounds1, bounds2];\n }\n\n const area1 = (x12 - x11 + buffer * 2) * (y12 - y11 + buffer * 2);\n const area2 = (x22 - x21 + buffer * 2) * (y22 - y21 + buffer * 2);\n const x1 = Math.min(x11, x21);\n const y1 = Math.min(y11, y21);\n const x2 = Math.max(x12, x22);\n const y2 = Math.max(y12, y22);\n const unionArea = (x2 - x1) * (y2 - y1);\n if (area1 + area2 > unionArea) {\n return [{ x1, x2, y1, y2 }];\n }\n return [bounds1, bounds2];\n}\n\nexport function mergeAABB(boundsList: IBoundsLike[]) {\n const nextList: IBoundsLike[] = [];\n function _merge(baseBound: IBoundsLike, list: IBoundsLike[]) {\n const l: IBoundsLike[] = [];\n list.forEach(b => {\n let arr: [IBoundsLike, IBoundsLike?];\n // 相交\n if ((arr = unionAABB(baseBound, b)).length > 1) {\n l.push(b);\n return;\n }\n baseBound = arr[0];\n });\n nextList.push(baseBound);\n l.length && _merge(l[0], l.slice(1));\n }\n _merge(boundsList[0], boundsList.slice(1));\n return nextList;\n}\n","/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2019 Morgan Herlocker\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n */\n\nimport type { Feature, MultiPolygon, Polygon, Units } from './interface';\nimport { lengthToRadians } from '@turf/helpers';\nimport { pointInRect, polygonContainPoint } from '../graphics';\nimport type { IPointLike } from '../data-structure';\nimport { degreeToRadian, radianToDegree } from '../angle';\n\n// https://github.com/Turfjs/turf\nfunction getGeom(geojson: any): any {\n if (geojson.type === 'Feature') {\n return geojson.geometry;\n }\n return geojson;\n}\n\nexport function isPointInPolygon(point: IPointLike, polygon: Feature | G) {\n if (!point) {\n return false;\n }\n\n if (!polygon) {\n return false;\n }\n\n const geom = getGeom(polygon);\n const type = geom.type;\n // BBox [west, south, east, north]\n const bbox = polygon.bbox;\n let polys: any[] = geom.coordinates;\n\n if (bbox && pointInRect(point, { x1: bbox[0], x2: bbox[1], y1: bbox[1], y2: bbox[3] }, true) === true) {\n return false;\n }\n\n if (type === 'Polygon') {\n polys = [polys];\n }\n let result = false;\n\n for (let i = 0; i < polys.length; ++i) {\n for (let j = 0; j < polys[i].length; ++j) {\n const polyResult = polygonContainPoint(\n polys[i][j].map((p: number[]) => ({ x: p[0], y: p[1] })),\n point.x,\n point.y\n );\n if (polyResult) {\n result = true;\n return result;\n }\n }\n }\n\n return result;\n}\n\n// https://github.com/Turfjs/turf\nexport function destination(\n point: IPointLike,\n distance: number,\n bearing: number,\n options: {\n units?: Units;\n } = {}\n) {\n const longitude1 = degreeToRadian(point[0]);\n const latitude1 = degreeToRadian(point[1]);\n const bearingRad = degreeToRadian(bearing);\n const radians = lengthToRadians(distance, options.units);\n\n // Main\n const latitude2 = Math.asin(\n Math.sin(latitude1) * Math.cos(radians) + Math.cos(latitude1) * Math.sin(radians) * Math.cos(bearingRad)\n );\n const longitude2 =\n longitude1 +\n Math.atan2(\n Math.sin(bearingRad) * Math.sin(radians) * Math.cos(latitude1),\n Math.cos(radians) - Math.sin(latitude1) * Math.sin(latitude2)\n );\n const lng = radianToDegree(longitude2);\n const lat = radianToDegree(latitude2);\n\n return { x: lng, y: lat };\n}\n","import type { Feature } from '@visactor/vutils';\nimport { isPointInPolygon, destination, getAABBFromPoints } from '@visactor/vutils';\nimport type { IRect, IOrientType, IPoint } from '../../typings';\n\ntype IBound = {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n};\nexport interface IPairInfo {\n /** 矩形信息 */\n rect: IRect;\n /** 对应点的画布坐标 */\n point: IPoint;\n /** 对应点的经纬度坐标 */\n pointCoord?: IPoint;\n /** 基于锚点的可放置位置 */\n anchors?: IOrientType[];\n /** 距离锚点的位置偏移量 */\n offset?: number;\n /** 原始顺序 */\n index: number;\n}\n\nfunction overlap(a: T, b: T, sep: number = 0) {\n return sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);\n}\n\nexport function bound(rect: IRect): IBound {\n return {\n x1: rect.x,\n x2: rect.x + rect.width,\n y1: rect.y,\n y2: rect.y + rect.height\n };\n}\n\nfunction toRect(bound: IBound): IRect {\n return {\n x: bound.x1,\n y: bound.y1,\n width: bound.x2 - bound.x1,\n height: bound.y2 - bound.y1\n };\n}\n\n/**\n * 根据可选位置进行躲避布局\n * @param pairs\n * @returns\n */\nexport function layoutByPosition(pairs: IPairInfo[]): IRect[] {\n if (!pairs || pairs.length === 0) {\n return [];\n }\n\n // 只有一个无需布局\n if (pairs.length === 1) {\n return [pairs[0].rect];\n }\n\n const _pairs = pairs.map(pair => {\n return {\n ...pair,\n bound: bound(pair.rect),\n anchorCandidates: candidatesByOrient(pair.anchors ?? [], pair.point!, pair.rect, pair.offset)\n };\n });\n\n const resultBound: IBound[] = [];\n // 默认布局第一个\n resultBound.push(_pairs[0].bound);\n\n for (let i = 1; i <= _pairs.length - 1; i++) {\n const curPair = _pairs[i];\n const curBound = curPair.bound;\n // 遍历检测\n let isOverlap = resultBound.some(r => overlap(r, curBound));\n if (!curPair.anchorCandidates) {\n continue;\n }\n if (isOverlap && curPair.anchorCandidates?.length > 0) {\n for (let j = 0; j < curPair.anchorCandidates.length; j++) {\n const anchor = curPair.anchorCandidates[j];\n const newBound = {\n x1: anchor.x,\n y1: anchor.y,\n x2: anchor.x + curBound.x2 - curBound.x1,\n y2: anchor.y + curBound.y2 - curBound.y1,\n anchor\n };\n if (!resultBound.some(r => overlap(r, newBound))) {\n resultBound.push(newBound);\n isOverlap = false;\n break;\n }\n }\n if (isOverlap) {\n // 所有候选位置都放不下\n resultBound.push(curPair.bound);\n }\n } else {\n resultBound.push(curPair.bound);\n }\n }\n\n return resultBound.map(bound => toRect(bound));\n}\n\nexport function layoutOuter(\n pairs: IPairInfo[],\n features: Feature[],\n dataToPosition: (coord: number[]) => IPoint | null\n): IRect[] {\n // 1. 计算包围圆\n const _points = pairs.map(rect => rect.pointCoord);\n const { x1, x2, y1, y2 } = getAABBFromPoints(_points);\n const geoCenter = [(x1 + x2) / 2, (y1 + y2) / 2];\n const centerPosition = dataToPosition(geoCenter);\n\n if (!centerPosition) {\n return [];\n }\n\n // 2. 遍历每个rect\n // anchor与圆心的交点方向,尝试寻找不在地图区域内部的新锚点\n const result = pairs.map(pair => {\n const rect = pair.rect;\n const targetPoint = !isPointWithinFeatures(features, pair.pointCoord!)\n ? pair.point\n : dataToPosition(\n nearestPoint(\n features,\n [pair.pointCoord!.x, pair.pointCoord!.y],\n uniformDegree(lineDegree(pair.point!, centerPosition))\n )\n );\n\n if (targetPoint) {\n rect.x = targetPoint.x;\n rect.y = targetPoint.y;\n }\n // 3. 根据finalAnchor在包围圆上的位置,调整rect的位置\n // 将圆根据圆心角划分为4个区域,对应不同的position\n\n const degree = uniformDegree(lineDegree(pair.point!, centerPosition));\n\n let position: IOrientType;\n const anchors: IOrientType[] = [];\n if (degree >= -45 && degree < 45) {\n position = 'top';\n anchors.push('left', 'right');\n } else if (degree >= 45 && degree < 135) {\n position = 'right';\n } else if (degree >= -135 && degree < -45) {\n position = 'left';\n anchors.push('left');\n } else {\n position = 'bottom';\n anchors.push('left', 'right');\n }\n pair.anchors = anchors;\n pair.offset = 20;\n pair.rect = placeRectByOrient(pair.rect, position, 0);\n return pair;\n });\n\n return layoutByPosition(result);\n}\n\nexport function layoutOuter2(\n pairs: IPairInfo[],\n features: Feature[],\n dataToPosition: (coord: number[]) => IPoint | null\n): IRect[] {\n // 1. 计算几何中心\n let x = 0;\n let y = 0;\n for (let i = 0; i < pairs.length; i++) {\n x += pairs[i].pointCoord.x;\n y += pairs[i].pointCoord.y;\n }\n x /= pairs.length;\n y /= pairs.length;\n const centerPosition = dataToPosition([x, y]);\n if (!centerPosition) {\n return [];\n }\n\n const count = pairs.length;\n\n // 2. 按照圆心角排序\n pairs.sort((a, b) => {\n return lineDegree(centerPosition, a.point) - lineDegree(centerPosition, b.point);\n });\n\n const result = pairs.map((pair, index) => {\n let degree = (360 / count) * index;\n const _degree = lineDegree(centerPosition, pair.point);\n degree = uniformDegree((degree + _degree) / 2);\n const targetPoint = !isPointWithinFeatures(features, pair.pointCoord)\n ? pair.point\n : dataToPosition(nearestPoint(features, [pair.pointCoord.x, pair.pointCoord.y], degree));\n if (targetPoint) {\n pair.rect.x = targetPoint.x;\n pair.rect.y = targetPoint.y;\n }\n // 3. 根据finalAnchor在包围圆上的位置,调整rect的位置\n // 将圆根据圆心角划分为4个区域,对应不同的position\n let position: IOrientType;\n const anchors: IOrientType[] = [];\n if (degree >= -45 && degree < 45) {\n position = 'top';\n anchors.push('left', 'right');\n } else if (degree >= 45 && degree < 135) {\n position = 'right';\n } else if (degree >= -135 && degree < -45) {\n position = 'left';\n anchors.push('left');\n } else {\n position = 'bottom';\n anchors.push('left', 'right');\n }\n\n pair.anchors = anchors;\n pair.offset = 20;\n pair.rect = placeRectByOrient(pair.rect, position, 0);\n return pair;\n });\n\n return layoutByPosition(result.sort((a, b) => a.index - b.index));\n}\n\nfunction uniformDegree(degree: number) {\n return degree > 180 ? degree - 360 : degree;\n}\n\nfunction lineDegree(start: IPoint, end: IPoint) {\n return (Math.atan2(start.y - end.y, start.x - end.x) * 180) / Math.PI + 90;\n}\n\nfunction nearestPoint(features: Feature[], origin: number[], bearing: number, distance = 200) {\n const count = 5621 / distance;\n let curOrigin = origin;\n for (let i = 1; i <= count; i++) {\n const dest = destination(curOrigin as unknown as IPoint, distance, bearing);\n if (!isPointWithinFeatures(features, dest)) {\n return [dest.x, dest.y];\n }\n curOrigin = [dest.x, dest.y];\n }\n return origin;\n}\n\nfunction isPointWithinFeatures(features: Feature[], p: IPoint) {\n for (let i = 0; i < features.length; i++) {\n const inside = isPointInPolygon(p, features[i] as any);\n if (inside) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * 以rect左上角为锚点的,根据position位置调整rect布局。\n * @param rect\n * @param position 在锚点的四周位置,'top' | 'bottom' | 'left' | 'right'\n * @param offset rect与锚点间的距离\n * @returns\n */\nexport function placeRectByOrient(rect: IRect, position: IOrientType, offset: number = 0) {\n const result: IRect = { ...rect };\n if (position === 'top') {\n result.x -= rect.width / 2;\n result.y -= offset + rect.height / 2;\n } else if (position === 'bottom') {\n result.x -= rect.width / 2;\n result.y += offset - rect.height / 2;\n } else if (position === 'left') {\n result.x -= offset + rect.width;\n result.y -= rect.height / 2;\n } else if (position === 'right') {\n result.x += offset;\n result.y -= rect.height / 2;\n }\n return result;\n}\n\nexport function candidatesByOrient(\n positions: IOrientType[],\n anchor: IPoint,\n rect: Pick,\n offset = 0\n) {\n const candidates: IPoint[] = [];\n positions.forEach((p: IOrientType) => {\n const { x, y } = placeRectByOrient({ ...anchor, width: rect.width, height: rect.height }, p, offset);\n candidates.push({ x, y });\n });\n return candidates;\n}\n","import type { IPadding, IRect, IOrientType } from '../../typings/space';\nimport { DataView } from '@visactor/vdataset';\nimport { BaseComponent } from '../base/base-component';\nimport type { IComponentOption } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport { LayoutZIndex } from '../../constant';\nimport type { IMapLabelSpec, MapLabelSceneNodeMap } from './interface';\nimport type { ICartesianSeries, IGeoSeries } from '../../series/interface';\nimport type { IPoint, Datum } from '../../typings';\nimport type { IPairInfo } from './layout';\n// eslint-disable-next-line no-duplicate-imports\nimport { layoutByPosition, layoutOuter, placeRectByOrient } from './layout';\n\nimport { CompilableData } from '../../compile/data/compilable-data';\nimport { normalizeLayoutPaddingSpec } from '../../util/space';\nimport { MarkPoint } from '@visactor/vrender-components';\nimport type { IGraphic, IGroup, INode, IRect as IRectGraphic } from '@visactor/vrender-core';\nimport { createGroup, createRect, createSymbol, createText } from '@visactor/vrender-core';\nimport { transformToGraphic } from '../../util/style';\nimport type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isValid } from '@visactor/vutils';\nimport type { PanEventParam, ZoomEventParam } from '../../event/interface';\nimport type { IModel, IModelSpecInfo } from '../../model/interface';\nimport { Factory } from '../../core/factory';\nimport { TransformLevel } from '../../data/initialize';\n\nexport class MapLabelComponent extends BaseComponent {\n static type = ComponentTypeEnum.mapLabel;\n type = ComponentTypeEnum.mapLabel;\n name: string = ComponentTypeEnum.mapLabel;\n\n static specKey = 'mapLabel';\n specKey = 'mapLabel';\n\n layoutType: 'none' = 'none';\n\n layoutZIndex = LayoutZIndex.MarkPoint;\n\n protected nameField: string;\n protected valueField?: string;\n\n protected _series: ICartesianSeries | IGeoSeries;\n protected _map: any[];\n protected _longitudeField: string;\n protected _latitudeField: string;\n\n protected _markerComponents: MarkPoint[];\n\n private _activeDatum: Datum[] = [];\n\n static getSpecInfo(chartSpec: any): Maybe {\n // TODO: 限制mapSeries使用\n const labelSpec = chartSpec[this.specKey];\n if (!labelSpec || !labelSpec.visible || isValid(labelSpec.series)) {\n return null;\n }\n return [\n {\n spec: labelSpec,\n specPath: [this.specKey],\n type: ComponentTypeEnum.mapLabel\n }\n ];\n }\n\n setAttrFromSpec(): void {\n this.nameField = this._spec.nameField ?? this._series?.getDimensionField()[0];\n this.valueField = this._spec.valueField ?? this._series?.getMeasureField()[0];\n }\n\n created() {\n super.created();\n if (!!this._spec.visible === false) {\n return;\n }\n this.initRelatedInfo();\n this.initData();\n this.initEvent();\n }\n\n initRelatedInfo(): void {\n this._series = this._option.getSeriesInUserIdOrIndex([this._spec.seriesId])[0] as ICartesianSeries;\n if (this._spec.position === 'outer') {\n // 需要获取region上的地理坐标系\n this._map = (this._regions[0].getSeriesInType('map')[0] as IGeoSeries)?.getMapViewData()?.latestData;\n\n this._longitudeField = this._regions[0].getSpec?.()?.longitudeField;\n this._latitudeField = this._regions[0].getSpec?.()?.latitudeField;\n }\n }\n\n initData() {\n const series = this._series;\n if (!series) {\n return;\n }\n const seriesData = series.getViewData();\n if (seriesData) {\n const data = new DataView(this._option.dataSet, { name: `${this.name}_data` });\n data.parse([seriesData], {\n type: 'dataview'\n });\n data.transform({ type: 'copyDataView', level: TransformLevel.copyDataView }, false);\n\n this._data = new CompilableData(this._option, data);\n data.target.addListener('change', () => {\n if (this._spec.trigger !== 'hover' && this._spec.trigger !== 'click') {\n this._activeDatum = this._data.getLatestData();\n }\n });\n }\n }\n\n initEvent() {\n this.event.on('zoom', { filter: params => this._isRelativeModel(params.model) }, e => {\n this.handleZoom(e as unknown as ZoomEventParam);\n return true;\n });\n\n this.event.on('panmove', { filter: params => this._isRelativeModel(params.model) }, e => {\n this.handlePan(e as unknown as PanEventParam);\n return true;\n });\n\n const trigger = this._spec.trigger;\n if (trigger === 'none') {\n return;\n }\n\n if (trigger === 'hover') {\n this.event.on('hovered', { filter: params => this._isRelativeSeries(params.model) }, params => {\n this._updateDatum(params.value);\n });\n this.event.on('unhovered', () => {\n this._updateDatum([]);\n });\n } else if (trigger === 'click') {\n this.event.on('selected', { filter: params => this._isRelativeSeries(params.model) }, params => {\n this._updateDatum(params.value);\n });\n this.event.on('unselected', () => {\n this._updateDatum([]);\n });\n }\n }\n\n handlePan(e: PanEventParam) {\n const { delta } = e;\n this._markerComponents.forEach(marker => {\n marker.translate(delta[0], delta[1]);\n });\n }\n\n handleZoom(e: ZoomEventParam) {\n this._updateMarkerLayoutAttribute();\n }\n\n private _updateDatum(datum: Datum[]) {\n this._activeDatum = datum;\n this._markerComponents.forEach((marker, index) => {\n const markerDatum = this._data?.getLatestData()[index];\n if (this._activeDatum.includes(markerDatum)) {\n marker.setAttribute('visible', true);\n } else {\n marker.setAttribute('visible', false);\n }\n });\n }\n\n dataToPosition(datum: any) {\n return this._series.dataToPosition(datum);\n }\n\n updateLayoutAttribute() {\n const markData = this._data?.getLatestData();\n if (!markData || markData.length === 0) {\n return;\n }\n super.updateLayoutAttribute();\n this._updateMarkerLayoutAttribute();\n }\n\n protected _updateMarkerLayoutAttribute() {\n const layoutPairInfo: IPairInfo[] = [];\n const markerMarks: MapLabelSceneNodeMap[] = [];\n if (!this._markerComponents) {\n this._markerComponents = this._data?.getLatestData().map((data: Datum, index: number) => {\n const cmp = new MarkPoint({\n position: undefined\n });\n if (cmp) {\n cmp.name = `${this.name}_marker_${index}`;\n cmp.id = this._spec.id ?? `${this.name}_marker_${this.id}`;\n cmp.setAttribute('zIndex', this.layoutZIndex);\n }\n return cmp;\n });\n }\n\n const markerComponents = this._markerComponents;\n markerComponents.forEach((marker, index) => {\n marker.removeAllChild();\n const { pairInfo, contentMarks } = this._evaluateMarker(this._data.getLatestData()[index], index);\n pairInfo && layoutPairInfo.push(pairInfo);\n contentMarks && markerMarks.push(contentMarks);\n });\n\n const positionedRects = this._layoutLabels(layoutPairInfo);\n this._layoutMarkers(positionedRects, markerMarks);\n this._renderMarkers();\n }\n\n protected _evaluateMarker(data: Datum, index: number) {\n let contentItemCount = 0;\n let paddingWidth = 0;\n let paddingHeight = 0;\n let contentWidth = 0;\n let contentHeight = 0;\n\n const position = this._spec.position || 'top';\n const offset = this._spec.offset;\n\n const padding = normalizeLayoutPaddingSpec(this._spec.background?.padding) as IPadding;\n const space = this._spec.space || 0;\n paddingWidth += (padding?.left || 0) + (padding?.right || 0);\n paddingHeight += (padding?.top || 0) + (padding?.bottom || 0);\n\n const contentMarks: MapLabelSceneNodeMap = {};\n const positionAttr = this.dataToPosition(data);\n\n const container = createGroup({});\n container.name = `${this.name}_marker_itemContainer_${index}`;\n contentMarks.container = container;\n\n if (this._spec.background?.visible) {\n const labelBackground = createRect(transformToGraphic({ ...this._spec.background.style }));\n labelBackground.setAttributes(positionAttr);\n contentMarks.labelBackground = labelBackground;\n container.appendChild(labelBackground);\n }\n\n if (this._spec.icon?.visible) {\n const icon = createSymbol(transformToGraphic({ ...this._spec.icon.style }));\n icon.setAttributes(positionAttr);\n icon.setAttribute('symbolType', this._spec.icon.style?.shape);\n const iconBound = icon.AABBBounds;\n const iconHeight = iconBound?.y2 - iconBound?.y1 ?? 0;\n const iconWidth = iconBound?.x2 - iconBound?.x1 ?? 0;\n contentMarks.icon = icon;\n container.appendChild(icon);\n\n contentHeight = iconHeight;\n contentWidth += iconWidth;\n contentItemCount++;\n }\n\n if (this._spec.nameLabel?.visible) {\n const nameLabel = createText(transformToGraphic({ ...this._spec.nameLabel.style }));\n nameLabel.setAttributes(positionAttr);\n nameLabel.setAttribute('text', data[this.nameField]);\n const nameLabelBound = nameLabel.AABBBounds;\n const nameLabelHeight = nameLabelBound?.y2 - nameLabelBound?.y1 ?? 0;\n const nameLabelWidth = nameLabelBound?.x2 - nameLabelBound?.x1 ?? 0;\n contentMarks.nameLabel = nameLabel;\n container.appendChild(nameLabel);\n\n contentHeight = Math.max(contentHeight, nameLabelHeight);\n contentWidth += nameLabelWidth;\n contentItemCount++;\n }\n\n if (this._spec.valueLabel?.visible && isValid(data[this.valueField])) {\n const valueLabel = createText(transformToGraphic({ ...this._spec.valueLabel.style }));\n valueLabel.setAttributes(positionAttr);\n valueLabel.setAttribute('text', data[this.valueField]);\n const valueLabelBound = valueLabel.AABBBounds;\n const valueLabelHeight = valueLabelBound?.y2 - valueLabelBound?.y1 ?? 0;\n const valueLabelWidth = valueLabelBound?.x2 - valueLabelBound?.x1 ?? 0;\n contentMarks.valueLabel = valueLabel;\n container.appendChild(valueLabel);\n\n contentHeight = Math.max(contentHeight, valueLabelHeight);\n contentWidth += valueLabelWidth;\n contentItemCount++;\n }\n\n const firstValidMark = Object.values(contentMarks).find(m => !!m && m.type !== 'group');\n\n const anchor: IPoint = {\n x: firstValidMark?.getComputedAttribute('x'),\n y: firstValidMark?.getComputedAttribute('y')\n };\n const itemRect = {\n x: anchor.x,\n y: anchor.y,\n width: 0,\n height: 0\n };\n\n itemRect.width = paddingWidth + contentWidth + (contentItemCount - 1) * space;\n itemRect.height = paddingHeight + contentHeight;\n\n const pairInfo: IPairInfo = {\n rect: itemRect,\n point: anchor,\n index\n };\n // 计算得到最终所有元素包围盒的布局位置\n if (position !== 'outer') {\n const anchors = ['top', 'right', 'left', 'bottom'].filter(a => a !== position);\n pairInfo.rect = placeRectByOrient(itemRect, position, offset);\n pairInfo.anchors = anchors as IOrientType[];\n pairInfo.offset = offset;\n } else {\n pairInfo.pointCoord = {\n x: +data?.[this._longitudeField],\n y: +data?.[this._latitudeField]\n };\n }\n return { pairInfo, contentMarks };\n }\n\n protected _layoutMarkers(positionedRects: IRect[], contentMarks: MapLabelSceneNodeMap[]) {\n for (let i = 0; i < contentMarks.length; i++) {\n if (!positionedRects[i] || !contentMarks[i]) {\n return;\n }\n const { icon, nameLabel, valueLabel, labelBackground, container } = contentMarks[i];\n\n const itemRect = positionedRects[i];\n const padding = normalizeLayoutPaddingSpec(this._spec.background?.padding) as IPadding;\n const space = this._spec.space || 0;\n\n const curY = itemRect.height / 2;\n let curX = padding?.left || 0;\n [icon, nameLabel, valueLabel].forEach((item, index) => {\n if (item) {\n const bounds = item.AABBBounds;\n let offset = 0;\n if (item.type === 'symbol') {\n // 文字的锚点在文字左侧,baseline在中心\n // symbol的锚点[0,0]在图形中心。所以x方向要偏移半个bound。\n offset += (bounds.x2 - bounds.x1 ?? 0) / 2;\n }\n item.setAttributes({\n x: curX + offset,\n y: curY\n });\n\n curX += bounds.x2 - bounds.x1 ?? 0;\n if (index !== 2) {\n curX += space;\n }\n }\n });\n (labelBackground as IRectGraphic)?.setAttributes({\n x: 0,\n y: 0,\n width: itemRect.width,\n height: itemRect.height\n });\n container?.setAttributes({\n dx: -itemRect.width / 2,\n dy: -itemRect.height / 2\n });\n const datum = this._data.getLatestData()[i];\n const anchor = this.dataToPosition(datum);\n const regionPos = this.getRegions()[0].getLayoutStartPoint();\n const showLeader = !!(this._spec.leader?.visible && (icon || nameLabel || valueLabel));\n this._markerComponents[i].setAttributes({\n x: regionPos.x,\n y: regionPos.y,\n position: anchor,\n visible: this._activeDatum.includes(datum),\n itemContent: {\n refX: 0,\n type: 'custom',\n renderCustomCallback: () => container as unknown as IGroup,\n autoRotate: false,\n offsetX: itemRect.x + itemRect.width / 2 - anchor.x,\n offsetY: itemRect.y + itemRect.height / 2 - anchor.y\n },\n itemLine: {\n visible: showLeader,\n type: 'type-po',\n lineStyle: transformToGraphic({ ...this._spec.leader?.style }),\n startSymbol: { visible: false }\n }\n });\n }\n }\n\n protected _renderMarkers() {\n if (!this._markerComponents || !this._markerComponents.length) {\n return;\n }\n\n for (let i = 0; i < this._markerComponents.length; i++) {\n this.getContainer().add(this._markerComponents[i] as unknown as INode);\n }\n }\n\n protected _layoutLabels(rects: IPairInfo[]) {\n const result =\n this._spec.position === 'outer' && this._map\n ? layoutOuter(rects, this._map, (coord: number[]) =>\n this._series.dataToPosition({\n [this._longitudeField]: coord[0],\n [this._latitudeField]: coord[1]\n })\n )\n : layoutByPosition(rects);\n\n return result;\n }\n\n private _isRelativeModel(model: IModel) {\n const id =\n (this._series as ICartesianSeries).getXAxisHelper()?.getAxisId() ??\n (this._series as IGeoSeries).getCoordinateHelper()?.getCoordinateId();\n return model?.id === id;\n }\n\n private _isRelativeSeries(model: IModel) {\n return model?.id === this._series.id;\n }\n\n onRender(ctx: any): void {\n // do nothing\n }\n\n changeRegions(/** regions: IRegion[] */): void {\n // do nothing\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return this._markerComponents as unknown as IGroup[];\n }\n}\n\nexport const registerMapLabel = () => {\n Factory.registerComponent(MapLabelComponent.type, MapLabelComponent);\n};\n","import type { utilFunctionCtx } from '../../typings/params';\nimport type { IChart } from '../../chart/interface/chart';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { IBaseLayout, IGridLayoutSpec, ElementSpec, ILayoutItem } from '../interface';\nimport { isFunction, isValid, isValidNumber } from '@visactor/vutils';\nimport type { IRect } from '../../typings/space';\nimport { Factory } from '../../core/factory';\n\ntype GridSize = {\n value: number;\n isUserSetting: boolean;\n isLayoutSetting: boolean;\n};\n\nexport class GridLayout implements IBaseLayout {\n static type = 'grid';\n private _chartLayoutRect: IRect = { x: 0, y: 0, width: 1, height: 1 };\n private _chartViewBox: IBoundsLike;\n\n protected _col: number = 1;\n protected _row: number = 1;\n protected _colSize: GridSize[];\n protected _rowSize: GridSize[];\n\n protected _colElements: ILayoutItem[][];\n protected _rowElements: ILayoutItem[][];\n\n protected _gridInfo: IGridLayoutSpec;\n\n protected _elementMap: Map = new Map();\n\n protected _onError: (...args: any[]) => void;\n\n constructor(gridInfo: IGridLayoutSpec, ctx: utilFunctionCtx) {\n this.standardizationSpec(gridInfo);\n this._gridInfo = gridInfo;\n this._col = gridInfo.col;\n this._row = gridInfo.row;\n this._colSize = new Array(this._col).fill(null);\n this._rowSize = new Array(this._row).fill(null);\n this._colElements = new Array(this._col).fill([]);\n this._rowElements = new Array(this._row).fill([]);\n this._onError = ctx?.onError;\n\n this.initUserSetting();\n }\n\n protected standardizationSpec(gridInfo: IGridLayoutSpec) {\n gridInfo.col = gridInfo.col ?? 1;\n gridInfo.row = gridInfo.row ?? 1;\n gridInfo.elements = gridInfo.elements ?? [];\n }\n\n protected initUserSetting() {\n // 先对用户设置的宽高进行设置\n this._gridInfo.colWidth &&\n this.setSizeFromUserSetting(this._gridInfo.colWidth, this._colSize, this._col, this._chartLayoutRect.width);\n\n this._gridInfo.rowHeight &&\n this.setSizeFromUserSetting(this._gridInfo.rowHeight, this._rowSize, this._row, this._chartLayoutRect.height);\n // 其余位置默认填充0\n this._colSize.forEach((c, i) => {\n if (!c) {\n this._colSize[i] = {\n value: 0,\n isUserSetting: false,\n isLayoutSetting: false\n };\n }\n });\n this._rowSize.forEach((r, i) => {\n if (!r) {\n this._rowSize[i] = {\n value: 0,\n isUserSetting: false,\n isLayoutSetting: false\n };\n }\n });\n }\n\n /**\n * 设置用户设置的 colWidth 和 rowHeight\n */\n protected setSizeFromUserSetting(\n userSetting: {\n index: number;\n size: number | ((maxSize: number) => number);\n }[],\n gridSize: GridSize[],\n gridMax: number,\n maxSize: number\n ) {\n userSetting.forEach(userSet => {\n if (userSet.index < 0 && userSet.index >= gridMax) {\n return;\n }\n if (isValidNumber(userSet.size)) {\n gridSize[userSet.index] = {\n value: +userSet.size,\n isUserSetting: true,\n isLayoutSetting: false\n };\n } else if (isFunction(userSet.size)) {\n gridSize[userSet.index] = {\n value: userSet.size(maxSize),\n isUserSetting: true,\n isLayoutSetting: false\n };\n }\n });\n }\n\n protected clearLayoutSize() {\n // 其余位置默认填充0\n this._colSize.forEach(c => {\n c.isLayoutSetting = false;\n if (!c.isUserSetting) {\n c.value = 0;\n }\n });\n this._rowSize.forEach(r => {\n r.isLayoutSetting = false;\n if (!r.isUserSetting) {\n r.value = 0;\n }\n });\n }\n\n protected getItemGridInfo(item: ILayoutItem): ElementSpec {\n // map 中寻找\n const mapResult = this._elementMap.get(item);\n if (mapResult) {\n return mapResult;\n }\n // 配置中匹配\n let result: ElementSpec | undefined;\n result = this._gridInfo.elements?.find(e => {\n if ('modelId' in e && isValid(e.modelId)) {\n if (isValid(item.model.userId) && item.model.userId === e.modelId) {\n return true;\n }\n } else if ('modelKey' in e && isValid(e.modelKey) && 'modelIndex' in e && isValid(e.modelIndex)) {\n const specKey = item.model.specKey ?? item.model.type;\n if (specKey === e.modelKey && item.model.getSpecIndex() === e.modelIndex) {\n return true;\n }\n }\n return false;\n });\n // default\n if (!result) {\n result = {\n col: 0,\n colSpan: 1,\n row: 0,\n rowSpan: 1\n } as ElementSpec;\n }\n this._elementMap.set(item, result);\n return result;\n }\n\n protected getSizeFromGird(spec: ElementSpec, type: 'col' | 'row'): number | undefined {\n const sizeList = type === 'col' ? this._colSize : this._rowSize;\n let result = 0;\n for (let index = spec[type]; index < spec[type] + (spec[`${type}Span`] ?? 1); index++) {\n result += sizeList[index].value;\n }\n return result;\n }\n\n protected getSizeFromUser(spec: ElementSpec, type: 'col' | 'row'): number | undefined {\n const sizeList = type === 'col' ? this._colSize : this._rowSize;\n if (!sizeList[spec[type]]?.isUserSetting) {\n return undefined;\n }\n let result = 0;\n for (let index = spec[type]; index < spec[type] + (spec[`${type}Span`] ?? 1); index++) {\n if (!sizeList[index].isUserSetting) {\n return undefined;\n }\n result += sizeList[index].value;\n }\n return result;\n }\n\n protected setItemLayoutSizeToGrid(item: ILayoutItem, gridSpec: ElementSpec) {\n if (isColItem(item)) {\n if (gridSpec.colSpan && gridSpec.colSpan > 1) {\n return;\n }\n if (this._colSize[gridSpec.col].isUserSetting) {\n return;\n }\n this._colSize[gridSpec.col].value = Math.max(\n this._colSize[gridSpec.col].value,\n item.getLayoutRect().width + item.layoutPaddingLeft + item.layoutPaddingRight\n );\n this._colSize[gridSpec.col].isLayoutSetting = true;\n } else {\n if (gridSpec.rowSpan && gridSpec.rowSpan > 1) {\n return;\n }\n if (this._rowSize[gridSpec.row].isUserSetting) {\n return;\n }\n this._rowSize[gridSpec.row].value = Math.max(\n this._rowSize[gridSpec.row].value,\n item.getLayoutRect().height + item.layoutPaddingTop + item.layoutPaddingBottom\n );\n this._rowSize[gridSpec.row].isLayoutSetting = true;\n }\n }\n\n protected layoutGrid(type: 'col' | 'row') {\n const gridSize = type === 'col' ? this._colSize : this._rowSize;\n let unSetSize = type === 'col' ? this._chartLayoutRect.width : this._chartLayoutRect.height;\n const willSize: GridSize[] = [];\n gridSize.forEach(s => {\n if (s.isUserSetting || s.isLayoutSetting) {\n unSetSize -= s.value;\n } else {\n willSize.push(s);\n }\n });\n if (unSetSize < 0) {\n console.warn(`layout content ${type} size bigger than chart`);\n }\n willSize.forEach(s => (s.value = unSetSize / willSize.length));\n }\n\n protected getItemPosition(item: ILayoutItem) {\n const gridSpec = this.getItemGridInfo(item);\n const point = { x: this._chartLayoutRect.x, y: this._chartLayoutRect.y };\n for (let col = 0; col < gridSpec.col; col++) {\n point.x += this._colSize[col].value;\n }\n for (let row = 0; row < gridSpec.row; row++) {\n point.y += this._rowSize[row].value;\n }\n point.x += item.layoutPaddingLeft + item.layoutOffsetX;\n point.y += item.layoutPaddingTop + item.layoutOffsetY;\n return point;\n }\n\n protected getItemLayoutRect(item: ILayoutItem) {\n const gridSpec = this.getItemGridInfo(item);\n // 先设置空间\n const rect = {\n width:\n (this.getSizeFromGird(gridSpec, 'col') ?? this._chartLayoutRect.width) -\n item.layoutPaddingLeft -\n item.layoutPaddingRight,\n height:\n (this.getSizeFromGird(gridSpec, 'row') ?? this._chartLayoutRect.height) -\n item.layoutPaddingTop -\n item.layoutPaddingBottom\n };\n return rect;\n }\n\n layoutItems(_chart: IChart, items: ILayoutItem[], chartLayoutRect: IRect, chartViewBox: IBoundsLike): void {\n this._chartLayoutRect = chartLayoutRect;\n this._chartViewBox = chartViewBox;\n // 先清空旧布局信息\n this.clearLayoutSize();\n // 越大越先处理,进行排序调整,利用原地排序特性,排序会受 level 和传进来的数组顺序共同影响\n items.sort((a, b) => b.layoutLevel - a.layoutLevel);\n\n // 剔除 region 后,其余元素先布局运算\n const normalItems = items.filter(item => item.layoutType === 'normal' && item.getModelVisible() !== false);\n const normalItemsCol = normalItems.filter(item => isColItem(item));\n const normalItemsRow = normalItems.filter(item => !isColItem(item));\n normalItems.forEach(item => {\n this.layoutOneItem(item, 'user', false);\n });\n\n // region 和 region 关联元素\n const regionsRelative = items.filter(x => x.layoutType === 'region-relative');\n const regionsRelativeCol = regionsRelative.filter(item => isColItem(item));\n const regionsRelativeRow = regionsRelative.filter(item => !isColItem(item));\n // 先进行 col 方向布局\n regionsRelativeCol.forEach(item => this.layoutOneItem(item, 'user', false));\n // 然后得到最终 col 信息 此时已经是最终 col 信息\n this.layoutGrid('col');\n // 再使用宽度信息辅助row方向排序\n // 此时普通占位元素,会因为布局宽度影响最终布局高度\n normalItemsRow.forEach(item => this.layoutOneItem(item, 'colGrid', false));\n regionsRelativeRow.forEach(item => {\n this.layoutOneItem(item, 'colGrid', false);\n });\n // 然后得到最终 row 信息\n this.layoutGrid('row');\n // 统一水平方向元素高度\n regionsRelativeRow.forEach(item => {\n this.layoutOneItem(item, 'grid', false);\n });\n // 再使用宽度信息,第二次次对 col 方向布局\n normalItemsCol.forEach(item => this.layoutOneItem(item, 'grid', false));\n regionsRelativeCol.forEach(item => {\n // 此时从布局逻辑可知,item的layoutRect会发生,将item的layoutTag设置为true\n this.layoutOneItem(item, 'grid', true);\n });\n this.layoutGrid('col');\n\n // region\n items.filter(x => x.layoutType === 'region').forEach(item => this.layoutOneItem(item, 'grid', false));\n\n // 再找出 absolute 元素,无需排序,在 compiler 层需要排序放置\n this.layoutAbsoluteItems(items.filter(x => x.layoutType === 'absolute'));\n\n // 最后基于grid 设置位置\n items\n .filter(x => x.layoutType !== 'absolute')\n .forEach(item => {\n item.setLayoutStartPosition(this.getItemPosition(item));\n });\n }\n\n /**\n *\n * 无需排序,在 compiler 层需要排序放置\n *\n * 重要:absolute 默认依据 region 进行相对依赖\n */\n\n private layoutAbsoluteItems(absoluteItems: ILayoutItem[]) {\n absoluteItems.forEach(item => {\n // 设置盒子\n item.absoluteLayoutInRect(this._chartLayoutRect);\n });\n }\n\n protected layoutOneItem(item: ILayoutItem, sizeType: 'user' | 'grid' | 'colGrid' | 'rowGrid', ignoreTag: boolean) {\n const sizeCallRow =\n sizeType === 'rowGrid' || sizeType === 'grid' ? this.getSizeFromGird.bind(this) : this.getSizeFromUser.bind(this);\n const sizeCallCol =\n sizeType === 'colGrid' || sizeType === 'grid' ? this.getSizeFromGird.bind(this) : this.getSizeFromUser.bind(this);\n // 先获取 item 的 grid 信息\n const gridSpec = this.getItemGridInfo(item);\n // 先设置空间\n const computeRect = {\n width:\n (sizeCallCol(gridSpec, 'col') ?? this._chartLayoutRect.width) -\n item.layoutPaddingLeft -\n item.layoutPaddingRight,\n height:\n (sizeCallRow(gridSpec, 'row') ?? this._chartLayoutRect.height) -\n item.layoutPaddingTop -\n item.layoutPaddingBottom\n };\n const rect = item.computeBoundsInRect(computeRect);\n if (!isValidNumber(rect.width)) {\n rect.width = computeRect.width;\n }\n if (!isValidNumber(rect.height)) {\n rect.height = computeRect.height;\n }\n item.setLayoutRect(sizeType !== 'grid' ? rect : computeRect);\n // 设置大小到grid\n this.setItemLayoutSizeToGrid(item, gridSpec);\n }\n}\n\nfunction isColItem(item: ILayoutItem) {\n return item.layoutOrient === 'left' || item.layoutOrient === 'right';\n}\n\nexport const registerGridLayout = () => {\n Factory.registerLayout(GridLayout.type, GridLayout);\n};\n","import type { IChart } from '../../chart/interface/chart';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { IRect } from '../../typings/space';\nimport type { IBaseLayout, ILayoutItem } from '../interface';\nimport type { IOffset, LayoutSideType } from '../base-layout';\nimport { Layout } from '../base-layout';\nimport { isXAxis, isYAxis } from '../../component/axis/cartesian/util/common';\nimport { Factory } from '../../core/factory';\nimport type { IAxis } from '../../component/axis';\n\nexport class Layout3d extends Layout implements IBaseLayout {\n static type = 'layout3d';\n\n layoutItems(_chart: IChart, items: ILayoutItem[], chartLayoutRect: IRect, chartViewBox: IBoundsLike): void {\n // 布局初始化\n this._layoutInit(_chart, items, chartLayoutRect, chartViewBox);\n // 先布局 normal 类型的元素\n this._layoutNormalItems(items);\n\n // 开始布局 region 相关元素\n // 为了锁紧先保存一下当前的布局空间\n const layoutTemp: LayoutSideType = {\n left: this.leftCurrent,\n top: this.topCurrent,\n right: this.rightCurrent,\n bottom: this.bottomCurrent\n };\n // 计算3d轴\n const absoluteItem = items.filter(x => x.layoutType === 'absolute');\n const zItems = absoluteItem.filter(i => {\n return i.layoutOrient === 'z';\n });\n\n // 计算z的宽高,让出一部分位置\n let extraWH = { width: 0, height: 0 };\n if (zItems.length) {\n const layoutRect = zItems[0].getLayoutRect();\n extraWH = layoutRect;\n }\n this.leftCurrent += extraWH.width / 8;\n this.rightCurrent -= extraWH.width / 8;\n this.topCurrent += extraWH.height / 8;\n this.bottomCurrent -= extraWH.height / 8;\n\n const { regionItems, relativeItems, relativeOverlapItems, allRelatives, overlapItems } = this._groupItems(items);\n // 有元素开启了自动缩进\n // TODO:目前只有普通占位布局下的 region-relative 元素支持\n // 主要考虑常规元素超出画布一般为用户个性设置,而且可以设置padding规避裁剪,不需要使用自动缩进\n this.layoutRegionItems(regionItems, relativeItems, relativeOverlapItems, overlapItems);\n\n // 缩进\n this._processAutoIndent(regionItems, relativeItems, relativeOverlapItems, overlapItems, allRelatives, layoutTemp);\n\n // z轴以外的绝对定位\n const absoluteItemExceptZAxis = absoluteItem.filter(i => i.layoutOrient !== 'z');\n this.layoutAbsoluteItems(absoluteItemExceptZAxis);\n\n // 找到x轴\n const xAxis = relativeItems.filter(item => {\n return item.model.specKey === 'axes' && isXAxis(item.layoutOrient);\n })[0];\n const yAxis = relativeItems.filter(item => {\n return item.model.specKey === 'axes' && isYAxis(item.layoutOrient);\n })[0];\n if (xAxis && zItems.length) {\n const sp = xAxis.getLayoutStartPoint();\n const lr = xAxis.getLayoutRect();\n const zRect = {\n x: yAxis.layoutOrient === 'left' ? sp.x + lr.width : sp.x,\n y: sp.y,\n width: this._chartLayoutRect.width,\n height: this._chartLayoutRect.height\n };\n (zItems[0].model as IAxis).directionStr = yAxis.layoutOrient === 'left' ? 'r2l' : 'l2r';\n // 将长宽高信息传给所有的轴\n const xRect = xAxis.getLayoutRect();\n const yRect = yAxis.getLayoutRect();\n // const zRect = zItems[0].getLayoutRect();\n const box3d = {\n length: zItems[0].getLayoutRect().width,\n width: xRect.width,\n height: yRect.height\n };\n\n (xAxis.model).setLayout3dBox && (xAxis.model).setLayout3dBox(box3d);\n (yAxis.model).setLayout3dBox && (yAxis.model).setLayout3dBox(box3d);\n (zItems[0].model).setLayout3dBox && (zItems[0].model).setLayout3dBox(box3d);\n\n this.layoutZAxisItems(zItems, zRect);\n }\n }\n\n /**\n * 对z轴进行布局\n * @param zItems\n */\n protected layoutZAxisItems(zItems: ILayoutItem[], zRect: IRect) {\n zItems.forEach(item => {\n // 设置盒子\n item.absoluteLayoutInRect(zRect);\n });\n }\n\n /**\n * 工具方法 根据item属性获取给item提供的布局空间\n * @param item\n */\n getItemComputeLayoutRect(item: ILayoutItem, extraOffset?: IOffset) {\n if (!extraOffset) {\n extraOffset = { offsetLeft: 0, offsetRight: 0, offsetTop: 0, offsetBottom: 0 };\n }\n const result = {\n width:\n this.rightCurrent -\n this.leftCurrent -\n item.layoutPaddingLeft -\n item.layoutPaddingRight -\n (extraOffset.offsetLeft + extraOffset.offsetRight),\n height:\n this.bottomCurrent -\n this.topCurrent -\n item.layoutPaddingTop -\n item.layoutPaddingBottom -\n (extraOffset.offsetTop + extraOffset.offsetBottom)\n };\n return result;\n }\n\n protected _checkAutoIndent(items: ILayoutItem[]) {\n const result = {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0\n };\n const rightCurrent = this._chartViewBox.x2 - this._chartViewBox.x1 - this.rightCurrent;\n const bottomCurrent = this._chartViewBox.y2 - this._chartViewBox.y1 - this.bottomCurrent;\n items.forEach(i => {\n if (!i.getModelVisible() || !i.autoIndent) {\n return;\n }\n const vOrH = i.layoutOrient === 'left' || i.layoutOrient === 'right';\n const outer = i.getLastComputeOutBounds();\n if (vOrH) {\n result.top = Math.max(result.top, outer.y1 - this.topCurrent);\n result.bottom = Math.max(result.bottom, outer.y2 - bottomCurrent);\n } else {\n result.left = Math.max(result.left, outer.x1 - this.leftCurrent);\n result.right = Math.max(result.right, outer.x2 - rightCurrent);\n }\n });\n return result;\n }\n}\n\nexport const registerLayout3d = () => {\n Factory.registerLayout(Layout3d.type, Layout3d);\n};\n","/**\n * @description PopTip组件\n */\nimport type {\n IGroup,\n IRect,\n ISymbol,\n ISymbolGraphicAttribute,\n IText,\n ITextGraphicAttribute,\n TextAlignType,\n TextBaselineType\n} from '@visactor/vrender-core';\nimport {\n AABBBounds,\n Bounds,\n getRectIntersect,\n isArray,\n isBoolean,\n isEmpty,\n isValid,\n max,\n merge,\n normalizePadding,\n pi,\n rectInsideAnotherRect\n} from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { BackgroundAttributes, ComponentOptions } from '../interface';\nimport type { PopTipAttributes } from './type';\nimport { loadPoptipComponent } from './register';\n\nconst _tBounds = new AABBBounds();\n\nloadPoptipComponent();\nexport class PopTip extends AbstractComponent> {\n name = 'poptip';\n\n static defaultAttributes: Partial = {\n position: 'rt',\n visible: true,\n title: null,\n content: null,\n titleStyle: {\n fontSize: 12,\n fill: '#000',\n textAlign: 'left',\n textBaseline: 'top'\n },\n contentStyle: {\n fontSize: 12,\n fill: '#000',\n textAlign: 'left',\n textBaseline: 'top'\n },\n maxWidthPercent: 0.8,\n space: 8,\n padding: 10\n };\n\n constructor(attributes: PopTipAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, PopTip.defaultAttributes, attributes));\n }\n\n protected render() {\n const {\n titleStyle = {} as ITextGraphicAttribute,\n position,\n contentStyle = {} as ITextGraphicAttribute,\n panel = {} as BackgroundAttributes & ISymbolGraphicAttribute & { space?: number },\n space = 4,\n minWidth = 0,\n maxWidth = Infinity,\n padding = 4,\n maxWidthPercent,\n visible,\n state,\n dx = 0,\n dy = 0\n } = this.attribute as PopTipAttributes;\n\n let { title = '', content = '' } = this.attribute as PopTipAttributes;\n\n title = this.attribute.titleFormatMethod ? this.attribute.titleFormatMethod(title) : title;\n content = this.attribute.contentFormatMethod ? this.attribute.contentFormatMethod(content) : content;\n\n const parsedPadding = normalizePadding(padding);\n\n const group = this.createOrUpdateChild('poptip-content', { x: 0, y: 0, zIndex: 1 }, 'group') as IGroup;\n\n const maxLineWidth = maxWidth - parsedPadding[1] - parsedPadding[3];\n\n const titleVisible = isValid(title) && visible !== false;\n const titleAttrs = {\n text: isArray(title) ? title : ([title] as any),\n visible: titleVisible,\n ...titleStyle,\n x: parsedPadding[3],\n y: parsedPadding[0],\n maxLineWidth,\n textAlign: 'left' as TextAlignType,\n textBaseline: 'top' as TextBaselineType\n };\n\n const titleShape = group.createOrUpdateChild('poptip-title', titleAttrs, 'wrapText') as IText;\n if (!isEmpty(state?.title)) {\n titleShape.states = state.title;\n }\n\n const titleBounds = titleShape.AABBBounds;\n const titleHeight = titleBounds.height();\n const titleWidth = titleBounds.width();\n let height = titleHeight + space;\n if (!titleVisible) {\n height = 0;\n }\n\n const contentVisible = isValid(content) && visible !== false;\n const contentAttrs = {\n text: isArray(content) ? content : ([content] as any),\n visible: contentVisible,\n ...contentStyle,\n x: parsedPadding[3],\n y: parsedPadding[0] + height,\n maxLineWidth,\n textAlign: 'left' as TextAlignType,\n textBaseline: 'top' as TextBaselineType\n };\n\n const contentShape = group.createOrUpdateChild('poptip-content', contentAttrs, 'wrapText') as IText;\n if (!isEmpty(state?.content)) {\n contentShape.states = state.content;\n }\n\n const contentBounds = contentShape.AABBBounds;\n const contentHeight = contentBounds.height();\n const contentWidth = contentBounds.width();\n\n if (contentVisible) {\n height += contentHeight;\n }\n\n // 计算整个popTip的宽高\n let popTipWidth = max(\n titleWidth + parsedPadding[1] + parsedPadding[3],\n contentWidth + parsedPadding[1] + parsedPadding[3]\n );\n if (popTipWidth > maxWidth) {\n popTipWidth = maxWidth;\n } else if (popTipWidth < minWidth) {\n popTipWidth = minWidth;\n }\n let poptipHeight = parsedPadding[0] + parsedPadding[2] + height;\n\n // 绘制背景层\n const { visible: bgVisible, ...backgroundStyle } = panel;\n const symbolSize = backgroundStyle.size ?? 12;\n const spaceSize: number | [number, number] = isArray(symbolSize)\n ? [symbolSize[0] + (backgroundStyle.space ?? 0), symbolSize[1] + (backgroundStyle.space ?? 0)]\n : (symbolSize as number) + (backgroundStyle.space ?? 0);\n const lineWidth = backgroundStyle.lineWidth ?? 1;\n const range: [number, number] | undefined = (this as any).stage\n ? [\n (this as any).stage.viewWidth ?? (this as any).stage.width,\n (this as any).stage.viewHeight ?? (this as any).stage.height\n ]\n : undefined;\n\n if (range) {\n // 尝试进行换行\n const b = (this as any).AABBBounds;\n const leftWidth = this.attribute.x ?? b.x1;\n const rightWidth = range[0] - b.x1;\n let maxSpace = Math.max(leftWidth, rightWidth);\n // 减一些buffer,buffer不能超过maxSpace的20%\n const buf = (isArray(symbolSize) ? symbolSize[0] : 12) + 3;\n maxSpace = Math.min(maxSpace - buf, maxSpace * maxWidthPercent);\n // 需要进行换行\n if (maxSpace < popTipWidth) {\n popTipWidth = maxSpace;\n const buf = parsedPadding[1] + parsedPadding[3];\n titleShape.setAttribute('maxLineWidth', maxSpace - buf);\n contentShape.setAttribute('maxLineWidth', maxSpace - buf);\n poptipHeight = parsedPadding[0] + parsedPadding[2];\n if (titleVisible) {\n poptipHeight += titleShape.AABBBounds.height() + space;\n }\n poptipHeight += contentShape.AABBBounds.height();\n }\n }\n\n const layout = position === 'auto';\n // 最多循环this.positionList次\n let maxBBoxI: number;\n let maxBBoxSize: number = -Infinity;\n for (let i = 0; i < this.positionList.length + 1; i++) {\n const p = layout ? this.positionList[i === this.positionList.length ? maxBBoxI : i] : position;\n const { angle, offset, rectOffset } = this.getAngleAndOffset(\n p,\n popTipWidth,\n poptipHeight,\n isArray(spaceSize) ? (spaceSize as [number, number]) : [spaceSize, spaceSize - lineWidth]\n );\n if (isBoolean(bgVisible)) {\n const offsetX = (isArray(symbolSize) ? symbolSize[0] : symbolSize) / 4;\n const bgSymbol = group.createOrUpdateChild(\n 'poptip-symbol-panel',\n {\n ...backgroundStyle,\n visible: bgVisible && (contentVisible || titleVisible),\n x: offsetX,\n y: 0,\n strokeBoundsBuffer: -1,\n boundsPadding: -2,\n anchor: [0, 0],\n symbolType: 'arrow2Left',\n angle: angle,\n dx: offset[0],\n dy: offset[1],\n size: symbolSize,\n zIndex: -9\n },\n 'symbol'\n ) as ISymbol;\n if (!isEmpty(state?.panel)) {\n bgSymbol.states = state.panel;\n }\n\n const bgRect = group.createOrUpdateChild(\n 'poptip-rect-panel',\n {\n ...backgroundStyle,\n visible: bgVisible && (contentVisible || titleVisible),\n x: 0,\n y: 0,\n width: popTipWidth,\n height: poptipHeight,\n zIndex: -8\n },\n 'rect'\n ) as IRect;\n if (!isEmpty(state?.panel)) {\n bgRect.states = state.panel;\n }\n }\n\n group.setAttributes({\n x: -offset[0] + dx,\n y: -offset[1] + dy\n });\n\n if (layout && range) {\n _tBounds.setValue(0, 0, popTipWidth, poptipHeight).transformWithMatrix(group.globalTransMatrix);\n const b = _tBounds;\n const stageBounds = new Bounds().setValue(0, 0, range[0], range[1]);\n if (rectInsideAnotherRect(b, stageBounds, false)) {\n break;\n } else {\n const bbox = getRectIntersect(b, stageBounds, false);\n const size = (bbox.x2 - bbox.x1) * (bbox.y2 - bbox.y1);\n if (size > maxBBoxSize) {\n maxBBoxSize = size;\n maxBBoxI = i;\n }\n }\n } else {\n break;\n }\n }\n }\n\n positionList = ['top', 'tl', 'tr', 'bottom', 'bl', 'br', 'left', 'lt', 'lb', 'right', 'rt', 'rb'];\n\n getAngleAndOffset(\n position: string,\n width: number,\n height: number,\n size: [number, number]\n ): { angle: number; offset: [number, number]; rectOffset: [number, number] } {\n // const sizeW = size[0];\n const sizeH = size[1] / 2;\n switch (position) {\n case 'tl':\n return {\n angle: (pi / 2) * 3,\n offset: [width / 4, height + sizeH],\n rectOffset: [-width / 4, -height - size[1]]\n };\n case 'top':\n return { angle: (pi / 2) * 3, offset: [width / 2, height + sizeH], rectOffset: [0, -height - size[1]] };\n case 'tr':\n return {\n angle: (pi / 2) * 3,\n offset: [(width / 4) * 3, height + sizeH],\n rectOffset: [(width / 4) * 3, -height - size[1]]\n };\n case 'rt':\n return { angle: 0, offset: [-sizeH, height / 5], rectOffset: [(width / 4) * 3, -height - size[1]] };\n case 'right':\n return { angle: 0, offset: [-sizeH, height / 2], rectOffset: [(width / 4) * 3, -height - size[1]] };\n case 'rb':\n return { angle: 0, offset: [-sizeH, (height / 5) * 4], rectOffset: [(width / 4) * 3, -height - size[1]] };\n case 'bl':\n return { angle: pi / 2, offset: [width / 4, -sizeH], rectOffset: [-width / 4, -height - size[1]] };\n case 'bottom':\n return { angle: pi / 2, offset: [width / 2, -sizeH], rectOffset: [0, -height - size[1]] };\n case 'br':\n return { angle: pi / 2, offset: [(width / 4) * 3, -sizeH], rectOffset: [(width / 4) * 3, -height - size[1]] };\n case 'lt':\n return { angle: pi, offset: [width + sizeH, height / 5], rectOffset: [-width / 4, -height - size[1]] };\n case 'left':\n return { angle: pi, offset: [width + sizeH, height / 2], rectOffset: [0, -height - size[1]] };\n case 'lb':\n return {\n angle: pi,\n offset: [width + sizeH, (height / 5) * 4],\n rectOffset: [(width / 4) * 3, -height - size[1]]\n };\n }\n }\n}\n","import type {\n IContext2d,\n IGraphic,\n IGraphicAttribute,\n IInteractiveSubRenderContribution,\n IThemeAttribute,\n IDrawContext\n} from '@visactor/vrender-core';\nimport { injectable } from '@visactor/vrender-core';\nimport { PopTip } from './poptip';\nimport { merge } from '@visactor/vutils';\nimport { theme } from './theme';\n\nfunction wrapPoptip(target: Record, source: Record) {\n merge(target, theme.poptip, source);\n return target;\n}\n\n@injectable()\nexport class PopTipRenderContribution implements IInteractiveSubRenderContribution {\n declare poptipComponent: PopTip;\n render(\n graphic: IGraphic>,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n options?: any\n ): void {\n if (graphic._showPoptip === 1) {\n const { visible, visibleCb } = (graphic.attribute as any).poptip || {};\n if (visible === false || (visibleCb && visibleCb(graphic) === false)) {\n return;\n }\n const attribute = {};\n merge(\n attribute,\n PopTip.defaultAttributes,\n (graphic.attribute as any).poptip ? (graphic.attribute as any).poptip : {}\n );\n if (!this.poptipComponent) {\n this.poptipComponent = new PopTip(attribute);\n } else {\n this.poptipComponent.initAttributes(attribute);\n }\n // 如果text图元没有配置title和content的话\n let poptip = (graphic.attribute as any).poptip || {};\n if (graphic.type === 'text' && poptip.title == null && poptip.content == null) {\n const out = {};\n wrapPoptip(out, poptip);\n poptip = out;\n poptip.content = poptip.content ?? (graphic.attribute as any).text;\n }\n const matrix = graphic.globalTransMatrix;\n this.poptipComponent.setAttributes({\n visibleAll: true,\n pickable: false,\n childrenPickable: false,\n ...poptip,\n x: matrix.e,\n y: matrix.f\n });\n // 添加到交互层中\n drawContext.stage.tryInitInteractiveLayer();\n const interactiveLayer = drawContext.stage.getLayer('_builtin_interactive');\n if (interactiveLayer) {\n interactiveLayer.add(this.poptipComponent);\n }\n } else if (graphic._showPoptip === 2) {\n graphic._showPoptip = 0;\n this.poptipComponent &&\n this.poptipComponent.setAttributes({\n visibleAll: false\n });\n }\n }\n}\n","import type { FederatedPointerEvent, IGraphic, IPlugin, IPluginService } from '@visactor/vrender-core';\nimport { Generator, injectable } from '@visactor/vrender-core';\n\n// _showPoptip: 0-没有,1-添加,2-删除\n\n@injectable()\nexport class PopTipPlugin implements IPlugin {\n name: 'poptip' = 'poptip';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n activeGraphic: IGraphic;\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n const { stage } = this.pluginService;\n\n stage.addEventListener('pointerover', this.poptip);\n }\n poptip = (e: FederatedPointerEvent) => {\n const graphic = e.target as any;\n if (graphic.isContainer || !graphic.attribute) {\n this.unpoptip(e);\n return;\n }\n // 触发graphic重绘\n if (graphic === this.activeGraphic) {\n return;\n }\n const { poptip } = graphic.attribute;\n if (poptip) {\n graphic.setAttributes({});\n graphic._showPoptip = 1;\n }\n\n if (this.activeGraphic) {\n this.activeGraphic.setAttributes({});\n this.activeGraphic._showPoptip = 2;\n }\n // console.log(graphic)\n this.setActiveGraphic(graphic, true);\n };\n\n unpoptip = (e: FederatedPointerEvent) => {\n if (!this.activeGraphic) {\n return;\n }\n this.activeGraphic.setAttributes({});\n this.activeGraphic._showPoptip = 2;\n this.setActiveGraphic(null, true);\n };\n\n setActiveGraphic(graphic: any | null, rerender?: boolean) {\n this.activeGraphic = graphic;\n // 触发重绘\n this.pluginService.stage.renderNextFrame();\n }\n\n deactivate(context: IPluginService): void {\n const { stage } = this.pluginService;\n stage.removeEventListener('pointerover', this.poptip);\n }\n}\n\n@injectable()\nexport class PopTipForClipedTextPlugin implements IPlugin {\n name: 'poptipForText' = 'poptipForText';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n activeGraphic: IGraphic;\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n const { stage } = this.pluginService;\n\n stage.addEventListener('pointerover', this.poptip);\n stage.addEventListener('pointerleave', this.pointerlave);\n }\n pointerlave = (e: any) => {\n const { stage } = this.pluginService;\n if (e.target === stage) {\n this.unpoptip(e);\n }\n };\n poptip = (e: FederatedPointerEvent) => {\n const graphic = e.target as any;\n if (\n graphic.type !== 'text' ||\n !graphic.cliped ||\n graphic.isContainer ||\n !graphic.attribute ||\n graphic.attribute.disableAutoClipedPoptip\n ) {\n this.unpoptip(e);\n return;\n }\n // 触发graphic重绘\n if (graphic === this.activeGraphic) {\n return;\n }\n const { poptip = {} } = graphic.attribute;\n if (poptip) {\n graphic.setAttributes({});\n graphic._showPoptip = 1;\n }\n // 添加默认poptip\n if (this.activeGraphic) {\n this.activeGraphic.setAttributes({});\n this.activeGraphic._showPoptip = 2;\n }\n // console.log(graphic)\n this.setActiveGraphic(graphic, true);\n };\n\n unpoptip = (e: FederatedPointerEvent) => {\n if (!this.activeGraphic) {\n return;\n }\n this.activeGraphic.setAttributes({});\n this.activeGraphic._showPoptip = 2;\n this.setActiveGraphic(null, true);\n };\n\n setActiveGraphic(graphic: any | null, rerender?: boolean) {\n this.activeGraphic = graphic;\n // 触发重绘\n this.pluginService.stage.renderNextFrame();\n }\n\n deactivate(context: IPluginService): void {\n const { stage } = this.pluginService;\n stage.removeEventListener('pointerover', this.poptip);\n stage.removeEventListener('pointerleave', this.pointerlave);\n }\n}\n","import {\n InteractiveSubRenderContribution,\n AutoEnablePlugins,\n ContainerModule,\n container\n} from '@visactor/vrender-core';\nimport { PopTipRenderContribution } from './contribution';\nimport { PopTipPlugin, PopTipForClipedTextPlugin } from './poptip-plugin';\n\nexport const popTipModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (!isBound(PopTipRenderContribution)) {\n bind(PopTipRenderContribution).toSelf().inSingletonScope();\n bind(InteractiveSubRenderContribution).toService(PopTipRenderContribution);\n }\n if (!isBound(PopTipPlugin)) {\n bind(PopTipPlugin).toSelf();\n bind(AutoEnablePlugins).toService(PopTipPlugin);\n }\n if (!isBound(PopTipForClipedTextPlugin)) {\n bind(PopTipForClipedTextPlugin).toSelf();\n bind(AutoEnablePlugins).toService(PopTipForClipedTextPlugin);\n }\n});\n\nexport function loadPoptip() {\n container.load(popTipModule);\n}\n","import { VChart } from './core';\n\nimport { registerLineChart } from './chart/line';\nimport { registerAreaChart } from './chart/area';\nimport { registerBar3dChart, registerBarChart } from './chart/bar';\nimport { registerScatterChart } from './chart/scatter';\nimport { registerMapChart } from './chart/map';\nimport { registerPie3dChart, registerPieChart } from './chart/pie';\nimport { registerRoseChart } from './chart/rose';\nimport { registerRadarChart } from './chart/radar';\nimport { registerCommonChart } from './chart/common';\nimport { registerSequenceChart } from './chart/sequence';\nimport { registerHistogram3dChart, registerHistogramChart } from './chart/histogram';\nimport { registerCircularProgressChart } from './chart/progress/circular';\nimport { registerGaugeChart } from './chart/gauge';\nimport {\n registerWordCloudChart,\n registerWordCloudShapeChart,\n registerWordCloud3dChart,\n registerWordCloudShape3dChart\n} from './chart/word-cloud';\nimport { registerFunnel3dChart, registerFunnelChart } from './chart/funnel';\nimport { registerLinearProgressChart } from './chart/progress/linear';\nimport { registerRangeColumn3dChart, registerRangeColumnChart } from './chart/range-column';\nimport { registerSunburstChart } from './chart/sunburst';\nimport { registerCirclePackingChart } from './chart/circle-packing';\nimport { registerTreemapChart } from './chart/treemap';\nimport { registerWaterfallChart } from './chart/waterfall';\nimport { registerBoxplotChart } from './chart/box-plot';\nimport { registerSankeyChart } from './chart/sankey';\nimport { registerRangeAreaChart } from './chart/range-area';\nimport { registerHeatmapChart } from './chart/heatmap';\nimport { registerCorrelationChart } from './chart/correlation';\nimport {\n registerCartesianBandAxis,\n registerCartesianLinearAxis,\n registerCartesianLogAxis,\n registerCartesianSymlogAxis,\n registerCartesianTimeAxis\n} from './component/axis/cartesian';\nimport { registerPolarBandAxis, registerPolarLinearAxis } from './component/axis/polar';\nimport { registerContinuousLegend, registerDiscreteLegend } from './component/legend';\nimport { registerTooltip } from './component/tooltip';\nimport { registerCartesianCrossHair, registerPolarCrossHair } from './component/crosshair';\nimport { registerDataZoom, registerScrollBar } from './component/data-zoom';\nimport { registerIndicator } from './component/indicator';\nimport { registerGeoCoordinate } from './component/geo';\nimport { registerMarkLine } from './component/marker/mark-line';\nimport { registerTitle } from './component/title';\nimport { registerMarkArea } from './component/marker/mark-area';\nimport { registerPlayer } from './component/player';\nimport { registerLabel } from './component/label';\nimport { registerTotalLabel } from './component/label/total-label';\nimport { registerMarkPoint } from './component/marker/mark-point';\nimport { registerBrush } from './component/brush';\nimport { registerCustomMark } from './component/custom-mark';\nimport { registerMapLabel } from './component/map-label';\nimport { registerGridLayout } from './layout/grid-layout/grid-layout';\nimport { registerLayout3d } from './layout/layout3d';\nimport { registerPoptip } from './component/poptip';\n\nVChart.useRegisters([\n // charts\n registerLineChart,\n registerAreaChart,\n registerBarChart,\n registerScatterChart,\n registerPieChart,\n registerRoseChart,\n registerRadarChart,\n registerHistogramChart,\n registerMapChart,\n registerGaugeChart,\n registerWordCloudChart,\n registerWordCloudShapeChart,\n registerFunnelChart,\n registerWaterfallChart,\n registerBoxplotChart,\n registerCircularProgressChart,\n registerLinearProgressChart,\n registerRangeColumnChart,\n registerRangeAreaChart,\n registerSunburstChart,\n registerCirclePackingChart,\n registerTreemapChart,\n registerSankeyChart,\n registerHeatmapChart,\n registerSequenceChart,\n registerCorrelationChart,\n registerCommonChart,\n\n // 3d charts\n registerBar3dChart,\n registerPie3dChart,\n registerHistogram3dChart,\n registerFunnel3dChart,\n registerRangeColumn3dChart,\n registerWordCloud3dChart,\n registerWordCloudShape3dChart,\n\n // components\n registerCartesianLinearAxis,\n registerCartesianBandAxis,\n registerCartesianTimeAxis,\n registerCartesianLogAxis,\n registerCartesianSymlogAxis,\n registerPolarBandAxis,\n registerPolarLinearAxis,\n\n registerDiscreteLegend,\n registerContinuousLegend,\n\n registerTooltip,\n registerCartesianCrossHair,\n registerPolarCrossHair,\n\n registerDataZoom,\n registerScrollBar,\n registerIndicator,\n registerGeoCoordinate,\n registerMarkPoint,\n registerMarkLine,\n registerMarkArea,\n registerTitle,\n registerPlayer,\n registerLabel,\n registerTotalLabel,\n registerBrush,\n registerCustomMark,\n registerMapLabel,\n registerPoptip,\n\n // layout\n registerGridLayout,\n registerLayout3d\n]);\n\nexport { VChart };\n","import { loadPoptip } from '@visactor/vrender-components';\n\nexport const registerPoptip = () => {\n loadPoptip();\n};\n","/**\n * @description The core module of VChart, containing the necessary interfaces for using VChart.\n */\n\nimport { VChart } from './vchart';\nimport { Factory } from './factory';\n\nexport { VChart, Factory };\n\n// export the version\nexport const version = \"1.8.11\";\n\n// export necessary types\nexport type { IVChart } from './interface';\nexport type { IStateSpec, StateValueType } from '../compile/mark';\n\nexport * from '../typings/spec/common';\nexport * from '../event/interface';\nexport * from '../theme/interface';\nexport * from '../constant';\nexport * from './interface';\n\n/**\n * spec\n */\nexport * from '../typings/spec/index';\n\n// theme\nexport * from '../theme/index';\n\n// vrender\nexport { vglobal } from '@visactor/vrender-core';\n\n// plugin\nexport * from '../plugin';\n","import { VChart } from './vchart-all';\n\nexport default VChart;\n\nexport * from './core';\n\n// chart model for extension\nexport * from './chart';\nexport * from './series';\nexport * from './mark';\nexport * from './component';\nexport * from './layout';\nexport * from './env';\nexport * from './event';\n","export const SEMI_FONT_FAMILY =\n // eslint-disable-next-line max-len\n 'Inter,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif';\n\nexport const THEME_MODE_ATTRIBUTE = 'theme-mode';\n","import { THEME_MODE_ATTRIBUTE } from './common/constants';\n\nexport * from '@visactor/vchart-theme-utils';\n\nexport const getCurrentMode = () =>\n document.body.hasAttribute(THEME_MODE_ATTRIBUTE) && document.body.getAttribute(THEME_MODE_ATTRIBUTE) === 'dark'\n ? 'dark'\n : 'light';\n\nexport const generateThemeName = (mode: 'light' | 'dark') => `semiDesign${mode[0].toUpperCase()}${mode.slice(1)}`;\n\nexport const observeThemeSwitch = (callback: (mutation: MutationRecord, node: HTMLLinkElement) => void) => {\n const observer = new MutationObserver(mutations => {\n mutations.forEach(mutation => {\n if (mutation.addedNodes.length === 1) {\n const node = mutation.addedNodes[0] as HTMLLinkElement;\n if (node.tagName === 'LINK' && node.getAttribute?.('semi-theme-switcher') === 'true') {\n callback(mutation, node);\n }\n }\n });\n });\n observer.observe(document.body, { childList: true });\n};\n","import type { ITheme } from '@visactor/vchart';\nimport { colorScheme } from './color-scheme';\nimport { SEMI_FONT_FAMILY } from '../common/constants';\n\nexport const semiDesignDark: ITheme = {\n name: 'semiDesignDark',\n description: 'Semi Design - dark',\n type: 'dark',\n fontFamily: SEMI_FONT_FAMILY,\n colorScheme\n};\n","import type { BuiltinColorPalette, IColorSchemeStruct, IThemeColorScheme } from '@visactor/vchart';\n// eslint-disable-next-line no-duplicate-imports\nimport { lightTheme } from '@visactor/vchart';\n\nexport const colorScheme: IThemeColorScheme = {\n default: {\n dataScheme: (lightTheme.colorScheme.default as IColorSchemeStruct).dataScheme,\n palette: {\n /** 背景色 */\n backgroundColor: '#16161a',\n /** 图表边框色 */\n borderColor: 'rgba(255,255,255,0.08)',\n /** 默认阴影颜色 */\n shadowColor: 'rgba(0,0,0,0.25)',\n /** 鼠标 hover 项背景颜色 */\n hoverBackgroundColor: 'rgba(255,255,255,0.12)',\n /** 滑块类组件背景条填充颜色 */\n sliderRailColor: 'rgba(255,255,255,0.12)',\n /** 滑块类组件滑块填充颜色 */\n sliderHandleColor: '#e4e7f5',\n /** 滑块类组件已选范围填充颜色 */\n sliderTrackColor: 'rgba(84,169,255,1)',\n /** 浮层背景区域颜色 */\n popupBackgroundColor: '#43444a',\n\n /** 主要字色 */\n primaryFontColor: 'rgba(249,249,249,1)',\n /** 次要字色 */\n secondaryFontColor: 'rgba(249,249,249,0.8)',\n /** 第三字色 */\n tertiaryFontColor: 'rgba(249,249,249,0.6)',\n /** 轴标签字色 */\n axisLabelFontColor: 'rgba(249,249,249,0.6)',\n /** 禁用字色 */\n disableFontColor: 'rgba(249,249,249,0.35)',\n /** 轴高亮标记字色 */\n axisMarkerFontColor: '#16161a',\n\n /** 轴网格线颜色 */\n axisGridColor: 'rgba(255,255,255,0.08)',\n /** 轴线颜色 */\n axisDomainColor: 'rgba(255,255,255,0.08)',\n\n /** 缩略轴滑块描边颜色 */\n dataZoomHandleStrokeColor: 'rgba(46,50,56,0.13)',\n /** 缩略轴图表区域颜色 */\n dataZoomChartColor: 'rgba(255,255,255,0.16)',\n\n /** 播放器控制器填充颜色 */\n playerControllerColor: 'rgba(84,169,255,1)',\n\n /** 轴高亮标记背景色 */\n axisMarkerBackgroundColor: 'rgba(249,249,249,1)',\n /** 标注标签背景颜色 */\n markLabelBackgroundColor: 'rgba(255,255,255,0.08)',\n /** 标注线颜色 */\n markLineStrokeColor: 'rgba(249,249,249,0.8)',\n\n /** 危险色 */\n dangerColor: 'rgba(252,114,90,1)',\n /** 警告色 */\n warningColor: 'rgba(255,174,67,1)',\n /** 成功色 */\n successColor: 'rgba(93,194,100,1)',\n /** 信息色 */\n infoColor: 'rgba(84,169,255,1)'\n } as Partial\n }\n};\n","import type { BuiltinColorPalette, IColorSchemeStruct, IThemeColorScheme } from '@visactor/vchart';\n// eslint-disable-next-line no-duplicate-imports\nimport { lightTheme } from '@visactor/vchart';\n\nexport const colorScheme: IThemeColorScheme = {\n default: {\n dataScheme: (lightTheme.colorScheme.default as IColorSchemeStruct).dataScheme,\n palette: {\n /** 背景色 */\n backgroundColor: 'rgba(255,255,255,1)',\n /** 图表边框色 */\n borderColor: 'rgba(28,31,35,0.08)',\n /** 默认阴影颜色 */\n shadowColor: 'rgba(0,0,0,0.1)',\n /** 鼠标 hover 项背景颜色 */\n hoverBackgroundColor: 'rgba(46,50,56,0.05)',\n /** 滑块类组件背景条填充颜色 */\n sliderRailColor: 'rgba(46,50,56,0.05)',\n /** 滑块类组件滑块填充颜色 */\n sliderHandleColor: 'rgba(255,255,255,1)',\n /** 滑块类组件已选范围填充颜色 */\n sliderTrackColor: 'rgba(0,100,250,1)',\n /** 浮层背景区域颜色 */\n popupBackgroundColor: 'rgba(255,255,255,1)',\n\n /** 主要字色 */\n primaryFontColor: 'rgba(28,31,35,1)',\n /** 次要字色 */\n secondaryFontColor: 'rgba(28,31,35,0.8)',\n /** 第三字色 */\n tertiaryFontColor: 'rgba(28,31,35,0.62)',\n /** 轴标签字色 */\n axisLabelFontColor: 'rgba(28,31,35,0.62)',\n /** 禁用字色 */\n disableFontColor: 'rgba(28,31,35,0.35)',\n /** 轴高亮标记字色 */\n axisMarkerFontColor: 'rgba(255,255,255,1)',\n\n /** 轴网格线颜色 */\n axisGridColor: 'rgba(28,31,35,0.08)',\n /** 轴线颜色 */\n axisDomainColor: 'rgba(28,31,35,0.15)',\n\n /** 缩略轴滑块描边颜色 */\n dataZoomHandleStrokeColor: 'rgba(46,50,56,0.13)',\n /** 缩略轴图表区域颜色 */\n dataZoomChartColor: 'rgba(46,50,56,0.09)',\n\n /** 播放器控制器填充颜色 */\n playerControllerColor: 'rgba(0,100,250,1)',\n\n /** 轴高亮标记背景色 */\n axisMarkerBackgroundColor: 'rgba(28,31,35,1)',\n /** 标注标签背景颜色 */\n markLabelBackgroundColor: 'rgba(28,31,35,0.08)',\n /** 标注线颜色 */\n markLineStrokeColor: 'rgba(28,31,35,0.8)',\n\n /** 危险色 */\n dangerColor: 'rgba(249,57,32,1)',\n /** 警告色 */\n warningColor: 'rgba(252,136,0,1)',\n /** 成功色 */\n successColor: 'rgba(59,179,70,1)',\n /** 信息色 */\n infoColor: 'rgba(0,100,250,1)'\n } as Partial\n }\n};\n","import type { DataSchemeTokenMap, PaletteTokenMap } from '@visactor/vchart-theme-utils/esm/interface';\n\nexport const paletteTokenMap: PaletteTokenMap = {\n /** 背景色 */\n backgroundColor: '--semi-color-bg-0',\n /** 图表边框色 */\n borderColor: '--semi-color-border',\n /** 鼠标 hover 项背景颜色 */\n hoverBackgroundColor: '--semi-color-fill-0',\n /** 滑块类组件背景条填充颜色 */\n sliderRailColor: '--semi-color-fill-0',\n /** 滑块类组件滑块填充颜色 */\n sliderHandleColor: '--semi-white',\n /** 滑块类组件已选范围填充颜色 */\n sliderTrackColor: '--semi-color-primary',\n /** 浮层背景区域颜色 */\n popupBackgroundColor: '--semi-color-bg-3',\n\n /** 主要字色 */\n primaryFontColor: '--semi-color-text-0',\n /** 次要字色 */\n secondaryFontColor: '--semi-color-text-1',\n /** 第三字色 */\n tertiaryFontColor: '--semi-color-text-2',\n /** 轴标签字色 */\n axisLabelFontColor: '--semi-color-text-0',\n /** 禁用字色 */\n disableFontColor: '--semi-color-disabled-text',\n /** 轴高亮标记字色 */\n axisMarkerFontColor: '--semi-color-bg-0',\n\n /** 轴网格线颜色 */\n axisGridColor: '--semi-color-border',\n /** 轴线颜色 */\n axisDomainColor: {\n light: '--semi-grey-9',\n dark: '--semi-color-border'\n },\n\n /** 缩略轴滑块描边颜色 */\n dataZoomHandleStrokeColor: {\n light: '--semi-color-fill-2'\n },\n /** 缩略轴图表区域颜色 */\n dataZoomChartColor: '--semi-color-fill-1',\n\n /** 播放器控制器填充颜色 */\n playerControllerColor: '--semi-color-primary',\n\n /** 轴高亮标记背景色 */\n axisMarkerBackgroundColor: '--semi-color-text-0',\n /** 标注标签背景颜色 */\n markLabelBackgroundColor: '--semi-color-border',\n /** 标注线颜色 */\n markLineStrokeColor: '--semi-color-text-1',\n\n /** 危险色 */\n dangerColor: '--semi-color-danger',\n /** 警告色 */\n warningColor: '--semi-color-warning',\n /** 成功色 */\n successColor: '--semi-color-success',\n /** 信息色 */\n infoColor: '--semi-color-info'\n};\n\nexport const dataSchemeTokenMap: DataSchemeTokenMap = [\n // 第一档颜色(数据项 <= 10)\n {\n maxDomainLength: 10,\n scheme: [\n '--semi-color-data-0',\n '--semi-color-data-2',\n '--semi-color-data-4',\n '--semi-color-data-6',\n '--semi-color-data-8',\n '--semi-color-data-10',\n '--semi-color-data-12',\n '--semi-color-data-14',\n '--semi-color-data-16',\n '--semi-color-data-18'\n ]\n },\n // 第二档颜色(数据项 > 10)\n {\n scheme: [\n '--semi-color-data-0',\n '--semi-color-data-1',\n '--semi-color-data-2',\n '--semi-color-data-3',\n '--semi-color-data-4',\n '--semi-color-data-5',\n '--semi-color-data-6',\n '--semi-color-data-7',\n '--semi-color-data-8',\n '--semi-color-data-9',\n '--semi-color-data-10',\n '--semi-color-data-11',\n '--semi-color-data-12',\n '--semi-color-data-13',\n '--semi-color-data-14',\n '--semi-color-data-15',\n '--semi-color-data-16',\n '--semi-color-data-17',\n '--semi-color-data-18',\n '--semi-color-data-19'\n ]\n }\n];\n","/** 从当前页面环境中读取 token 的值 */\nexport const getTokenValue = (\n token?: string,\n defaultValue?: T,\n chartContainer?: HTMLElement\n): T | string | undefined => {\n const value = token\n ? getComputedStyle(chartContainer ?? document.body).getPropertyValue(token) || defaultValue\n : defaultValue;\n if (value && !isNaN(value[0])) {\n return `rgba(${value})`;\n }\n return value;\n};\n","import { getTokenValue } from \"./utils\";\n\nexport const generateDataScheme = (mode, tokenMap, baseDataScheme, chartContainer) => tokenMap.map(((item, i) => {\n const {scheme: scheme} = baseDataScheme[i];\n return Object.assign(Object.assign({}, item), {\n scheme: item.scheme.map(((token, j) => getTokenValue(\"object\" == typeof token ? token[mode] : token, null == scheme ? void 0 : scheme[j], chartContainer)))\n });\n}));\n\nexport const generatePalette = (mode, tokenMap, basePalette, chartContainer) => {\n const newPalette = {};\n return Object.keys(tokenMap).forEach((key => {\n const token = \"object\" == typeof tokenMap[key] ? tokenMap[key][mode] : tokenMap[key];\n newPalette[key] = getTokenValue(token, basePalette[key], chartContainer);\n })), newPalette;\n};","import { semiDesignDark } from \"./dark\";\n\nimport { semiDesignLight } from \"./light\";\n\nimport { dataSchemeTokenMap, paletteTokenMap } from \"./common/token-map\";\n\nimport { generateDataScheme, generatePalette } from \"@visactor/vchart-theme-utils\";\n\nconst baseThemeMap = {\n light: semiDesignLight,\n dark: semiDesignDark\n};\n\nexport const generateVChartSemiTheme = (mode, chartContainer) => {\n const baseTheme = baseThemeMap[mode], {dataScheme: dataScheme, palette: palette} = baseTheme.colorScheme.default, colorScheme = {\n default: {\n dataScheme: generateDataScheme(mode, dataSchemeTokenMap, dataScheme, chartContainer),\n palette: generatePalette(mode, paletteTokenMap, palette, chartContainer)\n }\n };\n return Object.assign(Object.assign({}, baseTheme), {\n colorScheme: colorScheme\n });\n};","import type { ITheme } from '@visactor/vchart';\nimport { colorScheme } from './color-scheme';\nimport { SEMI_FONT_FAMILY } from '../common/constants';\n\nexport const semiDesignLight: ITheme = {\n name: 'semiDesignLight',\n description: 'Semi Design - light',\n type: 'light',\n fontFamily: SEMI_FONT_FAMILY,\n colorScheme\n};\n","import type { ITheme } from '@visactor/vchart';\n// eslint-disable-next-line no-duplicate-imports\nimport VChart from '@visactor/vchart';\nimport type { IInitVChartSemiThemeOption } from './interface';\nimport { generateThemeName, getCurrentMode, observeAttribute, observeThemeSwitch } from './util';\nimport { generateVChartSemiTheme } from './generator';\nimport { THEME_MODE_ATTRIBUTE } from './common/constants';\n\nexport * from './theme-map';\nexport * from './generator';\nexport * from './light';\nexport * from './dark';\n\nexport const initVChartSemiTheme = (options?: IInitVChartSemiThemeOption) => {\n const { defaultMode, isWatchingMode = true, isWatchingThemeSwitch = false } = options ?? {};\n\n switchVChartSemiTheme(false, defaultMode);\n\n if (isWatchingMode) {\n observeAttribute(document.body, THEME_MODE_ATTRIBUTE, () => switchVChartSemiTheme());\n }\n if (isWatchingThemeSwitch) {\n observeThemeSwitch(() => {\n const mode = getCurrentMode();\n const cacheColorScheme = JSON.stringify(generateVChartSemiTheme(mode).colorScheme);\n // 轮询直到监测到主题变化\n let times = 0;\n const timer = setInterval(() => {\n const theme = generateVChartSemiTheme(mode);\n if (times > 50 || cacheColorScheme !== JSON.stringify(theme.colorScheme)) {\n switchVChartSemiTheme(true, mode, theme);\n clearInterval(timer);\n }\n times++;\n }, 100);\n });\n }\n};\n\nexport const switchVChartSemiTheme = (force?: boolean, mode?: 'light' | 'dark', theme?: ITheme) => {\n if (!mode) {\n mode = getCurrentMode();\n }\n const themeName = generateThemeName(mode);\n if (!force && VChart.ThemeManager.getCurrentTheme() === themeName) {\n return;\n } else if (force) {\n VChart.ThemeManager.removeTheme(themeName);\n }\n if (!VChart.ThemeManager.themeExist(themeName)) {\n VChart.ThemeManager.registerTheme(themeName, theme ?? generateVChartSemiTheme(mode));\n }\n VChart.ThemeManager.setCurrentTheme(themeName);\n};\n","////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Actions represent the type of change to a location value.\n */\nexport enum Action {\n /**\n * A POP indicates a change to an arbitrary index in the history stack, such\n * as a back or forward navigation. It does not describe the direction of the\n * navigation, only that the current index changed.\n *\n * Note: This is the default action for newly created history objects.\n */\n Pop = \"POP\",\n\n /**\n * A PUSH indicates a new entry being added to the history stack, such as when\n * a link is clicked and a new page loads. When this happens, all subsequent\n * entries in the stack are lost.\n */\n Push = \"PUSH\",\n\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Replace = \"REPLACE\",\n}\n\n/**\n * The pathname, search, and hash values of a URL.\n */\nexport interface Path {\n /**\n * A URL pathname, beginning with a /.\n */\n pathname: string;\n\n /**\n * A URL search string, beginning with a ?.\n */\n search: string;\n\n /**\n * A URL fragment identifier, beginning with a #.\n */\n hash: string;\n}\n\n// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\n\n/**\n * An entry in a history stack. A location contains information about the\n * URL path, as well as possibly some arbitrary state and a key.\n */\nexport interface Location extends Path {\n /**\n * A value of arbitrary data associated with this location.\n */\n state: State;\n\n /**\n * A unique string associated with this location. May be used to safely store\n * and retrieve data in some other storage API, like `localStorage`.\n *\n * Note: This value is always \"default\" on the initial location.\n */\n key: string;\n}\n\n/**\n * A change to the current location.\n */\nexport interface Update {\n /**\n * The action that triggered the change.\n */\n action: Action;\n\n /**\n * The new location.\n */\n location: Location;\n\n /**\n * The delta between this location and the former location in the history stack\n */\n delta: number | null;\n}\n\n/**\n * A function that receives notifications about location changes.\n */\nexport interface Listener {\n (update: Update): void;\n}\n\n/**\n * Describes a location that is the destination of some navigation, either via\n * `history.push` or `history.replace`. This may be either a URL or the pieces\n * of a URL path.\n */\nexport type To = string | Partial;\n\n/**\n * A history is an interface to the navigation stack. The history serves as the\n * source of truth for the current location, as well as provides a set of\n * methods that may be used to change it.\n *\n * It is similar to the DOM's `window.history` object, but with a smaller, more\n * focused API.\n */\nexport interface History {\n /**\n * The last action that modified the current location. This will always be\n * Action.Pop when a history instance is first created. This value is mutable.\n */\n readonly action: Action;\n\n /**\n * The current location. This value is mutable.\n */\n readonly location: Location;\n\n /**\n * Returns a valid href for the given `to` value that may be used as\n * the value of an attribute.\n *\n * @param to - The destination URL\n */\n createHref(to: To): string;\n\n /**\n * Returns a URL for the given `to` value\n *\n * @param to - The destination URL\n */\n createURL(to: To): URL;\n\n /**\n * Encode a location the same way window.history would do (no-op for memory\n * history) so we ensure our PUSH/REPLACE navigations for data routers\n * behave the same as POP\n *\n * @param to Unencoded path\n */\n encodeLocation(to: To): Path;\n\n /**\n * Pushes a new location onto the history stack, increasing its length by one.\n * If there were any entries in the stack after the current one, they are\n * lost.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n push(to: To, state?: any): void;\n\n /**\n * Replaces the current location in the history stack with a new one. The\n * location that was replaced will no longer be available.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n replace(to: To, state?: any): void;\n\n /**\n * Navigates `n` entries backward/forward in the history stack relative to the\n * current index. For example, a \"back\" navigation would use go(-1).\n *\n * @param delta - The delta in the stack index\n */\n go(delta: number): void;\n\n /**\n * Sets up a listener that will be called whenever the current location\n * changes.\n *\n * @param listener - A function that will be called when the location changes\n * @returns unlisten - A function that may be used to stop listening\n */\n listen(listener: Listener): () => void;\n}\n\ntype HistoryState = {\n usr: any;\n key?: string;\n idx: number;\n};\n\nconst PopStateEventType = \"popstate\";\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Memory History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A user-supplied object that describes a location. Used when providing\n * entries to `createMemoryHistory` via its `initialEntries` option.\n */\nexport type InitialEntry = string | Partial;\n\nexport type MemoryHistoryOptions = {\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n v5Compat?: boolean;\n};\n\n/**\n * A memory history stores locations in memory. This is useful in stateful\n * environments where there is no web browser, such as node tests or React\n * Native.\n */\nexport interface MemoryHistory extends History {\n /**\n * The current index in the history stack.\n */\n readonly index: number;\n}\n\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nexport function createMemoryHistory(\n options: MemoryHistoryOptions = {}\n): MemoryHistory {\n let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n let entries: Location[]; // Declare so we can access from createMemoryLocation\n entries = initialEntries.map((entry, index) =>\n createMemoryLocation(\n entry,\n typeof entry === \"string\" ? null : entry.state,\n index === 0 ? \"default\" : undefined\n )\n );\n let index = clampIndex(\n initialIndex == null ? entries.length - 1 : initialIndex\n );\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n function clampIndex(n: number): number {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation(): Location {\n return entries[index];\n }\n function createMemoryLocation(\n to: To,\n state: any = null,\n key?: string\n ): Location {\n let location = createLocation(\n entries ? getCurrentLocation().pathname : \"/\",\n to,\n state,\n key\n );\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in memory history: ${JSON.stringify(\n to\n )}`\n );\n return location;\n }\n\n function createHref(to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n let history: MemoryHistory = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref,\n createURL(to) {\n return new URL(createHref(to), \"http://localhost\");\n },\n encodeLocation(to: To) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\",\n };\n },\n push(to, state) {\n action = Action.Push;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 1 });\n }\n },\n replace(to, state) {\n action = Action.Replace;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 0 });\n }\n },\n go(delta) {\n action = Action.Pop;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({ action, location: nextLocation, delta });\n }\n },\n listen(fn: Listener) {\n listener = fn;\n return () => {\n listener = null;\n };\n },\n };\n\n return history;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Browser History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A browser history stores the current location in regular URLs in a web\n * browser environment. This is the standard for most web apps and provides the\n * cleanest URLs the browser's address bar.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#browserhistory\n */\nexport interface BrowserHistory extends UrlHistory {}\n\nexport type BrowserHistoryOptions = UrlHistoryOptions;\n\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nexport function createBrowserHistory(\n options: BrowserHistoryOptions = {}\n): BrowserHistory {\n function createBrowserLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let { pathname, search, hash } = window.location;\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createBrowserHref(window: Window, to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n return getUrlBasedHistory(\n createBrowserLocation,\n createBrowserHref,\n null,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hash History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A hash history stores the current location in the fragment identifier portion\n * of the URL in a web browser environment.\n *\n * This is ideal for apps that do not control the server for some reason\n * (because the fragment identifier is never sent to the server), including some\n * shared hosting environments that do not provide fine-grained controls over\n * which pages are served at which URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#hashhistory\n */\nexport interface HashHistory extends UrlHistory {}\n\nexport type HashHistoryOptions = UrlHistoryOptions;\n\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nexport function createHashHistory(\n options: HashHistoryOptions = {}\n): HashHistory {\n function createHashLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n } = parsePath(window.location.hash.substr(1));\n\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route () since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createHashHref(window: Window, to: To) {\n let base = window.document.querySelector(\"base\");\n let href = \"\";\n\n if (base && base.getAttribute(\"href\")) {\n let url = window.location.href;\n let hashIndex = url.indexOf(\"#\");\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n\n return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n\n function validateHashLocation(location: Location, to: To) {\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in hash history.push(${JSON.stringify(\n to\n )})`\n );\n }\n\n return getUrlBasedHistory(\n createHashLocation,\n createHashHref,\n validateHashLocation,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region UTILS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nexport function invariant(value: boolean, message?: string): asserts value;\nexport function invariant(\n value: T | null | undefined,\n message?: string\n): asserts value is T;\nexport function invariant(value: any, message?: string) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\n\nexport function warning(cond: any, message: string) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n\n try {\n // Welcome to debugging history!\n //\n // This error is thrown as a convenience, so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\n\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location: Location, index: number): HistoryState {\n return {\n usr: location.state,\n key: location.key,\n idx: index,\n };\n}\n\n/**\n * Creates a Location object with a unique key from the given Path\n */\nexport function createLocation(\n current: string | Location,\n to: To,\n state: any = null,\n key?: string\n): Readonly {\n let location: Readonly = {\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\",\n ...(typeof to === \"string\" ? parsePath(to) : to),\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: (to && (to as Location).key) || key || createKey(),\n };\n return location;\n}\n\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nexport function createPath({\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n}: Partial) {\n if (search && search !== \"?\")\n pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\")\n pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\n\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nexport function parsePath(path: string): Partial {\n let parsedPath: Partial = {};\n\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substr(hashIndex);\n path = path.substr(0, hashIndex);\n }\n\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n\n if (path) {\n parsedPath.pathname = path;\n }\n }\n\n return parsedPath;\n}\n\nexport interface UrlHistory extends History {}\n\nexport type UrlHistoryOptions = {\n window?: Window;\n v5Compat?: boolean;\n};\n\nfunction getUrlBasedHistory(\n getLocation: (window: Window, globalHistory: Window[\"history\"]) => Location,\n createHref: (window: Window, to: To) => string,\n validateLocation: ((location: Location, to: To) => void) | null,\n options: UrlHistoryOptions = {}\n): UrlHistory {\n let { window = document.defaultView!, v5Compat = false } = options;\n let globalHistory = window.history;\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n let index = getIndex()!;\n // Index should only be null when we initialize. If not, it's because the\n // user called history.pushState or history.replaceState directly, in which\n // case we should log a warning as it will result in bugs.\n if (index == null) {\n index = 0;\n globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n }\n\n function getIndex(): number {\n let state = globalHistory.state || { idx: null };\n return state.idx;\n }\n\n function handlePop() {\n action = Action.Pop;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({ action, location: history.location, delta });\n }\n }\n\n function push(to: To, state?: any) {\n action = Action.Push;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n\n // try...catch because iOS limits us to 100 pushState calls :/\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 1 });\n }\n }\n\n function replace(to: To, state?: any) {\n action = Action.Replace;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 0 });\n }\n }\n\n function createURL(to: To): URL {\n // window.location.origin is \"null\" (the literal string value) in Firefox\n // under certain conditions, notably when serving from a local HTML file\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n let base =\n window.location.origin !== \"null\"\n ? window.location.origin\n : window.location.href;\n\n let href = typeof to === \"string\" ? to : createPath(to);\n // Treating this as a full URL will strip any trailing spaces so we need to\n // pre-encode them since they might be part of a matching splat param from\n // an ancestor route\n href = href.replace(/ $/, \"%20\");\n invariant(\n base,\n `No window.location.(origin|href) available to create URL for href: ${href}`\n );\n return new URL(href, base);\n }\n\n let history: History = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window, globalHistory);\n },\n listen(fn: Listener) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n\n return () => {\n window.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref(window, to);\n },\n createURL,\n encodeLocation(to) {\n // Encode a Location the same way window.location would\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n };\n },\n push,\n replace,\n go(n) {\n return globalHistory.go(n);\n },\n };\n\n return history;\n}\n\n//#endregion\n","import type { Location, Path, To } from \"./history\";\nimport { invariant, parsePath, warning } from \"./history\";\n\n/**\n * Map of routeId -> data returned from a loader/action/error\n */\nexport interface RouteData {\n [routeId: string]: any;\n}\n\nexport enum ResultType {\n data = \"data\",\n deferred = \"deferred\",\n redirect = \"redirect\",\n error = \"error\",\n}\n\n/**\n * Successful result from a loader or action\n */\nexport interface SuccessResult {\n type: ResultType.data;\n data: unknown;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Successful defer() result from a loader or action\n */\nexport interface DeferredResult {\n type: ResultType.deferred;\n deferredData: DeferredData;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Redirect result from a loader or action\n */\nexport interface RedirectResult {\n type: ResultType.redirect;\n // We keep the raw Response for redirects so we can return it verbatim\n response: Response;\n}\n\n/**\n * Unsuccessful result from a loader or action\n */\nexport interface ErrorResult {\n type: ResultType.error;\n error: unknown;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Result from a loader or action - potentially successful or unsuccessful\n */\nexport type DataResult =\n | SuccessResult\n | DeferredResult\n | RedirectResult\n | ErrorResult;\n\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase;\n\n/**\n * Users can specify either lowercase or uppercase form methods on ``,\n * useSubmit(), ``, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState. This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"application/json\"\n | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n json: undefined;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: JsonValue;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: undefined;\n text: string;\n };\n\n/**\n * @private\n * Arguments passed to route loader/action functions. Same for now but we keep\n * this as a private implementation detail in case they diverge in the future.\n */\ninterface DataFunctionArgs {\n request: Request;\n params: Params;\n context?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n// ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n// Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return). Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable | null;\n\ntype DataFunctionReturnValue = Promise | DataFunctionValue;\n\n/**\n * Route loader function signature\n */\nexport type LoaderFunction = {\n (\n args: LoaderFunctionArgs,\n handlerCtx?: unknown\n ): DataFunctionReturnValue;\n} & { hydrate?: boolean };\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction {\n (\n args: ActionFunctionArgs,\n handlerCtx?: unknown\n ): DataFunctionReturnValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\n currentUrl: URL;\n currentParams: AgnosticDataRouteMatch[\"params\"];\n nextUrl: URL;\n nextParams: AgnosticDataRouteMatch[\"params\"];\n formMethod?: Submission[\"formMethod\"];\n formAction?: Submission[\"formAction\"];\n formEncType?: Submission[\"formEncType\"];\n text?: Submission[\"text\"];\n formData?: Submission[\"formData\"];\n json?: Submission[\"json\"];\n actionStatus?: number;\n actionResult?: any;\n defaultShouldRevalidate: boolean;\n}\n\n/**\n * Route shouldRevalidate function signature. This runs after any submission\n * (navigation or fetcher), so we flatten the navigation/fetcher submission\n * onto the arguments. It shouldn't matter whether it came from a navigation\n * or a fetcher, what really matters is the URLs and the formData since loaders\n * have to re-run based on the data models that were potentially mutated.\n */\nexport interface ShouldRevalidateFunction {\n (args: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n (route: AgnosticRouteObject): boolean;\n}\n\nexport interface DataStrategyMatch\n extends AgnosticRouteMatch {\n shouldLoad: boolean;\n resolve: (\n handlerOverride?: (\n handler: (ctx?: unknown) => DataFunctionReturnValue\n ) => DataFunctionReturnValue\n ) => Promise;\n}\n\nexport interface DataStrategyFunctionArgs\n extends DataFunctionArgs {\n matches: DataStrategyMatch[];\n fetcherKey: string | null;\n}\n\n/**\n * Result from a loader or action called via dataStrategy\n */\nexport interface DataStrategyResult {\n type: \"data\" | \"error\";\n result: unknown; // data, Error, Response, DeferredData, DataWithResponseInit\n}\n\nexport interface DataStrategyFunction {\n (args: DataStrategyFunctionArgs): Promise>;\n}\n\nexport type AgnosticPatchRoutesOnNavigationFunctionArgs<\n O extends AgnosticRouteObject = AgnosticRouteObject,\n M extends AgnosticRouteMatch = AgnosticRouteMatch\n> = {\n path: string;\n matches: M[];\n patch: (routeId: string | null, children: O[]) => void;\n};\n\nexport type AgnosticPatchRoutesOnNavigationFunction<\n O extends AgnosticRouteObject = AgnosticRouteObject,\n M extends AgnosticRouteMatch = AgnosticRouteMatch\n> = (\n opts: AgnosticPatchRoutesOnNavigationFunctionArgs\n) => void | Promise;\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n (route: AgnosticRouteObject): {\n hasErrorBoundary: boolean;\n } & Record;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n | \"lazy\"\n | \"caseSensitive\"\n | \"path\"\n | \"id\"\n | \"index\"\n | \"children\";\n\nexport const immutableRouteKeys = new Set([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\",\n]);\n\ntype RequireOne = Exclude<\n {\n [K in keyof T]: K extends Key ? Omit & Required> : never;\n }[keyof T],\n undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction {\n (): Promise>>;\n}\n\n/**\n * Base RouteObject with common props shared by all types of routes\n */\ntype AgnosticBaseRouteObject = {\n caseSensitive?: boolean;\n path?: string;\n id?: string;\n loader?: LoaderFunction | boolean;\n action?: ActionFunction | boolean;\n hasErrorBoundary?: boolean;\n shouldRevalidate?: ShouldRevalidateFunction;\n handle?: any;\n lazy?: LazyRouteFunction;\n};\n\n/**\n * Index routes must not have children\n */\nexport type AgnosticIndexRouteObject = AgnosticBaseRouteObject & {\n children?: undefined;\n index: true;\n};\n\n/**\n * Non-index routes may have children, but cannot have index\n */\nexport type AgnosticNonIndexRouteObject = AgnosticBaseRouteObject & {\n children?: AgnosticRouteObject[];\n index?: false;\n};\n\n/**\n * A route object represents a logical route, with (optionally) its child\n * routes organized in a tree-like structure.\n */\nexport type AgnosticRouteObject =\n | AgnosticIndexRouteObject\n | AgnosticNonIndexRouteObject;\n\nexport type AgnosticDataIndexRouteObject = AgnosticIndexRouteObject & {\n id: string;\n};\n\nexport type AgnosticDataNonIndexRouteObject = AgnosticNonIndexRouteObject & {\n children?: AgnosticDataRouteObject[];\n id: string;\n};\n\n/**\n * A data route object, which is just a RouteObject with a required unique ID\n */\nexport type AgnosticDataRouteObject =\n | AgnosticDataIndexRouteObject\n | AgnosticDataNonIndexRouteObject;\n\nexport type RouteManifest = Record;\n\n// Recursive helper for finding path parameters in the absence of wildcards\ntype _PathParam =\n // split path into individual path segments\n Path extends `${infer L}/${infer R}`\n ? _PathParam | _PathParam\n : // find params after `:`\n Path extends `:${infer Param}`\n ? Param extends `${infer Optional}?`\n ? Optional\n : Param\n : // otherwise, there aren't any params present\n never;\n\n/**\n * Examples:\n * \"/a/b/*\" -> \"*\"\n * \":a\" -> \"a\"\n * \"/a/:b\" -> \"b\"\n * \"/a/blahblahblah:b\" -> \"b\"\n * \"/:a/:b\" -> \"a\" | \"b\"\n * \"/:a/b/:c/*\" -> \"a\" | \"c\" | \"*\"\n */\nexport type PathParam =\n // check if path is just a wildcard\n Path extends \"*\" | \"/*\"\n ? \"*\"\n : // look for wildcard at the end of the path\n Path extends `${infer Rest}/*`\n ? \"*\" | _PathParam\n : // look for params in the absence of wildcards\n _PathParam;\n\n// Attempt to parse the given string segment. If it fails, then just return the\n// plain string type as a default fallback. Otherwise, return the union of the\n// parsed string literals that were referenced as dynamic segments in the route.\nexport type ParamParseKey =\n // if you could not find path params, fallback to `string`\n [PathParam] extends [never] ? string : PathParam;\n\n/**\n * The parameters that were parsed from the URL path.\n */\nexport type Params = {\n readonly [key in Key]: string | undefined;\n};\n\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\nexport interface AgnosticRouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The route object that was used to match.\n */\n route: RouteObjectType;\n}\n\nexport interface AgnosticDataRouteMatch\n extends AgnosticRouteMatch {}\n\nfunction isIndexRoute(\n route: AgnosticRouteObject\n): route is AgnosticIndexRouteObject {\n return route.index === true;\n}\n\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nexport function convertRoutesToDataRoutes(\n routes: AgnosticRouteObject[],\n mapRouteProperties: MapRoutePropertiesFunction,\n parentPath: string[] = [],\n manifest: RouteManifest = {}\n): AgnosticDataRouteObject[] {\n return routes.map((route, index) => {\n let treePath = [...parentPath, String(index)];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(\n route.index !== true || !route.children,\n `Cannot specify children on an index route`\n );\n invariant(\n !manifest[id],\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n children: undefined,\n };\n manifest[id] = pathOrLayoutRoute;\n\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties,\n treePath,\n manifest\n );\n }\n\n return pathOrLayoutRoute;\n }\n });\n}\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/v6/utils/match-routes\n */\nexport function matchRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial | string,\n basename = \"/\"\n): AgnosticRouteMatch[] | null {\n return matchRoutesImpl(routes, locationArg, basename, false);\n}\n\nexport function matchRoutesImpl<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial | string,\n basename: string,\n allowPartial: boolean\n): AgnosticRouteMatch[] | null {\n let location =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n let pathname = stripBasename(location.pathname || \"/\", basename);\n\n if (pathname == null) {\n return null;\n }\n\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n // Incoming pathnames are generally encoded from either window.location\n // or from router.navigate, but we want to match against the unencoded\n // paths in the route definitions. Memory router locations won't be\n // encoded here but there also shouldn't be anything to decode so this\n // should be a safe operation. This avoids needing matchRoutes to be\n // history-aware.\n let decoded = decodePath(pathname);\n matches = matchRouteBranch(\n branches[i],\n decoded,\n allowPartial\n );\n }\n\n return matches;\n}\n\nexport interface UIMatch {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: Data;\n handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UIMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle,\n };\n}\n\ninterface RouteMeta<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n relativePath: string;\n caseSensitive: boolean;\n childrenIndex: number;\n route: RouteObjectType;\n}\n\ninterface RouteBranch<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n path: string;\n score: number;\n routesMeta: RouteMeta[];\n}\n\nfunction flattenRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n branches: RouteBranch[] = [],\n parentsMeta: RouteMeta[] = [],\n parentPath = \"\"\n): RouteBranch[] {\n let flattenRoute = (\n route: RouteObjectType,\n index: number,\n relativePath?: string\n ) => {\n let meta: RouteMeta = {\n relativePath:\n relativePath === undefined ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route,\n };\n\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(\n meta.relativePath.startsWith(parentPath),\n `Absolute route path \"${meta.relativePath}\" nested under path ` +\n `\"${parentPath}\" is not valid. An absolute child route path ` +\n `must start with the combined path of all its parent routes.`\n );\n\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n\n // Add the children before adding this route to the array, so we traverse the\n // route tree depth-first and child routes appear before their parents in\n // the \"flattened\" version.\n if (route.children && route.children.length > 0) {\n invariant(\n // Our types know better, but runtime JS may not!\n // @ts-expect-error\n route.index !== true,\n `Index routes must not have child routes. Please remove ` +\n `all child routes from route path \"${path}\".`\n );\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n\n // Routes without a path shouldn't ever match by themselves unless they are\n // index routes, so don't add them to the list of possible branches.\n if (route.path == null && !route.index) {\n return;\n }\n\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta,\n });\n };\n routes.forEach((route, index) => {\n // coarse-grain check for optional params\n if (route.path === \"\" || !route.path?.includes(\"?\")) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, exploded);\n }\n }\n });\n\n return branches;\n}\n\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path: string): string[] {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n\n let [first, ...rest] = segments;\n\n // Optional path segments are denoted by a trailing `?`\n let isOptional = first.endsWith(\"?\");\n // Compute the corresponding required segment: `foo?` -> `foo`\n let required = first.replace(/\\?$/, \"\");\n\n if (rest.length === 0) {\n // Intepret empty string as omitting an optional segment\n // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n return isOptional ? [required, \"\"] : [required];\n }\n\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n\n let result: string[] = [];\n\n // All child paths with the prefix. Do this for all children before the\n // optional version for all children, so we get consistent ordering where the\n // parent optional aspect is preferred as required. Otherwise, we can get\n // child sections interspersed where deeper optional segments are higher than\n // parent optional segments, where for example, /:two would explode _earlier_\n // then /:one. By always including the parent as required _for all children_\n // first, we avoid this issue\n result.push(\n ...restExploded.map((subpath) =>\n subpath === \"\" ? required : [required, subpath].join(\"/\")\n )\n );\n\n // Then, if this is an optional value, add all child versions without\n if (isOptional) {\n result.push(...restExploded);\n }\n\n // for absolute paths, ensure `/` instead of empty segment\n return result.map((exploded) =>\n path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n );\n}\n\nfunction rankRouteBranches(branches: RouteBranch[]): void {\n branches.sort((a, b) =>\n a.score !== b.score\n ? b.score - a.score // Higher score first\n : compareIndexes(\n a.routesMeta.map((meta) => meta.childrenIndex),\n b.routesMeta.map((meta) => meta.childrenIndex)\n )\n );\n}\n\nconst paramRe = /^:[\\w-]+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = (s: string) => s === \"*\";\n\nfunction computeScore(path: string, index: boolean | undefined): number {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n\n if (index) {\n initialScore += indexRouteValue;\n }\n\n return segments\n .filter((s) => !isSplat(s))\n .reduce(\n (score, segment) =>\n score +\n (paramRe.test(segment)\n ? dynamicSegmentValue\n : segment === \"\"\n ? emptySegmentValue\n : staticSegmentValue),\n initialScore\n );\n}\n\nfunction compareIndexes(a: number[], b: number[]): number {\n let siblings =\n a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n\n return siblings\n ? // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1]\n : // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0;\n}\n\nfunction matchRouteBranch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n branch: RouteBranch,\n pathname: string,\n allowPartial = false\n): AgnosticRouteMatch[] | null {\n let { routesMeta } = branch;\n\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches: AgnosticRouteMatch[] = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname =\n matchedPathname === \"/\"\n ? pathname\n : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath(\n { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n remainingPathname\n );\n\n let route = meta.route;\n\n if (\n !match &&\n end &&\n allowPartial &&\n !routesMeta[routesMeta.length - 1].route.index\n ) {\n match = matchPath(\n {\n path: meta.relativePath,\n caseSensitive: meta.caseSensitive,\n end: false,\n },\n remainingPathname\n );\n }\n\n if (!match) {\n return null;\n }\n\n Object.assign(matchedParams, match.params);\n\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams as Params,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(\n joinPaths([matchedPathname, match.pathnameBase])\n ),\n route,\n });\n\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n\n return matches;\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/v6/utils/generate-path\n */\nexport function generatePath(\n originalPath: Path,\n params: {\n [key in PathParam]: string | null;\n } = {} as any\n): string {\n let path: string = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(\n false,\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n path = path.replace(/\\*$/, \"/*\") as Path;\n }\n\n // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n const stringify = (p: any) =>\n p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n const segments = path\n .split(/\\/+/)\n .map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\" as PathParam;\n // Apply the splat\n return stringify(params[star]);\n }\n\n const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key as PathParam];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter((segment) => !!segment);\n\n return prefix + segments.join(\"/\");\n}\n\n/**\n * A PathPattern is used to match on some portion of a URL pathname.\n */\nexport interface PathPattern {\n /**\n * A string to match against a URL pathname. May contain `:id`-style segments\n * to indicate placeholders for dynamic parameters. May also end with `/*` to\n * indicate matching the rest of the URL pathname.\n */\n path: Path;\n /**\n * Should be `true` if the static portions of the `path` should be matched in\n * the same case.\n */\n caseSensitive?: boolean;\n /**\n * Should be `true` if this pattern should match the entire URL pathname.\n */\n end?: boolean;\n}\n\n/**\n * A PathMatch contains info about how a PathPattern matched on a URL pathname.\n */\nexport interface PathMatch {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The pattern that was used to match.\n */\n pattern: PathPattern;\n}\n\ntype Mutable = {\n -readonly [P in keyof T]: T[P];\n};\n\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/v6/utils/match-path\n */\nexport function matchPath<\n ParamKey extends ParamParseKey,\n Path extends string\n>(\n pattern: PathPattern | Path,\n pathname: string\n): PathMatch | null {\n if (typeof pattern === \"string\") {\n pattern = { path: pattern, caseSensitive: false, end: true };\n }\n\n let [matcher, compiledParams] = compilePath(\n pattern.path,\n pattern.caseSensitive,\n pattern.end\n );\n\n let match = pathname.match(matcher);\n if (!match) return null;\n\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params: Params = compiledParams.reduce>(\n (memo, { paramName, isOptional }, index) => {\n // We need to compute the pathnameBase here using the raw splat value\n // instead of using params[\"*\"] later because it will be decoded then\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname\n .slice(0, matchedPathname.length - splatValue.length)\n .replace(/(.)\\/+$/, \"$1\");\n }\n\n const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n }\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, CompiledPathParam[]] {\n warning(\n path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n\n let params: CompiledPathParam[] = [];\n let regexpSource =\n \"^\" +\n path\n .replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n .replace(\n /\\/:([\\w-]+)(\\?)?/g,\n (_: string, paramName: string, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n }\n );\n\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\n regexpSource +=\n path === \"*\" || path === \"/*\"\n ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else if (end) {\n // When matching to the end, ignore trailing slashes\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n // If our path is non-empty and contains anything beyond an initial slash,\n // then we have _some_ form of path in our regex, so we should expect to\n // match only if we find the end of this path segment. Look for an optional\n // non-captured trailing slash (to match a portion of the URL) or the end\n // of the path (if we've matched to the end). We used to do this with a\n // word boundary but that gives false positives on routes like\n // /user-preferences since `-` counts as a word boundary.\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else {\n // Nothing to match for \"\" or \"/\"\n }\n\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n\n return [matcher, params];\n}\n\nexport function decodePath(value: string) {\n try {\n return value\n .split(\"/\")\n .map((v) => decodeURIComponent(v).replace(/\\//g, \"%2F\"))\n .join(\"/\");\n } catch (error) {\n warning(\n false,\n `The URL path \"${value}\" could not be decoded because it is is a ` +\n `malformed URL segment. This is probably due to a bad percent ` +\n `encoding (${error}).`\n );\n\n return value;\n }\n}\n\n/**\n * @private\n */\nexport function stripBasename(\n pathname: string,\n basename: string\n): string | null {\n if (basename === \"/\") return pathname;\n\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n let startIndex = basename.endsWith(\"/\")\n ? basename.length - 1\n : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n\n return pathname.slice(startIndex) || \"/\";\n}\n\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/v6/utils/resolve-path\n */\nexport function resolvePath(to: To, fromPathname = \"/\"): Path {\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\",\n } = typeof to === \"string\" ? parsePath(to) : to;\n\n let pathname = toPathname\n ? toPathname.startsWith(\"/\")\n ? toPathname\n : resolvePathname(toPathname, fromPathname)\n : fromPathname;\n\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash),\n };\n}\n\nfunction resolvePathname(relativePath: string, fromPathname: string): string {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n\n relativeSegments.forEach((segment) => {\n if (segment === \"..\") {\n // Keep the root \"\" segment so the pathname starts at /\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\n\nfunction getInvalidPathError(\n char: string,\n field: string,\n dest: string,\n path: Partial\n) {\n return (\n `Cannot include a '${char}' character in a manually specified ` +\n `\\`to.${field}\\` field [${JSON.stringify(\n path\n )}]. Please separate it out to the ` +\n `\\`to.${dest}\\` field. Alternatively you may provide the full path as ` +\n `a string in and the router will parse it for you.`\n );\n}\n\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same. Both of the following examples should link back to the root:\n *\n * \n * \n * \n *\n * \n * \n * }> // <-- Does not contribute\n * // <-- Does not contribute\n * \n * \n */\nexport function getPathContributingMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[]) {\n return matches.filter(\n (match, index) =>\n index === 0 || (match.route.path && match.route.path.length > 0)\n );\n}\n\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nexport function getResolveToMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[], v7_relativeSplatPath: boolean) {\n let pathMatches = getPathContributingMatches(matches);\n\n // When v7_relativeSplatPath is enabled, use the full pathname for the leaf\n // match so we include splat values for \".\" links. See:\n // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329\n if (v7_relativeSplatPath) {\n return pathMatches.map((match, idx) =>\n idx === pathMatches.length - 1 ? match.pathname : match.pathnameBase\n );\n }\n\n return pathMatches.map((match) => match.pathnameBase);\n}\n\n/**\n * @private\n */\nexport function resolveTo(\n toArg: To,\n routePathnames: string[],\n locationPathname: string,\n isPathRelative = false\n): Path {\n let to: Partial;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = { ...toArg };\n\n invariant(\n !to.pathname || !to.pathname.includes(\"?\"),\n getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n );\n invariant(\n !to.pathname || !to.pathname.includes(\"#\"),\n getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n );\n invariant(\n !to.search || !to.search.includes(\"#\"),\n getInvalidPathError(\"#\", \"search\", \"hash\", to)\n );\n }\n\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n\n let from: string;\n\n // Routing is relative to the current pathname if explicitly requested.\n //\n // If a pathname is explicitly provided in `to`, it should be relative to the\n // route context. This is explained in `Note on `` values` in our\n // migration guide from v5 as a means of disambiguation between `to` values\n // that begin with `/` and those that do not. However, this is problematic for\n // `to` values that do not provide a pathname. `to` can simply be a search or\n // hash string, in which case we should assume that the navigation is relative\n // to the current location's pathname and *not* the route pathname.\n if (toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how works and a major reason we call this a\n // \"to\" value instead of a \"href\".\n if (!isPathRelative && toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n\n let path = resolvePath(to, from);\n\n // Ensure the pathname has a trailing slash if the original \"to\" had one\n let hasExplicitTrailingSlash =\n toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n // Or if this was a link to the current path which has a trailing slash\n let hasCurrentTrailingSlash =\n (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (\n !path.pathname.endsWith(\"/\") &&\n (hasExplicitTrailingSlash || hasCurrentTrailingSlash)\n ) {\n path.pathname += \"/\";\n }\n\n return path;\n}\n\n/**\n * @private\n */\nexport function getToPathname(to: To): string | undefined {\n // Empty strings should be treated the same as / paths\n return to === \"\" || (to as Path).pathname === \"\"\n ? \"/\"\n : typeof to === \"string\"\n ? parsePath(to).pathname\n : to.pathname;\n}\n\n/**\n * @private\n */\nexport const joinPaths = (paths: string[]): string =>\n paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n\n/**\n * @private\n */\nexport const normalizePathname = (pathname: string): string =>\n pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\n/**\n * @private\n */\nexport const normalizeSearch = (search: string): string =>\n !search || search === \"?\"\n ? \"\"\n : search.startsWith(\"?\")\n ? search\n : \"?\" + search;\n\n/**\n * @private\n */\nexport const normalizeHash = (hash: string): string =>\n !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n\nexport type JsonFunction = (\n data: Data,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n *\n * @deprecated The `json` method is deprecated in favor of returning raw objects.\n * This method will be removed in v7.\n */\nexport const json: JsonFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n let headers = new Headers(responseInit.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n\n return new Response(JSON.stringify(data), {\n ...responseInit,\n headers,\n });\n};\n\nexport class DataWithResponseInit {\n type: string = \"DataWithResponseInit\";\n data: D;\n init: ResponseInit | null;\n\n constructor(data: D, init?: ResponseInit) {\n this.data = data;\n this.init = init || null;\n }\n}\n\n/**\n * Create \"responses\" that contain `status`/`headers` without forcing\n * serialization into an actual `Response` - used by Remix single fetch\n */\nexport function data(data: D, init?: number | ResponseInit) {\n return new DataWithResponseInit(\n data,\n typeof init === \"number\" ? { status: init } : init\n );\n}\n\nexport interface TrackedPromise extends Promise {\n _tracked?: boolean;\n _data?: any;\n _error?: any;\n}\n\nexport class AbortedDeferredError extends Error {}\n\nexport class DeferredData {\n private pendingKeysSet: Set = new Set();\n private controller: AbortController;\n private abortPromise: Promise;\n private unlistenAbortSignal: () => void;\n private subscribers: Set<(aborted: boolean, settledKey?: string) => void> =\n new Set();\n data: Record;\n init?: ResponseInit;\n deferredKeys: string[] = [];\n\n constructor(data: Record, responseInit?: ResponseInit) {\n invariant(\n data && typeof data === \"object\" && !Array.isArray(data),\n \"defer() only accepts plain objects\"\n );\n\n // Set up an AbortController + Promise we can race against to exit early\n // cancellation\n let reject: (e: AbortedDeferredError) => void;\n this.abortPromise = new Promise((_, r) => (reject = r));\n this.controller = new AbortController();\n let onAbort = () =>\n reject(new AbortedDeferredError(\"Deferred data aborted\"));\n this.unlistenAbortSignal = () =>\n this.controller.signal.removeEventListener(\"abort\", onAbort);\n this.controller.signal.addEventListener(\"abort\", onAbort);\n\n this.data = Object.entries(data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: this.trackPromise(key, value),\n }),\n {}\n );\n\n if (this.done) {\n // All incoming values were resolved\n this.unlistenAbortSignal();\n }\n\n this.init = responseInit;\n }\n\n private trackPromise(\n key: string,\n value: Promise | unknown\n ): TrackedPromise | unknown {\n if (!(value instanceof Promise)) {\n return value;\n }\n\n this.deferredKeys.push(key);\n this.pendingKeysSet.add(key);\n\n // We store a little wrapper promise that will be extended with\n // _data/_error props upon resolve/reject\n let promise: TrackedPromise = Promise.race([value, this.abortPromise]).then(\n (data) => this.onSettle(promise, key, undefined, data as unknown),\n (error) => this.onSettle(promise, key, error as unknown)\n );\n\n // Register rejection listeners to avoid uncaught promise rejections on\n // errors or aborted deferred values\n promise.catch(() => {});\n\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n return promise;\n }\n\n private onSettle(\n promise: TrackedPromise,\n key: string,\n error: unknown,\n data?: unknown\n ): unknown {\n if (\n this.controller.signal.aborted &&\n error instanceof AbortedDeferredError\n ) {\n this.unlistenAbortSignal();\n Object.defineProperty(promise, \"_error\", { get: () => error });\n return Promise.reject(error);\n }\n\n this.pendingKeysSet.delete(key);\n\n if (this.done) {\n // Nothing left to abort!\n this.unlistenAbortSignal();\n }\n\n // If the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\n `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n `you must resolve/reject with a value or \\`null\\`.`\n );\n Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n\n if (data === undefined) {\n Object.defineProperty(promise, \"_error\", { get: () => error });\n this.emit(false, key);\n return Promise.reject(error);\n }\n\n Object.defineProperty(promise, \"_data\", { get: () => data });\n this.emit(false, key);\n return data;\n }\n\n private emit(aborted: boolean, settledKey?: string) {\n this.subscribers.forEach((subscriber) => subscriber(aborted, settledKey));\n }\n\n subscribe(fn: (aborted: boolean, settledKey?: string) => void) {\n this.subscribers.add(fn);\n return () => this.subscribers.delete(fn);\n }\n\n cancel() {\n this.controller.abort();\n this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n this.emit(true);\n }\n\n async resolveData(signal: AbortSignal) {\n let aborted = false;\n if (!this.done) {\n let onAbort = () => this.cancel();\n signal.addEventListener(\"abort\", onAbort);\n aborted = await new Promise((resolve) => {\n this.subscribe((aborted) => {\n signal.removeEventListener(\"abort\", onAbort);\n if (aborted || this.done) {\n resolve(aborted);\n }\n });\n });\n }\n return aborted;\n }\n\n get done() {\n return this.pendingKeysSet.size === 0;\n }\n\n get unwrappedData() {\n invariant(\n this.data !== null && this.done,\n \"Can only unwrap data on initialized and settled deferreds\"\n );\n\n return Object.entries(this.data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: unwrapTrackedPromise(value),\n }),\n {}\n );\n }\n\n get pendingKeys() {\n return Array.from(this.pendingKeysSet);\n }\n}\n\nfunction isTrackedPromise(value: any): value is TrackedPromise {\n return (\n value instanceof Promise && (value as TrackedPromise)._tracked === true\n );\n}\n\nfunction unwrapTrackedPromise(value: any) {\n if (!isTrackedPromise(value)) {\n return value;\n }\n\n if (value._error) {\n throw value._error;\n }\n return value._data;\n}\n\nexport type DeferFunction = (\n data: Record,\n init?: number | ResponseInit\n) => DeferredData;\n\n/**\n * @deprecated The `defer` method is deprecated in favor of returning raw\n * objects. This method will be removed in v7.\n */\nexport const defer: DeferFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n return new DeferredData(data, responseInit);\n};\n\nexport type RedirectFunction = (\n url: string,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirect: RedirectFunction = (url, init = 302) => {\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = { status: responseInit };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n\n return new Response(null, {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n\n/**\n * A redirect response that will perform a `history.replaceState` instead of a\n * `history.pushState` for client-side navigation redirects.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const replace: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Replace\", \"true\");\n return response;\n};\n\nexport type ErrorResponse = {\n status: number;\n statusText: string;\n data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n private error?: Error;\n private internal: boolean;\n\n constructor(\n status: number,\n statusText: string | undefined,\n data: any,\n internal = false\n ) {\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data instanceof Error) {\n this.data = data.toString();\n this.error = data;\n } else {\n this.data = data;\n }\n }\n}\n\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nexport function isRouteErrorResponse(error: any): error is ErrorResponse {\n return (\n error != null &&\n typeof error.status === \"number\" &&\n typeof error.statusText === \"string\" &&\n typeof error.internal === \"boolean\" &&\n \"data\" in error\n );\n}\n","import type { History, Location, Path, To } from \"./history\";\nimport {\n Action as HistoryAction,\n createLocation,\n createPath,\n invariant,\n parsePath,\n warning,\n} from \"./history\";\nimport type {\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n DataStrategyMatch,\n AgnosticRouteObject,\n DataResult,\n DataStrategyFunction,\n DataStrategyFunctionArgs,\n DeferredData,\n DeferredResult,\n DetectErrorBoundaryFunction,\n ErrorResult,\n FormEncType,\n FormMethod,\n HTMLFormMethod,\n DataStrategyResult,\n ImmutableRouteKey,\n MapRoutePropertiesFunction,\n MutationFormMethod,\n RedirectResult,\n RouteData,\n RouteManifest,\n ShouldRevalidateFunctionArgs,\n Submission,\n SuccessResult,\n UIMatch,\n V7_FormMethod,\n V7_MutationFormMethod,\n AgnosticPatchRoutesOnNavigationFunction,\n DataWithResponseInit,\n} from \"./utils\";\nimport {\n ErrorResponseImpl,\n ResultType,\n convertRouteMatchToUiMatch,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n getResolveToMatches,\n immutableRouteKeys,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n matchRoutesImpl,\n resolveTo,\n stripBasename,\n} from \"./utils\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A Router instance manages all navigation and data loading/mutations\n */\nexport interface Router {\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the basename for the router\n */\n get basename(): RouterInit[\"basename\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the future config for the router\n */\n get future(): FutureConfig;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the current state of the router\n */\n get state(): RouterState;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the routes for this router instance\n */\n get routes(): AgnosticDataRouteObject[];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the window associated with the router\n */\n get window(): RouterInit[\"window\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Initialize the router, including adding history listeners and kicking off\n * initial data fetches. Returns a function to cleanup listeners and abort\n * any in-progress loads\n */\n initialize(): Router;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Subscribe to router.state updates\n *\n * @param fn function to call with the new state\n */\n subscribe(fn: RouterSubscriber): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Enable scroll restoration behavior in the router\n *\n * @param savedScrollPositions Object that will manage positions, in case\n * it's being restored from sessionStorage\n * @param getScrollPosition Function to get the active Y scroll position\n * @param getKey Function to get the key to use for restoration\n */\n enableScrollRestoration(\n savedScrollPositions: Record,\n getScrollPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Navigate forward/backward in the history stack\n * @param to Delta to move in the history stack\n */\n navigate(to: number): Promise;\n\n /**\n * Navigate to the given path\n * @param to Path to navigate to\n * @param opts Navigation options (method, submission, etc.)\n */\n navigate(to: To | null, opts?: RouterNavigateOptions): Promise;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a fetcher load/submission\n *\n * @param key Fetcher key\n * @param routeId Route that owns the fetcher\n * @param href href to fetch\n * @param opts Fetcher options, (method, submission, etc.)\n */\n fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a revalidation of all current route loaders and fetcher loads\n */\n revalidate(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to create an href for the given location\n * @param location\n */\n createHref(location: Location | URL): string;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to URL encode a destination path according to the internal\n * history implementation\n * @param to\n */\n encodeLocation(to: To): Path;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get/create a fetcher for the given key\n * @param key\n */\n getFetcher(key: string): Fetcher;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete the fetcher for a given key\n * @param key\n */\n deleteFetcher(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Cleanup listeners and abort any in-progress loads\n */\n dispose(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get a navigation blocker\n * @param key The identifier for the blocker\n * @param fn The blocker function implementation\n */\n getBlocker(key: string, fn: BlockerFunction): Blocker;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete a navigation blocker\n * @param key The identifier for the blocker\n */\n deleteBlocker(key: string): void;\n\n /**\n * @internal\n * PRIVATE DO NOT USE\n *\n * Patch additional children routes into an existing parent route\n * @param routeId The parent route id or a callback function accepting `patch`\n * to perform batch patching\n * @param children The additional children routes\n */\n patchRoutes(routeId: string | null, children: AgnosticRouteObject[]): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * HMR needs to pass in-flight route updates to React Router\n * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n */\n _internalSetRoutes(routes: AgnosticRouteObject[]): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal fetch AbortControllers accessed by unit tests\n */\n _internalFetchControllers: Map;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal pending DeferredData instances accessed by unit tests\n */\n _internalActiveDeferreds: Map;\n}\n\n/**\n * State maintained internally by the router. During a navigation, all states\n * reflect the the \"old\" location unless otherwise noted.\n */\nexport interface RouterState {\n /**\n * The action of the most recent navigation\n */\n historyAction: HistoryAction;\n\n /**\n * The current location reflected by the router\n */\n location: Location;\n\n /**\n * The current set of route matches\n */\n matches: AgnosticDataRouteMatch[];\n\n /**\n * Tracks whether we've completed our initial data load\n */\n initialized: boolean;\n\n /**\n * Current scroll position we should start at for a new view\n * - number -> scroll position to restore to\n * - false -> do not restore scroll at all (used during submissions)\n * - null -> don't have a saved position, scroll to hash or top of page\n */\n restoreScrollPosition: number | false | null;\n\n /**\n * Indicate whether this navigation should skip resetting the scroll position\n * if we are unable to restore the scroll position\n */\n preventScrollReset: boolean;\n\n /**\n * Tracks the state of the current navigation\n */\n navigation: Navigation;\n\n /**\n * Tracks any in-progress revalidations\n */\n revalidation: RevalidationState;\n\n /**\n * Data from the loaders for the current matches\n */\n loaderData: RouteData;\n\n /**\n * Data from the action for the current matches\n */\n actionData: RouteData | null;\n\n /**\n * Errors caught from loaders for the current matches\n */\n errors: RouteData | null;\n\n /**\n * Map of current fetchers\n */\n fetchers: Map;\n\n /**\n * Map of current blockers\n */\n blockers: Map;\n}\n\n/**\n * Data that can be passed into hydrate a Router from SSR\n */\nexport type HydrationState = Partial<\n Pick\n>;\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n v7_fetcherPersist: boolean;\n v7_normalizeFormMethod: boolean;\n v7_partialHydration: boolean;\n v7_prependBasename: boolean;\n v7_relativeSplatPath: boolean;\n v7_skipActionErrorRevalidation: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n routes: AgnosticRouteObject[];\n history: History;\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n hydrationData?: HydrationState;\n window?: Window;\n dataStrategy?: DataStrategyFunction;\n patchRoutesOnNavigation?: AgnosticPatchRoutesOnNavigationFunction;\n}\n\n/**\n * State returned from a server-side query() call\n */\nexport interface StaticHandlerContext {\n basename: Router[\"basename\"];\n location: RouterState[\"location\"];\n matches: RouterState[\"matches\"];\n loaderData: RouterState[\"loaderData\"];\n actionData: RouterState[\"actionData\"];\n errors: RouterState[\"errors\"];\n statusCode: number;\n loaderHeaders: Record;\n actionHeaders: Record;\n activeDeferreds: Record | null;\n _deepestRenderedBoundaryId?: string | null;\n}\n\n/**\n * A StaticHandler instance manages a singular SSR navigation/fetch event\n */\nexport interface StaticHandler {\n dataRoutes: AgnosticDataRouteObject[];\n query(\n request: Request,\n opts?: {\n requestContext?: unknown;\n skipLoaderErrorBubbling?: boolean;\n dataStrategy?: DataStrategyFunction;\n }\n ): Promise;\n queryRoute(\n request: Request,\n opts?: {\n routeId?: string;\n requestContext?: unknown;\n dataStrategy?: DataStrategyFunction;\n }\n ): Promise;\n}\n\ntype ViewTransitionOpts = {\n currentLocation: Location;\n nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (\n state: RouterState,\n opts: {\n deletedFetchers: string[];\n viewTransitionOpts?: ViewTransitionOpts;\n flushSync: boolean;\n }\n ): void;\n}\n\n/**\n * Function signature for determining the key to be used in scroll restoration\n * for a given location\n */\nexport interface GetScrollRestorationKeyFunction {\n (location: Location, matches: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n formMethod?: HTMLFormMethod;\n formEncType?: FormEncType;\n} & (\n | { formData: FormData; body?: undefined }\n | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\n\n/**\n * Potential states for state.navigation\n */\nexport type NavigationStates = {\n Idle: {\n state: \"idle\";\n location: undefined;\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n formData: undefined;\n json: undefined;\n text: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n text: Submission[\"text\"] | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n text: Submission[\"text\"];\n };\n};\n\nexport type Navigation = NavigationStates[keyof NavigationStates];\n\nexport type RevalidationState = \"idle\" | \"loading\";\n\n/**\n * Potential states for fetchers\n */\ntype FetcherStates = {\n Idle: {\n state: \"idle\";\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n text: undefined;\n formData: undefined;\n json: undefined;\n data: TData | undefined;\n };\n Loading: {\n state: \"loading\";\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n text: Submission[\"text\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n data: TData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n text: Submission[\"text\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n data: TData | undefined;\n };\n};\n\nexport type Fetcher =\n FetcherStates[keyof FetcherStates];\n\ninterface BlockerBlocked {\n state: \"blocked\";\n reset(): void;\n proceed(): void;\n location: Location;\n}\n\ninterface BlockerUnblocked {\n state: \"unblocked\";\n reset: undefined;\n proceed: undefined;\n location: undefined;\n}\n\ninterface BlockerProceeding {\n state: \"proceeding\";\n reset: undefined;\n proceed: undefined;\n location: Location;\n}\n\nexport type Blocker = BlockerUnblocked | BlockerBlocked | BlockerProceeding;\n\nexport type BlockerFunction = (args: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n}) => boolean;\n\ninterface ShortCircuitable {\n /**\n * startNavigation does not need to complete the navigation because we\n * redirected or got interrupted\n */\n shortCircuited?: boolean;\n}\n\ntype PendingActionResult = [string, SuccessResult | ErrorResult];\n\ninterface HandleActionResult extends ShortCircuitable {\n /**\n * Route matches which may have been updated from fog of war discovery\n */\n matches?: RouterState[\"matches\"];\n /**\n * Tuple for the returned or thrown value from the current action. The routeId\n * is the action route for success and the bubbled boundary route for errors.\n */\n pendingActionResult?: PendingActionResult;\n}\n\ninterface HandleLoadersResult extends ShortCircuitable {\n /**\n * Route matches which may have been updated from fog of war discovery\n */\n matches?: RouterState[\"matches\"];\n /**\n * loaderData returned from the current set of loaders\n */\n loaderData?: RouterState[\"loaderData\"];\n /**\n * errors thrown from the current set of loaders\n */\n errors?: RouterState[\"errors\"];\n}\n\n/**\n * Cached info for active fetcher.load() instances so they can participate\n * in revalidation\n */\ninterface FetchLoadMatch {\n routeId: string;\n path: string;\n}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n match: AgnosticDataRouteMatch | null;\n matches: AgnosticDataRouteMatch[] | null;\n controller: AbortController | null;\n}\n\nconst validMutationMethodsArr: MutationFormMethod[] = [\n \"post\",\n \"put\",\n \"patch\",\n \"delete\",\n];\nconst validMutationMethods = new Set(\n validMutationMethodsArr\n);\n\nconst validRequestMethodsArr: FormMethod[] = [\n \"get\",\n ...validMutationMethodsArr,\n];\nconst validRequestMethods = new Set(validRequestMethodsArr);\n\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\n\nexport const IDLE_NAVIGATION: NavigationStates[\"Idle\"] = {\n state: \"idle\",\n location: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_FETCHER: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_BLOCKER: BlockerUnblocked = {\n state: \"unblocked\",\n proceed: undefined,\n reset: undefined,\n location: undefined,\n};\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\nconst defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Create a router and listen to history POP navigations\n */\nexport function createRouter(init: RouterInit): Router {\n const routerWindow = init.window\n ? init.window\n : typeof window !== \"undefined\"\n ? window\n : undefined;\n const isBrowser =\n typeof routerWindow !== \"undefined\" &&\n typeof routerWindow.document !== \"undefined\" &&\n typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n // Routes keyed by ID\n let manifest: RouteManifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n let basename = init.basename || \"/\";\n let dataStrategyImpl = init.dataStrategy || defaultDataStrategy;\n let patchRoutesOnNavigationImpl = init.patchRoutesOnNavigation;\n\n // Config driven behavior flags\n let future: FutureConfig = {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_partialHydration: false,\n v7_prependBasename: false,\n v7_relativeSplatPath: false,\n v7_skipActionErrorRevalidation: false,\n ...init.future,\n };\n // Cleanup function for history\n let unlistenHistory: (() => void) | null = null;\n // Externally-provided functions to call on all state changes\n let subscribers = new Set();\n // Externally-provided object to hold scroll restoration locations during routing\n let savedScrollPositions: Record | null = null;\n // Externally-provided function to get scroll restoration keys\n let getScrollRestorationKey: GetScrollRestorationKeyFunction | null = null;\n // Externally-provided function to get current scroll position\n let getScrollPosition: GetScrollPositionFunction | null = null;\n // One-time flag to control the initial hydration scroll restoration. Because\n // we don't get the saved positions from until _after_\n // the initial render, we need to manually trigger a separate updateState to\n // send along the restoreScrollPosition\n // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n // SSR did the initial scroll restoration.\n let initialScrollRestored = init.hydrationData != null;\n\n let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n let initialErrors: RouteData | null = null;\n\n if (initialMatches == null && !patchRoutesOnNavigationImpl) {\n // If we do not match a user-provided-route, fall back to the root\n // to allow the error boundary to take over\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname,\n });\n let { matches, route } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = { [route.id]: error };\n }\n\n // In SPA apps, if the user provided a patchRoutesOnNavigation implementation and\n // our initial match is a splat route, clear them out so we run through lazy\n // discovery on hydration in case there's a more accurate lazy route match.\n // In SSR apps (with `hydrationData`), we expect that the server will send\n // up the proper matched routes so we don't want to run lazy discovery on\n // initial hydration and want to hydrate into the splat route.\n if (initialMatches && !init.hydrationData) {\n let fogOfWar = checkFogOfWar(\n initialMatches,\n dataRoutes,\n init.history.location.pathname\n );\n if (fogOfWar.active) {\n initialMatches = null;\n }\n }\n\n let initialized: boolean;\n if (!initialMatches) {\n initialized = false;\n initialMatches = [];\n\n // If partial hydration and fog of war is enabled, we will be running\n // `patchRoutesOnNavigation` during hydration so include any partial matches as\n // the initial matches so we can properly render `HydrateFallback`'s\n if (future.v7_partialHydration) {\n let fogOfWar = checkFogOfWar(\n null,\n dataRoutes,\n init.history.location.pathname\n );\n if (fogOfWar.active && fogOfWar.matches) {\n initialMatches = fogOfWar.matches;\n }\n }\n } else if (initialMatches.some((m) => m.route.lazy)) {\n // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n initialized = false;\n } else if (!initialMatches.some((m) => m.route.loader)) {\n // If we've got no loaders to run, then we're good to go\n initialized = true;\n } else if (future.v7_partialHydration) {\n // If partial hydration is enabled, we're initialized so long as we were\n // provided with hydrationData for every route with a loader, and no loaders\n // were marked for explicit hydration\n let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n let errors = init.hydrationData ? init.hydrationData.errors : null;\n // If errors exist, don't consider routes below the boundary\n if (errors) {\n let idx = initialMatches.findIndex(\n (m) => errors![m.route.id] !== undefined\n );\n initialized = initialMatches\n .slice(0, idx + 1)\n .every((m) => !shouldLoadRouteOnHydration(m.route, loaderData, errors));\n } else {\n initialized = initialMatches.every(\n (m) => !shouldLoadRouteOnHydration(m.route, loaderData, errors)\n );\n }\n } else {\n // Without partial hydration - we're initialized if we were provided any\n // hydrationData - which is expected to be complete\n initialized = init.hydrationData != null;\n }\n\n let router: Router;\n let state: RouterState = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: (init.hydrationData && init.hydrationData.loaderData) || {},\n actionData: (init.hydrationData && init.hydrationData.actionData) || null,\n errors: (init.hydrationData && init.hydrationData.errors) || initialErrors,\n fetchers: new Map(),\n blockers: new Map(),\n };\n\n // -- Stateful internal variables to manage navigations --\n // Current navigation in progress (to be committed in completeNavigation)\n let pendingAction: HistoryAction = HistoryAction.Pop;\n\n // Should the current navigation prevent the scroll reset if scroll cannot\n // be restored?\n let pendingPreventScrollReset = false;\n\n // AbortController for the active navigation\n let pendingNavigationController: AbortController | null;\n\n // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions: Map> = new Map<\n string,\n Set\n >();\n\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener: (() => void) | null = null;\n\n // We use this to avoid touching history in completeNavigation if a\n // revalidation is entirely uninterrupted\n let isUninterruptedRevalidation = false;\n\n // Use this internal flag to force revalidation of all loaders:\n // - submissions (completed or interrupted)\n // - useRevalidator()\n // - X-Remix-Revalidate (from redirect)\n let isRevalidationRequired = false;\n\n // Use this internal array to capture routes that require revalidation due\n // to a cancelled deferred on action submission\n let cancelledDeferredRoutes: string[] = [];\n\n // Use this internal array to capture fetcher loads that were cancelled by an\n // action navigation and require revalidation\n let cancelledFetcherLoads: Set = new Set();\n\n // AbortControllers for any in-flight fetchers\n let fetchControllers = new Map();\n\n // Track loads based on the order in which they started\n let incrementingLoadId = 0;\n\n // Track the outstanding pending navigation data load to be compared against\n // the globally incrementing load when a fetcher load lands after a completed\n // navigation\n let pendingNavigationLoadId = -1;\n\n // Fetchers that triggered data reloads as a result of their actions\n let fetchReloadIds = new Map();\n\n // Fetchers that triggered redirect navigations\n let fetchRedirectIds = new Set();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\n\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set();\n\n // Store DeferredData instances for active route matches. When a\n // route loader returns defer() we stick one in here. Then, when a nested\n // promise resolves we update loaderData. If a new navigation starts we\n // cancel active deferreds for eliminated routes.\n let activeDeferreds = new Map();\n\n // Store blocker functions in a separate Map outside of router state since\n // we don't need to update UI state if they change\n let blockerFunctions = new Map();\n\n // Map of pending patchRoutesOnNavigation() promises (keyed by path/matches) so\n // that we only kick them off once for a given combo\n let pendingPatchRoutes = new Map<\n string,\n ReturnType\n >();\n\n // Flag to ignore the next history update, so we can revert the URL change on\n // a POP navigation that was blocked by the user without touching router state\n let unblockBlockerHistoryUpdate: (() => void) | undefined = undefined;\n\n // Initialize the router, all side effects should be kicked off from here.\n // Implemented as a Fluent API for ease of:\n // let router = createRouter(init).initialize();\n function initialize() {\n // If history informs us of a POP navigation, start the navigation but do not update\n // state. We'll update our own state once the navigation completes\n unlistenHistory = init.history.listen(\n ({ action: historyAction, location, delta }) => {\n // Ignore this event if it was just us resetting the URL from a\n // blocked POP navigation\n if (unblockBlockerHistoryUpdate) {\n unblockBlockerHistoryUpdate();\n unblockBlockerHistoryUpdate = undefined;\n return;\n }\n\n warning(\n blockerFunctions.size === 0 || delta != null,\n \"You are trying to use a blocker on a POP navigation to a location \" +\n \"that was not created by @remix-run/router. This will fail silently in \" +\n \"production. This can happen if you are navigating outside the router \" +\n \"via `window.history.pushState`/`window.location.hash` instead of using \" +\n \"router navigation APIs. This can also happen if you are using \" +\n \"createHashRouter and the user manually changes the URL.\"\n );\n\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction,\n });\n\n if (blockerKey && delta != null) {\n // Restore the URL to match the current UI, but don't update router state\n let nextHistoryUpdatePromise = new Promise((resolve) => {\n unblockBlockerHistoryUpdate = resolve;\n });\n init.history.go(delta * -1);\n\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location,\n });\n // Re-do the same POP navigation we just blocked, after the url\n // restoration is also complete. See:\n // https://github.com/remix-run/react-router/issues/11613\n nextHistoryUpdatePromise.then(() => init.history.go(delta));\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () =>\n persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () =>\n routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\n if (!state.initialized) {\n startNavigation(HistoryAction.Pop, state.location, {\n initialHydration: true,\n });\n }\n\n return router;\n }\n\n // Clean up a router and it's side effects\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n if (removePageHideEventListener) {\n removePageHideEventListener();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n\n // Subscribe to state updates for the router\n function subscribe(fn: RouterSubscriber) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n\n // Update our state and notify the calling context of the change\n function updateState(\n newState: Partial,\n opts: {\n flushSync?: boolean;\n viewTransitionOpts?: ViewTransitionOpts;\n } = {}\n ): void {\n state = {\n ...state,\n ...newState,\n };\n\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers: string[] = [];\n let deletedFetchersKeys: string[] = [];\n\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach((subscriber) =>\n subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n viewTransitionOpts: opts.viewTransitionOpts,\n flushSync: opts.flushSync === true,\n })\n );\n\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach((key) => state.fetchers.delete(key));\n deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n }\n }\n\n // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n // and setting state.[historyAction/location/matches] to the new route.\n // - Location is a required param\n // - Navigation will always be set to IDLE_NAVIGATION\n // - Can pass any other state in newState\n function completeNavigation(\n location: Location,\n newState: Partial>,\n { flushSync }: { flushSync?: boolean } = {}\n ): void {\n // Deduce if we're in a loading/actionReload state:\n // - We have committed actionData in the store\n // - The current navigation was a mutation submission\n // - We're past the submitting state and into the loading state\n // - The location being loaded is not the result of a redirect\n let isActionReload =\n state.actionData != null &&\n state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n state.navigation.state === \"loading\" &&\n location.state?._isRedirect !== true;\n\n let actionData: RouteData | null;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n // Empty actionData -> clear prior actionData due to an action error\n actionData = null;\n }\n } else if (isActionReload) {\n // Keep the current data if we're wrapping up the action reload\n actionData = state.actionData;\n } else {\n // Clear actionData on any other completed navigations\n actionData = null;\n }\n\n // Always preserve any existing loaderData from re-used routes\n let loaderData = newState.loaderData\n ? mergeLoaderData(\n state.loaderData,\n newState.loaderData,\n newState.matches || [],\n newState.errors\n )\n : state.loaderData;\n\n // On a successful navigation we can assume we got through all blockers\n // so we can start fresh\n let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n }\n\n // Always respect the user flag. Otherwise don't reset on mutation\n // submission navigations unless they redirect\n let preventScrollReset =\n pendingPreventScrollReset === true ||\n (state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n location.state?._isRedirect !== true);\n\n // Commit any in-flight routes at the end of the HMR revalidation \"navigation\"\n if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\n }\n\n if (isUninterruptedRevalidation) {\n // If this was an uninterrupted revalidation then do not touch history\n } else if (pendingAction === HistoryAction.Pop) {\n // Do nothing for POP - URL has already been updated\n } else if (pendingAction === HistoryAction.Push) {\n init.history.push(location, location.state);\n } else if (pendingAction === HistoryAction.Replace) {\n init.history.replace(location, location.state);\n }\n\n let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === HistoryAction.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location,\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n }\n\n updateState(\n {\n ...newState, // matches, errors, fetchers go through as-is\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(\n location,\n newState.matches || state.matches\n ),\n preventScrollReset,\n blockers,\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true,\n }\n );\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n cancelledDeferredRoutes = [];\n }\n\n // Trigger a navigation event, which can either be a numerical POP or a PUSH\n // replace with an optional submission\n async function navigate(\n to: number | To | null,\n opts?: RouterNavigateOptions\n ): Promise {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n to,\n future.v7_relativeSplatPath,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n false,\n normalizedPath,\n opts\n );\n\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\n\n // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n // URL from window.location, so we need to encode it here so the behavior\n // remains the same as POP and non-data-router usages. new URL() does all\n // the same encoding we'd get from a history.pushState/window.location read\n // without having to touch history\n nextLocation = {\n ...nextLocation,\n ...init.history.encodeLocation(nextLocation),\n };\n\n let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n\n let historyAction = HistoryAction.Push;\n\n if (userReplace === true) {\n historyAction = HistoryAction.Replace;\n } else if (userReplace === false) {\n // no-op\n } else if (\n submission != null &&\n isMutationMethod(submission.formMethod) &&\n submission.formAction === state.location.pathname + state.location.search\n ) {\n // By default on submissions to the current location we REPLACE so that\n // users don't have to double-click the back button to get to the prior\n // location. If the user redirects to a different location from the\n // action/loader this will be ignored and the redirect will be a PUSH\n historyAction = HistoryAction.Replace;\n }\n\n let preventScrollReset =\n opts && \"preventScrollReset\" in opts\n ? opts.preventScrollReset === true\n : undefined;\n\n let flushSync = (opts && opts.flushSync) === true;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\n\n if (blockerKey) {\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location: nextLocation,\n });\n // Send the same navigation through\n navigate(to, opts);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n enableViewTransition: opts && opts.viewTransition,\n flushSync,\n });\n }\n\n // Revalidate all current loaders. If a navigation is in progress or if this\n // is interrupted by a navigation, allow this to \"succeed\" by calling all\n // loaders during the next loader round\n function revalidate() {\n interruptActiveLoads();\n updateState({ revalidation: \"loading\" });\n\n // If we're currently submitting an action, we don't need to start a new\n // navigation, we'll just let the follow up loader execution call all loaders\n if (state.navigation.state === \"submitting\") {\n return;\n }\n\n // If we're currently in an idle state, start a new navigation for the current\n // action/location and mark it as uninterrupted, which will skip the history\n // update in completeNavigation\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true,\n });\n return;\n }\n\n // Otherwise, if we're currently in a loading state, just start a new\n // navigation to the navigation.location but do not trigger an uninterrupted\n // revalidation so that history correctly updates once the navigation completes\n startNavigation(\n pendingAction || state.historyAction,\n state.navigation.location,\n {\n overrideNavigation: state.navigation,\n // Proxy through any rending view transition\n enableViewTransition: pendingViewTransitionEnabled === true,\n }\n );\n }\n\n // Start a navigation to the given action/location. Can optionally provide a\n // overrideNavigation which will override the normalLoad in the case of a redirect\n // navigation\n async function startNavigation(\n historyAction: HistoryAction,\n location: Location,\n opts?: {\n initialHydration?: boolean;\n submission?: Submission;\n fetcherSubmission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponseImpl;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n enableViewTransition?: boolean;\n flushSync?: boolean;\n }\n ): Promise {\n // Abort any in-progress navigations and start a new one. Unset any ongoing\n // uninterrupted revalidations unless told otherwise, since we want this\n // new navigation to update history normally\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation =\n (opts && opts.startUninterruptedRevalidation) === true;\n\n // Save the current scroll position every time we start a new navigation,\n // and track whether we should reset scroll on completion\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\n\n let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n\n // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let { error, notFoundMatches, route } = handleNavigational404(\n location.pathname\n );\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n },\n { flushSync }\n );\n return;\n }\n\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial hydration will always\n // be \"same hash\". For example, on /page#hash and submit a \n // which will default to a navigation to /page\n if (\n state.initialized &&\n !isRevalidationRequired &&\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches }, { flushSync });\n return;\n }\n\n // Create a controller/Request for this navigation\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(\n init.history,\n location,\n pendingNavigationController.signal,\n opts && opts.submission\n );\n let pendingActionResult: PendingActionResult | undefined;\n\n if (opts && opts.pendingError) {\n // If we have a pendingError, it means the user attempted a GET submission\n // with binary FormData so assign here and skip to handleLoaders. That\n // way we handle calling loaders above the boundary etc. It's not really\n // different from an actionError in that sense.\n pendingActionResult = [\n findNearestBoundary(matches).route.id,\n { type: ResultType.error, error: opts.pendingError },\n ];\n } else if (\n opts &&\n opts.submission &&\n isMutationMethod(opts.submission.formMethod)\n ) {\n // Call action if we received an action submission\n let actionResult = await handleAction(\n request,\n location,\n opts.submission,\n matches,\n fogOfWar.active,\n { replace: opts.replace, flushSync }\n );\n\n if (actionResult.shortCircuited) {\n return;\n }\n\n // If we received a 404 from handleAction, it's because we couldn't lazily\n // discover the destination route so we don't want to call loaders\n if (actionResult.pendingActionResult) {\n let [routeId, result] = actionResult.pendingActionResult;\n if (\n isErrorResult(result) &&\n isRouteErrorResponse(result.error) &&\n result.error.status === 404\n ) {\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches: actionResult.matches,\n loaderData: {},\n errors: {\n [routeId]: result.error,\n },\n });\n return;\n }\n }\n\n matches = actionResult.matches || matches;\n pendingActionResult = actionResult.pendingActionResult;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\n // No need to do fog of war matching again on loader execution\n fogOfWar.active = false;\n\n // Create a GET request for the loaders\n request = createClientSideRequest(\n init.history,\n request.url,\n request.signal\n );\n }\n\n // Call loaders\n let {\n shortCircuited,\n matches: updatedMatches,\n loaderData,\n errors,\n } = await handleLoaders(\n request,\n location,\n matches,\n fogOfWar.active,\n loadingNavigation,\n opts && opts.submission,\n opts && opts.fetcherSubmission,\n opts && opts.replace,\n opts && opts.initialHydration === true,\n flushSync,\n pendingActionResult\n );\n\n if (shortCircuited) {\n return;\n }\n\n // Clean up now that the action/loaders have completed. Don't clean up if\n // we short circuited because pendingNavigationController will have already\n // been assigned to a new controller for the next navigation\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches: updatedMatches || matches,\n ...getActionDataForCommit(pendingActionResult),\n loaderData,\n errors,\n });\n }\n\n // Call the action matched by the leaf route for this navigation and handle\n // redirects/errors\n async function handleAction(\n request: Request,\n location: Location,\n submission: Submission,\n matches: AgnosticDataRouteMatch[],\n isFogOfWar: boolean,\n opts: { replace?: boolean; flushSync?: boolean } = {}\n ): Promise {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation }, { flushSync: opts.flushSync === true });\n\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n matches,\n location.pathname,\n request.signal\n );\n if (discoverResult.type === \"aborted\") {\n return { shortCircuited: true };\n } else if (discoverResult.type === \"error\") {\n let boundaryId = findNearestBoundary(discoverResult.partialMatches)\n .route.id;\n return {\n matches: discoverResult.partialMatches,\n pendingActionResult: [\n boundaryId,\n {\n type: ResultType.error,\n error: discoverResult.error,\n },\n ],\n };\n } else if (!discoverResult.matches) {\n let { notFoundMatches, error, route } = handleNavigational404(\n location.pathname\n );\n return {\n matches: notFoundMatches,\n pendingActionResult: [\n route.id,\n {\n type: ResultType.error,\n error,\n },\n ],\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n\n // Call our action and get the result\n let result: DataResult;\n let actionMatch = getTargetMatch(matches, location);\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n result = {\n type: ResultType.error,\n error: getInternalRouterError(405, {\n method: request.method,\n pathname: location.pathname,\n routeId: actionMatch.route.id,\n }),\n };\n } else {\n let results = await callDataStrategy(\n \"action\",\n state,\n request,\n [actionMatch],\n matches,\n null\n );\n result = results[actionMatch.route.id];\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n }\n\n if (isRedirectResult(result)) {\n let replace: boolean;\n if (opts && opts.replace != null) {\n replace = opts.replace;\n } else {\n // If the user didn't explicity indicate replace behavior, replace if\n // we redirected to the exact same location we're currently at to avoid\n // double back-buttons\n let location = normalizeRedirectLocation(\n result.response.headers.get(\"Location\")!,\n new URL(request.url),\n basename\n );\n replace = location === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(request, result, true, {\n submission,\n replace,\n });\n return { shortCircuited: true };\n }\n\n if (isDeferredResult(result)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n\n // By default, all submissions to the current location are REPLACE\n // navigations, but if the action threw an error that'll be rendered in\n // an errorElement, we fall back to PUSH so that the user can use the\n // back button to get back to the pre-submission form location to try\n // again\n if ((opts && opts.replace) !== true) {\n pendingAction = HistoryAction.Push;\n }\n\n return {\n matches,\n pendingActionResult: [boundaryMatch.route.id, result],\n };\n }\n\n return {\n matches,\n pendingActionResult: [actionMatch.route.id, result],\n };\n }\n\n // Call all applicable loaders for the given matches, handling redirects,\n // errors, etc.\n async function handleLoaders(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n isFogOfWar: boolean,\n overrideNavigation?: Navigation,\n submission?: Submission,\n fetcherSubmission?: Submission,\n replace?: boolean,\n initialHydration?: boolean,\n flushSync?: boolean,\n pendingActionResult?: PendingActionResult\n ): Promise {\n // Figure out the right navigation we want to use for data loading\n let loadingNavigation =\n overrideNavigation || getLoadingNavigation(location, submission);\n\n // If this was a redirect from an action we don't have a \"submission\" but\n // we have it on the loading navigation so use that if available\n let activeSubmission =\n submission ||\n fetcherSubmission ||\n getSubmissionFromNavigation(loadingNavigation);\n\n // If this is an uninterrupted revalidation, we remain in our current idle\n // state. If not, we need to switch to our loading state and load data,\n // preserving any new action data or existing action data (in the case of\n // a revalidation interrupting an actionReload)\n // If we have partialHydration enabled, then don't update the state for the\n // initial data load since it's not a \"navigation\"\n let shouldUpdateNavigationState =\n !isUninterruptedRevalidation &&\n (!future.v7_partialHydration || !initialHydration);\n\n // When fog of war is enabled, we enter our `loading` state earlier so we\n // can discover new routes during the `loading` state. We skip this if\n // we've already run actions since we would have done our matching already.\n // If the children() function threw then, we want to proceed with the\n // partial matches it discovered.\n if (isFogOfWar) {\n if (shouldUpdateNavigationState) {\n let actionData = getUpdatedActionData(pendingActionResult);\n updateState(\n {\n navigation: loadingNavigation,\n ...(actionData !== undefined ? { actionData } : {}),\n },\n {\n flushSync,\n }\n );\n }\n\n let discoverResult = await discoverRoutes(\n matches,\n location.pathname,\n request.signal\n );\n\n if (discoverResult.type === \"aborted\") {\n return { shortCircuited: true };\n } else if (discoverResult.type === \"error\") {\n let boundaryId = findNearestBoundary(discoverResult.partialMatches)\n .route.id;\n return {\n matches: discoverResult.partialMatches,\n loaderData: {},\n errors: {\n [boundaryId]: discoverResult.error,\n },\n };\n } else if (!discoverResult.matches) {\n let { error, notFoundMatches, route } = handleNavigational404(\n location.pathname\n );\n return {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n future.v7_partialHydration && initialHydration === true,\n future.v7_skipActionErrorRevalidation,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionResult\n );\n\n // Cancel pending deferreds for no-longer-matched routes or routes we're\n // about to reload. Note that if this is an action reload we would have\n // already cancelled all pending deferreds so this would be a no-op\n cancelActiveDeferreds(\n (routeId) =>\n !(matches && matches.some((m) => m.route.id === routeId)) ||\n (matchesToLoad && matchesToLoad.some((m) => m.route.id === routeId))\n );\n\n pendingNavigationLoadId = ++incrementingLoadId;\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(\n location,\n {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors:\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? { [pendingActionResult[0]]: pendingActionResult[1].error }\n : null,\n ...getActionDataForCommit(pendingActionResult),\n ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n },\n { flushSync }\n );\n return { shortCircuited: true };\n }\n\n if (shouldUpdateNavigationState) {\n let updates: Partial = {};\n if (!isFogOfWar) {\n // Only update navigation/actionNData if we didn't already do it above\n updates.navigation = loadingNavigation;\n let actionData = getUpdatedActionData(pendingActionResult);\n if (actionData !== undefined) {\n updates.actionData = actionData;\n }\n }\n if (revalidatingFetchers.length > 0) {\n updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers);\n }\n updateState(updates, { flushSync });\n }\n\n revalidatingFetchers.forEach((rf) => {\n abortFetcher(rf.key);\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n\n let { loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n request\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n\n // Clean up _after_ loaders have completed. Don't clean up if we short\n // circuited because fetchControllers would have been aborted and\n // reassigned to new controllers for the next navigation\n if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n\n revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n\n // If any loaders returned a redirect Response, start a new REPLACE navigation\n let redirect = findRedirect(loaderResults);\n if (redirect) {\n await startRedirectNavigation(request, redirect.result, true, {\n replace,\n });\n return { shortCircuited: true };\n }\n\n redirect = findRedirect(fetcherResults);\n if (redirect) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n fetchRedirectIds.add(redirect.key);\n await startRedirectNavigation(request, redirect.result, true, {\n replace,\n });\n return { shortCircuited: true };\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n loaderResults,\n pendingActionResult,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Wire up subscribers to update loaderData as promises settle\n activeDeferreds.forEach((deferredData, routeId) => {\n deferredData.subscribe((aborted) => {\n // Note: No need to updateState here since the TrackedPromise on\n // loaderData is stable across resolve/reject\n // Remove this instance if we were aborted or if promises have settled\n if (aborted || deferredData.done) {\n activeDeferreds.delete(routeId);\n }\n });\n });\n\n // Preserve SSR errors during partial hydration\n if (future.v7_partialHydration && initialHydration && state.errors) {\n errors = { ...state.errors, ...errors };\n }\n\n let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n matches,\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\n }\n\n function getUpdatedActionData(\n pendingActionResult: PendingActionResult | undefined\n ): Record | null | undefined {\n if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {\n // This is cast to `any` currently because `RouteData`uses any and it\n // would be a breaking change to use any.\n // TODO: v7 - change `RouteData` to use `unknown` instead of `any`\n return {\n [pendingActionResult[0]]: pendingActionResult[1].data as any,\n };\n } else if (state.actionData) {\n if (Object.keys(state.actionData).length === 0) {\n return null;\n } else {\n return state.actionData;\n }\n }\n }\n\n function getUpdatedRevalidatingFetchers(\n revalidatingFetchers: RevalidatingFetcher[]\n ) {\n revalidatingFetchers.forEach((rf) => {\n let fetcher = state.fetchers.get(rf.key);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n fetcher ? fetcher.data : undefined\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n return new Map(state.fetchers);\n }\n\n // Trigger a fetcher load/submit for the given fetcher key\n function fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ) {\n if (isServer) {\n throw new Error(\n \"router.fetch() was called during the server render, but it shouldn't be. \" +\n \"You are likely calling a useFetcher() method in the body of your component. \" +\n \"Try moving it to a useEffect or a callback.\"\n );\n }\n\n abortFetcher(key);\n\n let flushSync = (opts && opts.flushSync) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n href,\n future.v7_relativeSplatPath,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n true,\n normalizedPath,\n opts\n );\n\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n let match = getTargetMatch(matches, path);\n\n let preventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n fogOfWar.active,\n flushSync,\n preventScrollReset,\n submission\n );\n return;\n }\n\n // Store off the match so we can call it's shouldRevalidate on subsequent\n // revalidations\n fetchLoadMatches.set(key, { routeId, path });\n handleFetcherLoader(\n key,\n routeId,\n path,\n match,\n matches,\n fogOfWar.active,\n flushSync,\n preventScrollReset,\n submission\n );\n }\n\n // Call the action for the matched fetcher.submit(), and then handle redirects,\n // errors, and revalidation\n async function handleFetcherAction(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n requestMatches: AgnosticDataRouteMatch[],\n isFogOfWar: boolean,\n flushSync: boolean,\n preventScrollReset: boolean,\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n function detectAndHandle405Error(m: AgnosticDataRouteMatch) {\n if (!m.route.action && !m.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error, { flushSync });\n return true;\n }\n return false;\n }\n\n if (!isFogOfWar && detectAndHandle405Error(match)) {\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync,\n });\n\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal,\n submission\n );\n\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n requestMatches,\n path,\n fetchRequest.signal\n );\n\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n setFetcherError(key, routeId, discoverResult.error, { flushSync });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: path }),\n { flushSync }\n );\n return;\n } else {\n requestMatches = discoverResult.matches;\n match = getTargetMatch(requestMatches, path);\n\n if (detectAndHandle405Error(match)) {\n return;\n }\n }\n }\n\n // Call the action for the fetcher\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let actionResults = await callDataStrategy(\n \"action\",\n state,\n fetchRequest,\n [match],\n requestMatches,\n key\n );\n let actionResult = actionResults[match.route.id];\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by our own fetcher\n // re-submit which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n return;\n }\n\n // When using v7_fetcherPersist, we don't want errors bubbling up to the UI\n // or redirects processed for unmounted fetchers so we just revert them to\n // idle\n if (future.v7_fetcherPersist && deletedFetchers.has(key)) {\n if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n // Let SuccessResult's fall through for revalidation\n } else {\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(fetchRequest, actionResult, false, {\n fetcherSubmission: submission,\n preventScrollReset,\n });\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(actionResult)) {\n setFetcherError(key, routeId, actionResult.error);\n return;\n }\n }\n\n if (isDeferredResult(actionResult)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n // Start the data load for current matches, or the next location if we're\n // in the middle of a navigation\n let nextLocation = state.navigation.location || state.location;\n let revalidationRequest = createClientSideRequest(\n init.history,\n nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(routesToUse, state.navigation.location, basename)\n : state.matches;\n\n invariant(matches, \"Didn't find any matches after fetcher action\");\n\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n\n let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n state.fetchers.set(key, loadFetcher);\n\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n submission,\n nextLocation,\n false,\n future.v7_skipActionErrorRevalidation,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n [match.route.id, actionResult]\n );\n\n // Put all revalidating fetchers into the loading state, except for the\n // current fetcher which we want to keep in it's current loading state which\n // contains it's action submission info + action data\n revalidatingFetchers\n .filter((rf) => rf.key !== key)\n .forEach((rf) => {\n let staleKey = rf.key;\n let existingFetcher = state.fetchers.get(staleKey);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n abortFetcher(staleKey);\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n let { loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n revalidationRequest\n );\n\n if (abortController.signal.aborted) {\n return;\n }\n\n abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n\n let redirect = findRedirect(loaderResults);\n if (redirect) {\n return startRedirectNavigation(\n revalidationRequest,\n redirect.result,\n false,\n { preventScrollReset }\n );\n }\n\n redirect = findRedirect(fetcherResults);\n if (redirect) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n fetchRedirectIds.add(redirect.key);\n return startRedirectNavigation(\n revalidationRequest,\n redirect.result,\n false,\n { preventScrollReset }\n );\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n loaderResults,\n undefined,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n\n abortStaleFetchLoads(loadId);\n\n // If we are currently in a navigation loading state and this fetcher is\n // more recent than the navigation, we want the newer data so abort the\n // navigation and complete it with the fetcher data\n if (\n state.navigation.state === \"loading\" &&\n loadId > pendingNavigationLoadId\n ) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\n\n completeNavigation(state.navigation.location, {\n matches,\n loaderData,\n errors,\n fetchers: new Map(state.fetchers),\n });\n } else {\n // otherwise just update with the fetcher data, preserving any existing\n // loaderData for loaders that did not need to reload. We have to\n // manually merge here since we aren't going through completeNavigation\n updateState({\n errors,\n loaderData: mergeLoaderData(\n state.loaderData,\n loaderData,\n matches,\n errors\n ),\n fetchers: new Map(state.fetchers),\n });\n isRevalidationRequired = false;\n }\n }\n\n // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n async function handleFetcherLoader(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n isFogOfWar: boolean,\n flushSync: boolean,\n preventScrollReset: boolean,\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : undefined\n ),\n { flushSync }\n );\n\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal\n );\n\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n matches,\n path,\n fetchRequest.signal\n );\n\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n setFetcherError(key, routeId, discoverResult.error, { flushSync });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: path }),\n { flushSync }\n );\n return;\n } else {\n matches = discoverResult.matches;\n match = getTargetMatch(matches, path);\n }\n }\n\n // Call the loader for this fetcher route match\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let results = await callDataStrategy(\n \"loader\",\n state,\n fetchRequest,\n [match],\n matches,\n key\n );\n let result = results[match.route.id];\n\n // Deferred isn't supported for fetcher loads, await everything and treat it\n // as a normal load. resolveDeferredData will return undefined if this\n // fetcher gets aborted, so we just leave result untouched and short circuit\n // below if that happens\n if (isDeferredResult(result)) {\n result =\n (await resolveDeferredData(result, fetchRequest.signal, true)) ||\n result;\n }\n\n // We can delete this so long as we weren't aborted by our our own fetcher\n // re-load which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n\n if (fetchRequest.signal.aborted) {\n return;\n }\n\n // We don't want errors bubbling up or redirects followed for unmounted\n // fetchers, so short circuit here if it was removed from the UI\n if (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(fetchRequest, result, false, {\n preventScrollReset,\n });\n return;\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\n }\n\n /**\n * Utility function to handle redirects returned from an action or loader.\n * Normally, a redirect \"replaces\" the navigation that triggered it. So, for\n * example:\n *\n * - user is on /a\n * - user clicks a link to /b\n * - loader for /b redirects to /c\n *\n * In a non-JS app the browser would track the in-flight navigation to /b and\n * then replace it with /c when it encountered the redirect response. In\n * the end it would only ever update the URL bar with /c.\n *\n * In client-side routing using pushState/replaceState, we aim to emulate\n * this behavior and we also do not update history until the end of the\n * navigation (including processed redirects). This means that we never\n * actually touch history until we've processed redirects, so we just use\n * the history action from the original navigation (PUSH or REPLACE).\n */\n async function startRedirectNavigation(\n request: Request,\n redirect: RedirectResult,\n isNavigation: boolean,\n {\n submission,\n fetcherSubmission,\n preventScrollReset,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n preventScrollReset?: boolean;\n replace?: boolean;\n } = {}\n ) {\n if (redirect.response.headers.has(\"X-Remix-Revalidate\")) {\n isRevalidationRequired = true;\n }\n\n let location = redirect.response.headers.get(\"Location\");\n invariant(location, \"Expected a Location header on the redirect Response\");\n location = normalizeRedirectLocation(\n location,\n new URL(request.url),\n basename\n );\n let redirectLocation = createLocation(state.location, location, {\n _isRedirect: true,\n });\n\n if (isBrowser) {\n let isDocumentReload = false;\n\n if (redirect.response.headers.has(\"X-Remix-Reload-Document\")) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(location)) {\n const url = init.history.createURL(location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(location);\n } else {\n routerWindow.location.assign(location);\n }\n return;\n }\n }\n\n // There's no need to abort on redirects, since we don't detect the\n // redirect until the action/loaders have settled\n pendingNavigationController = null;\n\n let redirectHistoryAction =\n replace === true || redirect.response.headers.has(\"X-Remix-Replace\")\n ? HistoryAction.Replace\n : HistoryAction.Push;\n\n // Use the incoming submission if provided, fallback on the active one in\n // state.navigation\n let { formMethod, formAction, formEncType } = state.navigation;\n if (\n !submission &&\n !fetcherSubmission &&\n formMethod &&\n formAction &&\n formEncType\n ) {\n submission = getSubmissionFromNavigation(state.navigation);\n }\n\n // If this was a 307/308 submission we want to preserve the HTTP method and\n // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n // redirected location\n let activeSubmission = submission || fetcherSubmission;\n if (\n redirectPreserveMethodStatusCodes.has(redirect.response.status) &&\n activeSubmission &&\n isMutationMethod(activeSubmission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: location,\n },\n // Preserve these flags across redirects\n preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n enableViewTransition: isNavigation\n ? pendingViewTransitionEnabled\n : undefined,\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\n // Preserve these flags across redirects\n preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n enableViewTransition: isNavigation\n ? pendingViewTransitionEnabled\n : undefined,\n });\n }\n }\n\n // Utility wrapper for calling dataStrategy client-side without having to\n // pass around the manifest, mapRouteProperties, etc.\n async function callDataStrategy(\n type: \"loader\" | \"action\",\n state: RouterState,\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n fetcherKey: string | null\n ): Promise> {\n let results: Record;\n let dataResults: Record = {};\n try {\n results = await callDataStrategyImpl(\n dataStrategyImpl,\n type,\n state,\n request,\n matchesToLoad,\n matches,\n fetcherKey,\n manifest,\n mapRouteProperties\n );\n } catch (e) {\n // If the outer dataStrategy method throws, just return the error for all\n // matches - and it'll naturally bubble to the root\n matchesToLoad.forEach((m) => {\n dataResults[m.route.id] = {\n type: ResultType.error,\n error: e,\n };\n });\n return dataResults;\n }\n\n for (let [routeId, result] of Object.entries(results)) {\n if (isRedirectDataStrategyResultResult(result)) {\n let response = result.result as Response;\n dataResults[routeId] = {\n type: ResultType.redirect,\n response: normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n routeId,\n matches,\n basename,\n future.v7_relativeSplatPath\n ),\n };\n } else {\n dataResults[routeId] = await convertDataStrategyResultToDataResult(\n result\n );\n }\n }\n\n return dataResults;\n }\n\n async function callLoadersAndMaybeResolveData(\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n fetchersToLoad: RevalidatingFetcher[],\n request: Request\n ) {\n let currentMatches = state.matches;\n\n // Kick off loaders and fetchers in parallel\n let loaderResultsPromise = callDataStrategy(\n \"loader\",\n state,\n request,\n matchesToLoad,\n matches,\n null\n );\n\n let fetcherResultsPromise = Promise.all(\n fetchersToLoad.map(async (f) => {\n if (f.matches && f.match && f.controller) {\n let results = await callDataStrategy(\n \"loader\",\n state,\n createClientSideRequest(init.history, f.path, f.controller.signal),\n [f.match],\n f.matches,\n f.key\n );\n let result = results[f.match.route.id];\n // Fetcher results are keyed by fetcher key from here on out, not routeId\n return { [f.key]: result };\n } else {\n return Promise.resolve({\n [f.key]: {\n type: ResultType.error,\n error: getInternalRouterError(404, {\n pathname: f.path,\n }),\n } as ErrorResult,\n });\n }\n })\n );\n\n let loaderResults = await loaderResultsPromise;\n let fetcherResults = (await fetcherResultsPromise).reduce(\n (acc, r) => Object.assign(acc, r),\n {}\n );\n\n await Promise.all([\n resolveNavigationDeferredResults(\n matches,\n loaderResults,\n request.signal,\n currentMatches,\n state.loaderData\n ),\n resolveFetcherDeferredResults(matches, fetcherResults, fetchersToLoad),\n ]);\n\n return {\n loaderResults,\n fetcherResults,\n };\n }\n\n function interruptActiveLoads() {\n // Every interruption triggers a revalidation\n isRevalidationRequired = true;\n\n // Cancel pending route-level deferreds and mark cancelled routes for\n // revalidation\n cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n\n // Abort in-flight fetcher loads\n fetchLoadMatches.forEach((_, key) => {\n if (fetchControllers.has(key)) {\n cancelledFetcherLoads.add(key);\n }\n abortFetcher(key);\n });\n }\n\n function updateFetcherState(\n key: string,\n fetcher: Fetcher,\n opts: { flushSync?: boolean } = {}\n ) {\n state.fetchers.set(key, fetcher);\n updateState(\n { fetchers: new Map(state.fetchers) },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function setFetcherError(\n key: string,\n routeId: string,\n error: any,\n opts: { flushSync?: boolean } = {}\n ) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function getFetcher(key: string): Fetcher {\n if (future.v7_fetcherPersist) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n function deleteFetcher(key: string): void {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (\n fetchControllers.has(key) &&\n !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n ) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n deletedFetchers.delete(key);\n cancelledFetcherLoads.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n if (future.v7_fetcherPersist) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n } else {\n deleteFetcher(key);\n }\n updateState({ fetchers: new Map(state.fetchers) });\n }\n\n function abortFetcher(key: string) {\n let controller = fetchControllers.get(key);\n if (controller) {\n controller.abort();\n fetchControllers.delete(key);\n }\n }\n\n function markFetchersDone(keys: string[]) {\n for (let key of keys) {\n let fetcher = getFetcher(key);\n let doneFetcher = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): boolean {\n let doneKeys = [];\n let updatedFetchers = false;\n for (let key of fetchRedirectIds) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n fetchRedirectIds.delete(key);\n doneKeys.push(key);\n updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\n }\n\n function abortStaleFetchLoads(landedId: number): boolean {\n let yeetedKeys = [];\n for (let [key, id] of fetchReloadIds) {\n if (id < landedId) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n abortFetcher(key);\n fetchReloadIds.delete(key);\n yeetedKeys.push(key);\n }\n }\n }\n markFetchersDone(yeetedKeys);\n return yeetedKeys.length > 0;\n }\n\n function getBlocker(key: string, fn: BlockerFunction) {\n let blocker: Blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n\n return blocker;\n }\n\n function deleteBlocker(key: string) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n\n // Utility function to update blockers, ensuring valid state transitions\n function updateBlocker(key: string, newBlocker: Blocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n // Poor mans state machine :)\n // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n invariant(\n (blocker.state === \"unblocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"proceeding\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"unblocked\") ||\n (blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\"),\n `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n );\n\n let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ blockers });\n }\n\n function shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n }: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n }): string | undefined {\n if (blockerFunctions.size === 0) {\n return;\n }\n\n // We ony support a single active blocker at the moment since we don't have\n // any compelling use cases for multi-blocker yet\n if (blockerFunctions.size > 1) {\n warning(false, \"A router only supports one blocker at a time\");\n }\n\n let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\n\n if (blocker && blocker.state === \"proceeding\") {\n // If the blocker is currently proceeding, we don't need to re-check\n // it and can let this navigation continue\n return;\n }\n\n // At this point, we know we're unblocked/blocked so we need to check the\n // user-provided blocker function\n if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n return blockerKey;\n }\n }\n\n function handleNavigational404(pathname: string) {\n let error = getInternalRouterError(404, { pathname });\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let { matches, route } = getShortCircuitMatches(routesToUse);\n\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n\n return { notFoundMatches: matches, route, error };\n }\n\n function cancelActiveDeferreds(\n predicate?: (routeId: string) => boolean\n ): string[] {\n let cancelledRouteIds: string[] = [];\n activeDeferreds.forEach((dfd, routeId) => {\n if (!predicate || predicate(routeId)) {\n // Cancel the deferred - but do not remove from activeDeferreds here -\n // we rely on the subscribers to do that so our tests can assert proper\n // cleanup via _internalActiveDeferreds\n dfd.cancel();\n cancelledRouteIds.push(routeId);\n activeDeferreds.delete(routeId);\n }\n });\n return cancelledRouteIds;\n }\n\n // Opt in to capturing and reporting scroll positions during navigations,\n // used by the component\n function enableScrollRestoration(\n positions: Record,\n getPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ) {\n savedScrollPositions = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey = getKey || null;\n\n // Perform initial hydration scroll restoration, since we miss the boat on\n // the initial updateState() because we've not yet rendered \n // and therefore have no savedScrollPositions available\n if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n initialScrollRestored = true;\n let y = getSavedScrollPosition(state.location, state.matches);\n if (y != null) {\n updateState({ restoreScrollPosition: y });\n }\n }\n\n return () => {\n savedScrollPositions = null;\n getScrollPosition = null;\n getScrollRestorationKey = null;\n };\n }\n\n function getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n function checkFogOfWar(\n matches: AgnosticDataRouteMatch[] | null,\n routesToUse: AgnosticDataRouteObject[],\n pathname: string\n ): { active: boolean; matches: AgnosticDataRouteMatch[] | null } {\n if (patchRoutesOnNavigationImpl) {\n if (!matches) {\n let fogMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n\n return { active: true, matches: fogMatches || [] };\n } else {\n if (Object.keys(matches[0].params).length > 0) {\n // If we matched a dynamic param or a splat, it might only be because\n // we haven't yet discovered other routes that would match with a\n // higher score. Call patchRoutesOnNavigation just to be sure\n let partialMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n return { active: true, matches: partialMatches };\n }\n }\n }\n\n return { active: false, matches: null };\n }\n\n type DiscoverRoutesSuccessResult = {\n type: \"success\";\n matches: AgnosticDataRouteMatch[] | null;\n };\n type DiscoverRoutesErrorResult = {\n type: \"error\";\n error: any;\n partialMatches: AgnosticDataRouteMatch[];\n };\n type DiscoverRoutesAbortedResult = { type: \"aborted\" };\n type DiscoverRoutesResult =\n | DiscoverRoutesSuccessResult\n | DiscoverRoutesErrorResult\n | DiscoverRoutesAbortedResult;\n\n async function discoverRoutes(\n matches: AgnosticDataRouteMatch[],\n pathname: string,\n signal: AbortSignal\n ): Promise {\n if (!patchRoutesOnNavigationImpl) {\n return { type: \"success\", matches };\n }\n\n let partialMatches: AgnosticDataRouteMatch[] | null = matches;\n while (true) {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let localManifest = manifest;\n try {\n await patchRoutesOnNavigationImpl({\n path: pathname,\n matches: partialMatches,\n patch: (routeId, children) => {\n if (signal.aborted) return;\n patchRoutesImpl(\n routeId,\n children,\n routesToUse,\n localManifest,\n mapRouteProperties\n );\n },\n });\n } catch (e) {\n return { type: \"error\", error: e, partialMatches };\n } finally {\n // If we are not in the middle of an HMR revalidation and we changed the\n // routes, provide a new identity so when we `updateState` at the end of\n // this navigation/fetch `router.routes` will be a new identity and\n // trigger a re-run of memoized `router.routes` dependencies.\n // HMR will already update the identity and reflow when it lands\n // `inFlightDataRoutes` in `completeNavigation`\n if (isNonHMR && !signal.aborted) {\n dataRoutes = [...dataRoutes];\n }\n }\n\n if (signal.aborted) {\n return { type: \"aborted\" };\n }\n\n let newMatches = matchRoutes(routesToUse, pathname, basename);\n if (newMatches) {\n return { type: \"success\", matches: newMatches };\n }\n\n let newPartialMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n\n // Avoid loops if the second pass results in the same partial matches\n if (\n !newPartialMatches ||\n (partialMatches.length === newPartialMatches.length &&\n partialMatches.every(\n (m, i) => m.route.id === newPartialMatches![i].route.id\n ))\n ) {\n return { type: \"success\", matches: null };\n }\n\n partialMatches = newPartialMatches;\n }\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n function patchRoutes(\n routeId: string | null,\n children: AgnosticRouteObject[]\n ): void {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n patchRoutesImpl(\n routeId,\n children,\n routesToUse,\n manifest,\n mapRouteProperties\n );\n\n // If we are not in the middle of an HMR revalidation and we changed the\n // routes, provide a new identity and trigger a reflow via `updateState`\n // to re-run memoized `router.routes` dependencies.\n // HMR will already update the identity and reflow when it lands\n // `inFlightDataRoutes` in `completeNavigation`\n if (isNonHMR) {\n dataRoutes = [...dataRoutes];\n updateState({});\n }\n }\n\n router = {\n get basename() {\n return basename;\n },\n get future() {\n return future;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\n },\n initialize,\n subscribe,\n enableScrollRestoration,\n navigate,\n fetch,\n revalidate,\n // Passthrough to history-aware createHref used by useHref so we get proper\n // hash-aware URLs in DOM paths\n createHref: (to: To) => init.history.createHref(to),\n encodeLocation: (to: To) => init.history.encodeLocation(to),\n getFetcher,\n deleteFetcher: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n patchRoutes,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface StaticHandlerFutureConfig {\n v7_relativeSplatPath: boolean;\n v7_throwAbortReason: boolean;\n}\n\nexport interface CreateStaticHandlerOptions {\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n}\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: CreateStaticHandlerOptions\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let manifest: RouteManifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (opts?.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts?.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n // Config driven behavior flags\n let future: StaticHandlerFutureConfig = {\n v7_relativeSplatPath: false,\n v7_throwAbortReason: false,\n ...(opts ? opts.future : null),\n };\n\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n\n /**\n * The query() method is intended for document requests, in which we want to\n * call an optional action and potentially multiple loaders for all nested\n * routes. It returns a StaticHandlerContext object, which is very similar\n * to the router state (location, loaderData, actionData, errors, etc.) and\n * also adds SSR-specific information such as the statusCode and headers\n * from action/loaders Responses.\n *\n * It _should_ never throw and should report all errors through the\n * returned context.errors object, properly associating errors to their error\n * boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be\n * used to emulate React error boundaries during SSr by performing a second\n * pass only down to the boundaryId.\n *\n * The one exception where we do not return a StaticHandlerContext is when a\n * redirect response is returned or thrown from any action/loader. We\n * propagate that out and return the raw Response so the HTTP server can\n * return it directly.\n *\n * - `opts.requestContext` is an optional server context that will be passed\n * to actions/loaders in the `context` parameter\n * - `opts.skipLoaderErrorBubbling` is an optional parameter that will prevent\n * the bubbling of errors which allows single-fetch-type implementations\n * where the client will handle the bubbling and we may need to return data\n * for the handling route\n */\n async function query(\n request: Request,\n {\n requestContext,\n skipLoaderErrorBubbling,\n dataStrategy,\n }: {\n requestContext?: unknown;\n skipLoaderErrorBubbling?: boolean;\n dataStrategy?: DataStrategyFunction;\n } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\") {\n let error = getInternalRouterError(405, { method });\n let { matches: methodNotAllowedMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: methodNotAllowedMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n } else if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: notFoundMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n dataStrategy || null,\n skipLoaderErrorBubbling === true,\n null\n );\n if (isResponse(result)) {\n return result;\n }\n\n // When returning StaticHandlerContext, we patch back in the location here\n // since we need it for React Context. But this helps keep our submit and\n // loadRouteData operating on a Request instead of a Location\n return { location, basename, ...result };\n }\n\n /**\n * The queryRoute() method is intended for targeted route requests, either\n * for fetch ?_data requests or resource route requests. In this case, we\n * are only ever calling a single action or loader, and we are returning the\n * returned value directly. In most cases, this will be a Response returned\n * from the action/loader, but it may be a primitive or other value as well -\n * and in such cases the calling context should handle that accordingly.\n *\n * We do respect the throw/return differentiation, so if an action/loader\n * throws, then this method will throw the value. This is important so we\n * can do proper boundary identification in Remix where a thrown Response\n * must go to the Catch Boundary but a returned Response is happy-path.\n *\n * One thing to note is that any Router-initiated Errors that make sense\n * to associate with a status code will be thrown as an ErrorResponse\n * instance which include the raw Error, such that the calling context can\n * serialize the error as they see fit while including the proper response\n * code. Examples here are 404 and 405 errors that occur prior to reaching\n * any user-defined loaders.\n *\n * - `opts.routeId` allows you to specify the specific route handler to call.\n * If not provided the handler will determine the proper route by matching\n * against `request.url`\n * - `opts.requestContext` is an optional server context that will be passed\n * to actions/loaders in the `context` parameter\n */\n async function queryRoute(\n request: Request,\n {\n routeId,\n requestContext,\n dataStrategy,\n }: {\n requestContext?: unknown;\n routeId?: string;\n dataStrategy?: DataStrategyFunction;\n } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n throw getInternalRouterError(405, { method });\n } else if (!matches) {\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let match = routeId\n ? matches.find((m) => m.route.id === routeId)\n : getTargetMatch(matches, location);\n\n if (routeId && !match) {\n throw getInternalRouterError(403, {\n pathname: location.pathname,\n routeId,\n });\n } else if (!match) {\n // This should never hit I don't think?\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n dataStrategy || null,\n false,\n match\n );\n\n if (isResponse(result)) {\n return result;\n }\n\n let error = result.errors ? Object.values(result.errors)[0] : undefined;\n if (error !== undefined) {\n // If we got back result.errors, that means the loader/action threw\n // _something_ that wasn't a Response, but it's not guaranteed/required\n // to be an `instanceof Error` either, so we have to use throw here to\n // preserve the \"error\" state outside of queryImpl.\n throw error;\n }\n\n // Pick off the right state value to return\n if (result.actionData) {\n return Object.values(result.actionData)[0];\n }\n\n if (result.loaderData) {\n let data = Object.values(result.loaderData)[0];\n if (result.activeDeferreds?.[match.route.id]) {\n data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n }\n return data;\n }\n\n return undefined;\n }\n\n async function queryImpl(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n dataStrategy: DataStrategyFunction | null,\n skipLoaderErrorBubbling: boolean,\n routeMatch: AgnosticDataRouteMatch | null\n ): Promise | Response> {\n invariant(\n request.signal,\n \"query()/queryRoute() requests must contain an AbortController signal\"\n );\n\n try {\n if (isMutationMethod(request.method.toLowerCase())) {\n let result = await submit(\n request,\n matches,\n routeMatch || getTargetMatch(matches, location),\n requestContext,\n dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch != null\n );\n return result;\n }\n\n let result = await loadRouteData(\n request,\n matches,\n requestContext,\n dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch\n );\n return isResponse(result)\n ? result\n : {\n ...result,\n actionData: null,\n actionHeaders: {},\n };\n } catch (e) {\n // If the user threw/returned a Response in callLoaderOrAction for a\n // `queryRoute` call, we throw the `DataStrategyResult` to bail out early\n // and then return or throw the raw Response here accordingly\n if (isDataStrategyResult(e) && isResponse(e.result)) {\n if (e.type === ResultType.error) {\n throw e.result;\n }\n return e.result;\n }\n // Redirects are always returned since they don't propagate to catch\n // boundaries\n if (isRedirectResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n\n async function submit(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n actionMatch: AgnosticDataRouteMatch,\n requestContext: unknown,\n dataStrategy: DataStrategyFunction | null,\n skipLoaderErrorBubbling: boolean,\n isRouteRequest: boolean\n ): Promise | Response> {\n let result: DataResult;\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n let error = getInternalRouterError(405, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: actionMatch.route.id,\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n } else {\n let results = await callDataStrategy(\n \"action\",\n request,\n [actionMatch],\n matches,\n isRouteRequest,\n requestContext,\n dataStrategy\n );\n result = results[actionMatch.route.id];\n\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n }\n\n if (isRedirectResult(result)) {\n // Uhhhh - this should never happen, we should always throw these from\n // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n // can get back on the \"throw all redirect responses\" train here should\n // this ever happen :/\n throw new Response(null, {\n status: result.response.status,\n headers: {\n Location: result.response.headers.get(\"Location\")!,\n },\n });\n }\n\n if (isDeferredResult(result)) {\n let error = getInternalRouterError(400, { type: \"defer-action\" });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n }\n\n if (isRouteRequest) {\n // Note: This should only be non-Response values if we get here, since\n // isRouteRequest should throw any Response received in callLoaderOrAction\n if (isErrorResult(result)) {\n throw result.error;\n }\n\n return {\n matches: [actionMatch],\n loaderData: {},\n actionData: { [actionMatch.route.id]: result.data },\n errors: null,\n // Note: statusCode + headers are unused here since queryRoute will\n // return the raw Response or value\n statusCode: 200,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n // Create a GET request for the loaders\n let loaderRequest = new Request(request.url, {\n headers: request.headers,\n redirect: request.redirect,\n signal: request.signal,\n });\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = skipLoaderErrorBubbling\n ? actionMatch\n : findNearestBoundary(matches, actionMatch.route.id);\n\n let context = await loadRouteData(\n loaderRequest,\n matches,\n requestContext,\n dataStrategy,\n skipLoaderErrorBubbling,\n null,\n [boundaryMatch.route.id, result]\n );\n\n // action status codes take precedence over loader status codes\n return {\n ...context,\n statusCode: isRouteErrorResponse(result.error)\n ? result.error.status\n : result.statusCode != null\n ? result.statusCode\n : 500,\n actionData: null,\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n let context = await loadRouteData(\n loaderRequest,\n matches,\n requestContext,\n dataStrategy,\n skipLoaderErrorBubbling,\n null\n );\n\n return {\n ...context,\n actionData: {\n [actionMatch.route.id]: result.data,\n },\n // action status codes take precedence over loader status codes\n ...(result.statusCode ? { statusCode: result.statusCode } : {}),\n actionHeaders: result.headers\n ? { [actionMatch.route.id]: result.headers }\n : {},\n };\n }\n\n async function loadRouteData(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n dataStrategy: DataStrategyFunction | null,\n skipLoaderErrorBubbling: boolean,\n routeMatch: AgnosticDataRouteMatch | null,\n pendingActionResult?: PendingActionResult\n ): Promise<\n | Omit<\n StaticHandlerContext,\n \"location\" | \"basename\" | \"actionData\" | \"actionHeaders\"\n >\n | Response\n > {\n let isRouteRequest = routeMatch != null;\n\n // Short circuit if we have no loaders to run (queryRoute())\n if (\n isRouteRequest &&\n !routeMatch?.route.loader &&\n !routeMatch?.route.lazy\n ) {\n throw getInternalRouterError(400, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: routeMatch?.route.id,\n });\n }\n\n let requestMatches = routeMatch\n ? [routeMatch]\n : pendingActionResult && isErrorResult(pendingActionResult[1])\n ? getLoaderMatchesUntilBoundary(matches, pendingActionResult[0])\n : matches;\n let matchesToLoad = requestMatches.filter(\n (m) => m.route.loader || m.route.lazy\n );\n\n // Short circuit if we have no loaders to run (query())\n if (matchesToLoad.length === 0) {\n return {\n matches,\n // Add a null for all matched routes for proper revalidation on the client\n loaderData: matches.reduce(\n (acc, m) => Object.assign(acc, { [m.route.id]: null }),\n {}\n ),\n errors:\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? {\n [pendingActionResult[0]]: pendingActionResult[1].error,\n }\n : null,\n statusCode: 200,\n loaderHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let results = await callDataStrategy(\n \"loader\",\n request,\n matchesToLoad,\n matches,\n isRouteRequest,\n requestContext,\n dataStrategy\n );\n\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n\n // Process and commit output from loaders\n let activeDeferreds = new Map();\n let context = processRouteLoaderData(\n matches,\n results,\n pendingActionResult,\n activeDeferreds,\n skipLoaderErrorBubbling\n );\n\n // Add a null for any non-loader matches for proper revalidation on the client\n let executedLoaders = new Set(\n matchesToLoad.map((match) => match.route.id)\n );\n matches.forEach((match) => {\n if (!executedLoaders.has(match.route.id)) {\n context.loaderData[match.route.id] = null;\n }\n });\n\n return {\n ...context,\n matches,\n activeDeferreds:\n activeDeferreds.size > 0\n ? Object.fromEntries(activeDeferreds.entries())\n : null,\n };\n }\n\n // Utility wrapper for calling dataStrategy server-side without having to\n // pass around the manifest, mapRouteProperties, etc.\n async function callDataStrategy(\n type: \"loader\" | \"action\",\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n isRouteRequest: boolean,\n requestContext: unknown,\n dataStrategy: DataStrategyFunction | null\n ): Promise> {\n let results = await callDataStrategyImpl(\n dataStrategy || defaultDataStrategy,\n type,\n null,\n request,\n matchesToLoad,\n matches,\n null,\n manifest,\n mapRouteProperties,\n requestContext\n );\n\n let dataResults: Record = {};\n await Promise.all(\n matches.map(async (match) => {\n if (!(match.route.id in results)) {\n return;\n }\n let result = results[match.route.id];\n if (isRedirectDataStrategyResultResult(result)) {\n let response = result.result as Response;\n // Throw redirects and let the server handle them with an HTTP redirect\n throw normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n match.route.id,\n matches,\n basename,\n future.v7_relativeSplatPath\n );\n }\n if (isResponse(result.result) && isRouteRequest) {\n // For SSR single-route requests, we want to hand Responses back\n // directly without unwrapping\n throw result;\n }\n\n dataResults[match.route.id] =\n await convertDataStrategyResultToDataResult(result);\n })\n );\n return dataResults;\n }\n\n return {\n dataRoutes,\n query,\n queryRoute,\n };\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nexport function getStaticContextFromError(\n routes: AgnosticDataRouteObject[],\n context: StaticHandlerContext,\n error: any\n) {\n let newContext: StaticHandlerContext = {\n ...context,\n statusCode: isRouteErrorResponse(error) ? error.status : 500,\n errors: {\n [context._deepestRenderedBoundaryId || routes[0].id]: error,\n },\n };\n return newContext;\n}\n\nfunction throwStaticHandlerAbortedError(\n request: Request,\n isRouteRequest: boolean,\n future: StaticHandlerFutureConfig\n) {\n if (future.v7_throwAbortReason && request.signal.reason !== undefined) {\n throw request.signal.reason;\n }\n\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(`${method}() call aborted: ${request.method} ${request.url}`);\n}\n\nfunction isSubmissionNavigation(\n opts: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n return (\n opts != null &&\n ((\"formData\" in opts && opts.formData != null) ||\n (\"body\" in opts && opts.body !== undefined))\n );\n}\n\nfunction normalizeTo(\n location: Path,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n prependBasename: boolean,\n to: To | null,\n v7_relativeSplatPath: boolean,\n fromRouteId?: string,\n relative?: RelativeRoutingType\n) {\n let contextualMatches: AgnosticDataRouteMatch[];\n let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n\n // Resolve the relative path\n let path = resolveTo(\n to ? to : \".\",\n getResolveToMatches(contextualMatches, v7_relativeSplatPath),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n\n // Account for `?index` params when routing to the current location\n if ((to == null || to === \"\" || to === \".\") && activeRouteMatch) {\n let nakedIndex = hasNakedIndexQuery(path.search);\n if (activeRouteMatch.route.index && !nakedIndex) {\n // Add one when we're targeting an index route\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n } else if (!activeRouteMatch.route.index && nakedIndex) {\n // Remove existing ones when we're not\n let params = new URLSearchParams(path.search);\n let indexValues = params.getAll(\"index\");\n params.delete(\"index\");\n indexValues.filter((v) => v).forEach((v) => params.append(\"index\", v));\n let qs = params.toString();\n path.search = qs ? `?${qs}` : \"\";\n }\n }\n\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\n}\n\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(\n normalizeFormMethod: boolean,\n isFetcher: boolean,\n path: string,\n opts?: BaseNavigateOrFetchOptions\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponseImpl;\n} {\n // Return location verbatim on non-submission navigations\n if (!opts || !isSubmissionNavigation(opts)) {\n return { path };\n }\n\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, { method: opts.formMethod }),\n };\n }\n\n let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" }),\n });\n\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod\n ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n : (rawFormMethod.toLowerCase() as FormMethod);\n let formAction = stripHashFromPath(path);\n\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n let text =\n typeof opts.body === \"string\"\n ? opts.body\n : opts.body instanceof FormData ||\n opts.body instanceof URLSearchParams\n ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n \"\"\n )\n : String(opts.body);\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text,\n },\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n try {\n let json =\n typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined,\n },\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n\n let searchParams: URLSearchParams;\n let formData: FormData;\n\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n\n let submission: Submission = {\n formMethod,\n formAction,\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve any incoming ?index params\n if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n searchParams.append(\"index\", \"\");\n }\n parsedPath.search = `?${searchParams}`;\n\n return { path: createPath(parsedPath), submission };\n}\n\n// Filter out all routes at/below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(\n matches: AgnosticDataRouteMatch[],\n boundaryId: string,\n includeBoundary = false\n) {\n let index = matches.findIndex((m) => m.route.id === boundaryId);\n if (index >= 0) {\n return matches.slice(0, includeBoundary ? index + 1 : index);\n }\n return matches;\n}\n\nfunction getMatchesToLoad(\n history: History,\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n submission: Submission | undefined,\n location: Location,\n initialHydration: boolean,\n skipActionErrorRevalidation: boolean,\n isRevalidationRequired: boolean,\n cancelledDeferredRoutes: string[],\n cancelledFetcherLoads: Set,\n deletedFetchers: Set,\n fetchLoadMatches: Map,\n fetchRedirectIds: Set,\n routesToUse: AgnosticDataRouteObject[],\n basename: string | undefined,\n pendingActionResult?: PendingActionResult\n): [AgnosticDataRouteMatch[], RevalidatingFetcher[]] {\n let actionResult = pendingActionResult\n ? isErrorResult(pendingActionResult[1])\n ? pendingActionResult[1].error\n : pendingActionResult[1].data\n : undefined;\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\n\n // Pick navigation matches that are net-new or qualify for revalidation\n let boundaryMatches = matches;\n if (initialHydration && state.errors) {\n // On initial hydration, only consider matches up to _and including_ the boundary.\n // This is inclusive to handle cases where a server loader ran successfully,\n // a child server loader bubbled up to this route, but this route has\n // `clientLoader.hydrate` so we want to still run the `clientLoader` so that\n // we have a complete version of `loaderData`\n boundaryMatches = getLoaderMatchesUntilBoundary(\n matches,\n Object.keys(state.errors)[0],\n true\n );\n } else if (pendingActionResult && isErrorResult(pendingActionResult[1])) {\n // If an action threw an error, we call loaders up to, but not including the\n // boundary\n boundaryMatches = getLoaderMatchesUntilBoundary(\n matches,\n pendingActionResult[0]\n );\n }\n\n // Don't revalidate loaders by default after action 4xx/5xx responses\n // when the flag is enabled. They can still opt-into revalidation via\n // `shouldRevalidate` via `actionResult`\n let actionStatus = pendingActionResult\n ? pendingActionResult[1].statusCode\n : undefined;\n let shouldSkipRevalidation =\n skipActionErrorRevalidation && actionStatus && actionStatus >= 400;\n\n let navigationMatches = boundaryMatches.filter((match, index) => {\n let { route } = match;\n if (route.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\n\n if (route.loader == null) {\n return false;\n }\n\n if (initialHydration) {\n return shouldLoadRouteOnHydration(route, state.loaderData, state.errors);\n }\n\n // Always call the loader on new route instances and pending defer cancellations\n if (\n isNewLoader(state.loaderData, state.matches[index], match) ||\n cancelledDeferredRoutes.some((id) => id === match.route.id)\n ) {\n return true;\n }\n\n // This is the default implementation for when we revalidate. If the route\n // provides it's own implementation, then we give them full control but\n // provide this value so they can leverage it if needed after they check\n // their own specific use cases\n let currentRouteMatch = state.matches[index];\n let nextRouteMatch = match;\n\n return shouldRevalidateLoader(match, {\n currentUrl,\n currentParams: currentRouteMatch.params,\n nextUrl,\n nextParams: nextRouteMatch.params,\n ...submission,\n actionResult,\n actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation\n ? false\n : // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired ||\n currentUrl.pathname + currentUrl.search ===\n nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate:\n // - on initial hydration (shouldn't be any fetchers then anyway)\n // - if fetcher won't be present in the subsequent render\n // - no longer matches the URL (v7_fetcherPersist=false)\n // - was unmounted but persisted due to v7_fetcherPersist=true\n if (\n initialHydration ||\n !matches.some((m) => m.route.id === f.routeId) ||\n deletedFetchers.has(key)\n ) {\n return;\n }\n\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null,\n });\n return;\n }\n\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.has(key)) {\n // Always mark for revalidation if the fetcher was cancelled\n cancelledFetcherLoads.delete(key);\n shouldRevalidate = true;\n } else if (\n fetcher &&\n fetcher.state !== \"idle\" &&\n fetcher.data === undefined\n ) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\n currentUrl,\n currentParams: state.matches[state.matches.length - 1].params,\n nextUrl,\n nextParams: matches[matches.length - 1].params,\n ...submission,\n actionResult,\n actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation\n ? false\n : isRevalidationRequired,\n });\n }\n\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController(),\n });\n }\n });\n\n return [navigationMatches, revalidatingFetchers];\n}\n\nfunction shouldLoadRouteOnHydration(\n route: AgnosticDataRouteObject,\n loaderData: RouteData | null | undefined,\n errors: RouteData | null | undefined\n) {\n // We dunno if we have a loader - gotta find out!\n if (route.lazy) {\n return true;\n }\n\n // No loader, nothing to initialize\n if (!route.loader) {\n return false;\n }\n\n let hasData = loaderData != null && loaderData[route.id] !== undefined;\n let hasError = errors != null && errors[route.id] !== undefined;\n\n // Don't run if we error'd during SSR\n if (!hasData && hasError) {\n return false;\n }\n\n // Explicitly opting-in to running on hydration\n if (typeof route.loader === \"function\" && route.loader.hydrate === true) {\n return true;\n }\n\n // Otherwise, run if we're not yet initialized with anything\n return !hasData && !hasError;\n}\n\nfunction isNewLoader(\n currentLoaderData: RouteData,\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let isNew =\n // [a] -> [a, b]\n !currentMatch ||\n // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id;\n\n // Handle the case that we don't have data for a re-used route, potentially\n // from a prior error or from a cancelled pending deferred\n let isMissingData = currentLoaderData[match.route.id] === undefined;\n\n // Always load if this is a net-new route or we don't yet have data\n return isNew || isMissingData;\n}\n\nfunction isNewRouteInstance(\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let currentPath = currentMatch.route.path;\n return (\n // param change for this match, /users/123 -> /users/456\n currentMatch.pathname !== match.pathname ||\n // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n (currentPath != null &&\n currentPath.endsWith(\"*\") &&\n currentMatch.params[\"*\"] !== match.params[\"*\"])\n );\n}\n\nfunction shouldRevalidateLoader(\n loaderMatch: AgnosticDataRouteMatch,\n arg: ShouldRevalidateFunctionArgs\n) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n\n return arg.defaultShouldRevalidate;\n}\n\nfunction patchRoutesImpl(\n routeId: string | null,\n children: AgnosticRouteObject[],\n routesToUse: AgnosticDataRouteObject[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction\n) {\n let childrenToPatch: AgnosticDataRouteObject[];\n if (routeId) {\n let route = manifest[routeId];\n invariant(\n route,\n `No route found to patch children into: routeId = ${routeId}`\n );\n if (!route.children) {\n route.children = [];\n }\n childrenToPatch = route.children;\n } else {\n childrenToPatch = routesToUse;\n }\n\n // Don't patch in routes we already know about so that `patch` is idempotent\n // to simplify user-land code. This is useful because we re-call the\n // `patchRoutesOnNavigation` function for matched routes with params.\n let uniqueChildren = children.filter(\n (newRoute) =>\n !childrenToPatch.some((existingRoute) =>\n isSameRoute(newRoute, existingRoute)\n )\n );\n\n let newRoutes = convertRoutesToDataRoutes(\n uniqueChildren,\n mapRouteProperties,\n [routeId || \"_\", \"patch\", String(childrenToPatch?.length || \"0\")],\n manifest\n );\n\n childrenToPatch.push(...newRoutes);\n}\n\nfunction isSameRoute(\n newRoute: AgnosticRouteObject,\n existingRoute: AgnosticRouteObject\n): boolean {\n // Most optimal check is by id\n if (\n \"id\" in newRoute &&\n \"id\" in existingRoute &&\n newRoute.id === existingRoute.id\n ) {\n return true;\n }\n\n // Second is by pathing differences\n if (\n !(\n newRoute.index === existingRoute.index &&\n newRoute.path === existingRoute.path &&\n newRoute.caseSensitive === existingRoute.caseSensitive\n )\n ) {\n return false;\n }\n\n // Pathless layout routes are trickier since we need to check children.\n // If they have no children then they're the same as far as we can tell\n if (\n (!newRoute.children || newRoute.children.length === 0) &&\n (!existingRoute.children || existingRoute.children.length === 0)\n ) {\n return true;\n }\n\n // Otherwise, we look to see if every child in the new route is already\n // represented in the existing route's children\n return newRoute.children!.every((aChild, i) =>\n existingRoute.children?.some((bChild) => isSameRoute(aChild, bChild))\n );\n}\n\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n route: AgnosticDataRouteObject,\n mapRouteProperties: MapRoutePropertiesFunction,\n manifest: RouteManifest\n) {\n if (!route.lazy) {\n return;\n }\n\n let lazyRoute = await route.lazy();\n\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates: Record = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue =\n routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n let isPropertyStaticallyDefined =\n staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n `defined but its lazy function is also returning a value for this property. ` +\n `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n\n if (\n !isPropertyStaticallyDefined &&\n !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n ) {\n routeUpdates[lazyRouteProperty] =\n lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n }\n }\n\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided\n // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n // the logic will differ between frameworks.\n ...mapRouteProperties(routeToUpdate),\n lazy: undefined,\n });\n}\n\n// Default implementation of `dataStrategy` which fetches all loaders in parallel\nasync function defaultDataStrategy({\n matches,\n}: DataStrategyFunctionArgs): ReturnType {\n let matchesToLoad = matches.filter((m) => m.shouldLoad);\n let results = await Promise.all(matchesToLoad.map((m) => m.resolve()));\n return results.reduce(\n (acc, result, i) =>\n Object.assign(acc, { [matchesToLoad[i].route.id]: result }),\n {}\n );\n}\n\nasync function callDataStrategyImpl(\n dataStrategyImpl: DataStrategyFunction,\n type: \"loader\" | \"action\",\n state: RouterState | null,\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n fetcherKey: string | null,\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n requestContext?: unknown\n): Promise> {\n let loadRouteDefinitionsPromises = matches.map((m) =>\n m.route.lazy\n ? loadLazyRouteModule(m.route, mapRouteProperties, manifest)\n : undefined\n );\n\n let dsMatches = matches.map((match, i) => {\n let loadRoutePromise = loadRouteDefinitionsPromises[i];\n let shouldLoad = matchesToLoad.some((m) => m.route.id === match.route.id);\n // `resolve` encapsulates route.lazy(), executing the loader/action,\n // and mapping return values/thrown errors to a `DataStrategyResult`. Users\n // can pass a callback to take fine-grained control over the execution\n // of the loader/action\n let resolve: DataStrategyMatch[\"resolve\"] = async (handlerOverride) => {\n if (\n handlerOverride &&\n request.method === \"GET\" &&\n (match.route.lazy || match.route.loader)\n ) {\n shouldLoad = true;\n }\n return shouldLoad\n ? callLoaderOrAction(\n type,\n request,\n match,\n loadRoutePromise,\n handlerOverride,\n requestContext\n )\n : Promise.resolve({ type: ResultType.data, result: undefined });\n };\n\n return {\n ...match,\n shouldLoad,\n resolve,\n };\n });\n\n // Send all matches here to allow for a middleware-type implementation.\n // handler will be a no-op for unneeded routes and we filter those results\n // back out below.\n let results = await dataStrategyImpl({\n matches: dsMatches,\n request,\n params: matches[0].params,\n fetcherKey,\n context: requestContext,\n });\n\n // Wait for all routes to load here but 'swallow the error since we want\n // it to bubble up from the `await loadRoutePromise` in `callLoaderOrAction` -\n // called from `match.resolve()`\n try {\n await Promise.all(loadRouteDefinitionsPromises);\n } catch (e) {\n // No-op\n }\n\n return results;\n}\n\n// Default logic for calling a loader/action is the user has no specified a dataStrategy\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n loadRoutePromise: Promise | undefined,\n handlerOverride: Parameters[0],\n staticContext?: unknown\n): Promise {\n let result: DataStrategyResult;\n let onReject: (() => void) | undefined;\n\n let runHandler = (\n handler: AgnosticRouteObject[\"loader\"] | AgnosticRouteObject[\"action\"]\n ): Promise => {\n // Setup a promise we can race against so that abort signals short circuit\n let reject: () => void;\n // This will never resolve so safe to type it as Promise to\n // satisfy the function return value\n let abortPromise = new Promise((_, r) => (reject = r));\n onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n\n let actualHandler = (ctx?: unknown) => {\n if (typeof handler !== \"function\") {\n return Promise.reject(\n new Error(\n `You cannot call the handler for a route which defines a boolean ` +\n `\"${type}\" [routeId: ${match.route.id}]`\n )\n );\n }\n return handler(\n {\n request,\n params: match.params,\n context: staticContext,\n },\n ...(ctx !== undefined ? [ctx] : [])\n );\n };\n\n let handlerPromise: Promise = (async () => {\n try {\n let val = await (handlerOverride\n ? handlerOverride((ctx: unknown) => actualHandler(ctx))\n : actualHandler());\n return { type: \"data\", result: val };\n } catch (e) {\n return { type: \"error\", result: e };\n }\n })();\n\n return Promise.race([handlerPromise, abortPromise]);\n };\n\n try {\n let handler = match.route[type];\n\n // If we have a route.lazy promise, await that first\n if (loadRoutePromise) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let [value] = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadRoutePromise,\n ]);\n if (handlerError !== undefined) {\n throw handlerError;\n }\n result = value!;\n } else {\n // Load lazy route module, then run any returned handler\n await loadRoutePromise;\n\n handler = match.route[type];\n if (handler) {\n // Handler still runs even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id,\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return { type: ResultType.data, result: undefined };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname,\n });\n } else {\n result = await runHandler(handler);\n }\n\n invariant(\n result.result !== undefined,\n `You defined ${type === \"action\" ? \"an action\" : \"a loader\"} for route ` +\n `\"${match.route.id}\" but didn't return anything from your \\`${type}\\` ` +\n `function. Please return a value or \\`null\\`.`\n );\n } catch (e) {\n // We should already be catching and converting normal handler executions to\n // DataStrategyResults and returning them, so anything that throws here is an\n // unexpected error we still need to wrap\n return { type: ResultType.error, result: e };\n } finally {\n if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n }\n\n return result;\n}\n\nasync function convertDataStrategyResultToDataResult(\n dataStrategyResult: DataStrategyResult\n): Promise {\n let { result, type } = dataStrategyResult;\n\n if (isResponse(result)) {\n let data: any;\n\n try {\n let contentType = result.headers.get(\"Content-Type\");\n // Check between word boundaries instead of startsWith() due to the last\n // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n if (result.body == null) {\n data = null;\n } else {\n data = await result.json();\n }\n } else {\n data = await result.text();\n }\n } catch (e) {\n return { type: ResultType.error, error: e };\n }\n\n if (type === ResultType.error) {\n return {\n type: ResultType.error,\n error: new ErrorResponseImpl(result.status, result.statusText, data),\n statusCode: result.status,\n headers: result.headers,\n };\n }\n\n return {\n type: ResultType.data,\n data,\n statusCode: result.status,\n headers: result.headers,\n };\n }\n\n if (type === ResultType.error) {\n if (isDataWithResponseInit(result)) {\n if (result.data instanceof Error) {\n return {\n type: ResultType.error,\n error: result.data,\n statusCode: result.init?.status,\n };\n }\n\n // Convert thrown data() to ErrorResponse instances\n result = new ErrorResponseImpl(\n result.init?.status || 500,\n undefined,\n result.data\n );\n }\n return {\n type: ResultType.error,\n error: result,\n statusCode: isRouteErrorResponse(result) ? result.status : undefined,\n };\n }\n\n if (isDeferredData(result)) {\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: result.init?.status,\n headers: result.init?.headers && new Headers(result.init.headers),\n };\n }\n\n if (isDataWithResponseInit(result)) {\n return {\n type: ResultType.data,\n data: result.data,\n statusCode: result.init?.status,\n headers: result.init?.headers\n ? new Headers(result.init.headers)\n : undefined,\n };\n }\n\n return { type: ResultType.data, data: result };\n}\n\n// Support relative routing in internal redirects\nfunction normalizeRelativeRoutingRedirectResponse(\n response: Response,\n request: Request,\n routeId: string,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n v7_relativeSplatPath: boolean\n) {\n let location = response.headers.get(\"Location\");\n invariant(\n location,\n \"Redirects returned/thrown from loaders/actions must have a Location header\"\n );\n\n if (!ABSOLUTE_URL_REGEX.test(location)) {\n let trimmedMatches = matches.slice(\n 0,\n matches.findIndex((m) => m.route.id === routeId) + 1\n );\n location = normalizeTo(\n new URL(request.url),\n trimmedMatches,\n basename,\n true,\n location,\n v7_relativeSplatPath\n );\n response.headers.set(\"Location\", location);\n }\n\n return response;\n}\n\nfunction normalizeRedirectLocation(\n location: string,\n currentUrl: URL,\n basename: string\n): string {\n if (ABSOLUTE_URL_REGEX.test(location)) {\n // Strip off the protocol+origin for same-origin + same-basename absolute redirects\n let normalizedLocation = location;\n let url = normalizedLocation.startsWith(\"//\")\n ? new URL(currentUrl.protocol + normalizedLocation)\n : new URL(normalizedLocation);\n let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\n return url.pathname + url.search + url.hash;\n }\n }\n return location;\n}\n\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches. During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(\n history: History,\n location: string | Location,\n signal: AbortSignal,\n submission?: Submission\n): Request {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init: RequestInit = { signal };\n\n if (submission && isMutationMethod(submission.formMethod)) {\n let { formMethod, formEncType } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (\n formEncType === \"application/x-www-form-urlencoded\" &&\n submission.formData\n ) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n\n return new Request(url, init);\n}\n\nfunction convertFormDataToSearchParams(formData: FormData): URLSearchParams {\n let searchParams = new URLSearchParams();\n\n for (let [key, value] of formData.entries()) {\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n searchParams.append(key, typeof value === \"string\" ? value : value.name);\n }\n\n return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n searchParams: URLSearchParams\n): FormData {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\n}\n\nfunction processRouteLoaderData(\n matches: AgnosticDataRouteMatch[],\n results: Record,\n pendingActionResult: PendingActionResult | undefined,\n activeDeferreds: Map,\n skipLoaderErrorBubbling: boolean\n): {\n loaderData: RouterState[\"loaderData\"];\n errors: RouterState[\"errors\"] | null;\n statusCode: number;\n loaderHeaders: Record;\n} {\n // Fill in loaderData/errors from our loaders\n let loaderData: RouterState[\"loaderData\"] = {};\n let errors: RouterState[\"errors\"] | null = null;\n let statusCode: number | undefined;\n let foundError = false;\n let loaderHeaders: Record = {};\n let pendingError =\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? pendingActionResult[1].error\n : undefined;\n\n // Process loader results into state.loaderData/state.errors\n matches.forEach((match) => {\n if (!(match.route.id in results)) {\n return;\n }\n let id = match.route.id;\n let result = results[id];\n invariant(\n !isRedirectResult(result),\n \"Cannot handle redirect results in processLoaderData\"\n );\n if (isErrorResult(result)) {\n let error = result.error;\n // If we have a pending action error, we report it at the highest-route\n // that throws a loader error, and then clear it out to indicate that\n // it was consumed\n if (pendingError !== undefined) {\n error = pendingError;\n pendingError = undefined;\n }\n\n errors = errors || {};\n\n if (skipLoaderErrorBubbling) {\n errors[id] = error;\n } else {\n // Look upwards from the matched route for the closest ancestor error\n // boundary, defaulting to the root match. Prefer higher error values\n // if lower errors bubble to the same boundary\n let boundaryMatch = findNearestBoundary(matches, id);\n if (errors[boundaryMatch.route.id] == null) {\n errors[boundaryMatch.route.id] = error;\n }\n }\n\n // Clear our any prior loaderData for the throwing route\n loaderData[id] = undefined;\n\n // Once we find our first (highest) error, we set the status code and\n // prevent deeper status codes from overriding\n if (!foundError) {\n foundError = true;\n statusCode = isRouteErrorResponse(result.error)\n ? result.error.status\n : 500;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n if (isDeferredResult(result)) {\n activeDeferreds.set(id, result.deferredData);\n loaderData[id] = result.deferredData.data;\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (\n result.statusCode != null &&\n result.statusCode !== 200 &&\n !foundError\n ) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n loaderData[id] = result.data;\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (result.statusCode && result.statusCode !== 200 && !foundError) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n }\n }\n });\n\n // If we didn't consume the pending action error (i.e., all loaders\n // resolved), then consume it here. Also clear out any loaderData for the\n // throwing route\n if (pendingError !== undefined && pendingActionResult) {\n errors = { [pendingActionResult[0]]: pendingError };\n loaderData[pendingActionResult[0]] = undefined;\n }\n\n return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders,\n };\n}\n\nfunction processLoaderData(\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n results: Record,\n pendingActionResult: PendingActionResult | undefined,\n revalidatingFetchers: RevalidatingFetcher[],\n fetcherResults: Record,\n activeDeferreds: Map\n): {\n loaderData: RouterState[\"loaderData\"];\n errors?: RouterState[\"errors\"];\n} {\n let { loaderData, errors } = processRouteLoaderData(\n matches,\n results,\n pendingActionResult,\n activeDeferreds,\n false // This method is only called client side so we always want to bubble\n );\n\n // Process results from our revalidating fetchers\n revalidatingFetchers.forEach((rf) => {\n let { key, match, controller } = rf;\n let result = fetcherResults[key];\n invariant(result, \"Did not find corresponding fetcher result\");\n\n // Process fetcher non-redirect errors\n if (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n return;\n } else if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, match?.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = {\n ...errors,\n [boundaryMatch.route.id]: result.error,\n };\n }\n state.fetchers.delete(key);\n } else if (isRedirectResult(result)) {\n // Should never get here, redirects should get processed above, but we\n // keep this to type narrow to a success result in the else\n invariant(false, \"Unhandled fetcher revalidation redirect\");\n } else if (isDeferredResult(result)) {\n // Should never get here, deferred data should be awaited for fetchers\n // in resolveDeferredResults\n invariant(false, \"Unhandled fetcher deferred data\");\n } else {\n let doneFetcher = getDoneFetcher(result.data);\n state.fetchers.set(key, doneFetcher);\n }\n });\n\n return { loaderData, errors };\n}\n\nfunction mergeLoaderData(\n loaderData: RouteData,\n newLoaderData: RouteData,\n matches: AgnosticDataRouteMatch[],\n errors: RouteData | null | undefined\n): RouteData {\n let mergedLoaderData = { ...newLoaderData };\n for (let match of matches) {\n let id = match.route.id;\n if (newLoaderData.hasOwnProperty(id)) {\n if (newLoaderData[id] !== undefined) {\n mergedLoaderData[id] = newLoaderData[id];\n } else {\n // No-op - this is so we ignore existing data if we have a key in the\n // incoming object with an undefined value, which is how we unset a prior\n // loaderData if we encounter a loader error\n }\n } else if (loaderData[id] !== undefined && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\n mergedLoaderData[id] = loaderData[id];\n }\n\n if (errors && errors.hasOwnProperty(id)) {\n // Don't keep any loader data below the boundary\n break;\n }\n }\n return mergedLoaderData;\n}\n\nfunction getActionDataForCommit(\n pendingActionResult: PendingActionResult | undefined\n) {\n if (!pendingActionResult) {\n return {};\n }\n return isErrorResult(pendingActionResult[1])\n ? {\n // Clear out prior actionData on errors\n actionData: {},\n }\n : {\n actionData: {\n [pendingActionResult[0]]: pendingActionResult[1].data,\n },\n };\n}\n\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(\n matches: AgnosticDataRouteMatch[],\n routeId?: string\n): AgnosticDataRouteMatch {\n let eligibleMatches = routeId\n ? matches.slice(0, matches.findIndex((m) => m.route.id === routeId) + 1)\n : [...matches];\n return (\n eligibleMatches.reverse().find((m) => m.route.hasErrorBoundary === true) ||\n matches[0]\n );\n}\n\nfunction getShortCircuitMatches(routes: AgnosticDataRouteObject[]): {\n matches: AgnosticDataRouteMatch[];\n route: AgnosticDataRouteObject;\n} {\n // Prefer a root layout route if present, otherwise shim in a route object\n let route =\n routes.length === 1\n ? routes[0]\n : routes.find((r) => r.index || !r.path || r.path === \"/\") || {\n id: `__shim-error-route__`,\n };\n\n return {\n matches: [\n {\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route,\n },\n ],\n route,\n };\n}\n\nfunction getInternalRouterError(\n status: number,\n {\n pathname,\n routeId,\n method,\n type,\n message,\n }: {\n pathname?: string;\n routeId?: string;\n method?: string;\n type?: \"defer-action\" | \"invalid-body\";\n message?: string;\n } = {}\n) {\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n\n if (status === 400) {\n statusText = \"Bad Request\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method} request to \"${pathname}\" but ` +\n `did not provide a \\`loader\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (type === \"defer-action\") {\n errorMessage = \"defer() is not supported in actions\";\n } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\n }\n } else if (status === 403) {\n statusText = \"Forbidden\";\n errorMessage = `Route \"${routeId}\" does not match URL \"${pathname}\"`;\n } else if (status === 404) {\n statusText = \"Not Found\";\n errorMessage = `No route matches URL \"${pathname}\"`;\n } else if (status === 405) {\n statusText = \"Method Not Allowed\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method.toUpperCase()} request to \"${pathname}\" but ` +\n `did not provide an \\`action\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (method) {\n errorMessage = `Invalid request method \"${method.toUpperCase()}\"`;\n }\n }\n\n return new ErrorResponseImpl(\n status || 500,\n statusText,\n new Error(errorMessage),\n true\n );\n}\n\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(\n results: Record\n): { key: string; result: RedirectResult } | undefined {\n let entries = Object.entries(results);\n for (let i = entries.length - 1; i >= 0; i--) {\n let [key, result] = entries[i];\n if (isRedirectResult(result)) {\n return { key, result };\n }\n }\n}\n\nfunction stripHashFromPath(path: To) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath({ ...parsedPath, hash: \"\" });\n}\n\nfunction isHashChangeOnly(a: Location, b: Location): boolean {\n if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\n}\n\nfunction isPromise(val: unknown): val is Promise {\n return typeof val === \"object\" && val != null && \"then\" in val;\n}\n\nfunction isDataStrategyResult(result: unknown): result is DataStrategyResult {\n return (\n result != null &&\n typeof result === \"object\" &&\n \"type\" in result &&\n \"result\" in result &&\n (result.type === ResultType.data || result.type === ResultType.error)\n );\n}\n\nfunction isRedirectDataStrategyResultResult(result: DataStrategyResult) {\n return (\n isResponse(result.result) && redirectStatusCodes.has(result.result.status)\n );\n}\n\nfunction isDeferredResult(result: DataResult): result is DeferredResult {\n return result.type === ResultType.deferred;\n}\n\nfunction isErrorResult(result: DataResult): result is ErrorResult {\n return result.type === ResultType.error;\n}\n\nfunction isRedirectResult(result?: DataResult): result is RedirectResult {\n return (result && result.type) === ResultType.redirect;\n}\n\nexport function isDataWithResponseInit(\n value: any\n): value is DataWithResponseInit {\n return (\n typeof value === \"object\" &&\n value != null &&\n \"type\" in value &&\n \"data\" in value &&\n \"init\" in value &&\n value.type === \"DataWithResponseInit\"\n );\n}\n\nexport function isDeferredData(value: any): value is DeferredData {\n let deferred: DeferredData = value;\n return (\n deferred &&\n typeof deferred === \"object\" &&\n typeof deferred.data === \"object\" &&\n typeof deferred.subscribe === \"function\" &&\n typeof deferred.cancel === \"function\" &&\n typeof deferred.resolveData === \"function\"\n );\n}\n\nfunction isResponse(value: any): value is Response {\n return (\n value != null &&\n typeof value.status === \"number\" &&\n typeof value.statusText === \"string\" &&\n typeof value.headers === \"object\" &&\n typeof value.body !== \"undefined\"\n );\n}\n\nfunction isRedirectResponse(result: any): result is Response {\n if (!isResponse(result)) {\n return false;\n }\n\n let status = result.status;\n let location = result.headers.get(\"Location\");\n return status >= 300 && status <= 399 && location != null;\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveNavigationDeferredResults(\n matches: (AgnosticDataRouteMatch | null)[],\n results: Record,\n signal: AbortSignal,\n currentMatches: AgnosticDataRouteMatch[],\n currentLoaderData: RouteData\n) {\n let entries = Object.entries(results);\n for (let index = 0; index < entries.length; index++) {\n let [routeId, result] = entries[index];\n let match = matches.find((m) => m?.route.id === routeId);\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\n let currentMatch = currentMatches.find(\n (m) => m.route.id === match!.route.id\n );\n let isRevalidatingLoader =\n currentMatch != null &&\n !isNewRouteInstance(currentMatch, match) &&\n (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n\n if (isDeferredResult(result) && isRevalidatingLoader) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n await resolveDeferredData(result, signal, false).then((result) => {\n if (result) {\n results[routeId] = result;\n }\n });\n }\n }\n}\n\nasync function resolveFetcherDeferredResults(\n matches: (AgnosticDataRouteMatch | null)[],\n results: Record,\n revalidatingFetchers: RevalidatingFetcher[]\n) {\n for (let index = 0; index < revalidatingFetchers.length; index++) {\n let { key, routeId, controller } = revalidatingFetchers[index];\n let result = results[key];\n let match = matches.find((m) => m?.route.id === routeId);\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\n if (isDeferredResult(result)) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n invariant(\n controller,\n \"Expected an AbortController for revalidating fetcher deferred result\"\n );\n await resolveDeferredData(result, controller.signal, true).then(\n (result) => {\n if (result) {\n results[key] = result;\n }\n }\n );\n }\n }\n}\n\nasync function resolveDeferredData(\n result: DeferredResult,\n signal: AbortSignal,\n unwrap = false\n): Promise {\n let aborted = await result.deferredData.resolveData(signal);\n if (aborted) {\n return;\n }\n\n if (unwrap) {\n try {\n return {\n type: ResultType.data,\n data: result.deferredData.unwrappedData,\n };\n } catch (e) {\n // Handle any TrackedPromise._error values encountered while unwrapping\n return {\n type: ResultType.error,\n error: e,\n };\n }\n }\n\n return {\n type: ResultType.data,\n data: result.deferredData.data,\n };\n}\n\nfunction hasNakedIndexQuery(search: string): boolean {\n return new URLSearchParams(search).getAll(\"index\").some((v) => v === \"\");\n}\n\nfunction getTargetMatch(\n matches: AgnosticDataRouteMatch[],\n location: Location | string\n) {\n let search =\n typeof location === \"string\" ? parsePath(location).search : location.search;\n if (\n matches[matches.length - 1].route.index &&\n hasNakedIndexQuery(search || \"\")\n ) {\n // Return the leaf index route when index is present\n return matches[matches.length - 1];\n }\n // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n // pathless layout routes)\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches[pathMatches.length - 1];\n}\n\nfunction getSubmissionFromNavigation(\n navigation: Navigation\n): Submission | undefined {\n let { formMethod, formAction, formEncType, text, formData, json } =\n navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text,\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined,\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined,\n };\n }\n}\n\nfunction getLoadingNavigation(\n location: Location,\n submission?: Submission\n): NavigationStates[\"Loading\"] {\n if (submission) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n } else {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n };\n return navigation;\n }\n}\n\nfunction getSubmittingNavigation(\n location: Location,\n submission: Submission\n): NavigationStates[\"Submitting\"] {\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n}\n\nfunction getLoadingFetcher(\n submission?: Submission,\n data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n if (submission) {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data,\n };\n return fetcher;\n } else {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n }\n}\n\nfunction getSubmittingFetcher(\n submission: Submission,\n existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined,\n };\n return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n let fetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\n\nfunction persistAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n if (transitions.size > 0) {\n let json: Record = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\n//#endregion\n","import * as React from \"react\";\nimport type {\n AgnosticIndexRouteObject,\n AgnosticNonIndexRouteObject,\n AgnosticRouteMatch,\n History,\n LazyRouteFunction,\n Location,\n Action as NavigationType,\n RelativeRoutingType,\n Router,\n StaticHandlerContext,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nexport interface IndexRouteObject {\n caseSensitive?: AgnosticIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticIndexRouteObject[\"path\"];\n id?: AgnosticIndexRouteObject[\"id\"];\n loader?: AgnosticIndexRouteObject[\"loader\"];\n action?: AgnosticIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticIndexRouteObject[\"handle\"];\n index: true;\n children?: undefined;\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction;\n}\n\nexport interface NonIndexRouteObject {\n caseSensitive?: AgnosticNonIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticNonIndexRouteObject[\"path\"];\n id?: AgnosticNonIndexRouteObject[\"id\"];\n loader?: AgnosticNonIndexRouteObject[\"loader\"];\n action?: AgnosticNonIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticNonIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticNonIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticNonIndexRouteObject[\"handle\"];\n index?: false;\n children?: RouteObject[];\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction;\n}\n\nexport type RouteObject = IndexRouteObject | NonIndexRouteObject;\n\nexport type DataRouteObject = RouteObject & {\n children?: DataRouteObject[];\n id: string;\n};\n\nexport interface RouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends RouteObject = RouteObject\n> extends AgnosticRouteMatch {}\n\nexport interface DataRouteMatch extends RouteMatch {}\n\nexport interface DataRouterContextObject\n // Omit `future` since those can be pulled from the `router`\n // `NavigationContext` needs future since it doesn't have a `router` in all cases\n extends Omit {\n router: Router;\n staticContext?: StaticHandlerContext;\n}\n\nexport const DataRouterContext =\n React.createContext(null);\nif (__DEV__) {\n DataRouterContext.displayName = \"DataRouter\";\n}\n\nexport const DataRouterStateContext = React.createContext<\n Router[\"state\"] | null\n>(null);\nif (__DEV__) {\n DataRouterStateContext.displayName = \"DataRouterState\";\n}\n\nexport const AwaitContext = React.createContext(null);\nif (__DEV__) {\n AwaitContext.displayName = \"Await\";\n}\n\nexport interface NavigateOptions {\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n flushSync?: boolean;\n viewTransition?: boolean;\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level `` API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\nexport interface Navigator {\n createHref: History[\"createHref\"];\n // Optional for backwards-compat with Router/HistoryRouter usage (edge case)\n encodeLocation?: History[\"encodeLocation\"];\n go: History[\"go\"];\n push(to: To, state?: any, opts?: NavigateOptions): void;\n replace(to: To, state?: any, opts?: NavigateOptions): void;\n}\n\ninterface NavigationContextObject {\n basename: string;\n navigator: Navigator;\n static: boolean;\n future: {\n v7_relativeSplatPath: boolean;\n };\n}\n\nexport const NavigationContext = React.createContext(\n null!\n);\n\nif (__DEV__) {\n NavigationContext.displayName = \"Navigation\";\n}\n\ninterface LocationContextObject {\n location: Location;\n navigationType: NavigationType;\n}\n\nexport const LocationContext = React.createContext(\n null!\n);\n\nif (__DEV__) {\n LocationContext.displayName = \"Location\";\n}\n\nexport interface RouteContextObject {\n outlet: React.ReactElement | null;\n matches: RouteMatch[];\n isDataRoute: boolean;\n}\n\nexport const RouteContext = React.createContext({\n outlet: null,\n matches: [],\n isDataRoute: false,\n});\n\nif (__DEV__) {\n RouteContext.displayName = \"Route\";\n}\n\nexport const RouteErrorContext = React.createContext(null);\n\nif (__DEV__) {\n RouteErrorContext.displayName = \"RouteError\";\n}\n","import * as React from \"react\";\nimport type {\n Blocker,\n BlockerFunction,\n Location,\n ParamParseKey,\n Params,\n Path,\n PathMatch,\n PathPattern,\n RelativeRoutingType,\n Router as RemixRouter,\n RevalidationState,\n To,\n UIMatch,\n} from \"@remix-run/router\";\nimport {\n IDLE_BLOCKER,\n Action as NavigationType,\n UNSAFE_convertRouteMatchToUiMatch as convertRouteMatchToUiMatch,\n UNSAFE_decodePath as decodePath,\n UNSAFE_getResolveToMatches as getResolveToMatches,\n UNSAFE_invariant as invariant,\n isRouteErrorResponse,\n joinPaths,\n matchPath,\n matchRoutes,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\n\nimport type {\n DataRouteMatch,\n NavigateOptions,\n RouteContextObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n RouteErrorContext,\n} from \"./context\";\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/v6/hooks/use-href\n */\nexport function useHref(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useHref() may be used only in the context of a component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { hash, pathname, search } = useResolvedPath(to, { relative });\n\n let joinedPathname = pathname;\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the href. If this is a root navigation, then just use the raw\n // basename which allows the basename to have full control over the presence\n // of a trailing slash on root links\n if (basename !== \"/\") {\n joinedPathname =\n pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n }\n\n return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\n\n/**\n * Returns true if this component is a descendant of a ``.\n *\n * @see https://reactrouter.com/v6/hooks/use-in-router-context\n */\nexport function useInRouterContext(): boolean {\n return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/v6/hooks/use-location\n */\nexport function useLocation(): Location {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useLocation() may be used only in the context of a component.`\n );\n\n return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/v6/hooks/use-navigation-type\n */\nexport function useNavigationType(): NavigationType {\n return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * ``.\n *\n * @see https://reactrouter.com/v6/hooks/use-match\n */\nexport function useMatch<\n ParamKey extends ParamParseKey,\n Path extends string\n>(pattern: PathPattern | Path): PathMatch | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useMatch() may be used only in the context of a component.`\n );\n\n let { pathname } = useLocation();\n return React.useMemo(\n () => matchPath(pattern, decodePath(pathname)),\n [pathname, pattern]\n );\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\nexport interface NavigateFunction {\n (to: To, options?: NavigateOptions): void;\n (delta: number): void;\n}\n\nconst navigateEffectWarning =\n `You should call navigate() in a React.useEffect(), not when ` +\n `your component is first rendered.`;\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(\n cb: Parameters[0]\n) {\n let isStatic = React.useContext(NavigationContext).static;\n if (!isStatic) {\n // We should be able to get rid of this once react 18.3 is released\n // See: https://github.com/facebook/react/pull/26395\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(cb);\n }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by ``s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/v6/hooks/use-navigate\n */\nexport function useNavigate(): NavigateFunction {\n let { isDataRoute } = React.useContext(RouteContext);\n // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\n\nfunction useNavigateUnstable(): NavigateFunction {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useNavigate() may be used only in the context of a component.`\n );\n\n let dataRouterContext = React.useContext(DataRouterContext);\n let { basename, future, navigator } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n getResolveToMatches(matches, future.v7_relativeSplatPath)\n );\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our history listener yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n\n let path = resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n options.relative === \"path\"\n );\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to handing off to history (but only if we're not in a data router,\n // otherwise it'll prepend the basename inside of the router).\n // If this is a root navigation, then we navigate to the raw basename\n // which allows the basename to have full control over the presence of a\n // trailing slash on root links\n if (dataRouterContext == null && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\"\n ? basename\n : joinPaths([basename, path.pathname]);\n }\n\n (!!options.replace ? navigator.replace : navigator.push)(\n path,\n options.state,\n options\n );\n },\n [\n basename,\n navigator,\n routePathnamesJson,\n locationPathname,\n dataRouterContext,\n ]\n );\n\n return navigate;\n}\n\nconst OutletContext = React.createContext(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/v6/hooks/use-outlet-context\n */\nexport function useOutletContext(): Context {\n return React.useContext(OutletContext) as Context;\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by `` to render child routes.\n *\n * @see https://reactrouter.com/v6/hooks/use-outlet\n */\nexport function useOutlet(context?: unknown): React.ReactElement | null {\n let outlet = React.useContext(RouteContext).outlet;\n if (outlet) {\n return (\n {outlet}\n );\n }\n return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/v6/hooks/use-params\n */\nexport function useParams<\n ParamsOrKey extends string | Record = string\n>(): Readonly<\n [ParamsOrKey] extends [string] ? Params : Partial\n> {\n let { matches } = React.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? (routeMatch.params as any) : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/v6/hooks/use-resolved-path\n */\nexport function useResolvedPath(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): Path {\n let { future } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n let routePathnamesJson = JSON.stringify(\n getResolveToMatches(matches, future.v7_relativeSplatPath)\n );\n\n return React.useMemo(\n () =>\n resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n relative === \"path\"\n ),\n [to, routePathnamesJson, locationPathname, relative]\n );\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an `` to render their child route's\n * element.\n *\n * @see https://reactrouter.com/v6/hooks/use-routes\n */\nexport function useRoutes(\n routes: RouteObject[],\n locationArg?: Partial | string\n): React.ReactElement | null {\n return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nexport function useRoutesImpl(\n routes: RouteObject[],\n locationArg?: Partial | string,\n dataRouterState?: RemixRouter[\"state\"],\n future?: RemixRouter[\"future\"]\n): React.ReactElement | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useRoutes() may be used only in the context of a component.`\n );\n\n let { navigator } = React.useContext(NavigationContext);\n let { matches: parentMatches } = React.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n\n if (__DEV__) {\n // You won't get a warning about 2 different under a \n // without a trailing *, but this is a best-effort warning anyway since we\n // cannot even give the warning unless they land at the parent route.\n //\n // Example:\n //\n // \n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // } />\n // } />\n // \n //\n // function Blog() {\n // return (\n // \n // } />\n // \n // );\n // }\n let parentPath = (parentRoute && parentRoute.path) || \"\";\n warningOnce(\n parentPathname,\n !parentRoute || parentPath.endsWith(\"*\"),\n `You rendered descendant (or called \\`useRoutes()\\`) at ` +\n `\"${parentPathname}\" (under ) but the ` +\n `parent route path has no trailing \"*\". This means if you navigate ` +\n `deeper, the parent won't match anymore and therefore the child ` +\n `routes will never render.\\n\\n` +\n `Please change the parent to .`\n );\n }\n\n let locationFromContext = useLocation();\n\n let location;\n if (locationArg) {\n let parsedLocationArg =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n invariant(\n parentPathnameBase === \"/\" ||\n parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n `When overriding the location using \\`\\` or \\`useRoutes(routes, location)\\`, ` +\n `the location pathname must begin with the portion of the URL pathname that was ` +\n `matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" ` +\n `but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n );\n\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n\n let pathname = location.pathname || \"/\";\n\n let remainingPathname = pathname;\n if (parentPathnameBase !== \"/\") {\n // Determine the remaining pathname by removing the # of URL segments the\n // parentPathnameBase has, instead of removing based on character count.\n // This is because we can't guarantee that incoming/outgoing encodings/\n // decodings will match exactly.\n // We decode paths before matching on a per-segment basis with\n // decodeURIComponent(), but we re-encode pathnames via `new URL()` so they\n // match what `window.location.pathname` would reflect. Those don't 100%\n // align when it comes to encoded URI characters such as % and &.\n //\n // So we may end up with:\n // pathname: \"/descendant/a%25b/match\"\n // parentPathnameBase: \"/descendant/a%b\"\n //\n // And the direct substring removal approach won't work :/\n let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n }\n\n let matches = matchRoutes(routes, { pathname: remainingPathname });\n\n if (__DEV__) {\n warning(\n parentRoute || matches != null,\n `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n );\n\n warning(\n matches == null ||\n matches[matches.length - 1].route.element !== undefined ||\n matches[matches.length - 1].route.Component !== undefined ||\n matches[matches.length - 1].route.lazy !== undefined,\n `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" ` +\n `does not have an element or Component. This means it will render an with a ` +\n `null value by default resulting in an \"empty\" page.`\n );\n }\n\n let renderedMatches = _renderMatches(\n matches &&\n matches.map((match) =>\n Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathname).pathname\n : match.pathname,\n ]),\n pathnameBase:\n match.pathnameBase === \"/\"\n ? parentPathnameBase\n : joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathnameBase).pathname\n : match.pathnameBase,\n ]),\n })\n ),\n parentMatches,\n dataRouterState,\n future\n );\n\n // When a user passes in a `locationArg`, the associated routes need to\n // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n // to use the scoped location instead of the global location.\n if (locationArg && renderedMatches) {\n return (\n \n {renderedMatches}\n \n );\n }\n\n return renderedMatches;\n}\n\nfunction DefaultErrorComponent() {\n let error = useRouteError();\n let message = isRouteErrorResponse(error)\n ? `${error.status} ${error.statusText}`\n : error instanceof Error\n ? error.message\n : JSON.stringify(error);\n let stack = error instanceof Error ? error.stack : null;\n let lightgrey = \"rgba(200,200,200, 0.5)\";\n let preStyles = { padding: \"0.5rem\", backgroundColor: lightgrey };\n let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n\n let devInfo = null;\n if (__DEV__) {\n console.error(\n \"Error handled by React Router default ErrorBoundary:\",\n error\n );\n\n devInfo = (\n <>\n

    💿 Hey developer 👋

    \n

    \n You can provide a way better UX than this when your app throws errors\n by providing your own ErrorBoundary or{\" \"}\n errorElement prop on your route.\n

    \n \n );\n }\n\n return (\n <>\n

    Unexpected Application Error!

    \n

    {message}

    \n {stack ?
    {stack}
    : null}\n {devInfo}\n \n );\n}\n\nconst defaultErrorElement = ;\n\ntype RenderErrorBoundaryProps = React.PropsWithChildren<{\n location: Location;\n revalidation: RevalidationState;\n error: any;\n component: React.ReactNode;\n routeContext: RouteContextObject;\n}>;\n\ntype RenderErrorBoundaryState = {\n location: Location;\n revalidation: RevalidationState;\n error: any;\n};\n\nexport class RenderErrorBoundary extends React.Component<\n RenderErrorBoundaryProps,\n RenderErrorBoundaryState\n> {\n constructor(props: RenderErrorBoundaryProps) {\n super(props);\n this.state = {\n location: props.location,\n revalidation: props.revalidation,\n error: props.error,\n };\n }\n\n static getDerivedStateFromError(error: any) {\n return { error: error };\n }\n\n static getDerivedStateFromProps(\n props: RenderErrorBoundaryProps,\n state: RenderErrorBoundaryState\n ) {\n // When we get into an error state, the user will likely click \"back\" to the\n // previous page that didn't have an error. Because this wraps the entire\n // application, that will have no effect--the error page continues to display.\n // This gives us a mechanism to recover from the error when the location changes.\n //\n // Whether we're in an error state or not, we update the location in state\n // so that when we are in an error state, it gets reset when a new location\n // comes in and the user recovers from the error.\n if (\n state.location !== props.location ||\n (state.revalidation !== \"idle\" && props.revalidation === \"idle\")\n ) {\n return {\n error: props.error,\n location: props.location,\n revalidation: props.revalidation,\n };\n }\n\n // If we're not changing locations, preserve the location but still surface\n // any new errors that may come through. We retain the existing error, we do\n // this because the error provided from the app state may be cleared without\n // the location changing.\n return {\n error: props.error !== undefined ? props.error : state.error,\n location: state.location,\n revalidation: props.revalidation || state.revalidation,\n };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error(\n \"React Router caught the following error during render\",\n error,\n errorInfo\n );\n }\n\n render() {\n return this.state.error !== undefined ? (\n \n \n \n ) : (\n this.props.children\n );\n }\n}\n\ninterface RenderedRouteProps {\n routeContext: RouteContextObject;\n match: RouteMatch;\n children: React.ReactNode | null;\n}\n\nfunction RenderedRoute({ routeContext, match, children }: RenderedRouteProps) {\n let dataRouterContext = React.useContext(DataRouterContext);\n\n // Track how deep we got in our render pass to emulate SSR componentDidCatch\n // in a DataStaticRouter\n if (\n dataRouterContext &&\n dataRouterContext.static &&\n dataRouterContext.staticContext &&\n (match.route.errorElement || match.route.ErrorBoundary)\n ) {\n dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n }\n\n return (\n \n {children}\n \n );\n}\n\nexport function _renderMatches(\n matches: RouteMatch[] | null,\n parentMatches: RouteMatch[] = [],\n dataRouterState: RemixRouter[\"state\"] | null = null,\n future: RemixRouter[\"future\"] | null = null\n): React.ReactElement | null {\n if (matches == null) {\n if (!dataRouterState) {\n return null;\n }\n\n if (dataRouterState.errors) {\n // Don't bail if we have data router errors so we can render them in the\n // boundary. Use the pre-matched (or shimmed) matches\n matches = dataRouterState.matches as DataRouteMatch[];\n } else if (\n future?.v7_partialHydration &&\n parentMatches.length === 0 &&\n !dataRouterState.initialized &&\n dataRouterState.matches.length > 0\n ) {\n // Don't bail if we're initializing with partial hydration and we have\n // router matches. That means we're actively running `patchRoutesOnNavigation`\n // so we should render down the partial matches to the appropriate\n // `HydrateFallback`. We only do this if `parentMatches` is empty so it\n // only impacts the root matches for `RouterProvider` and no descendant\n // ``\n matches = dataRouterState.matches as DataRouteMatch[];\n } else {\n return null;\n }\n }\n\n let renderedMatches = matches;\n\n // If we have data errors, trim matches to the highest error boundary\n let errors = dataRouterState?.errors;\n if (errors != null) {\n let errorIndex = renderedMatches.findIndex(\n (m) => m.route.id && errors?.[m.route.id] !== undefined\n );\n invariant(\n errorIndex >= 0,\n `Could not find a matching route for errors on route IDs: ${Object.keys(\n errors\n ).join(\",\")}`\n );\n renderedMatches = renderedMatches.slice(\n 0,\n Math.min(renderedMatches.length, errorIndex + 1)\n );\n }\n\n // If we're in a partial hydration mode, detect if we need to render down to\n // a given HydrateFallback while we load the rest of the hydration data\n let renderFallback = false;\n let fallbackIndex = -1;\n if (dataRouterState && future && future.v7_partialHydration) {\n for (let i = 0; i < renderedMatches.length; i++) {\n let match = renderedMatches[i];\n // Track the deepest fallback up until the first route without data\n if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n fallbackIndex = i;\n }\n\n if (match.route.id) {\n let { loaderData, errors } = dataRouterState;\n let needsToRunLoader =\n match.route.loader &&\n loaderData[match.route.id] === undefined &&\n (!errors || errors[match.route.id] === undefined);\n if (match.route.lazy || needsToRunLoader) {\n // We found the first route that's not ready to render (waiting on\n // lazy, or has a loader that hasn't run yet). Flag that we need to\n // render a fallback and render up until the appropriate fallback\n renderFallback = true;\n if (fallbackIndex >= 0) {\n renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n } else {\n renderedMatches = [renderedMatches[0]];\n }\n break;\n }\n }\n }\n }\n\n return renderedMatches.reduceRight((outlet, match, index) => {\n // Only data routers handle errors/fallbacks\n let error: any;\n let shouldRenderHydrateFallback = false;\n let errorElement: React.ReactNode | null = null;\n let hydrateFallbackElement: React.ReactNode | null = null;\n if (dataRouterState) {\n error = errors && match.route.id ? errors[match.route.id] : undefined;\n errorElement = match.route.errorElement || defaultErrorElement;\n\n if (renderFallback) {\n if (fallbackIndex < 0 && index === 0) {\n warningOnce(\n \"route-fallback\",\n false,\n \"No `HydrateFallback` element provided to render during initial hydration\"\n );\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = null;\n } else if (fallbackIndex === index) {\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n }\n }\n }\n\n let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n let getChildren = () => {\n let children: React.ReactNode;\n if (error) {\n children = errorElement;\n } else if (shouldRenderHydrateFallback) {\n children = hydrateFallbackElement;\n } else if (match.route.Component) {\n // Note: This is a de-optimized path since React won't re-use the\n // ReactElement since it's identity changes with each new\n // React.createElement call. We keep this so folks can use\n // `` in `` but generally `Component`\n // usage is only advised in `RouterProvider` when we can convert it to\n // `element` ahead of time.\n children = ;\n } else if (match.route.element) {\n children = match.route.element;\n } else {\n children = outlet;\n }\n return (\n \n );\n };\n // Only wrap in an error boundary within data router usages when we have an\n // ErrorBoundary/errorElement on this route. Otherwise let it bubble up to\n // an ancestor ErrorBoundary/errorElement\n return dataRouterState &&\n (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? (\n \n ) : (\n getChildren()\n );\n }, null as React.ReactElement | null);\n}\n\nenum DataRouterHook {\n UseBlocker = \"useBlocker\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n}\n\nenum DataRouterStateHook {\n UseBlocker = \"useBlocker\",\n UseLoaderData = \"useLoaderData\",\n UseActionData = \"useActionData\",\n UseRouteError = \"useRouteError\",\n UseNavigation = \"useNavigation\",\n UseRouteLoaderData = \"useRouteLoaderData\",\n UseMatches = \"useMatches\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n UseRouteId = \"useRouteId\",\n}\n\nfunction getDataRouterConsoleError(\n hookName: DataRouterHook | DataRouterStateHook\n) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/v6/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n let ctx = React.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError(hookName));\n return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n let state = React.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError(hookName));\n return state;\n}\n\nfunction useRouteContext(hookName: DataRouterStateHook) {\n let route = React.useContext(RouteContext);\n invariant(route, getDataRouterConsoleError(hookName));\n return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName: DataRouterStateHook) {\n let route = useRouteContext(hookName);\n let thisRoute = route.matches[route.matches.length - 1];\n invariant(\n thisRoute.route.id,\n `${hookName} can only be used on routes that contain a unique \"id\"`\n );\n return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nexport function useRouteId() {\n return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nexport function useNavigation() {\n let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nexport function useRevalidator() {\n let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n return React.useMemo(\n () => ({\n revalidate: dataRouterContext.router.revalidate,\n state: state.revalidation,\n }),\n [dataRouterContext.router.revalidate, state.revalidation]\n );\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nexport function useMatches(): UIMatch[] {\n let { matches, loaderData } = useDataRouterState(\n DataRouterStateHook.UseMatches\n );\n return React.useMemo(\n () => matches.map((m) => convertRouteMatchToUiMatch(m, loaderData)),\n [matches, loaderData]\n );\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nexport function useLoaderData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n\n if (state.errors && state.errors[routeId] != null) {\n console.error(\n `You cannot \\`useLoaderData\\` in an errorElement (routeId: ${routeId})`\n );\n return undefined;\n }\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nexport function useRouteLoaderData(routeId: string): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nexport function useActionData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseActionData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n return state.actionData ? state.actionData[routeId] : undefined;\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error. This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nexport function useRouteError(): unknown {\n let error = React.useContext(RouteErrorContext);\n let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n // If this was a render error, we put it in a RouteError context inside\n // of RenderErrorBoundary\n if (error !== undefined) {\n return error;\n }\n\n // Otherwise look for errors from our data router state\n return state.errors?.[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `` value\n */\nexport function useAsyncValue(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `` value\n */\nexport function useAsyncError(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._error;\n}\n\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation. Mostly used to avoid\n * using half-filled form data. This does not handle hard-reloads or\n * cross-origin navigations.\n */\nexport function useBlocker(shouldBlock: boolean | BlockerFunction): Blocker {\n let { router, basename } = useDataRouterContext(DataRouterHook.UseBlocker);\n let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n\n let [blockerKey, setBlockerKey] = React.useState(\"\");\n let blockerFunction = React.useCallback(\n (arg) => {\n if (typeof shouldBlock !== \"function\") {\n return !!shouldBlock;\n }\n if (basename === \"/\") {\n return shouldBlock(arg);\n }\n\n // If they provided us a function and we've got an active basename, strip\n // it from the locations we expose to the user to match the behavior of\n // useLocation\n let { currentLocation, nextLocation, historyAction } = arg;\n return shouldBlock({\n currentLocation: {\n ...currentLocation,\n pathname:\n stripBasename(currentLocation.pathname, basename) ||\n currentLocation.pathname,\n },\n nextLocation: {\n ...nextLocation,\n pathname:\n stripBasename(nextLocation.pathname, basename) ||\n nextLocation.pathname,\n },\n historyAction,\n });\n },\n [basename, shouldBlock]\n );\n\n // This effect is in charge of blocker key assignment and deletion (which is\n // tightly coupled to the key)\n React.useEffect(() => {\n let key = String(++blockerId);\n setBlockerKey(key);\n return () => router.deleteBlocker(key);\n }, [router]);\n\n // This effect handles assigning the blockerFunction. This is to handle\n // unstable blocker function identities, and happens only after the prior\n // effect so we don't get an orphaned blockerFunction in the router with a\n // key of \"\". Until then we just have the IDLE_BLOCKER.\n React.useEffect(() => {\n if (blockerKey !== \"\") {\n router.getBlocker(blockerKey, blockerFunction);\n }\n }, [router, blockerKey, blockerFunction]);\n\n // Prefer the blocker from `state` not `router.state` since DataRouterContext\n // is memoized so this ensures we update on blocker state updates\n return blockerKey && state.blockers.has(blockerKey)\n ? state.blockers.get(blockerKey)!\n : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable(): NavigateFunction {\n let { router } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our router subscriber yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n router.navigate(to);\n } else {\n router.navigate(to, { fromRouteId: id, ...options });\n }\n },\n [router, id]\n );\n\n return navigate;\n}\n\nconst alreadyWarned: Record = {};\n\nfunction warningOnce(key: string, cond: boolean, message: string) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n warning(false, message);\n }\n}\n","import type { FutureConfig as RouterFutureConfig } from \"@remix-run/router\";\nimport type { FutureConfig as RenderFutureConfig } from \"./components\";\n\nconst alreadyWarned: { [key: string]: boolean } = {};\n\nexport function warnOnce(key: string, message: string): void {\n if (!alreadyWarned[message]) {\n alreadyWarned[message] = true;\n console.warn(message);\n }\n}\n\nconst logDeprecation = (flag: string, msg: string, link: string) =>\n warnOnce(\n flag,\n `⚠️ React Router Future Flag Warning: ${msg}. ` +\n `You can use the \\`${flag}\\` future flag to opt-in early. ` +\n `For more information, see ${link}.`\n );\n\nexport function logV6DeprecationWarnings(\n renderFuture: Partial | undefined,\n routerFuture?: Omit\n) {\n if (renderFuture?.v7_startTransition === undefined) {\n logDeprecation(\n \"v7_startTransition\",\n \"React Router will begin wrapping state updates in `React.startTransition` in v7\",\n \"https://reactrouter.com/v6/upgrading/future#v7_starttransition\"\n );\n }\n\n if (\n renderFuture?.v7_relativeSplatPath === undefined &&\n (!routerFuture || !routerFuture.v7_relativeSplatPath)\n ) {\n logDeprecation(\n \"v7_relativeSplatPath\",\n \"Relative route resolution within Splat routes is changing in v7\",\n \"https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath\"\n );\n }\n\n if (routerFuture) {\n if (routerFuture.v7_fetcherPersist === undefined) {\n logDeprecation(\n \"v7_fetcherPersist\",\n \"The persistence behavior of fetchers is changing in v7\",\n \"https://reactrouter.com/v6/upgrading/future#v7_fetcherpersist\"\n );\n }\n\n if (routerFuture.v7_normalizeFormMethod === undefined) {\n logDeprecation(\n \"v7_normalizeFormMethod\",\n \"Casing of `formMethod` fields is being normalized to uppercase in v7\",\n \"https://reactrouter.com/v6/upgrading/future#v7_normalizeformmethod\"\n );\n }\n\n if (routerFuture.v7_partialHydration === undefined) {\n logDeprecation(\n \"v7_partialHydration\",\n \"`RouterProvider` hydration behavior is changing in v7\",\n \"https://reactrouter.com/v6/upgrading/future#v7_partialhydration\"\n );\n }\n\n if (routerFuture.v7_skipActionErrorRevalidation === undefined) {\n logDeprecation(\n \"v7_skipActionErrorRevalidation\",\n \"The revalidation behavior after 4xx/5xx `action` responses is changing in v7\",\n \"https://reactrouter.com/v6/upgrading/future#v7_skipactionerrorrevalidation\"\n );\n }\n }\n}\n","import type {\n InitialEntry,\n LazyRouteFunction,\n Location,\n MemoryHistory,\n RelativeRoutingType,\n Router as RemixRouter,\n RouterState,\n RouterSubscriber,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\nimport {\n AbortedDeferredError,\n Action as NavigationType,\n createMemoryHistory,\n UNSAFE_getResolveToMatches as getResolveToMatches,\n UNSAFE_invariant as invariant,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\nimport * as React from \"react\";\n\nimport type {\n DataRouteObject,\n IndexRouteObject,\n Navigator,\n NonIndexRouteObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n} from \"./context\";\nimport {\n _renderMatches,\n useAsyncValue,\n useInRouterContext,\n useLocation,\n useNavigate,\n useOutlet,\n useRoutes,\n useRoutesImpl,\n} from \"./hooks\";\nimport { logV6DeprecationWarnings } from \"./deprecations\";\n\nexport interface FutureConfig {\n v7_relativeSplatPath: boolean;\n v7_startTransition: boolean;\n}\n\nexport interface RouterProviderProps {\n fallbackElement?: React.ReactNode;\n router: RemixRouter;\n // Only accept future flags relevant to rendering behavior\n // routing flags should be accessed via router.future\n future?: Partial>;\n}\n\n/**\n Webpack + React 17 fails to compile on any of the following because webpack\n complains that `startTransition` doesn't exist in `React`:\n * import { startTransition } from \"react\"\n * import * as React from from \"react\";\n \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n * import * as React from from \"react\";\n \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n Moving it to a constant such as the following solves the Webpack/React 17 issue:\n * import * as React from from \"react\";\n const START_TRANSITION = \"startTransition\";\n START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n However, that introduces webpack/terser minification issues in production builds\n in React 18 where minification/obfuscation ends up removing the call of\n React.startTransition entirely from the first half of the ternary. Grabbing\n this exported reference once up front resolves that issue.\n\n See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n fallbackElement,\n router,\n future,\n}: RouterProviderProps): React.ReactElement {\n let [state, setStateImpl] = React.useState(router.state);\n let { v7_startTransition } = future || {};\n\n let setState = React.useCallback(\n (newState: RouterState) => {\n if (v7_startTransition && startTransitionImpl) {\n startTransitionImpl(() => setStateImpl(newState));\n } else {\n setStateImpl(newState);\n }\n },\n [setStateImpl, v7_startTransition]\n );\n\n // Need to use a layout effect here so we are subscribed early enough to\n // pick up on any render-driven redirects/navigations (useEffect/)\n React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n\n React.useEffect(() => {\n warning(\n fallbackElement == null || !router.future.v7_partialHydration,\n \"`` is deprecated when using \" +\n \"`v7_partialHydration`, use a `HydrateFallback` component instead\"\n );\n // Only log this once on initial mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n let navigator = React.useMemo((): Navigator => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: (n) => router.navigate(n),\n push: (to, state, opts) =>\n router.navigate(to, {\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n replace: (to, state, opts) =>\n router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n };\n }, [router]);\n\n let basename = router.basename || \"/\";\n\n let dataRouterContext = React.useMemo(\n () => ({\n router,\n navigator,\n static: false,\n basename,\n }),\n [router, navigator, basename]\n );\n\n React.useEffect(\n () => logV6DeprecationWarnings(future, router.future),\n [router, future]\n );\n\n // The fragment and {null} here are important! We need them to keep React 18's\n // useId happy when we are server-rendering since we may have a