@antv/s2-vue 2.2.0-alpha.3 → 2.2.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"s2-vue.min.js","sources":["../src/utils/extendLocale.ts","../src/common-extra/constants/theme.ts","../src/components/tooltip/components/description.vue","../src/components/tooltip/components/detail.vue","../src/components/tooltip/components/head-info.vue","../src/components/tooltip/components/infos.vue","../src/components/tooltip/components/icon.vue","../src/components/tooltip/components/interpretation.vue","../src/components/tooltip/components/simple-tips.vue","../src/components/tooltip/components/summary.vue","../src/components/tooltip/components/operator/title.vue","../src/components/tooltip/components/operator/menu.vue","../src/components/tooltip/components/operator/index.vue","../src/components/tooltip/index.vue","../src/components/tooltip/custom-tooltip.ts","../src/hooks/usePagination.ts","../src/components/pagination/index.vue","../src/context/SpreadSheetContext.ts","../src/common/constant/options.ts","../src/utils/options.ts","../src/hooks/useEvents.ts","../src/hooks/useLoading.ts","../src/hooks/useResize.ts","../src/hooks/useSheetUpdate.ts","../src/hooks/useSpreadSheet.ts","../src/utils/initPropAndEmits.ts","../src/components/sheets/base-sheet.vue","../src/hooks/useExpose.ts","../src/components/sheets/chart-sheet.vue","../src/components/sheets/grid-analysis-sheet/custom-cell.ts","../src/components/sheets/grid-analysis-sheet/theme.ts","../src/components/sheets/grid-analysis-sheet/index.vue","../src/components/sheets/pivot-chart-sheet.vue","../src/icons/location-icon.vue","../src/icons/text-icon.vue","../src/icons/calendar-icon.vue","../src/components/drill-down/index.vue","../src/components/sheets/pivot-sheet.vue","../src/components/sheets/strategy-sheet/custom-col-cell.ts","../src/components/sheets/strategy-sheet/custom-data-cell.ts","../src/components/sheets/strategy-sheet/custom-data-set.ts","../src/components/sheets/strategy-sheet/index.vue","../src/components/sheets/table-sheet.vue","../src/components/sheets/editable-sheet/drag-copy/DragCopyMask.vue","../src/components/sheets/editable-sheet/drag-copy/DragCopyPoint.vue","../src/components/sheets/editable-sheet.vue","../src/components/sheets/index.vue","../src/components/sheets/strategy-sheet/custom-tooltip/col-cell-tooltip.vue","../src/components/sheets/strategy-sheet/custom-tooltip/data-cell-tooltip.vue","../src/components/sheets/strategy-sheet/custom-tooltip/row-cell-tooltip.vue","../src/components-extra/advanced-sort/CustomSort.vue","../src/components-extra/advanced-sort/AdvancedSort.vue","../src/components-extra/common/radio-group/RadioGroup.vue","../src/components-extra/common/reset-button/ResetButton.vue","../src/components-extra/common/reset-group/ResetGroup.vue","../src/components-extra/common/tooltip-wrapper/TooltipWrapper.vue","../src/components-extra/common/icons/index.ts","../src/components-extra/drill-down/DrillDown.vue","../src/components-extra/export/Export.vue","../src/components-extra/export/StrategyExport.vue","../src/components-extra/frozen-panel/FrozenInputNumber.vue","../src/components-extra/frozen-panel/FrozenPanel.vue","../src/components-extra/switcher/constant.ts","../src/components-extra/switcher/util.ts","../../../node_modules/.pnpm/sortablejs@1.15.6/node_modules/sortablejs/modular/sortable.esm.js","../src/components-extra/switcher/item/SingleItem.vue","../src/components-extra/switcher/item/DimensionItem.vue","../src/components-extra/switcher/dimension/Dimension.vue","../src/components-extra/switcher/SwitcherContent.vue","../src/components-extra/switcher/Switcher.vue","../src/components-extra/text-align-panel/icons.ts","../src/components-extra/text-align-panel/utils.ts","../src/components-extra/text-align-panel/TextAlignPanel.vue","../src/components-extra/theme-panel/ColorBox.vue","../src/components-extra/theme-panel/icons.ts","../../../node_modules/.pnpm/tinycolor2@1.6.0/node_modules/tinycolor2/esm/tinycolor.js","../../../node_modules/.pnpm/tinycolor2@1.6.0/node_modules/tinycolor2/cjs/tinycolor.js","../../../node_modules/.pnpm/tinygradient@1.1.5/node_modules/tinygradient/index.js","../src/components-extra/theme-panel/utils.ts","../src/components-extra/theme-panel/ThemePanel.vue","../src/index.ts"],"sourcesContent":["import { Locale, extendLocale } from '@antv/s2';\n\nextendLocale(Locale);\n","import { S2_PREFIX_CLS } from '@antv/s2';\n\n/** 默认色板 */\nexport const DEFAULT_THEME_COLOR_LIST = [\n '#5B8FF9',\n '#BDD2FD',\n '#F6903D',\n '#FFD8B8',\n '#F08BB4',\n '#FFD6E7',\n];\n\n/**\n * 当 sheetThemeColorType=自选色 且 sheetThemeType=basic 时\n * 需要自定义色板取色规则\n */\nexport const BASIC_SHEET_THEME_TYPE_COLOR_RELATIONS = [\n { basicColorIndex: 2, standardColorIndex: 1 },\n { basicColorIndex: 4, standardColorIndex: 1 },\n { basicColorIndex: 5, standardColorIndex: 2 },\n { basicColorIndex: 6, standardColorIndex: 6 },\n { basicColorIndex: 7, standardColorIndex: 5 },\n { basicColorIndex: 9, standardColorIndex: 1 },\n { basicColorIndex: 10, standardColorIndex: 1 },\n { basicColorIndex: 11, standardColorIndex: 4 },\n { basicColorIndex: 12, standardColorIndex: 4 },\n];\n\n// 浅色主题映射关系\nexport const SECONDARY_THEME_COLOR_TYPE_RELATIONS = [\n { basicColorIndex: 1, standardColorIndex: 2 },\n { basicColorIndex: 2, standardColorIndex: 4 },\n { basicColorIndex: 3, standardColorIndex: 5 },\n { basicColorIndex: 4, standardColorIndex: 6 },\n { basicColorIndex: 5, standardColorIndex: 6 },\n { basicColorIndex: 6, standardColorIndex: 6 },\n { basicColorIndex: 7, standardColorIndex: 5 },\n { basicColorIndex: 9, standardColorIndex: 6 },\n { basicColorIndex: 10, standardColorIndex: 6 },\n { basicColorIndex: 11, standardColorIndex: 6 },\n { basicColorIndex: 12, standardColorIndex: 6 },\n];\n\nexport const HISTORY_COLOR_LIST_STORAGE_KEY = `${S2_PREFIX_CLS.toUpperCase()}_HISTORY_COLOR_LIST_STORAGE_KEY`;\n\nexport const HISTORY_COLOR_LIST_MAX_COUNT = 6;\n\n/**\n * 主题色系类型\n */\nexport enum SheetThemeColorType {\n /** 深色主题(默认取值) */\n PRIMARY = 'primary',\n /** 浅色主题 */\n SECONDARY = 'secondary',\n /** 灰色 */\n GRAY = 'gray',\n /** 自定义 */\n CUSTOM = 'custom',\n}\n\n/**\n * 主题类型\n */\nexport enum SheetThemeType {\n /** 默认 (使用 S2 默认主题) */\n DEFAULT = 'default',\n /** 多彩 */\n COLORFUL = 'colorful',\n /** 简约 */\n NORMAL = 'normal',\n /** 极简 */\n BASIC = 'basic',\n /** 斑马纹 */\n ZEBRA = 'zebra',\n}\n","<script lang=\"ts\">\nimport { i18n, TOOLTIP_PREFIX_CLS } from '@antv/s2';\nimport { defineComponent, type PropType } from 'vue';\n\nexport default defineComponent({\n name: 'TooltipDescription',\n props: {\n description: {\n type: [String, Object] as PropType<string | unknown>,\n default: undefined,\n },\n },\n setup() {\n return {\n TOOLTIP_PREFIX_CLS,\n i18n,\n };\n },\n});\n</script>\n\n<template>\n <div v-if=\"description\" :class=\"`${TOOLTIP_PREFIX_CLS}-description`\">\n {{ i18n('说明') }}{{ description }}\n </div>\n</template>\n\n<style lang=\"less\"></style>\n","<script lang=\"ts\">\nimport { type TooltipDetailProps, TOOLTIP_PREFIX_CLS } from '@antv/s2';\nimport { defineComponent } from 'vue';\nimport type { GetInitProps } from '../../../interface';\n\nexport default defineComponent({\n name: 'TooltipDetail',\n props: ['list'] as unknown as GetInitProps<TooltipDetailProps>,\n setup() {\n return {\n TOOLTIP_PREFIX_CLS,\n };\n },\n});\n</script>\n\n<template>\n <div\n v-for=\"(item, index) in list\"\n :key=\"`${item.value}-${index}`\"\n :class=\"`${TOOLTIP_PREFIX_CLS}-detail-list`\"\n >\n <div :class=\"`${TOOLTIP_PREFIX_CLS}-detail-item`\">\n <span :class=\"`${TOOLTIP_PREFIX_CLS}-detail-item-key`\">\n {{ item.name }}\n </span>\n <span\n :class=\"`${TOOLTIP_PREFIX_CLS}-detail-item-val ${TOOLTIP_PREFIX_CLS}-highlight`\"\n >\n {{ item.value }}\n </span>\n </div>\n </div>\n</template>\n\n<style lang=\"less\"></style>\n","<script lang=\"ts\">\nimport { type TooltipHeadInfo, TOOLTIP_PREFIX_CLS, i18n } from '@antv/s2';\nimport { computed, defineComponent } from 'vue';\nimport type { GetInitProps } from '../../../interface';\n\nexport default defineComponent({\n name: 'TooltipHeadInfo',\n props: ['rows', 'cols'] as unknown as GetInitProps<TooltipHeadInfo>,\n setup(props) {\n const colsText = computed(() =>\n (props.cols || []).map((item) => item.value).join('/'),\n );\n const rowsText = computed(() =>\n (props.rows || []).map((item) => item.value).join('/'),\n );\n const separator = computed(() =>\n (props.cols?.length ?? 0) > 0 && (props.rows?.length ?? 0) > 0\n ? i18n(',')\n : '',\n );\n\n return {\n TOOLTIP_PREFIX_CLS,\n colsText,\n rowsText,\n separator,\n };\n },\n});\n</script>\n\n<template>\n <div\n v-if=\"cols?.length || rows?.length\"\n :class=\"`${TOOLTIP_PREFIX_CLS}-head-info-list`\"\n >\n {{ colsText }}{{ separator }}{{ rowsText }}\n </div>\n</template>\n\n<style lang=\"less\"></style>\n","<script lang=\"ts\">\nimport { TOOLTIP_PREFIX_CLS } from '@antv/s2';\nimport { defineComponent } from 'vue';\nimport type { GetInitProps } from '../../../interface';\nimport type { TooltipInfosProps } from '../interface';\n\nexport default defineComponent({\n name: 'TooltipInfos',\n props: ['infos'] as unknown as GetInitProps<TooltipInfosProps>,\n setup() {\n return {\n TOOLTIP_PREFIX_CLS,\n };\n },\n components: {},\n});\n</script>\n\n<template>\n <div :class=\"`${TOOLTIP_PREFIX_CLS}-infos`\">{{ infos }}</div>\n</template>\n\n<style lang=\"less\"></style>\n","<script lang=\"ts\">\nimport { getIcon, TOOLTIP_PREFIX_CLS } from '@antv/s2';\nimport { defineComponent, computed, type PropType } from 'vue';\n\nexport interface TooltipIconProps {\n icon?: string | unknown;\n width?: number;\n height?: number;\n}\n\nexport default defineComponent({\n name: 'TooltipIcon',\n props: {\n icon: {\n type: [String, Object] as PropType<string | unknown>,\n default: undefined,\n },\n width: {\n type: Number,\n default: undefined,\n },\n height: {\n type: Number,\n default: undefined,\n },\n },\n setup(props) {\n const svgIcon = computed(() => {\n if (typeof props.icon === 'string') {\n return getIcon(props.icon);\n }\n\n return null;\n });\n\n const iconStyle = computed(() => {\n const style: Record<string, string> = {};\n\n if (props.width) {\n style['width'] = `${props.width}px`;\n }\n\n if (props.height) {\n style['height'] = `${props.height}px`;\n }\n\n return style;\n });\n\n const isStringIcon = computed(() => {\n return typeof props.icon === 'string' && getIcon(props.icon);\n });\n\n return {\n svgIcon,\n iconStyle,\n isStringIcon,\n TOOLTIP_PREFIX_CLS,\n };\n },\n});\n</script>\n\n<template>\n <span\n v-if=\"isStringIcon\"\n :style=\"iconStyle\"\n :class=\"`${TOOLTIP_PREFIX_CLS}-icon`\"\n v-html=\"svgIcon\"\n />\n <component\n v-else-if=\"icon && typeof icon === 'object'\"\n :is=\"icon\"\n :style=\"iconStyle\"\n />\n</template>\n\n<style lang=\"less\"></style>\n","<script lang=\"ts\">\nimport {\n TOOLTIP_PREFIX_CLS,\n type TooltipInterpretationOptions,\n} from '@antv/s2';\nimport { defineComponent } from 'vue';\nimport type { GetInitProps } from '../../../interface';\nimport TooltipIcon from './icon.vue';\n\nexport default defineComponent({\n name: 'TooltipInterpretation',\n props: [\n 'name',\n 'icon',\n 'text',\n 'content',\n ] as unknown as GetInitProps<TooltipInterpretationOptions>,\n setup() {\n return {\n TOOLTIP_PREFIX_CLS,\n };\n },\n components: {\n TooltipIcon,\n },\n});\n</script>\n\n<template>\n <div :class=\"`${TOOLTIP_PREFIX_CLS}-interpretation`\">\n <div :class=\"`${TOOLTIP_PREFIX_CLS}-interpretation-head`\">\n <TooltipIcon\n :icon=\"icon\"\n :class=\"`${TOOLTIP_PREFIX_CLS}-interpretation-icon`\"\n />\n <span v-if=\"name\" :class=\"`${TOOLTIP_PREFIX_CLS}-interpretation-name`\">\n {{ name }}\n </span>\n </div>\n <div v-if=\"text\">{{ text }}</div>\n <slot v-if=\"content\" name=\"content\">\n <component v-if=\"typeof content === 'object'\" :is=\"content\" />\n <span v-else>{{ content }}</span>\n </slot>\n </div>\n</template>\n\n<style lang=\"less\"></style>\n","<script lang=\"ts\">\nimport { type TooltipNameTipsOptions, TOOLTIP_PREFIX_CLS } from '@antv/s2';\nimport { defineComponent } from 'vue';\nimport type { GetInitProps } from '../../../interface';\n\nexport default defineComponent({\n name: 'TooltipSimpleTips',\n props: ['name', 'tips'] as unknown as GetInitProps<TooltipNameTipsOptions>,\n setup() {\n return {\n TOOLTIP_PREFIX_CLS,\n };\n },\n components: {},\n});\n</script>\n\n<template>\n <div v-if=\"name\" :class=\"`${TOOLTIP_PREFIX_CLS}-name`\">{{ name }}</div>\n <div v-if=\"tips\" :class=\"`${TOOLTIP_PREFIX_CLS}-tips`\">{{ tips }}</div>\n</template>\n\n<style lang=\"less\"></style>\n","<script lang=\"ts\">\nimport { size, reduce } from 'lodash';\nimport {\n i18n,\n type TooltipSummaryProps,\n type TooltipSummaryOptions,\n TOOLTIP_PREFIX_CLS,\n} from '@antv/s2';\nimport { computed, defineComponent } from 'vue';\nimport type { GetInitProps } from '../../../interface';\n\nexport default defineComponent({\n name: 'TooltipSummary',\n props: ['summaries'] as unknown as GetInitProps<TooltipSummaryProps>,\n setup(props) {\n const summaryInfo = computed(() =>\n reduce(\n props.summaries,\n (pre, next) => {\n pre.count += size(next?.selectedData);\n if (next.value || next.name) {\n pre.summaries.push(next);\n }\n\n return pre;\n },\n { count: 0, summaries: [] } as {\n count: number;\n summaries: Array<TooltipSummaryOptions>;\n },\n ),\n );\n\n return {\n summaryInfo,\n i18n,\n TOOLTIP_PREFIX_CLS,\n };\n },\n components: {},\n});\n</script>\n\n<template>\n <div :class=\"`${TOOLTIP_PREFIX_CLS}-summary`\">\n <div :class=\"`${TOOLTIP_PREFIX_CLS}-summary-item`\">\n <span :class=\"`${TOOLTIP_PREFIX_CLS}-selected`\">\n {{ summaryInfo.count }} {{ i18n('项') }}\n </span>\n {{ i18n('已选择') }}\n </div>\n <div\n v-for=\"summary in summaryInfo.summaries\"\n :key=\"`${summary.name}-${summary.value}`\"\n :class=\"`${TOOLTIP_PREFIX_CLS}-summary-item`\"\n >\n <span :class=\"`${TOOLTIP_PREFIX_CLS}-summary-key`\">\n {{ summary.name }} ({{ i18n('总和') }})\n </span>\n <span\n :class=\"`${TOOLTIP_PREFIX_CLS}-summary-val ${TOOLTIP_PREFIX_CLS}-bold`\"\n >\n {{ summary.value }}\n </span>\n </div>\n </div>\n</template>\n\n<style lang=\"less\"></style>\n","<script lang=\"ts\">\nimport {\n type TooltipBaseOperatorMenuItem,\n TOOLTIP_PREFIX_CLS,\n getIcon,\n} from '@antv/s2';\nimport { computed, defineComponent } from 'vue';\nimport type { GetInitProps } from '../../../../interface';\n\nexport interface TooltipOperatorTitleProps {\n menu: TooltipBaseOperatorMenuItem;\n}\n\nexport default defineComponent({\n name: 'TooltipOperatorTitle',\n props: ['menu'] as unknown as GetInitProps<TooltipOperatorTitleProps>,\n setup(props) {\n const icon = computed(() => getIcon(props.menu.icon as string));\n\n return {\n TOOLTIP_PREFIX_CLS,\n icon,\n };\n },\n});\n</script>\n\n<template>\n <span>\n <span\n v-if=\"icon\"\n v-html=\"icon\"\n :class=\"`${TOOLTIP_PREFIX_CLS}-operator-icon`\"\n />\n <span :class=\"`${TOOLTIP_PREFIX_CLS}-operator-text`\">{{ menu.label }}</span>\n </span>\n</template>\n\n<style lang=\"less\"></style>\n","<script lang=\"ts\">\nimport {\n TOOLTIP_PREFIX_CLS,\n type TooltipOperatorMenuInfo,\n type S2CellType,\n type TooltipBaseOperatorMenuItem,\n} from '@antv/s2';\nimport { Menu } from 'ant-design-vue';\nimport { isEmpty } from 'lodash';\nimport { defineComponent } from 'vue';\nimport type { GetInitProps } from '../../../../interface';\nimport TooltipOperatorTitle from './title.vue';\n\nexport interface TooltipOperatorMenuProps {\n menu: TooltipBaseOperatorMenuItem;\n cell: S2CellType;\n}\n\nexport default defineComponent({\n name: 'TooltipOperatorMenu',\n props: ['menu', 'cell'] as unknown as GetInitProps<TooltipOperatorMenuProps>,\n setup(props) {\n const { menu, cell } = props;\n const onMenuTitleClick = () => {\n props.menu.onClick?.(menu as TooltipOperatorMenuInfo, cell);\n };\n\n return {\n onMenuTitleClick,\n isEmpty,\n TOOLTIP_PREFIX_CLS,\n };\n },\n components: {\n MenuItem: Menu.Item,\n SubMenu: Menu.SubMenu,\n TooltipOperatorTitle,\n },\n});\n</script>\n\n<template>\n <SubMenu\n v-if=\"!isEmpty(menu.children)\"\n :key=\"menu.key\"\n :popupClassName=\"`${TOOLTIP_PREFIX_CLS}-operator-submenu-popup`\"\n @titleClick=\"onMenuTitleClick\"\n >\n <template #title>\n <TooltipOperatorTitle :menu=\"menu\" @click=\"onMenuTitleClick\" />\n </template>\n <template v-for=\"subMenu in menu.children\" :key=\"subMenu.key\">\n <template v-if=\"subMenu?.children?.length\">\n <TooltipOperatorMenu :menu=\"subMenu\" :cell=\"cell\" />\n </template>\n <template v-else>\n <MenuItem :title=\"subMenu.label\" :key=\"subMenu.key\">\n <TooltipOperatorTitle :menu=\"subMenu\" @click=\"onMenuTitleClick\" />\n </MenuItem>\n </template>\n </template>\n </SubMenu>\n <!-- v-if/else branches must use unique keys. -->\n <MenuItem v-if=\"isEmpty(menu.children)\" :title=\"menu.label\" :key=\"menu.key\">\n <TooltipOperatorTitle :menu=\"menu\" @click=\"onMenuTitleClick\" />\n </MenuItem>\n</template>\n\n<style lang=\"less\"></style>\n","<script lang=\"ts\">\nimport {\n type TooltipOperatorMenuInfo,\n type TooltipBaseOperatorMenuItem,\n TOOLTIP_PREFIX_CLS,\n TooltipOperatorProps as BaseTooltipOperatorProps,\n} from '@antv/s2';\nimport { Menu, Dropdown, type MenuProps } from 'ant-design-vue';\nimport { defineComponent } from 'vue';\nimport type { MenuClickEventHandler } from 'ant-design-vue/es/menu/src/interface';\nimport type { GetInitProps } from '../../../../interface';\nimport TooltipOperatorTitle from './title.vue';\nimport TooltipOperatorMenu from './menu.vue';\n\nexport interface TooltipOperatorProps extends BaseTooltipOperatorProps {\n onClick?: MenuProps['onClick'];\n}\n\nexport default defineComponent({\n name: 'TooltipOperator',\n props: [\n 'menu',\n 'onlyShowOperator',\n 'cell',\n ] as unknown as GetInitProps<TooltipOperatorProps>,\n setup(props) {\n const { menu, cell } = props;\n const onMenuClick: MenuClickEventHandler = (menuInfo) => {\n menu?.onClick?.(menuInfo as unknown as TooltipOperatorMenuInfo, cell);\n };\n\n const onMenuTitleClick = (subMenu: TooltipBaseOperatorMenuItem) => () => {\n subMenu?.onClick(subMenu as TooltipOperatorMenuInfo, cell);\n };\n\n return {\n TOOLTIP_PREFIX_CLS,\n onMenuClick,\n onMenuTitleClick,\n menus: menu?.items,\n };\n },\n components: {\n Menu,\n Dropdown,\n TooltipOperatorTitle,\n TooltipOperatorMenu,\n },\n});\n</script>\n\n<template>\n <div :class=\"`${TOOLTIP_PREFIX_CLS}-operator`\">\n <template v-if=\"onlyShowOperator\">\n <Menu\n :class=\"`${TOOLTIP_PREFIX_CLS}-operator-menus`\"\n @click=\"onMenuClick\"\n >\n <template v-for=\"menu in menus\" :key=\"menu.key\">\n <TooltipOperatorMenu :menu=\"menu\" :cell=\"cell\" />\n </template>\n </Menu>\n </template>\n <template v-else>\n <template v-for=\"menu in menus\" :key=\"menu.key\">\n <Dropdown :class=\"`${TOOLTIP_PREFIX_CLS}-operator-dropdown`\">\n <TooltipOperatorTitle :menu=\"menu\" @click=\"onMenuTitleClick(menu)\" />\n <template #overlay>\n <Menu\n :class=\"`${TOOLTIP_PREFIX_CLS}-operator-menus`\"\n @click=\"onMenuClick\"\n v-if=\"menu?.children?.length\"\n >\n <template v-for=\"menu in menus\" :key=\"menu.key\">\n <TooltipOperatorMenu :menu=\"menu\" :cell=\"cell\" />\n </template>\n </Menu>\n </template>\n </Dropdown>\n </template>\n </template>\n </div>\n</template>\n\n<style lang=\"less\">\n@import '@antv/s2/esm/shared/styles/tooltip/operator.less';\n</style>\n","<script lang=\"ts\">\nimport { getTooltipDefaultOptions } from '@antv/s2';\nimport { defineComponent } from 'vue';\nimport type { GetInitProps } from '../../interface';\nimport TooltipDescription from './components/description.vue';\nimport TooltipDetail from './components/detail.vue';\nimport TooltipHeadInfo from './components/head-info.vue';\nimport TooltipInfos from './components/infos.vue';\nimport TooltipInterpretation from './components/interpretation.vue';\nimport TooltipSimpleTips from './components/simple-tips.vue';\nimport TooltipSummary from './components/summary.vue';\nimport { TooltipOperator } from './components/operator';\nimport type { TooltipRenderProps } from './interface';\n\nexport default defineComponent({\n name: 'TooltipComponent',\n props: [\n 'data',\n 'options',\n 'cell',\n 'position',\n 'event',\n 'content',\n ] as unknown as GetInitProps<TooltipRenderProps>,\n setup(props) {\n const { operator, onlyShowOperator } = getTooltipDefaultOptions(\n props.options,\n );\n\n return {\n operator,\n onlyShowOperator,\n };\n },\n components: {\n TooltipDescription,\n TooltipDetail,\n TooltipHeadInfo,\n TooltipInfos,\n TooltipInterpretation,\n TooltipSimpleTips,\n TooltipSummary,\n TooltipOperator,\n },\n});\n</script>\n\n<template>\n <template v-if=\"onlyShowOperator\">\n <TooltipOperator\n :menu=\"operator?.menu\"\n :onlyShowOperator=\"true\"\n :cell=\"cell\"\n />\n </template>\n <template v-else>\n <TooltipOperator\n :menu=\"operator?.menu\"\n :onlyShowOperator=\"false\"\n :cell=\"cell\"\n />\n\n <template v-if=\"content\">\n <slot name=\"content\"></slot>\n </template>\n\n <template v-else>\n <TooltipSimpleTips :name=\"data?.name\" :tips=\"data?.tips\" />\n <TooltipSummary\n v-if=\"data?.summaries?.length\"\n :summaries=\"data?.summaries\"\n />\n <TooltipInterpretation\n v-if=\"data?.interpretation\"\n :name=\"data?.interpretation?.name\"\n :icon=\"data?.interpretation?.icon\"\n :text=\"data?.interpretation?.text\"\n :content=\"data?.interpretation?.content\"\n />\n <TooltipHeadInfo\n :rows=\"data?.headInfo?.rows || []\"\n :cols=\"data?.headInfo?.cols || []\"\n />\n <TooltipDetail :list=\"data?.details || []\" />\n <TooltipInfos v-if=\"data?.infos\" :infos=\"data?.infos\" />\n <TooltipDescription :description=\"data?.description\" />\n </template>\n </template>\n</template>\n\n<style lang=\"less\">\n@import '@antv/s2/esm/shared/styles/tooltip/index.less';\n</style>\n","import { BaseTooltip, SpreadSheet, type TooltipShowOptions } from '@antv/s2';\nimport { createVNode, render, type VNodeProps } from 'vue';\nimport TooltipComponent from './index.vue';\nimport type { TooltipRenderProps } from './interface';\n\nexport class CustomTooltip extends BaseTooltip {\n constructor(spreadsheet: SpreadSheet) {\n super(spreadsheet);\n }\n\n renderContent() {\n // 配置级 s2.options.tooltip.content = ''\n const { tooltip } = this.spreadsheet.options;\n // 方法级 s2.showTooltip({ content: '' })\n const showOptions = this.options;\n const cell = this.spreadsheet.getCell(\n showOptions.event?.target as EventTarget,\n )!;\n // 优先级: 方法级 > 配置级, 兼容 content 为空字符串的场景\n const content = showOptions.content ?? tooltip?.content;\n\n const tooltipProps: TooltipRenderProps<TooltipShowOptions['content']> = {\n ...showOptions,\n cell,\n content,\n };\n\n // 保留 content 通过 props 传递的同时,新增通过 slot 传递。因为 slot 可能是 Component\n const tooltipVNode = createVNode(\n TooltipComponent,\n tooltipProps as VNodeProps,\n {\n content: () => content,\n },\n );\n\n // render(null) 确保每一次的 tooltip 内容是最新的\n render(null, this.container!);\n render(tooltipVNode, this.container!);\n }\n\n destroy() {\n super.destroy();\n if (this.container) {\n render(null, this.container);\n }\n }\n}\n","import {\n S2Event,\n type EmitterType,\n type Pagination,\n type SpreadSheet,\n} from '@antv/s2';\nimport { isEmpty, omit } from 'lodash';\nimport { computed, ref, watch, type Ref } from 'vue';\nimport type { BaseSheetProps } from '../utils/initPropAndEmits';\n\nexport const DEFAULT_PAGE_NUMBER = 1;\nexport const DEFAULT_PAGE_SIZE = 10;\n\nexport const usePagination = (\n s2Ref: Ref<SpreadSheet | undefined>,\n props: BaseSheetProps,\n) => {\n const {\n options: { pagination: paginationCfg },\n showPagination,\n } = props;\n const current = ref(paginationCfg?.current ?? DEFAULT_PAGE_NUMBER);\n const pageSize = ref(paginationCfg?.pageSize ?? DEFAULT_PAGE_SIZE);\n const total = ref(0);\n\n const change = (nextCurrent: number) => {\n current.value = nextCurrent;\n };\n\n const showSizeChange = (nextPageSize: number) => {\n pageSize.value = nextPageSize;\n };\n\n const visible = computed(() => {\n return showPagination && !isEmpty(paginationCfg);\n });\n\n // sync state.pagination -> s2.pagination\n watch([current, pageSize], async () => {\n if (!s2Ref.value) {\n return;\n }\n\n const nextPagination = isEmpty(paginationCfg)\n ? (null as unknown as Pagination)\n : {\n current: current.value,\n pageSize: pageSize.value,\n };\n\n s2Ref.value.updatePagination(nextPagination);\n await s2Ref.value.render(false);\n });\n\n // sync props.pagination -> state.pagination\n watch(\n [() => paginationCfg, s2Ref],\n () => {\n current.value = paginationCfg?.current ?? DEFAULT_PAGE_NUMBER;\n pageSize.value = paginationCfg?.pageSize ?? DEFAULT_PAGE_SIZE;\n total.value = s2Ref.value?.facet?.viewCellHeights.getTotalLength() ?? 0;\n },\n {\n immediate: true,\n },\n );\n\n // sync layout result total -> state.total\n watch(s2Ref, (value, oldValue, onCleanup) => {\n if (!s2Ref.value) {\n return;\n }\n\n const totalUpdateCallback: EmitterType[S2Event.LAYOUT_PAGINATION] = (\n data,\n ) => {\n if (isEmpty(paginationCfg)) {\n return;\n }\n\n total.value = data.total;\n };\n\n s2Ref.value.on(S2Event.LAYOUT_PAGINATION, totalUpdateCallback);\n\n onCleanup(() => {\n s2Ref.value?.off(S2Event.LAYOUT_PAGINATION, totalUpdateCallback);\n });\n });\n\n return {\n customOptions: omit(paginationCfg, ['current', 'pageSize', 'total']),\n visible,\n current,\n pageSize,\n total,\n change,\n showSizeChange,\n };\n};\n","<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { S2_PREFIX_CLS, i18n } from '@antv/s2';\nimport { Pagination as AntDPagination } from 'ant-design-vue';\nimport {\n DEFAULT_PAGE_NUMBER,\n DEFAULT_PAGE_SIZE,\n} from '../../hooks/usePagination';\n\nconst PRE_CLASS = `${S2_PREFIX_CLS}-pagination`;\n\nexport default defineComponent({\n name: 's2-pagination',\n props: {\n current: {\n type: Number,\n default: DEFAULT_PAGE_NUMBER,\n },\n total: {\n type: Number,\n default: 0,\n },\n pageSize: {\n type: Number,\n default: DEFAULT_PAGE_SIZE,\n },\n customOptions: Object,\n },\n emits: ['change', 'showSizeChange'] as unknown as {\n change: (current: number) => void;\n showSizeChange: (size: number) => void;\n },\n setup: (props) => {\n // only show the pagination when the pageSize > 5\n const showQuickJumper = computed(() => props.total / props.pageSize > 5);\n\n return {\n showQuickJumper,\n PRE_CLASS,\n i18n,\n };\n },\n components: {\n AntDPagination,\n },\n});\n</script>\n\n<template>\n <div :class=\"PRE_CLASS\">\n <AntDPagination\n size=\"small\"\n :default-current=\"1\"\n :showSizeChanger=\"true\"\n :showQuickJumper=\"showQuickJumper\"\n v-bind=\"customOptions\"\n :current=\"current\"\n :total=\"total\"\n :pageSize=\"pageSize\"\n @showSizeChange=\"(_, size) => $emit('showSizeChange', size)\"\n @change=\"(current) => $emit('change', current)\"\n />\n <span :class=\"`${PRE_CLASS}-count`\">\n {{ i18n('共计') }} {{ total || ' - ' }} {{ i18n('条') }}\n </span>\n </div>\n</template>\n","import type { SpreadSheet } from '@antv/s2';\nimport type { InjectionKey, Ref } from 'vue';\nimport { inject, provide, shallowRef } from 'vue';\n\n/**\n * S2 实例的 InjectionKey\n */\nexport const S2_INSTANCE_KEY: InjectionKey<Ref<SpreadSheet | null>> =\n Symbol('s2-instance');\n\n/**\n * 提供 S2 实例给子组件\n * @param instance S2 实例的响应式引用\n */\nexport function provideSpreadSheet(instance: Ref<SpreadSheet | null>) {\n provide(S2_INSTANCE_KEY, instance);\n}\n\n/**\n * 在子组件中获取 S2 实例\n * 类似 React 版本的 useSpreadSheetInstance()\n * @returns S2 实例的响应式引用\n */\nexport function useSpreadSheetInstance(): Ref<SpreadSheet | null> {\n const instance = inject(S2_INSTANCE_KEY, shallowRef(null));\n\n return instance;\n}\n","import type { S2Options, SpreadSheet } from '@antv/s2';\nimport { CustomTooltip } from '../../components/tooltip/custom-tooltip';\n\nexport const RENDER_TOOLTIP_OPTION: Partial<S2Options> = {\n tooltip: {\n render: (spreadsheet: SpreadSheet) => new CustomTooltip(spreadsheet),\n },\n};\n","import type { S2Options } from '@antv/s2';\nimport { getBaseSheetComponentOptions } from '@antv/s2';\nimport { RENDER_TOOLTIP_OPTION } from '../common/constant';\n\nexport const getSheetComponentOptions = (\n ...options: Partial<S2Options>[]\n): S2Options => getBaseSheetComponentOptions(RENDER_TOOLTIP_OPTION, ...options);\n","/* eslint-disable max-lines-per-function */\nimport { GEvent, S2Event, getBaseCellData, type SpreadSheet } from '@antv/s2';\nimport { onMounted, type Ref } from 'vue';\nimport type { BaseSheetInitEmits, EmitFn } from './../interface';\n\nconst useCellEvent = (\n s2Ref: Ref<SpreadSheet | undefined>,\n emit: EmitFn<BaseSheetInitEmits>,\n eventName: S2Event,\n emitName: keyof BaseSheetInitEmits,\n) => {\n const handler = (event: GEvent) => {\n const param = getBaseCellData(event);\n\n emit(emitName as any, param);\n };\n\n s2Ref.value?.on(eventName, handler);\n};\n\nconst useS2Event = (\n s2Ref: Ref<SpreadSheet | undefined>,\n emit: EmitFn<BaseSheetInitEmits>,\n eventName: S2Event,\n emitName: keyof BaseSheetInitEmits,\n) => {\n const handler = (...params: any[]) => {\n // @ts-expect-error\n emit(emitName, ...params);\n };\n\n s2Ref.value?.on(eventName, handler);\n};\n\nexport const useEvents = (\n s2Ref: Ref<SpreadSheet | undefined>,\n emit: EmitFn<BaseSheetInitEmits>,\n) => {\n onMounted(() => {\n if (!s2Ref.value) {\n return;\n }\n\n // ============== Row Cell ====================\n useCellEvent(s2Ref, emit, S2Event.ROW_CELL_HOVER, 'rowCellHover');\n useCellEvent(s2Ref, emit, S2Event.ROW_CELL_CLICK, 'rowCellClick');\n useCellEvent(\n s2Ref,\n emit,\n S2Event.ROW_CELL_DOUBLE_CLICK,\n 'rowCellDoubleClick',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.ROW_CELL_CONTEXT_MENU,\n 'rowCellContextMenu',\n );\n useCellEvent(s2Ref, emit, S2Event.ROW_CELL_MOUSE_DOWN, 'rowCellMouseDown');\n useCellEvent(s2Ref, emit, S2Event.ROW_CELL_MOUSE_UP, 'rowCellMouseUp');\n useCellEvent(s2Ref, emit, S2Event.ROW_CELL_MOUSE_MOVE, 'rowCellMouseMove');\n useS2Event(s2Ref, emit, S2Event.ROW_CELL_COLLAPSED, 'rowCellCollapsed');\n useS2Event(\n s2Ref,\n emit,\n S2Event.ROW_CELL_ALL_COLLAPSED,\n 'rowCellAllCollapsed',\n );\n useS2Event(s2Ref, emit, S2Event.ROW_CELL_SCROLL, 'rowCellScroll');\n useS2Event(s2Ref, emit, S2Event.ROW_CELL_RENDER, 'rowCellRender');\n useS2Event(s2Ref, emit, S2Event.ROW_CELL_SELECTED, 'rowCellSelected');\n\n // ============== Col Cell ====================\n useCellEvent(s2Ref, emit, S2Event.COL_CELL_HOVER, 'colCellHover');\n useCellEvent(s2Ref, emit, S2Event.COL_CELL_CLICK, 'colCellClick');\n useCellEvent(\n s2Ref,\n emit,\n S2Event.COL_CELL_DOUBLE_CLICK,\n 'colCellDoubleClick',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.COL_CELL_CONTEXT_MENU,\n 'colCellContextMenu',\n );\n useCellEvent(s2Ref, emit, S2Event.COL_CELL_MOUSE_DOWN, 'colCellMouseDown');\n useCellEvent(s2Ref, emit, S2Event.COL_CELL_MOUSE_UP, 'colCellMouseUp');\n useCellEvent(s2Ref, emit, S2Event.COL_CELL_MOUSE_MOVE, 'colCellMouseMove');\n useS2Event(s2Ref, emit, S2Event.COL_CELL_EXPANDED, 'colCellExpanded');\n useS2Event(s2Ref, emit, S2Event.COL_CELL_HIDDEN, 'colCellHidden');\n useS2Event(s2Ref, emit, S2Event.COL_CELL_RENDER, 'colCellRender');\n useS2Event(s2Ref, emit, S2Event.COL_CELL_SELECTED, 'colCellSelected');\n\n // ============== Data Cell ====================\n useCellEvent(s2Ref, emit, S2Event.DATA_CELL_HOVER, 'dataCellHover');\n useCellEvent(s2Ref, emit, S2Event.DATA_CELL_CLICK, 'dataCellClick');\n useCellEvent(\n s2Ref,\n emit,\n S2Event.DATA_CELL_DOUBLE_CLICK,\n 'dataCellDoubleClick',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.DATA_CELL_CONTEXT_MENU,\n 'dataCellContextMenu',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.DATA_CELL_MOUSE_DOWN,\n 'dataCellMouseDown',\n );\n useCellEvent(s2Ref, emit, S2Event.DATA_CELL_MOUSE_UP, 'dataCellMouseUp');\n useCellEvent(\n s2Ref,\n emit,\n S2Event.DATA_CELL_MOUSE_MOVE,\n 'dataCellMouseMove',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.DATA_CELL_BRUSH_SELECTION,\n 'dataCellBrushSelection',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.DATA_CELL_SELECT_MOVE,\n 'dataCellSelectMove',\n );\n useS2Event(s2Ref, emit, S2Event.DATA_CELL_RENDER, 'dataCellRender');\n useS2Event(s2Ref, emit, S2Event.DATA_CELL_SELECTED, 'dataCellSelected');\n\n // ============== Corner Cell ====================\n useCellEvent(s2Ref, emit, S2Event.CORNER_CELL_HOVER, 'cornerCellHover');\n useCellEvent(s2Ref, emit, S2Event.CORNER_CELL_CLICK, 'cornerCellClick');\n useCellEvent(\n s2Ref,\n emit,\n S2Event.CORNER_CELL_DOUBLE_CLICK,\n 'cornerCellDoubleClick',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.CORNER_CELL_CONTEXT_MENU,\n 'cornerCellContextMenu',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.CORNER_CELL_MOUSE_DOWN,\n 'cornerCellMouseDown',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.CORNER_CELL_MOUSE_UP,\n 'cornerCellMouseUp',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.CORNER_CELL_MOUSE_MOVE,\n 'cornerCellMouseMove',\n );\n useS2Event(s2Ref, emit, S2Event.CORNER_CELL_RENDER, 'cornerCellRender');\n useS2Event(s2Ref, emit, S2Event.CORNER_CELL_SELECTED, 'cornerCellSelected');\n\n // ============== Merged Cells ====================\n useCellEvent(s2Ref, emit, S2Event.MERGED_CELLS_HOVER, 'mergedCellsHover');\n useCellEvent(s2Ref, emit, S2Event.MERGED_CELLS_CLICK, 'mergedCellsClick');\n useCellEvent(\n s2Ref,\n emit,\n S2Event.MERGED_CELLS_DOUBLE_CLICK,\n 'mergedCellsDoubleClick',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.MERGED_CELLS_CONTEXT_MENU,\n 'mergedCellsContextMenu',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.MERGED_CELLS_MOUSE_DOWN,\n 'mergedCellsMouseDown',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.MERGED_CELLS_MOUSE_UP,\n 'mergedCellsMouseUp',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.MERGED_CELLS_MOUSE_MOVE,\n 'mergedCellsMouseMove',\n );\n useS2Event(s2Ref, emit, S2Event.MERGED_CELLS_RENDER, 'mergedCellsRender');\n\n /** ================ SeriesNumber Cell ================ */\n useS2Event(\n s2Ref,\n emit,\n S2Event.SERIES_NUMBER_CELL_RENDER,\n 'seriesNumberCellRender',\n );\n\n // ============== Sort ====================\n useS2Event(s2Ref, emit, S2Event.RANGE_SORT, 'rangeSort');\n useS2Event(s2Ref, emit, S2Event.RANGE_SORTED, 'rangeSorted');\n\n // ============== Filter ====================\n useS2Event(s2Ref, emit, S2Event.RANGE_FILTER, 'rangeFilter');\n useS2Event(s2Ref, emit, S2Event.RANGE_FILTERED, 'rangeFiltered');\n\n // ============== Layout ====================\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_AFTER_HEADER_LAYOUT,\n 'layoutAfterHeaderLayout',\n );\n useS2Event(s2Ref, emit, S2Event.LAYOUT_PAGINATION, 'layoutPagination');\n useS2Event(s2Ref, emit, S2Event.LAYOUT_BEFORE_RENDER, 'beforeRender');\n useS2Event(s2Ref, emit, S2Event.LAYOUT_AFTER_RENDER, 'afterRender');\n useS2Event(s2Ref, emit, S2Event.LAYOUT_DESTROY, 'destroy');\n\n // ============== Resize ====================\n useS2Event(s2Ref, emit, S2Event.LAYOUT_RESIZE, 'layoutResize');\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_RESIZE_SERIES_WIDTH,\n 'layoutResizeSeriesWidth',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_RESIZE_ROW_WIDTH,\n 'layoutResizeRowWidth',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_RESIZE_ROW_HEIGHT,\n 'layoutResizeRowHeight',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_RESIZE_COL_WIDTH,\n 'layoutResizeColWidth',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_RESIZE_COL_HEIGHT,\n 'layoutResizeColHeight',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_RESIZE_TREE_WIDTH,\n 'layoutResizeTreeWidth',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_RESIZE_MOUSE_DOWN,\n 'layoutResizeMouseDown',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_RESIZE_MOUSE_UP,\n 'layoutResizeMouseUp',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_RESIZE_MOUSE_MOVE,\n 'layoutResizeMouseMove',\n );\n\n // ============== Global ====================\n useS2Event(s2Ref, emit, S2Event.GLOBAL_KEYBOARD_DOWN, 'keyBoardDown');\n useS2Event(s2Ref, emit, S2Event.GLOBAL_KEYBOARD_UP, 'keyBoardUp');\n useS2Event(s2Ref, emit, S2Event.GLOBAL_COPIED, 'copied');\n useS2Event(\n s2Ref,\n emit,\n S2Event.GLOBAL_ACTION_ICON_HOVER,\n 'actionIconHover',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.GLOBAL_ACTION_ICON_CLICK,\n 'actionIconClick',\n );\n useS2Event(s2Ref, emit, S2Event.GLOBAL_CONTEXT_MENU, 'contextMenu');\n useS2Event(s2Ref, emit, S2Event.GLOBAL_HOVER, 'mouseHover');\n useS2Event(s2Ref, emit, S2Event.GLOBAL_CLICK, 'click');\n useS2Event(s2Ref, emit, S2Event.GLOBAL_DOUBLE_CLICK, 'doubleClick');\n useS2Event(s2Ref, emit, S2Event.GLOBAL_SELECTED, 'selected');\n useS2Event(s2Ref, emit, S2Event.GLOBAL_MOUSE_UP, 'mouseUp');\n useS2Event(s2Ref, emit, S2Event.GLOBAL_RESET, 'reset');\n useS2Event(s2Ref, emit, S2Event.GLOBAL_LINK_FIELD_JUMP, 'linkFieldJump');\n useS2Event(s2Ref, emit, S2Event.GLOBAL_SCROLL, 'scroll');\n\n // ============== Auto 自动生成的 ================\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_AFTER_REAL_DATA_CELL_RENDER,\n 'layoutAfterRealDataCellRender',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.ROW_CELL_BRUSH_SELECTION,\n 'rowCellBrushSelection',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.COL_CELL_BRUSH_SELECTION,\n 'colCellBrushSelection',\n );\n });\n};\n","import { S2Event, type SpreadSheet } from '@antv/s2';\nimport { ref, watch, type Ref, type ShallowRef } from 'vue';\n\nexport const useLoading = (\n s2Ref: ShallowRef<SpreadSheet | undefined>,\n loadingProp: Ref<boolean | undefined>,\n) => {\n const loading = ref<boolean>(loadingProp.value ?? false);\n const setLoading = (updated: boolean) => {\n loading.value = updated;\n };\n\n // 监听外部传入的 loading prop 变化\n watch(loadingProp, (newLoading) => {\n loading.value = newLoading ?? false;\n });\n\n watch(s2Ref, (s2) => {\n s2?.on(S2Event.LAYOUT_BEFORE_RENDER, () => {\n setLoading(true);\n });\n\n s2?.on(S2Event.LAYOUT_AFTER_RENDER, () => {\n setLoading(false);\n });\n });\n\n return { loading, setLoading };\n};\n","import type { SpreadSheet } from '@antv/s2';\nimport { createResizeObserver } from '@antv/s2';\nimport { ref, watch, type Ref } from 'vue';\nimport type { BaseSheetProps } from '../utils/initPropAndEmits';\n\nexport const useResize = (\n s2Ref: Ref<SpreadSheet | undefined>,\n props: BaseSheetProps,\n dom: {\n wrapperRef: Ref<HTMLDivElement | undefined>;\n containerRef: Ref<HTMLDivElement | undefined>;\n },\n) => {\n const unobserve = ref<() => void>();\n\n watch([s2Ref, () => props.adaptive], ([s2, adaptive], _, onCleanup) => {\n if (!s2) {\n return;\n }\n\n unobserve.value = createResizeObserver({\n s2,\n adaptive,\n wrapper: dom.wrapperRef.value!,\n container: dom.containerRef.value!,\n });\n\n onCleanup(() => {\n unobserve.value?.();\n });\n });\n};\n","import type { S2Options, SpreadSheet } from '@antv/s2';\nimport { isProxy, reactive, watch, type ShallowRef } from 'vue';\nimport type { BaseSheetProps } from '../utils/initPropAndEmits';\n\n/**\n * props 会将所有属性用 shallowReactive 包裹起来:\n * 1. 如果是对 dataCfg 或者 options 直接替换, 那么只需要简单的通过 ()=> props.dataCfg 这种 getter 就能监听到\n * 2. 如果 dataCfg 任然是 reactive 数据,那么就存在直接修改了其中某一个属性的情况,这个时候就需要对所有的属性遍历来关联 watch 属性\n * ? 如果数量特别多时,遍历可能存在性能问题,先暂时观察一下\n */\nexport const useSheetUpdate = (\n s2Ref: ShallowRef<SpreadSheet | undefined>,\n props: BaseSheetProps,\n hooks?: { before?: () => void; after: () => void },\n) => {\n const updateFlag = reactive({\n rerender: false,\n reloadData: false,\n rebuildDataset: false,\n });\n\n watch(\n () => props.options,\n (options, prevOptions) => {\n updateFlag.rerender = true;\n\n if (!Object.is(prevOptions?.hierarchyType, options?.hierarchyType)) {\n updateFlag.reloadData = true;\n updateFlag.rebuildDataset = true;\n }\n\n s2Ref.value?.setOptions(options as S2Options);\n s2Ref.value?.changeSheetSize(options?.width, options?.height);\n },\n { deep: isProxy(props.options) },\n );\n\n watch(\n () => props.dataCfg!,\n (dataCfg, prevDataCfg) => {\n if (\n prevDataCfg?.fields?.columns?.length !==\n dataCfg?.fields?.columns?.length\n ) {\n s2Ref.value?.facet?.clearInitColLeafNodes();\n }\n\n updateFlag.rerender = true;\n updateFlag.reloadData = true;\n s2Ref.value?.setDataCfg(dataCfg);\n },\n { deep: isProxy(props.dataCfg) },\n );\n\n watch(\n () => props.themeCfg!,\n (themeCfg) => {\n updateFlag.rerender = true;\n s2Ref.value?.setThemeCfg(themeCfg);\n },\n {\n deep: isProxy(props.themeCfg),\n },\n );\n\n watch(updateFlag, async (flag) => {\n if (!flag.rerender) {\n return;\n }\n\n hooks?.before?.();\n\n const defaultRenderOptions = {\n reloadData: flag.reloadData,\n rebuildDataSet: flag.rebuildDataset,\n };\n const renderOptions =\n props?.onUpdate?.(defaultRenderOptions) || defaultRenderOptions;\n\n await s2Ref.value?.render(renderOptions);\n\n props?.onUpdateAfterRender?.(renderOptions);\n\n hooks?.after?.();\n flag.rerender = false;\n flag.reloadData = false;\n flag.rebuildDataset = false;\n });\n};\n","import {\n PivotSheet,\n TableSheet,\n type S2Options,\n type SpreadSheet,\n} from '@antv/s2';\nimport { PivotChartSheet } from '@antv/s2/extends';\nimport { onBeforeUnmount, onMounted, ref, shallowRef, toRaw, toRef } from 'vue';\nimport type { BaseSheetInitEmits, EmitFn } from '../interface';\nimport type { BaseSheetProps } from '../utils/initPropAndEmits';\nimport { getSheetComponentOptions } from '../utils/options';\nimport { useEvents } from './useEvents';\nimport { useLoading } from './useLoading';\nimport { usePagination } from './usePagination';\nimport { useResize } from './useResize';\nimport { useSheetUpdate } from './useSheetUpdate';\n\nexport function useSpreadSheet(\n props: BaseSheetProps,\n emit: EmitFn<BaseSheetInitEmits>,\n) {\n const {\n dataCfg,\n options,\n themeCfg,\n sheetType,\n spreadsheet: customSpreadSheet,\n onMounted: onS2Mounted,\n } = props;\n\n // 使用 toRef 保持 loading 属性的响应性\n const loadingRef = toRef(props, 'loading');\n\n const wrapperRef = ref<HTMLDivElement>();\n const containerRef = ref<HTMLDivElement>();\n\n const s2Ref = shallowRef<SpreadSheet>();\n\n const { loading, setLoading } = useLoading(s2Ref, loadingRef);\n const pagination = usePagination(s2Ref, props);\n\n const renderSpreadSheet = (container: HTMLDivElement) => {\n const rawDataCfg = toRaw(dataCfg!);\n const rawOptions = toRaw(options);\n\n const s2Options = getSheetComponentOptions(rawOptions as S2Options);\n\n if (customSpreadSheet) {\n return customSpreadSheet(container, rawDataCfg, s2Options);\n }\n\n if (sheetType === 'table' || sheetType === 'editable') {\n return new TableSheet(container, rawDataCfg, s2Options);\n }\n\n if (sheetType === 'pivotChart') {\n return new PivotChartSheet(container, rawDataCfg, s2Options);\n }\n\n return new PivotSheet(container, rawDataCfg, s2Options);\n };\n\n const buildSpreadSheet = async () => {\n setLoading(true);\n s2Ref.value = renderSpreadSheet(containerRef.value!);\n s2Ref.value.setThemeCfg(toRaw(themeCfg));\n await s2Ref.value.render();\n\n setLoading(false);\n onS2Mounted?.(s2Ref.value);\n };\n\n onMounted(buildSpreadSheet);\n useEvents(s2Ref, emit);\n useSheetUpdate(s2Ref, props, {\n before() {\n setLoading(true);\n },\n after() {\n setLoading(false);\n },\n });\n useResize(s2Ref, props, { wrapperRef, containerRef });\n\n onBeforeUnmount(() => {\n setLoading(false);\n s2Ref.value?.destroy();\n });\n\n return {\n wrapperRef,\n containerRef,\n s2Ref,\n loading,\n setLoading,\n pagination,\n };\n}\n","import type {\n Adaptive,\n BaseDrillDownDataSet,\n S2DataConfig,\n SheetType,\n ThemeCfg,\n} from '@antv/s2';\nimport { i18n } from '@antv/s2';\nimport type { ExtractPropTypes, PropType } from 'vue';\nimport type {\n BaseDrillDownEmitKeys,\n BaseDrillDownEmits,\n BaseSheetInitEmitKeys,\n BaseSheetInitEmits,\n SheetComponentProps,\n} from '../interface';\n\nexport const initBaseSheetProps = () => {\n return {\n sheetType: String as PropType<SheetType>,\n dataCfg: Object as PropType<S2DataConfig>,\n themeCfg: Object as PropType<ThemeCfg>,\n showPagination: {\n type: [Object, Boolean] as PropType<\n SheetComponentProps['showPagination']\n >,\n default: false as SheetComponentProps['showPagination'],\n },\n loading: Boolean,\n partDrillDown: Object,\n header: Object,\n options: {\n type: Object as PropType<SheetComponentProps['options']>,\n default: {} as SheetComponentProps['options'],\n },\n adaptive: {\n type: [Object, Boolean] as PropType<Adaptive>,\n default: false as Adaptive,\n },\n spreadsheet: Function as PropType<SheetComponentProps['spreadsheet']>,\n onMounted: Function as PropType<SheetComponentProps['onMounted']>,\n onUpdate: Function as PropType<SheetComponentProps['onUpdate']>,\n onUpdateAfterRender: Function as PropType<\n SheetComponentProps['onUpdateAfterRender']\n >,\n };\n};\n\nexport const initDrillDownProps = () => {\n return {\n className: String,\n title: {\n type: String,\n default: i18n('选择下钻维度'),\n },\n searchText: {\n type: String,\n default: i18n('搜索字段'),\n },\n clearText: {\n type: String,\n default: i18n('恢复默认'),\n },\n extra: Node,\n dataSet: {\n type: Array as PropType<BaseDrillDownDataSet[]>,\n default: [],\n },\n drillFields: Array as PropType<string[]>,\n disabledFields: Array as PropType<string[]>,\n getDrillFields: Function as PropType<(drillFields: string[]) => void>,\n setDrillFields: Function as PropType<(drillFields: string[]) => void>,\n };\n};\n\nexport const initDrillDownEmits = (): BaseDrillDownEmits => {\n const keys: BaseDrillDownEmitKeys[] = ['getDrillFields', 'setDrillFields'];\n\n return keys as unknown as BaseDrillDownEmits;\n};\n\nexport type BaseSheetProps = ExtractPropTypes<\n ReturnType<typeof initBaseSheetProps>\n>;\n\nexport const initBaseSheetEmits = () => {\n /** base sheet all emits */\n const keys: Array<BaseSheetInitEmitKeys> = [\n 'spreadsheet',\n // ============== Row Cell ====================\n 'rowCellHover',\n 'rowCellClick',\n 'rowCellDoubleClick',\n 'rowCellContextMenu',\n 'rowCellMouseDown',\n 'rowCellMouseUp',\n 'rowCellMouseMove',\n 'rowCellCollapsed',\n 'rowCellAllCollapsed',\n 'rowCellScroll',\n\n // ============== Col Cell ====================\n 'colCellHover',\n 'colCellClick',\n 'colCellDoubleClick',\n 'colCellContextMenu',\n 'colCellMouseDown',\n 'colCellMouseUp',\n 'colCellMouseMove',\n 'colCellExpanded',\n 'colCellHidden',\n\n // ============== Data Cell ====================\n 'dataCellHover',\n 'dataCellClick',\n 'dataCellDoubleClick',\n 'dataCellContextMenu',\n 'dataCellMouseDown',\n 'dataCellMouseUp',\n 'dataCellMouseMove',\n 'dataCellBrushSelection',\n 'dataCellSelectMove',\n\n // ============== Corner Cell ====================\n 'cornerCellHover',\n 'cornerCellClick',\n 'cornerCellDoubleClick',\n 'cornerCellContextMenu',\n 'cornerCellMouseDown',\n 'cornerCellMouseUp',\n 'cornerCellMouseMove',\n\n // ============== Merged Cells ====================\n 'mergedCellsHover',\n 'mergedCellsClick',\n 'mergedCellsDoubleClick',\n 'mergedCellsContextMenu',\n 'mergedCellsMouseDown',\n 'mergedCellsMouseUp',\n 'mergedCellsMouseMove',\n\n // ============== Sort ====================\n 'rangeSort',\n 'rangeSorted',\n\n // ============== Filter ====================\n 'rangeFilter',\n 'rangeFiltered',\n\n // ============== Layout ====================\n 'layoutAfterHeaderLayout',\n 'layoutPagination',\n 'beforeRender',\n 'afterRender',\n 'mounted',\n 'destroy',\n\n // ============== Resize ====================\n 'layoutResize',\n 'layoutResizeSeriesWidth',\n 'layoutResizeRowWidth',\n 'layoutResizeRowHeight',\n 'layoutResizeColWidth',\n 'layoutResizeColHeight',\n 'layoutResizeTreeWidth',\n 'layoutResizeMouseDown',\n 'layoutResizeMouseUp',\n 'layoutResizeMouseMove',\n\n // ============== Global ====================\n 'keyBoardDown',\n 'keyBoardUp',\n 'copied',\n 'actionIconHover',\n 'actionIconClick',\n 'contextMenu',\n 'mouseHover',\n 'mouseUp',\n 'mouseMove',\n 'mouseDown',\n 'selected',\n 'reset',\n 'linkFieldJump',\n 'click',\n 'doubleClick',\n 'scroll',\n 'hover',\n // ============== Auto 自动生成的 ================\n 'layoutAfterRealDataCellRender',\n 'rowCellBrushSelection',\n 'colCellBrushSelection',\n ];\n\n return keys as unknown as BaseSheetInitEmits;\n};\n","<script lang=\"ts\">\nimport { S2_PREFIX_CLS } from '@antv/s2';\nimport { Spin } from 'ant-design-vue';\nimport { computed, defineComponent } from 'vue';\nimport { isBoolean } from 'lodash';\nimport S2Pagination from '../pagination/index.vue';\nimport { provideSpreadSheet } from '../../context/SpreadSheetContext';\nimport { useSpreadSheet } from '../../hooks/useSpreadSheet';\nimport {\n initBaseSheetEmits,\n initBaseSheetProps,\n} from '../../utils/initPropAndEmits';\n\nexport default defineComponent({\n name: 'BaseSheet',\n props: initBaseSheetProps(),\n emits: initBaseSheetEmits(),\n setup(props, ctx) {\n const { wrapperRef, containerRef, s2Ref, loading, pagination } =\n useSpreadSheet(props, ctx.emit);\n\n // Provide S2 instance to child components (for DragCopyPoint, etc.)\n const s2RefComputed = computed(() => s2Ref.value ?? null);\n\n provideSpreadSheet(s2RefComputed);\n\n ctx.expose({\n get instance() {\n return s2Ref.value;\n },\n });\n\n const handlePageChange = (nextCurrent: number) => {\n if (props.showPagination && !isBoolean(props.showPagination)) {\n props.showPagination.onChange?.(nextCurrent);\n }\n\n pagination.change(nextCurrent);\n };\n\n const handlePageSizeChange = (nextSize: number) => {\n if (props.showPagination && !isBoolean(props.showPagination)) {\n props.showPagination.onShowSizeChange?.(nextSize);\n }\n\n pagination.showSizeChange(nextSize);\n };\n\n return {\n S2_PREFIX_CLS,\n wrapperRef,\n containerRef,\n s2Ref,\n loading,\n pagination,\n handlePageChange,\n handlePageSizeChange,\n };\n },\n components: {\n Spin,\n S2Pagination,\n },\n});\n</script>\n\n<template>\n <Spin :wrapperClassName=\"S2_PREFIX_CLS + '-spin'\" :spinning=\"loading\">\n <div ref=\"wrapperRef\" :class=\"S2_PREFIX_CLS + '-wrapper'\">\n <div ref=\"containerRef\" :class=\"S2_PREFIX_CLS + '-container'\" />\n <S2Pagination\n v-if=\"pagination.visible.value\"\n :current=\"pagination.current.value\"\n :pageSize=\"pagination.pageSize.value\"\n :total=\"pagination.total.value\"\n :customOptions=\"pagination.customOptions\"\n @change=\"handlePageChange\"\n @showSizeChange=\"handlePageSizeChange\"\n />\n <slot name=\"editCell\" />\n </div>\n </Spin>\n</template>\n\n<style lang=\"less\">\n@import '@antv/s2/esm/shared/styles/variables.less';\n\n.@{s2-cls-prefix} {\n &-spin.ant-spin-nested-loading,\n &-spin > .ant-spin-container {\n height: 100%;\n }\n\n &-wrapper {\n padding: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n height: 100%;\n }\n\n &-container {\n overflow: auto;\n flex: 1 1 auto;\n\n canvas {\n display: block;\n }\n }\n\n &-pagination {\n display: flex;\n align-items: center;\n z-index: 1024;\n\n &-count {\n margin-left: 12px;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 64px;\n }\n }\n}\n</style>\n","import type { SpreadSheet } from '@antv/s2';\nimport { shallowRef } from 'vue';\n\nexport interface SheetExpose {\n instance: SpreadSheet | undefined;\n}\n\nexport const useExpose = (expose: (exposed?: Record<string, any>) => void) => {\n const s2Ref = shallowRef<SheetExpose>();\n\n expose({\n get instance() {\n return s2Ref.value?.instance;\n },\n });\n\n return s2Ref;\n};\n","<script lang=\"ts\">\nimport { customMerge, type ThemeCfg, type S2Options } from '@antv/s2';\nimport { computed, defineComponent, toRefs } from 'vue';\nimport { useExpose } from '../../hooks/useExpose';\nimport type { BaseSheetInitEmits } from '../../interface';\nimport { initBaseSheetProps } from '../../utils/initPropAndEmits';\nimport BaseSheet from './base-sheet.vue';\n\n/**\n * ChartSheet - 用于在单元格中渲染图表\n *\n * 注意:要使用 ChartDataCell 自定义单元格渲染图表,\n * 需要在使用组件时通过 options.dataCell 配置 ChartDataCell\n *\n * 示例: 在 options 中配置 dataCell 属性:\n * dataCell: (viewMeta, spreadsheet) => new ChartDataCell(viewMeta, spreadsheet)\n */\nexport default defineComponent({\n name: 'ChartSheet',\n props: initBaseSheetProps(),\n emits: [] as unknown as BaseSheetInitEmits,\n setup(props, ctx) {\n const s2Ref = useExpose(ctx.expose);\n const { options: chartOptions, themeCfg: customThemeCfg } = toRefs(props);\n\n const s2Options = computed<S2Options>(() => {\n const defaultOptions: Partial<S2Options> = {\n style: {\n rowCell: {\n width: 100,\n },\n dataCell: {\n width: 400,\n height: 400,\n },\n },\n tooltip: {\n enable: true,\n },\n };\n\n const options: Partial<S2Options> = {\n showDefaultHeaderActionIcon: false,\n interaction: {\n hoverFocus: false,\n brushSelection: {\n dataCell: false,\n },\n },\n };\n\n return customMerge<S2Options>(\n defaultOptions,\n chartOptions.value,\n options,\n );\n });\n\n const themeCfg = computed<ThemeCfg>(() => {\n const defaultTheme: ThemeCfg['theme'] = {\n dataCell: {\n cell: {\n interactionState: {\n hoverFocus: {\n borderOpacity: 0,\n },\n selected: {\n borderOpacity: 0,\n },\n },\n },\n },\n };\n\n return customMerge<ThemeCfg>(defaultTheme, customThemeCfg?.value);\n });\n\n return {\n s2Ref,\n s2Options,\n themeCfg,\n };\n },\n components: {\n BaseSheet,\n },\n});\n</script>\n\n<template>\n <BaseSheet\n v-bind=\"$props\"\n ref=\"s2Ref\"\n :options=\"s2Options\"\n :themeCfg=\"themeCfg\"\n />\n</template>\n","import { DataCell, drawCustomContent } from '@antv/s2';\n\n/**\n * Cell for panelGroup area\n * -------------------------------------\n * | label |\n * | measureLabel | measure | measure |\n * | measureLabel | measure | measure |\n * --------------------------------------\n */\nexport class GridAnalysisSheetDataCell extends DataCell {\n public drawTextShape() {\n if (this.isMultiData()) {\n return drawCustomContent(this);\n }\n\n super.drawTextShape();\n }\n}\n","import { FONT_FAMILY, isWindows, type S2Theme } from '@antv/s2';\n\nexport const FONT_SIZE = 12;\nexport const FONT_SIZE_MINOR = 11;\n\n/* 网格分析表主题 */\nexport const GridAnalysisTheme: S2Theme = {\n // 表头\n dataCell: {\n text: {\n fontSize: FONT_SIZE,\n fontFamily: FONT_FAMILY,\n fill: 'rgba(0, 0, 0, 0.85)',\n fontWeight: 'normal',\n textBaseline: 'middle',\n textAlign: 'left',\n },\n // 次级文本,如副指标\n minorText: {\n fontSize: FONT_SIZE_MINOR,\n fontFamily: FONT_FAMILY,\n fill: 'rgba(0, 0, 0, 0.45)',\n fontWeight: 'normal',\n textBaseline: 'middle',\n textAlign: 'left',\n },\n // 衍生指标\n derivedMeasureText: {\n mainUp: '#F46649',\n mainDown: '#2AA491',\n minorUp: '#f9ae9e',\n minorDown: '#a9dad2',\n },\n bolderText: {\n fontSize: FONT_SIZE,\n fontFamily: FONT_FAMILY,\n fill: 'rgba(0, 0, 0, 1)',\n fontWeight: isWindows() ? 'bold' : 520,\n textBaseline: 'middle',\n textAlign: 'left',\n },\n },\n};\n","<script lang=\"ts\">\nimport { customMerge, type ThemeCfg, type S2Options } from '@antv/s2';\nimport { computed, defineComponent, toRefs } from 'vue';\nimport { useExpose } from '../../../hooks/useExpose';\nimport type { BaseSheetInitEmits } from '../../../interface';\nimport { initBaseSheetProps } from '../../../utils/initPropAndEmits';\nimport BaseSheet from '../base-sheet.vue';\nimport { GridAnalysisSheetDataCell } from './custom-cell';\nimport { GridAnalysisTheme } from './theme';\n\nexport default defineComponent({\n name: 'GridAnalysisSheet',\n props: initBaseSheetProps(),\n emits: [] as unknown as BaseSheetInitEmits,\n setup(props, ctx) {\n const s2Ref = useExpose(ctx.expose);\n const { options: defaultOptions, themeCfg } = toRefs(props);\n\n const s2Options = computed<S2Options>(() => {\n const options: Partial<S2Options> = {\n dataCell: (viewMeta, spreadsheet) =>\n new GridAnalysisSheetDataCell(viewMeta, spreadsheet),\n showDefaultHeaderActionIcon: false,\n style: {\n colCell: {\n hideValue: true,\n },\n },\n };\n\n return customMerge<S2Options>(defaultOptions?.value, options);\n });\n\n const s2ThemeCfg = computed<ThemeCfg>(() =>\n customMerge<ThemeCfg>(themeCfg?.value, { theme: GridAnalysisTheme }),\n );\n\n return {\n s2Ref,\n s2Options,\n s2ThemeCfg,\n };\n },\n components: {\n BaseSheet,\n },\n});\n</script>\n\n<template>\n <BaseSheet\n v-bind=\"$props\"\n ref=\"s2Ref\"\n :options=\"s2Options\"\n :themeCfg=\"s2ThemeCfg\"\n />\n</template>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { useExpose } from '../../hooks/useExpose';\nimport type { BaseSheetInitEmits } from '../../interface';\nimport { initBaseSheetProps } from '../../utils/initPropAndEmits';\nimport BaseSheet from './base-sheet.vue';\n\nexport default defineComponent({\n name: 'PivotChartSheet',\n props: initBaseSheetProps(),\n emits: [] as unknown as BaseSheetInitEmits,\n setup(props, ctx) {\n const s2Ref = useExpose(ctx.expose);\n\n return {\n s2Ref,\n };\n },\n components: {\n BaseSheet,\n },\n});\n</script>\n\n<template>\n <BaseSheet v-bind=\"$props\" ref=\"s2Ref\" />\n</template>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'LocationIcon',\n});\n</script>\n<template>\n <svg\n class=\"antv-s2-icon\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12.6\"\n height=\"12.6\"\n >\n <path\n d=\"M511.804 222.338c-57.117 0-105.737 20.061-145.86 60.184-40.122 40.123-60.184 88.569-60.184 145.337 0 56.769 20.062 105.214 60.185 145.337 40.122 40.123 88.742 60.185 145.859 60.185 57.116 0 105.736-20.062 145.859-60.185 40.123-40.123 60.184-88.568 60.184-145.337 0-56.768-20.061-105.214-60.184-145.337-40.123-40.123-88.743-60.184-145.86-60.184z m0 338.619c-36.729 0-68.007-12.925-93.835-38.774-25.827-25.85-38.752-57.127-38.773-93.834-0.022-36.707 12.902-68.16 38.773-94.357 25.872-26.197 57.15-39.285 93.835-39.263 36.685 0.022 67.963 13.11 93.834 39.263 25.871 26.154 38.796 57.606 38.774 94.357-0.022 36.75-12.946 68.028-38.774 93.834-25.828 25.806-57.106 38.73-93.834 38.774z m366.165-295.766c-21.084-42.168-50.327-79.223-87.73-111.165-37.404-31.941-79.898-57.105-127.484-75.491C614.472 60.845 564.155 52 511.804 52c-52.352 0-103.006 8.845-151.963 26.535-46.911 18.364-89.069 43.528-126.472 75.491-37.403 31.964-66.647 69.019-87.731 111.165C123.879 308.71 113 353.923 113 400.835c0 65.95 15.982 132.924 47.945 200.92 26.524 56.441 63.58 112.198 111.165 167.27 62.556 73.435 134.632 138.71 216.227 195.827 6.81 4.765 14.459 7.148 22.945 7.148 8.485 0 16.47-2.383 23.956-7.148 81.595-57.79 153.67-123.067 216.227-195.828 47.608-55.767 84.663-111.524 111.165-167.27 31.963-67.995 47.945-134.969 47.945-200.919 0-46.912-10.88-92.126-32.638-135.644h0.032z m-40.797 136.656c0 55.07-13.6 111.513-40.798 169.326-23.129 49.631-56.452 99.948-99.97 150.95-52.351 61.208-113.885 117.65-184.6 169.326-70.716-51.676-132.25-108.118-184.6-169.326-42.844-51.002-76.167-101.319-99.971-150.95-27.198-57.791-40.797-114.57-40.797-170.338 0-36.032 8.159-70.716 24.478-104.05 16.994-32.638 40.45-61.882 70.368-87.73 30.592-26.525 65.276-47.26 104.05-62.209 40.797-14.97 82.954-22.455 126.472-22.455 43.517 0 85.675 7.485 126.472 22.455 38.752 14.97 73.436 35.706 104.05 62.208 30.593 25.85 54.048 55.093 70.367 87.731 16.32 34.009 24.479 69.03 24.479 105.062z\"\n fill=\"currentColor\"\n ></path>\n </svg>\n</template>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'TextIcon',\n});\n</script>\n<template>\n <svg\n class=\"antv-s2-icon\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12.6\"\n height=\"12.6\"\n >\n <path\n d=\"M86.016 805.888H0L143.872 275.968h79.36l144.896 529.92H276.992l-29.696-109.056H115.2s-29.696 109.056-29.184 109.056zM225.28 613.376L181.248 455.68 138.24 613.376h87.04zM519.168 430.08c24.576-16.384 47.616-25.088 69.12-25.088 30.72 0 58.368 14.848 81.92 44.032 24.064 29.184 35.328 72.192 35.328 128.512 0 44.032-7.168 83.456-22.528 118.272-14.848 34.816-35.328 62.976-60.416 83.456-26.112 20.992-57.856 31.232-95.232 31.232-15.36-0.512-31.232-1.536-46.592-3.584-4.096-0.512-8.704-1.024-12.8-1.536h-66.56V256h81.92v206.336c11.264-12.8 23.04-23.552 35.84-32.256z m-35.328 157.184v135.168c13.824 3.072 26.112 4.608 37.376 4.608 27.648 0 50.176-11.776 69.12-36.352 19.456-25.088 28.672-59.392 28.672-104.96 0-32.256-5.12-55.296-14.848-70.144-9.216-13.824-18.432-19.968-28.672-19.968-12.288 0-27.136 7.68-44.544 24.064-16.896 16.896-32.768 39.424-47.104 67.584zM1013.76 794.624c-36.864 14.336-71.68 20.992-104.96 20.992-32.768 0.512-64.512-9.216-91.648-27.136-27.136-18.432-48.64-44.032-62.464-73.728-14.848-30.72-22.528-65.536-22.528-104.448 0-58.88 16.896-108.032 51.2-146.944 33.792-38.912 75.264-58.88 123.392-58.88 34.304 0 70.144 7.168 108.032 21.504l10.24 4.096v95.232l-20.992-10.752c-34.816-17.92-65.536-26.624-92.16-26.624-16.896 0-32.768 4.608-47.104 13.824-13.824 8.704-25.088 23.04-32.768 42.496-8.192 19.968-12.288 41.472-12.288 63.488 0 28.672 7.68 55.808 24.064 82.432 14.848 24.576 37.888 36.352 71.168 36.352 10.752 0 21.504-1.024 31.744-2.56 9.728-1.536 29.696-8.192 58.88-18.944l19.456-7.68v92.672l-11.264 4.608z\"\n fill=\"currentColor\"\n ></path>\n </svg>\n</template>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'CalendarIcon',\n});\n</script>\n<template>\n <svg\n class=\"antv-s2-icon\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12.6\"\n height=\"12.6\"\n >\n <path\n d=\"M950.016 898.016l-206.016-204.992Q832 586.016 832 448.032q0-159.008-112.512-271.488T448 64.032 176.512 176.544 64 448.032t112.512 271.488T448 832.032q138.016 0 244.992-88l206.016 206.016q10.016 10.016 24.992 10.016t26.016-10.016q10.016-11.008 10.016-26.016t-10.016-26.016zM568.992 736Q512 760 448 760T327.008 736q-56-24-99.488-67.488t-66.496-99.488q-24.992-56.992-24.992-120.992t24.992-120.992q23.008-56 66.496-99.488t99.488-67.488Q384 136.064 448 136.064t120.992 24q56 24 99.488 67.488t67.488 99.488q24 56.992 24 120.992t-24 120.992q-24 56-67.488 99.488T568.992 736z\"\n fill=\"currentColor\"\n ></path>\n </svg>\n</template>\n","<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue';\nimport type { Ref } from 'vue';\nimport {\n DRILL_DOWN_PRE_CLASS,\n type BaseDrillDownDataSet,\n type BaseDrillDownComponentProps,\n} from '@antv/s2';\nimport { Button, Input, Empty, Menu, MenuItem } from 'ant-design-vue';\nimport type { SelectInfo } from 'ant-design-vue/es/menu/src/interface';\nimport { isEmpty } from 'lodash';\nimport type { Key } from 'ant-design-vue/es/_util/type';\nimport type { ChangeEvent } from 'ant-design-vue/es/_util/EventInterface';\nimport LocationIcon from '../../icons/location-icon.vue';\nimport TextIcon from '../../icons/text-icon.vue';\nimport CalendarIcon from '../../icons/calendar-icon.vue';\nimport {\n initDrillDownEmits,\n initDrillDownProps,\n} from '../../utils/initPropAndEmits';\n\nexport default defineComponent({\n name: 'DrillDown',\n props: initDrillDownProps(),\n emits: initDrillDownEmits(),\n methods: {},\n components: {\n Button,\n Input,\n Empty,\n Menu,\n MenuItem,\n LocationIcon,\n TextIcon,\n CalendarIcon,\n },\n setup(props) {\n const {\n dataSet,\n disabledFields,\n getDrillFields,\n setDrillFields,\n className,\n } = props as BaseDrillDownComponentProps;\n const getOptions = () =>\n dataSet.map((val: BaseDrillDownDataSet) => {\n val.disabled = !!(disabledFields && disabledFields.includes(val.value));\n\n return val;\n });\n\n const options: Ref<BaseDrillDownDataSet[]> = ref(getOptions());\n const selected = ref<Key[]>([]);\n\n const handleSearch = (e: ChangeEvent) => {\n const { value } = e.target;\n\n if (!value) {\n options.value = [...dataSet];\n } else {\n const reg = new RegExp(value, 'gi');\n const result = dataSet.filter((item) => reg.test(item.name));\n\n options.value = [...result];\n }\n };\n\n const handleSelect = (value: SelectInfo) => {\n const key = value?.selectedKeys;\n\n selected.value = key;\n if (getDrillFields) {\n getDrillFields(key as string[]);\n }\n\n if (setDrillFields) {\n setDrillFields(key as string[]);\n }\n };\n\n const handleClear = (e: { stopPropagation: () => void }) => {\n e.stopPropagation();\n selected.value = [];\n if (getDrillFields) {\n getDrillFields([]);\n }\n\n if (setDrillFields) {\n setDrillFields([]);\n }\n };\n\n return {\n options,\n handleSearch,\n handleSelect,\n handleClear,\n className,\n selected,\n isEmpty,\n DRILL_DOWN_PRE_CLASS,\n };\n },\n});\n</script>\n\n<template>\n <div :class=\"[DRILL_DOWN_PRE_CLASS, className]\">\n <header :class=\"`${DRILL_DOWN_PRE_CLASS}-header`\">\n <div>{{ title }}</div>\n <Button type=\"link\" @click=\"handleClear\">\n {{ clearText }}\n </Button>\n </header>\n <Input\n :class=\"`${DRILL_DOWN_PRE_CLASS}-search`\"\n :placeholder=\"searchText\"\n @change=\"handleSearch\"\n @pressEnter=\"handleSearch\"\n :allowClear=\"true\"\n />\n <Empty\n v-if=\"isEmpty(options)\"\n :imageStyle=\"{ height: '64px' }\"\n :class=\"`${DRILL_DOWN_PRE_CLASS}-empty`\"\n />\n <Menu\n class=\"`${DRILL_DOWN_PRE_CLASS}-menu`\"\n v-model:selectedKeys=\"selected\"\n @select=\"handleSelect\"\n >\n <MenuItem\n v-for=\"option in options\"\n :key=\"option.value\"\n :disabled=\"option.disabled\"\n :class=\"`${DRILL_DOWN_PRE_CLASS}-menu-item`\"\n >\n <template #icon>\n <TextIcon v-if=\"option.type === 'text'\" />\n <CalendarIcon v-if=\"option.type === 'date'\" />\n <LocationIcon v-if=\"option.type === 'location'\" />\n </template>\n {{ option?.name }}\n </MenuItem>\n </Menu>\n </div>\n</template>\n\n<style lang=\"less\" scoped>\n@import '@antv/s2/esm/shared/styles/drill-down.less';\n</style>\n","<script lang=\"ts\">\nimport {\n type S2Options,\n buildDrillDownOptions,\n handleDrillDown,\n type ActionIconCallbackParams,\n type PartDrillDown,\n} from '@antv/s2';\nimport { isEmpty } from 'lodash';\nimport { computed, createVNode, defineComponent, ref, toRefs } from 'vue';\nimport { useExpose } from '../../hooks/useExpose';\nimport type { BaseSheetInitEmits } from '../../interface';\nimport { initBaseSheetProps } from '../../utils/initPropAndEmits';\nimport DrillDown from '../drill-down/index.vue';\nimport BaseSheet from './base-sheet.vue';\n\nexport default defineComponent({\n name: 'PivotSheet',\n props: initBaseSheetProps(),\n emits: [] as unknown as BaseSheetInitEmits,\n setup(props, ctx) {\n const s2Ref = useExpose(ctx.expose);\n const { options: pivotOptions } = toRefs(props);\n const { dataCfg, partDrillDown } = toRefs(props);\n // 被下钻的 field\n const drillFields = ref<string[]>([]);\n\n // 执行下钻操作\n const setDrillFields = (fields: string[]) => {\n const instance = s2Ref?.value?.instance;\n\n drillFields.value = fields;\n instance?.hideTooltip();\n if (isEmpty(fields)) {\n instance?.clearDrillDownData(instance?.store.get('drillDownNode')?.id);\n } else {\n // 执行下钻\n handleDrillDown({\n rows: (dataCfg.value?.fields.rows as string[]) ?? [],\n drillFields: fields,\n fetchData: partDrillDown.value?.['fetchData'],\n drillItemsNum: partDrillDown.value?.['drillItemsNum'],\n spreadsheet: instance,\n });\n }\n };\n\n /**\n * 点击下钻后,下钻组件的出现\n */\n const onDrillDownIconClick = (params: ActionIconCallbackParams) => {\n const { event, disabledFields } = params;\n\n if (event) {\n const instance = s2Ref?.value?.instance;\n const drillDownNode = createVNode(DrillDown, {\n ...partDrillDown.value?.['drillConfig'],\n setDrillFields,\n drillFields: drillFields.value,\n disabledFields,\n });\n\n // 将下钻设置为 tooltip 的 content 进行展示\n instance?.showTooltip({\n position: {\n x: event.clientX,\n y: event.clientY,\n },\n event,\n content: drillDownNode,\n });\n }\n };\n\n // 展示下钻icon\n const options = computed(() =>\n buildDrillDownOptions(\n pivotOptions.value as any,\n partDrillDown.value as PartDrillDown,\n (params) => onDrillDownIconClick(params),\n ),\n ) as S2Options;\n\n return {\n s2Ref,\n options,\n };\n },\n components: {\n BaseSheet,\n },\n});\n</script>\n\n<template>\n <BaseSheet v-bind=\"$props\" ref=\"s2Ref\" :options=\"options\" />\n</template>\n","import {\n ColCell,\n Node,\n SpreadSheet,\n drawCustomContent,\n safeJsonParse,\n type ColHeaderConfig,\n type MultiData,\n} from '@antv/s2';\nimport { isArray } from 'lodash';\n\n/**\n * Cell for StrategySheet\n * -------------------------------------\n * | root label |\n * | label1 label2 label3 |\n * --------------------------------------\n */\nexport class StrategySheetColCell extends ColCell {\n constructor(\n meta: Node,\n spreadsheet: SpreadSheet,\n headerConfig: ColHeaderConfig,\n ) {\n super(meta, spreadsheet, headerConfig);\n }\n\n public drawTextShape() {\n const meta = this.getMeta();\n const value = safeJsonParse<MultiData>(meta?.value);\n\n if (!isArray(value)) {\n return super.drawTextShape();\n }\n\n const { formattedValue } = this.getFormattedFieldValue();\n const displayValues =\n formattedValue !== meta?.value ? [[formattedValue]] : [value];\n\n drawCustomContent(\n this,\n {\n values: displayValues,\n },\n false,\n );\n }\n}\n","import { DataCell, drawCustomContent } from '@antv/s2';\n\n/**\n * Cell for panelGroup area\n * -------------------------------------\n * | measure1 measure2 measure3 |\n * | measure1 measure2 measure3 |\n * --------------------------------------\n */\nexport class StrategySheetDataCell extends DataCell {\n public drawTextShape() {\n if (this.isMultiData()) {\n return drawCustomContent(this);\n }\n\n super.drawTextShape();\n }\n}\n","import {\n CustomGridPivotDataSet,\n EMPTY_EXTRA_FIELD_PLACEHOLDER,\n EXTRA_FIELD,\n i18n,\n type Meta,\n type RawData,\n type S2DataConfig,\n} from '@antv/s2';\nimport { isEmpty, isObject, keys } from 'lodash';\n\nexport class StrategySheetDataSet extends CustomGridPivotDataSet {\n getExistValuesByDataItem(data: RawData) {\n const result = keys(data).filter((key) => isObject(data[key]));\n\n if (isEmpty(result)) {\n result.push(EMPTY_EXTRA_FIELD_PLACEHOLDER);\n }\n\n return result;\n }\n\n processDataCfg(dataCfg: S2DataConfig): S2DataConfig {\n const updatedDataCfg = super.processDataCfg(dataCfg);\n\n const newMeta: Meta[] = this.processMeta(dataCfg.meta, i18n('数值'));\n\n return {\n ...updatedDataCfg,\n meta: newMeta,\n fields: {\n ...updatedDataCfg.fields,\n rows: [...(dataCfg.fields.rows || []), EXTRA_FIELD],\n },\n };\n }\n}\n","<script lang=\"ts\">\nimport {\n Node,\n SpreadSheet,\n customMerge,\n type ColHeaderConfig,\n type S2Options,\n} from '@antv/s2';\nimport { isEmpty, size } from 'lodash';\nimport { computed, defineComponent, toRefs } from 'vue';\nimport { useExpose } from '../../../hooks/useExpose';\nimport type { BaseSheetInitEmits } from '../../../interface';\nimport { initBaseSheetProps } from '../../../utils/initPropAndEmits';\nimport BaseSheet from '../base-sheet.vue';\nimport { StrategySheetColCell } from './custom-col-cell';\nimport { StrategySheetDataCell } from './custom-data-cell';\nimport { StrategySheetDataSet } from './custom-data-set';\n\nexport default defineComponent({\n name: 'StrategySheet',\n props: initBaseSheetProps(),\n emits: [] as unknown as BaseSheetInitEmits,\n setup(props, ctx) {\n const s2Ref = useExpose(ctx.expose);\n const { options, themeCfg, dataCfg } = toRefs(props);\n\n const strategySheetOptions = computed<Partial<S2Options> | null>(() => {\n if (isEmpty(dataCfg.value)) {\n return null;\n }\n\n // 单指标非自定义树结构隐藏指标列\n const shouldHideValue = size(dataCfg.value?.fields?.values) === 1;\n\n return {\n hierarchyType: 'tree',\n dataCell: (viewMeta, spreadsheet) =>\n new StrategySheetDataCell(viewMeta, spreadsheet),\n colCell: (\n node: Node,\n spreadsheet: SpreadSheet,\n headerConfig: ColHeaderConfig,\n ) => new StrategySheetColCell(node, spreadsheet, headerConfig),\n dataSet: (spreadSheet: SpreadSheet) =>\n new StrategySheetDataSet(spreadSheet),\n showDefaultHeaderActionIcon: false,\n style: {\n colCell: {\n hideValue: shouldHideValue,\n },\n },\n interaction: {\n autoResetSheetStyle: true,\n // 趋势分析表禁用 刷选, 多选, 区间多选\n brushSelection: false,\n selectedCellMove: false,\n multiSelection: false,\n rangeSelection: false,\n },\n tooltip: {\n operation: {\n hiddenColumns: true,\n },\n },\n };\n });\n\n const s2Options = computed<S2Options>(() =>\n customMerge<S2Options>(strategySheetOptions.value, options?.value),\n );\n\n return {\n s2Ref,\n s2Options,\n themeCfg,\n };\n },\n components: {\n BaseSheet,\n },\n});\n</script>\n\n<template>\n <BaseSheet\n v-bind=\"$props\"\n ref=\"s2Ref\"\n :options=\"s2Options\"\n :themeCfg=\"themeCfg\"\n />\n</template>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { useExpose } from '../../hooks/useExpose';\nimport type { BaseSheetInitEmits, BaseSheetInitProps } from '../../interface';\nimport BaseSheet from './base-sheet.vue';\n\nexport default defineComponent({\n name: 'TableSheet',\n props: [] as unknown as BaseSheetInitProps,\n emits: [] as unknown as BaseSheetInitEmits,\n setup(props, ctx) {\n const s2Ref = useExpose(ctx.expose);\n\n return { s2Ref };\n },\n components: {\n BaseSheet,\n },\n});\n</script>\n<template>\n <BaseSheet ref=\"s2Ref\" />\n</template>\n","<!-- eslint-disable max-lines-per-function -->\n<script lang=\"ts\">\nimport {\n DataCell,\n FrozenFacet,\n FrozenGroupArea,\n InteractionStateName,\n S2Event,\n S2_PREFIX_CLS,\n type Point,\n} from '@antv/s2';\nimport { get, pick, throttle } from 'lodash';\nimport {\n defineComponent,\n onMounted,\n onUnmounted,\n ref,\n watch,\n type PropType,\n} from 'vue';\nimport { useSpreadSheetInstance } from '../../../../context/SpreadSheetContext';\n\nimport './drag-copy-mask.less';\n\nexport default defineComponent({\n name: 'DragCopyMask',\n props: {\n onCopyFinished: {\n type: Function as PropType<() => void>,\n default: undefined,\n },\n },\n setup(props) {\n const s2Ref = useSpreadSheetInstance();\n const startCell = ref<DataCell>();\n const maskPosition = ref({ right: 0, bottom: 0 });\n const dragPoint = ref<Point>();\n\n // 利用闭包记录最近一次hover位置\n const lastHoverPoint = { x: 0, y: 0 };\n\n const isInCell = (point: Point, cell: DataCell) => {\n const s2 = s2Ref.value;\n\n if (!s2) {\n return false;\n }\n\n const cellMeta = pick(cell.getMeta(), [\n 'x',\n 'y',\n 'width',\n 'height',\n 'fieldValue',\n ]);\n const scrollOffset = s2.facet.getScrollOffset();\n const sampleColNode = s2.facet.getColNodes()[0];\n const sampleColNodeHeight = sampleColNode?.height || 0;\n const pointX = point.x;\n const pointY = point.y;\n const scrollOffsetY = scrollOffset?.scrollY - sampleColNodeHeight;\n const cellMaxX = cellMeta.x - scrollOffset.scrollX + cellMeta.width + 4;\n const cellMinX = cellMeta.x - scrollOffset.scrollX;\n const cellMaxY = cellMeta.y - scrollOffsetY + cellMeta.height + 4;\n const cellMinY = cellMeta.y - scrollOffsetY;\n\n return (\n cellMaxX >= pointX &&\n cellMinX < pointX &&\n cellMaxY >= pointY &&\n cellMinY < pointY\n );\n };\n\n const judgePointInView = (point: Point) => {\n const s2 = s2Ref.value;\n\n if (!s2) {\n return false;\n }\n\n const rect = s2.getCanvasElement().getBoundingClientRect();\n const frozenGroupAreas = (s2.facet as FrozenFacet).frozenGroupAreas;\n const viewMinX = rect.x;\n const viewMaxX = rect.x + rect.width;\n const viewMinY = rect.y + frozenGroupAreas[FrozenGroupArea.Row].height;\n const viewMaxY = rect.y + rect.height;\n\n return (\n point.x <= viewMaxX &&\n point.x >= viewMinX &&\n point.y <= viewMaxY &&\n point.y >= viewMinY\n );\n };\n\n const getCurrentHoverCell = (event: MouseEvent) => {\n const s2 = s2Ref.value;\n\n if (!s2) {\n return undefined;\n }\n\n const rect = s2.getCanvasElement().getBoundingClientRect();\n const allCells = s2.facet.getDataCells();\n\n return allCells.find((dataCell) =>\n isInCell({ y: event.y - rect.y, x: event.x - rect.x }, dataCell),\n );\n };\n\n const getSelectedCellRange = (start: DataCell, end: DataCell) => {\n const s2 = s2Ref.value;\n\n if (!s2) {\n return [];\n }\n\n const startCellMeta = start.getMeta();\n const endCellMeta = end?.getMeta();\n const minX = Math.min(startCellMeta.colIndex, endCellMeta.colIndex);\n const maxX = Math.max(startCellMeta.colIndex, endCellMeta.colIndex);\n const maxY = Math.max(startCellMeta.rowIndex, endCellMeta.rowIndex);\n const minY = Math.min(startCellMeta.rowIndex, endCellMeta.rowIndex);\n const allCells = s2.facet.getDataCells();\n\n return allCells.filter((item) => {\n const itemMeta = item.getMeta();\n\n return (\n itemMeta.rowIndex <= maxY &&\n itemMeta.rowIndex >= minY &&\n itemMeta.colIndex <= maxX &&\n itemMeta.colIndex >= minX\n );\n });\n };\n\n const dragMove = throttle((event: MouseEvent) => {\n const s2 = s2Ref.value;\n\n if (!startCell.value || !s2) {\n return;\n }\n\n let targetCell = getCurrentHoverCell(event);\n let newX = event.x - dragPoint.value!.x;\n let newY = event.y - dragPoint.value!.y;\n\n if (!judgePointInView(event)) {\n targetCell = getCurrentHoverCell(lastHoverPoint as MouseEvent);\n newX = lastHoverPoint.x - dragPoint.value!.x;\n newY = lastHoverPoint.y - dragPoint.value!.y;\n } else {\n lastHoverPoint.x = event.x;\n lastHoverPoint.y = event.y;\n }\n\n maskPosition.value = { right: newX, bottom: newY };\n const selectedRange = getSelectedCellRange(startCell.value, targetCell!);\n\n s2.interaction.changeState({\n cells: selectedRange.map((v) => v.getMeta() as any),\n stateName: InteractionStateName.PREPARE_SELECT,\n force: true,\n });\n }, 10);\n\n const dragMouseUp = async (event: MouseEvent) => {\n const s2 = s2Ref.value;\n\n if (!startCell.value || !s2) {\n return;\n }\n\n const targetCell =\n getCurrentHoverCell(event) ||\n getCurrentHoverCell(lastHoverPoint as MouseEvent);\n const displayData = s2.dataSet.getDisplayDataSet();\n const selectedRange = getSelectedCellRange(startCell.value, targetCell!);\n const { fieldValue } = startCell.value.getMeta();\n\n const changedCells = selectedRange.map((item) => {\n const { rowIndex, valueField } = item.getMeta();\n\n if (\n displayData[rowIndex] &&\n typeof displayData[rowIndex][valueField] !== 'undefined'\n ) {\n displayData[rowIndex][valueField] = fieldValue;\n }\n\n return item;\n });\n\n s2.interaction.changeState({\n cells: changedCells.map((v) => v.getMeta() as any),\n stateName: InteractionStateName.PREPARE_SELECT,\n force: true,\n });\n await s2.render(true);\n\n maskPosition.value = { right: 0, bottom: 0 };\n s2.off(S2Event.GLOBAL_MOUSE_MOVE, dragMove);\n s2.off(S2Event.GLOBAL_MOUSE_UP, dragMouseUp);\n startCell.value = undefined;\n props.onCopyFinished?.();\n };\n\n const dragMouseDown = (event: MouseEvent) => {\n const s2 = s2Ref.value;\n\n if (!s2) {\n return;\n }\n\n if (get(event, 'target.id') !== 'spreadsheet-drag-copy-point') {\n return;\n }\n\n const rect = (event.target as HTMLElement).getBoundingClientRect();\n const { top, left } = get(event, 'target.style', {}) as {\n top: string;\n left: string;\n };\n const allCells = s2.facet.getDataCells();\n const targetCell = allCells.find((v) =>\n isInCell({ y: parseFloat(top), x: parseFloat(left) }, v),\n );\n\n dragPoint.value = { x: rect.x, y: rect.y };\n startCell.value = targetCell as DataCell;\n };\n\n watch(startCell, (cell) => {\n const s2 = s2Ref.value;\n\n if (cell && s2) {\n s2.on(S2Event.GLOBAL_MOUSE_MOVE, dragMove);\n s2.on(S2Event.GLOBAL_MOUSE_UP, dragMouseUp);\n }\n });\n\n onMounted(() => {\n const pointElement = document.getElementById(\n 'spreadsheet-drag-copy-point',\n );\n\n pointElement?.addEventListener('mousedown', dragMouseDown);\n });\n\n onUnmounted(() => {\n const pointElement = document.getElementById(\n 'spreadsheet-drag-copy-point',\n );\n\n pointElement?.removeEventListener('mousedown', dragMouseDown);\n });\n\n return {\n S2_PREFIX_CLS,\n maskPosition,\n };\n },\n});\n</script>\n\n<template>\n <div\n :class=\"`${S2_PREFIX_CLS}-drag-copy-mask`\"\n :style=\"{\n right: maskPosition.right > 0 ? `${maskPosition.right}px` : '0',\n bottom: maskPosition.bottom > 0 ? `${maskPosition.bottom}px` : '0',\n left: maskPosition.right <= 0 ? `${maskPosition.right}px` : '0',\n top: maskPosition.bottom <= 0 ? `${maskPosition.bottom}px` : '0',\n width: `${Math.abs(maskPosition.right)}px`,\n height: `${Math.abs(maskPosition.bottom)}px`,\n }\"\n />\n</template>\n","<!-- eslint-disable max-lines-per-function -->\n<script lang=\"ts\">\nimport type { FrozenFacet, ScrollOffset } from '@antv/s2';\nimport {\n DataCell,\n FrozenGroupArea,\n GEvent,\n S2Event,\n S2_PREFIX_CLS,\n} from '@antv/s2';\nimport { isEqual, pick } from 'lodash';\nimport { defineComponent, onUnmounted, ref, watch, computed } from 'vue';\nimport { useSpreadSheetInstance } from '../../../../context/SpreadSheetContext';\nimport DragCopyMask from './DragCopyMask.vue';\n\nimport './drag-copy-point.less';\n\nexport default defineComponent({\n name: 'DragCopyPoint',\n components: { DragCopyMask },\n setup() {\n const s2Ref = useSpreadSheetInstance();\n\n const scroll = ref<ScrollOffset & { width?: number; overflow?: boolean }>({\n scrollX: -999,\n scrollY: -999,\n width: 8,\n overflow: true,\n });\n const position = ref({ left: -999, top: -999 });\n const cell = ref<DataCell>();\n\n const handleScroll = () => {\n const spreadsheet = s2Ref.value;\n\n if (!spreadsheet) {\n return;\n }\n\n const newScroll = spreadsheet.facet.getScrollOffset();\n const frozenGroupAreas = (spreadsheet.facet as FrozenFacet)\n .frozenGroupAreas;\n const rect = spreadsheet.getCanvasElement().getBoundingClientRect();\n const cellMeta = cell.value?.getMeta();\n\n if (!isEqual(newScroll, scroll.value)) {\n if (cellMeta) {\n const {\n verticalBorderWidth: vWidth = 0,\n horizontalBorderWidth: hWidth = 0,\n } = cell.value!.getStyle()!.cell!;\n\n const pointX = cellMeta.width + cellMeta.x;\n const pointY = cellMeta.height + cellMeta.y;\n const pointWidth =\n pointX - newScroll.scrollX - rect.width + (vWidth + hWidth) * 2;\n let overflow = true;\n\n if (\n frozenGroupAreas[FrozenGroupArea.Col].width >=\n pointX - newScroll.scrollX - hWidth * 2 ||\n frozenGroupAreas[FrozenGroupArea.Row].height >=\n pointY - newScroll.scrollY - vWidth * 2 ||\n rect.width <= pointX - newScroll.scrollX - hWidth * 2 ||\n rect.height <=\n pointY -\n newScroll.scrollY +\n frozenGroupAreas[FrozenGroupArea.Row].height\n ) {\n overflow = true;\n } else {\n overflow = false;\n }\n\n scroll.value = {\n ...newScroll,\n overflow,\n width: 8 - (pointWidth > 0 ? pointWidth : 0),\n };\n } else {\n scroll.value = { scrollX: -999, scrollY: -999, overflow: true };\n }\n }\n };\n\n const fixPosition = (event: GEvent) => {\n const spreadsheet = s2Ref.value;\n\n if (!spreadsheet) {\n return;\n }\n\n const eventCell = spreadsheet.getCell<DataCell>(event.target);\n const isEventCellSelected = spreadsheet.interaction.isSelectedCell(\n eventCell!,\n );\n\n if (isEventCellSelected) {\n cell.value = eventCell!;\n } else {\n cell.value = undefined;\n }\n };\n\n const batchSelected = () => {\n cell.value = undefined;\n };\n\n const onCopyFinished = () => {\n batchSelected();\n };\n\n const bindEvents = () => {\n const spreadsheet = s2Ref.value;\n\n if (!spreadsheet) {\n return;\n }\n\n spreadsheet.on(S2Event.COL_CELL_CLICK, batchSelected);\n spreadsheet.on(S2Event.ROW_CELL_CLICK, batchSelected);\n spreadsheet.on(S2Event.CORNER_CELL_CLICK, batchSelected);\n spreadsheet.on(S2Event.DATA_CELL_BRUSH_SELECTION, batchSelected);\n spreadsheet.on(S2Event.DATA_CELL_CLICK, fixPosition);\n spreadsheet.on(S2Event.GLOBAL_SCROLL, handleScroll);\n };\n\n const unbindEvents = () => {\n const spreadsheet = s2Ref.value;\n\n if (!spreadsheet) {\n return;\n }\n\n spreadsheet.off(S2Event.COL_CELL_CLICK, batchSelected);\n spreadsheet.off(S2Event.ROW_CELL_CLICK, batchSelected);\n spreadsheet.off(S2Event.CORNER_CELL_CLICK, batchSelected);\n spreadsheet.off(S2Event.DATA_CELL_BRUSH_SELECTION, batchSelected);\n spreadsheet.off(S2Event.DATA_CELL_CLICK, fixPosition);\n spreadsheet.off(S2Event.GLOBAL_SCROLL, handleScroll);\n };\n\n // Watch cell changes\n watch(cell, () => {\n handleScroll();\n });\n\n // Update position when scroll or cell changes\n watch([scroll, cell], () => {\n const spreadsheet = s2Ref.value;\n\n if (!spreadsheet?.getCanvasElement()) {\n return;\n }\n\n if (spreadsheet && cell.value) {\n const sampleColNode = spreadsheet.facet.getColNodes()[0];\n const sampleColNodeHeight = sampleColNode?.height || 0;\n const cellMeta = pick(cell.value.getMeta(), [\n 'x',\n 'y',\n 'width',\n 'height',\n 'fieldValue',\n ]);\n\n cellMeta.x -= scroll.value?.scrollX!;\n cellMeta.y -= scroll.value?.scrollY! - sampleColNodeHeight;\n position.value = {\n left: cellMeta.x + cellMeta.width - 4,\n top: cellMeta.y + cellMeta.height - 4,\n };\n }\n });\n\n // Watch for dataSet changes to reset cell\n watch(\n () => [\n s2Ref.value?.dataSet.sortParams,\n s2Ref.value?.dataSet.filterParams,\n ],\n () => {\n if (cell.value) {\n cell.value = undefined;\n }\n },\n );\n\n // Watch s2Ref to bind/unbind events\n watch(\n s2Ref,\n (newS2, oldS2) => {\n if (oldS2) {\n oldS2.off(S2Event.COL_CELL_CLICK, batchSelected);\n oldS2.off(S2Event.ROW_CELL_CLICK, batchSelected);\n oldS2.off(S2Event.CORNER_CELL_CLICK, batchSelected);\n oldS2.off(S2Event.DATA_CELL_BRUSH_SELECTION, batchSelected);\n oldS2.off(S2Event.DATA_CELL_CLICK, fixPosition);\n oldS2.off(S2Event.GLOBAL_SCROLL, handleScroll);\n }\n\n if (newS2) {\n bindEvents();\n }\n },\n { immediate: true },\n );\n\n onUnmounted(() => {\n unbindEvents();\n });\n\n const pointStyle = computed(() => ({\n display: scroll.value.overflow ? 'none' : 'block',\n left: `${position.value.left}px`,\n top: `${position.value.top}px`,\n width: `${scroll.value.width}px`,\n }));\n\n return {\n S2_PREFIX_CLS,\n pointStyle,\n onCopyFinished,\n };\n },\n});\n</script>\n\n<template>\n <div\n id=\"spreadsheet-drag-copy-point\"\n :class=\"`${S2_PREFIX_CLS}-drag-copy-point`\"\n :style=\"pointStyle\"\n >\n <DragCopyMask :onCopyFinished=\"onCopyFinished\" />\n </div>\n</template>\n","<script lang=\"ts\">\nimport { defineComponent, computed, toRefs, watch, ref, reactive } from 'vue';\nimport type { CSSProperties } from 'vue';\nimport { Input } from 'ant-design-vue';\nimport { isNil, pick } from 'lodash';\nimport type { TargetCellInfo, S2Options, S2CellType } from '@antv/s2';\nimport { useExpose } from '../../hooks/useExpose';\nimport type { BaseSheetInitEmits } from '../../interface';\nimport { initBaseSheetProps } from '../../utils/initPropAndEmits';\nimport BaseSheet from './base-sheet.vue';\nimport { DragCopyPoint } from './editable-sheet/drag-copy';\n\nfunction buildEditProps(option: S2Options): S2Options {\n return { ...option };\n}\n\nexport default defineComponent({\n name: 'EditableSheet',\n props: initBaseSheetProps(),\n emits: [] as unknown as BaseSheetInitEmits,\n setup(props, ctx) {\n const s2Ref = useExpose(ctx.expose);\n const { options: originOptions } = toRefs(props);\n\n const inputRef = ref<HTMLInputElement>(null);\n const targetCell = ref<S2CellType>(null);\n const inputValue = ref<string>('');\n\n const options = computed(() =>\n buildEditProps(originOptions.value as S2Options),\n ) as S2Options;\n\n const inputStyle = reactive({\n width: 0,\n height: 0,\n left: 0,\n top: 0,\n display: 'none',\n zIndex: 1000,\n position: 'absolute',\n }) as CSSProperties;\n\n function setInputStyle() {\n const spreadsheet = s2Ref.value?.instance;\n const cell = targetCell.value;\n\n if (!spreadsheet || !cell) {\n inputStyle.display = 'none';\n\n return;\n }\n\n const scroll = spreadsheet.facet.getScrollOffset();\n let cellPosition = pick(cell.getMeta(), ['x', 'y', 'width', 'height']);\n\n if (isNil(cellPosition.x) || isNil(cellPosition.y)) {\n cellPosition = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n };\n }\n\n const sampleColNode = spreadsheet.facet.getColNodes()[0];\n const sampleColNodeHeight = sampleColNode?.height || 0;\n\n cellPosition.x -= scroll.scrollX || 0;\n cellPosition.y -= (scroll.scrollY || 0) - sampleColNodeHeight;\n const {\n x: cellLeft,\n y: cellTop,\n width: cellWidth,\n height: cellHeight,\n } = cellPosition;\n const inSight =\n cellTop >= 0 &&\n cellTop <= spreadsheet.facet.getCanvasSize().height &&\n cellLeft >= 0 &&\n cellLeft <= spreadsheet.facet.getCanvasSize().width;\n\n inputStyle.width = cellWidth ? `${cellWidth}px` : '0px';\n inputStyle.height = cellHeight ? `${cellHeight}px` : '0px';\n inputStyle.left = cellLeft ? `${cellLeft}px` : '0px';\n inputStyle.top = cellTop ? `${cellTop}px` : '0px';\n inputStyle.display = targetCell.value && inSight ? 'block' : 'none';\n }\n watch([targetCell, s2Ref.value?.instance.facet.getScrollOffset()], () => {\n setInputStyle();\n });\n\n const onDataCellDbClick = (cell: TargetCellInfo) => {\n targetCell.value = cell.target;\n inputValue.value = cell.target.getActualText();\n setTimeout(() => {\n inputRef.value?.focus();\n }, 100);\n };\n\n function onSave() {\n const target = inputRef.value;\n const cell = targetCell.value;\n const spreadsheet = s2Ref.value?.instance;\n\n if (!spreadsheet || !cell || !target) {\n return;\n }\n\n const { rowIndex, valueField, id } = cell.getMeta();\n const inputVal = target.value;\n const displayData = spreadsheet.dataSet.getDisplayDataSet();\n\n displayData[rowIndex][valueField] = inputVal;\n // 编辑后的值作为格式化后的结果, formatter 不再触发, 避免二次格式化\n spreadsheet.dataSet.displayFormattedValueMap?.set(id, inputVal);\n spreadsheet.render();\n\n targetCell.value = null;\n }\n\n return {\n setInputStyle,\n s2Ref,\n options,\n inputStyle,\n onDataCellDbClick,\n inputRef,\n onSave,\n inputValue,\n Input,\n };\n },\n components: {\n BaseSheet,\n DragCopyPoint,\n },\n}) as unknown;\n</script>\n<template>\n <BaseSheet\n @dataCellDoubleClick=\"onDataCellDbClick\"\n @scroll=\"setInputStyle\"\n @dataCellClick=\"onSave\"\n ref=\"s2Ref\"\n v-bind=\"$props\"\n :options=\"options\"\n >\n <template #editCell>\n <Input\n @blur=\"onSave\"\n :value=\"inputValue\"\n ref=\"inputRef\"\n :style=\"inputStyle\"\n />\n <DragCopyPoint />\n </template>\n </BaseSheet>\n</template>\n","<script lang=\"ts\">\nimport type { SheetType } from '@antv/s2';\nimport { computed, defineComponent } from 'vue';\nimport { useExpose } from '../../hooks/useExpose';\nimport type { BaseSheetInitEmits, BaseSheetInitProps } from '../../interface';\nimport ChartSheet from './chart-sheet.vue';\nimport GridAnalysisSheet from './grid-analysis-sheet/index.vue';\nimport PivotChartSheet from './pivot-chart-sheet.vue';\nimport PivotSheet from './pivot-sheet.vue';\nimport StrategySheet from './strategy-sheet/index.vue';\nimport TableSheet from './table-sheet.vue';\nimport EditableSheet from './editable-sheet.vue';\n\nexport default defineComponent({\n name: 'Sheet',\n props: [] as unknown as BaseSheetInitProps,\n emits: [] as unknown as BaseSheetInitEmits,\n setup(props, ctx) {\n const s2Ref = useExpose(ctx.expose);\n\n const sheetType = computed(() => {\n const type = ctx.attrs['sheetType'] as SheetType;\n\n switch (type) {\n case 'table':\n return TableSheet;\n case 'editable':\n return EditableSheet;\n case 'chart':\n return ChartSheet;\n case 'gridAnalysis':\n return GridAnalysisSheet;\n case 'strategy':\n return StrategySheet;\n case 'pivotChart':\n return PivotChartSheet;\n default:\n return PivotSheet;\n }\n });\n\n return { s2Ref, sheetType };\n },\n components: {\n PivotSheet,\n TableSheet,\n EditableSheet,\n ChartSheet,\n GridAnalysisSheet,\n StrategySheet,\n PivotChartSheet,\n },\n});\n</script>\n<template>\n <component :is=\"sheetType\" ref=\"s2Ref\" />\n</template>\n","<script lang=\"ts\">\nimport type { Node } from '@antv/s2';\nimport { getStrategySheetTooltipClsName as tooltipCls } from '@antv/s2';\nimport { isFunction } from 'lodash';\nimport { defineComponent, computed, type PropType } from 'vue';\nimport type { CustomTooltipProps } from './interface';\n\nexport default defineComponent({\n name: 'StrategySheetColCellTooltip',\n props: {\n cell: {\n type: Object as PropType<CustomTooltipProps['cell']>,\n required: true,\n },\n label: {\n type: [Object, Function] as PropType<CustomTooltipProps['label']>,\n default: undefined,\n },\n },\n setup(props) {\n const meta = computed(() => props.cell.getMeta() as Node);\n\n const shouldHide = computed(() => {\n // 趋势分析表叶子节点显示是指标标题, tooltip 中没必要再显示了\n return meta.value.isLeaf && meta.value.level !== 0;\n });\n\n const cellName = computed(() => {\n const m = meta.value;\n const name = m.spreadsheet.dataSet.getFieldName(m.field!);\n const customLabel = isFunction(props.label)\n ? props.label(props.cell, name)\n : props.label;\n\n return customLabel ?? name;\n });\n\n const cellValue = computed(() => meta.value.value);\n\n return {\n tooltipCls,\n shouldHide,\n cellName,\n cellValue,\n };\n },\n});\n</script>\n\n<template>\n <div v-if=\"!shouldHide\" :class=\"[tooltipCls(), tooltipCls('col')]\">\n <span :class=\"tooltipCls('name')\">{{ cellName }}</span>\n <span :class=\"tooltipCls('value')\">{{ cellValue }}</span>\n </div>\n</template>\n\n<style lang=\"less\">\n@import './index.less';\n</style>\n","<script lang=\"ts\">\nimport type { ViewMeta, MultiData, SimpleData } from '@antv/s2';\nimport {\n i18n,\n getEmptyPlaceholder,\n isUnchangedValue,\n isUpDataValue,\n getStrategySheetTooltipClsName as tooltipCls,\n} from '@antv/s2';\nimport { first, get, isEmpty, isFunction, isNil } from 'lodash';\nimport { defineComponent, computed, type PropType } from 'vue';\nimport type { CustomTooltipProps } from './interface';\n\nexport default defineComponent({\n name: 'StrategySheetDataCellTooltip',\n props: {\n cell: {\n type: Object as PropType<CustomTooltipProps['cell']>,\n required: true,\n },\n label: {\n type: [Object, Function] as PropType<CustomTooltipProps['label']>,\n default: undefined,\n },\n showOriginalValue: {\n type: Boolean,\n default: false,\n },\n renderDerivedValue: {\n type: Function as PropType<CustomTooltipProps['renderDerivedValue']>,\n default: undefined,\n },\n },\n setup(props) {\n const meta = computed(() => props.cell.getMeta() as ViewMeta);\n const spreadsheet = computed(() => meta.value.spreadsheet);\n const metaFieldValue = computed(\n () => meta.value?.fieldValue as MultiData<SimpleData[][]>,\n );\n\n const rowDescription = computed(() =>\n spreadsheet.value.dataSet.getCustomFieldDescription(props.cell),\n );\n\n const rowName = computed(() => {\n const defaultRowName = spreadsheet.value.dataSet.getCustomRowFieldName(\n props.cell,\n );\n const customLabel = isFunction(props.label)\n ? props.label(props.cell, defaultRowName)\n : props.label;\n\n return customLabel ?? defaultRowName;\n });\n\n const colLeafNode = computed(() =>\n spreadsheet.value.facet.getColLeafNodeByIndex(meta.value.colIndex),\n );\n\n const derivedLabels = computed(() => {\n try {\n const [, ...labels] = JSON.parse(colLeafNode.value?.value!);\n\n return labels;\n } catch {\n return [];\n }\n });\n\n const valuesCfg = computed(\n () => spreadsheet.value.options.style?.dataCell?.valuesCfg,\n );\n\n const values = computed(() => {\n const firstValues = first(metaFieldValue.value?.values) || [\n metaFieldValue.value,\n ];\n\n return {\n value: firstValues[0],\n derivedValues: firstValues.slice(1) as SimpleData[],\n };\n });\n\n const originalValues = computed(() => {\n const originalValuesField = get(\n metaFieldValue.value,\n valuesCfg.value?.originalValueField!,\n ) as SimpleData[][];\n const firstOriginal = first(originalValuesField) || [values.value.value];\n\n return {\n originalValue: firstOriginal[0],\n derivedOriginalValues: firstOriginal.slice(1) as SimpleData[],\n };\n });\n\n const emptyPlaceholder = computed(() =>\n getEmptyPlaceholder(meta.value, spreadsheet.value.options.placeholder),\n );\n\n const shouldShowOriginalValue = computed(\n () => valuesCfg.value?.showOriginalValue || props.showOriginalValue,\n );\n\n const getDerivedValueInfo = (derivedValue: SimpleData, index: number) => {\n const isUnchanged = isUnchangedValue(\n derivedValue,\n values.value.value as SimpleData,\n );\n const isUp = !isUnchanged && isUpDataValue(derivedValue);\n const isDown = !isUnchanged && !isUp;\n const originalDerivedValue =\n originalValues.value.derivedOriginalValues[index];\n\n return { isUnchanged, isUp, isDown, originalDerivedValue };\n };\n\n return {\n tooltipCls,\n i18n,\n isEmpty,\n isNil,\n rowName,\n rowDescription,\n values,\n originalValues,\n derivedLabels,\n emptyPlaceholder,\n shouldShowOriginalValue,\n getDerivedValueInfo,\n };\n },\n});\n</script>\n\n<template>\n <div :class=\"[tooltipCls(), tooltipCls('data')]\">\n <div :class=\"tooltipCls('header')\">\n <span class=\"header-label\">{{ rowName }}</span>\n <span>{{ values.value ?? emptyPlaceholder }}</span>\n </div>\n\n <div v-if=\"shouldShowOriginalValue\" :class=\"tooltipCls('original-value')\">\n {{\n isNil(originalValues.originalValue)\n ? emptyPlaceholder\n : originalValues.originalValue\n }}\n </div>\n\n <template v-if=\"!isEmpty(values.derivedValues)\">\n <div :class=\"tooltipCls('divider')\" />\n <ul :class=\"tooltipCls('derived-values')\">\n <li\n v-for=\"(derivedValue, i) in values.derivedValues\"\n :key=\"i\"\n class=\"derived-value-item\"\n >\n <span class=\"derived-value-label\">{{ derivedLabels[i] }}</span>\n <span\n :class=\"[\n 'derived-value-group',\n {\n 'derived-value-trend-up': getDerivedValueInfo(derivedValue, i)\n .isUp,\n 'derived-value-trend-down': getDerivedValueInfo(derivedValue, i)\n .isDown,\n },\n ]\"\n >\n <span\n v-if=\"!getDerivedValueInfo(derivedValue, i).isUnchanged\"\n class=\"derived-value-trend-icon\"\n />\n <template\n v-if=\"\n renderDerivedValue?.(\n derivedValue,\n getDerivedValueInfo(derivedValue, i).originalDerivedValue,\n cell,\n )\n \"\n >\n {{\n renderDerivedValue(\n derivedValue,\n getDerivedValueInfo(derivedValue, i).originalDerivedValue,\n cell,\n )\n }}\n </template>\n <span v-else class=\"derived-value-content\">\n {{ derivedValue ?? emptyPlaceholder }}\n </span>\n </span>\n </li>\n </ul>\n </template>\n\n <div v-if=\"rowDescription\" :class=\"tooltipCls('description')\">\n <span :class=\"tooltipCls('description-label')\">{{ i18n('说明') }}</span>\n <span :class=\"tooltipCls('description-text')\">{{ rowDescription }}</span>\n </div>\n </div>\n</template>\n\n<style lang=\"less\">\n@import './index.less';\n</style>\n","<script lang=\"ts\">\nimport type { Node } from '@antv/s2';\nimport { i18n, getStrategySheetTooltipClsName as tooltipCls } from '@antv/s2';\nimport { isFunction } from 'lodash';\nimport { defineComponent, computed, type PropType } from 'vue';\nimport type { CustomTooltipProps } from './interface';\n\nexport default defineComponent({\n name: 'StrategySheetRowCellTooltip',\n props: {\n cell: {\n type: Object as PropType<CustomTooltipProps['cell']>,\n required: true,\n },\n label: {\n type: [Object, Function] as PropType<CustomTooltipProps['label']>,\n default: undefined,\n },\n },\n setup(props) {\n const meta = computed(() => props.cell.getMeta() as Node);\n\n const rowName = computed(() => {\n const { value } = meta.value;\n const customLabel = isFunction(props.label)\n ? props.label(props.cell, value)\n : props.label;\n\n return customLabel ?? value;\n });\n\n const description = computed(() => {\n const { field, spreadsheet, extra } = meta.value;\n\n return (\n spreadsheet.dataSet.getFieldDescription(field) || extra?.['description']\n );\n });\n\n return {\n tooltipCls,\n i18n,\n rowName,\n description,\n };\n },\n});\n</script>\n\n<template>\n <div :class=\"[tooltipCls(), tooltipCls('row')]\">\n <div :class=\"tooltipCls('value')\">{{ rowName }}</div>\n <div v-if=\"description\" :class=\"tooltipCls('description')\">\n <span :class=\"tooltipCls('description-label')\">{{ i18n('说明') }}</span>\n <span :class=\"tooltipCls('description-text')\">{{ description }}</span>\n </div>\n </div>\n</template>\n\n<style lang=\"less\">\n@import './index.less';\n</style>\n","<script setup lang=\"ts\">\nimport {\n DownOutlined,\n UpOutlined,\n VerticalAlignTopOutlined,\n} from '@ant-design/icons-vue';\nimport { ADVANCED_SORT_PRE_CLS } from '@antv/s2';\nimport { Card } from 'ant-design-vue';\nimport type { CustomSortProps } from './interface';\n\nconst props = defineProps<CustomSortProps>();\nconst emit = defineEmits<{\n (e: 'split-orders-change', orders: string[]): void;\n}>();\n\nconst moveToTopHandler = (value: string) => {\n const res = [...props.splitOrders];\n const index = res.indexOf(value);\n\n if (index > 0) {\n res.splice(index, 1);\n res.unshift(value);\n emit('split-orders-change', res);\n }\n};\n\nconst moveUpHandler = (value: string) => {\n const res = [...props.splitOrders];\n const index = res.indexOf(value);\n\n if (index > 0) {\n res.splice(index, 1);\n res.splice(index - 1, 0, value);\n emit('split-orders-change', res);\n }\n};\n\nconst moveDownHandler = (value: string) => {\n const res = [...props.splitOrders];\n const index = res.indexOf(value);\n\n if (index < res.length - 1) {\n res.splice(index, 1);\n res.splice(index + 1, 0, value);\n emit('split-orders-change', res);\n }\n};\n</script>\n\n<template>\n <Card :class=\"`${ADVANCED_SORT_PRE_CLS}-card-content`\">\n <li\n v-for=\"value in splitOrders\"\n :key=\"value\"\n :class=\"`${ADVANCED_SORT_PRE_CLS}-split-value`\"\n :title=\"value\"\n >\n <span class=\"split-text\">{{ value }}</span>\n <span\n :class=\"`${ADVANCED_SORT_PRE_CLS}-split-icon`\"\n @click=\"() => moveToTopHandler(value)\"\n >\n <VerticalAlignTopOutlined />\n </span>\n <span\n :class=\"`${ADVANCED_SORT_PRE_CLS}-split-icon`\"\n @click=\"() => moveDownHandler(value)\"\n >\n <DownOutlined />\n </span>\n <span\n :class=\"`${ADVANCED_SORT_PRE_CLS}-split-icon`\"\n @click=\"() => moveUpHandler(value)\"\n >\n <UpOutlined />\n </span>\n </li>\n </Card>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, watch } from 'vue';\nimport {\n Button,\n Form,\n Layout,\n Modal,\n Select,\n Cascader,\n Radio,\n type FormInstance,\n} from 'ant-design-vue';\nimport { OrderedListOutlined, DeleteOutlined } from '@ant-design/icons-vue';\nimport {\n ADVANCED_SORT_PRE_CLS,\n EXTRA_FIELD,\n TOTAL_VALUE,\n getSortMethod,\n getSortRuleOptions,\n i18n,\n type SortParam,\n} from '@antv/s2';\nimport {\n filter,\n find,\n forEach,\n includes,\n isEqual,\n keys,\n map,\n toUpper,\n uniq,\n} from 'lodash';\nimport type {\n AdvancedSortProps,\n Dimension,\n RuleItem,\n RuleValue,\n} from './interface';\nimport CustomSort from './CustomSort.vue';\n\nconst props = defineProps<AdvancedSortProps>();\n\nconst emit = defineEmits<{\n (e: 'sort-confirm', ruleValues: RuleValue[], sortParams: SortParam[]): void;\n (e: 'sort-open'): void;\n}>();\n\nconst { Sider, Content } = Layout;\n\nconst isSortVisible = ref(false);\nconst isCustomVisible = ref(false);\nconst ruleList = ref<RuleItem[]>([]);\nconst rules = ref<any[]>([]);\nconst manualDimensionList = ref<Dimension[]>([]);\nconst dimensionList = ref<Dimension[]>([]);\nconst sortBy = ref<string[]>([]);\nconst currentDimension = ref<Dimension>();\nconst formRef = ref<FormInstance>();\nconst formData = ref<Record<string, any>>({});\n\n// Constants\nconst SORT_RULE_OPTIONS = getSortRuleOptions();\nconst SORT_METHOD = getSortMethod();\n\nconst handleModal = () => {\n isSortVisible.value = !isSortVisible.value;\n};\n\nconst sortClick = () => {\n emit('sort-open');\n handleModal();\n};\n\nconst handleCustom = () => {\n isCustomVisible.value = !isCustomVisible.value;\n};\n\nconst handleDimension = (dimension: Dimension) => {\n if (!find(ruleList.value, (item) => item.field === dimension.field)) {\n currentDimension.value = dimension;\n formData.value[dimension.field] = {\n name: dimension.name,\n rule: ['sortMethod'],\n sortMethod: 'ASC',\n sortBy: [],\n };\n ruleList.value = [...ruleList.value, dimension as unknown as RuleItem];\n }\n\n dimensionList.value = filter(\n dimensionList.value,\n (item) => item.field !== dimension.field,\n );\n};\n\nconst handleCustomSort = (\n dimension: RuleItem | Dimension,\n splitOrders?: string[],\n) => {\n handleCustom();\n // Find the correct Dimension object to ensure type safety\n const correctDimension = find(\n manualDimensionList.value,\n (item) => item.field === dimension.field,\n );\n\n if (correctDimension) {\n currentDimension.value = correctDimension;\n }\n\n if (splitOrders && splitOrders.length > 0) {\n sortBy.value = uniq(splitOrders);\n } else {\n const list = correctDimension?.list || [];\n\n sortBy.value = uniq(list);\n }\n};\n\nconst customSort = () => {\n handleCustom();\n // Update formData directly since we are using v-model / form binding\n // In React strict controlled form: form.setFieldsValue.\n // In Vue we might need to manually update if we use v-model on form items\n // But here we might rely on re-initializing form state or reactivity.\n\n if (!currentDimension.value) {\n return;\n }\n\n const field = currentDimension.value.field;\n\n // Update local state that reflects back to form\n if (!formData.value[field]) {\n formData.value[field] = {};\n }\n\n formData.value[field].sortBy = sortBy.value;\n\n // Update ruleList 's view\n ruleList.value = map(ruleList.value, (item) => {\n if (item.field === field) {\n return {\n ...item,\n // Force rule to sortBy\n rule: ['sortBy'],\n sortBy: sortBy.value,\n sortMethod: undefined,\n sortByMeasure: undefined,\n };\n }\n\n return item;\n }) as RuleItem[];\n\n // Also update Form data explicitly if needed (Antdv Form)\n if (formRef.value) {\n formRef.value.validateFields();\n }\n};\n\nconst customCancel = () => {\n handleCustom();\n};\n\nconst deleteRule = (dimension: RuleItem | Dimension) => {\n ruleList.value = filter(\n ruleList.value,\n (item) => item.field !== dimension.field,\n );\n const originalDimension = find(\n manualDimensionList.value,\n (item) => item.field === dimension.field,\n );\n\n if (originalDimension) {\n dimensionList.value = [...dimensionList.value, originalDimension];\n }\n\n // Clean up form data\n delete formData.value[dimension.field];\n};\n\nconst onFinish = () => {\n const ruleValues: RuleValue[] = [];\n const currentSortParams: SortParam[] = [];\n\n // Use formData.value instead of form.getFieldsValue() if we bind v-model\n // Or use formRef.value.getFieldsValue(). simpler to trust reactive state here,\n // but for Antdv Form, getting all fields value is safer.\n\n // Let's assume formData.value is sync with UI via v-model\n const formValues = formData.value;\n const { values = [] } = props.sheetInstance.dataCfg.fields;\n\n forEach(keys(formValues), (field) => {\n // Check if valid rule in list\n if (!find(ruleList.value, (r) => r.field === field)) {\n return;\n }\n\n const { sortMethod, rule = [], sortBy: currentSortBy } = formValues[field];\n\n // Default fallback\n const safeRule = rule || ['sortMethod'];\n\n const current: SortParam = { sortFieldId: field };\n\n if (safeRule[0] === 'sortByMeasure' || safeRule[1]) {\n if (!includes(values, safeRule[1])) {\n current.sortByMeasure = TOTAL_VALUE;\n } else {\n current.sortByMeasure = safeRule[1];\n }\n\n current.sortMethod = sortMethod;\n current.query = {\n [EXTRA_FIELD]: safeRule[1],\n };\n } else if (safeRule[0] === 'sortBy') {\n current.sortBy = currentSortBy;\n } else {\n current.sortMethod = sortMethod;\n }\n\n ruleValues.push({\n field,\n name: '',\n sortMethod: formValues[field].sortMethod,\n sortBy: formValues[field].sortBy,\n sortByMeasure: formValues[field].sortByMeasure,\n rule: formValues[field].rule,\n });\n currentSortParams.push(current);\n });\n\n emit('sort-confirm', ruleValues, currentSortParams);\n handleModal();\n};\n\nconst getDimensionList = (list: Dimension[]) =>\n filter(\n list,\n (item: Dimension) =>\n !find(\n props.sortParams,\n (sortParam) => sortParam.sortFieldId === item.field,\n ),\n );\n\nconst getManualDimensionList = (): Dimension[] => {\n if (props.dimensions) {\n return props.dimensions;\n }\n\n const { fields = {} } = props.sheetInstance.dataCfg || {};\n const { rows = [], columns = [] } = fields;\n\n return map([...rows, ...columns], (item: any) => {\n const name = typeof item === 'string' ? item : item.field;\n\n return {\n field: item,\n name: props.sheetInstance.dataSet.getFieldName(name),\n list: props.sheetInstance.dataSet.getDimensionValues(name),\n };\n }) as unknown as Dimension[];\n};\n\nconst getRuleOptions = () => {\n if (props.ruleOptions) {\n return props.ruleOptions;\n }\n\n return map(SORT_RULE_OPTIONS, (item) => {\n if (item.value === 'sortByMeasure') {\n const { values = [] } = props.sheetInstance.dataCfg.fields || {};\n\n item.children = map(values, (field) => {\n return {\n label: props.sheetInstance.dataSet.getFieldName(field),\n value: field,\n };\n });\n }\n\n return item;\n });\n};\n\nconst getRuleList = (): RuleItem[] =>\n map(props.sortParams, (item) => {\n const {\n sortFieldId,\n sortMethod,\n sortBy: currentSortBy,\n sortByMeasure,\n } = item;\n let rule: string[];\n\n if (currentSortBy) {\n rule = ['sortBy'];\n } else if (sortByMeasure) {\n rule = ['sortByMeasure', sortByMeasure];\n } else {\n rule = ['sortMethod'];\n }\n\n return {\n field: sortFieldId,\n name: props.sheetInstance.dataSet.getFieldName(sortFieldId),\n rule,\n sortMethod,\n sortBy: currentSortBy,\n sortByMeasure,\n };\n }) as RuleItem[];\n\nwatch(isSortVisible, (val) => {\n if (val) {\n const initRuleList = getRuleList();\n const manualDimensions = getManualDimensionList();\n const initDimensionList = getDimensionList(manualDimensions);\n const initRuleOptions = getRuleOptions();\n\n ruleList.value = initRuleList;\n manualDimensionList.value = manualDimensions;\n dimensionList.value = initDimensionList;\n rules.value = initRuleOptions;\n\n // Initialize form data\n const newFormData: Record<string, any> = {};\n\n initRuleList.forEach((item) => {\n newFormData[item.field] = {\n name: item.name,\n rule: item.rule,\n sortMethod: item.sortMethod ? toUpper(item.sortMethod) : 'ASC',\n sortBy: item.sortBy,\n };\n });\n formData.value = newFormData;\n }\n});\n\nconst onSplitOrdersChange = (orders: string[]) => {\n sortBy.value = orders;\n};\n</script>\n\n<template>\n <div :class=\"[ADVANCED_SORT_PRE_CLS, className]\">\n <Button\n size=\"small\"\n :class=\"`${ADVANCED_SORT_PRE_CLS}-btn`\"\n @click=\"sortClick\"\n >\n <template #icon>\n <component :is=\"icon || OrderedListOutlined\" />\n </template>\n {{ text || i18n('高级排序') }}\n </Button>\n\n <Modal\n :title=\"text || i18n('高级排序')\"\n :open=\"isSortVisible\"\n :okText=\"i18n('确定')\"\n :cancelText=\"i18n('取消')\"\n :destroyOnClose=\"true\"\n :class=\"`${ADVANCED_SORT_PRE_CLS}-modal`\"\n @ok=\"onFinish\"\n @cancel=\"handleModal\"\n >\n <Layout>\n <Sider width=\"120\" :class=\"`${ADVANCED_SORT_PRE_CLS}-sider-layout`\">\n <div :class=\"`${ADVANCED_SORT_PRE_CLS}-title`\">\n {{ i18n('可选字段') }}\n </div>\n <div>\n <div\n v-for=\"item in dimensionList\"\n :key=\"item.field\"\n :class=\"`${ADVANCED_SORT_PRE_CLS}-dimension-item`\"\n :title=\"item.name\"\n @click=\"handleDimension(item)\"\n >\n {{ item.name }}\n </div>\n </div>\n </Sider>\n <Content :class=\"`${ADVANCED_SORT_PRE_CLS}-content-layout`\">\n <div :class=\"`${ADVANCED_SORT_PRE_CLS}-title`\">\n {{ ruleText || i18n('按以下规则进行排序(优先级由低到高)') }}\n </div>\n <Form\n ref=\"formRef\"\n :model=\"formData\"\n name=\"form\"\n :class=\"`${ADVANCED_SORT_PRE_CLS}-custom-form`\"\n >\n <div v-for=\"item in ruleList\" :key=\"item.field\">\n <!-- Field Name (ReadOnly) -->\n <Form.Item style=\"margin-bottom: 4px\">\n <Select\n :value=\"item.name\"\n disabled\n :class=\"`${ADVANCED_SORT_PRE_CLS}-select`\"\n size=\"small\"\n style=\"width: 120px\"\n />\n <span :class=\"`${ADVANCED_SORT_PRE_CLS}-field-prefix`\">\n {{ i18n('按') }}\n </span>\n\n <!-- Rule Cascader -->\n <Form.Item :name=\"[item.field, 'rule']\" noStyle>\n <Cascader\n v-model:value=\"formData[item.field].rule\"\n :options=\"rules\"\n expandTrigger=\"hover\"\n size=\"small\"\n :allowClear=\"false\"\n style=\"width: 120px; margin-left: 8px\"\n />\n </Form.Item>\n\n <!-- Conditional Render based on rule -->\n <template\n v-if=\"!isEqual(formData[item.field].rule, ['sortBy'])\"\n >\n <Form.Item :name=\"[item.field, 'sortMethod']\" noStyle>\n <Radio.Group\n v-model:value=\"formData[item.field].sortMethod\"\n :class=\"`${ADVANCED_SORT_PRE_CLS}-rule-end`\"\n >\n <Radio\n v-for=\"method in SORT_METHOD\"\n :key=\"method.value\"\n :value=\"method.value\"\n >\n {{ method.name }}\n </Radio>\n </Radio.Group>\n </Form.Item>\n </template>\n <template v-else>\n <a\n :class=\"`${ADVANCED_SORT_PRE_CLS}-rule-end`\"\n @click=\"handleCustomSort(item, formData[item.field].sortBy)\"\n >\n {{ i18n('设置顺序') }}\n </a>\n <!-- Hidden sortBy field storage -->\n <!-- formData[item.field].sortBy is stored in state -->\n </template>\n\n <DeleteOutlined\n :class=\"`${ADVANCED_SORT_PRE_CLS}-rule-end-delete`\"\n @click=\"deleteRule(item)\"\n />\n </Form.Item>\n </div>\n </Form>\n </Content>\n </Layout>\n </Modal>\n\n <Modal\n :title=\"i18n('手动排序')\"\n :open=\"isCustomVisible\"\n :okText=\"i18n('确定')\"\n :cancelText=\"i18n('取消')\"\n :destroyOnClose=\"true\"\n :class=\"`${ADVANCED_SORT_PRE_CLS}-custom-modal`\"\n @ok=\"customSort\"\n @cancel=\"customCancel\"\n >\n <CustomSort\n :splitOrders=\"sortBy\"\n @split-orders-change=\"onSplitOrdersChange\"\n />\n </Modal>\n </div>\n</template>\n\n<style lang=\"less\">\n@import './index.less';\n</style>\n","<script setup lang=\"ts\">\nimport { S2_PREFIX_CLS } from '@antv/s2';\nimport { RadioGroup as ARadioGroup } from 'ant-design-vue';\nimport { computed } from 'vue';\nimport type { RadioGroupProps as AntdRadioGroupProps } from 'ant-design-vue';\n\nconst PRE_CLASS = `${S2_PREFIX_CLS}-radio-group`;\n\nconst props = withDefaults(\n defineProps<{\n label?: string;\n onlyIcon?: boolean;\n options?: AntdRadioGroupProps['options'];\n value?: string | number | boolean;\n optionType?: 'default' | 'button';\n size?: 'large' | 'default' | 'small';\n }>(),\n {\n label: '',\n onlyIcon: false,\n optionType: 'default',\n size: 'small',\n },\n);\n\nconst emit = defineEmits<{\n change: [event: any];\n}>();\n\nconst classNames = computed(() => {\n return {\n [PRE_CLASS]: true,\n [`${PRE_CLASS}-icon-only`]: props.onlyIcon,\n };\n});\n\nconst handleChange = (e: any) => {\n const value = e?.target?.value ?? e;\n\n emit('change', { target: { value } });\n};\n</script>\n\n<template>\n <div :class=\"classNames\">\n <span :class=\"`${PRE_CLASS}-label`\">{{ label }}</span>\n <span :class=\"`${PRE_CLASS}-content`\">\n <ARadioGroup\n :size=\"size\"\n :value=\"value\"\n :options=\"options\"\n :option-type=\"optionType\"\n @change=\"handleChange\"\n @update:value=\"handleChange\"\n />\n <slot name=\"extra\" />\n </span>\n </div>\n</template>\n\n<style lang=\"less\">\n@import '@antv/s2/esm/styles/variables.less';\n\n.@{s2-cls-prefix}-radio-group {\n color: #3572f9;\n cursor: pointer;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n\n &.@{s2-cls-prefix}-radio-group-icon-only {\n .ant-radio-group {\n .ant-radio-button-wrapper {\n border: none;\n background: transparent;\n box-shadow: none;\n\n &::before {\n display: none;\n }\n\n &-checked {\n background: transparent;\n border: none;\n box-shadow: none;\n outline: none;\n\n &:focus-visible,\n &:focus-within {\n border: none;\n outline: none;\n }\n }\n }\n }\n }\n\n & + .@{s2-cls-prefix}-radio-group {\n margin-top: 6px;\n }\n\n &-label {\n flex: 1 0;\n flex-wrap: nowrap;\n display: inline-flex;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n margin-right: 12px;\n }\n\n &-content {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { S2_PREFIX_CLS, i18n } from '@antv/s2';\nimport { ReloadOutlined } from '@ant-design/icons-vue';\n\nconst PRE_CLASS = `${S2_PREFIX_CLS}-reset-btn`;\n\nwithDefaults(\n defineProps<{\n title?: string;\n }>(),\n {\n title: () => i18n('重置'),\n },\n);\n\nconst emit = defineEmits<{\n click: [event: MouseEvent];\n}>();\n\nconst handleClick = (event: MouseEvent) => {\n emit('click', event);\n};\n</script>\n\n<template>\n <span :class=\"PRE_CLASS\" @click=\"handleClick\">\n <ReloadOutlined :class=\"`${PRE_CLASS}-icon`\" />\n <span :class=\"`${PRE_CLASS}-text`\">{{ title }}</span>\n </span>\n</template>\n\n<style lang=\"less\">\n@import '@antv/s2/esm/styles/variables.less';\n\n.@{s2-cls-prefix}-reset-btn {\n color: #3572f9;\n cursor: pointer;\n padding-left: 8px;\n\n &-text {\n margin-left: 4px;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { S2_PREFIX_CLS } from '@antv/s2';\nimport { CaretRightOutlined } from '@ant-design/icons-vue';\nimport { Collapse, CollapsePanel } from 'ant-design-vue';\nimport { computed, ref } from 'vue';\nimport { ResetButton } from '../reset-button';\n\nconst ACTIVE_KEY = 'RESET_GROUP';\nconst PRE_CLASS = `${S2_PREFIX_CLS}-reset-group`;\n\nconst props = withDefaults(\n defineProps<{\n title?: string;\n defaultCollapsed?: boolean;\n class?: string;\n }>(),\n {\n title: '',\n defaultCollapsed: false,\n class: '',\n },\n);\n\nconst emit = defineEmits<{\n reset: [];\n}>();\n\nconst activeKey = ref(props.defaultCollapsed ? [] : [ACTIVE_KEY]);\n\nconst classNames = computed(() => {\n return [PRE_CLASS, props.class].filter(Boolean).join(' ');\n});\n\nconst handleResetClick = (e: MouseEvent) => {\n e.stopPropagation();\n emit('reset');\n};\n</script>\n\n<template>\n <Collapse v-model:activeKey=\"activeKey\" :bordered=\"false\" :class=\"classNames\">\n <template #expandIcon=\"{ isActive }\">\n <CaretRightOutlined :rotate=\"isActive ? 90 : 0\" />\n </template>\n <CollapsePanel\n :key=\"ACTIVE_KEY\"\n :header=\"title\"\n :class=\"`${PRE_CLASS}-panel`\"\n >\n <template #extra>\n <ResetButton @click=\"handleResetClick\" />\n </template>\n <slot />\n </CollapsePanel>\n </Collapse>\n</template>\n\n<style lang=\"less\">\n@import '@antv/s2/esm/styles/variables.less';\n\n.@{s2-cls-prefix}-reset-group {\n width: 340px;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { S2_PREFIX_CLS } from '@antv/s2';\nimport { Tooltip } from 'ant-design-vue';\nimport { computed } from 'vue';\n\nconst PRE_CLASS = `${S2_PREFIX_CLS}-tooltip-wrapper`;\n\nconst props = withDefaults(\n defineProps<{\n title?: string;\n class?: string;\n }>(),\n {\n title: '',\n class: '',\n },\n);\n\nconst classNames = computed(() => {\n return [PRE_CLASS, props.class].filter(Boolean).join(' ');\n});\n</script>\n\n<template>\n <Tooltip :title=\"title\" :class=\"classNames\">\n <slot />\n </Tooltip>\n</template>\n","import { h, type FunctionalComponent, type SVGAttributes } from 'vue';\n\nexport const ColIcon: FunctionalComponent<SVGAttributes> = (props) => {\n return h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '12',\n height: '12',\n class: 'antv-s2-icon',\n ...props,\n },\n [\n h('g', { fill: 'currentColor', fillRule: 'nonzero' }, [\n h('path', {\n d: 'M4.457 11.229h6.772V3.77H4.457zm-.686 0V3.77h-3v7.543h3zM11.23 3V.771H.77V3zM12 0v12H0V0z',\n }),\n h('path', { d: 'M.771.771H11.23V3H.77z' }),\n ]),\n ],\n );\n};\n\nexport const RowIcon: FunctionalComponent<SVGAttributes> = (props) => {\n return h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '12',\n height: '12',\n class: 'antv-s2-icon',\n ...props,\n },\n [\n h('g', { fill: 'currentColor', fillRule: 'evenodd' }, [\n h('path', {\n d: 'M.771 3.771h3v1.886h-3zm0 2.572h3V8.57h-3zM.771 9h3v2.229h-3z',\n }),\n h('path', {\n d: 'M.771 9v2.229H11.23V3.77H.77v1.886h3V3.771h.772v7.543H3.77V9.086h-3zm0-.771h3V6.343h-3zM11.23 3V.771H.77V3zM12 0v12H0V0z',\n }),\n ]),\n ],\n );\n};\n\nexport const ValueIcon: FunctionalComponent<SVGAttributes> = (props) => {\n return h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '12',\n height: '12',\n class: 'antv-s2-icon',\n ...props,\n },\n [\n h('g', { fill: 'currentColor', fillRule: 'evenodd' }, [\n h('path', { d: 'M4.229 3.771h7v8h-7z' }),\n h('path', {\n d: 'M4.457 11.229h6.772V3.77H4.457zm-.686 0V3.77h-3v7.543h3zM11.23 3V.771H.77V3zM12 0v12H0V0z',\n }),\n ]),\n ],\n );\n};\n\nexport const CalendarIcon: FunctionalComponent<SVGAttributes> = (props) => {\n return h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '12.6',\n height: '12.6',\n class: 'antv-s2-icon',\n viewBox: '0 0 1024 1024',\n ...props,\n },\n [\n h('path', {\n fill: 'currentColor',\n d: 'M950.016 898.016 744 693.024q88-107.008 88-244.992 0-159.008-112.512-271.488T448 64.032 176.512 176.544 64 448.032 176.512 719.52 448 832.032q138.016 0 244.992-88l206.016 206.016q10.016 10.016 24.992 10.016t26.016-10.016q10.016-11.008 10.016-26.016t-10.016-26.016M568.992 736Q512 760 448 760t-120.992-24q-56-24-99.488-67.488t-66.496-99.488q-24.992-56.992-24.992-120.992t24.992-120.992q23.008-56 66.496-99.488t99.488-67.488q56.992-24 120.992-24t120.992 24q56 24 99.488 67.488t67.488 99.488q24 56.992 24 120.992t-24 120.992q-24 56-67.488 99.488T568.992 736',\n }),\n ],\n );\n};\n\nexport const LocationIcon: FunctionalComponent<SVGAttributes> = (props) => {\n return h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '12.6',\n height: '12.6',\n class: 'antv-s2-icon',\n viewBox: '0 0 1024 1024',\n ...props,\n },\n [\n h('path', {\n fill: 'currentColor',\n d: 'M511.804 222.338q-85.675 0-145.86 60.184-60.183 60.185-60.184 145.337 0 85.153 60.185 145.337 60.183 60.185 145.859 60.185 85.674 0 145.859-60.185 60.184-60.184 60.184-145.337t-60.184-145.337-145.86-60.184zm0 338.619q-55.093 0-93.835-38.774t-38.773-93.834q-.033-55.061 38.773-94.357 38.808-39.296 93.835-39.263 55.028.033 93.834 39.263t38.774 94.357q-.033 55.125-38.774 93.834t-93.834 38.774m366.165-295.766q-31.626-63.252-87.73-111.165-56.106-47.912-127.484-75.491Q590.331 52 511.804 52q-78.528 0-151.963 26.535-70.367 27.546-126.472 75.491t-87.731 111.165Q113 330.468 113 400.835q0 98.926 47.945 200.92 39.787 84.662 111.165 167.27 93.834 110.152 216.227 195.827Q498.553 972 511.282 972q12.727 0 23.956-7.148 122.392-86.686 216.227-195.828 71.412-83.65 111.165-167.27 47.945-101.993 47.945-200.919 0-70.367-32.638-135.644zm-40.797 136.656q0 82.606-40.798 169.326-34.693 74.447-99.97 150.95-78.527 91.812-184.6 169.326-106.075-77.514-184.6-169.326-64.265-76.503-99.971-150.95-40.797-86.686-40.797-170.338 0-54.048 24.478-104.05 25.491-48.957 70.368-87.73 45.889-39.786 104.05-62.209 61.195-22.455 126.472-22.455t126.472 22.455q58.129 22.455 104.05 62.208 45.889 38.775 70.367 87.731 24.48 51.014 24.479 105.062',\n }),\n ],\n );\n};\n\nexport const TextIcon: FunctionalComponent<SVGAttributes> = (props) => {\n return h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '12.6',\n height: '12.6',\n class: 'antv-s2-icon',\n viewBox: '0 0 1024 1024',\n ...props,\n },\n [\n h('path', {\n fill: 'currentColor',\n d: 'M86.016 805.888H0l143.872-529.92h79.36l144.896 529.92h-91.136l-29.696-109.056H115.2S85.504 805.888 86.016 805.888M225.28 613.376 181.248 455.68 138.24 613.376zM519.168 430.08c24.576-16.384 47.616-25.088 69.12-25.088 30.72 0 58.368 14.848 81.92 44.032 24.064 29.184 35.328 72.192 35.328 128.512 0 44.032-7.168 83.456-22.528 118.272-14.848 34.816-35.328 62.976-60.416 83.456-26.112 20.992-57.856 31.232-95.232 31.232-15.36-.512-31.232-1.536-46.592-3.584-4.096-.512-8.704-1.024-12.8-1.536h-66.56V256h81.92v206.336c11.264-12.8 23.04-23.552 35.84-32.256M483.84 587.264v135.168c13.824 3.072 26.112 4.608 37.376 4.608 27.648 0 50.176-11.776 69.12-36.352 19.456-25.088 28.672-59.392 28.672-104.96 0-32.256-5.12-55.296-14.848-70.144-9.216-13.824-18.432-19.968-28.672-19.968-12.288 0-27.136 7.68-44.544 24.064-16.896 16.896-32.768 39.424-47.104 67.584m529.92 207.36c-36.864 14.336-71.68 20.992-104.96 20.992-32.768.512-64.512-9.216-91.648-27.136-27.136-18.432-48.64-44.032-62.464-73.728-14.848-30.72-22.528-65.536-22.528-104.448 0-58.88 16.896-108.032 51.2-146.944 33.792-38.912 75.264-58.88 123.392-58.88 34.304 0 70.144 7.168 108.032 21.504l10.24 4.096v95.232l-20.992-10.752c-34.816-17.92-65.536-26.624-92.16-26.624-16.896 0-32.768 4.608-47.104 13.824-13.824 8.704-25.088 23.04-32.768 42.496-8.192 19.968-12.288 41.472-12.288 63.488 0 28.672 7.68 55.808 24.064 82.432 14.848 24.576 37.888 36.352 71.168 36.352 10.752 0 21.504-1.024 31.744-2.56 9.728-1.536 29.696-8.192 58.88-18.944l19.456-7.68v92.672z',\n }),\n ],\n );\n};\n","<script setup lang=\"ts\">\nimport { ref, watch, computed, h } from 'vue';\nimport { Button, Empty, Input, Menu, type MenuProps } from 'ant-design-vue';\nimport { SearchOutlined } from '@ant-design/icons-vue';\nimport { DRILL_DOWN_PRE_CLASS, i18n } from '@antv/s2';\nimport { isEmpty } from 'lodash';\nimport { CalendarIcon, LocationIcon, TextIcon } from '../common/icons';\nimport type { DrillDownDataSet, DrillDownProps } from './interface';\n\nconst props = withDefaults(defineProps<DrillDownProps>(), {\n title: () => i18n('选择下钻维度'),\n clearText: () => i18n('恢复默认'),\n searchText: () => i18n('搜索字段'),\n drillFields: () => [],\n dataSet: () => [],\n});\n\nconst emit = defineEmits<{\n (e: 'update:drillFields', val: string[]): void;\n}>();\n\nconst DRILL_DOWN_ICON_MAP: Record<string, any> = {\n text: h(TextIcon),\n location: h(LocationIcon),\n date: h(CalendarIcon),\n};\n\nconst getOptions = () => {\n return props.dataSet.map((item) => {\n const newItem = { ...item };\n\n newItem.disabled = !!(\n props.disabledFields && props.disabledFields.includes(item.value)\n );\n\n return newItem;\n });\n};\n\nconst options = ref<DrillDownDataSet[]>(getOptions());\n\nwatch(\n () => props.disabledFields,\n () => {\n options.value = getOptions();\n },\n { deep: true },\n);\n\nconst handleSearch = (e: any) => {\n const { value } = e.target;\n\n if (!value) {\n options.value = getOptions();\n } else {\n const reg = new RegExp(value, 'gi');\n const result = getOptions().filter((item) => reg.test(item.name));\n\n options.value = result;\n }\n};\n\nconst handleSelect = (info: any) => {\n const { selectedKeys } = info;\n\n emit('update:drillFields', selectedKeys);\n};\n\nconst handleClear = (e: MouseEvent) => {\n e.stopPropagation();\n emit('update:drillFields', []);\n};\n\nconst menuItems = computed<MenuProps['items']>(() =>\n options.value.map((option) => ({\n key: option.value,\n label: option.name,\n disabled: option.disabled,\n class: `${DRILL_DOWN_PRE_CLASS}-menu-item`,\n icon: option.icon ? option.icon : DRILL_DOWN_ICON_MAP[option.type!],\n })),\n);\n\nconst selectedKeys = computed(() => props.drillFields);\n</script>\n\n<template>\n <div :class=\"[DRILL_DOWN_PRE_CLASS, className]\">\n <header :class=\"`${DRILL_DOWN_PRE_CLASS}-header`\">\n <div :class=\"`${DRILL_DOWN_PRE_CLASS}-header-title`\">{{ title }}</div>\n <Button type=\"link\" :disabled=\"isEmpty(drillFields)\" @click=\"handleClear\">\n {{ clearText }}\n </Button>\n </header>\n <Input\n :class=\"`${DRILL_DOWN_PRE_CLASS}-search`\"\n :placeholder=\"searchText\"\n @change=\"handleSearch\"\n @pressEnter=\"handleSearch\"\n :allowClear=\"true\"\n >\n <template #prefix>\n <SearchOutlined />\n </template>\n </Input>\n\n <Empty\n v-if=\"isEmpty(options)\"\n :imageStyle=\"{ height: '64px' }\"\n :class=\"`${DRILL_DOWN_PRE_CLASS}-empty`\"\n />\n\n <slot name=\"extra\">\n <!-- Prop 'extra' fallback if needed, but slots are better -->\n </slot>\n\n <!-- Menu Render Logic -->\n <Menu\n :class=\"`${DRILL_DOWN_PRE_CLASS}-menu`\"\n :selectedKeys=\"selectedKeys\"\n @select=\"handleSelect\"\n :items=\"menuItems\"\n />\n </div>\n</template>\n\n<style lang=\"less\">\n@import './index.less';\n</style>\n","<script setup lang=\"ts\">\nimport {\n S2_PREFIX_CLS,\n i18n,\n asyncGetAllData,\n asyncGetAllPlainData,\n copyToClipboard,\n download,\n CSV_SEPARATOR,\n TAB_SEPARATOR,\n type CopyAllDataParams,\n type Copyable,\n} from '@antv/s2';\nimport { Button, Dropdown, Menu, type MenuProps } from 'ant-design-vue';\nimport { MoreOutlined } from '@ant-design/icons-vue';\nimport type { ExportProps } from './interface';\n\nconst props = withDefaults(defineProps<ExportProps>(), {\n async: true,\n copyOriginalText: () => i18n('复制原始数据'),\n copyFormatText: () => i18n('复制格式化数据'),\n downloadOriginalText: () => i18n('下载原始数据'),\n downloadFormatText: () => i18n('下载格式化数据'),\n fileName: 'sheet',\n});\n\nconst emit = defineEmits<{\n (e: 'copy-success', data: Copyable | string | undefined): void;\n (e: 'copy-error', error: unknown): void;\n (e: 'download-success', data: string): void;\n (e: 'download-error', error: unknown): void;\n}>();\n\nconst PRE_CLASS = `${S2_PREFIX_CLS}-export`;\n\nconst getData = async (\n split: string,\n isFormat: boolean,\n method: (\n params: CopyAllDataParams,\n ) => Promise<Copyable | string> | Copyable | string,\n) => {\n const params: CopyAllDataParams = {\n sheetInstance: props.sheetInstance,\n split,\n formatOptions: isFormat,\n async: props.async,\n };\n\n const data = await (props.customCopyMethod?.(params) || method?.(params));\n\n return data;\n};\n\nconst getPlainData = async (split: string, isFormat: boolean) => {\n const result = await getData(split, isFormat, asyncGetAllPlainData);\n\n return result as string;\n};\n\nconst getAllData = async (split: string, isFormat: boolean) => {\n const result = await getData(split, isFormat, asyncGetAllData);\n\n return result;\n};\n\nconst copyData = async (isFormat: boolean) => {\n const data = await getAllData(TAB_SEPARATOR, isFormat);\n\n copyToClipboard(data!, props.async)\n .then(() => {\n emit('copy-success', data);\n props.onCopySuccess?.(data);\n })\n .catch((error) => {\n // eslint-disable-next-line no-console\n console.error('copy failed: ', error);\n emit('copy-error', error);\n props.onCopyError?.(error);\n });\n};\n\nconst downloadData = async (isFormat: boolean) => {\n // 导出的是 csv 格式, 复制时需要以逗号分割 https://github.com/antvis/S2/issues/2701\n const data = await getPlainData(CSV_SEPARATOR, isFormat);\n\n try {\n download(data, props.fileName);\n emit('download-success', data);\n props.onDownloadSuccess?.(data);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('download failed: ', error);\n emit('download-error', error);\n props.onDownloadError?.(error);\n }\n};\n\nconst menuItems: MenuProps['items'] = [\n {\n key: 'copyOriginal',\n label: props.copyOriginalText,\n onClick: () => copyData(false),\n },\n {\n key: 'copyFormat',\n label: props.copyFormatText,\n onClick: () => copyData(true),\n },\n {\n key: 'downloadOriginal',\n label: props.downloadOriginalText,\n onClick: () => downloadData(false),\n },\n {\n key: 'downloadFormat',\n label: props.downloadFormatText,\n onClick: () => downloadData(true),\n },\n];\n</script>\n\n<template>\n <Dropdown :class=\"[PRE_CLASS, className]\" trigger=\"click\" v-bind=\"dropdown\">\n <template #overlay>\n <Menu :items=\"menuItems\" />\n </template>\n <slot>\n <Button type=\"text\">\n <template #icon>\n <MoreOutlined />\n </template>\n </Button>\n </slot>\n </Dropdown>\n</template>\n","<script setup lang=\"ts\">\nimport { strategyCopy } from '@antv/s2';\nimport Export from './Export.vue';\nimport type { ExportProps } from './interface';\n\nconst props = defineProps<ExportProps>();\n</script>\n\n<template>\n <Export v-bind=\"props\" :customCopyMethod=\"strategyCopy\">\n <template v-if=\"$slots['default']\" #default>\n <slot name=\"default\" />\n </template>\n </Export>\n</template>\n","<script setup lang=\"ts\">\nimport { S2_PREFIX_CLS } from '@antv/s2';\nimport { InputNumber } from 'ant-design-vue';\nimport { debounce } from 'lodash';\nimport { ref, watch, onBeforeUnmount } from 'vue';\n\nconst PRE_CLASS = `${S2_PREFIX_CLS}-frozen-input-number`;\n\nconst props = withDefaults(\n defineProps<{\n value?: number | null;\n disabled?: boolean;\n min?: number;\n max?: number;\n step?: number;\n size?: 'large' | 'middle' | 'small';\n }>(),\n {\n value: null,\n disabled: false,\n min: 0,\n max: 20,\n step: 1,\n size: 'small',\n },\n);\n\nconst emit = defineEmits<{\n change: [value: number | null];\n}>();\n\nconst inputValue = ref<number | string | null>(props.value);\n\nconst onDebounceChange = debounce((nextValue: number | null) => {\n emit('change', nextValue);\n}, 500);\n\nwatch(\n () => props.value,\n (newValue) => {\n if (newValue !== inputValue.value) {\n inputValue.value = newValue;\n }\n },\n);\n\nonBeforeUnmount(() => {\n onDebounceChange.cancel();\n});\n\nconst handleChange = (nextValue: number | string | null) => {\n inputValue.value = nextValue;\n onDebounceChange(nextValue as number | null);\n};\n</script>\n\n<template>\n <InputNumber\n :class=\"PRE_CLASS\"\n :size=\"size\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :precision=\"0\"\n :disabled=\"disabled\"\n :value=\"inputValue\"\n @change=\"handleChange\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { S2_PREFIX_CLS, i18n } from '@antv/s2';\nimport { Checkbox } from 'ant-design-vue';\nimport type { CheckboxProps } from 'ant-design-vue';\n\ntype CheckboxChangeEvent = Parameters<\n NonNullable<CheckboxProps['onChange']>\n>[0];\nimport { isEmpty } from 'lodash';\nimport { ref, computed } from 'vue';\nimport { ResetGroup } from '../common';\nimport FrozenInputNumber from './FrozenInputNumber.vue';\nimport type { FrozenPanelOptions } from './interface';\n\nconst PRE_CLASS = `${S2_PREFIX_CLS}-frozen-panel`;\n\nconst props = withDefaults(\n defineProps<{\n title?: string;\n defaultOptions?: Partial<FrozenPanelOptions>;\n defaultCollapsed?: boolean;\n inputNumberProps?: {\n min?: number;\n max?: number;\n step?: number;\n size?: 'large' | 'middle' | 'small';\n };\n showFrozenRowHeader?: boolean;\n showFrozenRow?: boolean;\n showFrozenCol?: boolean;\n }>(),\n {\n title: () => i18n('冻结行列头'),\n defaultCollapsed: false,\n showFrozenRowHeader: true,\n showFrozenRow: true,\n showFrozenCol: true,\n },\n);\n\nconst emit = defineEmits<{\n change: [options: FrozenPanelOptions];\n reset: [options: FrozenPanelOptions, prevOptions: FrozenPanelOptions];\n}>();\n\nconst options = ref<FrozenPanelOptions>({\n frozenRow: [],\n frozenCol: [],\n frozenRowHeader: true,\n ...props.defaultOptions,\n});\n\nconst defaultOptionsRef = ref<FrozenPanelOptions>({ ...options.value });\n\nconst onResetClick = () => {\n const prevOptions = { ...options.value };\n\n options.value = { ...defaultOptionsRef.value };\n emit('reset', defaultOptionsRef.value, prevOptions);\n};\n\nconst onRowHeaderChange = (event: CheckboxChangeEvent) => {\n options.value = {\n ...options.value,\n frozenRowHeader: event.target.checked,\n };\n emit('change', options.value);\n};\n\nconst BASE_FROZEN_CONFIG = computed(() => {\n return [\n {\n suffix: i18n('行'),\n field: 'frozenRow' as const,\n visible: props.showFrozenRow,\n },\n {\n suffix: i18n('列'),\n field: 'frozenCol' as const,\n visible: props.showFrozenCol,\n },\n ].filter(({ visible }) => visible);\n});\n\nconst isFieldEnabled = (field: 'frozenRow' | 'frozenCol') => {\n return !isEmpty(options.value[field]);\n};\n\nconst getLeadingCount = (field: 'frozenRow' | 'frozenCol') => {\n return options.value[field]?.[0];\n};\n\nconst getTrailingCount = (field: 'frozenRow' | 'frozenCol') => {\n return options.value[field]?.[1];\n};\n\nconst onGroupChange = (\n field: 'frozenRow' | 'frozenCol',\n value: [number?, number?],\n) => {\n options.value = {\n ...options.value,\n [field]: value,\n };\n emit('change', options.value);\n};\n\nconst onCheckboxChange = (\n field: 'frozenRow' | 'frozenCol',\n checked: boolean,\n) => {\n onGroupChange(field, checked ? [1, 1] : []);\n};\n\nconst onLeadingChange = (\n field: 'frozenRow' | 'frozenCol',\n val: number | null,\n) => {\n onGroupChange(field, [val ?? undefined, getTrailingCount(field)]);\n};\n\nconst onTrailingChange = (\n field: 'frozenRow' | 'frozenCol',\n val: number | null,\n) => {\n onGroupChange(field, [getLeadingCount(field), val ?? undefined]);\n};\n</script>\n\n<template>\n <ResetGroup\n :title=\"title\"\n :defaultCollapsed=\"defaultCollapsed\"\n :class=\"PRE_CLASS\"\n @reset=\"onResetClick\"\n >\n <div v-if=\"showFrozenRowHeader\" :class=\"`${PRE_CLASS}-container`\">\n <Checkbox :checked=\"options.frozenRowHeader\" @change=\"onRowHeaderChange\">\n {{ i18n('冻结行头') }}\n </Checkbox>\n </div>\n <div\n v-for=\"config in BASE_FROZEN_CONFIG\"\n :key=\"config.field\"\n :class=\"`${PRE_CLASS}-container`\"\n >\n <Checkbox\n :checked=\"isFieldEnabled(config.field)\"\n @change=\"\n (e: CheckboxChangeEvent) =>\n onCheckboxChange(config.field, e.target.checked!)\n \"\n >\n {{ i18n('冻结') }}{{ config.suffix }}\n </Checkbox>\n <span :class=\"`${PRE_CLASS}-container-group`\">\n {{ i18n('冻结前') }}\n <FrozenInputNumber\n :disabled=\"!isFieldEnabled(config.field)\"\n :value=\"getLeadingCount(config.field) ?? null\"\n v-bind=\"inputNumberProps\"\n @change=\"(val: number | null) => onLeadingChange(config.field, val)\"\n />\n {{ config.suffix }}\n </span>\n <span :class=\"`${PRE_CLASS}-container-group`\">\n {{ i18n('冻结后') }}\n <FrozenInputNumber\n :disabled=\"!isFieldEnabled(config.field)\"\n :value=\"getTrailingCount(config.field) ?? null\"\n v-bind=\"inputNumberProps\"\n @change=\"(val: number | null) => onTrailingChange(config.field, val)\"\n />\n {{ config.suffix }}\n </span>\n </div>\n <slot />\n </ResetGroup>\n</template>\n\n<style lang=\"less\">\n@import '@antv/s2/esm/styles/variables.less';\n\n.@{s2-cls-prefix}-frozen-panel {\n width: 400px;\n\n &-container {\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n &:not(:last-of-type) {\n margin-bottom: 6px;\n }\n\n &-group {\n color: rgba(0, 0, 0, 0.43);\n\n &:not(:last-of-type) {\n margin-right: 12px;\n }\n }\n\n .ant-checkbox-wrapper {\n margin-right: 50px;\n color: #535455;\n }\n\n .ant-input-number.@{s2-cls-prefix}-frozen-input-number {\n width: 50px;\n margin: 0 4px;\n border-radius: 4px;\n }\n }\n}\n</style>\n","export const SWITCHER_PREFIX_CLS = 'switcher';\n\nexport enum FieldType {\n Rows = 'rows',\n Cols = 'columns',\n Values = 'values',\n}\n\nexport enum DroppableType {\n Dimensions = 'dimensions',\n Measures = 'measures',\n Rows = 'rows',\n Cols = 'cols',\n}\n\nexport const SWITCHER_FIELDS = [\n FieldType.Rows,\n FieldType.Cols,\n FieldType.Values,\n];\n","import type { SheetType } from '@antv/s2';\nimport { getClassNameWithPrefix, i18n } from '@antv/s2';\nimport { filter, flatten, map, mapValues } from 'lodash';\nimport { ColIcon, RowIcon, ValueIcon } from '../common/icons';\nimport { DroppableType, FieldType, SWITCHER_PREFIX_CLS } from './constant';\nimport type {\n SwitcherFields,\n SwitcherItem,\n SwitcherResult,\n SwitcherResultItem,\n SwitcherState,\n} from './interface';\n\n// Replace React-Beautiful-DnD types with generic interface\nexport interface DraggableLocation {\n droppableId: string;\n index: number;\n}\n\n// 是否开启行列维度相互切换\nexport const getSwitcherConfig = (allowExchangeHeader = true) => {\n return {\n [FieldType.Rows]: {\n text: i18n('行头'),\n icon: RowIcon,\n droppableType: allowExchangeHeader\n ? DroppableType.Dimensions\n : DroppableType.Rows,\n },\n [FieldType.Cols]: {\n text: i18n('列头'),\n icon: ColIcon,\n droppableType: allowExchangeHeader\n ? DroppableType.Dimensions\n : DroppableType.Cols,\n },\n [FieldType.Values]: {\n text: i18n('值'),\n icon: ValueIcon,\n droppableType: DroppableType.Measures,\n },\n };\n};\n\nexport const getSwitcherClassName = (...classNames: string[]) =>\n getClassNameWithPrefix(SWITCHER_PREFIX_CLS, ...classNames);\n\nexport const getMainLayoutClassName = (sheetType: SheetType | undefined) => {\n switch (sheetType) {\n case 'table':\n return getSwitcherClassName('content', 'one-dimension');\n default:\n return getSwitcherClassName('content', 'three-dimensions');\n }\n};\n\nexport const shouldCrossRows = (\n sheetType: SheetType | undefined,\n type: FieldType,\n) => sheetType === 'table' || type === FieldType.Values;\n\nexport const checkItem = (\n source: SwitcherItem[] = [],\n checked: boolean,\n id: string,\n parentId?: string,\n): SwitcherItem[] => {\n const targetIndex = source.findIndex((item) => item.id === (parentId ?? id));\n\n if (targetIndex === -1) {\n return source;\n }\n\n const target: SwitcherItem = {\n ...source[targetIndex],\n };\n\n // 有 parentId 时,说明是第二层级的改变\n if (parentId) {\n target.children = map(target.children, (item) => {\n return {\n ...item,\n checked: item.id === id ? checked : item.checked,\n };\n });\n } else {\n target.checked = checked;\n target.children = map(target.children, (item) => {\n return {\n ...item,\n checked,\n };\n });\n }\n\n const newSource = [...source];\n\n newSource[targetIndex] = target;\n\n return newSource;\n};\n\nexport const generateSwitchResult = (state: SwitcherState): SwitcherResult => {\n const generateFieldResult = (\n items: SwitcherItem[] = [],\n ): SwitcherResultItem => {\n const flattenValues = (list: SwitcherItem[] = []): SwitcherItem[] =>\n flatten(\n map(list, ({ children, ...rest }) => [\n { ...rest },\n ...flattenValues(children),\n ]),\n );\n\n const allItems = flattenValues(items);\n\n // get all hidden values\n const hideItems = filter(\n allItems,\n (item: SwitcherItem) => item.checked === false,\n );\n\n return {\n items: allItems,\n hideItems,\n };\n };\n\n return {\n [FieldType.Rows]: generateFieldResult(state[FieldType.Rows]),\n [FieldType.Cols]: generateFieldResult(state[FieldType.Cols]),\n [FieldType.Values]: generateFieldResult(state[FieldType.Values]),\n };\n};\n\nexport const getSwitcherState = (fields: SwitcherFields): SwitcherState =>\n mapValues(fields, 'items');\n","/**!\n * Sortable 1.15.6\n * @author\tRubaXa <trash@rubaxa.org>\n * @author\towenm <owen23355@gmail.com>\n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.6\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n}\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\nfunction css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n}\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n\n /* jshint boss:true */\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n\n /* jshint boss:true */\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\nfunction getChildContainingRectFromElement(container, options, ghostEl) {\n var rect = {};\n Array.from(container.children).forEach(function (child) {\n var _rect$left, _rect$top, _rect$right, _rect$bottom;\n if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl) return;\n var childRect = getRect(child);\n rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left);\n rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top);\n rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right);\n rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom);\n });\n rect.width = rect.right - rect.left;\n rect.height = rect.bottom - rect.top;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n // If animating: compensate for current animation\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n target.toRect = toRect;\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n }\n\n // if fromRect != toRect: animate\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n if (!time) {\n time = _this.options.animation;\n }\n _this.animate(target, animatingRect, toRect, time);\n }\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\nfunction repaint(target) {\n return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n this.eventCanceled = false;\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return;\n // Fire global events if it exists in this sortable\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n\n // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized;\n\n // Add default options from plugin\n _extends(defaults, initialized.defaults);\n });\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return;\n\n // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n\n _silent = false,\n savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return;\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n },\n /**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n this.el = el; // root element\n this.options = options = _extends({}, options);\n\n // Export instance\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n // Disabled on Safari: #1571; Enabled on Safari IOS: #2244\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && (!Safari || IOS),\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults);\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n sortables.push(this.el);\n\n // Restore sorting\n options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n // Add animation state manager\n _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n\n // Safari ignores further event handling after mousedown\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n target = closest(target, options.draggable, el, false);\n if (target && target.animated) {\n return;\n }\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable);\n\n // Check filter\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.preventDefault();\n return; // cancel dnd\n }\n }\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n }\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n });\n\n // Chosen item\n toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n if (options.supportPointer) {\n on(ownerDocument, 'pointerup', _this._onDrop);\n // Native D&D triggers pointercancel\n !this.nativeDraggable && on(ownerDocument, 'pointercancel', _this._onDrop);\n } else {\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop);\n }\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n pluginEvent('delayStart', this, {\n evt: evt\n });\n\n // Delay is impossible for native DnD in Edge or IE\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n if (options.supportPointer) {\n on(ownerDocument, 'pointerup', _this._disableDelayedDrag);\n on(ownerDocument, 'pointercancel', _this._disableDelayedDrag);\n } else {\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n }\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n var touch = e.touches ? e.touches[0] : e;\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'pointerup', this._disableDelayedDrag);\n off(ownerDocument, 'pointercancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n var options = this.options;\n\n // Apply effect\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = getParentOrHost(parent));\n }\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl);\n\n // Set transform-origin\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n pluginEvent('setupClone', this);\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n }\n\n // #1143: IFrame support workaround\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n on(document, 'drop', _this);\n\n // #1276 fix:\n css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n window.getSelection().removeAllRanges();\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver( /**Event*/evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n if (_silent) return;\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n }\n\n // Capture animation state\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n }\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n }\n\n // Animation\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n }\n\n // Call when dragEl has been inserted\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n ignoreNextClick = false;\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n if (revert) {\n parentEl = rootEl; // actualization\n capture();\n this._hideClone();\n dragOverEvent('revert');\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n return completed(true);\n }\n var elLastChild = lastChild(el, options.draggable);\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n }\n\n // if there is a last element, it is the target\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = getRect(target);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n if (firstChild === dragEl) {\n return completed(false);\n }\n target = firstChild;\n targetRect = getRect(target);\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n }\n // If dragEl is already beside target: Do not insert\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n }\n\n // Undo chrome's scroll adjustment (has no effect on other browsers)\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'pointercancel', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop( /**Event*/evt) {\n var el = this.el,\n options = this.options;\n\n // Get the index of the dragged element within its parent\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode;\n\n // Get again after plugin event\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n css(dragEl, 'transform', '');\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = '';\n\n // Remove classes\n // ghostClass is added in dragStarted\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n // Remove event\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // drag from one list and drop into another\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent( /**Event*/evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n this._disableDelayedDragEvents();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return;\n\n // show clone at dragEl or original position\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\nfunction _globalDragOver( /**Event*/evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n return retVal;\n}\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\nfunction _unsilent() {\n _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n}\n\n// Export utils\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild,\n expando: expando\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\nSortable.get = function (element) {\n return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n };\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback);\n\n // Listener for pointer element change\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval();\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn;\n\n // New scroll root, set scrollEl\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n }\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\nfunction Revert() {}\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\n folding = false,\n // Folding any other time\n dragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData('Text', data);\n }\n };\n }\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n sortable._hideClone();\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n });\n\n // Sort multi-drag elements\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n\n sortable.captureAnimationState();\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n }\n\n // Remove all auxiliary multidrag items from el, if sorting enabled\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n initialFolding = false;\n // If leaving sort:false root, or already folding - Fold to new location\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute);\n\n // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n }\n\n // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable);\n\n // Unfold animation for clones if showing from hidden\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children;\n\n // Multi-drag selection\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n\n // Modifier activated, select from last to dragEl\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n (function () {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n var filter = options.filter;\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n // Check if element is draggable\n if (!closest(children[i], options.draggable, parentEl, false)) continue;\n // Check if element is filtered\n var filtered = filter && (typeof filter === 'function' ? filter.call(sortable, evt, children[i], sortable) : filter.split(',').some(function (criteria) {\n return closest(children[i], criteria.trim(), parentEl, false);\n }));\n if (filtered) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n })();\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n }\n\n // Multi-drag drop\n if (dragStarted && this.isMultiDrag) {\n folding = false;\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect;\n\n // Prepare unfold animation\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n }\n\n // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n });\n\n // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n if (update) {\n dispatchSortableEvent('update');\n dispatchSortableEvent('sort');\n }\n }\n }\n\n // Must be done after capturing individual rects (scroll bar)\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n multiDragSortable = toSortable;\n }\n\n // Remove clones if necessary\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n // Only deselect if selection is in this sortable\n if (multiDragSortable !== this.sortable) return;\n\n // Only deselect if target is not item in this sortable\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n // Only deselect if left click\n if (evt && evt.button !== 0) return;\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n });\n\n // multiDragElements will already be sorted if folding\n var newIndex;\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n }\n }\n });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","<script setup lang=\"ts\">\nimport { Checkbox } from 'ant-design-vue';\nimport { getSwitcherClassName } from '../util';\n\ninterface SingleItemProps {\n id: string;\n className?: string;\n fieldType: string;\n displayName?: string;\n checked?: boolean;\n disabled?: boolean;\n selectable?: boolean;\n parentId?: string;\n}\n\nconst props = withDefaults(defineProps<SingleItemProps>(), {\n checked: true,\n disabled: false,\n selectable: false,\n});\n\nconst emit = defineEmits<{\n (\n e: 'visible-item-change',\n fieldType: string,\n checked: boolean,\n id: string,\n parentId?: string,\n ): void;\n}>();\n\nconst textClassName = getSwitcherClassName('item', 'text');\n\nconst onChange = (e: any) => {\n emit(\n 'visible-item-change',\n props.fieldType,\n e.target.checked,\n props.id,\n props.parentId,\n );\n};\n</script>\n\n<template>\n <div :class=\"[getSwitcherClassName('item'), className]\">\n <Checkbox\n v-if=\"selectable\"\n :checked=\"checked\"\n :disabled=\"disabled\"\n @change=\"onChange\"\n />\n <span :class=\"textClassName\" :title=\"displayName\">\n {{ displayName || id }}\n </span>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { isEmpty } from 'lodash';\nimport { getSwitcherClassName } from '../util';\nimport type { SwitcherItem, DimensionCommonProps } from '../interface';\nimport SingleItem from './SingleItem.vue';\n\ninterface DimensionItemProps extends DimensionCommonProps {\n index?: number;\n item: SwitcherItem;\n expandChildren: boolean;\n isDragDisabled: boolean;\n}\n\nconst props = defineProps<DimensionItemProps>();\n\nconst emit = defineEmits<{\n (\n e: 'visible-item-change',\n fieldType: string,\n checked: boolean,\n id: string,\n parentId?: string,\n ): void;\n}>();\n\nconst onVisibleItemChange = (\n fieldType: string,\n checked: boolean,\n id: string,\n parentId?: string,\n) => {\n emit('visible-item-change', fieldType, checked, id, parentId);\n};\n\n// Use classes array\nconst mainClass = computed(() => {\n return [\n getSwitcherClassName(props.selectable ? 'checkable-list' : 'normal-list'),\n {\n 'disable-dragging': props.isDragDisabled,\n },\n ];\n});\n\n// Item class\nconst itemClass = computed(() => {\n return [\n props.selectable ? 'checkable-item' : 'normal-item',\n {\n 'item-collapse': !props.expandChildren,\n },\n // join for class string if passed as prop\n ].join(' ');\n});\n</script>\n\n<template>\n <div :class=\"mainClass\">\n <SingleItem\n :fieldType=\"fieldType\"\n :id=\"item.id\"\n :displayName=\"item.displayName\"\n :checked=\"item.checked\"\n :selectable=\"selectable\"\n :className=\"itemClass\"\n @visible-item-change=\"onVisibleItemChange\"\n />\n\n <div\n v-if=\"\n expandable &&\n expandChildren &&\n !isEmpty(item.children) &&\n draggingItemId !== item.id\n \"\n :class=\"['child-items', { 'item-hidden': !expandChildren }]\"\n >\n <SingleItem\n v-for=\"child in item.children\"\n :key=\"child.id\"\n :id=\"child.id\"\n :fieldType=\"fieldType\"\n :displayName=\"child.displayName\"\n :disabled=\"!item.checked\"\n :checked=\"child.checked\"\n :parentId=\"item.id\"\n :selectable=\"selectable\"\n class=\"checkable-item\"\n @visible-item-change=\"onVisibleItemChange\"\n />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, onMounted, watch, onBeforeUnmount } from 'vue';\nimport { Checkbox } from 'ant-design-vue';\nimport { i18n } from '@antv/s2';\n// Use sortablejs instead of vuedraggable to avoid ESM build issues (require is not defined) in Vite\nimport Sortable from 'sortablejs';\nimport type { CheckboxChangeEvent } from 'ant-design-vue/lib/checkbox/interface';\nimport { getSwitcherClassName } from '../util';\nimport DimensionItem from '../item/DimensionItem.vue';\nimport type { SwitcherItem } from '../interface';\nimport { FieldType } from '../constant';\n\n// Define Props\ninterface DimensionProps {\n // SwitcherField\n items?: SwitcherItem[];\n allowEmpty?: boolean;\n expandable?: boolean;\n expandText?: string;\n selectable?: boolean;\n\n // DimensionCommonProps\n fieldType: FieldType;\n draggingItemId?: string | null;\n\n // Extra\n droppableType?: string;\n text?: string;\n icon?: any;\n crossRows?: boolean;\n}\n\nconst props = withDefaults(defineProps<DimensionProps>(), {\n items: () => [],\n crossRows: false,\n selectable: false,\n expandable: false,\n expandText: () => i18n('展开子项'),\n allowEmpty: true,\n});\n\nconst emit = defineEmits<{\n (\n e: 'visible-item-change',\n fieldType: string,\n checked: boolean,\n id: string,\n parentId?: string,\n ): void;\n (e: 'update:items', items: SwitcherItem[]): void;\n}>();\n\nconst CLASS_NAME_PREFIX = 'dimension';\n\nconst expandChildren = ref(true);\nconst enabled = ref(false);\nconst draggableRef = ref<HTMLElement>();\nlet sortableInstance: Sortable | null = null;\n\nconst onUpdateExpand = (event: CheckboxChangeEvent) => {\n expandChildren.value = event.target.checked;\n};\n\n// If allowEmpty is false and only one item, disable drag\nconst isDragDisabled = computed(\n () => !props.allowEmpty && props.items.length === 1,\n);\n\nconst initSortable = () => {\n if (!draggableRef.value) {\n return;\n }\n\n sortableInstance = Sortable.create(draggableRef.value, {\n animation: 200,\n group: props.droppableType,\n disabled: isDragDisabled.value,\n ghostClass: getSwitcherClassName(CLASS_NAME_PREFIX, 'items-highlight'),\n onEnd: (evt) => {\n const { oldIndex, newIndex } = evt;\n\n if (\n oldIndex === undefined ||\n newIndex === undefined ||\n oldIndex === newIndex\n ) {\n return;\n }\n\n // Sync state\n const newItems = [...props.items];\n const [movedItem] = newItems.splice(oldIndex, 1);\n\n newItems.splice(newIndex, 0, movedItem);\n emit('update:items', newItems);\n },\n });\n};\n\nwatch(isDragDisabled, (val) => {\n sortableInstance?.option('disabled', val);\n});\n\nonMounted(() => {\n requestAnimationFrame(() => {\n enabled.value = true;\n // Wait for DOM to be ready\n requestAnimationFrame(() => {\n initSortable();\n });\n });\n});\n\nonBeforeUnmount(() => {\n sortableInstance?.destroy();\n});\n\nconst onVisibleItemChange = (\n fieldType: string,\n checked: boolean,\n id: string,\n parentId?: string,\n) => {\n emit('visible-item-change', fieldType, checked, id, parentId);\n};\n</script>\n\n<template>\n <div\n v-if=\"enabled\"\n :class=\"[\n getSwitcherClassName(CLASS_NAME_PREFIX),\n { 'long-dimension': crossRows },\n ]\"\n >\n <div :class=\"getSwitcherClassName(CLASS_NAME_PREFIX, 'header')\">\n <div class=\"title\">\n <component :is=\"icon\" /> <span>{{ text }}</span>\n </div>\n <div v-if=\"expandable\" class=\"expand-option\">\n <Checkbox :checked=\"expandChildren\" @change=\"onUpdateExpand\">\n {{ expandText }}\n </Checkbox>\n </div>\n </div>\n\n <div\n ref=\"draggableRef\"\n :class=\"[\n getSwitcherClassName(CLASS_NAME_PREFIX, 'items'),\n { [getSwitcherClassName(CLASS_NAME_PREFIX, 'long-items')]: crossRows },\n ]\"\n >\n <DimensionItem\n v-for=\"(item, index) in items\"\n :key=\"item.id\"\n :index=\"index\"\n :fieldType=\"fieldType\"\n :item=\"item\"\n :expandable=\"expandable\"\n :expandChildren=\"expandChildren\"\n :selectable=\"selectable\"\n :isDragDisabled=\"isDragDisabled\"\n @visible-item-change=\"onVisibleItemChange\"\n />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, computed } from 'vue';\nimport { i18n } from '@antv/s2';\nimport { Button } from 'ant-design-vue';\nimport { isEqual } from 'lodash';\nimport { ReloadOutlined } from '@ant-design/icons-vue';\nimport {\n checkItem,\n generateSwitchResult,\n getMainLayoutClassName,\n getSwitcherClassName,\n getSwitcherConfig,\n getSwitcherState,\n shouldCrossRows,\n} from './util';\nimport { SWITCHER_FIELDS, FieldType } from './constant';\nimport type { SwitcherContentProps, SwitcherState } from './interface';\nimport Dimension from './dimension/Dimension.vue';\n\nconst props = withDefaults(\n defineProps<Omit<SwitcherContentProps, 'onSubmit'>>(),\n {\n contentTitleText: () => i18n('行列切换'),\n resetText: () => i18n('恢复默认'),\n allowExchangeHeader: true,\n sheetType: 'pivot',\n },\n);\n\nconst emit = defineEmits<{\n (e: 'submit', result: any): void;\n (e: 'toggle-visible'): void;\n}>();\n\nconst CLASS_NAME_PREFIX = 'content';\n\nconst switcherConfig = getSwitcherConfig(props.allowExchangeHeader);\nconst defaultState = getSwitcherState(props);\n\nconst state = ref<SwitcherState>(JSON.parse(JSON.stringify(defaultState)));\nconst draggingItemId = ref<string | null>(null);\n\nconst onReset = () => {\n state.value = JSON.parse(JSON.stringify(defaultState));\n};\n\nconst onConfirm = () => {\n emit('toggle-visible');\n emit('submit', generateSwitchResult(state.value));\n};\n\nconst onVisibleItemChange = (\n fieldType: FieldType,\n checked: boolean,\n id: string,\n parentId?: string,\n) => {\n const updatedState = checkItem(state.value[fieldType], checked, id, parentId);\n\n state.value = {\n ...state.value,\n [fieldType]: updatedState,\n };\n};\n\n// Check deep equality (simplified for Vue ref)\nconst isNothingChanged = computed(() => isEqual(defaultState, state.value));\n\nconst displayFieldItems = computed(() =>\n SWITCHER_FIELDS.filter(\n (field) => props.sheetType !== 'table' || field === FieldType.Cols,\n ),\n);\n\nconst onCancel = () => {\n emit('toggle-visible');\n};\n\nconst mainClass = computed(() => [\n getSwitcherClassName(CLASS_NAME_PREFIX, 'main'),\n getMainLayoutClassName(props.sheetType),\n]);\n</script>\n\n<template>\n <div\n :class=\"[innerContentClassName, getSwitcherClassName(CLASS_NAME_PREFIX)]\"\n >\n <header :class=\"getSwitcherClassName(CLASS_NAME_PREFIX, 'header')\">\n {{ contentTitleText }}\n </header>\n <main :class=\"mainClass\">\n <Dimension\n v-for=\"type in displayFieldItems\"\n :key=\"type\"\n :fieldType=\"type\"\n :items=\"state[type]\"\n :crossRows=\"shouldCrossRows(sheetType, type)\"\n :draggingItemId=\"draggingItemId\"\n v-bind=\"switcherConfig[type]\"\n @visible-item-change=\"onVisibleItemChange\"\n @update:items=\"(newItems) => (state[type] = newItems)\"\n />\n </main>\n <footer :class=\"getSwitcherClassName(CLASS_NAME_PREFIX, 'footer')\">\n <Button\n type=\"text\"\n :class=\"\n getSwitcherClassName(CLASS_NAME_PREFIX, 'footer', 'reset-button')\n \"\n :disabled=\"isNothingChanged\"\n @click=\"onReset\"\n >\n <template #icon><ReloadOutlined /></template>\n {{ resetText }}\n </Button>\n <div\n :class=\"getSwitcherClassName(CLASS_NAME_PREFIX, 'footer', 'actions')\"\n >\n <Button class=\"action-button\" @click=\"onCancel\">\n {{ i18n('取消') }}\n </Button>\n <Button\n class=\"action-button\"\n type=\"primary\"\n :disabled=\"isNothingChanged\"\n @click=\"onConfirm\"\n >\n {{ i18n('确定') }}\n </Button>\n </div>\n </footer>\n </div>\n</template>\n\n<style lang=\"less\">\n@import './index.less';\n</style>\n","<script setup lang=\"ts\">\nimport { ref, computed, h } from 'vue';\nimport { i18n } from '@antv/s2';\nimport { Button, Popover } from 'ant-design-vue';\nimport { SwapOutlined } from '@ant-design/icons-vue';\nimport { getSwitcherClassName } from './util';\nimport type { SwitcherProps, SwitcherResult } from './interface';\nimport SwitcherContent from './SwitcherContent.vue';\n\nconst props = withDefaults(defineProps<SwitcherProps>(), {\n disabled: false,\n});\n\nconst emit = defineEmits<{\n (e: 'submit', result: SwitcherResult): void;\n}>();\n\nconst visible = ref(false);\n\nconst onToggleVisible = (open?: boolean) => {\n if (typeof open === 'boolean') {\n visible.value = open;\n } else {\n visible.value = !visible.value;\n }\n};\n\nconst onSubmit = (result: SwitcherResult) => {\n emit('submit', result);\n};\n\nconst overlayClassName = computed(() => {\n return (\n props.popover?.overlayClassName\n ? [\n getSwitcherClassName('switcher-overlay'),\n props.popover.overlayClassName,\n ]\n : [getSwitcherClassName('switcher-overlay')]\n ).join(' ');\n});\n\nconst defaultTitle = computed(() => props.title || i18n('行列切换'));\n\n// Helper to render icon\nconst renderIcon = () => {\n if (props.icon) {\n return props.icon;\n }\n\n // Rotate SwapOutlined 90 deg\n return h(SwapOutlined, { rotate: 90 });\n};\n</script>\n\n<template>\n <Popover\n :open=\"!disabled && visible\"\n trigger=\"click\"\n placement=\"bottomLeft\"\n :destroyTooltipOnHide=\"true\"\n :overlayClassName=\"overlayClassName\"\n v-bind=\"popover\"\n @openChange=\"onToggleVisible\"\n >\n <template #content>\n <SwitcherContent\n v-bind=\"props\"\n @toggle-visible=\"() => onToggleVisible(false)\"\n @submit=\"onSubmit\"\n />\n </template>\n\n <slot>\n <Button\n :class=\"getSwitcherClassName('entry-button')\"\n size=\"small\"\n :disabled=\"disabled\"\n >\n <template #icon>\n <component :is=\"renderIcon()\" />\n </template>\n {{ defaultTitle }}\n </Button>\n </slot>\n </Popover>\n</template>\n\n<style lang=\"less\">\n@import './index.less';\n</style>\n","import { h, type FunctionalComponent } from 'vue';\n\nexport interface RadioIconProps {\n active?: boolean;\n}\n\nexport const LeftAlignIcon: FunctionalComponent<RadioIconProps> = ({\n active,\n}) => {\n const fill = active ? '#3471F9' : '#000000';\n const opacity = active ? '1' : '0.45';\n\n return h(\n 'svg',\n {\n class: 'si',\n width: '12px',\n height: '10px',\n viewBox: '0 0 12 10',\n fill: 'currentColor',\n },\n [\n h(\n 'g',\n {\n stroke: 'none',\n 'stroke-width': '1',\n fill: 'none',\n 'fill-rule': 'evenodd',\n opacity,\n },\n [\n h('g', { fill, 'fill-rule': 'nonzero' }, [\n h('path', {\n d: 'M11.238,1.045 L0.76,1.045 C0.341,1.045 0,0.81 0,0.522 C0,0.234 0.341,0 0.76,0 L11.24,0 C11.659,0 12,0.234 12,0.522 C11.998,0.812 11.659,1.045 11.238,1.045 Z M7.024,4.03 L0.474,4.03 C0.214,4.03 0,3.795 0,3.507 C0,3.219 0.213,2.985 0.475,2.985 L7.025,2.985 C7.287,2.985 7.5,3.219 7.5,3.507 C7.499,3.795 7.287,4.03 7.024,4.03 L7.024,4.03 Z M7.024,7.015 L0.474,7.015 C0.214,7.015 0,6.781 0,6.493 C0,6.205 0.213,5.97 0.475,5.97 L7.025,5.97 C7.287,5.97 7.5,6.205 7.5,6.493 C7.499,6.782 7.287,7.015 7.024,7.015 L7.024,7.015 Z M11.238,10 L0.76,10 C0.341,10 0,9.766 0,9.478 C0,9.19 0.341,8.955 0.76,8.955 L11.24,8.955 C11.659,8.955 12,9.19 12,9.478 C11.998,9.767 11.659,10 11.238,10 Z',\n }),\n ]),\n ],\n ),\n ],\n );\n};\n\nexport const CenterAlignIcon: FunctionalComponent<RadioIconProps> = ({\n active,\n}) => {\n const fill = active ? '#3471F9' : '#000000';\n const opacity = active ? '1' : '0.45';\n\n return h(\n 'svg',\n {\n class: 'si',\n width: '12px',\n height: '11px',\n viewBox: '0 0 12 11',\n fill: 'currentColor',\n },\n [\n h(\n 'g',\n {\n stroke: 'none',\n 'stroke-width': '1',\n fill: 'none',\n 'fill-rule': 'evenodd',\n opacity,\n },\n [\n h('g', { fill, 'fill-rule': 'nonzero' }, [\n h('path', {\n d: 'M11.238,4.045 L0.76,4.045 C0.341,4.045 0,3.81 0,3.522 C0,3.234 0.341,3 0.76,3 L11.24,3 C11.659,3 12,3.234 12,3.522 C11.998,3.812 11.659,4.045 11.238,4.045 Z M9.024,1.045 L2.474,1.045 C2.214,1.045 2,0.81 2,0.522 C2,0.234 2.213,0 2.475,0 L9.025,0 C9.287,0 9.5,0.234 9.5,0.522 C9.499,0.81 9.287,1.045 9.024,1.045 L9.024,1.045 Z M9.024,7.045 L2.474,7.045 C2.214,7.045 2,6.81 2,6.522 C2,6.234 2.213,6 2.475,6 L9.025,6 C9.287,6 9.5,6.234 9.5,6.522 C9.499,6.812 9.287,7.045 9.024,7.045 L9.024,7.045 Z M11.238,10.045 L0.76,10.045 C0.341,10.045 0,9.81 0,9.522 C0,9.234 0.341,9 0.76,9 L11.24,9 C11.659,9 12,9.234 12,9.522 C11.998,9.812 11.659,10.045 11.238,10.045 Z',\n }),\n ]),\n ],\n ),\n ],\n );\n};\n\nexport const RightAlignIcon: FunctionalComponent<RadioIconProps> = ({\n active,\n}) => {\n const fill = active ? '#3471F9' : '#000000';\n const opacity = active ? '1' : '0.45';\n\n return h(\n 'svg',\n {\n class: 'si',\n width: '12px',\n height: '10px',\n viewBox: '0 0 12 10',\n fill: 'currentColor',\n },\n [\n h(\n 'g',\n {\n stroke: 'none',\n 'stroke-width': '1',\n fill: 'none',\n 'fill-rule': 'evenodd',\n opacity,\n },\n [\n h('g', { fill, 'fill-rule': 'nonzero' }, [\n h('path', {\n d: 'M0.762,1.045 L11.24,1.045 C11.659,1.045 12,0.81 12,0.522 C12,0.234 11.659,0 11.24,0 L0.76,0 C0.34,0 0,0.234 0,0.522 C0.002,0.812 0.341,1.045 0.762,1.045 Z M4.976,4.03 L11.526,4.03 C11.786,4.03 12,3.795 12,3.507 C12,3.219 11.787,2.985 11.525,2.985 L4.975,2.985 C4.713,2.985 4.5,3.219 4.5,3.507 C4.501,3.795 4.713,4.03 4.976,4.03 Z M4.976,7.015 L11.526,7.015 C11.786,7.015 12,6.781 12,6.493 C12,6.205 11.787,5.97 11.525,5.97 L4.975,5.97 C4.713,5.97 4.5,6.205 4.5,6.493 C4.501,6.782 4.713,7.015 4.976,7.015 Z M0.762,10 L11.24,10 C11.659,10 12,9.766 12,9.478 C12,9.19 11.659,8.955 11.24,8.955 L0.76,8.955 C0.341,8.955 0,9.19 0,9.478 C0.002,9.767 0.341,10 0.762,10 Z',\n }),\n ]),\n ],\n ),\n ],\n );\n};\n","import type { S2Theme, TextAlign } from '@antv/s2';\n\nexport interface TextAlignPanelOptions {\n rowCellTextAlign?: TextAlign;\n colCellTextAlign?: TextAlign;\n dataCellTextAlign?: TextAlign;\n}\n\n/**\n * 生成表格文本对齐方式主题配置\n * @see https://s2.antv.antgroup.com/api/general/s2-theme\n */\nexport function generateCellTextAlignTheme(\n options: TextAlignPanelOptions,\n): S2Theme {\n const {\n colCellTextAlign: colCellAlignType,\n rowCellTextAlign: rowCellAlignType = 'left',\n dataCellTextAlign: dataCellAlignType = 'right',\n } = options;\n\n return {\n // 角头取列头的对齐方式, 但底表默认行角头是靠左, 列角头是靠右, 所以没有指定默认值时默认按底表对齐方式展示.\n cornerCell: {\n text: {\n textAlign: options?.colCellTextAlign || 'left',\n },\n bolderText: {\n textAlign: options?.colCellTextAlign || 'right',\n },\n },\n colCell: {\n text: {\n textAlign: colCellAlignType,\n },\n bolderText: {\n textAlign: colCellAlignType,\n },\n measureText: {\n textAlign: dataCellAlignType,\n },\n },\n rowCell: {\n text: {\n textAlign: rowCellAlignType,\n },\n bolderText: {\n textAlign: rowCellAlignType,\n },\n measureText: {\n textAlign: rowCellAlignType,\n },\n },\n dataCell: {\n text: {\n textAlign: dataCellAlignType,\n },\n bolderText: {\n textAlign: dataCellAlignType,\n },\n },\n };\n}\n","<script setup lang=\"ts\">\nimport { S2_PREFIX_CLS, i18n, type TextAlign, type S2Theme } from '@antv/s2';\nimport { h, ref, watch } from 'vue';\nimport { RadioGroup, ResetGroup, TooltipWrapper } from '../common';\nimport { LeftAlignIcon, CenterAlignIcon, RightAlignIcon } from './icons';\nimport {\n generateCellTextAlignTheme,\n type TextAlignPanelOptions,\n} from './utils';\n\nconst PRE_CLASS = `${S2_PREFIX_CLS}-text-align-panel`;\n\nconst props = withDefaults(\n defineProps<{\n title?: string;\n defaultOptions?: Partial<TextAlignPanelOptions>;\n defaultCollapsed?: boolean;\n }>(),\n {\n title: () => i18n('文字对齐'),\n defaultCollapsed: false,\n },\n);\n\nconst emit = defineEmits<{\n change: [options: TextAlignPanelOptions, theme: S2Theme];\n reset: [\n options: TextAlignPanelOptions,\n prevOptions: TextAlignPanelOptions,\n theme: S2Theme,\n ];\n}>();\n\nconst options = ref<TextAlignPanelOptions>({\n rowCellTextAlign: 'left',\n dataCellTextAlign: 'right',\n ...props.defaultOptions,\n});\n\nconst defaultOptionsRef = ref<TextAlignPanelOptions>({ ...options.value });\n\nconst onResetClick = () => {\n const theme = generateCellTextAlignTheme(defaultOptionsRef.value);\n const prevOptions = { ...options.value };\n\n options.value = { ...defaultOptionsRef.value };\n emit('reset', defaultOptionsRef.value, prevOptions, theme);\n};\n\nconst onOptionsChange = (\n field: keyof TextAlignPanelOptions,\n value: TextAlign,\n) => {\n const newOptions: TextAlignPanelOptions = {\n ...options.value,\n [field]: value,\n };\n\n // 指标和列头对齐 (含 EXTRA_FIELD 虚拟列), 可单独调整指标\n if (field === 'colCellTextAlign') {\n newOptions.dataCellTextAlign = newOptions.colCellTextAlign;\n }\n\n options.value = newOptions;\n};\n\nwatch(\n options,\n (newOptions) => {\n const theme = generateCellTextAlignTheme(newOptions);\n\n emit('change', newOptions, theme);\n },\n { deep: true },\n);\n\nconst getCellAlignOptions = (field: keyof TextAlignPanelOptions) => {\n return [\n { label: i18n('左对齐'), value: 'left', component: LeftAlignIcon },\n { label: i18n('居中'), value: 'center', component: CenterAlignIcon },\n { label: i18n('右对齐'), value: 'right', component: RightAlignIcon },\n ].map(({ label, value, component: Component }) => ({\n label: h(TooltipWrapper, { title: label }, () =>\n h(Component, { active: options.value[field] === value }),\n ),\n value,\n }));\n};\n\nconst handleChange = (field: keyof TextAlignPanelOptions, e: any) => {\n onOptionsChange(field, e.target.value);\n};\n</script>\n\n<template>\n <ResetGroup\n :title=\"title\"\n :defaultCollapsed=\"defaultCollapsed\"\n :class=\"PRE_CLASS\"\n @reset=\"onResetClick\"\n >\n <slot />\n <RadioGroup\n :label=\"i18n('表头')\"\n optionType=\"button\"\n :value=\"options.colCellTextAlign\"\n :options=\"getCellAlignOptions('colCellTextAlign')\"\n onlyIcon\n @change=\"(e) => handleChange('colCellTextAlign', e)\"\n />\n <RadioGroup\n :label=\"i18n('表身 (维度)')\"\n optionType=\"button\"\n :value=\"options.rowCellTextAlign\"\n :options=\"getCellAlignOptions('rowCellTextAlign')\"\n onlyIcon\n @change=\"(e) => handleChange('rowCellTextAlign', e)\"\n />\n <RadioGroup\n :label=\"i18n('表身 (指标)')\"\n optionType=\"button\"\n :value=\"options.dataCellTextAlign\"\n :options=\"getCellAlignOptions('dataCellTextAlign')\"\n onlyIcon\n @change=\"(e) => handleChange('dataCellTextAlign', e)\"\n />\n </ResetGroup>\n</template>\n\n<style lang=\"less\">\n@import '@antv/s2/esm/styles/variables.less';\n\n.@{s2-cls-prefix}-text-align-panel {\n width: 340px;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { S2_PREFIX_CLS } from '@antv/s2';\nimport { computed } from 'vue';\n\nconst PRE_CLASS = `${S2_PREFIX_CLS}-color-box`;\n\nconst props = withDefaults(\n defineProps<{\n color: string;\n class?: string;\n }>(),\n {\n class: '',\n },\n);\n\nconst emit = defineEmits<{\n click: [event: MouseEvent];\n}>();\n\nconst classNames = computed(() => {\n return [PRE_CLASS, props.class].filter(Boolean).join(' ');\n});\n\nconst handleClick = (event: MouseEvent) => {\n emit('click', event);\n};\n</script>\n\n<template>\n <div\n :class=\"classNames\"\n :style=\"{ backgroundColor: color }\"\n @click=\"handleClick\"\n />\n</template>\n\n<style lang=\"less\">\n@import '@antv/s2/esm/styles/variables.less';\n\n.@{s2-cls-prefix}-color-box {\n display: inline-flex;\n box-sizing: border-box;\n width: 20px;\n height: 20px;\n border: 1px solid rgba(0, 0, 0, 0.06);\n border-radius: 2px;\n cursor: pointer;\n transition: all 0.3s;\n\n &:hover {\n transform: scale(1.1);\n }\n}\n</style>\n","import { h, type FunctionalComponent } from 'vue';\n\nexport interface RadioIconProps {\n active?: boolean;\n}\n\nexport const HierarchyGridTypeIcon: FunctionalComponent<RadioIconProps> = ({\n active,\n}) => {\n const fill = active ? '#3471F9' : '#000000';\n const fillOpacity = active ? '1' : '0.45';\n\n return h(\n 'svg',\n {\n class: 'si',\n width: '18px',\n height: '18px',\n viewBox: '0 0 18 18',\n fill: 'currentColor',\n },\n [\n h(\n 'g',\n {\n stroke: 'none',\n 'stroke-width': '1',\n fill: 'none',\n 'fill-rule': 'evenodd',\n },\n [\n h('path', {\n d: 'M7.46428571,2.75 L7.46428571,19.25 L2.75,19.25 L2.75,2.75 L7.46428571,2.75 Z M19.25,15.125 L19.25,19.25 L14.5357143,19.25 L14.5357143,15.125 L19.25,15.125 Z M13.3571429,15.125 L13.3571429,19.25 L8.64285714,19.25 L8.64285714,15.125 L13.3571429,15.125 Z M13.3571429,2.75 L13.3571429,13.75 L8.64285714,13.75 L8.64285714,2.75 L13.3571429,2.75 Z M19.25,9.625 L19.25,13.75 L14.5357143,13.75 L14.5357143,9.625 L19.25,9.625 Z M19.25,2.75 L19.25,8.25 L14.5357143,8.25 L14.5357143,2.75 L19.25,2.75 Z',\n fill,\n 'fill-opacity': fillOpacity,\n transform: 'translate(-2, -1)',\n }),\n ],\n ),\n ],\n );\n};\n\nexport const HierarchyTreeTypeIcon: FunctionalComponent<RadioIconProps> = ({\n active,\n}) => {\n const fill = active ? '#3471F9' : '#000000';\n const fillOpacity = active ? '1' : '0.45';\n\n return h(\n 'svg',\n {\n class: 'si',\n width: '18px',\n height: '18px',\n viewBox: '0 0 18 18',\n fill: 'currentColor',\n },\n [\n h(\n 'g',\n {\n stroke: 'none',\n 'stroke-width': '1',\n fill: 'none',\n 'fill-rule': 'evenodd',\n },\n [\n h('path', {\n d: 'M2.75,2.75 L2.75,6.77254902 L6.47225591,6.77254902 L6.47225591,2.75 L2.75,2.75 Z M11.1150697,15.2166667 L11.1150697,19.25 L19.25,19.25 L19.25,15.2166667 L11.1150697,15.2166667 Z M8.12325652,2.75 L8.12325652,6.77254902 L19.2299879,6.77254902 L19.2299879,2.75 L8.12325652,2.75 Z M11.1150697,8.98333333 L11.1150697,13.0166667 L19.2399939,13.0166667 L19.2399939,8.98333333 L11.1150697,8.98333333 Z M3.98074591,6.77254902 L5.23150394,6.77254902 L5.23150394,17.9019608 L3.98074591,17.9019608 L3.98074591,6.77254902 Z M5.23150394,16.5539216 L11.1250758,16.5539216 L11.1250758,17.9019608 L5.23150394,17.9019608 L5.23150394,16.5539216 Z M5.23150394,10.3745098 L11.1250758,10.3745098 L11.1250758,11.7117647 L5.23150394,11.7117647 L5.23150394,10.3745098 Z',\n fill,\n 'fill-opacity': fillOpacity,\n transform: 'translate(-2, -1)',\n }),\n ],\n ),\n ],\n );\n};\n\nexport const ColorfulThemeIcon: FunctionalComponent<RadioIconProps> = ({\n active,\n}) => {\n const borderFill = active ? '#3471F9' : '#8C8C8C';\n const stripeFill = active ? '#B0D1FF' : '#BFBFBF';\n\n return h(\n 'svg',\n {\n class: 'si',\n width: '18px',\n height: '16px',\n viewBox: '0 0 18 16',\n fill: 'currentColor',\n },\n [\n h(\n 'g',\n {\n stroke: 'none',\n 'stroke-width': '1',\n fill: 'none',\n 'fill-rule': 'evenodd',\n },\n [\n h('polygon', { fill: stripeFill, points: '1 7 17 7 17 11.5 1 11.5' }),\n h('path', {\n d: 'M6.8,0 L6.8,16 L6,16 L6,0 L6.8,0 Z M11.8,0 L11.8,16 L11,16 L11,0 L11.8,0 Z',\n fill: stripeFill,\n }),\n h('path', {\n d: 'M18,0 L18,16 L0,16 L0,0 L18,0 Z M17,1 L1,1 L1,15 L17,15 L17,1 Z',\n fill: borderFill,\n }),\n h('polygon', {\n fill: borderFill,\n points: '0 0 18 0 18 4.125 0 4.125',\n }),\n ],\n ),\n ],\n );\n};\n\nexport const NormalThemeIcon: FunctionalComponent<RadioIconProps> = ({\n active,\n}) => {\n const borderFill = active ? '#3471F9' : '#8C8C8C';\n const gridFill = active ? '#B0D1FF' : '#BFBFBF';\n\n return h(\n 'svg',\n {\n class: 'si',\n width: '18px',\n height: '16px',\n viewBox: '0 0 18 16',\n fill: 'currentColor',\n },\n [\n h(\n 'g',\n {\n stroke: 'none',\n 'stroke-width': '1',\n fill: 'none',\n 'fill-rule': 'evenodd',\n },\n [\n h('path', {\n d: 'M6.8,0 L6.799,7 L10.999,7 L11,0 L11.8,0 L11.799,7 L17,7 L17,7.8 L11.799,7.8 L11.799,11 L17,11 L17,11.8 L11.799,11.8 L11.8,16 L11,16 L10.999,11.8 L6.799,11.8 L6.8,16 L6,16 L5.999,11.8 L1,11.8 L1,11 L5.999,11 L5.999,7.8 L1,7.8 L1,7 L5.999,7 L6,0 L6.8,0 Z M10.999,7.8 L6.799,7.8 L6.799,11 L10.999,11 L10.999,7.8 Z',\n fill: gridFill,\n }),\n h('path', {\n d: 'M18,0 L18,16 L0,16 L0,0 L18,0 Z M17,1 L1,1 L1,15 L17,15 L17,1 Z',\n fill: borderFill,\n }),\n h('polygon', {\n fill: borderFill,\n points: '0 0 18 0 18 4.125 0 4.125',\n }),\n ],\n ),\n ],\n );\n};\n\nexport const BasicThemeIcon: FunctionalComponent<RadioIconProps> = ({\n active,\n}) => {\n const borderFill = active ? '#3471F9' : '#8C8C8C';\n const gridFill = active ? '#B0D1FF' : '#BFBFBF';\n\n return h(\n 'svg',\n {\n class: 'si',\n width: '18px',\n height: '16px',\n viewBox: '0 0 18 16',\n fill: 'currentColor',\n },\n [\n h(\n 'g',\n {\n stroke: 'none',\n 'stroke-width': '1',\n fill: 'none',\n 'fill-rule': 'evenodd',\n },\n [\n h('path', {\n d: 'M6.8,3.625 L6.799,7 L10.999,7 L11,3.625 L11.8,3.625 L11.799,7 L17,7 L17,7.8 L11.799,7.8 L11.799,11 L17,11 L17,11.8 L11.799,11.8 L11.8,16 L11,16 L10.999,11.8 L6.799,11.8 L6.8,16 L6,16 L5.999,11.8 L1,11.8 L1,11 L5.999,11 L5.999,7.8 L1,7.8 L1,7 L5.999,7 L6,3.625 L6.8,3.625 Z M10.999,7.8 L6.799,7.8 L6.799,11 L10.999,11 L10.999,7.8 Z',\n fill: gridFill,\n }),\n h('path', {\n d: 'M6.8,1 L6.8,3.125 L6,3.125 L6,1 L6.8,1 Z M11.8,1 L11.8,3.125 L11,3.125 L11,1 L11.8,1 Z',\n fill: borderFill,\n }),\n h('path', {\n d: 'M18,0 L18,16 L0,16 L0,0 L18,0 Z M17,1 L1,1 L1,15 L17,15 L17,1 Z',\n fill: borderFill,\n }),\n h('polygon', {\n fill: borderFill,\n points: '0 3.125 18 3.125 18 4.125 0 4.125',\n }),\n ],\n ),\n ],\n );\n};\n\nexport const ZebraThemeIcon: FunctionalComponent<RadioIconProps> = ({\n active,\n}) => {\n const borderFill = active ? '#3471F9' : '#8C8C8C';\n const stripeFill = active ? '#B0D1FF' : '#BFBFBF';\n\n return h(\n 'svg',\n {\n class: 'si',\n width: '18px',\n height: '16px',\n viewBox: '0 0 18 16',\n fill: 'currentColor',\n },\n [\n h(\n 'g',\n {\n stroke: 'none',\n 'stroke-width': '1',\n fill: 'none',\n 'fill-rule': 'evenodd',\n },\n [\n h('polygon', { fill: stripeFill, points: '0 6 18 6 18 8 0 8' }),\n h('polygon', { fill: stripeFill, points: '0 10 18 10 18 12 0 12' }),\n h('polygon', { fill: stripeFill, points: '0 14 18 14 18 16 0 16' }),\n h('path', {\n d: 'M6,0 L6.8,0 L6.8,16 L6,16 Z M11,0 L11.8,0 L11.8,16 L11,16 Z',\n fill: stripeFill,\n }),\n h('polygon', {\n fill: borderFill,\n points: '0 0 18 0 18 4.125 0 4.125',\n }),\n ],\n ),\n ],\n );\n};\n","// This file is autogenerated. It's used to publish ESM to npm.\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}\n\n// https://github.com/bgrins/TinyColor\n// Brian Grinstead, MIT License\n\nvar trimLeft = /^\\s+/;\nvar trimRight = /\\s+$/;\nfunction tinycolor(color, opts) {\n color = color ? color : \"\";\n opts = opts || {};\n\n // If input is already a tinycolor, return itself\n if (color instanceof tinycolor) {\n return color;\n }\n // If we are called as a function, call using new instead\n if (!(this instanceof tinycolor)) {\n return new tinycolor(color, opts);\n }\n var rgb = inputToRGB(color);\n this._originalInput = color, this._r = rgb.r, this._g = rgb.g, this._b = rgb.b, this._a = rgb.a, this._roundA = Math.round(100 * this._a) / 100, this._format = opts.format || rgb.format;\n this._gradientType = opts.gradientType;\n\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this._r < 1) this._r = Math.round(this._r);\n if (this._g < 1) this._g = Math.round(this._g);\n if (this._b < 1) this._b = Math.round(this._b);\n this._ok = rgb.ok;\n}\ntinycolor.prototype = {\n isDark: function isDark() {\n return this.getBrightness() < 128;\n },\n isLight: function isLight() {\n return !this.isDark();\n },\n isValid: function isValid() {\n return this._ok;\n },\n getOriginalInput: function getOriginalInput() {\n return this._originalInput;\n },\n getFormat: function getFormat() {\n return this._format;\n },\n getAlpha: function getAlpha() {\n return this._a;\n },\n getBrightness: function getBrightness() {\n //http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n },\n getLuminance: function getLuminance() {\n //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var RsRGB, GsRGB, BsRGB, R, G, B;\n RsRGB = rgb.r / 255;\n GsRGB = rgb.g / 255;\n BsRGB = rgb.b / 255;\n if (RsRGB <= 0.03928) R = RsRGB / 12.92;else R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n if (GsRGB <= 0.03928) G = GsRGB / 12.92;else G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n if (BsRGB <= 0.03928) B = BsRGB / 12.92;else B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n },\n setAlpha: function setAlpha(value) {\n this._a = boundAlpha(value);\n this._roundA = Math.round(100 * this._a) / 100;\n return this;\n },\n toHsv: function toHsv() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n return {\n h: hsv.h * 360,\n s: hsv.s,\n v: hsv.v,\n a: this._a\n };\n },\n toHsvString: function toHsvString() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n var h = Math.round(hsv.h * 360),\n s = Math.round(hsv.s * 100),\n v = Math.round(hsv.v * 100);\n return this._a == 1 ? \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" : \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \" + this._roundA + \")\";\n },\n toHsl: function toHsl() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n return {\n h: hsl.h * 360,\n s: hsl.s,\n l: hsl.l,\n a: this._a\n };\n },\n toHslString: function toHslString() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n var h = Math.round(hsl.h * 360),\n s = Math.round(hsl.s * 100),\n l = Math.round(hsl.l * 100);\n return this._a == 1 ? \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" : \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \" + this._roundA + \")\";\n },\n toHex: function toHex(allow3Char) {\n return rgbToHex(this._r, this._g, this._b, allow3Char);\n },\n toHexString: function toHexString(allow3Char) {\n return \"#\" + this.toHex(allow3Char);\n },\n toHex8: function toHex8(allow4Char) {\n return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n },\n toHex8String: function toHex8String(allow4Char) {\n return \"#\" + this.toHex8(allow4Char);\n },\n toRgb: function toRgb() {\n return {\n r: Math.round(this._r),\n g: Math.round(this._g),\n b: Math.round(this._b),\n a: this._a\n };\n },\n toRgbString: function toRgbString() {\n return this._a == 1 ? \"rgb(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \")\" : \"rgba(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \", \" + this._roundA + \")\";\n },\n toPercentageRgb: function toPercentageRgb() {\n return {\n r: Math.round(bound01(this._r, 255) * 100) + \"%\",\n g: Math.round(bound01(this._g, 255) * 100) + \"%\",\n b: Math.round(bound01(this._b, 255) * 100) + \"%\",\n a: this._a\n };\n },\n toPercentageRgbString: function toPercentageRgbString() {\n return this._a == 1 ? \"rgb(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%)\" : \"rgba(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n },\n toName: function toName() {\n if (this._a === 0) {\n return \"transparent\";\n }\n if (this._a < 1) {\n return false;\n }\n return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n },\n toFilter: function toFilter(secondColor) {\n var hex8String = \"#\" + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n var secondHex8String = hex8String;\n var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n if (secondColor) {\n var s = tinycolor(secondColor);\n secondHex8String = \"#\" + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n }\n return \"progid:DXImageTransform.Microsoft.gradient(\" + gradientType + \"startColorstr=\" + hex8String + \",endColorstr=\" + secondHex8String + \")\";\n },\n toString: function toString(format) {\n var formatSet = !!format;\n format = format || this._format;\n var formattedString = false;\n var hasAlpha = this._a < 1 && this._a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === \"name\" && this._a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === \"rgb\") {\n formattedString = this.toRgbString();\n }\n if (format === \"prgb\") {\n formattedString = this.toPercentageRgbString();\n }\n if (format === \"hex\" || format === \"hex6\") {\n formattedString = this.toHexString();\n }\n if (format === \"hex3\") {\n formattedString = this.toHexString(true);\n }\n if (format === \"hex4\") {\n formattedString = this.toHex8String(true);\n }\n if (format === \"hex8\") {\n formattedString = this.toHex8String();\n }\n if (format === \"name\") {\n formattedString = this.toName();\n }\n if (format === \"hsl\") {\n formattedString = this.toHslString();\n }\n if (format === \"hsv\") {\n formattedString = this.toHsvString();\n }\n return formattedString || this.toHexString();\n },\n clone: function clone() {\n return tinycolor(this.toString());\n },\n _applyModification: function _applyModification(fn, args) {\n var color = fn.apply(null, [this].concat([].slice.call(args)));\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this.setAlpha(color._a);\n return this;\n },\n lighten: function lighten() {\n return this._applyModification(_lighten, arguments);\n },\n brighten: function brighten() {\n return this._applyModification(_brighten, arguments);\n },\n darken: function darken() {\n return this._applyModification(_darken, arguments);\n },\n desaturate: function desaturate() {\n return this._applyModification(_desaturate, arguments);\n },\n saturate: function saturate() {\n return this._applyModification(_saturate, arguments);\n },\n greyscale: function greyscale() {\n return this._applyModification(_greyscale, arguments);\n },\n spin: function spin() {\n return this._applyModification(_spin, arguments);\n },\n _applyCombination: function _applyCombination(fn, args) {\n return fn.apply(null, [this].concat([].slice.call(args)));\n },\n analogous: function analogous() {\n return this._applyCombination(_analogous, arguments);\n },\n complement: function complement() {\n return this._applyCombination(_complement, arguments);\n },\n monochromatic: function monochromatic() {\n return this._applyCombination(_monochromatic, arguments);\n },\n splitcomplement: function splitcomplement() {\n return this._applyCombination(_splitcomplement, arguments);\n },\n // Disabled until https://github.com/bgrins/TinyColor/issues/254\n // polyad: function (number) {\n // return this._applyCombination(polyad, [number]);\n // },\n triad: function triad() {\n return this._applyCombination(polyad, [3]);\n },\n tetrad: function tetrad() {\n return this._applyCombination(polyad, [4]);\n }\n};\n\n// If input is an object, force 1 into \"1.0\" to handle ratios properly\n// String input requires \"1.0\" as input, so 1 will be treated as 1\ntinycolor.fromRatio = function (color, opts) {\n if (_typeof(color) == \"object\") {\n var newColor = {};\n for (var i in color) {\n if (color.hasOwnProperty(i)) {\n if (i === \"a\") {\n newColor[i] = color[i];\n } else {\n newColor[i] = convertToPercentage(color[i]);\n }\n }\n }\n color = newColor;\n }\n return tinycolor(color, opts);\n};\n\n// Given a string or object, convert that input to RGB\n// Possible string inputs:\n//\n// \"red\"\n// \"#f00\" or \"f00\"\n// \"#ff0000\" or \"ff0000\"\n// \"#ff000000\" or \"ff000000\"\n// \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n// \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n// \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n// \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n// \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n// \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n// \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n//\nfunction inputToRGB(color) {\n var rgb = {\n r: 0,\n g: 0,\n b: 0\n };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n if (typeof color == \"string\") {\n color = stringInputToObject(color);\n }\n if (_typeof(color) == \"object\") {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = \"hsv\";\n } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = \"hsl\";\n }\n if (color.hasOwnProperty(\"a\")) {\n a = color.a;\n }\n }\n a = boundAlpha(a);\n return {\n ok: ok,\n format: color.format || format,\n r: Math.min(255, Math.max(rgb.r, 0)),\n g: Math.min(255, Math.max(rgb.g, 0)),\n b: Math.min(255, Math.max(rgb.b, 0)),\n a: a\n };\n}\n\n// Conversion Functions\n// --------------------\n\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>\n\n// `rgbToRgb`\n// Handle bounds / percentage checking to conform to CSS color spec\n// <http://www.w3.org/TR/css3-color/>\n// *Assumes:* r, g, b in [0, 255] or [0, 1]\n// *Returns:* { r, g, b } in [0, 255]\nfunction rgbToRgb(r, g, b) {\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255\n };\n}\n\n// `rgbToHsl`\n// Converts an RGB color value to HSL.\n// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n// *Returns:* { h, s, l } in [0,1]\nfunction rgbToHsl(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n l = (max + min) / 2;\n if (max == min) {\n h = s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return {\n h: h,\n s: s,\n l: l\n };\n}\n\n// `hslToRgb`\n// Converts an HSL color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hslToRgb(h, s, l) {\n var r, g, b;\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255\n };\n}\n\n// `rgbToHsv`\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nfunction rgbToHsv(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n v = max;\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n if (max == min) {\n h = 0; // achromatic\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return {\n h: h,\n s: s,\n v: v\n };\n}\n\n// `hsvToRgb`\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hsvToRgb(h, s, v) {\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n var i = Math.floor(h),\n f = h - i,\n p = v * (1 - s),\n q = v * (1 - f * s),\n t = v * (1 - (1 - f) * s),\n mod = i % 6,\n r = [v, q, p, p, t, v][mod],\n g = [t, v, v, q, p, p][mod],\n b = [p, p, t, v, v, q][mod];\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255\n };\n}\n\n// `rgbToHex`\n// Converts an RGB color to hex\n// Assumes r, g, and b are contained in the set [0, 255]\n// Returns a 3 or 6 character hex\nfunction rgbToHex(r, g, b, allow3Char) {\n var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n\n // Return a 3 character hex if possible\n if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n return hex.join(\"\");\n}\n\n// `rgbaToHex`\n// Converts an RGBA color plus alpha transparency to hex\n// Assumes r, g, b are contained in the set [0, 255] and\n// a in [0, 1]. Returns a 4 or 8 character rgba hex\nfunction rgbaToHex(r, g, b, a, allow4Char) {\n var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16)), pad2(convertDecimalToHex(a))];\n\n // Return a 4 character hex if possible\n if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n return hex.join(\"\");\n}\n\n// `rgbaToArgbHex`\n// Converts an RGBA color to an ARGB Hex8 string\n// Rarely used, but required for \"toFilter()\"\nfunction rgbaToArgbHex(r, g, b, a) {\n var hex = [pad2(convertDecimalToHex(a)), pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n return hex.join(\"\");\n}\n\n// `equals`\n// Can be called with any tinycolor input\ntinycolor.equals = function (color1, color2) {\n if (!color1 || !color2) return false;\n return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n};\ntinycolor.random = function () {\n return tinycolor.fromRatio({\n r: Math.random(),\n g: Math.random(),\n b: Math.random()\n });\n};\n\n// Modification Functions\n// ----------------------\n// Thanks to less.js for some of the basics here\n// <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>\n\nfunction _desaturate(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\nfunction _saturate(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\nfunction _greyscale(color) {\n return tinycolor(color).desaturate(100);\n}\nfunction _lighten(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\nfunction _brighten(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var rgb = tinycolor(color).toRgb();\n rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));\n rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));\n rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));\n return tinycolor(rgb);\n}\nfunction _darken(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\n// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n// Values outside of this range will be wrapped into this range.\nfunction _spin(color, amount) {\n var hsl = tinycolor(color).toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return tinycolor(hsl);\n}\n\n// Combination Functions\n// ---------------------\n// Thanks to jQuery xColor for some of the ideas behind these\n// <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>\n\nfunction _complement(color) {\n var hsl = tinycolor(color).toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return tinycolor(hsl);\n}\nfunction polyad(color, number) {\n if (isNaN(number) || number <= 0) {\n throw new Error(\"Argument to polyad must be a positive number\");\n }\n var hsl = tinycolor(color).toHsl();\n var result = [tinycolor(color)];\n var step = 360 / number;\n for (var i = 1; i < number; i++) {\n result.push(tinycolor({\n h: (hsl.h + i * step) % 360,\n s: hsl.s,\n l: hsl.l\n }));\n }\n return result;\n}\nfunction _splitcomplement(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [tinycolor(color), tinycolor({\n h: (h + 72) % 360,\n s: hsl.s,\n l: hsl.l\n }), tinycolor({\n h: (h + 216) % 360,\n s: hsl.s,\n l: hsl.l\n })];\n}\nfunction _analogous(color, results, slices) {\n results = results || 6;\n slices = slices || 30;\n var hsl = tinycolor(color).toHsl();\n var part = 360 / slices;\n var ret = [tinycolor(color)];\n for (hsl.h = (hsl.h - (part * results >> 1) + 720) % 360; --results;) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(tinycolor(hsl));\n }\n return ret;\n}\nfunction _monochromatic(color, results) {\n results = results || 6;\n var hsv = tinycolor(color).toHsv();\n var h = hsv.h,\n s = hsv.s,\n v = hsv.v;\n var ret = [];\n var modification = 1 / results;\n while (results--) {\n ret.push(tinycolor({\n h: h,\n s: s,\n v: v\n }));\n v = (v + modification) % 1;\n }\n return ret;\n}\n\n// Utility Functions\n// ---------------------\n\ntinycolor.mix = function (color1, color2, amount) {\n amount = amount === 0 ? 0 : amount || 50;\n var rgb1 = tinycolor(color1).toRgb();\n var rgb2 = tinycolor(color2).toRgb();\n var p = amount / 100;\n var rgba = {\n r: (rgb2.r - rgb1.r) * p + rgb1.r,\n g: (rgb2.g - rgb1.g) * p + rgb1.g,\n b: (rgb2.b - rgb1.b) * p + rgb1.b,\n a: (rgb2.a - rgb1.a) * p + rgb1.a\n };\n return tinycolor(rgba);\n};\n\n// Readability Functions\n// ---------------------\n// <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)\n\n// `contrast`\n// Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)\ntinycolor.readability = function (color1, color2) {\n var c1 = tinycolor(color1);\n var c2 = tinycolor(color2);\n return (Math.max(c1.getLuminance(), c2.getLuminance()) + 0.05) / (Math.min(c1.getLuminance(), c2.getLuminance()) + 0.05);\n};\n\n// `isReadable`\n// Ensure that foreground and background color combinations meet WCAG2 guidelines.\n// The third argument is an optional Object.\n// the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';\n// the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.\n// If the entire object is absent, isReadable defaults to {level:\"AA\",size:\"small\"}.\n\n// *Example*\n// tinycolor.isReadable(\"#000\", \"#111\") => false\n// tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\ntinycolor.isReadable = function (color1, color2, wcag2) {\n var readability = tinycolor.readability(color1, color2);\n var wcag2Parms, out;\n out = false;\n wcag2Parms = validateWCAG2Parms(wcag2);\n switch (wcag2Parms.level + wcag2Parms.size) {\n case \"AAsmall\":\n case \"AAAlarge\":\n out = readability >= 4.5;\n break;\n case \"AAlarge\":\n out = readability >= 3;\n break;\n case \"AAAsmall\":\n out = readability >= 7;\n break;\n }\n return out;\n};\n\n// `mostReadable`\n// Given a base color and a list of possible foreground or background\n// colors for that base, returns the most readable color.\n// Optionally returns Black or White if the most readable color is unreadable.\n// *Example*\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString(); // \"#ffffff\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\ntinycolor.mostReadable = function (baseColor, colorList, args) {\n var bestColor = null;\n var bestScore = 0;\n var readability;\n var includeFallbackColors, level, size;\n args = args || {};\n includeFallbackColors = args.includeFallbackColors;\n level = args.level;\n size = args.size;\n for (var i = 0; i < colorList.length; i++) {\n readability = tinycolor.readability(baseColor, colorList[i]);\n if (readability > bestScore) {\n bestScore = readability;\n bestColor = tinycolor(colorList[i]);\n }\n }\n if (tinycolor.isReadable(baseColor, bestColor, {\n level: level,\n size: size\n }) || !includeFallbackColors) {\n return bestColor;\n } else {\n args.includeFallbackColors = false;\n return tinycolor.mostReadable(baseColor, [\"#fff\", \"#000\"], args);\n }\n};\n\n// Big List of Colors\n// ------------------\n// <https://www.w3.org/TR/css-color-4/#named-colors>\nvar names = tinycolor.names = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"0ff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000\",\n blanchedalmond: \"ffebcd\",\n blue: \"00f\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n burntsienna: \"ea7e5d\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"0ff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"f0f\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"789\",\n lightslategrey: \"789\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"0f0\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"f0f\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"f00\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"fff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ff0\",\n yellowgreen: \"9acd32\"\n};\n\n// Make it easy to access colors via `hexNames[hex]`\nvar hexNames = tinycolor.hexNames = flip(names);\n\n// Utilities\n// ---------\n\n// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\nfunction flip(o) {\n var flipped = {};\n for (var i in o) {\n if (o.hasOwnProperty(i)) {\n flipped[o[i]] = i;\n }\n }\n return flipped;\n}\n\n// Return a valid alpha value [0,1] with all invalid values being set to 1\nfunction boundAlpha(a) {\n a = parseFloat(a);\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n return a;\n}\n\n// Take input from [0, n] and return it as [0, 1]\nfunction bound01(n, max) {\n if (isOnePointZero(n)) n = \"100%\";\n var processPercent = isPercentage(n);\n n = Math.min(max, Math.max(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if (Math.abs(n - max) < 0.000001) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return n % max / parseFloat(max);\n}\n\n// Force a number between 0 and 1\nfunction clamp01(val) {\n return Math.min(1, Math.max(0, val));\n}\n\n// Parse a base-16 hex value into a base-10 integer\nfunction parseIntFromHex(val) {\n return parseInt(val, 16);\n}\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\nfunction isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf(\".\") != -1 && parseFloat(n) === 1;\n}\n\n// Check to see if string passed in is a percentage\nfunction isPercentage(n) {\n return typeof n === \"string\" && n.indexOf(\"%\") != -1;\n}\n\n// Force a hex value to have 2 characters\nfunction pad2(c) {\n return c.length == 1 ? \"0\" + c : \"\" + c;\n}\n\n// Replace a decimal with it's percentage value\nfunction convertToPercentage(n) {\n if (n <= 1) {\n n = n * 100 + \"%\";\n }\n return n;\n}\n\n// Converts a decimal to a hex value\nfunction convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n}\n// Converts a hex value to a decimal\nfunction convertHexToDecimal(h) {\n return parseIntFromHex(h) / 255;\n}\nvar matchers = function () {\n // <http://www.w3.org/TR/css3-values/#integers>\n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // <http://www.w3.org/TR/css3-values/#number-value>\n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n}();\n\n// `isValidCSSUnit`\n// Take in a single string / number and check to see if it looks like a CSS unit\n// (see `matchers` above for definition).\nfunction isValidCSSUnit(color) {\n return !!matchers.CSS_UNIT.exec(color);\n}\n\n// `stringInputToObject`\n// Permissive string parsing. Take in a number of formats, and output an object\n// based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\nfunction stringInputToObject(color) {\n color = color.replace(trimLeft, \"\").replace(trimRight, \"\").toLowerCase();\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n } else if (color == \"transparent\") {\n return {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n format: \"name\"\n };\n }\n\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match;\n if (match = matchers.rgb.exec(color)) {\n return {\n r: match[1],\n g: match[2],\n b: match[3]\n };\n }\n if (match = matchers.rgba.exec(color)) {\n return {\n r: match[1],\n g: match[2],\n b: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hsl.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n l: match[3]\n };\n }\n if (match = matchers.hsla.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n l: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hsv.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n v: match[3]\n };\n }\n if (match = matchers.hsva.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n v: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hex8.exec(color)) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if (match = matchers.hex6.exec(color)) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n if (match = matchers.hex4.exec(color)) {\n return {\n r: parseIntFromHex(match[1] + \"\" + match[1]),\n g: parseIntFromHex(match[2] + \"\" + match[2]),\n b: parseIntFromHex(match[3] + \"\" + match[3]),\n a: convertHexToDecimal(match[4] + \"\" + match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if (match = matchers.hex3.exec(color)) {\n return {\n r: parseIntFromHex(match[1] + \"\" + match[1]),\n g: parseIntFromHex(match[2] + \"\" + match[2]),\n b: parseIntFromHex(match[3] + \"\" + match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n return false;\n}\nfunction validateWCAG2Parms(parms) {\n // return valid WCAG2 parms for isReadable.\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n var level, size;\n parms = parms || {\n level: \"AA\",\n size: \"small\"\n };\n level = (parms.level || \"AA\").toUpperCase();\n size = (parms.size || \"small\").toLowerCase();\n if (level !== \"AA\" && level !== \"AAA\") {\n level = \"AA\";\n }\n if (size !== \"small\" && size !== \"large\") {\n size = \"small\";\n }\n return {\n level: level,\n size: size\n };\n}\n\nexport { tinycolor as default };\n","// This file is autogenerated. It's used to publish CJS to npm.\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.tinycolor = factory());\n})(this, (function () { 'use strict';\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n }\n\n // https://github.com/bgrins/TinyColor\n // Brian Grinstead, MIT License\n\n var trimLeft = /^\\s+/;\n var trimRight = /\\s+$/;\n function tinycolor(color, opts) {\n color = color ? color : \"\";\n opts = opts || {};\n\n // If input is already a tinycolor, return itself\n if (color instanceof tinycolor) {\n return color;\n }\n // If we are called as a function, call using new instead\n if (!(this instanceof tinycolor)) {\n return new tinycolor(color, opts);\n }\n var rgb = inputToRGB(color);\n this._originalInput = color, this._r = rgb.r, this._g = rgb.g, this._b = rgb.b, this._a = rgb.a, this._roundA = Math.round(100 * this._a) / 100, this._format = opts.format || rgb.format;\n this._gradientType = opts.gradientType;\n\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this._r < 1) this._r = Math.round(this._r);\n if (this._g < 1) this._g = Math.round(this._g);\n if (this._b < 1) this._b = Math.round(this._b);\n this._ok = rgb.ok;\n }\n tinycolor.prototype = {\n isDark: function isDark() {\n return this.getBrightness() < 128;\n },\n isLight: function isLight() {\n return !this.isDark();\n },\n isValid: function isValid() {\n return this._ok;\n },\n getOriginalInput: function getOriginalInput() {\n return this._originalInput;\n },\n getFormat: function getFormat() {\n return this._format;\n },\n getAlpha: function getAlpha() {\n return this._a;\n },\n getBrightness: function getBrightness() {\n //http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n },\n getLuminance: function getLuminance() {\n //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var RsRGB, GsRGB, BsRGB, R, G, B;\n RsRGB = rgb.r / 255;\n GsRGB = rgb.g / 255;\n BsRGB = rgb.b / 255;\n if (RsRGB <= 0.03928) R = RsRGB / 12.92;else R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n if (GsRGB <= 0.03928) G = GsRGB / 12.92;else G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n if (BsRGB <= 0.03928) B = BsRGB / 12.92;else B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n },\n setAlpha: function setAlpha(value) {\n this._a = boundAlpha(value);\n this._roundA = Math.round(100 * this._a) / 100;\n return this;\n },\n toHsv: function toHsv() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n return {\n h: hsv.h * 360,\n s: hsv.s,\n v: hsv.v,\n a: this._a\n };\n },\n toHsvString: function toHsvString() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n var h = Math.round(hsv.h * 360),\n s = Math.round(hsv.s * 100),\n v = Math.round(hsv.v * 100);\n return this._a == 1 ? \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" : \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \" + this._roundA + \")\";\n },\n toHsl: function toHsl() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n return {\n h: hsl.h * 360,\n s: hsl.s,\n l: hsl.l,\n a: this._a\n };\n },\n toHslString: function toHslString() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n var h = Math.round(hsl.h * 360),\n s = Math.round(hsl.s * 100),\n l = Math.round(hsl.l * 100);\n return this._a == 1 ? \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" : \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \" + this._roundA + \")\";\n },\n toHex: function toHex(allow3Char) {\n return rgbToHex(this._r, this._g, this._b, allow3Char);\n },\n toHexString: function toHexString(allow3Char) {\n return \"#\" + this.toHex(allow3Char);\n },\n toHex8: function toHex8(allow4Char) {\n return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n },\n toHex8String: function toHex8String(allow4Char) {\n return \"#\" + this.toHex8(allow4Char);\n },\n toRgb: function toRgb() {\n return {\n r: Math.round(this._r),\n g: Math.round(this._g),\n b: Math.round(this._b),\n a: this._a\n };\n },\n toRgbString: function toRgbString() {\n return this._a == 1 ? \"rgb(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \")\" : \"rgba(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \", \" + this._roundA + \")\";\n },\n toPercentageRgb: function toPercentageRgb() {\n return {\n r: Math.round(bound01(this._r, 255) * 100) + \"%\",\n g: Math.round(bound01(this._g, 255) * 100) + \"%\",\n b: Math.round(bound01(this._b, 255) * 100) + \"%\",\n a: this._a\n };\n },\n toPercentageRgbString: function toPercentageRgbString() {\n return this._a == 1 ? \"rgb(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%)\" : \"rgba(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n },\n toName: function toName() {\n if (this._a === 0) {\n return \"transparent\";\n }\n if (this._a < 1) {\n return false;\n }\n return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n },\n toFilter: function toFilter(secondColor) {\n var hex8String = \"#\" + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n var secondHex8String = hex8String;\n var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n if (secondColor) {\n var s = tinycolor(secondColor);\n secondHex8String = \"#\" + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n }\n return \"progid:DXImageTransform.Microsoft.gradient(\" + gradientType + \"startColorstr=\" + hex8String + \",endColorstr=\" + secondHex8String + \")\";\n },\n toString: function toString(format) {\n var formatSet = !!format;\n format = format || this._format;\n var formattedString = false;\n var hasAlpha = this._a < 1 && this._a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === \"name\" && this._a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === \"rgb\") {\n formattedString = this.toRgbString();\n }\n if (format === \"prgb\") {\n formattedString = this.toPercentageRgbString();\n }\n if (format === \"hex\" || format === \"hex6\") {\n formattedString = this.toHexString();\n }\n if (format === \"hex3\") {\n formattedString = this.toHexString(true);\n }\n if (format === \"hex4\") {\n formattedString = this.toHex8String(true);\n }\n if (format === \"hex8\") {\n formattedString = this.toHex8String();\n }\n if (format === \"name\") {\n formattedString = this.toName();\n }\n if (format === \"hsl\") {\n formattedString = this.toHslString();\n }\n if (format === \"hsv\") {\n formattedString = this.toHsvString();\n }\n return formattedString || this.toHexString();\n },\n clone: function clone() {\n return tinycolor(this.toString());\n },\n _applyModification: function _applyModification(fn, args) {\n var color = fn.apply(null, [this].concat([].slice.call(args)));\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this.setAlpha(color._a);\n return this;\n },\n lighten: function lighten() {\n return this._applyModification(_lighten, arguments);\n },\n brighten: function brighten() {\n return this._applyModification(_brighten, arguments);\n },\n darken: function darken() {\n return this._applyModification(_darken, arguments);\n },\n desaturate: function desaturate() {\n return this._applyModification(_desaturate, arguments);\n },\n saturate: function saturate() {\n return this._applyModification(_saturate, arguments);\n },\n greyscale: function greyscale() {\n return this._applyModification(_greyscale, arguments);\n },\n spin: function spin() {\n return this._applyModification(_spin, arguments);\n },\n _applyCombination: function _applyCombination(fn, args) {\n return fn.apply(null, [this].concat([].slice.call(args)));\n },\n analogous: function analogous() {\n return this._applyCombination(_analogous, arguments);\n },\n complement: function complement() {\n return this._applyCombination(_complement, arguments);\n },\n monochromatic: function monochromatic() {\n return this._applyCombination(_monochromatic, arguments);\n },\n splitcomplement: function splitcomplement() {\n return this._applyCombination(_splitcomplement, arguments);\n },\n // Disabled until https://github.com/bgrins/TinyColor/issues/254\n // polyad: function (number) {\n // return this._applyCombination(polyad, [number]);\n // },\n triad: function triad() {\n return this._applyCombination(polyad, [3]);\n },\n tetrad: function tetrad() {\n return this._applyCombination(polyad, [4]);\n }\n };\n\n // If input is an object, force 1 into \"1.0\" to handle ratios properly\n // String input requires \"1.0\" as input, so 1 will be treated as 1\n tinycolor.fromRatio = function (color, opts) {\n if (_typeof(color) == \"object\") {\n var newColor = {};\n for (var i in color) {\n if (color.hasOwnProperty(i)) {\n if (i === \"a\") {\n newColor[i] = color[i];\n } else {\n newColor[i] = convertToPercentage(color[i]);\n }\n }\n }\n color = newColor;\n }\n return tinycolor(color, opts);\n };\n\n // Given a string or object, convert that input to RGB\n // Possible string inputs:\n //\n // \"red\"\n // \"#f00\" or \"f00\"\n // \"#ff0000\" or \"ff0000\"\n // \"#ff000000\" or \"ff000000\"\n // \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n // \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n // \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n // \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n // \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n // \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n // \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n //\n function inputToRGB(color) {\n var rgb = {\n r: 0,\n g: 0,\n b: 0\n };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n if (typeof color == \"string\") {\n color = stringInputToObject(color);\n }\n if (_typeof(color) == \"object\") {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = \"hsv\";\n } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = \"hsl\";\n }\n if (color.hasOwnProperty(\"a\")) {\n a = color.a;\n }\n }\n a = boundAlpha(a);\n return {\n ok: ok,\n format: color.format || format,\n r: Math.min(255, Math.max(rgb.r, 0)),\n g: Math.min(255, Math.max(rgb.g, 0)),\n b: Math.min(255, Math.max(rgb.b, 0)),\n a: a\n };\n }\n\n // Conversion Functions\n // --------------------\n\n // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n // <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>\n\n // `rgbToRgb`\n // Handle bounds / percentage checking to conform to CSS color spec\n // <http://www.w3.org/TR/css3-color/>\n // *Assumes:* r, g, b in [0, 255] or [0, 1]\n // *Returns:* { r, g, b } in [0, 255]\n function rgbToRgb(r, g, b) {\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255\n };\n }\n\n // `rgbToHsl`\n // Converts an RGB color value to HSL.\n // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n // *Returns:* { h, s, l } in [0,1]\n function rgbToHsl(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n l = (max + min) / 2;\n if (max == min) {\n h = s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return {\n h: h,\n s: s,\n l: l\n };\n }\n\n // `hslToRgb`\n // Converts an HSL color value to RGB.\n // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n // *Returns:* { r, g, b } in the set [0, 255]\n function hslToRgb(h, s, l) {\n var r, g, b;\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255\n };\n }\n\n // `rgbToHsv`\n // Converts an RGB color value to HSV\n // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n // *Returns:* { h, s, v } in [0,1]\n function rgbToHsv(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n v = max;\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n if (max == min) {\n h = 0; // achromatic\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return {\n h: h,\n s: s,\n v: v\n };\n }\n\n // `hsvToRgb`\n // Converts an HSV color value to RGB.\n // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n // *Returns:* { r, g, b } in the set [0, 255]\n function hsvToRgb(h, s, v) {\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n var i = Math.floor(h),\n f = h - i,\n p = v * (1 - s),\n q = v * (1 - f * s),\n t = v * (1 - (1 - f) * s),\n mod = i % 6,\n r = [v, q, p, p, t, v][mod],\n g = [t, v, v, q, p, p][mod],\n b = [p, p, t, v, v, q][mod];\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255\n };\n }\n\n // `rgbToHex`\n // Converts an RGB color to hex\n // Assumes r, g, and b are contained in the set [0, 255]\n // Returns a 3 or 6 character hex\n function rgbToHex(r, g, b, allow3Char) {\n var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n\n // Return a 3 character hex if possible\n if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n return hex.join(\"\");\n }\n\n // `rgbaToHex`\n // Converts an RGBA color plus alpha transparency to hex\n // Assumes r, g, b are contained in the set [0, 255] and\n // a in [0, 1]. Returns a 4 or 8 character rgba hex\n function rgbaToHex(r, g, b, a, allow4Char) {\n var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16)), pad2(convertDecimalToHex(a))];\n\n // Return a 4 character hex if possible\n if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n return hex.join(\"\");\n }\n\n // `rgbaToArgbHex`\n // Converts an RGBA color to an ARGB Hex8 string\n // Rarely used, but required for \"toFilter()\"\n function rgbaToArgbHex(r, g, b, a) {\n var hex = [pad2(convertDecimalToHex(a)), pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n return hex.join(\"\");\n }\n\n // `equals`\n // Can be called with any tinycolor input\n tinycolor.equals = function (color1, color2) {\n if (!color1 || !color2) return false;\n return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n };\n tinycolor.random = function () {\n return tinycolor.fromRatio({\n r: Math.random(),\n g: Math.random(),\n b: Math.random()\n });\n };\n\n // Modification Functions\n // ----------------------\n // Thanks to less.js for some of the basics here\n // <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>\n\n function _desaturate(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n }\n function _saturate(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n }\n function _greyscale(color) {\n return tinycolor(color).desaturate(100);\n }\n function _lighten(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n }\n function _brighten(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var rgb = tinycolor(color).toRgb();\n rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));\n rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));\n rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));\n return tinycolor(rgb);\n }\n function _darken(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n }\n\n // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n // Values outside of this range will be wrapped into this range.\n function _spin(color, amount) {\n var hsl = tinycolor(color).toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return tinycolor(hsl);\n }\n\n // Combination Functions\n // ---------------------\n // Thanks to jQuery xColor for some of the ideas behind these\n // <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>\n\n function _complement(color) {\n var hsl = tinycolor(color).toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return tinycolor(hsl);\n }\n function polyad(color, number) {\n if (isNaN(number) || number <= 0) {\n throw new Error(\"Argument to polyad must be a positive number\");\n }\n var hsl = tinycolor(color).toHsl();\n var result = [tinycolor(color)];\n var step = 360 / number;\n for (var i = 1; i < number; i++) {\n result.push(tinycolor({\n h: (hsl.h + i * step) % 360,\n s: hsl.s,\n l: hsl.l\n }));\n }\n return result;\n }\n function _splitcomplement(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [tinycolor(color), tinycolor({\n h: (h + 72) % 360,\n s: hsl.s,\n l: hsl.l\n }), tinycolor({\n h: (h + 216) % 360,\n s: hsl.s,\n l: hsl.l\n })];\n }\n function _analogous(color, results, slices) {\n results = results || 6;\n slices = slices || 30;\n var hsl = tinycolor(color).toHsl();\n var part = 360 / slices;\n var ret = [tinycolor(color)];\n for (hsl.h = (hsl.h - (part * results >> 1) + 720) % 360; --results;) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(tinycolor(hsl));\n }\n return ret;\n }\n function _monochromatic(color, results) {\n results = results || 6;\n var hsv = tinycolor(color).toHsv();\n var h = hsv.h,\n s = hsv.s,\n v = hsv.v;\n var ret = [];\n var modification = 1 / results;\n while (results--) {\n ret.push(tinycolor({\n h: h,\n s: s,\n v: v\n }));\n v = (v + modification) % 1;\n }\n return ret;\n }\n\n // Utility Functions\n // ---------------------\n\n tinycolor.mix = function (color1, color2, amount) {\n amount = amount === 0 ? 0 : amount || 50;\n var rgb1 = tinycolor(color1).toRgb();\n var rgb2 = tinycolor(color2).toRgb();\n var p = amount / 100;\n var rgba = {\n r: (rgb2.r - rgb1.r) * p + rgb1.r,\n g: (rgb2.g - rgb1.g) * p + rgb1.g,\n b: (rgb2.b - rgb1.b) * p + rgb1.b,\n a: (rgb2.a - rgb1.a) * p + rgb1.a\n };\n return tinycolor(rgba);\n };\n\n // Readability Functions\n // ---------------------\n // <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)\n\n // `contrast`\n // Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)\n tinycolor.readability = function (color1, color2) {\n var c1 = tinycolor(color1);\n var c2 = tinycolor(color2);\n return (Math.max(c1.getLuminance(), c2.getLuminance()) + 0.05) / (Math.min(c1.getLuminance(), c2.getLuminance()) + 0.05);\n };\n\n // `isReadable`\n // Ensure that foreground and background color combinations meet WCAG2 guidelines.\n // The third argument is an optional Object.\n // the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';\n // the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.\n // If the entire object is absent, isReadable defaults to {level:\"AA\",size:\"small\"}.\n\n // *Example*\n // tinycolor.isReadable(\"#000\", \"#111\") => false\n // tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\n tinycolor.isReadable = function (color1, color2, wcag2) {\n var readability = tinycolor.readability(color1, color2);\n var wcag2Parms, out;\n out = false;\n wcag2Parms = validateWCAG2Parms(wcag2);\n switch (wcag2Parms.level + wcag2Parms.size) {\n case \"AAsmall\":\n case \"AAAlarge\":\n out = readability >= 4.5;\n break;\n case \"AAlarge\":\n out = readability >= 3;\n break;\n case \"AAAsmall\":\n out = readability >= 7;\n break;\n }\n return out;\n };\n\n // `mostReadable`\n // Given a base color and a list of possible foreground or background\n // colors for that base, returns the most readable color.\n // Optionally returns Black or White if the most readable color is unreadable.\n // *Example*\n // tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n // tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString(); // \"#ffffff\"\n // tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n // tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\n tinycolor.mostReadable = function (baseColor, colorList, args) {\n var bestColor = null;\n var bestScore = 0;\n var readability;\n var includeFallbackColors, level, size;\n args = args || {};\n includeFallbackColors = args.includeFallbackColors;\n level = args.level;\n size = args.size;\n for (var i = 0; i < colorList.length; i++) {\n readability = tinycolor.readability(baseColor, colorList[i]);\n if (readability > bestScore) {\n bestScore = readability;\n bestColor = tinycolor(colorList[i]);\n }\n }\n if (tinycolor.isReadable(baseColor, bestColor, {\n level: level,\n size: size\n }) || !includeFallbackColors) {\n return bestColor;\n } else {\n args.includeFallbackColors = false;\n return tinycolor.mostReadable(baseColor, [\"#fff\", \"#000\"], args);\n }\n };\n\n // Big List of Colors\n // ------------------\n // <https://www.w3.org/TR/css-color-4/#named-colors>\n var names = tinycolor.names = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"0ff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000\",\n blanchedalmond: \"ffebcd\",\n blue: \"00f\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n burntsienna: \"ea7e5d\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"0ff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"f0f\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"789\",\n lightslategrey: \"789\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"0f0\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"f0f\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"f00\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"fff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ff0\",\n yellowgreen: \"9acd32\"\n };\n\n // Make it easy to access colors via `hexNames[hex]`\n var hexNames = tinycolor.hexNames = flip(names);\n\n // Utilities\n // ---------\n\n // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\n function flip(o) {\n var flipped = {};\n for (var i in o) {\n if (o.hasOwnProperty(i)) {\n flipped[o[i]] = i;\n }\n }\n return flipped;\n }\n\n // Return a valid alpha value [0,1] with all invalid values being set to 1\n function boundAlpha(a) {\n a = parseFloat(a);\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n return a;\n }\n\n // Take input from [0, n] and return it as [0, 1]\n function bound01(n, max) {\n if (isOnePointZero(n)) n = \"100%\";\n var processPercent = isPercentage(n);\n n = Math.min(max, Math.max(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if (Math.abs(n - max) < 0.000001) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return n % max / parseFloat(max);\n }\n\n // Force a number between 0 and 1\n function clamp01(val) {\n return Math.min(1, Math.max(0, val));\n }\n\n // Parse a base-16 hex value into a base-10 integer\n function parseIntFromHex(val) {\n return parseInt(val, 16);\n }\n\n // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\n function isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf(\".\") != -1 && parseFloat(n) === 1;\n }\n\n // Check to see if string passed in is a percentage\n function isPercentage(n) {\n return typeof n === \"string\" && n.indexOf(\"%\") != -1;\n }\n\n // Force a hex value to have 2 characters\n function pad2(c) {\n return c.length == 1 ? \"0\" + c : \"\" + c;\n }\n\n // Replace a decimal with it's percentage value\n function convertToPercentage(n) {\n if (n <= 1) {\n n = n * 100 + \"%\";\n }\n return n;\n }\n\n // Converts a decimal to a hex value\n function convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n }\n // Converts a hex value to a decimal\n function convertHexToDecimal(h) {\n return parseIntFromHex(h) / 255;\n }\n var matchers = function () {\n // <http://www.w3.org/TR/css3-values/#integers>\n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // <http://www.w3.org/TR/css3-values/#number-value>\n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n }();\n\n // `isValidCSSUnit`\n // Take in a single string / number and check to see if it looks like a CSS unit\n // (see `matchers` above for definition).\n function isValidCSSUnit(color) {\n return !!matchers.CSS_UNIT.exec(color);\n }\n\n // `stringInputToObject`\n // Permissive string parsing. Take in a number of formats, and output an object\n // based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\n function stringInputToObject(color) {\n color = color.replace(trimLeft, \"\").replace(trimRight, \"\").toLowerCase();\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n } else if (color == \"transparent\") {\n return {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n format: \"name\"\n };\n }\n\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match;\n if (match = matchers.rgb.exec(color)) {\n return {\n r: match[1],\n g: match[2],\n b: match[3]\n };\n }\n if (match = matchers.rgba.exec(color)) {\n return {\n r: match[1],\n g: match[2],\n b: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hsl.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n l: match[3]\n };\n }\n if (match = matchers.hsla.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n l: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hsv.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n v: match[3]\n };\n }\n if (match = matchers.hsva.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n v: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hex8.exec(color)) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if (match = matchers.hex6.exec(color)) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n if (match = matchers.hex4.exec(color)) {\n return {\n r: parseIntFromHex(match[1] + \"\" + match[1]),\n g: parseIntFromHex(match[2] + \"\" + match[2]),\n b: parseIntFromHex(match[3] + \"\" + match[3]),\n a: convertHexToDecimal(match[4] + \"\" + match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if (match = matchers.hex3.exec(color)) {\n return {\n r: parseIntFromHex(match[1] + \"\" + match[1]),\n g: parseIntFromHex(match[2] + \"\" + match[2]),\n b: parseIntFromHex(match[3] + \"\" + match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n return false;\n }\n function validateWCAG2Parms(parms) {\n // return valid WCAG2 parms for isReadable.\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n var level, size;\n parms = parms || {\n level: \"AA\",\n size: \"small\"\n };\n level = (parms.level || \"AA\").toUpperCase();\n size = (parms.size || \"small\").toLowerCase();\n if (level !== \"AA\" && level !== \"AAA\") {\n level = \"AA\";\n }\n if (size !== \"small\" && size !== \"large\") {\n size = \"small\";\n }\n return {\n level: level,\n size: size\n };\n }\n\n return tinycolor;\n\n}));\n","const tinycolor = require('tinycolor2');\n\n/**\n * @typedef {Object} TinyGradient.StopInput\n * @property {ColorInput} color\n * @property {number} pos\n */\n\n/**\n * @typedef {Object} TinyGradient.StepValue\n * @type {number} [r]\n * @type {number} [g]\n * @type {number} [b]\n * @type {number} [h]\n * @type {number} [s]\n * @type {number} [v]\n * @type {number} [a]\n */\n\n/**\n * @type {StepValue}\n */\nconst RGBA_MAX = { r: 256, g: 256, b: 256, a: 1 };\n\n/**\n * @type {StepValue}\n */\nconst HSVA_MAX = { h: 360, s: 1, v: 1, a: 1 };\n\n/**\n * Linearly compute the step size between start and end (not normalized)\n * @param {StepValue} start\n * @param {StepValue} end\n * @param {number} steps - number of desired steps\n * @return {StepValue}\n */\nfunction stepize(start, end, steps) {\n let step = {};\n\n for (let k in start) {\n if (start.hasOwnProperty(k)) {\n step[k] = steps === 0 ? 0 : (end[k] - start[k]) / steps;\n }\n }\n\n return step;\n}\n\n/**\n * Compute the final step color\n * @param {StepValue} step - from `stepize`\n * @param {StepValue} start\n * @param {number} i - color index\n * @param {StepValue} max - rgba or hsva of maximum values for each channel\n * @return {StepValue}\n */\nfunction interpolate(step, start, i, max) {\n let color = {};\n\n for (let k in start) {\n if (start.hasOwnProperty(k)) {\n color[k] = step[k] * i + start[k];\n color[k] = color[k] < 0 ? color[k] + max[k] : (max[k] !== 1 ? color[k] % max[k] : color[k]);\n }\n }\n\n return color;\n}\n\n/**\n * Generate gradient with RGBa interpolation\n * @param {StopInput} stop1\n * @param {StopInput} stop2\n * @param {number} steps\n * @return {tinycolor[]} color1 included, color2 excluded\n */\nfunction interpolateRgb(stop1, stop2, steps) {\n const start = stop1.color.toRgb();\n const end = stop2.color.toRgb();\n const step = stepize(start, end, steps);\n let gradient = [stop1.color];\n\n for (let i = 1; i < steps; i++) {\n const color = interpolate(step, start, i, RGBA_MAX);\n gradient.push(tinycolor(color));\n }\n\n return gradient;\n}\n\n/**\n * Generate gradient with HSVa interpolation\n * @param {StopInput} stop1\n * @param {StopInput} stop2\n * @param {number} steps\n * @param {boolean|'long'|'short'} mode\n * @return {tinycolor[]} color1 included, color2 excluded\n */\nfunction interpolateHsv(stop1, stop2, steps, mode) {\n const start = stop1.color.toHsv();\n const end = stop2.color.toHsv();\n\n // rgb interpolation if one of the steps in grayscale\n if (start.s === 0 || end.s === 0) {\n return interpolateRgb(stop1, stop2, steps);\n }\n\n let trigonometric;\n if (typeof mode === 'boolean') {\n trigonometric = mode;\n }\n else {\n const trigShortest = (start.h < end.h && end.h - start.h < 180) || (start.h > end.h && start.h - end.h > 180);\n trigonometric = (mode === 'long' && trigShortest) || (mode === 'short' && !trigShortest);\n }\n\n const step = stepize(start, end, steps);\n let gradient = [stop1.color];\n\n // recompute hue\n let diff;\n if ((start.h <= end.h && !trigonometric) || (start.h >= end.h && trigonometric)) {\n diff = end.h - start.h;\n }\n else if (trigonometric) {\n diff = 360 - end.h + start.h;\n }\n else {\n diff = 360 - start.h + end.h;\n }\n step.h = Math.pow(-1, trigonometric ? 1 : 0) * Math.abs(diff) / steps;\n\n for (let i = 1; i < steps; i++) {\n const color = interpolate(step, start, i, HSVA_MAX);\n gradient.push(tinycolor(color));\n }\n\n return gradient;\n}\n\n/**\n * Compute substeps between each stops\n * @param {StopInput[]} stops\n * @param {number} steps\n * @return {number[]}\n */\nfunction computeSubsteps(stops, steps) {\n const l = stops.length;\n\n // validation\n steps = parseInt(steps, 10);\n\n if (isNaN(steps) || steps < 2) {\n throw new Error('Invalid number of steps (< 2)');\n }\n if (steps < l) {\n throw new Error('Number of steps cannot be inferior to number of stops');\n }\n\n // compute substeps from stop positions\n let substeps = [];\n\n for (let i = 1; i < l; i++) {\n const step = (steps - 1) * (stops[i].pos - stops[i - 1].pos);\n substeps.push(Math.max(1, Math.round(step)));\n }\n\n // adjust number of steps\n let totalSubsteps = 1;\n for (let n = l - 1; n--;) totalSubsteps += substeps[n];\n\n while (totalSubsteps !== steps) {\n if (totalSubsteps < steps) {\n const min = Math.min.apply(null, substeps);\n substeps[substeps.indexOf(min)]++;\n totalSubsteps++;\n }\n else {\n const max = Math.max.apply(null, substeps);\n substeps[substeps.indexOf(max)]--;\n totalSubsteps--;\n }\n }\n\n return substeps;\n}\n\n/**\n * Compute the color at a specific position\n * @param {StopInput[]} stops\n * @param {number} pos\n * @param {string} method\n * @param {StepValue} max\n * @returns {tinycolor}\n */\nfunction computeAt(stops, pos, method, max) {\n if (pos < 0 || pos > 1) {\n throw new Error('Position must be between 0 and 1');\n }\n\n let start, end;\n for (let i = 0, l = stops.length; i < l - 1; i++) {\n if (pos >= stops[i].pos && pos < stops[i + 1].pos) {\n start = stops[i];\n end = stops[i + 1];\n break;\n }\n }\n\n if (!start) {\n start = end = stops[stops.length - 1];\n }\n\n const step = stepize(start.color[method](), end.color[method](), (end.pos - start.pos) * 100);\n const color = interpolate(step, start.color[method](), (pos - start.pos) * 100, max);\n return tinycolor(color);\n}\n\nclass TinyGradient {\n /**\n * @param {StopInput[]|ColorInput[]} stops\n * @returns {TinyGradient}\n */\n constructor(stops) {\n // validation\n if (stops.length < 2) {\n throw new Error('Invalid number of stops (< 2)');\n }\n\n const havingPositions = stops[0].pos !== undefined;\n let l = stops.length;\n let p = -1;\n let lastColorLess = false;\n // create tinycolor objects and clean positions\n this.stops = stops.map((stop, i) => {\n const hasPosition = stop.pos !== undefined;\n if (havingPositions ^ hasPosition) {\n throw new Error('Cannot mix positionned and not posionned color stops');\n }\n\n if (hasPosition) {\n const hasColor = stop.color !== undefined;\n if (!hasColor && (lastColorLess || i === 0 || i === l - 1)) {\n throw new Error('Cannot define two consecutive position-only stops');\n }\n lastColorLess = !hasColor;\n\n stop = {\n color : hasColor ? tinycolor(stop.color) : null,\n colorLess: !hasColor,\n pos : stop.pos\n };\n\n if (stop.pos < 0 || stop.pos > 1) {\n throw new Error('Color stops positions must be between 0 and 1');\n }\n else if (stop.pos < p) {\n throw new Error('Color stops positions are not ordered');\n }\n p = stop.pos;\n }\n else {\n stop = {\n color: tinycolor(stop.color !== undefined ? stop.color : stop),\n pos : i / (l - 1)\n };\n }\n\n return stop;\n });\n\n if (this.stops[0].pos !== 0) {\n this.stops.unshift({\n color: this.stops[0].color,\n pos : 0\n });\n l++;\n }\n if (this.stops[l - 1].pos !== 1) {\n this.stops.push({\n color: this.stops[l - 1].color,\n pos : 1\n });\n }\n }\n\n /**\n * Return new instance with reversed stops\n * @return {TinyGradient}\n */\n reverse() {\n let stops = [];\n\n this.stops.forEach(function (stop) {\n stops.push({\n color: stop.color,\n pos : 1 - stop.pos\n });\n });\n\n return new TinyGradient(stops.reverse());\n }\n\n /**\n * Return new instance with looped stops\n * @return {TinyGradient}\n */\n loop() {\n let stops1 = [];\n let stops2 = [];\n\n this.stops.forEach((stop) => {\n stops1.push({\n color: stop.color,\n pos : stop.pos / 2\n });\n });\n\n this.stops.slice(0, -1).forEach((stop) => {\n stops2.push({\n color: stop.color,\n pos : 1 - stop.pos / 2\n });\n });\n\n return new TinyGradient(stops1.concat(stops2.reverse()));\n }\n\n /**\n * Generate gradient with RGBa interpolation\n * @param {number} steps\n * @return {tinycolor[]}\n */\n rgb(steps) {\n const substeps = computeSubsteps(this.stops, steps);\n let gradient = [];\n\n this.stops.forEach((stop, i) => {\n if (stop.colorLess) {\n stop.color = interpolateRgb(this.stops[i - 1], this.stops[i + 1], 2)[1];\n }\n });\n\n for (let i = 0, l = this.stops.length; i < l - 1; i++) {\n const rgb = interpolateRgb(this.stops[i], this.stops[i + 1], substeps[i]);\n gradient.splice(gradient.length, 0, ...rgb);\n }\n\n gradient.push(this.stops[this.stops.length - 1].color);\n\n return gradient;\n }\n\n /**\n * Generate gradient with HSVa interpolation\n * @param {number} steps\n * @param {boolean|'long'|'short'} [mode=false]\n * - false to step in clockwise\n * - true to step in trigonometric order\n * - 'short' to use the shortest way\n * - 'long' to use the longest way\n * @return {tinycolor[]}\n */\n hsv(steps, mode) {\n const substeps = computeSubsteps(this.stops, steps);\n let gradient = [];\n\n this.stops.forEach((stop, i) => {\n if (stop.colorLess) {\n stop.color = interpolateHsv(this.stops[i - 1], this.stops[i + 1], 2, mode)[1];\n }\n });\n\n for (let i = 0, l = this.stops.length; i < l - 1; i++) {\n const hsv = interpolateHsv(this.stops[i], this.stops[i + 1], substeps[i], mode);\n gradient.splice(gradient.length, 0, ...hsv);\n }\n\n gradient.push(this.stops[this.stops.length - 1].color);\n\n return gradient;\n }\n\n /**\n * Generate CSS3 command (no prefix) for this gradient\n * @param {String} [mode=linear] - 'linear' or 'radial'\n * @param {String} [direction] - default is 'to right' or 'ellipse at center'\n * @return {String}\n */\n css(mode, direction) {\n mode = mode || 'linear';\n direction = direction || (mode === 'linear' ? 'to right' : 'ellipse at center');\n\n let css = mode + '-gradient(' + direction;\n this.stops.forEach(function (stop) {\n css += ', ' + (stop.colorLess ? '' : stop.color.toRgbString() + ' ') + (stop.pos * 100) + '%';\n });\n css += ')';\n return css;\n }\n\n /**\n * Returns the color at specific position with RGBa interpolation\n * @param {number} pos, between 0 and 1\n * @return {tinycolor}\n */\n rgbAt(pos) {\n return computeAt(this.stops, pos, 'toRgb', RGBA_MAX);\n }\n\n /**\n * Returns the color at specific position with HSVa interpolation\n * @param {number} pos, between 0 and 1\n * @return {tinycolor}\n */\n hsvAt(pos) {\n return computeAt(this.stops, pos, 'toHsv', HSVA_MAX);\n }\n}\n\n/**\n * @param {StopInput[]|ColorInput[]|StopInput...|ColorInput...} stops\n * @returns {TinyGradient}\n */\nmodule.exports = function (stops) {\n // varargs\n if (arguments.length === 1) {\n if (!Array.isArray(arguments[0])) {\n throw new Error('\"stops\" is not an array');\n }\n stops = arguments[0];\n }\n else {\n stops = Array.prototype.slice.call(arguments);\n }\n\n return new TinyGradient(stops);\n};\n","import {\n generatePalette,\n getPalette,\n getTheme,\n type DeepRequired,\n type S2Theme,\n type ThemeCfg,\n} from '@antv/s2';\nimport tinycolor from 'tinycolor2';\nimport tinygradient from 'tinygradient';\nimport {\n BASIC_SHEET_THEME_TYPE_COLOR_RELATIONS,\n DEFAULT_THEME_COLOR_LIST,\n SECONDARY_THEME_COLOR_TYPE_RELATIONS,\n SheetThemeColorType,\n SheetThemeType,\n} from '../../common-extra';\n\ntype ColorThemeGenerateParams = {\n /** 表格主题类型 */\n themeType: SheetThemeType;\n /** 表格颜色类型 */\n colorType: SheetThemeColorType;\n /** 表格自定义颜色值,如 #fff */\n customColor: string;\n};\n\nfunction clearBorderWidth(theme: Record<string, any>) {\n for (const key in theme) {\n if (typeof theme[key] === 'object' && theme[key] !== null) {\n clearBorderWidth(theme[key]);\n } else if (key.includes('BorderWidth')) {\n theme[key] = 0;\n }\n }\n}\n\nfunction getBackgroundColorOpacity(themeColorType: SheetThemeColorType) {\n if (themeColorType === SheetThemeColorType.SECONDARY) {\n return 0.25;\n }\n\n if (themeColorType === SheetThemeColorType.GRAY) {\n return 0.5;\n }\n\n return 0.05;\n}\n\n/**\n * 生成表格对应的主题 schema\n * @param params 生成主题的参数\n * @returns s2 主题配置\n */\nexport function generateColorTheme(\n params: ColorThemeGenerateParams,\n): ThemeCfg['theme'] {\n const {\n themeType: sheetThemeType,\n colorType: sheetThemeColorType,\n customColor: sheetThemeCustomColor,\n } = params;\n\n let themePalette: ThemeCfg['palette'];\n\n if (sheetThemeColorType === SheetThemeColorType.GRAY) {\n themePalette = getPalette('gray');\n } else {\n let brandColor =\n sheetThemeColorType === SheetThemeColorType.CUSTOM\n ? sheetThemeCustomColor ?? DEFAULT_THEME_COLOR_LIST[0]\n : '#326EF4';\n\n if (sheetThemeColorType === SheetThemeColorType.SECONDARY) {\n brandColor = tinygradient([\n { color: brandColor, pos: 0 },\n { color: 'white', pos: 1 },\n ])\n .rgbAt(0.8)\n .toHexString();\n }\n\n if (sheetThemeType === SheetThemeType.DEFAULT) {\n themePalette = getPalette('default');\n } else if (sheetThemeType === SheetThemeType.BASIC) {\n themePalette = generatePalette({\n ...getPalette('colorful'),\n brandColor,\n basicColorRelations: BASIC_SHEET_THEME_TYPE_COLOR_RELATIONS,\n });\n } else {\n const palette = { ...getPalette('colorful') };\n\n if (sheetThemeColorType === SheetThemeColorType.SECONDARY) {\n palette.basicColorRelations = SECONDARY_THEME_COLOR_TYPE_RELATIONS;\n }\n\n themePalette = generatePalette({\n ...palette,\n brandColor,\n });\n }\n }\n\n const baseTheme = getTheme({\n palette: themePalette,\n }) as DeepRequired<S2Theme>;\n\n if (sheetThemeType === SheetThemeType.NORMAL) {\n const dataCellBgColor = baseTheme.dataCell.cell.backgroundColor;\n\n baseTheme.dataCell.cell.crossBackgroundColor = dataCellBgColor;\n baseTheme.rowCell.cell.backgroundColor = dataCellBgColor;\n } else if (sheetThemeType === SheetThemeType.BASIC) {\n const dataCellBgColor = baseTheme.dataCell.cell.backgroundColor;\n\n baseTheme.dataCell.cell.crossBackgroundColor = dataCellBgColor;\n baseTheme.cornerCell.cell.backgroundColor = dataCellBgColor;\n baseTheme.rowCell.cell.backgroundColor = dataCellBgColor;\n baseTheme.colCell.cell.backgroundColor = dataCellBgColor;\n baseTheme.splitLine.verticalBorderColorOpacity = 1;\n baseTheme.splitLine.horizontalBorderColorOpacity = 1;\n const rowBorderColor = baseTheme.rowCell.cell.verticalBorderColor;\n\n baseTheme.cornerCell.cell.horizontalBorderColor = rowBorderColor;\n baseTheme.cornerCell.cell.verticalBorderColor = rowBorderColor;\n baseTheme.colCell.cell.horizontalBorderColor = rowBorderColor;\n baseTheme.colCell.cell.verticalBorderColor = rowBorderColor;\n } else if (sheetThemeType === SheetThemeType.ZEBRA) {\n clearBorderWidth(baseTheme);\n baseTheme.rowCell.text.fontWeight = `bold`;\n const backgroundColorSettings = {\n crossBackgroundColor: `#FFFFFF`,\n backgroundColor: baseTheme.colCell.cell.backgroundColor,\n backgroundColorOpacity: getBackgroundColorOpacity(sheetThemeColorType),\n };\n\n baseTheme.dataCell.cell = {\n ...baseTheme.dataCell.cell,\n ...backgroundColorSettings,\n };\n const zebraFontColor = `#1D2129`;\n\n baseTheme.dataCell.text.fill = zebraFontColor;\n baseTheme.dataCell.bolderText.fill = zebraFontColor;\n\n baseTheme.rowCell.cell = {\n ...baseTheme.rowCell.cell,\n ...backgroundColorSettings,\n };\n baseTheme.rowCell.text.fill = zebraFontColor;\n baseTheme.rowCell.bolderText.fill = zebraFontColor;\n if (\n sheetThemeColorType === SheetThemeColorType.SECONDARY ||\n sheetThemeColorType === SheetThemeColorType.GRAY\n ) {\n const zebraFontColor80 = tinycolor(zebraFontColor)\n .setAlpha(0.8)\n .toRgbString();\n\n baseTheme.colCell.text.fill = zebraFontColor80;\n baseTheme.colCell.bolderText.fill = zebraFontColor80;\n }\n }\n\n return baseTheme;\n}\n","<script setup lang=\"ts\">\nimport { S2_PREFIX_CLS, i18n, type S2Theme } from '@antv/s2';\nimport { Popover } from 'ant-design-vue';\nimport { h, ref, watch, computed } from 'vue';\nimport { RadioGroup, ResetGroup, TooltipWrapper } from '../common';\nimport {\n SheetThemeColorType,\n SheetThemeType,\n DEFAULT_THEME_COLOR_LIST,\n} from '../../common-extra';\nimport ColorBox from './ColorBox.vue';\nimport {\n BasicThemeIcon,\n ColorfulThemeIcon,\n HierarchyGridTypeIcon,\n HierarchyTreeTypeIcon,\n NormalThemeIcon,\n ZebraThemeIcon,\n} from './icons';\nimport type { ThemePanelOptions } from './interface';\nimport { generateColorTheme } from './utils';\n\nconst PRE_CLASS = `${S2_PREFIX_CLS}-theme-panel`;\n\nconst props = withDefaults(\n defineProps<{\n title?: string;\n maxHistoryColorCount?: number;\n disableCustomPrimaryColorPicker?: boolean;\n defaultOptions?: Partial<ThemePanelOptions>;\n defaultCollapsed?: boolean;\n }>(),\n {\n title: () => i18n('主题风格'),\n maxHistoryColorCount: 5,\n disableCustomPrimaryColorPicker: false,\n defaultCollapsed: false,\n },\n);\n\nconst emit = defineEmits<{\n change: [options: ThemePanelOptions, theme: S2Theme];\n reset: [\n options: ThemePanelOptions,\n prevOptions: ThemePanelOptions,\n theme: S2Theme,\n ];\n}>();\n\nconst options = ref<ThemePanelOptions>({\n hierarchyType: 'grid',\n themeType: SheetThemeType.DEFAULT,\n colorType: SheetThemeColorType.PRIMARY,\n ...props.defaultOptions,\n});\n\nconst defaultOptionsRef = ref<ThemePanelOptions>({ ...options.value });\nconst customColor = ref<string>(DEFAULT_THEME_COLOR_LIST[0]);\n\nconst onResetClick = () => {\n const theme = generateColorTheme({\n themeType: defaultOptionsRef.value.themeType as SheetThemeType,\n colorType: defaultOptionsRef.value.colorType as SheetThemeColorType,\n customColor: customColor.value,\n });\n const prevOptions = { ...options.value };\n\n options.value = { ...defaultOptionsRef.value };\n emit('reset', defaultOptionsRef.value, prevOptions, theme as S2Theme);\n};\n\nconst onOptionsChange = (field: keyof ThemePanelOptions, value: any) => {\n options.value = {\n ...options.value,\n [field]: value,\n };\n};\n\nwatch(\n [options, customColor],\n () => {\n const theme = generateColorTheme({\n themeType: options.value.themeType as SheetThemeType,\n colorType: options.value.colorType as SheetThemeColorType,\n customColor: customColor.value,\n });\n\n emit('change', options.value, theme as S2Theme);\n },\n { deep: true },\n);\n\nconst hierarchyTypeOptions = computed(() => {\n return [\n { label: i18n('平铺'), value: 'grid', component: HierarchyGridTypeIcon },\n { label: i18n('树状'), value: 'tree', component: HierarchyTreeTypeIcon },\n ].map(({ label, value, component: Component }) => ({\n label: h(TooltipWrapper, { title: label }, () =>\n h(Component, { active: options.value.hierarchyType === value }),\n ),\n value,\n }));\n});\n\nconst themeTypeOptions = computed(() => {\n return [\n {\n label: i18n('多彩风'),\n value: SheetThemeType.COLORFUL,\n component: ColorfulThemeIcon,\n },\n {\n label: i18n('简约风'),\n value: SheetThemeType.NORMAL,\n component: NormalThemeIcon,\n },\n {\n label: i18n('极简风'),\n value: SheetThemeType.BASIC,\n component: BasicThemeIcon,\n },\n {\n label: i18n('斑马纹风'),\n value: SheetThemeType.ZEBRA,\n component: ZebraThemeIcon,\n },\n ].map(({ label, value, component: Component }) => ({\n label: h(TooltipWrapper, { title: label }, () =>\n h(Component, { active: options.value.themeType === value }),\n ),\n value,\n }));\n});\n\nconst colorTypeOptions = computed(() => {\n const defaultOptions = [\n { label: i18n('深色主题'), value: SheetThemeColorType.PRIMARY },\n { label: i18n('浅色主题'), value: SheetThemeColorType.SECONDARY },\n { label: i18n('灰色'), value: SheetThemeColorType.GRAY },\n ];\n\n if (props.disableCustomPrimaryColorPicker) {\n return defaultOptions;\n }\n\n return [\n ...defaultOptions,\n { label: i18n('自定义'), value: SheetThemeColorType.CUSTOM },\n ];\n});\n\nconst showCustomColorSection = computed(() => {\n return (\n options.value.colorType === SheetThemeColorType.CUSTOM &&\n !props.disableCustomPrimaryColorPicker\n );\n});\n\nconst handleHierarchyChange = (e: any) => {\n onOptionsChange('hierarchyType', e.target.value);\n};\n\nconst handleThemeChange = (e: any) => {\n onOptionsChange('themeType', e.target.value);\n};\n\nconst handleColorChange = (e: any) => {\n onOptionsChange('colorType', e.target.value);\n};\n</script>\n\n<template>\n <ResetGroup\n :title=\"title\"\n :defaultCollapsed=\"defaultCollapsed\"\n :class=\"PRE_CLASS\"\n @reset=\"onResetClick\"\n >\n <slot />\n <RadioGroup\n :label=\"i18n('类型')\"\n optionType=\"button\"\n :value=\"options.hierarchyType\"\n :options=\"hierarchyTypeOptions\"\n onlyIcon\n @change=\"handleHierarchyChange\"\n />\n <RadioGroup\n :label=\"i18n('主题')\"\n optionType=\"button\"\n :value=\"options.themeType\"\n :options=\"themeTypeOptions\"\n onlyIcon\n @change=\"handleThemeChange\"\n />\n <RadioGroup\n :label=\"i18n('主色系')\"\n optionType=\"button\"\n :value=\"options.colorType\"\n :options=\"colorTypeOptions\"\n @change=\"handleColorChange\"\n >\n <template #extra v-if=\"showCustomColorSection\">\n <div :class=\"`${PRE_CLASS}-custom-color`\">\n <div>\n <span :class=\"`${PRE_CLASS}-custom-color-title`\">\n {{ i18n('自定义颜色') }}\n </span>\n <Popover placement=\"rightTop\" trigger=\"click\">\n <template #content>\n <div\n style=\"\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n max-width: 160px;\n \"\n >\n <ColorBox\n v-for=\"color in DEFAULT_THEME_COLOR_LIST\"\n :key=\"color\"\n :color=\"color\"\n @click=\"customColor = color\"\n />\n </div>\n </template>\n <ColorBox :color=\"customColor\" />\n </Popover>\n </div>\n </div>\n </template>\n </RadioGroup>\n </ResetGroup>\n</template>\n\n<style lang=\"less\">\n@import '@antv/s2/esm/styles/variables.less';\n\n.@{s2-cls-prefix}-theme-panel {\n width: 340px;\n\n &-custom-color {\n margin-top: 8px;\n\n &-title {\n margin-right: 8px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n }\n }\n}\n</style>\n","import './utils/extendLocale';\n\nexport * from './common-extra';\nexport * from './components';\nexport * from './components-extra';\nexport { useSpreadSheetInstance } from './context/SpreadSheetContext';\nexport * from './hooks/useExpose';\n\nexport const version = '@antv/s2-vue-v2.2.0-alpha.3';\n"],"names":["extendLocale","Locale","DEFAULT_THEME_COLOR_LIST","BASIC_SHEET_THEME_TYPE_COLOR_RELATIONS","SECONDARY_THEME_COLOR_TYPE_RELATIONS","HISTORY_COLOR_LIST_STORAGE_KEY","S2_PREFIX_CLS","HISTORY_COLOR_LIST_MAX_COUNT","SheetThemeColorType","SheetThemeType","_sfc_main$N","defineComponent","TOOLTIP_PREFIX_CLS","i18n","_ctx","_cache","$props","$setup","$data","$options","_createElementBlock","_sfc_main$M","_openBlock","_Fragment","_renderList","item","index","_normalizeClass","_toDisplayString","_sfc_main$L","props","colsText","computed","rowsText","separator","_b","_a","_d","_c","_sfc_main$K","_sfc_render","infos","_sfc_main$J","svgIcon","getIcon","iconStyle","style","isStringIcon","_normalizeStyle","icon","_hoisted_1","_sfc_main$I","TooltipIcon","_resolveComponent","_component_TooltipIcon","name","text","content","_createCommentVNode","_renderSlot","_createBlock","_resolveDynamicComponent","_hoisted_2","_sfc_main$H","tips","_sfc_main$G","reduce","pre","next","size","summaryInfo","summary","_sfc_main$F","menu","_sfc_main$E","cell","isEmpty","Menu","TooltipOperatorTitle","onMenuTitleClick","_withCtx","_createVNode","subMenu","_component_TooltipOperatorMenu","_component_MenuItem","_sfc_main$D","onMenuClick","menuInfo","Dropdown","TooltipOperatorMenu","onlyShowOperator","_component_TooltipOperatorTitle","_sfc_main$C","operator","getTooltipDefaultOptions","TooltipDescription","TooltipDetail","TooltipHeadInfo","TooltipInfos","TooltipInterpretation","TooltipSimpleTips","TooltipSummary","TooltipOperator","_component_TooltipDescription","_component_TooltipOperator","data","_f","_e","_component_TooltipSummary","_h","_component_TooltipInterpretation","_n","_m","_r","_q","_t","_s","_component_TooltipDetail","_v","_component_TooltipInfos","CustomTooltip","BaseTooltip","spreadsheet","tooltip","showOptions","tooltipProps","__spreadProps","__spreadValues","tooltipVNode","createVNode","TooltipComponent","render","DEFAULT_PAGE_NUMBER","DEFAULT_PAGE_SIZE","usePagination","s2Ref","paginationCfg","showPagination","current","ref","pageSize","total","change","nextCurrent","showSizeChange","nextPageSize","visible","watch","__async","nextPagination","value","oldValue","onCleanup","totalUpdateCallback","S2Event","omit","PRE_CLASS","_sfc_main$B","AntDPagination","_component_AntDPagination","_mergeProps","showQuickJumper","customOptions","_","_createElementVNode","S2_INSTANCE_KEY","provideSpreadSheet","instance","provide","useSpreadSheetInstance","inject","shallowRef","RENDER_TOOLTIP_OPTION","getSheetComponentOptions","options","getBaseSheetComponentOptions","useCellEvent","emit","eventName","emitName","handler","event","param","getBaseCellData","useS2Event","params","useEvents","onMounted","useLoading","loadingProp","loading","setLoading","updated","newLoading","s2","useResize","dom","unobserve","adaptive","createResizeObserver","useSheetUpdate","hooks","updateFlag","reactive","prevOptions","isProxy","dataCfg","prevDataCfg","_g","themeCfg","flag","defaultRenderOptions","renderOptions","useSpreadSheet","sheetType","customSpreadSheet","onS2Mounted","loadingRef","toRef","wrapperRef","containerRef","pagination","renderSpreadSheet","container","rawDataCfg","toRaw","rawOptions","s2Options","TableSheet","PivotChartSheet","PivotSheet","buildSpreadSheet","onBeforeUnmount","initBaseSheetProps","initDrillDownProps","initDrillDownEmits","initBaseSheetEmits","_sfc_main$A","ctx","s2RefComputed","handlePageChange","isBoolean","handlePageSizeChange","nextSize","Spin","S2Pagination","_component_Spin","_component_S2Pagination","useExpose","expose","_sfc_main$z","chartOptions","customThemeCfg","toRefs","defaultOptions","customMerge","defaultTheme","BaseSheet","_component_BaseSheet","GridAnalysisSheetDataCell","DataCell","drawCustomContent","FONT_SIZE","GridAnalysisTheme","FONT_FAMILY","isWindows","_sfc_main$y","viewMeta","s2ThemeCfg","_sfc_main$x","_sfc_main$w","_sfc_main$v","_sfc_main$u","_sfc_main$t","Button","Input","Empty","MenuItem","LocationIcon","TextIcon","CalendarIcon","dataSet","disabledFields","getDrillFields","setDrillFields","className","getOptions","val","selected","e","reg","result","key","DRILL_DOWN_PRE_CLASS","title","handleClear","_component_Input","handleSearch","_component_Empty","_component_Menu","handleSelect","option","_component_LocationIcon","_sfc_main$s","pivotOptions","partDrillDown","drillFields","fields","handleDrillDown","onDrillDownIconClick","drillDownNode","DrillDown","buildDrillDownOptions","StrategySheetColCell","ColCell","meta","headerConfig","safeJsonParse","isArray","formattedValue","displayValues","StrategySheetDataCell","StrategySheetDataSet","CustomGridPivotDataSet","keys","isObject","EMPTY_EXTRA_FIELD_PLACEHOLDER","updatedDataCfg","newMeta","EXTRA_FIELD","_sfc_main$r","strategySheetOptions","shouldHideValue","node","spreadSheet","_sfc_main$q","_sfc_main$p","startCell","maskPosition","dragPoint","lastHoverPoint","isInCell","point","cellMeta","pick","scrollOffset","sampleColNode","sampleColNodeHeight","pointX","pointY","scrollOffsetY","cellMaxX","cellMinX","cellMaxY","cellMinY","judgePointInView","rect","frozenGroupAreas","viewMinX","viewMaxX","viewMinY","FrozenGroupArea","viewMaxY","getCurrentHoverCell","dataCell","getSelectedCellRange","start","end","startCellMeta","endCellMeta","minX","maxX","maxY","minY","itemMeta","dragMove","throttle","targetCell","newX","newY","selectedRange","v","InteractionStateName","dragMouseUp","displayData","fieldValue","changedCells","rowIndex","valueField","dragMouseDown","get","top","left","pointElement","onUnmounted","_sfc_main$o","DragCopyMask","scroll","position","handleScroll","newScroll","isEqual","vWidth","hWidth","pointWidth","overflow","fixPosition","eventCell","batchSelected","onCopyFinished","bindEvents","unbindEvents","newS2","oldS2","pointStyle","buildEditProps","_sfc_main$n","originOptions","inputRef","inputValue","inputStyle","setInputStyle","cellPosition","isNil","cellLeft","cellTop","cellWidth","cellHeight","inSight","onDataCellDbClick","onSave","target","id","inputVal","DragCopyPoint","_sfc_main$m","EditableSheet","ChartSheet","GridAnalysisSheet","StrategySheet","_sfc_main$l","shouldHide","cellName","m","customLabel","isFunction","cellValue","tooltipCls","_sfc_main$k","metaFieldValue","rowDescription","rowName","defaultRowName","colLeafNode","derivedLabels","labels","valuesCfg","values","firstValues","first","originalValues","originalValuesField","firstOriginal","emptyPlaceholder","getEmptyPlaceholder","shouldShowOriginalValue","getDerivedValueInfo","derivedValue","isUnchanged","isUnchangedValue","isUp","isUpDataValue","isDown","originalDerivedValue","_hoisted_3","_hoisted_4","i","renderDerivedValue","_sfc_main$j","description","field","extra","__props","__emit","moveToTopHandler","res","moveUpHandler","moveDownHandler","_unref","Card","ADVANCED_SORT_PRE_CLS","VerticalAlignTopOutlined","DownOutlined","UpOutlined","Sider","Content","Layout","isSortVisible","isCustomVisible","ruleList","rules","manualDimensionList","dimensionList","sortBy","currentDimension","formRef","formData","SORT_RULE_OPTIONS","getSortRuleOptions","SORT_METHOD","getSortMethod","handleModal","sortClick","handleCustom","handleDimension","dimension","find","filter","handleCustomSort","splitOrders","correctDimension","uniq","list","customSort","map","customCancel","deleteRule","originalDimension","onFinish","ruleValues","currentSortParams","formValues","forEach","r","sortMethod","rule","currentSortBy","safeRule","includes","TOTAL_VALUE","getDimensionList","sortParam","getManualDimensionList","rows","columns","getRuleOptions","getRuleList","sortFieldId","sortByMeasure","initRuleList","manualDimensions","initDimensionList","initRuleOptions","newFormData","toUpper","onSplitOrdersChange","orders","OrderedListOutlined","Modal","$event","Form","Select","Cascader","Radio","method","_createTextVNode","DeleteOutlined","CustomSort","classNames","handleChange","ARadioGroup","handleClick","ReloadOutlined","ACTIVE_KEY","activeKey","handleResetClick","Collapse","isActive","CaretRightOutlined","CollapsePanel","ResetButton","Tooltip","ColIcon","h","RowIcon","ValueIcon","DRILL_DOWN_ICON_MAP","newItem","info","selectedKeys","menuItems","SearchOutlined","getData","split","isFormat","getPlainData","asyncGetAllPlainData","getAllData","asyncGetAllData","copyData","TAB_SEPARATOR","copyToClipboard","error","downloadData","CSV_SEPARATOR","download","MoreOutlined","Export","strategyCopy","_createSlots","$slots","onDebounceChange","debounce","nextValue","newValue","InputNumber","defaultOptionsRef","onResetClick","onRowHeaderChange","BASE_FROZEN_CONFIG","isFieldEnabled","getLeadingCount","getTrailingCount","onGroupChange","onCheckboxChange","checked","onLeadingChange","onTrailingChange","ResetGroup","Checkbox","config","FrozenInputNumber","SWITCHER_PREFIX_CLS","FieldType","DroppableType","SWITCHER_FIELDS","getSwitcherConfig","allowExchangeHeader","getSwitcherClassName","getClassNameWithPrefix","getMainLayoutClassName","shouldCrossRows","type","checkItem","source","parentId","targetIndex","newSource","generateSwitchResult","state","generateFieldResult","items","flattenValues","flatten","children","rest","__objRest","allItems","hideItems","getSwitcherState","mapValues","ownKeys","object","enumerableOnly","symbols","sym","_objectSpread2","_defineProperty","_typeof","obj","_extends","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","version","userAgent","pattern","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","on","el","fn","off","matches","selector","getParentOrHost","closest","includeCTX","R_SPACE","toggleClass","css","prop","matrix","selfOnly","appliedTransforms","transform","matrixFn","tagName","iterator","n","getWindowScrollingElement","scrollingElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","elRect","bottom","right","height","width","containerRect","elMatrix","scaleX","scaleY","isScrolledPast","elSide","parentSide","parent","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","includeDragEl","currentChild","Sortable","lastChild","last","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","indexOfObject","arr","includeSelf","elem","gotSelf","elemCSS","extend","dst","src","isRectEqual","rect1","rect2","_throttleTimeout","callback","ms","args","_this","cancelThrottle","scrollBy","x","y","clone","Polymer","$","getChildContainingRectFromElement","ghostEl","child","_rect$left","_rect$top","_rect$right","_rect$bottom","childRect","expando","AnimationStateManager","animationStates","animationCallbackId","fromRect","childMatrix","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","calculateRealTime","currentRect","duration","translateX","translateY","repaint","plugins","defaults","PluginManager","plugin","p","sortable","evt","eventNameGlobal","pluginName","initialized","modified","eventProperties","modifiedValue","dispatchEvent","_ref","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","allEventProperties","_excluded","pluginEvent","dragEl","parentEl","nextEl","lastDownEl","cloneHidden","moved","_hideGhostForTarget","_unhideGhostForTarget","_dispatchEvent","activeGroup","awaitingDragStarted","ignoreNextClick","sortables","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","pastFirstInvertThresh","isCircumstantialInvert","targetMoveDistance","ghostRelativeParent","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","_detectDirection","elCSS","elWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","secondChildWidth","touchingSideChild2","_dragElInRowColumn","dragRect","targetRect","vertical","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_detectNearestEmptySortable","ret","threshold","insideHorizontally","insideVertically","_prepareGroup","toFn","pull","to","from","sameGroup","otherGroup","group","originalGroup","nearestEmptyInsertDetectEvent","nearest","_checkOutsideTargetEl","dataTransfer","preventOnFilter","touch","originalTarget","_saveInputCheckedState","criteria","ownerDocument","dragStartFn","_disableDraggable","_nextTick","err","fallback","inserted","fallbackTolerance","fallbackOffset","ghostMatrix","relativeScrollOffset","dx","dy","cssMatrix","revert","activeSortable","isOwner","canSort","fromSortable","completedFired","dragOverEvent","completed","after","_onMove","changed","capture","insertion","elLastChild","_ghostIsLast","_ghostIsFirst","firstChild","direction","targetBeforeFirstSwap","differentLevel","differentRowCol","side1","scrolledPastTop","scrollBefore","_getSwapDirection","sibling","dragIndex","nextSibling","moveVector","_unsilent","_cancelNextTick","_globalDragOver","order","_generateId","useAnimation","store","willInsertAfter","onMoveFn","retVal","firstElRect","childContainingRect","spacer","lastElRect","swapThreshold","invertedSwapThreshold","invertSwap","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","str","sum","root","inputs","idx","element","_len","_key","autoScrolls","scrollEl","scrollRootEl","scrolling","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","AutoScrollPlugin","AutoScroll","_ref2","clearPointerElemChangedInterval","clearAutoScrolls","autoScroll","ogElemScroller","newElem","isFallback","sens","speed","scrollThisInstance","scrollCustomFn","layersOut","currentParent","canScrollX","canScrollY","scrollWidth","scrollHeight","scrollPosX","scrollPosY","vx","vy","scrollOffsetX","drop","dispatchSortableEvent","hideGhostForTarget","unhideGhostForTarget","toSortable","Revert","_ref3","Remove","_ref4","parentSortable","textClassName","onChange","onVisibleItemChange","fieldType","mainClass","itemClass","SingleItem","CLASS_NAME_PREFIX","expandChildren","enabled","draggableRef","sortableInstance","onUpdateExpand","isDragDisabled","initSortable","newItems","movedItem","DimensionItem","switcherConfig","defaultState","draggingItemId","onReset","onConfirm","updatedState","isNothingChanged","displayFieldItems","onCancel","Dimension","onToggleVisible","open","onSubmit","overlayClassName","defaultTitle","renderIcon","SwapOutlined","SwitcherContent","LeftAlignIcon","active","fill","opacity","CenterAlignIcon","RightAlignIcon","generateCellTextAlignTheme","colCellAlignType","rowCellAlignType","dataCellAlignType","theme","onOptionsChange","newOptions","getCellAlignOptions","label","Component","TooltipWrapper","RadioGroup","HierarchyGridTypeIcon","fillOpacity","HierarchyTreeTypeIcon","ColorfulThemeIcon","borderFill","stripeFill","NormalThemeIcon","gridFill","BasicThemeIcon","ZebraThemeIcon","trimLeft","trimRight","tinycolor","color","opts","rgb","inputToRGB","RsRGB","GsRGB","BsRGB","R","G","B","boundAlpha","hsv","rgbToHsv","s","hsl","rgbToHsl","allow3Char","rgbToHex","allow4Char","rgbaToHex","bound01","hexNames","secondColor","hex8String","rgbaToArgbHex","secondHex8String","gradientType","format","formatSet","formattedString","hasAlpha","needsAlphaFormat","_lighten","_brighten","_darken","_desaturate","_saturate","_greyscale","_spin","_analogous","_complement","_monochromatic","_splitcomplement","polyad","newColor","convertToPercentage","a","l","ok","stringInputToObject","isValidCSSUnit","rgbToRgb","hsvToRgb","hslToRgb","g","b","max","min","hue2rgb","q","t","f","mod","hex","pad2","convertDecimalToHex","color1","color2","amount","clamp01","hue","number","step","results","slices","part","modification","rgb1","rgb2","rgba","c1","c2","wcag2","readability","wcag2Parms","out","validateWCAG2Parms","baseColor","colorList","bestColor","bestScore","includeFallbackColors","level","names","flip","o","flipped","isOnePointZero","processPercent","isPercentage","parseIntFromHex","c","d","convertHexToDecimal","matchers","CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","named","match","parms","global","factory","module","this","require$$0","RGBA_MAX","HSVA_MAX","stepize","steps","k","interpolate","interpolateRgb","stop1","stop2","gradient","interpolateHsv","mode","trigonometric","trigShortest","diff","computeSubsteps","stops","substeps","totalSubsteps","computeAt","pos","TinyGradient","havingPositions","lastColorLess","stop","hasPosition","hasColor","stops1","stops2","tinygradient","clearBorderWidth","getBackgroundColorOpacity","themeColorType","generateColorTheme","sheetThemeType","sheetThemeColorType","sheetThemeCustomColor","themePalette","getPalette","brandColor","generatePalette","palette","baseTheme","getTheme","dataCellBgColor","rowBorderColor","backgroundColorSettings","zebraFontColor","zebraFontColor80","customColor","hierarchyTypeOptions","themeTypeOptions","colorTypeOptions","showCustomColorSection","handleHierarchyChange","handleThemeChange","handleColorChange","Popover","ColorBox"],"mappings":"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","x_google_ignoreList":[64,75,76,77]}
1
+ {"version":3,"file":"s2-vue.min.js","sources":["../src/utils/extendLocale.ts","../src/common-extra/constants/theme.ts","../src/components/tooltip/components/description.vue","../src/components/tooltip/components/detail.vue","../src/components/tooltip/components/head-info.vue","../src/components/tooltip/components/infos.vue","../src/components/tooltip/components/icon.vue","../src/components/tooltip/components/interpretation.vue","../src/components/tooltip/components/simple-tips.vue","../src/components/tooltip/components/summary.vue","../src/components/tooltip/components/operator/title.vue","../src/components/tooltip/components/operator/menu.vue","../src/components/tooltip/components/operator/index.vue","../src/components/tooltip/index.vue","../src/components/tooltip/custom-tooltip.ts","../src/hooks/usePagination.ts","../src/components/pagination/index.vue","../src/context/SpreadSheetContext.ts","../src/common/constant/options.ts","../src/utils/options.ts","../src/hooks/useEvents.ts","../src/hooks/useLoading.ts","../src/hooks/useResize.ts","../src/hooks/useSheetUpdate.ts","../src/hooks/useSpreadSheet.ts","../src/utils/initPropAndEmits.ts","../src/components/sheets/base-sheet.vue","../src/hooks/useExpose.ts","../src/components/sheets/chart-sheet.vue","../src/components/sheets/grid-analysis-sheet/custom-cell.ts","../src/components/sheets/grid-analysis-sheet/theme.ts","../src/components/sheets/grid-analysis-sheet/index.vue","../src/components/sheets/pivot-chart-sheet.vue","../src/icons/location-icon.vue","../src/icons/text-icon.vue","../src/icons/calendar-icon.vue","../src/components/drill-down/index.vue","../src/components/sheets/pivot-sheet.vue","../src/components/sheets/strategy-sheet/custom-col-cell.ts","../src/components/sheets/strategy-sheet/custom-data-cell.ts","../src/components/sheets/strategy-sheet/custom-data-set.ts","../src/components/sheets/strategy-sheet/index.vue","../src/components/sheets/table-sheet.vue","../src/components/sheets/editable-sheet/drag-copy/DragCopyMask.vue","../src/components/sheets/editable-sheet/drag-copy/DragCopyPoint.vue","../src/components/sheets/editable-sheet.vue","../src/components/sheets/index.vue","../src/components/sheets/strategy-sheet/custom-tooltip/col-cell-tooltip.vue","../src/components/sheets/strategy-sheet/custom-tooltip/data-cell-tooltip.vue","../src/components/sheets/strategy-sheet/custom-tooltip/row-cell-tooltip.vue","../src/components-extra/advanced-sort/CustomSort.vue","../src/components-extra/advanced-sort/AdvancedSort.vue","../src/components-extra/common/radio-group/RadioGroup.vue","../src/components-extra/common/reset-button/ResetButton.vue","../src/components-extra/common/reset-group/ResetGroup.vue","../src/components-extra/common/tooltip-wrapper/TooltipWrapper.vue","../src/components-extra/common/icons/index.ts","../src/components-extra/drill-down/DrillDown.vue","../src/components-extra/export/Export.vue","../src/components-extra/export/StrategyExport.vue","../src/components-extra/frozen-panel/FrozenInputNumber.vue","../src/components-extra/frozen-panel/FrozenPanel.vue","../src/components-extra/switcher/constant.ts","../src/components-extra/switcher/util.ts","../../../node_modules/.pnpm/sortablejs@1.15.6/node_modules/sortablejs/modular/sortable.esm.js","../src/components-extra/switcher/item/SingleItem.vue","../src/components-extra/switcher/item/DimensionItem.vue","../src/components-extra/switcher/dimension/Dimension.vue","../src/components-extra/switcher/SwitcherContent.vue","../src/components-extra/switcher/Switcher.vue","../src/components-extra/text-align-panel/icons.ts","../src/components-extra/text-align-panel/utils.ts","../src/components-extra/text-align-panel/TextAlignPanel.vue","../src/components-extra/theme-panel/ColorBox.vue","../src/components-extra/theme-panel/icons.ts","../../../node_modules/.pnpm/tinycolor2@1.6.0/node_modules/tinycolor2/esm/tinycolor.js","../../../node_modules/.pnpm/tinycolor2@1.6.0/node_modules/tinycolor2/cjs/tinycolor.js","../../../node_modules/.pnpm/tinygradient@1.1.5/node_modules/tinygradient/index.js","../src/components-extra/theme-panel/utils.ts","../src/components-extra/theme-panel/ThemePanel.vue","../src/index.ts"],"sourcesContent":["import { Locale, extendLocale } from '@antv/s2';\n\nextendLocale(Locale);\n","import { S2_PREFIX_CLS } from '@antv/s2';\n\n/** 默认色板 */\nexport const DEFAULT_THEME_COLOR_LIST = [\n '#5B8FF9',\n '#BDD2FD',\n '#F6903D',\n '#FFD8B8',\n '#F08BB4',\n '#FFD6E7',\n];\n\n/**\n * 当 sheetThemeColorType=自选色 且 sheetThemeType=basic 时\n * 需要自定义色板取色规则\n */\nexport const BASIC_SHEET_THEME_TYPE_COLOR_RELATIONS = [\n { basicColorIndex: 2, standardColorIndex: 1 },\n { basicColorIndex: 4, standardColorIndex: 1 },\n { basicColorIndex: 5, standardColorIndex: 2 },\n { basicColorIndex: 6, standardColorIndex: 6 },\n { basicColorIndex: 7, standardColorIndex: 5 },\n { basicColorIndex: 9, standardColorIndex: 1 },\n { basicColorIndex: 10, standardColorIndex: 1 },\n { basicColorIndex: 11, standardColorIndex: 4 },\n { basicColorIndex: 12, standardColorIndex: 4 },\n];\n\n// 浅色主题映射关系\nexport const SECONDARY_THEME_COLOR_TYPE_RELATIONS = [\n { basicColorIndex: 1, standardColorIndex: 2 },\n { basicColorIndex: 2, standardColorIndex: 4 },\n { basicColorIndex: 3, standardColorIndex: 5 },\n { basicColorIndex: 4, standardColorIndex: 6 },\n { basicColorIndex: 5, standardColorIndex: 6 },\n { basicColorIndex: 6, standardColorIndex: 6 },\n { basicColorIndex: 7, standardColorIndex: 5 },\n { basicColorIndex: 9, standardColorIndex: 6 },\n { basicColorIndex: 10, standardColorIndex: 6 },\n { basicColorIndex: 11, standardColorIndex: 6 },\n { basicColorIndex: 12, standardColorIndex: 6 },\n];\n\nexport const HISTORY_COLOR_LIST_STORAGE_KEY = `${S2_PREFIX_CLS.toUpperCase()}_HISTORY_COLOR_LIST_STORAGE_KEY`;\n\nexport const HISTORY_COLOR_LIST_MAX_COUNT = 6;\n\n/**\n * 主题色系类型\n */\nexport enum SheetThemeColorType {\n /** 深色主题(默认取值) */\n PRIMARY = 'primary',\n /** 浅色主题 */\n SECONDARY = 'secondary',\n /** 灰色 */\n GRAY = 'gray',\n /** 自定义 */\n CUSTOM = 'custom',\n}\n\n/**\n * 主题类型\n */\nexport enum SheetThemeType {\n /** 默认 (使用 S2 默认主题) */\n DEFAULT = 'default',\n /** 多彩 */\n COLORFUL = 'colorful',\n /** 简约 */\n NORMAL = 'normal',\n /** 极简 */\n BASIC = 'basic',\n /** 斑马纹 */\n ZEBRA = 'zebra',\n}\n","<script lang=\"ts\">\nimport { i18n, TOOLTIP_PREFIX_CLS } from '@antv/s2';\nimport { defineComponent, type PropType } from 'vue';\n\nexport default defineComponent({\n name: 'TooltipDescription',\n props: {\n description: {\n type: [String, Object] as PropType<string | unknown>,\n default: undefined,\n },\n },\n setup() {\n return {\n TOOLTIP_PREFIX_CLS,\n i18n,\n };\n },\n});\n</script>\n\n<template>\n <div v-if=\"description\" :class=\"`${TOOLTIP_PREFIX_CLS}-description`\">\n {{ i18n('说明') }}{{ description }}\n </div>\n</template>\n\n<style lang=\"less\"></style>\n","<script lang=\"ts\">\nimport { type TooltipDetailProps, TOOLTIP_PREFIX_CLS } from '@antv/s2';\nimport { defineComponent } from 'vue';\nimport type { GetInitProps } from '../../../interface';\n\nexport default defineComponent({\n name: 'TooltipDetail',\n props: ['list'] as unknown as GetInitProps<TooltipDetailProps>,\n setup() {\n return {\n TOOLTIP_PREFIX_CLS,\n };\n },\n});\n</script>\n\n<template>\n <div\n v-for=\"(item, index) in list\"\n :key=\"`${item.value}-${index}`\"\n :class=\"`${TOOLTIP_PREFIX_CLS}-detail-list`\"\n >\n <div :class=\"`${TOOLTIP_PREFIX_CLS}-detail-item`\">\n <span :class=\"`${TOOLTIP_PREFIX_CLS}-detail-item-key`\">\n {{ item.name }}\n </span>\n <span\n :class=\"`${TOOLTIP_PREFIX_CLS}-detail-item-val ${TOOLTIP_PREFIX_CLS}-highlight`\"\n >\n {{ item.value }}\n </span>\n </div>\n </div>\n</template>\n\n<style lang=\"less\"></style>\n","<script lang=\"ts\">\nimport { type TooltipHeadInfo, TOOLTIP_PREFIX_CLS, i18n } from '@antv/s2';\nimport { computed, defineComponent } from 'vue';\nimport type { GetInitProps } from '../../../interface';\n\nexport default defineComponent({\n name: 'TooltipHeadInfo',\n props: ['rows', 'cols'] as unknown as GetInitProps<TooltipHeadInfo>,\n setup(props) {\n const colsText = computed(() =>\n (props.cols || []).map((item) => item.value).join('/'),\n );\n const rowsText = computed(() =>\n (props.rows || []).map((item) => item.value).join('/'),\n );\n const separator = computed(() =>\n (props.cols?.length ?? 0) > 0 && (props.rows?.length ?? 0) > 0\n ? i18n(',')\n : '',\n );\n\n return {\n TOOLTIP_PREFIX_CLS,\n colsText,\n rowsText,\n separator,\n };\n },\n});\n</script>\n\n<template>\n <div\n v-if=\"cols?.length || rows?.length\"\n :class=\"`${TOOLTIP_PREFIX_CLS}-head-info-list`\"\n >\n {{ colsText }}{{ separator }}{{ rowsText }}\n </div>\n</template>\n\n<style lang=\"less\"></style>\n","<script lang=\"ts\">\nimport { TOOLTIP_PREFIX_CLS } from '@antv/s2';\nimport { defineComponent } from 'vue';\nimport type { GetInitProps } from '../../../interface';\nimport type { TooltipInfosProps } from '../interface';\n\nexport default defineComponent({\n name: 'TooltipInfos',\n props: ['infos'] as unknown as GetInitProps<TooltipInfosProps>,\n setup() {\n return {\n TOOLTIP_PREFIX_CLS,\n };\n },\n components: {},\n});\n</script>\n\n<template>\n <div :class=\"`${TOOLTIP_PREFIX_CLS}-infos`\">{{ infos }}</div>\n</template>\n\n<style lang=\"less\"></style>\n","<script lang=\"ts\">\nimport { getIcon, TOOLTIP_PREFIX_CLS } from '@antv/s2';\nimport { defineComponent, computed, type PropType } from 'vue';\n\nexport interface TooltipIconProps {\n icon?: string | unknown;\n width?: number;\n height?: number;\n}\n\nexport default defineComponent({\n name: 'TooltipIcon',\n props: {\n icon: {\n type: [String, Object] as PropType<string | unknown>,\n default: undefined,\n },\n width: {\n type: Number,\n default: undefined,\n },\n height: {\n type: Number,\n default: undefined,\n },\n },\n setup(props) {\n const svgIcon = computed(() => {\n if (typeof props.icon === 'string') {\n return getIcon(props.icon);\n }\n\n return null;\n });\n\n const iconStyle = computed(() => {\n const style: Record<string, string> = {};\n\n if (props.width) {\n style['width'] = `${props.width}px`;\n }\n\n if (props.height) {\n style['height'] = `${props.height}px`;\n }\n\n return style;\n });\n\n const isStringIcon = computed(() => {\n return typeof props.icon === 'string' && getIcon(props.icon);\n });\n\n return {\n svgIcon,\n iconStyle,\n isStringIcon,\n TOOLTIP_PREFIX_CLS,\n };\n },\n});\n</script>\n\n<template>\n <span\n v-if=\"isStringIcon\"\n :style=\"iconStyle\"\n :class=\"`${TOOLTIP_PREFIX_CLS}-icon`\"\n v-html=\"svgIcon\"\n />\n <component\n v-else-if=\"icon && typeof icon === 'object'\"\n :is=\"icon\"\n :style=\"iconStyle\"\n />\n</template>\n\n<style lang=\"less\"></style>\n","<script lang=\"ts\">\nimport {\n TOOLTIP_PREFIX_CLS,\n type TooltipInterpretationOptions,\n} from '@antv/s2';\nimport { defineComponent } from 'vue';\nimport type { GetInitProps } from '../../../interface';\nimport TooltipIcon from './icon.vue';\n\nexport default defineComponent({\n name: 'TooltipInterpretation',\n props: [\n 'name',\n 'icon',\n 'text',\n 'content',\n ] as unknown as GetInitProps<TooltipInterpretationOptions>,\n setup() {\n return {\n TOOLTIP_PREFIX_CLS,\n };\n },\n components: {\n TooltipIcon,\n },\n});\n</script>\n\n<template>\n <div :class=\"`${TOOLTIP_PREFIX_CLS}-interpretation`\">\n <div :class=\"`${TOOLTIP_PREFIX_CLS}-interpretation-head`\">\n <TooltipIcon\n :icon=\"icon\"\n :class=\"`${TOOLTIP_PREFIX_CLS}-interpretation-icon`\"\n />\n <span v-if=\"name\" :class=\"`${TOOLTIP_PREFIX_CLS}-interpretation-name`\">\n {{ name }}\n </span>\n </div>\n <div v-if=\"text\">{{ text }}</div>\n <slot v-if=\"content\" name=\"content\">\n <component v-if=\"typeof content === 'object'\" :is=\"content\" />\n <span v-else>{{ content }}</span>\n </slot>\n </div>\n</template>\n\n<style lang=\"less\"></style>\n","<script lang=\"ts\">\nimport { type TooltipNameTipsOptions, TOOLTIP_PREFIX_CLS } from '@antv/s2';\nimport { defineComponent } from 'vue';\nimport type { GetInitProps } from '../../../interface';\n\nexport default defineComponent({\n name: 'TooltipSimpleTips',\n props: ['name', 'tips'] as unknown as GetInitProps<TooltipNameTipsOptions>,\n setup() {\n return {\n TOOLTIP_PREFIX_CLS,\n };\n },\n components: {},\n});\n</script>\n\n<template>\n <div v-if=\"name\" :class=\"`${TOOLTIP_PREFIX_CLS}-name`\">{{ name }}</div>\n <div v-if=\"tips\" :class=\"`${TOOLTIP_PREFIX_CLS}-tips`\">{{ tips }}</div>\n</template>\n\n<style lang=\"less\"></style>\n","<script lang=\"ts\">\nimport { size, reduce } from 'lodash';\nimport {\n i18n,\n type TooltipSummaryProps,\n type TooltipSummaryOptions,\n TOOLTIP_PREFIX_CLS,\n} from '@antv/s2';\nimport { computed, defineComponent } from 'vue';\nimport type { GetInitProps } from '../../../interface';\n\nexport default defineComponent({\n name: 'TooltipSummary',\n props: ['summaries'] as unknown as GetInitProps<TooltipSummaryProps>,\n setup(props) {\n const summaryInfo = computed(() =>\n reduce(\n props.summaries,\n (pre, next) => {\n pre.count += size(next?.selectedData);\n if (next.value || next.name) {\n pre.summaries.push(next);\n }\n\n return pre;\n },\n { count: 0, summaries: [] } as {\n count: number;\n summaries: Array<TooltipSummaryOptions>;\n },\n ),\n );\n\n return {\n summaryInfo,\n i18n,\n TOOLTIP_PREFIX_CLS,\n };\n },\n components: {},\n});\n</script>\n\n<template>\n <div :class=\"`${TOOLTIP_PREFIX_CLS}-summary`\">\n <div :class=\"`${TOOLTIP_PREFIX_CLS}-summary-item`\">\n <span :class=\"`${TOOLTIP_PREFIX_CLS}-selected`\">\n {{ summaryInfo.count }} {{ i18n('项') }}\n </span>\n {{ i18n('已选择') }}\n </div>\n <div\n v-for=\"summary in summaryInfo.summaries\"\n :key=\"`${summary.name}-${summary.value}`\"\n :class=\"`${TOOLTIP_PREFIX_CLS}-summary-item`\"\n >\n <span :class=\"`${TOOLTIP_PREFIX_CLS}-summary-key`\">\n {{ summary.name }} ({{ i18n('总和') }})\n </span>\n <span\n :class=\"`${TOOLTIP_PREFIX_CLS}-summary-val ${TOOLTIP_PREFIX_CLS}-bold`\"\n >\n {{ summary.value }}\n </span>\n </div>\n </div>\n</template>\n\n<style lang=\"less\"></style>\n","<script lang=\"ts\">\nimport {\n type TooltipBaseOperatorMenuItem,\n TOOLTIP_PREFIX_CLS,\n getIcon,\n} from '@antv/s2';\nimport { computed, defineComponent } from 'vue';\nimport type { GetInitProps } from '../../../../interface';\n\nexport interface TooltipOperatorTitleProps {\n menu: TooltipBaseOperatorMenuItem;\n}\n\nexport default defineComponent({\n name: 'TooltipOperatorTitle',\n props: ['menu'] as unknown as GetInitProps<TooltipOperatorTitleProps>,\n setup(props) {\n const icon = computed(() => getIcon(props.menu.icon as string));\n\n return {\n TOOLTIP_PREFIX_CLS,\n icon,\n };\n },\n});\n</script>\n\n<template>\n <span>\n <span\n v-if=\"icon\"\n v-html=\"icon\"\n :class=\"`${TOOLTIP_PREFIX_CLS}-operator-icon`\"\n />\n <span :class=\"`${TOOLTIP_PREFIX_CLS}-operator-text`\">{{ menu.label }}</span>\n </span>\n</template>\n\n<style lang=\"less\"></style>\n","<script lang=\"ts\">\nimport {\n TOOLTIP_PREFIX_CLS,\n type TooltipOperatorMenuInfo,\n type S2CellType,\n type TooltipBaseOperatorMenuItem,\n} from '@antv/s2';\nimport { Menu } from 'ant-design-vue';\nimport { isEmpty } from 'lodash';\nimport { defineComponent } from 'vue';\nimport type { GetInitProps } from '../../../../interface';\nimport TooltipOperatorTitle from './title.vue';\n\nexport interface TooltipOperatorMenuProps {\n menu: TooltipBaseOperatorMenuItem;\n cell: S2CellType;\n}\n\nexport default defineComponent({\n name: 'TooltipOperatorMenu',\n props: ['menu', 'cell'] as unknown as GetInitProps<TooltipOperatorMenuProps>,\n setup(props) {\n const { menu, cell } = props;\n const onMenuTitleClick = () => {\n props.menu.onClick?.(menu as TooltipOperatorMenuInfo, cell);\n };\n\n return {\n onMenuTitleClick,\n isEmpty,\n TOOLTIP_PREFIX_CLS,\n };\n },\n components: {\n MenuItem: Menu.Item,\n SubMenu: Menu.SubMenu,\n TooltipOperatorTitle,\n },\n});\n</script>\n\n<template>\n <SubMenu\n v-if=\"!isEmpty(menu.children)\"\n :key=\"menu.key\"\n :popupClassName=\"`${TOOLTIP_PREFIX_CLS}-operator-submenu-popup`\"\n @titleClick=\"onMenuTitleClick\"\n >\n <template #title>\n <TooltipOperatorTitle :menu=\"menu\" @click=\"onMenuTitleClick\" />\n </template>\n <template v-for=\"subMenu in menu.children\" :key=\"subMenu.key\">\n <template v-if=\"subMenu?.children?.length\">\n <TooltipOperatorMenu :menu=\"subMenu\" :cell=\"cell\" />\n </template>\n <template v-else>\n <MenuItem :title=\"subMenu.label\" :key=\"subMenu.key\">\n <TooltipOperatorTitle :menu=\"subMenu\" @click=\"onMenuTitleClick\" />\n </MenuItem>\n </template>\n </template>\n </SubMenu>\n <!-- v-if/else branches must use unique keys. -->\n <MenuItem v-if=\"isEmpty(menu.children)\" :title=\"menu.label\" :key=\"menu.key\">\n <TooltipOperatorTitle :menu=\"menu\" @click=\"onMenuTitleClick\" />\n </MenuItem>\n</template>\n\n<style lang=\"less\"></style>\n","<script lang=\"ts\">\nimport {\n type TooltipOperatorMenuInfo,\n type TooltipBaseOperatorMenuItem,\n TOOLTIP_PREFIX_CLS,\n TooltipOperatorProps as BaseTooltipOperatorProps,\n} from '@antv/s2';\nimport { Menu, Dropdown, type MenuProps } from 'ant-design-vue';\nimport { defineComponent } from 'vue';\nimport type { MenuClickEventHandler } from 'ant-design-vue/es/menu/src/interface';\nimport type { GetInitProps } from '../../../../interface';\nimport TooltipOperatorTitle from './title.vue';\nimport TooltipOperatorMenu from './menu.vue';\n\nexport interface TooltipOperatorProps extends BaseTooltipOperatorProps {\n onClick?: MenuProps['onClick'];\n}\n\nexport default defineComponent({\n name: 'TooltipOperator',\n props: [\n 'menu',\n 'onlyShowOperator',\n 'cell',\n ] as unknown as GetInitProps<TooltipOperatorProps>,\n setup(props) {\n const { menu, cell } = props;\n const onMenuClick: MenuClickEventHandler = (menuInfo) => {\n menu?.onClick?.(menuInfo as unknown as TooltipOperatorMenuInfo, cell);\n };\n\n const onMenuTitleClick = (subMenu: TooltipBaseOperatorMenuItem) => () => {\n subMenu?.onClick(subMenu as TooltipOperatorMenuInfo, cell);\n };\n\n return {\n TOOLTIP_PREFIX_CLS,\n onMenuClick,\n onMenuTitleClick,\n menus: menu?.items,\n };\n },\n components: {\n Menu,\n Dropdown,\n TooltipOperatorTitle,\n TooltipOperatorMenu,\n },\n});\n</script>\n\n<template>\n <div :class=\"`${TOOLTIP_PREFIX_CLS}-operator`\">\n <template v-if=\"onlyShowOperator\">\n <Menu\n :class=\"`${TOOLTIP_PREFIX_CLS}-operator-menus`\"\n @click=\"onMenuClick\"\n >\n <template v-for=\"menu in menus\" :key=\"menu.key\">\n <TooltipOperatorMenu :menu=\"menu\" :cell=\"cell\" />\n </template>\n </Menu>\n </template>\n <template v-else>\n <template v-for=\"menu in menus\" :key=\"menu.key\">\n <Dropdown :class=\"`${TOOLTIP_PREFIX_CLS}-operator-dropdown`\">\n <TooltipOperatorTitle :menu=\"menu\" @click=\"onMenuTitleClick(menu)\" />\n <template #overlay>\n <Menu\n :class=\"`${TOOLTIP_PREFIX_CLS}-operator-menus`\"\n @click=\"onMenuClick\"\n v-if=\"menu?.children?.length\"\n >\n <template v-for=\"menu in menus\" :key=\"menu.key\">\n <TooltipOperatorMenu :menu=\"menu\" :cell=\"cell\" />\n </template>\n </Menu>\n </template>\n </Dropdown>\n </template>\n </template>\n </div>\n</template>\n\n<style lang=\"less\">\n@import '@antv/s2/esm/shared/styles/tooltip/operator.less';\n</style>\n","<script lang=\"ts\">\nimport { getTooltipDefaultOptions } from '@antv/s2';\nimport { defineComponent } from 'vue';\nimport type { GetInitProps } from '../../interface';\nimport TooltipDescription from './components/description.vue';\nimport TooltipDetail from './components/detail.vue';\nimport TooltipHeadInfo from './components/head-info.vue';\nimport TooltipInfos from './components/infos.vue';\nimport TooltipInterpretation from './components/interpretation.vue';\nimport TooltipSimpleTips from './components/simple-tips.vue';\nimport TooltipSummary from './components/summary.vue';\nimport { TooltipOperator } from './components/operator';\nimport type { TooltipRenderProps } from './interface';\n\nexport default defineComponent({\n name: 'TooltipComponent',\n props: [\n 'data',\n 'options',\n 'cell',\n 'position',\n 'event',\n 'content',\n ] as unknown as GetInitProps<TooltipRenderProps>,\n setup(props) {\n const { operator, onlyShowOperator } = getTooltipDefaultOptions(\n props.options,\n );\n\n return {\n operator,\n onlyShowOperator,\n };\n },\n components: {\n TooltipDescription,\n TooltipDetail,\n TooltipHeadInfo,\n TooltipInfos,\n TooltipInterpretation,\n TooltipSimpleTips,\n TooltipSummary,\n TooltipOperator,\n },\n});\n</script>\n\n<template>\n <template v-if=\"onlyShowOperator\">\n <TooltipOperator\n :menu=\"operator?.menu\"\n :onlyShowOperator=\"true\"\n :cell=\"cell\"\n />\n </template>\n <template v-else>\n <TooltipOperator\n :menu=\"operator?.menu\"\n :onlyShowOperator=\"false\"\n :cell=\"cell\"\n />\n\n <template v-if=\"content\">\n <slot name=\"content\"></slot>\n </template>\n\n <template v-else>\n <TooltipSimpleTips :name=\"data?.name\" :tips=\"data?.tips\" />\n <TooltipSummary\n v-if=\"data?.summaries?.length\"\n :summaries=\"data?.summaries\"\n />\n <TooltipInterpretation\n v-if=\"data?.interpretation\"\n :name=\"data?.interpretation?.name\"\n :icon=\"data?.interpretation?.icon\"\n :text=\"data?.interpretation?.text\"\n :content=\"data?.interpretation?.content\"\n />\n <TooltipHeadInfo\n :rows=\"data?.headInfo?.rows || []\"\n :cols=\"data?.headInfo?.cols || []\"\n />\n <TooltipDetail :list=\"data?.details || []\" />\n <TooltipInfos v-if=\"data?.infos\" :infos=\"data?.infos\" />\n <TooltipDescription :description=\"data?.description\" />\n </template>\n </template>\n</template>\n\n<style lang=\"less\">\n@import '@antv/s2/esm/shared/styles/tooltip/index.less';\n</style>\n","import { BaseTooltip, SpreadSheet, type TooltipShowOptions } from '@antv/s2';\nimport { createVNode, render, type VNodeProps } from 'vue';\nimport TooltipComponent from './index.vue';\nimport type { TooltipRenderProps } from './interface';\n\nexport class CustomTooltip extends BaseTooltip {\n constructor(spreadsheet: SpreadSheet) {\n super(spreadsheet);\n }\n\n renderContent() {\n // 配置级 s2.options.tooltip.content = ''\n const { tooltip } = this.spreadsheet.options;\n // 方法级 s2.showTooltip({ content: '' })\n const showOptions = this.options;\n const cell = this.spreadsheet.getCell(\n showOptions.event?.target as EventTarget,\n )!;\n // 优先级: 方法级 > 配置级, 兼容 content 为空字符串的场景\n const content = showOptions.content ?? tooltip?.content;\n\n const tooltipProps: TooltipRenderProps<TooltipShowOptions['content']> = {\n ...showOptions,\n cell,\n content,\n };\n\n // 保留 content 通过 props 传递的同时,新增通过 slot 传递。因为 slot 可能是 Component\n const tooltipVNode = createVNode(\n TooltipComponent,\n tooltipProps as VNodeProps,\n {\n content: () => content,\n },\n );\n\n // render(null) 确保每一次的 tooltip 内容是最新的\n render(null, this.container!);\n render(tooltipVNode, this.container!);\n }\n\n destroy() {\n super.destroy();\n if (this.container) {\n render(null, this.container);\n }\n }\n}\n","import {\n S2Event,\n type EmitterType,\n type Pagination,\n type SpreadSheet,\n} from '@antv/s2';\nimport { isEmpty, omit } from 'lodash';\nimport { computed, ref, watch, type Ref } from 'vue';\nimport type { BaseSheetProps } from '../utils/initPropAndEmits';\n\nexport const DEFAULT_PAGE_NUMBER = 1;\nexport const DEFAULT_PAGE_SIZE = 10;\n\nexport const usePagination = (\n s2Ref: Ref<SpreadSheet | undefined>,\n props: BaseSheetProps,\n) => {\n const {\n options: { pagination: paginationCfg },\n showPagination,\n } = props;\n const current = ref(paginationCfg?.current ?? DEFAULT_PAGE_NUMBER);\n const pageSize = ref(paginationCfg?.pageSize ?? DEFAULT_PAGE_SIZE);\n const total = ref(0);\n\n const change = (nextCurrent: number) => {\n current.value = nextCurrent;\n };\n\n const showSizeChange = (nextPageSize: number) => {\n pageSize.value = nextPageSize;\n };\n\n const visible = computed(() => {\n return showPagination && !isEmpty(paginationCfg);\n });\n\n // sync state.pagination -> s2.pagination\n watch([current, pageSize], async () => {\n if (!s2Ref.value) {\n return;\n }\n\n const nextPagination = isEmpty(paginationCfg)\n ? (null as unknown as Pagination)\n : {\n current: current.value,\n pageSize: pageSize.value,\n };\n\n s2Ref.value.updatePagination(nextPagination);\n await s2Ref.value.render(false);\n });\n\n // sync props.pagination -> state.pagination\n watch(\n [() => paginationCfg, s2Ref],\n () => {\n current.value = paginationCfg?.current ?? DEFAULT_PAGE_NUMBER;\n pageSize.value = paginationCfg?.pageSize ?? DEFAULT_PAGE_SIZE;\n total.value = s2Ref.value?.facet?.viewCellHeights.getTotalLength() ?? 0;\n },\n {\n immediate: true,\n },\n );\n\n // sync layout result total -> state.total\n watch(s2Ref, (value, oldValue, onCleanup) => {\n if (!s2Ref.value) {\n return;\n }\n\n const totalUpdateCallback: EmitterType[S2Event.LAYOUT_PAGINATION] = (\n data,\n ) => {\n if (isEmpty(paginationCfg)) {\n return;\n }\n\n total.value = data.total;\n };\n\n s2Ref.value.on(S2Event.LAYOUT_PAGINATION, totalUpdateCallback);\n\n onCleanup(() => {\n s2Ref.value?.off(S2Event.LAYOUT_PAGINATION, totalUpdateCallback);\n });\n });\n\n return {\n customOptions: omit(paginationCfg, ['current', 'pageSize', 'total']),\n visible,\n current,\n pageSize,\n total,\n change,\n showSizeChange,\n };\n};\n","<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { S2_PREFIX_CLS, i18n } from '@antv/s2';\nimport { Pagination as AntDPagination } from 'ant-design-vue';\nimport {\n DEFAULT_PAGE_NUMBER,\n DEFAULT_PAGE_SIZE,\n} from '../../hooks/usePagination';\n\nconst PRE_CLASS = `${S2_PREFIX_CLS}-pagination`;\n\nexport default defineComponent({\n name: 's2-pagination',\n props: {\n current: {\n type: Number,\n default: DEFAULT_PAGE_NUMBER,\n },\n total: {\n type: Number,\n default: 0,\n },\n pageSize: {\n type: Number,\n default: DEFAULT_PAGE_SIZE,\n },\n customOptions: Object,\n },\n emits: ['change', 'showSizeChange'] as unknown as {\n change: (current: number) => void;\n showSizeChange: (size: number) => void;\n },\n setup: (props) => {\n // only show the pagination when the pageSize > 5\n const showQuickJumper = computed(() => props.total / props.pageSize > 5);\n\n return {\n showQuickJumper,\n PRE_CLASS,\n i18n,\n };\n },\n components: {\n AntDPagination,\n },\n});\n</script>\n\n<template>\n <div :class=\"PRE_CLASS\">\n <AntDPagination\n size=\"small\"\n :default-current=\"1\"\n :showSizeChanger=\"true\"\n :showQuickJumper=\"showQuickJumper\"\n v-bind=\"customOptions\"\n :current=\"current\"\n :total=\"total\"\n :pageSize=\"pageSize\"\n @showSizeChange=\"(_, size) => $emit('showSizeChange', size)\"\n @change=\"(current) => $emit('change', current)\"\n />\n <span :class=\"`${PRE_CLASS}-count`\">\n {{ i18n('共计') }} {{ total || ' - ' }} {{ i18n('条') }}\n </span>\n </div>\n</template>\n","import type { SpreadSheet } from '@antv/s2';\nimport type { InjectionKey, Ref } from 'vue';\nimport { inject, provide, shallowRef } from 'vue';\n\n/**\n * S2 实例的 InjectionKey\n */\nexport const S2_INSTANCE_KEY: InjectionKey<Ref<SpreadSheet | null>> =\n Symbol('s2-instance');\n\n/**\n * 提供 S2 实例给子组件\n * @param instance S2 实例的响应式引用\n */\nexport function provideSpreadSheet(instance: Ref<SpreadSheet | null>) {\n provide(S2_INSTANCE_KEY, instance);\n}\n\n/**\n * 在子组件中获取 S2 实例\n * 类似 React 版本的 useSpreadSheetInstance()\n * @returns S2 实例的响应式引用\n */\nexport function useSpreadSheetInstance(): Ref<SpreadSheet | null> {\n const instance = inject(S2_INSTANCE_KEY, shallowRef(null));\n\n return instance;\n}\n","import type { S2Options, SpreadSheet } from '@antv/s2';\nimport { CustomTooltip } from '../../components/tooltip/custom-tooltip';\n\nexport const RENDER_TOOLTIP_OPTION: Partial<S2Options> = {\n tooltip: {\n render: (spreadsheet: SpreadSheet) => new CustomTooltip(spreadsheet),\n },\n};\n","import type { S2Options } from '@antv/s2';\nimport { getBaseSheetComponentOptions } from '@antv/s2';\nimport { RENDER_TOOLTIP_OPTION } from '../common/constant';\n\nexport const getSheetComponentOptions = (\n ...options: Partial<S2Options>[]\n): S2Options => getBaseSheetComponentOptions(RENDER_TOOLTIP_OPTION, ...options);\n","/* eslint-disable max-lines-per-function */\nimport { GEvent, S2Event, getBaseCellData, type SpreadSheet } from '@antv/s2';\nimport { onMounted, type Ref } from 'vue';\nimport type { BaseSheetInitEmits, EmitFn } from './../interface';\n\nconst useCellEvent = (\n s2Ref: Ref<SpreadSheet | undefined>,\n emit: EmitFn<BaseSheetInitEmits>,\n eventName: S2Event,\n emitName: keyof BaseSheetInitEmits,\n) => {\n const handler = (event: GEvent) => {\n const param = getBaseCellData(event);\n\n emit(emitName as any, param);\n };\n\n s2Ref.value?.on(eventName, handler);\n};\n\nconst useS2Event = (\n s2Ref: Ref<SpreadSheet | undefined>,\n emit: EmitFn<BaseSheetInitEmits>,\n eventName: S2Event,\n emitName: keyof BaseSheetInitEmits,\n) => {\n const handler = (...params: any[]) => {\n // @ts-expect-error\n emit(emitName, ...params);\n };\n\n s2Ref.value?.on(eventName, handler);\n};\n\nexport const useEvents = (\n s2Ref: Ref<SpreadSheet | undefined>,\n emit: EmitFn<BaseSheetInitEmits>,\n) => {\n onMounted(() => {\n if (!s2Ref.value) {\n return;\n }\n\n // ============== Row Cell ====================\n useCellEvent(s2Ref, emit, S2Event.ROW_CELL_HOVER, 'rowCellHover');\n useCellEvent(s2Ref, emit, S2Event.ROW_CELL_CLICK, 'rowCellClick');\n useCellEvent(\n s2Ref,\n emit,\n S2Event.ROW_CELL_DOUBLE_CLICK,\n 'rowCellDoubleClick',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.ROW_CELL_CONTEXT_MENU,\n 'rowCellContextMenu',\n );\n useCellEvent(s2Ref, emit, S2Event.ROW_CELL_MOUSE_DOWN, 'rowCellMouseDown');\n useCellEvent(s2Ref, emit, S2Event.ROW_CELL_MOUSE_UP, 'rowCellMouseUp');\n useCellEvent(s2Ref, emit, S2Event.ROW_CELL_MOUSE_MOVE, 'rowCellMouseMove');\n useS2Event(s2Ref, emit, S2Event.ROW_CELL_COLLAPSED, 'rowCellCollapsed');\n useS2Event(\n s2Ref,\n emit,\n S2Event.ROW_CELL_ALL_COLLAPSED,\n 'rowCellAllCollapsed',\n );\n useS2Event(s2Ref, emit, S2Event.ROW_CELL_SCROLL, 'rowCellScroll');\n useS2Event(s2Ref, emit, S2Event.ROW_CELL_RENDER, 'rowCellRender');\n useS2Event(s2Ref, emit, S2Event.ROW_CELL_SELECTED, 'rowCellSelected');\n\n // ============== Col Cell ====================\n useCellEvent(s2Ref, emit, S2Event.COL_CELL_HOVER, 'colCellHover');\n useCellEvent(s2Ref, emit, S2Event.COL_CELL_CLICK, 'colCellClick');\n useCellEvent(\n s2Ref,\n emit,\n S2Event.COL_CELL_DOUBLE_CLICK,\n 'colCellDoubleClick',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.COL_CELL_CONTEXT_MENU,\n 'colCellContextMenu',\n );\n useCellEvent(s2Ref, emit, S2Event.COL_CELL_MOUSE_DOWN, 'colCellMouseDown');\n useCellEvent(s2Ref, emit, S2Event.COL_CELL_MOUSE_UP, 'colCellMouseUp');\n useCellEvent(s2Ref, emit, S2Event.COL_CELL_MOUSE_MOVE, 'colCellMouseMove');\n useS2Event(s2Ref, emit, S2Event.COL_CELL_EXPANDED, 'colCellExpanded');\n useS2Event(s2Ref, emit, S2Event.COL_CELL_HIDDEN, 'colCellHidden');\n useS2Event(s2Ref, emit, S2Event.COL_CELL_RENDER, 'colCellRender');\n useS2Event(s2Ref, emit, S2Event.COL_CELL_SELECTED, 'colCellSelected');\n\n // ============== Data Cell ====================\n useCellEvent(s2Ref, emit, S2Event.DATA_CELL_HOVER, 'dataCellHover');\n useCellEvent(s2Ref, emit, S2Event.DATA_CELL_CLICK, 'dataCellClick');\n useCellEvent(\n s2Ref,\n emit,\n S2Event.DATA_CELL_DOUBLE_CLICK,\n 'dataCellDoubleClick',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.DATA_CELL_CONTEXT_MENU,\n 'dataCellContextMenu',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.DATA_CELL_MOUSE_DOWN,\n 'dataCellMouseDown',\n );\n useCellEvent(s2Ref, emit, S2Event.DATA_CELL_MOUSE_UP, 'dataCellMouseUp');\n useCellEvent(\n s2Ref,\n emit,\n S2Event.DATA_CELL_MOUSE_MOVE,\n 'dataCellMouseMove',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.DATA_CELL_BRUSH_SELECTION,\n 'dataCellBrushSelection',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.DATA_CELL_SELECT_MOVE,\n 'dataCellSelectMove',\n );\n useS2Event(s2Ref, emit, S2Event.DATA_CELL_RENDER, 'dataCellRender');\n useS2Event(s2Ref, emit, S2Event.DATA_CELL_SELECTED, 'dataCellSelected');\n\n // ============== Corner Cell ====================\n useCellEvent(s2Ref, emit, S2Event.CORNER_CELL_HOVER, 'cornerCellHover');\n useCellEvent(s2Ref, emit, S2Event.CORNER_CELL_CLICK, 'cornerCellClick');\n useCellEvent(\n s2Ref,\n emit,\n S2Event.CORNER_CELL_DOUBLE_CLICK,\n 'cornerCellDoubleClick',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.CORNER_CELL_CONTEXT_MENU,\n 'cornerCellContextMenu',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.CORNER_CELL_MOUSE_DOWN,\n 'cornerCellMouseDown',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.CORNER_CELL_MOUSE_UP,\n 'cornerCellMouseUp',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.CORNER_CELL_MOUSE_MOVE,\n 'cornerCellMouseMove',\n );\n useS2Event(s2Ref, emit, S2Event.CORNER_CELL_RENDER, 'cornerCellRender');\n useS2Event(s2Ref, emit, S2Event.CORNER_CELL_SELECTED, 'cornerCellSelected');\n\n // ============== Merged Cells ====================\n useCellEvent(s2Ref, emit, S2Event.MERGED_CELLS_HOVER, 'mergedCellsHover');\n useCellEvent(s2Ref, emit, S2Event.MERGED_CELLS_CLICK, 'mergedCellsClick');\n useCellEvent(\n s2Ref,\n emit,\n S2Event.MERGED_CELLS_DOUBLE_CLICK,\n 'mergedCellsDoubleClick',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.MERGED_CELLS_CONTEXT_MENU,\n 'mergedCellsContextMenu',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.MERGED_CELLS_MOUSE_DOWN,\n 'mergedCellsMouseDown',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.MERGED_CELLS_MOUSE_UP,\n 'mergedCellsMouseUp',\n );\n useCellEvent(\n s2Ref,\n emit,\n S2Event.MERGED_CELLS_MOUSE_MOVE,\n 'mergedCellsMouseMove',\n );\n useS2Event(s2Ref, emit, S2Event.MERGED_CELLS_RENDER, 'mergedCellsRender');\n\n /** ================ SeriesNumber Cell ================ */\n useS2Event(\n s2Ref,\n emit,\n S2Event.SERIES_NUMBER_CELL_RENDER,\n 'seriesNumberCellRender',\n );\n\n // ============== Sort ====================\n useS2Event(s2Ref, emit, S2Event.RANGE_SORT, 'rangeSort');\n useS2Event(s2Ref, emit, S2Event.RANGE_SORTED, 'rangeSorted');\n\n // ============== Filter ====================\n useS2Event(s2Ref, emit, S2Event.RANGE_FILTER, 'rangeFilter');\n useS2Event(s2Ref, emit, S2Event.RANGE_FILTERED, 'rangeFiltered');\n\n // ============== Layout ====================\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_AFTER_HEADER_LAYOUT,\n 'layoutAfterHeaderLayout',\n );\n useS2Event(s2Ref, emit, S2Event.LAYOUT_PAGINATION, 'layoutPagination');\n useS2Event(s2Ref, emit, S2Event.LAYOUT_BEFORE_RENDER, 'beforeRender');\n useS2Event(s2Ref, emit, S2Event.LAYOUT_AFTER_RENDER, 'afterRender');\n useS2Event(s2Ref, emit, S2Event.LAYOUT_DESTROY, 'destroy');\n\n // ============== Resize ====================\n useS2Event(s2Ref, emit, S2Event.LAYOUT_RESIZE, 'layoutResize');\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_RESIZE_SERIES_WIDTH,\n 'layoutResizeSeriesWidth',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_RESIZE_ROW_WIDTH,\n 'layoutResizeRowWidth',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_RESIZE_ROW_HEIGHT,\n 'layoutResizeRowHeight',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_RESIZE_COL_WIDTH,\n 'layoutResizeColWidth',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_RESIZE_COL_HEIGHT,\n 'layoutResizeColHeight',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_RESIZE_TREE_WIDTH,\n 'layoutResizeTreeWidth',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_RESIZE_MOUSE_DOWN,\n 'layoutResizeMouseDown',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_RESIZE_MOUSE_UP,\n 'layoutResizeMouseUp',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_RESIZE_MOUSE_MOVE,\n 'layoutResizeMouseMove',\n );\n\n // ============== Global ====================\n useS2Event(s2Ref, emit, S2Event.GLOBAL_KEYBOARD_DOWN, 'keyBoardDown');\n useS2Event(s2Ref, emit, S2Event.GLOBAL_KEYBOARD_UP, 'keyBoardUp');\n useS2Event(s2Ref, emit, S2Event.GLOBAL_COPIED, 'copied');\n useS2Event(\n s2Ref,\n emit,\n S2Event.GLOBAL_ACTION_ICON_HOVER,\n 'actionIconHover',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.GLOBAL_ACTION_ICON_CLICK,\n 'actionIconClick',\n );\n useS2Event(s2Ref, emit, S2Event.GLOBAL_CONTEXT_MENU, 'contextMenu');\n useS2Event(s2Ref, emit, S2Event.GLOBAL_HOVER, 'mouseHover');\n useS2Event(s2Ref, emit, S2Event.GLOBAL_CLICK, 'click');\n useS2Event(s2Ref, emit, S2Event.GLOBAL_DOUBLE_CLICK, 'doubleClick');\n useS2Event(s2Ref, emit, S2Event.GLOBAL_SELECTED, 'selected');\n useS2Event(s2Ref, emit, S2Event.GLOBAL_MOUSE_UP, 'mouseUp');\n useS2Event(s2Ref, emit, S2Event.GLOBAL_RESET, 'reset');\n useS2Event(s2Ref, emit, S2Event.GLOBAL_LINK_FIELD_JUMP, 'linkFieldJump');\n useS2Event(s2Ref, emit, S2Event.GLOBAL_SCROLL, 'scroll');\n\n // ============== Auto 自动生成的 ================\n useS2Event(\n s2Ref,\n emit,\n S2Event.LAYOUT_AFTER_REAL_DATA_CELL_RENDER,\n 'layoutAfterRealDataCellRender',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.ROW_CELL_BRUSH_SELECTION,\n 'rowCellBrushSelection',\n );\n useS2Event(\n s2Ref,\n emit,\n S2Event.COL_CELL_BRUSH_SELECTION,\n 'colCellBrushSelection',\n );\n });\n};\n","import { S2Event, type SpreadSheet } from '@antv/s2';\nimport { ref, watch, type Ref, type ShallowRef } from 'vue';\n\nexport const useLoading = (\n s2Ref: ShallowRef<SpreadSheet | undefined>,\n loadingProp: Ref<boolean | undefined>,\n) => {\n const loading = ref<boolean>(loadingProp.value ?? false);\n const setLoading = (updated: boolean) => {\n loading.value = updated;\n };\n\n // 监听外部传入的 loading prop 变化\n watch(loadingProp, (newLoading) => {\n loading.value = newLoading ?? false;\n });\n\n watch(s2Ref, (s2) => {\n s2?.on(S2Event.LAYOUT_BEFORE_RENDER, () => {\n setLoading(true);\n });\n\n s2?.on(S2Event.LAYOUT_AFTER_RENDER, () => {\n setLoading(false);\n });\n });\n\n return { loading, setLoading };\n};\n","import type { SpreadSheet } from '@antv/s2';\nimport { createResizeObserver } from '@antv/s2';\nimport { ref, watch, type Ref } from 'vue';\nimport type { BaseSheetProps } from '../utils/initPropAndEmits';\n\nexport const useResize = (\n s2Ref: Ref<SpreadSheet | undefined>,\n props: BaseSheetProps,\n dom: {\n wrapperRef: Ref<HTMLDivElement | undefined>;\n containerRef: Ref<HTMLDivElement | undefined>;\n },\n) => {\n const unobserve = ref<() => void>();\n\n watch([s2Ref, () => props.adaptive], ([s2, adaptive], _, onCleanup) => {\n if (!s2) {\n return;\n }\n\n unobserve.value = createResizeObserver({\n s2,\n adaptive,\n wrapper: dom.wrapperRef.value!,\n container: dom.containerRef.value!,\n });\n\n onCleanup(() => {\n unobserve.value?.();\n });\n });\n};\n","import type { S2Options, SpreadSheet } from '@antv/s2';\nimport { isProxy, reactive, watch, type ShallowRef } from 'vue';\nimport type { BaseSheetProps } from '../utils/initPropAndEmits';\n\n/**\n * props 会将所有属性用 shallowReactive 包裹起来:\n * 1. 如果是对 dataCfg 或者 options 直接替换, 那么只需要简单的通过 ()=> props.dataCfg 这种 getter 就能监听到\n * 2. 如果 dataCfg 任然是 reactive 数据,那么就存在直接修改了其中某一个属性的情况,这个时候就需要对所有的属性遍历来关联 watch 属性\n * ? 如果数量特别多时,遍历可能存在性能问题,先暂时观察一下\n */\nexport const useSheetUpdate = (\n s2Ref: ShallowRef<SpreadSheet | undefined>,\n props: BaseSheetProps,\n hooks?: { before?: () => void; after: () => void },\n) => {\n const updateFlag = reactive({\n rerender: false,\n reloadData: false,\n rebuildDataset: false,\n });\n\n watch(\n () => props.options,\n (options, prevOptions) => {\n updateFlag.rerender = true;\n\n if (!Object.is(prevOptions?.hierarchyType, options?.hierarchyType)) {\n updateFlag.reloadData = true;\n updateFlag.rebuildDataset = true;\n }\n\n s2Ref.value?.setOptions(options as S2Options);\n s2Ref.value?.changeSheetSize(options?.width, options?.height);\n },\n { deep: isProxy(props.options) },\n );\n\n watch(\n () => props.dataCfg!,\n (dataCfg, prevDataCfg) => {\n if (\n prevDataCfg?.fields?.columns?.length !==\n dataCfg?.fields?.columns?.length\n ) {\n s2Ref.value?.facet?.clearInitColLeafNodes();\n }\n\n updateFlag.rerender = true;\n updateFlag.reloadData = true;\n s2Ref.value?.setDataCfg(dataCfg);\n },\n { deep: isProxy(props.dataCfg) },\n );\n\n watch(\n () => props.themeCfg!,\n (themeCfg) => {\n updateFlag.rerender = true;\n s2Ref.value?.setThemeCfg(themeCfg);\n },\n {\n deep: isProxy(props.themeCfg),\n },\n );\n\n watch(updateFlag, async (flag) => {\n if (!flag.rerender) {\n return;\n }\n\n hooks?.before?.();\n\n const defaultRenderOptions = {\n reloadData: flag.reloadData,\n rebuildDataSet: flag.rebuildDataset,\n };\n const renderOptions =\n props?.onUpdate?.(defaultRenderOptions) || defaultRenderOptions;\n\n await s2Ref.value?.render(renderOptions);\n\n props?.onUpdateAfterRender?.(renderOptions);\n\n hooks?.after?.();\n flag.rerender = false;\n flag.reloadData = false;\n flag.rebuildDataset = false;\n });\n};\n","import {\n PivotSheet,\n TableSheet,\n type S2Options,\n type SpreadSheet,\n} from '@antv/s2';\nimport { PivotChartSheet } from '@antv/s2/extends';\nimport { onBeforeUnmount, onMounted, ref, shallowRef, toRaw, toRef } from 'vue';\nimport type { BaseSheetInitEmits, EmitFn } from '../interface';\nimport type { BaseSheetProps } from '../utils/initPropAndEmits';\nimport { getSheetComponentOptions } from '../utils/options';\nimport { useEvents } from './useEvents';\nimport { useLoading } from './useLoading';\nimport { usePagination } from './usePagination';\nimport { useResize } from './useResize';\nimport { useSheetUpdate } from './useSheetUpdate';\n\nexport function useSpreadSheet(\n props: BaseSheetProps,\n emit: EmitFn<BaseSheetInitEmits>,\n) {\n const {\n dataCfg,\n options,\n themeCfg,\n sheetType,\n spreadsheet: customSpreadSheet,\n onMounted: onS2Mounted,\n } = props;\n\n // 使用 toRef 保持 loading 属性的响应性\n const loadingRef = toRef(props, 'loading');\n\n const wrapperRef = ref<HTMLDivElement>();\n const containerRef = ref<HTMLDivElement>();\n\n const s2Ref = shallowRef<SpreadSheet>();\n\n const { loading, setLoading } = useLoading(s2Ref, loadingRef);\n const pagination = usePagination(s2Ref, props);\n\n const renderSpreadSheet = (container: HTMLDivElement) => {\n const rawDataCfg = toRaw(dataCfg!);\n const rawOptions = toRaw(options);\n\n const s2Options = getSheetComponentOptions(rawOptions as S2Options);\n\n if (customSpreadSheet) {\n return customSpreadSheet(container, rawDataCfg, s2Options);\n }\n\n if (sheetType === 'table' || sheetType === 'editable') {\n return new TableSheet(container, rawDataCfg, s2Options);\n }\n\n if (sheetType === 'pivotChart') {\n return new PivotChartSheet(container, rawDataCfg, s2Options);\n }\n\n return new PivotSheet(container, rawDataCfg, s2Options);\n };\n\n const buildSpreadSheet = async () => {\n setLoading(true);\n s2Ref.value = renderSpreadSheet(containerRef.value!);\n s2Ref.value.setThemeCfg(toRaw(themeCfg));\n await s2Ref.value.render();\n\n setLoading(false);\n onS2Mounted?.(s2Ref.value);\n };\n\n onMounted(buildSpreadSheet);\n useEvents(s2Ref, emit);\n useSheetUpdate(s2Ref, props, {\n before() {\n setLoading(true);\n },\n after() {\n setLoading(false);\n },\n });\n useResize(s2Ref, props, { wrapperRef, containerRef });\n\n onBeforeUnmount(() => {\n setLoading(false);\n s2Ref.value?.destroy();\n });\n\n return {\n wrapperRef,\n containerRef,\n s2Ref,\n loading,\n setLoading,\n pagination,\n };\n}\n","import type {\n Adaptive,\n BaseDrillDownDataSet,\n S2DataConfig,\n SheetType,\n ThemeCfg,\n} from '@antv/s2';\nimport { i18n } from '@antv/s2';\nimport type { ExtractPropTypes, PropType } from 'vue';\nimport type {\n BaseDrillDownEmitKeys,\n BaseDrillDownEmits,\n BaseSheetInitEmitKeys,\n BaseSheetInitEmits,\n SheetComponentProps,\n} from '../interface';\n\nexport const initBaseSheetProps = () => {\n return {\n sheetType: String as PropType<SheetType>,\n dataCfg: Object as PropType<S2DataConfig>,\n themeCfg: Object as PropType<ThemeCfg>,\n showPagination: {\n type: [Object, Boolean] as PropType<\n SheetComponentProps['showPagination']\n >,\n default: false as SheetComponentProps['showPagination'],\n },\n loading: Boolean,\n partDrillDown: Object,\n header: Object,\n options: {\n type: Object as PropType<SheetComponentProps['options']>,\n default: {} as SheetComponentProps['options'],\n },\n adaptive: {\n type: [Object, Boolean] as PropType<Adaptive>,\n default: false as Adaptive,\n },\n spreadsheet: Function as PropType<SheetComponentProps['spreadsheet']>,\n onMounted: Function as PropType<SheetComponentProps['onMounted']>,\n onUpdate: Function as PropType<SheetComponentProps['onUpdate']>,\n onUpdateAfterRender: Function as PropType<\n SheetComponentProps['onUpdateAfterRender']\n >,\n };\n};\n\nexport const initDrillDownProps = () => {\n return {\n className: String,\n title: {\n type: String,\n default: i18n('选择下钻维度'),\n },\n searchText: {\n type: String,\n default: i18n('搜索字段'),\n },\n clearText: {\n type: String,\n default: i18n('恢复默认'),\n },\n extra: Node,\n dataSet: {\n type: Array as PropType<BaseDrillDownDataSet[]>,\n default: [],\n },\n drillFields: Array as PropType<string[]>,\n disabledFields: Array as PropType<string[]>,\n getDrillFields: Function as PropType<(drillFields: string[]) => void>,\n setDrillFields: Function as PropType<(drillFields: string[]) => void>,\n };\n};\n\nexport const initDrillDownEmits = (): BaseDrillDownEmits => {\n const keys: BaseDrillDownEmitKeys[] = ['getDrillFields', 'setDrillFields'];\n\n return keys as unknown as BaseDrillDownEmits;\n};\n\nexport type BaseSheetProps = ExtractPropTypes<\n ReturnType<typeof initBaseSheetProps>\n>;\n\nexport const initBaseSheetEmits = () => {\n /** base sheet all emits */\n const keys: Array<BaseSheetInitEmitKeys> = [\n 'spreadsheet',\n // ============== Row Cell ====================\n 'rowCellHover',\n 'rowCellClick',\n 'rowCellDoubleClick',\n 'rowCellContextMenu',\n 'rowCellMouseDown',\n 'rowCellMouseUp',\n 'rowCellMouseMove',\n 'rowCellCollapsed',\n 'rowCellAllCollapsed',\n 'rowCellScroll',\n\n // ============== Col Cell ====================\n 'colCellHover',\n 'colCellClick',\n 'colCellDoubleClick',\n 'colCellContextMenu',\n 'colCellMouseDown',\n 'colCellMouseUp',\n 'colCellMouseMove',\n 'colCellExpanded',\n 'colCellHidden',\n\n // ============== Data Cell ====================\n 'dataCellHover',\n 'dataCellClick',\n 'dataCellDoubleClick',\n 'dataCellContextMenu',\n 'dataCellMouseDown',\n 'dataCellMouseUp',\n 'dataCellMouseMove',\n 'dataCellBrushSelection',\n 'dataCellSelectMove',\n\n // ============== Corner Cell ====================\n 'cornerCellHover',\n 'cornerCellClick',\n 'cornerCellDoubleClick',\n 'cornerCellContextMenu',\n 'cornerCellMouseDown',\n 'cornerCellMouseUp',\n 'cornerCellMouseMove',\n\n // ============== Merged Cells ====================\n 'mergedCellsHover',\n 'mergedCellsClick',\n 'mergedCellsDoubleClick',\n 'mergedCellsContextMenu',\n 'mergedCellsMouseDown',\n 'mergedCellsMouseUp',\n 'mergedCellsMouseMove',\n\n // ============== Sort ====================\n 'rangeSort',\n 'rangeSorted',\n\n // ============== Filter ====================\n 'rangeFilter',\n 'rangeFiltered',\n\n // ============== Layout ====================\n 'layoutAfterHeaderLayout',\n 'layoutPagination',\n 'beforeRender',\n 'afterRender',\n 'mounted',\n 'destroy',\n\n // ============== Resize ====================\n 'layoutResize',\n 'layoutResizeSeriesWidth',\n 'layoutResizeRowWidth',\n 'layoutResizeRowHeight',\n 'layoutResizeColWidth',\n 'layoutResizeColHeight',\n 'layoutResizeTreeWidth',\n 'layoutResizeMouseDown',\n 'layoutResizeMouseUp',\n 'layoutResizeMouseMove',\n\n // ============== Global ====================\n 'keyBoardDown',\n 'keyBoardUp',\n 'copied',\n 'actionIconHover',\n 'actionIconClick',\n 'contextMenu',\n 'mouseHover',\n 'mouseUp',\n 'mouseMove',\n 'mouseDown',\n 'selected',\n 'reset',\n 'linkFieldJump',\n 'click',\n 'doubleClick',\n 'scroll',\n 'hover',\n // ============== Auto 自动生成的 ================\n 'layoutAfterRealDataCellRender',\n 'rowCellBrushSelection',\n 'colCellBrushSelection',\n ];\n\n return keys as unknown as BaseSheetInitEmits;\n};\n","<script lang=\"ts\">\nimport { S2_PREFIX_CLS } from '@antv/s2';\nimport { Spin } from 'ant-design-vue';\nimport { computed, defineComponent } from 'vue';\nimport { isBoolean } from 'lodash';\nimport S2Pagination from '../pagination/index.vue';\nimport { provideSpreadSheet } from '../../context/SpreadSheetContext';\nimport { useSpreadSheet } from '../../hooks/useSpreadSheet';\nimport {\n initBaseSheetEmits,\n initBaseSheetProps,\n} from '../../utils/initPropAndEmits';\n\nexport default defineComponent({\n name: 'BaseSheet',\n props: initBaseSheetProps(),\n emits: initBaseSheetEmits(),\n setup(props, ctx) {\n const { wrapperRef, containerRef, s2Ref, loading, pagination } =\n useSpreadSheet(props, ctx.emit);\n\n // Provide S2 instance to child components (for DragCopyPoint, etc.)\n const s2RefComputed = computed(() => s2Ref.value ?? null);\n\n provideSpreadSheet(s2RefComputed);\n\n ctx.expose({\n get instance() {\n return s2Ref.value;\n },\n });\n\n const handlePageChange = (nextCurrent: number) => {\n if (props.showPagination && !isBoolean(props.showPagination)) {\n props.showPagination.onChange?.(nextCurrent);\n }\n\n pagination.change(nextCurrent);\n };\n\n const handlePageSizeChange = (nextSize: number) => {\n if (props.showPagination && !isBoolean(props.showPagination)) {\n props.showPagination.onShowSizeChange?.(nextSize);\n }\n\n pagination.showSizeChange(nextSize);\n };\n\n return {\n S2_PREFIX_CLS,\n wrapperRef,\n containerRef,\n s2Ref,\n loading,\n pagination,\n handlePageChange,\n handlePageSizeChange,\n };\n },\n components: {\n Spin,\n S2Pagination,\n },\n});\n</script>\n\n<template>\n <Spin :wrapperClassName=\"S2_PREFIX_CLS + '-spin'\" :spinning=\"loading\">\n <div ref=\"wrapperRef\" :class=\"S2_PREFIX_CLS + '-wrapper'\">\n <div ref=\"containerRef\" :class=\"S2_PREFIX_CLS + '-container'\" />\n <S2Pagination\n v-if=\"pagination.visible.value\"\n :current=\"pagination.current.value\"\n :pageSize=\"pagination.pageSize.value\"\n :total=\"pagination.total.value\"\n :customOptions=\"pagination.customOptions\"\n @change=\"handlePageChange\"\n @showSizeChange=\"handlePageSizeChange\"\n />\n <slot name=\"editCell\" />\n </div>\n </Spin>\n</template>\n\n<style lang=\"less\">\n@import '@antv/s2/esm/shared/styles/variables.less';\n\n.@{s2-cls-prefix} {\n &-spin.ant-spin-nested-loading,\n &-spin > .ant-spin-container {\n height: 100%;\n }\n\n &-wrapper {\n padding: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n height: 100%;\n }\n\n &-container {\n overflow: auto;\n flex: 1 1 auto;\n\n canvas {\n display: block;\n }\n }\n\n &-pagination {\n display: flex;\n align-items: center;\n z-index: 1024;\n\n &-count {\n margin-left: 12px;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 64px;\n }\n }\n}\n</style>\n","import type { SpreadSheet } from '@antv/s2';\nimport { shallowRef } from 'vue';\n\nexport interface SheetExpose {\n instance: SpreadSheet | undefined;\n}\n\nexport const useExpose = (expose: (exposed?: Record<string, any>) => void) => {\n const s2Ref = shallowRef<SheetExpose>();\n\n expose({\n get instance() {\n return s2Ref.value?.instance;\n },\n });\n\n return s2Ref;\n};\n","<script lang=\"ts\">\nimport { customMerge, type ThemeCfg, type S2Options } from '@antv/s2';\nimport { computed, defineComponent, toRefs } from 'vue';\nimport { useExpose } from '../../hooks/useExpose';\nimport type { BaseSheetInitEmits } from '../../interface';\nimport { initBaseSheetProps } from '../../utils/initPropAndEmits';\nimport BaseSheet from './base-sheet.vue';\n\n/**\n * ChartSheet - 用于在单元格中渲染图表\n *\n * 注意:要使用 ChartDataCell 自定义单元格渲染图表,\n * 需要在使用组件时通过 options.dataCell 配置 ChartDataCell\n *\n * 示例: 在 options 中配置 dataCell 属性:\n * dataCell: (viewMeta, spreadsheet) => new ChartDataCell(viewMeta, spreadsheet)\n */\nexport default defineComponent({\n name: 'ChartSheet',\n props: initBaseSheetProps(),\n emits: [] as unknown as BaseSheetInitEmits,\n setup(props, ctx) {\n const s2Ref = useExpose(ctx.expose);\n const { options: chartOptions, themeCfg: customThemeCfg } = toRefs(props);\n\n const s2Options = computed<S2Options>(() => {\n const defaultOptions: Partial<S2Options> = {\n style: {\n rowCell: {\n width: 100,\n },\n dataCell: {\n width: 400,\n height: 400,\n },\n },\n tooltip: {\n enable: true,\n },\n };\n\n const options: Partial<S2Options> = {\n showDefaultHeaderActionIcon: false,\n interaction: {\n hoverFocus: false,\n brushSelection: {\n dataCell: false,\n },\n },\n };\n\n return customMerge<S2Options>(\n defaultOptions,\n chartOptions.value,\n options,\n );\n });\n\n const themeCfg = computed<ThemeCfg>(() => {\n const defaultTheme: ThemeCfg['theme'] = {\n dataCell: {\n cell: {\n interactionState: {\n hoverFocus: {\n borderOpacity: 0,\n },\n selected: {\n borderOpacity: 0,\n },\n },\n },\n },\n };\n\n return customMerge<ThemeCfg>(defaultTheme, customThemeCfg?.value);\n });\n\n return {\n s2Ref,\n s2Options,\n themeCfg,\n };\n },\n components: {\n BaseSheet,\n },\n});\n</script>\n\n<template>\n <BaseSheet\n v-bind=\"$props\"\n ref=\"s2Ref\"\n :options=\"s2Options\"\n :themeCfg=\"themeCfg\"\n />\n</template>\n","import { DataCell, drawCustomContent } from '@antv/s2';\n\n/**\n * Cell for panelGroup area\n * -------------------------------------\n * | label |\n * | measureLabel | measure | measure |\n * | measureLabel | measure | measure |\n * --------------------------------------\n */\nexport class GridAnalysisSheetDataCell extends DataCell {\n public drawTextShape() {\n if (this.isMultiData()) {\n return drawCustomContent(this);\n }\n\n super.drawTextShape();\n }\n}\n","import { FONT_FAMILY, isWindows, type S2Theme } from '@antv/s2';\n\nexport const FONT_SIZE = 12;\nexport const FONT_SIZE_MINOR = 11;\n\n/* 网格分析表主题 */\nexport const GridAnalysisTheme: S2Theme = {\n // 表头\n dataCell: {\n text: {\n fontSize: FONT_SIZE,\n fontFamily: FONT_FAMILY,\n fill: 'rgba(0, 0, 0, 0.85)',\n fontWeight: 'normal',\n textBaseline: 'middle',\n textAlign: 'left',\n },\n // 次级文本,如副指标\n minorText: {\n fontSize: FONT_SIZE_MINOR,\n fontFamily: FONT_FAMILY,\n fill: 'rgba(0, 0, 0, 0.45)',\n fontWeight: 'normal',\n textBaseline: 'middle',\n textAlign: 'left',\n },\n // 衍生指标\n derivedMeasureText: {\n mainUp: '#F46649',\n mainDown: '#2AA491',\n minorUp: '#f9ae9e',\n minorDown: '#a9dad2',\n },\n bolderText: {\n fontSize: FONT_SIZE,\n fontFamily: FONT_FAMILY,\n fill: 'rgba(0, 0, 0, 1)',\n fontWeight: isWindows() ? 'bold' : 520,\n textBaseline: 'middle',\n textAlign: 'left',\n },\n },\n};\n","<script lang=\"ts\">\nimport { customMerge, type ThemeCfg, type S2Options } from '@antv/s2';\nimport { computed, defineComponent, toRefs } from 'vue';\nimport { useExpose } from '../../../hooks/useExpose';\nimport type { BaseSheetInitEmits } from '../../../interface';\nimport { initBaseSheetProps } from '../../../utils/initPropAndEmits';\nimport BaseSheet from '../base-sheet.vue';\nimport { GridAnalysisSheetDataCell } from './custom-cell';\nimport { GridAnalysisTheme } from './theme';\n\nexport default defineComponent({\n name: 'GridAnalysisSheet',\n props: initBaseSheetProps(),\n emits: [] as unknown as BaseSheetInitEmits,\n setup(props, ctx) {\n const s2Ref = useExpose(ctx.expose);\n const { options: defaultOptions, themeCfg } = toRefs(props);\n\n const s2Options = computed<S2Options>(() => {\n const options: Partial<S2Options> = {\n dataCell: (viewMeta, spreadsheet) =>\n new GridAnalysisSheetDataCell(viewMeta, spreadsheet),\n showDefaultHeaderActionIcon: false,\n style: {\n colCell: {\n hideValue: true,\n },\n },\n };\n\n return customMerge<S2Options>(defaultOptions?.value, options);\n });\n\n const s2ThemeCfg = computed<ThemeCfg>(() =>\n customMerge<ThemeCfg>(themeCfg?.value, { theme: GridAnalysisTheme }),\n );\n\n return {\n s2Ref,\n s2Options,\n s2ThemeCfg,\n };\n },\n components: {\n BaseSheet,\n },\n});\n</script>\n\n<template>\n <BaseSheet\n v-bind=\"$props\"\n ref=\"s2Ref\"\n :options=\"s2Options\"\n :themeCfg=\"s2ThemeCfg\"\n />\n</template>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { useExpose } from '../../hooks/useExpose';\nimport type { BaseSheetInitEmits } from '../../interface';\nimport { initBaseSheetProps } from '../../utils/initPropAndEmits';\nimport BaseSheet from './base-sheet.vue';\n\nexport default defineComponent({\n name: 'PivotChartSheet',\n props: initBaseSheetProps(),\n emits: [] as unknown as BaseSheetInitEmits,\n setup(props, ctx) {\n const s2Ref = useExpose(ctx.expose);\n\n return {\n s2Ref,\n };\n },\n components: {\n BaseSheet,\n },\n});\n</script>\n\n<template>\n <BaseSheet v-bind=\"$props\" ref=\"s2Ref\" />\n</template>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'LocationIcon',\n});\n</script>\n<template>\n <svg\n class=\"antv-s2-icon\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12.6\"\n height=\"12.6\"\n >\n <path\n d=\"M511.804 222.338c-57.117 0-105.737 20.061-145.86 60.184-40.122 40.123-60.184 88.569-60.184 145.337 0 56.769 20.062 105.214 60.185 145.337 40.122 40.123 88.742 60.185 145.859 60.185 57.116 0 105.736-20.062 145.859-60.185 40.123-40.123 60.184-88.568 60.184-145.337 0-56.768-20.061-105.214-60.184-145.337-40.123-40.123-88.743-60.184-145.86-60.184z m0 338.619c-36.729 0-68.007-12.925-93.835-38.774-25.827-25.85-38.752-57.127-38.773-93.834-0.022-36.707 12.902-68.16 38.773-94.357 25.872-26.197 57.15-39.285 93.835-39.263 36.685 0.022 67.963 13.11 93.834 39.263 25.871 26.154 38.796 57.606 38.774 94.357-0.022 36.75-12.946 68.028-38.774 93.834-25.828 25.806-57.106 38.73-93.834 38.774z m366.165-295.766c-21.084-42.168-50.327-79.223-87.73-111.165-37.404-31.941-79.898-57.105-127.484-75.491C614.472 60.845 564.155 52 511.804 52c-52.352 0-103.006 8.845-151.963 26.535-46.911 18.364-89.069 43.528-126.472 75.491-37.403 31.964-66.647 69.019-87.731 111.165C123.879 308.71 113 353.923 113 400.835c0 65.95 15.982 132.924 47.945 200.92 26.524 56.441 63.58 112.198 111.165 167.27 62.556 73.435 134.632 138.71 216.227 195.827 6.81 4.765 14.459 7.148 22.945 7.148 8.485 0 16.47-2.383 23.956-7.148 81.595-57.79 153.67-123.067 216.227-195.828 47.608-55.767 84.663-111.524 111.165-167.27 31.963-67.995 47.945-134.969 47.945-200.919 0-46.912-10.88-92.126-32.638-135.644h0.032z m-40.797 136.656c0 55.07-13.6 111.513-40.798 169.326-23.129 49.631-56.452 99.948-99.97 150.95-52.351 61.208-113.885 117.65-184.6 169.326-70.716-51.676-132.25-108.118-184.6-169.326-42.844-51.002-76.167-101.319-99.971-150.95-27.198-57.791-40.797-114.57-40.797-170.338 0-36.032 8.159-70.716 24.478-104.05 16.994-32.638 40.45-61.882 70.368-87.73 30.592-26.525 65.276-47.26 104.05-62.209 40.797-14.97 82.954-22.455 126.472-22.455 43.517 0 85.675 7.485 126.472 22.455 38.752 14.97 73.436 35.706 104.05 62.208 30.593 25.85 54.048 55.093 70.367 87.731 16.32 34.009 24.479 69.03 24.479 105.062z\"\n fill=\"currentColor\"\n ></path>\n </svg>\n</template>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'TextIcon',\n});\n</script>\n<template>\n <svg\n class=\"antv-s2-icon\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12.6\"\n height=\"12.6\"\n >\n <path\n d=\"M86.016 805.888H0L143.872 275.968h79.36l144.896 529.92H276.992l-29.696-109.056H115.2s-29.696 109.056-29.184 109.056zM225.28 613.376L181.248 455.68 138.24 613.376h87.04zM519.168 430.08c24.576-16.384 47.616-25.088 69.12-25.088 30.72 0 58.368 14.848 81.92 44.032 24.064 29.184 35.328 72.192 35.328 128.512 0 44.032-7.168 83.456-22.528 118.272-14.848 34.816-35.328 62.976-60.416 83.456-26.112 20.992-57.856 31.232-95.232 31.232-15.36-0.512-31.232-1.536-46.592-3.584-4.096-0.512-8.704-1.024-12.8-1.536h-66.56V256h81.92v206.336c11.264-12.8 23.04-23.552 35.84-32.256z m-35.328 157.184v135.168c13.824 3.072 26.112 4.608 37.376 4.608 27.648 0 50.176-11.776 69.12-36.352 19.456-25.088 28.672-59.392 28.672-104.96 0-32.256-5.12-55.296-14.848-70.144-9.216-13.824-18.432-19.968-28.672-19.968-12.288 0-27.136 7.68-44.544 24.064-16.896 16.896-32.768 39.424-47.104 67.584zM1013.76 794.624c-36.864 14.336-71.68 20.992-104.96 20.992-32.768 0.512-64.512-9.216-91.648-27.136-27.136-18.432-48.64-44.032-62.464-73.728-14.848-30.72-22.528-65.536-22.528-104.448 0-58.88 16.896-108.032 51.2-146.944 33.792-38.912 75.264-58.88 123.392-58.88 34.304 0 70.144 7.168 108.032 21.504l10.24 4.096v95.232l-20.992-10.752c-34.816-17.92-65.536-26.624-92.16-26.624-16.896 0-32.768 4.608-47.104 13.824-13.824 8.704-25.088 23.04-32.768 42.496-8.192 19.968-12.288 41.472-12.288 63.488 0 28.672 7.68 55.808 24.064 82.432 14.848 24.576 37.888 36.352 71.168 36.352 10.752 0 21.504-1.024 31.744-2.56 9.728-1.536 29.696-8.192 58.88-18.944l19.456-7.68v92.672l-11.264 4.608z\"\n fill=\"currentColor\"\n ></path>\n </svg>\n</template>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'CalendarIcon',\n});\n</script>\n<template>\n <svg\n class=\"antv-s2-icon\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12.6\"\n height=\"12.6\"\n >\n <path\n d=\"M950.016 898.016l-206.016-204.992Q832 586.016 832 448.032q0-159.008-112.512-271.488T448 64.032 176.512 176.544 64 448.032t112.512 271.488T448 832.032q138.016 0 244.992-88l206.016 206.016q10.016 10.016 24.992 10.016t26.016-10.016q10.016-11.008 10.016-26.016t-10.016-26.016zM568.992 736Q512 760 448 760T327.008 736q-56-24-99.488-67.488t-66.496-99.488q-24.992-56.992-24.992-120.992t24.992-120.992q23.008-56 66.496-99.488t99.488-67.488Q384 136.064 448 136.064t120.992 24q56 24 99.488 67.488t67.488 99.488q24 56.992 24 120.992t-24 120.992q-24 56-67.488 99.488T568.992 736z\"\n fill=\"currentColor\"\n ></path>\n </svg>\n</template>\n","<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue';\nimport type { Ref } from 'vue';\nimport {\n DRILL_DOWN_PRE_CLASS,\n type BaseDrillDownDataSet,\n type BaseDrillDownComponentProps,\n} from '@antv/s2';\nimport { Button, Input, Empty, Menu, MenuItem } from 'ant-design-vue';\nimport type { SelectInfo } from 'ant-design-vue/es/menu/src/interface';\nimport { isEmpty } from 'lodash';\nimport type { Key } from 'ant-design-vue/es/_util/type';\nimport type { ChangeEvent } from 'ant-design-vue/es/_util/EventInterface';\nimport LocationIcon from '../../icons/location-icon.vue';\nimport TextIcon from '../../icons/text-icon.vue';\nimport CalendarIcon from '../../icons/calendar-icon.vue';\nimport {\n initDrillDownEmits,\n initDrillDownProps,\n} from '../../utils/initPropAndEmits';\n\nexport default defineComponent({\n name: 'DrillDown',\n props: initDrillDownProps(),\n emits: initDrillDownEmits(),\n methods: {},\n components: {\n Button,\n Input,\n Empty,\n Menu,\n MenuItem,\n LocationIcon,\n TextIcon,\n CalendarIcon,\n },\n setup(props) {\n const {\n dataSet,\n disabledFields,\n getDrillFields,\n setDrillFields,\n className,\n } = props as BaseDrillDownComponentProps;\n const getOptions = () =>\n dataSet.map((val: BaseDrillDownDataSet) => {\n val.disabled = !!(disabledFields && disabledFields.includes(val.value));\n\n return val;\n });\n\n const options: Ref<BaseDrillDownDataSet[]> = ref(getOptions());\n const selected = ref<Key[]>([]);\n\n const handleSearch = (e: ChangeEvent) => {\n const { value } = e.target;\n\n if (!value) {\n options.value = [...dataSet];\n } else {\n const reg = new RegExp(value, 'gi');\n const result = dataSet.filter((item) => reg.test(item.name));\n\n options.value = [...result];\n }\n };\n\n const handleSelect = (value: SelectInfo) => {\n const key = value?.selectedKeys;\n\n selected.value = key;\n if (getDrillFields) {\n getDrillFields(key as string[]);\n }\n\n if (setDrillFields) {\n setDrillFields(key as string[]);\n }\n };\n\n const handleClear = (e: { stopPropagation: () => void }) => {\n e.stopPropagation();\n selected.value = [];\n if (getDrillFields) {\n getDrillFields([]);\n }\n\n if (setDrillFields) {\n setDrillFields([]);\n }\n };\n\n return {\n options,\n handleSearch,\n handleSelect,\n handleClear,\n className,\n selected,\n isEmpty,\n DRILL_DOWN_PRE_CLASS,\n };\n },\n});\n</script>\n\n<template>\n <div :class=\"[DRILL_DOWN_PRE_CLASS, className]\">\n <header :class=\"`${DRILL_DOWN_PRE_CLASS}-header`\">\n <div>{{ title }}</div>\n <Button type=\"link\" @click=\"handleClear\">\n {{ clearText }}\n </Button>\n </header>\n <Input\n :class=\"`${DRILL_DOWN_PRE_CLASS}-search`\"\n :placeholder=\"searchText\"\n @change=\"handleSearch\"\n @pressEnter=\"handleSearch\"\n :allowClear=\"true\"\n />\n <Empty\n v-if=\"isEmpty(options)\"\n :imageStyle=\"{ height: '64px' }\"\n :class=\"`${DRILL_DOWN_PRE_CLASS}-empty`\"\n />\n <Menu\n class=\"`${DRILL_DOWN_PRE_CLASS}-menu`\"\n v-model:selectedKeys=\"selected\"\n @select=\"handleSelect\"\n >\n <MenuItem\n v-for=\"option in options\"\n :key=\"option.value\"\n :disabled=\"option.disabled\"\n :class=\"`${DRILL_DOWN_PRE_CLASS}-menu-item`\"\n >\n <template #icon>\n <TextIcon v-if=\"option.type === 'text'\" />\n <CalendarIcon v-if=\"option.type === 'date'\" />\n <LocationIcon v-if=\"option.type === 'location'\" />\n </template>\n {{ option?.name }}\n </MenuItem>\n </Menu>\n </div>\n</template>\n\n<style lang=\"less\" scoped>\n@import '@antv/s2/esm/shared/styles/drill-down.less';\n</style>\n","<script lang=\"ts\">\nimport {\n type S2Options,\n buildDrillDownOptions,\n handleDrillDown,\n type ActionIconCallbackParams,\n type PartDrillDown,\n} from '@antv/s2';\nimport { isEmpty } from 'lodash';\nimport { computed, createVNode, defineComponent, ref, toRefs } from 'vue';\nimport { useExpose } from '../../hooks/useExpose';\nimport type { BaseSheetInitEmits } from '../../interface';\nimport { initBaseSheetProps } from '../../utils/initPropAndEmits';\nimport DrillDown from '../drill-down/index.vue';\nimport BaseSheet from './base-sheet.vue';\n\nexport default defineComponent({\n name: 'PivotSheet',\n props: initBaseSheetProps(),\n emits: [] as unknown as BaseSheetInitEmits,\n setup(props, ctx) {\n const s2Ref = useExpose(ctx.expose);\n const { options: pivotOptions } = toRefs(props);\n const { dataCfg, partDrillDown } = toRefs(props);\n // 被下钻的 field\n const drillFields = ref<string[]>([]);\n\n // 执行下钻操作\n const setDrillFields = (fields: string[]) => {\n const instance = s2Ref?.value?.instance;\n\n drillFields.value = fields;\n instance?.hideTooltip();\n if (isEmpty(fields)) {\n instance?.clearDrillDownData(instance?.store.get('drillDownNode')?.id);\n } else {\n // 执行下钻\n handleDrillDown({\n rows: (dataCfg.value?.fields.rows as string[]) ?? [],\n drillFields: fields,\n fetchData: partDrillDown.value?.['fetchData'],\n drillItemsNum: partDrillDown.value?.['drillItemsNum'],\n spreadsheet: instance,\n });\n }\n };\n\n /**\n * 点击下钻后,下钻组件的出现\n */\n const onDrillDownIconClick = (params: ActionIconCallbackParams) => {\n const { event, disabledFields } = params;\n\n if (event) {\n const instance = s2Ref?.value?.instance;\n const drillDownNode = createVNode(DrillDown, {\n ...partDrillDown.value?.['drillConfig'],\n setDrillFields,\n drillFields: drillFields.value,\n disabledFields,\n });\n\n // 将下钻设置为 tooltip 的 content 进行展示\n instance?.showTooltip({\n position: {\n x: event.clientX,\n y: event.clientY,\n },\n event,\n content: drillDownNode,\n });\n }\n };\n\n // 展示下钻icon\n const options = computed(() =>\n buildDrillDownOptions(\n pivotOptions.value as any,\n partDrillDown.value as PartDrillDown,\n (params) => onDrillDownIconClick(params),\n ),\n ) as S2Options;\n\n return {\n s2Ref,\n options,\n };\n },\n components: {\n BaseSheet,\n },\n});\n</script>\n\n<template>\n <BaseSheet v-bind=\"$props\" ref=\"s2Ref\" :options=\"options\" />\n</template>\n","import {\n ColCell,\n Node,\n SpreadSheet,\n drawCustomContent,\n safeJsonParse,\n type ColHeaderConfig,\n type MultiData,\n} from '@antv/s2';\nimport { isArray } from 'lodash';\n\n/**\n * Cell for StrategySheet\n * -------------------------------------\n * | root label |\n * | label1 label2 label3 |\n * --------------------------------------\n */\nexport class StrategySheetColCell extends ColCell {\n constructor(\n meta: Node,\n spreadsheet: SpreadSheet,\n headerConfig: ColHeaderConfig,\n ) {\n super(meta, spreadsheet, headerConfig);\n }\n\n public drawTextShape() {\n const meta = this.getMeta();\n const value = safeJsonParse<MultiData>(meta?.value);\n\n if (!isArray(value)) {\n return super.drawTextShape();\n }\n\n const { formattedValue } = this.getFormattedFieldValue();\n const displayValues =\n formattedValue !== meta?.value ? [[formattedValue]] : [value];\n\n drawCustomContent(\n this,\n {\n values: displayValues,\n },\n false,\n );\n }\n}\n","import { DataCell, drawCustomContent } from '@antv/s2';\n\n/**\n * Cell for panelGroup area\n * -------------------------------------\n * | measure1 measure2 measure3 |\n * | measure1 measure2 measure3 |\n * --------------------------------------\n */\nexport class StrategySheetDataCell extends DataCell {\n public drawTextShape() {\n if (this.isMultiData()) {\n return drawCustomContent(this);\n }\n\n super.drawTextShape();\n }\n}\n","import {\n CustomGridPivotDataSet,\n EMPTY_EXTRA_FIELD_PLACEHOLDER,\n EXTRA_FIELD,\n i18n,\n type Meta,\n type RawData,\n type S2DataConfig,\n} from '@antv/s2';\nimport { isEmpty, isObject, keys } from 'lodash';\n\nexport class StrategySheetDataSet extends CustomGridPivotDataSet {\n getExistValuesByDataItem(data: RawData) {\n const result = keys(data).filter((key) => isObject(data[key]));\n\n if (isEmpty(result)) {\n result.push(EMPTY_EXTRA_FIELD_PLACEHOLDER);\n }\n\n return result;\n }\n\n processDataCfg(dataCfg: S2DataConfig): S2DataConfig {\n const updatedDataCfg = super.processDataCfg(dataCfg);\n\n const newMeta: Meta[] = this.processMeta(dataCfg.meta, i18n('数值'));\n\n return {\n ...updatedDataCfg,\n meta: newMeta,\n fields: {\n ...updatedDataCfg.fields,\n rows: [...(dataCfg.fields.rows || []), EXTRA_FIELD],\n },\n };\n }\n}\n","<script lang=\"ts\">\nimport {\n Node,\n SpreadSheet,\n customMerge,\n type ColHeaderConfig,\n type S2Options,\n} from '@antv/s2';\nimport { isEmpty, size } from 'lodash';\nimport { computed, defineComponent, toRefs } from 'vue';\nimport { useExpose } from '../../../hooks/useExpose';\nimport type { BaseSheetInitEmits } from '../../../interface';\nimport { initBaseSheetProps } from '../../../utils/initPropAndEmits';\nimport BaseSheet from '../base-sheet.vue';\nimport { StrategySheetColCell } from './custom-col-cell';\nimport { StrategySheetDataCell } from './custom-data-cell';\nimport { StrategySheetDataSet } from './custom-data-set';\n\nexport default defineComponent({\n name: 'StrategySheet',\n props: initBaseSheetProps(),\n emits: [] as unknown as BaseSheetInitEmits,\n setup(props, ctx) {\n const s2Ref = useExpose(ctx.expose);\n const { options, themeCfg, dataCfg } = toRefs(props);\n\n const strategySheetOptions = computed<Partial<S2Options> | null>(() => {\n if (isEmpty(dataCfg.value)) {\n return null;\n }\n\n // 单指标非自定义树结构隐藏指标列\n const shouldHideValue = size(dataCfg.value?.fields?.values) === 1;\n\n return {\n hierarchyType: 'tree',\n dataCell: (viewMeta, spreadsheet) =>\n new StrategySheetDataCell(viewMeta, spreadsheet),\n colCell: (\n node: Node,\n spreadsheet: SpreadSheet,\n headerConfig: ColHeaderConfig,\n ) => new StrategySheetColCell(node, spreadsheet, headerConfig),\n dataSet: (spreadSheet: SpreadSheet) =>\n new StrategySheetDataSet(spreadSheet),\n showDefaultHeaderActionIcon: false,\n style: {\n colCell: {\n hideValue: shouldHideValue,\n },\n },\n interaction: {\n autoResetSheetStyle: true,\n // 趋势分析表禁用 刷选, 多选, 区间多选\n brushSelection: false,\n selectedCellMove: false,\n multiSelection: false,\n rangeSelection: false,\n },\n tooltip: {\n operation: {\n hiddenColumns: true,\n },\n },\n };\n });\n\n const s2Options = computed<S2Options>(() =>\n customMerge<S2Options>(strategySheetOptions.value, options?.value),\n );\n\n return {\n s2Ref,\n s2Options,\n themeCfg,\n };\n },\n components: {\n BaseSheet,\n },\n});\n</script>\n\n<template>\n <BaseSheet\n v-bind=\"$props\"\n ref=\"s2Ref\"\n :options=\"s2Options\"\n :themeCfg=\"themeCfg\"\n />\n</template>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { useExpose } from '../../hooks/useExpose';\nimport type { BaseSheetInitEmits, BaseSheetInitProps } from '../../interface';\nimport BaseSheet from './base-sheet.vue';\n\nexport default defineComponent({\n name: 'TableSheet',\n props: [] as unknown as BaseSheetInitProps,\n emits: [] as unknown as BaseSheetInitEmits,\n setup(props, ctx) {\n const s2Ref = useExpose(ctx.expose);\n\n return { s2Ref };\n },\n components: {\n BaseSheet,\n },\n});\n</script>\n<template>\n <BaseSheet ref=\"s2Ref\" />\n</template>\n","<!-- eslint-disable max-lines-per-function -->\n<script lang=\"ts\">\nimport {\n DataCell,\n FrozenFacet,\n FrozenGroupArea,\n InteractionStateName,\n S2Event,\n S2_PREFIX_CLS,\n type Point,\n} from '@antv/s2';\nimport { get, pick, throttle } from 'lodash';\nimport {\n defineComponent,\n onMounted,\n onUnmounted,\n ref,\n watch,\n type PropType,\n} from 'vue';\nimport { useSpreadSheetInstance } from '../../../../context/SpreadSheetContext';\n\nimport './drag-copy-mask.less';\n\nexport default defineComponent({\n name: 'DragCopyMask',\n props: {\n onCopyFinished: {\n type: Function as PropType<() => void>,\n default: undefined,\n },\n },\n setup(props) {\n const s2Ref = useSpreadSheetInstance();\n const startCell = ref<DataCell>();\n const maskPosition = ref({ right: 0, bottom: 0 });\n const dragPoint = ref<Point>();\n\n // 利用闭包记录最近一次hover位置\n const lastHoverPoint = { x: 0, y: 0 };\n\n const isInCell = (point: Point, cell: DataCell) => {\n const s2 = s2Ref.value;\n\n if (!s2) {\n return false;\n }\n\n const cellMeta = pick(cell.getMeta(), [\n 'x',\n 'y',\n 'width',\n 'height',\n 'fieldValue',\n ]);\n const scrollOffset = s2.facet.getScrollOffset();\n const sampleColNode = s2.facet.getColNodes()[0];\n const sampleColNodeHeight = sampleColNode?.height || 0;\n const pointX = point.x;\n const pointY = point.y;\n const scrollOffsetY = scrollOffset?.scrollY - sampleColNodeHeight;\n const cellMaxX = cellMeta.x - scrollOffset.scrollX + cellMeta.width + 4;\n const cellMinX = cellMeta.x - scrollOffset.scrollX;\n const cellMaxY = cellMeta.y - scrollOffsetY + cellMeta.height + 4;\n const cellMinY = cellMeta.y - scrollOffsetY;\n\n return (\n cellMaxX >= pointX &&\n cellMinX < pointX &&\n cellMaxY >= pointY &&\n cellMinY < pointY\n );\n };\n\n const judgePointInView = (point: Point) => {\n const s2 = s2Ref.value;\n\n if (!s2) {\n return false;\n }\n\n const rect = s2.getCanvasElement().getBoundingClientRect();\n const frozenGroupAreas = (s2.facet as FrozenFacet).frozenGroupAreas;\n const viewMinX = rect.x;\n const viewMaxX = rect.x + rect.width;\n const viewMinY = rect.y + frozenGroupAreas[FrozenGroupArea.Row].height;\n const viewMaxY = rect.y + rect.height;\n\n return (\n point.x <= viewMaxX &&\n point.x >= viewMinX &&\n point.y <= viewMaxY &&\n point.y >= viewMinY\n );\n };\n\n const getCurrentHoverCell = (event: MouseEvent) => {\n const s2 = s2Ref.value;\n\n if (!s2) {\n return undefined;\n }\n\n const rect = s2.getCanvasElement().getBoundingClientRect();\n const allCells = s2.facet.getDataCells();\n\n return allCells.find((dataCell) =>\n isInCell({ y: event.y - rect.y, x: event.x - rect.x }, dataCell),\n );\n };\n\n const getSelectedCellRange = (start: DataCell, end: DataCell) => {\n const s2 = s2Ref.value;\n\n if (!s2) {\n return [];\n }\n\n const startCellMeta = start.getMeta();\n const endCellMeta = end?.getMeta();\n const minX = Math.min(startCellMeta.colIndex, endCellMeta.colIndex);\n const maxX = Math.max(startCellMeta.colIndex, endCellMeta.colIndex);\n const maxY = Math.max(startCellMeta.rowIndex, endCellMeta.rowIndex);\n const minY = Math.min(startCellMeta.rowIndex, endCellMeta.rowIndex);\n const allCells = s2.facet.getDataCells();\n\n return allCells.filter((item) => {\n const itemMeta = item.getMeta();\n\n return (\n itemMeta.rowIndex <= maxY &&\n itemMeta.rowIndex >= minY &&\n itemMeta.colIndex <= maxX &&\n itemMeta.colIndex >= minX\n );\n });\n };\n\n const dragMove = throttle((event: MouseEvent) => {\n const s2 = s2Ref.value;\n\n if (!startCell.value || !s2) {\n return;\n }\n\n let targetCell = getCurrentHoverCell(event);\n let newX = event.x - dragPoint.value!.x;\n let newY = event.y - dragPoint.value!.y;\n\n if (!judgePointInView(event)) {\n targetCell = getCurrentHoverCell(lastHoverPoint as MouseEvent);\n newX = lastHoverPoint.x - dragPoint.value!.x;\n newY = lastHoverPoint.y - dragPoint.value!.y;\n } else {\n lastHoverPoint.x = event.x;\n lastHoverPoint.y = event.y;\n }\n\n maskPosition.value = { right: newX, bottom: newY };\n const selectedRange = getSelectedCellRange(startCell.value, targetCell!);\n\n s2.interaction.changeState({\n cells: selectedRange.map((v) => v.getMeta() as any),\n stateName: InteractionStateName.PREPARE_SELECT,\n force: true,\n });\n }, 10);\n\n const dragMouseUp = async (event: MouseEvent) => {\n const s2 = s2Ref.value;\n\n if (!startCell.value || !s2) {\n return;\n }\n\n const targetCell =\n getCurrentHoverCell(event) ||\n getCurrentHoverCell(lastHoverPoint as MouseEvent);\n const displayData = s2.dataSet.getDisplayDataSet();\n const selectedRange = getSelectedCellRange(startCell.value, targetCell!);\n const { fieldValue } = startCell.value.getMeta();\n\n const changedCells = selectedRange.map((item) => {\n const { rowIndex, valueField } = item.getMeta();\n\n if (\n displayData[rowIndex] &&\n typeof displayData[rowIndex][valueField] !== 'undefined'\n ) {\n displayData[rowIndex][valueField] = fieldValue;\n }\n\n return item;\n });\n\n s2.interaction.changeState({\n cells: changedCells.map((v) => v.getMeta() as any),\n stateName: InteractionStateName.PREPARE_SELECT,\n force: true,\n });\n await s2.render(true);\n\n maskPosition.value = { right: 0, bottom: 0 };\n s2.off(S2Event.GLOBAL_MOUSE_MOVE, dragMove);\n s2.off(S2Event.GLOBAL_MOUSE_UP, dragMouseUp);\n startCell.value = undefined;\n props.onCopyFinished?.();\n };\n\n const dragMouseDown = (event: MouseEvent) => {\n const s2 = s2Ref.value;\n\n if (!s2) {\n return;\n }\n\n if (get(event, 'target.id') !== 'spreadsheet-drag-copy-point') {\n return;\n }\n\n const rect = (event.target as HTMLElement).getBoundingClientRect();\n const { top, left } = get(event, 'target.style', {}) as {\n top: string;\n left: string;\n };\n const allCells = s2.facet.getDataCells();\n const targetCell = allCells.find((v) =>\n isInCell({ y: parseFloat(top), x: parseFloat(left) }, v),\n );\n\n dragPoint.value = { x: rect.x, y: rect.y };\n startCell.value = targetCell as DataCell;\n };\n\n watch(startCell, (cell) => {\n const s2 = s2Ref.value;\n\n if (cell && s2) {\n s2.on(S2Event.GLOBAL_MOUSE_MOVE, dragMove);\n s2.on(S2Event.GLOBAL_MOUSE_UP, dragMouseUp);\n }\n });\n\n onMounted(() => {\n const pointElement = document.getElementById(\n 'spreadsheet-drag-copy-point',\n );\n\n pointElement?.addEventListener('mousedown', dragMouseDown);\n });\n\n onUnmounted(() => {\n const pointElement = document.getElementById(\n 'spreadsheet-drag-copy-point',\n );\n\n pointElement?.removeEventListener('mousedown', dragMouseDown);\n });\n\n return {\n S2_PREFIX_CLS,\n maskPosition,\n };\n },\n});\n</script>\n\n<template>\n <div\n :class=\"`${S2_PREFIX_CLS}-drag-copy-mask`\"\n :style=\"{\n right: maskPosition.right > 0 ? `${maskPosition.right}px` : '0',\n bottom: maskPosition.bottom > 0 ? `${maskPosition.bottom}px` : '0',\n left: maskPosition.right <= 0 ? `${maskPosition.right}px` : '0',\n top: maskPosition.bottom <= 0 ? `${maskPosition.bottom}px` : '0',\n width: `${Math.abs(maskPosition.right)}px`,\n height: `${Math.abs(maskPosition.bottom)}px`,\n }\"\n />\n</template>\n","<!-- eslint-disable max-lines-per-function -->\n<script lang=\"ts\">\nimport type { FrozenFacet, ScrollOffset } from '@antv/s2';\nimport {\n DataCell,\n FrozenGroupArea,\n GEvent,\n S2Event,\n S2_PREFIX_CLS,\n} from '@antv/s2';\nimport { isEqual, pick } from 'lodash';\nimport { defineComponent, onUnmounted, ref, watch, computed } from 'vue';\nimport { useSpreadSheetInstance } from '../../../../context/SpreadSheetContext';\nimport DragCopyMask from './DragCopyMask.vue';\n\nimport './drag-copy-point.less';\n\nexport default defineComponent({\n name: 'DragCopyPoint',\n components: { DragCopyMask },\n setup() {\n const s2Ref = useSpreadSheetInstance();\n\n const scroll = ref<ScrollOffset & { width?: number; overflow?: boolean }>({\n scrollX: -999,\n scrollY: -999,\n width: 8,\n overflow: true,\n });\n const position = ref({ left: -999, top: -999 });\n const cell = ref<DataCell>();\n\n const handleScroll = () => {\n const spreadsheet = s2Ref.value;\n\n if (!spreadsheet) {\n return;\n }\n\n const newScroll = spreadsheet.facet.getScrollOffset();\n const frozenGroupAreas = (spreadsheet.facet as FrozenFacet)\n .frozenGroupAreas;\n const rect = spreadsheet.getCanvasElement().getBoundingClientRect();\n const cellMeta = cell.value?.getMeta();\n\n if (!isEqual(newScroll, scroll.value)) {\n if (cellMeta) {\n const {\n verticalBorderWidth: vWidth = 0,\n horizontalBorderWidth: hWidth = 0,\n } = cell.value!.getStyle()!.cell!;\n\n const pointX = cellMeta.width + cellMeta.x;\n const pointY = cellMeta.height + cellMeta.y;\n const pointWidth =\n pointX - newScroll.scrollX - rect.width + (vWidth + hWidth) * 2;\n let overflow = true;\n\n if (\n frozenGroupAreas[FrozenGroupArea.Col].width >=\n pointX - newScroll.scrollX - hWidth * 2 ||\n frozenGroupAreas[FrozenGroupArea.Row].height >=\n pointY - newScroll.scrollY - vWidth * 2 ||\n rect.width <= pointX - newScroll.scrollX - hWidth * 2 ||\n rect.height <=\n pointY -\n newScroll.scrollY +\n frozenGroupAreas[FrozenGroupArea.Row].height\n ) {\n overflow = true;\n } else {\n overflow = false;\n }\n\n scroll.value = {\n ...newScroll,\n overflow,\n width: 8 - (pointWidth > 0 ? pointWidth : 0),\n };\n } else {\n scroll.value = { scrollX: -999, scrollY: -999, overflow: true };\n }\n }\n };\n\n const fixPosition = (event: GEvent) => {\n const spreadsheet = s2Ref.value;\n\n if (!spreadsheet) {\n return;\n }\n\n const eventCell = spreadsheet.getCell<DataCell>(event.target);\n const isEventCellSelected = spreadsheet.interaction.isSelectedCell(\n eventCell!,\n );\n\n if (isEventCellSelected) {\n cell.value = eventCell!;\n } else {\n cell.value = undefined;\n }\n };\n\n const batchSelected = () => {\n cell.value = undefined;\n };\n\n const onCopyFinished = () => {\n batchSelected();\n };\n\n const bindEvents = () => {\n const spreadsheet = s2Ref.value;\n\n if (!spreadsheet) {\n return;\n }\n\n spreadsheet.on(S2Event.COL_CELL_CLICK, batchSelected);\n spreadsheet.on(S2Event.ROW_CELL_CLICK, batchSelected);\n spreadsheet.on(S2Event.CORNER_CELL_CLICK, batchSelected);\n spreadsheet.on(S2Event.DATA_CELL_BRUSH_SELECTION, batchSelected);\n spreadsheet.on(S2Event.DATA_CELL_CLICK, fixPosition);\n spreadsheet.on(S2Event.GLOBAL_SCROLL, handleScroll);\n };\n\n const unbindEvents = () => {\n const spreadsheet = s2Ref.value;\n\n if (!spreadsheet) {\n return;\n }\n\n spreadsheet.off(S2Event.COL_CELL_CLICK, batchSelected);\n spreadsheet.off(S2Event.ROW_CELL_CLICK, batchSelected);\n spreadsheet.off(S2Event.CORNER_CELL_CLICK, batchSelected);\n spreadsheet.off(S2Event.DATA_CELL_BRUSH_SELECTION, batchSelected);\n spreadsheet.off(S2Event.DATA_CELL_CLICK, fixPosition);\n spreadsheet.off(S2Event.GLOBAL_SCROLL, handleScroll);\n };\n\n // Watch cell changes\n watch(cell, () => {\n handleScroll();\n });\n\n // Update position when scroll or cell changes\n watch([scroll, cell], () => {\n const spreadsheet = s2Ref.value;\n\n if (!spreadsheet?.getCanvasElement()) {\n return;\n }\n\n if (spreadsheet && cell.value) {\n const sampleColNode = spreadsheet.facet.getColNodes()[0];\n const sampleColNodeHeight = sampleColNode?.height || 0;\n const cellMeta = pick(cell.value.getMeta(), [\n 'x',\n 'y',\n 'width',\n 'height',\n 'fieldValue',\n ]);\n\n cellMeta.x -= scroll.value?.scrollX!;\n cellMeta.y -= scroll.value?.scrollY! - sampleColNodeHeight;\n position.value = {\n left: cellMeta.x + cellMeta.width - 4,\n top: cellMeta.y + cellMeta.height - 4,\n };\n }\n });\n\n // Watch for dataSet changes to reset cell\n watch(\n () => [\n s2Ref.value?.dataSet.sortParams,\n s2Ref.value?.dataSet.filterParams,\n ],\n () => {\n if (cell.value) {\n cell.value = undefined;\n }\n },\n );\n\n // Watch s2Ref to bind/unbind events\n watch(\n s2Ref,\n (newS2, oldS2) => {\n if (oldS2) {\n oldS2.off(S2Event.COL_CELL_CLICK, batchSelected);\n oldS2.off(S2Event.ROW_CELL_CLICK, batchSelected);\n oldS2.off(S2Event.CORNER_CELL_CLICK, batchSelected);\n oldS2.off(S2Event.DATA_CELL_BRUSH_SELECTION, batchSelected);\n oldS2.off(S2Event.DATA_CELL_CLICK, fixPosition);\n oldS2.off(S2Event.GLOBAL_SCROLL, handleScroll);\n }\n\n if (newS2) {\n bindEvents();\n }\n },\n { immediate: true },\n );\n\n onUnmounted(() => {\n unbindEvents();\n });\n\n const pointStyle = computed(() => ({\n display: scroll.value.overflow ? 'none' : 'block',\n left: `${position.value.left}px`,\n top: `${position.value.top}px`,\n width: `${scroll.value.width}px`,\n }));\n\n return {\n S2_PREFIX_CLS,\n pointStyle,\n onCopyFinished,\n };\n },\n});\n</script>\n\n<template>\n <div\n id=\"spreadsheet-drag-copy-point\"\n :class=\"`${S2_PREFIX_CLS}-drag-copy-point`\"\n :style=\"pointStyle\"\n >\n <DragCopyMask :onCopyFinished=\"onCopyFinished\" />\n </div>\n</template>\n","<script lang=\"ts\">\nimport { defineComponent, computed, toRefs, watch, ref, reactive } from 'vue';\nimport type { CSSProperties } from 'vue';\nimport { Input } from 'ant-design-vue';\nimport { isNil, pick } from 'lodash';\nimport type { TargetCellInfo, S2Options, S2CellType } from '@antv/s2';\nimport { useExpose } from '../../hooks/useExpose';\nimport type { BaseSheetInitEmits } from '../../interface';\nimport { initBaseSheetProps } from '../../utils/initPropAndEmits';\nimport BaseSheet from './base-sheet.vue';\nimport { DragCopyPoint } from './editable-sheet/drag-copy';\n\nfunction buildEditProps(option: S2Options): S2Options {\n return { ...option };\n}\n\nexport default defineComponent({\n name: 'EditableSheet',\n props: initBaseSheetProps(),\n emits: [] as unknown as BaseSheetInitEmits,\n setup(props, ctx) {\n const s2Ref = useExpose(ctx.expose);\n const { options: originOptions } = toRefs(props);\n\n const inputRef = ref<HTMLInputElement>(null);\n const targetCell = ref<S2CellType>(null);\n const inputValue = ref<string>('');\n\n const options = computed(() =>\n buildEditProps(originOptions.value as S2Options),\n ) as S2Options;\n\n const inputStyle = reactive({\n width: 0,\n height: 0,\n left: 0,\n top: 0,\n display: 'none',\n zIndex: 1000,\n position: 'absolute',\n }) as CSSProperties;\n\n function setInputStyle() {\n const spreadsheet = s2Ref.value?.instance;\n const cell = targetCell.value;\n\n if (!spreadsheet || !cell) {\n inputStyle.display = 'none';\n\n return;\n }\n\n const scroll = spreadsheet.facet.getScrollOffset();\n let cellPosition = pick(cell.getMeta(), ['x', 'y', 'width', 'height']);\n\n if (isNil(cellPosition.x) || isNil(cellPosition.y)) {\n cellPosition = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n };\n }\n\n const sampleColNode = spreadsheet.facet.getColNodes()[0];\n const sampleColNodeHeight = sampleColNode?.height || 0;\n\n cellPosition.x -= scroll.scrollX || 0;\n cellPosition.y -= (scroll.scrollY || 0) - sampleColNodeHeight;\n const {\n x: cellLeft,\n y: cellTop,\n width: cellWidth,\n height: cellHeight,\n } = cellPosition;\n const inSight =\n cellTop >= 0 &&\n cellTop <= spreadsheet.facet.getCanvasSize().height &&\n cellLeft >= 0 &&\n cellLeft <= spreadsheet.facet.getCanvasSize().width;\n\n inputStyle.width = cellWidth ? `${cellWidth}px` : '0px';\n inputStyle.height = cellHeight ? `${cellHeight}px` : '0px';\n inputStyle.left = cellLeft ? `${cellLeft}px` : '0px';\n inputStyle.top = cellTop ? `${cellTop}px` : '0px';\n inputStyle.display = targetCell.value && inSight ? 'block' : 'none';\n }\n watch([targetCell, s2Ref.value?.instance.facet.getScrollOffset()], () => {\n setInputStyle();\n });\n\n const onDataCellDbClick = (cell: TargetCellInfo) => {\n targetCell.value = cell.target;\n inputValue.value = cell.target.getActualText();\n setTimeout(() => {\n inputRef.value?.focus();\n }, 100);\n };\n\n function onSave() {\n const target = inputRef.value;\n const cell = targetCell.value;\n const spreadsheet = s2Ref.value?.instance;\n\n if (!spreadsheet || !cell || !target) {\n return;\n }\n\n const { rowIndex, valueField, id } = cell.getMeta();\n const inputVal = target.value;\n const displayData = spreadsheet.dataSet.getDisplayDataSet();\n\n displayData[rowIndex][valueField] = inputVal;\n // 编辑后的值作为格式化后的结果, formatter 不再触发, 避免二次格式化\n spreadsheet.dataSet.displayFormattedValueMap?.set(id, inputVal);\n spreadsheet.render();\n\n targetCell.value = null;\n }\n\n return {\n setInputStyle,\n s2Ref,\n options,\n inputStyle,\n onDataCellDbClick,\n inputRef,\n onSave,\n inputValue,\n Input,\n };\n },\n components: {\n BaseSheet,\n DragCopyPoint,\n },\n}) as unknown;\n</script>\n<template>\n <BaseSheet\n @dataCellDoubleClick=\"onDataCellDbClick\"\n @scroll=\"setInputStyle\"\n @dataCellClick=\"onSave\"\n ref=\"s2Ref\"\n v-bind=\"$props\"\n :options=\"options\"\n >\n <template #editCell>\n <Input\n @blur=\"onSave\"\n :value=\"inputValue\"\n ref=\"inputRef\"\n :style=\"inputStyle\"\n />\n <DragCopyPoint />\n </template>\n </BaseSheet>\n</template>\n","<script lang=\"ts\">\nimport type { SheetType } from '@antv/s2';\nimport { computed, defineComponent } from 'vue';\nimport { useExpose } from '../../hooks/useExpose';\nimport type { BaseSheetInitEmits, BaseSheetInitProps } from '../../interface';\nimport ChartSheet from './chart-sheet.vue';\nimport GridAnalysisSheet from './grid-analysis-sheet/index.vue';\nimport PivotChartSheet from './pivot-chart-sheet.vue';\nimport PivotSheet from './pivot-sheet.vue';\nimport StrategySheet from './strategy-sheet/index.vue';\nimport TableSheet from './table-sheet.vue';\nimport EditableSheet from './editable-sheet.vue';\n\nexport default defineComponent({\n name: 'Sheet',\n props: [] as unknown as BaseSheetInitProps,\n emits: [] as unknown as BaseSheetInitEmits,\n setup(props, ctx) {\n const s2Ref = useExpose(ctx.expose);\n\n const sheetType = computed(() => {\n const type = ctx.attrs['sheetType'] as SheetType;\n\n switch (type) {\n case 'table':\n return TableSheet;\n case 'editable':\n return EditableSheet;\n case 'chart':\n return ChartSheet;\n case 'gridAnalysis':\n return GridAnalysisSheet;\n case 'strategy':\n return StrategySheet;\n case 'pivotChart':\n return PivotChartSheet;\n default:\n return PivotSheet;\n }\n });\n\n return { s2Ref, sheetType };\n },\n components: {\n PivotSheet,\n TableSheet,\n EditableSheet,\n ChartSheet,\n GridAnalysisSheet,\n StrategySheet,\n PivotChartSheet,\n },\n});\n</script>\n<template>\n <component :is=\"sheetType\" ref=\"s2Ref\" />\n</template>\n","<script lang=\"ts\">\nimport type { Node } from '@antv/s2';\nimport { getStrategySheetTooltipClsName as tooltipCls } from '@antv/s2';\nimport { isFunction } from 'lodash';\nimport { defineComponent, computed, type PropType } from 'vue';\nimport type { CustomTooltipProps } from './interface';\n\nexport default defineComponent({\n name: 'StrategySheetColCellTooltip',\n props: {\n cell: {\n type: Object as PropType<CustomTooltipProps['cell']>,\n required: true,\n },\n label: {\n type: [Object, Function] as PropType<CustomTooltipProps['label']>,\n default: undefined,\n },\n },\n setup(props) {\n const meta = computed(() => props.cell.getMeta() as Node);\n\n const shouldHide = computed(() => {\n // 趋势分析表叶子节点显示是指标标题, tooltip 中没必要再显示了\n return meta.value.isLeaf && meta.value.level !== 0;\n });\n\n const cellName = computed(() => {\n const m = meta.value;\n const name = m.spreadsheet.dataSet.getFieldName(m.field!);\n const customLabel = isFunction(props.label)\n ? props.label(props.cell, name)\n : props.label;\n\n return customLabel ?? name;\n });\n\n const cellValue = computed(() => meta.value.value);\n\n return {\n tooltipCls,\n shouldHide,\n cellName,\n cellValue,\n };\n },\n});\n</script>\n\n<template>\n <div v-if=\"!shouldHide\" :class=\"[tooltipCls(), tooltipCls('col')]\">\n <span :class=\"tooltipCls('name')\">{{ cellName }}</span>\n <span :class=\"tooltipCls('value')\">{{ cellValue }}</span>\n </div>\n</template>\n\n<style lang=\"less\">\n@import './index.less';\n</style>\n","<script lang=\"ts\">\nimport type { ViewMeta, MultiData, SimpleData } from '@antv/s2';\nimport {\n i18n,\n getEmptyPlaceholder,\n isUnchangedValue,\n isUpDataValue,\n getStrategySheetTooltipClsName as tooltipCls,\n} from '@antv/s2';\nimport { first, get, isEmpty, isFunction, isNil } from 'lodash';\nimport { defineComponent, computed, type PropType } from 'vue';\nimport type { CustomTooltipProps } from './interface';\n\nexport default defineComponent({\n name: 'StrategySheetDataCellTooltip',\n props: {\n cell: {\n type: Object as PropType<CustomTooltipProps['cell']>,\n required: true,\n },\n label: {\n type: [Object, Function] as PropType<CustomTooltipProps['label']>,\n default: undefined,\n },\n showOriginalValue: {\n type: Boolean,\n default: false,\n },\n renderDerivedValue: {\n type: Function as PropType<CustomTooltipProps['renderDerivedValue']>,\n default: undefined,\n },\n },\n setup(props) {\n const meta = computed(() => props.cell.getMeta() as ViewMeta);\n const spreadsheet = computed(() => meta.value.spreadsheet);\n const metaFieldValue = computed(\n () => meta.value?.fieldValue as MultiData<SimpleData[][]>,\n );\n\n const rowDescription = computed(() =>\n spreadsheet.value.dataSet.getCustomFieldDescription(props.cell),\n );\n\n const rowName = computed(() => {\n const defaultRowName = spreadsheet.value.dataSet.getCustomRowFieldName(\n props.cell,\n );\n const customLabel = isFunction(props.label)\n ? props.label(props.cell, defaultRowName)\n : props.label;\n\n return customLabel ?? defaultRowName;\n });\n\n const colLeafNode = computed(() =>\n spreadsheet.value.facet.getColLeafNodeByIndex(meta.value.colIndex),\n );\n\n const derivedLabels = computed(() => {\n try {\n const [, ...labels] = JSON.parse(colLeafNode.value?.value!);\n\n return labels;\n } catch {\n return [];\n }\n });\n\n const valuesCfg = computed(\n () => spreadsheet.value.options.style?.dataCell?.valuesCfg,\n );\n\n const values = computed(() => {\n const firstValues = first(metaFieldValue.value?.values) || [\n metaFieldValue.value,\n ];\n\n return {\n value: firstValues[0],\n derivedValues: firstValues.slice(1) as SimpleData[],\n };\n });\n\n const originalValues = computed(() => {\n const originalValuesField = get(\n metaFieldValue.value,\n valuesCfg.value?.originalValueField!,\n ) as SimpleData[][];\n const firstOriginal = first(originalValuesField) || [values.value.value];\n\n return {\n originalValue: firstOriginal[0],\n derivedOriginalValues: firstOriginal.slice(1) as SimpleData[],\n };\n });\n\n const emptyPlaceholder = computed(() =>\n getEmptyPlaceholder(meta.value, spreadsheet.value.options.placeholder),\n );\n\n const shouldShowOriginalValue = computed(\n () => valuesCfg.value?.showOriginalValue || props.showOriginalValue,\n );\n\n const getDerivedValueInfo = (derivedValue: SimpleData, index: number) => {\n const isUnchanged = isUnchangedValue(\n derivedValue,\n values.value.value as SimpleData,\n );\n const isUp = !isUnchanged && isUpDataValue(derivedValue);\n const isDown = !isUnchanged && !isUp;\n const originalDerivedValue =\n originalValues.value.derivedOriginalValues[index];\n\n return { isUnchanged, isUp, isDown, originalDerivedValue };\n };\n\n return {\n tooltipCls,\n i18n,\n isEmpty,\n isNil,\n rowName,\n rowDescription,\n values,\n originalValues,\n derivedLabels,\n emptyPlaceholder,\n shouldShowOriginalValue,\n getDerivedValueInfo,\n };\n },\n});\n</script>\n\n<template>\n <div :class=\"[tooltipCls(), tooltipCls('data')]\">\n <div :class=\"tooltipCls('header')\">\n <span class=\"header-label\">{{ rowName }}</span>\n <span>{{ values.value ?? emptyPlaceholder }}</span>\n </div>\n\n <div v-if=\"shouldShowOriginalValue\" :class=\"tooltipCls('original-value')\">\n {{\n isNil(originalValues.originalValue)\n ? emptyPlaceholder\n : originalValues.originalValue\n }}\n </div>\n\n <template v-if=\"!isEmpty(values.derivedValues)\">\n <div :class=\"tooltipCls('divider')\" />\n <ul :class=\"tooltipCls('derived-values')\">\n <li\n v-for=\"(derivedValue, i) in values.derivedValues\"\n :key=\"i\"\n class=\"derived-value-item\"\n >\n <span class=\"derived-value-label\">{{ derivedLabels[i] }}</span>\n <span\n :class=\"[\n 'derived-value-group',\n {\n 'derived-value-trend-up': getDerivedValueInfo(derivedValue, i)\n .isUp,\n 'derived-value-trend-down': getDerivedValueInfo(derivedValue, i)\n .isDown,\n },\n ]\"\n >\n <span\n v-if=\"!getDerivedValueInfo(derivedValue, i).isUnchanged\"\n class=\"derived-value-trend-icon\"\n />\n <template\n v-if=\"\n renderDerivedValue?.(\n derivedValue,\n getDerivedValueInfo(derivedValue, i).originalDerivedValue,\n cell,\n )\n \"\n >\n {{\n renderDerivedValue(\n derivedValue,\n getDerivedValueInfo(derivedValue, i).originalDerivedValue,\n cell,\n )\n }}\n </template>\n <span v-else class=\"derived-value-content\">\n {{ derivedValue ?? emptyPlaceholder }}\n </span>\n </span>\n </li>\n </ul>\n </template>\n\n <div v-if=\"rowDescription\" :class=\"tooltipCls('description')\">\n <span :class=\"tooltipCls('description-label')\">{{ i18n('说明') }}</span>\n <span :class=\"tooltipCls('description-text')\">{{ rowDescription }}</span>\n </div>\n </div>\n</template>\n\n<style lang=\"less\">\n@import './index.less';\n</style>\n","<script lang=\"ts\">\nimport type { Node } from '@antv/s2';\nimport { i18n, getStrategySheetTooltipClsName as tooltipCls } from '@antv/s2';\nimport { isFunction } from 'lodash';\nimport { defineComponent, computed, type PropType } from 'vue';\nimport type { CustomTooltipProps } from './interface';\n\nexport default defineComponent({\n name: 'StrategySheetRowCellTooltip',\n props: {\n cell: {\n type: Object as PropType<CustomTooltipProps['cell']>,\n required: true,\n },\n label: {\n type: [Object, Function] as PropType<CustomTooltipProps['label']>,\n default: undefined,\n },\n },\n setup(props) {\n const meta = computed(() => props.cell.getMeta() as Node);\n\n const rowName = computed(() => {\n const { value } = meta.value;\n const customLabel = isFunction(props.label)\n ? props.label(props.cell, value)\n : props.label;\n\n return customLabel ?? value;\n });\n\n const description = computed(() => {\n const { field, spreadsheet, extra } = meta.value;\n\n return (\n spreadsheet.dataSet.getFieldDescription(field) || extra?.['description']\n );\n });\n\n return {\n tooltipCls,\n i18n,\n rowName,\n description,\n };\n },\n});\n</script>\n\n<template>\n <div :class=\"[tooltipCls(), tooltipCls('row')]\">\n <div :class=\"tooltipCls('value')\">{{ rowName }}</div>\n <div v-if=\"description\" :class=\"tooltipCls('description')\">\n <span :class=\"tooltipCls('description-label')\">{{ i18n('说明') }}</span>\n <span :class=\"tooltipCls('description-text')\">{{ description }}</span>\n </div>\n </div>\n</template>\n\n<style lang=\"less\">\n@import './index.less';\n</style>\n","<script setup lang=\"ts\">\nimport {\n DownOutlined,\n UpOutlined,\n VerticalAlignTopOutlined,\n} from '@ant-design/icons-vue';\nimport { ADVANCED_SORT_PRE_CLS } from '@antv/s2';\nimport { Card } from 'ant-design-vue';\nimport type { CustomSortProps } from './interface';\n\nconst props = defineProps<CustomSortProps>();\nconst emit = defineEmits<{\n (e: 'split-orders-change', orders: string[]): void;\n}>();\n\nconst moveToTopHandler = (value: string) => {\n const res = [...props.splitOrders];\n const index = res.indexOf(value);\n\n if (index > 0) {\n res.splice(index, 1);\n res.unshift(value);\n emit('split-orders-change', res);\n }\n};\n\nconst moveUpHandler = (value: string) => {\n const res = [...props.splitOrders];\n const index = res.indexOf(value);\n\n if (index > 0) {\n res.splice(index, 1);\n res.splice(index - 1, 0, value);\n emit('split-orders-change', res);\n }\n};\n\nconst moveDownHandler = (value: string) => {\n const res = [...props.splitOrders];\n const index = res.indexOf(value);\n\n if (index < res.length - 1) {\n res.splice(index, 1);\n res.splice(index + 1, 0, value);\n emit('split-orders-change', res);\n }\n};\n</script>\n\n<template>\n <Card :class=\"`${ADVANCED_SORT_PRE_CLS}-card-content`\">\n <li\n v-for=\"value in splitOrders\"\n :key=\"value\"\n :class=\"`${ADVANCED_SORT_PRE_CLS}-split-value`\"\n :title=\"value\"\n >\n <span class=\"split-text\">{{ value }}</span>\n <span\n :class=\"`${ADVANCED_SORT_PRE_CLS}-split-icon`\"\n @click=\"() => moveToTopHandler(value)\"\n >\n <VerticalAlignTopOutlined />\n </span>\n <span\n :class=\"`${ADVANCED_SORT_PRE_CLS}-split-icon`\"\n @click=\"() => moveDownHandler(value)\"\n >\n <DownOutlined />\n </span>\n <span\n :class=\"`${ADVANCED_SORT_PRE_CLS}-split-icon`\"\n @click=\"() => moveUpHandler(value)\"\n >\n <UpOutlined />\n </span>\n </li>\n </Card>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, watch } from 'vue';\nimport {\n Button,\n Form,\n Layout,\n Modal,\n Select,\n Cascader,\n Radio,\n type FormInstance,\n} from 'ant-design-vue';\nimport { OrderedListOutlined, DeleteOutlined } from '@ant-design/icons-vue';\nimport {\n ADVANCED_SORT_PRE_CLS,\n EXTRA_FIELD,\n TOTAL_VALUE,\n getSortMethod,\n getSortRuleOptions,\n i18n,\n type SortParam,\n} from '@antv/s2';\nimport {\n filter,\n find,\n forEach,\n includes,\n isEqual,\n keys,\n map,\n toUpper,\n uniq,\n} from 'lodash';\nimport type {\n AdvancedSortProps,\n Dimension,\n RuleItem,\n RuleValue,\n} from './interface';\nimport CustomSort from './CustomSort.vue';\n\nconst props = defineProps<AdvancedSortProps>();\n\nconst emit = defineEmits<{\n (e: 'sort-confirm', ruleValues: RuleValue[], sortParams: SortParam[]): void;\n (e: 'sort-open'): void;\n}>();\n\nconst { Sider, Content } = Layout;\n\nconst isSortVisible = ref(false);\nconst isCustomVisible = ref(false);\nconst ruleList = ref<RuleItem[]>([]);\nconst rules = ref<any[]>([]);\nconst manualDimensionList = ref<Dimension[]>([]);\nconst dimensionList = ref<Dimension[]>([]);\nconst sortBy = ref<string[]>([]);\nconst currentDimension = ref<Dimension>();\nconst formRef = ref<FormInstance>();\nconst formData = ref<Record<string, any>>({});\n\n// Constants\nconst SORT_RULE_OPTIONS = getSortRuleOptions();\nconst SORT_METHOD = getSortMethod();\n\nconst handleModal = () => {\n isSortVisible.value = !isSortVisible.value;\n};\n\nconst sortClick = () => {\n emit('sort-open');\n handleModal();\n};\n\nconst handleCustom = () => {\n isCustomVisible.value = !isCustomVisible.value;\n};\n\nconst handleDimension = (dimension: Dimension) => {\n if (!find(ruleList.value, (item) => item.field === dimension.field)) {\n currentDimension.value = dimension;\n formData.value[dimension.field] = {\n name: dimension.name,\n rule: ['sortMethod'],\n sortMethod: 'ASC',\n sortBy: [],\n };\n ruleList.value = [...ruleList.value, dimension as unknown as RuleItem];\n }\n\n dimensionList.value = filter(\n dimensionList.value,\n (item) => item.field !== dimension.field,\n );\n};\n\nconst handleCustomSort = (\n dimension: RuleItem | Dimension,\n splitOrders?: string[],\n) => {\n handleCustom();\n // Find the correct Dimension object to ensure type safety\n const correctDimension = find(\n manualDimensionList.value,\n (item) => item.field === dimension.field,\n );\n\n if (correctDimension) {\n currentDimension.value = correctDimension;\n }\n\n if (splitOrders && splitOrders.length > 0) {\n sortBy.value = uniq(splitOrders);\n } else {\n const list = correctDimension?.list || [];\n\n sortBy.value = uniq(list);\n }\n};\n\nconst customSort = () => {\n handleCustom();\n // Update formData directly since we are using v-model / form binding\n // In React strict controlled form: form.setFieldsValue.\n // In Vue we might need to manually update if we use v-model on form items\n // But here we might rely on re-initializing form state or reactivity.\n\n if (!currentDimension.value) {\n return;\n }\n\n const field = currentDimension.value.field;\n\n // Update local state that reflects back to form\n if (!formData.value[field]) {\n formData.value[field] = {};\n }\n\n formData.value[field].sortBy = sortBy.value;\n\n // Update ruleList 's view\n ruleList.value = map(ruleList.value, (item) => {\n if (item.field === field) {\n return {\n ...item,\n // Force rule to sortBy\n rule: ['sortBy'],\n sortBy: sortBy.value,\n sortMethod: undefined,\n sortByMeasure: undefined,\n };\n }\n\n return item;\n }) as RuleItem[];\n\n // Also update Form data explicitly if needed (Antdv Form)\n if (formRef.value) {\n formRef.value.validateFields();\n }\n};\n\nconst customCancel = () => {\n handleCustom();\n};\n\nconst deleteRule = (dimension: RuleItem | Dimension) => {\n ruleList.value = filter(\n ruleList.value,\n (item) => item.field !== dimension.field,\n );\n const originalDimension = find(\n manualDimensionList.value,\n (item) => item.field === dimension.field,\n );\n\n if (originalDimension) {\n dimensionList.value = [...dimensionList.value, originalDimension];\n }\n\n // Clean up form data\n delete formData.value[dimension.field];\n};\n\nconst onFinish = () => {\n const ruleValues: RuleValue[] = [];\n const currentSortParams: SortParam[] = [];\n\n // Use formData.value instead of form.getFieldsValue() if we bind v-model\n // Or use formRef.value.getFieldsValue(). simpler to trust reactive state here,\n // but for Antdv Form, getting all fields value is safer.\n\n // Let's assume formData.value is sync with UI via v-model\n const formValues = formData.value;\n const { values = [] } = props.sheetInstance.dataCfg.fields;\n\n forEach(keys(formValues), (field) => {\n // Check if valid rule in list\n if (!find(ruleList.value, (r) => r.field === field)) {\n return;\n }\n\n const { sortMethod, rule = [], sortBy: currentSortBy } = formValues[field];\n\n // Default fallback\n const safeRule = rule || ['sortMethod'];\n\n const current: SortParam = { sortFieldId: field };\n\n if (safeRule[0] === 'sortByMeasure' || safeRule[1]) {\n if (!includes(values, safeRule[1])) {\n current.sortByMeasure = TOTAL_VALUE;\n } else {\n current.sortByMeasure = safeRule[1];\n }\n\n current.sortMethod = sortMethod;\n current.query = {\n [EXTRA_FIELD]: safeRule[1],\n };\n } else if (safeRule[0] === 'sortBy') {\n current.sortBy = currentSortBy;\n } else {\n current.sortMethod = sortMethod;\n }\n\n ruleValues.push({\n field,\n name: '',\n sortMethod: formValues[field].sortMethod,\n sortBy: formValues[field].sortBy,\n sortByMeasure: formValues[field].sortByMeasure,\n rule: formValues[field].rule,\n });\n currentSortParams.push(current);\n });\n\n emit('sort-confirm', ruleValues, currentSortParams);\n handleModal();\n};\n\nconst getDimensionList = (list: Dimension[]) =>\n filter(\n list,\n (item: Dimension) =>\n !find(\n props.sortParams,\n (sortParam) => sortParam.sortFieldId === item.field,\n ),\n );\n\nconst getManualDimensionList = (): Dimension[] => {\n if (props.dimensions) {\n return props.dimensions;\n }\n\n const { fields = {} } = props.sheetInstance.dataCfg || {};\n const { rows = [], columns = [] } = fields;\n\n return map([...rows, ...columns], (item: any) => {\n const name = typeof item === 'string' ? item : item.field;\n\n return {\n field: item,\n name: props.sheetInstance.dataSet.getFieldName(name),\n list: props.sheetInstance.dataSet.getDimensionValues(name),\n };\n }) as unknown as Dimension[];\n};\n\nconst getRuleOptions = () => {\n if (props.ruleOptions) {\n return props.ruleOptions;\n }\n\n return map(SORT_RULE_OPTIONS, (item) => {\n if (item.value === 'sortByMeasure') {\n const { values = [] } = props.sheetInstance.dataCfg.fields || {};\n\n item.children = map(values, (field) => {\n return {\n label: props.sheetInstance.dataSet.getFieldName(field),\n value: field,\n };\n });\n }\n\n return item;\n });\n};\n\nconst getRuleList = (): RuleItem[] =>\n map(props.sortParams, (item) => {\n const {\n sortFieldId,\n sortMethod,\n sortBy: currentSortBy,\n sortByMeasure,\n } = item;\n let rule: string[];\n\n if (currentSortBy) {\n rule = ['sortBy'];\n } else if (sortByMeasure) {\n rule = ['sortByMeasure', sortByMeasure];\n } else {\n rule = ['sortMethod'];\n }\n\n return {\n field: sortFieldId,\n name: props.sheetInstance.dataSet.getFieldName(sortFieldId),\n rule,\n sortMethod,\n sortBy: currentSortBy,\n sortByMeasure,\n };\n }) as RuleItem[];\n\nwatch(isSortVisible, (val) => {\n if (val) {\n const initRuleList = getRuleList();\n const manualDimensions = getManualDimensionList();\n const initDimensionList = getDimensionList(manualDimensions);\n const initRuleOptions = getRuleOptions();\n\n ruleList.value = initRuleList;\n manualDimensionList.value = manualDimensions;\n dimensionList.value = initDimensionList;\n rules.value = initRuleOptions;\n\n // Initialize form data\n const newFormData: Record<string, any> = {};\n\n initRuleList.forEach((item) => {\n newFormData[item.field] = {\n name: item.name,\n rule: item.rule,\n sortMethod: item.sortMethod ? toUpper(item.sortMethod) : 'ASC',\n sortBy: item.sortBy,\n };\n });\n formData.value = newFormData;\n }\n});\n\nconst onSplitOrdersChange = (orders: string[]) => {\n sortBy.value = orders;\n};\n</script>\n\n<template>\n <div :class=\"[ADVANCED_SORT_PRE_CLS, className]\">\n <Button\n size=\"small\"\n :class=\"`${ADVANCED_SORT_PRE_CLS}-btn`\"\n @click=\"sortClick\"\n >\n <template #icon>\n <component :is=\"icon || OrderedListOutlined\" />\n </template>\n {{ text || i18n('高级排序') }}\n </Button>\n\n <Modal\n :title=\"text || i18n('高级排序')\"\n :open=\"isSortVisible\"\n :okText=\"i18n('确定')\"\n :cancelText=\"i18n('取消')\"\n :destroyOnClose=\"true\"\n :class=\"`${ADVANCED_SORT_PRE_CLS}-modal`\"\n @ok=\"onFinish\"\n @cancel=\"handleModal\"\n >\n <Layout>\n <Sider width=\"120\" :class=\"`${ADVANCED_SORT_PRE_CLS}-sider-layout`\">\n <div :class=\"`${ADVANCED_SORT_PRE_CLS}-title`\">\n {{ i18n('可选字段') }}\n </div>\n <div>\n <div\n v-for=\"item in dimensionList\"\n :key=\"item.field\"\n :class=\"`${ADVANCED_SORT_PRE_CLS}-dimension-item`\"\n :title=\"item.name\"\n @click=\"handleDimension(item)\"\n >\n {{ item.name }}\n </div>\n </div>\n </Sider>\n <Content :class=\"`${ADVANCED_SORT_PRE_CLS}-content-layout`\">\n <div :class=\"`${ADVANCED_SORT_PRE_CLS}-title`\">\n {{ ruleText || i18n('按以下规则进行排序(优先级由低到高)') }}\n </div>\n <Form\n ref=\"formRef\"\n :model=\"formData\"\n name=\"form\"\n :class=\"`${ADVANCED_SORT_PRE_CLS}-custom-form`\"\n >\n <div v-for=\"item in ruleList\" :key=\"item.field\">\n <!-- Field Name (ReadOnly) -->\n <Form.Item style=\"margin-bottom: 4px\">\n <Select\n :value=\"item.name\"\n disabled\n :class=\"`${ADVANCED_SORT_PRE_CLS}-select`\"\n size=\"small\"\n style=\"width: 120px\"\n />\n <span :class=\"`${ADVANCED_SORT_PRE_CLS}-field-prefix`\">\n {{ i18n('按') }}\n </span>\n\n <!-- Rule Cascader -->\n <Form.Item :name=\"[item.field, 'rule']\" noStyle>\n <Cascader\n v-model:value=\"formData[item.field].rule\"\n :options=\"rules\"\n expandTrigger=\"hover\"\n size=\"small\"\n :allowClear=\"false\"\n style=\"width: 120px; margin-left: 8px\"\n />\n </Form.Item>\n\n <!-- Conditional Render based on rule -->\n <template\n v-if=\"!isEqual(formData[item.field].rule, ['sortBy'])\"\n >\n <Form.Item :name=\"[item.field, 'sortMethod']\" noStyle>\n <Radio.Group\n v-model:value=\"formData[item.field].sortMethod\"\n :class=\"`${ADVANCED_SORT_PRE_CLS}-rule-end`\"\n >\n <Radio\n v-for=\"method in SORT_METHOD\"\n :key=\"method.value\"\n :value=\"method.value\"\n >\n {{ method.name }}\n </Radio>\n </Radio.Group>\n </Form.Item>\n </template>\n <template v-else>\n <a\n :class=\"`${ADVANCED_SORT_PRE_CLS}-rule-end`\"\n @click=\"handleCustomSort(item, formData[item.field].sortBy)\"\n >\n {{ i18n('设置顺序') }}\n </a>\n <!-- Hidden sortBy field storage -->\n <!-- formData[item.field].sortBy is stored in state -->\n </template>\n\n <DeleteOutlined\n :class=\"`${ADVANCED_SORT_PRE_CLS}-rule-end-delete`\"\n @click=\"deleteRule(item)\"\n />\n </Form.Item>\n </div>\n </Form>\n </Content>\n </Layout>\n </Modal>\n\n <Modal\n :title=\"i18n('手动排序')\"\n :open=\"isCustomVisible\"\n :okText=\"i18n('确定')\"\n :cancelText=\"i18n('取消')\"\n :destroyOnClose=\"true\"\n :class=\"`${ADVANCED_SORT_PRE_CLS}-custom-modal`\"\n @ok=\"customSort\"\n @cancel=\"customCancel\"\n >\n <CustomSort\n :splitOrders=\"sortBy\"\n @split-orders-change=\"onSplitOrdersChange\"\n />\n </Modal>\n </div>\n</template>\n\n<style lang=\"less\">\n@import './index.less';\n</style>\n","<script setup lang=\"ts\">\nimport { S2_PREFIX_CLS } from '@antv/s2';\nimport { RadioGroup as ARadioGroup } from 'ant-design-vue';\nimport { computed } from 'vue';\nimport type { RadioGroupProps as AntdRadioGroupProps } from 'ant-design-vue';\n\nconst PRE_CLASS = `${S2_PREFIX_CLS}-radio-group`;\n\nconst props = withDefaults(\n defineProps<{\n label?: string;\n onlyIcon?: boolean;\n options?: AntdRadioGroupProps['options'];\n value?: string | number | boolean;\n optionType?: 'default' | 'button';\n size?: 'large' | 'default' | 'small';\n }>(),\n {\n label: '',\n onlyIcon: false,\n optionType: 'default',\n size: 'small',\n },\n);\n\nconst emit = defineEmits<{\n change: [event: any];\n}>();\n\nconst classNames = computed(() => {\n return {\n [PRE_CLASS]: true,\n [`${PRE_CLASS}-icon-only`]: props.onlyIcon,\n };\n});\n\nconst handleChange = (e: any) => {\n const value = e?.target?.value ?? e;\n\n emit('change', { target: { value } });\n};\n</script>\n\n<template>\n <div :class=\"classNames\">\n <span :class=\"`${PRE_CLASS}-label`\">{{ label }}</span>\n <span :class=\"`${PRE_CLASS}-content`\">\n <ARadioGroup\n :size=\"size\"\n :value=\"value\"\n :options=\"options\"\n :option-type=\"optionType\"\n @change=\"handleChange\"\n @update:value=\"handleChange\"\n />\n <slot name=\"extra\" />\n </span>\n </div>\n</template>\n\n<style lang=\"less\">\n@import '@antv/s2/esm/styles/variables.less';\n\n.@{s2-cls-prefix}-radio-group {\n color: #3572f9;\n cursor: pointer;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n\n &.@{s2-cls-prefix}-radio-group-icon-only {\n .ant-radio-group {\n .ant-radio-button-wrapper {\n border: none;\n background: transparent;\n box-shadow: none;\n\n &::before {\n display: none;\n }\n\n &-checked {\n background: transparent;\n border: none;\n box-shadow: none;\n outline: none;\n\n &:focus-visible,\n &:focus-within {\n border: none;\n outline: none;\n }\n }\n }\n }\n }\n\n & + .@{s2-cls-prefix}-radio-group {\n margin-top: 6px;\n }\n\n &-label {\n flex: 1 0;\n flex-wrap: nowrap;\n display: inline-flex;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n margin-right: 12px;\n }\n\n &-content {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { S2_PREFIX_CLS, i18n } from '@antv/s2';\nimport { ReloadOutlined } from '@ant-design/icons-vue';\n\nconst PRE_CLASS = `${S2_PREFIX_CLS}-reset-btn`;\n\nwithDefaults(\n defineProps<{\n title?: string;\n }>(),\n {\n title: () => i18n('重置'),\n },\n);\n\nconst emit = defineEmits<{\n click: [event: MouseEvent];\n}>();\n\nconst handleClick = (event: MouseEvent) => {\n emit('click', event);\n};\n</script>\n\n<template>\n <span :class=\"PRE_CLASS\" @click=\"handleClick\">\n <ReloadOutlined :class=\"`${PRE_CLASS}-icon`\" />\n <span :class=\"`${PRE_CLASS}-text`\">{{ title }}</span>\n </span>\n</template>\n\n<style lang=\"less\">\n@import '@antv/s2/esm/styles/variables.less';\n\n.@{s2-cls-prefix}-reset-btn {\n color: #3572f9;\n cursor: pointer;\n padding-left: 8px;\n\n &-text {\n margin-left: 4px;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { S2_PREFIX_CLS } from '@antv/s2';\nimport { CaretRightOutlined } from '@ant-design/icons-vue';\nimport { Collapse, CollapsePanel } from 'ant-design-vue';\nimport { computed, ref } from 'vue';\nimport { ResetButton } from '../reset-button';\n\nconst ACTIVE_KEY = 'RESET_GROUP';\nconst PRE_CLASS = `${S2_PREFIX_CLS}-reset-group`;\n\nconst props = withDefaults(\n defineProps<{\n title?: string;\n defaultCollapsed?: boolean;\n class?: string;\n }>(),\n {\n title: '',\n defaultCollapsed: false,\n class: '',\n },\n);\n\nconst emit = defineEmits<{\n reset: [];\n}>();\n\nconst activeKey = ref(props.defaultCollapsed ? [] : [ACTIVE_KEY]);\n\nconst classNames = computed(() => {\n return [PRE_CLASS, props.class].filter(Boolean).join(' ');\n});\n\nconst handleResetClick = (e: MouseEvent) => {\n e.stopPropagation();\n emit('reset');\n};\n</script>\n\n<template>\n <Collapse v-model:activeKey=\"activeKey\" :bordered=\"false\" :class=\"classNames\">\n <template #expandIcon=\"{ isActive }\">\n <CaretRightOutlined :rotate=\"isActive ? 90 : 0\" />\n </template>\n <CollapsePanel\n :key=\"ACTIVE_KEY\"\n :header=\"title\"\n :class=\"`${PRE_CLASS}-panel`\"\n >\n <template #extra>\n <ResetButton @click=\"handleResetClick\" />\n </template>\n <slot />\n </CollapsePanel>\n </Collapse>\n</template>\n\n<style lang=\"less\">\n@import '@antv/s2/esm/styles/variables.less';\n\n.@{s2-cls-prefix}-reset-group {\n width: 340px;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { S2_PREFIX_CLS } from '@antv/s2';\nimport { Tooltip } from 'ant-design-vue';\nimport { computed } from 'vue';\n\nconst PRE_CLASS = `${S2_PREFIX_CLS}-tooltip-wrapper`;\n\nconst props = withDefaults(\n defineProps<{\n title?: string;\n class?: string;\n }>(),\n {\n title: '',\n class: '',\n },\n);\n\nconst classNames = computed(() => {\n return [PRE_CLASS, props.class].filter(Boolean).join(' ');\n});\n</script>\n\n<template>\n <Tooltip :title=\"title\" :class=\"classNames\">\n <slot />\n </Tooltip>\n</template>\n","import { h, type FunctionalComponent, type SVGAttributes } from 'vue';\n\nexport const ColIcon: FunctionalComponent<SVGAttributes> = (props) => {\n return h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '12',\n height: '12',\n class: 'antv-s2-icon',\n ...props,\n },\n [\n h('g', { fill: 'currentColor', fillRule: 'nonzero' }, [\n h('path', {\n d: 'M4.457 11.229h6.772V3.77H4.457zm-.686 0V3.77h-3v7.543h3zM11.23 3V.771H.77V3zM12 0v12H0V0z',\n }),\n h('path', { d: 'M.771.771H11.23V3H.77z' }),\n ]),\n ],\n );\n};\n\nexport const RowIcon: FunctionalComponent<SVGAttributes> = (props) => {\n return h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '12',\n height: '12',\n class: 'antv-s2-icon',\n ...props,\n },\n [\n h('g', { fill: 'currentColor', fillRule: 'evenodd' }, [\n h('path', {\n d: 'M.771 3.771h3v1.886h-3zm0 2.572h3V8.57h-3zM.771 9h3v2.229h-3z',\n }),\n h('path', {\n d: 'M.771 9v2.229H11.23V3.77H.77v1.886h3V3.771h.772v7.543H3.77V9.086h-3zm0-.771h3V6.343h-3zM11.23 3V.771H.77V3zM12 0v12H0V0z',\n }),\n ]),\n ],\n );\n};\n\nexport const ValueIcon: FunctionalComponent<SVGAttributes> = (props) => {\n return h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '12',\n height: '12',\n class: 'antv-s2-icon',\n ...props,\n },\n [\n h('g', { fill: 'currentColor', fillRule: 'evenodd' }, [\n h('path', { d: 'M4.229 3.771h7v8h-7z' }),\n h('path', {\n d: 'M4.457 11.229h6.772V3.77H4.457zm-.686 0V3.77h-3v7.543h3zM11.23 3V.771H.77V3zM12 0v12H0V0z',\n }),\n ]),\n ],\n );\n};\n\nexport const CalendarIcon: FunctionalComponent<SVGAttributes> = (props) => {\n return h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '12.6',\n height: '12.6',\n class: 'antv-s2-icon',\n viewBox: '0 0 1024 1024',\n ...props,\n },\n [\n h('path', {\n fill: 'currentColor',\n d: 'M950.016 898.016 744 693.024q88-107.008 88-244.992 0-159.008-112.512-271.488T448 64.032 176.512 176.544 64 448.032 176.512 719.52 448 832.032q138.016 0 244.992-88l206.016 206.016q10.016 10.016 24.992 10.016t26.016-10.016q10.016-11.008 10.016-26.016t-10.016-26.016M568.992 736Q512 760 448 760t-120.992-24q-56-24-99.488-67.488t-66.496-99.488q-24.992-56.992-24.992-120.992t24.992-120.992q23.008-56 66.496-99.488t99.488-67.488q56.992-24 120.992-24t120.992 24q56 24 99.488 67.488t67.488 99.488q24 56.992 24 120.992t-24 120.992q-24 56-67.488 99.488T568.992 736',\n }),\n ],\n );\n};\n\nexport const LocationIcon: FunctionalComponent<SVGAttributes> = (props) => {\n return h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '12.6',\n height: '12.6',\n class: 'antv-s2-icon',\n viewBox: '0 0 1024 1024',\n ...props,\n },\n [\n h('path', {\n fill: 'currentColor',\n d: 'M511.804 222.338q-85.675 0-145.86 60.184-60.183 60.185-60.184 145.337 0 85.153 60.185 145.337 60.183 60.185 145.859 60.185 85.674 0 145.859-60.185 60.184-60.184 60.184-145.337t-60.184-145.337-145.86-60.184zm0 338.619q-55.093 0-93.835-38.774t-38.773-93.834q-.033-55.061 38.773-94.357 38.808-39.296 93.835-39.263 55.028.033 93.834 39.263t38.774 94.357q-.033 55.125-38.774 93.834t-93.834 38.774m366.165-295.766q-31.626-63.252-87.73-111.165-56.106-47.912-127.484-75.491Q590.331 52 511.804 52q-78.528 0-151.963 26.535-70.367 27.546-126.472 75.491t-87.731 111.165Q113 330.468 113 400.835q0 98.926 47.945 200.92 39.787 84.662 111.165 167.27 93.834 110.152 216.227 195.827Q498.553 972 511.282 972q12.727 0 23.956-7.148 122.392-86.686 216.227-195.828 71.412-83.65 111.165-167.27 47.945-101.993 47.945-200.919 0-70.367-32.638-135.644zm-40.797 136.656q0 82.606-40.798 169.326-34.693 74.447-99.97 150.95-78.527 91.812-184.6 169.326-106.075-77.514-184.6-169.326-64.265-76.503-99.971-150.95-40.797-86.686-40.797-170.338 0-54.048 24.478-104.05 25.491-48.957 70.368-87.73 45.889-39.786 104.05-62.209 61.195-22.455 126.472-22.455t126.472 22.455q58.129 22.455 104.05 62.208 45.889 38.775 70.367 87.731 24.48 51.014 24.479 105.062',\n }),\n ],\n );\n};\n\nexport const TextIcon: FunctionalComponent<SVGAttributes> = (props) => {\n return h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '12.6',\n height: '12.6',\n class: 'antv-s2-icon',\n viewBox: '0 0 1024 1024',\n ...props,\n },\n [\n h('path', {\n fill: 'currentColor',\n d: 'M86.016 805.888H0l143.872-529.92h79.36l144.896 529.92h-91.136l-29.696-109.056H115.2S85.504 805.888 86.016 805.888M225.28 613.376 181.248 455.68 138.24 613.376zM519.168 430.08c24.576-16.384 47.616-25.088 69.12-25.088 30.72 0 58.368 14.848 81.92 44.032 24.064 29.184 35.328 72.192 35.328 128.512 0 44.032-7.168 83.456-22.528 118.272-14.848 34.816-35.328 62.976-60.416 83.456-26.112 20.992-57.856 31.232-95.232 31.232-15.36-.512-31.232-1.536-46.592-3.584-4.096-.512-8.704-1.024-12.8-1.536h-66.56V256h81.92v206.336c11.264-12.8 23.04-23.552 35.84-32.256M483.84 587.264v135.168c13.824 3.072 26.112 4.608 37.376 4.608 27.648 0 50.176-11.776 69.12-36.352 19.456-25.088 28.672-59.392 28.672-104.96 0-32.256-5.12-55.296-14.848-70.144-9.216-13.824-18.432-19.968-28.672-19.968-12.288 0-27.136 7.68-44.544 24.064-16.896 16.896-32.768 39.424-47.104 67.584m529.92 207.36c-36.864 14.336-71.68 20.992-104.96 20.992-32.768.512-64.512-9.216-91.648-27.136-27.136-18.432-48.64-44.032-62.464-73.728-14.848-30.72-22.528-65.536-22.528-104.448 0-58.88 16.896-108.032 51.2-146.944 33.792-38.912 75.264-58.88 123.392-58.88 34.304 0 70.144 7.168 108.032 21.504l10.24 4.096v95.232l-20.992-10.752c-34.816-17.92-65.536-26.624-92.16-26.624-16.896 0-32.768 4.608-47.104 13.824-13.824 8.704-25.088 23.04-32.768 42.496-8.192 19.968-12.288 41.472-12.288 63.488 0 28.672 7.68 55.808 24.064 82.432 14.848 24.576 37.888 36.352 71.168 36.352 10.752 0 21.504-1.024 31.744-2.56 9.728-1.536 29.696-8.192 58.88-18.944l19.456-7.68v92.672z',\n }),\n ],\n );\n};\n","<script setup lang=\"ts\">\nimport { ref, watch, computed, h } from 'vue';\nimport { Button, Empty, Input, Menu, type MenuProps } from 'ant-design-vue';\nimport { SearchOutlined } from '@ant-design/icons-vue';\nimport { DRILL_DOWN_PRE_CLASS, i18n } from '@antv/s2';\nimport { isEmpty } from 'lodash';\nimport { CalendarIcon, LocationIcon, TextIcon } from '../common/icons';\nimport type { DrillDownDataSet, DrillDownProps } from './interface';\n\nconst props = withDefaults(defineProps<DrillDownProps>(), {\n title: () => i18n('选择下钻维度'),\n clearText: () => i18n('恢复默认'),\n searchText: () => i18n('搜索字段'),\n drillFields: () => [],\n dataSet: () => [],\n});\n\nconst emit = defineEmits<{\n (e: 'update:drillFields', val: string[]): void;\n}>();\n\nconst DRILL_DOWN_ICON_MAP: Record<string, any> = {\n text: h(TextIcon),\n location: h(LocationIcon),\n date: h(CalendarIcon),\n};\n\nconst getOptions = () => {\n return props.dataSet.map((item) => {\n const newItem = { ...item };\n\n newItem.disabled = !!(\n props.disabledFields && props.disabledFields.includes(item.value)\n );\n\n return newItem;\n });\n};\n\nconst options = ref<DrillDownDataSet[]>(getOptions());\n\nwatch(\n () => props.disabledFields,\n () => {\n options.value = getOptions();\n },\n { deep: true },\n);\n\nconst handleSearch = (e: any) => {\n const { value } = e.target;\n\n if (!value) {\n options.value = getOptions();\n } else {\n const reg = new RegExp(value, 'gi');\n const result = getOptions().filter((item) => reg.test(item.name));\n\n options.value = result;\n }\n};\n\nconst handleSelect = (info: any) => {\n const { selectedKeys } = info;\n\n emit('update:drillFields', selectedKeys);\n};\n\nconst handleClear = (e: MouseEvent) => {\n e.stopPropagation();\n emit('update:drillFields', []);\n};\n\nconst menuItems = computed<MenuProps['items']>(() =>\n options.value.map((option) => ({\n key: option.value,\n label: option.name,\n disabled: option.disabled,\n class: `${DRILL_DOWN_PRE_CLASS}-menu-item`,\n icon: option.icon ? option.icon : DRILL_DOWN_ICON_MAP[option.type!],\n })),\n);\n\nconst selectedKeys = computed(() => props.drillFields);\n</script>\n\n<template>\n <div :class=\"[DRILL_DOWN_PRE_CLASS, className]\">\n <header :class=\"`${DRILL_DOWN_PRE_CLASS}-header`\">\n <div :class=\"`${DRILL_DOWN_PRE_CLASS}-header-title`\">{{ title }}</div>\n <Button type=\"link\" :disabled=\"isEmpty(drillFields)\" @click=\"handleClear\">\n {{ clearText }}\n </Button>\n </header>\n <Input\n :class=\"`${DRILL_DOWN_PRE_CLASS}-search`\"\n :placeholder=\"searchText\"\n @change=\"handleSearch\"\n @pressEnter=\"handleSearch\"\n :allowClear=\"true\"\n >\n <template #prefix>\n <SearchOutlined />\n </template>\n </Input>\n\n <Empty\n v-if=\"isEmpty(options)\"\n :imageStyle=\"{ height: '64px' }\"\n :class=\"`${DRILL_DOWN_PRE_CLASS}-empty`\"\n />\n\n <slot name=\"extra\">\n <!-- Prop 'extra' fallback if needed, but slots are better -->\n </slot>\n\n <!-- Menu Render Logic -->\n <Menu\n :class=\"`${DRILL_DOWN_PRE_CLASS}-menu`\"\n :selectedKeys=\"selectedKeys\"\n @select=\"handleSelect\"\n :items=\"menuItems\"\n />\n </div>\n</template>\n\n<style lang=\"less\">\n@import './index.less';\n</style>\n","<script setup lang=\"ts\">\nimport {\n S2_PREFIX_CLS,\n i18n,\n asyncGetAllData,\n asyncGetAllPlainData,\n copyToClipboard,\n download,\n CSV_SEPARATOR,\n TAB_SEPARATOR,\n type CopyAllDataParams,\n type Copyable,\n} from '@antv/s2';\nimport { Button, Dropdown, Menu, type MenuProps } from 'ant-design-vue';\nimport { MoreOutlined } from '@ant-design/icons-vue';\nimport type { ExportProps } from './interface';\n\nconst props = withDefaults(defineProps<ExportProps>(), {\n async: true,\n copyOriginalText: () => i18n('复制原始数据'),\n copyFormatText: () => i18n('复制格式化数据'),\n downloadOriginalText: () => i18n('下载原始数据'),\n downloadFormatText: () => i18n('下载格式化数据'),\n fileName: 'sheet',\n});\n\nconst emit = defineEmits<{\n (e: 'copy-success', data: Copyable | string | undefined): void;\n (e: 'copy-error', error: unknown): void;\n (e: 'download-success', data: string): void;\n (e: 'download-error', error: unknown): void;\n}>();\n\nconst PRE_CLASS = `${S2_PREFIX_CLS}-export`;\n\nconst getData = async (\n split: string,\n isFormat: boolean,\n method: (\n params: CopyAllDataParams,\n ) => Promise<Copyable | string> | Copyable | string,\n) => {\n const params: CopyAllDataParams = {\n sheetInstance: props.sheetInstance,\n split,\n formatOptions: isFormat,\n async: props.async,\n };\n\n const data = await (props.customCopyMethod?.(params) || method?.(params));\n\n return data;\n};\n\nconst getPlainData = async (split: string, isFormat: boolean) => {\n const result = await getData(split, isFormat, asyncGetAllPlainData);\n\n return result as string;\n};\n\nconst getAllData = async (split: string, isFormat: boolean) => {\n const result = await getData(split, isFormat, asyncGetAllData);\n\n return result;\n};\n\nconst copyData = async (isFormat: boolean) => {\n const data = await getAllData(TAB_SEPARATOR, isFormat);\n\n copyToClipboard(data!, props.async)\n .then(() => {\n emit('copy-success', data);\n props.onCopySuccess?.(data);\n })\n .catch((error) => {\n // eslint-disable-next-line no-console\n console.error('copy failed: ', error);\n emit('copy-error', error);\n props.onCopyError?.(error);\n });\n};\n\nconst downloadData = async (isFormat: boolean) => {\n // 导出的是 csv 格式, 复制时需要以逗号分割 https://github.com/antvis/S2/issues/2701\n const data = await getPlainData(CSV_SEPARATOR, isFormat);\n\n try {\n download(data, props.fileName);\n emit('download-success', data);\n props.onDownloadSuccess?.(data);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('download failed: ', error);\n emit('download-error', error);\n props.onDownloadError?.(error);\n }\n};\n\nconst menuItems: MenuProps['items'] = [\n {\n key: 'copyOriginal',\n label: props.copyOriginalText,\n onClick: () => copyData(false),\n },\n {\n key: 'copyFormat',\n label: props.copyFormatText,\n onClick: () => copyData(true),\n },\n {\n key: 'downloadOriginal',\n label: props.downloadOriginalText,\n onClick: () => downloadData(false),\n },\n {\n key: 'downloadFormat',\n label: props.downloadFormatText,\n onClick: () => downloadData(true),\n },\n];\n</script>\n\n<template>\n <Dropdown :class=\"[PRE_CLASS, className]\" trigger=\"click\" v-bind=\"dropdown\">\n <template #overlay>\n <Menu :items=\"menuItems\" />\n </template>\n <slot>\n <Button type=\"text\">\n <template #icon>\n <MoreOutlined />\n </template>\n </Button>\n </slot>\n </Dropdown>\n</template>\n","<script setup lang=\"ts\">\nimport { strategyCopy } from '@antv/s2';\nimport Export from './Export.vue';\nimport type { ExportProps } from './interface';\n\nconst props = defineProps<ExportProps>();\n</script>\n\n<template>\n <Export v-bind=\"props\" :customCopyMethod=\"strategyCopy\">\n <template v-if=\"$slots['default']\" #default>\n <slot name=\"default\" />\n </template>\n </Export>\n</template>\n","<script setup lang=\"ts\">\nimport { S2_PREFIX_CLS } from '@antv/s2';\nimport { InputNumber } from 'ant-design-vue';\nimport { debounce } from 'lodash';\nimport { ref, watch, onBeforeUnmount } from 'vue';\n\nconst PRE_CLASS = `${S2_PREFIX_CLS}-frozen-input-number`;\n\nconst props = withDefaults(\n defineProps<{\n value?: number | null;\n disabled?: boolean;\n min?: number;\n max?: number;\n step?: number;\n size?: 'large' | 'middle' | 'small';\n }>(),\n {\n value: null,\n disabled: false,\n min: 0,\n max: 20,\n step: 1,\n size: 'small',\n },\n);\n\nconst emit = defineEmits<{\n change: [value: number | null];\n}>();\n\nconst inputValue = ref<number | string | null>(props.value);\n\nconst onDebounceChange = debounce((nextValue: number | null) => {\n emit('change', nextValue);\n}, 500);\n\nwatch(\n () => props.value,\n (newValue) => {\n if (newValue !== inputValue.value) {\n inputValue.value = newValue;\n }\n },\n);\n\nonBeforeUnmount(() => {\n onDebounceChange.cancel();\n});\n\nconst handleChange = (nextValue: number | string | null) => {\n inputValue.value = nextValue;\n onDebounceChange(nextValue as number | null);\n};\n</script>\n\n<template>\n <InputNumber\n :class=\"PRE_CLASS\"\n :size=\"size\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :precision=\"0\"\n :disabled=\"disabled\"\n :value=\"inputValue\"\n @change=\"handleChange\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { S2_PREFIX_CLS, i18n } from '@antv/s2';\nimport { Checkbox } from 'ant-design-vue';\nimport type { CheckboxProps } from 'ant-design-vue';\n\ntype CheckboxChangeEvent = Parameters<\n NonNullable<CheckboxProps['onChange']>\n>[0];\nimport { isEmpty } from 'lodash';\nimport { ref, computed } from 'vue';\nimport { ResetGroup } from '../common';\nimport FrozenInputNumber from './FrozenInputNumber.vue';\nimport type { FrozenPanelOptions } from './interface';\n\nconst PRE_CLASS = `${S2_PREFIX_CLS}-frozen-panel`;\n\nconst props = withDefaults(\n defineProps<{\n title?: string;\n defaultOptions?: Partial<FrozenPanelOptions>;\n defaultCollapsed?: boolean;\n inputNumberProps?: {\n min?: number;\n max?: number;\n step?: number;\n size?: 'large' | 'middle' | 'small';\n };\n showFrozenRowHeader?: boolean;\n showFrozenRow?: boolean;\n showFrozenCol?: boolean;\n }>(),\n {\n title: () => i18n('冻结行列头'),\n defaultCollapsed: false,\n showFrozenRowHeader: true,\n showFrozenRow: true,\n showFrozenCol: true,\n },\n);\n\nconst emit = defineEmits<{\n change: [options: FrozenPanelOptions];\n reset: [options: FrozenPanelOptions, prevOptions: FrozenPanelOptions];\n}>();\n\nconst options = ref<FrozenPanelOptions>({\n frozenRow: [],\n frozenCol: [],\n frozenRowHeader: true,\n ...props.defaultOptions,\n});\n\nconst defaultOptionsRef = ref<FrozenPanelOptions>({ ...options.value });\n\nconst onResetClick = () => {\n const prevOptions = { ...options.value };\n\n options.value = { ...defaultOptionsRef.value };\n emit('reset', defaultOptionsRef.value, prevOptions);\n};\n\nconst onRowHeaderChange = (event: CheckboxChangeEvent) => {\n options.value = {\n ...options.value,\n frozenRowHeader: event.target.checked,\n };\n emit('change', options.value);\n};\n\nconst BASE_FROZEN_CONFIG = computed(() => {\n return [\n {\n suffix: i18n('行'),\n field: 'frozenRow' as const,\n visible: props.showFrozenRow,\n },\n {\n suffix: i18n('列'),\n field: 'frozenCol' as const,\n visible: props.showFrozenCol,\n },\n ].filter(({ visible }) => visible);\n});\n\nconst isFieldEnabled = (field: 'frozenRow' | 'frozenCol') => {\n return !isEmpty(options.value[field]);\n};\n\nconst getLeadingCount = (field: 'frozenRow' | 'frozenCol') => {\n return options.value[field]?.[0];\n};\n\nconst getTrailingCount = (field: 'frozenRow' | 'frozenCol') => {\n return options.value[field]?.[1];\n};\n\nconst onGroupChange = (\n field: 'frozenRow' | 'frozenCol',\n value: [number?, number?],\n) => {\n options.value = {\n ...options.value,\n [field]: value,\n };\n emit('change', options.value);\n};\n\nconst onCheckboxChange = (\n field: 'frozenRow' | 'frozenCol',\n checked: boolean,\n) => {\n onGroupChange(field, checked ? [1, 1] : []);\n};\n\nconst onLeadingChange = (\n field: 'frozenRow' | 'frozenCol',\n val: number | null,\n) => {\n onGroupChange(field, [val ?? undefined, getTrailingCount(field)]);\n};\n\nconst onTrailingChange = (\n field: 'frozenRow' | 'frozenCol',\n val: number | null,\n) => {\n onGroupChange(field, [getLeadingCount(field), val ?? undefined]);\n};\n</script>\n\n<template>\n <ResetGroup\n :title=\"title\"\n :defaultCollapsed=\"defaultCollapsed\"\n :class=\"PRE_CLASS\"\n @reset=\"onResetClick\"\n >\n <div v-if=\"showFrozenRowHeader\" :class=\"`${PRE_CLASS}-container`\">\n <Checkbox :checked=\"options.frozenRowHeader\" @change=\"onRowHeaderChange\">\n {{ i18n('冻结行头') }}\n </Checkbox>\n </div>\n <div\n v-for=\"config in BASE_FROZEN_CONFIG\"\n :key=\"config.field\"\n :class=\"`${PRE_CLASS}-container`\"\n >\n <Checkbox\n :checked=\"isFieldEnabled(config.field)\"\n @change=\"\n (e: CheckboxChangeEvent) =>\n onCheckboxChange(config.field, e.target.checked!)\n \"\n >\n {{ i18n('冻结') }}{{ config.suffix }}\n </Checkbox>\n <span :class=\"`${PRE_CLASS}-container-group`\">\n {{ i18n('冻结前') }}\n <FrozenInputNumber\n :disabled=\"!isFieldEnabled(config.field)\"\n :value=\"getLeadingCount(config.field) ?? null\"\n v-bind=\"inputNumberProps\"\n @change=\"(val: number | null) => onLeadingChange(config.field, val)\"\n />\n {{ config.suffix }}\n </span>\n <span :class=\"`${PRE_CLASS}-container-group`\">\n {{ i18n('冻结后') }}\n <FrozenInputNumber\n :disabled=\"!isFieldEnabled(config.field)\"\n :value=\"getTrailingCount(config.field) ?? null\"\n v-bind=\"inputNumberProps\"\n @change=\"(val: number | null) => onTrailingChange(config.field, val)\"\n />\n {{ config.suffix }}\n </span>\n </div>\n <slot />\n </ResetGroup>\n</template>\n\n<style lang=\"less\">\n@import '@antv/s2/esm/styles/variables.less';\n\n.@{s2-cls-prefix}-frozen-panel {\n width: 400px;\n\n &-container {\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n &:not(:last-of-type) {\n margin-bottom: 6px;\n }\n\n &-group {\n color: rgba(0, 0, 0, 0.43);\n\n &:not(:last-of-type) {\n margin-right: 12px;\n }\n }\n\n .ant-checkbox-wrapper {\n margin-right: 50px;\n color: #535455;\n }\n\n .ant-input-number.@{s2-cls-prefix}-frozen-input-number {\n width: 50px;\n margin: 0 4px;\n border-radius: 4px;\n }\n }\n}\n</style>\n","export const SWITCHER_PREFIX_CLS = 'switcher';\n\nexport enum FieldType {\n Rows = 'rows',\n Cols = 'columns',\n Values = 'values',\n}\n\nexport enum DroppableType {\n Dimensions = 'dimensions',\n Measures = 'measures',\n Rows = 'rows',\n Cols = 'cols',\n}\n\nexport const SWITCHER_FIELDS = [\n FieldType.Rows,\n FieldType.Cols,\n FieldType.Values,\n];\n","import type { SheetType } from '@antv/s2';\nimport { getClassNameWithPrefix, i18n } from '@antv/s2';\nimport { filter, flatten, map, mapValues } from 'lodash';\nimport { ColIcon, RowIcon, ValueIcon } from '../common/icons';\nimport { DroppableType, FieldType, SWITCHER_PREFIX_CLS } from './constant';\nimport type {\n SwitcherFields,\n SwitcherItem,\n SwitcherResult,\n SwitcherResultItem,\n SwitcherState,\n} from './interface';\n\n// Replace React-Beautiful-DnD types with generic interface\nexport interface DraggableLocation {\n droppableId: string;\n index: number;\n}\n\n// 是否开启行列维度相互切换\nexport const getSwitcherConfig = (allowExchangeHeader = true) => {\n return {\n [FieldType.Rows]: {\n text: i18n('行头'),\n icon: RowIcon,\n droppableType: allowExchangeHeader\n ? DroppableType.Dimensions\n : DroppableType.Rows,\n },\n [FieldType.Cols]: {\n text: i18n('列头'),\n icon: ColIcon,\n droppableType: allowExchangeHeader\n ? DroppableType.Dimensions\n : DroppableType.Cols,\n },\n [FieldType.Values]: {\n text: i18n('值'),\n icon: ValueIcon,\n droppableType: DroppableType.Measures,\n },\n };\n};\n\nexport const getSwitcherClassName = (...classNames: string[]) =>\n getClassNameWithPrefix(SWITCHER_PREFIX_CLS, ...classNames);\n\nexport const getMainLayoutClassName = (sheetType: SheetType | undefined) => {\n switch (sheetType) {\n case 'table':\n return getSwitcherClassName('content', 'one-dimension');\n default:\n return getSwitcherClassName('content', 'three-dimensions');\n }\n};\n\nexport const shouldCrossRows = (\n sheetType: SheetType | undefined,\n type: FieldType,\n) => sheetType === 'table' || type === FieldType.Values;\n\nexport const checkItem = (\n source: SwitcherItem[] = [],\n checked: boolean,\n id: string,\n parentId?: string,\n): SwitcherItem[] => {\n const targetIndex = source.findIndex((item) => item.id === (parentId ?? id));\n\n if (targetIndex === -1) {\n return source;\n }\n\n const target: SwitcherItem = {\n ...source[targetIndex],\n };\n\n // 有 parentId 时,说明是第二层级的改变\n if (parentId) {\n target.children = map(target.children, (item) => {\n return {\n ...item,\n checked: item.id === id ? checked : item.checked,\n };\n });\n } else {\n target.checked = checked;\n target.children = map(target.children, (item) => {\n return {\n ...item,\n checked,\n };\n });\n }\n\n const newSource = [...source];\n\n newSource[targetIndex] = target;\n\n return newSource;\n};\n\nexport const generateSwitchResult = (state: SwitcherState): SwitcherResult => {\n const generateFieldResult = (\n items: SwitcherItem[] = [],\n ): SwitcherResultItem => {\n const flattenValues = (list: SwitcherItem[] = []): SwitcherItem[] =>\n flatten(\n map(list, ({ children, ...rest }) => [\n { ...rest },\n ...flattenValues(children),\n ]),\n );\n\n const allItems = flattenValues(items);\n\n // get all hidden values\n const hideItems = filter(\n allItems,\n (item: SwitcherItem) => item.checked === false,\n );\n\n return {\n items: allItems,\n hideItems,\n };\n };\n\n return {\n [FieldType.Rows]: generateFieldResult(state[FieldType.Rows]),\n [FieldType.Cols]: generateFieldResult(state[FieldType.Cols]),\n [FieldType.Values]: generateFieldResult(state[FieldType.Values]),\n };\n};\n\nexport const getSwitcherState = (fields: SwitcherFields): SwitcherState =>\n mapValues(fields, 'items');\n","/**!\n * Sortable 1.15.6\n * @author\tRubaXa <trash@rubaxa.org>\n * @author\towenm <owen23355@gmail.com>\n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.6\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n}\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\nfunction css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n}\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n\n /* jshint boss:true */\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n\n /* jshint boss:true */\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\nfunction getChildContainingRectFromElement(container, options, ghostEl) {\n var rect = {};\n Array.from(container.children).forEach(function (child) {\n var _rect$left, _rect$top, _rect$right, _rect$bottom;\n if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl) return;\n var childRect = getRect(child);\n rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left);\n rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top);\n rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right);\n rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom);\n });\n rect.width = rect.right - rect.left;\n rect.height = rect.bottom - rect.top;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n // If animating: compensate for current animation\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n target.toRect = toRect;\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n }\n\n // if fromRect != toRect: animate\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n if (!time) {\n time = _this.options.animation;\n }\n _this.animate(target, animatingRect, toRect, time);\n }\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\nfunction repaint(target) {\n return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n this.eventCanceled = false;\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return;\n // Fire global events if it exists in this sortable\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n\n // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized;\n\n // Add default options from plugin\n _extends(defaults, initialized.defaults);\n });\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return;\n\n // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n\n _silent = false,\n savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return;\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n },\n /**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n this.el = el; // root element\n this.options = options = _extends({}, options);\n\n // Export instance\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n // Disabled on Safari: #1571; Enabled on Safari IOS: #2244\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && (!Safari || IOS),\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults);\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n sortables.push(this.el);\n\n // Restore sorting\n options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n // Add animation state manager\n _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n\n // Safari ignores further event handling after mousedown\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n target = closest(target, options.draggable, el, false);\n if (target && target.animated) {\n return;\n }\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable);\n\n // Check filter\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.preventDefault();\n return; // cancel dnd\n }\n }\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n }\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n });\n\n // Chosen item\n toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n if (options.supportPointer) {\n on(ownerDocument, 'pointerup', _this._onDrop);\n // Native D&D triggers pointercancel\n !this.nativeDraggable && on(ownerDocument, 'pointercancel', _this._onDrop);\n } else {\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop);\n }\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n pluginEvent('delayStart', this, {\n evt: evt\n });\n\n // Delay is impossible for native DnD in Edge or IE\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n if (options.supportPointer) {\n on(ownerDocument, 'pointerup', _this._disableDelayedDrag);\n on(ownerDocument, 'pointercancel', _this._disableDelayedDrag);\n } else {\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n }\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n var touch = e.touches ? e.touches[0] : e;\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'pointerup', this._disableDelayedDrag);\n off(ownerDocument, 'pointercancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n var options = this.options;\n\n // Apply effect\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = getParentOrHost(parent));\n }\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl);\n\n // Set transform-origin\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n pluginEvent('setupClone', this);\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n }\n\n // #1143: IFrame support workaround\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n on(document, 'drop', _this);\n\n // #1276 fix:\n css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n window.getSelection().removeAllRanges();\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver( /**Event*/evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n if (_silent) return;\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n }\n\n // Capture animation state\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n }\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n }\n\n // Animation\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n }\n\n // Call when dragEl has been inserted\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n ignoreNextClick = false;\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n if (revert) {\n parentEl = rootEl; // actualization\n capture();\n this._hideClone();\n dragOverEvent('revert');\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n return completed(true);\n }\n var elLastChild = lastChild(el, options.draggable);\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n }\n\n // if there is a last element, it is the target\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = getRect(target);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n if (firstChild === dragEl) {\n return completed(false);\n }\n target = firstChild;\n targetRect = getRect(target);\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n }\n // If dragEl is already beside target: Do not insert\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n }\n\n // Undo chrome's scroll adjustment (has no effect on other browsers)\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'pointercancel', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop( /**Event*/evt) {\n var el = this.el,\n options = this.options;\n\n // Get the index of the dragged element within its parent\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode;\n\n // Get again after plugin event\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n css(dragEl, 'transform', '');\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = '';\n\n // Remove classes\n // ghostClass is added in dragStarted\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n // Remove event\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // drag from one list and drop into another\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent( /**Event*/evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n this._disableDelayedDragEvents();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return;\n\n // show clone at dragEl or original position\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\nfunction _globalDragOver( /**Event*/evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n return retVal;\n}\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\nfunction _unsilent() {\n _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n}\n\n// Export utils\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild,\n expando: expando\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\nSortable.get = function (element) {\n return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n };\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback);\n\n // Listener for pointer element change\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval();\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn;\n\n // New scroll root, set scrollEl\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n }\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\nfunction Revert() {}\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\n folding = false,\n // Folding any other time\n dragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData('Text', data);\n }\n };\n }\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n sortable._hideClone();\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n });\n\n // Sort multi-drag elements\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n\n sortable.captureAnimationState();\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n }\n\n // Remove all auxiliary multidrag items from el, if sorting enabled\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n initialFolding = false;\n // If leaving sort:false root, or already folding - Fold to new location\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute);\n\n // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n }\n\n // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable);\n\n // Unfold animation for clones if showing from hidden\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children;\n\n // Multi-drag selection\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n\n // Modifier activated, select from last to dragEl\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n (function () {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n var filter = options.filter;\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n // Check if element is draggable\n if (!closest(children[i], options.draggable, parentEl, false)) continue;\n // Check if element is filtered\n var filtered = filter && (typeof filter === 'function' ? filter.call(sortable, evt, children[i], sortable) : filter.split(',').some(function (criteria) {\n return closest(children[i], criteria.trim(), parentEl, false);\n }));\n if (filtered) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n })();\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n }\n\n // Multi-drag drop\n if (dragStarted && this.isMultiDrag) {\n folding = false;\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect;\n\n // Prepare unfold animation\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n }\n\n // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n });\n\n // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n if (update) {\n dispatchSortableEvent('update');\n dispatchSortableEvent('sort');\n }\n }\n }\n\n // Must be done after capturing individual rects (scroll bar)\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n multiDragSortable = toSortable;\n }\n\n // Remove clones if necessary\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n // Only deselect if selection is in this sortable\n if (multiDragSortable !== this.sortable) return;\n\n // Only deselect if target is not item in this sortable\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n // Only deselect if left click\n if (evt && evt.button !== 0) return;\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n });\n\n // multiDragElements will already be sorted if folding\n var newIndex;\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n }\n }\n });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","<script setup lang=\"ts\">\nimport { Checkbox } from 'ant-design-vue';\nimport { getSwitcherClassName } from '../util';\n\ninterface SingleItemProps {\n id: string;\n className?: string;\n fieldType: string;\n displayName?: string;\n checked?: boolean;\n disabled?: boolean;\n selectable?: boolean;\n parentId?: string;\n}\n\nconst props = withDefaults(defineProps<SingleItemProps>(), {\n checked: true,\n disabled: false,\n selectable: false,\n});\n\nconst emit = defineEmits<{\n (\n e: 'visible-item-change',\n fieldType: string,\n checked: boolean,\n id: string,\n parentId?: string,\n ): void;\n}>();\n\nconst textClassName = getSwitcherClassName('item', 'text');\n\nconst onChange = (e: any) => {\n emit(\n 'visible-item-change',\n props.fieldType,\n e.target.checked,\n props.id,\n props.parentId,\n );\n};\n</script>\n\n<template>\n <div :class=\"[getSwitcherClassName('item'), className]\">\n <Checkbox\n v-if=\"selectable\"\n :checked=\"checked\"\n :disabled=\"disabled\"\n @change=\"onChange\"\n />\n <span :class=\"textClassName\" :title=\"displayName\">\n {{ displayName || id }}\n </span>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { isEmpty } from 'lodash';\nimport { getSwitcherClassName } from '../util';\nimport type { SwitcherItem, DimensionCommonProps } from '../interface';\nimport SingleItem from './SingleItem.vue';\n\ninterface DimensionItemProps extends DimensionCommonProps {\n index?: number;\n item: SwitcherItem;\n expandChildren: boolean;\n isDragDisabled: boolean;\n}\n\nconst props = defineProps<DimensionItemProps>();\n\nconst emit = defineEmits<{\n (\n e: 'visible-item-change',\n fieldType: string,\n checked: boolean,\n id: string,\n parentId?: string,\n ): void;\n}>();\n\nconst onVisibleItemChange = (\n fieldType: string,\n checked: boolean,\n id: string,\n parentId?: string,\n) => {\n emit('visible-item-change', fieldType, checked, id, parentId);\n};\n\n// Use classes array\nconst mainClass = computed(() => {\n return [\n getSwitcherClassName(props.selectable ? 'checkable-list' : 'normal-list'),\n {\n 'disable-dragging': props.isDragDisabled,\n },\n ];\n});\n\n// Item class\nconst itemClass = computed(() => {\n return [\n props.selectable ? 'checkable-item' : 'normal-item',\n {\n 'item-collapse': !props.expandChildren,\n },\n // join for class string if passed as prop\n ].join(' ');\n});\n</script>\n\n<template>\n <div :class=\"mainClass\">\n <SingleItem\n :fieldType=\"fieldType\"\n :id=\"item.id\"\n :displayName=\"item.displayName\"\n :checked=\"item.checked\"\n :selectable=\"selectable\"\n :className=\"itemClass\"\n @visible-item-change=\"onVisibleItemChange\"\n />\n\n <div\n v-if=\"\n expandable &&\n expandChildren &&\n !isEmpty(item.children) &&\n draggingItemId !== item.id\n \"\n :class=\"['child-items', { 'item-hidden': !expandChildren }]\"\n >\n <SingleItem\n v-for=\"child in item.children\"\n :key=\"child.id\"\n :id=\"child.id\"\n :fieldType=\"fieldType\"\n :displayName=\"child.displayName\"\n :disabled=\"!item.checked\"\n :checked=\"child.checked\"\n :parentId=\"item.id\"\n :selectable=\"selectable\"\n class=\"checkable-item\"\n @visible-item-change=\"onVisibleItemChange\"\n />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, onMounted, watch, onBeforeUnmount } from 'vue';\nimport { Checkbox } from 'ant-design-vue';\nimport { i18n } from '@antv/s2';\n// Use sortablejs instead of vuedraggable to avoid ESM build issues (require is not defined) in Vite\nimport Sortable from 'sortablejs';\nimport type { CheckboxChangeEvent } from 'ant-design-vue/lib/checkbox/interface';\nimport { getSwitcherClassName } from '../util';\nimport DimensionItem from '../item/DimensionItem.vue';\nimport type { SwitcherItem } from '../interface';\nimport { FieldType } from '../constant';\n\n// Define Props\ninterface DimensionProps {\n // SwitcherField\n items?: SwitcherItem[];\n allowEmpty?: boolean;\n expandable?: boolean;\n expandText?: string;\n selectable?: boolean;\n\n // DimensionCommonProps\n fieldType: FieldType;\n draggingItemId?: string | null;\n\n // Extra\n droppableType?: string;\n text?: string;\n icon?: any;\n crossRows?: boolean;\n}\n\nconst props = withDefaults(defineProps<DimensionProps>(), {\n items: () => [],\n crossRows: false,\n selectable: false,\n expandable: false,\n expandText: () => i18n('展开子项'),\n allowEmpty: true,\n});\n\nconst emit = defineEmits<{\n (\n e: 'visible-item-change',\n fieldType: string,\n checked: boolean,\n id: string,\n parentId?: string,\n ): void;\n (e: 'update:items', items: SwitcherItem[]): void;\n}>();\n\nconst CLASS_NAME_PREFIX = 'dimension';\n\nconst expandChildren = ref(true);\nconst enabled = ref(false);\nconst draggableRef = ref<HTMLElement>();\nlet sortableInstance: Sortable | null = null;\n\nconst onUpdateExpand = (event: CheckboxChangeEvent) => {\n expandChildren.value = event.target.checked;\n};\n\n// If allowEmpty is false and only one item, disable drag\nconst isDragDisabled = computed(\n () => !props.allowEmpty && props.items.length === 1,\n);\n\nconst initSortable = () => {\n if (!draggableRef.value) {\n return;\n }\n\n sortableInstance = Sortable.create(draggableRef.value, {\n animation: 200,\n group: props.droppableType,\n disabled: isDragDisabled.value,\n ghostClass: getSwitcherClassName(CLASS_NAME_PREFIX, 'items-highlight'),\n onEnd: (evt) => {\n const { oldIndex, newIndex } = evt;\n\n if (\n oldIndex === undefined ||\n newIndex === undefined ||\n oldIndex === newIndex\n ) {\n return;\n }\n\n // Sync state\n const newItems = [...props.items];\n const [movedItem] = newItems.splice(oldIndex, 1);\n\n newItems.splice(newIndex, 0, movedItem);\n emit('update:items', newItems);\n },\n });\n};\n\nwatch(isDragDisabled, (val) => {\n sortableInstance?.option('disabled', val);\n});\n\nonMounted(() => {\n requestAnimationFrame(() => {\n enabled.value = true;\n // Wait for DOM to be ready\n requestAnimationFrame(() => {\n initSortable();\n });\n });\n});\n\nonBeforeUnmount(() => {\n sortableInstance?.destroy();\n});\n\nconst onVisibleItemChange = (\n fieldType: string,\n checked: boolean,\n id: string,\n parentId?: string,\n) => {\n emit('visible-item-change', fieldType, checked, id, parentId);\n};\n</script>\n\n<template>\n <div\n v-if=\"enabled\"\n :class=\"[\n getSwitcherClassName(CLASS_NAME_PREFIX),\n { 'long-dimension': crossRows },\n ]\"\n >\n <div :class=\"getSwitcherClassName(CLASS_NAME_PREFIX, 'header')\">\n <div class=\"title\">\n <component :is=\"icon\" /> <span>{{ text }}</span>\n </div>\n <div v-if=\"expandable\" class=\"expand-option\">\n <Checkbox :checked=\"expandChildren\" @change=\"onUpdateExpand\">\n {{ expandText }}\n </Checkbox>\n </div>\n </div>\n\n <div\n ref=\"draggableRef\"\n :class=\"[\n getSwitcherClassName(CLASS_NAME_PREFIX, 'items'),\n { [getSwitcherClassName(CLASS_NAME_PREFIX, 'long-items')]: crossRows },\n ]\"\n >\n <DimensionItem\n v-for=\"(item, index) in items\"\n :key=\"item.id\"\n :index=\"index\"\n :fieldType=\"fieldType\"\n :item=\"item\"\n :expandable=\"expandable\"\n :expandChildren=\"expandChildren\"\n :selectable=\"selectable\"\n :isDragDisabled=\"isDragDisabled\"\n @visible-item-change=\"onVisibleItemChange\"\n />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, computed } from 'vue';\nimport { i18n } from '@antv/s2';\nimport { Button } from 'ant-design-vue';\nimport { isEqual } from 'lodash';\nimport { ReloadOutlined } from '@ant-design/icons-vue';\nimport {\n checkItem,\n generateSwitchResult,\n getMainLayoutClassName,\n getSwitcherClassName,\n getSwitcherConfig,\n getSwitcherState,\n shouldCrossRows,\n} from './util';\nimport { SWITCHER_FIELDS, FieldType } from './constant';\nimport type { SwitcherContentProps, SwitcherState } from './interface';\nimport Dimension from './dimension/Dimension.vue';\n\nconst props = withDefaults(\n defineProps<Omit<SwitcherContentProps, 'onSubmit'>>(),\n {\n contentTitleText: () => i18n('行列切换'),\n resetText: () => i18n('恢复默认'),\n allowExchangeHeader: true,\n sheetType: 'pivot',\n },\n);\n\nconst emit = defineEmits<{\n (e: 'submit', result: any): void;\n (e: 'toggle-visible'): void;\n}>();\n\nconst CLASS_NAME_PREFIX = 'content';\n\nconst switcherConfig = getSwitcherConfig(props.allowExchangeHeader);\nconst defaultState = getSwitcherState(props);\n\nconst state = ref<SwitcherState>(JSON.parse(JSON.stringify(defaultState)));\nconst draggingItemId = ref<string | null>(null);\n\nconst onReset = () => {\n state.value = JSON.parse(JSON.stringify(defaultState));\n};\n\nconst onConfirm = () => {\n emit('toggle-visible');\n emit('submit', generateSwitchResult(state.value));\n};\n\nconst onVisibleItemChange = (\n fieldType: FieldType,\n checked: boolean,\n id: string,\n parentId?: string,\n) => {\n const updatedState = checkItem(state.value[fieldType], checked, id, parentId);\n\n state.value = {\n ...state.value,\n [fieldType]: updatedState,\n };\n};\n\n// Check deep equality (simplified for Vue ref)\nconst isNothingChanged = computed(() => isEqual(defaultState, state.value));\n\nconst displayFieldItems = computed(() =>\n SWITCHER_FIELDS.filter(\n (field) => props.sheetType !== 'table' || field === FieldType.Cols,\n ),\n);\n\nconst onCancel = () => {\n emit('toggle-visible');\n};\n\nconst mainClass = computed(() => [\n getSwitcherClassName(CLASS_NAME_PREFIX, 'main'),\n getMainLayoutClassName(props.sheetType),\n]);\n</script>\n\n<template>\n <div\n :class=\"[innerContentClassName, getSwitcherClassName(CLASS_NAME_PREFIX)]\"\n >\n <header :class=\"getSwitcherClassName(CLASS_NAME_PREFIX, 'header')\">\n {{ contentTitleText }}\n </header>\n <main :class=\"mainClass\">\n <Dimension\n v-for=\"type in displayFieldItems\"\n :key=\"type\"\n :fieldType=\"type\"\n :items=\"state[type]\"\n :crossRows=\"shouldCrossRows(sheetType, type)\"\n :draggingItemId=\"draggingItemId\"\n v-bind=\"switcherConfig[type]\"\n @visible-item-change=\"onVisibleItemChange\"\n @update:items=\"(newItems) => (state[type] = newItems)\"\n />\n </main>\n <footer :class=\"getSwitcherClassName(CLASS_NAME_PREFIX, 'footer')\">\n <Button\n type=\"text\"\n :class=\"\n getSwitcherClassName(CLASS_NAME_PREFIX, 'footer', 'reset-button')\n \"\n :disabled=\"isNothingChanged\"\n @click=\"onReset\"\n >\n <template #icon><ReloadOutlined /></template>\n {{ resetText }}\n </Button>\n <div\n :class=\"getSwitcherClassName(CLASS_NAME_PREFIX, 'footer', 'actions')\"\n >\n <Button class=\"action-button\" @click=\"onCancel\">\n {{ i18n('取消') }}\n </Button>\n <Button\n class=\"action-button\"\n type=\"primary\"\n :disabled=\"isNothingChanged\"\n @click=\"onConfirm\"\n >\n {{ i18n('确定') }}\n </Button>\n </div>\n </footer>\n </div>\n</template>\n\n<style lang=\"less\">\n@import './index.less';\n</style>\n","<script setup lang=\"ts\">\nimport { ref, computed, h } from 'vue';\nimport { i18n } from '@antv/s2';\nimport { Button, Popover } from 'ant-design-vue';\nimport { SwapOutlined } from '@ant-design/icons-vue';\nimport { getSwitcherClassName } from './util';\nimport type { SwitcherProps, SwitcherResult } from './interface';\nimport SwitcherContent from './SwitcherContent.vue';\n\nconst props = withDefaults(defineProps<SwitcherProps>(), {\n disabled: false,\n});\n\nconst emit = defineEmits<{\n (e: 'submit', result: SwitcherResult): void;\n}>();\n\nconst visible = ref(false);\n\nconst onToggleVisible = (open?: boolean) => {\n if (typeof open === 'boolean') {\n visible.value = open;\n } else {\n visible.value = !visible.value;\n }\n};\n\nconst onSubmit = (result: SwitcherResult) => {\n emit('submit', result);\n};\n\nconst overlayClassName = computed(() => {\n return (\n props.popover?.overlayClassName\n ? [\n getSwitcherClassName('switcher-overlay'),\n props.popover.overlayClassName,\n ]\n : [getSwitcherClassName('switcher-overlay')]\n ).join(' ');\n});\n\nconst defaultTitle = computed(() => props.title || i18n('行列切换'));\n\n// Helper to render icon\nconst renderIcon = () => {\n if (props.icon) {\n return props.icon;\n }\n\n // Rotate SwapOutlined 90 deg\n return h(SwapOutlined, { rotate: 90 });\n};\n</script>\n\n<template>\n <Popover\n :open=\"!disabled && visible\"\n trigger=\"click\"\n placement=\"bottomLeft\"\n :destroyTooltipOnHide=\"true\"\n :overlayClassName=\"overlayClassName\"\n v-bind=\"popover\"\n @openChange=\"onToggleVisible\"\n >\n <template #content>\n <SwitcherContent\n v-bind=\"props\"\n @toggle-visible=\"() => onToggleVisible(false)\"\n @submit=\"onSubmit\"\n />\n </template>\n\n <slot>\n <Button\n :class=\"getSwitcherClassName('entry-button')\"\n size=\"small\"\n :disabled=\"disabled\"\n >\n <template #icon>\n <component :is=\"renderIcon()\" />\n </template>\n {{ defaultTitle }}\n </Button>\n </slot>\n </Popover>\n</template>\n\n<style lang=\"less\">\n@import './index.less';\n</style>\n","import { h, type FunctionalComponent } from 'vue';\n\nexport interface RadioIconProps {\n active?: boolean;\n}\n\nexport const LeftAlignIcon: FunctionalComponent<RadioIconProps> = ({\n active,\n}) => {\n const fill = active ? '#3471F9' : '#000000';\n const opacity = active ? '1' : '0.45';\n\n return h(\n 'svg',\n {\n class: 'si',\n width: '12px',\n height: '10px',\n viewBox: '0 0 12 10',\n fill: 'currentColor',\n },\n [\n h(\n 'g',\n {\n stroke: 'none',\n 'stroke-width': '1',\n fill: 'none',\n 'fill-rule': 'evenodd',\n opacity,\n },\n [\n h('g', { fill, 'fill-rule': 'nonzero' }, [\n h('path', {\n d: 'M11.238,1.045 L0.76,1.045 C0.341,1.045 0,0.81 0,0.522 C0,0.234 0.341,0 0.76,0 L11.24,0 C11.659,0 12,0.234 12,0.522 C11.998,0.812 11.659,1.045 11.238,1.045 Z M7.024,4.03 L0.474,4.03 C0.214,4.03 0,3.795 0,3.507 C0,3.219 0.213,2.985 0.475,2.985 L7.025,2.985 C7.287,2.985 7.5,3.219 7.5,3.507 C7.499,3.795 7.287,4.03 7.024,4.03 L7.024,4.03 Z M7.024,7.015 L0.474,7.015 C0.214,7.015 0,6.781 0,6.493 C0,6.205 0.213,5.97 0.475,5.97 L7.025,5.97 C7.287,5.97 7.5,6.205 7.5,6.493 C7.499,6.782 7.287,7.015 7.024,7.015 L7.024,7.015 Z M11.238,10 L0.76,10 C0.341,10 0,9.766 0,9.478 C0,9.19 0.341,8.955 0.76,8.955 L11.24,8.955 C11.659,8.955 12,9.19 12,9.478 C11.998,9.767 11.659,10 11.238,10 Z',\n }),\n ]),\n ],\n ),\n ],\n );\n};\n\nexport const CenterAlignIcon: FunctionalComponent<RadioIconProps> = ({\n active,\n}) => {\n const fill = active ? '#3471F9' : '#000000';\n const opacity = active ? '1' : '0.45';\n\n return h(\n 'svg',\n {\n class: 'si',\n width: '12px',\n height: '11px',\n viewBox: '0 0 12 11',\n fill: 'currentColor',\n },\n [\n h(\n 'g',\n {\n stroke: 'none',\n 'stroke-width': '1',\n fill: 'none',\n 'fill-rule': 'evenodd',\n opacity,\n },\n [\n h('g', { fill, 'fill-rule': 'nonzero' }, [\n h('path', {\n d: 'M11.238,4.045 L0.76,4.045 C0.341,4.045 0,3.81 0,3.522 C0,3.234 0.341,3 0.76,3 L11.24,3 C11.659,3 12,3.234 12,3.522 C11.998,3.812 11.659,4.045 11.238,4.045 Z M9.024,1.045 L2.474,1.045 C2.214,1.045 2,0.81 2,0.522 C2,0.234 2.213,0 2.475,0 L9.025,0 C9.287,0 9.5,0.234 9.5,0.522 C9.499,0.81 9.287,1.045 9.024,1.045 L9.024,1.045 Z M9.024,7.045 L2.474,7.045 C2.214,7.045 2,6.81 2,6.522 C2,6.234 2.213,6 2.475,6 L9.025,6 C9.287,6 9.5,6.234 9.5,6.522 C9.499,6.812 9.287,7.045 9.024,7.045 L9.024,7.045 Z M11.238,10.045 L0.76,10.045 C0.341,10.045 0,9.81 0,9.522 C0,9.234 0.341,9 0.76,9 L11.24,9 C11.659,9 12,9.234 12,9.522 C11.998,9.812 11.659,10.045 11.238,10.045 Z',\n }),\n ]),\n ],\n ),\n ],\n );\n};\n\nexport const RightAlignIcon: FunctionalComponent<RadioIconProps> = ({\n active,\n}) => {\n const fill = active ? '#3471F9' : '#000000';\n const opacity = active ? '1' : '0.45';\n\n return h(\n 'svg',\n {\n class: 'si',\n width: '12px',\n height: '10px',\n viewBox: '0 0 12 10',\n fill: 'currentColor',\n },\n [\n h(\n 'g',\n {\n stroke: 'none',\n 'stroke-width': '1',\n fill: 'none',\n 'fill-rule': 'evenodd',\n opacity,\n },\n [\n h('g', { fill, 'fill-rule': 'nonzero' }, [\n h('path', {\n d: 'M0.762,1.045 L11.24,1.045 C11.659,1.045 12,0.81 12,0.522 C12,0.234 11.659,0 11.24,0 L0.76,0 C0.34,0 0,0.234 0,0.522 C0.002,0.812 0.341,1.045 0.762,1.045 Z M4.976,4.03 L11.526,4.03 C11.786,4.03 12,3.795 12,3.507 C12,3.219 11.787,2.985 11.525,2.985 L4.975,2.985 C4.713,2.985 4.5,3.219 4.5,3.507 C4.501,3.795 4.713,4.03 4.976,4.03 Z M4.976,7.015 L11.526,7.015 C11.786,7.015 12,6.781 12,6.493 C12,6.205 11.787,5.97 11.525,5.97 L4.975,5.97 C4.713,5.97 4.5,6.205 4.5,6.493 C4.501,6.782 4.713,7.015 4.976,7.015 Z M0.762,10 L11.24,10 C11.659,10 12,9.766 12,9.478 C12,9.19 11.659,8.955 11.24,8.955 L0.76,8.955 C0.341,8.955 0,9.19 0,9.478 C0.002,9.767 0.341,10 0.762,10 Z',\n }),\n ]),\n ],\n ),\n ],\n );\n};\n","import type { S2Theme, TextAlign } from '@antv/s2';\n\nexport interface TextAlignPanelOptions {\n rowCellTextAlign?: TextAlign;\n colCellTextAlign?: TextAlign;\n dataCellTextAlign?: TextAlign;\n}\n\n/**\n * 生成表格文本对齐方式主题配置\n * @see https://s2.antv.antgroup.com/api/general/s2-theme\n */\nexport function generateCellTextAlignTheme(\n options: TextAlignPanelOptions,\n): S2Theme {\n const {\n colCellTextAlign: colCellAlignType,\n rowCellTextAlign: rowCellAlignType = 'left',\n dataCellTextAlign: dataCellAlignType = 'right',\n } = options;\n\n return {\n // 角头取列头的对齐方式, 但底表默认行角头是靠左, 列角头是靠右, 所以没有指定默认值时默认按底表对齐方式展示.\n cornerCell: {\n text: {\n textAlign: options?.colCellTextAlign || 'left',\n },\n bolderText: {\n textAlign: options?.colCellTextAlign || 'right',\n },\n },\n colCell: {\n text: {\n textAlign: colCellAlignType,\n },\n bolderText: {\n textAlign: colCellAlignType,\n },\n measureText: {\n textAlign: dataCellAlignType,\n },\n },\n rowCell: {\n text: {\n textAlign: rowCellAlignType,\n },\n bolderText: {\n textAlign: rowCellAlignType,\n },\n measureText: {\n textAlign: rowCellAlignType,\n },\n },\n dataCell: {\n text: {\n textAlign: dataCellAlignType,\n },\n bolderText: {\n textAlign: dataCellAlignType,\n },\n },\n };\n}\n","<script setup lang=\"ts\">\nimport { S2_PREFIX_CLS, i18n, type TextAlign, type S2Theme } from '@antv/s2';\nimport { h, ref, watch } from 'vue';\nimport { RadioGroup, ResetGroup, TooltipWrapper } from '../common';\nimport { LeftAlignIcon, CenterAlignIcon, RightAlignIcon } from './icons';\nimport {\n generateCellTextAlignTheme,\n type TextAlignPanelOptions,\n} from './utils';\n\nconst PRE_CLASS = `${S2_PREFIX_CLS}-text-align-panel`;\n\nconst props = withDefaults(\n defineProps<{\n title?: string;\n defaultOptions?: Partial<TextAlignPanelOptions>;\n defaultCollapsed?: boolean;\n }>(),\n {\n title: () => i18n('文字对齐'),\n defaultCollapsed: false,\n },\n);\n\nconst emit = defineEmits<{\n change: [options: TextAlignPanelOptions, theme: S2Theme];\n reset: [\n options: TextAlignPanelOptions,\n prevOptions: TextAlignPanelOptions,\n theme: S2Theme,\n ];\n}>();\n\nconst options = ref<TextAlignPanelOptions>({\n rowCellTextAlign: 'left',\n dataCellTextAlign: 'right',\n ...props.defaultOptions,\n});\n\nconst defaultOptionsRef = ref<TextAlignPanelOptions>({ ...options.value });\n\nconst onResetClick = () => {\n const theme = generateCellTextAlignTheme(defaultOptionsRef.value);\n const prevOptions = { ...options.value };\n\n options.value = { ...defaultOptionsRef.value };\n emit('reset', defaultOptionsRef.value, prevOptions, theme);\n};\n\nconst onOptionsChange = (\n field: keyof TextAlignPanelOptions,\n value: TextAlign,\n) => {\n const newOptions: TextAlignPanelOptions = {\n ...options.value,\n [field]: value,\n };\n\n // 指标和列头对齐 (含 EXTRA_FIELD 虚拟列), 可单独调整指标\n if (field === 'colCellTextAlign') {\n newOptions.dataCellTextAlign = newOptions.colCellTextAlign;\n }\n\n options.value = newOptions;\n};\n\nwatch(\n options,\n (newOptions) => {\n const theme = generateCellTextAlignTheme(newOptions);\n\n emit('change', newOptions, theme);\n },\n { deep: true },\n);\n\nconst getCellAlignOptions = (field: keyof TextAlignPanelOptions) => {\n return [\n { label: i18n('左对齐'), value: 'left', component: LeftAlignIcon },\n { label: i18n('居中'), value: 'center', component: CenterAlignIcon },\n { label: i18n('右对齐'), value: 'right', component: RightAlignIcon },\n ].map(({ label, value, component: Component }) => ({\n label: h(TooltipWrapper, { title: label }, () =>\n h(Component, { active: options.value[field] === value }),\n ),\n value,\n }));\n};\n\nconst handleChange = (field: keyof TextAlignPanelOptions, e: any) => {\n onOptionsChange(field, e.target.value);\n};\n</script>\n\n<template>\n <ResetGroup\n :title=\"title\"\n :defaultCollapsed=\"defaultCollapsed\"\n :class=\"PRE_CLASS\"\n @reset=\"onResetClick\"\n >\n <slot />\n <RadioGroup\n :label=\"i18n('表头')\"\n optionType=\"button\"\n :value=\"options.colCellTextAlign\"\n :options=\"getCellAlignOptions('colCellTextAlign')\"\n onlyIcon\n @change=\"(e) => handleChange('colCellTextAlign', e)\"\n />\n <RadioGroup\n :label=\"i18n('表身 (维度)')\"\n optionType=\"button\"\n :value=\"options.rowCellTextAlign\"\n :options=\"getCellAlignOptions('rowCellTextAlign')\"\n onlyIcon\n @change=\"(e) => handleChange('rowCellTextAlign', e)\"\n />\n <RadioGroup\n :label=\"i18n('表身 (指标)')\"\n optionType=\"button\"\n :value=\"options.dataCellTextAlign\"\n :options=\"getCellAlignOptions('dataCellTextAlign')\"\n onlyIcon\n @change=\"(e) => handleChange('dataCellTextAlign', e)\"\n />\n </ResetGroup>\n</template>\n\n<style lang=\"less\">\n@import '@antv/s2/esm/styles/variables.less';\n\n.@{s2-cls-prefix}-text-align-panel {\n width: 340px;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { S2_PREFIX_CLS } from '@antv/s2';\nimport { computed } from 'vue';\n\nconst PRE_CLASS = `${S2_PREFIX_CLS}-color-box`;\n\nconst props = withDefaults(\n defineProps<{\n color: string;\n class?: string;\n }>(),\n {\n class: '',\n },\n);\n\nconst emit = defineEmits<{\n click: [event: MouseEvent];\n}>();\n\nconst classNames = computed(() => {\n return [PRE_CLASS, props.class].filter(Boolean).join(' ');\n});\n\nconst handleClick = (event: MouseEvent) => {\n emit('click', event);\n};\n</script>\n\n<template>\n <div\n :class=\"classNames\"\n :style=\"{ backgroundColor: color }\"\n @click=\"handleClick\"\n />\n</template>\n\n<style lang=\"less\">\n@import '@antv/s2/esm/styles/variables.less';\n\n.@{s2-cls-prefix}-color-box {\n display: inline-flex;\n box-sizing: border-box;\n width: 20px;\n height: 20px;\n border: 1px solid rgba(0, 0, 0, 0.06);\n border-radius: 2px;\n cursor: pointer;\n transition: all 0.3s;\n\n &:hover {\n transform: scale(1.1);\n }\n}\n</style>\n","import { h, type FunctionalComponent } from 'vue';\n\nexport interface RadioIconProps {\n active?: boolean;\n}\n\nexport const HierarchyGridTypeIcon: FunctionalComponent<RadioIconProps> = ({\n active,\n}) => {\n const fill = active ? '#3471F9' : '#000000';\n const fillOpacity = active ? '1' : '0.45';\n\n return h(\n 'svg',\n {\n class: 'si',\n width: '18px',\n height: '18px',\n viewBox: '0 0 18 18',\n fill: 'currentColor',\n },\n [\n h(\n 'g',\n {\n stroke: 'none',\n 'stroke-width': '1',\n fill: 'none',\n 'fill-rule': 'evenodd',\n },\n [\n h('path', {\n d: 'M7.46428571,2.75 L7.46428571,19.25 L2.75,19.25 L2.75,2.75 L7.46428571,2.75 Z M19.25,15.125 L19.25,19.25 L14.5357143,19.25 L14.5357143,15.125 L19.25,15.125 Z M13.3571429,15.125 L13.3571429,19.25 L8.64285714,19.25 L8.64285714,15.125 L13.3571429,15.125 Z M13.3571429,2.75 L13.3571429,13.75 L8.64285714,13.75 L8.64285714,2.75 L13.3571429,2.75 Z M19.25,9.625 L19.25,13.75 L14.5357143,13.75 L14.5357143,9.625 L19.25,9.625 Z M19.25,2.75 L19.25,8.25 L14.5357143,8.25 L14.5357143,2.75 L19.25,2.75 Z',\n fill,\n 'fill-opacity': fillOpacity,\n transform: 'translate(-2, -1)',\n }),\n ],\n ),\n ],\n );\n};\n\nexport const HierarchyTreeTypeIcon: FunctionalComponent<RadioIconProps> = ({\n active,\n}) => {\n const fill = active ? '#3471F9' : '#000000';\n const fillOpacity = active ? '1' : '0.45';\n\n return h(\n 'svg',\n {\n class: 'si',\n width: '18px',\n height: '18px',\n viewBox: '0 0 18 18',\n fill: 'currentColor',\n },\n [\n h(\n 'g',\n {\n stroke: 'none',\n 'stroke-width': '1',\n fill: 'none',\n 'fill-rule': 'evenodd',\n },\n [\n h('path', {\n d: 'M2.75,2.75 L2.75,6.77254902 L6.47225591,6.77254902 L6.47225591,2.75 L2.75,2.75 Z M11.1150697,15.2166667 L11.1150697,19.25 L19.25,19.25 L19.25,15.2166667 L11.1150697,15.2166667 Z M8.12325652,2.75 L8.12325652,6.77254902 L19.2299879,6.77254902 L19.2299879,2.75 L8.12325652,2.75 Z M11.1150697,8.98333333 L11.1150697,13.0166667 L19.2399939,13.0166667 L19.2399939,8.98333333 L11.1150697,8.98333333 Z M3.98074591,6.77254902 L5.23150394,6.77254902 L5.23150394,17.9019608 L3.98074591,17.9019608 L3.98074591,6.77254902 Z M5.23150394,16.5539216 L11.1250758,16.5539216 L11.1250758,17.9019608 L5.23150394,17.9019608 L5.23150394,16.5539216 Z M5.23150394,10.3745098 L11.1250758,10.3745098 L11.1250758,11.7117647 L5.23150394,11.7117647 L5.23150394,10.3745098 Z',\n fill,\n 'fill-opacity': fillOpacity,\n transform: 'translate(-2, -1)',\n }),\n ],\n ),\n ],\n );\n};\n\nexport const ColorfulThemeIcon: FunctionalComponent<RadioIconProps> = ({\n active,\n}) => {\n const borderFill = active ? '#3471F9' : '#8C8C8C';\n const stripeFill = active ? '#B0D1FF' : '#BFBFBF';\n\n return h(\n 'svg',\n {\n class: 'si',\n width: '18px',\n height: '16px',\n viewBox: '0 0 18 16',\n fill: 'currentColor',\n },\n [\n h(\n 'g',\n {\n stroke: 'none',\n 'stroke-width': '1',\n fill: 'none',\n 'fill-rule': 'evenodd',\n },\n [\n h('polygon', { fill: stripeFill, points: '1 7 17 7 17 11.5 1 11.5' }),\n h('path', {\n d: 'M6.8,0 L6.8,16 L6,16 L6,0 L6.8,0 Z M11.8,0 L11.8,16 L11,16 L11,0 L11.8,0 Z',\n fill: stripeFill,\n }),\n h('path', {\n d: 'M18,0 L18,16 L0,16 L0,0 L18,0 Z M17,1 L1,1 L1,15 L17,15 L17,1 Z',\n fill: borderFill,\n }),\n h('polygon', {\n fill: borderFill,\n points: '0 0 18 0 18 4.125 0 4.125',\n }),\n ],\n ),\n ],\n );\n};\n\nexport const NormalThemeIcon: FunctionalComponent<RadioIconProps> = ({\n active,\n}) => {\n const borderFill = active ? '#3471F9' : '#8C8C8C';\n const gridFill = active ? '#B0D1FF' : '#BFBFBF';\n\n return h(\n 'svg',\n {\n class: 'si',\n width: '18px',\n height: '16px',\n viewBox: '0 0 18 16',\n fill: 'currentColor',\n },\n [\n h(\n 'g',\n {\n stroke: 'none',\n 'stroke-width': '1',\n fill: 'none',\n 'fill-rule': 'evenodd',\n },\n [\n h('path', {\n d: 'M6.8,0 L6.799,7 L10.999,7 L11,0 L11.8,0 L11.799,7 L17,7 L17,7.8 L11.799,7.8 L11.799,11 L17,11 L17,11.8 L11.799,11.8 L11.8,16 L11,16 L10.999,11.8 L6.799,11.8 L6.8,16 L6,16 L5.999,11.8 L1,11.8 L1,11 L5.999,11 L5.999,7.8 L1,7.8 L1,7 L5.999,7 L6,0 L6.8,0 Z M10.999,7.8 L6.799,7.8 L6.799,11 L10.999,11 L10.999,7.8 Z',\n fill: gridFill,\n }),\n h('path', {\n d: 'M18,0 L18,16 L0,16 L0,0 L18,0 Z M17,1 L1,1 L1,15 L17,15 L17,1 Z',\n fill: borderFill,\n }),\n h('polygon', {\n fill: borderFill,\n points: '0 0 18 0 18 4.125 0 4.125',\n }),\n ],\n ),\n ],\n );\n};\n\nexport const BasicThemeIcon: FunctionalComponent<RadioIconProps> = ({\n active,\n}) => {\n const borderFill = active ? '#3471F9' : '#8C8C8C';\n const gridFill = active ? '#B0D1FF' : '#BFBFBF';\n\n return h(\n 'svg',\n {\n class: 'si',\n width: '18px',\n height: '16px',\n viewBox: '0 0 18 16',\n fill: 'currentColor',\n },\n [\n h(\n 'g',\n {\n stroke: 'none',\n 'stroke-width': '1',\n fill: 'none',\n 'fill-rule': 'evenodd',\n },\n [\n h('path', {\n d: 'M6.8,3.625 L6.799,7 L10.999,7 L11,3.625 L11.8,3.625 L11.799,7 L17,7 L17,7.8 L11.799,7.8 L11.799,11 L17,11 L17,11.8 L11.799,11.8 L11.8,16 L11,16 L10.999,11.8 L6.799,11.8 L6.8,16 L6,16 L5.999,11.8 L1,11.8 L1,11 L5.999,11 L5.999,7.8 L1,7.8 L1,7 L5.999,7 L6,3.625 L6.8,3.625 Z M10.999,7.8 L6.799,7.8 L6.799,11 L10.999,11 L10.999,7.8 Z',\n fill: gridFill,\n }),\n h('path', {\n d: 'M6.8,1 L6.8,3.125 L6,3.125 L6,1 L6.8,1 Z M11.8,1 L11.8,3.125 L11,3.125 L11,1 L11.8,1 Z',\n fill: borderFill,\n }),\n h('path', {\n d: 'M18,0 L18,16 L0,16 L0,0 L18,0 Z M17,1 L1,1 L1,15 L17,15 L17,1 Z',\n fill: borderFill,\n }),\n h('polygon', {\n fill: borderFill,\n points: '0 3.125 18 3.125 18 4.125 0 4.125',\n }),\n ],\n ),\n ],\n );\n};\n\nexport const ZebraThemeIcon: FunctionalComponent<RadioIconProps> = ({\n active,\n}) => {\n const borderFill = active ? '#3471F9' : '#8C8C8C';\n const stripeFill = active ? '#B0D1FF' : '#BFBFBF';\n\n return h(\n 'svg',\n {\n class: 'si',\n width: '18px',\n height: '16px',\n viewBox: '0 0 18 16',\n fill: 'currentColor',\n },\n [\n h(\n 'g',\n {\n stroke: 'none',\n 'stroke-width': '1',\n fill: 'none',\n 'fill-rule': 'evenodd',\n },\n [\n h('polygon', { fill: stripeFill, points: '0 6 18 6 18 8 0 8' }),\n h('polygon', { fill: stripeFill, points: '0 10 18 10 18 12 0 12' }),\n h('polygon', { fill: stripeFill, points: '0 14 18 14 18 16 0 16' }),\n h('path', {\n d: 'M6,0 L6.8,0 L6.8,16 L6,16 Z M11,0 L11.8,0 L11.8,16 L11,16 Z',\n fill: stripeFill,\n }),\n h('polygon', {\n fill: borderFill,\n points: '0 0 18 0 18 4.125 0 4.125',\n }),\n ],\n ),\n ],\n );\n};\n","// This file is autogenerated. It's used to publish ESM to npm.\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}\n\n// https://github.com/bgrins/TinyColor\n// Brian Grinstead, MIT License\n\nvar trimLeft = /^\\s+/;\nvar trimRight = /\\s+$/;\nfunction tinycolor(color, opts) {\n color = color ? color : \"\";\n opts = opts || {};\n\n // If input is already a tinycolor, return itself\n if (color instanceof tinycolor) {\n return color;\n }\n // If we are called as a function, call using new instead\n if (!(this instanceof tinycolor)) {\n return new tinycolor(color, opts);\n }\n var rgb = inputToRGB(color);\n this._originalInput = color, this._r = rgb.r, this._g = rgb.g, this._b = rgb.b, this._a = rgb.a, this._roundA = Math.round(100 * this._a) / 100, this._format = opts.format || rgb.format;\n this._gradientType = opts.gradientType;\n\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this._r < 1) this._r = Math.round(this._r);\n if (this._g < 1) this._g = Math.round(this._g);\n if (this._b < 1) this._b = Math.round(this._b);\n this._ok = rgb.ok;\n}\ntinycolor.prototype = {\n isDark: function isDark() {\n return this.getBrightness() < 128;\n },\n isLight: function isLight() {\n return !this.isDark();\n },\n isValid: function isValid() {\n return this._ok;\n },\n getOriginalInput: function getOriginalInput() {\n return this._originalInput;\n },\n getFormat: function getFormat() {\n return this._format;\n },\n getAlpha: function getAlpha() {\n return this._a;\n },\n getBrightness: function getBrightness() {\n //http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n },\n getLuminance: function getLuminance() {\n //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var RsRGB, GsRGB, BsRGB, R, G, B;\n RsRGB = rgb.r / 255;\n GsRGB = rgb.g / 255;\n BsRGB = rgb.b / 255;\n if (RsRGB <= 0.03928) R = RsRGB / 12.92;else R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n if (GsRGB <= 0.03928) G = GsRGB / 12.92;else G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n if (BsRGB <= 0.03928) B = BsRGB / 12.92;else B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n },\n setAlpha: function setAlpha(value) {\n this._a = boundAlpha(value);\n this._roundA = Math.round(100 * this._a) / 100;\n return this;\n },\n toHsv: function toHsv() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n return {\n h: hsv.h * 360,\n s: hsv.s,\n v: hsv.v,\n a: this._a\n };\n },\n toHsvString: function toHsvString() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n var h = Math.round(hsv.h * 360),\n s = Math.round(hsv.s * 100),\n v = Math.round(hsv.v * 100);\n return this._a == 1 ? \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" : \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \" + this._roundA + \")\";\n },\n toHsl: function toHsl() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n return {\n h: hsl.h * 360,\n s: hsl.s,\n l: hsl.l,\n a: this._a\n };\n },\n toHslString: function toHslString() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n var h = Math.round(hsl.h * 360),\n s = Math.round(hsl.s * 100),\n l = Math.round(hsl.l * 100);\n return this._a == 1 ? \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" : \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \" + this._roundA + \")\";\n },\n toHex: function toHex(allow3Char) {\n return rgbToHex(this._r, this._g, this._b, allow3Char);\n },\n toHexString: function toHexString(allow3Char) {\n return \"#\" + this.toHex(allow3Char);\n },\n toHex8: function toHex8(allow4Char) {\n return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n },\n toHex8String: function toHex8String(allow4Char) {\n return \"#\" + this.toHex8(allow4Char);\n },\n toRgb: function toRgb() {\n return {\n r: Math.round(this._r),\n g: Math.round(this._g),\n b: Math.round(this._b),\n a: this._a\n };\n },\n toRgbString: function toRgbString() {\n return this._a == 1 ? \"rgb(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \")\" : \"rgba(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \", \" + this._roundA + \")\";\n },\n toPercentageRgb: function toPercentageRgb() {\n return {\n r: Math.round(bound01(this._r, 255) * 100) + \"%\",\n g: Math.round(bound01(this._g, 255) * 100) + \"%\",\n b: Math.round(bound01(this._b, 255) * 100) + \"%\",\n a: this._a\n };\n },\n toPercentageRgbString: function toPercentageRgbString() {\n return this._a == 1 ? \"rgb(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%)\" : \"rgba(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n },\n toName: function toName() {\n if (this._a === 0) {\n return \"transparent\";\n }\n if (this._a < 1) {\n return false;\n }\n return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n },\n toFilter: function toFilter(secondColor) {\n var hex8String = \"#\" + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n var secondHex8String = hex8String;\n var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n if (secondColor) {\n var s = tinycolor(secondColor);\n secondHex8String = \"#\" + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n }\n return \"progid:DXImageTransform.Microsoft.gradient(\" + gradientType + \"startColorstr=\" + hex8String + \",endColorstr=\" + secondHex8String + \")\";\n },\n toString: function toString(format) {\n var formatSet = !!format;\n format = format || this._format;\n var formattedString = false;\n var hasAlpha = this._a < 1 && this._a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === \"name\" && this._a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === \"rgb\") {\n formattedString = this.toRgbString();\n }\n if (format === \"prgb\") {\n formattedString = this.toPercentageRgbString();\n }\n if (format === \"hex\" || format === \"hex6\") {\n formattedString = this.toHexString();\n }\n if (format === \"hex3\") {\n formattedString = this.toHexString(true);\n }\n if (format === \"hex4\") {\n formattedString = this.toHex8String(true);\n }\n if (format === \"hex8\") {\n formattedString = this.toHex8String();\n }\n if (format === \"name\") {\n formattedString = this.toName();\n }\n if (format === \"hsl\") {\n formattedString = this.toHslString();\n }\n if (format === \"hsv\") {\n formattedString = this.toHsvString();\n }\n return formattedString || this.toHexString();\n },\n clone: function clone() {\n return tinycolor(this.toString());\n },\n _applyModification: function _applyModification(fn, args) {\n var color = fn.apply(null, [this].concat([].slice.call(args)));\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this.setAlpha(color._a);\n return this;\n },\n lighten: function lighten() {\n return this._applyModification(_lighten, arguments);\n },\n brighten: function brighten() {\n return this._applyModification(_brighten, arguments);\n },\n darken: function darken() {\n return this._applyModification(_darken, arguments);\n },\n desaturate: function desaturate() {\n return this._applyModification(_desaturate, arguments);\n },\n saturate: function saturate() {\n return this._applyModification(_saturate, arguments);\n },\n greyscale: function greyscale() {\n return this._applyModification(_greyscale, arguments);\n },\n spin: function spin() {\n return this._applyModification(_spin, arguments);\n },\n _applyCombination: function _applyCombination(fn, args) {\n return fn.apply(null, [this].concat([].slice.call(args)));\n },\n analogous: function analogous() {\n return this._applyCombination(_analogous, arguments);\n },\n complement: function complement() {\n return this._applyCombination(_complement, arguments);\n },\n monochromatic: function monochromatic() {\n return this._applyCombination(_monochromatic, arguments);\n },\n splitcomplement: function splitcomplement() {\n return this._applyCombination(_splitcomplement, arguments);\n },\n // Disabled until https://github.com/bgrins/TinyColor/issues/254\n // polyad: function (number) {\n // return this._applyCombination(polyad, [number]);\n // },\n triad: function triad() {\n return this._applyCombination(polyad, [3]);\n },\n tetrad: function tetrad() {\n return this._applyCombination(polyad, [4]);\n }\n};\n\n// If input is an object, force 1 into \"1.0\" to handle ratios properly\n// String input requires \"1.0\" as input, so 1 will be treated as 1\ntinycolor.fromRatio = function (color, opts) {\n if (_typeof(color) == \"object\") {\n var newColor = {};\n for (var i in color) {\n if (color.hasOwnProperty(i)) {\n if (i === \"a\") {\n newColor[i] = color[i];\n } else {\n newColor[i] = convertToPercentage(color[i]);\n }\n }\n }\n color = newColor;\n }\n return tinycolor(color, opts);\n};\n\n// Given a string or object, convert that input to RGB\n// Possible string inputs:\n//\n// \"red\"\n// \"#f00\" or \"f00\"\n// \"#ff0000\" or \"ff0000\"\n// \"#ff000000\" or \"ff000000\"\n// \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n// \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n// \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n// \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n// \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n// \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n// \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n//\nfunction inputToRGB(color) {\n var rgb = {\n r: 0,\n g: 0,\n b: 0\n };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n if (typeof color == \"string\") {\n color = stringInputToObject(color);\n }\n if (_typeof(color) == \"object\") {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = \"hsv\";\n } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = \"hsl\";\n }\n if (color.hasOwnProperty(\"a\")) {\n a = color.a;\n }\n }\n a = boundAlpha(a);\n return {\n ok: ok,\n format: color.format || format,\n r: Math.min(255, Math.max(rgb.r, 0)),\n g: Math.min(255, Math.max(rgb.g, 0)),\n b: Math.min(255, Math.max(rgb.b, 0)),\n a: a\n };\n}\n\n// Conversion Functions\n// --------------------\n\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>\n\n// `rgbToRgb`\n// Handle bounds / percentage checking to conform to CSS color spec\n// <http://www.w3.org/TR/css3-color/>\n// *Assumes:* r, g, b in [0, 255] or [0, 1]\n// *Returns:* { r, g, b } in [0, 255]\nfunction rgbToRgb(r, g, b) {\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255\n };\n}\n\n// `rgbToHsl`\n// Converts an RGB color value to HSL.\n// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n// *Returns:* { h, s, l } in [0,1]\nfunction rgbToHsl(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n l = (max + min) / 2;\n if (max == min) {\n h = s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return {\n h: h,\n s: s,\n l: l\n };\n}\n\n// `hslToRgb`\n// Converts an HSL color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hslToRgb(h, s, l) {\n var r, g, b;\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255\n };\n}\n\n// `rgbToHsv`\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nfunction rgbToHsv(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n v = max;\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n if (max == min) {\n h = 0; // achromatic\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return {\n h: h,\n s: s,\n v: v\n };\n}\n\n// `hsvToRgb`\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hsvToRgb(h, s, v) {\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n var i = Math.floor(h),\n f = h - i,\n p = v * (1 - s),\n q = v * (1 - f * s),\n t = v * (1 - (1 - f) * s),\n mod = i % 6,\n r = [v, q, p, p, t, v][mod],\n g = [t, v, v, q, p, p][mod],\n b = [p, p, t, v, v, q][mod];\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255\n };\n}\n\n// `rgbToHex`\n// Converts an RGB color to hex\n// Assumes r, g, and b are contained in the set [0, 255]\n// Returns a 3 or 6 character hex\nfunction rgbToHex(r, g, b, allow3Char) {\n var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n\n // Return a 3 character hex if possible\n if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n return hex.join(\"\");\n}\n\n// `rgbaToHex`\n// Converts an RGBA color plus alpha transparency to hex\n// Assumes r, g, b are contained in the set [0, 255] and\n// a in [0, 1]. Returns a 4 or 8 character rgba hex\nfunction rgbaToHex(r, g, b, a, allow4Char) {\n var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16)), pad2(convertDecimalToHex(a))];\n\n // Return a 4 character hex if possible\n if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n return hex.join(\"\");\n}\n\n// `rgbaToArgbHex`\n// Converts an RGBA color to an ARGB Hex8 string\n// Rarely used, but required for \"toFilter()\"\nfunction rgbaToArgbHex(r, g, b, a) {\n var hex = [pad2(convertDecimalToHex(a)), pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n return hex.join(\"\");\n}\n\n// `equals`\n// Can be called with any tinycolor input\ntinycolor.equals = function (color1, color2) {\n if (!color1 || !color2) return false;\n return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n};\ntinycolor.random = function () {\n return tinycolor.fromRatio({\n r: Math.random(),\n g: Math.random(),\n b: Math.random()\n });\n};\n\n// Modification Functions\n// ----------------------\n// Thanks to less.js for some of the basics here\n// <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>\n\nfunction _desaturate(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\nfunction _saturate(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\nfunction _greyscale(color) {\n return tinycolor(color).desaturate(100);\n}\nfunction _lighten(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\nfunction _brighten(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var rgb = tinycolor(color).toRgb();\n rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));\n rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));\n rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));\n return tinycolor(rgb);\n}\nfunction _darken(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\n// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n// Values outside of this range will be wrapped into this range.\nfunction _spin(color, amount) {\n var hsl = tinycolor(color).toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return tinycolor(hsl);\n}\n\n// Combination Functions\n// ---------------------\n// Thanks to jQuery xColor for some of the ideas behind these\n// <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>\n\nfunction _complement(color) {\n var hsl = tinycolor(color).toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return tinycolor(hsl);\n}\nfunction polyad(color, number) {\n if (isNaN(number) || number <= 0) {\n throw new Error(\"Argument to polyad must be a positive number\");\n }\n var hsl = tinycolor(color).toHsl();\n var result = [tinycolor(color)];\n var step = 360 / number;\n for (var i = 1; i < number; i++) {\n result.push(tinycolor({\n h: (hsl.h + i * step) % 360,\n s: hsl.s,\n l: hsl.l\n }));\n }\n return result;\n}\nfunction _splitcomplement(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [tinycolor(color), tinycolor({\n h: (h + 72) % 360,\n s: hsl.s,\n l: hsl.l\n }), tinycolor({\n h: (h + 216) % 360,\n s: hsl.s,\n l: hsl.l\n })];\n}\nfunction _analogous(color, results, slices) {\n results = results || 6;\n slices = slices || 30;\n var hsl = tinycolor(color).toHsl();\n var part = 360 / slices;\n var ret = [tinycolor(color)];\n for (hsl.h = (hsl.h - (part * results >> 1) + 720) % 360; --results;) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(tinycolor(hsl));\n }\n return ret;\n}\nfunction _monochromatic(color, results) {\n results = results || 6;\n var hsv = tinycolor(color).toHsv();\n var h = hsv.h,\n s = hsv.s,\n v = hsv.v;\n var ret = [];\n var modification = 1 / results;\n while (results--) {\n ret.push(tinycolor({\n h: h,\n s: s,\n v: v\n }));\n v = (v + modification) % 1;\n }\n return ret;\n}\n\n// Utility Functions\n// ---------------------\n\ntinycolor.mix = function (color1, color2, amount) {\n amount = amount === 0 ? 0 : amount || 50;\n var rgb1 = tinycolor(color1).toRgb();\n var rgb2 = tinycolor(color2).toRgb();\n var p = amount / 100;\n var rgba = {\n r: (rgb2.r - rgb1.r) * p + rgb1.r,\n g: (rgb2.g - rgb1.g) * p + rgb1.g,\n b: (rgb2.b - rgb1.b) * p + rgb1.b,\n a: (rgb2.a - rgb1.a) * p + rgb1.a\n };\n return tinycolor(rgba);\n};\n\n// Readability Functions\n// ---------------------\n// <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)\n\n// `contrast`\n// Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)\ntinycolor.readability = function (color1, color2) {\n var c1 = tinycolor(color1);\n var c2 = tinycolor(color2);\n return (Math.max(c1.getLuminance(), c2.getLuminance()) + 0.05) / (Math.min(c1.getLuminance(), c2.getLuminance()) + 0.05);\n};\n\n// `isReadable`\n// Ensure that foreground and background color combinations meet WCAG2 guidelines.\n// The third argument is an optional Object.\n// the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';\n// the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.\n// If the entire object is absent, isReadable defaults to {level:\"AA\",size:\"small\"}.\n\n// *Example*\n// tinycolor.isReadable(\"#000\", \"#111\") => false\n// tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\ntinycolor.isReadable = function (color1, color2, wcag2) {\n var readability = tinycolor.readability(color1, color2);\n var wcag2Parms, out;\n out = false;\n wcag2Parms = validateWCAG2Parms(wcag2);\n switch (wcag2Parms.level + wcag2Parms.size) {\n case \"AAsmall\":\n case \"AAAlarge\":\n out = readability >= 4.5;\n break;\n case \"AAlarge\":\n out = readability >= 3;\n break;\n case \"AAAsmall\":\n out = readability >= 7;\n break;\n }\n return out;\n};\n\n// `mostReadable`\n// Given a base color and a list of possible foreground or background\n// colors for that base, returns the most readable color.\n// Optionally returns Black or White if the most readable color is unreadable.\n// *Example*\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString(); // \"#ffffff\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\ntinycolor.mostReadable = function (baseColor, colorList, args) {\n var bestColor = null;\n var bestScore = 0;\n var readability;\n var includeFallbackColors, level, size;\n args = args || {};\n includeFallbackColors = args.includeFallbackColors;\n level = args.level;\n size = args.size;\n for (var i = 0; i < colorList.length; i++) {\n readability = tinycolor.readability(baseColor, colorList[i]);\n if (readability > bestScore) {\n bestScore = readability;\n bestColor = tinycolor(colorList[i]);\n }\n }\n if (tinycolor.isReadable(baseColor, bestColor, {\n level: level,\n size: size\n }) || !includeFallbackColors) {\n return bestColor;\n } else {\n args.includeFallbackColors = false;\n return tinycolor.mostReadable(baseColor, [\"#fff\", \"#000\"], args);\n }\n};\n\n// Big List of Colors\n// ------------------\n// <https://www.w3.org/TR/css-color-4/#named-colors>\nvar names = tinycolor.names = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"0ff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000\",\n blanchedalmond: \"ffebcd\",\n blue: \"00f\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n burntsienna: \"ea7e5d\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"0ff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"f0f\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"789\",\n lightslategrey: \"789\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"0f0\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"f0f\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"f00\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"fff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ff0\",\n yellowgreen: \"9acd32\"\n};\n\n// Make it easy to access colors via `hexNames[hex]`\nvar hexNames = tinycolor.hexNames = flip(names);\n\n// Utilities\n// ---------\n\n// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\nfunction flip(o) {\n var flipped = {};\n for (var i in o) {\n if (o.hasOwnProperty(i)) {\n flipped[o[i]] = i;\n }\n }\n return flipped;\n}\n\n// Return a valid alpha value [0,1] with all invalid values being set to 1\nfunction boundAlpha(a) {\n a = parseFloat(a);\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n return a;\n}\n\n// Take input from [0, n] and return it as [0, 1]\nfunction bound01(n, max) {\n if (isOnePointZero(n)) n = \"100%\";\n var processPercent = isPercentage(n);\n n = Math.min(max, Math.max(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if (Math.abs(n - max) < 0.000001) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return n % max / parseFloat(max);\n}\n\n// Force a number between 0 and 1\nfunction clamp01(val) {\n return Math.min(1, Math.max(0, val));\n}\n\n// Parse a base-16 hex value into a base-10 integer\nfunction parseIntFromHex(val) {\n return parseInt(val, 16);\n}\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\nfunction isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf(\".\") != -1 && parseFloat(n) === 1;\n}\n\n// Check to see if string passed in is a percentage\nfunction isPercentage(n) {\n return typeof n === \"string\" && n.indexOf(\"%\") != -1;\n}\n\n// Force a hex value to have 2 characters\nfunction pad2(c) {\n return c.length == 1 ? \"0\" + c : \"\" + c;\n}\n\n// Replace a decimal with it's percentage value\nfunction convertToPercentage(n) {\n if (n <= 1) {\n n = n * 100 + \"%\";\n }\n return n;\n}\n\n// Converts a decimal to a hex value\nfunction convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n}\n// Converts a hex value to a decimal\nfunction convertHexToDecimal(h) {\n return parseIntFromHex(h) / 255;\n}\nvar matchers = function () {\n // <http://www.w3.org/TR/css3-values/#integers>\n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // <http://www.w3.org/TR/css3-values/#number-value>\n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n}();\n\n// `isValidCSSUnit`\n// Take in a single string / number and check to see if it looks like a CSS unit\n// (see `matchers` above for definition).\nfunction isValidCSSUnit(color) {\n return !!matchers.CSS_UNIT.exec(color);\n}\n\n// `stringInputToObject`\n// Permissive string parsing. Take in a number of formats, and output an object\n// based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\nfunction stringInputToObject(color) {\n color = color.replace(trimLeft, \"\").replace(trimRight, \"\").toLowerCase();\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n } else if (color == \"transparent\") {\n return {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n format: \"name\"\n };\n }\n\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match;\n if (match = matchers.rgb.exec(color)) {\n return {\n r: match[1],\n g: match[2],\n b: match[3]\n };\n }\n if (match = matchers.rgba.exec(color)) {\n return {\n r: match[1],\n g: match[2],\n b: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hsl.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n l: match[3]\n };\n }\n if (match = matchers.hsla.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n l: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hsv.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n v: match[3]\n };\n }\n if (match = matchers.hsva.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n v: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hex8.exec(color)) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if (match = matchers.hex6.exec(color)) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n if (match = matchers.hex4.exec(color)) {\n return {\n r: parseIntFromHex(match[1] + \"\" + match[1]),\n g: parseIntFromHex(match[2] + \"\" + match[2]),\n b: parseIntFromHex(match[3] + \"\" + match[3]),\n a: convertHexToDecimal(match[4] + \"\" + match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if (match = matchers.hex3.exec(color)) {\n return {\n r: parseIntFromHex(match[1] + \"\" + match[1]),\n g: parseIntFromHex(match[2] + \"\" + match[2]),\n b: parseIntFromHex(match[3] + \"\" + match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n return false;\n}\nfunction validateWCAG2Parms(parms) {\n // return valid WCAG2 parms for isReadable.\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n var level, size;\n parms = parms || {\n level: \"AA\",\n size: \"small\"\n };\n level = (parms.level || \"AA\").toUpperCase();\n size = (parms.size || \"small\").toLowerCase();\n if (level !== \"AA\" && level !== \"AAA\") {\n level = \"AA\";\n }\n if (size !== \"small\" && size !== \"large\") {\n size = \"small\";\n }\n return {\n level: level,\n size: size\n };\n}\n\nexport { tinycolor as default };\n","// This file is autogenerated. It's used to publish CJS to npm.\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.tinycolor = factory());\n})(this, (function () { 'use strict';\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n }\n\n // https://github.com/bgrins/TinyColor\n // Brian Grinstead, MIT License\n\n var trimLeft = /^\\s+/;\n var trimRight = /\\s+$/;\n function tinycolor(color, opts) {\n color = color ? color : \"\";\n opts = opts || {};\n\n // If input is already a tinycolor, return itself\n if (color instanceof tinycolor) {\n return color;\n }\n // If we are called as a function, call using new instead\n if (!(this instanceof tinycolor)) {\n return new tinycolor(color, opts);\n }\n var rgb = inputToRGB(color);\n this._originalInput = color, this._r = rgb.r, this._g = rgb.g, this._b = rgb.b, this._a = rgb.a, this._roundA = Math.round(100 * this._a) / 100, this._format = opts.format || rgb.format;\n this._gradientType = opts.gradientType;\n\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this._r < 1) this._r = Math.round(this._r);\n if (this._g < 1) this._g = Math.round(this._g);\n if (this._b < 1) this._b = Math.round(this._b);\n this._ok = rgb.ok;\n }\n tinycolor.prototype = {\n isDark: function isDark() {\n return this.getBrightness() < 128;\n },\n isLight: function isLight() {\n return !this.isDark();\n },\n isValid: function isValid() {\n return this._ok;\n },\n getOriginalInput: function getOriginalInput() {\n return this._originalInput;\n },\n getFormat: function getFormat() {\n return this._format;\n },\n getAlpha: function getAlpha() {\n return this._a;\n },\n getBrightness: function getBrightness() {\n //http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n },\n getLuminance: function getLuminance() {\n //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var RsRGB, GsRGB, BsRGB, R, G, B;\n RsRGB = rgb.r / 255;\n GsRGB = rgb.g / 255;\n BsRGB = rgb.b / 255;\n if (RsRGB <= 0.03928) R = RsRGB / 12.92;else R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n if (GsRGB <= 0.03928) G = GsRGB / 12.92;else G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n if (BsRGB <= 0.03928) B = BsRGB / 12.92;else B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n },\n setAlpha: function setAlpha(value) {\n this._a = boundAlpha(value);\n this._roundA = Math.round(100 * this._a) / 100;\n return this;\n },\n toHsv: function toHsv() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n return {\n h: hsv.h * 360,\n s: hsv.s,\n v: hsv.v,\n a: this._a\n };\n },\n toHsvString: function toHsvString() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n var h = Math.round(hsv.h * 360),\n s = Math.round(hsv.s * 100),\n v = Math.round(hsv.v * 100);\n return this._a == 1 ? \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" : \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \" + this._roundA + \")\";\n },\n toHsl: function toHsl() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n return {\n h: hsl.h * 360,\n s: hsl.s,\n l: hsl.l,\n a: this._a\n };\n },\n toHslString: function toHslString() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n var h = Math.round(hsl.h * 360),\n s = Math.round(hsl.s * 100),\n l = Math.round(hsl.l * 100);\n return this._a == 1 ? \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" : \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \" + this._roundA + \")\";\n },\n toHex: function toHex(allow3Char) {\n return rgbToHex(this._r, this._g, this._b, allow3Char);\n },\n toHexString: function toHexString(allow3Char) {\n return \"#\" + this.toHex(allow3Char);\n },\n toHex8: function toHex8(allow4Char) {\n return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n },\n toHex8String: function toHex8String(allow4Char) {\n return \"#\" + this.toHex8(allow4Char);\n },\n toRgb: function toRgb() {\n return {\n r: Math.round(this._r),\n g: Math.round(this._g),\n b: Math.round(this._b),\n a: this._a\n };\n },\n toRgbString: function toRgbString() {\n return this._a == 1 ? \"rgb(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \")\" : \"rgba(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \", \" + this._roundA + \")\";\n },\n toPercentageRgb: function toPercentageRgb() {\n return {\n r: Math.round(bound01(this._r, 255) * 100) + \"%\",\n g: Math.round(bound01(this._g, 255) * 100) + \"%\",\n b: Math.round(bound01(this._b, 255) * 100) + \"%\",\n a: this._a\n };\n },\n toPercentageRgbString: function toPercentageRgbString() {\n return this._a == 1 ? \"rgb(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%)\" : \"rgba(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n },\n toName: function toName() {\n if (this._a === 0) {\n return \"transparent\";\n }\n if (this._a < 1) {\n return false;\n }\n return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n },\n toFilter: function toFilter(secondColor) {\n var hex8String = \"#\" + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n var secondHex8String = hex8String;\n var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n if (secondColor) {\n var s = tinycolor(secondColor);\n secondHex8String = \"#\" + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n }\n return \"progid:DXImageTransform.Microsoft.gradient(\" + gradientType + \"startColorstr=\" + hex8String + \",endColorstr=\" + secondHex8String + \")\";\n },\n toString: function toString(format) {\n var formatSet = !!format;\n format = format || this._format;\n var formattedString = false;\n var hasAlpha = this._a < 1 && this._a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === \"name\" && this._a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === \"rgb\") {\n formattedString = this.toRgbString();\n }\n if (format === \"prgb\") {\n formattedString = this.toPercentageRgbString();\n }\n if (format === \"hex\" || format === \"hex6\") {\n formattedString = this.toHexString();\n }\n if (format === \"hex3\") {\n formattedString = this.toHexString(true);\n }\n if (format === \"hex4\") {\n formattedString = this.toHex8String(true);\n }\n if (format === \"hex8\") {\n formattedString = this.toHex8String();\n }\n if (format === \"name\") {\n formattedString = this.toName();\n }\n if (format === \"hsl\") {\n formattedString = this.toHslString();\n }\n if (format === \"hsv\") {\n formattedString = this.toHsvString();\n }\n return formattedString || this.toHexString();\n },\n clone: function clone() {\n return tinycolor(this.toString());\n },\n _applyModification: function _applyModification(fn, args) {\n var color = fn.apply(null, [this].concat([].slice.call(args)));\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this.setAlpha(color._a);\n return this;\n },\n lighten: function lighten() {\n return this._applyModification(_lighten, arguments);\n },\n brighten: function brighten() {\n return this._applyModification(_brighten, arguments);\n },\n darken: function darken() {\n return this._applyModification(_darken, arguments);\n },\n desaturate: function desaturate() {\n return this._applyModification(_desaturate, arguments);\n },\n saturate: function saturate() {\n return this._applyModification(_saturate, arguments);\n },\n greyscale: function greyscale() {\n return this._applyModification(_greyscale, arguments);\n },\n spin: function spin() {\n return this._applyModification(_spin, arguments);\n },\n _applyCombination: function _applyCombination(fn, args) {\n return fn.apply(null, [this].concat([].slice.call(args)));\n },\n analogous: function analogous() {\n return this._applyCombination(_analogous, arguments);\n },\n complement: function complement() {\n return this._applyCombination(_complement, arguments);\n },\n monochromatic: function monochromatic() {\n return this._applyCombination(_monochromatic, arguments);\n },\n splitcomplement: function splitcomplement() {\n return this._applyCombination(_splitcomplement, arguments);\n },\n // Disabled until https://github.com/bgrins/TinyColor/issues/254\n // polyad: function (number) {\n // return this._applyCombination(polyad, [number]);\n // },\n triad: function triad() {\n return this._applyCombination(polyad, [3]);\n },\n tetrad: function tetrad() {\n return this._applyCombination(polyad, [4]);\n }\n };\n\n // If input is an object, force 1 into \"1.0\" to handle ratios properly\n // String input requires \"1.0\" as input, so 1 will be treated as 1\n tinycolor.fromRatio = function (color, opts) {\n if (_typeof(color) == \"object\") {\n var newColor = {};\n for (var i in color) {\n if (color.hasOwnProperty(i)) {\n if (i === \"a\") {\n newColor[i] = color[i];\n } else {\n newColor[i] = convertToPercentage(color[i]);\n }\n }\n }\n color = newColor;\n }\n return tinycolor(color, opts);\n };\n\n // Given a string or object, convert that input to RGB\n // Possible string inputs:\n //\n // \"red\"\n // \"#f00\" or \"f00\"\n // \"#ff0000\" or \"ff0000\"\n // \"#ff000000\" or \"ff000000\"\n // \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n // \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n // \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n // \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n // \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n // \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n // \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n //\n function inputToRGB(color) {\n var rgb = {\n r: 0,\n g: 0,\n b: 0\n };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n if (typeof color == \"string\") {\n color = stringInputToObject(color);\n }\n if (_typeof(color) == \"object\") {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = \"hsv\";\n } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = \"hsl\";\n }\n if (color.hasOwnProperty(\"a\")) {\n a = color.a;\n }\n }\n a = boundAlpha(a);\n return {\n ok: ok,\n format: color.format || format,\n r: Math.min(255, Math.max(rgb.r, 0)),\n g: Math.min(255, Math.max(rgb.g, 0)),\n b: Math.min(255, Math.max(rgb.b, 0)),\n a: a\n };\n }\n\n // Conversion Functions\n // --------------------\n\n // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n // <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>\n\n // `rgbToRgb`\n // Handle bounds / percentage checking to conform to CSS color spec\n // <http://www.w3.org/TR/css3-color/>\n // *Assumes:* r, g, b in [0, 255] or [0, 1]\n // *Returns:* { r, g, b } in [0, 255]\n function rgbToRgb(r, g, b) {\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255\n };\n }\n\n // `rgbToHsl`\n // Converts an RGB color value to HSL.\n // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n // *Returns:* { h, s, l } in [0,1]\n function rgbToHsl(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n l = (max + min) / 2;\n if (max == min) {\n h = s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return {\n h: h,\n s: s,\n l: l\n };\n }\n\n // `hslToRgb`\n // Converts an HSL color value to RGB.\n // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n // *Returns:* { r, g, b } in the set [0, 255]\n function hslToRgb(h, s, l) {\n var r, g, b;\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255\n };\n }\n\n // `rgbToHsv`\n // Converts an RGB color value to HSV\n // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n // *Returns:* { h, s, v } in [0,1]\n function rgbToHsv(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n v = max;\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n if (max == min) {\n h = 0; // achromatic\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return {\n h: h,\n s: s,\n v: v\n };\n }\n\n // `hsvToRgb`\n // Converts an HSV color value to RGB.\n // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n // *Returns:* { r, g, b } in the set [0, 255]\n function hsvToRgb(h, s, v) {\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n var i = Math.floor(h),\n f = h - i,\n p = v * (1 - s),\n q = v * (1 - f * s),\n t = v * (1 - (1 - f) * s),\n mod = i % 6,\n r = [v, q, p, p, t, v][mod],\n g = [t, v, v, q, p, p][mod],\n b = [p, p, t, v, v, q][mod];\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255\n };\n }\n\n // `rgbToHex`\n // Converts an RGB color to hex\n // Assumes r, g, and b are contained in the set [0, 255]\n // Returns a 3 or 6 character hex\n function rgbToHex(r, g, b, allow3Char) {\n var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n\n // Return a 3 character hex if possible\n if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n return hex.join(\"\");\n }\n\n // `rgbaToHex`\n // Converts an RGBA color plus alpha transparency to hex\n // Assumes r, g, b are contained in the set [0, 255] and\n // a in [0, 1]. Returns a 4 or 8 character rgba hex\n function rgbaToHex(r, g, b, a, allow4Char) {\n var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16)), pad2(convertDecimalToHex(a))];\n\n // Return a 4 character hex if possible\n if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n return hex.join(\"\");\n }\n\n // `rgbaToArgbHex`\n // Converts an RGBA color to an ARGB Hex8 string\n // Rarely used, but required for \"toFilter()\"\n function rgbaToArgbHex(r, g, b, a) {\n var hex = [pad2(convertDecimalToHex(a)), pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n return hex.join(\"\");\n }\n\n // `equals`\n // Can be called with any tinycolor input\n tinycolor.equals = function (color1, color2) {\n if (!color1 || !color2) return false;\n return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n };\n tinycolor.random = function () {\n return tinycolor.fromRatio({\n r: Math.random(),\n g: Math.random(),\n b: Math.random()\n });\n };\n\n // Modification Functions\n // ----------------------\n // Thanks to less.js for some of the basics here\n // <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>\n\n function _desaturate(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n }\n function _saturate(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n }\n function _greyscale(color) {\n return tinycolor(color).desaturate(100);\n }\n function _lighten(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n }\n function _brighten(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var rgb = tinycolor(color).toRgb();\n rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));\n rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));\n rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));\n return tinycolor(rgb);\n }\n function _darken(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n }\n\n // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n // Values outside of this range will be wrapped into this range.\n function _spin(color, amount) {\n var hsl = tinycolor(color).toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return tinycolor(hsl);\n }\n\n // Combination Functions\n // ---------------------\n // Thanks to jQuery xColor for some of the ideas behind these\n // <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>\n\n function _complement(color) {\n var hsl = tinycolor(color).toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return tinycolor(hsl);\n }\n function polyad(color, number) {\n if (isNaN(number) || number <= 0) {\n throw new Error(\"Argument to polyad must be a positive number\");\n }\n var hsl = tinycolor(color).toHsl();\n var result = [tinycolor(color)];\n var step = 360 / number;\n for (var i = 1; i < number; i++) {\n result.push(tinycolor({\n h: (hsl.h + i * step) % 360,\n s: hsl.s,\n l: hsl.l\n }));\n }\n return result;\n }\n function _splitcomplement(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [tinycolor(color), tinycolor({\n h: (h + 72) % 360,\n s: hsl.s,\n l: hsl.l\n }), tinycolor({\n h: (h + 216) % 360,\n s: hsl.s,\n l: hsl.l\n })];\n }\n function _analogous(color, results, slices) {\n results = results || 6;\n slices = slices || 30;\n var hsl = tinycolor(color).toHsl();\n var part = 360 / slices;\n var ret = [tinycolor(color)];\n for (hsl.h = (hsl.h - (part * results >> 1) + 720) % 360; --results;) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(tinycolor(hsl));\n }\n return ret;\n }\n function _monochromatic(color, results) {\n results = results || 6;\n var hsv = tinycolor(color).toHsv();\n var h = hsv.h,\n s = hsv.s,\n v = hsv.v;\n var ret = [];\n var modification = 1 / results;\n while (results--) {\n ret.push(tinycolor({\n h: h,\n s: s,\n v: v\n }));\n v = (v + modification) % 1;\n }\n return ret;\n }\n\n // Utility Functions\n // ---------------------\n\n tinycolor.mix = function (color1, color2, amount) {\n amount = amount === 0 ? 0 : amount || 50;\n var rgb1 = tinycolor(color1).toRgb();\n var rgb2 = tinycolor(color2).toRgb();\n var p = amount / 100;\n var rgba = {\n r: (rgb2.r - rgb1.r) * p + rgb1.r,\n g: (rgb2.g - rgb1.g) * p + rgb1.g,\n b: (rgb2.b - rgb1.b) * p + rgb1.b,\n a: (rgb2.a - rgb1.a) * p + rgb1.a\n };\n return tinycolor(rgba);\n };\n\n // Readability Functions\n // ---------------------\n // <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)\n\n // `contrast`\n // Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)\n tinycolor.readability = function (color1, color2) {\n var c1 = tinycolor(color1);\n var c2 = tinycolor(color2);\n return (Math.max(c1.getLuminance(), c2.getLuminance()) + 0.05) / (Math.min(c1.getLuminance(), c2.getLuminance()) + 0.05);\n };\n\n // `isReadable`\n // Ensure that foreground and background color combinations meet WCAG2 guidelines.\n // The third argument is an optional Object.\n // the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';\n // the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.\n // If the entire object is absent, isReadable defaults to {level:\"AA\",size:\"small\"}.\n\n // *Example*\n // tinycolor.isReadable(\"#000\", \"#111\") => false\n // tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\n tinycolor.isReadable = function (color1, color2, wcag2) {\n var readability = tinycolor.readability(color1, color2);\n var wcag2Parms, out;\n out = false;\n wcag2Parms = validateWCAG2Parms(wcag2);\n switch (wcag2Parms.level + wcag2Parms.size) {\n case \"AAsmall\":\n case \"AAAlarge\":\n out = readability >= 4.5;\n break;\n case \"AAlarge\":\n out = readability >= 3;\n break;\n case \"AAAsmall\":\n out = readability >= 7;\n break;\n }\n return out;\n };\n\n // `mostReadable`\n // Given a base color and a list of possible foreground or background\n // colors for that base, returns the most readable color.\n // Optionally returns Black or White if the most readable color is unreadable.\n // *Example*\n // tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n // tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString(); // \"#ffffff\"\n // tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n // tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\n tinycolor.mostReadable = function (baseColor, colorList, args) {\n var bestColor = null;\n var bestScore = 0;\n var readability;\n var includeFallbackColors, level, size;\n args = args || {};\n includeFallbackColors = args.includeFallbackColors;\n level = args.level;\n size = args.size;\n for (var i = 0; i < colorList.length; i++) {\n readability = tinycolor.readability(baseColor, colorList[i]);\n if (readability > bestScore) {\n bestScore = readability;\n bestColor = tinycolor(colorList[i]);\n }\n }\n if (tinycolor.isReadable(baseColor, bestColor, {\n level: level,\n size: size\n }) || !includeFallbackColors) {\n return bestColor;\n } else {\n args.includeFallbackColors = false;\n return tinycolor.mostReadable(baseColor, [\"#fff\", \"#000\"], args);\n }\n };\n\n // Big List of Colors\n // ------------------\n // <https://www.w3.org/TR/css-color-4/#named-colors>\n var names = tinycolor.names = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"0ff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000\",\n blanchedalmond: \"ffebcd\",\n blue: \"00f\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n burntsienna: \"ea7e5d\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"0ff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"f0f\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"789\",\n lightslategrey: \"789\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"0f0\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"f0f\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"f00\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"fff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ff0\",\n yellowgreen: \"9acd32\"\n };\n\n // Make it easy to access colors via `hexNames[hex]`\n var hexNames = tinycolor.hexNames = flip(names);\n\n // Utilities\n // ---------\n\n // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\n function flip(o) {\n var flipped = {};\n for (var i in o) {\n if (o.hasOwnProperty(i)) {\n flipped[o[i]] = i;\n }\n }\n return flipped;\n }\n\n // Return a valid alpha value [0,1] with all invalid values being set to 1\n function boundAlpha(a) {\n a = parseFloat(a);\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n return a;\n }\n\n // Take input from [0, n] and return it as [0, 1]\n function bound01(n, max) {\n if (isOnePointZero(n)) n = \"100%\";\n var processPercent = isPercentage(n);\n n = Math.min(max, Math.max(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if (Math.abs(n - max) < 0.000001) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return n % max / parseFloat(max);\n }\n\n // Force a number between 0 and 1\n function clamp01(val) {\n return Math.min(1, Math.max(0, val));\n }\n\n // Parse a base-16 hex value into a base-10 integer\n function parseIntFromHex(val) {\n return parseInt(val, 16);\n }\n\n // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\n function isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf(\".\") != -1 && parseFloat(n) === 1;\n }\n\n // Check to see if string passed in is a percentage\n function isPercentage(n) {\n return typeof n === \"string\" && n.indexOf(\"%\") != -1;\n }\n\n // Force a hex value to have 2 characters\n function pad2(c) {\n return c.length == 1 ? \"0\" + c : \"\" + c;\n }\n\n // Replace a decimal with it's percentage value\n function convertToPercentage(n) {\n if (n <= 1) {\n n = n * 100 + \"%\";\n }\n return n;\n }\n\n // Converts a decimal to a hex value\n function convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n }\n // Converts a hex value to a decimal\n function convertHexToDecimal(h) {\n return parseIntFromHex(h) / 255;\n }\n var matchers = function () {\n // <http://www.w3.org/TR/css3-values/#integers>\n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // <http://www.w3.org/TR/css3-values/#number-value>\n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n }();\n\n // `isValidCSSUnit`\n // Take in a single string / number and check to see if it looks like a CSS unit\n // (see `matchers` above for definition).\n function isValidCSSUnit(color) {\n return !!matchers.CSS_UNIT.exec(color);\n }\n\n // `stringInputToObject`\n // Permissive string parsing. Take in a number of formats, and output an object\n // based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\n function stringInputToObject(color) {\n color = color.replace(trimLeft, \"\").replace(trimRight, \"\").toLowerCase();\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n } else if (color == \"transparent\") {\n return {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n format: \"name\"\n };\n }\n\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match;\n if (match = matchers.rgb.exec(color)) {\n return {\n r: match[1],\n g: match[2],\n b: match[3]\n };\n }\n if (match = matchers.rgba.exec(color)) {\n return {\n r: match[1],\n g: match[2],\n b: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hsl.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n l: match[3]\n };\n }\n if (match = matchers.hsla.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n l: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hsv.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n v: match[3]\n };\n }\n if (match = matchers.hsva.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n v: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hex8.exec(color)) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if (match = matchers.hex6.exec(color)) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n if (match = matchers.hex4.exec(color)) {\n return {\n r: parseIntFromHex(match[1] + \"\" + match[1]),\n g: parseIntFromHex(match[2] + \"\" + match[2]),\n b: parseIntFromHex(match[3] + \"\" + match[3]),\n a: convertHexToDecimal(match[4] + \"\" + match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if (match = matchers.hex3.exec(color)) {\n return {\n r: parseIntFromHex(match[1] + \"\" + match[1]),\n g: parseIntFromHex(match[2] + \"\" + match[2]),\n b: parseIntFromHex(match[3] + \"\" + match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n return false;\n }\n function validateWCAG2Parms(parms) {\n // return valid WCAG2 parms for isReadable.\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n var level, size;\n parms = parms || {\n level: \"AA\",\n size: \"small\"\n };\n level = (parms.level || \"AA\").toUpperCase();\n size = (parms.size || \"small\").toLowerCase();\n if (level !== \"AA\" && level !== \"AAA\") {\n level = \"AA\";\n }\n if (size !== \"small\" && size !== \"large\") {\n size = \"small\";\n }\n return {\n level: level,\n size: size\n };\n }\n\n return tinycolor;\n\n}));\n","const tinycolor = require('tinycolor2');\n\n/**\n * @typedef {Object} TinyGradient.StopInput\n * @property {ColorInput} color\n * @property {number} pos\n */\n\n/**\n * @typedef {Object} TinyGradient.StepValue\n * @type {number} [r]\n * @type {number} [g]\n * @type {number} [b]\n * @type {number} [h]\n * @type {number} [s]\n * @type {number} [v]\n * @type {number} [a]\n */\n\n/**\n * @type {StepValue}\n */\nconst RGBA_MAX = { r: 256, g: 256, b: 256, a: 1 };\n\n/**\n * @type {StepValue}\n */\nconst HSVA_MAX = { h: 360, s: 1, v: 1, a: 1 };\n\n/**\n * Linearly compute the step size between start and end (not normalized)\n * @param {StepValue} start\n * @param {StepValue} end\n * @param {number} steps - number of desired steps\n * @return {StepValue}\n */\nfunction stepize(start, end, steps) {\n let step = {};\n\n for (let k in start) {\n if (start.hasOwnProperty(k)) {\n step[k] = steps === 0 ? 0 : (end[k] - start[k]) / steps;\n }\n }\n\n return step;\n}\n\n/**\n * Compute the final step color\n * @param {StepValue} step - from `stepize`\n * @param {StepValue} start\n * @param {number} i - color index\n * @param {StepValue} max - rgba or hsva of maximum values for each channel\n * @return {StepValue}\n */\nfunction interpolate(step, start, i, max) {\n let color = {};\n\n for (let k in start) {\n if (start.hasOwnProperty(k)) {\n color[k] = step[k] * i + start[k];\n color[k] = color[k] < 0 ? color[k] + max[k] : (max[k] !== 1 ? color[k] % max[k] : color[k]);\n }\n }\n\n return color;\n}\n\n/**\n * Generate gradient with RGBa interpolation\n * @param {StopInput} stop1\n * @param {StopInput} stop2\n * @param {number} steps\n * @return {tinycolor[]} color1 included, color2 excluded\n */\nfunction interpolateRgb(stop1, stop2, steps) {\n const start = stop1.color.toRgb();\n const end = stop2.color.toRgb();\n const step = stepize(start, end, steps);\n let gradient = [stop1.color];\n\n for (let i = 1; i < steps; i++) {\n const color = interpolate(step, start, i, RGBA_MAX);\n gradient.push(tinycolor(color));\n }\n\n return gradient;\n}\n\n/**\n * Generate gradient with HSVa interpolation\n * @param {StopInput} stop1\n * @param {StopInput} stop2\n * @param {number} steps\n * @param {boolean|'long'|'short'} mode\n * @return {tinycolor[]} color1 included, color2 excluded\n */\nfunction interpolateHsv(stop1, stop2, steps, mode) {\n const start = stop1.color.toHsv();\n const end = stop2.color.toHsv();\n\n // rgb interpolation if one of the steps in grayscale\n if (start.s === 0 || end.s === 0) {\n return interpolateRgb(stop1, stop2, steps);\n }\n\n let trigonometric;\n if (typeof mode === 'boolean') {\n trigonometric = mode;\n }\n else {\n const trigShortest = (start.h < end.h && end.h - start.h < 180) || (start.h > end.h && start.h - end.h > 180);\n trigonometric = (mode === 'long' && trigShortest) || (mode === 'short' && !trigShortest);\n }\n\n const step = stepize(start, end, steps);\n let gradient = [stop1.color];\n\n // recompute hue\n let diff;\n if ((start.h <= end.h && !trigonometric) || (start.h >= end.h && trigonometric)) {\n diff = end.h - start.h;\n }\n else if (trigonometric) {\n diff = 360 - end.h + start.h;\n }\n else {\n diff = 360 - start.h + end.h;\n }\n step.h = Math.pow(-1, trigonometric ? 1 : 0) * Math.abs(diff) / steps;\n\n for (let i = 1; i < steps; i++) {\n const color = interpolate(step, start, i, HSVA_MAX);\n gradient.push(tinycolor(color));\n }\n\n return gradient;\n}\n\n/**\n * Compute substeps between each stops\n * @param {StopInput[]} stops\n * @param {number} steps\n * @return {number[]}\n */\nfunction computeSubsteps(stops, steps) {\n const l = stops.length;\n\n // validation\n steps = parseInt(steps, 10);\n\n if (isNaN(steps) || steps < 2) {\n throw new Error('Invalid number of steps (< 2)');\n }\n if (steps < l) {\n throw new Error('Number of steps cannot be inferior to number of stops');\n }\n\n // compute substeps from stop positions\n let substeps = [];\n\n for (let i = 1; i < l; i++) {\n const step = (steps - 1) * (stops[i].pos - stops[i - 1].pos);\n substeps.push(Math.max(1, Math.round(step)));\n }\n\n // adjust number of steps\n let totalSubsteps = 1;\n for (let n = l - 1; n--;) totalSubsteps += substeps[n];\n\n while (totalSubsteps !== steps) {\n if (totalSubsteps < steps) {\n const min = Math.min.apply(null, substeps);\n substeps[substeps.indexOf(min)]++;\n totalSubsteps++;\n }\n else {\n const max = Math.max.apply(null, substeps);\n substeps[substeps.indexOf(max)]--;\n totalSubsteps--;\n }\n }\n\n return substeps;\n}\n\n/**\n * Compute the color at a specific position\n * @param {StopInput[]} stops\n * @param {number} pos\n * @param {string} method\n * @param {StepValue} max\n * @returns {tinycolor}\n */\nfunction computeAt(stops, pos, method, max) {\n if (pos < 0 || pos > 1) {\n throw new Error('Position must be between 0 and 1');\n }\n\n let start, end;\n for (let i = 0, l = stops.length; i < l - 1; i++) {\n if (pos >= stops[i].pos && pos < stops[i + 1].pos) {\n start = stops[i];\n end = stops[i + 1];\n break;\n }\n }\n\n if (!start) {\n start = end = stops[stops.length - 1];\n }\n\n const step = stepize(start.color[method](), end.color[method](), (end.pos - start.pos) * 100);\n const color = interpolate(step, start.color[method](), (pos - start.pos) * 100, max);\n return tinycolor(color);\n}\n\nclass TinyGradient {\n /**\n * @param {StopInput[]|ColorInput[]} stops\n * @returns {TinyGradient}\n */\n constructor(stops) {\n // validation\n if (stops.length < 2) {\n throw new Error('Invalid number of stops (< 2)');\n }\n\n const havingPositions = stops[0].pos !== undefined;\n let l = stops.length;\n let p = -1;\n let lastColorLess = false;\n // create tinycolor objects and clean positions\n this.stops = stops.map((stop, i) => {\n const hasPosition = stop.pos !== undefined;\n if (havingPositions ^ hasPosition) {\n throw new Error('Cannot mix positionned and not posionned color stops');\n }\n\n if (hasPosition) {\n const hasColor = stop.color !== undefined;\n if (!hasColor && (lastColorLess || i === 0 || i === l - 1)) {\n throw new Error('Cannot define two consecutive position-only stops');\n }\n lastColorLess = !hasColor;\n\n stop = {\n color : hasColor ? tinycolor(stop.color) : null,\n colorLess: !hasColor,\n pos : stop.pos\n };\n\n if (stop.pos < 0 || stop.pos > 1) {\n throw new Error('Color stops positions must be between 0 and 1');\n }\n else if (stop.pos < p) {\n throw new Error('Color stops positions are not ordered');\n }\n p = stop.pos;\n }\n else {\n stop = {\n color: tinycolor(stop.color !== undefined ? stop.color : stop),\n pos : i / (l - 1)\n };\n }\n\n return stop;\n });\n\n if (this.stops[0].pos !== 0) {\n this.stops.unshift({\n color: this.stops[0].color,\n pos : 0\n });\n l++;\n }\n if (this.stops[l - 1].pos !== 1) {\n this.stops.push({\n color: this.stops[l - 1].color,\n pos : 1\n });\n }\n }\n\n /**\n * Return new instance with reversed stops\n * @return {TinyGradient}\n */\n reverse() {\n let stops = [];\n\n this.stops.forEach(function (stop) {\n stops.push({\n color: stop.color,\n pos : 1 - stop.pos\n });\n });\n\n return new TinyGradient(stops.reverse());\n }\n\n /**\n * Return new instance with looped stops\n * @return {TinyGradient}\n */\n loop() {\n let stops1 = [];\n let stops2 = [];\n\n this.stops.forEach((stop) => {\n stops1.push({\n color: stop.color,\n pos : stop.pos / 2\n });\n });\n\n this.stops.slice(0, -1).forEach((stop) => {\n stops2.push({\n color: stop.color,\n pos : 1 - stop.pos / 2\n });\n });\n\n return new TinyGradient(stops1.concat(stops2.reverse()));\n }\n\n /**\n * Generate gradient with RGBa interpolation\n * @param {number} steps\n * @return {tinycolor[]}\n */\n rgb(steps) {\n const substeps = computeSubsteps(this.stops, steps);\n let gradient = [];\n\n this.stops.forEach((stop, i) => {\n if (stop.colorLess) {\n stop.color = interpolateRgb(this.stops[i - 1], this.stops[i + 1], 2)[1];\n }\n });\n\n for (let i = 0, l = this.stops.length; i < l - 1; i++) {\n const rgb = interpolateRgb(this.stops[i], this.stops[i + 1], substeps[i]);\n gradient.splice(gradient.length, 0, ...rgb);\n }\n\n gradient.push(this.stops[this.stops.length - 1].color);\n\n return gradient;\n }\n\n /**\n * Generate gradient with HSVa interpolation\n * @param {number} steps\n * @param {boolean|'long'|'short'} [mode=false]\n * - false to step in clockwise\n * - true to step in trigonometric order\n * - 'short' to use the shortest way\n * - 'long' to use the longest way\n * @return {tinycolor[]}\n */\n hsv(steps, mode) {\n const substeps = computeSubsteps(this.stops, steps);\n let gradient = [];\n\n this.stops.forEach((stop, i) => {\n if (stop.colorLess) {\n stop.color = interpolateHsv(this.stops[i - 1], this.stops[i + 1], 2, mode)[1];\n }\n });\n\n for (let i = 0, l = this.stops.length; i < l - 1; i++) {\n const hsv = interpolateHsv(this.stops[i], this.stops[i + 1], substeps[i], mode);\n gradient.splice(gradient.length, 0, ...hsv);\n }\n\n gradient.push(this.stops[this.stops.length - 1].color);\n\n return gradient;\n }\n\n /**\n * Generate CSS3 command (no prefix) for this gradient\n * @param {String} [mode=linear] - 'linear' or 'radial'\n * @param {String} [direction] - default is 'to right' or 'ellipse at center'\n * @return {String}\n */\n css(mode, direction) {\n mode = mode || 'linear';\n direction = direction || (mode === 'linear' ? 'to right' : 'ellipse at center');\n\n let css = mode + '-gradient(' + direction;\n this.stops.forEach(function (stop) {\n css += ', ' + (stop.colorLess ? '' : stop.color.toRgbString() + ' ') + (stop.pos * 100) + '%';\n });\n css += ')';\n return css;\n }\n\n /**\n * Returns the color at specific position with RGBa interpolation\n * @param {number} pos, between 0 and 1\n * @return {tinycolor}\n */\n rgbAt(pos) {\n return computeAt(this.stops, pos, 'toRgb', RGBA_MAX);\n }\n\n /**\n * Returns the color at specific position with HSVa interpolation\n * @param {number} pos, between 0 and 1\n * @return {tinycolor}\n */\n hsvAt(pos) {\n return computeAt(this.stops, pos, 'toHsv', HSVA_MAX);\n }\n}\n\n/**\n * @param {StopInput[]|ColorInput[]|StopInput...|ColorInput...} stops\n * @returns {TinyGradient}\n */\nmodule.exports = function (stops) {\n // varargs\n if (arguments.length === 1) {\n if (!Array.isArray(arguments[0])) {\n throw new Error('\"stops\" is not an array');\n }\n stops = arguments[0];\n }\n else {\n stops = Array.prototype.slice.call(arguments);\n }\n\n return new TinyGradient(stops);\n};\n","import {\n generatePalette,\n getPalette,\n getTheme,\n type DeepRequired,\n type S2Theme,\n type ThemeCfg,\n} from '@antv/s2';\nimport tinycolor from 'tinycolor2';\nimport tinygradient from 'tinygradient';\nimport {\n BASIC_SHEET_THEME_TYPE_COLOR_RELATIONS,\n DEFAULT_THEME_COLOR_LIST,\n SECONDARY_THEME_COLOR_TYPE_RELATIONS,\n SheetThemeColorType,\n SheetThemeType,\n} from '../../common-extra';\n\ntype ColorThemeGenerateParams = {\n /** 表格主题类型 */\n themeType: SheetThemeType;\n /** 表格颜色类型 */\n colorType: SheetThemeColorType;\n /** 表格自定义颜色值,如 #fff */\n customColor: string;\n};\n\nfunction clearBorderWidth(theme: Record<string, any>) {\n for (const key in theme) {\n if (typeof theme[key] === 'object' && theme[key] !== null) {\n clearBorderWidth(theme[key]);\n } else if (key.includes('BorderWidth')) {\n theme[key] = 0;\n }\n }\n}\n\nfunction getBackgroundColorOpacity(themeColorType: SheetThemeColorType) {\n if (themeColorType === SheetThemeColorType.SECONDARY) {\n return 0.25;\n }\n\n if (themeColorType === SheetThemeColorType.GRAY) {\n return 0.5;\n }\n\n return 0.05;\n}\n\n/**\n * 生成表格对应的主题 schema\n * @param params 生成主题的参数\n * @returns s2 主题配置\n */\nexport function generateColorTheme(\n params: ColorThemeGenerateParams,\n): ThemeCfg['theme'] {\n const {\n themeType: sheetThemeType,\n colorType: sheetThemeColorType,\n customColor: sheetThemeCustomColor,\n } = params;\n\n let themePalette: ThemeCfg['palette'];\n\n if (sheetThemeColorType === SheetThemeColorType.GRAY) {\n themePalette = getPalette('gray');\n } else {\n let brandColor =\n sheetThemeColorType === SheetThemeColorType.CUSTOM\n ? sheetThemeCustomColor ?? DEFAULT_THEME_COLOR_LIST[0]\n : '#326EF4';\n\n if (sheetThemeColorType === SheetThemeColorType.SECONDARY) {\n brandColor = tinygradient([\n { color: brandColor, pos: 0 },\n { color: 'white', pos: 1 },\n ])\n .rgbAt(0.8)\n .toHexString();\n }\n\n if (sheetThemeType === SheetThemeType.DEFAULT) {\n themePalette = getPalette('default');\n } else if (sheetThemeType === SheetThemeType.BASIC) {\n themePalette = generatePalette({\n ...getPalette('colorful'),\n brandColor,\n basicColorRelations: BASIC_SHEET_THEME_TYPE_COLOR_RELATIONS,\n });\n } else {\n const palette = { ...getPalette('colorful') };\n\n if (sheetThemeColorType === SheetThemeColorType.SECONDARY) {\n palette.basicColorRelations = SECONDARY_THEME_COLOR_TYPE_RELATIONS;\n }\n\n themePalette = generatePalette({\n ...palette,\n brandColor,\n });\n }\n }\n\n const baseTheme = getTheme({\n palette: themePalette,\n }) as DeepRequired<S2Theme>;\n\n if (sheetThemeType === SheetThemeType.NORMAL) {\n const dataCellBgColor = baseTheme.dataCell.cell.backgroundColor;\n\n baseTheme.dataCell.cell.crossBackgroundColor = dataCellBgColor;\n baseTheme.rowCell.cell.backgroundColor = dataCellBgColor;\n } else if (sheetThemeType === SheetThemeType.BASIC) {\n const dataCellBgColor = baseTheme.dataCell.cell.backgroundColor;\n\n baseTheme.dataCell.cell.crossBackgroundColor = dataCellBgColor;\n baseTheme.cornerCell.cell.backgroundColor = dataCellBgColor;\n baseTheme.rowCell.cell.backgroundColor = dataCellBgColor;\n baseTheme.colCell.cell.backgroundColor = dataCellBgColor;\n baseTheme.splitLine.verticalBorderColorOpacity = 1;\n baseTheme.splitLine.horizontalBorderColorOpacity = 1;\n const rowBorderColor = baseTheme.rowCell.cell.verticalBorderColor;\n\n baseTheme.cornerCell.cell.horizontalBorderColor = rowBorderColor;\n baseTheme.cornerCell.cell.verticalBorderColor = rowBorderColor;\n baseTheme.colCell.cell.horizontalBorderColor = rowBorderColor;\n baseTheme.colCell.cell.verticalBorderColor = rowBorderColor;\n } else if (sheetThemeType === SheetThemeType.ZEBRA) {\n clearBorderWidth(baseTheme);\n baseTheme.rowCell.text.fontWeight = `bold`;\n const backgroundColorSettings = {\n crossBackgroundColor: `#FFFFFF`,\n backgroundColor: baseTheme.colCell.cell.backgroundColor,\n backgroundColorOpacity: getBackgroundColorOpacity(sheetThemeColorType),\n };\n\n baseTheme.dataCell.cell = {\n ...baseTheme.dataCell.cell,\n ...backgroundColorSettings,\n };\n const zebraFontColor = `#1D2129`;\n\n baseTheme.dataCell.text.fill = zebraFontColor;\n baseTheme.dataCell.bolderText.fill = zebraFontColor;\n\n baseTheme.rowCell.cell = {\n ...baseTheme.rowCell.cell,\n ...backgroundColorSettings,\n };\n baseTheme.rowCell.text.fill = zebraFontColor;\n baseTheme.rowCell.bolderText.fill = zebraFontColor;\n if (\n sheetThemeColorType === SheetThemeColorType.SECONDARY ||\n sheetThemeColorType === SheetThemeColorType.GRAY\n ) {\n const zebraFontColor80 = tinycolor(zebraFontColor)\n .setAlpha(0.8)\n .toRgbString();\n\n baseTheme.colCell.text.fill = zebraFontColor80;\n baseTheme.colCell.bolderText.fill = zebraFontColor80;\n }\n }\n\n return baseTheme;\n}\n","<script setup lang=\"ts\">\nimport { S2_PREFIX_CLS, i18n, type S2Theme } from '@antv/s2';\nimport { Popover } from 'ant-design-vue';\nimport { h, ref, watch, computed } from 'vue';\nimport { RadioGroup, ResetGroup, TooltipWrapper } from '../common';\nimport {\n SheetThemeColorType,\n SheetThemeType,\n DEFAULT_THEME_COLOR_LIST,\n} from '../../common-extra';\nimport ColorBox from './ColorBox.vue';\nimport {\n BasicThemeIcon,\n ColorfulThemeIcon,\n HierarchyGridTypeIcon,\n HierarchyTreeTypeIcon,\n NormalThemeIcon,\n ZebraThemeIcon,\n} from './icons';\nimport type { ThemePanelOptions } from './interface';\nimport { generateColorTheme } from './utils';\n\nconst PRE_CLASS = `${S2_PREFIX_CLS}-theme-panel`;\n\nconst props = withDefaults(\n defineProps<{\n title?: string;\n maxHistoryColorCount?: number;\n disableCustomPrimaryColorPicker?: boolean;\n defaultOptions?: Partial<ThemePanelOptions>;\n defaultCollapsed?: boolean;\n }>(),\n {\n title: () => i18n('主题风格'),\n maxHistoryColorCount: 5,\n disableCustomPrimaryColorPicker: false,\n defaultCollapsed: false,\n },\n);\n\nconst emit = defineEmits<{\n change: [options: ThemePanelOptions, theme: S2Theme];\n reset: [\n options: ThemePanelOptions,\n prevOptions: ThemePanelOptions,\n theme: S2Theme,\n ];\n}>();\n\nconst options = ref<ThemePanelOptions>({\n hierarchyType: 'grid',\n themeType: SheetThemeType.DEFAULT,\n colorType: SheetThemeColorType.PRIMARY,\n ...props.defaultOptions,\n});\n\nconst defaultOptionsRef = ref<ThemePanelOptions>({ ...options.value });\nconst customColor = ref<string>(DEFAULT_THEME_COLOR_LIST[0]);\n\nconst onResetClick = () => {\n const theme = generateColorTheme({\n themeType: defaultOptionsRef.value.themeType as SheetThemeType,\n colorType: defaultOptionsRef.value.colorType as SheetThemeColorType,\n customColor: customColor.value,\n });\n const prevOptions = { ...options.value };\n\n options.value = { ...defaultOptionsRef.value };\n emit('reset', defaultOptionsRef.value, prevOptions, theme as S2Theme);\n};\n\nconst onOptionsChange = (field: keyof ThemePanelOptions, value: any) => {\n options.value = {\n ...options.value,\n [field]: value,\n };\n};\n\nwatch(\n [options, customColor],\n () => {\n const theme = generateColorTheme({\n themeType: options.value.themeType as SheetThemeType,\n colorType: options.value.colorType as SheetThemeColorType,\n customColor: customColor.value,\n });\n\n emit('change', options.value, theme as S2Theme);\n },\n { deep: true },\n);\n\nconst hierarchyTypeOptions = computed(() => {\n return [\n { label: i18n('平铺'), value: 'grid', component: HierarchyGridTypeIcon },\n { label: i18n('树状'), value: 'tree', component: HierarchyTreeTypeIcon },\n ].map(({ label, value, component: Component }) => ({\n label: h(TooltipWrapper, { title: label }, () =>\n h(Component, { active: options.value.hierarchyType === value }),\n ),\n value,\n }));\n});\n\nconst themeTypeOptions = computed(() => {\n return [\n {\n label: i18n('多彩风'),\n value: SheetThemeType.COLORFUL,\n component: ColorfulThemeIcon,\n },\n {\n label: i18n('简约风'),\n value: SheetThemeType.NORMAL,\n component: NormalThemeIcon,\n },\n {\n label: i18n('极简风'),\n value: SheetThemeType.BASIC,\n component: BasicThemeIcon,\n },\n {\n label: i18n('斑马纹风'),\n value: SheetThemeType.ZEBRA,\n component: ZebraThemeIcon,\n },\n ].map(({ label, value, component: Component }) => ({\n label: h(TooltipWrapper, { title: label }, () =>\n h(Component, { active: options.value.themeType === value }),\n ),\n value,\n }));\n});\n\nconst colorTypeOptions = computed(() => {\n const defaultOptions = [\n { label: i18n('深色主题'), value: SheetThemeColorType.PRIMARY },\n { label: i18n('浅色主题'), value: SheetThemeColorType.SECONDARY },\n { label: i18n('灰色'), value: SheetThemeColorType.GRAY },\n ];\n\n if (props.disableCustomPrimaryColorPicker) {\n return defaultOptions;\n }\n\n return [\n ...defaultOptions,\n { label: i18n('自定义'), value: SheetThemeColorType.CUSTOM },\n ];\n});\n\nconst showCustomColorSection = computed(() => {\n return (\n options.value.colorType === SheetThemeColorType.CUSTOM &&\n !props.disableCustomPrimaryColorPicker\n );\n});\n\nconst handleHierarchyChange = (e: any) => {\n onOptionsChange('hierarchyType', e.target.value);\n};\n\nconst handleThemeChange = (e: any) => {\n onOptionsChange('themeType', e.target.value);\n};\n\nconst handleColorChange = (e: any) => {\n onOptionsChange('colorType', e.target.value);\n};\n</script>\n\n<template>\n <ResetGroup\n :title=\"title\"\n :defaultCollapsed=\"defaultCollapsed\"\n :class=\"PRE_CLASS\"\n @reset=\"onResetClick\"\n >\n <slot />\n <RadioGroup\n :label=\"i18n('类型')\"\n optionType=\"button\"\n :value=\"options.hierarchyType\"\n :options=\"hierarchyTypeOptions\"\n onlyIcon\n @change=\"handleHierarchyChange\"\n />\n <RadioGroup\n :label=\"i18n('主题')\"\n optionType=\"button\"\n :value=\"options.themeType\"\n :options=\"themeTypeOptions\"\n onlyIcon\n @change=\"handleThemeChange\"\n />\n <RadioGroup\n :label=\"i18n('主色系')\"\n optionType=\"button\"\n :value=\"options.colorType\"\n :options=\"colorTypeOptions\"\n @change=\"handleColorChange\"\n >\n <template #extra v-if=\"showCustomColorSection\">\n <div :class=\"`${PRE_CLASS}-custom-color`\">\n <div>\n <span :class=\"`${PRE_CLASS}-custom-color-title`\">\n {{ i18n('自定义颜色') }}\n </span>\n <Popover placement=\"rightTop\" trigger=\"click\">\n <template #content>\n <div\n style=\"\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n max-width: 160px;\n \"\n >\n <ColorBox\n v-for=\"color in DEFAULT_THEME_COLOR_LIST\"\n :key=\"color\"\n :color=\"color\"\n @click=\"customColor = color\"\n />\n </div>\n </template>\n <ColorBox :color=\"customColor\" />\n </Popover>\n </div>\n </div>\n </template>\n </RadioGroup>\n </ResetGroup>\n</template>\n\n<style lang=\"less\">\n@import '@antv/s2/esm/styles/variables.less';\n\n.@{s2-cls-prefix}-theme-panel {\n width: 340px;\n\n &-custom-color {\n margin-top: 8px;\n\n &-title {\n margin-right: 8px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n }\n }\n}\n</style>\n","import './utils/extendLocale';\n\nexport * from './common-extra';\nexport * from './components';\nexport * from './components-extra';\nexport { useSpreadSheetInstance } from './context/SpreadSheetContext';\nexport * from './hooks/useExpose';\n\nexport const version = '@antv/s2-vue-v2.2.0-beta.1';\n"],"names":["extendLocale","Locale","DEFAULT_THEME_COLOR_LIST","BASIC_SHEET_THEME_TYPE_COLOR_RELATIONS","SECONDARY_THEME_COLOR_TYPE_RELATIONS","HISTORY_COLOR_LIST_STORAGE_KEY","S2_PREFIX_CLS","HISTORY_COLOR_LIST_MAX_COUNT","SheetThemeColorType","SheetThemeType","_sfc_main$N","defineComponent","TOOLTIP_PREFIX_CLS","i18n","_ctx","_cache","$props","$setup","$data","$options","_createElementBlock","_sfc_main$M","_openBlock","_Fragment","_renderList","item","index","_normalizeClass","_toDisplayString","_sfc_main$L","props","colsText","computed","rowsText","separator","_b","_a","_d","_c","_sfc_main$K","_sfc_render","infos","_sfc_main$J","svgIcon","getIcon","iconStyle","style","isStringIcon","_normalizeStyle","icon","_hoisted_1","_sfc_main$I","TooltipIcon","_resolveComponent","_component_TooltipIcon","name","text","content","_createCommentVNode","_renderSlot","_createBlock","_resolveDynamicComponent","_hoisted_2","_sfc_main$H","tips","_sfc_main$G","reduce","pre","next","size","summaryInfo","summary","_sfc_main$F","menu","_sfc_main$E","cell","isEmpty","Menu","TooltipOperatorTitle","onMenuTitleClick","_withCtx","_createVNode","subMenu","_component_TooltipOperatorMenu","_component_MenuItem","_sfc_main$D","onMenuClick","menuInfo","Dropdown","TooltipOperatorMenu","onlyShowOperator","_component_TooltipOperatorTitle","_sfc_main$C","operator","getTooltipDefaultOptions","TooltipDescription","TooltipDetail","TooltipHeadInfo","TooltipInfos","TooltipInterpretation","TooltipSimpleTips","TooltipSummary","TooltipOperator","_component_TooltipDescription","_component_TooltipOperator","data","_f","_e","_component_TooltipSummary","_h","_component_TooltipInterpretation","_n","_m","_r","_q","_t","_s","_component_TooltipDetail","_v","_component_TooltipInfos","CustomTooltip","BaseTooltip","spreadsheet","tooltip","showOptions","tooltipProps","__spreadProps","__spreadValues","tooltipVNode","createVNode","TooltipComponent","render","DEFAULT_PAGE_NUMBER","DEFAULT_PAGE_SIZE","usePagination","s2Ref","paginationCfg","showPagination","current","ref","pageSize","total","change","nextCurrent","showSizeChange","nextPageSize","visible","watch","__async","nextPagination","value","oldValue","onCleanup","totalUpdateCallback","S2Event","omit","PRE_CLASS","_sfc_main$B","AntDPagination","_component_AntDPagination","_mergeProps","showQuickJumper","customOptions","_","_createElementVNode","S2_INSTANCE_KEY","provideSpreadSheet","instance","provide","useSpreadSheetInstance","inject","shallowRef","RENDER_TOOLTIP_OPTION","getSheetComponentOptions","options","getBaseSheetComponentOptions","useCellEvent","emit","eventName","emitName","handler","event","param","getBaseCellData","useS2Event","params","useEvents","onMounted","useLoading","loadingProp","loading","setLoading","updated","newLoading","s2","useResize","dom","unobserve","adaptive","createResizeObserver","useSheetUpdate","hooks","updateFlag","reactive","prevOptions","isProxy","dataCfg","prevDataCfg","_g","themeCfg","flag","defaultRenderOptions","renderOptions","useSpreadSheet","sheetType","customSpreadSheet","onS2Mounted","loadingRef","toRef","wrapperRef","containerRef","pagination","renderSpreadSheet","container","rawDataCfg","toRaw","rawOptions","s2Options","TableSheet","PivotChartSheet","PivotSheet","buildSpreadSheet","onBeforeUnmount","initBaseSheetProps","initDrillDownProps","initDrillDownEmits","initBaseSheetEmits","_sfc_main$A","ctx","s2RefComputed","handlePageChange","isBoolean","handlePageSizeChange","nextSize","Spin","S2Pagination","_component_Spin","_component_S2Pagination","useExpose","expose","_sfc_main$z","chartOptions","customThemeCfg","toRefs","defaultOptions","customMerge","defaultTheme","BaseSheet","_component_BaseSheet","GridAnalysisSheetDataCell","DataCell","drawCustomContent","FONT_SIZE","GridAnalysisTheme","FONT_FAMILY","isWindows","_sfc_main$y","viewMeta","s2ThemeCfg","_sfc_main$x","_sfc_main$w","_sfc_main$v","_sfc_main$u","_sfc_main$t","Button","Input","Empty","MenuItem","LocationIcon","TextIcon","CalendarIcon","dataSet","disabledFields","getDrillFields","setDrillFields","className","getOptions","val","selected","e","reg","result","key","DRILL_DOWN_PRE_CLASS","title","handleClear","_component_Input","handleSearch","_component_Empty","_component_Menu","handleSelect","option","_component_LocationIcon","_sfc_main$s","pivotOptions","partDrillDown","drillFields","fields","handleDrillDown","onDrillDownIconClick","drillDownNode","DrillDown","buildDrillDownOptions","StrategySheetColCell","ColCell","meta","headerConfig","safeJsonParse","isArray","formattedValue","displayValues","StrategySheetDataCell","StrategySheetDataSet","CustomGridPivotDataSet","keys","isObject","EMPTY_EXTRA_FIELD_PLACEHOLDER","updatedDataCfg","newMeta","EXTRA_FIELD","_sfc_main$r","strategySheetOptions","shouldHideValue","node","spreadSheet","_sfc_main$q","_sfc_main$p","startCell","maskPosition","dragPoint","lastHoverPoint","isInCell","point","cellMeta","pick","scrollOffset","sampleColNode","sampleColNodeHeight","pointX","pointY","scrollOffsetY","cellMaxX","cellMinX","cellMaxY","cellMinY","judgePointInView","rect","frozenGroupAreas","viewMinX","viewMaxX","viewMinY","FrozenGroupArea","viewMaxY","getCurrentHoverCell","dataCell","getSelectedCellRange","start","end","startCellMeta","endCellMeta","minX","maxX","maxY","minY","itemMeta","dragMove","throttle","targetCell","newX","newY","selectedRange","v","InteractionStateName","dragMouseUp","displayData","fieldValue","changedCells","rowIndex","valueField","dragMouseDown","get","top","left","pointElement","onUnmounted","_sfc_main$o","DragCopyMask","scroll","position","handleScroll","newScroll","isEqual","vWidth","hWidth","pointWidth","overflow","fixPosition","eventCell","batchSelected","onCopyFinished","bindEvents","unbindEvents","newS2","oldS2","pointStyle","buildEditProps","_sfc_main$n","originOptions","inputRef","inputValue","inputStyle","setInputStyle","cellPosition","isNil","cellLeft","cellTop","cellWidth","cellHeight","inSight","onDataCellDbClick","onSave","target","id","inputVal","DragCopyPoint","_sfc_main$m","EditableSheet","ChartSheet","GridAnalysisSheet","StrategySheet","_sfc_main$l","shouldHide","cellName","m","customLabel","isFunction","cellValue","tooltipCls","_sfc_main$k","metaFieldValue","rowDescription","rowName","defaultRowName","colLeafNode","derivedLabels","labels","valuesCfg","values","firstValues","first","originalValues","originalValuesField","firstOriginal","emptyPlaceholder","getEmptyPlaceholder","shouldShowOriginalValue","getDerivedValueInfo","derivedValue","isUnchanged","isUnchangedValue","isUp","isUpDataValue","isDown","originalDerivedValue","_hoisted_3","_hoisted_4","i","renderDerivedValue","_sfc_main$j","description","field","extra","__props","__emit","moveToTopHandler","res","moveUpHandler","moveDownHandler","_unref","Card","ADVANCED_SORT_PRE_CLS","VerticalAlignTopOutlined","DownOutlined","UpOutlined","Sider","Content","Layout","isSortVisible","isCustomVisible","ruleList","rules","manualDimensionList","dimensionList","sortBy","currentDimension","formRef","formData","SORT_RULE_OPTIONS","getSortRuleOptions","SORT_METHOD","getSortMethod","handleModal","sortClick","handleCustom","handleDimension","dimension","find","filter","handleCustomSort","splitOrders","correctDimension","uniq","list","customSort","map","customCancel","deleteRule","originalDimension","onFinish","ruleValues","currentSortParams","formValues","forEach","r","sortMethod","rule","currentSortBy","safeRule","includes","TOTAL_VALUE","getDimensionList","sortParam","getManualDimensionList","rows","columns","getRuleOptions","getRuleList","sortFieldId","sortByMeasure","initRuleList","manualDimensions","initDimensionList","initRuleOptions","newFormData","toUpper","onSplitOrdersChange","orders","OrderedListOutlined","Modal","$event","Form","Select","Cascader","Radio","method","_createTextVNode","DeleteOutlined","CustomSort","classNames","handleChange","ARadioGroup","handleClick","ReloadOutlined","ACTIVE_KEY","activeKey","handleResetClick","Collapse","isActive","CaretRightOutlined","CollapsePanel","ResetButton","Tooltip","ColIcon","h","RowIcon","ValueIcon","DRILL_DOWN_ICON_MAP","newItem","info","selectedKeys","menuItems","SearchOutlined","getData","split","isFormat","getPlainData","asyncGetAllPlainData","getAllData","asyncGetAllData","copyData","TAB_SEPARATOR","copyToClipboard","error","downloadData","CSV_SEPARATOR","download","MoreOutlined","Export","strategyCopy","_createSlots","$slots","onDebounceChange","debounce","nextValue","newValue","InputNumber","defaultOptionsRef","onResetClick","onRowHeaderChange","BASE_FROZEN_CONFIG","isFieldEnabled","getLeadingCount","getTrailingCount","onGroupChange","onCheckboxChange","checked","onLeadingChange","onTrailingChange","ResetGroup","Checkbox","config","FrozenInputNumber","SWITCHER_PREFIX_CLS","FieldType","DroppableType","SWITCHER_FIELDS","getSwitcherConfig","allowExchangeHeader","getSwitcherClassName","getClassNameWithPrefix","getMainLayoutClassName","shouldCrossRows","type","checkItem","source","parentId","targetIndex","newSource","generateSwitchResult","state","generateFieldResult","items","flattenValues","flatten","children","rest","__objRest","allItems","hideItems","getSwitcherState","mapValues","ownKeys","object","enumerableOnly","symbols","sym","_objectSpread2","_defineProperty","_typeof","obj","_extends","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","version","userAgent","pattern","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","on","el","fn","off","matches","selector","getParentOrHost","closest","includeCTX","R_SPACE","toggleClass","css","prop","matrix","selfOnly","appliedTransforms","transform","matrixFn","tagName","iterator","n","getWindowScrollingElement","scrollingElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","elRect","bottom","right","height","width","containerRect","elMatrix","scaleX","scaleY","isScrolledPast","elSide","parentSide","parent","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","includeDragEl","currentChild","Sortable","lastChild","last","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","indexOfObject","arr","includeSelf","elem","gotSelf","elemCSS","extend","dst","src","isRectEqual","rect1","rect2","_throttleTimeout","callback","ms","args","_this","cancelThrottle","scrollBy","x","y","clone","Polymer","$","getChildContainingRectFromElement","ghostEl","child","_rect$left","_rect$top","_rect$right","_rect$bottom","childRect","expando","AnimationStateManager","animationStates","animationCallbackId","fromRect","childMatrix","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","calculateRealTime","currentRect","duration","translateX","translateY","repaint","plugins","defaults","PluginManager","plugin","p","sortable","evt","eventNameGlobal","pluginName","initialized","modified","eventProperties","modifiedValue","dispatchEvent","_ref","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","allEventProperties","_excluded","pluginEvent","dragEl","parentEl","nextEl","lastDownEl","cloneHidden","moved","_hideGhostForTarget","_unhideGhostForTarget","_dispatchEvent","activeGroup","awaitingDragStarted","ignoreNextClick","sortables","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","pastFirstInvertThresh","isCircumstantialInvert","targetMoveDistance","ghostRelativeParent","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","_detectDirection","elCSS","elWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","secondChildWidth","touchingSideChild2","_dragElInRowColumn","dragRect","targetRect","vertical","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_detectNearestEmptySortable","ret","threshold","insideHorizontally","insideVertically","_prepareGroup","toFn","pull","to","from","sameGroup","otherGroup","group","originalGroup","nearestEmptyInsertDetectEvent","nearest","_checkOutsideTargetEl","dataTransfer","preventOnFilter","touch","originalTarget","_saveInputCheckedState","criteria","ownerDocument","dragStartFn","_disableDraggable","_nextTick","err","fallback","inserted","fallbackTolerance","fallbackOffset","ghostMatrix","relativeScrollOffset","dx","dy","cssMatrix","revert","activeSortable","isOwner","canSort","fromSortable","completedFired","dragOverEvent","completed","after","_onMove","changed","capture","insertion","elLastChild","_ghostIsLast","_ghostIsFirst","firstChild","direction","targetBeforeFirstSwap","differentLevel","differentRowCol","side1","scrolledPastTop","scrollBefore","_getSwapDirection","sibling","dragIndex","nextSibling","moveVector","_unsilent","_cancelNextTick","_globalDragOver","order","_generateId","useAnimation","store","willInsertAfter","onMoveFn","retVal","firstElRect","childContainingRect","spacer","lastElRect","swapThreshold","invertedSwapThreshold","invertSwap","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","str","sum","root","inputs","idx","element","_len","_key","autoScrolls","scrollEl","scrollRootEl","scrolling","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","AutoScrollPlugin","AutoScroll","_ref2","clearPointerElemChangedInterval","clearAutoScrolls","autoScroll","ogElemScroller","newElem","isFallback","sens","speed","scrollThisInstance","scrollCustomFn","layersOut","currentParent","canScrollX","canScrollY","scrollWidth","scrollHeight","scrollPosX","scrollPosY","vx","vy","scrollOffsetX","drop","dispatchSortableEvent","hideGhostForTarget","unhideGhostForTarget","toSortable","Revert","_ref3","Remove","_ref4","parentSortable","textClassName","onChange","onVisibleItemChange","fieldType","mainClass","itemClass","SingleItem","CLASS_NAME_PREFIX","expandChildren","enabled","draggableRef","sortableInstance","onUpdateExpand","isDragDisabled","initSortable","newItems","movedItem","DimensionItem","switcherConfig","defaultState","draggingItemId","onReset","onConfirm","updatedState","isNothingChanged","displayFieldItems","onCancel","Dimension","onToggleVisible","open","onSubmit","overlayClassName","defaultTitle","renderIcon","SwapOutlined","SwitcherContent","LeftAlignIcon","active","fill","opacity","CenterAlignIcon","RightAlignIcon","generateCellTextAlignTheme","colCellAlignType","rowCellAlignType","dataCellAlignType","theme","onOptionsChange","newOptions","getCellAlignOptions","label","Component","TooltipWrapper","RadioGroup","HierarchyGridTypeIcon","fillOpacity","HierarchyTreeTypeIcon","ColorfulThemeIcon","borderFill","stripeFill","NormalThemeIcon","gridFill","BasicThemeIcon","ZebraThemeIcon","trimLeft","trimRight","tinycolor","color","opts","rgb","inputToRGB","RsRGB","GsRGB","BsRGB","R","G","B","boundAlpha","hsv","rgbToHsv","s","hsl","rgbToHsl","allow3Char","rgbToHex","allow4Char","rgbaToHex","bound01","hexNames","secondColor","hex8String","rgbaToArgbHex","secondHex8String","gradientType","format","formatSet","formattedString","hasAlpha","needsAlphaFormat","_lighten","_brighten","_darken","_desaturate","_saturate","_greyscale","_spin","_analogous","_complement","_monochromatic","_splitcomplement","polyad","newColor","convertToPercentage","a","l","ok","stringInputToObject","isValidCSSUnit","rgbToRgb","hsvToRgb","hslToRgb","g","b","max","min","hue2rgb","q","t","f","mod","hex","pad2","convertDecimalToHex","color1","color2","amount","clamp01","hue","number","step","results","slices","part","modification","rgb1","rgb2","rgba","c1","c2","wcag2","readability","wcag2Parms","out","validateWCAG2Parms","baseColor","colorList","bestColor","bestScore","includeFallbackColors","level","names","flip","o","flipped","isOnePointZero","processPercent","isPercentage","parseIntFromHex","c","d","convertHexToDecimal","matchers","CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","named","match","parms","global","factory","module","this","require$$0","RGBA_MAX","HSVA_MAX","stepize","steps","k","interpolate","interpolateRgb","stop1","stop2","gradient","interpolateHsv","mode","trigonometric","trigShortest","diff","computeSubsteps","stops","substeps","totalSubsteps","computeAt","pos","TinyGradient","havingPositions","lastColorLess","stop","hasPosition","hasColor","stops1","stops2","tinygradient","clearBorderWidth","getBackgroundColorOpacity","themeColorType","generateColorTheme","sheetThemeType","sheetThemeColorType","sheetThemeCustomColor","themePalette","getPalette","brandColor","generatePalette","palette","baseTheme","getTheme","dataCellBgColor","rowBorderColor","backgroundColorSettings","zebraFontColor","zebraFontColor80","customColor","hierarchyTypeOptions","themeTypeOptions","colorTypeOptions","showCustomColorSection","handleHierarchyChange","handleThemeChange","handleColorChange","Popover","ColorBox"],"mappings":"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","x_google_ignoreList":[64,75,76,77]}