@canvas-components/react-pivot-table 0.1.8 → 0.2.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.
- package/README.md +118 -0
- package/assets/react-pivot-table-demo.gif +0 -0
- package/dist/index.cjs +26 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +26 -3
- package/dist/index.js.map +1 -1
- package/package.json +6 -5
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/features/context-menu/pivot-context-menu.tsx","../src/features/tooltip/pivot-tooltip.tsx","#style-inject:#style-inject","../src/features/field-panel/pivot-field-panel.css","../src/features/field-panel/pivot-field-panel.tsx","../src/features/chart/pivot-chart-data.ts","../src/features/titlebar/pivot-titlebar.css","../src/features/titlebar/pivot-titlebar.tsx","../src/features/chart/pivot-chart-panel.css","../src/features/chart/pivot-chart-panel.tsx","../src/components/react-pivot-table.tsx"],"names":["jsx","useState","jsxs","ReactPopup","rowPath","useRef","useMemo","resolvePivotDimensionKey","useEffect","Fragment","ReactResizablePanels"],"mappings":"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","file":"index.js","sourcesContent":["import { useRef, useState } from \"react\";\nimport {\n ReactInputNumber,\n ReactPopup,\n} from \"@canvas-components/react-components\";\nimport type { PivotContextMenuRequest } from \"@canvas-components/pivot-table\";\n\n/** PivotTable 值区右键菜单。 */\nexport function PivotContextMenu(props: {\n request: PivotContextMenuRequest | null;\n}) {\n const { request } = props;\n if (!request) return null;\n return (\n <ReactPopup\n open\n anchorRect={{ x: request.x, y: request.y, width: 0, height: 0 }}\n offset={4}\n matchAnchorWidth={false}\n minWidth={180}\n onOpenChange={(open) => {\n if (!open) request.onClose();\n }}\n surfaceStyle={{ padding: 6 }}\n >\n <div style={{ display: \"grid\", minWidth: 180 }}>\n <MenuButton\n label=\"复制单元格\"\n onClick={request.onCopy}\n close={request.onClose}\n />\n {request.onCopySelection ? (\n <MenuButton\n label=\"复制选区\"\n onClick={request.onCopySelection}\n close={request.onClose}\n />\n ) : null}\n <CustomSelectionMenu\n key={`${request.x}-${request.y}`}\n request={request}\n />\n <MenuButton\n label=\"导出 CSV\"\n onClick={request.onExportCsv}\n close={request.onClose}\n />\n <MenuButton\n label=\"导出 XLSX\"\n onClick={request.onExportXlsx}\n close={request.onClose}\n />\n <div style={{ padding: \"8px 10px\", color: \"#8f959e\", fontSize: 12 }}>\n 下钻记录 {request.recordCount} 条\n </div>\n </div>\n </ReactPopup>\n );\n}\n\nfunction CustomSelectionMenu(props: { request: PivotContextMenuRequest }) {\n const { request } = props;\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const [open, setOpen] = useState(false);\n const [range, setRange] = useState(\n request.customSelection ?? {\n startRow: 1,\n startColumn: 1,\n endRow: 1,\n endColumn: 1,\n rowCount: 0,\n columnCount: 0,\n },\n );\n if (!request.customSelection || !request.onCopyCustomSelection) return null;\n\n const update = (\n key: \"startRow\" | \"startColumn\" | \"endRow\" | \"endColumn\",\n value: number | null,\n ) => {\n setRange((current) => ({\n ...current,\n [key]: value == null ? 1 : Math.floor(value),\n }));\n };\n\n return (\n <div>\n <button\n ref={triggerRef}\n type=\"button\"\n onClick={() => setOpen((value) => !value)}\n style={menuButtonStyle}\n >\n 复制自定义选区\n </button>\n <ReactPopup\n open={open}\n anchorRef={triggerRef}\n placement=\"rightTop\"\n offset={2}\n minWidth={250}\n onOpenChange={setOpen}\n surfaceStyle={{ padding: 6, width: 250 }}\n >\n <div style={{ padding: 6 }}>\n <div style={{ color: \"#6b7280\", fontSize: 12, marginBottom: 6 }}>\n 输入起始位置和结束位置\n </div>\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"38px 1fr 1fr\",\n gap: 6,\n marginBottom: 4,\n color: \"#6b7280\",\n fontSize: 12,\n textAlign: \"center\",\n }}\n >\n <span />\n <span>行</span>\n <span>列</span>\n </div>\n <CustomSelectionRow\n label=\"起始\"\n row={range.startRow}\n column={range.startColumn}\n maxRow={range.rowCount}\n maxColumn={range.columnCount}\n onRowChange={(value) => update(\"startRow\", value)}\n onColumnChange={(value) => update(\"startColumn\", value)}\n />\n <CustomSelectionRow\n label=\"结束\"\n row={range.endRow}\n column={range.endColumn}\n maxRow={range.rowCount}\n maxColumn={range.columnCount}\n onRowChange={(value) => update(\"endRow\", value)}\n onColumnChange={(value) => update(\"endColumn\", value)}\n />\n <button\n type=\"button\"\n style={{\n display: \"block\",\n width: \"100%\",\n height: 32,\n marginTop: 6,\n border: \"none\",\n borderRadius: 4,\n background: \"#1677ff\",\n color: \"#fff\",\n cursor: \"pointer\",\n }}\n onClick={() => {\n request.onCopyCustomSelection?.({\n startRow: range.startRow,\n startColumn: range.startColumn,\n endRow: range.endRow,\n endColumn: range.endColumn,\n });\n setOpen(false);\n request.onClose();\n }}\n >\n 复制\n </button>\n </div>\n </ReactPopup>\n </div>\n );\n}\n\nfunction CustomSelectionRow(props: {\n label: string;\n row: number;\n column: number;\n maxRow: number;\n maxColumn: number;\n onRowChange: (value: number | null) => void;\n onColumnChange: (value: number | null) => void;\n}) {\n return (\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"38px 1fr 1fr\",\n gap: 6,\n alignItems: \"center\",\n marginBottom: 6,\n }}\n >\n <span style={{ color: \"#374151\", fontSize: 12 }}>{props.label}</span>\n <ReactInputNumber\n value={props.row}\n min={1}\n max={props.maxRow}\n step={1}\n precision={0}\n placeholder=\"行\"\n onChange={props.onRowChange}\n />\n <ReactInputNumber\n value={props.column}\n min={1}\n max={props.maxColumn}\n step={1}\n precision={0}\n placeholder=\"列\"\n onChange={props.onColumnChange}\n />\n </div>\n );\n}\n\nconst menuButtonStyle = {\n height: 34,\n padding: \"0 10px\",\n border: 0,\n borderRadius: 4,\n background: \"transparent\",\n color: \"#1f2329\",\n textAlign: \"left\" as const,\n cursor: \"pointer\",\n};\n\nfunction MenuButton(props: {\n label: string;\n onClick: () => void;\n close: () => void;\n}) {\n return (\n <button\n type=\"button\"\n onClick={() => {\n props.onClick();\n props.close();\n }}\n style={menuButtonStyle}\n >\n {props.label}\n </button>\n );\n}\n","import type { PivotTooltipRequest } from \"@canvas-components/pivot-table\";\nimport { createPortal } from \"react-dom\";\n\n/** PivotTable 截断文本提示。 */\nexport function PivotTooltip(props: { request: PivotTooltipRequest | null }) {\n const { request } = props;\n if (!request) return null;\n if (typeof document === \"undefined\") return null;\n return createPortal(\n <div\n role=\"tooltip\"\n style={{\n position: \"fixed\",\n left: request.x + 10,\n top: request.y + 14,\n zIndex: 1100,\n maxWidth: 360,\n padding: \"6px 10px\",\n borderRadius: 4,\n background: \"rgba(31, 35, 41, 0.92)\",\n color: \"#fff\",\n fontSize: 12,\n lineHeight: 1.5,\n overflowWrap: \"anywhere\",\n pointerEvents: \"none\",\n }}\n >\n {request.text}\n </div>,\n document.body,\n );\n}\n","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\".react-pivot-table-customization {\\n position: relative;\\n overflow: hidden;\\n}\\n.react-pivot-table-customization__table {\\n position: relative;\\n min-width: 0;\\n min-height: 0;\\n width: 100%;\\n height: 100%;\\n overflow: hidden;\\n}\\n.react-pivot-table-customization__panel-column {\\n flex-grow: 0 !important;\\n overflow: hidden;\\n}\\n.react-pivot-table-customization__chart-column {\\n flex-grow: 0 !important;\\n overflow: hidden;\\n}\\n.react-pivot-field-panel {\\n display: flex;\\n width: 100%;\\n min-width: 280px;\\n height: 100%;\\n flex-direction: column;\\n overflow: hidden;\\n background: #fff;\\n color: #1f2329;\\n font-family:\\n \\\"Segoe UI\\\",\\n \\\"Microsoft YaHei\\\",\\n sans-serif;\\n font-size: 13px;\\n box-sizing: border-box;\\n}\\n.react-pivot-field-panel button,\\n.react-pivot-field-panel input,\\n.react-pivot-field-panel select {\\n font: inherit;\\n}\\n.react-pivot-field-panel__header {\\n display: flex;\\n height: 42px;\\n flex: 0 0 42px;\\n align-items: center;\\n justify-content: space-between;\\n padding: 0 10px 0 14px;\\n border-bottom: 1px solid #edf0f2;\\n background: #fff;\\n}\\n.react-pivot-field-panel__icon-button {\\n display: inline-flex;\\n width: 24px;\\n height: 24px;\\n align-items: center;\\n justify-content: center;\\n padding: 0;\\n border: 0;\\n background: transparent;\\n color: #646a73;\\n cursor: pointer;\\n font: 18px/24px \\\"Segoe UI\\\", sans-serif;\\n}\\n.react-pivot-field-panel__icon-button:hover {\\n background: #f2f3f5;\\n color: #d14343;\\n}\\n.react-pivot-field-panel__layout {\\n width: 100%;\\n height: auto;\\n min-height: 0;\\n flex: 1 1 0;\\n overflow: hidden;\\n}\\n.react-pivot-field-panel__layout > .canvas-react-resizable-panels-item > .canvas-react-resizable-panel {\\n overflow: hidden;\\n}\\n.react-pivot-field-panel__section {\\n height: 100%;\\n padding: 10px 12px 0;\\n box-sizing: border-box;\\n}\\n.react-pivot-field-panel__section--fields,\\n.react-pivot-field-panel__section--areas {\\n display: flex;\\n min-height: 0;\\n flex-direction: column;\\n}\\n.react-pivot-field-panel__section--fields {\\n padding-bottom: 6px;\\n}\\n.react-pivot-field-panel__section--areas {\\n padding-bottom: 12px;\\n}\\n.react-pivot-field-panel__section-title {\\n margin-bottom: 5px;\\n font-weight: 600;\\n}\\n.react-pivot-field-panel__hint {\\n margin-bottom: 8px;\\n color: #646a73;\\n font-size: 12px;\\n}\\n.react-pivot-field-panel__search {\\n display: flex;\\n height: 32px;\\n align-items: center;\\n gap: 8px;\\n padding: 0 9px;\\n border: 1px solid #d5d9de;\\n border-radius: 3px;\\n background: #fff;\\n box-sizing: border-box;\\n}\\n.react-pivot-field-panel__search > span {\\n width: 12px;\\n height: 12px;\\n border: 1.5px solid #4f5660;\\n border-radius: 50%;\\n position: relative;\\n}\\n.react-pivot-field-panel__search > span::after {\\n position: absolute;\\n right: -4px;\\n bottom: -3px;\\n width: 5px;\\n height: 1.5px;\\n background: #4f5660;\\n content: \\\"\\\";\\n transform: rotate(45deg);\\n}\\n.react-pivot-field-panel__search input {\\n min-width: 0;\\n flex: 1;\\n border: 0;\\n outline: 0;\\n color: #1f2329;\\n}\\n.react-pivot-field-panel__field-list {\\n min-height: 0;\\n flex: 1;\\n margin-top: 6px;\\n overflow: auto;\\n border: 1px solid #dfe3e7;\\n border-radius: 3px;\\n background: #fff;\\n}\\n.react-pivot-field-panel__field,\\n.react-pivot-field-panel__area-field {\\n display: grid;\\n height: 28px;\\n align-items: center;\\n column-gap: 6px;\\n box-sizing: border-box;\\n}\\n.react-pivot-field-panel__field {\\n grid-template-columns: 10px 16px minmax(0, 1fr);\\n padding: 0 8px 0 6px;\\n}\\n.react-pivot-field-panel__field:hover {\\n background: #f5f8fb;\\n}\\n.react-pivot-field-panel__field[data-dragging] {\\n opacity: 0.45;\\n}\\n.react-pivot-field-panel__field > span:nth-of-type(2),\\n.react-pivot-field-panel__area-field > span:nth-of-type(2) {\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.react-pivot-field-panel__drag {\\n width: 8px;\\n height: 12px;\\n cursor: grab;\\n background-image:\\n radial-gradient(\\n circle at 2px 2px,\\n #8f959e 1px,\\n transparent 1.2px);\\n background-position: 0 0;\\n background-size: 4px 4px;\\n background-repeat: repeat;\\n}\\n.react-pivot-field-panel__empty,\\n.react-pivot-field-panel__area-empty {\\n display: grid;\\n height: 100%;\\n place-items: center;\\n color: #8f959e;\\n font-size: 12px;\\n}\\n.react-pivot-field-panel__areas {\\n display: grid;\\n min-height: 0;\\n flex: 1;\\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\\n grid-template-rows: minmax(0, 1fr) minmax(0, 1fr);\\n gap: 8px;\\n}\\n.react-pivot-field-panel__area-wrap {\\n display: flex;\\n min-width: 0;\\n min-height: 0;\\n flex-direction: column;\\n}\\n.react-pivot-field-panel__area-title {\\n display: grid;\\n height: 25px;\\n grid-template-columns: minmax(0, 1fr);\\n align-items: center;\\n gap: 5px;\\n color: #3f454d;\\n}\\n.react-pivot-field-panel__area {\\n min-height: 0;\\n flex: 1;\\n overflow: auto;\\n border: 1px solid #dfe3e7;\\n border-radius: 3px;\\n background: #fff;\\n}\\n.react-pivot-field-panel__area[data-dragging] {\\n border-color: #2f78d0;\\n background: #f7faff;\\n}\\n.react-pivot-field-panel__area-field {\\n grid-template-columns: 9px minmax(0, 1fr) 18px;\\n padding: 0 7px 0 5px;\\n}\\n.react-pivot-field-panel__area-field:hover {\\n background: #f5f8fb;\\n}\\n.react-pivot-field-panel__area-field-menu {\\n display: grid;\\n width: 18px;\\n height: 22px;\\n padding: 0;\\n place-items: center;\\n border: 0;\\n background: transparent;\\n color: #646a73;\\n cursor: pointer;\\n}\\n.react-pivot-field-panel__area-field-menu:hover {\\n color: #1f2329;\\n background: #e9edf2;\\n}\\n.react-pivot-field-panel__area-field-menu > span {\\n width: 0;\\n height: 0;\\n border-top: 5px solid currentColor;\\n border-right: 4px solid transparent;\\n border-left: 4px solid transparent;\\n}\\n.react-pivot-field-menu {\\n min-width: 176px;\\n padding: 5px 0;\\n color: #1f2329;\\n font:\\n 13px \\\"Segoe UI\\\",\\n \\\"Microsoft YaHei\\\",\\n sans-serif;\\n}\\n.react-pivot-field-menu__item {\\n display: block;\\n width: 100%;\\n height: 30px;\\n padding: 0 12px;\\n border: 0;\\n background: transparent;\\n color: inherit;\\n text-align: left;\\n cursor: pointer;\\n}\\n.react-pivot-field-menu__item:hover:not(:disabled) {\\n background: #e9f2fc;\\n}\\n.react-pivot-field-menu__item:disabled {\\n color: #a7abb2;\\n cursor: default;\\n}\\n.react-pivot-field-menu__item[data-danger] {\\n color: #c9372c;\\n}\\n.react-pivot-field-menu__separator {\\n height: 1px;\\n margin: 4px 0;\\n background: #e1e4e8;\\n}\\n.react-pivot-field-settings {\\n display: grid;\\n min-width: 260px;\\n gap: 12px;\\n padding: 14px;\\n color: #1f2329;\\n font:\\n 13px \\\"Segoe UI\\\",\\n \\\"Microsoft YaHei\\\",\\n sans-serif;\\n}\\n.react-pivot-field-settings label {\\n display: grid;\\n gap: 5px;\\n color: #515761;\\n}\\n.react-pivot-field-settings__name-input,\\n.react-pivot-field-settings__aggregator {\\n height: 30px;\\n font: inherit;\\n}\\n.react-pivot-field-settings__actions {\\n display: flex;\\n justify-content: flex-end;\\n gap: 8px;\\n}\\n.react-pivot-field-settings__actions button {\\n height: 30px;\\n padding: 0 14px;\\n border: 1px solid #bfc4cb;\\n border-radius: 3px;\\n background: #fff;\\n cursor: pointer;\\n}\\n.react-pivot-field-settings__actions button.is-primary {\\n border-color: #2f78d0;\\n background: #2f78d0;\\n color: #fff;\\n}\\n\")","import { useState, type DragEvent, type MouseEvent } from \"react\";\nimport {\n ReactCheckbox,\n ReactInput,\n ReactPopup,\n ReactResizablePanels,\n ReactSelect,\n} from \"@canvas-components/react-components\";\nimport {\n findPivotFieldArea,\n resolvePivotDimensionKey,\n resolvePivotDimensionTitle,\n resolvePivotValueFieldTitle,\n type BuiltInPivotAggregatorName,\n type PivotField,\n type PivotFieldArea,\n type PivotFieldLayout,\n} from \"@canvas-components/pivot-table\";\nimport \"./pivot-field-panel.css\";\n\ninterface ContextMenuState {\n fieldKey: string;\n area: PivotFieldArea;\n x: number;\n y: number;\n}\n\ninterface FieldSettingsState extends ContextMenuState {}\n\n/** PivotTable 字段自定义面板。 */\nexport function PivotFieldPanel<RecordType>(props: {\n fields: PivotField<RecordType>[];\n layout: PivotFieldLayout;\n onClose: () => void;\n onMove: (\n fieldKey: string,\n area: PivotFieldArea,\n index?: number,\n sourceArea?: PivotFieldArea,\n ) => void;\n onRemove: (fieldKey: string) => void;\n onFieldChange: (\n fieldKey: string,\n patch: { title?: string; aggregator?: BuiltInPivotAggregatorName },\n ) => void;\n}) {\n const [keyword, setKeyword] = useState(\"\");\n const [draggingKey, setDraggingKey] = useState<string | null>(null);\n const [dragOverArea, setDragOverArea] = useState<PivotFieldArea | null>(null);\n const [contextMenu, setContextMenu] = useState<ContextMenuState | null>(null);\n const [settings, setSettings] = useState<FieldSettingsState | null>(null);\n const normalizedKeyword = keyword.trim().toLocaleLowerCase();\n const visibleFields = props.fields.filter((field) =>\n resolvePivotDimensionTitle(field)\n .toLocaleLowerCase()\n .includes(normalizedKeyword),\n );\n const settingsField = settings\n ? findField(props.fields, settings.fieldKey)\n : undefined;\n\n const handleContextMenu = (\n event: MouseEvent<HTMLElement>,\n fieldKey: string,\n area: PivotFieldArea,\n ) => {\n event.preventDefault();\n setContextMenu({ fieldKey, area, x: event.clientX, y: event.clientY });\n };\n const handleMenuClick = (\n event: MouseEvent<HTMLButtonElement>,\n fieldKey: string,\n area: PivotFieldArea,\n ) => {\n event.stopPropagation();\n const rect = event.currentTarget.getBoundingClientRect();\n setContextMenu({ fieldKey, area, x: rect.left, y: rect.bottom });\n };\n\n return (\n <aside className=\"react-pivot-field-panel\" aria-label=\"数据透视表字段\">\n <header className=\"react-pivot-field-panel__header\">\n <strong>数据透视表字段</strong>\n <button\n type=\"button\"\n className=\"react-pivot-field-panel__icon-button\"\n aria-label=\"关闭字段面板\"\n title=\"关闭\"\n onClick={props.onClose}\n >\n ×\n </button>\n </header>\n\n <ReactResizablePanels\n direction=\"vertical\"\n className=\"react-pivot-field-panel__layout\"\n panels={[\n {\n id: \"field-list\",\n minSize: 140,\n content: (\n <section className=\"react-pivot-field-panel__section react-pivot-field-panel__section--fields\">\n <div className=\"react-pivot-field-panel__section-title\">\n 字段列表\n </div>\n <div className=\"react-pivot-field-panel__hint\">\n 将字段拖动至数据透视表区域\n </div>\n <label className=\"react-pivot-field-panel__search\">\n <span aria-hidden=\"true\" />\n <input\n value={keyword}\n placeholder=\"搜索字段\"\n onChange={(event) => setKeyword(event.target.value)}\n />\n </label>\n <div className=\"react-pivot-field-panel__field-list\">\n {visibleFields.map((field) => {\n const fieldKey = resolvePivotDimensionKey(field);\n const area = findPivotFieldArea(props.layout, fieldKey);\n return (\n <div\n key={fieldKey}\n className=\"react-pivot-field-panel__field\"\n draggable\n data-dragging={draggingKey === fieldKey || undefined}\n onDragStart={(event) =>\n startDrag(event, fieldKey, setDraggingKey)\n }\n onDragEnd={() => {\n setDraggingKey(null);\n setDragOverArea(null);\n }}\n >\n <span\n className=\"react-pivot-field-panel__drag\"\n aria-hidden=\"true\"\n />\n <ReactCheckbox\n checked={area != null}\n aria-label={`${resolvePivotDimensionTitle(field)}启用状态`}\n onChange={(event) => {\n if (event.target.checked) {\n props.onMove(\n fieldKey,\n field.defaultArea ?? \"row\",\n );\n } else {\n props.onRemove(fieldKey);\n }\n }}\n />\n <span title={resolvePivotDimensionTitle(field)}>\n {resolvePivotDimensionTitle(field)}\n </span>\n </div>\n );\n })}\n {visibleFields.length === 0 ? (\n <div className=\"react-pivot-field-panel__empty\">\n 未找到字段\n </div>\n ) : null}\n </div>\n </section>\n ),\n },\n {\n id: \"pivot-areas\",\n minSize: 140,\n content: (\n <section className=\"react-pivot-field-panel__section react-pivot-field-panel__section--areas\">\n <div className=\"react-pivot-field-panel__section-title\">\n 数据透视表区域\n </div>\n <div className=\"react-pivot-field-panel__hint\">\n 在下方区域中拖动字段\n </div>\n <div className=\"react-pivot-field-panel__areas\">\n {areaDefinitions.map(({ area, label }) => (\n <FieldArea\n key={area}\n area={area}\n label={label}\n fields={props.fields}\n fieldKeys={layoutArea(props.layout, area)}\n dragging={dragOverArea === area}\n onDragEnter={() => setDragOverArea(area)}\n onDragLeave={() =>\n setDragOverArea((current) =>\n current === area ? null : current,\n )\n }\n onDrop={(event, index) => {\n event.preventDefault();\n const dragField = readDragField(event, draggingKey);\n if (dragField) {\n props.onMove(\n dragField.fieldKey,\n area,\n index,\n dragField.sourceArea,\n );\n }\n setDraggingKey(null);\n setDragOverArea(null);\n }}\n onContextMenu={handleContextMenu}\n onMenuClick={handleMenuClick}\n />\n ))}\n </div>\n </section>\n ),\n },\n ]}\n />\n\n <FieldContextMenu\n state={contextMenu}\n layout={props.layout}\n onClose={() => setContextMenu(null)}\n onMove={props.onMove}\n onRemove={props.onRemove}\n onSettings={(next) => {\n setContextMenu(null);\n setSettings(next);\n }}\n />\n {settings && settingsField ? (\n <FieldSettingsPopup\n key={`${settings.fieldKey}:${settings.x}:${settings.y}`}\n state={settings}\n field={settingsField}\n onClose={() => setSettings(null)}\n onApply={(patch) => {\n props.onFieldChange(settings.fieldKey, patch);\n setSettings(null);\n }}\n />\n ) : null}\n </aside>\n );\n}\n\nfunction FieldArea<RecordType>(props: {\n area: PivotFieldArea;\n label: string;\n fields: PivotField<RecordType>[];\n fieldKeys: string[];\n dragging: boolean;\n onDragEnter: () => void;\n onDragLeave: () => void;\n onDrop: (event: DragEvent<HTMLElement>, index?: number) => void;\n onContextMenu: (\n event: MouseEvent<HTMLElement>,\n fieldKey: string,\n area: PivotFieldArea,\n ) => void;\n onMenuClick: (\n event: MouseEvent<HTMLButtonElement>,\n fieldKey: string,\n area: PivotFieldArea,\n ) => void;\n}) {\n return (\n <div className=\"react-pivot-field-panel__area-wrap\">\n <div className=\"react-pivot-field-panel__area-title\">\n <strong>{props.label}</strong>\n </div>\n <div\n className=\"react-pivot-field-panel__area\"\n data-dragging={props.dragging || undefined}\n onDragOver={(event) => event.preventDefault()}\n onDragEnter={props.onDragEnter}\n onDragLeave={(event) => {\n if (\n !event.currentTarget.contains(event.relatedTarget as Node | null)\n ) {\n props.onDragLeave();\n }\n }}\n onDrop={(event) => props.onDrop(event)}\n >\n {props.fieldKeys.map((fieldKey, index) => {\n const field = findField(props.fields, fieldKey);\n if (!field) return null;\n const fieldTitle =\n props.area === \"value\"\n ? resolvePivotValueFieldTitle(field)\n : resolvePivotDimensionTitle(field);\n return (\n <div\n key={fieldKey}\n className=\"react-pivot-field-panel__area-field\"\n draggable\n onDragStart={(event) =>\n startDrag(event, fieldKey, undefined, props.area)\n }\n onDragOver={(event) => event.preventDefault()}\n onDrop={(event) => {\n event.stopPropagation();\n props.onDrop(event, index);\n }}\n onContextMenu={(event) =>\n props.onContextMenu(event, fieldKey, props.area)\n }\n >\n <span\n className=\"react-pivot-field-panel__drag\"\n aria-hidden=\"true\"\n />\n <span title={fieldTitle}>{fieldTitle}</span>\n <button\n type=\"button\"\n className=\"react-pivot-field-panel__area-field-menu\"\n aria-label={`${fieldTitle}字段菜单`}\n title=\"字段操作\"\n onPointerDown={(event) => event.stopPropagation()}\n onClick={(event) =>\n props.onMenuClick(event, fieldKey, props.area)\n }\n >\n <span aria-hidden=\"true\" />\n </button>\n </div>\n );\n })}\n {props.fieldKeys.length === 0 ? (\n <div className=\"react-pivot-field-panel__area-empty\">\n 拖动字段到此处\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction FieldContextMenu(props: {\n state: ContextMenuState | null;\n layout: PivotFieldLayout;\n onClose: () => void;\n onMove: (\n fieldKey: string,\n area: PivotFieldArea,\n index?: number,\n sourceArea?: PivotFieldArea,\n ) => void;\n onRemove: (fieldKey: string) => void;\n onSettings: (state: FieldSettingsState) => void;\n}) {\n const state = props.state;\n if (!state) return null;\n const keys = layoutArea(props.layout, state.area);\n const index = keys.indexOf(state.fieldKey);\n return (\n <ReactPopup\n open\n anchorRect={{ x: state.x, y: state.y, width: 0, height: 0 }}\n offset={2}\n minWidth={176}\n zIndex={10020}\n surfaceStyle={popupStyle}\n onOpenChange={(open) => {\n if (!open) props.onClose();\n }}\n >\n <div className=\"react-pivot-field-menu\" role=\"menu\">\n <MenuAction\n label=\"上移\"\n disabled={index <= 0}\n onClick={() =>\n props.onMove(state.fieldKey, state.area, index - 1, state.area)\n }\n close={props.onClose}\n />\n <MenuAction\n label=\"下移\"\n disabled={index < 0 || index >= keys.length - 1}\n onClick={() =>\n props.onMove(state.fieldKey, state.area, index + 1, state.area)\n }\n close={props.onClose}\n />\n <MenuAction\n label=\"移至开头\"\n disabled={index <= 0}\n onClick={() =>\n props.onMove(state.fieldKey, state.area, 0, state.area)\n }\n close={props.onClose}\n />\n <MenuAction\n label=\"移至末尾\"\n disabled={index === keys.length - 1}\n onClick={() =>\n props.onMove(state.fieldKey, state.area, undefined, state.area)\n }\n close={props.onClose}\n />\n <MenuSeparator />\n <MenuAction\n label=\"添加到报表筛选\"\n disabled={state.area === \"filter\"}\n onClick={() =>\n props.onMove(state.fieldKey, \"filter\", undefined, state.area)\n }\n close={props.onClose}\n />\n <MenuAction\n label=\"添加到行标签\"\n disabled={state.area === \"row\"}\n onClick={() =>\n props.onMove(state.fieldKey, \"row\", undefined, state.area)\n }\n close={props.onClose}\n />\n <MenuAction\n label=\"添加到列标签\"\n disabled={state.area === \"column\"}\n onClick={() =>\n props.onMove(state.fieldKey, \"column\", undefined, state.area)\n }\n close={props.onClose}\n />\n <MenuAction\n label=\"移动到值\"\n disabled={state.area === \"value\"}\n onClick={() =>\n props.onMove(state.fieldKey, \"value\", undefined, state.area)\n }\n close={props.onClose}\n />\n <MenuSeparator />\n <MenuAction\n label=\"删除字段\"\n danger\n onClick={() => props.onRemove(state.fieldKey)}\n close={props.onClose}\n />\n <MenuAction\n label=\"字段设置...\"\n onClick={() => props.onSettings(state)}\n />\n </div>\n </ReactPopup>\n );\n}\n\nfunction FieldSettingsPopup<RecordType>(props: {\n state: FieldSettingsState;\n field: PivotField<RecordType>;\n onClose: () => void;\n onApply: (patch: {\n title?: string;\n aggregator?: BuiltInPivotAggregatorName;\n }) => void;\n}) {\n const field = props.field;\n const state = props.state;\n const [draft, setDraft] = useState<{\n key: string;\n title: string;\n aggregator: BuiltInPivotAggregatorName;\n } | null>(null);\n const fieldKey = resolvePivotDimensionKey(field);\n const current =\n draft?.key === fieldKey\n ? draft\n : {\n key: fieldKey,\n title: resolvePivotDimensionTitle(field),\n aggregator: resolveAggregator(field),\n };\n return (\n <ReactPopup\n open\n anchorRect={{ x: state.x, y: state.y, width: 0, height: 0 }}\n offset={2}\n minWidth={260}\n zIndex={10021}\n surfaceStyle={popupStyle}\n onOpenChange={(open) => {\n if (!open) props.onClose();\n }}\n >\n <form\n className=\"react-pivot-field-settings\"\n onSubmit={(event) => {\n event.preventDefault();\n props.onApply({\n title: current.title.trim() || undefined,\n aggregator: current.aggregator,\n });\n }}\n >\n <strong>字段设置</strong>\n <label>\n <span>自定义名称</span>\n <ReactInput\n wrapperClassName=\"react-pivot-field-settings__name-input\"\n value={current.title}\n onChange={(event) =>\n setDraft({ ...current, title: event.target.value })\n }\n />\n </label>\n {state.area === \"value\" ? (\n <label>\n <span>汇总方式</span>\n <ReactSelect\n className=\"react-pivot-field-settings__aggregator\"\n value={current.aggregator}\n options={aggregatorOptions}\n allowClear={false}\n popupZIndex={10022}\n onChange={(value) =>\n setDraft({\n ...current,\n aggregator: value as BuiltInPivotAggregatorName,\n })\n }\n />\n </label>\n ) : null}\n <div className=\"react-pivot-field-settings__actions\">\n <button type=\"button\" onClick={props.onClose}>\n 取消\n </button>\n <button type=\"submit\" className=\"is-primary\">\n 确定\n </button>\n </div>\n </form>\n </ReactPopup>\n );\n}\n\nfunction MenuAction(props: {\n label: string;\n disabled?: boolean;\n danger?: boolean;\n onClick: () => void;\n close?: () => void;\n}) {\n return (\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"react-pivot-field-menu__item\"\n data-danger={props.danger || undefined}\n disabled={props.disabled}\n onClick={() => {\n props.onClick();\n props.close?.();\n }}\n >\n {props.label}\n </button>\n );\n}\n\nfunction MenuSeparator() {\n return <div className=\"react-pivot-field-menu__separator\" role=\"separator\" />;\n}\n\nfunction startDrag(\n event: DragEvent<HTMLElement>,\n fieldKey: string,\n setDraggingKey?: (key: string) => void,\n sourceArea?: PivotFieldArea,\n) {\n event.dataTransfer.effectAllowed = \"move\";\n event.dataTransfer.setData(\"application/x-pivot-field\", fieldKey);\n event.dataTransfer.setData(\"text/plain\", fieldKey);\n if (sourceArea) {\n event.dataTransfer.setData(\"application/x-pivot-field-area\", sourceArea);\n }\n setDraggingKey?.(fieldKey);\n}\n\nfunction readDragField(event: DragEvent<HTMLElement>, fallback: string | null) {\n const fieldKey =\n event.dataTransfer.getData(\"application/x-pivot-field\") ||\n event.dataTransfer.getData(\"text/plain\") ||\n fallback;\n if (!fieldKey) return null;\n const sourceArea = event.dataTransfer.getData(\n \"application/x-pivot-field-area\",\n ) as PivotFieldArea | \"\";\n return { fieldKey, sourceArea: sourceArea || undefined };\n}\n\nfunction findField<RecordType>(\n fields: PivotField<RecordType>[],\n fieldKey: string,\n) {\n return fields.find((field) => resolvePivotDimensionKey(field) === fieldKey);\n}\n\nfunction layoutArea(layout: PivotFieldLayout, area: PivotFieldArea) {\n if (area === \"filter\") return layout.filters;\n if (area === \"column\") return layout.columns;\n if (area === \"row\") return layout.rows;\n return layout.values;\n}\n\nfunction resolveAggregator<RecordType>(\n field: PivotField<RecordType>,\n): BuiltInPivotAggregatorName {\n const aggregator = field.indicator?.aggregator;\n return typeof aggregator === \"string\" &&\n builtInAggregators.includes(aggregator as BuiltInPivotAggregatorName)\n ? (aggregator as BuiltInPivotAggregatorName)\n : \"sum\";\n}\n\nconst areaDefinitions: Array<{ area: PivotFieldArea; label: string }> = [\n { area: \"filter\", label: \"筛选器\" },\n { area: \"column\", label: \"列\" },\n { area: \"row\", label: \"行\" },\n { area: \"value\", label: \"值\" },\n];\n\nconst builtInAggregators: BuiltInPivotAggregatorName[] = [\n \"sum\",\n \"avg\",\n \"count\",\n \"distinctCount\",\n \"min\",\n \"max\",\n];\n\nconst aggregatorOptions: Array<{\n label: string;\n value: BuiltInPivotAggregatorName;\n}> = [\n { label: \"求和\", value: \"sum\" },\n { label: \"计数\", value: \"count\" },\n { label: \"平均值\", value: \"avg\" },\n { label: \"最大值\", value: \"max\" },\n { label: \"最小值\", value: \"min\" },\n { label: \"去重计数\", value: \"distinctCount\" },\n];\n\nconst popupStyle = {\n padding: 0,\n background: \"#ffffff\",\n border: \"1px solid #c8cdd4\",\n borderRadius: 4,\n boxShadow: \"0 8px 24px rgba(31, 35, 41, 0.16)\",\n};\n","import type {\n CanvasChartPieOption,\n CanvasChartSparklineOption,\n CanvasChartSparklineSeriesOption,\n} from \"@canvas-components/chart\";\nimport {\n createPivotCellKey,\n type PivotDimension,\n type PivotIndicator,\n type PivotModel,\n type PivotResolvedPath,\n} from \"@canvas-components/pivot-table\";\n\n/** 透视图表类型。 */\nexport type PivotChartType =\n | \"pie\"\n | \"grouped-horizontal-bar\"\n | \"grouped-column\"\n | \"stacked-area\"\n | \"stacked-horizontal-bar\"\n | \"stacked-column\"\n | \"area\"\n | \"line\";\n\nexport const pivotChartTypeLabels: Record<PivotChartType, string> = {\n pie: \"饼图\",\n \"grouped-horizontal-bar\": \"簇状条形图\",\n \"grouped-column\": \"簇状柱形图\",\n \"stacked-area\": \"堆积面积图\",\n \"stacked-horizontal-bar\": \"堆积条形图\",\n \"stacked-column\": \"堆积柱形图\",\n area: \"面积图\",\n line: \"折线图\",\n};\n\nexport type PivotChartOption =\n | { rendererType: \"pie\"; option: CanvasChartPieOption }\n | { rendererType: \"sparkline\"; option: CanvasChartSparklineOption };\n\nconst SERIES_COLORS = [\n \"#1677ff\",\n \"#36a269\",\n \"#e89b29\",\n \"#7b61c8\",\n \"#d05a6e\",\n \"#278f9d\",\n];\n\n/** 将当前透视模型转换为图表配置。 */\nexport function buildPivotChartOption<RecordType>(params: {\n type: PivotChartType;\n model: PivotModel<RecordType>;\n rows: PivotDimension<RecordType>[];\n columns: PivotDimension<RecordType>[];\n indicators: PivotIndicator<RecordType>[];\n}): PivotChartOption | null {\n const { columns, indicators, model, rows, type } = params;\n if (indicators.length === 0) return null;\n const rowPaths = Array.from(model.rowPaths.values());\n const columnPaths = Array.from(model.columnPaths.values());\n const labels = (rows.length > 0 ? rowPaths : columnPaths).map(\n resolvePathLabel,\n );\n const rawSeries = buildRawSeries({\n columnPaths,\n columns,\n indicators,\n model,\n rowPaths,\n rows,\n });\n if (rawSeries.length === 0) return null;\n\n if (type === \"pie\") {\n const source = rawSeries[0]!;\n return {\n rendererType: \"pie\",\n option: {\n color: SERIES_COLORS,\n tooltip: createTooltip(),\n series: {\n type: \"pie\",\n name: source.name,\n center: [\"34%\", \"50%\"],\n radius: \"52%\",\n itemStyle: { borderColor: \"#ffffff\", borderWidth: 1 },\n label: {\n show: true,\n position: \"outside\",\n color: \"#515761\",\n fontSize: 11,\n },\n labelLine: {\n show: true,\n length: 10,\n length2: 8,\n lineStyle: { width: 1, opacity: 0.72 },\n },\n emphasis: {\n scale: true,\n scaleSize: 7,\n },\n data: labels.map((name, index) => ({\n name,\n value: source.data[index] ?? 0,\n })),\n },\n legend: {\n show: true,\n orient: \"vertical\",\n left: \"right\",\n top: \"middle\",\n itemWidth: 9,\n itemHeight: 9,\n itemGap: 7,\n textStyle: { color: \"#515761\", fontSize: 11 },\n },\n },\n };\n }\n\n const horizontal =\n type === \"grouped-horizontal-bar\" || type === \"stacked-horizontal-bar\";\n const line = type === \"line\" || type === \"area\" || type === \"stacked-area\";\n const stacked =\n type === \"stacked-area\" ||\n type === \"stacked-horizontal-bar\" ||\n type === \"stacked-column\";\n const area = type === \"area\" || type === \"stacked-area\";\n const series = rawSeries.map(\n (item, index): CanvasChartSparklineSeriesOption => {\n const color = SERIES_COLORS[index % SERIES_COLORS.length]!;\n return line\n ? {\n type: \"line\",\n name: item.name,\n data: item.data,\n stack: stacked ? \"pivot-values\" : undefined,\n smooth: false,\n showSymbol: true,\n symbolSize: 5,\n lineStyle: { color, width: 2 },\n areaStyle: area\n ? { color, opacity: stacked ? 0.7 : 0.22 }\n : undefined,\n itemStyle: { color },\n }\n : {\n type: \"bar\",\n name: item.name,\n data: item.data,\n stack: stacked ? \"pivot-values\" : undefined,\n barWidth: stacked ? 24 : 18,\n itemStyle: { color },\n };\n },\n );\n const hasNegative = rawSeries.some((item) =>\n item.data.some((value) => value < 0),\n );\n const categoryAxis = {\n type: \"category\" as const,\n data: labels,\n axisLabel: { color: \"#646a73\", fontSize: 11, margin: 8 },\n axisTick: { show: false },\n };\n const valueAxis = {\n type: \"value\" as const,\n min: hasNegative ? (\"dataMin\" as const) : 0,\n splitNumber: 4,\n axisLabel: { color: \"#8f959e\", fontSize: 10 },\n axisTick: { show: false },\n splitLine: { show: true, color: \"#edf0f2\" },\n };\n return {\n rendererType: \"sparkline\",\n option: {\n grid: {\n show: true,\n left: 12,\n right: 14,\n top: 14,\n bottom: 18,\n containLabel: true,\n backgroundColor: \"#ffffff\",\n borderColor: \"#e6e9ed\",\n borderWidth: 1,\n },\n xAxis: horizontal ? valueAxis : categoryAxis,\n yAxis: horizontal ? categoryAxis : valueAxis,\n tooltip: {\n ...createTooltip(),\n trigger: \"axis\",\n axisPointer: {\n type: line ? \"line\" : \"shadow\",\n lineStyle: { color: \"#8f959e\", width: 1 },\n shadowStyle: { color: \"#1f2329\", opacity: 0.05 },\n },\n },\n series,\n },\n };\n}\n\nfunction createTooltip() {\n return {\n backgroundColor: \"rgba(255, 255, 255, 0.98)\",\n borderColor: \"#dfe3e7\",\n borderWidth: 1,\n borderRadius: 4,\n padding: [8, 10] as [number, number],\n textStyle: { color: \"#1f2329\", fontSize: 12 },\n };\n}\n\nfunction buildRawSeries<RecordType>(params: {\n model: PivotModel<RecordType>;\n rows: PivotDimension<RecordType>[];\n columns: PivotDimension<RecordType>[];\n indicators: PivotIndicator<RecordType>[];\n rowPaths: PivotResolvedPath[];\n columnPaths: PivotResolvedPath[];\n}) {\n const { columnPaths, columns, indicators, model, rowPaths, rows } = params;\n const result: Array<{ name: string; data: number[] }> = [];\n if (rows.length > 0) {\n columnPaths.forEach((columnPath) =>\n indicators.forEach((indicator) =>\n result.push({\n name: resolveSeriesName(\n columns.length > 0 ? resolvePathLabel(columnPath) : \"\",\n indicator,\n ),\n data: rowPaths.map((rowPath) =>\n resolveCellNumber(\n model,\n rowPath.key,\n columnPath.key,\n indicator.key,\n ),\n ),\n }),\n ),\n );\n return result;\n }\n const rowPath = rowPaths[0];\n if (!rowPath) return result;\n indicators.forEach((indicator) =>\n result.push({\n name: indicator.title ?? indicator.key,\n data: columnPaths.map((columnPath) =>\n resolveCellNumber(model, rowPath.key, columnPath.key, indicator.key),\n ),\n }),\n );\n return result;\n}\n\nfunction resolvePathLabel(path: PivotResolvedPath) {\n return path.values.map((item) => item.label).join(\" / \") || \"总计\";\n}\n\nfunction resolveSeriesName<RecordType>(\n pathLabel: string,\n indicator: PivotIndicator<RecordType>,\n) {\n const indicatorLabel = indicator.title ?? indicator.key;\n return pathLabel ? `${pathLabel} · ${indicatorLabel}` : indicatorLabel;\n}\n\nfunction resolveCellNumber<RecordType>(\n model: PivotModel<RecordType>,\n rowPathKey: string,\n columnPathKey: string,\n indicatorKey: string,\n) {\n const value = model.cells.get(\n createPivotCellKey(rowPathKey, columnPathKey, indicatorKey),\n )?.value;\n const numericValue = typeof value === \"number\" ? value : Number(value);\n return Number.isFinite(numericValue) ? numericValue : 0;\n}\n","import styleInject from '#style-inject';styleInject(\".react-pivot-table {\\n position: relative;\\n display: flex;\\n min-width: 0;\\n min-height: 0;\\n flex-direction: column;\\n overflow: hidden;\\n box-sizing: border-box;\\n}\\n.react-pivot-table-titlebar {\\n display: flex;\\n height: 44px;\\n flex: 0 0 44px;\\n align-items: center;\\n justify-content: space-between;\\n padding: 12px 0;\\n background: #fff;\\n box-sizing: border-box;\\n}\\n.react-pivot-table-title {\\n min-width: 0;\\n overflow: hidden;\\n color: #1f2937;\\n font-size: 14px;\\n font-weight: 600;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.react-pivot-table-titlebar__actions {\\n display: flex;\\n flex: none;\\n align-items: center;\\n gap: 14px;\\n color: #475569;\\n}\\n.react-pivot-table-titlebar__tool {\\n display: inline-flex;\\n width: 24px;\\n height: 24px;\\n align-items: center;\\n justify-content: center;\\n padding: 0;\\n border: 0;\\n background: transparent;\\n color: inherit;\\n cursor: pointer;\\n font: 16px/24px sans-serif;\\n}\\n.react-pivot-table-titlebar__tool:hover,\\n.react-pivot-table-titlebar__tool[aria-pressed=true],\\n.react-pivot-table-titlebar__tool[aria-expanded=true] {\\n color: #1677ff;\\n}\\n.react-pivot-table-titlebar__tool:focus-visible {\\n outline: 2px solid rgba(22, 119, 255, 0.28);\\n outline-offset: 1px;\\n}\\n.react-pivot-chart-picker-surface {\\n overflow: hidden;\\n border-radius: 4px;\\n}\\n.react-pivot-chart-picker {\\n display: grid;\\n gap: 2px;\\n padding: 5px;\\n background: #fff;\\n}\\n.react-pivot-chart-picker__item {\\n display: grid;\\n width: 100%;\\n min-height: 34px;\\n grid-template-columns: 24px minmax(0, 1fr);\\n align-items: center;\\n gap: 8px;\\n padding: 4px 8px;\\n border: 0;\\n border-radius: 3px;\\n background: transparent;\\n color: #1f2329;\\n cursor: pointer;\\n font:\\n 13px/20px \\\"Segoe UI\\\",\\n \\\"Microsoft YaHei\\\",\\n sans-serif;\\n text-align: left;\\n}\\n.react-pivot-chart-picker__item:hover,\\n.react-pivot-chart-picker__item:focus-visible {\\n background: #f2f6fb;\\n outline: none;\\n}\\n.react-pivot-chart-picker__item:disabled {\\n background: transparent;\\n color: #a7abb2;\\n cursor: default;\\n}\\n.react-pivot-chart-picker__item svg {\\n width: 22px;\\n height: 22px;\\n fill: #6b7785;\\n stroke: #6b7785;\\n stroke-width: 1.8;\\n}\\n.react-pivot-chart-picker__item:hover svg,\\n.react-pivot-chart-picker__item:focus-visible svg {\\n fill: #1677ff;\\n stroke: #1677ff;\\n}\\n.react-pivot-chart-picker__item:disabled svg {\\n fill: #a7abb2;\\n stroke: #a7abb2;\\n}\\n.react-pivot-table__content {\\n position: relative;\\n flex: 1 1 auto;\\n min-width: 0;\\n min-height: 0;\\n overflow: hidden;\\n}\\n.react-pivot-table__table {\\n position: relative;\\n width: 100%;\\n height: 100%;\\n min-width: 0;\\n min-height: 0;\\n overflow: hidden;\\n}\\n\")","import { useRef, useState, type ReactNode } from \"react\";\nimport { ReactPopup } from \"@canvas-components/react-components\";\nimport {\n pivotChartTypeLabels,\n type PivotChartType,\n} from \"../chart/pivot-chart-data\";\nimport \"./pivot-titlebar.css\";\n\n/** PivotTable 标题栏。 */\nexport function PivotTitlebar(props: {\n title?: ReactNode;\n showFieldSettings: boolean;\n fieldPanelOpen: boolean;\n onToggleFieldPanel: () => void;\n onAddChart: (type: PivotChartType) => void;\n chartTypes: PivotChartType[];\n}) {\n const chartButtonRef = useRef<HTMLButtonElement | null>(null);\n const [chartMenuOpen, setChartMenuOpen] = useState(false);\n const settingsLabel = props.fieldPanelOpen ? \"关闭字段面板\" : \"打开字段面板\";\n return (\n <header className=\"react-pivot-table-titlebar\">\n <div className=\"react-pivot-table-title\">{props.title}</div>\n <div className=\"react-pivot-table-titlebar__actions\">\n <button\n ref={chartButtonRef}\n type=\"button\"\n className=\"react-pivot-table-titlebar__tool\"\n title=\"添加图表\"\n aria-label=\"添加图表\"\n aria-haspopup=\"menu\"\n aria-expanded={chartMenuOpen}\n onClick={() => setChartMenuOpen((open) => !open)}\n >\n <ChartIcon />\n </button>\n {props.showFieldSettings ? (\n <button\n type=\"button\"\n className=\"react-pivot-table-titlebar__tool\"\n title={settingsLabel}\n aria-label={settingsLabel}\n aria-pressed={props.fieldPanelOpen}\n onClick={props.onToggleFieldPanel}\n >\n <SettingsIcon />\n </button>\n ) : null}\n </div>\n <ReactPopup\n open={chartMenuOpen}\n anchorRef={chartButtonRef}\n placement=\"bottomRight\"\n offset={6}\n minWidth={176}\n surfaceClassName=\"react-pivot-chart-picker-surface\"\n onOpenChange={setChartMenuOpen}\n >\n <div className=\"react-pivot-chart-picker\" role=\"menu\">\n {(Object.keys(pivotChartTypeLabels) as PivotChartType[]).map(\n (type) => {\n const added = props.chartTypes.includes(type);\n return (\n <button\n key={type}\n type=\"button\"\n className=\"react-pivot-chart-picker__item\"\n role=\"menuitem\"\n disabled={added}\n title={added ? \"已添加该图表\" : undefined}\n onClick={() => {\n props.onAddChart(type);\n setChartMenuOpen(false);\n }}\n >\n <ChartTypeIcon type={type} />\n <span>{pivotChartTypeLabels[type]}</span>\n </button>\n );\n },\n )}\n </div>\n </ReactPopup>\n </header>\n );\n}\n\nfunction ChartIcon() {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M4 19V5M4 19h16\" />\n <path d=\"m7 15 3-4 3 2 4-6\" />\n </svg>\n );\n}\n\nfunction ChartTypeIcon(props: { type: PivotChartType }) {\n if (props.type === \"pie\") {\n return (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path d=\"M12 3a9 9 0 1 0 9 9h-9z\" />\n <path d=\"M14 3.2V10h6.8A9 9 0 0 0 14 3.2z\" fill=\"none\" />\n </svg>\n );\n }\n if (\n props.type === \"grouped-horizontal-bar\" ||\n props.type === \"stacked-horizontal-bar\"\n ) {\n return (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n {props.type === \"stacked-horizontal-bar\" ? (\n <path d=\"M3 4h7v4H3zM10 4h9v4h-9zM3 10h11v4H3zM14 10h7v4h-7zM3 16h5v4H3zM8 16h10v4H8z\" />\n ) : (\n <path d=\"M3 4h13v3H3zM3 9h18v3H3zM3 14h10v3H3zM3 19h16v3H3z\" />\n )}\n </svg>\n );\n }\n if (props.type === \"area\" || props.type === \"stacked-area\") {\n return (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n {props.type === \"stacked-area\" ? (\n <>\n <path d=\"M3 17 8 11l4 3 5-7 4 3v10H3z\" />\n <path d=\"m3 13 5-5 4 3 5-7 4 3\" fill=\"none\" />\n </>\n ) : (\n <path d=\"M3 18 8 11l4 3 6-9 3 3v12H3z\" />\n )}\n </svg>\n );\n }\n if (props.type === \"grouped-column\" || props.type === \"stacked-column\") {\n return (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n {props.type === \"stacked-column\" ? (\n <path d=\"M3 12h5v8H3zM3 5h5v7H3zM10 9h5v11h-5zM10 4h5v5h-5zM17 14h4v6h-4zM17 7h4v7h-4z\" />\n ) : (\n <path d=\"M3 11h3v9H3zM7 6h3v14H7zM13 8h3v12h-3zM17 4h3v16h-3z\" />\n )}\n </svg>\n );\n }\n return (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path d=\"m3 17 5-6 4 3 6-8 3 2\" fill=\"none\" />\n </svg>\n );\n}\n\nfunction SettingsIcon() {\n return (\n <svg\n viewBox=\"64 64 896 896\"\n width=\"1em\"\n height=\"1em\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M924.8 625.7l-65.5-56c3.1-19 4.7-38.4 4.7-57.8s-1.6-38.8-4.7-57.8l65.5-56a32.03 32.03 0 009.3-35.2l-.9-2.6a443.74 443.74 0 00-79.7-137.9l-1.8-2.1a32.12 32.12 0 00-35.1-9.5l-81.3 28.9c-30-24.6-63.5-44-99.7-57.6l-15.7-85a32.05 32.05 0 00-25.8-25.7l-2.7-.5c-52.1-9.4-106.9-9.4-159 0l-2.7.5a32.05 32.05 0 00-25.8 25.7l-15.8 85.4a351.86 351.86 0 00-99 57.4l-81.9-29.1a32 32 0 00-35.1 9.5l-1.8 2.1a446.02 446.02 0 00-79.7 137.9l-.9 2.6c-4.5 12.5-.8 26.5 9.3 35.2l66.3 56.6c-3.1 18.8-4.6 38-4.6 57.1 0 19.2 1.5 38.4 4.6 57.1L99 625.5a32.03 32.03 0 00-9.3 35.2l.9 2.6c18.1 50.4 44.9 96.9 79.7 137.9l1.8 2.1a32.12 32.12 0 0035.1 9.5l81.9-29.1c29.8 24.5 63.1 43.9 99 57.4l15.8 85.4a32.05 32.05 0 0025.8 25.7l2.7.5a449.4 449.4 0 00159 0l2.7-.5a32.05 32.05 0 0025.8-25.7l15.7-85a350 350 0 0099.7-57.6l81.3 28.9a32 32 0 0035.1-9.5l1.8-2.1c34.8-41.1 61.6-87.5 79.7-137.9l.9-2.6c4.5-12.3.8-26.3-9.3-35zM788.3 465.9c2.5 15.1 3.8 30.6 3.8 46.1s-1.3 31-3.8 46.1l-6.6 40.1 74.7 63.9a370.03 370.03 0 01-42.6 73.6L721 702.8l-31.4 25.8c-23.9 19.6-50.5 35-79.3 45.8l-38.1 14.3-17.9 97a377.5 377.5 0 01-85 0l-17.9-97.2-37.8-14.5c-28.5-10.8-55-26.2-78.7-45.7l-31.4-25.9-93.4 33.2c-17-22.9-31.2-47.6-42.6-73.6l75.5-64.5-6.5-40c-2.4-14.9-3.7-30.3-3.7-45.5 0-15.3 1.2-30.6 3.7-45.5l6.5-40-75.5-64.5c11.3-26.1 25.6-50.7 42.6-73.6l93.4 33.2 31.4-25.9c23.7-19.5 50.2-34.9 78.7-45.7l37.9-14.3 17.9-97.2c28.1-3.2 56.8-3.2 85 0l17.9 97 38.1 14.3c28.7 10.8 55.4 26.2 79.3 45.8l31.4 25.8 92.8-32.9c17 22.9 31.2 47.6 42.6 73.6L781.8 426l6.5 39.9zM512 326c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm79.2 255.2A111.6 111.6 0 01512 614c-29.9 0-58-11.7-79.2-32.8A111.6 111.6 0 01400 502c0-29.9 11.7-58 32.8-79.2C454 401.6 482.1 390 512 390c29.9 0 58 11.6 79.2 32.8A111.6 111.6 0 01624 502c0 29.9-11.7 58-32.8 79.2z\" />\n </svg>\n );\n}\n","import styleInject from '#style-inject';styleInject(\".react-pivot-chart-panel {\\n display: flex;\\n width: 100%;\\n min-width: 0;\\n height: 100%;\\n min-height: 0;\\n flex-direction: column;\\n gap: 8px;\\n padding: 0;\\n overflow: auto;\\n background: #fff;\\n box-sizing: border-box;\\n}\\n.react-pivot-chart-card {\\n display: flex;\\n min-width: 0;\\n min-height: 240px;\\n flex: 0 0 260px;\\n flex-direction: column;\\n overflow: hidden;\\n border-radius: 0;\\n background: #fff;\\n box-sizing: border-box;\\n}\\n.react-pivot-chart-card:only-child {\\n min-height: 240px;\\n flex: 1 1 auto;\\n}\\n.react-pivot-chart-card__header {\\n display: flex;\\n height: 42px;\\n flex: 0 0 42px;\\n align-items: center;\\n justify-content: space-between;\\n padding: 0 10px 0 14px;\\n border-bottom: 1px solid #edf0f2;\\n color: #1f2329;\\n font-size: 13px;\\n box-sizing: border-box;\\n}\\n.react-pivot-chart-card__remove {\\n display: inline-flex;\\n width: 24px;\\n height: 24px;\\n align-items: center;\\n justify-content: center;\\n padding: 0;\\n border: 0;\\n background: transparent;\\n color: #646a73;\\n cursor: pointer;\\n font: 18px/24px \\\"Segoe UI\\\", sans-serif;\\n}\\n.react-pivot-chart-card__remove:hover {\\n background: #f2f3f5;\\n color: #d14343;\\n}\\n.react-pivot-chart-card__canvas {\\n min-width: 0;\\n min-height: 0;\\n flex: 1 1 auto;\\n}\\n.react-pivot-chart-card__empty {\\n display: grid;\\n min-height: 0;\\n flex: 1 1 auto;\\n place-items: center;\\n color: #8f959e;\\n font-size: 12px;\\n}\\n\")","import { useEffect, useMemo, useRef } from \"react\";\nimport { CanvasChart } from \"@canvas-components/chart\";\nimport type {\n PivotDimension,\n PivotIndicator,\n PivotModel,\n} from \"@canvas-components/pivot-table\";\nimport {\n buildPivotChartOption,\n pivotChartTypeLabels,\n type PivotChartOption,\n type PivotChartType,\n} from \"./pivot-chart-data\";\nimport \"./pivot-chart-panel.css\";\n\nexport interface PivotChartItem {\n id: string;\n type: PivotChartType;\n}\n\n/** 透视图表列。 */\nexport function PivotChartPanel<RecordType>(props: {\n charts: PivotChartItem[];\n model: PivotModel<RecordType> | null;\n rows: PivotDimension<RecordType>[];\n columns: PivotDimension<RecordType>[];\n indicators: PivotIndicator<RecordType>[];\n onRemove: (chartId: string) => void;\n}) {\n return (\n <section className=\"react-pivot-chart-panel\" aria-label=\"透视图表\">\n {props.charts.map((chart, index) => (\n <PivotChartCard\n key={chart.id}\n chart={chart}\n index={index}\n model={props.model}\n rows={props.rows}\n columns={props.columns}\n indicators={props.indicators}\n onRemove={props.onRemove}\n />\n ))}\n </section>\n );\n}\n\nfunction PivotChartCard<RecordType>(props: {\n chart: PivotChartItem;\n index: number;\n model: PivotModel<RecordType> | null;\n rows: PivotDimension<RecordType>[];\n columns: PivotDimension<RecordType>[];\n indicators: PivotIndicator<RecordType>[];\n onRemove: (chartId: string) => void;\n}) {\n const option = useMemo(\n () =>\n props.model\n ? buildPivotChartOption({\n type: props.chart.type,\n model: props.model,\n rows: props.rows,\n columns: props.columns,\n indicators: props.indicators,\n })\n : null,\n [\n props.chart.type,\n props.columns,\n props.indicators,\n props.model,\n props.rows,\n ],\n );\n const title = `${pivotChartTypeLabels[props.chart.type]} ${props.index + 1}`;\n return (\n <article className=\"react-pivot-chart-card\">\n <header className=\"react-pivot-chart-card__header\">\n <strong>{title}</strong>\n <button\n type=\"button\"\n className=\"react-pivot-chart-card__remove\"\n aria-label={`移除${title}`}\n title=\"移除图表\"\n onClick={() => props.onRemove(props.chart.id)}\n >\n ×\n </button>\n </header>\n {option ? (\n <PivotChartCanvas chartOption={option} />\n ) : (\n <div className=\"react-pivot-chart-card__empty\">\n 请先在值区域添加指标\n </div>\n )}\n </article>\n );\n}\n\nfunction PivotChartCanvas(props: { chartOption: PivotChartOption }) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return;\n }\n const chart = new CanvasChart(container, {\n type: props.chartOption.rendererType,\n option: props.chartOption.option,\n });\n chart.mount();\n return () => chart.destroy();\n }, [props.chartOption]);\n\n return <div ref={containerRef} className=\"react-pivot-chart-card__canvas\" />;\n}\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type ForwardedRef,\n} from \"react\";\nimport {\n PivotTable,\n type PivotDimensionFilter,\n type PivotDimensionFilterPanelRequest,\n type PivotContextMenuRequest,\n type PivotTooltipRequest,\n type PivotFilterCondition,\n type PivotFilterConditionOperator,\n type PivotTableOptions,\n createPivotFieldCatalog,\n createEmptyPivotFieldLayout,\n movePivotField,\n removePivotField,\n resolvePivotDimensionKey,\n resolvePivotFieldLayoutOptions,\n getValueByDataIndex,\n type BuiltInPivotAggregatorName,\n type PivotFieldArea,\n type PivotFieldLayout,\n type PivotModel,\n} from \"@canvas-components/pivot-table\";\nimport {\n ReactFilterPanel,\n ReactResizablePanels,\n type ReactFilterConditionOperator,\n type ReactFilterPanelRequest,\n type ReactFilterPanelValue,\n} from \"@canvas-components/react-components\";\nimport type { ReactPivotTableProps, ReactPivotTableRef } from \"../types\";\nimport { PivotContextMenu } from \"../features/context-menu/pivot-context-menu\";\nimport { PivotTooltip } from \"../features/tooltip/pivot-tooltip\";\nimport { PivotFieldPanel } from \"../features/field-panel/pivot-field-panel\";\nimport { PivotTitlebar } from \"../features/titlebar/pivot-titlebar\";\nimport {\n PivotChartPanel,\n type PivotChartItem,\n} from \"../features/chart/pivot-chart-panel\";\nimport type { PivotChartType } from \"../features/chart/pivot-chart-data\";\n\nfunction ReactPivotTableInner<RecordType>(\n props: ReactPivotTableProps<RecordType>,\n ref: ForwardedRef<ReactPivotTableRef<RecordType>>,\n) {\n const { className, style, customization, title, ...tableOptions } = props;\n const containerRef = useRef<HTMLDivElement | null>(null);\n const tableRef = useRef<PivotTable<RecordType> | null>(null);\n const customizationOptions =\n customization && typeof customization === \"object\"\n ? customization\n : undefined;\n const customizationEnabled =\n customization === true || customizationOptions != null;\n const [internalPanelOpen, setInternalPanelOpen] = useState(\n customizationOptions?.defaultOpen ?? false,\n );\n const [fieldPanelWidth, setFieldPanelWidth] = useState(\n () => customizationOptions?.panelWidth ?? 320,\n );\n const [chartPanelWidth, setChartPanelWidth] = useState(360);\n const [charts, setCharts] = useState<PivotChartItem[]>([]);\n const [chartModel, setChartModel] = useState<PivotModel<RecordType> | null>(\n null,\n );\n const chartIdRef = useRef(0);\n const [internalLayout, setInternalLayout] = useState<PivotFieldLayout>(\n () => customizationOptions?.defaultLayout ?? createEmptyPivotFieldLayout(),\n );\n const [fieldOverrides, setFieldOverrides] = useState<\n Record<string, { title?: string; aggregator?: BuiltInPivotAggregatorName }>\n >({});\n const [filterRequest, setFilterRequest] =\n useState<PivotDimensionFilterPanelRequest | null>(null);\n const [contextMenuRequest, setContextMenuRequest] =\n useState<PivotContextMenuRequest | null>(null);\n const [tooltipRequest, setTooltipRequest] =\n useState<PivotTooltipRequest | null>(null);\n const panelOpen = customizationOptions?.open ?? internalPanelOpen;\n const fieldLayout = customizationOptions?.layout ?? internalLayout;\n const baseFields = useMemo(() => {\n const catalog = createPivotFieldCatalog({\n fields: customizationOptions?.fields,\n filterDimensions: tableOptions.filterDimensions,\n columns: tableOptions.columns,\n rows: tableOptions.rows,\n indicators: tableOptions.indicators,\n });\n return catalog.map((field) =>\n field.indicator\n ? field\n : {\n ...field,\n indicator: {\n aggregator: inferFieldAggregator(\n tableOptions.dataSource,\n field.dataIndex,\n ),\n },\n },\n );\n }, [\n customizationOptions?.fields,\n tableOptions.filterDimensions,\n tableOptions.columns,\n tableOptions.rows,\n tableOptions.indicators,\n tableOptions.dataSource,\n ]);\n const fields = useMemo(\n () =>\n baseFields.map((field) => {\n const fieldKey = resolvePivotDimensionKey(field);\n const override = fieldOverrides[fieldKey];\n if (!override) return field;\n return {\n ...field,\n title: override.title ?? field.title,\n indicator: {\n ...field.indicator,\n title: override.title ?? field.indicator?.title,\n aggregator: override.aggregator ?? field.indicator?.aggregator,\n },\n };\n }),\n [baseFields, fieldOverrides],\n );\n const customizedOptions = useMemo(\n () =>\n customizationEnabled\n ? resolvePivotFieldLayoutOptions(fields, fieldLayout)\n : null,\n [customizationEnabled, fieldLayout, fields],\n );\n const refreshChartModel = () => {\n const nextModel = tableRef.current?.getPivotModel() ?? null;\n setChartModel((current) => (current === nextModel ? current : nextModel));\n };\n const options = {\n ...tableOptions,\n ...customizedOptions,\n ui: {\n onFilterPanelRequest: setFilterRequest,\n onContextMenuRequest: setContextMenuRequest,\n onTooltipRequest: setTooltipRequest,\n },\n onFilterChange: (event) => {\n tableOptions.onFilterChange?.(event);\n refreshChartModel();\n },\n onSortChange: (event) => {\n tableOptions.onSortChange?.(event);\n refreshChartModel();\n },\n } as PivotTableOptions<RecordType>;\n const sharedFilterRequest = useMemo(() => {\n if (!filterRequest) return null;\n const { axis, dimensionKey } = filterRequest;\n return toSharedFilterRequest(filterRequest, (value) => {\n setFilterRequest((current) =>\n current?.axis === axis && current.dimensionKey === dimensionKey\n ? { ...current, value }\n : current,\n );\n });\n }, [filterRequest]);\n\n const setPanelOpen = (open: boolean) => {\n if (customizationOptions?.open === undefined) setInternalPanelOpen(open);\n customizationOptions?.onOpenChange?.(open);\n };\n const addChart = (type: PivotChartType) => {\n setCharts((current) => {\n if (current.some((chart) => chart.type === type)) {\n return current;\n }\n chartIdRef.current += 1;\n return [...current, { id: `pivot-chart-${chartIdRef.current}`, type }];\n });\n refreshChartModel();\n };\n const removeChart = (chartId: string) => {\n setCharts((current) => current.filter((chart) => chart.id !== chartId));\n };\n const applyLayout = (next: PivotFieldLayout) => {\n if (customizationOptions?.layout === undefined) setInternalLayout(next);\n customizationOptions?.onLayoutChange?.(next);\n };\n const moveField = (\n fieldKey: string,\n area: PivotFieldArea,\n index?: number,\n sourceArea?: PivotFieldArea,\n ) => {\n applyLayout(movePivotField(fieldLayout, fieldKey, area, index, sourceArea));\n };\n const removeField = (fieldKey: string) => {\n applyLayout(removePivotField(fieldLayout, fieldKey));\n };\n const updateField = (\n fieldKey: string,\n patch: { title?: string; aggregator?: BuiltInPivotAggregatorName },\n ) => {\n setFieldOverrides((current) => ({\n ...current,\n [fieldKey]: { ...current[fieldKey], ...patch },\n }));\n const field = fields.find(\n (item) => resolvePivotDimensionKey(item) === fieldKey,\n );\n if (field) {\n customizationOptions?.onFieldChange?.({\n ...field,\n title: patch.title ?? field.title,\n indicator: {\n ...field.indicator,\n title: patch.title ?? field.indicator?.title,\n aggregator: patch.aggregator ?? field.indicator?.aggregator,\n },\n });\n }\n };\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const table = new PivotTable(container, options);\n table.mount();\n tableRef.current = table;\n refreshChartModel();\n return () => {\n table.destroy();\n tableRef.current = null;\n setChartModel(null);\n };\n }, []);\n\n useEffect(() => {\n const table = tableRef.current;\n if (!table) return;\n table.updateOptions(options);\n refreshChartModel();\n }, [options]);\n\n useEffect(() => {\n if (customizationOptions?.panelWidth != null) {\n setFieldPanelWidth(customizationOptions.panelWidth);\n }\n }, [customizationOptions?.panelWidth]);\n\n useImperativeHandle(\n ref,\n () => ({\n getPivotModel: () => tableRef.current?.getPivotModel() ?? null,\n getVisibleRowNodes: () => tableRef.current?.getVisibleRowNodes() ?? [],\n getVisibleColumnNodes: () =>\n tableRef.current?.getVisibleColumnNodes() ?? [],\n getCellRecords: (params) =>\n tableRef.current?.getCellRecords(params) ?? [],\n getSelection: () => tableRef.current?.getSelection() ?? null,\n setSelection: (selection) =>\n tableRef.current?.setSelection(selection) ?? null,\n getFilters: () => tableRef.current?.getFilters() ?? null,\n getDebugSnapshot: () => tableRef.current?.getDebugSnapshot() ?? null,\n getSorts: () => tableRef.current?.getSorts() ?? [],\n resetSorters: () => tableRef.current?.resetSorters() ?? [],\n selectCell: (address, extend) =>\n tableRef.current?.selectCell(address, extend) ?? null,\n selectNode: (axis, nodeId) =>\n tableRef.current?.selectNode(axis, nodeId) ?? null,\n scrollToCell: (address) =>\n tableRef.current?.scrollToCell(address) ?? false,\n getCellValue: (address) => tableRef.current?.getCellValue(address),\n expandRowNode: (nodeId) =>\n tableRef.current?.expandRowNode(nodeId) ?? false,\n collapseRowNode: (nodeId) =>\n tableRef.current?.collapseRowNode(nodeId) ?? false,\n expandColumnNode: (nodeId) =>\n tableRef.current?.expandColumnNode(nodeId) ?? false,\n collapseColumnNode: (nodeId) =>\n tableRef.current?.collapseColumnNode(nodeId) ?? false,\n expandAll: (axis) => tableRef.current?.expandAll(axis) ?? 0,\n collapseAll: (axis) => tableRef.current?.collapseAll(axis) ?? 0,\n setDimensionFilter: (axis, dimensionKey, filter) =>\n tableRef.current?.setDimensionFilter(axis, dimensionKey, filter) ??\n null,\n getDimensionFilterOptions: (axis, dimensionKey) =>\n tableRef.current?.getDimensionFilterOptions(axis, dimensionKey) ?? [],\n resetFilters: () => tableRef.current?.resetFilters() ?? null,\n setDimensionSort: (axis, dimensionKey, direction) =>\n tableRef.current?.setDimensionSort(axis, dimensionKey, direction) ?? [],\n setIndicatorSort: (params) =>\n tableRef.current?.setIndicatorSort(params) ?? [],\n exportCsv: (exportOptions) =>\n tableRef.current?.exportCsv(exportOptions) ?? \"\",\n exportXlsx: (exportOptions) =>\n tableRef.current?.exportXlsx(exportOptions) ?? new Uint8Array(),\n getState: () => tableRef.current?.getState() ?? null,\n restoreState: (snapshot) =>\n tableRef.current?.restoreState(snapshot) ?? false,\n }),\n [],\n );\n\n return (\n <>\n <div\n className={`react-pivot-table${className ? ` ${className}` : \"\"}`}\n style={{\n width: props.width ?? \"100%\",\n height: props.height ?? \"100%\",\n ...style,\n }}\n >\n <PivotTitlebar\n title={title}\n showFieldSettings={customizationEnabled}\n fieldPanelOpen={panelOpen}\n onToggleFieldPanel={() => setPanelOpen(!panelOpen)}\n onAddChart={addChart}\n chartTypes={charts.map((chart) => chart.type)}\n />\n <div className=\"react-pivot-table__content\">\n <ReactResizablePanels\n animated\n className=\"react-pivot-table-customization\"\n style={{ width: \"100%\", height: \"100%\" }}\n sizes={{\n \"chart-panel\": chartPanelWidth,\n \"field-panel\": fieldPanelWidth,\n }}\n onSizesChange={(nextSizes) => {\n const nextChartSize = nextSizes[\"chart-panel\"];\n if (typeof nextChartSize === \"number\") {\n setChartPanelWidth(nextChartSize);\n }\n const nextFieldSize = nextSizes[\"field-panel\"];\n if (panelOpen && typeof nextFieldSize === \"number\") {\n setFieldPanelWidth(nextFieldSize);\n }\n }}\n panels={[\n {\n id: \"pivot-table\",\n minSize: 320,\n content: (\n <div\n ref={containerRef}\n className=\"react-pivot-table-customization__table\"\n />\n ),\n },\n ...(charts.length > 0\n ? [\n {\n id: \"chart-panel\",\n size: chartPanelWidth,\n minSize: 300,\n maxSize: 640,\n className:\n \"react-pivot-table-customization__chart-column\",\n content: (\n <PivotChartPanel\n charts={charts}\n model={chartModel}\n rows={options.rows}\n columns={options.columns}\n indicators={options.indicators}\n onRemove={removeChart}\n />\n ),\n },\n ]\n : []),\n ...(customizationEnabled\n ? [\n {\n id: \"field-panel\",\n collapsed: !panelOpen,\n size: fieldPanelWidth,\n minSize: 280,\n maxSize: 520,\n className:\n \"react-pivot-table-customization__panel-column\",\n content: (\n <PivotFieldPanel\n fields={fields}\n layout={fieldLayout}\n onClose={() => setPanelOpen(false)}\n onMove={moveField}\n onRemove={removeField}\n onFieldChange={updateField}\n />\n ),\n },\n ]\n : []),\n ]}\n />\n </div>\n </div>\n <ReactFilterPanel request={sharedFilterRequest} />\n <PivotContextMenu request={contextMenuRequest} />\n <PivotTooltip request={tooltipRequest} />\n </>\n );\n}\n\n/** PivotTable React 适配组件。 */\nexport const ReactPivotTable = forwardRef(ReactPivotTableInner) as <\n RecordType = Record<string, unknown>,\n>(\n props: ReactPivotTableProps<RecordType> & {\n ref?: ForwardedRef<ReactPivotTableRef<RecordType>>;\n },\n) => ReturnType<typeof ReactPivotTableInner>;\n\nexport function toSharedFilterRequest(\n request: PivotDimensionFilterPanelRequest | null,\n onValueChange?: (value: PivotDimensionFilter) => void,\n): ReactFilterPanelRequest | null {\n if (!request) return null;\n return {\n columnTitle: request.title,\n anchorRect: {\n x: request.x,\n y: request.y,\n width: request.width,\n height: 40,\n },\n value: toSharedValue(request.value),\n filterOptionImmediateApply: request.filterOptionImmediateApply,\n options: request.options,\n texts: defaultFilterTexts,\n onApply: (value) => {\n const next = toPivotFilter(value);\n onValueChange?.(next);\n request.onApply(next);\n },\n onReset: () => {\n onValueChange?.({});\n request.onReset();\n },\n onClose: request.onCancel,\n };\n}\n\nfunction toSharedValue(value: PivotDimensionFilter): ReactFilterPanelValue {\n return {\n keyword: value.searchKeyword ?? \"\",\n mode: value.searchExact ? \"exact\" : \"fuzzy\",\n searchExact: value.searchExact,\n selectedKeys: value.selectedKeys ?? [],\n filterType:\n value.condition && value.condition.operator !== \"none\"\n ? \"condition\"\n : \"value\",\n conditionOperator: toSharedOperator(value.condition?.operator),\n conditionValue: stringifyConditionValue(value.condition?.value),\n conditionSecondValue: stringifyConditionValue(value.condition?.secondValue),\n conditionRelation: value.conditionRelation,\n secondConditionOperator: toSharedOperator(value.secondCondition?.operator),\n secondConditionValue: stringifyConditionValue(value.secondCondition?.value),\n secondConditionSecondValue: stringifyConditionValue(\n value.secondCondition?.secondValue,\n ),\n };\n}\n\nfunction toPivotFilter(value: ReactFilterPanelValue): PivotDimensionFilter {\n if (value.filterType === \"condition\") {\n return {\n condition: toPivotCondition(\n value.conditionOperator,\n value.conditionValue,\n value.conditionSecondValue,\n ),\n secondCondition: toPivotCondition(\n value.secondConditionOperator,\n value.secondConditionValue,\n value.secondConditionSecondValue,\n ),\n conditionRelation: value.conditionRelation,\n };\n }\n return {\n selectedKeys: value.selectedKeys ?? [],\n searchKeyword: value.keyword,\n searchExact: value.searchExact,\n };\n}\n\nfunction toPivotCondition(\n operator: ReactFilterConditionOperator | undefined,\n value: string | undefined,\n secondValue: string | undefined,\n): PivotFilterCondition {\n return {\n operator: toPivotOperator(operator),\n value,\n secondValue,\n };\n}\n\nfunction toSharedOperator(\n operator: PivotFilterConditionOperator | undefined,\n): ReactFilterConditionOperator {\n const map: Record<\n PivotFilterConditionOperator,\n ReactFilterConditionOperator\n > = {\n none: \"none\",\n equals: \"eq\",\n notEquals: \"neq\",\n contains: \"includes\",\n notContains: \"notIncludes\",\n startsWith: \"startsWith\",\n endsWith: \"endsWith\",\n greaterThan: \"gt\",\n greaterThanOrEqual: \"gte\",\n lessThan: \"lt\",\n lessThanOrEqual: \"lte\",\n between: \"between\",\n blank: \"blank\",\n notBlank: \"notBlank\",\n notBetween: \"notBetween\",\n notStartsWith: \"notStartsWith\",\n notEndsWith: \"notEndsWith\",\n };\n return map[operator ?? \"none\"];\n}\n\nfunction toPivotOperator(\n operator: ReactFilterConditionOperator | undefined,\n): PivotFilterConditionOperator {\n const map: Partial<\n Record<ReactFilterConditionOperator, PivotFilterConditionOperator>\n > = {\n none: \"none\",\n eq: \"equals\",\n neq: \"notEquals\",\n includes: \"contains\",\n notIncludes: \"notContains\",\n startsWith: \"startsWith\",\n endsWith: \"endsWith\",\n gt: \"greaterThan\",\n gte: \"greaterThanOrEqual\",\n lt: \"lessThan\",\n lte: \"lessThanOrEqual\",\n between: \"between\",\n blank: \"blank\",\n notBlank: \"notBlank\",\n notBetween: \"notBetween\",\n notStartsWith: \"notStartsWith\",\n notEndsWith: \"notEndsWith\",\n };\n return map[operator ?? \"none\"] ?? \"none\";\n}\n\nfunction stringifyConditionValue(value: unknown) {\n return value == null ? \"\" : String(value);\n}\n\nconst defaultFilterTexts = {\n title: \"过滤\",\n valueFilterTab: \"按值\",\n conditionFilterTab: \"按条件\",\n searchPlaceholder: \"搜索过滤项\",\n optionsLabel: \"过滤项\",\n emptyOptions: \"暂无过滤项\",\n loadingOptions: \"加载中\",\n exactToggleLabel: \"精确匹配\",\n allOptionLabel: \"全部\",\n blankOptionLabel: \"空\",\n notBlankOptionLabel: \"非空\",\n relationLabel: \"条件关系\",\n firstConditionLabel: \"条件一\",\n secondConditionLabel: \"条件二\",\n firstValuePlaceholder: \"请输入条件值\",\n secondValuePlaceholder: \"请输入第二个值\",\n relationAndLabel: \"且\",\n relationOrLabel: \"或\",\n resetAction: \"重置\",\n applyAction: \"确定\",\n};\n\nfunction inferFieldAggregator<RecordType>(\n records: RecordType[],\n dataIndex: Parameters<typeof getValueByDataIndex>[1],\n): BuiltInPivotAggregatorName {\n const value = records\n .map((record) => getValueByDataIndex(record, dataIndex))\n .find((item) => item != null);\n return typeof value === \"number\" ? \"sum\" : \"count\";\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/features/context-menu/pivot-context-menu.tsx","../src/features/tooltip/pivot-tooltip.tsx","#style-inject:#style-inject","../src/features/field-panel/pivot-field-panel.css","../src/features/field-panel/pivot-field-panel.tsx","../src/features/chart/pivot-chart-data.ts","../src/features/titlebar/pivot-titlebar.css","../src/features/titlebar/pivot-titlebar.tsx","../src/features/chart/pivot-chart-panel.css","../src/features/chart/pivot-chart-panel.tsx","../src/components/react-pivot-table.tsx"],"names":["jsx","useState","jsxs","ReactPopup","rowPath","useRef","useMemo","resolvePivotDimensionKey","useEffect","Fragment","ReactResizablePanels"],"mappings":";;;;;;;;AAQO,SAAS,iBAAiB,KAAA,EAE9B;AACD,EAAA,MAAM,EAAE,SAAQ,GAAI,KAAA;AACpB,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,uBACE,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAI,IAAA;AAAA,MACJ,UAAA,EAAY,EAAE,CAAA,EAAG,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,OAAA,CAAQ,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAE;AAAA,MAC9D,MAAA,EAAQ,CAAA;AAAA,MACR,gBAAA,EAAkB,KAAA;AAAA,MAClB,QAAA,EAAU,GAAA;AAAA,MACV,YAAA,EAAc,CAAC,IAAA,KAAS;AACtB,QAAA,IAAI,CAAC,IAAA,EAAM,OAAA,CAAQ,OAAA,EAAQ;AAAA,MAC7B,CAAA;AAAA,MACA,YAAA,EAAc,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MAE3B,QAAA,kBAAA,IAAA,CAAC,SAAI,KAAA,EAAO,EAAE,SAAS,MAAA,EAAQ,QAAA,EAAU,KAAI,EAC3C,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,gCAAA;AAAA,YACN,SAAS,OAAA,CAAQ,MAAA;AAAA,YACjB,OAAO,OAAA,CAAQ;AAAA;AAAA,SACjB;AAAA,QACC,QAAQ,eAAA,mBACP,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,0BAAA;AAAA,YACN,SAAS,OAAA,CAAQ,eAAA;AAAA,YACjB,OAAO,OAAA,CAAQ;AAAA;AAAA,SACjB,GACE,IAAA;AAAA,wBACJ,GAAA;AAAA,UAAC,mBAAA;AAAA,UAAA;AAAA,YAEC;AAAA,WAAA;AAAA,UADK,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAC,CAAA;AAAA,SAEhC;AAAA,wBACA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,kBAAA;AAAA,YACN,SAAS,OAAA,CAAQ,WAAA;AAAA,YACjB,OAAO,OAAA,CAAQ;AAAA;AAAA,SACjB;AAAA,wBACA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,mBAAA;AAAA,YACN,SAAS,OAAA,CAAQ,YAAA;AAAA,YACjB,OAAO,OAAA,CAAQ;AAAA;AAAA,SACjB;AAAA,wBACA,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,YAAY,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,EAAA,EAAG,EAAG,QAAA,EAAA;AAAA,UAAA,2BAAA;AAAA,UAC7D,OAAA,CAAQ,WAAA;AAAA,UAAY;AAAA,SAAA,EAC5B;AAAA,OAAA,EACF;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,oBAAoB,KAAA,EAA6C;AACxE,EAAA,MAAM,EAAE,SAAQ,GAAI,KAAA;AACpB,EAAA,MAAM,UAAA,GAAa,OAAiC,IAAI,CAAA;AACxD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAS,KAAK,CAAA;AACtC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA;AAAA,IACxB,QAAQ,eAAA,IAAmB;AAAA,MACzB,QAAA,EAAU,CAAA;AAAA,MACV,WAAA,EAAa,CAAA;AAAA,MACb,MAAA,EAAQ,CAAA;AAAA,MACR,SAAA,EAAW,CAAA;AAAA,MACX,QAAA,EAAU,CAAA;AAAA,MACV,WAAA,EAAa;AAAA;AACf,GACF;AACA,EAAA,IAAI,CAAC,OAAA,CAAQ,eAAA,IAAmB,CAAC,OAAA,CAAQ,uBAAuB,OAAO,IAAA;AAEvE,EAAA,MAAM,MAAA,GAAS,CACb,GAAA,EACA,KAAA,KACG;AACH,IAAA,QAAA,CAAS,CAAC,OAAA,MAAa;AAAA,MACrB,GAAG,OAAA;AAAA,MACH,CAAC,GAAG,GAAG,KAAA,IAAS,OAAO,CAAA,GAAI,IAAA,CAAK,MAAM,KAAK;AAAA,KAC7C,CAAE,CAAA;AAAA,EACJ,CAAA;AAEA,EAAA,4BACG,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,UAAA;AAAA,QACL,IAAA,EAAK,QAAA;AAAA,QACL,SAAS,MAAM,OAAA,CAAQ,CAAC,KAAA,KAAU,CAAC,KAAK,CAAA;AAAA,QACxC,KAAA,EAAO,eAAA;AAAA,QACR,QAAA,EAAA;AAAA;AAAA,KAED;AAAA,oBACA,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,SAAA,EAAW,UAAA;AAAA,QACX,SAAA,EAAU,UAAA;AAAA,QACV,MAAA,EAAQ,CAAA;AAAA,QACR,QAAA,EAAU,GAAA;AAAA,QACV,YAAA,EAAc,OAAA;AAAA,QACd,YAAA,EAAc,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,GAAA,EAAI;AAAA,QAEvC,+BAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,GAAE,EACvB,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,EAAW,UAAU,EAAA,EAAI,YAAA,EAAc,CAAA,EAAE,EAAG,QAAA,EAAA,oEAAA,EAEjE,CAAA;AAAA,0BACA,IAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,OAAA,EAAS,MAAA;AAAA,gBACT,mBAAA,EAAqB,cAAA;AAAA,gBACrB,GAAA,EAAK,CAAA;AAAA,gBACL,YAAA,EAAc,CAAA;AAAA,gBACd,KAAA,EAAO,SAAA;AAAA,gBACP,QAAA,EAAU,EAAA;AAAA,gBACV,SAAA,EAAW;AAAA,eACb;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA;AAAA,gCACN,GAAA,CAAC,UAAK,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,gCACP,GAAA,CAAC,UAAK,QAAA,EAAA,QAAA,EAAC;AAAA;AAAA;AAAA,WACT;AAAA,0BACA,GAAA;AAAA,YAAC,kBAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,cAAA;AAAA,cACN,KAAK,KAAA,CAAM,QAAA;AAAA,cACX,QAAQ,KAAA,CAAM,WAAA;AAAA,cACd,QAAQ,KAAA,CAAM,QAAA;AAAA,cACd,WAAW,KAAA,CAAM,WAAA;AAAA,cACjB,WAAA,EAAa,CAAC,KAAA,KAAU,MAAA,CAAO,YAAY,KAAK,CAAA;AAAA,cAChD,cAAA,EAAgB,CAAC,KAAA,KAAU,MAAA,CAAO,eAAe,KAAK;AAAA;AAAA,WACxD;AAAA,0BACA,GAAA;AAAA,YAAC,kBAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,cAAA;AAAA,cACN,KAAK,KAAA,CAAM,MAAA;AAAA,cACX,QAAQ,KAAA,CAAM,SAAA;AAAA,cACd,QAAQ,KAAA,CAAM,QAAA;AAAA,cACd,WAAW,KAAA,CAAM,WAAA;AAAA,cACjB,WAAA,EAAa,CAAC,KAAA,KAAU,MAAA,CAAO,UAAU,KAAK,CAAA;AAAA,cAC9C,cAAA,EAAgB,CAAC,KAAA,KAAU,MAAA,CAAO,aAAa,KAAK;AAAA;AAAA,WACtD;AAAA,0BACA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,KAAA,EAAO;AAAA,gBACL,OAAA,EAAS,OAAA;AAAA,gBACT,KAAA,EAAO,MAAA;AAAA,gBACP,MAAA,EAAQ,EAAA;AAAA,gBACR,SAAA,EAAW,CAAA;AAAA,gBACX,MAAA,EAAQ,MAAA;AAAA,gBACR,YAAA,EAAc,CAAA;AAAA,gBACd,UAAA,EAAY,SAAA;AAAA,gBACZ,KAAA,EAAO,MAAA;AAAA,gBACP,MAAA,EAAQ;AAAA,eACV;AAAA,cACA,SAAS,MAAM;AACb,gBAAA,OAAA,CAAQ,qBAAA,GAAwB;AAAA,kBAC9B,UAAU,KAAA,CAAM,QAAA;AAAA,kBAChB,aAAa,KAAA,CAAM,WAAA;AAAA,kBACnB,QAAQ,KAAA,CAAM,MAAA;AAAA,kBACd,WAAW,KAAA,CAAM;AAAA,iBAClB,CAAA;AACD,gBAAA,OAAA,CAAQ,KAAK,CAAA;AACb,gBAAA,OAAA,CAAQ,OAAA,EAAQ;AAAA,cAClB,CAAA;AAAA,cACD,QAAA,EAAA;AAAA;AAAA;AAED,SAAA,EACF;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,mBAAmB,KAAA,EAQzB;AACD,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,MAAA;AAAA,QACT,mBAAA,EAAqB,cAAA;AAAA,QACrB,GAAA,EAAK,CAAA;AAAA,QACL,UAAA,EAAY,QAAA;AAAA,QACZ,YAAA,EAAc;AAAA,OAChB;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,OAAO,EAAE,KAAA,EAAO,WAAW,QAAA,EAAU,EAAA,EAAG,EAAI,QAAA,EAAA,KAAA,CAAM,KAAA,EAAM,CAAA;AAAA,wBAC9D,GAAA;AAAA,UAAC,gBAAA;AAAA,UAAA;AAAA,YACC,OAAO,KAAA,CAAM,GAAA;AAAA,YACb,GAAA,EAAK,CAAA;AAAA,YACL,KAAK,KAAA,CAAM,MAAA;AAAA,YACX,IAAA,EAAM,CAAA;AAAA,YACN,SAAA,EAAW,CAAA;AAAA,YACX,WAAA,EAAY,QAAA;AAAA,YACZ,UAAU,KAAA,CAAM;AAAA;AAAA,SAClB;AAAA,wBACA,GAAA;AAAA,UAAC,gBAAA;AAAA,UAAA;AAAA,YACC,OAAO,KAAA,CAAM,MAAA;AAAA,YACb,GAAA,EAAK,CAAA;AAAA,YACL,KAAK,KAAA,CAAM,SAAA;AAAA,YACX,IAAA,EAAM,CAAA;AAAA,YACN,SAAA,EAAW,CAAA;AAAA,YACX,WAAA,EAAY,QAAA;AAAA,YACZ,UAAU,KAAA,CAAM;AAAA;AAAA;AAClB;AAAA;AAAA,GACF;AAEJ;AAEA,IAAM,eAAA,GAAkB;AAAA,EACtB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,QAAA;AAAA,EACT,MAAA,EAAQ,CAAA;AAAA,EACR,YAAA,EAAc,CAAA;AAAA,EACd,UAAA,EAAY,aAAA;AAAA,EACZ,KAAA,EAAO,SAAA;AAAA,EACP,SAAA,EAAW,MAAA;AAAA,EACX,MAAA,EAAQ;AACV,CAAA;AAEA,SAAS,WAAW,KAAA,EAIjB;AACD,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,SAAS,MAAM;AACb,QAAA,KAAA,CAAM,OAAA,EAAQ;AACd,QAAA,KAAA,CAAM,KAAA,EAAM;AAAA,MACd,CAAA;AAAA,MACA,KAAA,EAAO,eAAA;AAAA,MAEN,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,GACT;AAEJ;AChPO,SAAS,aAAa,KAAA,EAAgD;AAC3E,EAAA,MAAM,EAAE,SAAQ,GAAI,KAAA;AACpB,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,IAAA;AAC5C,EAAA,OAAO,YAAA;AAAA,oBACLA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,SAAA;AAAA,QACL,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,OAAA;AAAA,UACV,IAAA,EAAM,QAAQ,CAAA,GAAI,EAAA;AAAA,UAClB,GAAA,EAAK,QAAQ,CAAA,GAAI,EAAA;AAAA,UACjB,MAAA,EAAQ,IAAA;AAAA,UACR,QAAA,EAAU,GAAA;AAAA,UACV,OAAA,EAAS,UAAA;AAAA,UACT,YAAA,EAAc,CAAA;AAAA,UACd,UAAA,EAAY,wBAAA;AAAA,UACZ,KAAA,EAAO,MAAA;AAAA,UACP,QAAA,EAAU,EAAA;AAAA,UACV,UAAA,EAAY,GAAA;AAAA,UACZ,YAAA,EAAc,UAAA;AAAA,UACd,aAAA,EAAe;AAAA,SACjB;AAAA,QAEC,QAAA,EAAA,OAAA,CAAQ;AAAA;AAAA,KACX;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACF;;;AC9ByB,SAAR,YAA6B,GAAA,EAAK,EAAE,QAAA,EAAS,GAAI,EAAC,EAAG;AAC1D,EAAA,IAAI,CAAC,GAAA,IAAO,OAAO,QAAA,KAAa,WAAA,EAAa;AAE7C,EAAA,MAAM,OAAO,QAAA,CAAS,IAAA,IAAQ,SAAS,oBAAA,CAAqB,MAAM,EAAE,CAAC,CAAA;AACrE,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAC5C,EAAA,KAAA,CAAM,IAAA,GAAO,UAAA;AAEb,EAAA,IAAI,aAAa,KAAA,EAAO;AACtB,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,IAAA,CAAK,YAAA,CAAa,KAAA,EAAO,IAAA,CAAK,UAAU,CAAA;AAAA,IAC1C,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,YAAY,KAAK,CAAA;AAAA,IACxB;AAAA,EACF,CAAA,MAAO;AACL,IAAA,IAAA,CAAK,YAAY,KAAK,CAAA;AAAA,EACxB;AAEA,EAAA,IAAI,MAAM,UAAA,EAAY;AACpB,IAAA,KAAA,CAAM,WAAW,OAAA,GAAU,GAAA;AAAA,EAC7B,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,WAAA,CAAY,QAAA,CAAS,cAAA,CAAe,GAAG,CAAC,CAAA;AAAA,EAChD;AACF;;;ACvB8B,WAAA,CAAY,msOAAmtO,CAAA;AC8BhwO,SAAS,gBAA4B,KAAA,EAezC;AACD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIC,SAAS,EAAE,CAAA;AACzC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAClE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAgC,IAAI,CAAA;AAC5E,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAkC,IAAI,CAAA;AAC5E,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAAoC,IAAI,CAAA;AACxE,EAAA,MAAM,iBAAA,GAAoB,OAAA,CAAQ,IAAA,EAAK,CAAE,iBAAA,EAAkB;AAC3D,EAAA,MAAM,aAAA,GAAgB,MAAM,MAAA,CAAO,MAAA;AAAA,IAAO,CAAC,UACzC,0BAAA,CAA2B,KAAK,EAC7B,iBAAA,EAAkB,CAClB,SAAS,iBAAiB;AAAA,GAC/B;AACA,EAAA,MAAM,gBAAgB,QAAA,GAClB,SAAA,CAAU,MAAM,MAAA,EAAQ,QAAA,CAAS,QAAQ,CAAA,GACzC,MAAA;AAEJ,EAAA,MAAM,iBAAA,GAAoB,CACxB,KAAA,EACA,QAAA,EACA,IAAA,KACG;AACH,IAAA,KAAA,CAAM,cAAA,EAAe;AACrB,IAAA,cAAA,CAAe,EAAE,UAAU,IAAA,EAAM,CAAA,EAAG,MAAM,OAAA,EAAS,CAAA,EAAG,KAAA,CAAM,OAAA,EAAS,CAAA;AAAA,EACvE,CAAA;AACA,EAAA,MAAM,eAAA,GAAkB,CACtB,KAAA,EACA,QAAA,EACA,IAAA,KACG;AACH,IAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,aAAA,CAAc,qBAAA,EAAsB;AACvD,IAAA,cAAA,CAAe,EAAE,UAAU,IAAA,EAAM,CAAA,EAAG,KAAK,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,MAAA,EAAQ,CAAA;AAAA,EACjE,CAAA;AAEA,EAAA,uBACEC,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,yBAAA,EAA0B,cAAW,4CAAA,EACpD,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,iCAAA,EAChB,QAAA,EAAA;AAAA,sBAAAF,GAAAA,CAAC,YAAO,QAAA,EAAA,4CAAA,EAAO,CAAA;AAAA,sBACfA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,sCAAA;AAAA,UACV,YAAA,EAAW,sCAAA;AAAA,UACX,KAAA,EAAM,cAAA;AAAA,UACN,SAAS,KAAA,CAAM,OAAA;AAAA,UAChB,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EACF,CAAA;AAAA,oBAEAA,GAAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,UAAA;AAAA,QACV,SAAA,EAAU,iCAAA;AAAA,QACV,MAAA,EAAQ;AAAA,UACN;AAAA,YACE,EAAA,EAAI,YAAA;AAAA,YACJ,OAAA,EAAS,GAAA;AAAA,YACT,OAAA,kBACEE,IAAAA,CAAC,SAAA,EAAA,EAAQ,WAAU,2EAAA,EACjB,QAAA,EAAA;AAAA,8BAAAF,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EAAyC,QAAA,EAAA,0BAAA,EAExD,CAAA;AAAA,8BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAgC,QAAA,EAAA,gFAAA,EAE/C,CAAA;AAAA,8BACAE,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,iCAAA,EACf,QAAA,EAAA;AAAA,gCAAAF,GAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,gCACzBA,GAAAA;AAAA,kBAAC,OAAA;AAAA,kBAAA;AAAA,oBACC,KAAA,EAAO,OAAA;AAAA,oBACP,WAAA,EAAY,0BAAA;AAAA,oBACZ,UAAU,CAAC,KAAA,KAAU,UAAA,CAAW,KAAA,CAAM,OAAO,KAAK;AAAA;AAAA;AACpD,eAAA,EACF,CAAA;AAAA,8BACAE,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,aAAA,CAAc,GAAA,CAAI,CAAC,KAAA,KAAU;AAC5B,kBAAA,MAAM,QAAA,GAAW,yBAAyB,KAAK,CAAA;AAC/C,kBAAA,MAAM,IAAA,GAAO,kBAAA,CAAmB,KAAA,CAAM,MAAA,EAAQ,QAAQ,CAAA;AACtD,kBAAA,uBACEA,IAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBAEC,SAAA,EAAU,gCAAA;AAAA,sBACV,SAAA,EAAS,IAAA;AAAA,sBACT,eAAA,EAAe,gBAAgB,QAAA,IAAY,MAAA;AAAA,sBAC3C,aAAa,CAAC,KAAA,KACZ,SAAA,CAAU,KAAA,EAAO,UAAU,cAAc,CAAA;AAAA,sBAE3C,WAAW,MAAM;AACf,wBAAA,cAAA,CAAe,IAAI,CAAA;AACnB,wBAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,sBACtB,CAAA;AAAA,sBAEA,QAAA,EAAA;AAAA,wCAAAF,GAAAA;AAAA,0BAAC,MAAA;AAAA,0BAAA;AAAA,4BACC,SAAA,EAAU,+BAAA;AAAA,4BACV,aAAA,EAAY;AAAA;AAAA,yBACd;AAAA,wCACAA,GAAAA;AAAA,0BAAC,aAAA;AAAA,0BAAA;AAAA,4BACC,SAAS,IAAA,IAAQ,IAAA;AAAA,4BACjB,YAAA,EAAY,CAAA,EAAG,0BAAA,CAA2B,KAAK,CAAC,CAAA,wBAAA,CAAA;AAAA,4BAChD,QAAA,EAAU,CAAC,KAAA,KAAU;AACnB,8BAAA,IAAI,KAAA,CAAM,OAAO,OAAA,EAAS;AACxB,gCAAA,KAAA,CAAM,MAAA;AAAA,kCACJ,QAAA;AAAA,kCACA,MAAM,WAAA,IAAe;AAAA,iCACvB;AAAA,8BACF,CAAA,MAAO;AACL,gCAAA,KAAA,CAAM,SAAS,QAAQ,CAAA;AAAA,8BACzB;AAAA,4BACF;AAAA;AAAA,yBACF;AAAA,wCACAA,IAAC,MAAA,EAAA,EAAK,KAAA,EAAO,2BAA2B,KAAK,CAAA,EAC1C,QAAA,EAAA,0BAAA,CAA2B,KAAK,CAAA,EACnC;AAAA;AAAA,qBAAA;AAAA,oBAhCK;AAAA,mBAiCP;AAAA,gBAEJ,CAAC,CAAA;AAAA,gBACA,aAAA,CAAc,WAAW,CAAA,mBACxBA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,EAAiC,QAAA,EAAA,gCAAA,EAEhD,CAAA,GACE;AAAA,eAAA,EACN;AAAA,aAAA,EACF;AAAA,WAEJ;AAAA,UACA;AAAA,YACE,EAAA,EAAI,aAAA;AAAA,YACJ,OAAA,EAAS,GAAA;AAAA,YACT,OAAA,kBACEE,IAAAA,CAAC,SAAA,EAAA,EAAQ,WAAU,0EAAA,EACjB,QAAA,EAAA;AAAA,8BAAAF,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EAAyC,QAAA,EAAA,4CAAA,EAExD,CAAA;AAAA,8BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAgC,QAAA,EAAA,8DAAA,EAE/C,CAAA;AAAA,8BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,EACZ,QAAA,EAAA,eAAA,CAAgB,GAAA,CAAI,CAAC,EAAE,IAAA,EAAM,KAAA,EAAM,qBAClCA,GAAAA;AAAA,gBAAC,SAAA;AAAA,gBAAA;AAAA,kBAEC,IAAA;AAAA,kBACA,KAAA;AAAA,kBACA,QAAQ,KAAA,CAAM,MAAA;AAAA,kBACd,SAAA,EAAW,UAAA,CAAW,KAAA,CAAM,MAAA,EAAQ,IAAI,CAAA;AAAA,kBACxC,UAAU,YAAA,KAAiB,IAAA;AAAA,kBAC3B,WAAA,EAAa,MAAM,eAAA,CAAgB,IAAI,CAAA;AAAA,kBACvC,aAAa,MACX,eAAA;AAAA,oBAAgB,CAAC,OAAA,KACf,OAAA,KAAY,IAAA,GAAO,IAAA,GAAO;AAAA,mBAC5B;AAAA,kBAEF,MAAA,EAAQ,CAAC,KAAA,EAAO,KAAA,KAAU;AACxB,oBAAA,KAAA,CAAM,cAAA,EAAe;AACrB,oBAAA,MAAM,SAAA,GAAY,aAAA,CAAc,KAAA,EAAO,WAAW,CAAA;AAClD,oBAAA,IAAI,SAAA,EAAW;AACb,sBAAA,KAAA,CAAM,MAAA;AAAA,wBACJ,SAAA,CAAU,QAAA;AAAA,wBACV,IAAA;AAAA,wBACA,KAAA;AAAA,wBACA,SAAA,CAAU;AAAA,uBACZ;AAAA,oBACF;AACA,oBAAA,cAAA,CAAe,IAAI,CAAA;AACnB,oBAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,kBACtB,CAAA;AAAA,kBACA,aAAA,EAAe,iBAAA;AAAA,kBACf,WAAA,EAAa;AAAA,iBAAA;AAAA,gBA3BR;AAAA,eA6BR,CAAA,EACH;AAAA,aAAA,EACF;AAAA;AAEJ;AACF;AAAA,KACF;AAAA,oBAEAA,GAAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,WAAA;AAAA,QACP,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,QAClC,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,UAAA,EAAY,CAAC,IAAA,KAAS;AACpB,UAAA,cAAA,CAAe,IAAI,CAAA;AACnB,UAAA,WAAA,CAAY,IAAI,CAAA;AAAA,QAClB;AAAA;AAAA,KACF;AAAA,IACC,QAAA,IAAY,gCACXA,GAAAA;AAAA,MAAC,kBAAA;AAAA,MAAA;AAAA,QAEC,KAAA,EAAO,QAAA;AAAA,QACP,KAAA,EAAO,aAAA;AAAA,QACP,OAAA,EAAS,MAAM,WAAA,CAAY,IAAI,CAAA;AAAA,QAC/B,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,UAAA,KAAA,CAAM,aAAA,CAAc,QAAA,CAAS,QAAA,EAAU,KAAK,CAAA;AAC5C,UAAA,WAAA,CAAY,IAAI,CAAA;AAAA,QAClB;AAAA,OAAA;AAAA,MAPK,CAAA,EAAG,SAAS,QAAQ,CAAA,CAAA,EAAI,SAAS,CAAC,CAAA,CAAA,EAAI,SAAS,CAAC,CAAA;AAAA,KAQvD,GACE;AAAA,GAAA,EACN,CAAA;AAEJ;AAEA,SAAS,UAAsB,KAAA,EAmB5B;AACD,EAAA,uBACEE,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACb,QAAA,EAAA;AAAA,oBAAAF,GAAAA,CAAC,SAAI,SAAA,EAAU,qCAAA,EACb,0BAAAA,GAAAA,CAAC,QAAA,EAAA,EAAQ,QAAA,EAAA,KAAA,CAAM,KAAA,EAAM,CAAA,EACvB,CAAA;AAAA,oBACAE,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,+BAAA;AAAA,QACV,eAAA,EAAe,MAAM,QAAA,IAAY,MAAA;AAAA,QACjC,UAAA,EAAY,CAAC,KAAA,KAAU,KAAA,CAAM,cAAA,EAAe;AAAA,QAC5C,aAAa,KAAA,CAAM,WAAA;AAAA,QACnB,WAAA,EAAa,CAAC,KAAA,KAAU;AACtB,UAAA,IACE,CAAC,KAAA,CAAM,aAAA,CAAc,QAAA,CAAS,KAAA,CAAM,aAA4B,CAAA,EAChE;AACA,YAAA,KAAA,CAAM,WAAA,EAAY;AAAA,UACpB;AAAA,QACF,CAAA;AAAA,QACA,MAAA,EAAQ,CAAC,KAAA,KAAU,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,QAEpC,QAAA,EAAA;AAAA,UAAA,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,CAAC,QAAA,EAAU,KAAA,KAAU;AACxC,YAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,MAAA,EAAQ,QAAQ,CAAA;AAC9C,YAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,YAAA,MAAM,UAAA,GACJ,MAAM,IAAA,KAAS,OAAA,GACX,4BAA4B,KAAK,CAAA,GACjC,2BAA2B,KAAK,CAAA;AACtC,YAAA,uBACEA,IAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAU,qCAAA;AAAA,gBACV,SAAA,EAAS,IAAA;AAAA,gBACT,WAAA,EAAa,CAAC,KAAA,KACZ,SAAA,CAAU,OAAO,QAAA,EAAU,MAAA,EAAW,MAAM,IAAI,CAAA;AAAA,gBAElD,UAAA,EAAY,CAAC,KAAA,KAAU,KAAA,CAAM,cAAA,EAAe;AAAA,gBAC5C,MAAA,EAAQ,CAAC,KAAA,KAAU;AACjB,kBAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,kBAAA,KAAA,CAAM,MAAA,CAAO,OAAO,KAAK,CAAA;AAAA,gBAC3B,CAAA;AAAA,gBACA,aAAA,EAAe,CAAC,KAAA,KACd,KAAA,CAAM,cAAc,KAAA,EAAO,QAAA,EAAU,MAAM,IAAI,CAAA;AAAA,gBAGjD,QAAA,EAAA;AAAA,kCAAAF,GAAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAU,+BAAA;AAAA,sBACV,aAAA,EAAY;AAAA;AAAA,mBACd;AAAA,kCACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,YAAa,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,kCACrCA,GAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,SAAA,EAAU,0CAAA;AAAA,sBACV,YAAA,EAAY,GAAG,UAAU,CAAA,wBAAA,CAAA;AAAA,sBACzB,KAAA,EAAM,0BAAA;AAAA,sBACN,aAAA,EAAe,CAAC,KAAA,KAAU,KAAA,CAAM,eAAA,EAAgB;AAAA,sBAChD,OAAA,EAAS,CAAC,KAAA,KACR,KAAA,CAAM,YAAY,KAAA,EAAO,QAAA,EAAU,MAAM,IAAI,CAAA;AAAA,sBAG/C,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO;AAAA;AAAA;AAC3B;AAAA,eAAA;AAAA,cA/BK;AAAA,aAgCP;AAAA,UAEJ,CAAC,CAAA;AAAA,UACA,KAAA,CAAM,SAAA,CAAU,MAAA,KAAW,CAAA,mBAC1BA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EAAsC,QAAA,EAAA,4CAAA,EAErD,CAAA,GACE;AAAA;AAAA;AAAA;AACN,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,iBAAiB,KAAA,EAYvB;AACD,EAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,KAAA,CAAM,MAAA,EAAQ,MAAM,IAAI,CAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,QAAQ,CAAA;AACzC,EAAA,uBACEA,GAAAA;AAAA,IAACG,UAAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAI,IAAA;AAAA,MACJ,UAAA,EAAY,EAAE,CAAA,EAAG,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,KAAA,CAAM,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAE;AAAA,MAC1D,MAAA,EAAQ,CAAA;AAAA,MACR,QAAA,EAAU,GAAA;AAAA,MACV,MAAA,EAAQ,KAAA;AAAA,MACR,YAAA,EAAc,UAAA;AAAA,MACd,YAAA,EAAc,CAAC,IAAA,KAAS;AACtB,QAAA,IAAI,CAAC,IAAA,EAAM,KAAA,CAAM,OAAA,EAAQ;AAAA,MAC3B,CAAA;AAAA,MAEA,0BAAAD,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EAAyB,MAAK,MAAA,EAC3C,QAAA,EAAA;AAAA,wBAAAF,GAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,cAAA;AAAA,YACN,UAAU,KAAA,IAAS,CAAA;AAAA,YACnB,OAAA,EAAS,MACP,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,QAAA,EAAU,KAAA,CAAM,IAAA,EAAM,KAAA,GAAQ,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA;AAAA,YAEhE,OAAO,KAAA,CAAM;AAAA;AAAA,SACf;AAAA,wBACAA,GAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,cAAA;AAAA,YACN,QAAA,EAAU,KAAA,GAAQ,CAAA,IAAK,KAAA,IAAS,KAAK,MAAA,GAAS,CAAA;AAAA,YAC9C,OAAA,EAAS,MACP,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,QAAA,EAAU,KAAA,CAAM,IAAA,EAAM,KAAA,GAAQ,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA;AAAA,YAEhE,OAAO,KAAA,CAAM;AAAA;AAAA,SACf;AAAA,wBACAA,GAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,0BAAA;AAAA,YACN,UAAU,KAAA,IAAS,CAAA;AAAA,YACnB,OAAA,EAAS,MACP,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,UAAU,KAAA,CAAM,IAAA,EAAM,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA;AAAA,YAExD,OAAO,KAAA,CAAM;AAAA;AAAA,SACf;AAAA,wBACAA,GAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,0BAAA;AAAA,YACN,QAAA,EAAU,KAAA,KAAU,IAAA,CAAK,MAAA,GAAS,CAAA;AAAA,YAClC,OAAA,EAAS,MACP,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,UAAU,KAAA,CAAM,IAAA,EAAM,MAAA,EAAW,KAAA,CAAM,IAAI,CAAA;AAAA,YAEhE,OAAO,KAAA,CAAM;AAAA;AAAA,SACf;AAAA,wBACAA,IAAC,aAAA,EAAA,EAAc,CAAA;AAAA,wBACfA,GAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,4CAAA;AAAA,YACN,QAAA,EAAU,MAAM,IAAA,KAAS,QAAA;AAAA,YACzB,OAAA,EAAS,MACP,KAAA,CAAM,MAAA,CAAO,MAAM,QAAA,EAAU,QAAA,EAAU,MAAA,EAAW,KAAA,CAAM,IAAI,CAAA;AAAA,YAE9D,OAAO,KAAA,CAAM;AAAA;AAAA,SACf;AAAA,wBACAA,GAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,sCAAA;AAAA,YACN,QAAA,EAAU,MAAM,IAAA,KAAS,KAAA;AAAA,YACzB,OAAA,EAAS,MACP,KAAA,CAAM,MAAA,CAAO,MAAM,QAAA,EAAU,KAAA,EAAO,MAAA,EAAW,KAAA,CAAM,IAAI,CAAA;AAAA,YAE3D,OAAO,KAAA,CAAM;AAAA;AAAA,SACf;AAAA,wBACAA,GAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,sCAAA;AAAA,YACN,QAAA,EAAU,MAAM,IAAA,KAAS,QAAA;AAAA,YACzB,OAAA,EAAS,MACP,KAAA,CAAM,MAAA,CAAO,MAAM,QAAA,EAAU,QAAA,EAAU,MAAA,EAAW,KAAA,CAAM,IAAI,CAAA;AAAA,YAE9D,OAAO,KAAA,CAAM;AAAA;AAAA,SACf;AAAA,wBACAA,GAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,0BAAA;AAAA,YACN,QAAA,EAAU,MAAM,IAAA,KAAS,OAAA;AAAA,YACzB,OAAA,EAAS,MACP,KAAA,CAAM,MAAA,CAAO,MAAM,QAAA,EAAU,OAAA,EAAS,MAAA,EAAW,KAAA,CAAM,IAAI,CAAA;AAAA,YAE7D,OAAO,KAAA,CAAM;AAAA;AAAA,SACf;AAAA,wBACAA,IAAC,aAAA,EAAA,EAAc,CAAA;AAAA,wBACfA,GAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,0BAAA;AAAA,YACN,MAAA,EAAM,IAAA;AAAA,YACN,OAAA,EAAS,MAAM,KAAA,CAAM,QAAA,CAAS,MAAM,QAAQ,CAAA;AAAA,YAC5C,OAAO,KAAA,CAAM;AAAA;AAAA,SACf;AAAA,wBACAA,GAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,6BAAA;AAAA,YACN,OAAA,EAAS,MAAM,KAAA,CAAM,UAAA,CAAW,KAAK;AAAA;AAAA;AACvC,OAAA,EACF;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,mBAA+B,KAAA,EAQrC;AACD,EAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,EAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,SAIhB,IAAI,CAAA;AACd,EAAA,MAAM,QAAA,GAAW,yBAAyB,KAAK,CAAA;AAC/C,EAAA,MAAM,OAAA,GACJ,KAAA,EAAO,GAAA,KAAQ,QAAA,GACX,KAAA,GACA;AAAA,IACE,GAAA,EAAK,QAAA;AAAA,IACL,KAAA,EAAO,2BAA2B,KAAK,CAAA;AAAA,IACvC,UAAA,EAAY,kBAAkB,KAAK;AAAA,GACrC;AACN,EAAA,uBACED,GAAAA;AAAA,IAACG,UAAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAI,IAAA;AAAA,MACJ,UAAA,EAAY,EAAE,CAAA,EAAG,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,KAAA,CAAM,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAE;AAAA,MAC1D,MAAA,EAAQ,CAAA;AAAA,MACR,QAAA,EAAU,GAAA;AAAA,MACV,MAAA,EAAQ,KAAA;AAAA,MACR,YAAA,EAAc,UAAA;AAAA,MACd,YAAA,EAAc,CAAC,IAAA,KAAS;AACtB,QAAA,IAAI,CAAC,IAAA,EAAM,KAAA,CAAM,OAAA,EAAQ;AAAA,MAC3B,CAAA;AAAA,MAEA,QAAA,kBAAAD,IAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,4BAAA;AAAA,UACV,QAAA,EAAU,CAAC,KAAA,KAAU;AACnB,YAAA,KAAA,CAAM,cAAA,EAAe;AACrB,YAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,cACZ,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAK,IAAK,MAAA;AAAA,cAC/B,YAAY,OAAA,CAAQ;AAAA,aACrB,CAAA;AAAA,UACH,CAAA;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAF,GAAAA,CAAC,YAAO,QAAA,EAAA,0BAAA,EAAI,CAAA;AAAA,4BACZE,KAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAF,GAAAA,CAAC,UAAK,QAAA,EAAA,gCAAA,EAAK,CAAA;AAAA,8BACXA,GAAAA;AAAA,gBAAC,UAAA;AAAA,gBAAA;AAAA,kBACC,gBAAA,EAAiB,wCAAA;AAAA,kBACjB,OAAO,OAAA,CAAQ,KAAA;AAAA,kBACf,QAAA,EAAU,CAAC,KAAA,KACT,QAAA,CAAS,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO;AAAA;AAAA;AAEtD,aAAA,EACF,CAAA;AAAA,YACC,KAAA,CAAM,IAAA,KAAS,OAAA,mBACdE,KAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAF,GAAAA,CAAC,UAAK,QAAA,EAAA,0BAAA,EAAI,CAAA;AAAA,8BACVA,GAAAA;AAAA,gBAAC,WAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,wCAAA;AAAA,kBACV,OAAO,OAAA,CAAQ,UAAA;AAAA,kBACf,OAAA,EAAS,iBAAA;AAAA,kBACT,UAAA,EAAY,KAAA;AAAA,kBACZ,WAAA,EAAa,KAAA;AAAA,kBACb,QAAA,EAAU,CAAC,KAAA,KACT,QAAA,CAAS;AAAA,oBACP,GAAG,OAAA;AAAA,oBACH,UAAA,EAAY;AAAA,mBACb;AAAA;AAAA;AAEL,aAAA,EACF,CAAA,GACE,IAAA;AAAA,4BACJE,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACb,QAAA,EAAA;AAAA,8BAAAF,IAAC,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,OAAA,EAAS,KAAA,CAAM,SAAS,QAAA,EAAA,cAAA,EAE9C,CAAA;AAAA,8BACAA,GAAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,SAAA,EAAU,cAAa,QAAA,EAAA,cAAA,EAE7C;AAAA,aAAA,EACF;AAAA;AAAA;AAAA;AACF;AAAA,GACF;AAEJ;AAEA,SAAS,WAAW,KAAA,EAMjB;AACD,EAAA,uBACEA,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,IAAA,EAAK,UAAA;AAAA,MACL,SAAA,EAAU,8BAAA;AAAA,MACV,aAAA,EAAa,MAAM,MAAA,IAAU,MAAA;AAAA,MAC7B,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,SAAS,MAAM;AACb,QAAA,KAAA,CAAM,OAAA,EAAQ;AACd,QAAA,KAAA,CAAM,KAAA,IAAQ;AAAA,MAChB,CAAA;AAAA,MAEC,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,GACT;AAEJ;AAEA,SAAS,aAAA,GAAgB;AACvB,EAAA,uBAAOA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EAAoC,MAAK,WAAA,EAAY,CAAA;AAC7E;AAEA,SAAS,SAAA,CACP,KAAA,EACA,QAAA,EACA,cAAA,EACA,UAAA,EACA;AACA,EAAA,KAAA,CAAM,aAAa,aAAA,GAAgB,MAAA;AACnC,EAAA,KAAA,CAAM,YAAA,CAAa,OAAA,CAAQ,2BAAA,EAA6B,QAAQ,CAAA;AAChE,EAAA,KAAA,CAAM,YAAA,CAAa,OAAA,CAAQ,YAAA,EAAc,QAAQ,CAAA;AACjD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,KAAA,CAAM,YAAA,CAAa,OAAA,CAAQ,gCAAA,EAAkC,UAAU,CAAA;AAAA,EACzE;AACA,EAAA,cAAA,GAAiB,QAAQ,CAAA;AAC3B;AAEA,SAAS,aAAA,CAAc,OAA+B,QAAA,EAAyB;AAC7E,EAAA,MAAM,QAAA,GACJ,KAAA,CAAM,YAAA,CAAa,OAAA,CAAQ,2BAA2B,KACtD,KAAA,CAAM,YAAA,CAAa,OAAA,CAAQ,YAAY,CAAA,IACvC,QAAA;AACF,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,EAAA,MAAM,UAAA,GAAa,MAAM,YAAA,CAAa,OAAA;AAAA,IACpC;AAAA,GACF;AACA,EAAA,OAAO,EAAE,QAAA,EAAU,UAAA,EAAY,UAAA,IAAc,MAAA,EAAU;AACzD;AAEA,SAAS,SAAA,CACP,QACA,QAAA,EACA;AACA,EAAA,OAAO,OAAO,IAAA,CAAK,CAAC,UAAU,wBAAA,CAAyB,KAAK,MAAM,QAAQ,CAAA;AAC5E;AAEA,SAAS,UAAA,CAAW,QAA0B,IAAA,EAAsB;AAClE,EAAA,IAAI,IAAA,KAAS,QAAA,EAAU,OAAO,MAAA,CAAO,OAAA;AACrC,EAAA,IAAI,IAAA,KAAS,QAAA,EAAU,OAAO,MAAA,CAAO,OAAA;AACrC,EAAA,IAAI,IAAA,KAAS,KAAA,EAAO,OAAO,MAAA,CAAO,IAAA;AAClC,EAAA,OAAO,MAAA,CAAO,MAAA;AAChB;AAEA,SAAS,kBACP,KAAA,EAC4B;AAC5B,EAAA,MAAM,UAAA,GAAa,MAAM,SAAA,EAAW,UAAA;AACpC,EAAA,OAAO,OAAO,UAAA,KAAe,QAAA,IAC3B,mBAAmB,QAAA,CAAS,UAAwC,IACjE,UAAA,GACD,KAAA;AACN;AAEA,IAAM,eAAA,GAAkE;AAAA,EACtE,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,oBAAA,EAAM;AAAA,EAC/B,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,QAAA,EAAI;AAAA,EAC7B,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,QAAA,EAAI;AAAA,EAC1B,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA;AAC1B,CAAA;AAEA,IAAM,kBAAA,GAAmD;AAAA,EACvD,KAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,iBAAA,GAGD;AAAA,EACH,EAAE,KAAA,EAAO,cAAA,EAAM,KAAA,EAAO,KAAA,EAAM;AAAA,EAC5B,EAAE,KAAA,EAAO,cAAA,EAAM,KAAA,EAAO,OAAA,EAAQ;AAAA,EAC9B,EAAE,KAAA,EAAO,oBAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,EAC7B,EAAE,KAAA,EAAO,oBAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,EAC7B,EAAE,KAAA,EAAO,oBAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,EAC7B,EAAE,KAAA,EAAO,0BAAA,EAAQ,KAAA,EAAO,eAAA;AAC1B,CAAA;AAEA,IAAM,UAAA,GAAa;AAAA,EACjB,OAAA,EAAS,CAAA;AAAA,EACT,UAAA,EAAY,SAAA;AAAA,EACZ,MAAA,EAAQ,mBAAA;AAAA,EACR,YAAA,EAAc,CAAA;AAAA,EACd,SAAA,EAAW;AACb,CAAA;ACpnBO,IAAM,oBAAA,GAAuD;AAAA,EAClE,GAAA,EAAK,cAAA;AAAA,EACL,wBAAA,EAA0B,gCAAA;AAAA,EAC1B,gBAAA,EAAkB,gCAAA;AAAA,EAClB,cAAA,EAAgB,gCAAA;AAAA,EAChB,wBAAA,EAA0B,gCAAA;AAAA,EAC1B,gBAAA,EAAkB,gCAAA;AAAA,EAClB,IAAA,EAAM,oBAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAA;AAMA,IAAM,aAAA,GAAgB;AAAA,EACpB,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA;AAGO,SAAS,sBAAkC,MAAA,EAMtB;AAC1B,EAAA,MAAM,EAAE,OAAA,EAAS,UAAA,EAAY,KAAA,EAAO,IAAA,EAAM,MAAK,GAAI,MAAA;AACnD,EAAA,IAAI,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AACpC,EAAA,MAAM,WAAW,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA;AACnD,EAAA,MAAM,cAAc,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,QAAQ,CAAA;AACzD,EAAA,MAAM,MAAA,GAAA,CAAU,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,WAAW,WAAA,EAAa,GAAA;AAAA,IACxD;AAAA,GACF;AACA,EAAA,MAAM,YAAY,cAAA,CAAe;AAAA,IAC/B,WAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAEnC,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,MAAM,MAAA,GAAS,UAAU,CAAC,CAAA;AAC1B,IAAA,OAAO;AAAA,MACL,YAAA,EAAc,KAAA;AAAA,MACd,MAAA,EAAQ;AAAA,QACN,KAAA,EAAO,aAAA;AAAA,QACP,SAAS,aAAA,EAAc;AAAA,QACvB,MAAA,EAAQ;AAAA,UACN,IAAA,EAAM,KAAA;AAAA,UACN,MAAM,MAAA,CAAO,IAAA;AAAA,UACb,MAAA,EAAQ,CAAC,KAAA,EAAO,KAAK,CAAA;AAAA,UACrB,MAAA,EAAQ,KAAA;AAAA,UACR,SAAA,EAAW,EAAE,WAAA,EAAa,SAAA,EAAW,aAAa,CAAA,EAAE;AAAA,UACpD,KAAA,EAAO;AAAA,YACL,IAAA,EAAM,IAAA;AAAA,YACN,QAAA,EAAU,SAAA;AAAA,YACV,KAAA,EAAO,SAAA;AAAA,YACP,QAAA,EAAU;AAAA,WACZ;AAAA,UACA,SAAA,EAAW;AAAA,YACT,IAAA,EAAM,IAAA;AAAA,YACN,MAAA,EAAQ,EAAA;AAAA,YACR,OAAA,EAAS,CAAA;AAAA,YACT,SAAA,EAAW,EAAE,KAAA,EAAO,CAAA,EAAG,SAAS,IAAA;AAAK,WACvC;AAAA,UACA,QAAA,EAAU;AAAA,YACR,KAAA,EAAO,IAAA;AAAA,YACP,SAAA,EAAW;AAAA,WACb;AAAA,UACA,IAAA,EAAM,MAAA,CAAO,GAAA,CAAI,CAAC,MAAM,KAAA,MAAW;AAAA,YACjC,IAAA;AAAA,YACA,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,IAAK;AAAA,WAC/B,CAAE;AAAA,SACJ;AAAA,QACA,MAAA,EAAQ;AAAA,UACN,IAAA,EAAM,IAAA;AAAA,UACN,MAAA,EAAQ,UAAA;AAAA,UACR,IAAA,EAAM,OAAA;AAAA,UACN,GAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAW,CAAA;AAAA,UACX,UAAA,EAAY,CAAA;AAAA,UACZ,OAAA,EAAS,CAAA;AAAA,UACT,SAAA,EAAW,EAAE,KAAA,EAAO,SAAA,EAAW,UAAU,EAAA;AAAG;AAC9C;AACF,KACF;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GACJ,IAAA,KAAS,wBAAA,IAA4B,IAAA,KAAS,wBAAA;AAChD,EAAA,MAAM,IAAA,GAAO,IAAA,KAAS,MAAA,IAAU,IAAA,KAAS,UAAU,IAAA,KAAS,cAAA;AAC5D,EAAA,MAAM,OAAA,GACJ,IAAA,KAAS,cAAA,IACT,IAAA,KAAS,4BACT,IAAA,KAAS,gBAAA;AACX,EAAA,MAAM,IAAA,GAAO,IAAA,KAAS,MAAA,IAAU,IAAA,KAAS,cAAA;AACzC,EAAA,MAAM,SAAS,SAAA,CAAU,GAAA;AAAA,IACvB,CAAC,MAAM,KAAA,KAA4C;AACjD,MAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,KAAA,GAAQ,aAAA,CAAc,MAAM,CAAA;AACxD,MAAA,OAAO,IAAA,GACH;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,KAAA,EAAO,UAAU,cAAA,GAAiB,MAAA;AAAA,QAClC,MAAA,EAAQ,KAAA;AAAA,QACR,UAAA,EAAY,IAAA;AAAA,QACZ,UAAA,EAAY,CAAA;AAAA,QACZ,SAAA,EAAW,EAAE,KAAA,EAAO,KAAA,EAAO,CAAA,EAAE;AAAA,QAC7B,SAAA,EAAW,OACP,EAAE,KAAA,EAAO,SAAS,OAAA,GAAU,GAAA,GAAM,MAAK,GACvC,MAAA;AAAA,QACJ,SAAA,EAAW,EAAE,KAAA;AAAM,OACrB,GACA;AAAA,QACE,IAAA,EAAM,KAAA;AAAA,QACN,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,KAAA,EAAO,UAAU,cAAA,GAAiB,MAAA;AAAA,QAClC,QAAA,EAAU,UAAU,EAAA,GAAK,EAAA;AAAA,QACzB,SAAA,EAAW,EAAE,KAAA;AAAM,OACrB;AAAA,IACN;AAAA,GACF;AACA,EAAA,MAAM,cAAc,SAAA,CAAU,IAAA;AAAA,IAAK,CAAC,SAClC,IAAA,CAAK,IAAA,CAAK,KAAK,CAAC,KAAA,KAAU,QAAQ,CAAC;AAAA,GACrC;AACA,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,IAAA,EAAM,UAAA;AAAA,IACN,IAAA,EAAM,MAAA;AAAA,IACN,WAAW,EAAE,KAAA,EAAO,WAAW,QAAA,EAAU,EAAA,EAAI,QAAQ,CAAA,EAAE;AAAA,IACvD,QAAA,EAAU,EAAE,IAAA,EAAM,KAAA;AAAM,GAC1B;AACA,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,IAAA,EAAM,OAAA;AAAA,IACN,GAAA,EAAK,cAAe,SAAA,GAAsB,CAAA;AAAA,IAC1C,WAAA,EAAa,CAAA;AAAA,IACb,SAAA,EAAW,EAAE,KAAA,EAAO,SAAA,EAAW,UAAU,EAAA,EAAG;AAAA,IAC5C,QAAA,EAAU,EAAE,IAAA,EAAM,KAAA,EAAM;AAAA,IACxB,SAAA,EAAW,EAAE,IAAA,EAAM,IAAA,EAAM,OAAO,SAAA;AAAU,GAC5C;AACA,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,WAAA;AAAA,IACd,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,IAAA;AAAA,QACN,IAAA,EAAM,EAAA;AAAA,QACN,KAAA,EAAO,EAAA;AAAA,QACP,GAAA,EAAK,EAAA;AAAA,QACL,MAAA,EAAQ,EAAA;AAAA,QACR,YAAA,EAAc,IAAA;AAAA,QACd,eAAA,EAAiB,SAAA;AAAA,QACjB,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa;AAAA,OACf;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,IAAA;AAAA,QACN,MAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,GAAA,EAAK,KAAA;AAAA,QACL,OAAA,EAAS,EAAA;AAAA,QACT,SAAA,EAAW,EAAE,KAAA,EAAO,SAAA,EAAW,UAAU,EAAA;AAAG,OAC9C;AAAA,MACA,KAAA,EAAO,aAAa,SAAA,GAAY,YAAA;AAAA,MAChC,KAAA,EAAO,aAAa,YAAA,GAAe,SAAA;AAAA,MACnC,OAAA,EAAS;AAAA,QACP,GAAG,aAAA,EAAc;AAAA,QACjB,OAAA,EAAS,MAAA;AAAA,QACT,WAAA,EAAa;AAAA,UACX,IAAA,EAAM,OAAO,MAAA,GAAS,QAAA;AAAA,UACtB,SAAA,EAAW,EAAE,KAAA,EAAO,SAAA,EAAW,OAAO,CAAA,EAAE;AAAA,UACxC,WAAA,EAAa,EAAE,KAAA,EAAO,SAAA,EAAW,SAAS,IAAA;AAAK;AACjD,OACF;AAAA,MACA;AAAA;AACF,GACF;AACF;AAEA,SAAS,aAAA,GAAgB;AACvB,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB,2BAAA;AAAA,IACjB,WAAA,EAAa,SAAA;AAAA,IACb,WAAA,EAAa,CAAA;AAAA,IACb,YAAA,EAAc,CAAA;AAAA,IACd,OAAA,EAAS,CAAC,CAAA,EAAG,EAAE,CAAA;AAAA,IACf,SAAA,EAAW,EAAE,KAAA,EAAO,SAAA,EAAW,UAAU,EAAA;AAAG,GAC9C;AACF;AAEA,SAAS,eAA2B,MAAA,EAOjC;AACD,EAAA,MAAM,EAAE,WAAA,EAAa,OAAA,EAAS,YAAY,KAAA,EAAO,QAAA,EAAU,MAAK,GAAI,MAAA;AACpE,EAAA,MAAM,SAAkD,EAAC;AACzD,EAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,IAAA,WAAA,CAAY,OAAA;AAAA,MAAQ,CAAC,eACnB,UAAA,CAAW,OAAA;AAAA,QAAQ,CAAC,SAAA,KAClB,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,IAAA,EAAM,iBAAA;AAAA,YACJ,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,gBAAA,CAAiB,UAAU,CAAA,GAAI,EAAA;AAAA,YACpD;AAAA,WACF;AAAA,UACA,MAAM,QAAA,CAAS,GAAA;AAAA,YAAI,CAACI,QAAAA,KAClB,iBAAA;AAAA,cACE,KAAA;AAAA,cACAA,QAAAA,CAAQ,GAAA;AAAA,cACR,UAAA,CAAW,GAAA;AAAA,cACX,SAAA,CAAU;AAAA;AACZ;AACF,SACD;AAAA;AACH,KACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,GAAU,SAAS,CAAC,CAAA;AAC1B,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AACrB,EAAA,UAAA,CAAW,OAAA;AAAA,IAAQ,CAAC,SAAA,KAClB,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,SAAA,CAAU,KAAA,IAAS,SAAA,CAAU,GAAA;AAAA,MACnC,MAAM,WAAA,CAAY,GAAA;AAAA,QAAI,CAAC,eACrB,iBAAA,CAAkB,KAAA,EAAO,QAAQ,GAAA,EAAK,UAAA,CAAW,GAAA,EAAK,SAAA,CAAU,GAAG;AAAA;AACrE,KACD;AAAA,GACH;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,iBAAiB,IAAA,EAAyB;AACjD,EAAA,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAC,IAAA,KAAS,KAAK,KAAK,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA,IAAK,cAAA;AAC9D;AAEA,SAAS,iBAAA,CACP,WACA,SAAA,EACA;AACA,EAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,KAAA,IAAS,SAAA,CAAU,GAAA;AACpD,EAAA,OAAO,SAAA,GAAY,CAAA,EAAG,SAAS,CAAA,MAAA,EAAM,cAAc,CAAA,CAAA,GAAK,cAAA;AAC1D;AAEA,SAAS,iBAAA,CACP,KAAA,EACA,UAAA,EACA,aAAA,EACA,YAAA,EACA;AACA,EAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,GAAA;AAAA,IACxB,kBAAA,CAAmB,UAAA,EAAY,aAAA,EAAe,YAAY;AAAA,GAC5D,EAAG,KAAA;AACH,EAAA,MAAM,eAAe,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,OAAO,KAAK,CAAA;AACrE,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,YAAY,CAAA,GAAI,YAAA,GAAe,CAAA;AACxD;;;AClSwC,WAAA,CAAY,qsFAAysF,CAAA;ACStvF,SAAS,cAAc,KAAA,EAO3B;AACD,EAAA,MAAM,cAAA,GAAiBC,OAAiC,IAAI,CAAA;AAC5D,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIJ,SAAS,KAAK,CAAA;AACxD,EAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,cAAA,GAAiB,sCAAA,GAAW,sCAAA;AACxD,EAAA,uBACEC,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,4BAAA,EAChB,QAAA,EAAA;AAAA,oBAAAF,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAA2B,gBAAM,KAAA,EAAM,CAAA;AAAA,oBACtDE,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACb,QAAA,EAAA;AAAA,sBAAAF,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,cAAA;AAAA,UACL,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,kCAAA;AAAA,UACV,KAAA,EAAM,0BAAA;AAAA,UACN,YAAA,EAAW,0BAAA;AAAA,UACX,eAAA,EAAc,MAAA;AAAA,UACd,eAAA,EAAe,aAAA;AAAA,UACf,SAAS,MAAM,gBAAA,CAAiB,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAAA,UAE/C,QAAA,kBAAAA,IAAC,SAAA,EAAA,EAAU;AAAA;AAAA,OACb;AAAA,MACC,KAAA,CAAM,oCACLA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,kCAAA;AAAA,UACV,KAAA,EAAO,aAAA;AAAA,UACP,YAAA,EAAY,aAAA;AAAA,UACZ,gBAAc,KAAA,CAAM,cAAA;AAAA,UACpB,SAAS,KAAA,CAAM,kBAAA;AAAA,UAEf,QAAA,kBAAAA,IAAC,YAAA,EAAA,EAAa;AAAA;AAAA,OAChB,GACE;AAAA,KAAA,EACN,CAAA;AAAA,oBACAA,GAAAA;AAAA,MAACG,UAAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,aAAA;AAAA,QACN,SAAA,EAAW,cAAA;AAAA,QACX,SAAA,EAAU,aAAA;AAAA,QACV,MAAA,EAAQ,CAAA;AAAA,QACR,QAAA,EAAU,GAAA;AAAA,QACV,gBAAA,EAAiB,kCAAA;AAAA,QACjB,YAAA,EAAc,gBAAA;AAAA,QAEd,QAAA,kBAAAH,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EAA2B,MAAK,MAAA,EAC3C,QAAA,EAAA,MAAA,CAAO,IAAA,CAAK,oBAAoB,CAAA,CAAuB,GAAA;AAAA,UACvD,CAAC,IAAA,KAAS;AACR,YAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,UAAA,CAAW,QAAA,CAAS,IAAI,CAAA;AAC5C,YAAA,uBACEE,IAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBAEC,IAAA,EAAK,QAAA;AAAA,gBACL,SAAA,EAAU,gCAAA;AAAA,gBACV,IAAA,EAAK,UAAA;AAAA,gBACL,QAAA,EAAU,KAAA;AAAA,gBACV,KAAA,EAAO,QAAQ,sCAAA,GAAW,MAAA;AAAA,gBAC1B,SAAS,MAAM;AACb,kBAAA,KAAA,CAAM,WAAW,IAAI,CAAA;AACrB,kBAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,gBACxB,CAAA;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAF,GAAAA,CAAC,iBAAc,IAAA,EAAY,CAAA;AAAA,kCAC3BA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,oBAAA,CAAqB,IAAI,CAAA,EAAE;AAAA;AAAA,eAAA;AAAA,cAZ7B;AAAA,aAaP;AAAA,UAEJ;AAAA,SACF,EACF;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,SAAA,GAAY;AACnB,EAAA,uBACEE,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,WAAA;AAAA,MACR,KAAA,EAAM,KAAA;AAAA,MACN,MAAA,EAAO,KAAA;AAAA,MACP,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAY,KAAA;AAAA,MACZ,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAU,OAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAAF,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iBAAA,EAAkB,CAAA;AAAA,wBAC1BA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,mBAAA,EAAoB;AAAA;AAAA;AAAA,GAC9B;AAEJ;AAEA,SAAS,cAAc,KAAA,EAAiC;AACtD,EAAA,IAAI,KAAA,CAAM,SAAS,KAAA,EAAO;AACxB,IAAA,uBACEE,KAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,aAAY,aAAA,EAAY,MAAA,EAAO,WAAU,OAAA,EACpD,QAAA,EAAA;AAAA,sBAAAF,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yBAAA,EAA0B,CAAA;AAAA,sBAClCA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,kCAAA,EAAmC,MAAK,MAAA,EAAO;AAAA,KAAA,EACzD,CAAA;AAAA,EAEJ;AACA,EAAA,IACE,KAAA,CAAM,IAAA,KAAS,wBAAA,IACf,KAAA,CAAM,SAAS,wBAAA,EACf;AACA,IAAA,uBACEA,IAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,aAAY,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,OAAA,EACnD,QAAA,EAAA,KAAA,CAAM,IAAA,KAAS,2CACdA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,8EAAA,EAA+E,CAAA,mBAEvFA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,oDAAA,EAAqD,CAAA,EAEjE,CAAA;AAAA,EAEJ;AACA,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,MAAA,IAAU,KAAA,CAAM,SAAS,cAAA,EAAgB;AAC1D,IAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,aAAY,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,OAAA,EACnD,QAAA,EAAA,KAAA,CAAM,IAAA,KAAS,cAAA,mBACdE,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAF,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,8BAAA,EAA+B,CAAA;AAAA,sBACvCA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,uBAAA,EAAwB,MAAK,MAAA,EAAO;AAAA,KAAA,EAC9C,oBAEAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,gCAA+B,CAAA,EAE3C,CAAA;AAAA,EAEJ;AACA,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,gBAAA,IAAoB,KAAA,CAAM,SAAS,gBAAA,EAAkB;AACtE,IAAA,uBACEA,IAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,aAAY,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,OAAA,EACnD,QAAA,EAAA,KAAA,CAAM,IAAA,KAAS,mCACdA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,+EAAA,EAAgF,CAAA,mBAExFA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,sDAAA,EAAuD,CAAA,EAEnE,CAAA;AAAA,EAEJ;AACA,EAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,eAAY,MAAA,EAAO,SAAA,EAAU,OAAA,EACpD,QAAA,kBAAAA,IAAC,MAAA,EAAA,EAAK,CAAA,EAAE,uBAAA,EAAwB,IAAA,EAAK,QAAO,CAAA,EAC9C,CAAA;AAEJ;AAEA,SAAS,YAAA,GAAe;AACtB,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,eAAA;AAAA,MACR,KAAA,EAAM,KAAA;AAAA,MACN,MAAA,EAAO,KAAA;AAAA,MACP,IAAA,EAAK,cAAA;AAAA,MACL,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAU,OAAA;AAAA,MAEV,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,ixDAAA,EAAkxD;AAAA;AAAA,GAC5xD;AAEJ;;;AC7KwC,WAAA,CAAY,y6CAA26C,CAAA;ACqBx9C,SAAS,gBAA4B,KAAA,EAOzC;AACD,EAAA,uBACEA,GAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,yBAAA,EAA0B,YAAA,EAAW,0BAAA,EACrD,QAAA,EAAA,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,0BACxBA,GAAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MAEC,KAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,UAAU,KAAA,CAAM;AAAA,KAAA;AAAA,IAPX,KAAA,CAAM;AAAA,GASd,CAAA,EACH,CAAA;AAEJ;AAEA,SAAS,eAA2B,KAAA,EAQjC;AACD,EAAA,MAAM,MAAA,GAAS,OAAA;AAAA,IACb,MACE,KAAA,CAAM,KAAA,GACF,qBAAA,CAAsB;AAAA,MACpB,IAAA,EAAM,MAAM,KAAA,CAAM,IAAA;AAAA,MAClB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,YAAY,KAAA,CAAM;AAAA,KACnB,CAAA,GACD,IAAA;AAAA,IACN;AAAA,MACE,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,KAAA,CAAM,OAAA;AAAA,MACN,KAAA,CAAM,UAAA;AAAA,MACN,KAAA,CAAM,KAAA;AAAA,MACN,KAAA,CAAM;AAAA;AACR,GACF;AACA,EAAA,MAAM,KAAA,GAAQ,CAAA,EAAG,oBAAA,CAAqB,KAAA,CAAM,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,CAAA;AAC1E,EAAA,uBACEE,IAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,wBAAA,EACjB,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,gCAAA,EAChB,QAAA,EAAA;AAAA,sBAAAF,GAAAA,CAAC,YAAQ,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBACfA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,gCAAA;AAAA,UACV,YAAA,EAAY,eAAK,KAAK,CAAA,CAAA;AAAA,UACtB,KAAA,EAAM,0BAAA;AAAA,UACN,SAAS,MAAM,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,MAAM,EAAE,CAAA;AAAA,UAC7C,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EACF,CAAA;AAAA,IACC,MAAA,mBACCA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,WAAA,EAAa,MAAA,EAAQ,CAAA,mBAEvCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,8DAAA,EAE/C;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEA,SAAS,iBAAiB,KAAA,EAA0C;AAClE,EAAA,MAAM,YAAA,GAAeK,OAA8B,IAAI,CAAA;AAEvD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,YAAY,YAAA,CAAa,OAAA;AAC/B,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY,SAAA,EAAW;AAAA,MACvC,IAAA,EAAM,MAAM,WAAA,CAAY,YAAA;AAAA,MACxB,MAAA,EAAQ,MAAM,WAAA,CAAY;AAAA,KAC3B,CAAA;AACD,IAAA,KAAA,CAAM,KAAA,EAAM;AACZ,IAAA,OAAO,MAAM,MAAM,OAAA,EAAQ;AAAA,EAC7B,CAAA,EAAG,CAAC,KAAA,CAAM,WAAW,CAAC,CAAA;AAEtB,EAAA,uBAAOL,GAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,YAAA,EAAc,WAAU,gCAAA,EAAiC,CAAA;AAC5E;ACtEA,SAAS,oBAAA,CACP,OACA,GAAA,EACA;AACA,EAAA,MAAM,EAAE,SAAA,EAAW,KAAA,EAAO,eAAe,KAAA,EAAO,GAAG,cAAa,GAAI,KAAA;AACpE,EAAA,MAAM,YAAA,GAAeK,OAA8B,IAAI,CAAA;AACvD,EAAA,MAAM,QAAA,GAAWA,OAAsC,IAAI,CAAA;AAC3D,EAAA,MAAM,oBAAA,GACJ,aAAA,IAAiB,OAAO,aAAA,KAAkB,WACtC,aAAA,GACA,MAAA;AACN,EAAA,MAAM,oBAAA,GACJ,aAAA,KAAkB,IAAA,IAAQ,oBAAA,IAAwB,IAAA;AACpD,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIJ,QAAAA;AAAA,IAChD,sBAAsB,WAAA,IAAe;AAAA,GACvC;AACA,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,QAAAA;AAAA,IAC5C,MAAM,sBAAsB,UAAA,IAAc;AAAA,GAC5C;AACA,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,SAAS,GAAG,CAAA;AAC1D,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,QAAAA,CAA2B,EAAE,CAAA;AACzD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,QAAAA;AAAA,IAClC;AAAA,GACF;AACA,EAAA,MAAM,UAAA,GAAaI,OAAO,CAAC,CAAA;AAC3B,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIJ,QAAAA;AAAA,IAC1C,MAAM,oBAAA,EAAsB,aAAA,IAAiB,2BAAA;AAA4B,GAC3E;AACA,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,QAAAA,CAE1C,EAAE,CAAA;AACJ,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GACpCA,SAAkD,IAAI,CAAA;AACxD,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAC9CA,SAAyC,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GACtCA,SAAqC,IAAI,CAAA;AAC3C,EAAA,MAAM,SAAA,GAAY,sBAAsB,IAAA,IAAQ,iBAAA;AAChD,EAAA,MAAM,WAAA,GAAc,sBAAsB,MAAA,IAAU,cAAA;AACpD,EAAA,MAAM,UAAA,GAAaK,QAAQ,MAAM;AAC/B,IAAA,MAAM,UAAU,uBAAA,CAAwB;AAAA,MACtC,QAAQ,oBAAA,EAAsB,MAAA;AAAA,MAC9B,kBAAkB,YAAA,CAAa,gBAAA;AAAA,MAC/B,SAAS,YAAA,CAAa,OAAA;AAAA,MACtB,MAAM,YAAA,CAAa,IAAA;AAAA,MACnB,YAAY,YAAA,CAAa;AAAA,KAC1B,CAAA;AACD,IAAA,OAAO,OAAA,CAAQ,GAAA;AAAA,MAAI,CAAC,KAAA,KAClB,KAAA,CAAM,SAAA,GACF,KAAA,GACA;AAAA,QACE,GAAG,KAAA;AAAA,QACH,SAAA,EAAW;AAAA,UACT,UAAA,EAAY,oBAAA;AAAA,YACV,YAAA,CAAa,UAAA;AAAA,YACb,KAAA,CAAM;AAAA;AACR;AACF;AACF,KACN;AAAA,EACF,CAAA,EAAG;AAAA,IACD,oBAAA,EAAsB,MAAA;AAAA,IACtB,YAAA,CAAa,gBAAA;AAAA,IACb,YAAA,CAAa,OAAA;AAAA,IACb,YAAA,CAAa,IAAA;AAAA,IACb,YAAA,CAAa,UAAA;AAAA,IACb,YAAA,CAAa;AAAA,GACd,CAAA;AACD,EAAA,MAAM,MAAA,GAASA,OAAAA;AAAA,IACb,MACE,UAAA,CAAW,GAAA,CAAI,CAAC,KAAA,KAAU;AACxB,MAAA,MAAM,QAAA,GAAWC,yBAAyB,KAAK,CAAA;AAC/C,MAAA,MAAM,QAAA,GAAW,eAAe,QAAQ,CAAA;AACxC,MAAA,IAAI,CAAC,UAAU,OAAO,KAAA;AACtB,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,KAAA,EAAO,QAAA,CAAS,KAAA,IAAS,KAAA,CAAM,KAAA;AAAA,QAC/B,SAAA,EAAW;AAAA,UACT,GAAG,KAAA,CAAM,SAAA;AAAA,UACT,KAAA,EAAO,QAAA,CAAS,KAAA,IAAS,KAAA,CAAM,SAAA,EAAW,KAAA;AAAA,UAC1C,UAAA,EAAY,QAAA,CAAS,UAAA,IAAc,KAAA,CAAM,SAAA,EAAW;AAAA;AACtD,OACF;AAAA,IACF,CAAC,CAAA;AAAA,IACH,CAAC,YAAY,cAAc;AAAA,GAC7B;AACA,EAAA,MAAM,iBAAA,GAAoBD,OAAAA;AAAA,IACxB,MACE,oBAAA,GACI,8BAAA,CAA+B,MAAA,EAAQ,WAAW,CAAA,GAClD,IAAA;AAAA,IACN,CAAC,oBAAA,EAAsB,WAAA,EAAa,MAAM;AAAA,GAC5C;AACA,EAAA,MAAM,oBAAoB,MAAM;AAC9B,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,OAAA,EAAS,aAAA,EAAc,IAAK,IAAA;AACvD,IAAA,aAAA,CAAc,CAAC,OAAA,KAAa,OAAA,KAAY,SAAA,GAAY,UAAU,SAAU,CAAA;AAAA,EAC1E,CAAA;AACA,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,GAAG,YAAA;AAAA,IACH,GAAG,iBAAA;AAAA,IACH,EAAA,EAAI;AAAA,MACF,oBAAA,EAAsB,gBAAA;AAAA,MACtB,oBAAA,EAAsB,qBAAA;AAAA,MACtB,gBAAA,EAAkB;AAAA,KACpB;AAAA,IACA,cAAA,EAAgB,CAAC,KAAA,KAAU;AACzB,MAAA,YAAA,CAAa,iBAAiB,KAAK,CAAA;AACnC,MAAA,iBAAA,EAAkB;AAAA,IACpB,CAAA;AAAA,IACA,YAAA,EAAc,CAAC,KAAA,KAAU;AACvB,MAAA,YAAA,CAAa,eAAe,KAAK,CAAA;AACjC,MAAA,iBAAA,EAAkB;AAAA,IACpB;AAAA,GACF;AACA,EAAA,MAAM,mBAAA,GAAsBA,QAAQ,MAAM;AACxC,IAAA,IAAI,CAAC,eAAe,OAAO,IAAA;AAC3B,IAAA,MAAM,EAAE,IAAA,EAAM,YAAA,EAAa,GAAI,aAAA;AAC/B,IAAA,OAAO,qBAAA,CAAsB,aAAA,EAAe,CAAC,KAAA,KAAU;AACrD,MAAA,gBAAA;AAAA,QAAiB,CAAC,OAAA,KAChB,OAAA,EAAS,IAAA,KAAS,IAAA,IAAQ,OAAA,CAAQ,YAAA,KAAiB,YAAA,GAC/C,EAAE,GAAG,OAAA,EAAS,KAAA,EAAM,GACpB;AAAA,OACN;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,MAAM,YAAA,GAAe,CAAC,IAAA,KAAkB;AACtC,IAAA,IAAI,oBAAA,EAAsB,IAAA,KAAS,MAAA,EAAW,oBAAA,CAAqB,IAAI,CAAA;AACvE,IAAA,oBAAA,EAAsB,eAAe,IAAI,CAAA;AAAA,EAC3C,CAAA;AACA,EAAA,MAAM,QAAA,GAAW,CAAC,IAAA,KAAyB;AACzC,IAAA,SAAA,CAAU,CAAC,OAAA,KAAY;AACrB,MAAA,IAAI,QAAQ,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,IAAA,KAAS,IAAI,CAAA,EAAG;AAChD,QAAA,OAAO,OAAA;AAAA,MACT;AACA,MAAA,UAAA,CAAW,OAAA,IAAW,CAAA;AACtB,MAAA,OAAO,CAAC,GAAG,OAAA,EAAS,EAAE,EAAA,EAAI,eAAe,UAAA,CAAW,OAAO,CAAA,CAAA,EAAI,IAAA,EAAM,CAAA;AAAA,IACvE,CAAC,CAAA;AACD,IAAA,iBAAA,EAAkB;AAAA,EACpB,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,CAAC,OAAA,KAAoB;AACvC,IAAA,SAAA,CAAU,CAAC,YAAY,OAAA,CAAQ,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,EAAA,KAAO,OAAO,CAAC,CAAA;AAAA,EACxE,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,CAAC,IAAA,KAA2B;AAC9C,IAAA,IAAI,oBAAA,EAAsB,MAAA,KAAW,MAAA,EAAW,iBAAA,CAAkB,IAAI,CAAA;AACtE,IAAA,oBAAA,EAAsB,iBAAiB,IAAI,CAAA;AAAA,EAC7C,CAAA;AACA,EAAA,MAAM,SAAA,GAAY,CAChB,QAAA,EACA,IAAA,EACA,OACA,UAAA,KACG;AACH,IAAA,WAAA,CAAY,eAAe,WAAA,EAAa,QAAA,EAAU,IAAA,EAAM,KAAA,EAAO,UAAU,CAAC,CAAA;AAAA,EAC5E,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,CAAC,QAAA,KAAqB;AACxC,IAAA,WAAA,CAAY,gBAAA,CAAiB,WAAA,EAAa,QAAQ,CAAC,CAAA;AAAA,EACrD,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,CAClB,QAAA,EACA,KAAA,KACG;AACH,IAAA,iBAAA,CAAkB,CAAC,OAAA,MAAa;AAAA,MAC9B,GAAG,OAAA;AAAA,MACH,CAAC,QAAQ,GAAG,EAAE,GAAG,OAAA,CAAQ,QAAQ,CAAA,EAAG,GAAG,KAAA;AAAM,KAC/C,CAAE,CAAA;AACF,IAAA,MAAM,QAAQ,MAAA,CAAO,IAAA;AAAA,MACnB,CAAC,IAAA,KAASC,wBAAAA,CAAyB,IAAI,CAAA,KAAM;AAAA,KAC/C;AACA,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,oBAAA,EAAsB,aAAA,GAAgB;AAAA,QACpC,GAAG,KAAA;AAAA,QACH,KAAA,EAAO,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,KAAA;AAAA,QAC5B,SAAA,EAAW;AAAA,UACT,GAAG,KAAA,CAAM,SAAA;AAAA,UACT,KAAA,EAAO,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,SAAA,EAAW,KAAA;AAAA,UACvC,UAAA,EAAY,KAAA,CAAM,UAAA,IAAc,KAAA,CAAM,SAAA,EAAW;AAAA;AACnD,OACD,CAAA;AAAA,IACH;AAAA,EACF,CAAA;AACA,EAAAC,UAAU,MAAM;AACd,IAAA,MAAM,YAAY,YAAA,CAAa,OAAA;AAC/B,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,SAAA,EAAW,OAAO,CAAA;AAC/C,IAAA,KAAA,CAAM,KAAA,EAAM;AACZ,IAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AACnB,IAAA,iBAAA,EAAkB;AAClB,IAAA,OAAO,MAAM;AACX,MAAA,KAAA,CAAM,OAAA,EAAQ;AACd,MAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AACnB,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,IACpB,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAA,UAAU,MAAM;AACd,IAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AACvB,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,KAAA,CAAM,cAAc,OAAO,CAAA;AAC3B,IAAA,iBAAA,EAAkB;AAAA,EACpB,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,oBAAA,EAAsB,cAAc,IAAA,EAAM;AAC5C,MAAA,kBAAA,CAAmB,qBAAqB,UAAU,CAAA;AAAA,IACpD;AAAA,EACF,CAAA,EAAG,CAAC,oBAAA,EAAsB,UAAU,CAAC,CAAA;AAErC,EAAA,mBAAA;AAAA,IACE,GAAA;AAAA,IACA,OAAO;AAAA,MACL,aAAA,EAAe,MAAM,QAAA,CAAS,OAAA,EAAS,eAAc,IAAK,IAAA;AAAA,MAC1D,oBAAoB,MAAM,QAAA,CAAS,OAAA,EAAS,kBAAA,MAAwB,EAAC;AAAA,MACrE,uBAAuB,MACrB,QAAA,CAAS,OAAA,EAAS,qBAAA,MAA2B,EAAC;AAAA,MAChD,cAAA,EAAgB,CAAC,MAAA,KACf,QAAA,CAAS,SAAS,cAAA,CAAe,MAAM,KAAK,EAAC;AAAA,MAC/C,YAAA,EAAc,MAAM,QAAA,CAAS,OAAA,EAAS,cAAa,IAAK,IAAA;AAAA,MACxD,cAAc,CAAC,SAAA,KACb,SAAS,OAAA,EAAS,YAAA,CAAa,SAAS,CAAA,IAAK,IAAA;AAAA,MAC/C,UAAA,EAAY,MAAM,QAAA,CAAS,OAAA,EAAS,YAAW,IAAK,IAAA;AAAA,MACpD,gBAAA,EAAkB,MAAM,QAAA,CAAS,OAAA,EAAS,kBAAiB,IAAK,IAAA;AAAA,MAChE,UAAU,MAAM,QAAA,CAAS,OAAA,EAAS,QAAA,MAAc,EAAC;AAAA,MACjD,cAAc,MAAM,QAAA,CAAS,OAAA,EAAS,YAAA,MAAkB,EAAC;AAAA,MACzD,UAAA,EAAY,CAAC,OAAA,EAAS,MAAA,KACpB,SAAS,OAAA,EAAS,UAAA,CAAW,OAAA,EAAS,MAAM,CAAA,IAAK,IAAA;AAAA,MACnD,UAAA,EAAY,CAAC,IAAA,EAAM,MAAA,KACjB,SAAS,OAAA,EAAS,UAAA,CAAW,IAAA,EAAM,MAAM,CAAA,IAAK,IAAA;AAAA,MAChD,cAAc,CAAC,OAAA,KACb,SAAS,OAAA,EAAS,YAAA,CAAa,OAAO,CAAA,IAAK,KAAA;AAAA,MAC7C,cAAc,CAAC,OAAA,KAAY,QAAA,CAAS,OAAA,EAAS,aAAa,OAAO,CAAA;AAAA,MACjE,eAAe,CAAC,MAAA,KACd,SAAS,OAAA,EAAS,aAAA,CAAc,MAAM,CAAA,IAAK,KAAA;AAAA,MAC7C,iBAAiB,CAAC,MAAA,KAChB,SAAS,OAAA,EAAS,eAAA,CAAgB,MAAM,CAAA,IAAK,KAAA;AAAA,MAC/C,kBAAkB,CAAC,MAAA,KACjB,SAAS,OAAA,EAAS,gBAAA,CAAiB,MAAM,CAAA,IAAK,KAAA;AAAA,MAChD,oBAAoB,CAAC,MAAA,KACnB,SAAS,OAAA,EAAS,kBAAA,CAAmB,MAAM,CAAA,IAAK,KAAA;AAAA,MAClD,WAAW,CAAC,IAAA,KAAS,SAAS,OAAA,EAAS,SAAA,CAAU,IAAI,CAAA,IAAK,CAAA;AAAA,MAC1D,aAAa,CAAC,IAAA,KAAS,SAAS,OAAA,EAAS,WAAA,CAAY,IAAI,CAAA,IAAK,CAAA;AAAA,MAC9D,kBAAA,EAAoB,CAAC,IAAA,EAAM,YAAA,EAAc,MAAA,KACvC,QAAA,CAAS,OAAA,EAAS,kBAAA,CAAmB,IAAA,EAAM,YAAA,EAAc,MAAM,CAAA,IAC/D,IAAA;AAAA,MACF,yBAAA,EAA2B,CAAC,IAAA,EAAM,YAAA,KAChC,QAAA,CAAS,SAAS,yBAAA,CAA0B,IAAA,EAAM,YAAY,CAAA,IAAK,EAAC;AAAA,MACtE,YAAA,EAAc,MAAM,QAAA,CAAS,OAAA,EAAS,cAAa,IAAK,IAAA;AAAA,MACxD,gBAAA,EAAkB,CAAC,IAAA,EAAM,YAAA,EAAc,SAAA,KACrC,QAAA,CAAS,OAAA,EAAS,gBAAA,CAAiB,IAAA,EAAM,YAAA,EAAc,SAAS,CAAA,IAAK,EAAC;AAAA,MACxE,gBAAA,EAAkB,CAAC,MAAA,KACjB,QAAA,CAAS,SAAS,gBAAA,CAAiB,MAAM,KAAK,EAAC;AAAA,MACjD,WAAW,CAAC,aAAA,KACV,SAAS,OAAA,EAAS,SAAA,CAAU,aAAa,CAAA,IAAK,EAAA;AAAA,MAChD,UAAA,EAAY,CAAC,aAAA,KACX,QAAA,CAAS,SAAS,UAAA,CAAW,aAAa,CAAA,IAAK,IAAI,UAAA,EAAW;AAAA,MAChE,QAAA,EAAU,MAAM,QAAA,CAAS,OAAA,EAAS,UAAS,IAAK,IAAA;AAAA,MAChD,cAAc,CAAC,QAAA,KACb,SAAS,OAAA,EAAS,YAAA,CAAa,QAAQ,CAAA,IAAK;AAAA,KAChD,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,uBACEN,IAAAA,CAAAO,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAP,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,WAAW,CAAA,iBAAA,EAAoB,SAAA,GAAY,CAAA,CAAA,EAAI,SAAS,KAAK,EAAE,CAAA,CAAA;AAAA,QAC/D,KAAA,EAAO;AAAA,UACL,KAAA,EAAO,MAAM,KAAA,IAAS,MAAA;AAAA,UACtB,MAAA,EAAQ,MAAM,MAAA,IAAU,MAAA;AAAA,UACxB,GAAG;AAAA,SACL;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAF,GAAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cACC,KAAA;AAAA,cACA,iBAAA,EAAmB,oBAAA;AAAA,cACnB,cAAA,EAAgB,SAAA;AAAA,cAChB,kBAAA,EAAoB,MAAM,YAAA,CAAa,CAAC,SAAS,CAAA;AAAA,cACjD,UAAA,EAAY,QAAA;AAAA,cACZ,YAAY,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,MAAM,IAAI;AAAA;AAAA,WAC9C;AAAA,0BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BACb,QAAA,kBAAAA,GAAAA;AAAA,YAACU,oBAAAA;AAAA,YAAA;AAAA,cACC,QAAA,EAAQ,IAAA;AAAA,cACR,SAAA,EAAU,iCAAA;AAAA,cACV,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAQ,MAAA,EAAO;AAAA,cACvC,KAAA,EAAO;AAAA,gBACL,aAAA,EAAe,eAAA;AAAA,gBACf,aAAA,EAAe;AAAA,eACjB;AAAA,cACA,aAAA,EAAe,CAAC,SAAA,KAAc;AAC5B,gBAAA,MAAM,aAAA,GAAgB,UAAU,aAAa,CAAA;AAC7C,gBAAA,IAAI,OAAO,kBAAkB,QAAA,EAAU;AACrC,kBAAA,kBAAA,CAAmB,aAAa,CAAA;AAAA,gBAClC;AACA,gBAAA,MAAM,aAAA,GAAgB,UAAU,aAAa,CAAA;AAC7C,gBAAA,IAAI,SAAA,IAAa,OAAO,aAAA,KAAkB,QAAA,EAAU;AAClD,kBAAA,kBAAA,CAAmB,aAAa,CAAA;AAAA,gBAClC;AAAA,cACF,CAAA;AAAA,cACA,MAAA,EAAQ;AAAA,gBACN;AAAA,kBACE,EAAA,EAAI,aAAA;AAAA,kBACJ,OAAA,EAAS,GAAA;AAAA,kBACT,yBACEV,GAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,GAAA,EAAK,YAAA;AAAA,sBACL,SAAA,EAAU;AAAA;AAAA;AACZ,iBAEJ;AAAA,gBACA,GAAI,MAAA,CAAO,MAAA,GAAS,CAAA,GAChB;AAAA,kBACE;AAAA,oBACE,EAAA,EAAI,aAAA;AAAA,oBACJ,IAAA,EAAM,eAAA;AAAA,oBACN,OAAA,EAAS,GAAA;AAAA,oBACT,OAAA,EAAS,GAAA;AAAA,oBACT,SAAA,EACE,+CAAA;AAAA,oBACF,yBACEA,GAAAA;AAAA,sBAAC,eAAA;AAAA,sBAAA;AAAA,wBACC,MAAA;AAAA,wBACA,KAAA,EAAO,UAAA;AAAA,wBACP,MAAM,OAAA,CAAQ,IAAA;AAAA,wBACd,SAAS,OAAA,CAAQ,OAAA;AAAA,wBACjB,YAAY,OAAA,CAAQ,UAAA;AAAA,wBACpB,QAAA,EAAU;AAAA;AAAA;AACZ;AAEJ,oBAEF,EAAC;AAAA,gBACL,GAAI,oBAAA,GACA;AAAA,kBACE;AAAA,oBACE,EAAA,EAAI,aAAA;AAAA,oBACJ,WAAW,CAAC,SAAA;AAAA,oBACZ,IAAA,EAAM,eAAA;AAAA,oBACN,OAAA,EAAS,GAAA;AAAA,oBACT,OAAA,EAAS,GAAA;AAAA,oBACT,SAAA,EACE,+CAAA;AAAA,oBACF,yBACEA,GAAAA;AAAA,sBAAC,eAAA;AAAA,sBAAA;AAAA,wBACC,MAAA;AAAA,wBACA,MAAA,EAAQ,WAAA;AAAA,wBACR,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,wBACjC,MAAA,EAAQ,SAAA;AAAA,wBACR,QAAA,EAAU,WAAA;AAAA,wBACV,aAAA,EAAe;AAAA;AAAA;AACjB;AAEJ,oBAEF;AAAC;AACP;AAAA,WACF,EACF;AAAA;AAAA;AAAA,KACF;AAAA,oBACAA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,EAAS,mBAAA,EAAqB,CAAA;AAAA,oBAChDA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,EAAS,kBAAA,EAAoB,CAAA;AAAA,oBAC/CA,GAAAA,CAAC,YAAA,EAAA,EAAa,OAAA,EAAS,cAAA,EAAgB;AAAA,GAAA,EACzC,CAAA;AAEJ;AAGO,IAAM,eAAA,GAAkB,WAAW,oBAAoB;AAQvD,SAAS,qBAAA,CACd,SACA,aAAA,EACgC;AAChC,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,OAAO;AAAA,IACL,aAAa,OAAA,CAAQ,KAAA;AAAA,IACrB,UAAA,EAAY;AAAA,MACV,GAAG,OAAA,CAAQ,CAAA;AAAA,MACX,GAAG,OAAA,CAAQ,CAAA;AAAA,MACX,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,KAAA,EAAO,aAAA,CAAc,OAAA,CAAQ,KAAK,CAAA;AAAA,IAClC,4BAA4B,OAAA,CAAQ,0BAAA;AAAA,IACpC,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,KAAA,EAAO,kBAAA;AAAA,IACP,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,MAAA,MAAM,IAAA,GAAO,cAAc,KAAK,CAAA;AAChC,MAAA,aAAA,GAAgB,IAAI,CAAA;AACpB,MAAA,OAAA,CAAQ,QAAQ,IAAI,CAAA;AAAA,IACtB,CAAA;AAAA,IACA,SAAS,MAAM;AACb,MAAA,aAAA,GAAgB,EAAE,CAAA;AAClB,MAAA,OAAA,CAAQ,OAAA,EAAQ;AAAA,IAClB,CAAA;AAAA,IACA,SAAS,OAAA,CAAQ;AAAA,GACnB;AACF;AAEA,SAAS,cAAc,KAAA,EAAoD;AACzE,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,MAAM,aAAA,IAAiB,EAAA;AAAA,IAChC,IAAA,EAAM,KAAA,CAAM,WAAA,GAAc,OAAA,GAAU,OAAA;AAAA,IACpC,aAAa,KAAA,CAAM,WAAA;AAAA,IACnB,YAAA,EAAc,KAAA,CAAM,YAAA,IAAgB,EAAC;AAAA,IACrC,YACE,KAAA,CAAM,SAAA,IAAa,MAAM,SAAA,CAAU,QAAA,KAAa,SAC5C,WAAA,GACA,OAAA;AAAA,IACN,iBAAA,EAAmB,gBAAA,CAAiB,KAAA,CAAM,SAAA,EAAW,QAAQ,CAAA;AAAA,IAC7D,cAAA,EAAgB,uBAAA,CAAwB,KAAA,CAAM,SAAA,EAAW,KAAK,CAAA;AAAA,IAC9D,oBAAA,EAAsB,uBAAA,CAAwB,KAAA,CAAM,SAAA,EAAW,WAAW,CAAA;AAAA,IAC1E,mBAAmB,KAAA,CAAM,iBAAA;AAAA,IACzB,uBAAA,EAAyB,gBAAA,CAAiB,KAAA,CAAM,eAAA,EAAiB,QAAQ,CAAA;AAAA,IACzE,oBAAA,EAAsB,uBAAA,CAAwB,KAAA,CAAM,eAAA,EAAiB,KAAK,CAAA;AAAA,IAC1E,0BAAA,EAA4B,uBAAA;AAAA,MAC1B,MAAM,eAAA,EAAiB;AAAA,KACzB;AAAA,IACA,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,GAAA,CAAI,CAAC,SAAA,MAAe;AAAA,MAChD,QAAA,EAAU,gBAAA,CAAiB,SAAA,CAAU,QAAQ,CAAA;AAAA,MAC7C,KAAA,EAAO,uBAAA,CAAwB,SAAA,CAAU,KAAK,CAAA;AAAA,MAC9C,WAAA,EAAa,uBAAA,CAAwB,SAAA,CAAU,WAAW;AAAA,KAC5D,CAAE;AAAA,GACJ;AACF;AAEA,SAAS,cAAc,KAAA,EAAoD;AACzE,EAAA,IAAI,KAAA,CAAM,eAAe,WAAA,EAAa;AACpC,IAAA,OAAO;AAAA,MACL,SAAA,EAAW,gBAAA;AAAA,QACT,KAAA,CAAM,iBAAA;AAAA,QACN,KAAA,CAAM,cAAA;AAAA,QACN,KAAA,CAAM;AAAA,OACR;AAAA,MACA,eAAA,EAAiB,gBAAA;AAAA,QACf,KAAA,CAAM,uBAAA;AAAA,QACN,KAAA,CAAM,oBAAA;AAAA,QACN,KAAA,CAAM;AAAA,OACR;AAAA,MACA,UAAA,EAAY,MAAM,UAAA,EAAY,GAAA;AAAA,QAAI,CAAC,SAAA,KACjC,gBAAA;AAAA,UACE,SAAA,CAAU,QAAA;AAAA,UACV,SAAA,CAAU,KAAA;AAAA,UACV,SAAA,CAAU;AAAA;AACZ,OACF;AAAA,MACA,mBAAmB,KAAA,CAAM;AAAA,KAC3B;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,KAAA,CAAM,YAAA,IAAgB,EAAC;AAAA,IACrC,eAAe,KAAA,CAAM,OAAA;AAAA,IACrB,aAAa,KAAA,CAAM;AAAA,GACrB;AACF;AAEA,SAAS,gBAAA,CACP,QAAA,EACA,KAAA,EACA,WAAA,EACsB;AACtB,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,gBAAgB,QAAQ,CAAA;AAAA,IAClC,KAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,iBACP,QAAA,EAC8B;AAC9B,EAAA,MAAM,GAAA,GAGF;AAAA,IACF,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,SAAA,EAAW,KAAA;AAAA,IACX,QAAA,EAAU,UAAA;AAAA,IACV,WAAA,EAAa,aAAA;AAAA,IACb,UAAA,EAAY,YAAA;AAAA,IACZ,QAAA,EAAU,UAAA;AAAA,IACV,WAAA,EAAa,IAAA;AAAA,IACb,kBAAA,EAAoB,KAAA;AAAA,IACpB,QAAA,EAAU,IAAA;AAAA,IACV,eAAA,EAAiB,KAAA;AAAA,IACjB,OAAA,EAAS,SAAA;AAAA,IACT,KAAA,EAAO,OAAA;AAAA,IACP,QAAA,EAAU,UAAA;AAAA,IACV,UAAA,EAAY,YAAA;AAAA,IACZ,aAAA,EAAe,eAAA;AAAA,IACf,WAAA,EAAa;AAAA,GACf;AACA,EAAA,OAAO,GAAA,CAAI,YAAY,MAAM,CAAA;AAC/B;AAEA,SAAS,gBACP,QAAA,EAC8B;AAC9B,EAAA,MAAM,GAAA,GAEF;AAAA,IACF,IAAA,EAAM,MAAA;AAAA,IACN,EAAA,EAAI,QAAA;AAAA,IACJ,GAAA,EAAK,WAAA;AAAA,IACL,QAAA,EAAU,UAAA;AAAA,IACV,WAAA,EAAa,aAAA;AAAA,IACb,UAAA,EAAY,YAAA;AAAA,IACZ,QAAA,EAAU,UAAA;AAAA,IACV,EAAA,EAAI,aAAA;AAAA,IACJ,GAAA,EAAK,oBAAA;AAAA,IACL,EAAA,EAAI,UAAA;AAAA,IACJ,GAAA,EAAK,iBAAA;AAAA,IACL,OAAA,EAAS,SAAA;AAAA,IACT,KAAA,EAAO,OAAA;AAAA,IACP,QAAA,EAAU,UAAA;AAAA,IACV,UAAA,EAAY,YAAA;AAAA,IACZ,aAAA,EAAe,eAAA;AAAA,IACf,WAAA,EAAa;AAAA,GACf;AACA,EAAA,OAAO,GAAA,CAAI,QAAA,IAAY,MAAM,CAAA,IAAK,MAAA;AACpC;AAEA,SAAS,wBAAwB,KAAA,EAAgB;AAC/C,EAAA,OAAO,KAAA,IAAS,IAAA,GAAO,EAAA,GAAK,MAAA,CAAO,KAAK,CAAA;AAC1C;AAEA,IAAM,kBAAA,GAAqB;AAAA,EACzB,KAAA,EAAO,cAAA;AAAA,EACP,cAAA,EAAgB,cAAA;AAAA,EAChB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,iBAAA,EAAmB,gCAAA;AAAA,EACnB,YAAA,EAAc,oBAAA;AAAA,EACd,YAAA,EAAc,gCAAA;AAAA,EACd,cAAA,EAAgB,oBAAA;AAAA,EAChB,gBAAA,EAAkB,0BAAA;AAAA,EAClB,cAAA,EAAgB,cAAA;AAAA,EAChB,gBAAA,EAAkB,QAAA;AAAA,EAClB,mBAAA,EAAqB,cAAA;AAAA,EACrB,aAAA,EAAe,0BAAA;AAAA,EACf,mBAAA,EAAqB,oBAAA;AAAA,EACrB,oBAAA,EAAsB,oBAAA;AAAA,EACtB,qBAAA,EAAuB,sCAAA;AAAA,EACvB,sBAAA,EAAwB,4CAAA;AAAA,EACxB,gBAAA,EAAkB,QAAA;AAAA,EAClB,eAAA,EAAiB,QAAA;AAAA,EACjB,WAAA,EAAa,cAAA;AAAA,EACb,WAAA,EAAa,cAAA;AAAA,EACb,cAAA,EAAgB,cAAA;AAAA,EAChB,kBAAA,EAAoB,0BAAA;AAAA,EACpB,qBAAA,EAAuB;AACzB,CAAA;AAEA,SAAS,oBAAA,CACP,SACA,SAAA,EAC4B;AAC5B,EAAA,MAAM,KAAA,GAAQ,OAAA,CACX,GAAA,CAAI,CAAC,WAAW,mBAAA,CAAoB,MAAA,EAAQ,SAAS,CAAC,CAAA,CACtD,IAAA,CAAK,CAAC,IAAA,KAAS,QAAQ,IAAI,CAAA;AAC9B,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,OAAA;AAC7C","file":"index.js","sourcesContent":["import { useRef, useState } from \"react\";\nimport {\n ReactInputNumber,\n ReactPopup,\n} from \"@canvas-components/react-components\";\nimport type { PivotContextMenuRequest } from \"@canvas-components/pivot-table\";\n\n/** PivotTable 值区右键菜单。 */\nexport function PivotContextMenu(props: {\n request: PivotContextMenuRequest | null;\n}) {\n const { request } = props;\n if (!request) return null;\n return (\n <ReactPopup\n open\n anchorRect={{ x: request.x, y: request.y, width: 0, height: 0 }}\n offset={4}\n matchAnchorWidth={false}\n minWidth={180}\n onOpenChange={(open) => {\n if (!open) request.onClose();\n }}\n surfaceStyle={{ padding: 6 }}\n >\n <div style={{ display: \"grid\", minWidth: 180 }}>\n <MenuButton\n label=\"复制单元格\"\n onClick={request.onCopy}\n close={request.onClose}\n />\n {request.onCopySelection ? (\n <MenuButton\n label=\"复制选区\"\n onClick={request.onCopySelection}\n close={request.onClose}\n />\n ) : null}\n <CustomSelectionMenu\n key={`${request.x}-${request.y}`}\n request={request}\n />\n <MenuButton\n label=\"导出 CSV\"\n onClick={request.onExportCsv}\n close={request.onClose}\n />\n <MenuButton\n label=\"导出 XLSX\"\n onClick={request.onExportXlsx}\n close={request.onClose}\n />\n <div style={{ padding: \"8px 10px\", color: \"#8f959e\", fontSize: 12 }}>\n 下钻记录 {request.recordCount} 条\n </div>\n </div>\n </ReactPopup>\n );\n}\n\nfunction CustomSelectionMenu(props: { request: PivotContextMenuRequest }) {\n const { request } = props;\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const [open, setOpen] = useState(false);\n const [range, setRange] = useState(\n request.customSelection ?? {\n startRow: 1,\n startColumn: 1,\n endRow: 1,\n endColumn: 1,\n rowCount: 0,\n columnCount: 0,\n },\n );\n if (!request.customSelection || !request.onCopyCustomSelection) return null;\n\n const update = (\n key: \"startRow\" | \"startColumn\" | \"endRow\" | \"endColumn\",\n value: number | null,\n ) => {\n setRange((current) => ({\n ...current,\n [key]: value == null ? 1 : Math.floor(value),\n }));\n };\n\n return (\n <div>\n <button\n ref={triggerRef}\n type=\"button\"\n onClick={() => setOpen((value) => !value)}\n style={menuButtonStyle}\n >\n 复制自定义选区\n </button>\n <ReactPopup\n open={open}\n anchorRef={triggerRef}\n placement=\"rightTop\"\n offset={2}\n minWidth={250}\n onOpenChange={setOpen}\n surfaceStyle={{ padding: 6, width: 250 }}\n >\n <div style={{ padding: 6 }}>\n <div style={{ color: \"#6b7280\", fontSize: 12, marginBottom: 6 }}>\n 输入起始位置和结束位置\n </div>\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"38px 1fr 1fr\",\n gap: 6,\n marginBottom: 4,\n color: \"#6b7280\",\n fontSize: 12,\n textAlign: \"center\",\n }}\n >\n <span />\n <span>行</span>\n <span>列</span>\n </div>\n <CustomSelectionRow\n label=\"起始\"\n row={range.startRow}\n column={range.startColumn}\n maxRow={range.rowCount}\n maxColumn={range.columnCount}\n onRowChange={(value) => update(\"startRow\", value)}\n onColumnChange={(value) => update(\"startColumn\", value)}\n />\n <CustomSelectionRow\n label=\"结束\"\n row={range.endRow}\n column={range.endColumn}\n maxRow={range.rowCount}\n maxColumn={range.columnCount}\n onRowChange={(value) => update(\"endRow\", value)}\n onColumnChange={(value) => update(\"endColumn\", value)}\n />\n <button\n type=\"button\"\n style={{\n display: \"block\",\n width: \"100%\",\n height: 32,\n marginTop: 6,\n border: \"none\",\n borderRadius: 4,\n background: \"#1677ff\",\n color: \"#fff\",\n cursor: \"pointer\",\n }}\n onClick={() => {\n request.onCopyCustomSelection?.({\n startRow: range.startRow,\n startColumn: range.startColumn,\n endRow: range.endRow,\n endColumn: range.endColumn,\n });\n setOpen(false);\n request.onClose();\n }}\n >\n 复制\n </button>\n </div>\n </ReactPopup>\n </div>\n );\n}\n\nfunction CustomSelectionRow(props: {\n label: string;\n row: number;\n column: number;\n maxRow: number;\n maxColumn: number;\n onRowChange: (value: number | null) => void;\n onColumnChange: (value: number | null) => void;\n}) {\n return (\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"38px 1fr 1fr\",\n gap: 6,\n alignItems: \"center\",\n marginBottom: 6,\n }}\n >\n <span style={{ color: \"#374151\", fontSize: 12 }}>{props.label}</span>\n <ReactInputNumber\n value={props.row}\n min={1}\n max={props.maxRow}\n step={1}\n precision={0}\n placeholder=\"行\"\n onChange={props.onRowChange}\n />\n <ReactInputNumber\n value={props.column}\n min={1}\n max={props.maxColumn}\n step={1}\n precision={0}\n placeholder=\"列\"\n onChange={props.onColumnChange}\n />\n </div>\n );\n}\n\nconst menuButtonStyle = {\n height: 34,\n padding: \"0 10px\",\n border: 0,\n borderRadius: 4,\n background: \"transparent\",\n color: \"#1f2329\",\n textAlign: \"left\" as const,\n cursor: \"pointer\",\n};\n\nfunction MenuButton(props: {\n label: string;\n onClick: () => void;\n close: () => void;\n}) {\n return (\n <button\n type=\"button\"\n onClick={() => {\n props.onClick();\n props.close();\n }}\n style={menuButtonStyle}\n >\n {props.label}\n </button>\n );\n}\n","import type { PivotTooltipRequest } from \"@canvas-components/pivot-table\";\nimport { createPortal } from \"react-dom\";\n\n/** PivotTable 截断文本提示。 */\nexport function PivotTooltip(props: { request: PivotTooltipRequest | null }) {\n const { request } = props;\n if (!request) return null;\n if (typeof document === \"undefined\") return null;\n return createPortal(\n <div\n role=\"tooltip\"\n style={{\n position: \"fixed\",\n left: request.x + 10,\n top: request.y + 14,\n zIndex: 1100,\n maxWidth: 360,\n padding: \"6px 10px\",\n borderRadius: 4,\n background: \"rgba(31, 35, 41, 0.92)\",\n color: \"#fff\",\n fontSize: 12,\n lineHeight: 1.5,\n overflowWrap: \"anywhere\",\n pointerEvents: \"none\",\n }}\n >\n {request.text}\n </div>,\n document.body,\n );\n}\n","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\".react-pivot-table-customization {\\n position: relative;\\n overflow: hidden;\\n}\\n.react-pivot-table-customization__table {\\n position: relative;\\n min-width: 0;\\n min-height: 0;\\n width: 100%;\\n height: 100%;\\n overflow: hidden;\\n}\\n.react-pivot-table-customization__panel-column {\\n flex-grow: 0 !important;\\n overflow: hidden;\\n}\\n.react-pivot-table-customization__chart-column {\\n flex-grow: 0 !important;\\n overflow: hidden;\\n}\\n.react-pivot-field-panel {\\n display: flex;\\n width: 100%;\\n min-width: 280px;\\n height: 100%;\\n flex-direction: column;\\n overflow: hidden;\\n background: #fff;\\n color: #1f2329;\\n font-family:\\n \\\"Segoe UI\\\",\\n \\\"Microsoft YaHei\\\",\\n sans-serif;\\n font-size: 13px;\\n box-sizing: border-box;\\n}\\n.react-pivot-field-panel button,\\n.react-pivot-field-panel input,\\n.react-pivot-field-panel select {\\n font: inherit;\\n}\\n.react-pivot-field-panel__header {\\n display: flex;\\n height: 42px;\\n flex: 0 0 42px;\\n align-items: center;\\n justify-content: space-between;\\n padding: 0 10px 0 14px;\\n border-bottom: 1px solid #edf0f2;\\n background: #fff;\\n}\\n.react-pivot-field-panel__icon-button {\\n display: inline-flex;\\n width: 24px;\\n height: 24px;\\n align-items: center;\\n justify-content: center;\\n padding: 0;\\n border: 0;\\n background: transparent;\\n color: #646a73;\\n cursor: pointer;\\n font: 18px/24px \\\"Segoe UI\\\", sans-serif;\\n}\\n.react-pivot-field-panel__icon-button:hover {\\n background: #f2f3f5;\\n color: #d14343;\\n}\\n.react-pivot-field-panel__layout {\\n width: 100%;\\n height: auto;\\n min-height: 0;\\n flex: 1 1 0;\\n overflow: hidden;\\n}\\n.react-pivot-field-panel__layout > .canvas-react-resizable-panels-item > .canvas-react-resizable-panel {\\n overflow: hidden;\\n}\\n.react-pivot-field-panel__section {\\n height: 100%;\\n padding: 10px 12px 0;\\n box-sizing: border-box;\\n}\\n.react-pivot-field-panel__section--fields,\\n.react-pivot-field-panel__section--areas {\\n display: flex;\\n min-height: 0;\\n flex-direction: column;\\n}\\n.react-pivot-field-panel__section--fields {\\n padding-bottom: 6px;\\n}\\n.react-pivot-field-panel__section--areas {\\n padding-bottom: 12px;\\n}\\n.react-pivot-field-panel__section-title {\\n margin-bottom: 5px;\\n font-weight: 600;\\n}\\n.react-pivot-field-panel__hint {\\n margin-bottom: 8px;\\n color: #646a73;\\n font-size: 12px;\\n}\\n.react-pivot-field-panel__search {\\n display: flex;\\n height: 32px;\\n align-items: center;\\n gap: 8px;\\n padding: 0 9px;\\n border: 1px solid #d5d9de;\\n border-radius: 3px;\\n background: #fff;\\n box-sizing: border-box;\\n}\\n.react-pivot-field-panel__search > span {\\n width: 12px;\\n height: 12px;\\n border: 1.5px solid #4f5660;\\n border-radius: 50%;\\n position: relative;\\n}\\n.react-pivot-field-panel__search > span::after {\\n position: absolute;\\n right: -4px;\\n bottom: -3px;\\n width: 5px;\\n height: 1.5px;\\n background: #4f5660;\\n content: \\\"\\\";\\n transform: rotate(45deg);\\n}\\n.react-pivot-field-panel__search input {\\n min-width: 0;\\n flex: 1;\\n border: 0;\\n outline: 0;\\n color: #1f2329;\\n}\\n.react-pivot-field-panel__field-list {\\n min-height: 0;\\n flex: 1;\\n margin-top: 6px;\\n overflow: auto;\\n border: 1px solid #dfe3e7;\\n border-radius: 3px;\\n background: #fff;\\n}\\n.react-pivot-field-panel__field,\\n.react-pivot-field-panel__area-field {\\n display: grid;\\n height: 28px;\\n align-items: center;\\n column-gap: 6px;\\n box-sizing: border-box;\\n}\\n.react-pivot-field-panel__field {\\n grid-template-columns: 10px 16px minmax(0, 1fr);\\n padding: 0 8px 0 6px;\\n}\\n.react-pivot-field-panel__field:hover {\\n background: #f5f8fb;\\n}\\n.react-pivot-field-panel__field[data-dragging] {\\n opacity: 0.45;\\n}\\n.react-pivot-field-panel__field > span:nth-of-type(2),\\n.react-pivot-field-panel__area-field > span:nth-of-type(2) {\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.react-pivot-field-panel__drag {\\n width: 8px;\\n height: 12px;\\n cursor: grab;\\n background-image:\\n radial-gradient(\\n circle at 2px 2px,\\n #8f959e 1px,\\n transparent 1.2px);\\n background-position: 0 0;\\n background-size: 4px 4px;\\n background-repeat: repeat;\\n}\\n.react-pivot-field-panel__empty,\\n.react-pivot-field-panel__area-empty {\\n display: grid;\\n height: 100%;\\n place-items: center;\\n color: #8f959e;\\n font-size: 12px;\\n}\\n.react-pivot-field-panel__areas {\\n display: grid;\\n min-height: 0;\\n flex: 1;\\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\\n grid-template-rows: minmax(0, 1fr) minmax(0, 1fr);\\n gap: 8px;\\n}\\n.react-pivot-field-panel__area-wrap {\\n display: flex;\\n min-width: 0;\\n min-height: 0;\\n flex-direction: column;\\n}\\n.react-pivot-field-panel__area-title {\\n display: grid;\\n height: 25px;\\n grid-template-columns: minmax(0, 1fr);\\n align-items: center;\\n gap: 5px;\\n color: #3f454d;\\n}\\n.react-pivot-field-panel__area {\\n min-height: 0;\\n flex: 1;\\n overflow: auto;\\n border: 1px solid #dfe3e7;\\n border-radius: 3px;\\n background: #fff;\\n}\\n.react-pivot-field-panel__area[data-dragging] {\\n border-color: #2f78d0;\\n background: #f7faff;\\n}\\n.react-pivot-field-panel__area-field {\\n grid-template-columns: 9px minmax(0, 1fr) 18px;\\n padding: 0 7px 0 5px;\\n}\\n.react-pivot-field-panel__area-field:hover {\\n background: #f5f8fb;\\n}\\n.react-pivot-field-panel__area-field-menu {\\n display: grid;\\n width: 18px;\\n height: 22px;\\n padding: 0;\\n place-items: center;\\n border: 0;\\n background: transparent;\\n color: #646a73;\\n cursor: pointer;\\n}\\n.react-pivot-field-panel__area-field-menu:hover {\\n color: #1f2329;\\n background: #e9edf2;\\n}\\n.react-pivot-field-panel__area-field-menu > span {\\n width: 0;\\n height: 0;\\n border-top: 5px solid currentColor;\\n border-right: 4px solid transparent;\\n border-left: 4px solid transparent;\\n}\\n.react-pivot-field-menu {\\n min-width: 176px;\\n padding: 5px 0;\\n color: #1f2329;\\n font:\\n 13px \\\"Segoe UI\\\",\\n \\\"Microsoft YaHei\\\",\\n sans-serif;\\n}\\n.react-pivot-field-menu__item {\\n display: block;\\n width: 100%;\\n height: 30px;\\n padding: 0 12px;\\n border: 0;\\n background: transparent;\\n color: inherit;\\n text-align: left;\\n cursor: pointer;\\n}\\n.react-pivot-field-menu__item:hover:not(:disabled) {\\n background: #e9f2fc;\\n}\\n.react-pivot-field-menu__item:disabled {\\n color: #a7abb2;\\n cursor: default;\\n}\\n.react-pivot-field-menu__item[data-danger] {\\n color: #c9372c;\\n}\\n.react-pivot-field-menu__separator {\\n height: 1px;\\n margin: 4px 0;\\n background: #e1e4e8;\\n}\\n.react-pivot-field-settings {\\n display: grid;\\n min-width: 260px;\\n gap: 12px;\\n padding: 14px;\\n color: #1f2329;\\n font:\\n 13px \\\"Segoe UI\\\",\\n \\\"Microsoft YaHei\\\",\\n sans-serif;\\n}\\n.react-pivot-field-settings label {\\n display: grid;\\n gap: 5px;\\n color: #515761;\\n}\\n.react-pivot-field-settings__name-input,\\n.react-pivot-field-settings__aggregator {\\n height: 30px;\\n font: inherit;\\n}\\n.react-pivot-field-settings__actions {\\n display: flex;\\n justify-content: flex-end;\\n gap: 8px;\\n}\\n.react-pivot-field-settings__actions button {\\n height: 30px;\\n padding: 0 14px;\\n border: 1px solid #bfc4cb;\\n border-radius: 3px;\\n background: #fff;\\n cursor: pointer;\\n}\\n.react-pivot-field-settings__actions button.is-primary {\\n border-color: #2f78d0;\\n background: #2f78d0;\\n color: #fff;\\n}\\n\")","import { useState, type DragEvent, type MouseEvent } from \"react\";\nimport {\n ReactCheckbox,\n ReactInput,\n ReactPopup,\n ReactResizablePanels,\n ReactSelect,\n} from \"@canvas-components/react-components\";\nimport {\n findPivotFieldArea,\n resolvePivotDimensionKey,\n resolvePivotDimensionTitle,\n resolvePivotValueFieldTitle,\n type BuiltInPivotAggregatorName,\n type PivotField,\n type PivotFieldArea,\n type PivotFieldLayout,\n} from \"@canvas-components/pivot-table\";\nimport \"./pivot-field-panel.css\";\n\ninterface ContextMenuState {\n fieldKey: string;\n area: PivotFieldArea;\n x: number;\n y: number;\n}\n\ninterface FieldSettingsState extends ContextMenuState {}\n\n/** PivotTable 字段自定义面板。 */\nexport function PivotFieldPanel<RecordType>(props: {\n fields: PivotField<RecordType>[];\n layout: PivotFieldLayout;\n onClose: () => void;\n onMove: (\n fieldKey: string,\n area: PivotFieldArea,\n index?: number,\n sourceArea?: PivotFieldArea,\n ) => void;\n onRemove: (fieldKey: string) => void;\n onFieldChange: (\n fieldKey: string,\n patch: { title?: string; aggregator?: BuiltInPivotAggregatorName },\n ) => void;\n}) {\n const [keyword, setKeyword] = useState(\"\");\n const [draggingKey, setDraggingKey] = useState<string | null>(null);\n const [dragOverArea, setDragOverArea] = useState<PivotFieldArea | null>(null);\n const [contextMenu, setContextMenu] = useState<ContextMenuState | null>(null);\n const [settings, setSettings] = useState<FieldSettingsState | null>(null);\n const normalizedKeyword = keyword.trim().toLocaleLowerCase();\n const visibleFields = props.fields.filter((field) =>\n resolvePivotDimensionTitle(field)\n .toLocaleLowerCase()\n .includes(normalizedKeyword),\n );\n const settingsField = settings\n ? findField(props.fields, settings.fieldKey)\n : undefined;\n\n const handleContextMenu = (\n event: MouseEvent<HTMLElement>,\n fieldKey: string,\n area: PivotFieldArea,\n ) => {\n event.preventDefault();\n setContextMenu({ fieldKey, area, x: event.clientX, y: event.clientY });\n };\n const handleMenuClick = (\n event: MouseEvent<HTMLButtonElement>,\n fieldKey: string,\n area: PivotFieldArea,\n ) => {\n event.stopPropagation();\n const rect = event.currentTarget.getBoundingClientRect();\n setContextMenu({ fieldKey, area, x: rect.left, y: rect.bottom });\n };\n\n return (\n <aside className=\"react-pivot-field-panel\" aria-label=\"数据透视表字段\">\n <header className=\"react-pivot-field-panel__header\">\n <strong>数据透视表字段</strong>\n <button\n type=\"button\"\n className=\"react-pivot-field-panel__icon-button\"\n aria-label=\"关闭字段面板\"\n title=\"关闭\"\n onClick={props.onClose}\n >\n ×\n </button>\n </header>\n\n <ReactResizablePanels\n direction=\"vertical\"\n className=\"react-pivot-field-panel__layout\"\n panels={[\n {\n id: \"field-list\",\n minSize: 140,\n content: (\n <section className=\"react-pivot-field-panel__section react-pivot-field-panel__section--fields\">\n <div className=\"react-pivot-field-panel__section-title\">\n 字段列表\n </div>\n <div className=\"react-pivot-field-panel__hint\">\n 将字段拖动至数据透视表区域\n </div>\n <label className=\"react-pivot-field-panel__search\">\n <span aria-hidden=\"true\" />\n <input\n value={keyword}\n placeholder=\"搜索字段\"\n onChange={(event) => setKeyword(event.target.value)}\n />\n </label>\n <div className=\"react-pivot-field-panel__field-list\">\n {visibleFields.map((field) => {\n const fieldKey = resolvePivotDimensionKey(field);\n const area = findPivotFieldArea(props.layout, fieldKey);\n return (\n <div\n key={fieldKey}\n className=\"react-pivot-field-panel__field\"\n draggable\n data-dragging={draggingKey === fieldKey || undefined}\n onDragStart={(event) =>\n startDrag(event, fieldKey, setDraggingKey)\n }\n onDragEnd={() => {\n setDraggingKey(null);\n setDragOverArea(null);\n }}\n >\n <span\n className=\"react-pivot-field-panel__drag\"\n aria-hidden=\"true\"\n />\n <ReactCheckbox\n checked={area != null}\n aria-label={`${resolvePivotDimensionTitle(field)}启用状态`}\n onChange={(event) => {\n if (event.target.checked) {\n props.onMove(\n fieldKey,\n field.defaultArea ?? \"row\",\n );\n } else {\n props.onRemove(fieldKey);\n }\n }}\n />\n <span title={resolvePivotDimensionTitle(field)}>\n {resolvePivotDimensionTitle(field)}\n </span>\n </div>\n );\n })}\n {visibleFields.length === 0 ? (\n <div className=\"react-pivot-field-panel__empty\">\n 未找到字段\n </div>\n ) : null}\n </div>\n </section>\n ),\n },\n {\n id: \"pivot-areas\",\n minSize: 140,\n content: (\n <section className=\"react-pivot-field-panel__section react-pivot-field-panel__section--areas\">\n <div className=\"react-pivot-field-panel__section-title\">\n 数据透视表区域\n </div>\n <div className=\"react-pivot-field-panel__hint\">\n 在下方区域中拖动字段\n </div>\n <div className=\"react-pivot-field-panel__areas\">\n {areaDefinitions.map(({ area, label }) => (\n <FieldArea\n key={area}\n area={area}\n label={label}\n fields={props.fields}\n fieldKeys={layoutArea(props.layout, area)}\n dragging={dragOverArea === area}\n onDragEnter={() => setDragOverArea(area)}\n onDragLeave={() =>\n setDragOverArea((current) =>\n current === area ? null : current,\n )\n }\n onDrop={(event, index) => {\n event.preventDefault();\n const dragField = readDragField(event, draggingKey);\n if (dragField) {\n props.onMove(\n dragField.fieldKey,\n area,\n index,\n dragField.sourceArea,\n );\n }\n setDraggingKey(null);\n setDragOverArea(null);\n }}\n onContextMenu={handleContextMenu}\n onMenuClick={handleMenuClick}\n />\n ))}\n </div>\n </section>\n ),\n },\n ]}\n />\n\n <FieldContextMenu\n state={contextMenu}\n layout={props.layout}\n onClose={() => setContextMenu(null)}\n onMove={props.onMove}\n onRemove={props.onRemove}\n onSettings={(next) => {\n setContextMenu(null);\n setSettings(next);\n }}\n />\n {settings && settingsField ? (\n <FieldSettingsPopup\n key={`${settings.fieldKey}:${settings.x}:${settings.y}`}\n state={settings}\n field={settingsField}\n onClose={() => setSettings(null)}\n onApply={(patch) => {\n props.onFieldChange(settings.fieldKey, patch);\n setSettings(null);\n }}\n />\n ) : null}\n </aside>\n );\n}\n\nfunction FieldArea<RecordType>(props: {\n area: PivotFieldArea;\n label: string;\n fields: PivotField<RecordType>[];\n fieldKeys: string[];\n dragging: boolean;\n onDragEnter: () => void;\n onDragLeave: () => void;\n onDrop: (event: DragEvent<HTMLElement>, index?: number) => void;\n onContextMenu: (\n event: MouseEvent<HTMLElement>,\n fieldKey: string,\n area: PivotFieldArea,\n ) => void;\n onMenuClick: (\n event: MouseEvent<HTMLButtonElement>,\n fieldKey: string,\n area: PivotFieldArea,\n ) => void;\n}) {\n return (\n <div className=\"react-pivot-field-panel__area-wrap\">\n <div className=\"react-pivot-field-panel__area-title\">\n <strong>{props.label}</strong>\n </div>\n <div\n className=\"react-pivot-field-panel__area\"\n data-dragging={props.dragging || undefined}\n onDragOver={(event) => event.preventDefault()}\n onDragEnter={props.onDragEnter}\n onDragLeave={(event) => {\n if (\n !event.currentTarget.contains(event.relatedTarget as Node | null)\n ) {\n props.onDragLeave();\n }\n }}\n onDrop={(event) => props.onDrop(event)}\n >\n {props.fieldKeys.map((fieldKey, index) => {\n const field = findField(props.fields, fieldKey);\n if (!field) return null;\n const fieldTitle =\n props.area === \"value\"\n ? resolvePivotValueFieldTitle(field)\n : resolvePivotDimensionTitle(field);\n return (\n <div\n key={fieldKey}\n className=\"react-pivot-field-panel__area-field\"\n draggable\n onDragStart={(event) =>\n startDrag(event, fieldKey, undefined, props.area)\n }\n onDragOver={(event) => event.preventDefault()}\n onDrop={(event) => {\n event.stopPropagation();\n props.onDrop(event, index);\n }}\n onContextMenu={(event) =>\n props.onContextMenu(event, fieldKey, props.area)\n }\n >\n <span\n className=\"react-pivot-field-panel__drag\"\n aria-hidden=\"true\"\n />\n <span title={fieldTitle}>{fieldTitle}</span>\n <button\n type=\"button\"\n className=\"react-pivot-field-panel__area-field-menu\"\n aria-label={`${fieldTitle}字段菜单`}\n title=\"字段操作\"\n onPointerDown={(event) => event.stopPropagation()}\n onClick={(event) =>\n props.onMenuClick(event, fieldKey, props.area)\n }\n >\n <span aria-hidden=\"true\" />\n </button>\n </div>\n );\n })}\n {props.fieldKeys.length === 0 ? (\n <div className=\"react-pivot-field-panel__area-empty\">\n 拖动字段到此处\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction FieldContextMenu(props: {\n state: ContextMenuState | null;\n layout: PivotFieldLayout;\n onClose: () => void;\n onMove: (\n fieldKey: string,\n area: PivotFieldArea,\n index?: number,\n sourceArea?: PivotFieldArea,\n ) => void;\n onRemove: (fieldKey: string) => void;\n onSettings: (state: FieldSettingsState) => void;\n}) {\n const state = props.state;\n if (!state) return null;\n const keys = layoutArea(props.layout, state.area);\n const index = keys.indexOf(state.fieldKey);\n return (\n <ReactPopup\n open\n anchorRect={{ x: state.x, y: state.y, width: 0, height: 0 }}\n offset={2}\n minWidth={176}\n zIndex={10020}\n surfaceStyle={popupStyle}\n onOpenChange={(open) => {\n if (!open) props.onClose();\n }}\n >\n <div className=\"react-pivot-field-menu\" role=\"menu\">\n <MenuAction\n label=\"上移\"\n disabled={index <= 0}\n onClick={() =>\n props.onMove(state.fieldKey, state.area, index - 1, state.area)\n }\n close={props.onClose}\n />\n <MenuAction\n label=\"下移\"\n disabled={index < 0 || index >= keys.length - 1}\n onClick={() =>\n props.onMove(state.fieldKey, state.area, index + 1, state.area)\n }\n close={props.onClose}\n />\n <MenuAction\n label=\"移至开头\"\n disabled={index <= 0}\n onClick={() =>\n props.onMove(state.fieldKey, state.area, 0, state.area)\n }\n close={props.onClose}\n />\n <MenuAction\n label=\"移至末尾\"\n disabled={index === keys.length - 1}\n onClick={() =>\n props.onMove(state.fieldKey, state.area, undefined, state.area)\n }\n close={props.onClose}\n />\n <MenuSeparator />\n <MenuAction\n label=\"添加到报表筛选\"\n disabled={state.area === \"filter\"}\n onClick={() =>\n props.onMove(state.fieldKey, \"filter\", undefined, state.area)\n }\n close={props.onClose}\n />\n <MenuAction\n label=\"添加到行标签\"\n disabled={state.area === \"row\"}\n onClick={() =>\n props.onMove(state.fieldKey, \"row\", undefined, state.area)\n }\n close={props.onClose}\n />\n <MenuAction\n label=\"添加到列标签\"\n disabled={state.area === \"column\"}\n onClick={() =>\n props.onMove(state.fieldKey, \"column\", undefined, state.area)\n }\n close={props.onClose}\n />\n <MenuAction\n label=\"移动到值\"\n disabled={state.area === \"value\"}\n onClick={() =>\n props.onMove(state.fieldKey, \"value\", undefined, state.area)\n }\n close={props.onClose}\n />\n <MenuSeparator />\n <MenuAction\n label=\"删除字段\"\n danger\n onClick={() => props.onRemove(state.fieldKey)}\n close={props.onClose}\n />\n <MenuAction\n label=\"字段设置...\"\n onClick={() => props.onSettings(state)}\n />\n </div>\n </ReactPopup>\n );\n}\n\nfunction FieldSettingsPopup<RecordType>(props: {\n state: FieldSettingsState;\n field: PivotField<RecordType>;\n onClose: () => void;\n onApply: (patch: {\n title?: string;\n aggregator?: BuiltInPivotAggregatorName;\n }) => void;\n}) {\n const field = props.field;\n const state = props.state;\n const [draft, setDraft] = useState<{\n key: string;\n title: string;\n aggregator: BuiltInPivotAggregatorName;\n } | null>(null);\n const fieldKey = resolvePivotDimensionKey(field);\n const current =\n draft?.key === fieldKey\n ? draft\n : {\n key: fieldKey,\n title: resolvePivotDimensionTitle(field),\n aggregator: resolveAggregator(field),\n };\n return (\n <ReactPopup\n open\n anchorRect={{ x: state.x, y: state.y, width: 0, height: 0 }}\n offset={2}\n minWidth={260}\n zIndex={10021}\n surfaceStyle={popupStyle}\n onOpenChange={(open) => {\n if (!open) props.onClose();\n }}\n >\n <form\n className=\"react-pivot-field-settings\"\n onSubmit={(event) => {\n event.preventDefault();\n props.onApply({\n title: current.title.trim() || undefined,\n aggregator: current.aggregator,\n });\n }}\n >\n <strong>字段设置</strong>\n <label>\n <span>自定义名称</span>\n <ReactInput\n wrapperClassName=\"react-pivot-field-settings__name-input\"\n value={current.title}\n onChange={(event) =>\n setDraft({ ...current, title: event.target.value })\n }\n />\n </label>\n {state.area === \"value\" ? (\n <label>\n <span>汇总方式</span>\n <ReactSelect\n className=\"react-pivot-field-settings__aggregator\"\n value={current.aggregator}\n options={aggregatorOptions}\n allowClear={false}\n popupZIndex={10022}\n onChange={(value) =>\n setDraft({\n ...current,\n aggregator: value as BuiltInPivotAggregatorName,\n })\n }\n />\n </label>\n ) : null}\n <div className=\"react-pivot-field-settings__actions\">\n <button type=\"button\" onClick={props.onClose}>\n 取消\n </button>\n <button type=\"submit\" className=\"is-primary\">\n 确定\n </button>\n </div>\n </form>\n </ReactPopup>\n );\n}\n\nfunction MenuAction(props: {\n label: string;\n disabled?: boolean;\n danger?: boolean;\n onClick: () => void;\n close?: () => void;\n}) {\n return (\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"react-pivot-field-menu__item\"\n data-danger={props.danger || undefined}\n disabled={props.disabled}\n onClick={() => {\n props.onClick();\n props.close?.();\n }}\n >\n {props.label}\n </button>\n );\n}\n\nfunction MenuSeparator() {\n return <div className=\"react-pivot-field-menu__separator\" role=\"separator\" />;\n}\n\nfunction startDrag(\n event: DragEvent<HTMLElement>,\n fieldKey: string,\n setDraggingKey?: (key: string) => void,\n sourceArea?: PivotFieldArea,\n) {\n event.dataTransfer.effectAllowed = \"move\";\n event.dataTransfer.setData(\"application/x-pivot-field\", fieldKey);\n event.dataTransfer.setData(\"text/plain\", fieldKey);\n if (sourceArea) {\n event.dataTransfer.setData(\"application/x-pivot-field-area\", sourceArea);\n }\n setDraggingKey?.(fieldKey);\n}\n\nfunction readDragField(event: DragEvent<HTMLElement>, fallback: string | null) {\n const fieldKey =\n event.dataTransfer.getData(\"application/x-pivot-field\") ||\n event.dataTransfer.getData(\"text/plain\") ||\n fallback;\n if (!fieldKey) return null;\n const sourceArea = event.dataTransfer.getData(\n \"application/x-pivot-field-area\",\n ) as PivotFieldArea | \"\";\n return { fieldKey, sourceArea: sourceArea || undefined };\n}\n\nfunction findField<RecordType>(\n fields: PivotField<RecordType>[],\n fieldKey: string,\n) {\n return fields.find((field) => resolvePivotDimensionKey(field) === fieldKey);\n}\n\nfunction layoutArea(layout: PivotFieldLayout, area: PivotFieldArea) {\n if (area === \"filter\") return layout.filters;\n if (area === \"column\") return layout.columns;\n if (area === \"row\") return layout.rows;\n return layout.values;\n}\n\nfunction resolveAggregator<RecordType>(\n field: PivotField<RecordType>,\n): BuiltInPivotAggregatorName {\n const aggregator = field.indicator?.aggregator;\n return typeof aggregator === \"string\" &&\n builtInAggregators.includes(aggregator as BuiltInPivotAggregatorName)\n ? (aggregator as BuiltInPivotAggregatorName)\n : \"sum\";\n}\n\nconst areaDefinitions: Array<{ area: PivotFieldArea; label: string }> = [\n { area: \"filter\", label: \"筛选器\" },\n { area: \"column\", label: \"列\" },\n { area: \"row\", label: \"行\" },\n { area: \"value\", label: \"值\" },\n];\n\nconst builtInAggregators: BuiltInPivotAggregatorName[] = [\n \"sum\",\n \"avg\",\n \"count\",\n \"distinctCount\",\n \"min\",\n \"max\",\n];\n\nconst aggregatorOptions: Array<{\n label: string;\n value: BuiltInPivotAggregatorName;\n}> = [\n { label: \"求和\", value: \"sum\" },\n { label: \"计数\", value: \"count\" },\n { label: \"平均值\", value: \"avg\" },\n { label: \"最大值\", value: \"max\" },\n { label: \"最小值\", value: \"min\" },\n { label: \"去重计数\", value: \"distinctCount\" },\n];\n\nconst popupStyle = {\n padding: 0,\n background: \"#ffffff\",\n border: \"1px solid #c8cdd4\",\n borderRadius: 4,\n boxShadow: \"0 8px 24px rgba(31, 35, 41, 0.16)\",\n};\n","import type {\n CanvasChartPieOption,\n CanvasChartSparklineOption,\n CanvasChartSparklineSeriesOption,\n} from \"@canvas-components/chart\";\nimport {\n createPivotCellKey,\n type PivotDimension,\n type PivotIndicator,\n type PivotModel,\n type PivotResolvedPath,\n} from \"@canvas-components/pivot-table\";\n\n/** 透视图表类型。 */\nexport type PivotChartType =\n | \"pie\"\n | \"grouped-horizontal-bar\"\n | \"grouped-column\"\n | \"stacked-area\"\n | \"stacked-horizontal-bar\"\n | \"stacked-column\"\n | \"area\"\n | \"line\";\n\nexport const pivotChartTypeLabels: Record<PivotChartType, string> = {\n pie: \"饼图\",\n \"grouped-horizontal-bar\": \"簇状条形图\",\n \"grouped-column\": \"簇状柱形图\",\n \"stacked-area\": \"堆积面积图\",\n \"stacked-horizontal-bar\": \"堆积条形图\",\n \"stacked-column\": \"堆积柱形图\",\n area: \"面积图\",\n line: \"折线图\",\n};\n\nexport type PivotChartOption =\n | { rendererType: \"pie\"; option: CanvasChartPieOption }\n | { rendererType: \"sparkline\"; option: CanvasChartSparklineOption };\n\nconst SERIES_COLORS = [\n \"#1677ff\",\n \"#36a269\",\n \"#e89b29\",\n \"#7b61c8\",\n \"#d05a6e\",\n \"#278f9d\",\n];\n\n/** 将当前透视模型转换为图表配置。 */\nexport function buildPivotChartOption<RecordType>(params: {\n type: PivotChartType;\n model: PivotModel<RecordType>;\n rows: PivotDimension<RecordType>[];\n columns: PivotDimension<RecordType>[];\n indicators: PivotIndicator<RecordType>[];\n}): PivotChartOption | null {\n const { columns, indicators, model, rows, type } = params;\n if (indicators.length === 0) return null;\n const rowPaths = Array.from(model.rowPaths.values());\n const columnPaths = Array.from(model.columnPaths.values());\n const labels = (rows.length > 0 ? rowPaths : columnPaths).map(\n resolvePathLabel,\n );\n const rawSeries = buildRawSeries({\n columnPaths,\n columns,\n indicators,\n model,\n rowPaths,\n rows,\n });\n if (rawSeries.length === 0) return null;\n\n if (type === \"pie\") {\n const source = rawSeries[0]!;\n return {\n rendererType: \"pie\",\n option: {\n color: SERIES_COLORS,\n tooltip: createTooltip(),\n series: {\n type: \"pie\",\n name: source.name,\n center: [\"34%\", \"50%\"],\n radius: \"52%\",\n itemStyle: { borderColor: \"#ffffff\", borderWidth: 1 },\n label: {\n show: true,\n position: \"outside\",\n color: \"#515761\",\n fontSize: 11,\n },\n labelLine: {\n show: true,\n length: 10,\n length2: 8,\n lineStyle: { width: 1, opacity: 0.72 },\n },\n emphasis: {\n scale: true,\n scaleSize: 7,\n },\n data: labels.map((name, index) => ({\n name,\n value: source.data[index] ?? 0,\n })),\n },\n legend: {\n show: true,\n orient: \"vertical\",\n left: \"right\",\n top: \"middle\",\n itemWidth: 9,\n itemHeight: 9,\n itemGap: 7,\n textStyle: { color: \"#515761\", fontSize: 11 },\n },\n },\n };\n }\n\n const horizontal =\n type === \"grouped-horizontal-bar\" || type === \"stacked-horizontal-bar\";\n const line = type === \"line\" || type === \"area\" || type === \"stacked-area\";\n const stacked =\n type === \"stacked-area\" ||\n type === \"stacked-horizontal-bar\" ||\n type === \"stacked-column\";\n const area = type === \"area\" || type === \"stacked-area\";\n const series = rawSeries.map(\n (item, index): CanvasChartSparklineSeriesOption => {\n const color = SERIES_COLORS[index % SERIES_COLORS.length]!;\n return line\n ? {\n type: \"line\",\n name: item.name,\n data: item.data,\n stack: stacked ? \"pivot-values\" : undefined,\n smooth: false,\n showSymbol: true,\n symbolSize: 5,\n lineStyle: { color, width: 2 },\n areaStyle: area\n ? { color, opacity: stacked ? 0.7 : 0.22 }\n : undefined,\n itemStyle: { color },\n }\n : {\n type: \"bar\",\n name: item.name,\n data: item.data,\n stack: stacked ? \"pivot-values\" : undefined,\n barWidth: stacked ? 24 : 18,\n itemStyle: { color },\n };\n },\n );\n const hasNegative = rawSeries.some((item) =>\n item.data.some((value) => value < 0),\n );\n const categoryAxis = {\n type: \"category\" as const,\n data: labels,\n axisLabel: { color: \"#646a73\", fontSize: 11, margin: 8 },\n axisTick: { show: false },\n };\n const valueAxis = {\n type: \"value\" as const,\n min: hasNegative ? (\"dataMin\" as const) : 0,\n splitNumber: 4,\n axisLabel: { color: \"#8f959e\", fontSize: 10 },\n axisTick: { show: false },\n splitLine: { show: true, color: \"#edf0f2\" },\n };\n return {\n rendererType: \"sparkline\",\n option: {\n grid: {\n show: true,\n left: 12,\n right: 14,\n top: 40,\n bottom: 18,\n containLabel: true,\n backgroundColor: \"#ffffff\",\n borderColor: \"#e6e9ed\",\n borderWidth: 1,\n },\n legend: {\n show: true,\n orient: \"horizontal\",\n left: \"center\",\n top: \"top\",\n itemGap: 12,\n textStyle: { color: \"#646a73\", fontSize: 11 },\n },\n xAxis: horizontal ? valueAxis : categoryAxis,\n yAxis: horizontal ? categoryAxis : valueAxis,\n tooltip: {\n ...createTooltip(),\n trigger: \"axis\",\n axisPointer: {\n type: line ? \"line\" : \"shadow\",\n lineStyle: { color: \"#8f959e\", width: 1 },\n shadowStyle: { color: \"#1f2329\", opacity: 0.05 },\n },\n },\n series,\n },\n };\n}\n\nfunction createTooltip() {\n return {\n backgroundColor: \"rgba(255, 255, 255, 0.98)\",\n borderColor: \"#dfe3e7\",\n borderWidth: 1,\n borderRadius: 4,\n padding: [8, 10] as [number, number],\n textStyle: { color: \"#1f2329\", fontSize: 12 },\n };\n}\n\nfunction buildRawSeries<RecordType>(params: {\n model: PivotModel<RecordType>;\n rows: PivotDimension<RecordType>[];\n columns: PivotDimension<RecordType>[];\n indicators: PivotIndicator<RecordType>[];\n rowPaths: PivotResolvedPath[];\n columnPaths: PivotResolvedPath[];\n}) {\n const { columnPaths, columns, indicators, model, rowPaths, rows } = params;\n const result: Array<{ name: string; data: number[] }> = [];\n if (rows.length > 0) {\n columnPaths.forEach((columnPath) =>\n indicators.forEach((indicator) =>\n result.push({\n name: resolveSeriesName(\n columns.length > 0 ? resolvePathLabel(columnPath) : \"\",\n indicator,\n ),\n data: rowPaths.map((rowPath) =>\n resolveCellNumber(\n model,\n rowPath.key,\n columnPath.key,\n indicator.key,\n ),\n ),\n }),\n ),\n );\n return result;\n }\n const rowPath = rowPaths[0];\n if (!rowPath) return result;\n indicators.forEach((indicator) =>\n result.push({\n name: indicator.title ?? indicator.key,\n data: columnPaths.map((columnPath) =>\n resolveCellNumber(model, rowPath.key, columnPath.key, indicator.key),\n ),\n }),\n );\n return result;\n}\n\nfunction resolvePathLabel(path: PivotResolvedPath) {\n return path.values.map((item) => item.label).join(\" / \") || \"总计\";\n}\n\nfunction resolveSeriesName<RecordType>(\n pathLabel: string,\n indicator: PivotIndicator<RecordType>,\n) {\n const indicatorLabel = indicator.title ?? indicator.key;\n return pathLabel ? `${pathLabel} · ${indicatorLabel}` : indicatorLabel;\n}\n\nfunction resolveCellNumber<RecordType>(\n model: PivotModel<RecordType>,\n rowPathKey: string,\n columnPathKey: string,\n indicatorKey: string,\n) {\n const value = model.cells.get(\n createPivotCellKey(rowPathKey, columnPathKey, indicatorKey),\n )?.value;\n const numericValue = typeof value === \"number\" ? value : Number(value);\n return Number.isFinite(numericValue) ? numericValue : 0;\n}\n","import styleInject from '#style-inject';styleInject(\".react-pivot-table {\\n position: relative;\\n display: flex;\\n min-width: 0;\\n min-height: 0;\\n flex-direction: column;\\n overflow: hidden;\\n box-sizing: border-box;\\n}\\n.react-pivot-table-titlebar {\\n display: flex;\\n height: 44px;\\n flex: 0 0 44px;\\n align-items: center;\\n justify-content: space-between;\\n padding: 12px 0;\\n background: #fff;\\n box-sizing: border-box;\\n}\\n.react-pivot-table-title {\\n min-width: 0;\\n overflow: hidden;\\n color: #1f2937;\\n font-size: 14px;\\n font-weight: 600;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.react-pivot-table-titlebar__actions {\\n display: flex;\\n flex: none;\\n align-items: center;\\n gap: 14px;\\n color: #475569;\\n}\\n.react-pivot-table-titlebar__tool {\\n display: inline-flex;\\n width: 24px;\\n height: 24px;\\n align-items: center;\\n justify-content: center;\\n padding: 0;\\n border: 0;\\n background: transparent;\\n color: inherit;\\n cursor: pointer;\\n font: 16px/24px sans-serif;\\n}\\n.react-pivot-table-titlebar__tool:hover,\\n.react-pivot-table-titlebar__tool[aria-pressed=true],\\n.react-pivot-table-titlebar__tool[aria-expanded=true] {\\n color: #1677ff;\\n}\\n.react-pivot-table-titlebar__tool:focus-visible {\\n outline: 2px solid rgba(22, 119, 255, 0.28);\\n outline-offset: 1px;\\n}\\n.react-pivot-chart-picker-surface {\\n overflow: hidden;\\n border-radius: 4px;\\n}\\n.react-pivot-chart-picker {\\n display: grid;\\n gap: 2px;\\n padding: 5px;\\n background: #fff;\\n}\\n.react-pivot-chart-picker__item {\\n display: grid;\\n width: 100%;\\n min-height: 34px;\\n grid-template-columns: 24px minmax(0, 1fr);\\n align-items: center;\\n gap: 8px;\\n padding: 4px 8px;\\n border: 0;\\n border-radius: 3px;\\n background: transparent;\\n color: #1f2329;\\n cursor: pointer;\\n font:\\n 13px/20px \\\"Segoe UI\\\",\\n \\\"Microsoft YaHei\\\",\\n sans-serif;\\n text-align: left;\\n}\\n.react-pivot-chart-picker__item:hover,\\n.react-pivot-chart-picker__item:focus-visible {\\n background: #f2f6fb;\\n outline: none;\\n}\\n.react-pivot-chart-picker__item:disabled {\\n background: transparent;\\n color: #a7abb2;\\n cursor: default;\\n}\\n.react-pivot-chart-picker__item svg {\\n width: 22px;\\n height: 22px;\\n fill: #6b7785;\\n stroke: #6b7785;\\n stroke-width: 1.8;\\n}\\n.react-pivot-chart-picker__item:hover svg,\\n.react-pivot-chart-picker__item:focus-visible svg {\\n fill: #1677ff;\\n stroke: #1677ff;\\n}\\n.react-pivot-chart-picker__item:disabled svg {\\n fill: #a7abb2;\\n stroke: #a7abb2;\\n}\\n.react-pivot-table__content {\\n position: relative;\\n flex: 1 1 auto;\\n min-width: 0;\\n min-height: 0;\\n overflow: hidden;\\n}\\n.react-pivot-table__table {\\n position: relative;\\n width: 100%;\\n height: 100%;\\n min-width: 0;\\n min-height: 0;\\n overflow: hidden;\\n}\\n\")","import { useRef, useState, type ReactNode } from \"react\";\nimport { ReactPopup } from \"@canvas-components/react-components\";\nimport {\n pivotChartTypeLabels,\n type PivotChartType,\n} from \"../chart/pivot-chart-data\";\nimport \"./pivot-titlebar.css\";\n\n/** PivotTable 标题栏。 */\nexport function PivotTitlebar(props: {\n title?: ReactNode;\n showFieldSettings: boolean;\n fieldPanelOpen: boolean;\n onToggleFieldPanel: () => void;\n onAddChart: (type: PivotChartType) => void;\n chartTypes: PivotChartType[];\n}) {\n const chartButtonRef = useRef<HTMLButtonElement | null>(null);\n const [chartMenuOpen, setChartMenuOpen] = useState(false);\n const settingsLabel = props.fieldPanelOpen ? \"关闭字段面板\" : \"打开字段面板\";\n return (\n <header className=\"react-pivot-table-titlebar\">\n <div className=\"react-pivot-table-title\">{props.title}</div>\n <div className=\"react-pivot-table-titlebar__actions\">\n <button\n ref={chartButtonRef}\n type=\"button\"\n className=\"react-pivot-table-titlebar__tool\"\n title=\"添加图表\"\n aria-label=\"添加图表\"\n aria-haspopup=\"menu\"\n aria-expanded={chartMenuOpen}\n onClick={() => setChartMenuOpen((open) => !open)}\n >\n <ChartIcon />\n </button>\n {props.showFieldSettings ? (\n <button\n type=\"button\"\n className=\"react-pivot-table-titlebar__tool\"\n title={settingsLabel}\n aria-label={settingsLabel}\n aria-pressed={props.fieldPanelOpen}\n onClick={props.onToggleFieldPanel}\n >\n <SettingsIcon />\n </button>\n ) : null}\n </div>\n <ReactPopup\n open={chartMenuOpen}\n anchorRef={chartButtonRef}\n placement=\"bottomRight\"\n offset={6}\n minWidth={176}\n surfaceClassName=\"react-pivot-chart-picker-surface\"\n onOpenChange={setChartMenuOpen}\n >\n <div className=\"react-pivot-chart-picker\" role=\"menu\">\n {(Object.keys(pivotChartTypeLabels) as PivotChartType[]).map(\n (type) => {\n const added = props.chartTypes.includes(type);\n return (\n <button\n key={type}\n type=\"button\"\n className=\"react-pivot-chart-picker__item\"\n role=\"menuitem\"\n disabled={added}\n title={added ? \"已添加该图表\" : undefined}\n onClick={() => {\n props.onAddChart(type);\n setChartMenuOpen(false);\n }}\n >\n <ChartTypeIcon type={type} />\n <span>{pivotChartTypeLabels[type]}</span>\n </button>\n );\n },\n )}\n </div>\n </ReactPopup>\n </header>\n );\n}\n\nfunction ChartIcon() {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M4 19V5M4 19h16\" />\n <path d=\"m7 15 3-4 3 2 4-6\" />\n </svg>\n );\n}\n\nfunction ChartTypeIcon(props: { type: PivotChartType }) {\n if (props.type === \"pie\") {\n return (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path d=\"M12 3a9 9 0 1 0 9 9h-9z\" />\n <path d=\"M14 3.2V10h6.8A9 9 0 0 0 14 3.2z\" fill=\"none\" />\n </svg>\n );\n }\n if (\n props.type === \"grouped-horizontal-bar\" ||\n props.type === \"stacked-horizontal-bar\"\n ) {\n return (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n {props.type === \"stacked-horizontal-bar\" ? (\n <path d=\"M3 4h7v4H3zM10 4h9v4h-9zM3 10h11v4H3zM14 10h7v4h-7zM3 16h5v4H3zM8 16h10v4H8z\" />\n ) : (\n <path d=\"M3 4h13v3H3zM3 9h18v3H3zM3 14h10v3H3zM3 19h16v3H3z\" />\n )}\n </svg>\n );\n }\n if (props.type === \"area\" || props.type === \"stacked-area\") {\n return (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n {props.type === \"stacked-area\" ? (\n <>\n <path d=\"M3 17 8 11l4 3 5-7 4 3v10H3z\" />\n <path d=\"m3 13 5-5 4 3 5-7 4 3\" fill=\"none\" />\n </>\n ) : (\n <path d=\"M3 18 8 11l4 3 6-9 3 3v12H3z\" />\n )}\n </svg>\n );\n }\n if (props.type === \"grouped-column\" || props.type === \"stacked-column\") {\n return (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n {props.type === \"stacked-column\" ? (\n <path d=\"M3 12h5v8H3zM3 5h5v7H3zM10 9h5v11h-5zM10 4h5v5h-5zM17 14h4v6h-4zM17 7h4v7h-4z\" />\n ) : (\n <path d=\"M3 11h3v9H3zM7 6h3v14H7zM13 8h3v12h-3zM17 4h3v16h-3z\" />\n )}\n </svg>\n );\n }\n return (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <path d=\"m3 17 5-6 4 3 6-8 3 2\" fill=\"none\" />\n </svg>\n );\n}\n\nfunction SettingsIcon() {\n return (\n <svg\n viewBox=\"64 64 896 896\"\n width=\"1em\"\n height=\"1em\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M924.8 625.7l-65.5-56c3.1-19 4.7-38.4 4.7-57.8s-1.6-38.8-4.7-57.8l65.5-56a32.03 32.03 0 009.3-35.2l-.9-2.6a443.74 443.74 0 00-79.7-137.9l-1.8-2.1a32.12 32.12 0 00-35.1-9.5l-81.3 28.9c-30-24.6-63.5-44-99.7-57.6l-15.7-85a32.05 32.05 0 00-25.8-25.7l-2.7-.5c-52.1-9.4-106.9-9.4-159 0l-2.7.5a32.05 32.05 0 00-25.8 25.7l-15.8 85.4a351.86 351.86 0 00-99 57.4l-81.9-29.1a32 32 0 00-35.1 9.5l-1.8 2.1a446.02 446.02 0 00-79.7 137.9l-.9 2.6c-4.5 12.5-.8 26.5 9.3 35.2l66.3 56.6c-3.1 18.8-4.6 38-4.6 57.1 0 19.2 1.5 38.4 4.6 57.1L99 625.5a32.03 32.03 0 00-9.3 35.2l.9 2.6c18.1 50.4 44.9 96.9 79.7 137.9l1.8 2.1a32.12 32.12 0 0035.1 9.5l81.9-29.1c29.8 24.5 63.1 43.9 99 57.4l15.8 85.4a32.05 32.05 0 0025.8 25.7l2.7.5a449.4 449.4 0 00159 0l2.7-.5a32.05 32.05 0 0025.8-25.7l15.7-85a350 350 0 0099.7-57.6l81.3 28.9a32 32 0 0035.1-9.5l1.8-2.1c34.8-41.1 61.6-87.5 79.7-137.9l.9-2.6c4.5-12.3.8-26.3-9.3-35zM788.3 465.9c2.5 15.1 3.8 30.6 3.8 46.1s-1.3 31-3.8 46.1l-6.6 40.1 74.7 63.9a370.03 370.03 0 01-42.6 73.6L721 702.8l-31.4 25.8c-23.9 19.6-50.5 35-79.3 45.8l-38.1 14.3-17.9 97a377.5 377.5 0 01-85 0l-17.9-97.2-37.8-14.5c-28.5-10.8-55-26.2-78.7-45.7l-31.4-25.9-93.4 33.2c-17-22.9-31.2-47.6-42.6-73.6l75.5-64.5-6.5-40c-2.4-14.9-3.7-30.3-3.7-45.5 0-15.3 1.2-30.6 3.7-45.5l6.5-40-75.5-64.5c11.3-26.1 25.6-50.7 42.6-73.6l93.4 33.2 31.4-25.9c23.7-19.5 50.2-34.9 78.7-45.7l37.9-14.3 17.9-97.2c28.1-3.2 56.8-3.2 85 0l17.9 97 38.1 14.3c28.7 10.8 55.4 26.2 79.3 45.8l31.4 25.8 92.8-32.9c17 22.9 31.2 47.6 42.6 73.6L781.8 426l6.5 39.9zM512 326c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm79.2 255.2A111.6 111.6 0 01512 614c-29.9 0-58-11.7-79.2-32.8A111.6 111.6 0 01400 502c0-29.9 11.7-58 32.8-79.2C454 401.6 482.1 390 512 390c29.9 0 58 11.6 79.2 32.8A111.6 111.6 0 01624 502c0 29.9-11.7 58-32.8 79.2z\" />\n </svg>\n );\n}\n","import styleInject from '#style-inject';styleInject(\".react-pivot-chart-panel {\\n display: flex;\\n width: 100%;\\n min-width: 0;\\n height: 100%;\\n min-height: 0;\\n flex-direction: column;\\n gap: 8px;\\n padding: 0;\\n overflow: auto;\\n background: #fff;\\n box-sizing: border-box;\\n}\\n.react-pivot-chart-card {\\n display: flex;\\n min-width: 0;\\n min-height: 240px;\\n flex: 0 0 260px;\\n flex-direction: column;\\n overflow: hidden;\\n border-radius: 0;\\n background: #fff;\\n box-sizing: border-box;\\n}\\n.react-pivot-chart-card:only-child {\\n min-height: 240px;\\n flex: 1 1 auto;\\n}\\n.react-pivot-chart-card__header {\\n display: flex;\\n height: 42px;\\n flex: 0 0 42px;\\n align-items: center;\\n justify-content: space-between;\\n padding: 0 10px 0 14px;\\n border-bottom: 1px solid #edf0f2;\\n color: #1f2329;\\n font-size: 13px;\\n box-sizing: border-box;\\n}\\n.react-pivot-chart-card__remove {\\n display: inline-flex;\\n width: 24px;\\n height: 24px;\\n align-items: center;\\n justify-content: center;\\n padding: 0;\\n border: 0;\\n background: transparent;\\n color: #646a73;\\n cursor: pointer;\\n font: 18px/24px \\\"Segoe UI\\\", sans-serif;\\n}\\n.react-pivot-chart-card__remove:hover {\\n background: #f2f3f5;\\n color: #d14343;\\n}\\n.react-pivot-chart-card__canvas {\\n min-width: 0;\\n min-height: 0;\\n flex: 1 1 auto;\\n}\\n.react-pivot-chart-card__empty {\\n display: grid;\\n min-height: 0;\\n flex: 1 1 auto;\\n place-items: center;\\n color: #8f959e;\\n font-size: 12px;\\n}\\n\")","import { useEffect, useMemo, useRef } from \"react\";\nimport { CanvasChart } from \"@canvas-components/chart\";\nimport type {\n PivotDimension,\n PivotIndicator,\n PivotModel,\n} from \"@canvas-components/pivot-table\";\nimport {\n buildPivotChartOption,\n pivotChartTypeLabels,\n type PivotChartOption,\n type PivotChartType,\n} from \"./pivot-chart-data\";\nimport \"./pivot-chart-panel.css\";\n\nexport interface PivotChartItem {\n id: string;\n type: PivotChartType;\n}\n\n/** 透视图表列。 */\nexport function PivotChartPanel<RecordType>(props: {\n charts: PivotChartItem[];\n model: PivotModel<RecordType> | null;\n rows: PivotDimension<RecordType>[];\n columns: PivotDimension<RecordType>[];\n indicators: PivotIndicator<RecordType>[];\n onRemove: (chartId: string) => void;\n}) {\n return (\n <section className=\"react-pivot-chart-panel\" aria-label=\"透视图表\">\n {props.charts.map((chart, index) => (\n <PivotChartCard\n key={chart.id}\n chart={chart}\n index={index}\n model={props.model}\n rows={props.rows}\n columns={props.columns}\n indicators={props.indicators}\n onRemove={props.onRemove}\n />\n ))}\n </section>\n );\n}\n\nfunction PivotChartCard<RecordType>(props: {\n chart: PivotChartItem;\n index: number;\n model: PivotModel<RecordType> | null;\n rows: PivotDimension<RecordType>[];\n columns: PivotDimension<RecordType>[];\n indicators: PivotIndicator<RecordType>[];\n onRemove: (chartId: string) => void;\n}) {\n const option = useMemo(\n () =>\n props.model\n ? buildPivotChartOption({\n type: props.chart.type,\n model: props.model,\n rows: props.rows,\n columns: props.columns,\n indicators: props.indicators,\n })\n : null,\n [\n props.chart.type,\n props.columns,\n props.indicators,\n props.model,\n props.rows,\n ],\n );\n const title = `${pivotChartTypeLabels[props.chart.type]} ${props.index + 1}`;\n return (\n <article className=\"react-pivot-chart-card\">\n <header className=\"react-pivot-chart-card__header\">\n <strong>{title}</strong>\n <button\n type=\"button\"\n className=\"react-pivot-chart-card__remove\"\n aria-label={`移除${title}`}\n title=\"移除图表\"\n onClick={() => props.onRemove(props.chart.id)}\n >\n ×\n </button>\n </header>\n {option ? (\n <PivotChartCanvas chartOption={option} />\n ) : (\n <div className=\"react-pivot-chart-card__empty\">\n 请先在值区域添加指标\n </div>\n )}\n </article>\n );\n}\n\nfunction PivotChartCanvas(props: { chartOption: PivotChartOption }) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return;\n }\n const chart = new CanvasChart(container, {\n type: props.chartOption.rendererType,\n option: props.chartOption.option,\n });\n chart.mount();\n return () => chart.destroy();\n }, [props.chartOption]);\n\n return <div ref={containerRef} className=\"react-pivot-chart-card__canvas\" />;\n}\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type ForwardedRef,\n} from \"react\";\nimport {\n PivotTable,\n type PivotDimensionFilter,\n type PivotDimensionFilterPanelRequest,\n type PivotContextMenuRequest,\n type PivotTooltipRequest,\n type PivotFilterCondition,\n type PivotFilterConditionOperator,\n type PivotTableOptions,\n createPivotFieldCatalog,\n createEmptyPivotFieldLayout,\n movePivotField,\n removePivotField,\n resolvePivotDimensionKey,\n resolvePivotFieldLayoutOptions,\n getValueByDataIndex,\n type BuiltInPivotAggregatorName,\n type PivotFieldArea,\n type PivotFieldLayout,\n type PivotModel,\n} from \"@canvas-components/pivot-table\";\nimport {\n ReactFilterPanel,\n ReactResizablePanels,\n type ReactFilterConditionOperator,\n type ReactFilterPanelRequest,\n type ReactFilterPanelValue,\n} from \"@canvas-components/react-components\";\nimport type { ReactPivotTableProps, ReactPivotTableRef } from \"../types\";\nimport { PivotContextMenu } from \"../features/context-menu/pivot-context-menu\";\nimport { PivotTooltip } from \"../features/tooltip/pivot-tooltip\";\nimport { PivotFieldPanel } from \"../features/field-panel/pivot-field-panel\";\nimport { PivotTitlebar } from \"../features/titlebar/pivot-titlebar\";\nimport {\n PivotChartPanel,\n type PivotChartItem,\n} from \"../features/chart/pivot-chart-panel\";\nimport type { PivotChartType } from \"../features/chart/pivot-chart-data\";\n\nfunction ReactPivotTableInner<RecordType>(\n props: ReactPivotTableProps<RecordType>,\n ref: ForwardedRef<ReactPivotTableRef<RecordType>>,\n) {\n const { className, style, customization, title, ...tableOptions } = props;\n const containerRef = useRef<HTMLDivElement | null>(null);\n const tableRef = useRef<PivotTable<RecordType> | null>(null);\n const customizationOptions =\n customization && typeof customization === \"object\"\n ? customization\n : undefined;\n const customizationEnabled =\n customization === true || customizationOptions != null;\n const [internalPanelOpen, setInternalPanelOpen] = useState(\n customizationOptions?.defaultOpen ?? false,\n );\n const [fieldPanelWidth, setFieldPanelWidth] = useState(\n () => customizationOptions?.panelWidth ?? 320,\n );\n const [chartPanelWidth, setChartPanelWidth] = useState(360);\n const [charts, setCharts] = useState<PivotChartItem[]>([]);\n const [chartModel, setChartModel] = useState<PivotModel<RecordType> | null>(\n null,\n );\n const chartIdRef = useRef(0);\n const [internalLayout, setInternalLayout] = useState<PivotFieldLayout>(\n () => customizationOptions?.defaultLayout ?? createEmptyPivotFieldLayout(),\n );\n const [fieldOverrides, setFieldOverrides] = useState<\n Record<string, { title?: string; aggregator?: BuiltInPivotAggregatorName }>\n >({});\n const [filterRequest, setFilterRequest] =\n useState<PivotDimensionFilterPanelRequest | null>(null);\n const [contextMenuRequest, setContextMenuRequest] =\n useState<PivotContextMenuRequest | null>(null);\n const [tooltipRequest, setTooltipRequest] =\n useState<PivotTooltipRequest | null>(null);\n const panelOpen = customizationOptions?.open ?? internalPanelOpen;\n const fieldLayout = customizationOptions?.layout ?? internalLayout;\n const baseFields = useMemo(() => {\n const catalog = createPivotFieldCatalog({\n fields: customizationOptions?.fields,\n filterDimensions: tableOptions.filterDimensions,\n columns: tableOptions.columns,\n rows: tableOptions.rows,\n indicators: tableOptions.indicators,\n });\n return catalog.map((field) =>\n field.indicator\n ? field\n : {\n ...field,\n indicator: {\n aggregator: inferFieldAggregator(\n tableOptions.dataSource,\n field.dataIndex,\n ),\n },\n },\n );\n }, [\n customizationOptions?.fields,\n tableOptions.filterDimensions,\n tableOptions.columns,\n tableOptions.rows,\n tableOptions.indicators,\n tableOptions.dataSource,\n ]);\n const fields = useMemo(\n () =>\n baseFields.map((field) => {\n const fieldKey = resolvePivotDimensionKey(field);\n const override = fieldOverrides[fieldKey];\n if (!override) return field;\n return {\n ...field,\n title: override.title ?? field.title,\n indicator: {\n ...field.indicator,\n title: override.title ?? field.indicator?.title,\n aggregator: override.aggregator ?? field.indicator?.aggregator,\n },\n };\n }),\n [baseFields, fieldOverrides],\n );\n const customizedOptions = useMemo(\n () =>\n customizationEnabled\n ? resolvePivotFieldLayoutOptions(fields, fieldLayout)\n : null,\n [customizationEnabled, fieldLayout, fields],\n );\n const refreshChartModel = () => {\n const nextModel = tableRef.current?.getPivotModel() ?? null;\n setChartModel((current) => (current === nextModel ? current : nextModel));\n };\n const options = {\n ...tableOptions,\n ...customizedOptions,\n ui: {\n onFilterPanelRequest: setFilterRequest,\n onContextMenuRequest: setContextMenuRequest,\n onTooltipRequest: setTooltipRequest,\n },\n onFilterChange: (event) => {\n tableOptions.onFilterChange?.(event);\n refreshChartModel();\n },\n onSortChange: (event) => {\n tableOptions.onSortChange?.(event);\n refreshChartModel();\n },\n } as PivotTableOptions<RecordType>;\n const sharedFilterRequest = useMemo(() => {\n if (!filterRequest) return null;\n const { axis, dimensionKey } = filterRequest;\n return toSharedFilterRequest(filterRequest, (value) => {\n setFilterRequest((current) =>\n current?.axis === axis && current.dimensionKey === dimensionKey\n ? { ...current, value }\n : current,\n );\n });\n }, [filterRequest]);\n\n const setPanelOpen = (open: boolean) => {\n if (customizationOptions?.open === undefined) setInternalPanelOpen(open);\n customizationOptions?.onOpenChange?.(open);\n };\n const addChart = (type: PivotChartType) => {\n setCharts((current) => {\n if (current.some((chart) => chart.type === type)) {\n return current;\n }\n chartIdRef.current += 1;\n return [...current, { id: `pivot-chart-${chartIdRef.current}`, type }];\n });\n refreshChartModel();\n };\n const removeChart = (chartId: string) => {\n setCharts((current) => current.filter((chart) => chart.id !== chartId));\n };\n const applyLayout = (next: PivotFieldLayout) => {\n if (customizationOptions?.layout === undefined) setInternalLayout(next);\n customizationOptions?.onLayoutChange?.(next);\n };\n const moveField = (\n fieldKey: string,\n area: PivotFieldArea,\n index?: number,\n sourceArea?: PivotFieldArea,\n ) => {\n applyLayout(movePivotField(fieldLayout, fieldKey, area, index, sourceArea));\n };\n const removeField = (fieldKey: string) => {\n applyLayout(removePivotField(fieldLayout, fieldKey));\n };\n const updateField = (\n fieldKey: string,\n patch: { title?: string; aggregator?: BuiltInPivotAggregatorName },\n ) => {\n setFieldOverrides((current) => ({\n ...current,\n [fieldKey]: { ...current[fieldKey], ...patch },\n }));\n const field = fields.find(\n (item) => resolvePivotDimensionKey(item) === fieldKey,\n );\n if (field) {\n customizationOptions?.onFieldChange?.({\n ...field,\n title: patch.title ?? field.title,\n indicator: {\n ...field.indicator,\n title: patch.title ?? field.indicator?.title,\n aggregator: patch.aggregator ?? field.indicator?.aggregator,\n },\n });\n }\n };\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const table = new PivotTable(container, options);\n table.mount();\n tableRef.current = table;\n refreshChartModel();\n return () => {\n table.destroy();\n tableRef.current = null;\n setChartModel(null);\n };\n }, []);\n\n useEffect(() => {\n const table = tableRef.current;\n if (!table) return;\n table.updateOptions(options);\n refreshChartModel();\n }, [options]);\n\n useEffect(() => {\n if (customizationOptions?.panelWidth != null) {\n setFieldPanelWidth(customizationOptions.panelWidth);\n }\n }, [customizationOptions?.panelWidth]);\n\n useImperativeHandle(\n ref,\n () => ({\n getPivotModel: () => tableRef.current?.getPivotModel() ?? null,\n getVisibleRowNodes: () => tableRef.current?.getVisibleRowNodes() ?? [],\n getVisibleColumnNodes: () =>\n tableRef.current?.getVisibleColumnNodes() ?? [],\n getCellRecords: (params) =>\n tableRef.current?.getCellRecords(params) ?? [],\n getSelection: () => tableRef.current?.getSelection() ?? null,\n setSelection: (selection) =>\n tableRef.current?.setSelection(selection) ?? null,\n getFilters: () => tableRef.current?.getFilters() ?? null,\n getDebugSnapshot: () => tableRef.current?.getDebugSnapshot() ?? null,\n getSorts: () => tableRef.current?.getSorts() ?? [],\n resetSorters: () => tableRef.current?.resetSorters() ?? [],\n selectCell: (address, extend) =>\n tableRef.current?.selectCell(address, extend) ?? null,\n selectNode: (axis, nodeId) =>\n tableRef.current?.selectNode(axis, nodeId) ?? null,\n scrollToCell: (address) =>\n tableRef.current?.scrollToCell(address) ?? false,\n getCellValue: (address) => tableRef.current?.getCellValue(address),\n expandRowNode: (nodeId) =>\n tableRef.current?.expandRowNode(nodeId) ?? false,\n collapseRowNode: (nodeId) =>\n tableRef.current?.collapseRowNode(nodeId) ?? false,\n expandColumnNode: (nodeId) =>\n tableRef.current?.expandColumnNode(nodeId) ?? false,\n collapseColumnNode: (nodeId) =>\n tableRef.current?.collapseColumnNode(nodeId) ?? false,\n expandAll: (axis) => tableRef.current?.expandAll(axis) ?? 0,\n collapseAll: (axis) => tableRef.current?.collapseAll(axis) ?? 0,\n setDimensionFilter: (axis, dimensionKey, filter) =>\n tableRef.current?.setDimensionFilter(axis, dimensionKey, filter) ??\n null,\n getDimensionFilterOptions: (axis, dimensionKey) =>\n tableRef.current?.getDimensionFilterOptions(axis, dimensionKey) ?? [],\n resetFilters: () => tableRef.current?.resetFilters() ?? null,\n setDimensionSort: (axis, dimensionKey, direction) =>\n tableRef.current?.setDimensionSort(axis, dimensionKey, direction) ?? [],\n setIndicatorSort: (params) =>\n tableRef.current?.setIndicatorSort(params) ?? [],\n exportCsv: (exportOptions) =>\n tableRef.current?.exportCsv(exportOptions) ?? \"\",\n exportXlsx: (exportOptions) =>\n tableRef.current?.exportXlsx(exportOptions) ?? new Uint8Array(),\n getState: () => tableRef.current?.getState() ?? null,\n restoreState: (snapshot) =>\n tableRef.current?.restoreState(snapshot) ?? false,\n }),\n [],\n );\n\n return (\n <>\n <div\n className={`react-pivot-table${className ? ` ${className}` : \"\"}`}\n style={{\n width: props.width ?? \"100%\",\n height: props.height ?? \"100%\",\n ...style,\n }}\n >\n <PivotTitlebar\n title={title}\n showFieldSettings={customizationEnabled}\n fieldPanelOpen={panelOpen}\n onToggleFieldPanel={() => setPanelOpen(!panelOpen)}\n onAddChart={addChart}\n chartTypes={charts.map((chart) => chart.type)}\n />\n <div className=\"react-pivot-table__content\">\n <ReactResizablePanels\n animated\n className=\"react-pivot-table-customization\"\n style={{ width: \"100%\", height: \"100%\" }}\n sizes={{\n \"chart-panel\": chartPanelWidth,\n \"field-panel\": fieldPanelWidth,\n }}\n onSizesChange={(nextSizes) => {\n const nextChartSize = nextSizes[\"chart-panel\"];\n if (typeof nextChartSize === \"number\") {\n setChartPanelWidth(nextChartSize);\n }\n const nextFieldSize = nextSizes[\"field-panel\"];\n if (panelOpen && typeof nextFieldSize === \"number\") {\n setFieldPanelWidth(nextFieldSize);\n }\n }}\n panels={[\n {\n id: \"pivot-table\",\n minSize: 320,\n content: (\n <div\n ref={containerRef}\n className=\"react-pivot-table-customization__table\"\n />\n ),\n },\n ...(charts.length > 0\n ? [\n {\n id: \"chart-panel\",\n size: chartPanelWidth,\n minSize: 300,\n maxSize: 640,\n className:\n \"react-pivot-table-customization__chart-column\",\n content: (\n <PivotChartPanel\n charts={charts}\n model={chartModel}\n rows={options.rows}\n columns={options.columns}\n indicators={options.indicators}\n onRemove={removeChart}\n />\n ),\n },\n ]\n : []),\n ...(customizationEnabled\n ? [\n {\n id: \"field-panel\",\n collapsed: !panelOpen,\n size: fieldPanelWidth,\n minSize: 280,\n maxSize: 520,\n className:\n \"react-pivot-table-customization__panel-column\",\n content: (\n <PivotFieldPanel\n fields={fields}\n layout={fieldLayout}\n onClose={() => setPanelOpen(false)}\n onMove={moveField}\n onRemove={removeField}\n onFieldChange={updateField}\n />\n ),\n },\n ]\n : []),\n ]}\n />\n </div>\n </div>\n <ReactFilterPanel request={sharedFilterRequest} />\n <PivotContextMenu request={contextMenuRequest} />\n <PivotTooltip request={tooltipRequest} />\n </>\n );\n}\n\n/** PivotTable React 适配组件。 */\nexport const ReactPivotTable = forwardRef(ReactPivotTableInner) as <\n RecordType = Record<string, unknown>,\n>(\n props: ReactPivotTableProps<RecordType> & {\n ref?: ForwardedRef<ReactPivotTableRef<RecordType>>;\n },\n) => ReturnType<typeof ReactPivotTableInner>;\n\nexport function toSharedFilterRequest(\n request: PivotDimensionFilterPanelRequest | null,\n onValueChange?: (value: PivotDimensionFilter) => void,\n): ReactFilterPanelRequest | null {\n if (!request) return null;\n return {\n columnTitle: request.title,\n anchorRect: {\n x: request.x,\n y: request.y,\n width: request.width,\n height: 40,\n },\n value: toSharedValue(request.value),\n filterOptionImmediateApply: request.filterOptionImmediateApply,\n options: request.options,\n texts: defaultFilterTexts,\n onApply: (value) => {\n const next = toPivotFilter(value);\n onValueChange?.(next);\n request.onApply(next);\n },\n onReset: () => {\n onValueChange?.({});\n request.onReset();\n },\n onClose: request.onCancel,\n };\n}\n\nfunction toSharedValue(value: PivotDimensionFilter): ReactFilterPanelValue {\n return {\n keyword: value.searchKeyword ?? \"\",\n mode: value.searchExact ? \"exact\" : \"fuzzy\",\n searchExact: value.searchExact,\n selectedKeys: value.selectedKeys ?? [],\n filterType:\n value.condition && value.condition.operator !== \"none\"\n ? \"condition\"\n : \"value\",\n conditionOperator: toSharedOperator(value.condition?.operator),\n conditionValue: stringifyConditionValue(value.condition?.value),\n conditionSecondValue: stringifyConditionValue(value.condition?.secondValue),\n conditionRelation: value.conditionRelation,\n secondConditionOperator: toSharedOperator(value.secondCondition?.operator),\n secondConditionValue: stringifyConditionValue(value.secondCondition?.value),\n secondConditionSecondValue: stringifyConditionValue(\n value.secondCondition?.secondValue,\n ),\n conditions: value.conditions?.map((condition) => ({\n operator: toSharedOperator(condition.operator),\n value: stringifyConditionValue(condition.value),\n secondValue: stringifyConditionValue(condition.secondValue),\n })),\n };\n}\n\nfunction toPivotFilter(value: ReactFilterPanelValue): PivotDimensionFilter {\n if (value.filterType === \"condition\") {\n return {\n condition: toPivotCondition(\n value.conditionOperator,\n value.conditionValue,\n value.conditionSecondValue,\n ),\n secondCondition: toPivotCondition(\n value.secondConditionOperator,\n value.secondConditionValue,\n value.secondConditionSecondValue,\n ),\n conditions: value.conditions?.map((condition) =>\n toPivotCondition(\n condition.operator,\n condition.value,\n condition.secondValue,\n ),\n ),\n conditionRelation: value.conditionRelation,\n };\n }\n return {\n selectedKeys: value.selectedKeys ?? [],\n searchKeyword: value.keyword,\n searchExact: value.searchExact,\n };\n}\n\nfunction toPivotCondition(\n operator: ReactFilterConditionOperator | undefined,\n value: string | undefined,\n secondValue: string | undefined,\n): PivotFilterCondition {\n return {\n operator: toPivotOperator(operator),\n value,\n secondValue,\n };\n}\n\nfunction toSharedOperator(\n operator: PivotFilterConditionOperator | undefined,\n): ReactFilterConditionOperator {\n const map: Record<\n PivotFilterConditionOperator,\n ReactFilterConditionOperator\n > = {\n none: \"none\",\n equals: \"eq\",\n notEquals: \"neq\",\n contains: \"includes\",\n notContains: \"notIncludes\",\n startsWith: \"startsWith\",\n endsWith: \"endsWith\",\n greaterThan: \"gt\",\n greaterThanOrEqual: \"gte\",\n lessThan: \"lt\",\n lessThanOrEqual: \"lte\",\n between: \"between\",\n blank: \"blank\",\n notBlank: \"notBlank\",\n notBetween: \"notBetween\",\n notStartsWith: \"notStartsWith\",\n notEndsWith: \"notEndsWith\",\n };\n return map[operator ?? \"none\"];\n}\n\nfunction toPivotOperator(\n operator: ReactFilterConditionOperator | undefined,\n): PivotFilterConditionOperator {\n const map: Partial<\n Record<ReactFilterConditionOperator, PivotFilterConditionOperator>\n > = {\n none: \"none\",\n eq: \"equals\",\n neq: \"notEquals\",\n includes: \"contains\",\n notIncludes: \"notContains\",\n startsWith: \"startsWith\",\n endsWith: \"endsWith\",\n gt: \"greaterThan\",\n gte: \"greaterThanOrEqual\",\n lt: \"lessThan\",\n lte: \"lessThanOrEqual\",\n between: \"between\",\n blank: \"blank\",\n notBlank: \"notBlank\",\n notBetween: \"notBetween\",\n notStartsWith: \"notStartsWith\",\n notEndsWith: \"notEndsWith\",\n };\n return map[operator ?? \"none\"] ?? \"none\";\n}\n\nfunction stringifyConditionValue(value: unknown) {\n return value == null ? \"\" : String(value);\n}\n\nconst defaultFilterTexts = {\n title: \"过滤\",\n valueFilterTab: \"按值\",\n conditionFilterTab: \"按条件\",\n searchPlaceholder: \"搜索过滤项\",\n optionsLabel: \"过滤项\",\n emptyOptions: \"暂无过滤项\",\n loadingOptions: \"加载中\",\n exactToggleLabel: \"精确匹配\",\n allOptionLabel: \"全部\",\n blankOptionLabel: \"空\",\n notBlankOptionLabel: \"非空\",\n relationLabel: \"条件关系\",\n firstConditionLabel: \"条件一\",\n secondConditionLabel: \"条件二\",\n firstValuePlaceholder: \"请输入条件值\",\n secondValuePlaceholder: \"请输入第二个值\",\n relationAndLabel: \"且\",\n relationOrLabel: \"或\",\n resetAction: \"重置\",\n applyAction: \"确定\",\n conditionLabel: \"条件\",\n addConditionAction: \"新增条件\",\n deleteConditionAction: \"删除条件\",\n};\n\nfunction inferFieldAggregator<RecordType>(\n records: RecordType[],\n dataIndex: Parameters<typeof getValueByDataIndex>[1],\n): BuiltInPivotAggregatorName {\n const value = records\n .map((record) => getValueByDataIndex(record, dataIndex))\n .find((item) => item != null);\n return typeof value === \"number\" ? \"sum\" : \"count\";\n}\n"]}
|